silverstripe-framework/admin/code/CMSProfileController.php

115 lines
2.8 KiB
PHP
Raw Normal View History

<?php
2013-10-15 00:26:23 +02:00
2016-08-11 01:14:02 +02:00
namespace SilverStripe\Admin;
use SilverStripe\ORM\ArrayList;
2016-06-23 01:37:22 +02:00
use SilverStripe\Security\Member;
use SilverStripe\Security\Permission;
2016-08-11 01:14:02 +02:00
use SS_HTTPResponse;
use HiddenField;
use FormAction;
2016-06-23 01:37:22 +02:00
2013-10-15 00:26:23 +02:00
/**
* @package framework
* @subpackage admin
*/
class CMSProfileController extends LeftAndMain {
private static $url_segment = 'myprofile';
private static $menu_title = 'My Profile';
private static $required_permission_codes = false;
2016-06-23 01:37:22 +02:00
private static $tree_class = 'SilverStripe\\Security\\Member';
public function getEditForm($id = null, $fields = null) {
$this->setCurrentPageID(Member::currentUserID());
$form = parent::getEditForm($id, $fields);
2014-08-15 08:53:05 +02:00
2013-10-15 00:26:23 +02:00
if($form instanceof SS_HTTPResponse) {
return $form;
}
$form->Fields()->removeByName('LastVisited');
$form->Fields()->push(new HiddenField('ID', null, Member::currentUserID()));
$form->Actions()->push(
FormAction::create('save',_t('CMSMain.SAVE', 'Save'))
->addExtraClass('ss-ui-button ss-ui-action-constructive')
->setAttribute('data-icon', 'accept')
->setUseButtonTag(true)
);
2013-10-15 00:26:23 +02:00
$form->Actions()->removeByName('action_delete');
if($member = Member::currentUser()) {
$form->setValidator($member->getValidator());
} else {
2016-06-23 01:37:22 +02:00
$form->setValidator(Member::singleton()->getValidator());
}
if($form->Fields()->hasTabset()) {
$form->Fields()->findOrMakeTab('Root')->setTemplate('CMSTabSet');
}
$form->addExtraClass('member-profile-form root-form cms-edit-form center');
2014-08-15 08:53:05 +02:00
return $form;
}
public function canView($member = null) {
if(!$member && $member !== false) $member = Member::currentUser();
2014-08-15 08:53:05 +02:00
// cms menus only for logged-in members
if(!$member) return false;
2014-08-15 08:53:05 +02:00
// Check they can access the CMS and that they are trying to edit themselves
if(
Permission::checkMember($member, "CMS_ACCESS")
&& $member->ID === Member::currentUserID()
) {
return true;
}
2014-08-15 08:53:05 +02:00
return false;
}
public function save($data, $form) {
2016-06-23 01:37:22 +02:00
$member = Member::get()->byID($data['ID']);
if(!$member) return $this->httpError(404);
$origLocale = $member->Locale;
if(!$member->canEdit()) {
$form->sessionMessage(_t('Member.CANTEDIT', 'You don\'t have permission to do that'), 'bad');
return $this->redirectBack();
}
$response = parent::save($data, $form);
if($origLocale != $data['Locale']) {
$response->addHeader('X-Reload', true);
$response->addHeader('X-ControllerURL', $this->Link());
}
2014-08-15 08:53:05 +02:00
return $response;
}
/**
* Only show first element, as the profile form is limited to editing
* the current member it doesn't make much sense to show the member name
* in the breadcrumbs.
2016-06-23 01:37:22 +02:00
*
* @param bool $unlinked
* @return ArrayList
*/
public function Breadcrumbs($unlinked = false) {
$items = parent::Breadcrumbs($unlinked);
return new ArrayList(array($items[0]));
}
}