2.0, ); } /** * Implementation of hook_node_info() * * This tripal_pub_node_info, is a simple node that describes the functionallity of the module. It specifies * that the title (Project Name) and body (Description) are set to true so the information can be * entered * */ function tripal_pub_node_info() { return array( 'tripal_pub' => array( 'name' => t('Publication'), 'module' => 'tripal_pub', 'description' => t('A module for interfacing the GMOD chado database with Drupal, providing viewing of publications'), 'has_title' => TRUE, 'title_label' =>t('Title'), 'had_body' => FALSE, ) ); } /** * Implementation of tripal_pub_form(). * * This form takes the following information:A Publication Title,Volume title,Volume,Series Name, * Issue,Publication Year,Pages where the Article is located, Miniref,Type-Id, if the article is Obsolete, * Publishing company,Pubplication Place and a Uniquename for the the instance. It then puts the * infromation into the Chado_project database table based on its 'pub_id'. * * @parm &$node * The node that is created when the database is initialized * * @parm $form_state * The state of the form, that has the user entered information that is neccessary for, setting * up the database of the project * * @return $form * The information that was enterd allong with * */ function tripal_pub_form(&$node, $form_state) { $type = node_get_types('type', $node); //define form elements for the node's title and body. $form['title'] = array( '#type' => 'textfield', '#title' => t('Article Title'), '#description' => t('Title Heading'), '#required' => TRUE, '#default_value' => $node->title ); $form['volumetitle'] = array( '#type' => 'textfield', '#title' => t('Volume Title'), '#description' => t('Title of part if one of a series.'), '#required' => TRUE, '#default_value' => isset($node->pub_id->volumetitle) ? $node->pub_id->volumetitle : '' ); $form['volume'] = array( '#type' => 'textfield', '#title' => t('Volume'), '#required' => FALSE, '#default_value' => isset($node->pub_id->volume) ? $node->pub_id->volume : '' ); $form['series_name'] = array( '#type' => 'textfield', '#title' => t('Series Name'), '#required' => TRUE, '#default_value' => isset($node->pub_id->series_name) ? $node->pub_id->series_name : '' ); $form['issue'] = array( '#type' => 'textfield', '#title' => t('Issue'), '#required' => FALSE, '#default_value' => isset($node->pub_id->issue) ? $node->pub_id->issue : '' ); $form['pyear'] = array( '#type' => 'textfield', '#title' => t('Publication Year'), '#required' => FALSE, '#default_value' => isset($node->pub_id->pyear) ? $node->pub_id->pyear : '' ); $form['pages'] = array( '#type' => 'textfield', '#title' => t('Pages'), '#description' => t('Page number range[s], e.g. 457--459, viii + 664pp, lv--lvii.'), '#required' => TRUE, '#default_value' => isset($node->pub_id->pages) ? $node->pub_id->pages : '' ); $form['miniref'] = array( '#type' => 'textfield', '#title' => t('Mini-Ref'), '#required' => FALSE, '#default_value' => isset($node->pub_id->miniref) ? $node->pub_id->miniref : '' ); $form['uniquename'] = array( '#type' => 'textfield', '#title' => t('Unique Name'), '#required' => TRUE, '#default_value' => isset($node->pub_id->uniquename) ? $node->pub_id->uniquename : '' ); $values= array( 'cv_id'=>array( 'name'=>'publication'), ); //population select list with 'cvterm' names $result = tripal_core_chado_select ('cvterm', array('cvterm_id', 'name'), $values); foreach ($result as $value) { $newArray[$value->cvterm_id]=$value->name; //options for the select list } $form['type_id'] = array( '#type' => 'select', '#title' => t('Publication Type'), '#options' => $newArray, '#description' => t('Type of publication (book, journal, poem, graffiti, etc). Uses pub cv.'), '#required' => TRUE, '#default_value'=>isset($node->pub_id->type_id) ? $node->pub_id->type_id : '' ); $form['is_obsolete'] = array( '#type' => 'checkbox', '#title' => t('Is Obsolete?(Check for Yes)'), '#required' => TRUE, '#default_value'=>isset($node->pub_id->is_obsolete) ? $node->pub_id->is_obsolete : FALSE ); $form['publisher'] = array( '#type' => 'textfield', '#title' => t('Publisher Name'), '#required' => FALSE, '#default_value' => isset($node->pub_id->publisher) ? $node->pub_id->publisher : '' ); $form['pubplace'] = array( '#type' => 'textfield', '#title' => t('Place of Publication'), '#required' => FALSE, '#default_value' => isset($node->pub_id->pubplace) ? $node->pub_id->pubplace : '' ); return $form; } /** * Implements tripal_pub_help() * * This function simply states, in HTML tags, the creator of the the module and the contact * for the programmer * * @parm $path * The absolute path of the module and help information * * @parm $arg * The argument */ function tripal_pub_help($path, $arg) { switch ($path) { case 'admin/help#tripal_pub': return '
'. t('Module Created By:Chad Krilow (e-mail:cnk046@mail.usask.ca)') .'
'; break; } } /** * Implements hook_pub_perm() * * This function sets the permission for the user to access the information in the database. * This includes creating, inserting, deleting and updating of information in the database * */ function tripal_pub_perm() { return array('create tripal_pub', 'edit own tripal_pub'); } /** * Implements tripal_project_access() * * This function sets the access permission for database operations. * * @parm $op * The operation that is to be performed * * @parm $node * The specific node which is to have the operation performed * * @parm $account * The account of the user that is performing the operations * * @return * True if a operation was performed, else False * */ function tripal_pub_access($op, $node, $account) { if ($op == 'create') { // Only users with permission to do so may create this node type. return user_access('create tripal_pub', $account); } // Users who create a node may edit or delete it later, assuming they have the // necessary permissions. if ($op == 'update' || $op == 'delete') { if (user_access('edit own tripal_pub',$account) && ($account->uid == $node->uid)) { return TRUE; } } } /** * Implementation of tripal_pub_insert() * * This function takes the user entered information and inserts it into the database * * @parm $node * Then node which has the information stored within the node-ID * */ function tripal_pub_insert($node) { $values = array( 'title' => $node->title, 'volumetitle' => $node->volumetitle, 'volume'=>$node->volume, 'series_name'=>$node->series_name, 'issue'=>$node->issue, 'pyear'=>$node->pyear, 'pages'=>$node->pages, 'miniref'=>$node->miniref, 'type_id'=>$node->type_id, 'is_obsolete'=>$node->is_obsolete, 'publisher'=>$node->publisher, 'pubplace'=>$node->pubplace, 'uniquename' => $node->uniquename ); //inserts info into chado table. $result = tripal_core_chado_insert('pub',$values); //inserts the row of vid,nid,project_id into the chado_project table db_query("INSERT INTO {chado_pub} (nid, vid, pub_id) VALUES (%d, %d, %d)", $node->nid, $node->vid, $result['pub_id'] ); } /** * Implementation of tripal_pub_delete(). * * This function takes a node that is linked to a publication-Id, and if 'Delete' is selected * in the 'Edit' section of the page, the Selected publication is deleted from the database. * * @param $node * The node that is to be deleted */ function tripal_pub_delete($node) { // Matching all revision, by using the node's pub_id. $values = array( 'pub_id' => $node->pub_id->pub_id, ); //deleting row in chado table tripal_core_chado_delete('pub',$values); //deleteing in drupal chado_project table db_query('DELETE FROM {chado_pub} WHERE nid = %d', $node->nid); } /** *Implementation of tripal_pub_update(). * * This function updates the node that is to be modified. All the modified aspects of the * database are updated as they are edited in the 'Edit' form. * * @param $node * the node that is to be modified, all of the modified sections of the chado table are updated * */ function tripal_pub_update($node){ $values = array( 'title' => $node->title, 'volumetitle' => $node->volumetitle, 'volume'=>$node->volume, 'series_name'=>$node->series_name, 'issue'=>$node->issue, 'pyear'=>$node->pyear, 'pages'=>$node->pages, 'miniref'=>$node->miniref, 'uniquename'=>$node->uniquename, 'type_id'=>$node->type_id, 'is_obsolete'=>$node->is_obsolete, 'publisher'=>$node->publisher, 'pubplace'=>$node->pubplace, ); $result = db_fetch_object(db_query('SELECT pub_id FROM {chado_pub} WHERE nid=%d AND vid=%d ',$node->nid, $node->vid)); //extract pub_id from the chad table for update function $match = array( 'pub_id' => $result->pub_id ) ; //$table to be updated, $match is the 'pub_id', $value are the values that are to be updated $update_result = tripal_core_chado_update('pub',$match,$values); } /** * Implementation of tripal_pub_load(). * * This function is used to load the information, based on the 'pub_id', into the database * * @param $node * The node that contains the information which is to be loaded into the database, contains the * user entered information * * @return $node * The node containing the information which is to loaded in the database */ function tripal_pub_load($node) { $result = db_fetch_object(db_query('SELECT * FROM {chado_pub} WHERE nid=%d AND vid=%d ',$node->nid, $node->vid)); $values = array( 'pub_id' => $result->pub_id, ); if(empty($result->pub_id)){ drupal_set_message("Unable to find publication", 'error'); }else{ $node->pub_id = tripal_core_generate_chado_var('pub',$values); } return $node; } //----------------------------------------------------------------------------- // END OF SOFTWARE //-----------------------------------------------------------------------------