本文整理汇总了PHP中data_entry_helper::add_resource方法的典型用法代码示例。如果您正苦于以下问题:PHP data_entry_helper::add_resource方法的具体用法?PHP data_entry_helper::add_resource怎么用?PHP data_entry_helper::add_resource使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类data_entry_helper
的用法示例。
在下文中一共展示了data_entry_helper::add_resource方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: flickr_selector
/**
* <p>Generates a flickr linked photo selector control. This requires a call to flickr_helper::auth
* to have been made first and the user to have followed the login process to Flickr, otherwise a
* normal image upload box will be displayed.<p>
* <p>In order to get the flickr_select control working, you need to first obtain a Flickr API key from
* http://www.flickr.com/services/api/. When you register for the key you will also be given a
* "secret" - a second code that you need to supply to the Indicia data entry helpers. Once you
* have the keys, go to your client_helpers/helper_config.php file and enter them into the $flickr_api_key
* and $flickr_api_secret values.</p>
* <p>In addition to specifying the api key and secret, you also need to tell Flickr where to
* link to on your website after authenticating the user (the callback URL). There is a ready-made
* PHP script in the Indicia code which you can use - client_helpers/flickr_auth.php. So, if your
* code is running on a page at http://www.example.com/data_entry.php, with your client helpers
* in a sub-folder, you will have a callback URL of http://www.example.com/client_helpers/flickr_auth.php.
* You can list your API keys at http://www.flickr.com/services/api/keys/, then click the Edit key
* details for the key you have registered. Now enter your callback URL in the respective field and
* then save the key.</p>
*
* @param string $div_id Name and id of the div element that is generated. Defaults to Flickr.
* @return string HTML to insert into the web-page for the Flickr control.
*/
public static function flickr_selector($div_id = 'flickr')
{
data_entry_helper::add_resource('flickr');
if (array_key_exists('phpFlickr_auth_token', $_SESSION) && !empty($_SESSION['phpFlickr_auth_token'])) {
data_entry_helper::$javascript .= "(function(\$) {\n \$(document).ready(function(){\n \$('div#{$div_id}').indiciaFlickr();\n });\n })(jQuery);\n";
return '<div id="' . $div_id . '"></div>';
} else {
require_once 'data_entry_helper.php';
// Flickr authentication failed. Output a normal image upload box.
return "<label for='occurrence_image'>Image Upload:</label>\n" . data_entry_helper::image_upload('occurrence:image') . '<br/>';
}
}
示例2: get_form
public static function get_form($args, $node, $response = null)
{
global $indicia_templates;
global $user;
$indicia_templates['select_item'] = '<option value="{value}" {selected} >{caption} </option>';
if ($user->uid === 0) {
return lang::get('Before using this facility, please <a href="' . url('user/login', array('query' => 'destination=node/' . $node->nid)) . '">login</a> to the website.');
}
// we don't use the map, but a lot of the inherited code assumes the map is present.
self::$svcUrl = data_entry_helper::$base_url . '/index.php/services';
data_entry_helper::add_resource('openlayers');
$indicia_templates['label'] = '<label for="{id}"{labelClass}>{label}:</label>';
// can't have the CR on the end
$indicia_templates['zilch'] = '';
// can't have the CR on the end
self::$locations = iform_loctools_listlocations($node);
$retVal = parent::get_form($args, $node, $response);
if (parent::$mode != self::MODE_GRID) {
iform_mnhnl_addCancelButton($args['interface']);
data_entry_helper::$javascript .= "\n\$.validator.messages.required = \"" . lang::get('validation_required') . "\";";
if (!iform_loctools_checkaccess($node, 'superuser')) {
data_entry_helper::$javascript .= "\njQuery('[name=smpAttr\\:" . $args['observer_attr_id'] . "],[name^=smpAttr\\:" . $args['observer_attr_id'] . "\\:]').attr('readonly',true)";
if (parent::$mode == self::MODE_NEW) {
data_entry_helper::$javascript .= ".val(\"" . $user->name . "\");";
} else {
data_entry_helper::$javascript .= ";";
}
} else {
$userlist = iform_loctools_listusers($node);
data_entry_helper::$javascript .= "\nexisting = jQuery('[name=smpAttr\\:" . $args['observer_attr_id'] . "],[name^=smpAttr\\:" . $args['observer_attr_id'] . "\\:]');\nreplacement = '<select name=\"'+existing.attr('name')+'\" >";
foreach ($userlist as $uid => $a_user) {
data_entry_helper::$javascript .= "<option value=\"" . $a_user->name . "\">" . $a_user->name . " </option>";
}
data_entry_helper::$javascript .= "</select>';\njQuery(replacement).insertBefore(existing).val(existing.val());\nexisting.remove();\n";
}
data_entry_helper::$javascript .= "\n// jQuery('#sample\\\\:date').datepicker( \"option\", \"minDate\", new Date(2010, 4 - 1, 1) );\nDate.prototype.getMonthName = function() {\nvar m = ['" . lang::get('January') . "','" . lang::get('February') . "','" . lang::get('March') . "',\n'" . lang::get('April') . "','" . lang::get('May') . "','" . lang::get('June') . "',\n'" . lang::get('July') . "','" . lang::get('August') . "','" . lang::get('September') . "',\n'" . lang::get('October') . "','" . lang::get('November') . "','" . lang::get('December') . "'];\nreturn m[this.getMonth()];\n} \nvar monthAttr = jQuery('[name=smpAttr\\\\:" . $args['month_attr_id'] . "],[name^=smpAttr\\\\:" . $args['month_attr_id'] . "\\\\:]').attr('disabled', true);\nmonthAttr.before('<input type=\"hidden\" id=\"storedMonth\" name=\"'+monthAttr.attr('name')+'\">');\nupdateSampleDate = function(context, doAlert){\n jQuery('.displayDateDetails').empty().append('<span>'+jQuery('[name=sample\\:date]').val()+'</span>');\n var myDate = jQuery(context).datepicker(\"getDate\");\n var monthAttr = jQuery('[name=smpAttr\\\\:" . $args['month_attr_id'] . "],[name^=smpAttr\\\\:" . $args['month_attr_id'] . "\\\\:]').filter('select').val('');\n if(myDate != null){\n myDate = myDate.getMonthName();\n monthAttr.find(\"option:contains('\"+myDate+\"')\").attr('selected',true) ; \n jQuery('#storedMonth').val(monthAttr.val()); // doing in this order converts the text to a number and stores that number in the storedMonth\n } else\n jQuery('#storedMonth').val('');\n if(doAlert && monthAttr.val() == \"\")\n \talert('Given date is outside valid month range (April to September).');\n};\njQuery('#sample\\\\:date').change(function(){updateSampleDate(this, true);});\nupdateSampleDate('#sample\\\\:date', false);\njQuery('.tab-submit').unbind('click');\njQuery('.tab-submit').click(function() {\n var current=jQuery('#controls').tabs('option', 'selected');\n var tabinputs = jQuery('#entry_form div > .ui-tabs-panel:eq('+current+')').find('input,select');\n var secList = '';\n if (!tabinputs.valid()) { return; }\n var rows = jQuery('.sectionlist').find('tr');\n for(var i=1; i<= " . $args['max_number_sections'] . "; i++){\n if(jQuery('.sectionlist').find('[section='+i+']').length > 0) {\n var aucuneControl = jQuery(':checkbox[name^=\"SLA\\:'+i+'\\:\"]').filter('[name\$=\"\\:" . $args['aucune_attr_id'] . "\"]');\n var foundEntry = false;\n for(var j = 1; j < (rows.length-(numAttrs+1)); j++){\n foundEntry = foundEntry || (jQuery(rows[j]).find('td').filter(':eq('+i+')').find('[value!=\"\"]').length > 0);\n }\n if(!foundEntry && !aucuneControl.attr('checked')){\n secList = secList + (secList=='' ? '' : ', ') + i;\n }\n }\n }\n if (secList != ''){\n alert('The following sections have no species recorded against them: Section(s) '+secList+'. In these circumstances, the \"No observation\" checkbox must be checked for the relevant section.'); \n return;\n }\n var form = jQuery(this).parents('form:first');\n form.submit();\n});\n";
} else {
$retVal .= "<div style=\"display:none\" />\n <form id=\"form-delete-survey\" action=\"" . iform_mnhnl_getReloadPath() . "\" method=\"POST\">" . parent::$auth['write'] . "\n <input type=\"hidden\" name=\"website_id\" value=\"" . $args['website_id'] . "\" />\n <input type=\"hidden\" name=\"survey_id\" value=\"" . $args['survey_id'] . "\" />\n <input type=\"hidden\" name=\"sample:id\" value=\"\" />\n <input type=\"hidden\" name=\"sample:date\" value=\"2010-01-01\"/>\n <input type=\"hidden\" name=\"sample:location_id\" value=\"\" />\n <input type=\"hidden\" name=\"sample:deleted\" value=\"t\" />\n </form>\n</div>";
data_entry_helper::$javascript .= "\ndeleteSurvey = function(sampleID){\n if(confirm(\"Are you sure you wish to delete survey \"+sampleID)){\n jQuery.getJSON(\"" . self::$svcUrl . "/data/sample/\"+sampleID +\n \"?mode=json&view=detail&auth_token=" . parent::$auth['read']['auth_token'] . "&nonce=" . parent::$auth['read']["nonce"] . "\" +\n \"&callback=?\", function(data) {\n if (data.length>0) {\n jQuery('#form-delete-survey').find('[name=sample\\:id]').val(data[0].id);\n jQuery('#form-delete-survey').find('[name=sample\\:date]').val(data[0].date_start);\n jQuery('#form-delete-survey').find('[name=sample\\:location_id]').val(data[0].location_id);\n jQuery('#form-delete-survey').submit();\n }});\n };\n};\n";
}
return $retVal;
}
示例3: upload_mappings_form
/**
* Outputs the form for mapping columns to the import fields.
* @param array $options Options array passed to the import control.
*/
private static function upload_mappings_form($options)
{
//The Shorewatch importer only supports 4326 as this is required for the occurrence sample grid reference
//calculations to work. This can be hardcoded.
$_POST['sample:entered_sref_system'] = 4326;
$_SESSION['importSettingsToCarryForward'] = $_POST;
if (!file_exists($_SESSION['uploaded_file'])) {
return lang::get('upload_not_available');
}
data_entry_helper::add_resource('jquery_ui');
$filename = basename($_SESSION['uploaded_file']);
// If the last step was skipped because the user did not have any settings to supply, presetSettings contains the presets.
// Otherwise we'll use the settings form content which already in $_POST so will overwrite presetSettings.
if (isset($options['presetSettings'])) {
$settings = array_merge($options['presetSettings'], $_POST);
} else {
$settings = $_POST;
}
// only want defaults that actually have a value - others can be set on a per-row basis by mapping to a column
foreach ($settings as $key => $value) {
if (empty($value)) {
unset($settings[$key]);
}
}
//The Shorewatch importer only supports 4326 as this is required for the occurrence sample grid reference
//calculations to work. This can be hardcoded.
$settings['sample:entered_sref_system'] = 4326;
// cache the mappings
$metadata = array('settings' => json_encode($settings));
$post = array_merge($options['auth']['write_tokens'], $metadata);
$request = data_entry_helper::$base_url . "index.php/services/import/cache_upload_metadata?uploaded_csv={$filename}";
$response = data_entry_helper::http_post($request, $post);
if (!isset($response['output']) || $response['output'] != 'OK') {
return "Could not upload the settings metadata. <br/>" . print_r($response, true);
}
$request = data_entry_helper::$base_url . "index.php/services/import/get_import_fields/" . $options['model'];
$request .= '?' . data_entry_helper::array_to_query_string($options['auth']['read']);
// include survey and website information in the request if available, as this limits the availability of custom attributes
if (!empty($settings['website_id'])) {
$request .= '&website_id=' . trim($settings['website_id']);
}
if (!empty($settings['survey_id'])) {
$request .= '&survey_id=' . trim($settings['survey_id']);
}
$response = data_entry_helper::http_post($request, array());
$fields = json_decode($response['output'], true);
if (!is_array($fields)) {
return "curl request to {$request} failed. Response " . print_r($response, true);
}
$request = str_replace('get_import_fields', 'get_required_fields', $request);
$response = data_entry_helper::http_post($request);
$responseIds = json_decode($response['output'], true);
if (!is_array($responseIds)) {
return "curl request to {$request} failed. Response " . print_r($response, true);
}
$model_required_fields = self::expand_ids_to_fks($responseIds);
if (!empty($settings)) {
$preset_fields = self::expand_ids_to_fks(array_keys($settings));
} else {
$preset_fields = array();
}
if (!empty($preset_fields)) {
$unlinked_fields = array_diff_key($fields, array_combine($preset_fields, $preset_fields));
} else {
$unlinked_fields = $fields;
}
// only use the required fields that are available for selection - the rest are handled somehow else
$unlinked_required_fields = array_intersect($model_required_fields, array_keys($unlinked_fields));
ini_set('auto_detect_line_endings', 1);
$handle = fopen($_SESSION['uploaded_file'], "r");
$columns = fgetcsv($handle, 1000, ",");
$reload = data_entry_helper::get_reload_link_parts();
$reloadpath = $reload['path'] . '?' . data_entry_helper::array_to_query_string($reload['params']);
self::clear_website_survey_fields($unlinked_fields, $settings);
self::clear_website_survey_fields($unlinked_required_fields, $settings);
$savedFieldMappings = array();
// Note the Shorewatch importer doesn't currently support remembered fields, so set this to false (we are reusing a lot of the import_helper code, so leave the variable in the code as it already has proven reliability).
self::$rememberingMappings = false;
// if the user checked the Remember All checkbox, save it in a variable
if (isset($savedFieldMappings['RememberAll'])) {
$checked['RememberAll'] = 'checked';
}
$r = "<form method=\"post\" id=\"entry_form\" action=\"{$reloadpath}\" class=\"iform\">\n" . '<p>' . lang::get('column_mapping_instructions') . '</p>' . '<div class="ui-helper-clearfix import-mappings-table"><table class="ui-widget ui-widget-content">' . '<thead class="ui-widget-header">' . "<tr><th>Column in CSV File</th><th>Maps to attribute</th>";
if (self::$rememberingMappings) {
$r .= "<th id='remember-all-header' name='remember-all-header'>" . lang::get('Remember choice?') . "<br/><input type='checkbox' name='RememberAll' id='RememberAll' value='1' title='Tick all boxes to remember every column mapping next time you import.' {$checked['RememberAll']} onclick='\n if (this.checked) {\n \$(\".rememberField\").attr(\"checked\",\"checked\")\n } else {\n \$(\".rememberField\").removeAttr(\"checked\")\n }'/></th>";
}
$r .= '</tr></thead><tbody>';
foreach ($columns as $column) {
$colFieldName = preg_replace('/[^A-Za-z0-9]/', '_', $column);
$r .= "<tr><td>{$column}</td><td><select name=\"{$colFieldName}\" id=\"{$colFieldName}\">";
$r .= self::get_column_options($options['model'], $unlinked_fields, $column, ' ', $savedFieldMappings);
$r .= "</select></td></tr>\n";
}
$r .= '</tbody>';
$r .= '</table>';
$r .= '<div id="required-instructions" class="import-mappings-instructions"><h2>' . lang::get('Tasks') . '</h2><span>' . lang::get('The following database attributes must be matched to a column in your import file before you can continue') . ':</span><ul></ul><br/></div>';
//.........这里部分代码省略.........
示例4: get_occurrences_form
public static function get_occurrences_form($args, $node, $response)
{
if (!module_exists('iform_ajaxproxy')) {
return 'This form must be used in Drupal with the Indicia AJAX Proxy module enabled.';
}
data_entry_helper::add_resource('jquery_form');
$auth = data_entry_helper::get_read_write_auth($args['website_id'], $args['password']);
// did the parent sample previously exist? Default is no.
$existing = false;
if (isset($_POST['sample:id'])) {
// have just posted an edit to the existing parent sample, so can use it to get the parent location id.
$parentSampleId = $_POST['sample:id'];
$parentLocId = $_POST['sample:location_id'];
$date = $_POST['sample:date'];
$existing = true;
} else {
if (isset($response['outer_id'])) {
// have just posted a new parent sample, so can use it to get the parent location id.
$parentSampleId = $response['outer_id'];
} else {
$parentSampleId = $_GET['sample_id'];
$existing = true;
}
$sample = data_entry_helper::get_population_data(array('table' => 'sample', 'extraParams' => $auth['read'] + array('view' => 'detail', 'id' => $parentSampleId, 'deleted' => 'f')));
$sample = $sample[0];
$parentLocId = $sample['location_id'];
$date = $sample['date_start'];
}
// find any attributes that apply to transect section samples.
$sampleMethods = helper_base::get_termlist_terms($auth, 'indicia:sample_methods', array('Transect Section'));
$attributes = data_entry_helper::getAttributes(array('id' => $sampleId, 'valuetable' => 'sample_attribute_value', 'attrtable' => 'sample_attribute', 'key' => 'sample_id', 'fieldprefix' => 'smpAttr', 'extraParams' => $auth['read'], 'survey_id' => $args['survey_id'], 'sample_method_id' => $sampleMethods[0]['id'], 'multiValue' => false));
if ($existing) {
// as the parent sample exists, we need to load the sub-samples and occurrences
$subSamples = data_entry_helper::get_population_data(array('report' => 'library/samples/samples_list_for_parent_sample', 'extraParams' => $auth['read'] + array('sample_id' => $parentSampleId, 'date_from' => '', 'date_to' => '', 'sample_method_id' => '', 'smpattrs' => implode(',', array_keys($attributes))), 'nocache' => true));
// transcribe the response array into a couple of forms that are useful elsewhere - one for outputting JSON so the JS knows about
// the samples, and another for lookup of sample data by code later.
$subSampleJson = array();
$subSamplesByCode = array();
foreach ($subSamples as $subSample) {
$subSampleJson[] = '"' . $subSample['code'] . '": ' . $subSample['sample_id'];
$subSamplesByCode[$subSample['code']] = $subSample;
}
data_entry_helper::$javascript .= "indiciaData.samples = { " . implode(', ', $subSampleJson) . "};\n";
$o = data_entry_helper::get_population_data(array('report' => 'library/occurrences/occurrences_list_for_parent_sample', 'extraParams' => $auth['read'] + array('view' => 'detail', 'sample_id' => $parentSampleId, 'survey_id' => '', 'date_from' => '', 'date_to' => '', 'taxon_group_id' => '', 'smpattrs' => '', 'occattrs' => $args['occurrence_attribute_id']), 'nocache' => true));
// build an array keyed for easy lookup
$occurrences = array();
foreach ($o as $occurrence) {
$occurrences[$occurrence['sample_id'] . ':' . $occurrence['taxa_taxon_list_id']] = array('value' => $occurrence['attr_occurrence_' . $args['occurrence_attribute_id']], 'o_id' => $occurrence['occurrence_id'], 'a_id' => $occurrence['attr_id_occurrence_' . $args['occurrence_attribute_id']]);
}
// store it in data for JS to read when populating the grid
data_entry_helper::$javascript .= "indiciaData.existingOccurrences = " . json_encode($occurrences) . ";\n";
} else {
data_entry_helper::$javascript .= "indiciaData.samples = {};\n";
data_entry_helper::$javascript .= "indiciaData.existingOccurrences = {};\n";
}
$sections = data_entry_helper::get_population_data(array('table' => 'location', 'extraParams' => $auth['read'] + array('view' => 'detail', 'parent_id' => $parentLocId, 'deleted' => 'f', 'orderby' => 'code')));
$r = "<form method=\"post\"><div id=\"tabs\">\n";
$r .= '<input type="hidden" name="sample:id" value="' . $parentSampleId . '" />';
$r .= '<input type="hidden" name="website_id" value="' . $args['website_id'] . '"/>';
$r .= '<input type="hidden" name="survey_id" value="' . $args['survey_id'] . '"/>';
$r .= '<input type="hidden" name="page" value="grid"/>';
$r .= data_entry_helper::tab_header(array('tabs' => array('#grid' => lang::get('Enter Transect Data'), '#notes' => lang::get('Notes'))));
data_entry_helper::enable_tabs(array('divId' => 'tabs', 'style' => $args['interface']));
$r .= "<div id=\"grid\">\n";
$r .= '<table id="transect-input" class="ui-widget"><thead>';
$r .= '<tr><th class="ui-widget-header">' . lang::get('Sections') . '</th>';
foreach ($sections as $section) {
$r .= '<th class="ui-widget-header">' . $section['code'] . '</th>';
}
$r .= '</tr></thead>';
$r .= '<tbody class="ui-widget-content">';
// output rows at the top for any transect section level sample attributes
$rowClass = '';
foreach ($attributes as $attr) {
$r .= '<tr ' . $rowClass . '><td>' . $attr['caption'] . '</td>';
$rowClass = $rowClass == '' ? 'class="alt-row"' : '';
unset($attr['caption']);
foreach ($sections as $section) {
// output a cell with the attribute - tag it with a class & id to make it easy to find from JS.
$attrOpts = array('class' => 'smp-input smpAttr-' . $section['code'], 'id' => $attr['fieldname'] . ':' . $section['code'], 'extraParams' => $auth['read']);
// if there is an existing value, set it and also ensure the attribute name reflects the attribute value id.
if (isset($subSamplesByCode[$section['code']])) {
$attrOpts['fieldname'] = $attr['fieldname'] . ':' . $subSamplesByCode[$section['code']]['attr_id_sample_' . $attr['attributeId']];
$attr['default'] = $subSamplesByCode[$section['code']]['attr_sample_' . $attr['attributeId']];
} else {
$attr['default'] = isset($_POST[$attr['fieldname']]) ? $_POST[$attr['fieldname']] : '';
}
$r .= '<td>' . data_entry_helper::outputAttribute($attr, $attrOpts) . '</td>';
}
$r .= '</tr>';
}
$r .= '</tbody>';
$r .= '<tbody class="ui-widget-content" id="occs-body"></tbody>';
$r .= '</table>';
$r .= '</div>';
$r .= "<div id=\"notes\">\n";
$r .= data_entry_helper::textarea(array('fieldname' => 'sample:comment', 'label' => lang::get('Notes'), 'helpText' => "Use this space to input comments about this week's walk."));
$r .= '<input type="submit" value="' . lang::get('Save') . '"/>';
$r .= '</div></div></form>';
// A stub form for AJAX posting when we need to create an occurrence
//.........这里部分代码省略.........
示例5: link_species_popups
/**
* Implement the link_species_popups parameter. This hides any identified blocks and pops them up when a certain species is entered.
*/
private static function link_species_popups($args)
{
$r = '';
if (isset($args['link_species_popups']) && !empty($args['link_species_popups'])) {
data_entry_helper::add_resource('fancybox');
$popups = explode("\n", $args['link_species_popups']);
foreach ($popups as $popup) {
$tokens = explode("|", $popup);
if (count($tokens) == 2) {
$fieldset = self::get_fieldset_id($tokens[1]);
} else {
if (count($tokens) == 3) {
$fieldset = self::get_fieldset_id($tokens[1], $tokens[2]);
} else {
throw new Exception('The link species popups form argument contains an invalid value');
}
}
// insert a save button into the fancyboxed fieldset, since the normal close X looks like it cancels changes
data_entry_helper::$javascript .= "\$('#{$fieldset}').append('<input type=\"button\" value=\"Save\" onclick=\"\$.fancybox.close();\" ?>');\n";
// create an empty link that we can fire to fancybox the popup fieldset
$r .= "<a href=\"#{$fieldset}\" id=\"click-{$fieldset}\"></a>\n";
// add a hidden div to the page so we can put the popup fieldset into it when not popped up
data_entry_helper::$javascript .= "\$('#{$fieldset}').after('<div style=\"display:none;\" id=\"hide-{$fieldset}\"></div>');\n";
// put the popup fieldset into the hidden div
data_entry_helper::$javascript .= "\$('#hide-{$fieldset}').append(\$('#{$fieldset}'));\n";
// capture new row events on the grid
data_entry_helper::$javascript .= "hook_species_checklist_new_row=function(data) { \n if (data.preferred_name=='{$tokens['0']}') {\n \$('#click-{$fieldset}').fancybox({showCloseButton: false}).trigger('click');\n }\n}\n";
}
}
return $r;
}
示例6: get_control_photos
/**
* Draw Photes section of the page.
* @return string The output report grid.
*
* @package Client
* @subpackage PrebuiltForms
*/
protected static function get_control_photos($auth, $args, $tabalias, $options)
{
iform_load_helpers(array('report_helper'));
data_entry_helper::add_resource('fancybox');
$options = array_merge(array('itemsPerPage' => 20, 'imageSize' => 'thumb', 'class' => 'detail-gallery'), $options);
return '<div class="detail-panel" id="detail-panel-photos"><h3>Photos and media</h3>' . report_helper::freeform_report(array('readAuth' => $auth['read'], 'dataSource' => 'occurrence_image', 'itemsPerPage' => $options['itemsPerPage'], 'class' => $options['class'], 'header' => '<ul>', 'footer' => '</ul>', 'bands' => array(array('content' => '<li class="gallery-item"><a href="{imageFolder}{path}" class="fancybox single"><img src="{imageFolder}' . $options['imageSize'] . '-{path}" /></a><br/>{caption}</li>')), 'emptyText' => '<p>No photos or media files available</p>', 'mode' => 'direct', 'autoParamsForm' => false, 'extraParams' => array('occurrence_id' => $_GET['occurrence_id'], 'sharing' => 'reporting'))) . '</div>';
}
示例7: get_form
/**
* Return the Indicia form code
* @param array $args Input parameters.
* @param array $node Drupal node object
* @param array $response Response from Indicia services after posting a verification.
* @return HTML string
*/
public static function get_form($args, $node, $response)
{
iform_load_helpers(array('report_helper'));
data_entry_helper::add_resource('jquery_form');
$auth = report_helper::get_read_auth($args['website_id'], $args['password']);
$reportOptions = iform_report_get_report_options($args, $auth);
// get the grid output before outputting the download link, so we can check if the download link is needed.
$reportOptions['id'] = 'grid-' . $node->nid;
if (isset($args['footer'])) {
$reportOptions['footer'] = $args['footer'];
}
$reportOptions['downloadLink'] = !isset($args['download_link']) || $args['download_link'];
$grid = report_helper::report_grid($reportOptions);
return $grid;
}
示例8: get_control_date
/**
* Get the date control.
*/
private static function get_control_date($auth, $args, $tabalias, $options)
{
if (isset(data_entry_helper::$entity_to_load['sample:date']) && preg_match('/^(\\d{4})/', data_entry_helper::$entity_to_load['sample:date'])) {
// Date has 4 digit year first (ISO style) - convert date to expected output format
// @todo The date format should be a global configurable option. It should also be applied to reloading of custom date attributes.
$d = new DateTime(data_entry_helper::$entity_to_load['sample:date']);
data_entry_helper::$entity_to_load['sample:date'] = $d->format('d/m/Y');
}
if ($args['language'] != 'en') {
data_entry_helper::add_resource('jquery_ui_' . $args['language']);
}
// this will autoload the jquery_ui resource. The date_picker does not have access to the args.
return data_entry_helper::date_picker(array_merge(array('label' => lang::get('LANG_Date'), 'fieldname' => 'sample:date', 'default' => isset($args['defaults']['sample:date']) ? $args['defaults']['sample:date'] : ''), $options));
}
示例9: get_form
/**
* Return the generated form output.
* @return Form HTML.
*/
public static function get_form($args, $node)
{
global $user;
// There is a language entry in the args parameter list: this is derived from the $language DRUPAL global.
// It holds the 2 letter code, used to pick the language file from the lang subdirectory of prebuilt_forms.
// There should be no explicitly output text in this file.
// We must translate any field names and ensure that the termlists and taxonlists use the correct language.
// For attributes, the caption is automatically translated by data_entry_helper.
$logged_in = $user->uid > 0;
$uid = $user->uid;
$email = $user->mail;
$username = $user->name;
if (!user_access('IForm n' . $node->nid . ' access')) {
return "<p>" . lang::get('LANG_Insufficient_Privileges') . "</p>";
}
$r = '';
// Get authorisation tokens to update and read from the Warehouse.
$readAuth = data_entry_helper::get_read_auth($args['website_id'], $args['password']);
$svcUrl = data_entry_helper::$base_url . '/index.php/services';
drupal_add_js(drupal_get_path('module', 'iform') . '/media/js/jquery.form.js', 'module');
data_entry_helper::link_default_stylesheet();
data_entry_helper::add_resource('jquery_ui');
data_entry_helper::enable_validation('new-comments-form');
// don't care about ID itself, just want resources
$occID = '';
$smpID = '';
$userID = '';
$mode = 'FILTER';
if (array_key_exists('insect_id', $_GET)) {
$occID = $_GET['insect_id'];
$mode = 'INSECT';
} else {
if (array_key_exists('insect', $_GET)) {
$occID = $_GET['insect'];
$mode = 'INSECT';
} else {
if (array_key_exists('flower_id', $_GET)) {
$occID = $_GET['flower_id'];
$mode = 'FLOWER';
} else {
if (array_key_exists('flower', $_GET)) {
$occID = $_GET['flower'];
$mode = 'FLOWER';
} else {
if (array_key_exists('collection_id', $_GET)) {
$smpID = $_GET['collection_id'];
$mode = 'COLLECTION';
} else {
if (array_key_exists('collection', $_GET)) {
$smpID = $_GET['collection'];
$mode = 'COLLECTION';
} else {
if (array_key_exists('user_id', $_GET)) {
$userID = $_GET['user_id'];
} else {
if (array_key_exists('user', $_GET)) {
$userID = $_GET['user'];
}
}
}
}
}
}
}
}
// data_entry_helper::enable_validation('cc-1-collection-details'); // don't care about ID itself, just want resources
// The only things that will be editable after the collection is saved will be the identifiaction of the flower/insects.
// no id - just getting the attributes, rest will be filled in using AJAX
$sample_attributes = data_entry_helper::getAttributes(array('valuetable' => 'sample_attribute_value', 'attrtable' => 'sample_attribute', 'key' => 'sample_id', 'fieldprefix' => 'smpAttr', 'extraParams' => $readAuth, 'survey_id' => $args['survey_id']));
$occurrence_attributes = data_entry_helper::getAttributes(array('valuetable' => 'occurrence_attribute_value', 'attrtable' => 'occurrence_attribute', 'key' => 'occurrence_id', 'fieldprefix' => 'occAttr', 'extraParams' => $readAuth, 'survey_id' => $args['survey_id']));
$location_attributes = data_entry_helper::getAttributes(array('valuetable' => 'location_attribute_value', 'attrtable' => 'location_attribute', 'key' => 'location_id', 'fieldprefix' => 'locAttr', 'extraParams' => $readAuth, 'survey_id' => $args['survey_id']));
$language = iform_lang_iso_639_2($args['language']);
$defAttrOptions = array('extraParams' => $readAuth, 'lookUpListCtrl' => 'checkbox_group', 'booleanCtrl' => 'checkbox', 'sep' => ' ', 'language' => $language, 'suffixTemplate' => 'nosuffix', 'default' => '-1');
// note we have to proxy the post. Every time a write transaction is carried out, the write nonce is trashed.
// For security reasons we don't want to give the user the ability to generate their own nonce, so we use
// the fact that the user is logged in to drupal as the main authentication/authorisation/identification
// process for the user. The proxy packages the post into the correct format
$flower_ctrl_args = array('label' => lang::get('LANG_Flower_Species'), 'fieldname' => 'flower:taxa_taxon_list_id', 'table' => 'taxa_taxon_list', 'captionField' => 'taxon', 'valueField' => 'id', 'columns' => 2, 'blankText' => lang::get('LANG_Choose_Taxon'), 'extraParams' => $readAuth + array('taxon_list_id' => $args['flower_list_id'], 'orderby' => 'taxon'), 'suffixTemplate' => 'nosuffix');
$focus_flower_ctrl_args = $flower_ctrl_args;
$focus_flower_ctrl_args['fieldname'] = 'determination:taxa_taxon_list_id';
$insect_ctrl_args = array('label' => lang::get('LANG_Insect_Species'), 'fieldname' => 'insect:taxa_taxon_list_id', 'table' => 'taxa_taxon_list', 'captionField' => 'taxon', 'valueField' => 'id', 'columns' => 2, 'blankText' => lang::get('LANG_Choose_Taxon'), 'extraParams' => $readAuth + array('taxon_list_id' => $args['insect_list_id'], 'orderby' => 'taxon'), 'suffixTemplate' => 'nosuffix');
$focus_insect_ctrl_args = $insect_ctrl_args;
$focus_insect_ctrl_args['fieldname'] = 'determination:taxa_taxon_list_id';
$options = iform_map_get_map_options($args, $readAuth);
$olOptions = iform_map_get_ol_options($args);
// The maps internal projection will be left at its default of 900913.
$options['initialFeatureWkt'] = null;
$options['proxy'] = '';
$options['suffixTemplate'] = 'nosuffix';
$options2 = $options;
$options['searchLayer'] = 'true';
$options['editLayer'] = 'false';
$options['layers'] = array('polygonLayer');
$options2['divId'] = "map2";
$options2['layers'] = array('locationLayer');
// TBD Breadcrumb
//.........这里部分代码省略.........
示例10: get_form
/**
* 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.
* @todo: Implement this method
*/
public static function get_form($args, $node, $response = null)
{
global $indicia_templates, $user;
data_entry_helper::enable_validation('entry_form');
$url = !empty($_SERVER['HTTPS']) ? "https://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] : "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
$r = data_entry_helper::loading_block_start();
$r .= "<form method=\"post\" id=\"entry_form\" action=\"{$url}\">\n";
$readAuth = data_entry_helper::get_read_auth($args['website_id'], $args['password']);
$r .= "<div id=\"controls\">\n";
if ($args['interface'] != 'one_page') {
$r .= "<ul>\n";
if ($user->uid == 0) {
$r .= ' <li><a href="#about_you"><span>' . lang::get('about you') . "</span></a></li>\n";
}
$r .= ' <li><a href="#species"><span>' . lang::get('what did you see') . "</span></a></li>\n";
$r .= ' <li><a href="#place"><span>' . lang::get('where was it') . "</span></a></li>\n";
$r .= ' <li><a href="#other"><span>' . lang::get('other information') . "</span></a></li>\n";
$r .= "</ul>\n";
data_entry_helper::enable_tabs(array('divId' => 'controls', 'style' => $args['interface']));
}
if ($user->uid == 0) {
$r .= "<fieldset id=\"about_you\">\n";
if ($args['interface'] == 'one_page') {
$r .= '<legend>' . lang::get('about you') . '</legend>';
}
$r .= data_entry_helper::text_input(array('label' => lang::get('first name'), 'fieldname' => 'smpAttr:' . $args['first_name_attr_id'], 'class' => 'control-width-4', 'validation' => array('required')));
$r .= data_entry_helper::text_input(array('label' => lang::get('surname'), 'fieldname' => 'smpAttr:' . $args['surname_attr_id'], 'class' => 'control-width-4', 'validation' => array('required')));
$r .= data_entry_helper::text_input(array('label' => lang::get('phone number'), 'fieldname' => 'smpAttr:' . $args['phone_attr_id'], 'class' => 'control-width-4'));
$r .= data_entry_helper::text_input(array('label' => lang::get('email'), 'fieldname' => 'smpAttr:' . $args['email_attr_id'], 'class' => 'control-width-4 optional', 'validation' => array('email')));
if ($args['interface'] == 'wizard') {
$r .= data_entry_helper::wizard_buttons(array('divId' => 'controls', 'page' => 'first'));
}
$r .= "</fieldset>\n";
}
// Species tab
$r .= "<fieldset id=\"species\">\n";
if ($args['interface'] == 'one_page') {
$r .= '<legend>' . lang::get('what did you see') . '</legend>';
}
$species_list_args = array('label' => lang::get('Species'), 'fieldname' => 'occurrence:taxa_taxon_list_id', 'table' => 'taxa_taxon_list', 'captionField' => 'taxon', 'valueField' => 'id', 'listId' => $args['species_list_id'], 'columns' => 1, 'parentField' => 'parent_id', 'checkboxCol' => false, 'occAttrs' => array($args['abundance_attr_id']), 'extraParams' => $readAuth + array('view' => 'detail', 'orderby' => 'taxonomic_sort_order'), 'survey_id' => $args['survey_id'], 'header' => false, 'view' => 'detail', 'PHPtaxonLabel' => true);
// Build a nice template to show a picture of each species, with fancybox.
data_entry_helper::add_resource('fancybox');
data_entry_helper::$javascript .= "jQuery('a.fancybox').fancybox();\n";
$indicia_templates['taxon_label'] = 'return \'<div class="taxon-cell">' . '<a href="' . data_entry_helper::$base_url . 'upload/{image_path}" class="fancybox" >' . '<img alt="{taxon}" src="' . data_entry_helper::$base_url . 'upload/med-{image_path}" width="250"/></a>' . '<div>{taxon}</div></div>' . '<div class="taxon-desc"><ul><li>\'.str_replace("\\n", "</li><li>","{description_in_list}").\'</li></ul>' . '<a href="http://www.marine-life.org.uk/northeastcetaceans/?q=\'.
strtolower(str_replace(array(" ", "\\\'"), array("-", ""), "{taxon}")).
\'" target="_blank" class="ui-state-default ui-corner-all indicia-button">' . lang::get('More Info') . '...</a></div>\';';
// Template the taxon label cell
$indicia_templates['taxon_label_cell'] = "\n<td class='scTaxonCell'>{content}</td>";
// Also template the attribute controls to show the label in place.
$indicia_templates['attribute_cell'] = "\n<td class='scOccAttrCell'><label>{label}:</label><br/>{content}</td>";
$r .= data_entry_helper::species_checklist($species_list_args);
if ($args['interface'] == 'wizard') {
$r .= data_entry_helper::wizard_buttons(array('divId' => 'controls', 'page' => $user->uid == 0 ? 'middle' : 'first'));
}
$r .= "</fieldset>";
// --Place tab--
$r .= "<fieldset id=\"place\">\n";
if ($args['interface'] == 'one_page') {
$r .= '<legend>' . lang::get('where was it') . '</legend>';
}
$r .= data_entry_helper::radio_group(array('label' => 'Where were you when you made the sighting?', 'fieldname' => 'smpAttr:' . $args['platform_attr_id'], 'table' => 'termlists_term', 'captionField' => 'term', 'valueField' => 'id', 'extraParams' => $readAuth + array('termlist_id' => $args['platform_termlist_id']), 'sep' => '<br />', 'labelClass' => 'auto', 'class' => 'inline sighting-platform', 'validation' => array('required')));
$r .= '<div id="place_wrapper" class="hidden">';
// Some instructions only visible when entering data from a boat
$r .= '<p class="boat_mode page-notice ui-state-highlight ui-corner-all">' . lang::get('Instructions for when on boat') . '</p>';
// Some instructions only visible when entering data from the shore
$r .= '<p class="shore_mode page-notice ui-state-highlight ui-corner-all">' . lang::get('Instructions for clicking on map') . '</p>';
$r .= '<div class="boat_mode">';
// Add help examples to the lat and long boxes
$indicia_templates['sref_textbox_latlong'] = '<label for="{idLat}">{labelLat}:</label>' . '<input type="text" id="{idLat}" name="{fieldnameLat}" {class} {disabled} value="{default}" /> <p class="helpText">e.g. 55:12.345N</p>' . '<label for="{idLong}">{labelLong}:</label>' . '<input type="text" id="{idLong}" name="{fieldnameLong}" {class} {disabled} value="{default}" /> <p class="helpText">e.g. 0:45.678W</p>' . '<input type="hidden" id="imp-geom" name="{table}:geom" value="{defaultGeom}" />' . '<input type="text" id="{id}" name="{fieldname}" style="display:none" value="{default}" />';
$r .= data_entry_helper::sref_and_system(array('systems' => array(4326 => lang::get('Latitude, Longitude')), 'splitLatLong' => true, 'helpText' => lang::get('Instructions for latlong')));
$r .= '</div>';
// Initially, we hide the map. Only show it when the user selects the sighting was from the shore,
// as a click on the map for boat recordings will not be accurate.
$r .= '<div class="shore_mode">';
$options = iform_map_get_map_options($args, $readAuth);
$olOptions = iform_map_get_ol_options($args);
$options['maxZoom'] = 9;
// Switch to degrees and decimal minutes for lat long.
$options['latLongFormat'] = 'DM';
$r .= data_entry_helper::map_panel($options, $olOptions);
// Now, add some JavaScript to show or hide the map. Show it for when the sighting was from the shore.
// Hide it for boat based sightings as we want a GPS coordinate in this case. The JavaScript looks for the
// checked radio button to see the value
data_entry_helper::$javascript .= 'jQuery(".sighting-platform input").click(
function() {
var platformId = jQuery("input[name=smpAttr\\\\:' . $args['platform_attr_id'] . ']:checked").val();
if (platformId == ' . $args['platform_mapped_term_id'] . ') {
jQuery("#place_wrapper").removeClass("hidden");
jQuery(".shore_mode").removeClass("hidden");
jQuery(".boat_mode").addClass("hidden");
//.........这里部分代码省略.........
示例11: get_control_speciesmap_controls
protected static function get_control_speciesmap_controls($auth, $args, $options)
{
$langStrings = array('AddLabel' => lang::get("Add records to map"), 'AddMessage' => lang::get("Please click on the map where you would like to add your records. Zoom the map in for greater precision."), 'AddDataMessage' => lang::get("Please enter all the species records for this position into the grid below. When you have finished, click the Finish button to return to the map where you may choose another grid reference to enter data for."), 'MoveLabel' => lang::get("Move records"), 'MoveMessage1' => lang::get("Please select the records on the map you wish to move."), 'MoveMessage2' => lang::get("Please click on the map to choose the new position. Press the Cancel button to choose another set of records to move instead."), 'ModifyLabel' => lang::get("Modify records"), 'ModifyMessage1' => lang::get("Please select the records on the map you wish to change."), 'ModifyMessage2' => lang::get("Change (or add to) the records for this position. When you have finished, click the Finish button: this will return you to the map where you may choose another set of records to change."), 'DeleteLabel' => lang::get("Delete records"), 'DeleteMessage' => lang::get("Please select the records on the map you wish to delete."), 'ConfirmDeleteTitle' => lang::get("Confirm deletion of records"), 'ConfirmDeleteText' => lang::get("Are you sure you wish to delete all the records at {OLD}?"), 'CancelLabel' => lang::get("Cancel"), 'FinishLabel' => lang::get("Finish"), 'Yes' => lang::get("Yes"), 'No' => lang::get("No"), 'SRefLabel' => lang::get('LANG_SRef_Label'));
// make sure we load the JS.
data_entry_helper::add_resource('control_speciesmap_controls');
data_entry_helper::$javascript .= "control_speciesmap_addcontrols(" . json_encode($options) . "," . json_encode($langStrings) . ");\n";
$blocks = "";
if (isset(data_entry_helper::$entity_to_load)) {
foreach (data_entry_helper::$entity_to_load as $key => $value) {
$a = explode(':', $key, 4);
if (count($a) == 4 && $a[0] == 'sc' && $a[3] == 'sample:entered_sref') {
$geomKey = $a[0] . ':' . $a[1] . ':' . $a[2] . ':sample:geom';
$idKey = $a[0] . ':' . $a[1] . ':' . $a[2] . ':sample:id';
$deletedKey = $a[0] . ':' . $a[1] . ':' . $a[2] . ':sample:deleted';
// dont need to worry about sample_method_id for existing subsamples.
$blocks .= '<div id="scm-' . $a[1] . '-block" class="scm-block">' . '<label>' . lang::get('LANG_SRef_Label') . ':</label> ' . '<input type="text" value="' . $value . '" readonly="readonly" name="' . $key . '">' . '<input type="hidden" value="' . data_entry_helper::$entity_to_load[$geomKey] . '" name="' . $geomKey . '">' . '<input type="hidden" value="' . (isset(data_entry_helper::$entity_to_load[$deletedKey]) ? data_entry_helper::$entity_to_load[$deletedKey] : 'f') . '" name="' . $deletedKey . '">' . (isset(data_entry_helper::$entity_to_load[$idKey]) ? '<input type="hidden" value="' . data_entry_helper::$entity_to_load[$idKey] . '" name="' . $idKey . '">' : '');
/** Switch off sample attributes for this until Indicia can handle allocation better
if (!empty($options['sampleMethodId'])) {
$sampleAttrs = self::getAttributesForSample($args, $auth, $a[2]);
foreach ($sampleAttrs as &$attr) {
$attr['fieldname'] = 'sc:'.$a[1].':'.$a[2].':'.$attr['fieldname'];
$attr['id'] = 'sc:'.$a[1].':'.$a[2].':'.$attr['id'];
}
$attrOptions = self::get_attr_specific_options($options);
$sampleCtrls = get_attribute_html($sampleAttrs, $args, array('extraParams' => $auth['read']), null, $attrOptions);
$blocks .= '<div id="scm-'.$a[1].'-subsample-ctrls">' .
$sampleCtrls .
'</div>';
}
**/
$blocks .= '</div>';
}
}
}
return $blocks;
}
示例12: get_form
/**
* Return the generated form output.
* @return Form HTML.
*/
public static function get_form($args, $node)
{
global $user;
// There is a language entry in the args parameter list: this is derived from the $language DRUPAL global.
// It holds the 2 letter code, used to pick the language file from the lang subdirectory of prebuilt_forms.
// There should be no explicitly output text in this file.
// We must translate any field names and ensure that the termlists and taxonlists use the correct language.
// For attributes, the caption is automatically translated by data_entry_helper.
$logged_in = $user->uid > 0;
$uid = $user->uid;
$email = $user->mail;
$username = $user->name;
if (!user_access('IForm n' . $node->nid . ' access')) {
return "<p>" . lang::get('LANG_Insufficient_Privileges') . "</p>";
}
$r = '';
// Get authorisation tokens to update and read from the Warehouse.
$readAuth = data_entry_helper::get_read_auth($args['website_id'], $args['password']);
$svcUrl = data_entry_helper::$base_url . '/index.php/services';
drupal_add_js(drupal_get_path('module', 'iform') . '/media/js/jquery.form.js', 'module');
data_entry_helper::link_default_stylesheet();
data_entry_helper::add_resource('jquery_ui');
if ($args['language'] != 'en') {
data_entry_helper::add_resource('jquery_ui_' . $args['language']);
}
data_entry_helper::enable_validation('cc-1-collection-details');
// don't care about ID itself, just want resources
if ($args['help_module'] != '' && $args['help_inclusion_function'] != '' && module_exists($args['help_module']) && function_exists($args['help_inclusion_function'])) {
$use_help = true;
data_entry_helper::$javascript .= call_user_func($args['help_inclusion_function']);
} else {
$use_help = false;
}
// The only things that will be editable after the collection is saved will be the identifiaction of the flower/insects.
// no id - just getting the attributes, rest will be filled in using AJAX
$sample_attributes = data_entry_helper::getAttributes(array('valuetable' => 'sample_attribute_value', 'attrtable' => 'sample_attribute', 'key' => 'sample_id', 'fieldprefix' => 'smpAttr', 'extraParams' => $readAuth, 'survey_id' => $args['survey_id']));
$occurrence_attributes = data_entry_helper::getAttributes(array('valuetable' => 'occurrence_attribute_value', 'attrtable' => 'occurrence_attribute', 'key' => 'occurrence_id', 'fieldprefix' => 'occAttr', 'extraParams' => $readAuth, 'survey_id' => $args['survey_id']));
$location_attributes = data_entry_helper::getAttributes(array('valuetable' => 'location_attribute_value', 'attrtable' => 'location_attribute', 'key' => 'location_id', 'fieldprefix' => 'locAttr', 'extraParams' => $readAuth, 'survey_id' => $args['survey_id']));
$defNRAttrOptions = array('extraParams' => $readAuth + array('orderby' => 'id'), 'lookUpListCtrl' => 'radio_group', 'lookUpKey' => 'meaning_id', 'language' => iform_lang_iso_639_2($args['language']), 'containerClass' => 'group-control-box', 'sep' => ' ', 'suffixTemplate' => 'nosuffix');
$defAttrOptions = $defNRAttrOptions;
$defAttrOptions['validation'] = array('required');
$checkOptions = $defNRAttrOptions;
$checkOptions['lookUpListCtrl'] = 'checkbox_group';
$language = iform_lang_iso_639_2($args['language']);
global $indicia_templates;
$indicia_templates['sref_textbox_latlong'] = '<div class="latLongDiv"><label for="{idLat}">{labelLat}:</label>' . '<input type="text" id="{idLat}" name="{fieldnameLat}" {class} {disabled} value="{default}" /></div>' . '<div class="latLongDiv"><label for="{idLong}">{labelLong}:</label>' . '<input type="text" id="{idLong}" name="{fieldnameLong}" {class} {disabled} value="{default}" /></div>';
$r .= data_entry_helper::loading_block_start();
data_entry_helper::$javascript .= "var flowerTaxa = [";
$extraParams = $readAuth + array('taxon_list_id' => $args['flower_list_id'], 'view' => 'list');
$species_data_def = array('table' => 'taxa_taxon_list', 'extraParams' => $extraParams);
$taxa = data_entry_helper::get_population_data($species_data_def);
$first = true;
foreach ($taxa as $taxon) {
data_entry_helper::$javascript .= ($first ? '' : ',') . "{id: " . $taxon['id'] . ", taxon: \"" . htmlSpecialChars($taxon['taxon']) . "\"}\n";
$first = false;
}
data_entry_helper::$javascript .= "];\nvar insectTaxa = [";
$extraParams['taxon_list_id'] = $args['insect_list_id'];
$species_data_def['extraParams'] = $extraParams;
$taxa = data_entry_helper::get_population_data($species_data_def);
$first = true;
foreach ($taxa as $taxon) {
data_entry_helper::$javascript .= ($first ? '' : ',') . "{id: " . $taxon['id'] . ", taxon: \"" . htmlSpecialChars($taxon['taxon']) . "\"}\n";
$first = false;
}
data_entry_helper::$javascript .= "];";
// note we have to proxy the post. Every time a write transaction is carried out, the write nonce is trashed.
// For security reasons we don't want to give the user the ability to generate their own nonce, so we use
// the fact that the user is logged in to drupal as the main authentication/authorisation/identification
// process for the user. The proxy packages the post into the correct format
//
// There are 2 types of submission:
// When a user validates a panel using the validate button, the following panel is opened on success
// When a user presses a modify button, the open panel gets validated, and the panel to be modified is opened.
$r .= '
<div id="refresh-message" style="display:none" ><p>' . lang::get('LANG_Please_Refresh_Page') . '</p></div>
<div id="cc-1" class="poll-section">
<div id="cc-1-title" class="ui-accordion-header ui-helper-reset ui-state-active ui-corner-top poll-section-title">
<span id="cc-1-title-details">' . lang::get('LANG_Collection_Details') . '</span>
<div class="right">
<div>
<span id="cc-1-reinit-button" class="ui-state-default ui-corner-all reinit-button">' . lang::get('LANG_Reinitialise') . '</span>
<span id="cc-1-mod-button" class="ui-state-default ui-corner-all mod-button">' . lang::get('LANG_Modify') . '</span>
</div>
</div>
</div>
<div id="cc-1-details" class="ui-accordion-content ui-helper-reset ui-widget-content">
<span id="cc-1-protocol-details"></span>
</div>
<div id="cc-1-body" class="ui-accordion-content ui-helper-reset ui-widget-content ui-accordion-content-active poll-section-body">
<form id="cc-1-collection-details" action="' . iform_ajaxproxy_url($node, 'loc-sample') . '" method="POST">
<input type="hidden" id="website_id" name="website_id" value="' . $args['website_id'] . '" />
<input type="hidden" id="imp-sref" name="location:centroid_sref" value="" />
<input type="hidden" id="imp-geom" name="location:centroid_geom" value="" />
<input type="hidden" id="imp-sref-system" name="location:centroid_sref_system" value="4326" />
<input type="hidden" id="sample:survey_id" name="sample:survey_id" value="' . $args['survey_id'] . '" />
//.........这里部分代码省略.........
示例13: species_checklist
/**
* Helper function to generate a species checklist from a given taxon list.
*
* Please not that although this is based on the data_entry_helper function, it has only been tested with the following
* options for seasearch - @id,@useThirdLevelSamples,@lookupListId,@gridIdAttributeId,@speciesControlToUseSubSamples,@subSamplePerRow,@resizeWidth,@resizeHeight
* If you intend to use any other options, they will require further testing or development.
*
*/
private static function species_checklist($options)
{
global $indicia_templates;
data_entry_helper::add_resource('addrowtogrid');
$options = data_entry_helper::get_species_checklist_options($options);
$classlist = array('ui-widget', 'ui-widget-content', 'species-grid');
if (!empty($options['class'])) {
$classlist[] = $options['class'];
}
if ($options['subSamplePerRow']) {
// we'll track 1 sample per grid row.
$smpIdx = 0;
}
if ($options['columns'] > 1 && count($options['mediaTypes']) > 1) {
throw new Exception('The species_checklist control does not support having more than one occurrence per row (columns option > 0) ' . 'at the same time has having the mediaTypes option in use.');
}
data_entry_helper::add_resource('json');
data_entry_helper::add_resource('autocomplete');
$filterArray = data_entry_helper::get_species_names_filter($options);
$filterNameTypes = array('all', 'currentLanguage', 'preferred', 'excludeSynonyms');
//make a copy of the options so that we can maipulate it
$overrideOptions = $options;
//We are going to cycle through each of the name filter types
//and save the parameters required for each type in an array so
//that the Javascript can quickly access the required parameters
foreach ($filterNameTypes as $filterType) {
$overrideOptions['speciesNameFilterMode'] = $filterType;
$nameFilter[$filterType] = data_entry_helper::get_species_names_filter($overrideOptions);
$nameFilter[$filterType] = json_encode($nameFilter[$filterType]);
}
if (count($filterArray)) {
$filterParam = json_encode($filterArray);
data_entry_helper::$javascript .= "indiciaData['taxonExtraParams-" . $options['id'] . "'] = {$filterParam};\n";
// Apply a filter to extraParams that can be used when loading the initial species list, to get just the correct names.
if (isset($options['speciesNameFilterMode']) && !empty($options['listId'])) {
$filterFields = array();
$filterWheres = array();
self::parse_species_name_filter_mode($options, $filterFields, $filterWheres);
if (count($filterWheres)) {
$options['extraParams'] += array('query' => json_encode(array('where' => $filterWheres)));
}
$options['extraParams'] += $filterFields;
}
}
data_entry_helper::$js_read_tokens = $options['readAuth'];
data_entry_helper::$javascript .= "indiciaData['rowInclusionCheck-" . $options['id'] . "'] = '" . $options['rowInclusionCheck'] . "';\n";
data_entry_helper::$javascript .= "indiciaData['copyDataFromPreviousRow-" . $options['id'] . "'] = '" . $options['copyDataFromPreviousRow'] . "';\n";
data_entry_helper::$javascript .= "indiciaData['includeSpeciesGridLinkPage-" . $options['id'] . "'] = '" . $options['includeSpeciesGridLinkPage'] . "';\n";
data_entry_helper::$javascript .= "indiciaData.speciesGridPageLinkUrl = '" . $options['speciesGridPageLinkUrl'] . "';\n";
data_entry_helper::$javascript .= "indiciaData.speciesGridPageLinkParameter = '" . $options['speciesGridPageLinkParameter'] . "';\n";
data_entry_helper::$javascript .= "indiciaData.speciesGridPageLinkTooltip = '" . $options['speciesGridPageLinkTooltip'] . "';\n";
data_entry_helper::$javascript .= "indiciaData['editTaxaNames-" . $options['id'] . "'] = '" . $options['editTaxaNames'] . "';\n";
data_entry_helper::$javascript .= "indiciaData['subSpeciesColumn-" . $options['id'] . "'] = '" . $options['subSpeciesColumn'] . "';\n";
data_entry_helper::$javascript .= "indiciaData['subSamplePerRow-" . $options['id'] . "'] = " . ($options['subSamplePerRow'] ? 'true' : 'false') . ";\n";
if ($options['copyDataFromPreviousRow']) {
data_entry_helper::$javascript .= "indiciaData['previousRowColumnsToInclude-" . $options['id'] . "'] = '" . $options['previousRowColumnsToInclude'] . "';\n";
data_entry_helper::$javascript .= "indiciaData.langAddAnother='" . lang::get('Add another') . "';\n";
}
if (count($options['mediaTypes'])) {
data_entry_helper::add_resource('plupload');
// store some globals that we need later when creating uploaders
$relpath = data_entry_helper::getRootFolder() . data_entry_helper::client_helper_path();
$interim_image_folder = isset(parent::$interim_image_folder) ? parent::$interim_image_folder : 'upload/';
data_entry_helper::$javascript .= "indiciaData.uploadSettings = {\n";
data_entry_helper::$javascript .= " uploadScript: '" . $relpath . "upload.php',\n";
data_entry_helper::$javascript .= " destinationFolder: '" . $relpath . $interim_image_folder . "',\n";
data_entry_helper::$javascript .= " jsPath: '" . data_entry_helper::$js_path . "'";
if (isset($options['resizeWidth'])) {
data_entry_helper::$javascript .= ",\n resizeWidth: " . $options['resizeWidth'];
}
if (isset($options['resizeHeight'])) {
data_entry_helper::$javascript .= ",\n resizeHeight: " . $options['resizeHeight'];
}
if (isset($options['resizeQuality'])) {
data_entry_helper::$javascript .= ",\n resizeQuality: " . $options['resizeQuality'];
}
data_entry_helper::$javascript .= "\n}\n";
if ($indicia_templates['file_box'] != '') {
data_entry_helper::$javascript .= "file_boxTemplate = '" . str_replace('"', '\\"', $indicia_templates['file_box']) . "';\n";
}
if ($indicia_templates['file_box_initial_file_info'] != '') {
data_entry_helper::$javascript .= "file_box_initial_file_infoTemplate = '" . str_replace('"', '\\"', $indicia_templates['file_box_initial_file_info']) . "';\n";
}
if ($indicia_templates['file_box_uploaded_image'] != '') {
data_entry_helper::$javascript .= "file_box_uploaded_imageTemplate = '" . str_replace('"', '\\"', $indicia_templates['file_box_uploaded_image']) . "';\n";
}
}
$occAttrControls = array();
$occAttrs = array();
$occAttrControlsExisting = array();
$taxonRows = array();
$subSampleRows = array();
//.........这里部分代码省略.........
示例14: get_form
/**
* Return the Indicia form code.
* Expects there to be a sample attribute with caption 'Email' containing the email
* address.
* @param array $args Input parameters.
* @param array $node Drupal node object
* @param array $response Response from Indicia services after posting a verification.
* @return string HTML
*/
public static function get_form($args, $node, $response)
{
if (!self::check_prerequisites()) {
return '';
}
iform_load_helpers(array('data_entry_helper', 'map_helper', 'report_helper'));
$auth = data_entry_helper::get_read_write_auth($args['website_id'], $args['password']);
//Clear Verifier Tasks automatically when they open the screen if the option is set.
if ($args['clear_verification_task_notifications'] && hostsite_get_user_field('indicia_user_id')) {
self::clear_verifier_task_notifications($auth);
}
// set some defaults, applied when upgrading from a form configured on a previous form version.
if (empty($args['email_subject_send_to_recorder'])) {
$args['email_subject_send_to_recorder'] = 'Sample requires confirmation (ID:%id%)';
}
if (empty($args['email_body_send_to_recorder'])) {
$args['email_body_send_to_recorder'] = 'The following record requires confirmation. Please could you reply to this email stating how confident you are that the record is correct ' . 'and any other information you have which may help to confirm this.' . "\n\n%record%";
}
if (isset($_POST['enable'])) {
module_enable(array('iform_ajaxproxy'));
drupal_set_message(lang::get('The Indicia AJAX Proxy module has been enabled.', 'info'));
} elseif (!defined('IFORM_AJAXPROXY_PATH')) {
$r = '<p>' . lang::get('The Indicia AJAX Proxy module must be enabled to use this form. This lets the form save verifications to the ' . 'Indicia Warehouse without having to reload the page.') . '</p>';
$r .= '<form method="post">';
$r .= '<input type="hidden" name="enable" value="t"/>';
$r .= '<input type="submit" value="' . lang::get('Enable Indicia AJAX Proxy') . '"/>';
$r .= '</form>';
return $r;
}
if (function_exists('drupal_add_js')) {
drupal_add_js('misc/collapse.js');
}
// fancybox for popup comment forms etc
data_entry_helper::add_resource('fancybox');
data_entry_helper::add_resource('validation');
$indicia_user_id = self::get_indicia_user_id($args);
data_entry_helper::$js_read_tokens = $auth['read'];
// Find a list of websites we are allowed verify
if (function_exists('module_exists') && module_exists('easy_login')) {
if (strpos($args['param_presets'] . $args['param_defaults'], 'expertise_location') === false) {
$args['param_presets'] .= "\nexpertise_location={profile_location_expertise}";
}
if (strpos($args['param_presets'] . $args['param_defaults'], 'expertise_taxon_groups') === false) {
$args['param_presets'] .= "\nexpertise_taxon_groups={profile_taxon_groups_expertise}";
}
if (strpos($args['param_presets'] . $args['param_defaults'], 'expertise_surveys') === false) {
$args['param_presets'] .= "\nexpertise_surveys={profile_surveys_expertise}";
}
}
$args['sharing'] = 'verification';
$opts = array_merge(iform_report_get_report_options($args, $auth['read']), array('id' => 'verification-grid', 'reportGroup' => 'verification', 'rowId' => 'sample_id', 'paramsFormButtonCaption' => lang::get('Filter'), 'paramPrefix' => '<div class="report-param">', 'paramSuffix' => '</div>', 'sharing' => 'verification', 'ajax' => TRUE, 'callback' => 'verificationGridLoaded'));
$opts['columns'][] = array('display' => '', 'template' => '<div class="nowrap">' . '<input type="hidden" class="row-input-form" value="{rootFolder}{input_form}"/><input type="hidden" class="row-belongs-to-site" value="{belongs_to_site}"/>' . '<input type="checkbox" class="check-row no-select" style="display: none" value="{occurrence_id}" /></div>');
$params = self::report_filter_panel($args, $auth['read']);
$opts['zoomMapToOutput'] = false;
$grid = report_helper::report_grid($opts);
$r = str_replace(array('{grid}', '{paramsForm}'), array($grid, $params), self::get_template_with_map($args, $auth['read'], $opts['extraParams'], $opts['paramDefaults']));
$link = data_entry_helper::get_reload_link_parts();
global $user;
data_entry_helper::$js_read_tokens = $auth['read'];
data_entry_helper::$javascript .= 'indiciaData.nid = "' . $node->nid . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.username = "' . $user->name . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.userId = "' . $indicia_user_id . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.rootUrl = "' . $link['path'] . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.website_id = ' . $args['website_id'] . ";\n";
data_entry_helper::$javascript .= 'indiciaData.ajaxFormPostUrl="' . iform_ajaxproxy_url($node, 'sample') . "&user_id={$indicia_user_id}&sharing=verification\";\n";
data_entry_helper::$javascript .= 'indiciaData.ajaxUrl="' . url('iform/ajax/verification_samples') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.autoDiscard = ' . $args['auto_discard_rows'] . ";\n";
$imgPath = empty(data_entry_helper::$images_path) ? data_entry_helper::relative_client_helper_path() . "../media/images/" : data_entry_helper::$images_path;
data_entry_helper::$javascript .= 'indiciaData.imgPath = "' . $imgPath . "\";\n";
// output some translations for JS to use
// @todo: Check list for unused (e.g. query stuff)
data_entry_helper::$javascript .= "indiciaData.popupTranslations = {};\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.title="' . lang::get('Add comment regarding setting status to {1}') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.save="' . lang::get('Save and {1}') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.verbV="' . lang::get('accept') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.verbR="' . lang::get('don\'t accept') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.verbC3="' . lang::get('mark as plausible') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.V="' . lang::get('accepted') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.R="' . lang::get('not accepted') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.sub1="' . lang::get('correct') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.sub2="' . lang::get('considered correct') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.sub3="' . lang::get('plausible') . "\";\n";
// @todo: Should this term be unable to accept
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.sub4="' . lang::get('unable to verify') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.sub5="' . lang::get('incorrect') . "\";\n";
// IS THIS REQUIRED
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.D="' . lang::get('Query') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.tab_email="' . lang::get('Send query as email') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.tab_comment="' . lang::get('Save query to comments log') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.emailTitle="' . lang::get('Email record details') . "\";\n";
data_entry_helper::$javascript .= 'indiciaData.popupTranslations.emailInstruction="' . lang::get('Use this form to send an email a copy of the record, for example when you would ' . 'like to get the opinion of another expert.') . "\";\n";
//.........这里部分代码省略.........
示例15: get_control_speciesphotos
protected static function get_control_speciesphotos($auth, $args, $tabalias, $options)
{
iform_load_helpers(array('report_helper'));
data_entry_helper::add_resource('fancybox');
global $user;
//default an items per page if not set by administrator
if (empty($options['itemsPerPage']) || $options['itemsPerPage'] == NULL) {
$options['itemsPerPage'] = 6;
}
//default a column count if not set by administrator
if (empty($options['galleryColCount']) || $options['galleryColCount'] == NULL) {
$options['galleryColCount'] = 3;
}
//Use this report to return the photos
$reportName = 'library/taxa/species_notes_and_images';
$reportResults = report_helper::report_grid(array('readAuth' => $auth['read'], 'dataSource' => $reportName, 'itemsPerPage' => $options['itemsPerPage'], 'columns' => array(array('fieldname' => 'the_text', 'template' => '<div class="gallery-item"><a class="fancybox" href="{imageFolder}{the_text}"><img src="{imageFolder}thumb-{the_text}" title="{caption}" alt="{caption}"/><br/>{caption}</a></div>')), 'mode' => 'report', 'autoParamsForm' => false, 'includeAllColumns' => false, 'headers' => false, 'galleryColCount' => $options['galleryColCount'], 'extraParams' => array('taxa_taxon_list_id' => self::$taxa_taxon_list_id, 'taxon_meaning_id' => self::$taxon_meaning_id)));
return '<div class="detail-panel" id="detail-panel-speciesphotos"><h3>' . lang::get('Photos and media') . '</h3>' . $reportResults . '</div>';
}