You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
289 lines
9.1 KiB
289 lines
9.1 KiB
<?php |
|
|
|
// $Id$ |
|
|
|
// this is a bit of a hack. It iterates through the |
|
// form and assigns a dummy value to any field in the $post |
|
// data that is marked as #required. This is so that the |
|
// AHAH method can still function with required fields that |
|
// are first passed to the core form validation function. |
|
function _dummy_post_info($form, $post, $key = '') { |
|
$children = element_children($form); |
|
if (count($children) > 0) { |
|
foreach ($children as $key) { |
|
$post = _dummy_post_info($form[$key], $post, $key); |
|
} |
|
} |
|
if ($key!='' && isset($form['#required']) && $form['#required'] == TRUE && trim($post[$key]) == '') { |
|
$post[$key] = 'not empty'; |
|
} |
|
|
|
return $post; |
|
} |
|
|
|
function _ife_find_people_element($form, &$keys = array()) { |
|
if (isset($form['#type']) && $form['#type'] == 'people') { |
|
return $form['people']; |
|
} |
|
|
|
$children = element_children($form); |
|
foreach ($children as $key) { |
|
$found = _ife_find_people_element($form[$key], $keys); |
|
if ($found !== FALSE) { |
|
$keys[] = $key; |
|
return $found; |
|
} |
|
} |
|
|
|
return FALSE; |
|
|
|
} |
|
|
|
function ife_people_ahah() { |
|
|
|
|
|
if (!isset($_POST['form_build_id'])) |
|
return; |
|
|
|
$form_state = array('storage' => NULL, 'submitted' => FALSE); |
|
$form_build_id = $_POST['form_build_id']; |
|
$form = form_get_cache($form_build_id, $form_state); |
|
|
|
$args = $form['#parameters']; |
|
$form_id = array_shift($args); |
|
$form['#post'] = $_POST; |
|
$form['#redirect'] = FALSE; |
|
$form['#programmed'] = FALSE; |
|
|
|
$_POST = _dummy_post_info($form, $_POST); |
|
$form_state['post'] = $_POST; |
|
$form['#post'] = $_POST; |
|
|
|
drupal_process_form($form_id, $form, $form_state); |
|
|
|
// ob_start(); echo '<pre>'; echo $_POST['form_build_id']."\n"; var_dump($form_state); echo '</pre>'; $dump = ob_get_contents(); ob_end_clean(); |
|
|
|
$form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id); |
|
$qt_form = _ife_find_people_element($form); |
|
|
|
unset($qt_form['#prefix'], $qt_form['#suffix']); // Prevent duplicate wrappers. |
|
$javascript = drupal_add_js(NULL, NULL, 'header'); |
|
drupal_json(array( |
|
'status' => TRUE, |
|
'data' => $dump . theme('status_messages') . drupal_render($qt_form), |
|
'settings' => call_user_func_array('array_merge_recursive', $javascript['setting']), |
|
)); |
|
} |
|
|
|
/** |
|
* Submit handler for the "Remove Person" button. |
|
*/ |
|
function ife_remove_person_submit($form, &$form_state) { |
|
|
|
// Get the tab delta for the clicked button. |
|
$delta = $form_state['clicked_button']['#parents'][2]; |
|
|
|
$keys=array(); |
|
$qt_form = _ife_find_people_element($form, $keys); |
|
|
|
$peopleVals = &$form_state['values']; |
|
while (count($keys) > 0) { |
|
$key = array_pop($keys); |
|
if (isset($peopleVals[$key])) { |
|
$peopleVals = &$peopleVals[$key]; |
|
} |
|
} |
|
|
|
$people = array(); |
|
$i = 0; |
|
foreach ($peopleVals['people'] as $key => $val) { |
|
if ($key != $delta) { |
|
$people[] = $val; |
|
} |
|
$i++; |
|
} |
|
|
|
// ob_start(); var_dump($form_state['clicked_button']['#parents'][1]); var_dump($people); $dump = ob_get_contents(); ob_end_clean(); |
|
// watchdog('people_field','<pre>'.$dump.'</pre>',array(),WATCHDOG_NOTICE); |
|
|
|
unset($form_state['submit_handlers']); |
|
form_execute_handlers('submit', $form, $form_state); |
|
$form_state['storage']['people'] = $people; |
|
//$form_state['rebuild'] = TRUE; |
|
} |
|
|
|
|
|
/** |
|
* Submit handler for the "Add Person" button. |
|
*/ |
|
function ife_add_person_submit($form, &$form_state) { |
|
$people = array(); |
|
$keys = array(); |
|
$qt_form = _ife_find_people_element($form, $keys); |
|
$peopleVals = &$form_state['values']; |
|
|
|
while (count($keys) > 0) { |
|
$key = array_pop($keys); |
|
if (isset($peopleVals[$key])) { |
|
$peopleVals = &$peopleVals[$key]; |
|
} |
|
} |
|
if (!is_array($peopleVals['people'])) |
|
$peopleVals['people'] = array(); |
|
|
|
foreach ($peopleVals['people'] as $val) { |
|
$people[] = $val; |
|
} |
|
|
|
//only add new person if we are not adding from repository. |
|
if (!isset($form_state['post']['add_from_repository']) || trim($form_state['post']['add_from_repository']) == '') { |
|
$people[] = array('name' => '', 'date'=>'', 'role' => '', 'subject' => ''); |
|
} |
|
|
|
unset($form_state['submit_handlers']); |
|
form_execute_handlers('submit', $form, $form_state); |
|
$form_state['storage']['people'] = $people; |
|
// $form_state['rebuild'] = TRUE; |
|
} |
|
|
|
|
|
|
|
/** |
|
* Submit handler for the "Add Person" button. |
|
*/ |
|
function ife_add_org_submit($form, &$form_state) { |
|
$people = array(); |
|
$keys = array(); |
|
$qt_form = _ife_find_people_element($form, $keys); |
|
$peopleVals = &$form_state['values']; |
|
|
|
while (count($keys) > 0) { |
|
$key = array_pop($keys); |
|
if (isset($peopleVals[$key])) { |
|
$peopleVals = &$peopleVals[$key]; |
|
} |
|
} |
|
|
|
if (!is_array($peopleVals['people'])) |
|
$peopleVals['people'] = array(); |
|
|
|
foreach ($peopleVals['people'] as $val) { |
|
$people[]=$val; |
|
} |
|
$people[] = array('role' => '', 'organization' => ''); |
|
|
|
unset($form_state['submit_handlers']); |
|
form_execute_handlers('submit', $form, $form_state); |
|
$form_state['storage']['people'] = $people; |
|
//$form_state['rebuild'] = TRUE; |
|
} |
|
|
|
|
|
|
|
/** |
|
* Submit handler for the "Add Person" button. |
|
*/ |
|
function ife_add_conf_submit($form, &$form_state) { |
|
$people = array(); |
|
$keys=array(); |
|
$qt_form = _ife_find_people_element($form, $keys); |
|
$peopleVals = &$form_state['values']; |
|
while (count($keys) > 0) { |
|
$key = array_pop($keys); |
|
if (isset($peopleVals[$key])) { |
|
$peopleVals=&$peopleVals[$key]; |
|
} |
|
} |
|
if (!is_array($peopleVals['people'])) |
|
$peopleVals['people'] = array(); |
|
|
|
foreach ($peopleVals['people'] as $val) { |
|
$people[] = $val; |
|
} |
|
$people[] = array('role' => '', 'conference' => '', 'subject' => ''); |
|
|
|
unset($form_state['submit_handlers']); |
|
form_execute_handlers('submit', $form, $form_state); |
|
$form_state['storage']['people'] = $people; |
|
//$form_state['rebuild'] = TRUE; |
|
} |
|
|
|
|
|
|
|
function theme_people($element) { |
|
drupal_add_js(drupal_get_path('module', 'islandora_form_elements') .'/js/people_ahah.js'); |
|
if (!empty($element['#collapsible'])) { |
|
drupal_add_js('misc/collapse.js'); |
|
|
|
if (!isset($element['#attributes']['class'])) { |
|
$element['#attributes']['class'] = ''; |
|
} |
|
|
|
$element['#attributes']['class'] .= ' collapsible'; |
|
if (!empty($element['#collapsed'])) { |
|
$element['#attributes']['class'] .= ' collapsed'; |
|
} |
|
} |
|
return '<fieldset'. drupal_attributes($element['#attributes']) .'>'. ($element['#title'] ? '<legend>'. $element['#title'] .'</legend>' : '') . (isset($element['#description']) && $element['#description'] ? '<div class="description">'. $element['#description'] .'</div>' : '') . (!empty($element['#children']) ? $element['#children'] : '') . "</fieldset>\n"; |
|
} |
|
|
|
|
|
function theme_people_items($form) { |
|
$rows = array(); |
|
$headers = array( |
|
t('Entity Name'), |
|
t('Role'), |
|
t('Operations'), |
|
); |
|
|
|
foreach (element_children($form) as $key) { |
|
if (isset($form[$key]['organization'])) { |
|
$form[$key]['weight']['#attributes']['class'] = 'ife-people-weight'; |
|
// Build the table row. |
|
$row = array( |
|
'data' => array( |
|
array('data' => drupal_render($form[$key]['organization']), 'class' => 'ife-person-name container-inline'), |
|
array('data' => drupal_render($form[$key]['role']).drupal_render($form[$key]['subject']), 'class' => 'ife-person-role'), |
|
array('data' => drupal_render($form[$key]['remove']), 'class' => 'ife-person-remove'), |
|
), |
|
); |
|
} |
|
elseif (isset($form[$key]['conference'])) { |
|
$form[$key]['weight']['#attributes']['class'] = 'ife-people-weight'; |
|
// Build the table row. |
|
$row = array( |
|
'data' => array( |
|
array('data' => drupal_render($form[$key]['conference']).'<br clear="all"/>'. drupal_render($form[$key]['date']), 'class' => 'ife-person-name container-inline' ), |
|
array('data' => drupal_render($form[$key]['role']).drupal_render($form[$key]['subject']), 'class' => 'ife-person-role'), |
|
array('data' => drupal_render($form[$key]['remove']), 'class' => 'ife-person-remove'), |
|
), |
|
); |
|
} |
|
else { |
|
$form[$key]['weight']['#attributes']['class'] = 'ife-people-weight'; |
|
// Build the table row. |
|
$row = array( |
|
'data' => array( |
|
array('data' => drupal_render($form[$key]['name']) .'<br clear="all"/>'. drupal_render($form[$key]['date']), 'class' => 'ife-person-name container-inline'), |
|
array('data' => drupal_render($form[$key]['role']).drupal_render($form[$key]['subject']), 'class' => 'ife-person-role'), |
|
array('data' => drupal_render($form[$key]['remove']), 'class' => 'ife-person-remove'), |
|
), |
|
); |
|
} |
|
|
|
// 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, array('id' => 'ife-peoplelist-table')); |
|
$output .= drupal_render($form); |
|
|
|
// Add our JS file, which has some Drupal core JS overrides, and ensures ahah behaviours get re-attached |
|
drupal_add_css(drupal_get_path('module', 'islandora_form_elements') .'/css/people.css'); |
|
return $output; |
|
} |
|
|
|
|
|
|