Ejemplo n.º 1
0
 public function testGet_instance()
 {
     $instance = databox_field::get_instance(self::$DI['app'], $this->databox, $this->object_mono->get_id());
     $this->assertEquals($this->object_mono->get_id(), $instance->get_id());
     $instance = databox_field::get_instance(self::$DI['app'], $this->databox, $this->object_multi->get_id());
     $this->assertEquals($this->object_multi->get_id(), $instance->get_id());
 }
Ejemplo n.º 2
0
 protected function retrieve_fields()
 {
     if (is_array($this->fields)) {
         return $this->fields;
     }
     $fields = [];
     try {
         $fields = $this->get_data_from_cache();
     } catch (\Exception $e) {
         $sql = "SELECT m.id as meta_id, s.id as structure_id\n          FROM metadatas m, metadatas_structure s\n          WHERE m.record_id = :record_id AND s.id = m.meta_struct_id\n            ORDER BY s.sorter ASC";
         $stmt = $this->databox->get_connection()->prepare($sql);
         $stmt->execute([':record_id' => $this->record->get_record_id()]);
         $fields = $stmt->fetchAll(PDO::FETCH_ASSOC);
         $stmt->closeCursor();
         $this->set_data_to_cache($fields);
     }
     $rec_fields = [];
     foreach ($fields as $row) {
         $databox_meta_struct = databox_field::get_instance($this->app, $this->databox, $row['structure_id']);
         $metadata = new caption_field($this->app, $databox_meta_struct, $this->record);
         $rec_fields[$databox_meta_struct->get_id()] = $metadata;
     }
     $this->fields = $rec_fields;
     return $this->fields;
 }
Ejemplo n.º 3
0
 /**
  *
  * @return databox_descriptionStructure
  */
 public function get_meta_structure()
 {
     if ($this->meta_struct) {
         return $this->meta_struct;
     }
     try {
         $metaStructData = $this->get_data_from_cache(self::CACHE_META_STRUCT);
     } catch (\Exception $e) {
         $sql = 'SELECT id, name FROM metadatas_structure ORDER BY sorter ASC';
         $stmt = $this->get_connection()->prepare($sql);
         $stmt->execute();
         $rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
         $stmt->closeCursor();
         $metaStructData = $rs;
         $this->set_data_to_cache($metaStructData, self::CACHE_META_STRUCT);
     }
     $this->meta_struct = new databox_descriptionStructure();
     foreach ($metaStructData as $row) {
         $this->meta_struct->add_element(databox_field::get_instance($this->app, $this, $row['id']));
     }
     return $this->meta_struct;
 }
Ejemplo n.º 4
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $databox, Application $app)
 {
     /**
      * Fail if upgrade has previously failed, no problem
      */
     try {
         $sql = "ALTER TABLE `metadatas`\n                    ADD `updated` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '1',\n                    ADD INDEX ( `updated` )";
         $stmt = $databox->get_connection()->prepare($sql);
         $stmt->execute();
         $stmt->closeCursor();
         $sql = 'UPDATE metadatas SET updated = "0"
                 WHERE meta_struct_id IN
                 (
                     SELECT id
                     FROM metadatas_structure
                     WHERE multi = "1"
                 )';
         $stmt = $databox->get_connection()->prepare($sql);
         $stmt->execute();
         $stmt->closeCursor();
     } catch (DBALException $e) {
     }
     try {
         $sql = 'ALTER TABLE `metadatas` DROP INDEX `unique`';
         $stmt = $databox->get_connection()->prepare($sql);
         $stmt->execute();
         $stmt->closeCursor();
     } catch (DBALException $e) {
     }
     $sql = 'SELECT m . *
             FROM metadatas_structure s, metadatas m
             WHERE m.meta_struct_id = s.id
             AND s.multi = "1" AND updated="0"';
     $stmt = $databox->get_connection()->prepare($sql);
     $stmt->execute();
     $rowCount = $stmt->rowCount();
     $stmt->closeCursor();
     $n = 0;
     $perPage = 1000;
     while ($n < $rowCount) {
         $sql = 'SELECT m . *
                 FROM metadatas_structure s, metadatas m
                 WHERE m.meta_struct_id = s.id
                 AND s.multi = "1" LIMIT ' . $n . ', ' . $perPage;
         $stmt = $databox->get_connection()->prepare($sql);
         $stmt->execute();
         $rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
         $stmt->closeCursor();
         $databox->get_connection()->beginTransaction();
         $sql = 'INSERT INTO metadatas(id, record_id, meta_struct_id, value)
                 VALUES (null, :record_id, :meta_struct_id, :value)';
         $stmt = $databox->get_connection()->prepare($sql);
         $databox_fields = [];
         foreach ($rs as $row) {
             $meta_struct_id = $row['meta_struct_id'];
             if (!isset($databox_fields[$meta_struct_id])) {
                 $databox_fields[$meta_struct_id] = \databox_field::get_instance($app, $databox, $meta_struct_id);
             }
             $values = \caption_field::get_multi_values($row['value'], $databox_fields[$meta_struct_id]->get_separator());
             foreach ($values as $value) {
                 $params = [':record_id' => $row['record_id'], ':meta_struct_id' => $row['meta_struct_id'], ':value' => $value];
                 $stmt->execute($params);
             }
         }
         $stmt->closeCursor();
         $sql = 'DELETE FROM metadatas WHERE id = :id';
         $stmt = $databox->get_connection()->prepare($sql);
         foreach ($rs as $row) {
             $params = [':id' => $row['id']];
             $stmt->execute($params);
         }
         $stmt->closeCursor();
         $databox->get_connection()->commit();
         $n += $perPage;
     }
     /**
      * Remove the extra column
      */
     try {
         $sql = "ALTER TABLE `metadatas` DROP `updated`";
         $stmt = $databox->get_connection()->prepare($sql);
         $stmt->execute();
         $stmt->closeCursor();
     } catch (\Exception $e) {
     }
     return true;
 }
