function schools_form_alter
Search API
7.x schools.module | schools_form_alter(&$form, $form_id) |
6.x schools.module | schools_form_alter(&$form, $form_id) |
Implements hook_form_alter
File
- modules/
schools/ schools.module, line 761 - Schools module.
Code
function schools_form_alter(&$form, $form_id) {
$forms_to_alter = array(
'admin_edit_degree_form',
'admin_edit_group_form',
'admin_edit_course_form',
'user_edit_user_form',
'user_edit_student_user_form',
);
// Add "school" dropdown to the degrees, groups, and courses form
if (in_array($form_id, $forms_to_alter)) {
fp_add_js(fp_get_module_path("schools") . '/js/schools.js');
$db = get_global_database_handler();
$school_id = 0; // default
$entity_id = 0; // default
if ($form_id == 'admin_edit_degree_form') {
$entity_type = 'degree';
$degree_id = @intval($form ['degree_id']['value']);
$entity_id = $degree_id;
if ($degree_id) {
$school_id = $db->get_school_id_for_degree_id($degree_id, TRUE);
}
$weight = 1120;
@$catalog_year = $form ['de_catalog_year']['value'];
if ($catalog_year == "") {
@$catalog_year = $form ['catalog_year']['value'];
}
}
// Is this a "group" we are editing?
if ($form_id == "admin_edit_group_form") {
$entity_type = 'group';
$weight = 45;
$group_id = @$form ['group_id']['value'];
$entity_id = $group_id;
$school_id = $db->get_school_id_for_group_id($group_id, TRUE);
}
if ($form_id == 'admin_edit_course_form') {
$entity_type = 'course';
$course_id = @intval($form ['course_id']['value']);
$entity_id = $course_id;
$weight = 55;
$school_id = $db->get_school_id_for_course_id($course_id, TRUE);
// We also want to adjust the description for the "update for all years" checkbox.
$form ['all_years']['options']['yes'] = t('Update title, description, hour info, and school selection for all years of this course.');
}
if ($form_id == 'user_edit_user_form' || $form_id == 'user_edit_student_user_form') {
$entity_type = 'user';
$user_id = intval($form ['user_id']['value']);
$entity_id = $user_id;
$school_id = $db->get_school_id_for_user_id($user_id, TRUE);
$weight = 95;
} // user edit form
$options = schools_get_schools_for_fapi(TRUE, TRUE, $entity_type, TRUE);
$form ['schools_school'] = array(
'type' => 'select',
'label' => t('School:'),
'options' => $options,
'attributes' => array('onchange' => "return schoolsConfirmChangeSchool($school_id);"),
'value' => $school_id,
'hide_please_select' => TRUE,
'weight' => $weight,
'popup_description' => t('Please select a school which this @datatype belongs to. Schools are defined under the Admin Console -> Configure Schools.', array('@datatype' => $entity_type)),
'description' => t("<strong>Caution:</strong> changing this value could have unexpected consequences. If unsure what to do, set to Default."),
);
$form ['schools_entity_type'] = array(
'type' => 'hidden',
'value' => $entity_type,
);
$form ['schools_entity_id'] = array(
'type' => 'hidden',
'value' => $entity_id,
);
// We also need to add our custom submit handler so that our selection gets saved correctly.
// Also, use unshift so it's the first thing we do.
//$form['#submit_handlers'][] = 'schools_data_form_submit';
if (!isset($form ['#submit_handlers'])) {
$form ['#submit_handlers'] = array();
}
array_unshift($form ['#submit_handlers'], 'schools_data_form_submit');
// If this is a NEW group, then don't show them anything!
if (($entity_type == 'group' && @$form ['group_id']['value'] === 'new') || ($entity_type == 'course' && @$form ['course_id']['value'] === 'new') || ($entity_type == 'user' && @intval($form ['user_id']['value']) === 0)) {
$form ['schools_school'] = array(
'type' => 'markup',
'label' => t('School:'),
'value' => t('<b>Please save this @dt at least once (to establish an ID in the database). Once you have done this,
the School selection box will appear.</b>', array('@dt' => $entity_type)),
'weight' => $weight,
);
}
} // if in_array forms to alter
// When we copy a degree, make sure we have a chance to interact (so we can
// indicate the degree as well.
if ($form_id == "admin_copy_degree_form") {
$options = schools_get_schools_for_fapi(TRUE, TRUE, 'degree', TRUE);
$form ['school_id'] = array(
'type' => 'select',
'label' => 'Source School:',
'options' => $options,
'hide_please_select' => TRUE,
'weight' => 25,
'popup_description' => t('Please select a school which this degree belongs to. Schools are defined under the Admin Console -> Configure Schools.'),
'description' => t("This must match the source degree. If you do not know the source degree's school, or are unsure what to select, set to Default."),
);
$form ['destination_school_id'] = array(
'type' => 'select',
'label' => 'Destination School:',
'options' => $options,
'hide_please_select' => TRUE,
'weight' => 35,
'popup_description' => t('Please select a school which you wish to save the new degree into. Schools are defined under the Admin Console -> Configure Schools.'),
'description' => t("Please select a school which you wish to save the new degree into. If you are unsure what to select, set to Default."),
);
//if (!isset($form['#validate_handlers'])) $form['#validate_handlers'] = array();
//array_unshift($form['#validate_handlers'], 'schools_admin_copy_degree_form_validate');
}
if ($form_id == 'admin_add_degree_form') {
$options = schools_get_schools_for_fapi(TRUE, TRUE, 'degree', TRUE);
$form ['school_id'] = array(
'type' => 'select',
'label' => 'School:',
'options' => $options,
'value' => $school_id,
'hide_please_select' => TRUE,
'weight' => 15,
'popup_description' => t('Please select a school which this degree belongs to. Schools are defined under the Admin Console -> Configure Schools.'),
'description' => t("This must match the source degree. If you do not know the source degree's school, or are unsure what to select, set to Default."),
);
}
// Alter the "urgent message" form, to include new verbiage about how the main one is "global", and add new
// boxes for each school.
if ($form_id == 'admin_urgent_message_form') {
$form ["mark_school"] = array(
'value' => '<br><hr><p>' . t('<h2>Schools</h2>The following boxes are provided by the Schools module, so that you may display
urgent messages to <b>students</b> and <b>faculty/staff</b>, based on the school they have been assigned to.') . "</p>",
);
$defs = schools_get_school_definitions();
foreach ($defs as $school_id => $school_desc) {
if ($school_id == 0) {
continue;
}
$form ["urgent_msg_$school_id"] = array(
"type" => "textarea",
"label" => t("Urgent Message for users in %school_desc:", array("%school_desc" => $school_desc)),
"value" => variable_get("urgent_msg_$school_id", ""),
'description' => t("To delete this message, simple delete all the text in this box and save."),
);
}
$form ['mark_below_school'] = array(
'value' => '<br><hr><br>',
);
} // form is admin_urgent_message_form
// Forms for which we should allow override values per school.
$oforms = array('alerts_settings_form', "system_school_data_form", 'admin_advising_settings_form', "course_search_settings_form", 'audit_settings_form', 'calendar_appointment_settings_form');
if (in_array($form_id, $oforms)) {
// We want to add a "use default" checkbox at the top, which, if set, will disable all of the form elements.
fp_add_js(fp_get_module_path('schools') . '/js/schools.js');
fp_add_css(fp_get_module_path('system') . '/css/style.css');
fp_add_css(fp_get_module_path('schools') . '/css/style.css');
$school_id = intval($form ['school_id']['value']);
if ($school_id !== 0) {
$school_name = schools_get_school_name_for_id($school_id);
$form ['markup_school_use_default_school_values'] = array(
'type' => 'markup',
'value' => "<div>" . t("Since this is not the Default school, you have the option to <em>override</em> the Default school's values for each field.
<br>If <strong>checked</strong>, the value you enter will be used for students, degrees, etc, belonging to this school (%school).
<br>If <strong>unchecked</strong>, the value you enter will be ignored, and the Default school's value will be used instead.
<br><br>If unsure what to do, leave these 'Override' boxes unchecked.
", array("%school" => $school_name)) . "</div>",
'weight' => -100,
);
// Add a checkbox to every form element!
$fields_to_edit = array('textfield', 'textarea', 'select', 'checkboxes');
$fields_to_check_override = "";
foreach ($form as $fieldname => $element) {
if (in_array($element ['type'], $fields_to_edit)) {
// Add an "override" checkbox for this field.
$checked = "";
if (variable_get("school_override__$fieldname", "") === "yes") {
$checked = "checked=checked";
}
if (!isset($form [$fieldname]['prefix'])) {
$form [$fieldname]['prefix'] = "";
}
$n_fieldname = $fieldname;
if ($element ['type'] == 'checkboxes') {
$n_fieldname = 'inner-wrapper-' . $fieldname;
}
$css_id = md5($fieldname) . mt_rand(9, 9999);
$form [$fieldname]['prefix'] .= "<span class='schools-override-cb'>
<label><input type='checkbox' name='school_override__$n_fieldname' class='school-override-cb' id='school_override__$css_id' value='yes' $checked>" . t("Override Default school value?") . "</label></span>";
// Also add this fieldname to our "fields_to_check_override" string, so we can put it in a hidden textarea for later use in the _submit function.
$fields_to_check_override .= $fieldname . ",";
}
} // foreach
$form ['markup_fields_to_override'] = array(
'value' => "<textarea name='fields_to_check_override' style='display:none;'>$fields_to_check_override</textarea>",
'weight' => 999,
);
// We also need to add a custom submit handler, so we can save the "override" values.
$form ['#submit_handlers'][] = 'schools_override_elements_form_submit';
} // school != 0
} // system_school_data_form
}