From e904311d8b5e543c7761f76d9b48d777142dea4f Mon Sep 17 00:00:00 2001 From: gloas <gloas@afi-loas.afi-sa.net> Date: Thu, 6 Feb 2014 11:41:48 +0100 Subject: [PATCH] rel #8257 we can now add collections to album --- library/Class/Album.php | 40 ++++++++++++++++++- library/Class/Indexation/PseudoNotice.php | 19 ++++++++- library/Class/Notice.php | 1 + library/ZendAfi/Form/Album.php | 23 ++++++++++- .../admin/controllers/AlbumControllerTest.php | 33 ++++++++++++++- 5 files changed, 111 insertions(+), 5 deletions(-) diff --git a/library/Class/Album.php b/library/Class/Album.php index 046023fc2d5..5b5eb610a7b 100644 --- a/library/Class/Album.php +++ b/library/Class/Album.php @@ -78,6 +78,7 @@ class Class_Album extends Storm_Model_Abstract { const URI_TYPE_EXTERNAL_URI = 'external_uri'; const AUTHOR_FIELD = '701'; const EDITOR_FIELD = '210'; + const COLLECTION_FIELD = '225'; protected static $DEFAULT_THUMBNAIL_VALUES; @@ -789,11 +790,12 @@ class Class_Album extends Storm_Model_Abstract { $this->updateDateMaj(); $this->collectAuthors(); $this->collectEditors(); + $this->collectCollections(); } public function collectAuthors() { - $authors = $this->_collect('authors',self::AUTHOR_FIELD); + $authors = $this->_collect('authors', self::AUTHOR_FIELD); if(isset($authors['author'])) foreach($authors['author'] as $k => $v) $this->addAuthor($v, $authors['fonction'][$k]); @@ -807,6 +809,14 @@ class Class_Album extends Storm_Model_Abstract { $this->addEditor($v); } + + public function collectCollections() { + $collections = $this->_collect('collections', self::COLLECTION_FIELD); + if(isset($collections['collection'])) + foreach($collections['collection'] as $k => $v) + $this->addCollection($v); + } + protected function _collect($field, $zone) { if (!isset($this->_attributes[$field])) @@ -1440,6 +1450,22 @@ class Class_Album extends Storm_Model_Abstract { } + /** + * Collection from unimarc container + * @return array + */ + public function getCollections() { + return array_filter( + array_map( + function($item) { + return (!is_array($item) || self::COLLECTION_FIELD !== $item['field'] + || !isset($item['data']) || !isset($item['data']['a'])) ? + null : $item['data']['a']; + }, + $this->getNotesAsArray())); + } + + /** * add author in unimarc container if not present with the same function */ @@ -1478,6 +1504,16 @@ class Class_Album extends Storm_Model_Abstract { return $this->addSubField('210', 'c', $name); } -} + + /** + * add collection in unimarc container if not present with the same function + */ + public function addCollection($name) { + if (!$name) + return $this; + + return $this->addZone(self::COLLECTION_FIELD,['a' => $name]); + } +} ?> \ No newline at end of file diff --git a/library/Class/Indexation/PseudoNotice.php b/library/Class/Indexation/PseudoNotice.php index 39f2b9c0c62..06ba73e36f2 100644 --- a/library/Class/Indexation/PseudoNotice.php +++ b/library/Class/Indexation/PseudoNotice.php @@ -116,6 +116,7 @@ class Class_Indexation_PseudoNotice { 'tags' => '', 'sous_titre' => '', 'editeur' => '', + 'collection' => '', 'titre' => '', 'annee' => '', 'id_langue' => '', @@ -211,6 +212,14 @@ class Class_Indexation_PseudoNotice { } + protected function extractCollections() { + $collections = []; + if ($this->_dataExist('collection')) + $collections[] = $this->_datas['collection']; + return array_filter($collections); + } + + protected function extractTitles() { return $this->_datas['titre']; } @@ -272,6 +281,7 @@ class Class_Indexation_PseudoNotice { ->visitSubTitle($this->_datas['sous_titre']) ->visitTitle($this->_datas['titre']) ->visitEditors($this->extractEditors()) + ->visitCollection($this->extractCollections()) ->visitYear($this->_datas['annee']) ->visitLanguageId($this->_datas['id_langue']) ->visitDescription($this->_datas['description']) @@ -342,13 +352,20 @@ class Class_Indexation_PseudoNotice_Album extends Class_Indexation_PseudoNotice{ return array_unique($authors); } - + protected function extractEditors() { return array_unique(array_merge(parent::extractEditors(), $this->_model->getEditors())); } + /** @return array */ + protected function extractCollections() { + return array_unique(array_merge(parent::extractCollections(), + $this->_model->getCollections())); + } + + protected function extractTitles() { $titles = [parent::extractTitles()]; foreach($this->_model->getRessources() as $ressource) diff --git a/library/Class/Notice.php b/library/Class/Notice.php index e4012dc5d85..f953e52bd86 100644 --- a/library/Class/Notice.php +++ b/library/Class/Notice.php @@ -158,6 +158,7 @@ class Class_Notice extends Storm_Model_Abstract { 'titres' => '', 'auteurs' => '', 'editeur' => '', + 'collection' => '', 'date_maj' => '', 'collection' => '', 'matieres' => '', diff --git a/library/ZendAfi/Form/Album.php b/library/ZendAfi/Form/Album.php index 6a215d3625e..22303c31765 100644 --- a/library/ZendAfi/Form/Album.php +++ b/library/ZendAfi/Form/Album.php @@ -30,6 +30,7 @@ class ZendAfi_Form_Album extends ZendAfi_Form { ->addDurationFor($album) ->addAuthorsFor($album) ->addEditorsFor($album) + ->addCollectionsFor($album) ->addRightsFor($album) ->addVignetteFor($album) ->addFileFor($album) @@ -55,6 +56,10 @@ class ZendAfi_Form_Album extends ZendAfi_Form { ->addDisplayGroup(['editors'], 'editors', ['legend' => $form->_('Editors')]) + + ->addDisplayGroup(['collections'], + 'collections', + ['legend' => $form->_('Collections')]) ->addDisplayGroup(['droits', 'droits_precision', @@ -119,6 +124,16 @@ class ZendAfi_Form_Album extends ZendAfi_Form { return $this; } + public function addCollectionsFor($album) { + $values = ['collection' => []]; + $datas=$album->getDatasOfField(Class_Album::COLLECTION_FIELD); + foreach($datas as $data) { + $values['collection'][] = $data['a']; + } + $this->collections->setValues($values); + return $this; + } + public function init() { parent::init(); @@ -205,7 +220,13 @@ class ZendAfi_Form_Album extends ZendAfi_Form { ['label' => 'Editors', 'fields' => [['name' => 'editor', 'label' => 'Name'] ], 'values' => ['editor' => []], - 'deleteMessage' => ' this editor']); + 'deleteMessage' => ' this editor']) + + ->addElement('multiInput', 'collections', + ['label' => 'Collections', + 'fields' => [['name' => 'collection', 'label' => 'Name'] ], + 'values' => ['collection' => []], + 'deleteMessage' => ' this collection']); } diff --git a/tests/application/modules/admin/controllers/AlbumControllerTest.php b/tests/application/modules/admin/controllers/AlbumControllerTest.php index c2d477413ea..14b94420ae2 100644 --- a/tests/application/modules/admin/controllers/AlbumControllerTest.php +++ b/tests/application/modules/admin/controllers/AlbumControllerTest.php @@ -650,6 +650,12 @@ class Admin_AlbumControllerAddAlbumToPatrimoineTest extends Admin_AlbumControlle public function divMultiInputsEditorsShouldBeBeVisible() { $this->assertXPath('//div[@id="multi_inputs_editors"]'); } + + + /** @test */ + public function divMultiInputsCollectionsShouldBeBeVisible() { + $this->assertXPath('//div[@id="multi_inputs_collections"]'); + } } @@ -696,6 +702,7 @@ class Admin_AlbumControllerPostAlbumRenaissanceToPatrimoineTest extends Admin_Al 'author' => ['pba', 'lla'], 'fonction' => ['realisateur', 'bassiste'], 'editor' => ['Glo' , 'Pba'], + 'collection' => ['Ratm', 'Soad'], 'duration' => '00:04:08']); $this->new_album = Class_Album::findFirstBy(['order'=>'id desc']); $this->new_notice = $this->new_album->getNotice(); @@ -718,7 +725,7 @@ class Admin_AlbumControllerPostAlbumRenaissanceToPatrimoineTest extends Admin_Al public function newAlbumDescriptionShouldBeOeuvresMajeures() { $this->assertEquals('Oeuvres majeures sous François 1er', $this->new_album->getDescription()); } - + /** @test */ public function shouldRedirectToEditAlbum() { @@ -745,12 +752,24 @@ class Admin_AlbumControllerPostAlbumRenaissanceToPatrimoineTest extends Admin_Al } + /** @test */ public function shouldHaveEditorPba() { $this->assertContains('Pba', $this->new_album->getEditors()); } +/** @test */ + public function shouldHaveCollectionRatm() { + $this->assertContains('Ratm', $this->new_album->getCollections()); + } + + +/** @test */ + public function shouldHaveCollectionSoad() { + $this->assertContains('Soad', $this->new_album->getCollections()); + } + /** @test */ public function pseudoNoticeShouldBeIndexed() { @@ -810,6 +829,12 @@ class Admin_AlbumControllerPostAlbumRenaissanceToPatrimoineTest extends Admin_Al public function shouldHaveEditorGloInNotice() { $this->assertContains('Glo', $this->new_notice->getEditeur()); } + + + /** @test */ + public function shouldHaveCollectionRatmInCollection() { + $this->assertContains('Ratm', $this->new_notice->getCollection()); + } } @@ -885,6 +910,7 @@ class Admin_AlbumControllerEditAlbumMesBDTest extends Admin_AlbumControllerTestC ->setDuration('00:05:00') ->addAuthor('Pba') ->addEditor('Glo') + ->addCollection('Ratm') ->save(); $this->dispatch('/admin/album/edit_album/id/43', true); } @@ -1127,6 +1153,11 @@ class Admin_AlbumControllerEditAlbumMesBDTest extends Admin_AlbumControllerTestC $this->assertXPathContentContains('//div[@id="multi_inputs_editors"]/following-sibling::script','Glo',$this->_response->getBody()); } + + /** @test */ + public function pageShouldContainsScriptWithCollectionRatm() { + $this->assertXPathContentContains('//div[@id="multi_inputs_collections"]/following-sibling::script','Ratm',$this->_response->getBody()); + } } -- GitLab