?> </a> <ul class="dropdown-menu" id="browse-menu"> <li class="browseNavFacet"> <div class="browseMenuContent container"> <?php if (sizeof($va_browse_types) > 1) { # --- only show browse targets if there are more than one ?> <div class="mainfacet"> <ul class="nav nav-pills"> <?php foreach ($va_browse_types as $vs_browse_name => $va_browse_type) { #print "<div class='browseHeadernav'><a href='#'>".$vs_browse_name."</a></div>"; print "<div class='browseHeadernav caps'><li " . (!$vs_first_browse_name ? "class='active'" : "") . "><a href='#' onclick='jQuery(\"#browseMenuTypeFacet\").load(\"" . caNavUrl($this->request, '*', 'Browse', 'getBrowseNavBarByTarget', array('target' => $vs_browse_name)) . "\"); jQuery(this).parent().siblings().removeClass(\"active\"); jQuery(this).parent().addClass(\"active\"); return false;'>" . caUcFirstUTF8Safe($va_browse_type['displayName']) . "</a></li></div>"; if (!$vs_first_browse_name) { $vs_first_browse_name = $va_browse_type['displayName']; } } ?> </ul> </div><!--end main facet--> <?php } ?> <div id="browseMenuTypeFacet"> </div> </div><!-- end browseMenuContent container --> </li><!-- end browseNavFacet --> </ul> <!--end dropdown-browse-menu --> </li><!-- end dropdown -->
print "<a href='#{$vs_block}'>" . $va_results[$vs_block]['displayName'] . " (" . $va_results[$vs_block]['count'] . ")</a>"; } ?> </small> <h1><?php print _t("Search results for %1", caUcFirstUTF8Safe($this->getVar('search'))); ?> </h1> <?php // // Print out block content (results for each type of search) // foreach ($this->getVar('blockNames') as $vs_block) { ?> <a name='<?php print $vs_block; ?> '></a> <div id="<?php print $vs_block; ?> Block" > <?php print $va_results[$vs_block]['html']; ?> </div> <?php } } else { print "<H1>" . _t("Your search for %1 returned no results", caUcFirstUTF8Safe($this->getVar('search'))) . "</H1>"; }
/** * Returns summary of current browse parameters suitable for display. * * @return string Summary of current browse criteria ready for display */ public function getCriteriaForDisplay() { $va_criteria = $this->opo_browse->getCriteriaWithLabels(); if (!sizeof($va_criteria)) { return ''; } $va_criteria_info = $this->opo_browse->getInfoForFacets(); $va_buf = array(); foreach ($va_criteria as $vs_facet => $va_vals) { $va_buf[] = caUcFirstUTF8Safe($va_criteria_info[$vs_facet]['label_singular']) . ': ' . join(", ", $va_vals); } return join("; ", $va_buf); }
* * ---------------------------------------------------------------------- */ $va_browse_types = caGetBrowseTypes(); if (sizeof($va_browse_types)) { ?> <li class="dropdown yamm-fw"> <!-- add class yamm-fw for full width--> <a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php print _t("Browse"); ?> </a> <ul class="dropdown-menu" id="browse-menu"> <li class="browseNavFacet"> <div class="browseMenuContent container text-center"> <?php if (sizeof($va_browse_types) > 1) { ?> Find: <?php foreach ($va_browse_types as $vs_browse_name => $va_browse_type) { print caNavLink($this->request, caUcFirstUTF8Safe($vs_browse_name) . ' ' . $va_browse_type["icon_class"] . '', 'browseMenuBrowseAll btn btn-default btn-lg', '', 'Browse', $vs_browse_name, ''); } } ?> </div><!-- end browseMenuContent container --> </li><!-- end browseNavFacet --> </ul> <!--end dropdown-browse-menu --> </li><!-- end dropdown --> <?php }
/** * Returns list of placements in the currently loaded screen * * @param array $pa_options Optional array of options. Supported options are: * noCache = if set to true, no caching of placement values is performed. * user_id = if specified then placements are only returned if the user has at least read access to the screen * @return array List of placements. Each element in the list is an array with the following keys: * display = A display label for the bundle * bundle = The bundle name */ public function getPlacementsInScreen($pa_options = null) { if (!is_array($pa_options)) { $pa_options = array(); } $pb_no_cache = isset($pa_options['noCache']) ? (bool) $pa_options['noCache'] : false; $pn_user_id = isset($pa_options['user_id']) ? $pa_options['user_id'] : null; //if ($pn_user_id && !$this->haveAccessToDisplay($pn_user_id, __CA_BUNDLE_DISPLAY_READ_ACCESS__)) { // return array(); //} if (!($pn_table_num = $this->getTableNum())) { return null; } if (!($t_instance = $this->_DATAMODEL->getInstanceByTableNum($pn_table_num, true))) { return null; } if (!is_array($va_placements = $this->getPlacements($pa_options))) { $va_placements = array(); } $va_placements_in_screen = array(); foreach ($va_placements as $vn_placement_id => $va_placement) { $vs_bundle_proc = preg_replace('!^ca_attribute_!', '', $va_placement['bundle_name']); $vs_label = ($vs_label = $t_instance->getDisplayLabel($t_instance->tableName() . '.' . $vs_bundle_proc)) ? $vs_label : $va_placement['bundle_name']; if (is_array($va_placement['settings']['label'])) { $va_tmp = caExtractValuesByUserLocale(array($va_placement['settings']['label'])); if ($vs_user_set_label = array_shift($va_tmp)) { $vs_label = "{$vs_label} (<em>{$vs_user_set_label}</em>)"; } } $vs_display = "<div id='uiEditor_{$vn_placement_id}'><span class='bundleDisplayEditorPlacementListItemTitle'>" . caUcFirstUTF8Safe($t_instance->getProperty('NAME_SINGULAR')) . "</span> {$vs_label}</div>"; $va_placement['display'] = $vs_display; $va_placement['bundle'] = $va_placement['bundle_name']; // we used 'bundle' in the arrays, but the database field is called 'bundle_name' and getPlacements() returns data directly from the database unset($va_placement['bundle_name']); $va_placements_in_screen[$vn_placement_id] = $va_placement; $vs_description = $t_instance->getDisplayDescription($t_instance->tableName() . '.' . $vs_bundle_proc); TooltipManager::add("#uiEditor_{$vn_placement_id}", "<h2>{$vs_label}</h2>" . _t("Bundle name") . ": {$vs_bundle_proc}<br />" . (strlen($vs_description) > 0 ? _t("Description") . ": {$vs_description}<br />" : "")); } return $va_placements_in_screen; }
/** * */ private function _getChangeLogFromRawData($pa_data, $pn_table_num, $pa_options = null) { //print "<pre>".print_r($pa_data, true)."</pre>\n"; $va_log_output = array(); $vs_blank_placeholder = '<' . _t('BLANK') . '>'; if (!$pa_options) { $pa_options = array(); } if (sizeof($pa_data)) { // // Init // $o_datamodel = Datamodel::load(); $va_change_types = array('I' => _t('Added'), 'U' => _t('Edited'), 'D' => _t('Deleted')); $vs_label_table_name = $vs_label_display_name = ''; $t_item = $o_datamodel->getInstanceByTableNum($pn_table_num, true); $vs_label_table_name = $vn_label_table_num = $vs_label_display_name = null; if (method_exists($t_item, 'getLabelTableName')) { $t_item_label = $t_item->getLabelTableInstance(); $vs_label_table_name = $t_item->getLabelTableName(); $vn_label_table_num = $t_item_label->tableNum(); $vs_label_display_name = $t_item_label->getProperty('NAME_SINGULAR'); } // // Group data by unit // $va_grouped_data = array(); foreach ($pa_data as $va_log_entry) { $va_grouped_data[$va_log_entry['unit_id']]['ca_table_num_' . $va_log_entry['logged_table_num']][] = $va_log_entry; } // // Process units // $va_attributes = array(); foreach ($va_grouped_data as $vn_unit_id => $va_log_entries_by_table) { foreach ($va_log_entries_by_table as $vs_table_key => $va_log_entries) { foreach ($va_log_entries as $va_log_entry) { $va_changes = array(); if (!is_array($va_log_entry['snapshot'])) { $va_log_entry['snapshot'] = array(); } // // Get date/time stamp for display // $vs_datetime = date("n/d/Y@g:i:sa T", $va_log_entry['log_datetime']); // // Get user name // $vs_user = $va_log_entry['fname'] . ' ' . $va_log_entry['lname']; $vs_email = $va_log_entry['email']; // The "logged" table/row is the row to which the change was actually applied // The "subject" table/row is the row to which the change is considered to have been made for workflow purposes. // // For example: if an entity is related to an object, strictly speaking the logging occurs on the ca_objects_x_entities // row (ca_objects_x_entities is the "logged" table), but the subject is ca_objects since it's only in the context of the // object (and probably the ca_entities row as well) that you can about the change. // $t_obj = $o_datamodel->getInstanceByTableNum($va_log_entry['logged_table_num'], true); // get instance for logged table if (!$t_obj) { continue; } $vs_subject_display_name = '???'; $vn_subject_row_id = null; $vn_subject_table_num = null; if (isset($pa_options['return_item_names']) && $pa_options['return_item_names']) { if (!($vn_subject_table_num = $va_log_entry['subject_table_num'])) { $vn_subject_table_num = $va_log_entry['logged_table_num']; $vn_subject_row_id = $va_log_entry['logged_row_id']; } else { $vn_subject_row_id = $va_log_entry['subject_row_id']; } if ($t_subject = $o_datamodel->getInstanceByTableNum($vn_subject_table_num, true)) { if ($t_subject->load($vn_subject_row_id)) { if (method_exists($t_subject, 'getLabelForDisplay')) { $vs_subject_display_name = $t_subject->getLabelForDisplay(false); } else { if ($vs_idno_field = $t_subject->getProperty('ID_NUMBERING_ID_FIELD')) { $vs_subject_display_name = $t_subject->getProperty('NAME_SINGULAR') . ' [' . $t_subject->get($vs_idno_field) . ']'; } else { $vs_subject_display_name = $t_subject->getProperty('NAME_SINGULAR') . ' [' . $vn_subject_row_id . ']'; } } } } } // // Get item changes // // --------------------------------------------------------------- // is this an intrinsic field? if ($pn_table_num == $va_log_entry['logged_table_num']) { foreach ($va_log_entry['snapshot'] as $vs_field => $vs_value) { $va_field_info = $t_obj->getFieldInfo($vs_field); if (isset($va_field_info['IDENTITY']) && $va_field_info['IDENTITY']) { continue; } if (isset($va_field_info['DISPLAY_TYPE']) && $va_field_info['DISPLAY_TYPE'] == DT_OMIT) { continue; } if (isset($va_field_info['DISPLAY_FIELD']) && is_array($va_field_info['DISPLAY_FIELD']) && ($va_disp_fields = $va_field_info['DISPLAY_FIELD'])) { // // Lookup value in related table // if (!$vs_value) { continue; } if (sizeof($va_disp_fields)) { $va_rel = $o_datamodel->getManyToOneRelations($t_obj->tableName(), $vs_field); $va_rel_values = array(); if ($t_rel_obj = $o_datamodel->getTableInstance($va_rel['one_table'], true)) { $t_rel_obj->load($vs_value); foreach ($va_disp_fields as $vs_display_field) { $va_tmp = explode('.', $vs_display_field); if (($vs_tmp = $t_rel_obj->get($va_tmp[1])) !== '') { $va_rel_values[] = $vs_tmp; } } } $vs_proc_val = join(', ', $va_rel_values); } } else { // Is field a foreign key? $va_keys = $o_datamodel->getManyToOneRelations($t_obj->tableName(), $vs_field); if (sizeof($va_keys)) { // yep, it's a foreign key $va_rel_values = array(); if ($t_rel_obj = $o_datamodel->getTableInstance($va_keys['one_table'], true)) { if ($t_rel_obj->load($vs_value)) { if (method_exists($t_rel_obj, 'getLabelForDisplay')) { $vs_proc_val = $t_rel_obj->getLabelForDisplay(false); } else { $va_disp_fields = $t_rel_obj->getProperty('LIST_FIELDS'); foreach ($va_disp_fields as $vs_display_field) { if (($vs_tmp = $t_rel_obj->get($vs_display_field)) !== '') { $va_rel_values[] = $vs_tmp; } } $vs_proc_val = join(' ', $va_rel_values); } if (!$vs_proc_val) { $vs_proc_val = '???'; } } else { $vs_proc_val = _t("Not set"); } } else { $vs_proc_val = _t('Non-existent'); } } else { // Adjust display of value for different field types switch ($va_field_info['FIELD_TYPE']) { case FT_BIT: $vs_proc_val = $vs_value ? 'Yes' : 'No'; break; default: $vs_proc_val = $vs_value; break; } // Adjust display of value for lists if ($va_field_info['LIST']) { $t_list = new ca_lists(); if ($t_list->load(array('list_code' => $va_field_info['LIST']))) { $vn_list_id = $t_list->getPrimaryKey(); $t_list_item = new ca_list_items(); if ($t_list_item->load(array('list_id' => $vn_list_id, 'item_value' => $vs_value))) { $vs_proc_val = $t_list_item->getLabelForDisplay(); } } } else { if ($va_field_info['BOUNDS_CHOICE_LIST']) { // TODO } } } } $va_changes[] = array('label' => $va_field_info['LABEL'], 'description' => strlen((string) $vs_proc_val) ? $vs_proc_val : $vs_blank_placeholder, 'value' => $vs_value); } } // --------------------------------------------------------------- // is this a label row? if ($va_log_entry['logged_table_num'] == $vn_label_table_num) { foreach ($va_log_entry['snapshot'] as $vs_field => $vs_value) { $va_changes[] = array('label' => $t_item_label->getFieldInfo($vs_field, 'LABEL'), 'description' => $vs_value); } } // --------------------------------------------------------------- // is this an attribute? if ($va_log_entry['logged_table_num'] == 3) { // attribute_values if ($t_element = ca_attributes::getElementInstance($va_log_entry['snapshot']['element_id'])) { if ($o_attr_val = Attribute::getValueInstance($t_element->get('datatype'))) { $o_attr_val->loadValueFromRow($va_log_entry['snapshot']); $vs_attr_val = $o_attr_val->getDisplayValue(); } else { $vs_attr_val = '?'; } // Convert list-based attributes to text if ($vn_list_id = $t_element->get('list_id')) { $t_list = new ca_lists(); $vs_attr_val = $t_list->getItemFromListForDisplayByItemID($vn_list_id, $vs_attr_val, true); } if (!$vs_attr_val) { $vs_attr_val = $vs_blank_placeholder; } $vs_label = $t_element->getLabelForDisplay(); $va_attributes[$va_log_entry['snapshot']['attribute_id']]['values'][] = array('label' => $vs_label, 'value' => $vs_attr_val); $va_changes[] = array('label' => $vs_label, 'description' => $vs_attr_val); } } // --------------------------------------------------------------- // is this a related (many-many) row? $va_keys = $o_datamodel->getOneToManyRelations($t_item->tableName(), $t_obj->tableName()); if (sizeof($va_keys) > 0) { if (method_exists($t_obj, 'getLeftTableNum')) { if ($t_obj->getLeftTableNum() == $t_item->tableNum()) { // other side of rel is on right $t_related_table = $o_datamodel->getInstanceByTableNum($t_obj->getRightTableNum(), true); $t_related_table->load($va_log_entry['snapshot'][$t_obj->getRightTableFieldName()]); } else { // other side of rel is on left $t_related_table = $o_datamodel->getInstanceByTableNum($t_obj->getLeftTableNum(), true); $t_related_table->load($va_log_entry['snapshot'][$t_obj->getLeftTableFieldName()]); } $t_rel = $o_datamodel->getInstanceByTableNum($t_obj->tableNum(), true); $va_changes[] = array('label' => caUcFirstUTF8Safe($t_related_table->getProperty('NAME_SINGULAR')), 'idno' => ($vs_idno_field = $t_related_table->getProperty('ID_NUMBERING_ID_FIELD')) ? $t_related_table->get($vs_idno_field) : null, 'description' => $t_related_table->getLabelForDisplay(), 'table_name' => $t_related_table->tableName(), 'table_num' => $t_related_table->tableNum(), 'row_id' => $t_related_table->getPrimaryKey(), 'rel_type_id' => $va_log_entry['snapshot']['type_id'], 'rel_typename' => $t_rel->getRelationshipTypename('ltor', $va_log_entry['snapshot']['type_id'])); } } // --------------------------------------------------------------- // record log line if (sizeof($va_changes)) { $va_log_output[$vn_unit_id][] = array('datetime' => $vs_datetime, 'user_fullname' => $vs_user, 'user_email' => $vs_email, 'user' => $vs_user . ' (' . $vs_email . ')', 'changetype_display' => $va_change_types[$va_log_entry['changetype']], 'changetype' => $va_log_entry['changetype'], 'changes' => $va_changes, 'subject' => $vs_subject_display_name, 'subject_id' => $vn_subject_row_id, 'subject_table_num' => $vn_subject_table_num, 'logged_table_num' => $va_log_entry['logged_table_num'], 'logged_table' => $t_obj->tableName(), 'logged_row_id' => $va_log_entry['logged_row_id']); } } } } } return $va_log_output; }
/** * Generates standard-format inspector panels for editors * * @param View $po_view Inspector view object * @param array $pa_options Optional array of options. Supported options are: * backText = a string to use as the "back" button text; default is "Results" * * @return string HTML implementing the inspector */ function caEditorInspector($po_view, $pa_options = null) { require_once __CA_MODELS_DIR__ . '/ca_sets.php'; require_once __CA_MODELS_DIR__ . '/ca_data_exporters.php'; $t_item = $po_view->getVar('t_item'); $vs_table_name = $t_item->tableName(); if (($vs_priv_table_name = $vs_table_name) == 'ca_list_items') { $vs_priv_table_name = 'ca_lists'; } $vn_item_id = $t_item->getPrimaryKey(); $o_result_context = $po_view->getVar('result_context'); $t_ui = $po_view->getVar('t_ui'); $t_type = method_exists($t_item, "getTypeInstance") ? $t_item->getTypeInstance() : null; $vs_type_name = method_exists($t_item, "getTypeName") ? $t_item->getTypeName() : ''; if (!$vs_type_name) { $vs_type_name = $t_item->getProperty('NAME_SINGULAR'); } $va_reps = $po_view->getVar('representations'); $o_dm = Datamodel::load(); if ($t_item->isHierarchical()) { $va_ancestors = $po_view->getVar('ancestors'); $vn_parent_id = $t_item->get($t_item->getProperty('HIERARCHY_PARENT_ID_FLD')); } else { $va_ancestors = array(); $vn_parent_id = null; } // action extra to preserve currently open screen across next/previous links $vs_screen_extra = $po_view->getVar('screen') ? '/' . $po_view->getVar('screen') : ''; if ($vs_type_name == "list item") { $vs_style = "style='height:auto;'"; } if ($vn_item_id | $po_view->request->getAction() === 'Delete') { $vs_buf = '<h3 class="nextPrevious" ' . $vs_style . '>' . caEditorFindResultNavigation($po_view->request, $t_item, $o_result_context, $pa_options) . "</h3>\n"; } $vs_color = null; if ($t_type) { $vs_color = trim($t_type->get('color')); } if (!$vs_color && $t_ui) { $vs_color = trim($t_ui->get('color')); } if (!$vs_color) { $vs_color = "FFFFFF"; } $vs_buf .= "<h4><div id='caColorbox' style='border: 6px solid #{$vs_color};'>\n"; $vs_icon = null; if ($t_type) { $vs_icon = $t_type->getMediaTag('icon', 'icon'); } if (!$vs_icon && $t_ui) { $vs_icon = $t_ui->getMediaTag('icon', 'icon'); } if ($vs_icon) { $vs_buf .= "<div id='inspectoricon' style='border-right: 6px solid #{$vs_color}; border-bottom: 6px solid #{$vs_color}; -moz-border-radius-bottomright: 8px; -webkit-border-bottom-right-radius: 8px;'>\n{$vs_icon}</div>\n"; } if ($po_view->request->getAction() === 'Delete' && $po_view->request->getParameter('confirm', pInteger)) { $vs_buf .= "<strong>" . _t("Deleted %1", $vs_type_name) . "</strong>\n"; $vs_buf .= "<br style='clear: both;'/></div></h4>\n"; } else { if ($vn_item_id) { if (!$po_view->request->config->get("{$vs_priv_table_name}_inspector_disable_headline")) { if ($po_view->request->user->canDoAction("can_edit_" . $vs_priv_table_name) && sizeof($t_item->getTypeList()) > 1) { $vs_buf .= "<strong>" . _t("Editing %1", $vs_type_name) . ": </strong>\n"; } else { $vs_buf .= "<strong>" . _t("Viewing %1", $vs_type_name) . ": </strong>\n"; } } if ($t_item->hasField('is_deaccessioned') && $t_item->get('is_deaccessioned') && $t_item->get('deaccession_date', array('getDirectDate' => true)) <= caDateToHistoricTimestamp(_t('now'))) { // If currently deaccessioned then display deaccession message $vs_buf .= "<br/><div class='inspectorDeaccessioned'>" . _t('Deaccessioned %1', $t_item->get('deaccession_date')) . "</div>\n"; if ($vs_deaccession_notes = $t_item->get('deaccession_notes')) { TooltipManager::add(".inspectorDeaccessioned", $vs_deaccession_notes); } } else { if ($po_view->request->user->canDoAction('can_see_current_location_in_inspector_ca_objects')) { if ($t_ui && method_exists($t_item, "getObjectHistory") && (is_array($va_placements = $t_ui->getPlacementsForBundle('ca_objects_history')) && sizeof($va_placements) > 0)) { // // Output current "location" of object in life cycle. Configuration is taken from a ca_objects_history bundle configured for the current editor // $va_placement = array_shift($va_placements); $va_bundle_settings = $va_placement['settings']; if (is_array($va_history = $t_item->getObjectHistory($va_bundle_settings, array('limit' => 1, 'currentOnly' => true))) && sizeof($va_history) > 0) { $va_current_location = array_shift(array_shift($va_history)); if (!($vs_inspector_current_location_label = $po_view->request->config->get("ca_objects_inspector_current_location_label"))) { $vs_inspector_current_location_label = _t('Current'); } if ($va_current_location['display']) { $vs_buf .= "<div class='inspectorCurrentLocation'><strong>" . $vs_inspector_current_location_label . ':</strong><br/>' . $va_current_location['display'] . "</div>"; } } } elseif (method_exists($t_item, "getLastLocationForDisplay")) { // If no ca_objects_history bundle is configured then display the last storage location if ($vs_current_location = $t_item->getLastLocationForDisplay("<ifdef code='ca_storage_locations.parent.preferred_labels'>^ca_storage_locations.parent.preferred_labels ➜ </ifdef>^ca_storage_locations.preferred_labels.name")) { $vs_buf .= "<br/><div class='inspectorCurrentLocation'>" . _t('Location: %1', $vs_current_location) . "</div>\n"; $vs_full_location_hierarchy = $t_item->getLastLocationForDisplay("^ca_storage_locations.hierarchy.preferred_labels.name%delimiter=_➜_"); if ($vs_full_location_hierarchy !== $vs_current_location) { TooltipManager::add(".inspectorCurrentLocation", $vs_full_location_hierarchy); } } } } } // // Display flags; expressions for these are defined in app.conf in the <table_name>_inspector_display_flags directive // if (is_array($va_display_flags = $po_view->request->config->getAssoc("{$vs_table_name}_inspector_display_flags"))) { $va_display_flag_buf = array(); foreach ($va_display_flags as $vs_exp => $vs_display_flag) { $va_exp_vars = array(); foreach (ExpressionParser::getVariableList($vs_exp) as $vs_var_name) { $va_exp_vars[$vs_var_name] = $t_item->get($vs_var_name, array('returnIdno' => true)); } if (ExpressionParser::evaluate($vs_exp, $va_exp_vars)) { $va_display_flag_buf[] = $t_item->getWithTemplate("{$vs_display_flag}"); } } if (sizeof($va_display_flag_buf) > 0) { $vs_buf .= join("; ", $va_display_flag_buf); } } $vs_label = ''; $vb_dont_use_labels_for_ca_objects = (bool) $t_item->getAppConfig()->get('ca_objects_dont_use_labels'); if (!($vs_table_name === 'ca_objects' && $vb_dont_use_labels_for_ca_objects)) { if ($vs_get_spec = $po_view->request->config->get("{$vs_table_name}_inspector_display_title")) { $vs_label = caProcessTemplateForIDs($vs_get_spec, $vs_table_name, array($t_item->getPrimaryKey())); } else { $va_object_collection_collection_ancestors = $po_view->getVar('object_collection_collection_ancestors'); if ($t_item->tableName() == 'ca_objects' && $t_item->getAppConfig()->get('ca_objects_x_collections_hierarchy_enabled') && is_array($va_object_collection_collection_ancestors) && sizeof($va_object_collection_collection_ancestors)) { $va_collection_links = array(); foreach ($va_object_collection_collection_ancestors as $va_collection_ancestor) { $va_collection_links[] = caEditorLink($po_view->request, $va_collection_ancestor['label'], '', 'ca_collections', $va_collection_ancestor['collection_id']); } $vs_label .= join(" / ", $va_collection_links) . ' > '; } if (method_exists($t_item, 'getLabelForDisplay')) { $vn_parent_index = sizeof($va_ancestors) - 1; if ($vn_parent_id && ($vs_table_name != 'ca_places' || $vn_parent_index > 0)) { $va_parent = $va_ancestors[$vn_parent_index]; $vs_disp_fld = $t_item->getLabelDisplayField(); if ($va_parent['NODE'][$vs_disp_fld] && ($vs_editor_link = caEditorLink($po_view->request, $va_parent['NODE'][$vs_disp_fld], '', $vs_table_name, $va_parent['NODE'][$t_item->primaryKey()]))) { $vs_label .= $vs_editor_link . ' > ' . $t_item->getLabelForDisplay(); } else { $vs_label .= ($va_parent['NODE'][$vs_disp_fld] ? $va_parent['NODE'][$vs_disp_fld] . ' > ' : '') . $t_item->getLabelForDisplay(); } } else { $vs_label .= $t_item->getLabelForDisplay(); if ($vs_table_name === 'ca_editor_uis' && in_array($po_view->request->getAction(), array('EditScreen', 'DeleteScreen', 'SaveScreen'))) { $t_screen = new ca_editor_ui_screens($po_view->request->getParameter('screen_id', pInteger)); if (!($vs_screen_name = $t_screen->getLabelForDisplay())) { $vs_screen_name = _t('new screen'); } $vs_label .= " > " . $vs_screen_name; } } } else { $vs_label .= $t_item->get('name'); } } } $vb_show_idno = (bool) ($vs_idno = $t_item->get($t_item->getProperty('ID_NUMBERING_ID_FIELD'))); if (!$vs_label) { switch ($vs_table_name) { case 'ca_commerce_orders': if ($t_item->get('order_type') == 'L') { if ($vs_org = $t_item->get('billing_organization')) { $vs_label = _t('%5 #%4 on %1 to %2 (%3)', caGetLocalizedDate($t_item->get('created_on', array('getDirectDate' => true)), array('dateFormat' => 'delimited', 'timeOmit' => true)), $t_item->get('billing_fname') . ' ' . $t_item->get('billing_lname'), $vs_org, $t_item->getOrderNumber(), caUcFirstUTF8Safe($t_item->getProperty('NAME_SINGULAR'))); } else { $vs_label = _t('%4 #%3 on %1 to %2', caGetLocalizedDate($t_item->get('created_on', array('getDirectDate' => true)), array('dateFormat' => 'delimited', 'timeOmit' => true)), $t_item->get('billing_fname') . ' ' . $t_item->get('billing_lname'), $t_item->getOrderNumber(), caUcFirstUTF8Safe($t_item->getProperty('NAME_SINGULAR'))); } } else { if ($vs_org = $t_item->get('billing_organization')) { $vs_label = _t('%5 #%4 on %1 from %2 (%3)', caGetLocalizedDate($t_item->get('created_on', array('getDirectDate' => true)), array('dateFormat' => 'delimited', 'timeOmit' => true)), $t_item->get('billing_fname') . ' ' . $t_item->get('billing_lname'), $vs_org, $t_item->getOrderNumber(), caUcFirstUTF8Safe($t_item->getProperty('NAME_SINGULAR'))); } else { $vs_label = _t('%4 #%3 on %1 from %2', caGetLocalizedDate($t_item->get('created_on', array('getDirectDate' => true)), array('dateFormat' => 'delimited', 'timeOmit' => true)), $t_item->get('billing_fname') . ' ' . $t_item->get('billing_lname'), $t_item->getOrderNumber(), caUcFirstUTF8Safe($t_item->getProperty('NAME_SINGULAR'))); } } break; default: if ($vs_table_name === 'ca_objects' && $vb_dont_use_labels_for_ca_objects) { $vs_label = $vs_idno; $vb_show_idno = false; } else { $vs_label = '[' . _t('BLANK') . ']'; } break; } } $vs_buf .= "<div class='recordTitle {$vs_table_name}' style='width:190px; overflow:hidden;'>{$vs_label}" . ($vb_show_idno ? "<a title='{$vs_idno}'>" . ($vs_idno ? " ({$vs_idno})" : '') : "") . "</a></div>"; if ($vs_table_name === 'ca_object_lots' && $t_item->getPrimaryKey()) { $vs_buf .= "<div id='inspectorLotMediaDownload'><strong>" . (($vn_num_objects = $t_item->numObjects()) == 1 ? _t('Lot contains %1 object', $vn_num_objects) : _t('Lot contains %1 objects', $vn_num_objects)) . "</strong>\n"; } if ($po_view->request->config->get("include_custom_inspector")) { if (file_exists($po_view->request->getViewsDirectoryPath() . "/bundles/inspector_info.php")) { $vo_inspector_view = new View($po_view->request, $po_view->request->getViewsDirectoryPath() . "/bundles/"); $vo_inspector_view->setVar('t_item', $t_item); $vs_buf .= $vo_inspector_view->render('inspector_info.php'); } } } else { $vs_parent_name = ''; if ($vn_parent_id = $po_view->request->getParameter('parent_id', pInteger)) { $t_parent = clone $t_item; $t_parent->load($vn_parent_id); $vs_parent_name = $t_parent->getLabelForDisplay(); } $vs_buf .= "<div class='creatingNew'>" . _t("Creating new %1", $vs_type_name) . " " . ($vs_parent_name ? _t("%1 > New %2", $vs_parent_name, $vs_type_name) : '') . "</div>\n"; $vs_buf .= "<br/>\n"; } // ------------------------------------------------------------------------------------- if ($t_item->getPrimaryKey()) { if (sizeof($va_reps) > 0) { $va_imgs = array(); $vs_buf .= "<div id='inspectorMedia'>"; $vn_r = $vn_primary_index = 0; foreach ($va_reps as $va_rep) { if (!($va_rep['info']['preview170']['WIDTH'] && $va_rep['info']['preview170']['HEIGHT'])) { continue; } if ($vb_is_primary = isset($va_rep['is_primary']) && (bool) $va_rep['is_primary']) { $vn_primary_index = $vn_r; } $va_imgs[] = "{url:'" . $va_rep['urls']['preview170'] . "', width: " . $va_rep['info']['preview170']['WIDTH'] . ", height: " . $va_rep['info']['preview170']['HEIGHT'] . ", link: '#', onclick: 'caMediaPanel.showPanel(\\'" . caNavUrl($po_view->request, '*', '*', 'GetMediaOverlay', array($t_item->primaryKey() => $vn_item_id, 'representation_id' => $va_rep['representation_id'])) . "\\')'}"; $vn_r++; } if (sizeof($va_reps) > 1) { $vs_buf .= "\n\t\t\t\t\t<div class='leftScroll'>\n\t\t\t\t\t\t<a href='#' onclick='inspectorInfoRepScroller.scrollToPreviousImage(); return false;'>" . caNavIcon($po_view->request, __CA_NAV_BUTTON_SCROLL_LT__) . "</a>\n\t\t\t\t\t</div>\n\t\t"; } if (sizeof($va_imgs) > 0) { $vs_buf .= "\n\t\t\t\t<div id='inspectorInfoRepScrollingViewer' style='position: relative;'>\n\t\t\t\t\t<div id='inspectorInfoRepScrollingViewerContainer'>\n\t\t\t\t\t\t<div id='inspectorInfoRepScrollingViewerImageContainer'></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t"; if (sizeof($va_reps) > 1) { $vs_buf .= "\n\t\t\t\t\t<div class='rightScroll'>\n\t\t\t\t\t\t<a href='#' onclick='inspectorInfoRepScroller.scrollToNextImage(); return false;'>" . caNavIcon($po_view->request, __CA_NAV_BUTTON_SCROLL_RT__) . "</a>\n\t\t\t\t\t</div>\n\t\t"; } TooltipManager::add(".leftScroll", _t('Previous')); TooltipManager::add(".rightScroll", _t('Next')); $vs_buf .= "<script type='text/javascript'>"; $vs_buf .= "\n\t\t\t\t\tvar inspectorInfoRepScroller = caUI.initImageScroller([" . join(",", $va_imgs) . "], 'inspectorInfoRepScrollingViewerImageContainer', {\n\t\t\t\t\t\t\tcontainerWidth: 170, containerHeight: 170,\n\t\t\t\t\t\t\timageCounterID: 'inspectorInfoRepScrollingViewerCounter',\n\t\t\t\t\t\t\tscrollingImageClass: 'inspectorInfoRepScrollerImage',\n\t\t\t\t\t\t\tscrollingImagePrefixID: 'inspectorInfoRep',\n\t\t\t\t\t\t\tinitialIndex: {$vn_primary_index}\n\t\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t</script>"; } $vs_buf .= "</div>\n"; if ($vs_get_spec = $po_view->request->config->get("{$vs_table_name}_inspector_display_below_media")) { $vs_buf .= caProcessTemplateForIDs($vs_get_spec, $vs_table_name, array($t_item->getPrimaryKey())); } } $vs_buf .= "<div id='toolIcons'>"; if ($vn_item_id) { # --- watch this link $vs_watch = ""; if (in_array($vs_table_name, array('ca_objects', 'ca_object_lots', 'ca_entities', 'ca_places', 'ca_occurrences', 'ca_collections', 'ca_storage_locations'))) { require_once __CA_MODELS_DIR__ . '/ca_watch_list.php'; $t_watch_list = new ca_watch_list(); $vs_watch = "<div class='watchThis'><a href='#' title='" . _t('Add/remove item to/from watch list.') . "' onclick='caToggleItemWatch(); return false;' id='caWatchItemButton'>" . caNavIcon($po_view->request, $t_watch_list->isItemWatched($vn_item_id, $t_item->tableNum(), $po_view->request->user->get("user_id")) ? __CA_NAV_BUTTON_UNWATCH__ : __CA_NAV_BUTTON_WATCH__) . "</a></div>"; $vs_buf .= "\n<script type='text/javascript'>\n\t\tfunction caToggleItemWatch() {\n\t\t\tvar url = '" . caNavUrl($po_view->request, $po_view->request->getModulePath(), $po_view->request->getController(), 'toggleWatch', array($t_item->primaryKey() => $vn_item_id)) . "';\n\t\t\t\n\t\t\tjQuery.getJSON(url, {}, function(data, status) {\n\t\t\t\tif (data['status'] == 'ok') {\n\t\t\t\t\tjQuery('#caWatchItemButton').html((data['state'] == 'watched') ? '" . addslashes(caNavIcon($po_view->request, __CA_NAV_BUTTON_UNWATCH__)) . "' : '" . addslashes(caNavIcon($po_view->request, __CA_NAV_BUTTON_WATCH__)) . "');\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('Error toggling watch status for item: ' + data['errors']);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t</script>\n"; } $vs_buf .= "{$vs_watch}\n"; TooltipManager::add("#caWatchItemButton", _t('Watch/Unwatch this record')); if ($po_view->request->user->canDoAction("can_change_type_{$vs_table_name}")) { $vs_buf .= "<div id='inspectorChangeType'><div id='inspectorChangeTypeButton'><a href='#' onclick='caTypeChangePanel.showPanel(); return false;'>" . caNavIcon($po_view->request, __CA_NAV_BUTTON_CHANGE__ . " Change Type", array('title' => _t('Change type'))) . "</a></div></div>\n"; $vo_change_type_view = new View($po_view->request, $po_view->request->getViewsDirectoryPath() . "/bundles/"); $vo_change_type_view->setVar('t_item', $t_item); FooterManager::add($vo_change_type_view->render("change_type_html.php")); TooltipManager::add("#inspectorChangeType", _t('Change Record Type')); } if ($t_item->getPrimaryKey() && $po_view->request->config->get($vs_table_name . '_show_add_child_control_in_inspector')) { $vb_show_add_child_control = true; if (is_array($va_restrict_add_child_control_to_types = $po_view->request->config->getList($vs_table_name . '_restrict_child_control_in_inspector_to_types')) && sizeof($va_restrict_add_child_control_to_types)) { $t_type_instance = $t_item->getTypeInstance(); if (!in_array($t_type_instance->get('idno'), $va_restrict_add_child_control_to_types) && !in_array($t_type_instance->getPrimaryKey(), $va_restrict_add_child_control_to_types)) { $vb_show_add_child_control = false; } } if ($vb_show_add_child_control) { if ((bool) $po_view->request->config->get($vs_table_name . '_enforce_strict_type_hierarchy')) { // strict menu $vs_type_list = $t_item->getTypeListAsHTMLFormElement('type_id', array('style' => 'width: 90px; font-size: 9px;'), array('childrenOfCurrentTypeOnly' => true, 'directChildrenOnly' => $po_view->request->config->get($vs_table_name . '_enforce_strict_type_hierarchy') == '~' ? false : true, 'returnHierarchyLevels' => true, 'access' => __CA_BUNDLE_ACCESS_EDIT__)); } else { // all types $vs_type_list = $t_item->getTypeListAsHTMLFormElement('type_id', array('style' => 'width: 90px; font-size: 9px;'), array('access' => __CA_BUNDLE_ACCESS_EDIT__)); } if ($vs_type_list) { $vs_buf .= "<div id='inspectorCreateChild'><div id='inspectorCreateChildButton'><a href='#' onclick='caCreateChildPanel.showPanel(); return false;'>" . caNavIcon($po_view->request, __CA_NAV_BUTTON_CHILD__, array('title' => _t('Create Child Record'))) . "</a></div></div>\n"; $vo_create_child_view = new View($po_view->request, $po_view->request->getViewsDirectoryPath() . "/bundles/"); $vo_create_child_view->setVar('t_item', $t_item); $vo_create_child_view->setVar('type_list', $vs_type_list); FooterManager::add($vo_create_child_view->render("create_child_html.php")); TooltipManager::add("#inspectorCreateChildButton", _t('Create a child record under this one')); } } } } if ($po_view->request->user->canDoAction('can_duplicate_' . $vs_table_name) && $t_item->getPrimaryKey()) { $vs_buf .= '<div id="caDuplicateItemButton">'; $vs_buf .= caFormTag($po_view->request, 'Edit', 'DuplicateItemForm', $po_view->request->getModulePath() . '/' . $po_view->request->getController(), 'post', 'multipart/form-data', '_top', array('disableUnsavedChangesWarning' => true, 'noTimestamp' => true)); $vs_buf .= caFormSubmitLink($po_view->request, caNavIcon($po_view->request, __CA_NAV_BUTTON_DUPLICATE__), '', 'DuplicateItemForm'); $vs_buf .= caHTMLHiddenInput($t_item->primaryKey(), array('value' => $t_item->getPrimaryKey())); $vs_buf .= caHTMLHiddenInput('mode', array('value' => 'dupe')); $vs_buf .= "</form>"; $vs_buf .= "</div>"; TooltipManager::add("#caDuplicateItemButton", _t('Duplicate this %1', mb_strtolower($vs_type_name, 'UTF-8'))); } // // Download media in lot ($vn_num_objects is only set for object lots) if ($vn_num_objects > 0) { $vs_buf .= "<div id='inspectorLotMediaDownloadButton'>" . caNavLink($po_view->request, caNavIcon($po_view->request, __CA_NAV_BUTTON_DOWNLOAD__), "button", $po_view->request->getModulePath(), $po_view->request->getController(), 'getLotMedia', array('lot_id' => $t_item->getPrimaryKey(), 'download' => 1), array()) . "</div>\n"; TooltipManager::add('#inspectorLotMediaDownloadButton', _t("Download all media associated with objects in this lot")); } // // Download media in set if ($vs_table_name == 'ca_sets' && sizeof($t_item->getItemRowIDs()) > 0) { $vs_buf .= "<div id='inspectorSetMediaDownloadButton'>" . caNavLink($po_view->request, caNavIcon($po_view->request, __CA_NAV_BUTTON_DOWNLOAD__), "button", $po_view->request->getModulePath(), $po_view->request->getController(), 'getSetMedia', array('set_id' => $t_item->getPrimaryKey(), 'download' => 1), array()) . "</div>\n"; TooltipManager::add('#inspectorSetMediaDownloadButton', _t("Download all media associated with records in this set")); } $vs_more_info = ''; // list of sets in which item is a member $t_set = new ca_sets(); if (is_array($va_sets = caExtractValuesByUserLocale($t_set->getSetsForItem($t_item->tableNum(), $t_item->getPrimaryKey(), array('user_id' => $po_view->request->getUserID(), 'access' => __CA_SET_READ_ACCESS__)))) && sizeof($va_sets)) { $va_links = array(); foreach ($va_sets as $vn_set_id => $va_set) { $va_links[] = "<a href='" . caEditorUrl($po_view->request, 'ca_sets', $vn_set_id) . "'>" . $va_set['name'] . "</a>"; } $vs_more_info .= "<div><strong>" . (sizeof($va_links) == 1 ? _t("In set") : _t("In sets")) . "</strong> " . join(", ", $va_links) . "</div>\n"; } // export options if ($vn_item_id && ($vs_select = $po_view->getVar('available_mappings_as_html_select'))) { $vs_more_info .= "<div class='inspectorExportControls'>" . caFormTag($po_view->request, 'exportItem', 'caExportForm', null, 'post', 'multipart/form-data', '_top', array('disableUnsavedChangesWarning' => true)); $vs_more_info .= $vs_select; $vs_more_info .= caHTMLHiddenInput($t_item->primaryKey(), array('value' => $t_item->getPrimaryKey())); $vs_more_info .= caHTMLHiddenInput('download', array('value' => 1)); $vs_more_info .= caFormSubmitLink($po_view->request, 'Export ›', 'button', 'caExportForm'); $vs_more_info .= "</form></div>"; } $va_creation = $t_item->getCreationTimestamp(); $va_last_change = $t_item->getLastChangeTimestamp(); if ($va_creation['timestamp'] || $va_last_change['timestamp']) { $vs_more_info .= "<div class='inspectorChangeDateList'>"; if ($va_creation['timestamp']) { if (!trim($vs_name = $va_creation['fname'] . ' ' . $va_creation['lname'])) { $vs_name = null; } $vs_interval = ($vn_t = time() - $va_creation['timestamp']) == 0 ? _t('Just now') : _t('%1 ago', caFormatInterval($vn_t, 2)); $vs_more_info .= "<div class='inspectorChangeDateListLine' id='caInspectorCreationDate'>" . ($vs_name ? _t('<strong>Created</strong><br/>%1 by %2', $vs_interval, $vs_name) : _t('<strong>Created</strong><br/>%1', $vs_interval)) . "</div>"; TooltipManager::add("#caInspectorCreationDate", "<h2>" . _t('Created on') . "</h2>" . _t('Created on %1', caGetLocalizedDate($va_creation['timestamp'], array('dateFormat' => 'delimited')))); } if ($va_last_change['timestamp'] && $va_creation['timestamp'] != $va_last_change['timestamp']) { if (!trim($vs_name = $va_last_change['fname'] . ' ' . $va_last_change['lname'])) { $vs_name = null; } $vs_interval = ($vn_t = time() - $va_last_change['timestamp']) == 0 ? _t('Just now') : _t('%1 ago', caFormatInterval($vn_t, 2)); $vs_more_info .= "<div class='inspectorChangeDateListLine' id='caInspectorChangeDate'>" . ($vs_name ? _t('<strong>Last changed</strong><br/>%1 by %2', $vs_interval, $vs_name) : _t('<strong>Last changed</strong><br/>%1', $vs_interval)) . "</div>"; TooltipManager::add("#caInspectorChangeDate", "<h2>" . _t('Last changed on') . "</h2>" . _t('Last changed on %1', caGetLocalizedDate($va_last_change['timestamp'], array('dateFormat' => 'delimited')))); } if (method_exists($t_item, 'getMetadataDictionaryRuleViolations') && is_array($va_violations = $t_item->getMetadataDictionaryRuleViolations()) && ($vn_num_violations = sizeof($va_violations)) > 0) { $va_violation_messages = array(); foreach ($va_violations as $vn_violation_id => $va_violation) { $vs_label = $t_item->getDisplayLabel($va_violation['bundle_name']); $va_violation_messages[] = "<li><em><u>{$vs_label}</u></em> " . $va_violation['violationMessage'] . "</li>"; } $vs_more_info .= "<div id='caInspectorViolationsList'>" . ($vs_num_violations_display = "<img src='" . $po_view->request->getThemeUrlPath() . "/graphics/icons/warning_small.gif' border='0'/> " . ($vn_num_violations > 1 ? _t('%1 problems require attention', $vn_num_violations) : _t('%1 problem requires attention', $vn_num_violations))) . "</div>\n"; TooltipManager::add("#caInspectorViolationsList", "<h2>{$vs_num_violations_display}</h2><ol>" . join("\n", $va_violation_messages)) . "</ol>\n"; } $vs_more_info .= "</div>\n"; } if ($vs_get_spec = $po_view->request->config->get("{$vs_table_name}_inspector_display_more_info")) { $vs_more_info .= caProcessTemplateForIDs($vs_get_spec, $vs_table_name, array($t_item->getPrimaryKey())); } if ($vs_more_info) { $vs_buf .= "<div class='button info'><a href='#' id='inspectorMoreInfo'>" . caNavIcon($po_view->request, __CA_NAV_BUTTON_INFO2__) . "</a></div>\n\t\t\t<div id='inspectorInfo' >"; $vs_buf .= $vs_more_info . "</div>\n"; TooltipManager::add("#inspectorMoreInfo", _t('See more information about this record')); } $vs_buf .= "</div><!--End tooIcons-->"; } // ------------------------------------------------------------------------------------- // // Item-specific information // // // Output info for related items // if (!$t_item->getPrimaryKey()) { // only applies to new records $vs_rel_table = $po_view->request->getParameter('rel_table', pString); $vn_rel_type_id = $po_view->request->getParameter('rel_type_id', pString); $vn_rel_id = $po_view->request->getParameter('rel_id', pInteger); if ($vs_rel_table && $po_view->request->datamodel->tableExists($vs_rel_table) && $vn_rel_type_id && $vn_rel_id) { $t_rel = $po_view->request->datamodel->getTableInstance($vs_rel_table); if ($t_rel && $t_rel->load($vn_rel_id)) { $vs_buf .= '<strong>' . _t("Will be related to %1", $t_rel->getTypeName()) . '</strong>: ' . $t_rel->getLabelForDisplay(); } } } // // Output lot info for ca_objects // $vb_is_currently_part_of_lot = true; if (!($vn_lot_id = $t_item->get('lot_id'))) { $vn_lot_id = $po_view->request->getParameter('lot_id', pInteger); $vb_is_currently_part_of_lot = false; } if ($vs_table_name === 'ca_objects' && $vn_lot_id) { require_once __CA_MODELS_DIR__ . '/ca_object_lots.php'; $va_lot_lots = caGetTypeListForUser('ca_object_lots', array('access' => __CA_BUNDLE_ACCESS_READONLY__)); $t_lot = new ca_object_lots($vn_lot_id); if ($t_lot->get('deleted') == 0 && in_array($t_lot->get('type_id'), $va_lot_lots)) { if (!($vs_lot_displayname = $t_lot->get('idno_stub'))) { if (!($vs_lot_displayname = $t_lot->getLabelForDisplay())) { $vs_lot_displayname = "Lot {$vn_lot_id}"; } } if ($vs_lot_displayname) { if (!($vs_part_of_lot_msg = $po_view->request->config->get("ca_objects_inspector_part_of_lot_msg"))) { $vs_part_of_lot_msg = _t('Part of lot'); } if (!($vs_will_be_part_of_lot_msg = $po_view->request->config->get("ca_objects_inspector_will_be_part_of_lot_msg"))) { $vs_will_be_part_of_lot_msg = _t('Will be part of lot'); } $vs_buf .= "<strong>" . ($vb_is_currently_part_of_lot ? $vs_part_of_lot_msg : $vs_will_be_part_of_lot_msg) . "</strong>: " . caNavLink($po_view->request, $vs_lot_displayname, '', 'editor/object_lots', 'ObjectLotEditor', 'Edit', array('lot_id' => $vn_lot_id)); } } } $va_object_container_types = $po_view->request->config->getList('ca_objects_container_types'); $va_object_component_types = $po_view->request->config->getList('ca_objects_component_types'); $vb_can_add_component = $vs_table_name === 'ca_objects' && $t_item->getPrimaryKey() && $po_view->request->user->canDoAction('can_create_ca_objects') && $t_item->canTakeComponents(); if (method_exists($t_item, 'getComponentCount')) { if ($vn_component_count = $t_item->getComponentCount()) { if ($t_ui && ($vs_component_list_screen = $t_ui->getScreenWithBundle("ca_objects_components_list", $po_view->request)) && $vs_component_list_screen !== $po_view->request->getActionExtra()) { $vs_component_count_link = caNavLink($po_view->request, $vn_component_count == 1 ? _t('%1 component', $vn_component_count) : _t('%1 components', $vn_component_count), '', '*', '*', $po_view->request->getAction() . '/' . $vs_component_list_screen, array($t_item->primaryKey() => $t_item->getPrimaryKey())); } else { $vs_component_count_link = $vn_component_count == 1 ? _t('%1 component', $vn_component_count) : _t('%1 components', $vn_component_count); } $vs_buf .= "<br/><strong>" . _t('Has') . ":</strong> {$vs_component_count_link}"; } } if ($vb_can_add_component) { $vs_buf .= ' <a href="#" onclick=\'caObjectComponentPanel.showPanel("' . caNavUrl($po_view->request, '*', 'ObjectComponent', 'Form', array('parent_id' => $t_item->getPrimaryKey())) . '"); return false;\')>' . caNavIcon($po_view->request, __CA_NAV_BUTTON_ADD__) . '</a>'; $vo_change_type_view = new View($po_view->request, $po_view->request->getViewsDirectoryPath() . "/bundles/"); $vo_change_type_view->setVar('t_item', $t_item); FooterManager::add($vo_change_type_view->render("create_component_html.php")); } // // Output lot info for ca_object_lots // if ($vs_table_name === 'ca_object_lots' && $t_item->getPrimaryKey()) { $va_component_types = $po_view->request->config->getList('ca_objects_component_types'); if (is_array($va_component_types) && sizeof($va_component_types)) { $vs_buf .= "<strong>" . (($vn_num_objects = $t_item->numObjects(null, array('return' => 'objects'))) == 1 ? _t('Lot contains %1 object', $vn_num_objects) : _t('Lot contains %1 objects', $vn_num_objects)) . "</strong>\n"; $vs_buf .= "<strong>" . (($vn_num_components = $t_item->numObjects(null, array('return' => 'components'))) == 1 ? _t('Lot contains %1 component', $vn_num_components) : _t('Lot contains %1 components', $vn_num_components)) . "</strong>\n"; } else { $vs_buf .= "<strong>" . (($vn_num_objects = $t_item->numObjects()) == 1 ? _t('Lot contains %1 object', $vn_num_objects) : _t('Lot contains %1 objects', $vn_num_objects)) . "</strong>\n"; } if ((bool) $po_view->request->config->get('allow_automated_renumbering_of_objects_in_a_lot') && ($va_nonconforming_objects = $t_item->getObjectsWithNonConformingIdnos())) { $vs_buf .= '<br/><br/><em>' . (($vn_c = sizeof($va_nonconforming_objects)) == 1 ? _t('There is %1 object with non-conforming numbering', $vn_c) : _t('There are %1 objects with non-conforming numbering', $vn_c)) . "</em>\n"; $vs_buf .= "<a href='#' onclick='jQuery(\"#inspectorNonConformingNumberList\").toggle(250); return false;'>" . caNavIcon($po_view->request, __CA_NAV_BUTTON_ADD__); $vs_buf .= "<div id='inspectorNonConformingNumberList' class='inspectorNonConformingNumberList'><div class='inspectorNonConformingNumberListScroll'><ol>\n"; foreach ($va_nonconforming_objects as $vn_object_id => $va_object_info) { $vs_buf .= '<li>' . caEditorLink($po_view->request, $va_object_info['idno'], '', 'ca_objects', $vn_object_id) . "</li>\n"; } $vs_buf .= "</ol></div>"; $vs_buf .= caNavLink($po_view->request, _t('Re-number objects') . ' ›', 'button', $po_view->request->getModulePath(), $po_view->request->getController(), 'renumberObjects', array('lot_id' => $t_item->getPrimaryKey())); $vs_buf .= "</div>\n"; } require_once __CA_MODELS_DIR__ . '/ca_objects.php'; $t_object = new ca_objects(); $vs_buf .= "<div class='inspectorLotObjectTypeControls'><form action='#' id='caAddObjectToLotForm'>"; if ((bool) $po_view->request->config->get('ca_objects_enforce_strict_type_hierarchy')) { // strict menu $vs_buf .= _t('Add new %1 to lot', $t_object->getTypeListAsHTMLFormElement('type_id', array('id' => 'caAddObjectToLotForm_type_id'), array('childrenOfCurrentTypeOnly' => true, 'directChildrenOnly' => $po_view->request->config->get('ca_objects_enforce_strict_type_hierarchy') == '~' ? false : true, 'returnHierarchyLevels' => true, 'access' => __CA_BUNDLE_ACCESS_EDIT__))); } else { // all types $vs_buf .= _t('Add new %1 to lot', $t_object->getTypeListAsHTMLFormElement('type_id', array('id' => 'caAddObjectToLotForm_type_id'), array('access' => __CA_BUNDLE_ACCESS_EDIT__))); } $vs_buf .= " <a href='#' onclick='caAddObjectToLotForm()'>" . caNavIcon($po_view->request, __CA_NAV_BUTTON_ADD__) . '</a>'; $vs_buf .= "</form></div>\n"; $vs_buf .= "<script type='text/javascript'>\n\tfunction caAddObjectToLotForm() { \n\t\twindow.location='" . caEditorUrl($po_view->request, 'ca_objects', 0, false, array('lot_id' => $t_item->getPrimaryKey(), 'rel' => 1, 'type_id' => '')) . "' + jQuery('#caAddObjectToLotForm_type_id').val();\n\t}\n\tjQuery(document).ready(function() {\n\t\tjQuery('#objectLotsNonConformingNumberList').hide();\n\t});\n</script>\n"; } if ($vs_table_name === 'ca_objects') { // // Output loan info for ca_objects // if ($po_view->request->user->canDoAction('can_manage_clients') && ($va_loan_details = $t_item->isOnLoan())) { $vs_buf .= "<div>" . caNavLink($po_view->request, _t('On loan to %1', $va_loan_details['billing_fname'] . ' ' . $va_loan_details['billing_lname']), 'inspectorOnLoan', 'client/library', 'OrderEditor', 'Edit', array('order_id' => $va_loan_details['order_id'])) . "</div>"; } // // Output checkout info for ca_objects // if ((bool) $po_view->request->config->get('enable_client_services') && ((bool) $po_view->request->config->get('enable_client_services_sales') || (bool) $po_view->request->config->get('enable_client_services_library')) && $t_item->canBeCheckedOut() && ($va_checkout_status = $t_item->getCheckoutStatus(array('returnAsArray' => true)))) { $vs_buf .= "<div class='inspectorCheckedOut'>" . $va_checkout_status['status_display']; if ($va_checkout_status['user_name']) { $vs_buf .= _t("; checked out by %1", $va_checkout_status['user_name']); } $vs_buf .= "</div>"; } } // // Output related objects for ca_object_representations // if ($vs_table_name === 'ca_object_representations') { foreach (array('ca_objects', 'ca_object_lots', 'ca_entities', 'ca_places', 'ca_occurrences', 'ca_collections', 'ca_storage_locations', 'ca_loans', 'ca_movements') as $vs_rel_table) { if (sizeof($va_objects = $t_item->getRelatedItems($vs_rel_table))) { $vs_buf .= "<div><strong>" . _t("Related %1", $o_dm->getTableProperty($vs_rel_table, 'NAME_PLURAL')) . "</strong>: <br/>\n"; $vs_screen = ''; if ($t_ui = ca_editor_uis::loadDefaultUI($vs_rel_table, $po_view->request, null)) { $vs_screen = $t_ui->getScreenWithBundle('ca_object_representations', $po_view->request); } foreach ($va_objects as $vn_rel_id => $va_rel_info) { if ($vs_label = array_shift($va_rel_info['labels'])) { $vs_buf .= caEditorLink($po_view->request, '← ' . $vs_label . ' (' . $va_rel_info['idno'] . ')', '', $vs_rel_table, $va_rel_info[$o_dm->getTablePrimaryKeyName($vs_rel_table)], array(), array(), array('action' => 'Edit' . ($vs_screen ? "/{$vs_screen}" : ""))) . "<br/>\n"; } } $vs_buf .= "</div>\n"; } } } // // Output related object reprsentation for ca_representation_annotation // if ($vs_table_name === 'ca_representation_annotations') { if ($vn_representation_id = $t_item->get('representation_id')) { $vs_buf .= "<div><strong>" . _t("Applied to representation") . "</strong>: <br/>\n"; $t_rep = new ca_object_representations($vn_representation_id); $vs_buf .= caNavLink($po_view->request, '← ' . $t_rep->getLabelForDisplay(), '', 'editor/object_representations', 'ObjectRepresentationEditor', 'Edit/' . $po_view->getVar('representation_editor_screen'), array('representation_id' => $vn_representation_id)) . '<br/>'; $vs_buf .= "</div>\n"; } } // // Output extra useful info for sets // if ($vs_table_name === 'ca_sets') { $vn_set_item_count = $t_item->getItemCount(array('user_id' => $po_view->request->getUserID())); if ($vn_set_item_count > 0 && $po_view->request->user->canDoAction('can_batch_edit_' . $o_dm->getTableName($t_item->get('table_num')))) { $vs_buf .= caNavButton($po_view->request, __CA_NAV_BUTTON_BATCH_EDIT__, _t('Batch edit'), 'editorBatchSetEditorLink', 'batch', 'Editor', 'Edit', array('set_id' => $t_item->getPrimaryKey()), array(), array('icon_position' => __CA_NAV_BUTTON_ICON_POS_LEFT__, 'no_background' => true, 'dont_show_content' => true)); } $vs_buf .= "<div><strong>" . _t("Number of items") . "</strong>: {$vn_set_item_count}<br/>\n"; if ($t_item->getPrimaryKey()) { $vn_set_table_num = $t_item->get('table_num'); $vs_set_table_name = $o_dm->getTableName($vn_set_table_num); $vs_buf .= "<strong>" . _t("Type of content") . "</strong>: " . caGetTableDisplayName($vn_set_table_num) . "<br/>\n"; $vs_buf .= "</div>\n"; } else { if ($vn_set_table_num = $po_view->request->getParameter('table_num', pInteger)) { $vs_buf .= "<div><strong>" . _t("Type of content") . "</strong>: " . caGetTableDisplayName($vn_set_table_num) . "<br/>\n"; $vs_buf .= "</div>\n"; } } $t_user = new ca_users(($vn_user_id = $t_item->get('user_id')) ? $vn_user_id : $po_view->request->getUserID()); if ($t_user->getPrimaryKey()) { $vs_buf .= "<div><strong>" . _t('Owner') . "</strong>: " . $t_user->get('fname') . ' ' . $t_user->get('lname') . "</div>\n"; } if ($po_view->request->user->canDoAction('can_export_' . $vs_set_table_name) && $t_item->getPrimaryKey() && sizeof(ca_data_exporters::getExporters($vn_set_table_num)) > 0) { $vs_buf .= '<div style="border-top: 1px solid #aaaaaa; margin-top: 5px; font-size: 10px; text-align: right;" id="caExportItemButton">'; $vs_buf .= _t('Export this set of records') . " "; $vs_buf .= "<a class='button' onclick='jQuery(\"#exporterFormList\").show();' style='text-align:right;' href='#'>" . caNavIcon($po_view->request, __CA_NAV_BUTTON_ADD__) . "</a>"; $vs_buf .= caFormTag($po_view->request, 'ExportData', 'caExportForm', 'manage/MetadataExport', 'post', 'multipart/form-data', '_top', array('disableUnsavedChangesWarning' => true)); $vs_buf .= "<div id='exporterFormList'>"; $vs_buf .= ca_data_exporters::getExporterListAsHTMLFormElement('exporter_id', $vn_set_table_num, array('id' => 'caExporterList'), array('width' => '135px')); $vs_buf .= caHTMLHiddenInput('set_id', array('value' => $t_item->getPrimaryKey())); $vs_buf .= caFormSubmitLink($po_view->request, _t('Export') . " ›", "button", "caExportForm"); $vs_buf .= "</div>\n"; $vs_buf .= "</form>"; $vs_buf .= "</div>"; $vs_buf .= "<script type='text/javascript'>"; $vs_buf .= "jQuery(document).ready(function() {"; $vs_buf .= "jQuery(\"#exporterFormList\").hide();"; $vs_buf .= "});"; $vs_buf .= "</script>"; } } // // Output extra useful info for set items // if ($vs_table_name === 'ca_set_items') { AssetLoadManager::register("panel"); $t_set = new ca_sets(); if ($t_set->load($vn_set_id = $t_item->get('set_id'))) { $vs_buf .= "<div><strong>" . _t("Part of set") . "</strong>: " . caEditorLink($po_view->request, $t_set->getLabelForDisplay(), '', 'ca_sets', $vn_set_id) . "<br/>\n"; $t_content_instance = $t_item->getAppDatamodel()->getInstanceByTableNum($vn_item_table_num = $t_item->get('table_num')); if ($t_content_instance->load($vn_row_id = $t_item->get('row_id'))) { $vs_label = $t_content_instance->getLabelForDisplay(); if ($vs_id_fld = $t_content_instance->getProperty('ID_NUMBERING_ID_FIELD')) { $vs_label .= " (" . $t_content_instance->get($vs_id_fld) . ")"; } $vs_buf .= "<strong>" . _t("Is %1", caGetTableDisplayName($vn_item_table_num, false) . "</strong>: " . caEditorLink($po_view->request, $vs_label, '', $vn_item_table_num, $vn_row_id)) . "<br/>\n"; } $vs_buf .= "</div>\n"; } } // // Output extra useful info for lists // if ($vs_table_name === 'ca_lists' && $t_item->getPrimaryKey()) { $vs_buf .= "<strong>" . _t("Number of items") . "</strong>: " . $t_item->numItemsInList() . "<br/>\n"; $t_list_item = new ca_list_items(); $t_list_item->load(array('list_id' => $t_item->getPrimaryKey(), 'parent_id' => null)); $vs_type_list = $t_list_item->getTypeListAsHTMLFormElement('type_id', array('style' => 'width: 90px; font-size: 9px;'), array('access' => __CA_BUNDLE_ACCESS_EDIT__)); if ($vs_type_list) { $vs_buf .= '<div style="border-top: 1px solid #aaaaaa; margin-top: 5px; font-size: 10px;">'; $vs_buf .= caFormTag($po_view->request, 'Edit', 'NewChildForm', 'administrate/setup/list_item_editor/ListItemEditor', 'post', 'multipart/form-data', '_top', array('disableUnsavedChangesWarning' => true)); $vs_buf .= _t('Add a %1 to this list', $vs_type_list) . caHTMLHiddenInput($t_list_item->primaryKey(), array('value' => '0')) . caHTMLHiddenInput('parent_id', array('value' => $t_list_item->getPrimaryKey())); $vs_buf .= caFormSubmitLink($po_view->request, caNavIcon($po_view->request, __CA_NAV_BUTTON_ADD__), '', 'NewChildForm'); $vs_buf .= "</form></div>\n"; } } // // Output containing list for list items // if ($vs_table_name === 'ca_list_items') { if ($t_list = $po_view->getVar('t_list')) { $vn_list_id = $t_list->getPrimaryKey(); $vs_buf .= "<strong>" . _t("Part of") . "</strong>: " . caEditorLink($po_view->request, $t_list->getLabelForDisplay(), '', 'ca_lists', $vn_list_id) . "<br/>\n"; if ($t_item->get('is_default')) { $vs_buf .= "<strong>" . _t("Is default for list") . "</strong><br/>\n"; } } } // // Output containing relationship type name for relationship types // if ($vs_table_name === 'ca_relationship_types') { if (!($t_rel_instance = $t_item->getAppDatamodel()->getInstanceByTableNum($t_item->get('table_num'), true))) { if ($vn_parent_id = $po_view->request->getParameter('parent_id', pInteger)) { $t_rel_type = new ca_relationship_types($vn_parent_id); $t_rel_instance = $t_item->getAppDatamodel()->getInstanceByTableNum($t_rel_type->get('table_num'), true); } } if ($t_rel_instance) { $vs_buf .= "<div><strong>" . _t("Is a") . "</strong>: " . $t_rel_instance->getProperty('NAME_SINGULAR') . "<br/></div>\n"; } } // // Output extra useful info for metadata elements // if ($vs_table_name === 'ca_metadata_elements' && $t_item->getPrimaryKey()) { $vs_buf .= "<div><strong>" . _t("Element code") . "</strong>: " . $t_item->get('element_code') . "<br/></div>\n"; if (sizeof($va_uis = $t_item->getUIs()) > 0) { $vs_buf .= "<div><strong>" . _t("Referenced by user interfaces") . "</strong>:<br/>\n"; foreach ($va_uis as $vn_ui_id => $va_ui_info) { $vs_buf .= caNavLink($po_view->request, $va_ui_info['name'], '', 'administrate/setup/interface_screen_editor', 'InterfaceScreenEditor', 'Edit', array('ui_id' => $vn_ui_id, 'screen_id' => $va_ui_info['screen_id'])); $vs_buf .= " (" . $o_dm->getTableProperty($va_ui_info['editor_type'], 'NAME_PLURAL') . ")<br/>\n"; } $vs_buf .= "</div>\n"; } } // // Output related objects for ca_editor_uis and ca_editor_ui_screens // if ($vs_table_name === 'ca_editor_uis') { $vs_buf .= "<div><strong>" . _t("Number of screens") . "</strong>: " . (int) $t_item->getScreenCount() . "\n"; if ($t_item->getPrimaryKey()) { $vs_buf .= "<div><strong>" . _t("Edits") . "</strong>: " . caGetTableDisplayName($t_item->get('editor_type')) . "<br/>\n"; } else { $vs_buf .= "<div><strong>" . _t("Edits") . "</strong>: " . caGetTableDisplayName($po_view->request->getParameter('editor_type', pInteger)) . "<br/>\n"; } $vs_buf .= "</div>\n"; } // // Output related objects for ca_editor_uis and ca_editor_ui_screens // if ($vs_table_name === 'ca_editor_ui_screens') { $t_ui = new ca_editor_uis($vn_ui_id = $t_item->get('ui_id')); $vs_buf .= "<div><strong>" . _t("Part of") . "</strong>: " . caNavLink($po_view->request, $t_ui->getLabelForDisplay(), '', 'administrate/setup/interface_editor', 'InterfaceEditor', 'Edit', array('ui_id' => $vn_ui_id)) . "\n"; $vs_buf .= "</div>\n"; } // // Output extra useful info for bundle displays // if ($vs_table_name === 'ca_bundle_displays') { $vs_buf .= "<div><strong>" . _t("Number of placements") . "</strong>: " . $t_item->getPlacementCount(array('user_id' => $po_view->request->getUserID())) . "<br/>\n"; if ($t_item->getPrimaryKey()) { $vn_content_table_num = $t_item->get('table_num'); $vs_buf .= "<strong>" . _t("Type of content") . "</strong>: " . caGetTableDisplayName($vn_content_table_num) . "\n"; $vs_buf .= "</div>\n"; } else { if ($vn_content_table_num = $po_view->request->getParameter('table_num', pInteger)) { $vs_buf .= "<div><strong>" . _t("Type of content") . "</strong>: " . caGetTableDisplayName($vn_content_table_num) . "\n"; $vs_buf .= "</div>\n"; } } $t_user = new ca_users(($vn_user_id = $t_item->get('user_id')) ? $vn_user_id : $po_view->request->getUserID()); if ($t_user->getPrimaryKey()) { $vs_buf .= "<div><strong>" . _t('Owner') . "</strong>: " . $t_user->get('fname') . ' ' . $t_user->get('lname') . "</div>\n"; } } // // Output extra useful info for search forms // if ($vs_table_name === 'ca_search_forms') { $vs_buf .= "<div><strong>" . _t("Number of placements") . "</strong>: " . $t_item->getPlacementCount(array('user_id' => $po_view->request->getUserID())) . "<br/>\n"; if ($t_item->getPrimaryKey()) { $vn_content_table_num = $t_item->get('table_num'); $vs_buf .= "<strong>" . _t("Searches for") . "</strong>: " . caGetTableDisplayName($vn_content_table_num) . "\n"; $vs_buf .= "</div>\n"; } else { if ($vn_content_table_num = $po_view->request->getParameter('table_num', pInteger)) { $vs_buf .= "<strong>" . _t("Searches for") . "</strong>: " . caGetTableDisplayName($vn_content_table_num) . "\n"; $vs_buf .= "</div>\n"; } } $t_user = new ca_users(($vn_user_id = $t_item->get('user_id')) ? $vn_user_id : $po_view->request->getUserID()); if ($t_user->getPrimaryKey()) { $vs_buf .= "<div><strong>" . _t('Owner') . "</strong>: " . $t_user->get('fname') . ' ' . $t_user->get('lname') . "</div>\n"; } } // // Output extra useful info for tours // if ($vs_table_name === 'ca_tours' && $t_item->getPrimaryKey()) { $vs_buf .= "<br/><strong>" . _t("Number of stops") . "</strong>: " . $t_item->getStopCount() . "<br/>\n"; } // // Output containing tour for tour stops // if ($vs_table_name === 'ca_tour_stops') { $t_tour = new ca_tours($vn_tour_id = $t_item->get('tour_id')); $vs_buf .= "<strong>" . _t("Part of") . "</strong>: " . caEditorLink($po_view->request, $t_tour->getLabelForDisplay(), '', 'ca_tours', $vn_tour_id) . "<br/>\n"; } // // Output extra useful info for bundle mappings // if ($vs_table_name === 'ca_bundle_mappings') { if ($t_item->getPrimaryKey()) { $vn_content_table_num = $t_item->get('table_num'); $vs_buf .= "<br/><strong>" . _t("Type of content") . "</strong>: " . caGetTableDisplayName($vn_content_table_num) . "<br/>\n"; $vs_buf .= "<strong>" . _t("Type") . "</strong>: " . $t_item->getChoiceListValue('direction', $t_item->get('direction')) . "<br/>\n"; $vs_buf .= "<strong>" . _t("Target format") . "</strong>: " . $t_item->get('target') . "<br/>\n"; $va_stats = $t_item->getMappingStatistics(); $vs_buf .= "<div><strong>" . _t("Number of groups") . "</strong>: " . $va_stats['groupCount'] . "<br/>\n"; $vs_buf .= "<strong>" . _t("Number of rules") . "</strong>: " . $va_stats['ruleCount'] . "<br/>\n"; $vs_buf .= "</div>\n"; } else { if ($vn_content_table_num = $po_view->request->getParameter('table_num', pInteger)) { $vs_buf .= "<div><strong>" . _t("Type of content") . "</strong>: " . caGetTableDisplayName($vn_content_table_num) . "<br/>\n"; $vs_buf .= "<strong>" . _t("Type") . "</strong>: " . $t_item->getChoiceListValue('direction', $po_view->request->getParameter('direction', pString)) . "<br/>\n"; $vs_buf .= "<strong>" . _t("Target format") . "</strong>: " . $po_view->request->getParameter('target', pString) . "<br/>\n"; $vs_buf .= "<div><strong>" . _t("Number of groups") . "</strong>: 0<br/>\n"; $vs_buf .= "<strong>" . _t("Number of rules") . "</strong>: 0</div>\n"; $vs_buf .= "</div>\n"; } } } // // Output extra useful info for client services/commerce orders // if ($vs_table_name === 'ca_commerce_orders') { $o_client_services_config = Configuration::load($po_view->request->config->get('client_services_config')); $va_order_totals = $t_item->getOrderTotals(); if ($va_order_totals['fee'] + $va_order_totals['tax'] + $va_order_totals['shipping'] + $va_order_totals['handling'] + $va_order_totals['additional_order_fees'] + $va_order_totals['additional_item_fees'] != 0) { $vs_currency_symbol = $o_client_services_config->get('currency_symbol'); $vs_buf .= "<table style='margin-left: 10px;'>"; $vs_buf .= "<tr><td><strong>" . _t("Items") . '</strong></td><td>' . $vs_currency_symbol . sprintf("%4.2f", $va_order_totals['fee']) . " (" . (int) $va_order_totals['items'] . ")</td></tr>\n"; $vs_buf .= "<tr><td><strong>" . _t("S+H") . '</strong></td><td>' . $vs_currency_symbol . sprintf("%4.2f", $va_order_totals['shipping'] + $va_order_totals['handling']) . "</td></tr>\n"; $vs_buf .= "<tr><td><strong>" . _t("Tax") . '</strong></td><td>' . $vs_currency_symbol . sprintf("%4.2f", $va_order_totals['tax']) . "</td></tr>\n"; $vs_buf .= "<tr><td><strong>" . _t("Addtl fees") . '</strong></td><td>' . $vs_currency_symbol . sprintf("%4.2f", $va_order_totals['additional_order_fees'] + $va_order_totals['additional_item_fees']) . "</td></tr>\n"; $vs_buf .= "<tr><td><strong>" . _t("Total") . '</strong></td><td>' . $vs_currency_symbol . sprintf("%4.2f", $va_order_totals['fee'] + $va_order_totals['tax'] + $va_order_totals['shipping'] + $va_order_totals['handling'] + $va_order_totals['additional_order_fees'] + $va_order_totals['additional_item_fees']) . "</td></tr>\n"; $vs_buf .= "</table>"; $vs_buf .= "<strong>" . $t_item->getFieldInfo('payment_status', 'LABEL') . "</strong>: " . $t_item->getChoiceListValue('payment_status', $t_item->get('payment_status')) . "<br/>\n"; } $vs_buf .= "<br/><strong>" . $t_item->getFieldInfo('order_status', 'LABEL') . "</strong>: " . $t_item->getChoiceListValue('order_status', $t_item->get('order_status')) . "<br/>\n"; if ($vs_shipping_date = $t_item->get('shipping_date', array('dateFormat' => 'delimited', 'timeOmit' => true))) { $vs_buf .= "<strong>" . $t_item->getFieldInfo('shipping_date', 'LABEL') . "</strong>: " . $vs_shipping_date; if ($vs_shipped_on_date = $t_item->get('shipped_on_date', array('dateFormat' => 'delimited'))) { $vs_buf .= " (" . _t('shipped %1', $vs_shipped_on_date) . ")"; } else { $vs_buf .= " (" . _t('not shipped') . ")"; } $vs_buf .= "<br/>\n"; } if (($vn_shipping_method = $t_item->get('shipping_method')) && $t_item->getChoiceListValue('shipping_method', $vn_shipping_method) != 'None') { $vs_buf .= "<strong>" . $t_item->getFieldInfo('shipping_method', 'LABEL') . "</strong>: " . $t_item->getChoiceListValue('shipping_method', $vn_shipping_method) . "<br/>\n"; } } // // Output configurable additional info from config, if set // if ($vs_additional_info = $po_view->request->config->get("{$vs_table_name}_inspector_additional_info")) { if (is_array($vs_additional_info)) { $vs_buf .= "<br/>"; foreach ($vs_additional_info as $vs_info) { $vs_buf .= caProcessTemplateForIDs($vs_info, $vs_table_name, array($t_item->getPrimaryKey()), array('requireLinkTags' => true)) . "<br/>\n"; } } else { $vs_buf .= "<br/>" . caProcessTemplateForIDs($vs_additional_info, $vs_table_name, array($t_item->getPrimaryKey()), array('requireLinkTags' => true)) . "<br/>\n"; } } // ------------------------------------------------------------------------------------- // Export if ($t_item->getPrimaryKey() && $po_view->request->config->get($vs_table_name . '_show_add_child_control_in_inspector')) { $vb_show_add_child_control = true; if (is_array($va_restrict_add_child_control_to_types = $po_view->request->config->getList($vs_table_name . '_restrict_child_control_in_inspector_to_types')) && sizeof($va_restrict_add_child_control_to_types)) { $t_type_instance = $t_item->getTypeInstance(); if (!in_array($t_type_instance->get('idno'), $va_restrict_add_child_control_to_types) && !in_array($t_type_instance->getPrimaryKey(), $va_restrict_add_child_control_to_types)) { $vb_show_add_child_control = false; } } } if ($po_view->request->user->canDoAction('can_export_' . $vs_table_name) && $t_item->getPrimaryKey() && sizeof(ca_data_exporters::getExporters($t_item->tableNum())) > 0) { $vs_buf .= '<div style="border-top: 1px solid #aaaaaa; margin-top: 5px; font-size: 10px; text-align: right;" id="caExportItemButton">'; $vs_buf .= _t('Export this %1', mb_strtolower($vs_type_name, 'UTF-8')) . " "; $vs_buf .= "<a class='button' onclick='jQuery(\"#exporterFormList\").show();' style='text-align:right;' href='#'>" . caNavIcon($po_view->request, __CA_NAV_BUTTON_ADD__) . "</a>"; $vs_buf .= caFormTag($po_view->request, 'ExportSingleData', 'caExportForm', 'manage/MetadataExport', 'post', 'multipart/form-data', '_top', array('disableUnsavedChangesWarning' => true)); $vs_buf .= "<div id='exporterFormList'>"; $vs_buf .= ca_data_exporters::getExporterListAsHTMLFormElement('exporter_id', $t_item->tableNum(), array('id' => 'caExporterList'), array('width' => '120px')); $vs_buf .= caHTMLHiddenInput('item_id', array('value' => $t_item->getPrimaryKey())); $vs_buf .= caFormSubmitLink($po_view->request, _t('Export') . " ›", "button", "caExportForm"); $vs_buf .= "</div>\n"; $vs_buf .= "</form>"; $vs_buf .= "</div>"; $vs_buf .= "<script type='text/javascript'>"; $vs_buf .= "jQuery(document).ready(function() {"; $vs_buf .= "jQuery(\"#exporterFormList\").hide();"; $vs_buf .= "});"; $vs_buf .= "</script>"; } $vs_buf .= "</div></h4>\n"; $vs_buf .= "<script type='text/javascript'>\n\t\t\tvar inspectorCookieJar = jQuery.cookieJar('caCookieJar');"; if ($t_item->getPrimaryKey()) { if ($vs_more_info) { $vs_buf .= "\t\t\t\n\t\t\tif (inspectorCookieJar.get('inspectorMoreInfoIsOpen') == undefined) {\t\t// default is to have info open\n\t\t\t\tinspectorCookieJar.set('inspectorMoreInfoIsOpen', 1);\n\t\t\t}\n\t\t\tif (inspectorCookieJar.get('inspectorMoreInfoIsOpen') == 1) {\n\t\t\t\tjQuery('#inspectorInfo').toggle(0);\n\t\t\t\tjQuery('#inspectorMoreInfo').html('" . addslashes(caNavIcon($po_view->request, __CA_NAV_BUTTON_COLLAPSE__)) . "');\n\t\t\t}\n\t\t\n\t\t\tjQuery('#inspectorMoreInfo').click(function() {\n\t\t\t\tjQuery('#inspectorInfo').slideToggle(350, function() { \n\t\t\t\t\tinspectorCookieJar.set('inspectorMoreInfoIsOpen', (this.style.display == 'block') ? 1 : 0); \n\t\t\t\t\tjQuery('#inspectorMoreInfo').html((this.style.display == 'block') ? '" . addslashes(caNavIcon($po_view->request, __CA_NAV_BUTTON_COLLAPSE__)) . "' : '" . addslashes(caNavIcon($po_view->request, __CA_NAV_BUTTON_INFO2__)) . "');\n\t\t\t\t\tcaResizeSideNav();\n\t\t\t\t}); \n\t\t\t\treturn false;\n\t\t\t});\n\t\t"; } if (sizeof($va_reps)) { $vs_buf .= "\n\t\tif (inspectorCookieJar.get('inspectorShowMediaIsOpen') == undefined) {\t\t// default is to have media open\n\t\t\tinspectorCookieJar.set('inspectorShowMediaIsOpen', 1);\n\t\t}\n\t\t\n\t\tif (inspectorCookieJar.get('inspectorShowMediaIsOpen') == 1) {\n\t\t\tjQuery('#inspectorMedia').toggle();\n\t\t}\n\t\n\t\tjQuery('#caColorbox').on('click', function(e) {\n\t\t\tif (e.altKey) {\n\t\t\t\tjQuery('#inspectorMedia').slideToggle(200, function() { \n\t\t\t\t\tinspectorCookieJar.set('inspectorShowMediaIsOpen', (this.style.display == 'block') ? 1 : 0); \n\t\t\t\t\t\tcaResizeSideNav();\n\t\t\t\t}); \n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\t\t\t\t"; } } $vs_buf .= "</script>\n"; } $o_app_plugin_manager = new ApplicationPluginManager(); $va_hookAppend = $o_app_plugin_manager->hookAppendToEditorInspector(array("t_item" => $t_item)); if (is_string($va_hookAppend["caEditorInspectorAppend"])) { $vs_buf .= $va_hookAppend["caEditorInspectorAppend"]; } return $vs_buf; }
<?php if ($this->request->isLoggedIn() && $this->request->user->getPreference('ui_show_breadcrumbs') == 1) { if (trim($vs_trail = join('<img src="' . $this->request->getThemeUrlPath() . '/graphics/arrows/breadcrumb.jpg">', $va_breadcrumb = $this->getVar('nav')->getDestinationAsBreadCrumbTrail()))) { ?> <div class='navBreadCrumbContainer'> <div class='navBreadCrumbs'> <?php $count = count($va_breadcrumb); $i = 1; print '<div class="crumb"><div class="crumbtext navBreadCrumbLabel">' . _t('Current location') . '</div><img src="' . $this->request->getThemeUrlPath() . '/graphics/arrows/breadcrumbloc.png" width="16" height="19" border="0"></div>'; foreach ($va_breadcrumb as $crumb) { if ($i == $count) { print '<div class="lastcrumb"><nobr><div class="crumbtext">' . caUcFirstUTF8Safe($crumb) . '</div><img src="' . $this->request->getThemeUrlPath() . '/graphics/arrows/breadcrumb.png" width="16" height="19" border="0"></nobr></div>'; } else { print '<div class="crumb"><nobr><div class="crumbtext">' . caUcFirstUTF8Safe($crumb) . '</div><img src="' . $this->request->getThemeUrlPath() . '/graphics/arrows/breadcrumb.png" width="16" height="19" border="0"></nobr></div>'; $i++; } } if (substr($this->request->getModulePath(), 0, 7) == 'editor/') { print "<div class='expandCollapse'>"; print "<div style='padding: 5px; text-align: center;'><a href='#' id='expandAll' onclick='caBundleVisibilityManager.open(); return false;' style='margin-right: 5px;'><img src='" . $this->request->getThemeUrlPath() . "/graphics/arrows/collapsedown.png' width='16' height='12' border='0'></a> "; print "<a href='#' id='collapseAll' onclick='caBundleVisibilityManager.close(); return false;'><img src='" . $this->request->getThemeUrlPath() . "/graphics/arrows/collapseup.png' width='16' height='12' border='0'></a></div>"; print "</div><!-- end expandCollapse-->"; TooltipManager::add('#expandAll', _t("Expand all metadata elements")); TooltipManager::add('#collapseAll', _t("Collapse all metadata elements")); } ?> </div><!-- end navBreadCrumbs--> </div><!-- end navBreadCrumbContainer -->
/** * * * @return (string) */ function caGetFacetForMenuBar($po_request, $vs_browse_type) { $vs_key = ''; //$po_request->session->getVar('objects_last_browse_id'); if (!($va_browse_info = caGetInfoForBrowseType($vs_browse_type))) { // invalid browse type – throw error return null; } $o_browse = caGetBrowseInstance($va_browse_info["table"]); if ($vs_key) { $o_browse->reload($vs_key); } $o_browse->execute(array('checkAccess' => caGetUserAccessValues($po_request), 'showAllForNoCriteriaBrowse' => true)); $va_facets = $o_browse->getInfoForAvailableFacets(); $vs_buf = ''; $vs_default_facet = null; foreach ($va_facets as $vs_facet_name => $va_facet_info) { if (!$vs_default_facet) { $vs_default_facet = $vs_facet_name; } $vs_buf .= "<li " . (!$vs_buf ? "class='active'" : "") . "><a href='#' onclick='jQuery(\".browseMenuFacet\").load(\"" . caNavUrl($po_request, '*', 'Browse', $vs_browse_type, array('facet' => $vs_facet_name, 'getFacet' => 1, 'key' => $vs_key, 'isNav' => 1)) . "\", function() { jQuery(this).parent().scrollTop(0); }); jQuery(this).parent().siblings().removeClass(\"active\"); jQuery(this).parent().addClass(\"active\"); return false;'>" . caUcFirstUTF8Safe($va_facet_info['label_plural']) . "</a></li>\n"; } if ($vs_default_facet) { $vs_buf .= "<script type='text/javascript'>jQuery(document).ready(function() { jQuery(\".browseMenuFacet\").load(\"" . caNavUrl($po_request, '*', 'Browse', $vs_browse_type, array('facet' => $vs_default_facet, 'getFacet' => 1, 'key' => $vs_key, 'isNav' => 1)) . "\"); });</script>\n"; } return $vs_buf; }
/** * Performs two-step delete of an existing record. The first step is a confirmation dialog, followed by actual deletion upon user confirmation * * @param array $pa_options Array of options passed through to _initView */ public function Delete($pa_options = null) { list($vn_subject_id, $t_subject, $t_ui) = $this->_initView($pa_options); if (!$vn_subject_id) { return; } if (!$this->_checkAccess($t_subject)) { return false; } if (!($vs_type_name = $t_subject->getTypeName())) { $vs_type_name = $t_subject->getProperty('NAME_SINGULAR'); } // // Does user have access to row? // if ($t_subject->getAppConfig()->get('perform_item_level_access_checking')) { if ($t_subject->checkACLAccessForUser($this->request->user) < __CA_ACL_EDIT_DELETE_ACCESS__) { $this->response->setRedirect($this->request->config->get('error_display_url') . '/n/2580?r=' . urlencode($this->request->getFullUrlPath())); return; } } // get parent_id, if it exists, prior to deleting so we can // set the browse_last_id parameter to something sensible $vn_parent_id = null; if ($vs_parent_fld = $t_subject->getProperty('HIERARCHY_PARENT_ID_FLD')) { $vn_parent_id = $t_subject->get($vs_parent_fld); } if ($vn_subject_id && !$t_subject->getPrimaryKey()) { $this->notification->addNotification(_t("%1 does not exist", $vs_type_name), __NOTIFICATION_TYPE_ERROR__); return; } // Don't allow deletion of roots in simple mono-hierarchies... that's bad. if (!$vn_parent_id && in_array($t_subject->getProperty('HIERARCHY_TYPE'), array(__CA_HIER_TYPE_SIMPLE_MONO__, __CA_HIER_TYPE_MULTI_MONO__))) { $this->notification->addNotification(_t("Cannot delete root of hierarchy"), __NOTIFICATION_TYPE_ERROR__); return; } if ($vb_confirm = $this->request->getParameter('confirm', pInteger) == 1 ? true : false) { $vb_we_set_transaction = false; if (!$t_subject->inTransaction()) { $o_t = new Transaction(); $t_subject->setTransaction($o_t); $vb_we_set_transaction = true; } // Do we need to move relationships? if (($vn_remap_id = $this->request->getParameter('remapToID', pInteger)) && $this->request->getParameter('referenceHandling', pString) == 'remap') { switch ($t_subject->tableName()) { case 'ca_relationship_types': if ($vn_c = $t_subject->moveRelationshipsToType($vn_remap_id)) { $t_target = new ca_relationship_types($vn_remap_id); $this->notification->addNotification($vn_c == 1 ? _t("Transferred %1 relationship to type <em>%2</em>", $vn_c, $t_target->getLabelForDisplay()) : _t("Transferred %1 relationships to type <em>%2</em>", $vn_c, $t_target->getLabelForDisplay()), __NOTIFICATION_TYPE_INFO__); } break; default: // update relationships $va_tables = array('ca_objects', 'ca_entities', 'ca_places', 'ca_occurrences', 'ca_collections', 'ca_storage_locations', 'ca_list_items', 'ca_loans', 'ca_movements', 'ca_tours', 'ca_tour_stops', 'ca_object_representations', 'ca_list_items'); $vn_c = 0; foreach ($va_tables as $vs_table) { $vn_c += $t_subject->moveRelationships($vs_table, $vn_remap_id); } // update existing metadata attributes to use remapped value $t_subject->moveAuthorityElementReferences($vn_remap_id); if ($vn_c > 0) { $t_target = $this->opo_datamodel->getInstanceByTableName($this->ops_table_name); $t_target->load($vn_remap_id); $this->notification->addNotification($vn_c == 1 ? _t("Transferred %1 relationship to <em>%2</em> (%3)", $vn_c, $t_target->getLabelForDisplay(), $t_target->get($t_target->getProperty('ID_NUMBERING_ID_FIELD'))) : _t("Transferred %1 relationships to <em>%2</em> (%3)", $vn_c, $t_target->getLabelForDisplay(), $t_target->get($t_target->getProperty('ID_NUMBERING_ID_FIELD'))), __NOTIFICATION_TYPE_INFO__); } break; } } else { $t_subject->deleteAuthorityElementReferences(); } $t_subject->setMode(ACCESS_WRITE); $vb_rc = false; if ($this->_beforeDelete($t_subject)) { if ($vb_rc = $t_subject->delete(true)) { $this->_afterDelete($t_subject); } } if ($vb_we_set_transaction) { if (!$vb_rc) { $o_t->rollbackTransaction(); } else { $o_t->commitTransaction(); } } } $this->view->setVar('confirmed', $vb_confirm); if ($t_subject->numErrors()) { foreach ($t_subject->errors() as $o_e) { $this->notification->addNotification($o_e->getErrorDescription(), __NOTIFICATION_TYPE_ERROR__); } } else { if ($vb_confirm) { $this->notification->addNotification(_t("%1 was deleted", caUcFirstUTF8Safe($vs_type_name)), __NOTIFICATION_TYPE_INFO__); // update result list since it has changed $this->opo_result_context->removeIDFromResults($vn_subject_id); $this->opo_result_context->invalidateCache(); $this->opo_result_context->saveContext(); // clear subject_id - it's no longer valid $t_subject->clear(); $this->view->setVar($t_subject->primaryKey(), null); $this->request->setParameter($t_subject->primaryKey(), null, 'PATH'); // set last browse id for hierarchy browser $this->request->session->setVar($this->ops_table_name . '_browse_last_id', $vn_parent_id); // Clear out row_id so sidenav is disabled $this->request->setParameter($t_subject->primaryKey(), null, 'POST'); # trigger "DeleteItem" hook $this->opo_app_plugin_manager->hookDeleteItem(array('id' => $vn_subject_id, 'table_num' => $t_subject->tableNum(), 'table_name' => $t_subject->tableName(), 'instance' => $t_subject)); } } $this->view->setVar('subject_name', $t_subject->getLabelForDisplay(false)); $this->render('delete_html.php'); }
/** * */ public function refine(&$pa_destination_data, $pa_group, $pa_item, $pa_source_data, $pa_options = null) { global $g_ui_locale_id; $vs_delimiter = caGetOption('delimiter', $pa_options, null); if (!($pn_locale_id = ca_locales::getDefaultCataloguingLocaleID())) { $pn_locale_id = $g_ui_locale_id; } $o_log = isset($pa_options['log']) && is_object($pa_options['log']) ? $pa_options['log'] : null; $t_mapping = caGetOption('mapping', $pa_options, null); if ($t_mapping) { $o_dm = Datamodel::load(); if ($t_mapping->get('table_num') != $o_dm->getTableNum('ca_list_items')) { if ($o_log) { $o_log->logError(_t("listItemIndentedHierarchyBuilder refinery may only be used in imports to ca_list_items")); } return null; } } $va_group_dest = explode(".", $pa_group['destination']); $vs_terminal = array_pop($va_group_dest); $pm_value = $pa_source_data[$pa_item['source']]; // Get list of fields to insert if (!is_array($va_levels = $pa_item['settings']['listItemIndentedHierarchyBuilder_levels'])) { if ($o_log) { $o_log->logError(_t("listItemIndentedHierarchyBuilder requires levels option be set to a list of data source placeholders")); } return null; } else { $va_level_types = $pa_item['settings']['listItemIndentedHierarchyBuilder_levelTypes']; } // Get list, or create if it doesn't already exist if (!($vs_list_code = $pa_item['settings']['listItemIndentedHierarchyBuilder_list'])) { if ($o_log) { $o_log->logError(_t("listItemIndentedHierarchyBuilder requires list option be set")); } return null; } $t_list = new ca_lists(); if (!$t_list->load(array('list_code' => $vs_list_code))) { // create list $t_list->set('list_code', $vs_list_code); $t_list->setMode(ACCESS_WRITE); $t_list->insert(); if ($t_list->numErrors()) { if ($o_log) { $o_log->logError(_t("listItemIndentedHierarchyBuilder could not create list %1: %2", $vs_list_code, join("; ", $t_list->getErrors()))); } return null; } $t_list->addLabel(array('name' => caUcFirstUTF8Safe($vs_list_code)), $pn_locale_id, null, true); if ($t_list->numErrors()) { if ($o_log) { $o_log->logError(_t("listItemIndentedHierarchyBuilder could not create list label %1: %2", $vs_list_code, join("; ", $t_list->getErrors()))); } return null; } } // Handle each level if (!is_array($va_level_values = listItemIndentedHierarchyBuilderRefinery::$opa_level_values)) { $va_level_values = $va_level_value_ids = array(); } $va_level_value_ids = listItemIndentedHierarchyBuilderRefinery::$opa_level_value_ids; $vn_max_level = 0; $vn_parent_id = null; foreach ($va_levels as $vn_i => $vs_level_placeholder) { $vs_level_value = null; if (strlen($vs_level_placeholder)) { if ($vs_level_value = BaseRefinery::parsePlaceholder($vs_level_placeholder, $pa_source_data, $pa_item, 0, array('reader' => caGetOption('reader', $pa_options, null), 'returnAsString' => true))) { if (!$vn_parent_id && isset(listItemIndentedHierarchyBuilderRefinery::$opa_level_value_ids[$vn_i - 1])) { $vn_parent_id = listItemIndentedHierarchyBuilderRefinery::$opa_level_value_ids[$vn_i - 1]; } $vs_type = isset($va_level_types[$vn_i]) ? $va_level_types[$vn_i] : null; if ($vn_item_id = DataMigrationUtils::getListItemID($vs_list_code, preg_replace("![^A-Za-z0-9_]+!", "_", $vs_level_value), $vs_type, $pn_locale_id, array('is_enabled' => 1, 'parent_id' => $vn_parent_id, 'preferred_labels' => array('name_singular' => $vs_level_value, 'name_plural' => $vs_level_value)), array('matchOnIdno' => true, 'log' => $o_log, 'transaction' => caGetOption('transaction', $pa_options, null), 'importEvent' => caGetOption('event', $pa_options, null), 'importEventSource' => 'listItemIndentedHierarchyBuilder'))) { $vn_parent_id = $vn_item_id; $va_level_values[$vn_i] = $vs_level_value; $va_level_value_ids[$vn_i] = $vn_item_id; $vn_max_level = $vn_i; } } } } listItemIndentedHierarchyBuilderRefinery::$opa_level_values = array_slice($va_level_values, 0, $vn_max_level + 1); listItemIndentedHierarchyBuilderRefinery::$opa_level_value_ids = array_slice($va_level_value_ids, 0, $vn_max_level + 1); if ($pa_item['settings']['listItemIndentedHierarchyBuilder_list'] == 'returnData') { return $vn_parent_id; } return null; }
/** * Returns summary of current browse parameters suitable for display. * * @return string Summary of current browse criteria ready for display */ public function getCriteriaForDisplay($po_browse) { $va_criteria = $po_browse->getCriteriaWithLabels(); if (!sizeof($va_criteria)) { return ''; } $va_criteria_info = $po_browse->getInfoForFacets(); $va_buf = array(); foreach ($va_criteria as $vs_facet => $va_vals) { foreach ($va_vals as $vn_i => $vs_val) { $va_vals[$vn_i] = preg_replace("![A-Za-z_\\./]+[:]{1}!", "", $vs_val); $va_vals[$vn_i] = trim(preg_replace("![\\*].!", "", $va_vals[$vn_i])); $va_vals[$vn_i] = trim(preg_replace("![\\(\\)]+!", " ", $va_vals[$vn_i])); } $va_buf[] = caUcFirstUTF8Safe($va_criteria_info[$vs_facet]['label_singular']) . ': ' . join(", ", $va_vals); } return join(" / ", $va_buf); }
/** * Returns all available search form placements - those data bundles that can be searches for the given content type, in other words. * The returned value is a list of arrays; each array contains a 'bundle' specifier than can be passed got Model::get() or SearchResult::get() and a display name * * @param mixed $pm_table_name_or_num The table name or number specifying the content type to fetch bundles for. If omitted the content table of the currently loaded search form will be used. * @return array And array of bundles keyed on display label. Each value is an array with these keys: * bundle = The bundle name (eg. ca_objects.idno) * display = Display label for each available bundle * description = Description of bundle * * Will return null if table name or number is invalid. */ function caGetBundlesAvailableForSearch($pm_table_name_or_num, $pa_options = null) { $pb_for_select = caGetOption('forSelect', $pa_options, false); $pa_filter = caGetOption('filter', $pa_options, null); $o_dm = Datamodel::load(); $o_config = Configuration::load(); $o_indexing_config = caGetSearchIndexingConfig(); $pm_table_name_or_num = $o_dm->getTableNum($pm_table_name_or_num); if (!$pm_table_name_or_num) { return null; } $t_instance = $o_dm->getInstanceByTableNum($pm_table_name_or_num, true); $va_search_settings = $o_indexing_config->getAssoc($o_dm->getTableName($pm_table_name_or_num)); $vs_primary_table = $t_instance->tableName(); $vs_table_display_name = $t_instance->getProperty('NAME_PLURAL'); $va_available_bundles = array(); // Full-text $vs_bundle = "_fulltext"; if (!(is_array($pa_filter) && sizeof($pa_filter) && !in_array($vs_bundle, $pa_filter))) { $vs_label = _t('Full text'); $va_available_bundles[$vs_label][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'description' => $vs_description = _t('Searches on all content that has been indexed')); } // rewrite label filters to use label tables actually used in indexing config if (is_array($pa_filter)) { foreach ($pa_filter as $vn_i => $vs_filter) { $va_tmp = explode('.', $vs_filter); if (in_array($va_tmp[1], array('preferred_labels', 'nonpreferred_labels'))) { if ($t_filter_instance = $o_dm->getInstanceByTableName($va_tmp[0], true)) { $pa_filter[] = $t_filter_instance->getLabelTableName() . ($va_tmp[2] ? '.' . $va_tmp[2] : ''); } } } } // get fields foreach ($va_search_settings as $vs_table => $va_fields) { if (!is_array($va_fields['fields'])) { continue; } if ($vs_table == $vs_primary_table) { $va_element_codes = method_exists($t_instance, 'getApplicableElementCodes') ? $t_instance->getApplicableElementCodes(null, false, false) : array(); $va_field_list = array(); foreach ($va_fields['fields'] as $vs_field => $va_field_indexing_info) { if ($vs_field === '_metadata') { foreach ($va_element_codes as $vs_code) { $va_field_list[$vs_code] = array(); } } else { $va_field_list[$vs_field] = $va_field_indexing_info; } } foreach ($va_field_list as $vs_field => $va_field_indexing_info) { if (in_array('DONT_INCLUDE_IN_SEARCH_FORM', $va_field_indexing_info)) { continue; } if (is_array($pa_filter) && sizeof($pa_filter) && !in_array($vs_table . '.' . $vs_field, $pa_filter)) { continue; } if (!($va_field_info = $t_instance->getFieldInfo($vs_field))) { // is it an attribute? if (in_array($vs_field, $va_element_codes)) { $t_element = $t_instance->_getElementInstance($vs_field); if (!$t_element) { continue; } if (in_array($t_element->get('datatype'), array(15, 16))) { continue; } // skip file and media attributes - never searchable if (!$t_element->getSetting('canBeUsedInSearchForm')) { continue; } if (caGetBundleAccessLevel($vs_primary_table, $vs_field) == __CA_BUNDLE_ACCESS_NONE__) { continue; } $vs_bundle = $vs_table . '.' . $vs_field; $vs_label = $t_instance->getDisplayLabel($vs_bundle); $va_available_bundles[$vs_label][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'description' => $vs_description = $t_instance->getDisplayDescription($vs_bundle)); } } else { if (isset($va_field_info['DONT_USE_AS_BUNDLE']) && $va_field_info['DONT_USE_AS_BUNDLE']) { continue; } if (in_array($va_field_info['FIELD_TYPE'], array(FT_MEDIA, FT_FILE))) { continue; } $vs_bundle = $vs_table . '.' . $vs_field; $vs_label = $t_instance->getDisplayLabel($vs_bundle); $va_available_bundles[$vs_label][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'description' => $vs_description = $t_instance->getDisplayDescription($vs_bundle)); } } } else { // related table if ($o_config->get($vs_table . '_disable')) { continue; } $t_table = $o_dm->getInstanceByTableName($vs_table, true); if (method_exists($t_table, "getSubjectTableName") && ($vs_subject_table = $t_table->getSubjectTableName())) { if ($o_config->get($vs_subject_table . '_disable')) { continue; } } if (caGetBundleAccessLevel($vs_primary_table, $vs_subject_table) == __CA_BUNDLE_ACCESS_NONE__) { continue; } foreach ($va_fields['fields'] as $vs_field => $va_field_indexing_info) { if (in_array('DONT_INCLUDE_IN_SEARCH_FORM', $va_field_indexing_info)) { continue; } if (is_array($pa_filter) && sizeof($pa_filter) && !in_array($vs_table . '.' . $vs_field, $pa_filter)) { continue; } if ($va_field_info = $t_table->getFieldInfo($vs_field)) { if (isset($va_field_info['DONT_USE_AS_BUNDLE']) && $va_field_info['DONT_USE_AS_BUNDLE']) { continue; } $vs_bundle = $vs_table . '.' . $vs_field; $vs_related_table = caUcFirstUTF8Safe($t_table->getProperty('NAME_SINGULAR')); if (method_exists($t_table, 'getSubjectTableInstance')) { $t_subject = $t_table->getSubjectTableInstance(); $vs_related_table = caUcFirstUTF8Safe($t_subject->getProperty('NAME_SINGULAR')); } $vs_label = $t_instance->getDisplayLabel($vs_bundle); $va_available_bundles[$vs_label][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'description' => $vs_description = $t_instance->getDisplayDescription($vs_bundle)); } } } } // // access points // $va_access_points = isset($va_search_settings['_access_points']) && is_array($va_search_settings['_access_points']) ? $va_search_settings['_access_points'] : array(); foreach ($va_access_points as $vs_access_point => $va_access_point_info) { if (isset($va_access_point_info['options']) && is_array($va_access_point_info['options'])) { if (in_array('DONT_INCLUDE_IN_SEARCH_FORM', $va_access_point_info['options'])) { continue; } } if (is_array($pa_filter) && sizeof($pa_filter) && !in_array($vs_access_point, $pa_filter)) { continue; } $vs_label = isset($va_access_point_info['name']) && $va_access_point_info['name'] ? $va_access_point_info['name'] : $vs_access_point; $va_available_bundles[$vs_label][$vs_access_point] = array('bundle' => $vs_access_point, 'label' => $vs_label, 'description' => $vs_description = isset($va_access_point_info['description']) && $va_access_point_info['description'] ? $va_access_point_info['description'] : ''); } // // created and modified // foreach (array('created', 'modified') as $vs_bundle) { if (is_array($pa_filter) && sizeof($pa_filter) && !in_array($vs_bundle, $pa_filter)) { continue; } $vs_label = $t_instance->getDisplayLabel($vs_bundle); $va_available_bundles[$vs_label][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'description' => $vs_description = $t_instance->getDisplayDescription($vs_bundle)); } ksort($va_available_bundles); $va_sorted_bundles = array(); foreach ($va_available_bundles as $vs_k => $va_val) { foreach ($va_val as $vs_real_key => $va_info) { if ($pb_for_select) { $va_sorted_bundles[$va_info['label']] = $vs_real_key; } else { $va_sorted_bundles[$vs_real_key] = $va_info; } } } // rewrite bundles to used preferred_labels notation if ($pb_for_select) { foreach ($va_sorted_bundles as $vs_label => $vs_key) { $va_tmp = explode('.', $vs_key); if (preg_match('!_labels$!', $va_tmp[0])) { if (($t_label_instance = $o_dm->getInstanceByTableName($va_tmp[0], true)) && is_a($t_label_instance, 'BaseLabel')) { $va_sorted_bundles[$vs_label] = $t_label_instance->getSubjectTableName() . '.preferred_labels' . ($va_tmp[1] ? '.' . $va_tmp[1] : ''); } } } } return $va_sorted_bundles; }
/** * Insert activity menu */ public function hookRenderMenuBar($pa_menu_bar) { if ($o_req = $this->getRequest()) { $o_dm = Datamodel::load(); $va_activity_lists = array(); foreach (array('ca_objects', 'ca_object_lots', 'ca_entities', 'ca_places', 'ca_occurrences', 'ca_collections', 'ca_storage_locations', 'ca_loans', 'ca_movements', 'ca_list_items', 'ca_sets', 'ca_tours', 'ca_tour_stops') as $vs_table_name) { $va_activity_menu_list = array(); if (!is_array($va_activity_list = $o_req->session->getVar($vs_table_name . '_duplicate_id_list'))) { $va_activity_list = array(); } if (sizeof($va_activity_list) == 0) { continue; } $t_instance = $o_dm->getInstanceByTableName($vs_table_name, true); $va_labels = $t_instance->getPreferredDisplayLabelsForIDs(array_keys($va_activity_list)); if ($vs_table_name === 'ca_occurrences') { $vs_priv_name = 'can_duplicate_ca_occurrences'; // Output occurrences grouped by type with types as top-level menu items $va_types = $t_instance->getTypeList(); $va_editor_url_info = caEditorUrl($o_req, $vs_table_name, null, true); // sort occurrences by type $va_sorted_by_type_id = array(); $va_keys = array_reverse(array_keys($va_activity_list)); foreach ($va_keys as $vn_id) { $va_info = $va_activity_list[$vn_id]; $va_sorted_by_type_id[$va_info['type_id']][$vn_id] = $va_info; } foreach ($va_types as $vn_type_id => $va_type_info) { $va_activity_menu_list = array(); if (isset($va_sorted_by_type_id[$vn_type_id]) && is_array($va_sorted_by_type_id[$vn_type_id])) { foreach ($va_sorted_by_type_id[$vn_type_id] as $vn_id => $va_info) { $va_activity_menu_list[$vs_table_name . '_' . $vn_type_id . '_' . $vn_id] = array('default' => $va_editor_url_info, 'displayName' => htmlspecialchars($va_labels[$vn_id], ENT_QUOTES, 'UTF-8') . (trim($va_info['idno']) ? ' [' . $va_info['idno'] . ']' : ''), 'is_enabled' => 1, 'requires' => array('action:' . $vs_priv_name => 'OR'), 'parameters' => array($va_editor_url_info['_pk'] => $vn_id, 'mode' => 'dupe')); } } if (sizeof($va_activity_menu_list) > 0) { $va_activity_lists[$vs_table_name . '_' . $vn_type_id] = array('displayName' => mb_strtolower(caUcFirstUTF8Safe($va_type_info['name_singular']), 'UTF-8'), 'submenu' => array("type" => 'static', 'navigation' => $va_activity_menu_list)); } } } else { // Non-occurrences get grouped by their table switch ($vs_table_name) { case 'ca_list_items': $vs_priv_name = 'can_duplicate_ca_lists'; break; case 'ca_object_representations': $vs_priv_name = 'can_duplicate_ca_objects'; break; default: $vs_priv_name = 'can_duplicate_' . $vs_table_name; break; } $va_keys = array_reverse(array_keys($va_activity_list)); foreach ($va_keys as $vn_id) { $va_info = $va_activity_list[$vn_id]; $va_editor_url_info = caEditorUrl($o_req, $vs_table_name, null, true); $va_activity_menu_list[$vs_table_name . '_' . $vn_id] = array('default' => $va_editor_url_info, 'displayName' => htmlspecialchars($va_labels[$vn_id], ENT_QUOTES, 'UTF-8') . (trim($va_info['idno']) ? ' [' . $va_info['idno'] . ']' : ''), 'is_enabled' => 1, 'requires' => array('action:' . $vs_priv_name => 'OR'), 'parameters' => array($va_editor_url_info['_pk'] => $vn_id, 'mode' => 'dupe')); } $va_activity_lists[$vs_table_name] = array('displayName' => mb_strtolower(caUcFirstUTF8Safe($t_instance->getProperty('NAME_SINGULAR')), 'UTF-8'), 'navigation' => $va_activity_menu_list); } } if (sizeof($va_activity_lists)) { // only show duplicate menu if there are records used to create duplicates $pa_menu_bar['New']['navigation']['spacer'] = array('is_enabled' => 0, 'displayName' => "<div class='sf-spacer'/><!-- empty --></div>", 'default' => null); // Add duplicate menu to bottom of "New" menu $pa_menu_bar['New']['navigation']['duplicate'] = array('default' => $va_editor_url_info, 'is_enabled' => 1, 'displayName' => _t('Duplicate from...'), 'submenu' => array("type" => 'static', 'navigation' => $va_activity_lists)); } } return $pa_menu_bar; }
/** * Returns list of placements in the currently loaded display * * @param array $pa_options Optional array of options. Supported options are: * noCache = if set to true, no caching of placement values is performed. * no_tooltips = if set no tooltips for available bundles will be emitted. Default is false - tooltips will be emitted. * format = specifies label format for bundles. Valid values are "simple" (just the name of the element) or "full" (name of element, name of type of item element pertains to and alternate label, if defined). Default is "full" * user_id = if specified then placements are only returned if the user has at least read access to the display * @return array List of placements. Each element in the list is an array with the following keys: * display = A display label for the bundle * bundle = The bundle name */ public function getPlacementsInDisplay($pa_options = null) { if (!is_array($pa_options)) { $pa_options = array(); } $pb_no_cache = caGetOption('noCache', $pa_options, false); $pn_user_id = caGetOption('user_id', $pa_options, null); if ($pn_user_id && !$this->haveAccessToDisplay($pn_user_id, __CA_BUNDLE_DISPLAY_READ_ACCESS__)) { return array(); } $vb_show_tooltips = !caGetOption('no_tooltips', $pa_options, false); $vs_format = caGetOption('format', $pa_options, 'full', array('validValues' => array('simple', 'full'))); if (!($pn_table_num = $this->getAppDatamodel()->getTableNum($this->get('table_num')))) { return null; } if (!($t_instance = $this->getAppDatamodel()->getInstanceByTableNum($pn_table_num, true))) { return null; } if (!is_array($va_placements = $this->getPlacements($pa_options))) { $va_placements = array(); } $va_placements_in_display = array(); foreach ($va_placements as $vn_placement_id => $va_placement) { $vs_label = ($vs_label = $t_instance->getDisplayLabel($va_placement['bundle_name'])) ? $vs_label : $va_placement['bundle_name']; if (is_array($va_placement['settings']) && is_array($va_placement['settings']['label'])) { $va_tmp = caExtractValuesByUserLocale(array($va_placement['settings']['label'])); if ($vs_user_set_label = array_shift($va_tmp)) { $vs_label = "{$vs_label} (<em>{$vs_user_set_label}</em>)"; } } $vs_display = "<div id='bundleDisplayEditor_{$vn_placement_id}'><span class='bundleDisplayEditorPlacementListItemTitle'>" . caUcFirstUTF8Safe($t_instance->getProperty('NAME_SINGULAR')) . "</span> {$vs_label}</div>"; $va_placement['display'] = $vs_format == 'simple' ? $vs_label : $vs_display; $va_placement['bundle'] = $va_placement['bundle_name']; // we used 'bundle' in the arrays, but the database field is called 'bundle_name' and getPlacements() returns data directly from the database unset($va_placement['bundle_name']); $va_placements_in_display[$vn_placement_id] = $va_placement; $vs_description = $t_instance->getDisplayDescription($va_placement['bundle']); if ($vb_show_tooltips) { TooltipManager::add("#bundleDisplayEditor_{$vn_placement_id}", $this->_formatBundleTooltip($vs_label, $va_placement['bundle'], $vs_description)); } } return $va_placements_in_display; }
* CollectiveAccess is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTIES whatsoever, including any implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * This source code is free and modifiable under the terms of * GNU General Public License. (http://www.gnu.org/copyleft/gpl.html). See * the "license.txt" file for details, or visit the CollectiveAccess web site at * http://www.CollectiveAccess.org * * ---------------------------------------------------------------------- */ $va_browse_types = caGetBrowseTypes(); if (sizeof($va_browse_types)) { ?> <li class="dropdown" style="position:relative;"><a href="#" class="dropdown-toggle mainhead top" data-toggle="dropdown"><?php print _t("Browse"); ?> <b class="caret"></b></a> <ul class="dropdown-menu"> <?php if (sizeof($va_browse_types) > 1) { foreach ($va_browse_types as $vs_browse_name => $va_browse_type) { print "<li>" . caNavLink($this->request, caUcFirstUTF8Safe($vs_browse_name), '', '', 'Browse', $vs_browse_name, '') . "</li>"; } } ?> </ul> </li> <?php }
<?php } ?> <a name='Site'></a> <div class='blockTitle siteSearchDisplay'>Site</div> <div class='blockResults siteSearchDisplay' style='height:auto;'> <div id="siteSearchResults"> </div> </div> <?php if ($vn_result_count == 0) { print "<div id='noResultsMsg'><H2>" . _t("Your search for %1 returned no results", caUcFirstUTF8Safe($this->getVar('search'))) . "</H2></div>"; } ?> </div> <script type="text/javascript"> jQuery("#noResultsMsg").css( "display", "none"); jQuery(".siteSearchDisplay").css( "display", "none"); jQuery(document).ready(function() { // grab search results jQuery.getJSON("http://<?php print $_SERVER['HTTP_HOST']; ?> /services/search/search_node/retrieve.json", <?php print json_encode(array('keys' => $this->getVar('search'))); ?>
?> AuthorityReferenceTabs" class="authorityReferenceListContainer"> <ul> <?php foreach ($va_references as $vn_table_num => $va_rows) { if ($t_ref_instance = $t_instance->getAppDatamodel()->getInstance($vn_table_num, true)) { $vs_ref_table_name = $t_ref_instance->tableName(); ?> <li><a href="#<?php print $vs_id_prefix; ?> AuthorityReferenceTabs-<?php print $vs_ref_table_name; ?> "><span><?php print _t('%1 (%2)', caUcFirstUTF8Safe($t_ref_instance->getProperty('NAME_PLURAL')), sizeof($va_rows)); ?> </span></a></li> <?php } } ?> </ul> <?php foreach ($va_references as $vn_table_num => $va_rows) { if ($t_ref_instance = $t_instance->getAppDatamodel()->getInstance($vn_table_num, true)) { $vs_ref_table_name = $t_ref_instance->tableName(); ?> <div id="<?php print $vs_id_prefix; ?>
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * This source code is free and modifiable under the terms of * GNU General Public License. (http://www.gnu.org/copyleft/gpl.html). See * the "license.txt" file for details, or visit the CollectiveAccess web site at * http://www.CollectiveAccess.org * * ---------------------------------------------------------------------- */ global $g_ui_locale_id; $t_subject = $this->getVar('t_subject'); $vn_subject_id = $this->getVar('subject_id'); $va_restrict_to_types = $this->getVar('restrict_to_types'); $vs_field_name_prefix = $this->getVar('field_name_prefix'); $vs_n = $this->getVar('n'); $vs_q = caUcFirstUTF8Safe($this->getVar('q'), true); $vb_can_edit = $t_subject->isSaveable($this->request); $vs_form_name = "StorageLocationQuickAddForm"; ?> <form action="#" name="<?php print $vs_form_name; ?> " method="POST" enctype="multipart/form-data" id="<?php print $vs_form_name . $vs_field_name_prefix . $vs_n; ?> "> <div class='dialogHeader quickAddDialogHeader'><?php print "<div class='quickAddTypeList'>" . _t('Quick Add %1', $t_subject->getTypeListAsHTMLFormElement('change_type_id', array('id' => "{$vs_form_name}TypeID{$vs_field_name_prefix}{$vs_n}", 'onchange' => "caSwitchTypeQuickAddForm{$vs_field_name_prefix}{$vs_n}();"), array('value' => $t_subject->get('type_id'), 'restrictToTypes' => $va_restrict_to_types))) . "</div>"; if ($vb_can_edit) { print "<div style='float: right;'>" . caJSButton($this->request, __CA_NAV_BUTTON_ADD__, _t("Add %1", $t_subject->getProperty('NAME_SINGULAR')), "{$vs_form_name}{$vs_field_name_prefix}{$vs_n}", array("onclick" => "caSave{$vs_form_name}{$vs_field_name_prefix}{$vs_n}(event);")) . ' ' . caJSButton($this->request, __CA_NAV_BUTTON_CANCEL__, _t("Cancel"), "{$vs_form_name}{$vs_field_name_prefix}{$vs_n}", array("onclick" => "jQuery(\"#{$vs_form_name}{$vs_field_name_prefix}{$vs_n}\").parent().data(\"panel\").hidePanel();")) . "</div><br style='clear: both;'/>\n";
/** * Returns all available search form placements - those data bundles that can be searches for the given content type, in other words. * The returned value is a list of arrays; each array contains a 'bundle' specifier than can be passed got Model::get() or SearchResult::get() and a display name * * @param mixed $pm_table_name_or_num The table name or number specifying the content type to fetch bundles for. If omitted the content table of the currently loaded search form will be used. * @return array And array of bundles keyed on display label. Each value is an array with these keys: * bundle = The bundle name (eg. ca_objects.idno) * display = Display label for each available bundle * description = Description of bundle * * Will return null if table name or number is invalid. */ public function getAvailableBundles($pm_table_name_or_num = null, $pa_options = null) { if (!$pm_table_name_or_num) { $pm_table_name_or_num = $this->get('table_num'); } $pm_table_name_or_num = $this->_DATAMODEL->getTableNum($pm_table_name_or_num); if (!$pm_table_name_or_num) { return null; } $t_instance = $this->_DATAMODEL->getInstanceByTableNum($pm_table_name_or_num, true); $va_search_settings = $this->opo_search_indexing_config->getAssoc($this->_DATAMODEL->getTableName($pm_table_name_or_num)); $vs_primary_table = $t_instance->tableName(); $vs_table_display_name = $t_instance->getProperty('NAME_PLURAL'); $t_placement = new ca_search_form_placements(null, array()); $va_available_bundles = array(); $va_additional_settings = array('width' => array('formatType' => FT_TEXT, 'displayType' => DT_FIELD, 'width' => 4, 'height' => 1, 'takesLocale' => false, 'default' => "100px", 'label' => _t('Width'), 'description' => _t('Width, in characters, of search form elements.'))); $t_placement->setSettingDefinitionsForPlacement($va_additional_settings); // Full-text $vs_bundle = "_fulltext"; $vs_display = "<div id='searchFormEditor__fulltext'><span class='bundleDisplayEditorPlacementListItemTitle'>" . _t("General") . '</span> ' . ($vs_label = _t('Full text')) . "</div>"; $va_available_bundles[strip_tags($vs_display)][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'display' => $vs_display, 'description' => $vs_description = _t('Searches on all content that has been indexed'), 'settingsForm' => $t_placement->getHTMLSettingForm(array('id' => $vs_bundle . '_0')), 'settings' => $va_additional_settings); TooltipManager::add("#searchFormEditor__fulltext", "<h2>{$vs_label}</h2>{$vs_description}"); // get fields foreach ($va_search_settings as $vs_table => $va_fields) { if (!is_array($va_fields['fields'])) { continue; } if ($vs_table == $vs_primary_table) { $va_element_codes = method_exists($t_instance, 'getApplicableElementCodes') ? $t_instance->getApplicableElementCodes(null, false, false) : array(); $va_field_list = array(); foreach ($va_fields['fields'] as $vs_field => $va_field_indexing_info) { if ($vs_field === '_metadata') { foreach ($va_element_codes as $vs_code) { $va_field_list[$vs_code] = array(); } } else { $va_field_list[$vs_field] = $va_field_indexing_info; } } foreach ($va_field_list as $vs_field => $va_field_indexing_info) { if (in_array('DONT_INCLUDE_IN_SEARCH_FORM', $va_field_indexing_info)) { continue; } if (!($va_field_info = $t_instance->getFieldInfo($vs_field))) { // is it an attribute? if (in_array($vs_field, $va_element_codes)) { $t_element = $this->_getElementInstance($vs_field); if (!$t_element) { continue; } if (in_array($t_element->get('datatype'), array(15, 16))) { continue; } // skip file and media attributes - never searchable if (!$t_element->getSetting('canBeUsedInSearchForm')) { continue; } if (caGetBundleAccessLevel($vs_primary_table, $vs_field) == __CA_BUNDLE_ACCESS_NONE__) { continue; } $vs_bundle = $vs_table . '.' . $vs_field; $vs_display = "<div id='searchFormEditor_{$vs_table}_{$vs_field}'><span class='bundleDisplayEditorPlacementListItemTitle'>" . caUcFirstUTF8Safe($t_instance->getProperty('NAME_SINGULAR')) . "</span> " . ($vs_label = $t_instance->getDisplayLabel($vs_bundle)) . "</div>"; $va_available_bundles[strip_tags($vs_display)][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'display' => $vs_display, 'description' => $vs_description = $t_instance->getDisplayDescription($vs_bundle), 'settingsForm' => $t_placement->getHTMLSettingForm(array('id' => $vs_bundle . '_0')), 'settings' => $va_additional_settings); TooltipManager::add("#searchFormEditor_{$vs_table}_{$vs_field}", "<h2>{$vs_label}</h2>{$vs_description}"); } } else { if (isset($va_field_info['DONT_USE_AS_BUNDLE']) && $va_field_info['DONT_USE_AS_BUNDLE']) { continue; } if (in_array($va_field_info['FIELD_TYPE'], array(FT_MEDIA, FT_FILE))) { continue; } $vs_bundle = $vs_table . '.' . $vs_field; $vs_display = "<div id='searchFormEditor_{$vs_table}_{$vs_field}'><span class='bundleDisplayEditorPlacementListItemTitle'>" . caUcFirstUTF8Safe($t_instance->getProperty('NAME_SINGULAR')) . "</span> " . ($vs_label = $t_instance->getDisplayLabel($vs_bundle)) . "</div>"; $va_available_bundles[strip_tags($vs_display)][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'display' => $vs_display, 'description' => $vs_description = $t_instance->getDisplayDescription($vs_bundle), 'settingsForm' => $t_placement->getHTMLSettingForm(array('id' => $vs_bundle . '_0')), 'settings' => $va_additional_settings); TooltipManager::add("#searchFormEditor_{$vs_table}_{$vs_field}", "<h2>{$vs_label}</h2>{$vs_description}"); } } } else { // related table if ($this->getAppConfig()->get($vs_table . '_disable')) { continue; } $t_table = $this->_DATAMODEL->getInstanceByTableName($vs_table, true); if (method_exists($t_table, "getSubjectTableName") && ($vs_subject_table = $t_table->getSubjectTableName())) { if ($this->getAppConfig()->get($vs_subject_table . '_disable')) { continue; } } if (caGetBundleAccessLevel($vs_primary_table, $vs_subject_table) == __CA_BUNDLE_ACCESS_NONE__) { continue; } foreach ($va_fields['fields'] as $vs_field => $va_field_indexing_info) { if (in_array('DONT_INCLUDE_IN_SEARCH_FORM', $va_field_indexing_info)) { continue; } if ($va_field_info = $t_table->getFieldInfo($vs_field)) { if (isset($va_field_info['DONT_USE_AS_BUNDLE']) && $va_field_info['DONT_USE_AS_BUNDLE']) { continue; } $vs_bundle = $vs_table . '.' . $vs_field; $vs_related_table = caUcFirstUTF8Safe($t_table->getProperty('NAME_SINGULAR')); if (method_exists($t_table, 'getSubjectTableInstance')) { $t_subject = $t_table->getSubjectTableInstance(); $vs_related_table = caUcFirstUTF8Safe($t_subject->getProperty('NAME_SINGULAR')); } $vs_label = $t_instance->getDisplayLabel($vs_bundle); if (method_exists($t_table, "getSubjectTableName") && $vs_primary_table == $vs_subject_table) { $vs_display = "<div id='searchFormEditor_{$vs_table}_{$vs_field}'><span class='bundleDisplayEditorPlacementListItemTitle'>" . caUcFirstUTF8Safe($t_subject->getProperty('NAME_SINGULAR')) . "</span> {$vs_label}</div>"; } else { $vs_display = "<div id='searchFormEditor_{$vs_table}_{$vs_field}'><span class='bundleDisplayEditorPlacementListItemTitle'>{$vs_related_table}</span> {$vs_label}</div>"; } $va_available_bundles[strip_tags($vs_display)][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'display' => $vs_display, 'description' => $vs_description = $t_instance->getDisplayDescription($vs_bundle), 'settingsForm' => $t_placement->getHTMLSettingForm(array('id' => $vs_bundle . '_0')), 'settings' => $va_additional_settings); TooltipManager::add("#searchFormEditor_{$vs_table}_{$vs_field}", "<h2>{$vs_label}</h2>{$vs_description}"); } } } } // // access points // $va_access_points = isset($va_search_settings['_access_points']) && is_array($va_search_settings['_access_points']) ? $va_search_settings['_access_points'] : array(); //unset($va_search_settings['_access_points']); foreach ($va_access_points as $vs_access_point => $va_access_point_info) { if (isset($va_access_point_info['options']) && is_array($va_access_point_info['options'])) { if (in_array('DONT_INCLUDE_IN_SEARCH_FORM', $va_access_point_info['options'])) { continue; } } $vs_display = "<div id='searchFormEditor_{$vs_access_point}'><span class='bundleDisplayEditorPlacementListItemTitle'>" . _t('Access point') . '</span> ' . ($vs_label = isset($va_access_point_info['name']) && $va_access_point_info['name'] ? $va_access_point_info['name'] : $vs_access_point) . "</div>"; $va_available_bundles[strip_tags($vs_display)][$vs_access_point] = array('bundle' => $vs_access_point, 'label' => $vs_label, 'display' => $vs_display, 'description' => $vs_description = isset($va_access_point_info['description']) && $va_access_point_info['description'] ? $va_access_point_info['description'] : '', 'settingsForm' => $t_placement->getHTMLSettingForm(array('id' => $vs_access_point . '_0')), 'settings' => $va_additional_settings); TooltipManager::add("#searchFormEditor_{$vs_access_point}", "<h2>{$vs_label}</h2>{$vs_description}"); } // // created and modified // $t_placement->setSettingDefinitionsForPlacement($va_additional_settings); foreach (array('created', 'modified') as $vs_bundle) { $vs_display = "<div id='searchFormEditor_{$vs_bundle}'><span class='bundleDisplayEditorPlacementListItemTitle'>" . _t('General') . "</span> " . ($vs_label = $t_instance->getDisplayLabel($vs_bundle)) . "</div>"; $va_available_bundles[strip_tags($vs_display)][$vs_bundle] = array('bundle' => $vs_bundle, 'label' => $vs_label, 'display' => $vs_display, 'description' => $vs_description = $t_instance->getDisplayDescription($vs_bundle), 'settingsForm' => $t_placement->getHTMLSettingForm(array('id' => $vs_bundle . '_0')), 'settings' => $va_additional_settings); TooltipManager::add("#searchFormEditor_{$vs_bundle}", "<h2>{$vs_label}</h2>{$vs_description}"); } ksort($va_available_bundles); $va_sorted_bundles = array(); foreach ($va_available_bundles as $vs_k => $va_val) { foreach ($va_val as $vs_real_key => $va_info) { $va_sorted_bundles[$vs_real_key] = $va_info; } } return $va_sorted_bundles; }
public function Edit() { $t_role = $this->getRoleObject(); $t_screen = new ca_editor_ui_screens(); $o_dm = Datamodel::load(); $t_list = new ca_lists(); $va_role_vars = $t_role->get('vars'); $va_bundle_access_settings = $va_role_vars['bundle_access_settings']; $vn_default_bundle_access_level = (int) $this->request->config->get('default_bundle_access_level'); $va_bundle_list = $va_table_names = array(); foreach (ca_users::$s_bundlable_tables as $vs_table) { $t_instance = $o_dm->getInstanceByTableName($vs_table, true); $va_table_names[$vs_table] = caUcFirstUTF8Safe($t_instance->getProperty('NAME_PLURAL')); $va_available_bundles = $t_screen->getAvailableBundles($vs_table); foreach ($va_available_bundles as $vs_bundle_name => $va_bundle_info) { $vn_access = isset($va_bundle_access_settings[$vs_table . '.' . $vs_bundle_name]) ? $va_bundle_access_settings[$vs_table . '.' . $vs_bundle_name] : $vn_default_bundle_access_level; $va_bundle_list[$vs_table][$vs_bundle_name] = array('bundle_info' => $va_bundle_info, 'access' => $vn_access); } } $this->view->setVar('bundle_list', $va_bundle_list); $vn_default_type_access_level = (int) $this->request->config->get('default_type_access_level'); $va_type_list = array(); $va_type_access_settings = $va_role_vars['type_access_settings']; foreach (ca_users::$s_bundlable_tables as $vs_table) { $t_instance = $o_dm->getInstanceByTableName($vs_table, true); if (!($vs_list_code = $t_instance->getTypeListCode())) { continue; } $va_table_names[$vs_table] = caUcFirstUTF8Safe($t_instance->getProperty('NAME_PLURAL')); $va_types = $t_list->getListItemsAsHierarchy($vs_list_code, array('additionalTableToJoin' => 'ca_list_item_labels')); if (is_array($va_types)) { foreach ($va_types as $vn_i => $va_type_info) { $vn_item_id = $va_type_info['NODE']['item_id']; $vn_access = isset($va_type_access_settings[$vs_table . '.' . $vn_item_id]) ? $va_type_access_settings[$vs_table . '.' . $vn_item_id] : $vn_default_type_access_level; $va_type_info['NODE']['level'] = $va_type_info['LEVEL']; $va_type_list[$vs_table][$vn_item_id] = array('type_info' => $va_type_info['NODE'], 'access' => $vn_access); } } } $vn_default_source_access_level = (int) $this->request->config->get('default_source_access_level'); $va_source_list = array(); $va_source_access_settings = $va_role_vars['source_access_settings']; foreach (ca_users::$s_bundlable_tables as $vs_table) { $t_instance = $o_dm->getInstanceByTableName($vs_table, true); if (!($vs_list_code = $t_instance->getSourceListCode())) { continue; } $va_table_names[$vs_table] = caUcFirstUTF8Safe($t_instance->getProperty('NAME_PLURAL')); $va_sources = $t_list->getListItemsAsHierarchy($vs_list_code, array('additionalTableToJoin' => 'ca_list_item_labels')); if (is_array($va_sources)) { foreach ($va_sources as $vn_i => $va_source_info) { $vn_item_id = $va_source_info['NODE']['item_id']; $vn_access = isset($va_source_access_settings[$vs_table . '.' . $vn_item_id]) ? $va_source_access_settings[$vs_table . '.' . $vn_item_id] : $vn_default_source_access_level; $va_source_info['NODE']['level'] = $va_source_info['LEVEL']; $va_source_list[$vs_table][$vn_item_id] = array('source_info' => $va_source_info['NODE'], 'access' => $vn_access, 'default' => $vn_item_id == $va_source_access_settings[$vs_table . '_default_id']); } } } $va_access_status_list = array(); if (is_array($va_access_statuses = $t_list->getListItemsAsHierarchy('access_statuses', array('additionalTableToJoin' => 'ca_list_item_labels')))) { $va_access_status_settings = $va_role_vars['access_status_settings']; foreach ($va_access_statuses as $vn_i => $va_access_status_info) { if (!$va_access_status_info['NODE']['parent_id']) { continue; } $vn_item_id = $va_access_status_info['NODE']['item_id']; $va_access_status_info['NODE']['level'] = $va_access_status_info['LEVEL']; $vn_access = isset($va_access_status_settings[$vn_item_id]) ? $va_access_status_settings[$vn_item_id] : null; $va_access_status_list[$vn_item_id] = array('access_status_info' => $va_access_status_info['NODE'], 'access' => $vn_access); } } $this->view->setVar('type_list', $va_type_list); $this->view->setVar('source_list', $va_source_list); $this->view->setVar('access_status_list', $va_access_status_list); $this->view->setVar('table_display_names', $va_table_names); $this->render('role_edit_html.php'); }
/** * Insert activity menu */ public function hookRenderMenuBar($pa_menu_bar) { if ($o_req = $this->getRequest()) { $o_dm = Datamodel::load(); $va_activity_lists = array(); if ($this->opo_config instanceof Configuration) { $va_menu_item_names = $this->opo_config->getAssoc('menuItemNames'); } foreach (array('ca_objects', 'ca_object_lots', 'ca_entities', 'ca_places', 'ca_occurrences', 'ca_collections', 'ca_storage_locations', 'ca_loans', 'ca_movements', 'ca_list_items', 'ca_sets', 'ca_tours', 'ca_tour_stops') as $vs_table_name) { $va_activity_menu_list = array(); if (!is_array($va_activity_list = $o_req->session->getVar($vs_table_name . '_history_id_list'))) { $va_activity_list = array(); } if (sizeof($va_activity_list) == 0) { continue; } $t_instance = $o_dm->getInstanceByTableName($vs_table_name, true); $va_labels = $t_instance->getPreferredDisplayLabelsForIDs(array_keys($va_activity_list)); if ($vs_table_name === 'ca_occurrences') { $vs_priv_name = 'can_edit_ca_occurrences'; // Output occurrences grouped by type with types as top-level menu items $va_types = $t_instance->getTypeList(); $va_editor_url_info = caEditorUrl($o_req, $vs_table_name, null, true); // sort occurrences by type $va_sorted_by_type_id = array(); $va_keys = array_reverse(array_keys($va_activity_list)); foreach ($va_keys as $vn_id) { $va_info = $va_activity_list[$vn_id]; $va_sorted_by_type_id[$va_info['type_id']][$vn_id] = $va_info; } foreach ($va_types as $vn_type_id => $va_type_info) { $va_activity_menu_list = array(); if (isset($va_sorted_by_type_id[$vn_type_id]) && is_array($va_sorted_by_type_id[$vn_type_id])) { foreach ($va_sorted_by_type_id[$vn_type_id] as $vn_id => $va_info) { $va_activity_menu_list[$vs_table_name . '_' . $vn_type_id . '_' . $vn_id] = array('default' => $va_editor_url_info, 'displayName' => $va_labels[$vn_id] . (trim($va_info['idno']) ? ' [' . $va_info['idno'] . ']' : ''), 'is_enabled' => 1, 'requires' => array('action:' . $vs_priv_name => 'OR'), 'parameters' => array($va_editor_url_info['_pk'] => $vn_id)); } } if (sizeof($va_activity_menu_list) > 0) { $va_activity_lists[$vs_table_name . '_' . $vn_type_id] = array('displayName' => caUcFirstUTF8Safe($va_type_info['name_plural']), 'submenu' => array("type" => 'static', 'navigation' => $va_activity_menu_list)); } } } else { // Non-occurrences get grouped by their table switch ($vs_table_name) { case 'ca_list_items': $vs_priv_name = 'can_edit_ca_lists'; break; case 'ca_object_representations': $vs_priv_name = 'can_edit_ca_objects'; break; case 'ca_tour_stops': $vs_priv_name = 'can_edit_ca_tours'; break; case 'ca_sets': $vs_priv_name = 'can_edit_sets'; break; default: $vs_priv_name = 'can_edit_' . $vs_table_name; break; } $va_keys = array_reverse(array_keys($va_activity_list)); foreach ($va_keys as $vn_id) { $va_info = $va_activity_list[$vn_id]; $va_editor_url_info = caEditorUrl($o_req, $vs_table_name, null, true); $va_activity_menu_list[$vs_table_name . '_' . $vn_id] = array('default' => $va_editor_url_info, 'displayName' => $va_labels[$vn_id] . (trim($va_info['idno']) ? ' [' . $va_info['idno'] . ']' : ''), 'is_enabled' => 1, 'requires' => array('action:' . $vs_priv_name => 'OR'), 'parameters' => array($va_editor_url_info['_pk'] => $vn_id)); } if (is_array($va_menu_item_names) && isset($va_menu_item_names[$vs_table_name])) { $vs_display_name = $va_menu_item_names[$vs_table_name]; } else { $vs_display_name = caUcFirstUTF8Safe(_t($t_instance->getProperty('NAME_PLURAL'))); } $va_activity_lists[$vs_table_name] = array('displayName' => $vs_display_name, 'submenu' => array("type" => 'static', 'navigation' => $va_activity_menu_list)); } } if (sizeof($va_activity_lists)) { // only show history menu if there's some history... $va_activity_menu = array('displayName' => _t('History'), 'navigation' => $va_activity_lists); $pa_menu_bar['activity_menu'] = $va_activity_menu; } } return $pa_menu_bar; }