/**
  * Method for allowing a user to reset their password
  * @param {stdClass} $data Data passed from ActionScript
  * @return {array} Returns a standard response array
  */
 public function lostPassword($data)
 {
     $response = CodeBank_ClientAPI::responseBase();
     $response['login'] = true;
     $SQL_email = Convert::raw2sql($data->user);
     $member = Member::get_one('Member', "\"Email\"='{$SQL_email}'");
     // Allow vetoing forgot password requests
     $sng = new MemberLoginForm(Controller::has_curr() ? Controller::curr() : singleton('Controller'), 'LoginForm');
     $results = $sng->extend('forgotPassword', $member);
     if ($results && is_array($results) && in_array(false, $results, true)) {
         $response['status'] = 'HELO';
         $response['message'] = _t('CodeBankAPI.PASSWORD_SENT_TEXT', "A reset link has been sent to '{email}', provided an account exists for this email address.", array('email' => $data['Email']));
     }
     if ($member) {
         $token = $member->generateAutologinTokenAndStoreHash();
         $e = Member_ForgotPasswordEmail::create();
         $e->populateTemplate($member);
         $e->populateTemplate(array('PasswordResetLink' => Security::getPasswordResetLink($member, $token)));
         $e->setTo($member->Email);
         $e->send();
         $response['status'] = 'HELO';
         $response['message'] = _t('CodeBankAPI.PASSWORD_SENT_TEXT', "A reset link has been sent to '{email}', provided an account exists for this email address.", array('email' => $data->user));
     } else {
         if (!empty($data->user)) {
             $response['status'] = 'HELO';
             $response['message'] = _t('CodeBankAPI.PASSWORD_SENT_TEXT', "A reset link has been sent to '{email}', provided an account exists for this email address.", array('email' => $data->user));
         } else {
             $response['status'] = 'EROR';
             $response['message'] = _t('Member.ENTEREMAIL', 'Please enter an email address to get a password reset link.');
         }
     }
     return $response;
 }
 public function allMethodNames($custom = false)
 {
     // A friendly hack to make hasMethod returns true
     if (Controller::has_curr()) {
         return array(Controller::curr()->getRequest()->param('Action'));
     }
 }
 function getCMSFields()
 {
     $fields = parent::getCMSFields();
     $subsites = DataObject::get('Subsite');
     if (!$subsites) {
         $subsites = new DataObjectSet();
     }
     $subsites->push(new ArrayData(array('Title' => 'Main site', 'ID' => 0)));
     $subsiteSelectionField = new DropdownField("CopyContentFromID_SubsiteID", "Subsite", $subsites->toDropdownMap('ID', 'Title'), $this->CopyContentFromID ? $this->CopyContentFrom()->SubsiteID : Session::get('SubsiteID'));
     $fields->addFieldToTab('Root.Content.Main', $subsiteSelectionField, 'CopyContentFromID');
     // Setup the linking to the original page.
     $pageSelectionField = new SubsitesTreeDropdownField("CopyContentFromID", _t('VirtualPage.CHOOSE', "Choose a page to link to"), "SiteTree", "ID", "MenuTitle");
     $pageSelectionField->setFilterFunction(create_function('$item', 'return !($item instanceof VirtualPage);'));
     if (Controller::has_curr() && Controller::curr()->getRequest()) {
         $subsiteID = Controller::curr()->getRequest()->getVar('CopyContentFromID_SubsiteID');
         $pageSelectionField->setSubsiteID($subsiteID);
     }
     $fields->replaceField('CopyContentFromID', $pageSelectionField);
     // Create links back to the original object in the CMS
     if ($this->CopyContentFromID) {
         $editLink = "admin/show/{$this->CopyContentFromID}/?SubsiteID=" . $this->CopyContentFrom()->SubsiteID;
         $linkToContent = "\n\t\t\t\t<a class=\"cmsEditlink\" href=\"{$editLink}\">" . _t('VirtualPage.EDITCONTENT', 'Click here to edit the content') . "</a>";
         $fields->removeByName("VirtualPageContentLinkLabel");
         $fields->addFieldToTab("Root.Content.Main", $linkToContentLabelField = new LabelField('VirtualPageContentLinkLabel', $linkToContent), 'Title');
         $linkToContentLabelField->setAllowHTML(true);
     }
     $fields->addFieldToTab('Root.Content.Metadata', new TextField('CustomMetaTitle', 'Title (overrides inherited value from the source)'), 'MetaTitle');
     $fields->addFieldToTab('Root.Content.Metadata', new TextareaField('CustomMetaKeywords', 'Keywords (overrides inherited value from the source)'), 'MetaKeywords');
     $fields->addFieldToTab('Root.Content.Metadata', new TextareaField('CustomMetaDescription', 'Description (overrides inherited value from the source)'), 'MetaDescription');
     $fields->addFieldToTab('Root.Content.Metadata', new TextField('CustomExtraMeta', 'Custom Meta Tags (overrides inherited value from the source)'), 'ExtraMeta');
     return $fields;
 }
 public function onBeforeDelete()
 {
     $current_id = $this->owner->ID;
     // stored a track of deleted users ...
     $deleted = MemberDeleted::create();
     $deleted->OriginalID = $current_id;
     $deleted->FirstName = $this->owner->FirstName;
     $deleted->Surname = $this->owner->Surname;
     $deleted->Email = $this->owner->Email;
     if (Controller::has_curr()) {
         $deleted->FromUrl = Controller::curr()->getRequest()->getURL(true);
     }
     $deleted->write();
     if ($this->owner->Speaker()->exists()) {
         $this->owner->Speaker()->delete();
     }
     if ($this->owner->Photo()->exists()) {
         $this->owner->Photo()->delete();
     }
     foreach ($this->owner->LegalAgreements() as $e) {
         $e->delete();
     }
     foreach ($this->owner->Affiliations() as $e) {
         $e->delete();
     }
     $this->owner->ManagedCompanies()->removeAll();
 }
 public function getCMSFields()
 {
     $fields = parent::getCMSFields();
     $subsites = DataObject::get('Subsite');
     if (!$subsites) {
         $subsites = new ArrayList();
     } else {
         $subsites = ArrayList::create($subsites->toArray());
     }
     $subsites->push(new ArrayData(array('Title' => 'Main site', 'ID' => 0)));
     $fields->addFieldToTab('Root.Main', DropdownField::create("CopyContentFromID_SubsiteID", _t('SubsitesVirtualPage.SubsiteField', "Subsite"), $subsites->map('ID', 'Title'))->addExtraClass('subsitestreedropdownfield-chooser no-change-track'), 'CopyContentFromID');
     // Setup the linking to the original page.
     $pageSelectionField = new SubsitesTreeDropdownField("CopyContentFromID", _t('VirtualPage.CHOOSE', "Choose a page to link to"), "SiteTree", "ID", "MenuTitle");
     if (Controller::has_curr() && Controller::curr()->getRequest()) {
         $subsiteID = Controller::curr()->getRequest()->requestVar('CopyContentFromID_SubsiteID');
         $pageSelectionField->setSubsiteID($subsiteID);
     }
     $fields->replaceField('CopyContentFromID', $pageSelectionField);
     // Create links back to the original object in the CMS
     if ($this->CopyContentFromID) {
         $editLink = "admin/pages/edit/show/{$this->CopyContentFromID}/?SubsiteID=" . $this->CopyContentFrom()->SubsiteID;
         $linkToContent = "\n\t\t\t\t<a class=\"cmsEditlink\" href=\"{$editLink}\">" . _t('VirtualPage.EDITCONTENT', 'Click here to edit the content') . "</a>";
         $fields->removeByName("VirtualPageContentLinkLabel");
         $fields->addFieldToTab("Root.Main", $linkToContentLabelField = new LabelField('VirtualPageContentLinkLabel', $linkToContent), 'Title');
         $linkToContentLabelField->setAllowHTML(true);
     }
     $fields->addFieldToTab('Root.Main', TextField::create('CustomMetaTitle', $this->fieldLabel('CustomMetaTitle'))->setDescription(_t('SubsitesVirtualPage.OverrideNote', 'Overrides inherited value from the source')), 'MetaTitle');
     $fields->addFieldToTab('Root.Main', TextareaField::create('CustomMetaKeywords', $this->fieldLabel('CustomMetaTitle'))->setDescription(_t('SubsitesVirtualPage.OverrideNote')), 'MetaKeywords');
     $fields->addFieldToTab('Root.Main', TextareaField::create('CustomMetaDescription', $this->fieldLabel('CustomMetaTitle'))->setDescription(_t('SubsitesVirtualPage.OverrideNote')), 'MetaDescription');
     $fields->addFieldToTab('Root.Main', TextField::create('CustomExtraMeta', $this->fieldLabel('CustomMetaTitle'))->setDescription(_t('SubsitesVirtualPage.OverrideNote')), 'ExtraMeta');
     return $fields;
 }
