function biblio_admin_author_edit_form_submit in Bibliography Module 6.2
Same name and namespace in other branches
- 6 biblio.admin.inc \biblio_admin_author_edit_form_submit()
- 7 includes/biblio.admin.inc \biblio_admin_author_edit_form_submit()
- 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;
}
}