diff --git a/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php b/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php index 840feca115..98f5bb8773 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php @@ -80,6 +80,7 @@ class SubdefsController extends Controller $class = $request->request->get($post_sub . '_class'); $downloadable = $request->request->get($post_sub . '_downloadable'); + $orderable = $request->request->get($post_sub . '_orderable'); $defaults = ['path', 'meta', 'mediatype']; @@ -107,7 +108,7 @@ class SubdefsController extends Controller $labels = $request->request->get($post_sub . '_label', []); - $subdefs->set_subdef($group, $name, $class, $downloadable, $options, $labels); + $subdefs->set_subdef($group, $name, $class, $downloadable, $options, $labels, $orderable); } } diff --git a/lib/classes/databox/subdef.php b/lib/classes/databox/subdef.php index 653ac83a1e..cd46f04714 100644 --- a/lib/classes/databox/subdef.php +++ b/lib/classes/databox/subdef.php @@ -1,5 +1,4 @@ [SubdefSpecs::TYPE_IMAGE, SubdefSpecs::TYPE_AUDIO], + SubdefType::TYPE_DOCUMENT => [SubdefSpecs::TYPE_IMAGE, SubdefSpecs::TYPE_FLEXPAPER], + SubdefType::TYPE_FLASH => [SubdefSpecs::TYPE_IMAGE], + SubdefType::TYPE_IMAGE => [SubdefSpecs::TYPE_IMAGE], + SubdefType::TYPE_VIDEO => [SubdefSpecs::TYPE_IMAGE, SubdefSpecs::TYPE_VIDEO, SubdefSpecs::TYPE_ANIMATION], + ]; + /** * The class type of the subdef * Is null or one of the CLASS_* constants @@ -33,37 +51,23 @@ class databox_subdef protected $path; protected $subdef_group; protected $labels = []; + protected $downloadable; + protected $translator; /** * @var bool */ private $requiresMetadataUpdate; - protected $downloadable; - protected $translator; - protected static $mediaTypeToSubdefTypes = [ - SubdefType::TYPE_AUDIO => [SubdefSpecs::TYPE_IMAGE, SubdefSpecs::TYPE_AUDIO], - SubdefType::TYPE_DOCUMENT => [SubdefSpecs::TYPE_IMAGE, SubdefSpecs::TYPE_FLEXPAPER], - SubdefType::TYPE_FLASH => [SubdefSpecs::TYPE_IMAGE], - SubdefType::TYPE_IMAGE => [SubdefSpecs::TYPE_IMAGE], - SubdefType::TYPE_VIDEO => [SubdefSpecs::TYPE_IMAGE, SubdefSpecs::TYPE_VIDEO, SubdefSpecs::TYPE_ANIMATION], - ]; - - const CLASS_THUMBNAIL = 'thumbnail'; - const CLASS_PREVIEW = 'preview'; - const CLASS_DOCUMENT = 'document'; - const DEVICE_ALL = 'all'; - const DEVICE_HANDHELD = 'handheld'; - const DEVICE_PRINT = 'print'; - const DEVICE_PROJECTION = 'projection'; - const DEVICE_SCREEN = 'screen'; - const DEVICE_TV = 'tv'; /** - * - * @param SubdefType $type + * @var bool + */ + private $orderable; + + /** + * @param SubdefType $type * @param SimpleXMLElement $sd - * - * @return databox_subdef + * @param TranslatorInterface $translator */ public function __construct(SubdefType $type, SimpleXMLElement $sd, TranslatorInterface $translator) { @@ -77,6 +81,7 @@ class databox_subdef $this->name = strtolower($sd->attributes()->name); $this->downloadable = p4field::isyes($sd->attributes()->downloadable); + $this->orderable = isset($sd->attributes()->orderable) ? p4field::isyes($sd->attributes()->orderable) : true; $this->path = trim($sd->path) !== '' ? p4string::addEndSlash(trim($sd->path)) : ''; $this->requiresMetadataUpdate = p4field::isyes((string) $sd->meta); @@ -107,12 +112,130 @@ class databox_subdef $this->subdef_type = $this->buildFlexPaperSubdef($sd); break; } - - return $this; } /** + * Build Image Subdef object depending the SimpleXMLElement * + * @param SimpleXMLElement $sd + * @return Image + */ + protected function buildImageSubdef(SimpleXMLElement $sd) + { + $image = new Image($this->translator); + + if ($sd->size) { + $image->setOptionValue(Image::OPTION_SIZE, (int) $sd->size); + } + if ($sd->quality) { + $image->setOptionValue(Image::OPTION_QUALITY, (int) $sd->quality); + } + if ($sd->strip) { + $image->setOptionValue(Image::OPTION_STRIP, p4field::isyes($sd->strip)); + } + if ($sd->dpi) { + $image->setOptionValue(Image::OPTION_RESOLUTION, (int) $sd->dpi); + } + if ($sd->flatten) { + $image->setOptionValue(Image::OPTION_FLATTEN, p4field::isyes($sd->flatten)); + } + + return $image; + } + + /** + * Build Audio Subdef object depending the SimpleXMLElement + * + * @param SimpleXMLElement $sd + * @return Audio + */ + protected function buildAudioSubdef(SimpleXMLElement $sd) + { + $audio = new Audio($this->translator); + + if ($sd->acodec) { + $audio->setOptionValue(Audio::OPTION_ACODEC, (string) $sd->acodec); + } + if ($sd->audiobitrate) { + $audio->setOptionValue(Audio::OPTION_AUDIOBITRATE, (int) $sd->audiobitrate); + } + if ($sd->audiosamplerate) { + $audio->setOptionValue(Audio::OPTION_AUDIOSAMPLERATE, (int) $sd->audiosamplerate); + } + + return $audio; + } + + /** + * Build Video Subdef object depending the SimpleXMLElement + * + * @param SimpleXMLElement $sd + * @return Video + */ + protected function buildVideoSubdef(SimpleXMLElement $sd) + { + $video = new Video($this->translator); + + if ($sd->size) { + $video->setOptionValue(Video::OPTION_SIZE, (int) $sd->size); + } + if ($sd->acodec) { + $video->setOptionValue(Video::OPTION_ACODEC, (string) $sd->acodec); + } + if ($sd->vcodec) { + $video->setOptionValue(Video::OPTION_VCODEC, (string) $sd->vcodec); + } + if ($sd->fps) { + $video->setOptionValue(Video::OPTION_FRAMERATE, (int) $sd->fps); + } + if ($sd->bitrate) { + $video->setOptionValue(Video::OPTION_BITRATE, (int) $sd->bitrate); + } + if ($sd->audiobitrate) { + $video->setOptionValue(Video::OPTION_AUDIOBITRATE, (int) $sd->audiobitrate); + } + if ($sd->audiosamplerate) { + $video->setOptionValue(Video::OPTION_AUDIOSAMPLERATE, (int) $sd->audiosamplerate); + } + if ($sd->GOPsize) { + $video->setOptionValue(Video::OPTION_GOPSIZE, (int) $sd->GOPsize); + } + + return $video; + } + + /** + * Build GIF Subdef object depending the SimpleXMLElement + * + * @param SimpleXMLElement $sd + * @return Gif + */ + protected function buildGifSubdef(SimpleXMLElement $sd) + { + $gif = new Gif($this->translator); + + if ($sd->size) { + $gif->setOptionValue(Gif::OPTION_SIZE, (int) $sd->size); + } + if ($sd->delay) { + $gif->setOptionValue(Gif::OPTION_DELAY, (int) $sd->delay); + } + + return $gif; + } + + /** + * Build Flexpaper Subdef object depending the SimpleXMLElement + * + * @param SimpleXMLElement $sd + * @return FlexPaper + */ + protected function buildFlexPaperSubdef(SimpleXMLElement $sd) + { + return new FlexPaper($this->translator); + } + + /** * @return string */ public function get_class() @@ -121,7 +244,6 @@ class databox_subdef } /** - * * @return string */ public function get_path() @@ -132,7 +254,7 @@ class databox_subdef /** * The devices matching this subdefinition * - * @return Array + * @return array */ public function getDevices() { @@ -142,7 +264,7 @@ class databox_subdef /** * The current SubdefType the subdef converts documents * - * @return Alchemy\Phrasea\Media\Subdef\Subdef + * @return \Alchemy\Phrasea\Media\Subdef\Subdef */ public function getSubdefType() { @@ -162,7 +284,7 @@ class databox_subdef /** * An associative label ; keys are i18n languages * - * @return Array + * @return array */ public function get_labels() { @@ -181,15 +303,31 @@ class databox_subdef } /** - * boolean + * The name of the subdef * - * @return type + * @return string */ - public function is_downloadable() + public function get_name() + { + return $this->name; + } + + /** + * @return bool + */ + public function isDownloadable() { return $this->downloadable; } + /** + * @return bool + */ + public function isOrderable() + { + return $this->orderable; + } + /** * Get an array of Alchemy\Phrasea\Media\Subdef\Subdef available for the current Media Type * @@ -256,16 +394,6 @@ class databox_subdef return $this->requiresMetadataUpdate; } - /** - * The name of the subdef - * - * @return string - */ - public function get_name() - { - return $this->name; - } - /** * Get the MediaAlchemyst specs for the current subdef * @@ -285,125 +413,4 @@ class databox_subdef { return $this->subdef_type->getOptions(); } - - /** - * Build Image Subdef object depending the SimpleXMLElement - * - * @param SimpleXMLElement $sd - * @return \Alchemy\Phrasea\Media\Subdef\Video - */ - protected function buildImageSubdef(SimpleXMLElement $sd) - { - $image = new Image($this->translator); - - if ($sd->size) { - $image->setOptionValue(Image::OPTION_SIZE, (int) $sd->size); - } - if ($sd->quality) { - $image->setOptionValue(Image::OPTION_QUALITY, (int) $sd->quality); - } - if ($sd->strip) { - $image->setOptionValue(Image::OPTION_STRIP, p4field::isyes($sd->strip)); - } - if ($sd->dpi) { - $image->setOptionValue(Image::OPTION_RESOLUTION, (int) $sd->dpi); - } - if ($sd->flatten) { - $image->setOptionValue(Image::OPTION_FLATTEN, p4field::isyes($sd->flatten)); - } - - return $image; - } - - /** - * Build Audio Subdef object depending the SimpleXMLElement - * - * @param SimpleXMLElement $sd - * @return \Alchemy\Phrasea\Media\Subdef\Video - */ - protected function buildAudioSubdef(SimpleXMLElement $sd) - { - $audio = new Audio($this->translator); - - if ($sd->acodec) { - $audio->setOptionValue(Audio::OPTION_ACODEC, (string) $sd->acodec); - } - if ($sd->audiobitrate) { - $audio->setOptionValue(Audio::OPTION_AUDIOBITRATE, (int) $sd->audiobitrate); - } - if ($sd->audiosamplerate) { - $audio->setOptionValue(Audio::OPTION_AUDIOSAMPLERATE, (int) $sd->audiosamplerate); - } - - return $audio; - } - - /** - * Build Flexpaper Subdef object depending the SimpleXMLElement - * - * @param SimpleXMLElement $sd - * @return \Alchemy\Phrasea\Media\Subdef\Video - */ - protected function buildFlexPaperSubdef(SimpleXMLElement $sd) - { - return new FlexPaper($this->translator); - } - - /** - * Build GIF Subdef object depending the SimpleXMLElement - * - * @param SimpleXMLElement $sd - * @return \Alchemy\Phrasea\Media\Subdef\Video - */ - protected function buildGifSubdef(SimpleXMLElement $sd) - { - $gif = new Gif($this->translator); - - if ($sd->size) { - $gif->setOptionValue(Gif::OPTION_SIZE, (int) $sd->size); - } - if ($sd->delay) { - $gif->setOptionValue(Gif::OPTION_DELAY, (int) $sd->delay); - } - - return $gif; - } - - /** - * Build Video Subdef object depending the SimpleXMLElement - * - * @param SimpleXMLElement $sd - * @return \Alchemy\Phrasea\Media\Subdef\Video - */ - protected function buildVideoSubdef(SimpleXMLElement $sd) - { - $video = new Video($this->translator); - - if ($sd->size) { - $video->setOptionValue(Video::OPTION_SIZE, (int) $sd->size); - } - if ($sd->acodec) { - $video->setOptionValue(Video::OPTION_ACODEC, (string) $sd->acodec); - } - if ($sd->vcodec) { - $video->setOptionValue(Video::OPTION_VCODEC, (string) $sd->vcodec); - } - if ($sd->fps) { - $video->setOptionValue(Video::OPTION_FRAMERATE, (int) $sd->fps); - } - if ($sd->bitrate) { - $video->setOptionValue(Video::OPTION_BITRATE, (int) $sd->bitrate); - } - if ($sd->audiobitrate) { - $video->setOptionValue(Video::OPTION_AUDIOBITRATE, (int) $sd->audiobitrate); - } - if ($sd->audiosamplerate) { - $video->setOptionValue(Video::OPTION_AUDIOSAMPLERATE, (int) $sd->audiosamplerate); - } - if ($sd->GOPsize) { - $video->setOptionValue(Video::OPTION_GOPSIZE, (int) $sd->GOPsize); - } - - return $video; - } } diff --git a/lib/classes/databox/subdefsStructure.php b/lib/classes/databox/subdefsStructure.php index 58b0556451..4df1bc247d 100644 --- a/lib/classes/databox/subdefsStructure.php +++ b/lib/classes/databox/subdefsStructure.php @@ -223,10 +223,11 @@ class databox_subdefsStructure implements IteratorAggregate, Countable * @param boolean $downloadable * @param array $options * @param array $labels + * @param bool $orderable * @return databox_subdefsStructure * @throws Exception */ - public function set_subdef($group, $name, $class, $downloadable, $options, $labels) + public function set_subdef($group, $name, $class, $downloadable, $options, $labels, $orderable = true) { $dom_struct = $this->databox->get_dom_structure(); @@ -234,6 +235,7 @@ class databox_subdefsStructure implements IteratorAggregate, Countable $subdef->setAttribute('class', $class); $subdef->setAttribute('name', mb_strtolower($name)); $subdef->setAttribute('downloadable', ($downloadable ? 'true' : 'false')); + $subdef->setAttribute('orderable', ($orderable ? 'true' : 'false')); foreach ($labels as $code => $label) { $child = $dom_struct->createElement('label'); diff --git a/lib/classes/patch/370alpha6a.php b/lib/classes/patch/370alpha6a.php index 7f3472c260..7219d0d12b 100644 --- a/lib/classes/patch/370alpha6a.php +++ b/lib/classes/patch/370alpha6a.php @@ -108,7 +108,7 @@ class patch_370alpha6a extends patchAbstract $options['meta'] = $subdef->isMetadataUpdateRequired() ? 'yes' : 'no'; $options['devices'] = [databox_subdef::DEVICE_SCREEN]; - $root->set_subdef($groupname, $subdef->get_name(), $subdef->get_class(), $subdef->is_downloadable(), $options, []); + $root->set_subdef($groupname, $subdef->get_name(), $subdef->get_class(), $subdef->isDownloadable(), $options, []); } protected function addMobileSubdefVideo($root, $baseSubdef, $groupname) diff --git a/lib/classes/record/exportElement.php b/lib/classes/record/exportElement.php index fe225f145d..62ac7ab0a8 100644 --- a/lib/classes/record/exportElement.php +++ b/lib/classes/record/exportElement.php @@ -85,11 +85,10 @@ class record_exportElement extends record_adapter $sbas_id = phrasea::sbasFromBas($this->app, $this->get_base_id()); - $subdefgroups = $this->app->findDataboxById($sbas_id)->get_subdef_structure(); - + /** @var databox_subdef[] $subdefs */ $subdefs = []; - foreach ($subdefgroups as $subdef_type => $subdefs_obj) { + foreach ($this->app->findDataboxById($sbas_id)->get_subdef_structure() as $subdef_type => $subdefs_obj) { if ($subdef_type == $this->get_type()) { $subdefs = $subdefs_obj; break; @@ -173,7 +172,7 @@ class record_exportElement extends record_adapter $downloadable[$name] = false; - $downloadable_settings = $subdef->is_downloadable(); + $downloadable_settings = $subdef->isDownloadable(); if (! $downloadable_settings || $go_dl[$class] === false) { continue; diff --git a/templates/web/admin/subdefs.html.twig b/templates/web/admin/subdefs.html.twig index 5172612eee..f677a54520 100644 --- a/templates/web/admin/subdefs.html.twig +++ b/templates/web/admin/subdefs.html.twig @@ -227,7 +227,12 @@ {% endfor %} {{ 'Telechargeable' | trans }} - + + + + + {{ 'subdef.orderable' | trans }} + diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Admin/SubdefsTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Admin/SubdefsTest.php index 7c8c1572e5..2aced1154a 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Admin/SubdefsTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Admin/SubdefsTest.php @@ -94,8 +94,7 @@ class SubdefsTest extends \PhraseanetAuthenticatedWebTestCase $subdefs = new \databox_subdefsStructure($app->findDataboxById($this->databox_id), $app['translator']); $subdef = $subdefs->get_subdef("image", $name); - /* @var $subdef \databox_subdef */ - $this->assertFalse($subdef->is_downloadable()); + $this->assertFalse($subdef->isDownloadable()); $options = $subdef->getOptions(); diff --git a/tests/classes/databox/subdefTest.php b/tests/classes/databox/subdefTest.php index 0a9da63026..043e80bab0 100644 --- a/tests/classes/databox/subdefTest.php +++ b/tests/classes/databox/subdefTest.php @@ -1,27 +1,23 @@ translator = $this->getTranslatorMock(); + } + public function testImage() { $xml = ' @@ -37,12 +33,12 @@ class databox_subdefTest extends \PhraseanetTestCase 75 '; - $type = new \Alchemy\Phrasea\Media\Type\Image(); - $object = new databox_subdef($type, simplexml_load_string($xml), $this->getMock('Symfony\Component\Translation\TranslatorInterface')); + $type = new Type\Image(); + $object = new databox_subdef($type, simplexml_load_string($xml), $this->translator); $this->assertEquals(databox_subdef::CLASS_PREVIEW, $object->get_class()); $this->assertEquals('/home/datas/noweb/db_alch_phrasea/subdefs/', $object->get_path()); - $this->assertInstanceOf('\\Alchemy\\Phrasea\\Media\Subdef\\Subdef', $object->getSubdefType()); + $this->assertInstanceOf(Subdef\Subdef::class, $object->getSubdefType()); $this->assertEquals($type, $object->getSubdefGroup()); $labels = $object->get_labels(); @@ -52,42 +48,27 @@ class databox_subdefTest extends \PhraseanetTestCase $this->assertArrayHasKey('en', $labels); $this->assertEquals('Preview', $labels['en']); - $this->assertTrue($object->is_downloadable()); + $this->assertTrue($object->isDownloadable()); $this->assertTrue(is_array($object->getAvailableSubdefTypes())); $this->assertTrue(count($object->getAvailableSubdefTypes()) > 0); foreach ($object->getAvailableSubdefTypes() as $type) { - $this->assertInstanceOf('\\Alchemy\\Phrasea\\Media\\Subdef\\Image', $type); + $this->assertInstanceOf(Subdef\Image::class, $type); } $this->assertTrue($object->isMetadataUpdateRequired()); $this->assertEquals('preview_api', $object->get_name()); - $this->assertInstanceOf('\\MediaAlchemyst\\Specification\\Image', $object->getSpecs()); + $this->assertInstanceOf(Specification\Image::class, $object->getSpecs()); $options = $object->getOptions(); $this->assertTrue(is_array($options)); foreach ($options as $option) { - $this->assertInstanceOf('\\Alchemy\\Phrasea\\Media\\Subdef\\OptionType\\OptionType', $option); + $this->assertInstanceOf(OptionType::class, $option); } } - /** - * @covers databox_subdef::__construct - * @covers databox_subdef::get_class - * @covers databox_subdef::get_name - * @covers databox_subdef::isMetadataUpdateRequired - * @covers databox_subdef::getAvailableSubdefTypes - * @covers databox_subdef::is_downloadable - * @covers databox_subdef::get_labels - * @covers databox_subdef::getSubdefGroup - * @covers databox_subdef::getSubdefType - * @covers databox_subdef::get_path - * @covers databox_subdef::getSpecs - * @covers databox_subdef::getOptions - * @covers databox_subdef::buildVideoSubdef - */ public function testVideo() { $xml = ' @@ -107,44 +88,38 @@ class databox_subdefTest extends \PhraseanetTestCase '; $type = new \Alchemy\Phrasea\Media\Type\Video(); - $object = new databox_subdef($type, simplexml_load_string($xml), $this->getMock('Symfony\Component\Translation\TranslatorInterface')); + $object = new databox_subdef($type, simplexml_load_string($xml), $this->translator); $this->assertEquals(databox_subdef::CLASS_THUMBNAIL, $object->get_class()); $this->assertEquals('/home/datas/noweb/db_alch_phrasea/video/', $object->get_path()); - $this->assertInstanceOf('\\Alchemy\\Phrasea\\Media\Subdef\\Subdef', $object->getSubdefType()); + $this->assertInstanceOf(Subdef\Subdef::class, $object->getSubdefType()); $this->assertEquals($type, $object->getSubdefGroup()); $labels = $object->get_labels(); $this->assertTrue(is_array($labels)); $this->assertEquals(0, count($labels)); - $this->assertFalse($object->is_downloadable()); + $this->assertFalse($object->isDownloadable()); $this->assertTrue(is_array($object->getAvailableSubdefTypes())); $this->assertTrue(count($object->getAvailableSubdefTypes()) > 0); foreach ($object->getAvailableSubdefTypes() as $type) { - $this->assertInstanceOf('\\Alchemy\\Phrasea\\Media\\Subdef\\Subdef', $type); + $this->assertInstanceOf(Subdef\Subdef::class, $type); } $this->assertFalse($object->isMetadataUpdateRequired()); $this->assertEquals('video_api', $object->get_name()); - $this->assertInstanceOf('\\MediaAlchemyst\\Specification\\Video', $object->getSpecs()); + $this->assertInstanceOf(Specification\Video::class, $object->getSpecs()); $options = $object->getOptions(); $this->assertTrue(is_array($options)); foreach ($options as $option) { - $this->assertInstanceOf('\\Alchemy\\Phrasea\\Media\\Subdef\\OptionType\\OptionType', $option); + $this->assertInstanceOf(OptionType::class, $option); } } - /** - * @covers databox_subdef::__construct - * @covers databox_subdef::getSpecs - * @covers databox_subdef::getOptions - * @covers databox_subdef::buildGifSubdef - */ public function testGif() { $xml = ' @@ -158,24 +133,18 @@ class databox_subdefTest extends \PhraseanetTestCase '; $type = new \Alchemy\Phrasea\Media\Type\Video(); - $object = new databox_subdef($type, simplexml_load_string($xml), $this->getMock('Symfony\Component\Translation\TranslatorInterface')); + $object = new databox_subdef($type, simplexml_load_string($xml), $this->translator); - $this->assertInstanceOf('\\MediaAlchemyst\\Specification\\Animation', $object->getSpecs()); + $this->assertInstanceOf(Specification\Animation::class, $object->getSpecs()); $options = $object->getOptions(); $this->assertTrue(is_array($options)); foreach ($options as $option) { - $this->assertInstanceOf('\\Alchemy\\Phrasea\\Media\\Subdef\\OptionType\\OptionType', $option); + $this->assertInstanceOf(OptionType::class, $option); } } - /** - * @covers databox_subdef::__construct - * @covers databox_subdef::getSpecs - * @covers databox_subdef::getOptions - * @covers databox_subdef::buildAudioSubdef - */ public function testAudio() { $xml = ' @@ -185,24 +154,18 @@ class databox_subdefTest extends \PhraseanetTestCase '; $type = new \Alchemy\Phrasea\Media\Type\Audio(); - $object = new databox_subdef($type, simplexml_load_string($xml), $this->getMock('Symfony\Component\Translation\TranslatorInterface')); + $object = new databox_subdef($type, simplexml_load_string($xml), $this->translator); - $this->assertInstanceOf('\\MediaAlchemyst\\Specification\\Audio', $object->getSpecs()); + $this->assertInstanceOf(Specification\Audio::class, $object->getSpecs()); $options = $object->getOptions(); $this->assertTrue(is_array($options)); foreach ($options as $option) { - $this->assertInstanceOf('\\Alchemy\\Phrasea\\Media\\Subdef\\OptionType\\OptionType', $option); + $this->assertInstanceOf(OptionType::class, $option); } } - /** - * @covers databox_subdef::__construct - * @covers databox_subdef::getSpecs - * @covers databox_subdef::getOptions - * @covers databox_subdef::buildFlexPaperSubdef - */ public function testFlexPaper() { $xml = ' @@ -212,47 +175,85 @@ class databox_subdefTest extends \PhraseanetTestCase '; $type = new \Alchemy\Phrasea\Media\Type\Flash(); - $object = new databox_subdef($type, simplexml_load_string($xml), $this->getMock('Symfony\Component\Translation\TranslatorInterface')); + $object = new databox_subdef($type, simplexml_load_string($xml), $this->translator); - $this->assertInstanceOf('\\MediaAlchemyst\\Specification\\Flash', $object->getSpecs()); + $this->assertInstanceOf(Specification\Flash::class, $object->getSpecs()); $options = $object->getOptions(); $this->assertTrue(is_array($options)); foreach ($options as $option) { - $this->assertInstanceOf('\\Alchemy\\Phrasea\\Media\\Subdef\\OptionType\\OptionType', $option); + $this->assertInstanceOf(OptionType::class, $option); } } /** * @dataProvider getVariouasTypeAndSubdefs - * @covers databox_subdef::getAvailableSubdefTypes */ public function testGetAvailableSubdefTypes($object) { - foreach ($object->getAvailableSubdefTypes() as $type) { - $this->assertInstanceOf('\\Alchemy\\Phrasea\\Media\\Subdef\\Subdef', $type); + $this->assertInstanceOf(Subdef\Subdef::class, $type); } } public function getVariouasTypeAndSubdefs() { - $xmlImage = ' /home/datas/noweb/db_alch_phrasea/video/ image '; - $typeAudio = new \Alchemy\Phrasea\Media\Type\Audio(); - $typeDocument = new \Alchemy\Phrasea\Media\Type\Document(); - $typeVideo = new \Alchemy\Phrasea\Media\Type\Video(); + $translator = $this->getTranslatorMock(); return [ - [new databox_subdef($typeAudio, simplexml_load_string($xmlImage), $this->getMock('Symfony\Component\Translation\TranslatorInterface'))], - [new databox_subdef($typeDocument, simplexml_load_string($xmlImage), $this->getMock('Symfony\Component\Translation\TranslatorInterface'))], - [new databox_subdef($typeVideo, simplexml_load_string($xmlImage), $this->getMock('Symfony\Component\Translation\TranslatorInterface'))], + [new databox_subdef(new Type\Audio(), simplexml_load_string($xmlImage), $translator)], + [new databox_subdef(new Type\Document(), simplexml_load_string($xmlImage), $translator)], + [new databox_subdef(new Type\Video(), simplexml_load_string($xmlImage), $translator)], ]; } + + /** + * @param bool $expected + * @param null|string $configValue + * @dataProvider providesOrderableStatuses + */ + public function testOrderableStatus($expected, $configValue, $message) + { + $xmlTemplate = <<<'EOF' + + + /home/datas/noweb/db_alch_phrasea/video/ + image + +EOF; + + if (null !== $configValue) { + $configValue = ' orderable="' . $configValue . '"'; + } + + $xml = sprintf($xmlTemplate, $configValue ?: ''); + + $sut = new databox_subdef(new Type\Image(), simplexml_load_string($xml), $this->translator); + + $this->assertSame($expected, $sut->isOrderable(), $message); + } + + public function providesOrderableStatuses() + { + return [ + [true, null, 'No Orderable Status set should defaults to true'], + [false, 'false', 'Orderable should be false'], + [true, 'true', 'Orderable should be true'], + ]; + } + + /** + * @return PHPUnit_Framework_MockObject_MockObject|TranslatorInterface + */ + private function getTranslatorMock() + { + return $this->getMock(TranslatorInterface::class); + } }