mirror of
https://github.com/silverstripe/silverstripe-cms
synced 2024-10-22 08:05:56 +02:00
MINOR Fixed merge errors
This commit is contained in:
parent
a220d37e3b
commit
495e15be9f
@ -24,8 +24,6 @@ class AssetAdmin extends LeftAndMain {
|
|||||||
|
|
||||||
static $allowed_actions = array(
|
static $allowed_actions = array(
|
||||||
'addfolder',
|
'addfolder',
|
||||||
'deletefolder',
|
|
||||||
'deletemarked',
|
|
||||||
'DeleteItemsForm',
|
'DeleteItemsForm',
|
||||||
'doUpload',
|
'doUpload',
|
||||||
'getsubtree',
|
'getsubtree',
|
||||||
@ -36,8 +34,7 @@ class AssetAdmin extends LeftAndMain {
|
|||||||
'uploadiframe',
|
'uploadiframe',
|
||||||
'UploadForm',
|
'UploadForm',
|
||||||
'deleteUnusedThumbnails' => 'ADMIN',
|
'deleteUnusedThumbnails' => 'ADMIN',
|
||||||
'batchactions',
|
'SyncForm',
|
||||||
'BatchActionsForm',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -294,6 +291,71 @@ JS
|
|||||||
HTML;
|
HTML;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a new group and return its details suitable for ajax.
|
||||||
|
*
|
||||||
|
* @todo Move logic into Folder class, and use LeftAndMain->doAdd() default implementation.
|
||||||
|
*/
|
||||||
|
public function doAdd($data, $form) {
|
||||||
|
$class = $this->stat('tree_class');
|
||||||
|
|
||||||
|
// check create permissions
|
||||||
|
if(!singleton($class)->canCreate()) return Security::permissionFailure($this);
|
||||||
|
|
||||||
|
// check addchildren permissions
|
||||||
|
if(
|
||||||
|
singleton($class)->hasDatabaseField('Hierarchy')
|
||||||
|
&& isset($data['ParentID'])
|
||||||
|
&& is_numeric($data['ParentID'])
|
||||||
|
) {
|
||||||
|
$parentRecord = DataObject::get_by_id($class, $data['ParentID']);
|
||||||
|
if(
|
||||||
|
$parentRecord->hasMethod('canAddChildren')
|
||||||
|
&& !$parentRecord->canAddChildren()
|
||||||
|
) return Security::permissionFailure($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
$parent = (isset($data['ParentID']) && is_numeric($data['ParentID'])) ? (int)$data['ParentID'] : 0;
|
||||||
|
$name = (isset($data['Name'])) ? basename($data['Name']) : _t('AssetAdmin.NEWFOLDER',"NewFolder");
|
||||||
|
if(!isset($parentRecord) || !$parentRecord->ID) $parent = 0;
|
||||||
|
|
||||||
|
// Get the folder to be created
|
||||||
|
if(isset($parentRecord->ID)) $filename = $parentRecord->FullPath . $name;
|
||||||
|
else $filename = ASSETS_PATH . '/' . $name;
|
||||||
|
|
||||||
|
// Actually create
|
||||||
|
if(!file_exists(ASSETS_PATH)) {
|
||||||
|
mkdir(ASSETS_PATH);
|
||||||
|
}
|
||||||
|
|
||||||
|
$record = new Folder();
|
||||||
|
$record->ParentID = $parent;
|
||||||
|
|
||||||
|
// Ensure uniqueness
|
||||||
|
$i = 2;
|
||||||
|
$baseFilename = substr($record->Filename, 0, -1) . '-';
|
||||||
|
while(file_exists($record->FullPath)) {
|
||||||
|
$record->Filename = $baseFilename . $i . '/';
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$record->Name = $record->Title = basename($record->Filename);
|
||||||
|
$record->write();
|
||||||
|
|
||||||
|
mkdir($record->FullPath);
|
||||||
|
chmod($record->FullPath, Filesystem::$file_create_mask);
|
||||||
|
|
||||||
|
// Used in TinyMCE inline folder creation
|
||||||
|
if(isset($data['returnID'])) {
|
||||||
|
return $record->ID;
|
||||||
|
} else if($this->isAjax()) {
|
||||||
|
$form = $this->getEditForm($record->ID);
|
||||||
|
return $form->formHtmlContent();
|
||||||
|
} else {
|
||||||
|
return $this->redirect(Controller::join_links($this->Link('show'), $record->ID));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom currentPage() method to handle opening the 'root' folder
|
* Custom currentPage() method to handle opening the 'root' folder
|
||||||
*/
|
*/
|
||||||
@ -306,200 +368,22 @@ HTML;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the form that displays the details of a folder, including a file list and fields for editing the folder name.
|
|
||||||
*/
|
|
||||||
function getEditForm($id = null) {
|
|
||||||
if($id && $id != "root") {
|
|
||||||
$record = DataObject::get_by_id("File", $id);
|
|
||||||
} else {
|
|
||||||
$record = singleton("Folder");
|
|
||||||
}
|
|
||||||
|
|
||||||
if($record) {
|
|
||||||
$fields = $record->getCMSFields();
|
|
||||||
$actions = new FieldSet();
|
|
||||||
|
|
||||||
// Only show save button if not 'assets' folder
|
|
||||||
if($record->canEdit() && $id != 'root') {
|
|
||||||
$actions = new FieldSet(
|
|
||||||
new FormAction('save',_t('AssetAdmin.SAVEFOLDERNAME','Save folder name'))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$form = new Form($this, "EditForm", $fields, $actions);
|
|
||||||
if($record->ID) {
|
|
||||||
$form->loadDataFrom($record);
|
|
||||||
} else {
|
|
||||||
$form->loadDataFrom(array(
|
|
||||||
"ID" => "root",
|
|
||||||
"URL" => Director::absoluteBaseURL() . 'assets/',
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$record->canEdit()) {
|
|
||||||
$form->makeReadonly();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->extend('updateEditForm', $form);
|
|
||||||
|
|
||||||
return $form;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getSiteTreeFor($className, $rootID = null, $childrenMethod = null, $numChildrenMethod = null, $filterFunction = null, $minNodeCount = 30) {
|
function getSiteTreeFor($className, $rootID = null, $childrenMethod = null, $numChildrenMethod = null, $filterFunction = null, $minNodeCount = 30) {
|
||||||
if (!$childrenMethod) $childrenMethod = 'ChildFolders';
|
if (!$childrenMethod) $childrenMethod = 'ChildFolders';
|
||||||
return parent::getSiteTreeFor($className, $rootID, $childrenMethod, $numChildrenMethod, $filterFunction, $minNodeCount);
|
return parent::getSiteTreeFor($className, $rootID, $childrenMethod, $numChildrenMethod, $filterFunction, $minNodeCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Perform the "delete marked" action.
|
|
||||||
* Called and returns in same way as 'save' function
|
|
||||||
*/
|
|
||||||
public function deletemarked($urlParams, $form) {
|
|
||||||
$fileList = "'" . ereg_replace(' *, *',"','",trim(addslashes($_REQUEST['FileIDs']))) . "'";
|
|
||||||
$numFiles = 0;
|
|
||||||
$folderID = 0;
|
|
||||||
$deleteList = '';
|
|
||||||
$brokenPageList = '';
|
|
||||||
|
|
||||||
if($fileList != "''") {
|
|
||||||
$files = DataObject::get("File", "\"File\".\"ID\" IN ($fileList)");
|
|
||||||
if($files) {
|
|
||||||
$brokenPages = array();
|
|
||||||
foreach($files as $file) {
|
|
||||||
$brokenPages = array_merge($brokenPages, $file->BackLinkTracking()->toArray());
|
|
||||||
if($file instanceof Image) {
|
|
||||||
$file->deleteFormattedImages();
|
|
||||||
}
|
|
||||||
if(!$folderID) {
|
|
||||||
$folderID = $file->ParentID;
|
|
||||||
}
|
|
||||||
$file->delete();
|
|
||||||
$numFiles++;
|
|
||||||
}
|
|
||||||
if($brokenPages) {
|
|
||||||
$brokenPageList = " ". _t('AssetAdmin.NOWBROKEN', 'These pages now have broken links:') . '</ul>';
|
|
||||||
foreach($brokenPages as $brokenPage) {
|
|
||||||
$brokenPageList .= "<li style="font-size: 65%">" . $brokenPage->Breadcrumbs(3, true) . '</li>';
|
|
||||||
}
|
|
||||||
$brokenPageList .= '</ul>';
|
|
||||||
} else {
|
|
||||||
$brokenPageList = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
$deleteList = '';
|
|
||||||
if($folderID) {
|
|
||||||
$remaining = DB::query("SELECT COUNT(*) FROM \"File\" WHERE \"ParentID\" = $folderID")->value();
|
|
||||||
if(!$remaining) $deleteList .= "Element.removeClassName(\$('sitetree').getTreeNodeByIdx('$folderID').getElementsByTagName('a')[0],'contents');";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
user_error("No files in $fileList could be found!", E_USER_ERROR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$message = sprintf(_t('AssetAdmin.DELETEDX',"Deleted %s files.%s"),$numFiles,$brokenPageList) ;
|
|
||||||
|
|
||||||
FormResponse::add($deleteList);
|
|
||||||
FormResponse::status_message($message, "good");
|
|
||||||
FormResponse::add("$('Form_EditForm').getPageFromServer($('Form_EditForm_ID').value)");
|
|
||||||
|
|
||||||
return FormResponse::respond();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCMSTreeTitle() {
|
public function getCMSTreeTitle() {
|
||||||
return Director::absoluteBaseURL() . "assets";
|
return Director::absoluteBaseURL() . "assets";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Action handler for the save button on the file subform.
|
|
||||||
* Saves the file
|
|
||||||
*/
|
|
||||||
public function savefile($data, $form) {
|
|
||||||
$record = DataObject::get_by_id("File", $data['ID']);
|
|
||||||
$form->saveInto($record);
|
|
||||||
$record->write();
|
|
||||||
$title = Convert::raw2js($record->Title);
|
|
||||||
$name = Convert::raw2js($record->Name);
|
|
||||||
$saved = sprintf(_t('AssetAdmin.SAVEDFILE','Saved file %s'),"#$data[ID]");
|
|
||||||
echo <<<JS
|
|
||||||
statusMessage('$saved');
|
|
||||||
$('record-$data[ID]').getElementsByTagName('td')[1].innerHTML = "$title";
|
|
||||||
$('record-$data[ID]').getElementsByTagName('td')[2].innerHTML = "$name";
|
|
||||||
JS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function sync() {
|
|
||||||
echo Filesystem::sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the entire site tree as a nested UL.
|
|
||||||
* @return string HTML for site tree
|
|
||||||
*/
|
|
||||||
public function SiteTreeAsUL() {
|
public function SiteTreeAsUL() {
|
||||||
$obj = singleton('Folder');
|
return $this->getSiteTreeFor($this->stat('tree_class'), null, 'ChildFolders');
|
||||||
$obj->setMarkingFilter('ClassName', ClassInfo::subclassesFor('Folder'));
|
|
||||||
$obj->markPartialTree(30, null, "ChildFolders");
|
|
||||||
|
|
||||||
if($p = $this->currentPage()) $obj->markToExpose($p);
|
|
||||||
|
|
||||||
// getChildrenAsUL is a flexible and complex way of traversing the tree
|
|
||||||
$siteTreeList = $obj->getChildrenAsUL(
|
|
||||||
'',
|
|
||||||
'"<li id=\"record-$child->ID\" class=\"$child->class" . $child->markingClasses() . ($extraArg->isCurrentPage($child) ? " current" : "") . "\">" . ' .
|
|
||||||
'"<a href=\"" . Controller::join_links(substr($extraArg->Link(),0,-1), "show", $child->ID) . "\" class=\"" . ($child->hasChildFolders() ? " contents" : "") . "\" >" . $child->TreeTitle() . "</a>" ',
|
|
||||||
$this,
|
|
||||||
true,
|
|
||||||
"ChildFolders"
|
|
||||||
);
|
|
||||||
|
|
||||||
// Wrap the root if needs be
|
|
||||||
$rootLink = $this->Link() . 'show/root';
|
|
||||||
$baseUrl = Director::absoluteBaseURL() . "assets";
|
|
||||||
if(!isset($rootID)) {
|
|
||||||
$siteTree = "<ul id=\"sitetree\" class=\"tree unformatted\"><li id=\"record-root\" class=\"Root\"><a href=\"$rootLink\"><strong>{$baseUrl}</strong></a>"
|
|
||||||
. $siteTreeList . "</li></ul>";
|
|
||||||
}
|
|
||||||
|
|
||||||
return $siteTree;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a subtree of items underneat the given folder.
|
|
||||||
*/
|
|
||||||
public function getsubtree() {
|
|
||||||
$obj = DataObject::get_by_id('Folder', $_REQUEST['ID']);
|
|
||||||
$obj->setMarkingFilter('ClassName', ClassInfo::subclassesFor('Folder'));
|
|
||||||
$obj->markPartialTree();
|
|
||||||
|
|
||||||
$results = $obj->getChildrenAsUL(
|
|
||||||
'',
|
|
||||||
'"<li id=\"record-$child->ID\" class=\"$child->class" . $child->markingClasses() . ($extraArg->isCurrentPage($child) ? " current" : "") . "\">" . ' .
|
|
||||||
'"<a href=\"" . Controller::join_links(substr($extraArg->Link(),0,-1), "show", $child->ID) . "\" >" . $child->TreeTitle() . "</a>" ',
|
|
||||||
$this,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
return substr(trim($results), 4, -5);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------//
|
//------------------------------------------------------------------------------------------//
|
||||||
|
|
||||||
// Data saving handlers
|
// Data saving handlers
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a new folder and return its details suitable for ajax.
|
|
||||||
*/
|
|
||||||
public function addfolder($request) {
|
|
||||||
// Protect against CSRF on destructive action
|
|
||||||
if(!SecurityToken::inst()->checkRequest($request)) return $this->httpError(400);
|
|
||||||
|
|
||||||
$parent = ($_REQUEST['ParentID'] && is_numeric($_REQUEST['ParentID'])) ? (int)$_REQUEST['ParentID'] : 0;
|
|
||||||
$name = (isset($_REQUEST['Name'])) ? basename($_REQUEST['Name']) : _t('AssetAdmin.NEWFOLDER',"NewFolder");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Form
|
* @return Form
|
||||||
*/
|
*/
|
||||||
@ -521,76 +405,6 @@ JS;
|
|||||||
return $form;
|
return $form;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a folder
|
|
||||||
*/
|
|
||||||
public function deletefolder($data, $form) {
|
|
||||||
$ids = split(' *, *', $_REQUEST['csvIDs']);
|
|
||||||
|
|
||||||
if(!$ids) return false;
|
|
||||||
$script = '';
|
|
||||||
|
|
||||||
foreach($ids as $id) {
|
|
||||||
if(is_numeric($id)) {
|
|
||||||
$record = DataObject::get_by_id($this->stat('tree_class'), $id);
|
|
||||||
if($record) {
|
|
||||||
$script .= $this->deleteTreeNodeJS($record);
|
|
||||||
$record->delete();
|
|
||||||
$record->destroy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$size = sizeof($ids);
|
|
||||||
if($size > 1) {
|
|
||||||
$message = $size.' '._t('AssetAdmin.FOLDERSDELETED', 'folders deleted.');
|
|
||||||
} else {
|
|
||||||
$message = $size.' '._t('AssetAdmin.FOLDERDELETED', 'folder deleted.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$script .= "statusMessage('$message');";
|
|
||||||
|
|
||||||
return $script;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function removefile($request){
|
|
||||||
// Protect against CSRF on destructive action
|
|
||||||
if(!SecurityToken::inst()->checkRequest($request)) return $this->httpError(400);
|
|
||||||
|
|
||||||
if($fileID = $this->urlParams['ID']) {
|
|
||||||
$file = DataObject::get_by_id('File', $fileID);
|
|
||||||
// Delete the temp verions of this file in assets/_resampled
|
|
||||||
if($file instanceof Image) {
|
|
||||||
$file->deleteFormattedImages();
|
|
||||||
}
|
|
||||||
$file->delete();
|
|
||||||
$file->destroy();
|
|
||||||
|
|
||||||
if(Director::is_ajax()) {
|
|
||||||
echo <<<JS
|
|
||||||
$('Form_EditForm_Files').removeFile($fileID);
|
|
||||||
statusMessage('removed file', 'good');
|
|
||||||
JS;
|
|
||||||
} else {
|
|
||||||
Director::redirectBack();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
user_error("AssetAdmin::removefile: Bad parameters: File=$fileID", E_USER_ERROR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function save($urlParams, $form) {
|
|
||||||
// Don't save the root folder - there's no database record
|
|
||||||
if($_REQUEST['ID'] == 'root') {
|
|
||||||
FormResponse::status_message('Saved', 'good');
|
|
||||||
return FormResponse::respond();
|
|
||||||
}
|
|
||||||
|
|
||||||
$form->dataFieldByName('Name')->Value = $form->dataFieldByName('Title')->Value();
|
|
||||||
|
|
||||||
return parent::save($urlParams, $form);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* #################################
|
* #################################
|
||||||
* Garbage collection.
|
* Garbage collection.
|
||||||
|
@ -45,6 +45,7 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr
|
|||||||
'SideReportsForm',
|
'SideReportsForm',
|
||||||
'submit',
|
'submit',
|
||||||
'versions',
|
'versions',
|
||||||
|
'VersionsForm',
|
||||||
'EditForm',
|
'EditForm',
|
||||||
'AddForm',
|
'AddForm',
|
||||||
'SearchTreeForm',
|
'SearchTreeForm',
|
||||||
@ -875,8 +876,8 @@ JS;
|
|||||||
/**
|
/**
|
||||||
* @return Form
|
* @return Form
|
||||||
*/
|
*/
|
||||||
function doShowSideReport() {
|
function doShowSideReport($data, $form) {
|
||||||
$reportClass = $this->urlParams['ID'];
|
$reportClass = (isset($data['ReportClass'])) ? $data['ReportClass'] : $this->urlParams['ID'];
|
||||||
$reports = $this->SideReports();
|
$reports = $this->SideReports();
|
||||||
if(isset($reports[$reportClass])) {
|
if(isset($reports[$reportClass])) {
|
||||||
$report = $reports[$reportClass];
|
$report = $reports[$reportClass];
|
||||||
@ -1091,7 +1092,7 @@ JS;
|
|||||||
SSViewer::setOption('rewriteHashlinks', false);
|
SSViewer::setOption('rewriteHashlinks', false);
|
||||||
|
|
||||||
if(Director::is_ajax()) {
|
if(Director::is_ajax()) {
|
||||||
$result = $templateData->renderWith($this->class . '_right');
|
$result = $templateData->renderWith(array($this->class . '_right', 'LeftAndMain_right'));
|
||||||
$parts = split('</?form[^>]*>', $result);
|
$parts = split('</?form[^>]*>', $result);
|
||||||
$content = $parts[sizeof($parts)-2];
|
$content = $parts[sizeof($parts)-2];
|
||||||
if($this->ShowSwitchView()) {
|
if($this->ShowSwitchView()) {
|
||||||
|
@ -37,8 +37,6 @@ class LeftAndMain extends Controller {
|
|||||||
*/
|
*/
|
||||||
static $tree_class = null;
|
static $tree_class = null;
|
||||||
|
|
||||||
static $ForceReload;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url used for the link in the Help tab in the backend
|
* The url used for the link in the Help tab in the backend
|
||||||
* Value can be overwritten if required in _config.php
|
* Value can be overwritten if required in _config.php
|
||||||
@ -57,6 +55,11 @@ class LeftAndMain extends Controller {
|
|||||||
'Member_ProfileForm',
|
'Member_ProfileForm',
|
||||||
'EditorToolbar',
|
'EditorToolbar',
|
||||||
'EditForm',
|
'EditForm',
|
||||||
|
'RootForm',
|
||||||
|
'AddForm',
|
||||||
|
'batchactions',
|
||||||
|
'BatchActionsForm',
|
||||||
|
'Member_ProfileForm',
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,10 +17,8 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider {
|
|||||||
static $subitem_class = 'Member';
|
static $subitem_class = 'Member';
|
||||||
|
|
||||||
static $allowed_actions = array(
|
static $allowed_actions = array(
|
||||||
'addgroup',
|
|
||||||
'autocomplete',
|
'autocomplete',
|
||||||
'removememberfromgroup',
|
'removememberfromgroup',
|
||||||
'savemember',
|
|
||||||
'AddRecordForm',
|
'AddRecordForm',
|
||||||
'EditForm',
|
'EditForm',
|
||||||
'MemberImportForm',
|
'MemberImportForm',
|
||||||
@ -38,38 +36,21 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider {
|
|||||||
public function init() {
|
public function init() {
|
||||||
parent::init();
|
parent::init();
|
||||||
|
|
||||||
Requirements::javascript(CMS_DIR . '/javascript/hover.js');
|
Requirements::javascript(CMS_DIR . '/javascript/SecurityAdmin.js');
|
||||||
Requirements::javascript(THIRDPARTY_DIR . "/scriptaculous/controls.js");
|
|
||||||
Requirements::javascript(THIRDPARTY_DIR . '/jquery-livequery/jquery.livequery.js');
|
|
||||||
|
|
||||||
// needed for MemberTableField (Requirements not determined before Ajax-Call)
|
CMSBatchActionHandler::register('delete', 'SecurityAdmin_DeleteBatchAction', 'Group');
|
||||||
Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang');
|
|
||||||
Requirements::javascript(SAPPHIRE_DIR . "/javascript/TableListField.js");
|
|
||||||
Requirements::javascript(SAPPHIRE_DIR . "/javascript/TableField.js");
|
|
||||||
Requirements::javascript(SAPPHIRE_DIR . "/javascript/ComplexTableField.js");
|
|
||||||
Requirements::javascript(CMS_DIR . "/javascript/MemberTableField.js");
|
|
||||||
Requirements::css(THIRDPARTY_DIR . "/greybox/greybox.css");
|
|
||||||
Requirements::css(SAPPHIRE_DIR . "/css/ComplexTableField.css");
|
|
||||||
|
|
||||||
Requirements::javascript(CMS_DIR . '/javascript/SecurityAdmin_left.js');
|
|
||||||
Requirements::javascript(CMS_DIR . '/javascript/SecurityAdmin_right.js');
|
|
||||||
|
|
||||||
Requirements::javascript(THIRDPARTY_DIR . "/greybox/AmiJS.js");
|
|
||||||
Requirements::javascript(THIRDPARTY_DIR . "/greybox/greybox.js");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getEditForm($id = null) {
|
function getEditForm($id = null) {
|
||||||
if(!$id) $id = $this->currentPageID();
|
if(!$id) $id = $this->currentPageID();
|
||||||
|
$record = ($id && $id != "root") ? $this->getRecord($id) : null;
|
||||||
if($id && $id != 'root') {
|
|
||||||
$record = DataObject::get_by_id($this->stat('tree_class'), $id);
|
|
||||||
if(!$record) return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($id && is_numeric($id)) {
|
if($id && is_numeric($id)) {
|
||||||
$fields = $record->getCMSFields();
|
$form = parent::getEditForm($id);
|
||||||
|
if(!$form) return false;
|
||||||
|
|
||||||
if($fields->hasTabSet()) {
|
$fields = $form->Fields();
|
||||||
|
if($fields->hasTabSet() && $record->canEdit()) {
|
||||||
$fields->findOrMakeTab('Root.Import',_t('Group.IMPORTTABTITLE', 'Import'));
|
$fields->findOrMakeTab('Root.Import',_t('Group.IMPORTTABTITLE', 'Import'));
|
||||||
$fields->addFieldToTab('Root.Import',
|
$fields->addFieldToTab('Root.Import',
|
||||||
new LiteralField(
|
new LiteralField(
|
||||||
@ -95,25 +76,18 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$form->Actions()->insertBefore(
|
||||||
|
$actionAddMember = new FormAction('addmember',_t('SecurityAdmin.ADDMEMBER','Add Member')),
|
||||||
|
'action_save'
|
||||||
|
);
|
||||||
|
$actionAddMember->setForm($form);
|
||||||
|
|
||||||
|
// Filter permissions
|
||||||
|
$permissionField = $form->Fields()->dataFieldByName('Permissions');
|
||||||
|
if($permissionField) $permissionField->setHiddenPermissions(self::$hidden_permissions);
|
||||||
}
|
}
|
||||||
|
|
||||||
$actions = new FieldSet(
|
|
||||||
new FormAction('addmember',_t('SecurityAdmin.ADDMEMBER','Add Member')),
|
|
||||||
new FormAction('save',_t('SecurityAdmin.SAVE','Save'))
|
|
||||||
);
|
|
||||||
|
|
||||||
$form = new Form($this, "EditForm", $fields, $actions);
|
|
||||||
$form->loadDataFrom($record);
|
|
||||||
|
|
||||||
if(!$record->canEdit()) {
|
|
||||||
$readonlyFields = $form->Fields()->makeReadonly();
|
|
||||||
$form->setFields($readonlyFields);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Filter permissions
|
|
||||||
$permissionField = $form->Fields()->dataFieldByName('Permissions');
|
|
||||||
if($permissionField) $permissionField->setHiddenPermissions(self::$hidden_permissions);
|
|
||||||
|
|
||||||
$this->extend('updateEditForm', $form);
|
$this->extend('updateEditForm', $form);
|
||||||
} else {
|
} else {
|
||||||
$form = $this->RootForm();
|
$form = $this->RootForm();
|
||||||
@ -201,8 +175,6 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider {
|
|||||||
Requirements::css(CMS_DIR . '/css/typography.css');
|
Requirements::css(CMS_DIR . '/css/typography.css');
|
||||||
Requirements::css(CMS_DIR . '/css/cms_right.css');
|
Requirements::css(CMS_DIR . '/css/cms_right.css');
|
||||||
Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js');
|
Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js');
|
||||||
Requirements::javascript(THIRDPARTY_DIR . '/jquery-livequery/jquery.livequery.js');
|
|
||||||
Requirements::javascript(SAPPHIRE_DIR . '/javascript/jquery_improvements.js');
|
|
||||||
Requirements::css(CMS_DIR . '/css/MemberImportForm.css');
|
Requirements::css(CMS_DIR . '/css/MemberImportForm.css');
|
||||||
Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery-entwine/dist/jquery.entwine-dist.js');
|
Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery-entwine/dist/jquery.entwine-dist.js');
|
||||||
Requirements::javascript(CMS_DIR . '/javascript/MemberImportForm.js');
|
Requirements::javascript(CMS_DIR . '/javascript/MemberImportForm.js');
|
||||||
@ -234,8 +206,6 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider {
|
|||||||
Requirements::css(CMS_DIR . '/css/typography.css');
|
Requirements::css(CMS_DIR . '/css/typography.css');
|
||||||
Requirements::css(CMS_DIR . '/css/cms_right.css');
|
Requirements::css(CMS_DIR . '/css/cms_right.css');
|
||||||
Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js');
|
Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js');
|
||||||
Requirements::javascript(THIRDPARTY_DIR . '/jquery-livequery/jquery.livequery.js');
|
|
||||||
Requirements::javascript(SAPPHIRE_DIR . '/javascript/jquery_improvements.js');
|
|
||||||
Requirements::css(CMS_DIR . '/css/MemberImportForm.css');
|
Requirements::css(CMS_DIR . '/css/MemberImportForm.css');
|
||||||
Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery-entwine/dist/jquery.entwine-dist.js');
|
Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery-entwine/dist/jquery.entwine-dist.js');
|
||||||
Requirements::javascript(CMS_DIR . '/javascript/MemberImportForm.js');
|
Requirements::javascript(CMS_DIR . '/javascript/MemberImportForm.js');
|
||||||
@ -304,49 +274,8 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
function getCMSTreeTitle() {
|
||||||
* Return the entire site tree as a nested set of ULs.
|
return _t('SecurityAdmin.SGROUPS', 'Security Groups');
|
||||||
* @return string Unordered list HTML
|
|
||||||
*/
|
|
||||||
public function SiteTreeAsUL() {
|
|
||||||
$obj = singleton($this->stat('tree_class'));
|
|
||||||
$obj->markPartialTree();
|
|
||||||
|
|
||||||
if($p = $this->currentPage()) $obj->markToExpose($p);
|
|
||||||
|
|
||||||
// getChildrenAsUL is a flexible and complex way of traversing the tree
|
|
||||||
$siteTreeList = $obj->getChildrenAsUL(
|
|
||||||
'',
|
|
||||||
'"<li id=\"record-$child->ID\" class=\"$child->class " . $child->markingClasses() . ($extraArg->isCurrentPage($child) ? " current" : "") . "\">" . ' .
|
|
||||||
'"<a href=\"" . Controller::join_links(substr($extraArg->Link(),0,-1), "show", $child->ID) . "\" >" . $child->TreeTitle() . "</a>" ',
|
|
||||||
$this,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
// Wrap the root if needs be
|
|
||||||
$rootLink = $this->Link() . 'show/root';
|
|
||||||
$rootTitle = _t('SecurityAdmin.SGROUPS', 'Security Groups');
|
|
||||||
if(!isset($rootID)) {
|
|
||||||
$siteTree = "<ul id=\"sitetree\" class=\"tree unformatted\"><li id=\"record-root\" class=\"Root\"><a href=\"$rootLink\"><strong>{$rootTitle}</strong></a>"
|
|
||||||
. $siteTreeList . "</li></ul>";
|
|
||||||
}
|
|
||||||
|
|
||||||
return $siteTree;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addgroup($request) {
|
|
||||||
// Protect against CSRF on destructive action
|
|
||||||
if(!SecurityToken::inst()->checkRequest($request)) return $this->httpError(400);
|
|
||||||
|
|
||||||
if(!singleton($this->stat('tree_class'))->canCreate()) return Security::permissionFailure($this);
|
|
||||||
|
|
||||||
$newGroup = Object::create($this->stat('tree_class'));
|
|
||||||
$newGroup->Title = _t('SecurityAdmin.NEWGROUP',"New Group");
|
|
||||||
$newGroup->Code = "new-group";
|
|
||||||
$newGroup->ParentID = (is_numeric($_REQUEST['ParentID'])) ? (int)$_REQUEST['ParentID'] : 0;
|
|
||||||
$newGroup->write();
|
|
||||||
|
|
||||||
return $this->returnItemToUser($newGroup);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function EditedMember() {
|
public function EditedMember() {
|
||||||
|
Loading…
Reference in New Issue
Block a user