Example #6
0
 /**
  * Hide content on the login pages as the warning message is hard coded in
  * the form.
  */
 public function Content()
 {
     if (Controller::has_curr() && Controller::curr() instanceof Security) {
         return false;
     }
     return $this->dbObject('Content');
 }
 /**
  * Update any requests to limit the results to the current site
  */
 public function augmentSQL(SQLQuery &$query, DataQuery &$dataQuery = null)
 {
     $ctrl = null;
     if (Controller::has_curr()) {
         $ctrl = Controller::curr();
     }
     if (Subsite::$disable_subsite_filter) {
         return;
     }
     if ($dataQuery->getQueryParam('Subsite.filter') === false) {
         return;
     }
     if ($ctrl && get_class(Controller::curr()) == 'Security') {
         return;
     }
     // Don't run on delete queries, since they are always tied to
     // a specific ID.
     if ($query->getDelete()) {
         return;
     }
     // If you're querying by ID, ignore the sub-site - this is a bit ugly...
     // if(!$query->where || (strpos($query->where[0], ".\"ID\" = ") === false && strpos($query->where[0], ".`ID` = ") === false && strpos($query->where[0], ".ID = ") === false && strpos($query->where[0], "ID = ") !== 0)) {
     if (!$query->filtersOnID()) {
         if (Subsite::$force_subsite) {
             $subsiteID = Subsite::$force_subsite;
         } else {
             $subsiteID = (int) Subsite::currentSubsiteID();
         }
         $froms = $query->getFrom();
         $froms = array_keys($froms);
         $tableName = array_shift($froms);
         $query->addWhere("\"{$tableName}\".\"SubsiteID\" IN ({$subsiteID})");
     }
 }
 /**
  * Add subsites-specific fields to the folder editor.
  */
 public function updateCMSFields(FieldList $fields)
 {
     $ctrl = null;
     if (Controller::has_curr()) {
         $ctrl = Controller::curr();
     }
     if (!$ctrl) {
         return;
     }
     // This fixes fields showing up for no reason in the list view (not moved to Details tab)
     if ($ctrl->getAction() !== 'EditForm') {
         return;
     }
     if ($this->owner instanceof Folder) {
         // Allow to move folders from one site to another
         $sites = Subsite::accessible_sites('CMS_ACCESS_AssetAdmin');
         $values = array();
         $values[0] = _t('FileSubsites.AllSitesDropdownOpt', 'All sites');
         foreach ($sites as $site) {
             $values[$site->ID] = $site->Title;
         }
         ksort($values);
         if ($sites) {
             //Dropdown needed to move folders between subsites
             $dropdown = new DropdownField('SubsiteID', _t('FileSubsites.SubsiteFieldLabel', 'Subsite'), $values);
             $dropdown->addExtraClass('subsites-move-dropdown');
             $fields->push($dropdown);
         }
         // On main site, allow showing this folder in subsite
         if ($this->owner->SubsiteID == 0 && !Subsite::currentSubsiteID()) {
             $fields->push(new CheckboxField('ShowInSubsites', _t('SubsiteFileExtension.ShowInSubsites', 'Show in subsites')));
         }
     }
 }
 public function IsActive()
 {
     if (Controller::has_curr()) {
         $controller = Controller::curr();
         if (is_a($controller, 'NewsIndex_Controller') && $controller->IsCategory()) {
             return $controller->getRequest()->param('ID') == $this->ID;
         }
     }
     return false;
 }
 function updateCMSFields(FieldSet &$fields)
 {
     if ($this->owner->ID && $this->owner->Code == strtolower(self::$main_group)) {
         $newMerchants = new ComplexTableField(Controller::has_curr() ? Controller::curr() : new Controller(), 'NewMembers', 'Member');
         $newMerchants->setCustomSourceItems(self::get_new_merchants());
         $fields->addFieldToTab('Root', new Tab(_t('MerchantGroupDOD.NEWMERCHANTS', 'New Merchants'), $newMerchants), 'Members');
         $fields->findOrMakeTab('Root.Members')->setTitle(_t('MerchantGroupDOD.ALLMERCHANTS', 'All Merchants'));
         $fields->removeByName('Title');
     }
 }
 function activateState($state)
 {
     if (Controller::has_curr()) {
         Subsite::changeSubsite($state);
     } else {
         // TODO: This is a nasty hack - calling Subsite::changeSubsite after request ends
         // throws error because no current controller to access session on
         $_REQUEST['SubsiteID'] = $state;
     }
 }
 public function __destruct()
 {
     // Shift off anything else that's on the stack.  This can happen if something throws
     // an exception that causes a premature TestSession::__destruct() call
     while (Controller::has_curr() && Controller::curr() !== $this->controller) {
         Controller::curr()->popCurrent();
     }
     if (Controller::has_curr()) {
         $this->controller->popCurrent();
     }
 }
 function MetaTags(&$tags)
 {
     $config = SiteConfig::current_site_config();
     // Ensure a canonical link is placed, for semantic correctness and SEO
     if (Controller::has_curr() && Controller::curr()->hasMethod("onMobileDomain") && Controller::curr()->onMobileDomain() && $config->MobileSiteType == 'RedirectToDomain') {
         $oldBaseURL = Director::baseURL();
         Director::setbaseURL($config->FullSiteDomain);
         $tags .= sprintf('<link rel="canonical" href="%s" />', $this->owner->AbsoluteLink()) . "\n";
         Director::setbaseURL($oldBaseURL);
     }
 }
 public function setTooltip($tooltip)
 {
     $this->tooltip = $tooltip;
     $t = $this->owner->Title();
     if (Controller::has_curr() && Controller::curr() instanceof LeftAndMain) {
         $t .= ' <span title="' . $tooltip . '" class="ui-icon ui-icon-info" style="display:inline-block;"></span>';
     } else {
         $t .= ' <i class="' . Config::inst()->get(__CLASS__, 'icon') . ' tooltip" title="' . $tooltip . '"></i>';
     }
     $this->owner->setTitle($t);
     return $this->owner;
 }
 /**
  * Determines the key to use for saving the current rate
  * 
  * @param string $itemkey Input key
  * @return string Result key
  */
 protected function getCacheKey($itemkey)
 {
     $key = self::CACHE_PREFIX;
     // Add global identifier
     if (\Config::inst()->get(get_class(), 'lock_bypage')) {
         $key .= '_' . md5($itemkey);
     }
     // Add user-specific identifier
     if (\Config::inst()->get(get_class(), 'lock_byuserip') && \Controller::has_curr()) {
         $ip = \Controller::curr()->getRequest()->getIP();
         $key .= '_' . md5($ip);
     }
     return $key;
 }
