Commit 33deea3e authored by Ghislain Loas's avatar Ghislain Loas
Browse files

hotline #72468 move fileManager actions to dedicated file

parent 08e6783d
Pipeline #3644 failed with stage
in 31 minutes and 29 seconds
......@@ -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);
}
}
......@@ -127,324 +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;
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;
$message = Class_FileManager::delete($item)
? $this->_('"%s" supprimé.', $item->getPath())
: $this->_('Impossible de supprimer "%s".', $item->getPath());
$this->_redirectToPathWithMessage($item->getParentPath(), $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());