Ejemplo n.º 5
0
 /**
  * @todo move this function to caption_record
  *
  * @param array   $metadatas
  * @param boolean $force_readonly
  *
  * @return record_adapter
  */
 public function set_metadatas(array $metadatas, $force_readonly = false)
 {
     foreach ($metadatas as $param) {
         if (!is_array($param)) {
             throw new Exception_InvalidArgument('Invalid metadatas argument');
         }
         $db_field = \databox_field::get_instance($this->app, $this->get_databox(), $param['meta_struct_id']);
         if ($db_field->is_readonly() === true && !$force_readonly) {
             continue;
         }
         $this->set_metadata($param, $this->databox);
     }
     $this->xml = null;
     $this->caption_record = null;
     $xml = new DOMDocument();
     $xml->loadXML($this->app['serializer.caption']->serialize($this->get_caption(), CaptionSerializer::SERIALIZE_XML, true));
     $this->set_xml($xml);
     $this->reindex();
     unset($xml);
     return $this;
 }
Ejemplo n.º 6
0
 public function testDeleteField()
 {
     $databoxes = self::$DI['app']['phraseanet.appbox']->get_databoxes();
     $databox = array_shift($databoxes);
     $field = \databox_field::create(self::$DI['app'], $databox, 'testfield' . mt_rand(), false);
     $fieldId = $field->get_id();
     $data = $field->toArray();
     $data['business'] = true;
     $data['vocabulary-type'] = 'User';
     self::$DI['client']->request("DELETE", sprintf("/admin/fields/%d/fields/%d", $databox->get_sbas_id(), $field->get_id()), [], [], [], json_encode($data));
     $response = self::$DI['client']->getResponse()->getContent();
     $this->assertEquals('', $response);
     $this->assertEquals(204, self::$DI['client']->getResponse()->getStatusCode());
     try {
         \databox_field::get_instance(self::$DI['app'], $databox, $fieldId);
         $this->fail('Should have raise an exception');
     } catch (\Exception $e) {
     }
 }
Ejemplo n.º 7
0
 public function testSet_record_metadatas()
 {
     $databox = self::$DI['record_1']->get_databox();
     $request = new Request(["salut" => "salut c'est la fete"], [], [], [], [], ['HTTP_Accept' => 'application/json']);
     $result = $this->object->set_record_metadatas($request, self::$DI['record_1']->get_sbas_id(), self::$DI['record_1']->get_record_id());
     $this->assertEquals(400, $result->get_http_code());
     $request = new Request(["metadatas" => "salut c'est la fete"], [], [], [], [], ['HTTP_Accept' => 'application/json']);
     $this->object->set_record_metadatas($request, self::$DI['record_1']->get_sbas_id(), self::$DI['record_1']->get_record_id());
     $this->assertEquals(400, $result->get_http_code());
     if (sizeof(self::$DI['record_1']->get_caption()->get_fields()) == 0) {
         $caption_field_value = caption_Field_Value::create(self::$DI['app'], databox_field::get_instance(self::$DI['app'], $databox, 1), self::$DI['record_1'], 'my value');
     }
     $metadatas = [];
     foreach (self::$DI['record_1']->get_databox()->get_meta_structure()->get_elements() as $field) {
         try {
             $values = self::$DI['record_1']->get_caption()->get_field($field->get_name())->get_values();
             $value = array_pop($values);
             $meta_id = $value->getId();
         } catch (\Exception $e) {
             $meta_id = null;
         }
         $metadatas[] = ['meta_id' => $meta_id, 'meta_struct_id' => $field->get_id(), 'value' => 'poOM POOM TCHOK ' . $field->get_id()];
     }
     $request = new Request(["metadatas" => $metadatas], [], [], [], [], ['HTTP_Accept' => 'application/json']);
     $result = $this->object->set_record_metadatas($request, self::$DI['record_1']->get_sbas_id(), self::$DI['record_1']->get_record_id());
     $response = json_decode($result->format(), true);
     $this->assertEquals($response['meta']['http_code'], 200);
     $this->checkResponseField($result, "record_metadatas", 'array');
 }
