'freeze-node', 'type' => MENU_CALLBACK, 'access' => TRUE, 'callback' => 'freeze_node_callback' ); $items[] = array( 'path' => 'admin/settings/node-freeze', 'type' => MENU_NORMAL_ITEM, 'access' => user_access('administer site configuration'), 'description'=>t('Manage the node freeze module'), 'title' => t('Node freeze'), 'callback' => 'drupal_get_form', 'callback arguments' => array('freeze_node_settings') ); } return $items; } /** * A basic settings form */ function freeze_node_settings(){ $form['node_freeze_remove_label']=array( '#title'=>t('Label for un-freezing node'), '#type'=>'textfield', '#default_value' => variable_get('node_freeze_remove_label',t('Un-freeze')) ); $form['node_freeze_add_label']=array( '#title'=>t('Label for freezing node'), '#type'=>'textfield', '#default_value' => variable_get('node_freeze_add_label',t('Freeze')) ); return system_settings_form($form); } /** * Handle the menu callback, either freeze or unfreeze the node */ function freeze_node_callback($nid=0,$action='toggle',$silent=false){ if ($nid){ $node = node_load($nid); if (node_access('update', $node) && user_access('can freeze nodes they can edit')){ $origional_state = $node->comment; if ($action=='toggle'){ if ($node->comment == COMMENT_NODE_READ_ONLY){ $action = 'thaw'; } if ($node->comment == COMMENT_NODE_READ_WRITE){ $action = 'freeze'; } } switch($action){ case 'thaw' : $node->comment = COMMENT_NODE_READ_WRITE; break; case 'freeze' : $node->comment = COMMENT_NODE_READ_ONLY; break; case 'disable' : $node->comment = COMMENT_NODE_DISABLED; break; } if ($node->comment != $origional_state){ node_save($node); if (!$silent){ drupal_set_message(t('Reply settings have been updated')); drupal_goto('node/'.$nid); } } } } } /** * Add freeze / unfreeze links to the node as requried. */ function freeze_node_link($type, $node = NULL, $teaser = FALSE){ $links = array(); //show these links for any node that has commenting enabled. if ($type=='node' && $node->comment){ if (node_access('update', $node) && user_access('can freeze nodes they can edit')){ if ($node->comment == COMMENT_NODE_READ_ONLY){ $label = variable_get('node_freeze_remove_label',t('Un-freeze')); $link_key = 'un-freeze'; } else { $label = variable_get('node_freeze_add_label',t('Freeze')); $link_key = 'freeze'; } $links[$link_key] = array( 'title' => $label, 'href' => "freeze-node/$node->nid", ); } } return $links; } /** * Define a set of operations so you can do this stuff en-mass on the admin/content/node form */ function freeze_node_node_operations() { $operations = array( 'freeze_hide' => array( 'label' => t('Freeze and hide comments'), 'callback' => 'freeze_node_operations_callback_remove', ), 'freeze' => array( 'label' => t('Freeze comments'), 'callback' => 'freeze_node_operations_callback_freeze', ), 'unfreeze' => array( 'label' => t('Unfreeze (enable) comments'), 'callback' => 'freeze_node_operations_callback_unfreeze', ), ); return $operations; } /** * Disable comments completely on each node in turn */ function freeze_node_operations_callback_remove($nids){ foreach ($nids as $nid) { freeze_node_callback($nid,'disable',TRUE); } } /** * Freeze each node in turn */ function freeze_node_operations_callback_freeze($nids){ foreach ($nids as $nid) { freeze_node_callback($nid,'freeze',TRUE); } } /** * Thaw each node in turn */ function freeze_node_operations_callback_unfreeze($nids){ foreach ($nids as $nid) { freeze_node_callback($nid,'thaw',TRUE); } }