t('Node Annotation'), 'description'=>t('Adjust node annotation options'), 'position'=>'right', 'page callback'=>'system_admin_menu_block_page', 'access callback'=>'user_access', 'access arguments'=>array('administer site configuration') ); $items['admin/settings/annotate']=array( 'title'=>t('Annotation Settings'), 'description'=>t('Changes how annotation behave'), 'page callback'=>'drupal_get_form', 'page arguments'=>array('annotate_admin_settings'), 'access callback'=>'user_access', 'access arguments'=>array('administer site configuration') ); return $items; } /** *define the settings form */ function annotate_admin_settings() { //setting the nodes which can use annotation $form['annotate_nodetypes']=array( '#type'=>'checkboxes', '#title'=>t('Users may annotate these node types'), '#description'=>t('A text field will appear to write down note about these node annotation'), '#options'=>node_get_types('names',NULL,FALSE), '#default_value'=>variable_get('annotate_nodetypes',array('story')) ); //preparing the nodes for deleting the annotation $form['annotate_deletion']=array( '#type'=>'radios', '#title'=>t('Annotation will be deleted'), '#description'=>t('Select a method for deleting annotations'), '#options'=>array( 0=>t('Never'),1=>t('Randomly'),2=>t('After 30 Days') ), '#default_value'=>variable_get('annotate_deletion',0) ); //setting the annotation limit per node $form['annotate_limit_per_node']=array( '#type'=>'textfield', '#title'=>t('Annotation per node'), '#description'=>t('Enetr the maximum no of annotation displayed in a node at a time (0 for no limit).'), '#default_value'=>variable_get('annotate_limit_per_node',1), '#size'=>3 ); //validation of settings form $form['validate']=array( 'annotate_admin_settings_validate'=>array() ); //hidden form to pass the selected values of the settings $form['array_filter']=array('#type'=>'hidden'); return system_settings_form($form); } /** *validate the settings form */ function annotate_admin_settings_validate($form_id,$form_values) { if(!is_numeric($form_values['annotate_limit_per_node'])) { form_set_error('annotate_limit_per_node',t('Please enter a number')); } } /** *Implementaion of hook_nodeapi() */ function annotate_nodeapi(&$node,$op,$teaser,$page) { switch($op) { case 'view': global $user; //if only the node summary is being displayed or if the //user is an anonymous user (not logged in), abort. if($teaser || $user->uid==0) { break; } $types_to_annotate=variable_get('annotate_nodetypes',array('story')); if(!in_array($node->type,$types_to_annotate)) { break; } //get previously saved note, if any $result=db_query("SELECT note FROM {annotation} WHERE uid=%d AND nid=%d",$user->uid,$node->nid); $node->annotation=db_result($result); //add our form as a content item $node->content['annotation form']=array( '#value'=>drupal_get_form('annotate_entry_form',$node), '#weight'=>10 ); } } /** *Define the form for entering an annotation */ function annotate_entry_form($node) { $form['annotate']=array( '#type'=>'fieldset', '#title'=>t('Annotations') ); $form['annotate']['nid']=array( '#type'=>'value', '#value'=>$node->nid ); $form['annotate']['note']=array( '#type'=>'textarea', '#title'=>t('Notes'), '#default_value'=>$node->annotation, '#description'=>t('make your personal annotations here which can be viewed only by you and the administrator') ); $form['annotate']['submit']=array( '#type'=>'submit', '#value'=>t('Update'), ); $form['#submit']=array('annotate_entry_form_submit'); return $form; } function annotate_entry_form_submit($form_id,$form_values) { global $user; //echo ""; $nid=$form_values["value"]["nid"]; $note=$form_values["default_values"]["note"]; /*echo "
"; print_r($from_value); echo ""; */ //watchdog db_query("DELETE FROM {annotation} WHERE uid=%d and nid=%d",$user->uid,$nid); db_query("INSERT INTO {annotation} (uid,nid,note,timestamp) VALUES (%d,%d,'%s',%d)",$user->uid,$nid,$note,time()); } ?>