/** * */ public function getValuesForExport($pa_options = null) { $va_data = parent::getValuesForExport($pa_options); // get intrinsics and attributes $t_locale = new ca_locales(); $t_list = new ca_lists(); // get labels $va_preferred_labels = $this->get($this->tableName() . ".preferred_labels", array('returnAsArray' => true, 'returnAllLocales' => true)); if (is_array($va_preferred_labels) && sizeof($va_preferred_labels)) { $va_preferred_labels_for_export = array(); foreach ($va_preferred_labels as $vn_id => $va_labels_by_locale) { foreach ($va_labels_by_locale as $vn_locale_id => $va_labels) { if (!($vs_locale = $t_locale->localeIDToCode($vn_locale_id))) { $vs_locale = 'NONE'; } $va_preferred_labels_for_export[$vs_locale] = $va_labels[0]; unset($va_preferred_labels_for_export[$vs_locale]['form_element']); } } $va_data['preferred_labels'] = $va_preferred_labels_for_export; } $va_nonpreferred_labels = $this->get($this->tableName() . ".nonpreferred_labels", array('returnAsArray' => true, 'returnAllLocales' => true)); if (is_array($va_nonpreferred_labels) && sizeof($va_nonpreferred_labels)) { $va_nonpreferred_labels_for_export = array(); foreach ($va_nonpreferred_labels as $vn_id => $va_labels_by_locale) { foreach ($va_labels_by_locale as $vn_locale_id => $va_labels) { if (!($vs_locale = $t_locale->localeIDToCode($vn_locale_id))) { $vs_locale = 'NONE'; } $va_nonpreferred_labels_for_export[$vs_locale] = $va_labels; foreach ($va_nonpreferred_labels_for_export[$vs_locale] as $vn_i => $va_label) { unset($va_nonpreferred_labels_for_export[$vs_locale][$vn_i]['form_element']); } } } $va_data['nonpreferred_labels'] = $va_nonpreferred_labels_for_export; } return $va_data; }
/** * Returns list of metadata element codes applicable to the current row. If there is no loaded row and $pn_type_id * is not set then all attributes applicable to the model as a whole (regardless of type restrictions) are returned. * * Normally only top-level attribute codes are returned. This is good: in general you should only be dealing with attributes * via the top-level element. However, there are a few cases where you might need an inventory of *all* element codes that can * be attached to a model, even those that are part of an element hierarchy. Setting the $pb_include_sub_element_codes to true * will include sub-elements in the returned list. */ public function getApplicableElementCodes($pn_type_id = null, $pb_include_sub_element_codes = false, $pb_dont_cache = true) { if (!$pb_dont_cache && is_array($va_tmp = BaseModelWithAttributes::$s_applicable_element_code_cache[$this->tableNum() . '/' . $pn_type_id . '/' . ($pb_include_sub_element_codes ? 1 : 0)])) { return $va_tmp; } $vs_type_sql = ''; if (isset($this->ATTRIBUTE_TYPE_ID_FLD) && ($pn_type_id || ($pn_type_id = $this->get($this->ATTRIBUTE_TYPE_ID_FLD)) > 0)) { $va_ancestors = array(); if ($t_type_instance = $this->getTypeInstance()) { $va_ancestors = $t_type_instance->getHierarchyAncestors(null, array('idsOnly' => true, 'includeSelf' => true)); if (is_array($va_ancestors)) { array_pop($va_ancestors); } // remove hierarchy root } if (sizeof($va_ancestors) > 1) { $vs_type_sql = '((camtr.type_id = ' . intval($pn_type_id) . ') OR (camtr.type_id IS NULL) OR ((camtr.include_subtypes = 1) AND camtr.type_id IN (' . join(',', $va_ancestors) . '))) AND '; } else { $vs_type_sql = '((camtr.type_id = ' . intval($pn_type_id) . ') OR (camtr.type_id IS NULL)) AND '; } } elseif (is_subclass_of($this, "BaseRelationshipModel")) { if (!$pn_type_id) { $pn_type_id = self::get('type_id'); } if ($pn_type_id > 0) { $vs_type_sql = '((camtr.type_id = ' . intval($pn_type_id) . ') OR (camtr.type_id IS NULL)) AND '; } } $o_db = $this->getDb(); $qr_res = $o_db->query("\n \t\t\t\tSELECT camtr.element_id, came.element_code, cmel.name, cmel.description, cmel.locale_id\n \t\t\t\tFROM ca_metadata_type_restrictions camtr\n \t\t\t\tINNER JOIN ca_metadata_elements AS came ON camtr.element_id = came.element_id\n \t\t\t\tINNER JOIN ca_metadata_element_labels AS cmel ON cmel.element_id = came.element_id\n \t\t\t\tWHERE\n \t\t\t\t\t{$vs_type_sql} (camtr.table_num = ?) AND came.parent_id IS NULL\n \t\t\t", (int) $this->tableNum()); $va_codes = array(); $va_element_labels_by_locale = array(); while ($qr_res->nextRow()) { $vn_element_id = (int) $qr_res->get('element_id'); $vs_element_code = (string) $qr_res->get('element_code'); $vn_locale_id = (int) $qr_res->get('locale_id'); $va_element_labels_by_locale[$vn_element_id][$vn_locale_id] = $va_element_labels_by_locale[$vs_element_code][$vn_locale_id] = $qr_res->getRow(); if (isset($va_codes[$vn_element_id])) { continue; } $va_codes[$vn_element_id] = $vs_element_code; } if (!is_array(BaseModelWithAttributes::$s_element_label_cache)) { BaseModelWithAttributes::$s_element_label_cache = array(); } BaseModelWithAttributes::$s_element_label_cache += caExtractValuesByUserLocale($va_element_labels_by_locale); if ($pb_include_sub_element_codes && sizeof($va_codes)) { $qr_res = $o_db->query("\n\t\t\t\t\tSELECT came.element_id, came.element_code\n\t\t\t\t\tFROM ca_metadata_elements came\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tcame.hier_element_id IN (" . join(',', array_keys($va_codes)) . ")\n\t\t\t\t"); while ($qr_res->nextRow()) { $va_codes[$qr_res->get('element_id')] = $qr_res->get('element_code'); } } BaseModelWithAttributes::$s_applicable_element_code_cache[$this->tableNum() . '/' . $pn_type_id . '/' . ($pb_include_sub_element_codes ? 1 : 0)] = $va_codes; return $va_codes; }