/** * 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) { $conn = iform_get_connection_details($node); data_entry_helper::$js_read_tokens = data_entry_helper::get_read_auth($conn['website_id'], $conn['password']); if (!empty($_POST) && !empty($_POST['format'])) { self::do_data_services_download($args, $node); } $conn = iform_get_connection_details($node); data_entry_helper::$js_read_tokens = data_entry_helper::get_read_auth($conn['website_id'], $conn['password']); $types = self::get_download_types($args); $formats = self::get_download_formats($args); if (count($types) === 0) { return 'This download page is configured so that no download type options are available.'; } if (count($formats) === 0) { return 'This download page is configured so that no download format options are available.'; } $reload = data_entry_helper::get_reload_link_parts(); $reloadPath = $reload['path']; if (count($reload['params'])) { $reloadPath .= '?' . helper_base::array_to_query_string($reload['params']); } $r = '<form method="POST" action="' . $reloadPath . '">'; $r .= '<fieldset id="download-type-fieldset"><legend>' . lang::get('Records to download') . '</legend>'; if (count($types) === 1) { $r .= '<input type="hidden" name="download-type" id="download-type" value="' . implode('', array_keys($types)) . '"/>'; hostsite_set_page_title(lang::get('Download {1}', strtolower(implode('', $types)))); } else { $r .= data_entry_helper::select(array('fieldname' => 'download-type', 'label' => lang::get('Download type'), 'lookupValues' => $types, 'class' => 'control-width-5', 'helpText' => 'Select the type of download you require, i.e. the purpose for the data. This defines which records are available to download.')); } $r .= data_entry_helper::select(array('fieldname' => 'download-subfilter', 'label' => lang::get('Filter to apply'), 'lookupValues' => array(), 'class' => 'control-width-5', 'helpText' => lang::get('Optionally select from the available filters. Filters you create on the Explore pages will be available here.'))); $r .= "</fieldset>\n"; $r .= '<fieldset><legend>' . lang::get('Limit the records') . '</legend>'; if (empty($args['survey_id'])) { // put up an empty surveys drop down. AJAX will populate it. $r .= data_entry_helper::select(array('fieldname' => 'survey_id', 'label' => lang::get('Survey to include'), 'helpText' => 'Choose a survey, or <all> to not filter by survey.', 'lookupValues' => array(), 'class' => 'control-width-5')); } else { $r .= '<input type="hidden" name="survey_id" value="' . $args['survey_id'] . '"/>'; } // Let the user pick the date range to download. $r .= data_entry_helper::select(array('label' => lang::get('Date field'), 'fieldname' => 'date_type', 'lookupValues' => array('recorded' => lang::get('Field record date'), 'input' => lang::get('Input date'), 'edited' => lang::get('Last changed date'), 'verified' => 'Verification status change date'), 'helpText' => 'If filtering on date, which date field would you like to filter on?')); $r .= data_entry_helper::date_picker(array('fieldname' => 'date_from', 'label' => lang::get('Start Date'), 'helpText' => 'Leave blank for no start date filter', 'class' => 'control-width-4')); $r .= data_entry_helper::date_picker(array('fieldname' => 'date_to', 'label' => lang::get('End Date'), 'helpText' => 'Leave blank for no end date filter', 'class' => 'control-width-4')); $r .= '</fieldset>'; if (!empty($args['custom_formats'])) { $customFormats = json_decode($args['custom_formats'], true); foreach ($customFormats as $idx => $format) { if (empty($format['permission']) || user_access($format['permission'])) { $formats["custom-{$idx}"] = lang::get(isset($format['title']) ? $format['title'] : 'Untitled format'); } } } if (count($formats) > 1) { $r .= '<fieldset><legend>' . lang::get('Select a format to download') . '</legend>'; $keys = array_keys($formats); $r .= data_entry_helper::radio_group(array('fieldname' => 'format', 'lookupValues' => $formats, 'default' => $keys[0])); $r .= '</fieldset>'; } else { // only allowed 1 format, so no need for a selection control $keys = array_keys($formats); $r .= '<input type="hidden" name="format" value="' . array_pop($keys) . '"/>'; } $r .= '<input type="submit" value="' . lang::get('Download') . '"/></form>'; data_entry_helper::$javascript .= 'indiciaData.ajaxUrl="' . url('iform/ajax/easy_download_2') . "\";\n"; data_entry_helper::$javascript .= 'indiciaData.nid = "' . $node->nid . "\";\n"; data_entry_helper::$javascript .= "setAvailableDownloadFilters();\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) { // Do they have expert access? $expert = function_exists('user_access') && user_access($args['permission']); $conn = iform_get_connection_details($node); $readAuth = data_entry_helper::get_read_auth($conn['website_id'], $conn['password']); // Find out which types of filters and formats are available to the user $filters = self::get_filters($args, $readAuth); $formats = array(); if ($args['csv_format'] === 'yes' || $args['csv_format'] === 'expert' && $expert) { $formats[] = 'csv'; } if ($args['tsv_format'] === 'yes' || $args['tsv_format'] === 'expert' && $expert) { $formats[] = 'tsv'; } if ($args['kml_format'] === 'yes' || $args['kml_format'] === 'expert' && $expert) { $formats[] = 'kml'; } if ($args['gpx_format'] === 'yes' || $args['gpx_format'] === 'expert' && $expert) { $formats[] = 'gpx'; } if ($args['nbn_format'] === 'yes' || $args['nbn_format'] === 'expert' && $expert) { $formats[] = 'nbn'; } if (count($filters) === 0) { return 'This download page is configured so that no filter options are available.'; } if (count($formats) === 0) { return 'This download page is configured so that no download format options are available.'; } if (!empty($_POST)) { self::do_download($args, $filters); } iform_load_helpers(array('data_entry_helper')); $reload = data_entry_helper::get_reload_link_parts(); $reloadPath = $reload['path']; if (count($reload['params'])) { $reloadPath .= '?' . helper_base::array_to_query_string($reload['params']); } $r = '<form method="POST" action="' . $reloadPath . '">'; $r .= '<fieldset><legend>' . lang::get('Filters') . '</legend>'; if (count($filters) === 0) { return 'This download page is configured so that no filter options are available.'; } elseif (count($filters) === 1) { $r .= '<input type="hidden" name="user-filter" value="' . implode('', array_keys($filters)) . '"/>'; // Since there is only one option, we may as well tell the user what it is. drupal_set_title(implode('', array_values($filters))); if (implode('', array_keys($filters)) === 'mine') { $r .= '<p>' . lang::get('Use this form to download your own records.') . '</p>'; } } else { $r .= data_entry_helper::radio_group(array('label' => lang::get('User filter'), 'fieldname' => 'user-filter', 'lookupValues' => $filters, 'default' => empty($_POST['user-filter']) ? 'mine' : $_POST['user-filter'])); } if (empty($args['survey_id'])) { // A survey picker when downloading my data $r .= '<div id="survey_all">'; $r .= data_entry_helper::select(array('fieldname' => 'survey_id_all', 'label' => lang::get('Survey to include'), 'table' => 'survey', 'valueField' => 'id', 'captionField' => 'title', 'helpText' => 'Choose a survey, or <all> to not filter by survey.', 'blankText' => '<all>', 'class' => 'control-width-4', 'extraParams' => $readAuth + array('sharing' => 'data_flow', 'orderby' => 'title'))); $r .= '</div>'; // A survey picker when downloading data you are an expert for $surveys_expertise = hostsite_get_user_field('surveys_expertise'); if ($surveys_expertise) { $surveys_expertise = unserialize($surveys_expertise); $surveysFilter = array('query' => json_encode(array('in' => array('id' => $surveys_expertise)))); } else { // no filter as there are no specific surveys this user is an expert for $surveysFilter = array(); } $r .= '<div id="survey_expertise">'; $r .= data_entry_helper::select(array('fieldname' => 'survey_id_expert', 'label' => lang::get('Survey to include'), 'table' => 'survey', 'valueField' => 'id', 'captionField' => 'title', 'helpText' => 'Choose a survey, or <all> to not filter by survey.', 'blankText' => '<all>', 'class' => 'control-width-4', 'extraParams' => $readAuth + array('sharing' => 'verification', 'orderby' => 'title') + $surveysFilter)); $r .= '</div>'; } // Let the user pick the date range to download. $r .= data_entry_helper::date_picker(array('fieldname' => 'date_from', 'label' => lang::get('Start Date'), 'helpText' => 'Leave blank for no start date filter', 'class' => 'control-width-4')); $r .= data_entry_helper::date_picker(array('fieldname' => 'date_to', 'label' => lang::get('End Date'), 'helpText' => 'Leave blank for no end date filter', 'class' => 'control-width-4')); $r .= '</fieldset>'; $r .= '<fieldset><legend>' . lang::get('Downloads') . '</legend>'; $r .= '<label>Download options:</label>'; if (in_array('csv', $formats)) { $r .= '<input class="inline-control" type="submit" name="format" value="' . lang::get('Spreadsheet (CSV)') . '"/>'; } if (in_array('tsv', $formats)) { $r .= '<input class="inline-control" type="submit" name="format" value="' . lang::get('Tab Separated File (TSV)') . '"/>'; } if (in_array('kml', $formats)) { $r .= '<input class="inline-control" type="submit" name="format" value="' . lang::get('Google Earth File') . '"/>'; } if (in_array('gpx', $formats)) { $r .= '<input class="inline-control" type="submit" name="format" value="' . lang::get('GPS Track File') . '"/>'; } if (in_array('nbn', $formats)) { $r .= '<input class="inline-control" type="submit" name="format" value="' . lang::get('NBN Format') . '"/>'; $r .= '<p class="helpText">' . lang::get('Note that the NBN format download will only include verified data and excludes records where the date or spatial reference is not compatible with the NBN Gateway.') . '</p>'; } $r .= '</fieldset></form>'; 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 $nid The Drupal node object's ID. * @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, $nid, $response = null) { drupal_add_js(iform_client_helpers_path() . "prebuilt_forms/js/easy_download_2.js"); drupal_add_css(iform_client_helpers_path() . "prebuilt_forms/css/easy_download_2.css"); $conn = iform_get_connection_details($nid); $args = array_merge(array('download_administered_groups' => 'indicia data admin', 'download_group_types' => ''), $args); $readAuth = data_entry_helper::get_read_auth($conn['website_id'], $conn['password']); if (data_entry_helper::$js_read_tokens === null) { data_entry_helper::$js_read_tokens = $readAuth; } if (!empty($_POST) && !empty($_POST['format'])) { self::do_data_services_download($args, $nid); } $types = self::get_download_types($args); $formats = self::get_download_formats($args); if (count($types) === 0) { return 'This download page is configured so that no download type options are available.'; } if (count($formats) === 0) { return 'This download page is configured so that no download format options are available.'; } $reload = data_entry_helper::get_reload_link_parts(); $reloadPath = $reload['path']; if (count($reload['params'])) { $reloadPath .= '?' . helper_base::array_to_query_string($reload['params']); } $r = '<form method="POST" action="' . $reloadPath . '">'; $r .= '<fieldset id="download-type-fieldset"><legend>' . lang::get('Records to download') . '</legend>'; if (count($types) === 1) { $r .= '<input type="hidden" name="download-type" id="download-type" value="' . implode('', array_keys($types)) . '"/>'; hostsite_set_page_title(lang::get('Download {1}', strtolower(implode('', $types)))); } else { $r .= data_entry_helper::select(array('fieldname' => 'download-type', 'label' => lang::get('Download type'), 'lookupValues' => $types, 'class' => 'control-width-5', 'helpText' => 'Select the type of download you require, i.e. the purpose for the data. This defines which records are available to download.')); } $r .= data_entry_helper::select(array('fieldname' => 'download-subfilter', 'label' => lang::get('Filter to apply'), 'lookupValues' => array(), 'class' => 'control-width-5', 'helpText' => lang::get('Optionally select from the available filters. Filters you create on the Explore pages will be available here.'))); $r .= "</fieldset>\n"; $r .= '<fieldset><legend>' . lang::get('Limit the records') . '</legend>'; // Hub // TODO may run into URL size limits $vocabulary = taxonomy_vocabulary_machine_name_load('hubs'); $terms = entity_load('taxonomy_term', FALSE, array('vid' => $vocabulary->vid)); // the hub is driven by a user field, stored as tid. $hubList = array('' => lang::get('<All>')); foreach ($terms as $term) { // TODO Cache $query = new EntityFieldQuery(); $query->entityCondition('entity_type', 'user')->fieldCondition('field_preferred_training_hub', 'tid', $term->tid); $result = $query->execute(); // This gives us the list of users which are in the hub: CMS user ID: now convert to indicia user id $userIDList = array(); if (count($result) > 0) { $cmsUserIDs = array_keys($result['user']); foreach ($cmsUserIDs as $cmsUserID) { $user_data = user_load($cmsUserID); // TODO Making assumption about language if (!empty($user_data->field_indicia_user_id['und'][0]['value'])) { $userIDList[] = $user_data->field_indicia_user_id['und'][0]['value']; } } if (count($userIDList) > 0) { $hubList[implode(',', $userIDList)] = $term->tid . ' ' . $term->name; } } } $r .= data_entry_helper::select(array('fieldname' => 'user_id_list', 'label' => lang::get('Hub to include'), 'helpText' => 'Choose a Hub, or <All> to not filter by Hub. This is driven off the users currently allocated to the hub. This currently does not apply to the NBN download.', 'lookupValues' => $hubList, 'class' => 'control-width-5')); // End Cocoast Hub if (empty($args['survey_id'])) { // put up an empty surveys drop down. AJAX will populate it. $r .= data_entry_helper::select(array('fieldname' => 'survey_id', 'label' => lang::get('Survey to include'), 'helpText' => 'Choose a survey, or <All> to not filter by survey.', 'lookupValues' => array(), 'class' => 'control-width-5')); } else { $r .= '<input type="hidden" name="survey_id" value="' . $args['survey_id'] . '"/>'; } // Let the user pick the date range to download. $r .= data_entry_helper::select(array('label' => lang::get('Date field'), 'fieldname' => 'date_type', 'lookupValues' => array('recorded' => lang::get('Field record date'), 'input' => lang::get('Input date'), 'edited' => lang::get('Last changed date'), 'verified' => 'Verification status change date'), 'helpText' => 'If filtering on date, which date field would you like to filter on?')); $r .= data_entry_helper::date_picker(array('fieldname' => 'date_from', 'label' => lang::get('Start Date'), 'helpText' => 'Leave blank for no start date filter', 'class' => 'control-width-4')); $r .= data_entry_helper::date_picker(array('fieldname' => 'date_to', 'label' => lang::get('End Date'), 'helpText' => 'Leave blank for no end date filter', 'class' => 'control-width-4')); $r .= '</fieldset>'; if (!empty($args['custom_formats'])) { $customFormats = json_decode($args['custom_formats'], true); foreach ($customFormats as $idx => $format) { if (empty($format['permission']) || hostsite_user_has_permission($format['permission'])) { $formats["custom-{$idx}"] = lang::get(isset($format['title']) ? $format['title'] : 'Untitled format'); } } } if (count($formats) > 1) { $r .= '<fieldset><legend>' . lang::get('Select a format to download') . '</legend>'; $keys = array_keys($formats); $r .= data_entry_helper::radio_group(array('fieldname' => 'format', 'lookupValues' => $formats, 'default' => $keys[0])); $r .= '</fieldset>'; } else { // only allowed 1 format, so no need for a selection control $keys = array_keys($formats); $r .= '<input type="hidden" name="format" value="' . array_pop($keys) . '"/>'; } $r .= '<input type="submit" value="' . lang::get('Download') . '"/></form>'; data_entry_helper::$javascript .= 'indiciaData.ajaxUrl="' . url('iform/ajax/easy_download_2') . "\";\n"; data_entry_helper::$javascript .= 'indiciaData.nid = "' . $nid . "\";\n"; data_entry_helper::$javascript .= "setAvailableDownloadFilters();\n"; return $r; }