You are here

function biblio_admin_author_edit_form_submit in Bibliography Module 6.2

Same name and namespace in other branches
  1. 6 biblio.admin.inc \biblio_admin_author_edit_form_submit()
  2. 7 includes/biblio.admin.inc \biblio_admin_author_edit_form_submit()
  3. 7.2 includes/biblio.admin.inc \biblio_admin_author_edit_form_submit()

File

includes/biblio.admin.inc, line 2175
Administrative files for the biblio module.

Code

function biblio_admin_author_edit_form_submit($form, &$form_state) {
  module_load_include('inc', 'biblio', 'includes/biblio.contributors');
  $op = $form_state['values']['op'];
  $name_modified = FALSE;
  $other_modified = FALSE;
  switch ($op) {
    case t('Save'):
    case t('Merge'):
      $original_data = $form_state['values']['original_data'];
      foreach (array(
        'lastname',
        'firstname',
        'prefix',
        'suffix',
        'initials',
      ) as $field) {
        if (trim($original_data[$field]) !== trim($form_state['values'][$field])) {
          $name_modified = TRUE;
          break;
        }
      }
      foreach (array(
        'affiliation',
        'literal',
        'drupal_uid',
      ) as $field) {
        if (trim($original_data[$field]) !== trim($form_state['values'][$field])) {
          $other_modified = TRUE;
          break;
        }
      }
      if ($form_state['values']['drupal_uid'] == 0) {
        $uid = $form['drupal_uid']['#default_value'];
        $cid = 0;
      }
      else {
        $uid = $form_state['values']['drupal_uid'];
        $cid = $form_state['values']['cid'];
      }
      if ($uid && $other_modified) {
        db_query("UPDATE {biblio_contributor_data} SET drupal_uid = 0 WHERE drupal_uid = %d", $uid);
        $data = unserialize(db_result(db_query('SELECT data FROM {users} WHERE uid = %d', $uid)));
        $data['biblio_contributor_id'] = $cid;
        $v[] = serialize($data);
        db_query("UPDATE {users} SET data = '%s' WHERE uid = %d", array_merge($v, array(
          $uid,
        )));
      }
      if ($name_modified) {
        $cid = $form_state['values']['cid'];
        if (!db_fetch_object(db_query('SELECT * FROM {biblio_contributor_aka_data} b WHERE b.cid = %d ', $cid))) {
          db_query('INSERT INTO {biblio_contributor_aka_data} SELECT * FROM {biblio_contributor_data} b WHERE b.cid = %d ', $form_state['values']['cid']);
          db_query("UPDATE {biblio_contributor_aka_data} SET aka = %d WHERE cid = %d", $cid, $cid);
        }

        // update node time stamp to indicate changed records
        $nids = db_query("SELECT nid,vid FROM {biblio_contributor} bc WHERE cid = %d ", $form_state['values']['cid']);
        $time = time();
        while ($node = db_fetch_object($nids)) {
          db_query('UPDATE {node} SET changed = %d WHERE nid = %d AND vid = %d', $time, $node->nid, $node->vid);
        }
      }
      if ($name_modified || $other_modified) {
        $form_state['values']['name'] = (!empty($form_state['values']['prefix']) ? $form_state['values']['prefix'] . ' ' : '') . (!empty($form_state['values']['firstname']) ? $form_state['values']['firstname'] . ' ' : '') . (!empty($form_state['values']['initials']) ? $form_state['values']['initials'] . ' ' : '') . (!empty($form_state['values']['lastname']) ? $form_state['values']['lastname'] . ' ' : '') . (!empty($form_state['values']['suffix']) ? $form_state['values']['suffix'] : '');
        $form_state['values']['name'] = trim($form_state['values']['name']);
        $form_state['values']['md5'] = biblio_calculate_contributor_hash($form_state['values']);
        drupal_write_record('biblio_contributor_data', $form_state['values'], 'cid');
      }

      // merge authors
      if (isset($form_state['values']['merge_authors']) && $op == t('Merge')) {
        $merge_authors = array_filter($form_state['values']['merge_authors']);
        if (count($merge_authors)) {
          $cid = $form_state['values']['cid'];
          foreach ($merge_authors as $other_author) {
            db_query("INSERT INTO {biblio_contributor_aka_data} SELECT * FROM {biblio_contributor_data} b WHERE b.cid = %d ", $other_author);
            db_query("UPDATE {biblio_contributor_aka_data} SET aka = %d WHERE cid = %d", $cid, $other_author);
            db_query("UPDATE {biblio_contributor} SET cid = %d, merge_cid = %d WHERE cid = %d", $cid, $other_author, $other_author);
            db_query("DELETE FROM {biblio_contributor_data} WHERE cid = %d", $other_author);
          }
        }
      }
      if (isset($form_state['values']['linked_authors'])) {
        foreach ($form_state['values']['linked_authors'] as $key => $value) {
          if ($value == 0) {
            db_query("UPDATE {biblio_contributor_data} SET aka=%d WHERE cid=%d", $key, $key);
          }
        }
      }
      if (isset($form_state['values']['link_authors'])) {

        //db_query("UPDATE {biblio_contributor_data} SET aka=$form_state['values']['cid'] WHERE cid IN ($authors)");
        foreach ($form_state['values']['link_authors'] as $key => $value) {
          db_query("UPDATE {biblio_contributor_data} SET aka=%d WHERE cid=%d", $form_state['values']['cid'], $key);
        }
      }
      break;
    case t('Cancel'):
      break;
  }
}