本文整理汇总了PHP中data_entry_helper::getAttributes方法的典型用法代码示例。如果您正苦于以下问题:PHP data_entry_helper::getAttributes方法的具体用法?PHP data_entry_helper::getAttributes怎么用?PHP data_entry_helper::getAttributes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类data_entry_helper
的用法示例。
在下文中一共展示了data_entry_helper::getAttributes方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: get_form_html
protected static function get_form_html($args, $auth, $attributes)
{
// @todo Process the available data to load subsamples (habitats) and associated records correctly.
// toggle the checkboxes to after the label to match the form.
global $indicia_templates;
drupal_add_library('system', 'ui.tooltip', true);
$indicia_templates['check_or_radio_group_item'] = '<li><label for="{itemId}">{caption}</label><input type="{type}" name="{fieldname}" id="{itemId}" value="{value}"{class}{checked}{title} {disabled}/></li>';
// Create an array of custom attributes keyed by caption for easy lookup later
foreach ($attributes as $attr) {
self::$attrsByCaption[strtolower($attr['caption'])] = $attr;
}
// Build a list of the habitat-level attributes as well.
$attributeOpts = array('valuetable' => 'sample_attribute_value', 'attrtable' => 'sample_attribute', 'key' => 'sample_id', 'fieldprefix' => 'smpAttr', 'extraParams' => $auth['read'], 'survey_id' => $args['survey_id'], 'sample_method_id' => $args['habitat_sample_method_id']);
$habitatAttributes = data_entry_helper::getAttributes($attributeOpts, false);
foreach ($habitatAttributes as $attr) {
self::$habitatAttrsByCaption[strtolower($attr['caption'])] = $attr;
}
// load the habitat attribute values, if we have an existing sample
if (!empty(self::$loadedSampleId)) {
self::load_existing(self::$loadedSampleId, $auth);
} else {
data_entry_helper::$javascript .= "indiciaData.existingSubsampleData=[];\n";
}
// output some attribute info we can use for validation & business logic
data_entry_helper::$javascript .= "indiciaData.depthMinLimitAttrNames = " . json_encode(array(self::$attrsByCaption['depth shallow bsl']['fieldname'], self::$attrsByCaption['depth shallow bcd']['fieldname'])) . ";\n";
data_entry_helper::$javascript .= "indiciaData.depthMaxLimitAttrNames = " . json_encode(array(self::$attrsByCaption['depth deepest bsl']['fieldname'], self::$attrsByCaption['depth deepest bcd']['fieldname'])) . ";\n";
data_entry_helper::$javascript .= "indiciaData.driftAttrId = " . self::$attrsByCaption['drift dive?']['attributeId'] . ";\n";
data_entry_helper::$javascript .= "indiciaData.depthCDAttrName = '" . self::$attrsByCaption['tidal correction to chart datum']['fieldname'] . "';\n";
data_entry_helper::$javascript .= "indiciaData.habitatMinDepthSLAttrId = " . self::$habitatAttrsByCaption['upper depth from sea level']['attributeId'] . ";\n";
data_entry_helper::$javascript .= "indiciaData.habitatMaxDepthSLAttrId = " . self::$habitatAttrsByCaption['lower depth from sea level']['attributeId'] . ";\n";
data_entry_helper::$javascript .= "indiciaData.habitatMinDepthCDAttrId = " . self::$habitatAttrsByCaption['upper depth from chart datum']['attributeId'] . ";\n";
data_entry_helper::$javascript .= "indiciaData.habitatMaxDepthCDAttrId = " . self::$habitatAttrsByCaption['lower depth from chart datum']['attributeId'] . ";\n";
return parent::get_form_html($args, $auth, $attributes);
}
示例2: 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)
{
require_once drupal_get_path('module', 'iform') . '/client_helpers/map_helper.php';
$auth = data_entry_helper::get_read_write_auth($args['website_id'], $args['password']);
$settings = array('locationTypes' => helper_base::get_termlist_terms($auth, 'indicia:location_types', array('Transect Section')), 'locationId' => isset($_GET['section_id']) ? $_GET['section_id'] : null, 'parentId' => isset($_GET['transect_id']) ? $_GET['transect_id'] : null);
if ($settings['parentId']) {
$parent = data_entry_helper::get_population_data(array('table' => 'location', 'extraParams' => $auth['read'] + array('view' => 'detail', 'id' => $settings['parentId'], 'deleted' => 'f'), 'nocache' => true));
$settings['parent'] = $parent[0];
} else {
return 'This form must be called with a parent transect_id parameter.';
}
$settings['sections'] = data_entry_helper::get_population_data(array('table' => 'location', 'extraParams' => $auth['read'] + array('view' => 'detail', 'parent_id' => $settings['parentId'], 'deleted' => 'f'), 'nocache' => true));
if ($settings['locationId']) {
data_entry_helper::load_existing_record($auth['read'], 'location', $settings['locationId']);
} else {
data_entry_helper::$entity_to_load['location:code'] = 'S' . (count($settings['sections']) + 1);
}
$settings['attributes'] = data_entry_helper::getAttributes(array('id' => $settings['locationId'], 'valuetable' => 'location_attribute_value', 'attrtable' => 'location_attribute', 'key' => 'location_id', 'fieldprefix' => 'locAttr', 'extraParams' => $auth['read'], 'survey_id' => $args['survey_id'], 'location_type_id' => $settings['locationTypes'][0]['id']));
if (data_entry_helper::$entity_to_load['location:code']) {
$r = '<form method="post" id="input-form">';
}
$r .= $auth['write'];
$r .= '<div id="controls">';
$customAttributeTabs = array_merge(array('Section' => array('[*]')), get_attribute_tabs($settings['attributes']));
if (count($customAttributeTabs) > 1) {
$headerOptions = array('tabs' => array());
foreach ($customAttributeTabs as $tab => $content) {
$alias = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($tab));
$headerOptions['tabs']['#' . $alias] = lang::get($tab);
}
$r .= data_entry_helper::tab_header($headerOptions);
data_entry_helper::enable_tabs(array('divId' => 'controls', 'style' => $args['interface'], 'progressBar' => isset($args['tabProgress']) && $args['tabProgress'] == true));
}
foreach ($customAttributeTabs as $tab => $content) {
if ($tab == 'Section') {
$r .= self::get_section_tab($auth, $args, $settings);
} else {
$alias = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($tab));
$r .= "\n<div id=\"{$alias}\">\n";
$r .= get_attribute_html($settings['attributes'], $args, array('extraParams' => $auth['read']), $tab);
$r .= "</div>\n";
}
}
$r .= '</div>';
// controls
$r .= '</form>';
data_entry_helper::link_default_stylesheet();
if (function_exists('drupal_set_breadcrumb')) {
$breadcrumb = array();
$breadcrumb[] = l('Home', '<front>');
$breadcrumb[] = l('Sites', $args['sites_list_path']);
$breadcrumb[] = l($settings['parent']['name'], $args['transect_edit_path'], array('query' => array('id' => $settings['parentId'])));
$breadcrumb[] = $settings['locationId'] ? data_entry_helper::$entity_to_load['location:name'] : lang::get('new section');
drupal_set_breadcrumb($breadcrumb);
}
return $r;
}
示例3: get_form
/**
* Return the generated form output.
* @return Form HTML.
*/
public static function get_form($args)
{
if (empty($_GET['occurrence_id'])) {
return 'This form requires an occurrence_id parameter in the URL.';
}
$r = "<form method=\"post\">\n";
// Get authorisation tokens to update and read from the Warehouse.
$auth = data_entry_helper::get_read_write_auth($args['website_id'], $args['password']);
data_entry_helper::load_existing_record($auth['read'], 'occurrence', $_GET['occurrence_id']);
data_entry_helper::load_existing_record($auth['read'], 'sample', data_entry_helper::$entity_to_load['occurrence:sample_id']);
$r .= $auth['write'];
$r .= "<input type=\"hidden\" id=\"website_id\" name=\"website_id\" value=\"" . $args['website_id'] . "\" />\n";
$r .= "<input type=\"hidden\" id=\"occurrence:id\" name=\"occurrence:id\" value=\"" . $_GET['occurrence_id'] . "\" />\n";
$r .= "<input type=\"hidden\" id=\"occurrence:sample_id\" name=\"occurrence:sample_id\" value=\"" . data_entry_helper::$entity_to_load['sample:id'] . "\" />\n";
$r .= "<div id=\"controls\">\n";
$r .= "<table>\n";
$r .= "<tr><td><strong>Date</strong></td><td>" . data_entry_helper::$entity_to_load['sample:date'] . "</td></tr>\n";
$r .= "<tr><td><strong>Spatial Reference</strong></td><td>" . data_entry_helper::$entity_to_load['sample:entered_sref'] . "</td></tr>\n";
$siteLabels = array();
if (!empty(data_entry_helper::$entity_to_load['sample:location'])) {
$siteLabels[] = data_entry_helper::$entity_to_load['sample:location'];
}
if (!empty(data_entry_helper::$entity_to_load['sample:location_name'])) {
$siteLabels[] = data_entry_helper::$entity_to_load['sample:location_name'];
}
$r .= "<tr><td><strong>Site</strong></td><td>" . implode(' | ', $siteLabels) . "</td></tr>\n";
$smpAttrs = data_entry_helper::getAttributes(array('id' => data_entry_helper::$entity_to_load['sample:id'], 'valuetable' => 'sample_attribute_value', 'attrtable' => 'sample_attribute', 'key' => 'sample_id', 'extraParams' => $auth['read'], 'survey_id' => data_entry_helper::$entity_to_load['occurrence:survey_id']));
$occAttrs = data_entry_helper::getAttributes(array('id' => $_GET['occurrence_id'], 'valuetable' => 'occurrence_attribute_value', 'attrtable' => 'occurrence_attribute', 'key' => 'occurrence_id', 'extraParams' => $auth['read'], 'survey_id' => data_entry_helper::$entity_to_load['occurrence:survey_id']));
$attributes = array_merge($smpAttrs, $occAttrs);
foreach ($attributes as $attr) {
$r .= "<tr><td><strong>" . $attr['caption'] . "</strong></td><td>" . $attr['displayValue'] . "</td></tr>\n";
}
$extraParams = $auth['read'] + array('taxon_list_id' => $args['list_id']);
if ($args['preferred']) {
$extraParams += array('preferred' => 't');
}
$species_list_args = array('itemTemplate' => 'select_species', 'fieldname' => 'occurrence:taxa_taxon_list_id', 'table' => 'taxa_taxon_list', 'captionField' => 'taxon', 'valueField' => 'id', 'columns' => 2, 'extraParams' => $extraParams);
// Dynamically generate the species selection control required.
$r .= '<tr/><td><strong>Species</strong></td><td>' . call_user_func(array('data_entry_helper', $args['species_ctrl']), $species_list_args) . "</td></tr>\n";
$r .= "</table>\n";
$r .= "</div>\n";
$r .= "<input type=\"submit\" class=\"ui-state-default ui-corner-all\" value=\"Save\" />\n";
$r .= "</form>";
return $r;
}
示例4: getAttributes
protected static function getAttributes($args, $auth)
{
$id = isset(data_entry_helper::$entity_to_load['location:id']) ? data_entry_helper::$entity_to_load['location:id'] : null;
$attrOpts = array('id' => $id, 'valuetable' => 'location_attribute_value', 'attrtable' => 'location_attribute', 'key' => 'location_id', 'fieldprefix' => 'locAttr', 'extraParams' => $auth['read'], 'survey_id' => $args['survey_id']);
$attributes = data_entry_helper::getAttributes($attrOpts, false);
return $attributes;
}
示例5: get_form
/**
* Return the generated form output.
* @return Form HTML.
*/
public static function get_form($args)
{
require_once drupal_get_path('module', 'iform') . '/client_helpers/map_helper.php';
$hidden = str_replace("\r\n", "\n", $args['hide_fields']);
$hidden = explode("\n", $hidden);
if (empty($_GET['occurrence_id'])) {
return 'This form requires an occurrence_id parameter in the URL.';
}
// Get authorisation tokens to update and read from the Warehouse.
$auth = data_entry_helper::get_read_auth($args['website_id'], $args['password']);
data_entry_helper::load_existing_record($auth, 'occurrence', $_GET['occurrence_id']);
data_entry_helper::load_existing_record($auth, 'sample', data_entry_helper::$entity_to_load['occurrence:sample_id']);
$r .= "<div id=\"controls\">\n";
$r .= "<table>\n";
if (!in_array('Species', $hidden)) {
$r .= "<tr><td><strong>" . lang::get('Species') . "</strong></td><td>" . data_entry_helper::$entity_to_load['occurrence:taxon'] . "</td></tr>\n";
}
if (!in_array('Date', $hidden)) {
$r .= "<tr><td><strong>Date</strong></td><td>" . data_entry_helper::$entity_to_load['sample:date'] . "</td></tr>\n";
}
if (!in_array('Grid Reference', $hidden)) {
$r .= "<tr><td><strong>Grid Reference</strong></td><td>" . data_entry_helper::$entity_to_load['sample:entered_sref'] . "</td></tr>\n";
}
$siteLabels = array();
if (!empty(data_entry_helper::$entity_to_load['sample:location'])) {
$siteLabels[] = data_entry_helper::$entity_to_load['sample:location'];
}
if (!empty(data_entry_helper::$entity_to_load['sample:location_name'])) {
$siteLabels[] = data_entry_helper::$entity_to_load['sample:location_name'];
}
if (!in_array('Site', $hidden) && !empty($siteLabels)) {
$r .= "<tr><td><strong>Site</strong></td><td>" . implode(' | ', $siteLabels) . "</td></tr>\n";
}
$smpAttrs = data_entry_helper::getAttributes(array('id' => data_entry_helper::$entity_to_load['sample:id'], 'valuetable' => 'sample_attribute_value', 'attrtable' => 'sample_attribute', 'key' => 'sample_id', 'extraParams' => $auth, 'survey_id' => data_entry_helper::$entity_to_load['occurrence:survey_id']));
$occAttrs = data_entry_helper::getAttributes(array('id' => $_GET['occurrence_id'], 'valuetable' => 'occurrence_attribute_value', 'attrtable' => 'occurrence_attribute', 'key' => 'occurrence_id', 'extraParams' => $auth, 'survey_id' => data_entry_helper::$entity_to_load['occurrence:survey_id']));
$attributes = array_merge($smpAttrs, $occAttrs);
foreach ($attributes as $attr) {
if (!in_array($attr['caption'], $hidden)) {
$r .= "<tr><td><strong>" . lang::get($attr['caption']) . "</strong></td><td>" . $attr['displayValue'] . "</td></tr>\n";
}
}
$r .= "</table>\n";
$r .= "</div>\n";
$options = iform_map_get_map_options($args, $readAuth);
$olOptions = iform_map_get_ol_options($args);
$options['initialFeatureWkt'] = data_entry_helper::$entity_to_load['occurrence:wkt'];
$r .= map_helper::map_panel($options, $olOptions);
return $r;
}
示例6: 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'] . '" />
//.........这里部分代码省略.........
示例7: get_submission
/**
* Handles the construction of a submission array from a set of form values.
* @param array $values Associative array of form data values.
* @param array $args iform parameters.
* @return array Submission structure.
* @todo: Implement this method
*/
public static function get_submission($values, $args)
{
$subsampleModels = array();
if (isset($values['page']) && $values['page'] == 'speciesmap') {
$submission = data_entry_helper::build_sample_subsamples_occurrences_submission($values);
} else {
if (!isset($values['page']) || $values['page'] == 'mainSample') {
// submitting the first page, with top level sample details
$read = array('nonce' => $values['read_nonce'], 'auth_token' => $values['read_auth_token']);
if (!isset($values['sample:entered_sref'])) {
// the sample does not have sref data, as the user has just picked a transect site at this point. Copy the
// site's centroid across to the sample. Should this be cached?
$site = data_entry_helper::get_population_data(array('table' => 'location', 'extraParams' => $read + array('view' => 'detail', 'id' => $values['sample:location_id'], 'deleted' => 'f')));
$site = $site[0];
$values['sample:entered_sref'] = $site['centroid_sref'];
$values['sample:entered_sref_system'] = $site['centroid_sref_system'];
}
// Build the subsamples
$sections = data_entry_helper::get_population_data(array('table' => 'location', 'extraParams' => $read + array('view' => 'detail', 'parent_id' => $values['sample:location_id'], 'deleted' => 'f'), 'nocache' => true));
if (isset($values['sample:id'])) {
$existingSubSamples = data_entry_helper::get_population_data(array('table' => 'sample', 'extraParams' => $read + array('view' => 'detail', 'parent_id' => $values['sample:id'], 'deleted' => 'f'), 'nocache' => true));
} else {
$existingSubSamples = array();
}
$sampleMethods = helper_base::get_termlist_terms(array('read' => $read), 'indicia:sample_methods', array('Transect Section'));
$attributes = data_entry_helper::getAttributes(array('valuetable' => 'sample_attribute_value', 'attrtable' => 'sample_attribute', 'key' => 'sample_id', 'fieldprefix' => 'smpAttr', 'extraParams' => $read, 'survey_id' => $values['sample:survey_id'], 'sample_method_id' => $sampleMethods[0]['id'], 'multiValue' => false));
$smpDate = self::parseSingleDate($values['sample:date']);
foreach ($sections as $section) {
$smp = false;
$exists = false;
foreach ($existingSubSamples as $existingSubSample) {
if ($existingSubSample['location_id'] == $section['id']) {
$exists = $existingSubSample;
break;
}
}
if (!$exists) {
$smp = array('fkId' => 'parent_id', 'model' => array('id' => 'sample', 'fields' => array('survey_id' => array('value' => $values['sample:survey_id']), 'website_id' => array('value' => $values['website_id']), 'date' => array('value' => $values['sample:date']), 'location_id' => array('value' => $section['id']), 'entered_sref' => array('value' => $section['centroid_sref']), 'entered_sref_system' => array('value' => $section['centroid_sref_system']), 'sample_method_id' => array('value' => $sampleMethods[0]['id']))), 'copyFields' => array('date_start' => 'date_start', 'date_end' => 'date_end', 'date_type' => 'date_type'));
foreach ($attributes as $attr) {
foreach ($values as $key => $value) {
$parts = explode(':', $key);
if (count($parts) > 1 && $parts[0] == 'smpAttr' && $parts[1] == $attr['attributeId']) {
$smp['model']['fields']['smpAttr:' . $attr['attributeId']] = array('value' => $value);
}
}
}
} else {
// need to ensure any date change is propagated: only do if date has changed for performance reasons.
$subSmpDate = self::parseSingleDate($exists['date_start']);
if (strcmp($smpDate, $subSmpDate)) {
$smp = array('fkId' => 'parent_id', 'model' => array('id' => 'sample', 'fields' => array('survey_id' => array('value' => $values['sample:survey_id']), 'website_id' => array('value' => $values['website_id']), 'id' => array('value' => $exists['id']), 'date' => array('value' => $values['sample:date']), 'location_id' => array('value' => $exists['location_id']))), 'copyFields' => array('date_start' => 'date_start', 'date_end' => 'date_end', 'date_type' => 'date_type'));
}
}
if ($smp) {
$subsampleModels[] = $smp;
}
}
}
$submission = submission_builder::build_submission($values, array('model' => 'sample'));
if (count($subsampleModels) > 0) {
$submission['subModels'] = $subsampleModels;
}
}
return $submission;
}
示例8: mnhnl_reptiles_species_checklist
public static function mnhnl_reptiles_species_checklist()
{
global $indicia_templates;
$options = data_entry_helper::check_arguments(func_get_args(), array('listId', 'occAttrs', 'readAuth', 'extraParams', 'lookupListId'));
$options = data_entry_helper::get_species_checklist_options($options);
data_entry_helper::add_resource('json');
data_entry_helper::add_resource('autocomplete');
$occAttrControls = array();
$occAttrs = array();
// Load any existing sample's occurrence data into $entity_to_load
$subSamples = array();
if (isset(data_entry_helper::$entity_to_load['sample:id'])) {
data_entry_helper::preload_species_checklist_occurrences(data_entry_helper::$entity_to_load['sample:id'], $options['readAuth'], false, array(), $subSamples, false);
}
// load the full list of species for the grid, including the main checklist plus any additional species in the reloaded occurrences.
$options['extraParams']['view'] = 'detail';
$occList = self::get_species_checklist_occ_list($options);
// If we managed to read the species list data we can proceed
if (!array_key_exists('error', $occList)) {
$attributes = data_entry_helper::getAttributes(array('id' => null, 'valuetable' => 'occurrence_attribute_value', 'attrtable' => 'occurrence_attribute', 'key' => 'occurrence_id', 'fieldprefix' => "{fieldname}", 'extraParams' => $options['readAuth'], 'survey_id' => array_key_exists('survey_id', $options) ? $options['survey_id'] : null));
// Get the attribute and control information required to build the custom occurrence attribute columns
data_entry_helper::species_checklist_prepare_attributes($options, $attributes, $occAttrControls, $occAttrs);
$grid = "<p>" . lang::get('LANG_SpeciesInstructions') . "</p>\n";
if (isset($options['lookupListId'])) {
$grid .= self::get_species_checklist_clonable_row($options, $occAttrControls, $attributes);
}
$grid .= '<table class="ui-widget ui-widget-content mnhnl-species-grid ' . $options['class'] . '" id="' . $options['id'] . '">';
$grid .= self::get_species_checklist_header($options, $occAttrs);
$rows = array();
$rowIdx = 0;
foreach ($occList as $occ) {
$ttlid = $occ['taxon']['id'];
$firstCell = data_entry_helper::mergeParamsIntoTemplate($occ['taxon'], 'taxon_label', false, true);
if ($options['PHPtaxonLabel']) {
$firstCell = eval($firstCell);
}
$colspan = ' colspan="' . count($attributes) . '"';
// assume always removeable and presence is hidden.
$firstrow = '<td class="ui-state-default remove-row" style="width: 1%" rowspan="' . ($options['occurrenceComment'] ? "3" : "2") . '" >X</td>';
$firstrow .= str_replace('{content}', $firstCell, str_replace('{colspan}', $colspan, $indicia_templates['taxon_label_cell']));
$existing_record_id = $occ['id'];
$hidden = $options['rowInclusionCheck'] == 'checkbox' ? '' : ' style="display:none"';
if ($options['rowInclusionCheck'] == 'alwaysFixed' || $options['rowInclusionCheck'] == 'alwaysRemovable' || data_entry_helper::$entity_to_load != null && array_key_exists("sc:{$ttlid}:{$existing_record_id}:present", data_entry_helper::$entity_to_load)) {
$checked = ' checked="checked"';
} else {
$checked = '';
}
$secondrow = "<td class=\"scPresenceCell\"{$hidden}>" . ($options['rowInclusionCheck'] != 'hasData' ? "<input type=\"hidden\" class=\"scPresence\" name=\"sc:{$ttlid}:{$existing_record_id}:present\" value=\"0\"/><input type=\"checkbox\" class=\"scPresence\" name=\"sc:{$ttlid}:{$existing_record_id}:present\" {$checked} />" : '') . "</td>";
foreach ($occAttrControls as $attrId => $control) {
if ($existing_record_id) {
$search = preg_grep("/^sc:" . $ttlid . "[_[0-9]*]?:{$existing_record_id}:occAttr:{$attrId}" . '[:[0-9]*]?$/', array_keys(data_entry_helper::$entity_to_load));
$ctrlId = count($search) === 1 ? implode('', $search) : "sc:{$ttlid}:{$existing_record_id}:occAttr:{$attrId}";
} else {
$ctrlId = "sc:{$ttlid}:x{$rowIdx}:occAttr:{$attrId}";
}
if (isset(data_entry_helper::$entity_to_load[$ctrlId])) {
$existing_value = data_entry_helper::$entity_to_load[$ctrlId];
} elseif (array_key_exists('default', $attributes[$attrId])) {
$existing_value = $attributes[$attrId]['default'];
} else {
$existing_value = '';
}
$oc = str_replace('{fieldname}', $ctrlId, $control);
if (!empty($existing_value)) {
// For select controls, specify which option is selected from the existing value
if (substr($oc, 0, 7) == '<select') {
$oc = str_replace('value="' . $existing_value . '"', 'value="' . $existing_value . '" selected="selected"', $oc);
} else {
if (strpos($oc, 'checkbox') !== false) {
if ($existing_value == "1") {
$oc = str_replace('type="checkbox"', 'type="checkbox" checked="checked"', $oc);
}
} else {
$oc = str_replace('value=""', 'value="' . $existing_value . '"', $oc);
}
}
// assume all error handling/validation done client side
}
$secondrow .= str_replace(array('{label}', '{content}'), array(lang::get($attributes[$attrId]['caption']), $oc), $indicia_templates[$options['attrCellTemplate']]);
}
$thirdrow = "";
if ($options['occurrenceComment']) {
$thirdrow .= "\n<td class=\"ui-widget-content scCommentCell\" {$colspan}><label for=\"sc:{$ttlid}:{$existing_record_id}:occurrence:comment\" class=\"auto-width\" >" . lang::get("Comment") . " : </label><input class=\"scComment\" type=\"text\" name=\"sc:{$ttlid}:{$existing_record_id}:occurrence:comment\" " . "id=\"sc:{$ttlid}:{$existing_record_id}:occurrence:comment\" value=\"" . htmlspecialchars(data_entry_helper::$entity_to_load["sc:{$ttlid}:{$existing_record_id}:occurrence:comment"]) . "\" /></td>";
}
$rows[] = '<tr>' . $firstrow . '</tr>';
$rows[] = '<tr class="scMeaning-' . $occ['taxon']['taxon_meaning_id'] . ' scDataRow">' . $secondrow . '</tr>';
// no images.
if ($thirdrow != "") {
$rows[] = '<tr class="scMeaning-' . $occ['taxon']['taxon_meaning_id'] . ' scDataRow">' . $thirdrow . '</tr>';
}
// no images.
$rowIdx++;
}
$grid .= "\n<tbody>\n";
if (count($rows) > 0) {
$grid .= implode("\n", $rows) . "\n";
} else {
$grid .= "<tr style=\"display: none\"><td></td></tr>\n";
}
$grid .= "</tbody>\n</table>\n";
//.........这里部分代码省略.........
示例9: get_control_recorderdetails
/**
* Get the block of sample custom attributes for the recorder
*/
private static function get_control_recorderdetails($auth, $args, $tabalias, $options)
{
// get the sample attributes
$attrOpts = array('id' => data_entry_helper::$entity_to_load['sample:id'], 'valuetable' => 'sample_attribute_value', 'attrtable' => 'sample_attribute', 'key' => 'sample_id', 'fieldprefix' => 'smpAttr', 'extraParams' => $auth['read'], 'survey_id' => $args['survey_id']);
// select only the custom attributes that are for this sample method or all sample methods, if this
// form is for a specific sample method.
if (!empty($args['sample_method_id'])) {
$attrOpts['sample_method_id'] = $args['sample_method_id'];
}
$attributes = data_entry_helper::getAttributes($attrOpts, false);
// load values from profile. This is Drupal specific code, so degrade gracefully.
if (function_exists('profile_load_profile')) {
global $user;
profile_load_all_profile($user);
foreach ($attributes as &$attribute) {
if (!isset($attribute['default'])) {
$attrPropName = 'profile_' . strtolower(str_replace(' ', '_', $attribute['caption']));
if (isset($user->{$attrPropName})) {
$attribute['default'] = $user->{$attrPropName};
} elseif (strcasecmp($attribute['caption'], 'email') === 0 && isset($user->mail)) {
$attribute['default'] = $user->mail;
}
}
}
}
$defAttrOptions = array('extraParams' => $auth['read'], 'class' => "required");
$attrHtml = '';
// Drupal specific code
if (!user_access('IForm n' . self::$node->nid . ' enter data by proxy')) {
if (isset($options['lockable'])) {
unset($options['lockable']);
}
$defAttrOptions += array('readonly' => 'readonly="readonly"');
$attrHtml .= '<div class="readonlyFieldset">';
}
$defAttrOptions += $options;
$blockOptions = array();
$attrHtml .= get_attribute_html($attributes, $args, $defAttrOptions, 'Enter data by proxy', $blockOptions);
if (!user_access('IForm n' . self::$node->nid . ' enter data by proxy')) {
$attrHtml .= '</div>';
}
return $attrHtml;
}
示例10: 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('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;
}
if ($args['ID_tool_module'] != '' && $args['ID_tool_inclusion_function'] != '' && module_exists($args['ID_tool_module']) && function_exists($args['ID_tool_inclusion_function'])) {
$use_ID_tool = true;
data_entry_helper::$javascript .= call_user_func($args['ID_tool_inclusion_function']);
} else {
$use_ID_tool = 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']));
$defAttrOptions = array('extraParams' => $readAuth, 'lookUpListCtrl' => 'radio_group', 'validation' => array('required'), 'language' => iform_lang_iso_639_2($args['language']), 'containerClass' => 'group-control-box', 'suffixTemplate' => 'nosuffix');
$language = iform_lang_iso_639_2($args['language']);
global $indicia_templates;
$indicia_templates['sref_textbox_latlong'] = '<label for="{idLat}">{labelLat}:</label>' . '<input type="text" id="{idLat}" name="{fieldnameLat}" {class} {disabled} value="{default}" />' . '<label for="{idLong}">{labelLong}:</label>' . '<input type="text" id="{idLong}" name="{fieldnameLong}" {class} {disabled} value="{default}" />';
$r .= data_entry_helper::loading_block_start();
// 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="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 ui-accordion-content-active">
<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'] . '" />
' . iform_pollenators::help_button($use_help, "collection-help-button", $args['help_function'], $args['help_collection_arg']) . '
<label for="location:name">' . lang::get('LANG_Collection_Name_Label') . '</label>
<input type="text" id="location:name" name="location:name" value="" class="required"/>
<input type="hidden" id="sample:location_name" name="sample:location_name" value=""/>
' . data_entry_helper::outputAttribute($sample_attributes[$args['protocol_attr_id']], $defAttrOptions) . ' <input type="hidden" name="sample:date" value="2010-01-01"/>
<input type="hidden" id="smpAttr:' . $args['complete_attr_id'] . '" name="smpAttr:' . $args['complete_attr_id'] . '" value="0" />
<input type="hidden" id="smpAttr:' . $args['uid_attr_id'] . '" name="smpAttr:' . $args['uid_attr_id'] . '" value="' . $uid . '" />
<input type="hidden" id="smpAttr:' . $args['email_attr_id'] . '" name="smpAttr:' . $args['email_attr_id'] . '" value="' . $email . '" />
<input type="hidden" id="smpAttr:' . $args['username_attr_id'] . '" name="smpAttr:' . $args['username_attr_id'] . '" value="' . $username . '" />
<input type="hidden" id="locations_website:website_id" name="locations_website:website_id" value="' . $args['website_id'] . '" />
<input type="hidden" id="location:id" name="location:id" value="" disabled="disabled" />
<input type="hidden" id="sample:id" name="sample:id" value="" disabled="disabled" />
</form>
<div id="cc-1-valid-button" class="ui-state-default ui-corner-all save-button">' . lang::get('LANG_Validate') . '</div>
</div>
<div style="display:none" />
<form id="cc-1-delete-collection" action="' . iform_ajaxproxy_url($node, 'sample') . '" method="POST">
<input type="hidden" name="website_id" value="' . $args['website_id'] . '" />
<input type="hidden" name="sample:survey_id" value="' . $args['survey_id'] . '" />
<input type="hidden" name="sample:id" value="" />
<input type="hidden" name="sample:date" value="2010-01-01"/>
//.........这里部分代码省略.........
示例11: loadOccAttrs
/**
* Load the list of occurrence attributes into a static variable.
* By maintaining a single list of attributes we can track which have already
* been output.
* @param array $readAuth Read authorisation tokens.
* @param integer $surveyId ID of the survey to load occurrence attributes for.
*/
protected static function loadOccAttrs($readAuth, $surveyId)
{
if (!isset(self::$occAttrs)) {
$attrArgs = array('valuetable' => 'occurrence_attribute_value', 'attrtable' => 'occurrence_attribute', 'key' => 'occurrence_id', 'fieldprefix' => 'occAttr', 'extraParams' => $readAuth, 'survey_id' => $surveyId);
self::$occAttrs = data_entry_helper::getAttributes($attrArgs, false);
}
}
示例12: get_occurrences_form
public static function get_occurrences_form($args, $node, $response)
{
global $user;
data_entry_helper::add_resource('jquery_form');
data_entry_helper::add_resource('jquery_ui');
data_entry_helper::add_resource('json');
data_entry_helper::add_resource('autocomplete');
$auth = data_entry_helper::get_read_write_auth($args['website_id'], $args['password']);
// did the parent sample previously exist? Default is no.
$parentSampleId = null;
$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'];
$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;
}
}
if (!$parentSampleId || $parentSampleId == '') {
return 'Could not determine the parent sample.';
}
// find any attributes that apply to Timed Count Count samples.
$sampleMethods = helper_base::get_termlist_terms($auth, 'indicia:sample_methods', array('Timed Count Count'));
if (count($sampleMethods) == 0) {
return 'The sample method "Timed Count Count" must be defined in the termlist in order to use this form.';
}
$attributes = data_entry_helper::getAttributes(array('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 (!isset(data_entry_helper::$validation_errors)) {
// the parent sample and at least one sub-sample have already been created: can't cache in case a new subsample (Count) added.
data_entry_helper::load_existing_record($auth['read'], 'sample', $parentSampleId);
$d = new DateTime(data_entry_helper::$entity_to_load['sample:date']);
data_entry_helper::$entity_to_load['sample:date'] = $d->format('Y');
// using the report returns the attributes as well.
$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));
// subssamples ordered by id desc, so reorder by date asc.
usort($subSamples, "iform_timed_count_subsample_cmp");
for ($i = 0; $i < count($subSamples); $i++) {
data_entry_helper::$entity_to_load['C' . ($i + 1) . ':sample:id'] = $subSamples[$i]['sample_id'];
data_entry_helper::$entity_to_load['C' . ($i + 1) . ':sample:date'] = $subSamples[$i]['date'];
// this is in correct format
foreach ($subSamples[$i] as $field => $value) {
if (preg_match('/^attr_sample_/', $field)) {
$parts = explode('_', $field);
if ($subSamples[$i]['attr_id_sample_' . $parts[2]] != null) {
data_entry_helper::$entity_to_load['C' . ($i + 1) . ':smpAttr:' + $parts[2] + ':' + $subSamples[$i]['attr_id_sample_' . $parts[2]]] = $value;
}
}
}
}
}
data_entry_helper::$javascript .= "indiciaData.speciesList = " . $args['taxon_list_id'] . ";\n";
if (!empty($args['taxon_filter_field']) && !empty($args['taxon_filter'])) {
data_entry_helper::$javascript .= "indiciaData.speciesListFilterField = '" . $args['taxon_filter_field'] . "';\n";
$filterLines = helper_base::explode_lines($args['taxon_filter']);
data_entry_helper::$javascript .= "indiciaData.speciesListFilterValues = '" . json_encode($filterLines) . "';\n";
}
data_entry_helper::$javascript .= "\r\nindiciaData.indiciaSvc = '" . data_entry_helper::$base_url . "';\n";
data_entry_helper::$javascript .= "indiciaData.readAuth = {nonce: '" . $auth['read']['nonce'] . "', auth_token: '" . $auth['read']['auth_token'] . "'};\n";
data_entry_helper::$javascript .= "indiciaData.parentSample = " . $parentSampleId . ";\n";
data_entry_helper::$javascript .= "indiciaData.occAttrId = " . $args['occurrence_attribute_id'] . ";\n";
if ($existing) {
// Only need to load the occurrences for a pre-existing sample
$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));
// the report is ordered id desc. REverse it
$o = array_reverse($o);
} else {
$o = array();
}
// empty array of occurrences when no creating a new sample.
// we pass through the read auth. This makes it possible for the get_submission method to authorise against the warehouse
// without an additional (expensive) warehouse call.
// pass a param that sets the next page to display
$r = "<form method='post' id='subsamples'>" . $auth['write'] . "\r\n<input type='hidden' name='page' value='occurrences'/>\r\n<input type='hidden' name='read_nonce' value='" . $auth['read']['nonce'] . "'/>\r\n<input type='hidden' name='read_auth_token' value='" . $auth['read']['auth_token'] . "'/>\r\n<input type='hidden' name='website_id' value='" . $args['website_id'] . "'/>\r\n<input type='hidden' name='sample:id' value='" . data_entry_helper::$entity_to_load['sample:id'] . "'/>\r\n<input type='hidden' name='sample:survey_id' value='" . $args['survey_id'] . "'/>\r\n<input type='hidden' name='sample:date' value='" . data_entry_helper::$entity_to_load['sample:date'] . "'/>\r\n<input type='hidden' name='sample:entered_sref' value='" . data_entry_helper::$entity_to_load['sample:entered_sref'] . "'/>\r\n<input type='hidden' name='sample:entered_sref_system' value='" . data_entry_helper::$entity_to_load['sample:entered_sref_system'] . "'/>\r\n<input type='hidden' name='sample:geom' value='" . data_entry_helper::$entity_to_load['sample:geom'] . "'/>\r\n";
if (isset($args['custom_attribute_options']) && $args['custom_attribute_options']) {
$blockOptions = get_attr_options_array_with_user_data($args['custom_attribute_options']);
} else {
$blockOptions = array();
}
for ($i = 0; $i < $args['numberOfCounts']; $i++) {
$subSampleId = isset($subSamples[$i]) ? $subSamples[$i]['sample_id'] : null;
$r .= "<fieldset id=\"count-{$i}\"><legend>" . lang::get('Count ') . ($i + 1) . "</legend>";
if ($subSampleId) {
$r .= "<input type='hidden' name='C" . ($i + 1) . ":sample:id' value='" . $subSampleId . "'/>";
}
$r .= '<input type="hidden" name="C' . ($i + 1) . ':sample:sample_method_id" value="' . $sampleMethods[0]['id'] . '" />';
if ($subSampleId || isset(data_entry_helper::$entity_to_load['C' . ($i + 1) . ':sample:date']) && data_entry_helper::$entity_to_load['C' . ($i + 1) . ':sample:date'] != '') {
$dateValidation = array('required', 'date');
} else {
$dateValidation = array('date');
}
$r .= data_entry_helper::date_picker(array('label' => lang::get('Date'), 'fieldname' => 'C' . ($i + 1) . ':sample:date', 'validation' => $dateValidation));
data_entry_helper::$javascript .= "\$('#C" . ($i + 1) . "\\\\:sample\\\\:date' ).datepicker( 'option', 'minDate', new Date(" . data_entry_helper::$entity_to_load['sample:date'] . ", 1 - 1, 1) );\r\n\$('#C" . ($i + 1) . "\\\\:sample\\\\:date' ).datepicker( 'option', 'maxDate', new Date(" . data_entry_helper::$entity_to_load['sample:date'] . ", 12 - 1, 31) );\n";
if (!$subSampleId && $i) {
$r .= "<p>" . lang::get('You must enter the date before you can enter any further information.') . '</p>';
//.........这里部分代码省略.........
示例13: mnhnl_bats2_species_checklist
public static function mnhnl_bats2_species_checklist($args, $options)
{
global $indicia_templates;
// $options = data_entry_helper::check_arguments($options, array('listId', 'occAttrs', 'readAuth', 'extraParams', 'lookupListId'));
$options = data_entry_helper::get_species_checklist_options($options);
data_entry_helper::add_resource('json');
data_entry_helper::add_resource('autocomplete');
$occAttrControls = array();
$occAttrs = array();
$retVal = '';
// Load any existing sample's occurrence data into $entity_to_load: first have to load the survey method subsamples.
if (isset(data_entry_helper::$entity_to_load['sample:id'])) {
$subSamplesAttrs = array();
$smpOptions = array('table' => 'sample', 'nocache' => true, 'extraParams' => $options['readAuth'] + array('view' => 'detail', 'parent_id' => data_entry_helper::$entity_to_load['sample:id']));
$subSamples = data_entry_helper::get_population_data($smpOptions);
foreach ($subSamples as $sample) {
$subSamplesAttrs[$sample['id']] = data_entry_helper::getAttributes(array('attrtable' => 'sample_attribute', 'valuetable' => 'sample_attribute_value', 'id' => $sample['id'], 'key' => 'sample_id', 'fieldprefix' => '{MyPrefix}:smpAttr', 'extraParams' => $options['readAuth'], 'survey_id' => $args['survey_id']), true);
$subSamplesAttrs[$sample['id']][$visitAttr]['validation_rules'] = 'required';
}
foreach ($options['surveyMethods'] as $i => $method) {
$smpID = false;
foreach ($subSamples as $subSample) {
foreach ($subSamplesAttrs[$subSample['id']] as $attr) {
if ($attr['attributeId'] == $options['surveyMethodAttrId'] && $attr['default'] == $method['meaning_id']) {
$smpID = $subSample['id'];
$options['surveyMethods'][$i]['smpID'] = $smpID;
}
}
}
if ($smpID) {
self::preload_species_checklist_occurrences($smpID, $method['meaning_id'], $options['readAuth']);
}
}
}
// load the full list of species for the grid, including the main checklist plus any additional species in the reloaded occurrences.
$options['extraParams']['view'] = 'detail';
$occList = self::get_species_checklist_occ_list($options);
// If we managed to read the species list data we can proceed
if (!array_key_exists('error', $occList)) {
$attributes = data_entry_helper::getAttributes(array('id' => null, 'valuetable' => 'occurrence_attribute_value', 'attrtable' => 'occurrence_attribute', 'key' => 'occurrence_id', 'fieldprefix' => "{fieldname}", 'extraParams' => $options['readAuth'], 'survey_id' => array_key_exists('survey_id', $options) ? $options['survey_id'] : null));
foreach ($attributes as $idx => $attr) {
$attributes[$idx]['class'] = "scCheckTaxon";
}
// this allows extra validation
// Get the attribute and control information required to build the custom occurrence attribute columns
self::species_checklist_prepare_attributes($options, $attributes, $occAttrControls, $occAttrs);
$retVal = "<p>" . lang::get('LANG_SpeciesInstructions') . "</p>\n";
if (isset($options['lookupListId'])) {
self::$cloneableTable = self::get_species_checklist_clonable_row($options, $occAttrControls, $attributes);
}
$retVal .= '<table class="ui-widget ui-widget-content mnhnl-species-grid ' . $options['class'] . '" id="' . $options['id'] . '">';
$retVal .= self::get_species_checklist_header($options, $attributes) . '<tbody>';
$attrsPerRow = array();
foreach ($attributes as $attrId => $attr) {
$row = substr($attr['inner_structure_block'], 3);
if (!isset($attrsPerRow[$row])) {
$attrsPerRow[$row] = array();
}
$attrsPerRow[$row][] = $attr["attributeId"];
}
$rows = array();
$rowIdx = 0;
// each row grouping is driven by the ttlid, not the occurrence, as there is a different occurrence for each survey method.
// that said we want it to be in general occurrence order so it matches the order in which the occurrences are created
// i.e. in order of first occurrence in ttl group
$ttlidList = array();
$ttlList = array();
foreach ($occList as $occ) {
$ttlid = $occ['taxon']['id'];
if (!in_array($ttlid, $ttlidList)) {
$ttlidList[] = $ttlid;
$ttlList[$ttlid] = $occ['taxon'];
}
}
foreach ($ttlidList as $ttlid) {
$id = 1;
foreach ($options['surveyMethods'] as $method) {
$existing_record_id = '';
foreach ($occList as $occIt) {
// get the occurrence for this method/ttl combination
if ($occIt['taxon']['id'] == $ttlid && $occIt['method'] == $method['meaning_id']) {
$occ = $occIt;
$existing_record_id = $occ['id'];
}
}
$retVal .= '<tr class="scMeaning-' . $ttlList[$ttlid]['taxon_meaning_id'] . ' scDataRow sg-tr-' . $method['meaning_id'] . ' ' . ($id == '1' ? 'scFirstRow' : '') . '">';
if ($id == '1') {
$firstCell = data_entry_helper::mergeParamsIntoTemplate($ttlList[$ttlid], 'taxon_label', false, true);
if ($options['PHPtaxonLabel']) {
$firstCell = eval($firstCell);
}
// assume always removeable and scPresence is hidden.
$retVal .= '<td class="ui-state-default remove-row" style="width: 1%" rowspan="' . count($attrsPerRow) . '">X</td>';
$retVal .= str_replace('{content}', $firstCell, str_replace('{colspan}', 'rowspan="' . count($attrsPerRow) . '"', $indicia_templates['taxon_label_cell']));
}
$ctrlId = "sc:" . $method['meaning_id'] . ":{$ttlid}:" . ($existing_record_id ? $existing_record_id : "x" . $rowIdx) . ":present";
$retVal .= '<td>' . $method['term'] . ':</td><td class="scPresenceCell" style="display:none"><input type="hidden" class="scPresence" name="' . $ctrlId . '" value="1" /></td><td><span>';
foreach ($attrsPerRow[$id] as $attrId) {
// no complex values in checkboxes as the controls are vanilla
if ($existing_record_id) {
//.........这里部分代码省略.........
示例14: 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
//.........这里部分代码省略.........
示例15: getAttributes
protected static function getAttributes($args, $auth)
{
//Always hide the preferred boundary textbox as the user shouldn't see it.
//Only hide, don't remove it, as we still need the value from it.
data_entry_helper::$javascript .= "\r\n \$('#locAttr\\\\:" . $args['preferred_boundary_attribute_id'] . "').hide();\r\n \$('[for=\"locAttr\\\\:" . $args['preferred_boundary_attribute_id'] . "\"]').hide();\n\r\n ";
//Get the preferred boundary id for use if we are viewing a count unit
$preferredBoundaryLocationIdCalculatedFromCountUnit = self::getIdForCountUnitPreferredBoundaryIfApplicable($args, $auth);
if (!empty($_GET['parent_id'])) {
//If we are looking at a count unit boundary, then we have both the parent and boundary ids available to us
$parentId = $_GET['parent_id'];
$boundaryId = $_GET['location_id'];
} else {
//If we are looking at a count unit instead of a boundary, then we need to get the preferred boundary id
$parentId = $_GET['location_id'];
$boundaryId = $preferredBoundaryLocationIdCalculatedFromCountUnit;
}
//Get attributes associated with the parent
$auth = data_entry_helper::get_read_write_auth($args['website_id'], $args['password']);
$attrOpts = array('id' => $parentId, 'valuetable' => 'location_attribute_value', 'attrtable' => 'location_attribute', 'key' => 'location_id', 'fieldprefix' => 'locAttr', 'extraParams' => $auth['read'], 'survey_id' => $args['survey_id'], 'location_type_id' => $args['count_unit_location_type_id']);
$mainAttributes = data_entry_helper::getAttributes($attrOpts, false);
//Get attributes associated with the boundary
$auth = data_entry_helper::get_read_write_auth($args['website_id'], $args['password']);
$attrOpts = array('id' => $boundaryId, 'valuetable' => 'location_attribute_value', 'attrtable' => 'location_attribute', 'key' => 'location_id', 'fieldprefix' => 'locAttr', 'extraParams' => $auth['read'], 'survey_id' => $args['survey_id'], 'location_type_id' => $args['count_unit_boundary_location_type_id']);
$boundaryAttributes = data_entry_helper::getAttributes($attrOpts, false);
//Merge the parent and child boundary attributes if needed so we have both sets of attributes.
if (empty($mainAttributes)) {
$mainAttributes = array();
}
if (empty($boundaryAttributes)) {
$boundaryAttributes = array();
}
$attributes = array_merge($mainAttributes, $boundaryAttributes);
//Need to format any dates from the database manually.
foreach ($attributes as $attributeNum => &$attributeData) {
if ($attributeData['data_type'] === 'D' && !empty($attributeData['displayValue'])) {
$d = new DateTime($attributeData['displayValue']);
$attributeData['displayValue'] = $d->format('d/m/Y');
$attributeData['default'] = $attributeData['displayValue'];
}
}
//Disable Verified checkbox for normal users, note that we use a selector for a field whose name starts with locAttr:<Verified Attribute ID>
//as there is a hidden field with the same name but no id and we want to disable both so they are not submitted in the post.
if ($args['administrator_mode'] == 0) {
data_entry_helper::$javascript .= "\$(\"input[name^='locAttr\\\\:" . $args['verified_attribute_id'] . "']\").attr('disabled','true');";
}
return $attributes;
}