array( 'name' => t('Publication'), 'module' => 'chado_pub', 'description' => t('A module for interfacing the GMOD chado database with Drupal, providing viewing of publications'), 'title_label' => t('Article Title'), 'body_label' => t('Abstract'), 'has_title' => TRUE, 'has_body' => FALSE, ), ); } /** * Tripal-Publication-Menu * * Implemets hook_menu(): Adds menu items for the tripal_pub module menu. This section * gives the outline for the main menu of the Tripal-Publication module * * @return * An array of menu items that is visible within the Drupal Menu, returned as soon * as the program is ran */ function tripal_pub_menu() { $items = array(); $items[ 'admin/tripal/tripal_pub' ]= array( 'title' => 'Publications', 'description' => ('A module for interfacing the GMOD chado database with Drupal, providing viewing of publications'), 'page callback' => 'theme', 'page arguments' => array('tripal_pub_admin'), 'access arguments' => array('administer tripal pubs'), 'type' => MENU_NORMAL_ITEM ); $items['admin/tripal/tripal_pub/configuration'] = array( 'title' => 'Configuration', 'description' => 'Configuration for this module', 'page callback' => 'drupal_get_form', 'page arguments' => array('tripal_pub_configuration_form'), 'access arguments' => array('administer tripal pubs'), 'type' => MENU_NORMAL_ITEM ); // Automatically generate checkboxes. $items['node/add/tripal_pub/ahah_authors'] = array( 'title' => 'Add Additional Authors', 'page callback' => 'drupal_get_form', 'page arguments' => array('author_addition_fields_ahah_callback'), 'access callback' => TRUE, 'type' => MENU_CALLBACK, 'weight' => 2, ); $items['tripal_pub/js/%'] = array( 'page callback' => 'tripal_pub_js', 'page arguments' => array(2), 'access arguments' => array('access content'), 'type ' => MENU_CALLBACK, ); $items['pub_finder'] = array( 'title' => t('Publication Finder'), 'description' => t('Finds publications using remote publication databases (e.g. PubMed).'), 'page callback' => 'tripal_pub_remote_search_page', 'access arguments' => array('access content'), 'type ' => MENU_CALLBACK, ); return $items; } /** * Implements hook_theme(): Register themeing functions for this module * * * @return * An array of themeing functions to register * */ function tripal_pub_theme() { return array( 'tripal_pub_author_table' => array( 'arguments' => array('form' => NULL), ), 'publication_author' => array( 'arguments' => array('element' => NULL) ), 'tripal_pub_admin' => array( 'template' => 'tripal_pub_admin', 'arguments' => array(NULL), 'path' => drupal_get_path('module', 'tripal_pub') . '/theme' ), ); } /** * Implement hook_perm(). */ function tripal_pub_perm() { return array( 'access chado_pub content', 'create chado_pub content', 'delete chado_pub content', 'edit chado_pub content', 'administer tripal pubs', ); } /** * Implement hook_access(). * * This hook allows node modules to limit access to the node types they define. * * @param $op * The operation to be performed * * @param $node * The node on which the operation is to be performed, or, if it does not yet exist, the * type of node to be created * * @param $account * A user object representing the user for whom the operation is to be performed * * @return * TRUE * */ function chado_pub_access($op, $node, $account ) { if ($op == 'create') { if (!user_access('create chado_pub content', $account)) { return FALSE; } } if ($op == 'update') { if (!user_access('edit chado_pub content', $account)) { return FALSE; } } if ($op == 'delete') { if (!user_access('delete chado_pub content', $account)) { return FALSE; } } if ($op == 'view') { if (!user_access('access chado_pub content', $account)) { return FALSE; } } return NULL; } /** * Implementation of tripal_pub_form(). * * * * @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 tables for the publication * * @return $form * The information that was enterd allong with * */ function chado_pub_form(&$node, $form_state) { $type = node_get_types('type', $node); // Article Title. $form['title'] = array( '#type' => 'textfield', '#title' => check_plain($type->title_label), '#default_value' => $node->title, '#required' => TRUE, '#weight' => 0, ); // Abstract $form['abstract'] = array( '#title' => 'Abstract', '#type' => 'textarea', '#default_value' => isset($node->abstract) ? $node->abstract : '' ); $form['pub_id'] = array( '#type' => 'hidden', '#value' => (isset($node->pub_id)) ? $node->pub_id->pub_id : NULL , ); $form['uniquename'] = array( '#type' => 'textfield', '#title' => t('Unique Name'), '#required' => TRUE, '#description' => 'A unique name/identifier for this publication. If this article exists in pubmed, entering the pubmed ID here will ensure duplicate publication pages are not created.', '#default_value' => isset($node->pub_id->uniquename) ? $node->pub_id->uniquename : '' ); $values= array( 'cv_id' => variable_get('tripal_pub_types_cv', NULL), ); //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, '#required' => TRUE, '#default_value' => isset($node->pub_id->type_id) ? $node->pub_id->type_id : '' ); $form['author_wrapper'] = array( '#tree' => FALSE, '#prefix' => '
', '#suffix' => '
', ); // Get number of authors $author_count = empty($node->authors) ? 0 : count($node->authors); // If a new author added, add to list and update the author count. if (isset($form_state['new_author'])) { if (!isset($node->authors)) { $node->authors = array(); } $node->authors = array_merge($node->authors, array($form_state['new_author'])); $author_count++; } // If a author removed, remove from list and update the author count. $remove_delta = -1; if (!empty($form_state['remove_delta'])) { $remove_delta = $form_state['remove_delta'] - 1; unset($node->authors[$remove_delta]); // Re-number the values. $node->authors = array_values($node->authors); $author_count--; } // Container to display existing authors. $form['author_wrapper']['authors'] = array( '#prefix' => '
', '#suffix' => '
', '#theme' => 'tripal_pub_author_table', ); if (!isset($node->authors)) { if (isset($node->new_author['new_author_name'])) { $node->authors = array(); $node->authors[]['author_name'] = $node->new_author['new_author_name']; } } //Add the existing authors to the form. for ($delta = 0; $delta < $author_count; $delta++) { $author = isset($node->authors[$delta]['author_name']) ? $node->authors[$delta] : array(); $form['author_wrapper']['authors'][$delta] = tripal_pub_author_display_form($delta, $author); } if (isset($form_state['values']['edit_author'])) { // Add new authors $form['author_wrapper']['edit_author'] = array( '#type' => 'fieldset', '#title' => t('Current Publication Authors'), '#tree' => FALSE, ); // Define the form fields for the new author $form['author_wrapper']['edit_author']['edit_author'] = array( '#tree' => TRUE, //'#default_value'=> '', //'#theme' => 'author_add_author_form', ); $form['author_wrapper']['edit_author']['edit_author']['delta'] = array( '#type' => 'hidden', '#value' => $form_state['values']['edit_author']['delta'] ); $form['author_wrapper']['edit_author']['edit_author']['edit_author_name'] = array( '#type' => 'publication_author', '#title' => t('Contributing Authors'), '#default_value' => array( 'givennames' => $form_state['values']['edit_author']['author_name']['givennames'], 'surname' => $form_state['values']['edit_author']['author_name']['surname'], 'suffix' => $form_state['values']['edit_author']['author_name']['suffix'], ), '#weight' => 1, ); // We name our button 'author_more' to avoid conflicts with other modules using // AHAH-enabled buttons with the id 'more'. $form['author_wrapper']['edit_author']['author_save'] = array( '#type' => 'submit', '#value' => t('Save Author'), '#weight' => 0, '#submit' => array('tripal_pub_edit_author_submit'), '#ahah' => array( 'path' => 'tripal_pub/js/0', 'wrapper' => 'author-wrapper', 'method' => 'replace', 'effect' => 'fade', ), ); } else{ // Add new authors $form['author_wrapper']['add_author'] = array( '#type' => 'fieldset', '#title' => t('Publication Authors'), '#tree' => FALSE, ); // Define the form fields for the new author $form['author_wrapper']['add_author']['new_author'] = array( '#tree' => TRUE, //'#default_value'=> '', '#theme' => 'author_add_author_form', ); $form['author_wrapper']['add_author']['new_author']['new_author_name'] = array( '#type' => 'publication_author', '#title' => t('Contributing Authors'), '#default_value' => '', '#weight' => 1, ); // We name our button 'author_more' to avoid conflicts with other modules using // AHAH-enabled buttons with the id 'more'. $form['author_wrapper']['add_author']['author_more'] = array( '#type' => 'submit', '#value' => t('Add Author'), '#weight' => 0, '#submit' => array('tripal_pub_add_author_submit'), '#ahah' => array( 'path' => 'tripal_pub/js/0', 'wrapper' => 'author-wrapper', 'method' => 'replace', 'effect' => 'fade', ), ); } $form['volumetitle'] = array( '#type' => 'textfield', '#title' => t('Volume Title'), '#description' => t('Title of part if one of a series.'), '#default_value' => isset($node->pub_id->volumetitle) ? $node->pub_id->volumetitle : '' ); $form['volume'] = array( '#type' => 'textfield', '#title' => t('Volume'), '#default_value' => isset($node->pub_id->volume) ? $node->pub_id->volume : '' ); $form['series_name'] = array( '#type' => 'textfield', '#title' => t('Series Name'), '#default_value' => isset($node->pub_id->series_name) ? $node->pub_id->series_name : '' ); $form['issue'] = array( '#type' => 'textfield', '#title' => t('Issue'), '#default_value' => isset($node->pub_id->issue) ? $node->pub_id->issue : '' ); $form['pyear'] = array( '#type' => 'textfield', '#title' => t('Publication Year'), '#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.'), '#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['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; } /** * Implementation of tripal_pub_insert(). * * This function inserts user entered information pertaining to the Publication instance into the * 'pubauthor', 'pubprop', 'chado_pub', 'pub' talble of the database. * * @parm $node * Then node which contains the information stored within the node-ID * * */ function chado_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, 'type_id' => $node->type_id ); //inserts info into chado table $result = tripal_core_chado_insert('pub', $values); if (isset($result)) { //inserts the row of vid,nid,project_id into the chado_pub table db_query("INSERT INTO {chado_pub} (nid, vid, pub_id) VALUES (%d, %d, %d)", $node->nid, $node->vid, $result['pub_id'] ); //Aquiring information for the abstract $abstract_info = tripal_core_chado_select('cvterm', array('cvterm_id'), array('name' => 'abstract', 'cv_id' => array('name' => 'tripal') ) ); //Extracting the type_id $type_id = $abstract_info[0]->cvterm_id; //setting the abstract values $abstract = array( 'pub_id' => $result['pub_id'], 'type_id' => $type_id, 'value' => $node->abstract, 'rank' => 1 ); //inserts info into chado pubpro table for abstract tripal_core_chado_insert('pubprop', $abstract); //counter for loop for ($i=0; $i<=sizeof($node->authors); $i++) { if (isset($node->authors[$i]['author_name'] )) { $authors = array( 'pub_id' => $result['pub_id'], 'rank' => $i, 'surname' => $node->authors[$i]['author_name']['surname'], 'givennames' => $node->authors[$i]['author_name']['givennames'], 'suffix' => $node->authors[$i]['author_name']['suffix'], ); //inserts info into chado pubpro table for abstract tripal_core_chado_insert('pubauthor', $authors); } } if (!empty($node->new_author['new_author_name']['surname'])) { $authors = array( 'pub_id' => $result['pub_id'], 'rank' => $i+1, 'surname' => $node->new_author['new_author_name']['surname'], 'givennames' => $node->new_author['new_author_name']['givennames'], 'suffix' => $node->new_author['new_author_name']['suffix'], ); //inserts info into chado pubpro table for abstract tripal_core_chado_insert('pubauthor', $authors); } } else{ druapl_set_message('Pub_id was not set, No information has been set.'); } } /** * Implementation of tripal_pub_delete(). * * This function takes a node and if the delete button has been chosen by the user, the publication * and it's details will be removed.Following,given the node-ID, the instance will be deleted from * the 'chado_pub' table. * * @parm $node * Then node which contains the information stored within the node-ID * */ function chado_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); } /* * * Implements hook_update * * The purpose of the function is to allow the module to take action when an edited node is being * updated. It updates any name changes to the database tables that werec reated upon registering a Publication. * As well, the database will be changed, so the user changed information will be saved to the database. * * @param $node * The node being updated * */ function chado_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, 'type_id' => $node->type_id ); $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 chado 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); //Aquiring information for the abstract $abstract_info = tripal_core_chado_select('cvterm', array('cvterm_id'), array('name' => 'abstract', 'cv_id' => array('name' => 'tripal') ) ); //Grabbing the type id of the old abstract $type_id = $abstract_info[0]->cvterm_id; //Aquiring information for the abstract $abstract = array( 'pub_id' => $result->pub_id, 'type_id' => $type_id, 'value' => $node->abstract, 'rank' => 1 ); //$table to be updated, $match is the 'pub_id', $value are the values that are to be updated tripal_core_chado_update('pubprop', array('pub_id' => $result->pub_id, 'type_id' => $type_id, 'rank' => 1), $abstract); //counter for loop for ($i=0; $i<=sizeof($node->authors); $i++) { if (isset($node->authors[$i]['author_name'] )) { //if new insert if (isset($node->authors[$i]['is_new'])) { $authors = array( 'pub_id' => $match['pub_id'], 'rank' => $i+1, 'surname' => $node->authors[$i]['author_name']['surname'], 'givennames' => $node->authors[$i]['author_name']['givennames'], 'suffix' => $node->authors[$i]['author_name']['suffix'], ); //inserts info into chado pubpro table for abstract tripal_core_chado_insert('pubauthor', $authors); } else{ //update //$table=pubauthor to be updated, $match=author_match is the 'pub_id', $value=author are the values that are to be updated tripal_core_chado_update('pubauthor', array('pub_id' => $match['pub_id'], 'rank' => $node->authors[$i]['author_name']['rank']), $node->authors[$i]['author_name']); } } } } /** * Implementation of tripal_pub_load(). * * * @param $node * The node that is to be accessed from the database * * @return $node * The node with the information to be loaded into the database * */ function chado_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(t("Unable to find publication"), 'error'); } else{ $node->pub = tripal_core_generate_chado_var('pub', $values); // add in authors $authors = tripal_core_chado_select( 'pubauthor', array('rank', 'surname', 'givennames', 'suffix'), array('pub_id' => $node->pub->pub_id) ); foreach ($authors as $author) { $node->pub->authors[$author->rank] = $author; } ksort($node->pub->authors); } return $node; } /** * Submit handler for 'Add Author' button on node form. */ function tripal_pub_add_author_submit($form, &$form_state) { $form_state['remove_delta'] = 0; // Set the form to rebuild and run submit handlers. node_form_submit_build_node($form, $form_state); // Make the changes we want to the form state. if ($form_state['values']['author_more']) { $new_author = array(); $new_author['author_name'] = $form_state['values']['new_author']['new_author_name']; $new_author['is_new'] = TRUE; $form_state['new_author'] = $new_author; } } /** * Submit handler for 'Edit' button on node form. */ function tripal_pub_edit_author_submit($form, &$form_state) { // remember which author we're editing $delta = $form_state['values']['edit_author']['delta']; //add changes author details back $rank = $form_state['values']['authors'][$delta]['author_name']['rank']; $form_state['values']['authors'][$delta]['author_name'] = $form_state['values']['edit_author']['edit_author_name']; $form_state['values']['authors'][$delta]['author_name']['rank'] = $rank; //ensures that after they save their changes the edit fieldstate goes away unset($form_state['values']['edit_author']); // Set the form to rebuild and run submit handlers. node_form_submit_build_node($form, $form_state); } /** * Submit handler for 'Edit' button on node form. */ function tripal_pub_set_edit_author_submit($form, &$form_state) { $form_state['remove_delta'] = 0; // Make the changes we want to the form state $edit_author = array(); if (preg_match('/edit_author_(\d+)/', $form_state['clicked_button']['#name'], $matches)) { $delta = $matches[1]; $form_state['values']['edit_author'] = $form_state['values']['authors'][$delta]; $form_state['values']['edit_author']['delta'] = $delta; } // Set the form to rebuild and run submit handlers. node_form_submit_build_node($form, $form_state); } /** * Submit handler for 'Remove' button on node form. */ function tripal_pub_remove_row_submit($form, &$form_state) { if (preg_match('/remove_author_(\d+)/', $form_state['clicked_button']['#name'], $matches)) { $delta = $matches[1]; $form_state['values']['remove_author'] = $form_state['values']['authors'][$delta]; $form_state['values']['remove_author']['delta'] = $delta; } $values = array( 'pub_id' => $form_state['values']['pub_id'], 'rank' => $form_state['values']['authors'][$delta]['author_name']['rank'] ); //deleting row in chado table tripal_core_chado_delete('pubauthor', $values); // Set the form to rebuild and run submit handlers. node_form_submit_build_node($form, $form_state); } /* * * * */ function tripal_pub_js($delta = 0) { $form = tripal_pub_ajax_form_handler($delta); // Render the new output. $author_form = $form['author_wrapper']; //was ['author'] // Prevent duplicate wrappers. unset($author_form['#prefix'], $author_form['#suffix']); $output = theme('status_messages') . drupal_render($author_form); // AHAH does not know about the "Remove" button. // This causes it not to attach AHAH behaviours to it after modifying the form. // So we need to tell it first. $javascript = drupal_add_js(NULL, NULL); if (isset($javascript['setting'])) { $output .= ''; } // Final rendering callback. drupal_json(array('status' => TRUE, 'data' => $output)); } /** * AJAX form handler. */ function tripal_pub_ajax_form_handler($delta=0 ) { // The form is generated in an include file which we need to include manually. include_once 'modules/node/node.pages.inc'; $form_state = array('storage' => NULL, 'submitted' => FALSE); $form_build_id = filter_xss($_POST['form_build_id']); // Get the form from the cache. $form = form_get_cache($form_build_id, $form_state); $args = $form['#parameters']; $form_id = array_shift($args); // We need to process the form, prepare for that by setting a few internals. $form_state['post'] = $form['#post'] = $_POST; $form['#programmed'] = $form['#redirect'] = FALSE; // Set up our form state variable, needed for removing authors. $form_state['remove_delta'] = $delta; // Build, validate and if possible, submit the form. drupal_process_form($form_id, $form, $form_state); // If validation fails, force form submission. if (form_get_errors()) { form_execute_handlers('submit', $form, $form_state); } // This call recreates the form relying solely on the form_state that the // drupal_process_form set up. $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id); return $form; } /* * * */ function theme_tripal_pub_author_table($form) { $rows = array(); $headers = array( t('Givennames'), t('Surname'), t('Suffix'), '', // Blank header title for the remove link. ); foreach (element_children($form) as $key) { // No need to print the field title every time. unset( $form[$key]['author_name_text']['#title'], $form[$key]['author_name_text-2']['#title'], $form[$key]['author_name_text-3']['#title'], $form[$key]['remove_author']['#title'] ); // Build the table row. $row = array( 'data' => array( array('data' => drupal_render($form[$key]['author_name']) . drupal_render($form[$key]['author_name_text']), 'class' => 'author-name'), array('data' => drupal_render($form[$key]['author_name']) . drupal_render($form[$key]['author_name_text-2']), 'class' => 'author-name'), array('data' => drupal_render($form[$key]['author_name']) . drupal_render($form[$key]['author_name_text-3']), 'class' => 'author-name'), array('data' => drupal_render($form[$key]['edit_author']) . drupal_render($form[$key]['remove_author']), 'class' => 'remove-author'), ), ); // Add additional attributes to the row, such as a class for this row. if (isset($form[$key]['#attributes'])) { $row = array_merge($row, $form[$key]['#attributes']); } $rows[] = $row; } //$output = theme('table', $headers, $rows); $output .= drupal_render($form); return $output; } /** * * Helper function to define populated form field elements for publication node form. * */ function tripal_pub_author_display_form($delta, $author) { $form = array( '#tree' => TRUE, ); // Author Name $form['author_name'] = array( '#type' => 'hidden', '#value' => $author, '#parents' => array('authors', $delta), ); $form['author_name_text'] = array( '#type' => 'item', '#title' => t('Givennames'), '#parents' => array('authors', $delta), '#value' => $author['author_name']['givennames'], ); $form['author_name_text-2'] = array( '#type' => 'item', '#title' => t('Surname'), '#parents' => array('authors', $delta), '#value' => $author['author_name']['surname'], ); $form['author_name_text-3'] = array( '#type' => 'item', '#title' => t('Suffix'), '#parents' => array('authors', $delta), '#value' => $author['author_name']['suffix'], ); // Remove button. $form['remove_author'] = array( '#type' => 'submit', '#name' => 'remove_author_' . $delta, '#value' => t('Remove'), '#submit' => array('tripal_pub_remove_row_submit'), '#parents' => array('authors', $delta, 'remove_author'), '#ahah' => array( 'path' => 'tripal_pub/js/0', 'wrapper' => 'author-wrapper', 'method' => 'replace', 'effect' => 'fade', ), ); // Edit Author button $form['edit_author'] = array( '#type' => 'submit', '#name' => 'edit_author_' . $delta, '#value' => t('Edit'), '#submit' => array('tripal_pub_set_edit_author_submit'), '#parents' => array('authors', $delta, 'edit_author'), '#ahah' => array( 'path' => 'tripal_pub/js/0', 'wrapper' => 'author-wrapper', 'method' => 'replace', 'effect' => 'fade', ), ); return $form; } /* * This function executes commands periodically. This is called whenever a cron run occurs. This * function uses the time interval that the user has entered. This Publication module, requires * that the program is ran in pre-determined intervals, as desired by the user. By using a time stamp * and comparing the current time and the time that the last time a cron was ran, this program will * be ran. * * * @TODO: The cron function is not working correctly, not sure why the cron is not working properly. * * * */ /** function tripal_pub_cron(){ global $user; //needed to make the current users details available so access of user id is available //Aquiring the current time $current_time = time(); //Aquiring the user entered time interval $user_interval = variable_get('time_interval',NULL); //converting the user entered interval into seconds for use with unix time stamp $converted_interval = ($user_interval*60); //Accessing database for time stamp from watchdog $cron = db_result(db_query('select timestamp from {watchdog} where type="cron" order by timestamp desc limit 1')); //debugging print statement //print($cron); //taking variable value & assigning for use $cron_last = variable_get('cron', time()); $updated_interval = $cron_last - $converted_interval; if($current_time >= $updated_interval ){ tripal_add_job('Search & Load PubMed Publications', 'tripal_pub', 'tripal_pub_search_load_pubmed_publications', $job_args, $user->uid); } } */ //----------------------------------------------------------------------------- // SECTION: Custom form Elements //----------------------------------------------------------------------------- /* * This fucnction tells the FAPI(Form-API) that this is a element that will carry a value, contains * arrays of callback function names. Will declare an element will create a reuseable element type. * * @return * An associative array with the name of each element type as a key and an * array of attributes describingthe type as a value */ function tripal_pub_elements() { return array( 'publication_author' => array( '#input' => TRUE, '#process' => array('expand_publication_author'), '#element_validate' => array('publication_author_validate'), ), ); } /* * * * */ function expand_publication_author($element) { if (empty($element['#value'])) { $element['#value'] = array( 'givennames' => '', 'suffix' => '', 'surname' => '', ); } $element['#tree'] = TRUE; $parents = $element['#parents']; $parents[] = 'givennames'; $element['givennames'] = array( '#type' => 'textfield', '#size' => 10, //'#maxlength' => TRUE, //'#default_value'=> $element['#value']['#given'], '#prefix' => 'Given Name', ); if ($element['#default_value']) { $element['givennames']['#default_value'] = $element['#default_value']['givennames']; } $parents = $element['#parents']; $parents[]= 'surname'; $element['surname'] = array( '#type' => 'textfield', '#size' => 10, //'#maxlength' => TRUE, //'#default_value'=> $element['#value']['#surname'], '#prefix' => 'Surname', ); if ($element['#default_value']) { $element['surname']['#default_value'] = $element['#default_value']['surname']; } $parents = $element['#parents']; $parents[]= 'suffix'; $element['suffix'] = array( '#type' => 'textfield', '#size' => 5, //'#maxlength' => TRUE, //'#default_value'=> $element['#value']['#suffix'], '#prefix' => 'suffix', ); if ($element['#default_value']) { $element['suffix']['#default_value'] = $element['#default_value']['suffix']; } return $element; } /* * * * */ function theme_publication_author($element) { return theme('form_element', $element, '
' . $element['#children'] . '
'); } /* * * * */ function publication_author_validate($element) { if ($element['#required']) { if (trim($element['#value']['givennames']) == '' || trim($element['#value']['suffix']) == '' || trim($element['#value']['surname']) == '' || !is_string($element['#value']['givennames']) || !is_string($element['#value']['givennames']) || !is_string($element['#value']['surname'])) { form_error($element, t('The Author name is required.')); } } }