public function feed_meta_fields() { $sxe = $this->get_sxml_structure(); foreach ($sxe->description->children() as $fname => $field) { $dom_struct = $this->get_dom_structure(); $xp_struct = $this->get_xpath_structure(); $fname = (string) $fname; $src = trim(isset($field['src']) ? str_replace('/rdf:RDF/rdf:Description/', '', $field['src']) : ''); $meta_id = isset($field['meta_id']) ? $field['meta_id'] : null; if (!is_null($meta_id)) { continue; } $nodes = $xp_struct->query('/record/description/' . $fname); if ($nodes->length > 0) { $nodes->item(0)->parentNode->removeChild($nodes->item(0)); } $this->saveStructure($dom_struct); $type = isset($field['type']) ? $field['type'] : 'string'; $type = in_array($type, [databox_field::TYPE_DATE, databox_field::TYPE_NUMBER, databox_field::TYPE_STRING, databox_field::TYPE_TEXT]) ? $type : databox_field::TYPE_STRING; $multi = isset($field['multi']) ? (bool) (string) $field['multi'] : false; $meta_struct_field = databox_field::create($this->app, $this, $fname, $multi); $meta_struct_field->set_readonly(isset($field['readonly']) ? (string) $field['readonly'] : 0)->set_indexable(isset($field['index']) ? (string) $field['index'] : '1')->set_separator(isset($field['separator']) ? (string) $field['separator'] : '')->set_required(isset($field['required']) && (string) $field['required'] == 1)->set_business(isset($field['business']) && (string) $field['business'] == 1)->set_type($type)->set_tbranch(isset($field['tbranch']) ? (string) $field['tbranch'] : '')->set_thumbtitle(isset($field['thumbtitle']) ? (string) $field['thumbtitle'] : (isset($field['thumbTitle']) ? $field['thumbTitle'] : '0'))->set_report(isset($field['report']) ? (string) $field['report'] : '1')->save(); try { $meta_struct_field->set_tag(\databox_field::loadClassFromTagName($src))->save(); } catch (\Exception $e) { } } return $this; }
public function testSet_tag() { $source = \databox_field::loadClassFromTagName('Phraseanet:tf-basename'); $this->object_mono->set_tag($source); $this->object_multi->set_tag($source); $this->assertEquals($source, $this->object_mono->get_tag()); $this->assertEquals($source, $this->object_multi->get_tag()); $this->object_mono->set_tag(null); $this->object_multi->set_tag(null); $this->assertEquals(new \Alchemy\Phrasea\Metadata\Tag\Nosource(), $this->object_mono->get_tag()); $this->assertEquals(new \Alchemy\Phrasea\Metadata\Tag\Nosource(), $this->object_multi->get_tag()); }
public function testUpdateFields() { $databoxes = self::$DI['app']->getDataboxes(); $databox = array_shift($databoxes); $fieldObjects = []; // create two fields $fields = [['sbas-id' => $databox->get_sbas_id(), 'name' => 'testfield' . mt_rand(), 'multi' => true, 'thumbtitle' => false, 'tag' => 'XMP:XMP', 'business' => false, 'indexable' => true, 'required' => true, 'separator' => '=;', 'readonly' => false, 'type' => 'string', 'tbranch' => '', 'report' => true, 'dces-element' => null, 'vocabulary-type' => null, 'vocabulary-restricted' => false], ['sbas-id' => $databox->get_sbas_id(), 'name' => 'testfield' . mt_rand(), 'multi' => true, 'thumbtitle' => false, 'tag' => 'XMP:XMP', 'business' => false, 'indexable' => true, 'required' => true, 'separator' => '=;', 'readonly' => false, 'type' => 'string', 'tbranch' => '', 'report' => true, 'dces-element' => null, 'vocabulary-type' => null, 'vocabulary-restricted' => false]]; foreach ($fields as $fieldData) { $field = \databox_field::create(self::$DI['app'], $databox, $fieldData['name'], $fieldData['multi']); $field->set_thumbtitle($fieldData['thumbtitle'])->set_tag(\databox_field::loadClassFromTagName($fieldData['tag']))->set_business($fieldData['business'])->set_indexable($fieldData['indexable'])->set_required($fieldData['required'])->set_separator($fieldData['separator'])->set_readonly($fieldData['readonly'])->set_type($fieldData['type'])->set_tbranch($fieldData['tbranch'])->set_report($fieldData['report'])->setVocabularyControl(null)->setVocabularyRestricted(false); $field->save(); $fieldObjects[] = $field; } // get body $body = $databox->get_meta_structure()->toArray(); // change some body data $body[count($body) - 2]['business'] = true; $body[count($body) - 2]['indexable'] = false; $body[count($body) - 1]['readonly'] = true; $body[count($body) - 1]['required'] = false; self::$DI['client']->request("PUT", sprintf("/admin/fields/%d/fields", $databox->get_sbas_id()), [], [], [], json_encode($body)); $response = self::$DI['client']->getResponse()->getContent(); $this->assertEquals("application/json", self::$DI['client']->getResponse()->headers->get("content-type")); $data = json_decode($response, true); $this->assertTrue(is_array($data)); // expect last 2 fields from body equals last 2 fields from response $this->assertEquals(array_splice($body, -2), array_splice($data, -2)); // delete created fields foreach ($fieldObjects as $field) { $field->delete(); } }
private function validateTagField(array $field) { try { \databox_field::loadClassFromTagName($field['tag'], true); } catch (\Exception_Databox_metadataDescriptionNotFound $e) { throw new BadRequestHttpException(sprintf('Provided tag %s is unknown.', $field['tag'])); } }