Skip to content
Snippets Groups Projects

full plugin mod for multiselection

Compare and
120 files
+ 6296
3374
Preferences
Compare changes
Files
120
@@ -19,16 +19,11 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
class Admin_AlbumController extends ZendAfi_Controller_Action {
protected $_baseUrlOptions = ['module' => 'admin',
'controller' => 'album'];
public function getRessourceDefinitions() {
return ['model' => ['class' => 'Class_Album',
'name' => 'album',
'order' => 'libelle',
'model_id' => 'id'],
'plugins' => ['ZendAfi_Controller_Plugin_MultiSelection_Album']];
public function getPlugins() {
return ['ZendAfi_Controller_Plugin_ResourceDefinition_Album',
'ZendAfi_Controller_Plugin_Manager_Album',
'ZendAfi_Controller_Plugin_MultiSelection_Album'];
}
@@ -168,525 +163,6 @@ class Admin_AlbumController extends ZendAfi_Controller_Action {
}
public function addcategorietoAction() {
if (!$parent_categorie = Class_AlbumCategorie::find((int)$this->_getParam('id'))) {
$this->_redirect('admin/album');
return;
}
$categorie = Class_AlbumCategorie::newInstance()
->setParentCategorie($parent_categorie);
$titre = sprintf(((!$parent_categorie->hasParentCategorie())
? 'Ajouter une catégorie à la collection "%s"'
: 'Ajouter une sous-catégorie à la catégorie "%s"'),
$parent_categorie->getLibelle());
$this->_renderCategoryForm($categorie, $titre);
}
public function addcategorieAction() {
$this->_renderCategoryForm(Class_AlbumCategorie::newInstance(),
'Ajouter une collection');
}
public function editcategorieAction() {
if (!$categorie = Class_AlbumCategorie::find((int)$this->_getParam('id'))) {
$this->_redirect('admin/album');
return;
}
$this->_renderCategoryForm(
$categorie,
'Modification de la '. ((!$categorie->hasParentCategorie()) ? 'collection' : 'catégorie') . ' "' . $categorie->getLibelle() . '"');
}
public function deletecategorieAction() {
if ($categorie = Class_AlbumCategorie::find((int)$this->_getParam('id')))
$categorie->delete();
$this->_redirect('admin/album');
}
public function linkalbumtoAction() {
$this->_renderAlbumForm(Class_Album::newInstance(),
'Ajouter un album');
}
public function addalbumtoAction() {
$categorie = '';
$title = 'Ajouter un album';
if ($categorie = Class_AlbumCategorie::find((int)$this->_getParam('id')))
$title .= ' dans la collection "' . $categorie->getLibelle() . '"';
$this->_renderAlbumForm(
Class_Album::newInstance()->setCategorie($categorie), $title);
}
public function editalbumAction() {
if (!$album = Class_Album::find((int)$this->_getParam('id'))) {
$this->_redirect('admin/album');
return;
}
$this->_renderAlbumForm($album, 'Modifier l\'album "' . $album->getTitre() . '"');
}
public function deletealbumAction() {
if ($album = Class_Album::find((int)$this->_getParam('id')))
$album->delete();
$this->_redirect('admin/album');
}
public function previewalbumAction() {
if (!$album = Class_Album::find((int)$this->_getParam('id'))) {
$this->_redirect('admin/album');
return;
}
$form = $this->_thumbnailsForm($album);
if ($form && $this->_request->isPost()
&& $form->isValid($this->_request->getPost())
&& ($album->updateAttributes($this->_request->getPost())
->save())) {
$this->_helper->notify('Paramètres sauvegardés');
$this->_redirect('admin/album/preview_album/id/'.$album->getId());
return;
}
$this->view->titre = sprintf('Visualisation de l\'album "%s"',
$album->getTitre());
$this->view->album = $album;
$this->view->form = $form;
}
public function generateThumbnailsAction() {
if (!$album = Class_Album::find((int)$this->_getParam('id'))) {
$this->_redirect('admin/album');
return;
}
$this->view->titre = sprintf('Génération des vignettes de l\'album "%s"',
$album->getTitre());
$this->view->album = $album;
}
public function editimagesAction() {
if (!$album = Class_Album::find((int)$this->_getParam('id'))) {
$this->_redirect('admin/album');
return;
}
$this->view->album = $album;
$this->view->ressources = $album->getRessources();
$this->view->titre = 'Médias de l\'album "'
. $album->getTitre()
. '" dans la collection "'
. $album->getCategorie()->getLibelle() . '"';
}
public function addRessourceAction () {
if (!$album = Class_Album::find((int)$this->_getParam('id'))) {
$this->_redirect('admin/album');
return;
}
$this->view->album = $album;
$ressource = Class_AlbumRessource::newInstance()->setAlbum($album);
if ($this->_setupRessourceFormAndSave($ressource)) {
$this->_helper->notify('Média "' . $ressource->getTitre() . '" sauvegardé');
$this->_redirect('admin/album/edit_ressource/id/' . $ressource->getId());
return;
}
$this->view->errors = $ressource->getErrors();
}
public function editressourceAction() {
if (null === ($ressource = Class_AlbumRessource::getLoader()
->find($this->_getParam('id')))) {
$this->_redirect('admin/album');
return;
}
if ($this->_setupRessourceFormAndSave($ressource)) {
$this->_helper->notify('Média "' . $ressource->getTitre() . '" sauvegardé');
$this->_redirect('admin/album/edit_ressource/id/' . $ressource->getId());
return;
}
$this->view->errors = $ressource->getErrors();
$this->view->form->getElement('fichier')
->setValue($ressource->getFichier());
$this->view->form->getElement('poster')
->setValue($ressource->getPoster());
$this->view->ressource = $ressource;
}
public function previewRessourceAction() {
if (null === ($ressource = Class_AlbumRessource::find($this->_getParam('id')))) {
$this->_redirect('admin/album');
return;
}
$ressource->ensureTilesGenerated();
Class_ScriptLoader::getInstance()->loadLeafletJS();
$this->view->ressource = $ressource;
}
protected function _setupRessourceFormAndSave($model) {
$form = $this->_ressourceForm($model);
$this->view->form = $form;
if (!$this->_request->isPost()
or !$form->isValid($this->_request->getPost()))
return false;
$model->updateAttributes($this->_request->getPost());
$model->setAuthors($form->authors->getValue());
if (!$model->isValid()) {
$form->addModelErrors($model);
return false;
}
return $model->save()
&& $model->receiveFiles()
&& $model->getAlbum()->save()
&& $model->getAlbum()->index();
}
public function sortressourcesAction() {
$album = Class_Album::getLoader()->find((int)$this->_getParam('id'));
$album->sortRessourceByFileName()->save();
$this->_helper->notify('Médias réordonnés par nom de fichier');
$this->_redirect('admin/album/edit_images/id/'.$album->getId());
}
public function massRessourceDeleteAction() {
$this->_helper->getHelper('viewRenderer')->setNoRender(true);
if ((!$ids = $this->_getParam('ids'))
|| (!$id = $this->_getParam('id'))) {
$this->_helper->notify('Paramètres manquants dans la requête de suppression');
return;
}
$ids = explode(',', $ids);
if (empty($ids)) {
$this->_helper->notify('Rien à supprimer');
return;
}
$deleted_count = 0;
foreach ($ids as $ressource_id) {
if (!$ressource = Class_AlbumRessource::find($ressource_id))
continue;
if (!$ressource->getAlbum())
continue;
if ($id != $ressource->getAlbum()->getId())
continue;
$ressource->delete();
++$deleted_count;
}
$this->_helper->notify($deleted_count . ' média(s) supprimé(s)');
}
public function deleteimageAction() {
if (null === ($ressource = Class_AlbumRessource::find((int)$this->_getParam('id')))) {
$this->_redirect('admin/album');
return;
}
$ressource->delete();
$this->_redirect('admin/album/edit_images/id/' . $ressource->getAlbum()->getId());
}
public function moveImageAction() {
$this->_helper->getHelper('viewRenderer')->setNoRender(true);
if (null === ($ressource = Class_AlbumRessource::find((int)$this->_getParam('id'))))
return;
$ressource
->getAlbum()
->moveRessourceAfter($ressource, (int)$this->_getParam('after'));
}
public function albumDeleteVignetteAction() {
$this->_helper->getHelper('viewRenderer')->setNoRender(true);
if (!$album = Class_Album::find((int)$this->_getParam('id'))) {
$this->_redirect('admin/album');
return;
}
$album->deleteVignette();
$this->_redirect('admin/album/edit_album/id/' . $album->getId());
}
public function albumDeletePdfAction() {
$this->_helper->getHelper('viewRenderer')->setNoRender(true);
if (!$album = Class_Album::find((int)$this->_getParam('id'))) {
$this->_redirect('admin/album');
return;
}
$album->deletePdf();
$this->_redirect('admin/album/edit_album/id/' . $album->getId());
}
/**
* Formulaire d'édition des catégories
* @param Class_AlbumCategorie $categorie
* @return Zend_Form
*/
protected function _categorieForm($categorie) {
$cat_id = $categorie->isNew() ? $categorie->getParentId(): $categorie->getId();
$form = new ZendAfi_Form(['id' => 'categorie',
'data-backurl' => $this->view->url(['action' => 'index',
'cat_id' => $cat_id])]);
$form->addElement(new Zend_Form_Element_Text('libelle', ['label' => 'Libellé *',
'size' => 30,
'required' => true,
'allowEmpty' => false]))
->addDisplayGroup(['libelle'], 'categorie',
['legend' => (($categorie->hasParentCategorie()) ?
'Catégorie'
: 'Collection')])
->populate($categorie->toArray());
return $form;
}
/**
* @param Class_AlbumCategorie $categorie
* @return null
*/
public function _validateAndAddCategorie($categorie) {
$form = $this->_categorieForm($categorie);
$this->view->form = $form;
if (!$this->getRequest()->isPost() or !$form->isValid($_POST))
return;
$categorie
->updateAttributes($_POST)
->save();
$this->_redirect('admin/album/index');
}
/**
* @param Class_AlbumCategorie $categorie
* @param string $titre
*/
protected function _renderCategoryForm($categorie, $titre) {
$this->_validateAndAddCategorie($categorie);
$this->view->titre = $titre;
$this->render('categorie_form');
}
/**
* @param Class_Album $album
* @return Zend_Form
*/
protected function _albumForm($album) {
$form = ZendAfi_Form_Album::newWithAlbum($album);
$bib_id_param = [];
if(!$this->_getParam('title_search'))
$bib_id_param = ['cat_id' => $album->getCatId()];
$form->addAttribs(['data-backurl' => $this->view->url(array_filter(array_merge(['action' => 'index'], $bib_id_param)))]);
return $form;
}
protected function _getForm($album){
return $this->_albumForm($album);
}
/**
* @param Class_AlbumRessource $ressource
* @return Zend_Form
*/
protected function _ressourceForm($ressource) {
return ZendAfi_Form_Album_Ressource::newWith($ressource);
}
/**
* @param Class_Album $album
* @return null
*/
public function _validateAndSaveAlbum($album) {
$form = $this->_albumForm($album);
$this->view->form = $form;
if (
!$this->_request->isPost()
or !$form->isValid($this->_request->getPost())
)
return;
$values = $form->getValues();
unset($values['fichier']);
unset($values['pdf']);
unset($values['album_items']);
$droits_precision = $values['droits_precision'];
unset($values['droits_precision']);
$values['droits'] = $form->isPublicDomain()
? $form->getPublicDomain()
: $droits_precision;
$frbr_multi = $values['frbr_multi'];
unset($values['frbr_multi']);
$album->updateAttributes($values);
if ($album->save()
&& $album->receiveFile()
&& $album->receivePDF()) {
$album->index();
$frbr_links = [];
foreach(Class_FRBR_Link::findAllRecordLinksForAlbum($album) as $link)
$frbr_links[md5($link->getSource().$link->getTarget())] = $link;
$absoluteUrl = $this->view->absoluteUrl(array_merge(['id' => $album->getId()],
$album->getPermalink()), null, true);
$received_links = [];
$urls = $frbr_multi['frbr_url'];
$types = $frbr_multi['frbr_type'];
$count = count($urls);
for($i=0; $i < $count; $i++) {
if (!$types[$i] && !$urls[$i])
continue;
list($id, $type) = explode(':', $types[$i]);
$md5 = md5('target' == $type ? ($urls[$i] . $absoluteUrl) : ($absoluteUrl . $urls[$i]));
$received_links[$md5] = ['frbr_url' => $urls[$i], 'frbr_type' => $id, 'type' => $type];
}
foreach(array_diff_key($frbr_links, $received_links) as $link)
$link->delete();
foreach(array_diff_key($received_links, $frbr_links) as $new) {
$record_type = 'target' == $new['type'] ? 'source' : 'target';
$frbr_link = Class_FRBR_Link::newInstance([$new['type'] => $absoluteUrl,
$record_type => $new['frbr_url'],
'type_id' => $new['frbr_type']]);
if (!$frbr_link->save())
throw new Zend_Exception(json_encode($frbr_link->getErrors()));
}
(new Storm_Cache())->clean();
$this->_helper->notify('Album sauvegardé');
return true;
}
return false;
}
/**
* @return ZendAfi_Form
*/
public function _thumbnailsForm($album) {
if (!$form = ZendAfi_Form_Album_DisplayAbstract::forAlbum($album, ['id' => 'thumbnails']))
return;
$form->addAttribs(['data-backurl' => $this->view->url(['action' => 'index',
'cat_id' => $album->getCatId()])]);
return $form->populate($album->toArray());
}
/**
* @param Class_Album $album
* @param string $titre
*/
protected function _renderAlbumForm($album, $titre) {
if ($this->_validateAndSaveAlbum($album))
return $this->_redirectToEdit($album);;
$this->view->titre = $titre;
$this->view->errors = $album->getErrors();
$this->view->album = $album;
$this->view->form->getElement('fichier')
->setValue($album->getFichier());
$this->view->form->getElement('pdf')
->setValue($album->getPdf());
if ($this->isPopupRequest())
$this->_prepareAlbumAjaxFrom();
$this->getHelper('ViewRenderer')->setScriptAction('album_form');
}
protected function _getEditUrl($model) {
return Class_Url::absolute(['action' => 'edit_album',
'id' => $model->getId(),
'page' => $this->_getParam('page'),
'title_search' => $this->_getParam('title_search')]);
}
protected function _prepareAlbumAjaxFrom() {
$id_notice = $this->_getParam('id_notice')
? $this->_getParam('id_notice')
: '';
$this->view->form->beSimple()
->setAction($this->view->url(['action' => 'link_album_to',
'id_notice' => $id_notice]))
->setEnctype('application/x-www-form-urlencoded');
if (!$this->_request->isPost()) {
$notice = Class_Notice::find($id_notice);
$this->view->form->populateFrbrUrl(
$this->view->absoluteUrl($this->view->urlNotice($notice, [], null, true), null, true));
$this->view->form->getElement('titre')->setValue($notice->getTitrePrincipal());
}
}
protected function _getTreeViewContainerActions() {
return (new ZendAfi_View_Helper_ModelActionsTable_AlbumCategories($this->view, 'album'))->getActions();
@@ -712,76 +188,4 @@ class Admin_AlbumController extends ZendAfi_Controller_Action {
return $this->renderScript('admin/listViewMode.phtml');
}
public function resourceDeletePosterAction() {
$this->_helper->getHelper('viewRenderer')->setNoRender(true);
if (!$resource = Class_AlbumRessource::find((int)$this->_getParam('id'))) {
$this->_redirect('admin/album');
return;
}
$resource->deletePoster()->save();
$this->_redirect('admin/album/edit_ressource/id/' . $resource->getId());
}
public function addWebsiteAction() {
$import_form = $this->view
->newForm(['id' => 'import', 'class' => 'form'])
->setMethod('post')
->addElement('url', 'url', ['label' => $this->view->_('URL du site web'),
'required' => true,
'allowEmpty' => false])
->addDisplayGroup(['url'], 'website', ['legend' => $this->view->_('Site web')])
->addElement('submit', 'submit', ['label' => $this->view->_('Importer')]);
if ($this->getRequest()->isPost() && $import_form->isValid($this->getRequest()->getPost())) {
$album = $this->createAlbumFromUrl($this->getRequest()->getPost('url'));
if ($album && $album->save()) {
$this->_redirect('/admin/album/edit_album/id/'.$album->getId());
return;
}
}
$this->view->import_form = $import_form;
}
protected function createAlbumFromUrl($url) {
$html = Class_WebService_SimpleWebClient::getInstance()->open_url($url);
$dom = new Zend_Dom_Query($html);
$category = Class_AlbumCategorie::getOrCreateRootCategory('Sites web');
$album = Class_Album::newInstance(['type_doc_id' => Class_TypeDoc::WEBSITE,
'categorie' => $category]);
$title_node = $dom->queryXpath('//head/title')->current();
$album->setTitre($title_node ? trim($title_node->textContent) : $url);
if ($description_node = $dom->queryXpath('//head/meta[@name="description"]')->current())
$album->setDescription($description_node->getAttribute('content'));
$resource = Class_AlbumRessource::newInstance(['url' => $url,
'titre' => $album->getTitre(),
'description' => $album->getDescription()]);
$album->addRessource($resource);
$album->save();
$thumbnailer = (new Class_WebService_WebSiteThumbnail());
$poster_name = $thumbnailer->fileNameFromUrl($url);
$poster_path = $resource->getPosterPath();
$resource->getFolderManager()->ensure($poster_path);
$thumbnailer->getThumbnailer()->fetchUrlToFile($url, $poster_path . $poster_name, 'medium');
$resource->setPoster($poster_name);
$resource->createThumbnail();
return $album;
}
}