--- /checkout/checkout.module +++ checkout.module @@ -100,6 +100,15 @@ '#default_value' => FALSE, '#description' => t('Check this box if you want to keep this document locked in your name after submitting it.'), ); + $node = $form['#node']; + //here we add a checkbox to disable or enable checkouts for this node + $form['checkout_lockable'] = array( + '#type' => 'checkbox', + '#title' => t('Make this file lockable'), + '#weight' => 22, // Place immediately after log message. + '#default_value' => checkout_lockable_state($node->nid), + '#description' => t('Check this box if you want only one person to be able to edit at a time.'), + ); } } else if ($form_id == 'node_configure') { @@ -150,6 +159,8 @@ else if ($op == 'update') { checkout_release($node->nid, $user->uid, TRUE); } + //store the preference for this node's lockability... if 0 this node will not be checked out at all... + checkout_lockable($node->nid, $node->checkout_lockable); break; case 'delete': @@ -286,7 +297,8 @@ * FALSE, if a document has already been locked by someone else. */ function checkout_node($nid, $uid) { - if ($lock = checkout_fetch_lock($nid)) { + //add check if node is lockable + if ($lock = checkout_fetch_lock($nid) && checkout_lockable_state($nid)) { // Node is already locked. // Deny editing this node even if the node is locked by the same user. @@ -309,7 +321,8 @@ return FALSE; } } - else { + //check again if node is lockable + elseif (checkout_lockable_state($nid)) { // Lock node. db_query("INSERT INTO {checkout} (nid, uid, timestamp) VALUES (%d, %d, %d)", $nid, $uid, time()); @@ -329,6 +342,35 @@ db_query("UPDATE {checkout} SET persistent = 1 WHERE nid = %d", $nid); } + +/** + * Set a document as lockable or not. + * + * @param $nid + * The node id to set lockable. + */ +function checkout_lockable($nid, $lockable) { + $exists=db_result(db_query("SELECT * FROM {checkout_lockable} WHERE nid = %d", $nid)); + if (!$exists) { + db_query("INSERT INTO {checkout_lockable} (nid, lockable) VALUES (%d, %d)", $nid, $lockable); + } else { + db_query("UPDATE {checkout_lockable} SET lockable = %d WHERE nid = %d", $lockable, $nid); + } +} + + +/** + * Is a document lockable?. + * + * @param $nid + * The node id to check. + */ +function checkout_lockable_state($nid) { + if (db_result(db_query("SELECT * FROM {checkout_lockable} WHERE lockable = 1 AND nid = %d", $nid))) { + return TRUE; + } +} + /** * Release a locked node. *