Example #16
0
 public function onBeforeDelete()
 {
     $current_id = $this->owner->ID;
     // stored a track of deleted users ...
     $deleted = MemberDeleted::create();
     $deleted->OriginalID = $current_id;
     $deleted->FirstName = $this->owner->FirstName;
     $deleted->Surname = $this->owner->Surname;
     $deleted->Email = $this->owner->Email;
     if (Controller::has_curr()) {
         $deleted->FromUrl = Controller::curr()->getRequest()->getURL(true);
     }
     $deleted->write();
 }
 public function getURL()
 {
     $pointer = $this->obj('FilePointer');
     $controller = \Controller::has_curr() ? \Controller::curr() : null;
     if ($controller instanceof \CMSMain) {
         return $this->Filename;
     }
     if ($pointer->exists() && $pointer->getValue()) {
         $reader = $pointer->getReader();
         if ($reader) {
             return $reader->getURL();
         }
     }
 }
 /**
  * Finds the path for specified file
  *
  * @param string $fileOrUrl
  * @return string|bool
  */
 protected function path_for_file($fileOrUrl)
 {
     // only handle files in themes folder
     if (!Controller::has_curr() || is_a(Controller::curr(), 'LeftAndMain')) {
         return parent::path_for_file($fileOrUrl);
     } else {
         if (preg_match('{^//|http[s]?}', $fileOrUrl)) {
             return $fileOrUrl;
         } elseif (Director::fileExists($fileOrUrl)) {
             $filePath = preg_replace('/\\?.*/', '', Director::baseFolder() . '/' . $fileOrUrl);
             $baseurl = Director::baseURL();
             // url parameters
             if (strpos($fileOrUrl, '?') !== false) {
                 $parameters = '?' . substr($fileOrUrl, strpos($fileOrUrl, '?') + 1);
                 $fileOrUrl = substr($fileOrUrl, 0, strpos($fileOrUrl, '?'));
             } else {
                 $parameters = '';
             }
             // get base path
             $baseFolder = Director::baseFolder();
             // get combined files folder
             $combinedFilesFolder = rtrim($this->getCombinedFilesFolder(), '/');
             if (!file_exists($baseFolder . '/' . $combinedFilesFolder)) {
                 Filesystem::makeFolder($baseFolder . '/' . $combinedFilesFolder);
             }
             // get file name
             $fileName = substr($filePath, strrpos($filePath, '/') + 1);
             // get prefix
             $prefix = filemtime($filePath) . '-';
             $prefixedFilePath = $baseFolder . '/' . $combinedFilesFolder . '/' . $prefix . $fileName;
             // clean up and create file
             if (!file_exists($prefixedFilePath)) {
                 // remove old prefixed files
                 foreach (glob($baseFolder . '/' . $combinedFilesFolder . '/' . '[0-9]*-' . $fileName) as $file) {
                     unlink($file);
                 }
                 // copy standard file to prefixed file
                 copy($filePath, $prefixedFilePath);
             }
             return "{$baseurl}{$combinedFilesFolder}/{$prefix}{$fileName}{$parameters}";
         } else {
             return false;
         }
     }
 }
 /**
  * Caution: Only call on instances, not through a singleton.
  *
  * @return FieldSet
  */
 public function getCMSFields()
 {
     $fields = new FieldSet(new TabSet("Root", new Tab('Members', _t('SecurityAdmin.MEMBERS', 'Members'), new TextField("Title", $this->fieldLabel('Title')), $memberList = new MemberTableField(Controller::has_curr() ? Controller::curr() : new Controller(), "Members", $this, null, false)), $permissionsTab = new Tab('Permissions', _t('SecurityAdmin.PERMISSIONS', 'Permissions'), new PermissionCheckboxSetField('Permissions', false, 'Permission', 'GroupID', $this)), new Tab('IPAddresses', _t('Security.IPADDRESSES', 'IP Addresses'), new LiteralField("", _t('SecurityAdmin.IPADDRESSESHELP', "<p>You can restrict this group to a particular \n\t\t\t\t\t\tIP address range (one range per line). <br />Ranges can be in any of the following forms: <br />\n\t\t\t\t\t\t203.96.152.12<br />\n\t\t\t\t\t\t203.96.152/24<br />\n\t\t\t\t\t\t203.96/16<br />\n\t\t\t\t\t\t203/8<br /><br />If you enter one or more IP address ranges in this box, then members will only get\n\t\t\t\t\t\tthe rights of being in this group if they log on from one of the valid IP addresses.  It won't prevent\n\t\t\t\t\t\tpeople from logging in.  This is because the same user might have to log in to access parts of the\n\t\t\t\t\t\tsystem without IP address restrictions.")), new TextareaField("IPRestrictions", "IP Ranges", 10))));
     // Only add a dropdown for HTML editor configurations if more than one is available.
     // Otherwise Member->getHtmlEditorConfigForCMS() will default to the 'cms' configuration.
     $editorConfigMap = HtmlEditorConfig::get_available_configs_map();
     if (count($editorConfigMap) > 1) {
         $fields->addFieldToTab('Root.Permissions', new DropdownField('HtmlEditorConfig', 'HTML Editor Configuration', $editorConfigMap), 'Permissions');
     }
     if (!Permission::check('EDIT_PERMISSIONS')) {
         $fields->removeFieldFromTab('Root', 'Permissions');
         $fields->removeFieldFromTab('Root', 'IP Addresses');
     }
     // Only show the "Roles" tab if permissions are granted to edit them,
     // and at least one role exists
     if (Permission::check('APPLY_ROLES') && DataObject::get('PermissionRole')) {
         $fields->findOrMakeTab('Root.Roles', _t('SecurityAdmin.ROLES', 'Roles'));
         $fields->addFieldToTab('Root.Roles', new LiteralField("", "<p>" . _t('SecurityAdmin.ROLESDESCRIPTION', "This section allows you to add roles to this group. Roles are logical groupings of permissions, which can be editied in the Roles tab") . "</p>"));
         // Add roles (and disable all checkboxes for inherited roles)
         $allRoles = Permission::check('ADMIN') ? DataObject::get('PermissionRole') : DataObject::get('PermissionRole', 'OnlyAdminCanApply = 0');
         $groupRoles = $this->Roles();
         $inheritedRoles = new DataObjectSet();
         $ancestors = $this->getAncestors();
         foreach ($ancestors as $ancestor) {
             $ancestorRoles = $ancestor->Roles();
             if ($ancestorRoles) {
                 $inheritedRoles->merge($ancestorRoles);
             }
         }
         $fields->findOrMakeTab('Root.Roles', 'Root.' . _t('SecurityAdmin.ROLES', 'Roles'));
         $fields->addFieldToTab('Root.Roles', $rolesField = new CheckboxSetField('Roles', 'Roles', $allRoles));
         $rolesField->setDefaultItems($inheritedRoles->column('ID'));
         $rolesField->setDisabledItems($inheritedRoles->column('ID'));
     }
     $memberList->setPermissions(array('edit', 'delete', 'export', 'add', 'inlineadd'));
     $memberList->setParentClass('Group');
     $memberList->setPopupCaption(_t('SecurityAdmin.VIEWUSER', 'View User'));
     $memberList->setRelationAutoSetting(false);
     $fields->push($idField = new HiddenField("ID"));
     $this->extend('updateCMSFields', $fields);
     return $fields;
 }
 /**
  * @return FieldList
  */
 public function getCMSFields()
 {
     if (Controller::has_curr()) {
         if (isset($_GET['socialfeedclearcache']) && $_GET['socialfeedclearcache'] == 1 && $this->canEdit()) {
             $this->clearFeedCache();
             $url = Controller::curr()->getRequest()->getVar('url');
             $urlAndParams = explode('?', $url);
             Controller::curr()->redirect($urlAndParams[0]);
         }
         $this->beforeUpdateCMSFields(function ($fields) {
             $cache = $this->getFeedCache();
             if ($cache !== null && $cache !== false) {
                 $url = Controller::curr()->getRequest()->getVar('url');
                 $url .= '?socialfeedclearcache=1';
                 $fields->addFieldToTab('Root.Main', LiteralField::create('cacheclear', '<a href="' . $url . '" class="field ss-ui-button ui-button" style="max-width: 100px;">Clear Cache</a>'));
             }
         });
     }
     $fields = parent::getCMSFields();
     return $fields;
 }
 /**
  * Get all steps as an ArrayList. To be used for your templates.
  * @return ArrayList
  */
 public function AllSteps()
 {
     $num = self::classNameNumber();
     if (!$num) {
         return;
     }
     $n = 1;
     $curr = self::getCurrentStep();
     if (!$curr) {
         $curr = 1;
     }
     if (!Controller::has_curr()) {
         return;
     }
     $c = Controller::curr();
     $class = str_replace($num, $n, get_called_class());
     $steps = new ArrayList();
     $baseAction = parent::FormAction();
     while (class_exists($class)) {
         $isCurrent = $isCompleted = false;
         $cssClass = $n == $curr ? 'current' : 'link';
         if ($n == 1) {
             $isCurrent = true;
             $cssClass .= ' first';
         }
         if ($class::isLastStep()) {
             $cssClass .= ' last';
         }
         if ($n < $curr) {
             $isCompleted = true;
             $cssClass .= ' completed';
         }
         $link = $baseAction . '/gotoStep/?step=' . $n;
         $steps->push(new ArrayData(array('Title' => $class::getStepTitle(), 'Number' => $n, 'Link' => $link, 'Class' => $cssClass, 'IsCurrent' => $isCurrent, 'IsCompleted' => $isCompleted)));
         $n++;
         $class = str_replace(self::classNameNumber(), $n, get_called_class());
     }
     return $steps;
 }
 protected function write(array $record)
 {
     ini_set('display_errors', 0);
     // TODO: This coupling isn't ideal
     // See https://github.com/silverstripe/silverstripe-framework/issues/4484
     if (\Controller::has_curr()) {
         $response = \Controller::curr()->getResponse();
     } else {
         $response = new SS_HTTPResponse();
     }
     // If headers have been sent then these won't be used, and may throw errors that we wont' want to see.
     if (!headers_sent()) {
         $response->setStatusCode($this->statusCode);
         $response->addHeader("Content-Type", $this->contentType);
     } else {
         // To supress errors aboot errors
         $response->setStatusCode(200);
     }
     $response->setBody($record['formatted']);
     $response->output();
     return false === $this->bubble;
 }
 public function init()
 {
     if (!Controller::has_curr()) {
         return;
     }
     /* @var $ctrl Controller */
     $ctrl = Controller::curr();
     /* @ var $req SS_HTTPRequest */
     $req = $ctrl->getRequest();
     // Otherwise it will get excluded if it does not have access to all subsites...
     if (class_exists('Subsite')) {
         Subsite::$disable_subsite_filter = true;
     }
     $base = AdminRootController::config()->url_base;
     $defaultPanel = AdminRootController::config()->default_panel;
     $currentSegment = $req->getURL();
     // We will fail if we are redirected to a panel without the proper permission
     if (($currentSegment == $base || $currentSegment == $base . '/pages') && $defaultPanel == 'CMSPagesController' && !Permission::check('CMS_ACCESS_CMSMain')) {
         // Instead, let's redirect to something we can access
         if (Permission::check('CMS_ACCESS')) {
             $member = Member::currentUser();
             $permissions = Permission::permissions_for_member($member->ID);
             foreach ($permissions as $permission) {
                 if (strpos($permission, 'CMS_ACCESS_') === 0) {
                     $class = str_replace('CMS_ACCESS_', '', $permission);
                     $segment = Config::inst()->get($class, 'url_segment');
                     $url = Director::absoluteBaseURL() . $base . '/' . $segment;
                     header('Location:' . $url);
                     exit;
                 }
             }
         }
     }
     if (class_exists('Subsite')) {
         Subsite::$disable_subsite_filter = false;
     }
 }
