Files
grzanieplus.pl/plugins/sfAssetsLibraryPlugin/modules/sfAsset/lib/BasesfAssetActions.class.php
2025-03-12 17:06:23 +01:00

719 lines
25 KiB
PHP

<?php
class BasesfAssetActions extends sfActions
{
public function executeIndex()
{
$this->getUser()->getAttributeHolder()->remove('popup', 'sf_admin/sf_asset/navigation');
$this->redirect('sfAsset/list');
}
public function executeListPopup()
{
$this->setLayout(false);
// pobranie parametrow odnosnie katalogów
$tokens = split("/", $this->getRequest()->getUri());
$flag = false;
$path = "";
foreach($tokens as $token)
{
if (! $flag && $token != "media")
{
continue;
}
$flag = true;
$path .= "/".$token;
}
$folder = sfAssetFolderPeer::retrieveByPath($path);
$this->parent_folder = $path;
if(!$folder)
{
if ($this->getFlash('sfAsset_folder_not_found'))
{
throw new sfException('You must create a root folder. Use the `php symfony sfassetlibrary-create-root` command for that.');
}
else
{
if ($popup = $this->getRequestParameter('popup'))
{
$this->getUser()->setAttribute('popup', $popup, 'sf_admin/sf_asset/navigation');
}
$this->setFlash('sfAsset_folder_not_found', true);
$this->redirect('sfAsset/list');
}
}
$dirs = $folder->getChildren();
$c = new Criteria();
$c->add(sfAssetPeer::FOLDER_ID, $folder->getId());
$this->processSort();
$sortOrder = $this->getUser()->getAttribute('sort', 'name', 'sf_admin/sf_asset/sort');
switch($sortOrder)
{
case 'date':
$dirs = sfAssetFolderPeer::sortByDate($dirs);
$c->addDescendingOrderByColumn(sfAssetPeer::CREATED_AT);
break;
default:
$dirs = sfAssetFolderPeer::sortByName($dirs);
$c->addAscendingOrderByColumn(sfAssetPeer::FILENAME);
break;
}
$this->files = sfAssetPeer::doSelect($c);
$this->nb_files = count($this->files);
if($this->nb_files)
{
$total_size = 0;
foreach ($this->files as $file)
{
$total_size += $file->getFilesize();
}
$this->total_size = $total_size;
}
$this->dirs = $dirs;
$this->nb_dirs = count($dirs);
$this->folder = $folder;
$this->removeLayoutIfPopup();
return sfView::SUCCESS;
}
public function executeList()
{
// pobranie parametrow odnosnie katalogów
$tokens = split("/", $this->getRequest()->getUri());
$flag = false;
$path = "";
foreach($tokens as $token)
{
if (! $flag && $token != "media")
{
continue;
}
$flag = true;
$path .= "/".$token;
}
if($path == "")
{
$path = "media";
}
$folder = sfAssetFolderPeer::retrieveByPath($path);
$this->parent_folder = $path;
if(!$folder)
{
if ($this->getFlash('sfAsset_folder_not_found'))
{
throw new sfException('You must create a root folder. Use the `php symfony sfassetlibrary-create-root` command for that.');
}
else
{
if ($popup = $this->getRequestParameter('popup'))
{
$this->getUser()->setAttribute('popup', $popup, 'sf_admin/sf_asset/navigation');
}
$this->setFlash('sfAsset_folder_not_found', true);
$this->redirect('sfAsset/list');
}
}
$dirs = $folder->getChildren();
$c = new Criteria();
$c->add(sfAssetPeer::FOLDER_ID, $folder->getId());
$this->processSort();
$sortOrder = $this->getUser()->getAttribute('sort', 'name', 'sf_admin/sf_asset/sort');
switch($sortOrder)
{
case 'date':
$dirs = sfAssetFolderPeer::sortByDate($dirs);
$c->addDescendingOrderByColumn(sfAssetPeer::CREATED_AT);
break;
default:
$dirs = sfAssetFolderPeer::sortByName($dirs);
$c->addAscendingOrderByColumn(sfAssetPeer::FILENAME);
break;
}
$this->files = sfAssetPeer::doSelect($c);
$this->nb_files = count($this->files);
if($this->nb_files)
{
$total_size = 0;
foreach ($this->files as $file)
{
$total_size += $file->getFilesize();
}
$this->total_size = $total_size;
}
$this->dirs = $dirs;
$this->nb_dirs = count($dirs);
$this->folder = $folder;
$this->removeLayoutIfPopup();
return sfView::SUCCESS;
}
protected function processSort()
{
if ($this->getRequestParameter('sort'))
{
$this->getUser()->setAttribute('sort', $this->getRequestParameter('sort'), 'sf_admin/sf_asset/sort');
}
}
public function executeSearch()
{
// We keep the search params in the session for easier pagination
if ($this->getRequest()->hasParameter('search_params'))
{
$search_params = $this->getRequestParameter('search_params');
if (isset($search_params['created_at']['from']) && $search_params['created_at']['from'] !== '')
{
$search_params['created_at']['from'] = sfI18N::getTimestampForCulture($search_params['created_at']['from'], $this->getUser()->getCulture());
}
if (isset($search_params['created_at']['to']) && $search_params['created_at']['to'] !== '')
{
$search_params['created_at']['to'] = sfI18N::getTimestampForCulture($search_params['created_at']['to'], $this->getUser()->getCulture());
}
$this->getUser()->getAttributeHolder()->removeNamespace('sf_admin/sf_asset/search_params');
$this->getUser()->getAttributeHolder()->add($search_params, 'sf_admin/sf_asset/search_params');
}
$this->search_params = $this->getUser()->getAttributeHolder()->getAll('sf_admin/sf_asset/search_params');
$c = $this->processSearch();
$pager = new sfPropelPager('sfAsset', sfConfig::get('app_sfAssetsLibrary_search_pager_size', 20));
$pager->setCriteria($c);
$pager->setPage($this->getRequestParameter('page', 1));
$pager->setPeerMethod('doSelectJoinsfAssetFolder');
$pager->init();
$this->pager = $pager;
$this->removeLayoutIfPopup();
}
protected function processSearch()
{
$search_params = $this->search_params;
$c = new Criteria();
if (isset($search_params['path']) && $search_params['path'] !== '')
{
$folder = sfAssetFolderPeer::retrieveByPath($search_params['path']);
$c->addJoin(sfAssetPeer::FOLDER_ID, sfAssetFolderPeer::ID);
$c->add(sfAssetFolderPeer::TREE_LEFT, $folder->getTreeLeft(), Criteria::GREATER_EQUAL);
$c->add(sfAssetFolderPeer::TREE_RIGHT, $folder->getTreeRIGHT(), Criteria::LESS_EQUAL);
}
if (isset($search_params['name_is_empty']))
{
$criterion = $c->getNewCriterion(sfAssetPeer::FILENAME, '');
$criterion->addOr($c->getNewCriterion(sfAssetPeer::FILENAME, null, Criteria::ISNULL));
$c->add($criterion);
}
else if (isset($search_params['name']) && $search_params['name'] !== '')
{
$c->add(sfAssetPeer::FILENAME, '%'.trim($search_params['name'], '*%').'%', Criteria::LIKE);
}
if (isset($search_params['author_is_empty']))
{
$criterion = $c->getNewCriterion(sfAssetPeer::AUTHOR, '');
$criterion->addOr($c->getNewCriterion(sfAssetPeer::AUTHOR, null, Criteria::ISNULL));
$c->add($criterion);
}
else if (isset($search_params['author']) && $search_params['author'] !== '')
{
$c->add(sfAssetPeer::AUTHOR, '%'.trim($search_params['author'], '*%').'%', Criteria::LIKE);
}
if (isset($search_params['copyright_is_empty']))
{
$criterion = $c->getNewCriterion(sfAssetPeer::COPYRIGHT, '');
$criterion->addOr($c->getNewCriterion(sfAssetPeer::COPYRIGHT, null, Criteria::ISNULL));
$c->add($criterion);
}
else if (isset($search_params['copyright']) && $search_params['copyright'] !== '')
{
$c->add(sfAssetPeer::COPYRIGHT, '%'.trim($search_params['copyright'], '*%').'%', Criteria::LIKE);
}
if (isset($search_params['created_at']))
{
if (isset($search_params['created_at']['from']) && $search_params['created_at']['from'] !== '')
{
$criterion = $c->getNewCriterion(sfAssetPeer::CREATED_AT, $search_params['created_at']['from'], Criteria::GREATER_EQUAL);
}
if (isset($search_params['created_at']['to']) && $search_params['created_at']['to'] !== '')
{
if (isset($criterion))
{
$criterion->addAnd($c->getNewCriterion(sfAssetPeer::CREATED_AT, $search_params['created_at']['to'], Criteria::LESS_EQUAL));
}
else
{
$criterion = $c->getNewCriterion(sfAssetPeer::CREATED_AT, $search_params['created_at']['to'], Criteria::LESS_EQUAL);
}
}
if (isset($criterion))
{
$c->add($criterion);
}
}
if (isset($search_params['description_is_empty']))
{
$criterion = $c->getNewCriterion(sfAssetPeer::DESCRIPTION, '');
$criterion->addOr($c->getNewCriterion(sfAssetPeer::DESCRIPTION, null, Criteria::ISNULL));
$c->add($criterion);
}
else if (isset($search_params['description']) && $search_params['description'] !== '')
{
$c->add(sfAssetPeer::DESCRIPTION, '%'.trim($search_params['description'], '*%').'%', Criteria::LIKE);
}
$this->processSort();
$sortOrder = $this->getUser()->getAttribute('sort', 'name', 'sf_admin/sf_asset/sort');
switch($sortOrder)
{
case 'date':
$c->addDescendingOrderByColumn(sfAssetPeer::CREATED_AT);
break;
default:
$c->addAscendingOrderByColumn(sfAssetPeer::FILENAME);
break;
}
return $c;
}
public function validateCreateFolder()
{
$valid = true;
$parentFolder = sfAssetFolderPeer::retrieveByPath($this->getRequestParameter('parent_folder'));
if(!$parentFolder)
{
$this->getRequest()->setError('parent_folder', 'Yopu must provide a valid parent folder');
$valid = false;
}
$name = $this->getRequestParameter('name');
$children = $parentFolder->getChildren();
foreach ($children as $dir)
{
if(sfConfig::get('app_sfAssetsLibrary_case_sensitive_filesystem', true))
{
$test = (strtolower($dir->getName()) == strtolower($name));
}
else
{
$test = ($dir->getName() == $name);
}
if($test)
{
$this->getRequest()->setError('name', 'A directory with this name already exists there');
$valid = false;
}
}
$this->parentFolder = $parentFolder;
return $valid;
}
public function handleErrorCreateFolder()
{
return sfView::SUCCESS;
}
public function executeCreateFolder()
{
if($this->getRequest()->getMethod() == sfRequest::POST)
{
// Handle the form submission
$parentFolder = sfAssetFolderPeer::retrieveByPath($this->getRequestParameter('parent_folder'));
$this->forward404Unless($parentFolder);
$folder = new sfAssetFolder();
$folder->setName($this->getRequestParameter('name'));
$folder->insertAsLastChildOf($this->parentFolder);
$folder->save();
$this->redirectToPath('sfAsset/list?dir='.$folder->getRelativePath());
}
else
{
// Display the form
return sfView::SUCCESS;
}
}
public function executeMoveFolder()
{
$this->forward404Unless($this->getRequest()->getMethod() == sfRequest::POST);
$folder = sfAssetFolderPeer::retrieveByPk($this->getRequestParameter('id'));
$this->forward404Unless($folder);
$targetFolder = sfAssetFolderPeer::retrieveByPath($this->getRequestParameter('new_folder'));
try
{
$folder->move($targetFolder);
$this->setFlash('notice', 'The folder has been moved');
}
catch (sfAssetException $e)
{
$this->setFlash('warning_message', $e->getMessage());
$this->setFlash('warning_params', $e->getMessageParams());
}
return $this->redirectToPath('sfAsset/list?dir=' . $folder->getRelativePath());
}
public function executeRenameFolder()
{
$this->forward404Unless($this->getRequest()->getMethod() == sfRequest::POST);
$folder = sfAssetFolderPeer::retrieveByPk($this->getRequestParameter('id'));
$this->forward404Unless($folder);
$newName = $this->getRequestParameter('new_name');
try
{
$folder->rename($newName);
$this->setFlash('notice', 'Nazwa katalogu została zmieniona');
}
catch (sfAssetException $e)
{
$this->setFlash('warning_message', $e->getMessage());
$this->setFlash('warning_params', $e->getMessageParams());
}
return $this->redirectToPath('sfAsset/list?dir=' . $folder->getRelativePath());
}
public function executeDeleteFolder()
{
$this->forward404Unless($this->getRequest()->getMethod() == sfRequest::POST);
$folder = sfAssetFolderPeer::retrieveByPk($this->getRequestParameter('id'));
$this->forward404Unless($folder);
try
{
$folder->delete();
$this->setFlash('notice', 'The folder has been deleted');
}
catch (sfAssetException $e)
{
$this->setFlash('warning_message', $e->getMessage());
$this->setFlash('warning_params', $e->getMessageParams());
}
return $this->redirectToPath('sfAsset/list?dir=' . $folder->getParentPath());
}
public function executeAddQuick()
{
$folder = sfAssetFolderPeer::retrieveByPath($this->getRequestParameter('parent_folder'));
$this->forward404Unless($folder);
try
{
$asset = new sfAsset();
$asset->setsfAssetFolder($folder);
$asset->setDescription($this->getRequest()->getFileName('new_file'));
try
{
$asset->setAuthor($this->getUser()->getUsername());
}
catch(sfException $e)
{
// no getUsername() method in sfUser, all right: do nothing
}
$asset->setFilename($this->getRequest()->getFileName('new_file'));
$asset->create($this->getRequest()->getFilePath('new_file'));
$asset->save();
}
catch(sfAssetException $e)
{
$this->setFlash('warning_message', $e->getMessage());
$this->setFlash('warning_params', $e->getMessageParams());
$this->redirectToPath('sfAsset/list?dir='.$folder->getRelativePath());
}
if($this->getUser()->hasAttribute('popup', 'sf_admin/sf_asset/navigation'))
{
if($this->getUser()->getAttribute('popup', null, 'sf_admin/sf_asset/navigation') == 1)
{
$this->redirect('sfAsset/tinyConfigMedia?id='.$asset->getId());
}
else
{
$this->redirectToPath('sfAsset/list?dir='.$folder->getRelativePath());
}
}
$this->redirectToPath('sfAsset/list?dir='.$folder->getRelativePath());
//$this->redirect('sfAsset/edit?id='.$asset->getId());
}
public function executeMassUpload()
{
if($this->getRequest()->getMethod() == sfRequest::POST)
{
$folder = sfAssetFolderPeer::retrieveByPath($this->getRequestParameter('parent_folder'));
$this->forward404Unless($folder);
try
{
$nbFiles = 0;
for ($i = 1; $i <= sfConfig::get('app_sfAssetsLibrary_mass_upload_size', 5) ; $i++)
{
if ($filename = $this->getRequest()->getFileName('files['.$i.']'))
{
$asset = new sfAsset();
$asset->setsfAssetFolder($folder);
$asset->setDescription($filename);
try
{
$asset->setAuthor($this->getUser()->getUsername());
}
catch(sfException $e)
{
// no getUsername() method in sfUser, all right: do nothing
}
$asset->setFilename($filename);
$asset->create($this->getRequest()->getFilePath('files['.$i.']'));
$asset->save();
$nbFiles++;
}
}
}
catch(sfAssetException $e)
{
$this->setFlash('warning_message', $e->getMessage());
$this->setFlash('warning_params', $e->getMessageParams());
$this->redirectToPath('sfAsset/list?dir='.$folder->getRelativePath());
}
$this->setFlash('notice', 'Files successfully uploaded');
$this->redirectToPath('sfAsset/list?dir='.$folder->getRelativePath());
}
}
public function executeDeleteAsset()
{
$sf_asset = sfAssetPeer::retrieveByPk($this->getRequestParameter('id'));
$this->forward404Unless($sf_asset);
$folderPath = $sf_asset->getFolderPath();
try
{
$sf_asset->delete();
}
catch (PropelException $e)
{
$this->getRequest()->setError('delete', 'Impossible to delete asset, probably due to related records');
return $this->forward('sfAsset', 'edit');
}
return $this->redirectToPath('sfAsset/list?dir='.$folderPath);
}
public function executeCreate()
{
return $this->forward('sfAsset', 'edit');
}
public function executeSave()
{
return $this->forward('sfAsset', 'edit');
}
public function handleErrorEdit()
{
$this->preExecute();
$this->sf_asset = $this->getsfAssetOrCreate();
$this->updatesfAssetFromRequest();
$this->labels = $this->getLabels();
return sfView::SUCCESS;
}
public function executeEdit()
{
$this->sf_asset = $this->getsfAssetOrCreate();
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->updatesfAssetFromRequest();
$this->sf_asset->save();
$this->setFlash('notice', 'Twoje zmiany zostały zapisane.');
return $this->redirect('sfAsset/edit?id='.$this->sf_asset->getId());
}
}
public function executeMoveAsset()
{
$this->forward404Unless($this->getRequest()->getMethod() == sfRequest::POST);
$sf_asset = sfAssetPeer::retrieveByPk($this->getRequestParameter('id'));
$this->forward404Unless($sf_asset);
$folder = sfAssetFolderPeer::retrieveByPath($this->getRequestParameter('new_folder'));
$this->forward404Unless($folder);
if ($folder->getId() != $sf_asset->getFolderId())
{
try
{
$sf_asset->move($folder);
$sf_asset->save();
$this->setFlash('notice', 'The file has been moved');
}
catch(sfAssetException $e)
{
$this->setFlash('warning_message', $e->getMessage());
$this->setFlash('warning_params', $e->getMessageParams());
}
}
else
{
$this->setFlash('warning', 'The target folder is the same as the original folder. The asset has not been moved.');
}
return $this->redirect('sfAsset/edit?id='.$sf_asset->getId());
}
public function executeRenameAsset()
{
$this->forward404Unless($this->getRequest()->getMethod() == sfRequest::POST);
$sf_asset = sfAssetPeer::retrieveByPk($this->getRequestParameter('id'));
$this->forward404Unless($sf_asset);
$name = $this->getRequestParameter('new_name').".".$this->getRequestParameter('new_name_ext');
$this->forward404Unless($name);
if ($sf_asset->getFilename() != $name)
{
try
{
$sf_asset->move($sf_asset->getsfAssetFolder(), $name);
$sf_asset->save();
$this->setFlash('notice', 'The file has been renamed');
}
catch(sfAssetException $e)
{
$this->setFlash('warning_message', $e->getMessage());
$this->setFlash('warning_params', $e->getMessageParams());
}
}
else
{
$this->setFlash('notice', 'The target name is the same as the original name. The asset has not been renamed.');
}
return $this->redirect('sfAsset/edit?id='.$sf_asset->getId());
}
public function executeReplaceAsset()
{
$this->forward404Unless($this->getRequest()->getMethod() == sfRequest::POST);
$sf_asset = sfAssetPeer::retrieveByPk($this->getRequestParameter('id'));
$this->forward404Unless($sf_asset);
if ($uploaded_filename = $this->getRequest()->getFileName('new_file'))
{
// physically replace asset
$sf_asset->destroy();
$sf_asset->create($this->getRequest()->getFilePath('new_file'), true, false);
}
$this->setFlash('notice', 'The file has been replaced');
return $this->redirect('sfAsset/edit?id='.$sf_asset->getId());
}
protected function updatesfAssetFromRequest()
{
$sf_asset = $this->getRequestParameter('sf_asset');
if (isset($sf_asset['description']))
{
$this->sf_asset->setDescription($sf_asset['description']);
}
if (isset($sf_asset['author']))
{
$this->sf_asset->setAuthor($sf_asset['author']);
}
if (isset($sf_asset['copyright']))
{
$this->sf_asset->setCopyright($sf_asset['copyright']);
}
if (isset($sf_asset['type']))
{
$this->sf_asset->setType($sf_asset['type']);
}
}
protected function removeLayoutIfPopup()
{
if ($popup = $this->getRequestParameter('popup'))
{
$this->getUser()->setAttribute('popup', $popup, 'sf_admin/sf_asset/navigation');
}
if($this->getUser()->hasAttribute('popup', 'sf_admin/sf_asset/navigation'))
{
$this->setLayout(sfLoader::getTemplateDir('sfAsset', 'popupLayout.php').DIRECTORY_SEPARATOR.'popupLayout');
$this->popup = true;
}
else
{
$this->popup = false;
}
}
protected function getsfAssetOrCreate($id = 'id')
{
if (!$this->getRequestParameter($id))
{
$sf_asset = new sfAsset();
}
else
{
$sf_asset = sfAssetPeer::retrieveByPk($this->getRequestParameter($id));
$this->forward404Unless($sf_asset);
}
return $sf_asset;
}
protected function redirectToPath($path, $statusCode = 302)
{
$url = $this->getController()->genUrl($path, true);
$url = str_replace('%2F', '/', $url);
if (sfConfig::get('sf_logging_enabled'))
{
$this->getContext()->getLogger()->info('{sfAction} redirect to "'.$url.'"');
}
$this->getController()->redirect($url, 0, $statusCode);
throw new sfStopException();
}
public function executeTinyConfigMedia()
{
$this->forward404Unless($this->hasRequestParameter('id'));
$this->sf_asset = sfAssetPeer::retrieveByPk($this->getRequestParameter('id'));
$this->forward404Unless($this->sf_asset);
$this->setLayout(sfLoader::getTemplateDir('sfAsset', 'popupLayout.php').'/popupLayout');
return sfView::SUCCESS;
}
}