private function processMetadataElement($po_element, $pn_parent_id) { require_once __CA_MODELS_DIR__ . "/ca_metadata_elements.php"; require_once __CA_MODELS_DIR__ . "/ca_lists.php"; if (($vn_datatype = ca_metadata_elements::getAttributeTypeCode(self::getAttribute($po_element, "datatype"))) === false) { return false; // should not happen due to XSD restrictions, but just in case } $vs_element_code = self::getAttribute($po_element, "code"); $t_lists = new ca_lists(); if ($this->opb_updating) { $t_md_element = ca_metadata_elements::getInstance($vs_element_code) ? ca_metadata_elements::getInstance($vs_element_code) : new ca_metadata_elements(); } else { $t_md_element = new ca_metadata_elements(); } $t_md_element->setMode(ACCESS_WRITE); $t_md_element->set('element_code', $vs_element_code); $t_md_element->set('parent_id', $pn_parent_id); $t_md_element->set('documentation_url', (string) $po_element->documentationUrl); $t_md_element->set('datatype', $vn_datatype); $vs_list = self::getAttribute($po_element, "list"); if (isset($vs_list) && $vs_list && $t_lists->load(array('list_code' => $vs_list))) { $vn_list_id = $t_lists->getPrimaryKey(); } else { $vn_list_id = null; } $t_md_element->set('list_id', $vn_list_id); $this->_processSettings($t_md_element, $po_element->settings); if ($t_md_element->getPrimaryKey()) { $t_md_element->update(); } else { $t_md_element->insert(); } if ($t_md_element->numErrors()) { $this->addError("There was an error while inserting metadata element {$vs_element_code}: " . join(" ", $t_md_element->getErrors())); return false; } $vn_element_id = $t_md_element->getPrimaryKey(); // add element labels self::addLabelsFromXMLElement($t_md_element, $po_element->labels, $this->opa_locales); if ($po_element->elements) { foreach ($po_element->elements->children() as $vo_child) { $this->processMetadataElement($vo_child, $vn_element_id); } } return $vn_element_id; }