Commit 37d5df0c authored by Ghislain Loas's avatar Ghislain Loas
Browse files

Merge branch 'hotline' into 'master'

Hotline

See merge request !2541
parents c5b0311f 9d7257b3
Pipeline #3660 failed with stage
in 32 minutes and 57 seconds
- ticket #72297 : Cosmogramme : correction du système de dédoublonnage
\ No newline at end of file
- ticket #72437 : Charte graphique : suppression de règles css inutiles dans la charte "modèle"
\ No newline at end of file
- ticket #72468 : Explorateur de fichiers : correction des boutons de redimensionnement lors de l'import.
- ticket #72468 : Explorateur de fichiers : amélioration du système de redirection après import ou supression de document.
\ No newline at end of file
......@@ -57,4 +57,329 @@ class Admin_FileManagerController extends ZendAfi_Controller_Action {
$this->view->titre = $this->_('Explorateur de fichiers : "%s"', $settings->getFocusedPath());
}
public function dropAction() {
if(!$item = $this->_findItemFromParams())
return ;
if(!$into = $this->_findIntoFromParams($item))
return;
if($item->getPath() == $into->getPath())
return $this->_nothingToDo($item, $into);
$this->view->titre = $this->_('"%s" vers "%s"', $item->getPath(), $into->getPath());
$this->view->disable_move = $item->getParentPath() == $into->getPath() || (!$item->isWritable());
}
public function moveAction() {
if(!$item = $this->_findItemFromParams())
return;
if(!$into = $this->_findIntoFromParams($item))
return;
if($item->getParentPath() == $into->getPath())
return $this->_nothingToDo($item, $into);
if($item->getPath() == $into->getPath())
return $this->_nothingToDo($item, $into);
$expected_destination = $into->getPath() . '/' . $item->getName();
$message = ($success = Class_FileManager::moveItemInto($item, $expected_destination))
? $this->_('Déplacement de "%s" dans "%s" effectué.', $item->getName(), $into->getPath())
: $this->_('Impossible de déplacer "%s" dans "%s".', $item->getName(), $into->getPath());
if($success)
$item->renameModels($expected_destination);
$this->_redirectWithMessage($message);
}
public function copyAction() {
if(Class_FileManager::isFull())
return $this->_spaceFullError();
if(!$item = $this->_findItemFromParams())
return;
if(!$into = $this->_findIntoFromParams($item))
return;
$message = Class_FileManager::copyItemInto($item, $into)
? $this->_('Copie de "%s" dans "%s" effectué.', $item->getName(), $into->getPath())
: $this->_('Impossible de copier "%s" dans "%s".', $item->getName(), $into->getPath());
$this->_redirectWithMessage($message);
}
public function deleteAction() {
$this->view->item = $item = $this->_findItemFromParams();
if(!$item->isDeepWritable())
return $this->_redirectWithMessage($this->_('Le dossier "%s" ne peut pas être supprimé car il contient des éléments protégés en écriture ou utilisés dans les articles, les domaines ou les profils.', $item->getPath()));
$this->view->titre = $this->_('Supprimer "%s"', $item->getPath());
$this->view->models = $item->getModels();
}
public function forceDeleteAction() {
if(!$item = $this->_findItemFromParams())
return;
$success = Class_FileManager::delete($item);
$message = $success
? $this->_('"%s" supprimé.', $item->getPath())
: $this->_('Impossible de supprimer "%s".', $item->getPath());
$path = $success
? $item->getParentPath()
: $item->getPath();
$this->_redirectToPathWithMessage($path, $message);
}
public function createAction() {
$into = $this->_findIntoFromParams();
$this->view->titre = $this->_('Créer un nouveau dossier dans "%s"', $into->getPath());
$this->view->form = $form = ZendAfi_Form_Admin_FileManager_Folder::newWith($this->_request->getParams());
$form->setAction($this->view->url());
if (!$this->_request->isPost())
return;
if (!$form->isValid($this->_getPost()))
return;
$post = $this->_getPost();
$folder = isset($post['folder'])
? $post['folder']
: $this->_getParam('folder');
$message = Class_FileManager::create($folder, $into)
? $this->_('Dossier "%s" créé.', $folder)
: $this->_('Impossible de créer le dossier "%s".', $folder);
$this->_redirectToPathWithMessage($into->getPath() . '/' . $folder, $message);
}
public function importAction() {
if(Class_FileManager::isFull())
return $this->_spaceFullError();
$into = $this->_findIntoFromParams();
$this->view->titre = $this->_('Téléverser un fichier dans "%s"', $into->getPath());
$this->view->form = $form = ZendAfi_Form_Admin_FileManager_Import::newWith(['into' => $into->getRealpath()]);
$this->view->dimensions = array_filter(explode(';', Class_AdminVar::get('RESIZABLE_DIMENSIONS')));
sort($this->view->dimensions, SORT_NUMERIC);
$form->setAction($this->view->url());
if (!$this->_request->isPost())
return;
if($resized_file = $this->_getParam('ajax_resized_image'))
return $this->_ajaxUploadImage($resized_file, $into);
if (!$form->isValid($this->_request->getPost()))
return;
if(!$form->file->receive())
return;
$path = explode('/', $form->file->getFileName());
$filename = array_pop($path);
if(!$file = Class_FileManager::find($into->getId() . '/' . $filename))
return $this->_redirectWithMessage($this->_('Impossible de téléverser le fichier "%s".', $filename));
$message = $this->_('Fichier "%s" téléversé.', $file->getPath());
$this->_redirectToPathWithMessage($file->getPath(), $message);
}
protected function _ajaxUploadImage($resized_file, $into) {
$resized_file = str_replace('data:image/png;base64,', '', $resized_file);
$resized_file = str_replace(' ', '+', $resized_file);
$path = $into->getPath() . '/' . $this->_getParam('filename');
$message = Class_FileManager::createImage($path, base64_decode($resized_file))
? $this->_('Fichier "%s" téléversé.', $path)
: $this->_('Une erreur c\' produite. Le téléversage a échoué.');
$this->_helper->notify($message);
$this->_helper->json(['redirect' => $this->_getUrlWithNewPath($path)]);
}
public function resizeAction() {
$item = $this->_findItemFromParams();
if(!$item->isResizable())
return $this->_redirectWithMessage($this->_('"%s" n\'est pas redimensionnable.', $item->getName()));
$this->view->titre = $this->_('Redimensionner l\'image "%s"', $item->getName());
$this->view->item = $item;
$this->view->dimensions = array_filter(explode(';', Class_AdminVar::get('RESIZABLE_DIMENSIONS')));
sort($this->view->dimensions, SORT_NUMERIC);
}
public function resizeImageAction() {
$item = $this->_findItemFromParams();
$dimensions = $this->_getParam('dimensions');
$available_dimensions = Class_AdminVar::get('RESIZABLE_DIMENSIONS');
if(!in_array($dimensions, explode(';', $available_dimensions)))
return $this->_redirectWithMessage($this->_('Dimensions "%s" invalident. Les dimensions valident sont : %s .', $dimensions, $available_dimensions));
list($width, $height) = explode('x', $dimensions);
$message = (new Class_Notice_Thumbnail_ResizeImage)->resize($item->getRealpath(), $width, $height, null, true)
? $this->_('L\'image "%s" a été redimensionnée.', $item->getId())
: $this->_('Erreur. L\'image "%s" n\'a pas été redimensionnée.', $item->getId());
$this->_redirectWithMessage($message);
}
public function compressImageAction() {
$item = $this->_findItemFromParams();
list($width, $height) = explode('x', $item->getDimensions());
$message = (new Class_Notice_Thumbnail_ResizeImage)->resize($item->getRealpath(), $width, $height, null, true)
? $this->_('L\'image "%s" a été compressée.', $item->getId())
: $this->_('Erreur. L\'image "%s" n\'a pas été compressée.', $item->getId());
$this->_redirectWithMessage($message);
}
public function renameAction() {
$item = $this->_findItemFromParams();
$this->view->titre = $this->_('Renommer "%s"', $item->getBasename());
$this->view->form = $form = ZendAfi_Form_Admin_FileManager_Rename::newWith(['into' => $item->getRealpath(),
'name' => $item->getBasename()]);
$form->setAction($this->view->url());
if (!$this->_request->isPost())
return;
if (!$form->isValid($post = $this->_getPost()))
return;
$new_name= isset($post['name'])
? $post['name']
: $this->_getParam('name');
$new_name = $item->isFile()
? $new_name . '.' . $item->getExtension()
: $new_name;
$expected_destination = $item->getParentPath() . '/' . $new_name;
$message = ($success = Class_FileManager::rename($item, $expected_destination))
? $this->_('"%s" renommé en "%s".', $item->getBasename(), $new_name)
: $this->_('Erreur. Impossible de renommer "%s".', $item->getPath());
if($success)
$item->renameModels($expected_destination);
$this->_redirectWithMessage($message);
}
public function propertiesAction() {
$item = $this->view->item = $this->_findItemFromParams();
$this->view->titre = $this->_('Propriétés de "%s"', $item->getName());
}
protected function _findItemFromParams() {
$item_path = $this->_getParam('item');
if($item = Class_FileManager::find($item_path))
return $item;
return $this->_unknownPathError($item_path);
}
protected function _findIntoFromParams($item = null) {
$into_path = $this->_getParam('into');
if(!$into = Class_FileManager::find($into_path))
return $this->_unknownPathError($into_path);
if(!$into->isDir())
return $this->_forbiddenPathError($into_path);
if($item && $item->contains($into))
return $this->_forbiddenPathError($into_path);
return $into;
}
protected function _unknownPathError($path) {
return $this->_redirectWithMessage($this->_('Erreur. Le chemin "%s" n\'existe pas.', $path));
}
protected function _forbiddenPathError($path) {
return $this->_redirectWithMessage($this->_('Erreur. Impossible de faire cette opération vers "%s".', $path));
}
protected function _nothingToDo($item, $into) {
return $this->_redirectWithMessage($this->_('Vous ne pouvez pas copier ou déplacer un élément avec lui-même : "%s" est identique à "%s" .',
$item->getPath(),
$into->getPath()));
}
protected function _spaceFullError() {
return $this->_redirectWithMessage($this->_('Erreur. Vous ne pouvez pas téléverser un nouveau fichier car vous avez utilisé les "%s méga-octets" disponibles.', Class_AdminVar::get('ALLOWED_DISK_SPACE')));
}
protected function _redirectWithMessage($message) {
$this->_helper->notify($message);
return $this->_redirectClose($this->_getReferer());
}
protected function _redirectToPathWithMessage($path, $message) {
$this->_helper->notify($message);
$url = $this->_getUrlWithNewPath($path);
if (!$this->isPopupRequest())
return $this->_redirect($url);
$this->_popupJavascriptRedirectTo($url);
}
protected function _getUrlWithNewPath($path) {
return $this->view->url(['module' => 'admin',
'controller' => 'file-manager',
'action' => 'index',
'browser' => $this->_getParam('browser'),
'splitted_browser' => $this->_getParam('splitted_browser'),
'focused_browser' => $this->_getParam('focused_browser'),
'display_mode_browser' => $this->_getParam('display_mode_browser'),
'display_mode_splitted_browser' => $this->_getParam('display_mode_splitted_browser'),
$this->_getParam('focused_browser', 'browser') => $path,
], null, true);
}
}
<?php
echo $this->ajaxRedirect();
echo $this->ajaxRedirect($this->url);
?>
......@@ -10,12 +10,12 @@ $buttons = [$this->Button_Submit((new Class_Entity)
echo $this->renderForm($this->form, $buttons);
foreach($this->dimensions as $dimension)
echo $this->Button_Submit((new Class_Entity)
->setText($dimension)
->setAttribs(['style' => 'display: none;',
'class' => 'resize_image',
'onclick' => sprintf("$(this).resizeAndUpload('%s');", $dimension),
'title' => $this->_('Redimensionner en %s pixels puis téléverser', $dimension)]));
echo $this->button((new Class_Entity)
->setText($dimension)
->setAttribs(['style' => 'display: none;',
'class' => 'resize_image',
'onclick' => sprintf("$(this).resizeAndUpload('%s');", $dimension),
'title' => $this->_('Redimensionner en %s pixels puis téléverser', $dimension)]));
echo $this->tag('p', $this->_('Dimensions actuelles de l\'image en pixels: %s',
$this->tag('span', null)),
......@@ -25,4 +25,4 @@ echo $this->tag('img', '', ['id' => 'image_preview']);
echo $this->tag('i',
$this->_('Une erreur c\'est produite. Le téléversement ne sera pas effectué.'),
['style' => 'display: none;',
'id' => 'import_file_error']);
\ No newline at end of file
'id' => 'import_file_error']);
......@@ -35,11 +35,11 @@ class Class_DigitalResource_Controller extends ZendAfi_Controller_Action {
public function indexAction() {
if(!$user = Class_Users::getIdentity())
return $this->_javascriptAfterLoginRedirectTo($this->view->absoluteUrl(),
return $this->_afterLoginRedirectTo($this->view->absoluteUrl(),
$this->_('Vous devez vous connecter pour accéder à cette page'));
if(!$user->isAdmin())
$this->_javascriptRedirectToIndex($this->_('Vous devez être connecté avec un compte adminitrateur pour accéder à cette page'));
$this->_redirectToIndex($this->_('Vous devez être connecté avec un compte adminitrateur pour accéder à cette page'));
$this->view->titre = $this->_config->getName();
$this->view->config = $this->_config;
......@@ -49,7 +49,7 @@ class Class_DigitalResource_Controller extends ZendAfi_Controller_Action {
public function ssoAction() {
if(!$user = Class_Users::getIdentity())
return $this->_javascriptAfterLoginRedirectTo($this->view->absoluteUrl(),
return $this->_afterLoginRedirectTo($this->view->absoluteUrl(),
$this->_('Vous devez vous connecter pour accéder à cette page'));
$url = $this->_config->urlFor($user,
......@@ -58,6 +58,28 @@ class Class_DigitalResource_Controller extends ZendAfi_Controller_Action {
return $url
? $this->_javascriptRedirectTo($url)
: $this->_javascriptRedirectToIndex($this->_config->getNotAllowedMessage());
: $this->_redirectToIndex($this->_config->getNotAllowedMessage());
}
protected function _afterLoginRedirectTo($url, $message = null) {
if($message)
$this->_helper->notify($message);
$login_url = Class_Url::absolute(['module' => 'opac',
'controller' => 'auth',
'action' => 'login'],
null,
true);
$this->_redirect(sprintf('%s?redirect=%s', $login_url, rawurlencode($url)));
}
protected function _redirectToIndex($message = null) {
if($message)
$this->_helper->notify($message);
$this->_redirect($this->view->absoluteUrl([], null, true));
}
}
\ No newline at end of file
......@@ -182,7 +182,9 @@ class Class_Exemplaire extends Storm_Model_Abstract {
public function getTomeAlpha() {
return $this->getNotice()->getTomeAlpha();
return ($record = $this->getNotice())
? $record->getTomeAlpha()
: '';
}
......@@ -225,32 +227,44 @@ class Class_Exemplaire extends Storm_Model_Abstract {
public function getTitrePrincipal() {
return $this->getNotice()->getTitrePrincipal();
return ($record = $this->getNotice())
? $record->getTitrePrincipal()
: '';
}
public function getTitreEtSousTitre() {
return $this->getNotice()->getTitreEtSousTitre();
return ($record = $this->getNotice())
? $record->getTitreEtSousTitre()
: '';
}
public function getAuteurPrincipal() {
return $this->getNotice()->getAuteurPrincipal();
return ($record =$this->getNotice())
? $record->getAuteurPrincipal()
: '';
}
public function getEditeur() {
return $this->getNotice()->getEditeur();
return ($record = $this->getNotice())
? $record->getEditeur()
: '';
}
public function getCollectionPrincipale() {
return $this->getNotice()->getCollections(true);
return ($record = $this->getNotice())
? $record->getCollections(true)
: '';
}
public function getTypeDoc() {
return $this->getNotice()->getTypeDoc();
return ($record = $this->getNotice())
? $record->getTypeDoc()
: '';
}
......@@ -279,7 +293,7 @@ class Class_Exemplaire extends Storm_Model_Abstract {
public function isDisponible($cache_only = false) {
if ($this->getNotice()->isRessourceNumerique())
if ($this->getNotice() && $this->getNotice()->isRessourceNumerique())
return true;
if ($cache_only)
......@@ -334,7 +348,10 @@ class Class_Exemplaire extends Storm_Model_Abstract {
public function toUnimarcIso2709() {
$writer = new Class_NoticeUnimarc_Writer();
$writer->setNotice($this->getNotice()->getUnimarc());
$unimarc = ($record = $this->getNotice())
? $record->getUnimarc()
: '';
$writer->setNotice($unimarc);
$subfields = [];
foreach ($this->zone995toArray() as $subfield)
$subfields[] = [$this->get995Key($subfield), $subfield['valeur']];
......@@ -420,7 +437,9 @@ class Class_Exemplaire extends Storm_Model_Abstract {
public function isSigbLoanable() {
$record = $this->getNotice();
if(!$record = $this->getNotice())
return false;
return $this->isLoanable() && (!$record->isDilicom());
}
}
\ No newline at end of file
......@@ -112,9 +112,16 @@ class ZendAfi_Controller_Action extends Zend_Controller_Action {
protected function _javascriptRedirectToReferrer($message = null) {
$this->_popupJavascriptRedirectTo('', $message);
}
protected function _popupJavascriptRedirectTo($url, $message = null) {
if($message)
$this->_helper->notify($message);
$this->view->url = $url;
$this->getHelper('ViewRenderer')->renderScript('ajax_return.phtml');
}
......@@ -123,7 +130,7 @@ class ZendAfi_Controller_Action extends Zend_Controller_Action {
if (!$this->isPopupRequest())
return $this->_redirect($url, $options);
$this->_javascriptRedirectToReferrer();
$this->_popupJavascriptRedirectTo('');
}
......@@ -290,23 +297,6 @@ class ZendAfi_Controller_Action extends Zend_Controller_Action {
}
protected function _javascriptAfterLoginRedirectTo($url, $message = null) {
$login_url = Class_Url::absolute(['module' => 'opac',
'controller' => 'auth',
'action' => 'login'],
null,
true);
$this->_javascriptRedirectTo(sprintf('%s?redirect=%s', $login_url, rawurlencode($url)),
$message);
}
protected function _javascriptRedirectToIndex($message = null) {
$this->_javascriptRedirectTo($this->view->absoluteUrl([], null, true),
$message);
}
protected function _javascriptRedirectTo($url, $message = null) {
if($message)
$this->_helper->notify($message);
......
......@@ -127,303 +127,9 @@ class ZendAfi_Controller_Plugin_Manager_FileManager extends ZendAfi_Controller_P
}
public function dropAction() {
if(!$item = $this->_findItemFromParams())
return ;
if(!$into = $this->_findIntoFromParams($item))
return;