/** * */ public function getValuesForExport($pa_options = null) { $va_fields = $this->getFields(); $va_data = array(); $t_list = new ca_lists(); // get field values foreach ($va_fields as $vs_field) { $vs_value = $this->get($this->tableName() . '.' . $vs_field); // Convert list item_id's to idnos for export if ($vs_list_code = $this->getFieldInfo($vs_field, 'LIST_CODE')) { $va_item = $t_list->getItemFromListByItemID($vs_list_code, $vs_value); $vs_value = $va_item['idno']; } $va_data[$vs_field] = $vs_value; } return $va_data; }
/** * Get a record summary that is easier to parse when importing to another system */ private function getItemInfoForImport() { if (!($t_instance = $this->_getTableInstance($this->ops_table, $this->opn_id))) { return false; } $o_dm = Datamodel::load(); $t_list = new ca_lists(); $t_locales = new ca_locales(); // // Options // if (!($vs_delimiter = $this->opo_request->getParameter('delimiter', pString))) { $vs_delimiter = "; "; } if (!($vs_flatten = $this->opo_request->getParameter('flatten', pString))) { $vs_flatten = null; } $va_flatten = preg_split("![ ]*[;]+[ ]*!", $vs_flatten); $va_flatten = array_flip($va_flatten); $va_locales = $t_locales->getLocaleList(array("available_for_cataloguing_only" => true)); $va_return = array(); // allow user-defined template to be passed; allows flexible formatting of returned "display" value if (!($vs_template = $this->opo_request->getParameter('template', pString))) { $vs_template = ''; } if ($vs_template) { $va_return['display'] = caProcessTemplateForIDs($vs_template, $this->ops_table, array($this->opn_id)); } // "intrinsic" fields foreach ($t_instance->getFieldsArray() as $vs_field_name => $va_field_info) { $vs_list = null; if (!is_null($vs_val = $t_instance->get($vs_field_name))) { if (preg_match("/^hier\\_/", $vs_field_name)) { continue; } if (preg_match("/\\_sort\$/", $vs_field_name)) { continue; } if ($vs_field_name == $t_instance->primaryKey()) { continue; } if (isset($va_field_info["LIST_CODE"])) { // typical example: type_id $va_item = $t_list->getItemFromListByItemID($va_field_info["LIST_CODE"], $vs_val); if ($t_item = new ca_list_items($va_item["item_id"])) { $vs_val = $t_item->get('idno'); } } $va_return['intrinsic'][$vs_field_name] = $vs_val; } } // preferred labels $va_labels = $t_instance->get($this->ops_table . ".preferred_labels", array("returnAllLocales" => true)); $va_labels = end($va_labels); $vs_display_field_name = $t_instance->getLabelDisplayField(); if (is_array($va_labels)) { foreach ($va_labels as $vn_locale_id => $va_labels_by_locale) { foreach ($va_labels_by_locale as $va_tmp) { $va_label = array(); $va_label['locale'] = $va_locales[$vn_locale_id]["code"]; // add only UI fields to return foreach (array_merge($t_instance->getLabelUIFields(), array('type_id')) as $vs_label_fld) { $va_label[$vs_label_fld] = $va_tmp[$vs_label_fld]; } $va_label[$vs_label_fld] = $va_tmp[$vs_label_fld]; $va_label['label'] = $va_tmp[$vs_display_field_name]; $va_return["preferred_labels"][$va_label['locale']] = $va_label; } } if (isset($va_flatten['locales'])) { $va_return["preferred_labels"] = array_pop(caExtractValuesByUserLocale(array($va_return["preferred_labels"]))); } } // nonpreferred labels $va_labels = $t_instance->get($this->ops_table . ".nonpreferred_labels", array("returnAllLocales" => true)); $va_labels = end($va_labels); if (is_array($va_labels)) { foreach ($va_labels as $vn_locale_id => $va_labels_by_locale) { foreach ($va_labels_by_locale as $va_tmp) { $va_label = array(); $va_label['locale'] = $va_locales[$vn_locale_id]["code"]; // add only UI fields to return foreach (array_merge($t_instance->getLabelUIFields(), array('type_id')) as $vs_label_fld) { $va_label[$vs_label_fld] = $va_tmp[$vs_label_fld]; } $va_return["nonpreferred_labels"][$va_label['locale']] = $va_label; } } if (isset($va_flatten['locales'])) { $va_return["nonpreferred_labels"] = array_pop(caExtractValuesByUserLocale(array($va_return["nonpreferred_labels"]))); } } // attributes $va_codes = $t_instance->getApplicableElementCodes(); foreach ($va_codes as $vs_code) { if ($va_vals = $t_instance->get($this->ops_table . "." . $vs_code, array("convertCodesToDisplayText" => false, "returnAllLocales" => true))) { $va_vals_as_text = end($t_instance->get($this->ops_table . "." . $vs_code, array("convertCodesToDisplayText" => true, "returnAllLocales" => true))); $va_vals_by_locale = end($va_vals); foreach ($va_vals_by_locale as $vn_locale_id => $va_locale_vals) { foreach ($va_locale_vals as $vs_val_id => $va_actual_data) { if (!is_array($va_actual_data)) { continue; } $vs_locale_code = isset($va_locales[$vn_locale_id]["code"]) ? $va_locales[$vn_locale_id]["code"] : "none"; foreach ($va_actual_data as $vs_f => $vs_v) { if (isset($va_vals_as_text[$vn_locale_id][$vs_val_id][$vs_f]) && $vs_v != $va_vals_as_text[$vn_locale_id][$vs_val_id][$vs_f]) { $va_actual_data[$vs_f . '_display'] = $va_vals_as_text[$vn_locale_id][$vs_val_id][$vs_f]; if ($vs_item_idno = caGetListItemIdno($va_actual_data[$vs_f])) { $va_actual_data[$vs_f] = $vs_item_idno; } } } $va_return['attributes'][$vs_code][$vs_locale_code][] = array_merge(array('locale' => $vs_locale_code), $va_actual_data); } } } } if (isset($va_flatten['locales'])) { $va_return['attributes'] = caExtractValuesByUserLocale($va_return['attributes']); } // relationships // yes, not all combinations between these tables have // relationships but it also doesn't hurt to query foreach ($this->opa_valid_tables as $vs_rel_table) { $t_rel = $o_dm->getInstanceByTableName($vs_rel_table, true); // // set-related hacks if ($this->ops_table == "ca_sets" && $vs_rel_table == "ca_tours") { // throw SQL error in getRelatedItems continue; } $va_related_items = $t_instance->get($vs_rel_table, array("returnAsArray" => true, 'returnLocaleCodes' => true, 'groupFields' => true)); if ($this->ops_table == "ca_objects" && $vs_rel_table == "ca_object_representations") { $va_versions = $t_instance->getMediaVersions('media'); if (isset($va_flatten['all'])) { $va_reps = $t_instance->getRepresentations(array('original')); $va_urls = array(); foreach ($va_reps as $vn_i => $va_rep) { $va_urls[] = $va_rep['urls']['original']; } $va_return['representations'] = join($vs_delimiter, $va_urls); } else { $va_return['representations'] = $t_instance->getRepresentations($va_versions); } foreach ($va_return['representations'] as $vn_i => $va_rep) { unset($va_return['representations'][$vn_i]['media']); unset($va_return['representations'][$vn_i]['media_metadata']); } } if (is_array($va_related_items) && sizeof($va_related_items) > 0) { foreach ($va_related_items as $va_rel_item) { $va_item_add = array(); foreach ($va_rel_item as $vs_fld => $vs_val) { if (!is_array($vs_val) && strlen(trim($vs_val)) > 0) { // rewrite and ignore certain field names switch ($vs_fld) { case 'item_type_id': $va_item_add[$vs_fld] = $vs_val; $va_item_add['type_id'] = $vs_val; break; default: $va_item_add[$vs_fld] = $vs_val; break; } } else { if (in_array($vs_fld, array('preferred_labels', 'intrinsic'))) { $va_item_add[$vs_fld] = $vs_val; } } } if ($vs_rel_table == "ca_object_representations") { $t_rep = new ca_object_representations($va_rel_item['representation_id']); $va_item_add['media'] = $t_rep->getMediaUrl('media', 'original'); } $va_return["related"][$vs_rel_table][] = $va_item_add; } } } return $va_return; }
public function getRolesAsDOM() { $t_role = new ca_user_roles(); $t_list = new ca_lists(); $t_ui_screens = new ca_editor_ui_screens(); $vo_roles = $this->opo_dom->createElement("roles"); $qr_roles = $this->opo_db->query("SELECT * FROM ca_user_roles"); while ($qr_roles->nextRow()) { $t_role->load($qr_roles->get("role_id")); $vo_role = $this->opo_dom->createElement("role"); $vo_role->setAttribute("code", $this->makeIDNO($t_role->get("code"))); $vo_role->appendChild($this->opo_dom->createElement("name", $t_role->get("name"))); $vo_role->appendChild($this->opo_dom->createElement("description", $t_role->get("description"))); if (is_array($va_actions = $t_role->getRoleActions())) { $vo_actions = $this->opo_dom->createElement("actions"); foreach ($va_actions as $vs_action) { $vo_actions->appendChild($this->opo_dom->createElement("action", $vs_action)); } $vo_role->appendChild($vo_actions); } $va_vars = $t_role->get('vars'); // add bundle level ACL items if (is_array($va_vars['bundle_access_settings'])) { $vo_bundle_lvl_ac = $this->opo_dom->createElement("bundleLevelAccessControl"); foreach ($va_vars['bundle_access_settings'] as $vs_bundle => $vn_val) { $va_tmp = explode('.', $vs_bundle); $vs_table_name = $va_tmp[0]; $vs_bundle_name = $va_tmp[1]; if ($t_ui_screens->isAvailableBundle($vs_table_name, $vs_bundle_name)) { // only add this entry to the export if it's actually a valid bundle $vs_access = $this->_convertACLConstantToString(intval($vn_val)); $vo_permission = $this->opo_dom->createElement("permission"); $vo_bundle_lvl_ac->appendChild($vo_permission); $vo_permission->setAttribute('table', $vs_table_name); $vo_permission->setAttribute('bundle', $vs_bundle_name); $vo_permission->setAttribute('access', $vs_access); } } $vo_role->appendChild($vo_bundle_lvl_ac); } // add type level ACL items if (is_array($va_vars['type_access_settings'])) { $vo_type_lvl_ac = $this->opo_dom->createElement("typeLevelAccessControl"); foreach ($va_vars['type_access_settings'] as $vs_id => $vn_val) { $va_tmp = explode('.', $vs_id); $vs_table_name = $va_tmp[0]; $vn_type_id = $va_tmp[1]; $vs_access = $this->_convertACLConstantToString(intval($vn_val)); /** @var BaseModelWithAttributes $t_instance */ $t_instance = $this->opo_dm->getInstanceByTableName($vs_table_name, true); if (!($vs_list_code = $t_instance->getTypeListCode())) { continue; } $va_item = $t_list->getItemFromListByItemID($vs_list_code, $vn_type_id); if (!isset($va_item['idno'])) { continue; } $vo_permission = $this->opo_dom->createElement("permission"); $vo_type_lvl_ac->appendChild($vo_permission); $vo_permission->setAttribute('table', $vs_table_name); $vo_permission->setAttribute('type', $va_item['idno']); $vo_permission->setAttribute('access', $vs_access); } $vo_role->appendChild($vo_type_lvl_ac); } $vo_roles->appendChild($vo_role); } return $vo_roles; }
/** * */ public function getValuesForExport($pa_options = null) { $va_codes = $this->getApplicableElementCodes(); $va_data = parent::getValuesForExport($pa_options); // get intrinsics $t_locale = new ca_locales(); $t_list = new ca_lists(); // get attributes foreach ($va_codes as $vs_code) { if ($va_v = $this->get($this->tableName() . '.' . $vs_code, array('returnWithStructure' => true, 'returnAllLocales' => true, 'returnAsArray' => true, 'return' => 'url', 'version' => 'original'))) { foreach ($va_v as $vn_id => $va_v_by_locale) { foreach ($va_v_by_locale as $vn_locale_id => $va_v_list) { if (!is_array($va_v_list)) { continue; } if (!($vs_locale = $t_locale->localeIDToCode($vn_locale_id))) { $vs_locale = 'NONE'; } $vn_i = 0; foreach ($va_v_list as $vn_index => $va_values) { if (is_array($va_values)) { foreach ($va_values as $vs_sub_code => $vs_value) { if (!$vs_sub_code) { continue; } if (!($t_element = $this->_getElementInstance($vs_sub_code))) { continue; } switch ((int) $t_element->get('datatype')) { case 3: // list $va_list_item = $t_list->getItemFromListByItemID($t_element->get('list_id'), $vs_value); $vs_value = $vs_value . ":" . $va_list_item['idno']; break; } $va_data['ca_attribute_' . $vs_code][$vs_locale]['value_' . $vn_i][$vs_sub_code] = $vs_value; } $vn_i++; } else { $va_data['ca_attribute_' . $vs_code][$vs_locale]['value_' . $vn_i][$vs_code] = $va_values; } } } } } } return $va_data; }
private function getRelationshipTypesForParentAsDOM($pn_parent_id) { $t_list = new ca_lists(); $vo_types = $this->opo_dom->createElement("types"); $qr_types = $this->opo_db->query("SELECT * FROM ca_relationship_types WHERE parent_id=?", $pn_parent_id); if (!$qr_types->numRows()) { return false; } while ($qr_types->nextRow()) { $vo_type = $this->opo_dom->createElement("type"); if (preg_match("/root\\_for\\_[0-9]{1,3}/", $qr_types->get("type_code"))) { // ignore legacy root records continue; } $vo_type->setAttribute("code", $this->makeIDNO($qr_types->get("type_code"))); $vo_type->setAttribute("default", $qr_types->get("is_default")); $vo_labels = $this->opo_dom->createElement("labels"); $qr_type_labels = $this->opo_db->query("SELECT * FROM ca_relationship_type_labels WHERE type_id=?", $qr_types->get("type_id")); while ($qr_type_labels->nextRow()) { $vo_label = $this->opo_dom->createElement("label"); $vo_label->setAttribute("locale", $this->opt_locale->localeIDToCode($qr_type_labels->get("locale_id"))); $vo_label->appendChild($this->opo_dom->createElement("typename", caEscapeForXML($qr_type_labels->get("typename")))); $vo_label->appendChild($this->opo_dom->createElement("typename_reverse", caEscapeForXML($qr_type_labels->get("typename_reverse")))); $vo_labels->appendChild($vo_label); } $vo_type->appendChild($vo_labels); // restrictions (left side) $t_instance = $this->opo_dm->getInstanceByTableNum($qr_types->get("table_num")); if ($qr_types->get("sub_type_left_id")) { $vs_left_table = $t_instance->getLeftTableName(); $t_left_instance = $this->opo_dm->getInstanceByTableNum($vs_left_table); $vs_type_code = $t_left_instance->getTypeListCode(); $va_item = $t_list->getItemFromListByItemID($vs_type_code, $qr_types->get("sub_type_left_id")); $vo_type->appendChild($this->opo_dom->createElement("subTypeLeft", $va_item["idno"])); } // restrictions (right side) if ($qr_types->get("sub_type_right_id")) { $vs_right_table = $t_instance->getRightTableName(); $t_right_instance = $this->opo_dm->getInstanceByTableNum($vs_right_table); $vs_type_code = $t_right_instance->getTypeListCode(); $va_item = $t_list->getItemFromListByItemID($vs_type_code, $qr_types->get("sub_type_right_id")); $vo_type->appendChild($this->opo_dom->createElement("subTypeRight", $va_item["idno"])); } // subtypes if ($vo_subtypes = $this->getRelationshipTypesForParentAsDOM($qr_types->get("type_id"))) { $vo_types->appendChild($vo_subtypes); } $vo_types->appendChild($vo_type); } return $vo_types; }
/** * Try to return a generic summary for the specified record */ protected function getAllItemInfo() { if (!($t_instance = $this->_getTableInstance($this->ops_table, $this->opn_id))) { return false; } $t_list = new ca_lists(); $t_locales = new ca_locales(); $va_locales = $t_locales->getLocaleList(array("available_for_cataloguing_only" => true)); $va_return = array(); // labels $va_labels = $t_instance->get($this->ops_table . ".preferred_labels", array("returnAllLocales" => true)); $va_labels = end($va_labels); if (is_array($va_labels)) { foreach ($va_labels as $vn_locale_id => $va_labels_by_locale) { foreach ($va_labels_by_locale as $va_tmp) { $va_return["preferred_labels"][$va_locales[$vn_locale_id]["code"]][] = $va_tmp[$t_instance->getLabelDisplayField()]; } } } $va_labels = $t_instance->get($this->ops_table . ".nonpreferred_labels", array("returnAllLocales" => true)); $va_labels = end($va_labels); if (is_array($va_labels)) { foreach ($va_labels as $vn_locale_id => $va_labels_by_locale) { foreach ($va_labels_by_locale as $va_tmp) { $va_return["nonpreferred_labels"][$va_locales[$vn_locale_id]["code"]][] = $va_tmp[$t_instance->getLabelDisplayField()]; } } } // "intrinsic" fields foreach ($t_instance->getFieldsArray() as $vs_field_name => $va_field_info) { $vs_list = null; if (!is_null($vs_val = $t_instance->get($vs_field_name))) { $va_return[$vs_field_name] = array("value" => $vs_val); if (isset($va_field_info["LIST"])) { // fields like "access" and "status" $va_tmp = end($t_list->getItemFromListByItemValue($va_field_info["LIST"], $vs_val)); foreach ($va_locales as $vn_locale_id => $va_locale) { $va_return[$vs_field_name]["display_text"][$va_locale["code"]] = $va_tmp[$vn_locale_id]["name_singular"]; } } if (isset($va_field_info["LIST_CODE"])) { // typical example: type_id $va_item = $t_list->getItemFromListByItemID($va_field_info["LIST_CODE"], $vs_val); $t_item = new ca_list_items($va_item["item_id"]); $va_labels = $t_item->getLabels(null, __CA_LABEL_TYPE_PREFERRED__); foreach ($va_locales as $vn_locale_id => $va_locale) { if ($vs_label = $va_labels[$va_item["item_id"]][$vn_locale_id][0]["name_singular"]) { $va_return[$vs_field_name]["display_text"][$va_locale["code"]] = $vs_label; } } } } } // representations for objects if ($this->ops_table == "ca_objects") { $va_return['representations'] = $t_instance->getRepresentations(); } // attributes $va_codes = $t_instance->getApplicableElementCodes(); foreach ($va_codes as $vs_code) { if ($va_vals = $t_instance->get($this->ops_table . "." . $vs_code, array("convertCodesToDisplayText" => true, "returnAllLocales" => true))) { $va_vals_by_locale = end($va_vals); // I seriously have no idea what that additional level of nesting in the return format is for $va_attribute_values = array(); foreach ($va_vals_by_locale as $vn_locale_id => $va_locale_vals) { foreach ($va_locale_vals as $vs_val_id => $va_actual_data) { $vs_locale_code = isset($va_locales[$vn_locale_id]["code"]) ? $va_locales[$vn_locale_id]["code"] : "none"; $va_attribute_values[$vs_val_id][$vs_locale_code] = $va_actual_data; } $va_return[$this->ops_table . "." . $vs_code] = array_values($va_attribute_values); } } } // relationships // yes, not all combinations between these tables have // relationships but it also doesn't hurt to query foreach ($this->opa_valid_tables as $vs_rel_table) { // // set-related hacks if ($this->ops_table == "ca_sets" && $vs_rel_table == "ca_tours") { // throws SQL error in getRelatedItems continue; } // you'd expect the set items to be included for sets but // we don't wan't to list set items as allowed related table // which is why we add them by hand here if ($this->ops_table == "ca_sets") { $va_tmp = $t_instance->getItems(); $va_set_items = array(); foreach ($va_tmp as $va_loc) { foreach ($va_loc as $va_item) { $va_set_items[] = $va_item; } } $va_return["related"]["ca_set_items"] = $va_set_items; } // end set-related hacks // $va_related_items = $t_instance->get($vs_rel_table, array("returnAsArray" => true)); if ($this->ops_table == "ca_objects" && $vs_rel_table == "ca_object_representations") { $va_return['representations'] = $t_instance->getRepresentations(array('preview170', 'medium')); } if (is_array($va_related_items) && sizeof($va_related_items) > 0) { $va_return["related"][$vs_rel_table] = array_values($va_related_items); } } return $va_return; }