Ejemplo n.º 8
0
 public function deleteField(Application $app, $sbas_id, $id)
 {
     $databox = $app['phraseanet.appbox']->get_databox((int) $sbas_id);
     \databox_field::get_instance($app, $databox, $id)->delete();
     return new Response('', 204);
 }
Ejemplo n.º 9
0
 public function displayMetaRestrictions(Application $app, $sbas_id, $field_id)
 {
     $databox = $app['phraseanet.appbox']->get_databox((int) $sbas_id);
     $field = \databox_field::get_instance($app, $databox, $field_id);
     return $app['twig']->render('prod/Tooltip/DataboxFieldRestrictions.html.twig', ['field' => $field]);
 }
Ejemplo n.º 10
0
 /**
  *
  * @param Application $app
  * @param string      $serialized
  *
  * @return SearchEngineOptions
  *
  * @throws \InvalidArgumentException
  * @throws \RuntimeException
  */
 public static function hydrate(Application $app, $serialized)
 {
     $serialized = json_decode($serialized, true);
     if (!is_array($serialized)) {
         throw new \InvalidArgumentException('SearchEngineOptions data are corrupted');
     }
     $options = new static();
     $options->disallowBusinessFields();
     foreach ($serialized as $key => $value) {
         switch (true) {
             case is_null($value):
                 $value = null;
                 break;
             case in_array($key, ['date_min', 'date_max']):
                 $value = \DateTime::createFromFormat(DATE_ATOM, $value);
                 break;
             case $value instanceof stdClass:
                 $tmpvalue = (array) $value;
                 $value = [];
                 foreach ($tmpvalue as $k => $data) {
                     $k = ctype_digit($k) ? (int) $k : $k;
                     $value[$k] = $data;
                 }
                 break;
             case in_array($key, ['date_fields', 'fields']):
                 $value = array_map(function ($serialized) use($app) {
                     $data = explode('_', $serialized);
                     return \databox_field::get_instance($app, $app['phraseanet.appbox']->get_databox($data[0]), $data[1]);
                     return \collection::get_from_base_id($app, $base_id);
                 }, $value);
                 break;
             case in_array($key, ['collections', 'business_fields']):
                 $value = array_map(function ($base_id) use($app) {
                     return \collection::get_from_base_id($app, $base_id);
                 }, $value);
                 break;
         }
         $sort_by = $sort_ord = null;
         switch ($key) {
             case 'record_type':
                 $options->setRecordType($value);
                 break;
             case 'search_type':
                 $options->setSearchType($value);
                 break;
             case 'status':
                 $options->setStatus($value);
                 break;
             case 'date_min':
                 $options->setMinDate($value);
                 break;
             case 'date_max':
                 $options->setMaxDate($value);
                 break;
             case 'i18n':
                 if ($value) {
                     $options->setLocale($value);
                 }
                 break;
             case 'stemming':
                 $options->setStemming($value);
                 break;
             case 'sort_by':
                 $sort_by = $value;
                 break;
             case 'sort_ord':
                 $sort_ord = $value;
                 break;
             case 'date_fields':
                 $options->setDateFields($value);
                 break;
             case 'fields':
                 $options->setFields($value);
                 break;
             case 'collections':
                 $options->onCollections($value);
                 break;
             case 'business_fields':
                 $options->allowBusinessFieldsOn($value);
                 break;
             default:
                 throw new \RuntimeException(sprintf('Unable to handle key `%s`', $key));
                 break;
         }
     }
     if ($sort_by) {
         if ($sort_ord) {
             $options->setSort($sort_by, $sort_ord);
         } else {
             $options->setSort($sort_by);
         }
     }
     return $options;
 }