mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 15:33:15 +00:00
Remove all uses of databox_field::get_instance
This commit is contained in:
@@ -34,7 +34,7 @@ class FieldsController extends Controller
|
||||
|
||||
foreach ($data as $jsonField) {
|
||||
try {
|
||||
$field = \databox_field::get_instance($this->app, $databox, $jsonField['id']);
|
||||
$field = $metaStructure->get_element($jsonField['id']);
|
||||
|
||||
if ($field->get_name() !== $jsonField['name']) {
|
||||
$this->validateNameField($metaStructure, $jsonField);
|
||||
@@ -191,7 +191,7 @@ class FieldsController extends Controller
|
||||
public function getField($sbas_id, $id)
|
||||
{
|
||||
$databox = $this->findDataboxById((int) $sbas_id);
|
||||
$field = \databox_field::get_instance($this->app, $databox, $id);
|
||||
$field = $databox->get_meta_structure()->get_element($id);
|
||||
|
||||
return $this->app->json($field->toArray());
|
||||
}
|
||||
@@ -199,7 +199,7 @@ class FieldsController extends Controller
|
||||
public function updateField(Request $request, $sbas_id, $id)
|
||||
{
|
||||
$databox = $this->findDataboxById((int) $sbas_id);
|
||||
$field = \databox_field::get_instance($this->app, $databox, $id);
|
||||
$field = $databox->get_meta_structure()->get_element($id);
|
||||
$data = $this->getFieldJsonFromRequest($request);
|
||||
|
||||
$this->validateTagField($data);
|
||||
@@ -218,7 +218,7 @@ class FieldsController extends Controller
|
||||
public function deleteField($sbas_id, $id)
|
||||
{
|
||||
$databox = $this->findDataboxById((int) $sbas_id);
|
||||
\databox_field::get_instance($this->app, $databox, $id)->delete();
|
||||
$databox->get_meta_structure()->get_element($id)->delete();
|
||||
|
||||
return new Response('', 204);
|
||||
}
|
||||
|
@@ -126,6 +126,6 @@ class TooltipController extends Controller
|
||||
{
|
||||
$databox = $this->findDataboxById((int)$sbas_id);
|
||||
|
||||
return \databox_field::get_instance($this->app, $databox, $field_id);
|
||||
return $databox->get_meta_structure()->get_element($field_id);
|
||||
}
|
||||
}
|
||||
|
@@ -473,10 +473,10 @@ class SearchEngineOptions
|
||||
break;
|
||||
case in_array($key, ['date_fields', 'fields']):
|
||||
$value = array_map(function ($serialized) use ($app) {
|
||||
$data = explode('_', $serialized);
|
||||
$data = explode('_', $serialized);
|
||||
|
||||
return \databox_field::get_instance($app, $app->findDataboxById($data[0]), $data[1]);
|
||||
}, $value);
|
||||
return $app->findDataboxById($data[0])->get_meta_structure()->get_element($data[1]);
|
||||
}, $value);
|
||||
break;
|
||||
case in_array($key, ['collections', 'business_fields']):
|
||||
$value = array_map(function ($base_id) use ($app) {
|
||||
|
@@ -87,11 +87,12 @@ class caption_record implements caption_interface, cache_cacheableInterface
|
||||
$rec_fields = array();
|
||||
|
||||
if ($fields) {
|
||||
$databox_descriptionStructure = $this->databox->get_meta_structure();
|
||||
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);
|
||||
$databox_field = $databox_descriptionStructure->get_element($row['structure_id']);
|
||||
$metadata = new caption_field($this->app, $databox_field, $this->record);
|
||||
|
||||
$rec_fields[$databox_meta_struct->get_id()] = $metadata;
|
||||
$rec_fields[$databox_field->get_id()] = $metadata;
|
||||
}
|
||||
}
|
||||
$this->fields = $rec_fields;
|
||||
|
@@ -10,6 +10,7 @@
|
||||
*/
|
||||
|
||||
use Alchemy\Phrasea\Application;
|
||||
use Alchemy\Phrasea\Databox\DataboxFieldRepositoryInterface;
|
||||
use Alchemy\Phrasea\Model\Entities\User;
|
||||
use Alchemy\Phrasea\Exception\InvalidArgumentException;
|
||||
use Alchemy\Phrasea\Status\StatusStructure;
|
||||
@@ -620,7 +621,6 @@ class databox extends base
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return databox_descriptionStructure|databox_field[]
|
||||
*/
|
||||
public function get_meta_structure()
|
||||
@@ -629,31 +629,10 @@ class databox extends base
|
||||
return $this->meta_struct;
|
||||
}
|
||||
|
||||
try {
|
||||
$metaStructData = $this->get_data_from_cache(self::CACHE_META_STRUCT);
|
||||
if (!is_array($metaStructData)) {
|
||||
throw new Exception('Invalid metaStructData');
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$metaStructData = array();
|
||||
/** @var DataboxFieldRepositoryInterface $fieldRepository */
|
||||
$fieldRepository = $this->app['repo.fields.factory']($this);
|
||||
|
||||
$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();
|
||||
|
||||
if ($rs) {
|
||||
$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']));
|
||||
}
|
||||
$this->meta_struct = new databox_descriptionStructure($fieldRepository->findAll());
|
||||
|
||||
return $this->meta_struct;
|
||||
}
|
||||
|
@@ -9,6 +9,8 @@
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
use Assert\Assertion;
|
||||
|
||||
class databox_descriptionStructure implements IteratorAggregate, Countable
|
||||
{
|
||||
/** @var databox_field[] */
|
||||
@@ -17,10 +19,22 @@ class databox_descriptionStructure implements IteratorAggregate, Countable
|
||||
/**
|
||||
* Cache array for the get element by name function
|
||||
*
|
||||
* @var databox_field[]
|
||||
* @var array
|
||||
*/
|
||||
protected $cache_name_id = [];
|
||||
|
||||
/**
|
||||
* @param databox_field[] $fields
|
||||
*/
|
||||
public function __construct($fields = [])
|
||||
{
|
||||
Assertion::allIsInstanceOf($fields, databox_field::class);
|
||||
|
||||
foreach ($fields as $field) {
|
||||
$this->add_element($field);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Iterator
|
||||
*/
|
||||
|
@@ -194,35 +194,6 @@ class databox_field implements cache_cacheableInterface
|
||||
return $this->aggregable != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Application $app
|
||||
* @param \databox $databox
|
||||
* @param int $id
|
||||
*
|
||||
* @return \databox_field
|
||||
*/
|
||||
public static function get_instance(Application $app, databox $databox, $id)
|
||||
{
|
||||
$cache_key = 'field_' . $id;
|
||||
$instance_id = $databox->get_sbas_id() . '_' . $id;
|
||||
if (! isset(self::$_instance[$instance_id])) {
|
||||
try {
|
||||
$field = $databox->get_data_from_cache($cache_key);
|
||||
if (!$field instanceof self) {
|
||||
trigger_error('Cache type returned mismatch', E_WARNING);
|
||||
throw new \Exception('Retrieved $field value is invalid');
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$field = new self($app, $databox, $id);
|
||||
$databox->set_data_to_cache($field, $cache_key);
|
||||
}
|
||||
self::$_instance[$instance_id] = $field;
|
||||
}
|
||||
$field =& self::$_instance[$instance_id];
|
||||
$field->app = $app;
|
||||
return $field;
|
||||
}
|
||||
|
||||
public function hydrate(Application $app)
|
||||
{
|
||||
$this->app = $app;
|
||||
@@ -934,7 +905,7 @@ class databox_field implements cache_cacheableInterface
|
||||
|
||||
$databox->delete_data_from_cache(databox::CACHE_META_STRUCT);
|
||||
|
||||
return self::get_instance($app, $databox, $id);
|
||||
return $databox->get_meta_structure()->get_element($id);
|
||||
}
|
||||
|
||||
public static function generateName($name)
|
||||
|
@@ -10,6 +10,7 @@
|
||||
*/
|
||||
|
||||
use Alchemy\Phrasea\Application;
|
||||
use Assert\Assertion;
|
||||
use Doctrine\DBAL\DBALException;
|
||||
|
||||
class patch_360alpha2b extends patchAbstract
|
||||
@@ -49,6 +50,8 @@ class patch_360alpha2b extends patchAbstract
|
||||
*/
|
||||
public function apply(base $databox, Application $app)
|
||||
{
|
||||
Assertion::isInstanceOf($databox, databox::class);
|
||||
/** @var databox $databox */
|
||||
/**
|
||||
* Fail if upgrade has previously failed, no problem
|
||||
*/
|
||||
@@ -115,16 +118,13 @@ class patch_360alpha2b extends patchAbstract
|
||||
VALUES (null, :record_id, :meta_struct_id, :value)';
|
||||
$stmt = $databox->get_connection()->prepare($sql);
|
||||
|
||||
$databox_fields = [];
|
||||
$databox_fields = $databox->get_meta_structure();
|
||||
|
||||
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());
|
||||
$databox_field = $databox_fields->get_element($meta_struct_id);
|
||||
$values = \caption_field::get_multi_values($row['value'], $databox_field->get_separator());
|
||||
|
||||
foreach ($values as $value) {
|
||||
$params = [
|
||||
|
@@ -1000,7 +1000,7 @@ class record_adapter implements RecordInterface, cache_cacheableInterface
|
||||
throw new Exception('Metadata value should be scalar');
|
||||
}
|
||||
|
||||
$databox_field = databox_field::get_instance($this->app, $databox, $params['meta_struct_id']);
|
||||
$databox_field = $databox->get_meta_structure()->get_element($params['meta_struct_id']);
|
||||
|
||||
$caption_field = new caption_field($this->app, $databox_field, $this);
|
||||
|
||||
@@ -1047,14 +1047,16 @@ class record_adapter implements RecordInterface, cache_cacheableInterface
|
||||
*
|
||||
* @return record_adapter
|
||||
*/
|
||||
public function set_metadatas(Array $metadatas, $force_readonly = false)
|
||||
public function set_metadatas(array $metadatas, $force_readonly = false)
|
||||
{
|
||||
$databox_descriptionStructure = $this->get_databox()->get_meta_structure();
|
||||
|
||||
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']);
|
||||
$db_field = $databox_descriptionStructure->get_element($param['meta_struct_id']);
|
||||
|
||||
if ($db_field->is_readonly() === true && !$force_readonly) {
|
||||
continue;
|
||||
|
@@ -29,7 +29,9 @@ class MetadataBagTest extends \PhraseanetTestCase
|
||||
*/
|
||||
public function testToMetadataArray()
|
||||
{
|
||||
$structure = self::$DI['collection']->get_databox()->get_meta_structure();
|
||||
/** @var \collection $collection */
|
||||
$collection = self::$DI['collection'];
|
||||
$structure = $collection->get_databox()->get_meta_structure();
|
||||
|
||||
$valueMono = new Mono('mono value');
|
||||
$valueMulti = new Multi(['multi', 'value']);
|
||||
|
@@ -4,6 +4,7 @@ namespace Alchemy\Tests\Phrasea\Controller\Admin;
|
||||
|
||||
use PHPExiftool\Driver\Tag\IPTC\ObjectName;
|
||||
use Alchemy\Phrasea\Vocabulary\Controller as VocabularyController;
|
||||
use Symfony\Component\HttpKernel\Client;
|
||||
|
||||
/**
|
||||
* @group functional
|
||||
@@ -217,7 +218,8 @@ class FieldsTest extends \PhraseanetAuthenticatedWebTestCase
|
||||
|
||||
public function testCreateField()
|
||||
{
|
||||
$databoxes = self::$DI['app']->getDataboxes();
|
||||
$databoxes = $this->getApplication()->getDataboxes();
|
||||
/** @var \databox $databox */
|
||||
$databox = array_shift($databoxes);
|
||||
|
||||
$body = json_encode([
|
||||
@@ -246,10 +248,12 @@ class FieldsTest extends \PhraseanetAuthenticatedWebTestCase
|
||||
'vocabulary-restricted' => true,
|
||||
]);
|
||||
|
||||
self::$DI['client']->request("POST", sprintf("/admin/fields/%d/fields", $databox->get_sbas_id()), [], [], [], $body);
|
||||
/** @var Client $client */
|
||||
$client = self::$DI['client'];
|
||||
$client->request("POST", sprintf("/admin/fields/%d/fields", $databox->get_sbas_id()), [], [], [], $body);
|
||||
|
||||
$response = self::$DI['client']->getResponse()->getContent();
|
||||
$this->assertEquals("application/json", self::$DI['client']->getResponse()->headers->get("content-type"));
|
||||
$response = $client->getResponse()->getContent();
|
||||
$this->assertEquals("application/json", $client->getResponse()->headers->get("content-type"));
|
||||
|
||||
$data = json_decode($response, true);
|
||||
|
||||
@@ -261,7 +265,7 @@ class FieldsTest extends \PhraseanetAuthenticatedWebTestCase
|
||||
|
||||
$this->assertEquals(json_decode($body, true), $dataWithoutIds);
|
||||
|
||||
$field = \databox_field::get_instance(self::$DI['app'], $databox, $data['id']);
|
||||
$field = $databox->get_meta_structure()->get_element($data['id']);
|
||||
$field->delete();
|
||||
}
|
||||
|
||||
@@ -325,10 +329,12 @@ class FieldsTest extends \PhraseanetAuthenticatedWebTestCase
|
||||
|
||||
public function testDeleteField()
|
||||
{
|
||||
$databoxes = self::$DI['app']->getDataboxes();
|
||||
$app = $this->getApplication();
|
||||
$databoxes = $app->getDataboxes();
|
||||
/** @var \databox $databox */
|
||||
$databox = array_shift($databoxes);
|
||||
|
||||
$field = \databox_field::create(self::$DI['app'], $databox, 'testfield' . mt_rand(), false);
|
||||
$field = \databox_field::create($app, $databox, 'testfield' . mt_rand(), false);
|
||||
$fieldId = $field->get_id();
|
||||
|
||||
$data = $field->toArray();
|
||||
@@ -336,14 +342,16 @@ class FieldsTest extends \PhraseanetAuthenticatedWebTestCase
|
||||
$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));
|
||||
/** @var Client $client */
|
||||
$client = self::$DI['client'];
|
||||
$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();
|
||||
$response = $client->getResponse()->getContent();
|
||||
$this->assertEquals('', $response);
|
||||
$this->assertEquals(204, self::$DI['client']->getResponse()->getStatusCode());
|
||||
$this->assertEquals(204, $client->getResponse()->getStatusCode());
|
||||
|
||||
try {
|
||||
\databox_field::get_instance(self::$DI['app'], $databox, $fieldId);
|
||||
$databox->get_meta_structure()->get_element($fieldId);
|
||||
$this->fail('Should have raise an exception');
|
||||
} catch (\Exception $e) {
|
||||
|
||||
|
@@ -8,11 +8,11 @@ use Alchemy\Phrasea\Application;
|
||||
*/
|
||||
class databox_fieldTest extends \PhraseanetTestCase
|
||||
{
|
||||
/**
|
||||
* @var databox_field
|
||||
*/
|
||||
/** @var databox_field */
|
||||
protected $object_mono;
|
||||
/** @var databox_field */
|
||||
protected $object_multi;
|
||||
/** @var databox */
|
||||
protected $databox;
|
||||
protected $name_mono;
|
||||
protected $name_multi;
|
||||
@@ -20,7 +20,10 @@ class databox_fieldTest extends \PhraseanetTestCase
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
$this->databox = self::$DI['record_1']->get_databox();
|
||||
|
||||
/** @var record_adapter $record_1 */
|
||||
$record_1 = self::$DI['record_1'];
|
||||
$this->databox = $record_1->get_databox();
|
||||
$this->name_mono = 'Field Test Mono';
|
||||
$this->name_multi = 'Field Test Multi';
|
||||
|
||||
@@ -53,15 +56,6 @@ class databox_fieldTest extends \PhraseanetTestCase
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo Implement testSet_databox().
|
||||
*/
|
||||
|
Reference in New Issue
Block a user