/** * Return the generated form output. * @param array $args List of parameter values passed through to the form depending on how the form has been configured. * This array always contains a value for language. * @param object $node The Drupal node object. * @param array $response When this form is reloading after saving a submission, contains the response from the service call. * Note this does not apply when redirecting (in this case the details of the saved object are in the $_GET data). * @return Form HTML. */ public static function get_form($args, $node, $response = null) { if (!hostsite_get_user_field('indicia_user_id')) { return 'Please ensure that you\'ve filled in your surname on your user profile before creating or editing groups.'; } iform_load_helpers(array('report_helper', 'map_helper')); $args = array_merge(array('include_code' => false, 'include_dates' => false, 'include_report_filter' => true, 'include_private_records' => false, 'include_administrators' => false, 'include_members' => false, 'filter_types' => '{"":"what,where,when","Advanced":"source,quality"}'), $args); $args['filter_types'] = json_decode($args['filter_types'], true); $reloadPath = self::getReloadPath(); data_entry_helper::$website_id = $args['website_id']; $auth = data_entry_helper::get_read_write_auth($args['website_id'], $args['password']); if (!empty($_GET['group_id'])) { self::loadExistingGroup($_GET['group_id'], $auth, $args); } else { if (!empty($args['parent_group_relationship_type']) && empty($_GET['from_group_id'])) { return 'This form should be called with a from_group_id parameter to define the parent when creating a new group'; } } $r = "<form method=\"post\" id=\"entry_form\" action=\"{$reloadPath}\">\n"; $r .= $auth['write'] . "<input type=\"hidden\" id=\"website_id\" name=\"website_id\" value=\"" . $args['website_id'] . "\" />\n"; $r .= data_entry_helper::hidden_text(array('fieldname' => 'group:id')); if (!empty($args['group_type'])) { $r .= '<input type="hidden" name="group:group_type_id" value="' . $args['group_type'] . '"/>'; $response = data_entry_helper::get_population_data(array('table' => 'termlists_term', 'extraParams' => $auth['read'] + array('id' => $args['group_type']))); self::$groupType = strtolower($response[0]['term']); } if (!empty(data_entry_helper::$entity_to_load['group:title']) && function_exists('drupal_set_title')) { drupal_set_title(lang::get('Edit {1}', data_entry_helper::$entity_to_load['group:title'])); } $r .= data_entry_helper::text_input(array('label' => lang::get('{1} name', ucfirst(self::$groupType)), 'fieldname' => 'group:title', 'validation' => array('required'), 'class' => 'control-width-5', 'helpText' => lang::get('The full title of the {1}', self::$groupType))); if ($args['include_code']) { $r .= data_entry_helper::text_input(array('label' => lang::get('Code'), 'fieldname' => 'group:code', 'class' => 'control-width-4', 'helpText' => lang::get('A code or abbreviation identifying the {1}', self::$groupType))); } if (empty($args['group_type'])) { $r .= data_entry_helper::select(array('label' => lang::get('Group type'), 'fieldname' => 'group:group_type_id', 'required' => true, 'table' => 'termlists_term', 'valueField' => 'id', 'captionField' => 'term', 'extraParams' => $auth['read'] + array('termlist_external_key' => 'indicia:group_types'), 'class' => 'control-width-4')); } $r .= self::joinMethodsControl($args); $r .= data_entry_helper::textarea(array('label' => ucfirst(lang::get('{1} description', self::$groupType)), 'fieldname' => 'group:description', 'helpText' => lang::get('Description and notes about the {1}.', self::$groupType))); $r .= self::dateControls($args); if ($args['include_private_records']) { $r .= data_entry_helper::checkbox(array('label' => lang::get('Records are private'), 'fieldname' => 'group:private_records', 'helpText' => lang::get('Tick this box if you want to withold the release of the records from this {1} until a ' . 'later point in time, e.g. when a project is completed.', self::$groupType))); } $r .= self::memberControls($args, $auth); $r .= self::reportFilterBlock($args, $auth, $hiddenPopupDivs); // auto-insert the creator as an admin of the new group, unless the admins are manually specified if (!$args['include_administrators'] && empty($_GET['group_id'])) { $r .= '<input type="hidden" name="groups_user:admin_user_id[]" value="' . hostsite_get_user_field('indicia_user_id') . '"/>'; } $r .= '<input type="hidden" name="groups_user:administrator" value="t"/>'; $r .= '<input type="submit" class="indicia-button" id="save-button" value="' . (empty(data_entry_helper::$entity_to_load['group:id']) ? lang::get('Create {1}', self::$groupType) : lang::get('Update {1} settings', self::$groupType)) . "\" />\n"; $r .= '</form>'; $r .= $hiddenPopupDivs; data_entry_helper::enable_validation('entry_form'); // JavaScript to grab the filter definition and store in the form for posting when the form is submitted data_entry_helper::$javascript .= "\n\$('#entry_form').submit(function() {\n \$('#filter-title-val').val('" . lang::get('Filter for user group') . " ' + \$('#group\\\\:title').val());\n \$('#filter-def-val').val(JSON.stringify(indiciaData.filter.def));\n});\n"; return $r; }
/** * Return the generated form output. * @param array $args List of parameter values passed through to the form depending on how the form has been configured. * This array always contains a value for language. * @param object $node The Drupal node object. * @param array $response When this form is reloading after saving a submission, contains the response from the service call. * Note this does not apply when redirecting (in this case the details of the saved object are in the $_GET data). * @return Form HTML. */ public static function get_form($args, $node, $response = null) { if (!hostsite_get_user_field('indicia_user_id')) { return 'Please ensure that you\'ve filled in your surname on your user profile before creating or editing groups.'; } self::createBreadcrumb($args); iform_load_helpers(array('report_helper', 'map_helper')); $args = array_merge(array('include_code' => false, 'include_dates' => false, 'include_logo_controls' => true, 'include_sensitivity_controls' => true, 'include_report_filter' => true, 'include_linked_pages' => true, 'include_private_records' => false, 'include_administrators' => false, 'include_members' => false, 'filter_types' => '{"":"what,where,when","Advanced":"source,quality"}', 'indexed_location_type_ids' => '', 'other_location_type_ids' => '', 'data_inclusion_mode' => 'choose'), $args); $args['filter_types'] = json_decode($args['filter_types'], true); $reloadPath = self::getReloadPath(); data_entry_helper::$website_id = $args['website_id']; $auth = data_entry_helper::get_read_write_auth($args['website_id'], $args['password']); if (!empty($_GET['group_id'])) { self::loadExistingGroup($_GET['group_id'], $auth, $args); } // maintain compatibility with form settings from before group type became multiselect. if (empty($args['group_type'])) { $args['group_type'] = array(); } elseif (!is_array($args['group_type'])) { $args['group_type'] = array($args['group_type']); } if (count($args['group_type']) === 1) { $response = data_entry_helper::get_population_data(array('table' => 'termlists_term', 'extraParams' => $auth['read'] + array('id' => $args['group_type'][0]))); self::$groupType = strtolower($response[0]['term']); } self::$groupType = lang::get(self::$groupType); $r = "<form method=\"post\" id=\"entry_form\" action=\"{$reloadPath}\" enctype=\"multipart/form-data\">\n"; $r .= '<fieldset><legend>' . lang::get('Fill in details of your {1} below', self::$groupType) . '</legend>'; $r .= $auth['write'] . "<input type=\"hidden\" id=\"website_id\" name=\"website_id\" value=\"" . $args['website_id'] . "\" />\n"; $r .= data_entry_helper::hidden_text(array('fieldname' => 'group:id')); // if a fixed choice of group type, can use a hidden input to put the value in the form. if (count($args['group_type']) === 1) { $r .= '<input type="hidden" name="group:group_type_id" value="' . $args['group_type'][0] . '"/>'; } if (!empty(data_entry_helper::$entity_to_load['group:title'])) { hostsite_set_page_title(lang::get('Edit {1}', data_entry_helper::$entity_to_load['group:title'])); } $r .= data_entry_helper::text_input(array('label' => lang::get('{1} name', ucfirst(self::$groupType)), 'fieldname' => 'group:title', 'validation' => array('required'), 'class' => 'control-width-6', 'helpText' => lang::get('Provide the full title of the {1}', self::$groupType))); if ($args['include_code']) { $r .= data_entry_helper::text_input(array('label' => lang::get('Code'), 'fieldname' => 'group:code', 'class' => 'control-width-4', 'helpText' => lang::get('Provide a code or abbreviation identifying the {1}', self::$groupType))); } $r .= data_entry_helper::textarea(array('label' => ucfirst(lang::get('{1} description', self::$groupType)), 'fieldname' => 'group:description', 'helpText' => lang::get('LANG_Description_Field_Instruct', self::$groupType), 'class' => 'control-width-6')); // If adding a new group which should have a parent group of some type or other, but no parent // group is specified in the from_group_id parameter, then let the user pick a group to link as the parent. if (empty($_GET['group_id']) && !empty($args['parent_group_type']) && !empty($args['parent_group_relationship_type']) && empty($_REQUEST['from_group_id'])) { // There should be a parent group, but none provided, so allow the user to pick one. $r .= data_entry_helper::select(array('label' => ucfirst(lang::get('{1} parent', self::$groupType)), 'fieldname' => 'from_group_id', 'table' => 'groups_user', 'captionField' => 'title', 'valueFields' => 'group_id', 'extraParams' => $auth['read'] + array('group_type_id' => $args['parent_group_type'], 'user_id' => hostsite_get_user_field('indicia_user_id'), 'view' => 'detail'), 'validation' => array('required'), 'blankText' => lang::get('<please select>'))); } if (count($args['group_type']) !== 1) { $params = array('termlist_external_key' => 'indicia:group_types', 'orderby' => 'sortorder,term'); if (!empty($args['group_type'])) { $params['query'] = json_encode(array('in' => array('id' => array_values($args['group_type'])))); } $r .= data_entry_helper::select(array('label' => ucfirst(lang::get('{1} type', self::$groupType)), 'fieldname' => 'group:group_type_id', 'validation' => array('required'), 'table' => 'termlists_term', 'valueField' => 'id', 'captionField' => 'term', 'extraParams' => $auth['read'] + $params, 'class' => 'control-width-4', 'blankText' => lang::get('<please select>'), 'helpText' => lang::get('What sort of {1} is it?', self::$groupType))); } $r .= self::groupLogoControl($args); $r .= self::joinMethodsControl($args); if ($args['include_sensitivity_controls']) { $r .= data_entry_helper::checkbox(array('label' => lang::get('Show records at full precision'), 'fieldname' => 'group:view_full_precision', 'helpText' => lang::get('Any sensitive records added to the system are normally shown blurred to a lower grid reference precision. If this box ' . 'is checked, then group members can see sensitive records explicitly posted for the {1} at full precision.', self::$groupType))); } $r .= self::dateControls($args); if ($args['include_private_records']) { $r .= data_entry_helper::checkbox(array('label' => lang::get('Records are private'), 'fieldname' => 'group:private_records', 'helpText' => lang::get('Tick this box if you want to withold the release of the records from this {1} until a ' . 'later point in time, e.g. when a project is completed.', self::$groupType))); // If an existing group with private records, then we might need to display a message warning the user about releasing the records. // Initially hidden, we use JS to display it when appropriate. if (!empty(data_entry_helper::$entity_to_load['group:id']) && data_entry_helper::$entity_to_load['group:private_records'] === 't') { $r .= '<p class="warning" style="display: none" id="release-warning">' . lang::get('You are about to release the records belonging to this group. Do not proceed unless you intend to do this!') . '</p>'; } } $r .= self::memberControls($args, $auth); $r .= '</fieldset>'; $r .= self::reportFilterBlock($args, $auth, $hiddenPopupDivs); $r .= self::inclusionMethodControl($args); $r .= self::formsBlock($args, $auth, $node); // auto-insert the creator as an admin of the new group, unless the admins are manually specified if (!$args['include_administrators'] && empty($_GET['group_id'])) { $r .= '<input type="hidden" name="groups_user:admin_user_id[]" value="' . hostsite_get_user_field('indicia_user_id') . '"/>'; } $r .= '<input type="hidden" name="groups_user:administrator" value="t"/>'; $r .= '<input type="submit" class="indicia-button" id="save-button" value="' . (empty(data_entry_helper::$entity_to_load['group:id']) ? lang::get('Create {1}', self::$groupType) : lang::get('Update {1} settings', self::$groupType)) . "\" />\n"; $r .= '</form>'; $r .= $hiddenPopupDivs; data_entry_helper::enable_validation('entry_form'); // JavaScript to grab the filter definition and store in the form for posting when the form is submitted data_entry_helper::$javascript .= "\r\n\$('#entry_form').submit(function() {\r\n \$('#filter-title-val').val('" . lang::get('Filter for user group') . " ' + \$('#group\\\\:title').val() + ' ' + new Date().getTime());\r\n \$('#filter-def-val').val(JSON.stringify(indiciaData.filter.def));\r\n});\n"; // for existing groups, prevent removal of yourself as a member. Someone else will have to do this for you so we don't orphan groups. if (!empty(data_entry_helper::$entity_to_load['group:id'])) { data_entry_helper::$javascript .= "\$('#groups_user\\\\:admin_user_id\\\\:sublist input[value=" . hostsite_get_user_field('indicia_user_id') . "]').closest('li').children('span').remove();\n"; } return $r; }