Example #24
0
 public function onBeforeDelete()
 {
     $current_id = $this->owner->ID;
     // stored a track of deleted users ...
     $deleted = MemberDeleted::create();
     $deleted->OriginalID = $current_id;
     $deleted->FirstName = $this->owner->FirstName;
     $deleted->Surname = $this->owner->Surname;
     $deleted->Email = $this->owner->Email;
     if (Controller::has_curr()) {
         $deleted->FromUrl = Controller::curr()->getRequest()->getURL(true);
     }
     $deleted->write();
     $legal_agreements = $this->owner->LegalAgreements();
     foreach ($legal_agreements as $la) {
         $la->delete();
     }
     $affiliations = $this->owner->Affiliations();
     foreach ($affiliations as $a) {
         $a->delete();
     }
     DB::query("DELETE FROM Company_Administrators WHERE MemberID = {$current_id}");
     DB::query("DELETE FROM Group_Members WHERE MemberID = {$current_id}");
 }
 /**
  * Retrieves the session key from the url or generates a new one if it is not already cached
  * @return {string} State's session key
  */
 public function getSessionKey()
 {
     if (empty($this->_stateSessionKey)) {
         //If the session key is in the url try loading the state from the session
         if (Controller::has_curr()) {
             $urlSessionKey = Controller::curr()->getRequest()->getVar(strtolower($this->grid->getName()) . '_skey');
             if (!empty($urlSessionKey)) {
                 $this->_stateSessionKey = $urlSessionKey;
             } else {
                 $postSessionKey = Controller::curr()->getRequest()->postVar($this->grid->getName() . '_skey');
                 if (!empty($postSessionKey)) {
                     $this->_stateSessionKey = $postSessionKey;
                 } else {
                     //No key so generate a new one
                     $this->_stateSessionKey = sha1(uniqid($this->name));
                 }
             }
         } else {
             //No key so generate a new one
             $this->_stateSessionKey = sha1(uniqid($this->name));
         }
     }
     return $this->_stateSessionKey;
 }
 /**
  * Action to handle deleting of a single file
  *
  * @param SS_HTTPRequest $request
  * @return SS_HTTPResponse
  */
 public function delete(SS_HTTPRequest $request)
 {
     // Check form field state
     if ($this->parent->isDisabled() || $this->parent->isReadonly()) {
         return $this->httpError(403);
     }
     // Protect against CSRF on destructive action
     $token = $this->parent->getForm()->getSecurityToken();
     if (!$token->checkRequest($request)) {
         return $this->httpError(400);
     }
     // Check item permissions
     $item = $this->getItem();
     if (!$item) {
         return $this->httpError(404);
     }
     $memberID = Member::currentUserID();
     $res = false;
     try {
         // Owner can always delete
         if ($memberID && $item->OwnerID == $memberID) {
             $res = true;
         } else {
             $res = $item->canDelete();
         }
     } catch (Exception $ex) {
     }
     if (!$res) {
         return $this->httpError(403);
     }
     // Delete the file from the filesystem. The file will be removed
     // from the relation on save
     // @todo Investigate if references to deleted files (if unsaved) is dangerous
     $item->delete();
     if (Controller::has_curr()) {
         return Controller::curr()->redirectBack();
     }
     return $this;
 }
 /**
  * Checks if the current HTTP-Request is an "Ajax-Request" by checking for a custom header set by
  * jQuery or whether a manually set request-parameter 'ajax' is present.
  *
  * @return bool
  */
 public static function is_ajax()
 {
     if (Controller::has_curr()) {
         return Controller::curr()->getRequest()->isAjax();
     } else {
         return isset($_REQUEST['ajax']) || isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == "XMLHttpRequest";
     }
 }
 /**
  * Process all jobs from a given queue
  *
  * @param string $name The job queue to completely process
  */
 public function processJobQueue($name)
 {
     // Start timer to measure lifetime
     $this->markStarted();
     // Begin main loop
     do {
         if (class_exists('Subsite')) {
             // clear subsite back to default to prevent any subsite changes from leaking to
             // subsequent actions
             Subsite::changeSubsite(0);
         }
         if (Controller::has_curr()) {
             Session::clear('loggedInAs');
         } else {
             unset($_SESSION['loggedInAs']);
         }
         if (class_exists('SecurityContext')) {
             singleton('SecurityContext')->setMember(null);
         }
         $job = $this->getNextPendingJob($name);
         if ($job) {
             $success = $this->runJob($job->ID);
             if (!$success) {
                 // make sure job is null so it doesn't continue the current
                 // processing loop. Next queue executor can pick up where
                 // things left off
                 $job = null;
             }
         }
     } while ($job);
 }
 function tearDown()
 {
     // Preserve memory settings
     ini_set('memory_limit', $this->originalMemoryLimit ? $this->originalMemoryLimit : -1);
     // Restore email configuration
     Email::set_mailer($this->originalMailer);
     $this->originalMailer = null;
     $this->mailer = null;
     // Restore password validation
     Member::set_password_validator($this->originalMemberPasswordValidator);
     // Restore requirements
     Requirements::set_backend($this->originalRequirements);
     // Mark test as no longer being run - we use originalIsRunningTest to allow for nested SapphireTest calls
     self::$is_running_test = $this->originalIsRunningTest;
     $this->originalIsRunningTest = null;
     // Reset theme setting
     SSViewer::set_theme($this->originalTheme);
     // Reset mocked datetime
     SS_Datetime::clear_mock_now();
     // Restore nested_urls state
     if ($this->originalNestedURLsState) {
         SiteTree::enable_nested_urls();
     } else {
         SiteTree::disable_nested_urls();
     }
     // Stop the redirection that might have been requested in the test.
     // Note: Ideally a clean Controller should be created for each test.
     // Now all tests executed in a batch share the same controller.
     $controller = Controller::has_curr() ? Controller::curr() : null;
     if ($controller && $controller->response && $controller->response->getHeader('Location')) {
         $controller->response->setStatusCode(200);
         $controller->response->removeHeader('Location');
     }
 }
 /**
  * Actives locales as defined in siteconfig
  *
  * @return \ArrayList
  */
 public function ActiveLocalesList()
 {
     if (!$this->owner->hasMethod('LocaleInformation')) {
         return new ArrayList();
     }
     $data = array();
     $config = SiteConfig::current_site_config();
     $list = $config->ActiveLocales;
     $ctrl = null;
     if (Controller::has_curr()) {
         $ctrl = Controller::curr();
     }
     if (!$list) {
         if ($ctrl && $ctrl->hasMethod('Locales')) {
             return $ctrl->Locales();
         }
         return $config->Locales();
     }
     $validLocales = Fluent::locales();
     foreach (explode(',', $list) as $locale) {
         if (!in_array($locale, $validLocales)) {
             continue;
         }
         if ($ctrl && $ctrl->hasMethod('LocaleInformation')) {
             $data[] = $ctrl->LocaleInformation($locale);
         } else {
             $data[] = $this->owner->LocaleInformation($locale);
         }
     }
     return new ArrayList($data);
 }