Source of file CMSSecuredFileAddController.php
Size: 5,401 Bytes - Last Modified: 2021-12-24T06:44:15+00:00
/var/www/docs.ssmods.com/process/src/code/controllers/CMSSecuredFileAddController.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | <?php /** * * Specific controller used to add files to the advanced-assets CMS UI, that are secured. * * @author Deviate Ltd 2014-2015 http://www.deviate.net.nz * @package silverstripe-advancedassets * @todo Modify addFolder() and initValidate() to show messages within the CMS. */ class CMSSecuredFileAddController extends CMSFileAddController { private static $url_segment = 'advanced-assets/add'; private static $url_priority = 65; private static $required_permission_codes = 'CMS_ACCESS_SecuredAssetAdmin'; private static $menu_title = 'Advanced Assets'; private static $tree_class = 'Folder'; public function init() { parent::init(); if($this->request->requestVar('ID') && is_numeric($this->request->requestVar('ID'))) { $this->setCurrentPageID($this->request->requestVar('ID')); } $this->initValidate(); } /** * * Intial validation of incoming CMS requests before we do anything useful. * * @return SS_HTTPResponse * @todo Refactor into single static. There are v.close dupes of this in the other controllers. */ public function initValidate() { $folderId = SecuredFilesystem::get_numeric_identifier($this, 'ID'); if ($folderId) { $folder = DataObject::get_by_id("Folder", $folderId); if ($folder && $folder->exists()) { if (!$folder->Secured) { $message = _t('SecuredFilesystem.messages.ERROR_ACCESS_ONLY_IN_FILES'); return SecuredFilesystem::show_access_message($this, $message); } if (!$folder->canEdit()) { $message = _t('SecuredFilesystem.messages.ERROR_FOLDER_NO_ACCESS'); return SecuredFilesystem::show_access_message($this, $message); } } else { $message = _t('SecuredFilesystem.messages.ERROR_FOLDER_NOT_EXISTS'); return SecuredFilesystem::show_access_message($this, $message); } } } /** * * Custom currentPage() method to handle opening the 'root' folder. * * @return Folder */ public function currentPage() { $id = $this->currentPageID(); if ($id && is_numeric($id) && $id > 0) { $folder = DataObject::get_by_id('Folder', $id); if ($folder && $folder->exists()) { return $folder; } } else { SecuredAssetAdmin::instantiate(); $root = FileSecured::getSecuredRoot(); if ($root && $root->exists()) { return $root; } else { return new Folder(array("Secured"=>true)); } } } /** * * Return fake-ID "root" if no ID is found (needed to upload files into the root-folder) * * @return mixed (string | number) */ public function currentPageID() { if (is_numeric($this->request->requestVar('ID'))) { return $this->request->requestVar('ID'); } elseif (is_numeric($this->urlParams['ID'])) { return $this->urlParams['ID']; } elseif (Session::get("{$this->class}.currentPage")) { return Session::get("{$this->class}.currentPage"); } else { $securedRoot = FileSecured::getSecuredRoot(); if ($securedRoot && $securedRoot->exists()) { return $securedRoot->ID; } else { SecuredAssetAdmin::instantiate(); $securedRoot = FileSecured::getSecuredRoot(); return $securedRoot->ID; } } } /** * * @param number $id Not used. * @param FieldList $fields Not used. * @return Form * @todo what template is used here? AssetAdmin_UploadContent.ss doesn't seem to be used anymore */ public function getEditForm($id = null, $fields = null) { $form = parent::getEditForm($id, $fields); $folder = $this->currentPage(); $backLink = LiteralField::create( 'BackLink', sprintf( '<a href="%s" class="backlink ss-ui-button cms-panel-link" data-icon="back">%s</a>', Controller::join_links(singleton('SecuredAssetAdmin')->Link('show'), $folder->ID), _t('AssetAdmin.BackToFolder', 'Back to folder') ) ); $fields = $form->Fields(); $fields->removeByName("BackLink"); $fields->push($backLink); return $form; } /** * * @param boolean $unlinked * @return ArrayList */ public function Breadcrumbs($unlinked = false) { $itemsDefault = parent::Breadcrumbs($unlinked); $items = new ArrayList(); $i = 0; $originalLink = singleton('AssetAdmin')->Link('show'); $changedLink = singleton('SecuredAssetAdmin')->Link('show'); foreach ($itemsDefault as $item) { if ($i!==0) { $item->Link = str_replace($originalLink, $changedLink, $item->Link); $items->push($item); } $i++; } if (isset($items[0]->Title)) { $items[0]->Title = _t("SECUREDASSETADMIN.SecuriedFiles", "Advanced Assets"); } return $items; } } |