public function getURLPrefix() { $url = parent::getURLPrefix(); if (Director::isDev() || Director::isTest()) { $urlarray = parse_url($url); // define override if (defined('DEV_SUBSITE_' . Subsite::currentSubsiteID())) { $subsiteurl = 'DEV_SUBSITE_' . Subsite::currentSubsiteID(); return constant($subsiteurl) . $urlarray['path']; } if (!Subsite::currentSubsite() instanceof Subsite) { return $url; } // if set in config settings $currentDomain = Subsite::currentSubsite()->getPrimarySubsiteDomain(); if (Director::isTest()) { $currentDomain = Subsite::currentSubsite()->TestDomainID ? Subsite::currentSubsite()->TestDomain() : $currentDomain; } if (Director::isDev()) { $currentDomain = Subsite::currentSubsite()->DevDomainID ? Subsite::currentSubsite()->DevDomain() : $currentDomain; } if (!$currentDomain) { return $url; } return $currentDomain->getFullProtocol() . $currentDomain->Domain . $urlarray['path']; } return $url; }
public function getEditForm($id = null, $fields = null) { $form = parent::getEditForm($id, $fields); if ($this->modelClass == 'Order') { $fields = $form->Fields(); $gridField = $fields->fieldByName('Order'); // Bulk manager $manager = new GridFieldBulkManager(); $manager->removeBulkAction("bulkEdit"); $manager->removeBulkAction("unLink"); $manager->removeBulkAction("delete"); $manager->addBulkAction('paid', 'Mark Paid', 'CommerceGridFieldBulkAction_Paid'); $manager->addBulkAction('processing', 'Mark Processing', 'CommerceGridFieldBulkAction_Processing'); $manager->addBulkAction('dispatched', 'Mark Dispatched', 'CommerceGridFieldBulkAction_Dispatched'); // Add dispatch button $field_config = $gridField->getConfig(); $field_config->addComponent($manager); // Update list of items for subsite (if used) if (class_exists('Subsite')) { $list = $gridField->getList()->filter(array('SubsiteID' => Subsite::currentSubsiteID())); $gridField->setList($list); } } $this->extend("updateEditForm", $form); return $form; }
function onBeforeWrite() { if (!$this->owner->ID && !$this->owner->SubsiteID) { $this->owner->SubsiteID = Subsite::currentSubsiteID(); } parent::onBeforeWrite(); }
public function updateCMSFields(FieldList $fields) { $fields->removeByName('SubsiteID'); if (class_exists('Subsite')) { $fields->push(new HiddenField('SubsiteID', 'SubsiteID', Subsite::currentSubsiteID())); } }
public function updateCMSFields(FieldList $fields) { $subsites = class_exists('Subsite'); $onMainSite = TRUE; $currentSubsiteID = 0; $currentSiteConfig = SiteConfig::current_site_config(); if ($subsites) { $currentSubsiteID = Subsite::currentSubsiteID(); if ($currentSubsiteID) { $onMainSite = FALSE; } $mainSiteConfig = SiteConfig::get()->filter('SubsiteID', 0)->first(); } else { $mainSiteConfig = $currentSiteConfig; } // Add mailblock CMS fields. if (Permission::check('MANAGE_MAILBLOCK') && ($mainSiteConfig->getField('MailblockApplyPerSubsite') || $onMainSite)) { $enabled = $currentSiteConfig->getField('MailblockEnabled'); $tabSet = new TabSet('Mailblock', $settingsTab = $this->basicSettingsFields(), $advancedSettingsTab = $this->advancedSettingsFields($onMainSite, $currentSubsiteID), $testTab = $this->testEmailCMSFields($enabled)); $fields->addFieldToTab('Root', $tabSet); $hiddenFields = array('MailblockEnabledOnLive', 'MailblockOverrideConfiguration', 'MailblockRecipients', 'MailblockWhitelist'); if ($subsites && $currentSubsiteID == 0) { $hiddenFields[] = 'MailblockApplyPerSubsite'; } foreach ($hiddenFields as $field) { $field = $fields->dataFieldByName($field); $field->displayIf('MailblockEnabled')->isChecked(); } } }
function updateCMSFields(FieldList $fields) { if (class_exists('Subsite')) { $fields->push(new HiddenField('SubsiteID', 'SubsiteID', Subsite::currentSubsiteID())); } return $fields; }
public function updateEditForm($form) { $gridField = $form->Fields()->fieldByName($this->sanitiseClassNameExtension($this->owner->modelClass)); if (class_exists('Subsite')) { $list = $gridField->getList()->filter(array('SubsiteID' => Subsite::currentSubsiteID())); $gridField->setList($list); } }
/** * @param SQLQuery $query * @param DataQuery $dataQuery */ function augmentSQL(SQLQuery &$query, DataQuery &$dataQuery = null) { $baseTable = ClassInfo::baseDataClass($dataQuery->dataClass()); if (class_exists('Subsite')) { $currentSubsiteID = Subsite::currentSubsiteID(); $query->addWhere("\"{$baseTable}\".\"SubsiteID\" = '{$currentSubsiteID}'"); } }
/** * make the form a bit more usable. * * @return FieldList */ public function getCMSFields() { $fields = parent::getCMSFields(); // remove it and, if needed re-add it as a hidden field $fields->removeByName('SubsiteID'); if (class_exists('Subsite')) { $fields->push(new HiddenField('SubsiteID', 'SubsiteID', Subsite::currentSubsiteID())); } return $fields; }
/** * List only newsitems from current subsite. * * @author Marcio Barrientos * @return ArrayList $list */ public function getList() { /** @var DataList $list */ $list = parent::getList(); if ($this->modelClass === 'News' && class_exists('Subsite') && Subsite::currentSubsiteID() > 0) { $pages = NewsHolderPage::get()->filter(array('SubsiteID' => (int) Subsite::currentSubsiteID())); $filter = $pages->column('ID'); /* Manual join needed because otherwise no items are found. Unknown why. */ $list = $list->innerJoin('NewsHolderPage_Newsitems', 'NewsHolderPage_Newsitems.NewsID = News.ID')->filter(array('NewsHolderPage_Newsitems.NewsHolderPageID' => $filter)); } return $list; }
/** * Detect if you're trying to access the admin section from the non main site * @global string $_FILE_TO_URL_MAPPING * @global string $_SERVER['REQUEST_URI'] this will be modified (bad practice warning) * @return redirect location */ public function onBeforeInit() { if (!$this->owner->canAccess()) { global $_FILE_TO_URL_MAPPING; // redirect to domain.com/admin etc if there's the base path is set & you're in a subsite if (Subsite::currentSubsiteID() != 0 && isset($_FILE_TO_URL_MAPPING[BASE_PATH])) { $serverurl = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_STRING); $controller = Controller::curr(); if (strpos($serverurl, '/admin') === 0 && !$controller->getRequest()->getVar('SubsiteID')) { // redirect to the correct site admin location $url = Controller::join_links($_FILE_TO_URL_MAPPING[BASE_PATH], $serverurl, "?SubsiteID=" . Subsite::currentSubsiteID()); return Controller::curr()->redirect($url); } } } return parent::onBeforeInit(); }
public function loadFixtures() { if (ClassInfo::exists('Subsite')) { $currentSubsite = Subsite::currentSubsiteID(); } foreach (self::$preload_fixtures as $desc) { $fixtureFile = $desc['file']; if (file_exists(Director::baseFolder() . '/' . $fixtureFile)) { $siteID = null; if (isset($desc['subsite'])) { $site = DataObject::get_one('Subsite', '"Title" = \'' . Convert::raw2sql($desc['subsite']) . '\''); if ($site && $site->ID) { $siteID = $site->ID; } if (!$siteID) { // no site, so just skip this file load continue; } } // need to disable the filter when running dev/build so that it actually searches // within the relevant subsite, not the 'current' one. if (ClassInfo::exists('Subsite')) { Subsite::$disable_subsite_filter = true; } $filter = $desc['filter'] . ($siteID ? ' AND "SubsiteID"=' . $siteID : ''); $existing = DataObject::get_one($desc['type'], $filter); if (ClassInfo::exists('Subsite')) { Subsite::$disable_subsite_filter = false; } if (!$existing) { if ($siteID) { Subsite::changeSubsite($siteID); } $fixture = new YamlFixture($fixtureFile); $fixture->saveIntoDatabase(); DB::alteration_message('YAML bootstrap loaded from ' . $fixtureFile, 'created'); } } } if (ClassInfo::exists('Subsite')) { Subsite::changeSubsite($currentSubsite); } }
function testAlternateAccessCheck() { $admin = $this->objFromFixture("Member", "admin"); $this->loginAs($admin); $ids = array(); $subsite1 = $this->objFromFixture('Subsite', 'domaintest1'); $subsite2 = $this->objFromFixture('Subsite', 'domaintest2'); $subsite3 = $this->objFromFixture('Subsite', 'domaintest3'); $ids[] = $subsite1->ID; $ids[] = $subsite2->ID; $ids[] = $subsite3->ID; $ids[] = 0; foreach ($ids as $id) { Subsite::changeSubsite($id); //switch to main site (subsite ID zero) $left = new LeftAndMain(); $this->assertTrue($left->canView(), "Admin user can view subsites LeftAndMain with id = '{$id}'"); $this->assertEquals($id, Subsite::currentSubsiteID(), "The current subsite has not been changed in the process of checking permissions for admin user."); } }
public function getEditForm($id = null, $fields = null) { $form = parent::getEditForm($id, $fields); $fields = $form->Fields(); $params = $this->request->requestVar('q'); $gridField = $form->Fields()->fieldByName($this->modelClass); if ($this->modelClass == 'Product') { $gridField->setConfig(new GridFieldConfig_Catalogue($this->modelClass, $this->config()->product_page_length)); } // Alterations for Hiarachy on product cataloge if ($this->modelClass == 'Category') { $gridField->setConfig(new GridFieldConfig_Catalogue($this->modelClass, $this->config()->category_page_length, "Sort")); } // Update list of items for subsite (if used) if (class_exists('Subsite')) { $list = $gridField->getList()->filter(array('SubsiteID' => Subsite::currentSubsiteID())); $gridField->setList($list); } $this->extend("updateEditForm", $form); return $form; }
public function getEditForm($id = null, $fields = null) { $form = parent::getEditForm($id, $fields); $fields = $form->Fields(); $config = null; // Bulk manager $manager = new GridFieldBulkManager(); $manager->removeBulkAction("bulkEdit"); $manager->removeBulkAction("unLink"); // Manage orders if ($this->modelClass == 'Order') { $gridField = $fields->fieldByName('Order'); $config = $gridField->getConfig(); $manager->addBulkAction('cancelled', 'Mark Cancelled', 'OrdersFieldBulkActions'); $manager->addBulkAction('paid', 'Mark Paid', 'OrdersFieldBulkActions'); $manager->addBulkAction('processing', 'Mark Processing', 'OrdersFieldBulkActions'); $manager->addBulkAction('dispatched', 'Mark Dispatched', 'OrdersFieldBulkActions'); // Update list of items for subsite (if used) if (class_exists('Subsite')) { $list = $gridField->getList()->filter(array('SubsiteID' => Subsite::currentSubsiteID())); $gridField->setList($list); } } // Manage Estimates if ($this->modelClass == 'Estimate') { $gridField = $fields->fieldByName('Estimate'); $config = $gridField->getConfig(); // Update list of items for subsite (if used) if (class_exists('Subsite')) { $list = $gridField->getList()->filter(array('SubsiteID' => Subsite::currentSubsiteID())); $gridField->setList($list); } } // Set our default detailform and bulk manager if ($config) { $config->removeComponentsByType('GridFieldDetailForm')->addComponent($manager)->addComponent(new OrdersGridFieldDetailForm()); } $this->extend("updateEditForm", $form); return $form; }
function testAccessChecksDontChangeCurrentSubsite() { $admin = $this->objFromFixture("Member", "admin"); $this->loginAs($admin); $ids = array(); $subsite1 = $this->objFromFixture('Subsite', 'domaintest1'); $subsite2 = $this->objFromFixture('Subsite', 'domaintest2'); $subsite3 = $this->objFromFixture('Subsite', 'domaintest3'); $ids[] = $subsite1->ID; $ids[] = $subsite2->ID; $ids[] = $subsite3->ID; $ids[] = 0; // Enable session-based subsite tracking. Subsite::$use_session_subsiteid = true; foreach ($ids as $id) { Subsite::changeSubsite($id); $this->assertEquals($id, Subsite::currentSubsiteID()); $left = new LeftAndMain(); $this->assertTrue($left->canView(), "Admin user can view subsites LeftAndMain with id = '{$id}'"); $this->assertEquals($id, Subsite::currentSubsiteID(), "The current subsite has not been changed in the process of checking permissions for admin user."); } }
public function getEditForm($id = null, $fields = null) { $form = parent::getEditForm($id, $fields); $fields = $form->Fields(); if ($this->modelClass == 'CustomMenuHolder') { $gridField = $fields->fieldByName('CustomMenuHolder'); // Tidy up category config and remove default add button $field_config = $gridField->getConfig(); $field_config->removeComponentsByType('GridFieldExportButton')->removeComponentsByType('GridFieldPrintButton')->removeComponentsByType('GridFieldAddNewButton'); // Add creation button if member has create permissions if (Permission::check('ADMIN') || Permission::check('MENU_CREATE')) { $add_button = new GridFieldAddNewButton('toolbar-header-left'); $add_button->setButtonName(_t('CustomMenus.AddMenu', 'Add Menu')); $field_config->addComponent($add_button); } // Update list of items for subsite (if used) if (class_exists('Subsite')) { $list = $gridField->getList()->filter(array('SubsiteID' => Subsite::currentSubsiteID())); $gridField->setList($list); } } return $form; }
function updatePageOptions(&$fields) { $fields->push(new HiddenField('SubsiteID', 'SubsiteID', Subsite::currentSubsiteID())); }
/** * Return an existing member with administrator privileges, or create one of necessary. * * Will create a default 'Administrators' group if no group is found * with an ADMIN permission. Will create a new 'Admin' member with administrative permissions * if no existing Member with these permissions is found. * * Important: Any newly created administrator accounts will NOT have valid * login credentials (Email/Password properties), which means they can't be used for login * purposes outside of any default credentials set through {@link Security::setDefaultAdmin()}. * * @return Member */ public static function findAnAdministrator() { // coupling to subsites module $origSubsite = null; if (is_callable('Subsite::changeSubsite')) { $origSubsite = Subsite::currentSubsiteID(); Subsite::changeSubsite(0); } $member = null; // find a group with ADMIN permission $adminGroup = Permission::get_groups_by_permission('ADMIN')->First(); if (is_callable('Subsite::changeSubsite')) { Subsite::changeSubsite($origSubsite); } if ($adminGroup) { $member = $adminGroup->Members()->First(); } if (!$adminGroup) { singleton('Group')->requireDefaultRecords(); $adminGroup = Permission::get_groups_by_permission('ADMIN')->First(); } if (!$member) { singleton('Member')->requireDefaultRecords(); $member = Permission::get_members_by_permission('ADMIN')->First(); } if (!$member) { $member = Member::default_admin(); } if (!$member) { // Failover to a blank admin $member = Member::create(); $member->FirstName = _t('Member.DefaultAdminFirstname', 'Default Admin'); $member->write(); // Add member to group instead of adding group to member // This bypasses the privilege escallation code in Member_GroupSet $adminGroup->DirectMembers()->add($member); } return $member; }
/** * Return an existing member with administrator privileges, or create one of necessary. * * Will create a default 'Administrators' group if no group is found * with an ADMIN permission. Will create a new 'Admin' member with administrative permissions * if no existing Member with these permissions is found. * * Important: Any newly created administrator accounts will NOT have valid * login credentials (Email/Password properties), which means they can't be used for login * purposes outside of any default credentials set through {@link Security::setDefaultAdmin()}. * * @return Member */ static function findAnAdministrator() { // coupling to subsites module $origSubsite = null; if (is_callable('Subsite::changeSubsite')) { $origSubsite = Subsite::currentSubsiteID(); Subsite::changeSubsite(0); } $member = null; // find a group with ADMIN permission $adminGroup = DataObject::get('Group', "\"Permission\".\"Code\" = 'ADMIN'", "\"Group\".\"ID\"", "JOIN \"Permission\" ON \"Group\".\"ID\"=\"Permission\".\"GroupID\"", '1')->First(); if (is_callable('Subsite::changeSubsite')) { Subsite::changeSubsite($origSubsite); } if ($adminGroup) { $member = $adminGroup->Members()->First(); } if (!$adminGroup) { singleton('Group')->requireDefaultRecords(); } if (!$member) { singleton('Member')->requireDefaultRecords(); $member = Permission::get_members_by_permission('ADMIN')->First(); } return $member; }
/** * Return a piece of text to keep DataObject cache keys appropriately specific */ public function cacheKeyComponent() { return 'subsite-' . Subsite::currentSubsiteID(true); }
public function getEditForm($id = null, $fields = null) { $form = parent::getEditForm($id, $fields); $params = $this->request->requestVar('q'); // Bulk manager $manager = new GridFieldBulkManager(); $manager->removeBulkAction("unLink"); $manager->addBulkAction('disable', 'Disable', 'CatalogueProductBulkAction'); $manager->addBulkAction('enable', 'Enable', 'CatalogueProductBulkAction'); if ($this->modelClass == 'Product') { $gridField = $form->Fields()->fieldByName('Product'); $field_config = $gridField->getConfig(); // Re add creation button and update grid field $add_button = new GridFieldAddNewButton('buttons-before-left'); $add_button->setButtonName(_t("CatalogueAdmin.AddProduct", "Add Product")); $field_config->removeComponentsByType('GridFieldPrintButton')->removeComponentsByType('GridFieldAddNewButton')->removeComponentsByType('GridFieldDetailForm')->addComponents($add_button, $manager, new CatalogueEnableDisableDetailForm()); // Set the page length $field_config->getComponentByType('GridFieldPaginator')->setItemsPerPage($this->config()->product_page_length); // Update list of items for subsite (if used) if (class_exists('Subsite')) { $list = $gridField->getList()->filter(array('SubsiteID' => Subsite::currentSubsiteID())); $gridField->setList($list); } } // Alterations for Hiarachy on product cataloge if ($this->modelClass == 'Category') { $gridField = $form->Fields()->fieldByName('Category'); // Set custom record editor $record_editor = new CatalogueEnableDisableDetailForm(); $record_editor->setItemRequestClass('CatalogueCategory_ItemRequest'); // Create add button and update grid field $add_button = new GridFieldAddNewButton('toolbar-header-left'); $add_button->setButtonName(_t("CatalogueAdmin.AddCategory", "Add Category")); // Tidy up category config $field_config = $gridField->getConfig(); $field_config->removeComponentsByType('GridFieldExportButton')->removeComponentsByType('GridFieldPrintButton')->removeComponentsByType('GridFieldDetailForm')->removeComponentsByType('GridFieldAddNewButton')->addComponents($record_editor, $add_button, $manager, GridFieldOrderableRows::create('Sort')); // Set the page length $field_config->getComponentByType('GridFieldPaginator')->setItemsPerPage($this->config()->category_page_length); // Setup hierarchy view $parentID = $this->request->requestVar('ParentID'); if ($parentID) { $field_config->addComponent(GridFieldLevelup::create($parentID)->setLinkSpec('?ParentID=%d')->setAttributes(array('data-pjax' => 'ListViewForm,Breadcrumbs'))); } // Find data colums, so we can add link to view children $columns = $gridField->getConfig()->getComponentByType('GridFieldDataColumns'); // Don't allow navigating into children nodes on filtered lists $fields = array('Title' => 'Title', 'URLSegment' => 'URLSegement'); if (!$params) { $fields = array_merge(array('listChildrenLink' => ''), $fields); } $columns->setDisplayFields($fields); $columns->setFieldCasting(array('Title' => 'HTMLText', 'URLSegment' => 'Text')); $controller = $this; $columns->setFieldFormatting(array('listChildrenLink' => function ($value, &$item) use($controller) { return sprintf('<a class="list-children-link" data-pjax-target="ListViewForm" href="%s?ParentID=%d">►</a>', $controller->Link(), $item->ID); })); // Update list of items for subsite (if used) if (class_exists('Subsite')) { $list = $gridField->getList()->filter(array('SubsiteID' => Subsite::currentSubsiteID())); $gridField->setList($list); } } $this->extend("updateEditForm", $form); return $form; }
/** * Get an email template by code * * @param string $code * @return EmailTemplate */ public static function getByCode($code) { $template = EmailTemplate::get()->filter('Code', $code)->first(); // If subsite, fallback to main site email if not defined if (!$template && class_exists('Subsite') && Subsite::currentSubsiteID()) { Subsite::$disable_subsite_filter = true; $template = EmailTemplate::get()->filter('Code', $code)->first(); Subsite::$disable_subsite_filter = false; } // In dev mode, create a placeholder email if (!$template) { $template = new EmailTemplate(); $template->Title = $code; $template->Code = $code; $template->Content = ''; $template->write(); } return $template; }
function onAfterWrite() { // New record test approximated by checking whether the ID has changed. // Note also that the after write test is only used when we're on a subsite if ($this->owner->isChanged('ID') && ($currentSubsiteID = Subsite::currentSubsiteID())) { $subsites = $this->owner->Subsites(); $subsites->add($currentSubsiteID); } }
function updateCMSFields(FieldList $fields) { $fields->push(new HiddenField('SubsiteID', 'SubsiteID', Subsite::currentSubsiteID())); }
function augmentNewSiteTreeItem(&$item) { $item->SubsiteID = isset($_POST['SubsiteID']) ? $_POST['SubsiteID'] : Subsite::currentSubsiteID(); }
/** * Return an existing member with administrator privileges, or create one of necessary. * * Will create a default 'Administrators' group if no group is found * with an ADMIN permission. Will create a new 'Admin' member with administrative permissions * if no existing Member with these permissions is found. * * Important: Any newly created administrator accounts will NOT have valid * login credentials (Email/Password properties), which means they can't be used for login * purposes outside of any default credentials set through {@link Security::setDefaultAdmin()}. * * @return Member */ public static function findAnAdministrator() { // coupling to subsites module $origSubsite = null; if (is_callable('Subsite::changeSubsite')) { $origSubsite = Subsite::currentSubsiteID(); Subsite::changeSubsite(0); } $member = null; // find a group with ADMIN permission $adminGroup = DataObject::get('Group')->where(array('"Permission"."Code"' => 'ADMIN'))->sort('"Group"."ID"')->innerJoin("Permission", '"Group"."ID" = "Permission"."GroupID"')->First(); if (is_callable('Subsite::changeSubsite')) { Subsite::changeSubsite($origSubsite); } if ($adminGroup) { $member = $adminGroup->Members()->First(); } if (!$adminGroup) { singleton('Group')->requireDefaultRecords(); } if (!$member) { singleton('Member')->requireDefaultRecords(); $member = Permission::get_members_by_permission('ADMIN')->First(); } return $member; }
/** * @return stdClass */ public function getJobData() { // okay, we NEED to store the subsite ID if there's one available if (!$this->SubsiteID && class_exists('Subsite')) { $this->SubsiteID = Subsite::currentSubsiteID(); } $data = new stdClass(); $data->totalSteps = $this->totalSteps; $data->currentStep = $this->currentStep; $data->isComplete = $this->isComplete; $data->jobData = $this->jobData; $data->messages = $this->messages; return $data; }
function alterQuery($query, $index) { $subsite = Subsite::currentSubsiteID(); $query->filter('_subsite', array($subsite, SearchQuery::$missing)); }
/** * Link to this record. Expect the "Page" method or relation to be set * * Page can either return a page object (method Link will be used) or * a string (slug will be appended) * * @return string */ public function Link() { if (!$this->owner->Slug && $this->owner->ID) { if ($this->canWriteSlug()) { $this->owner->write(); } else { return ''; } } /* @var $page Page */ $page = $this->owner->Page(); if (is_string($page)) { return rtrim($page, '/') . '/' . $this->owner->Slug; } if (!$page) { if (Controller::has_curr()) { return Controller::curr()->Link('detail/' . $this->owner->Slug); } return ''; } if (class_exists('Subsite') && Subsite::currentSubsiteID()) { $spage = $this->owner->SubsitePage(); if ($spage) { $page = $spage; } // On frontend, we might display objects from other subsites if ($this->owner->SubsiteID != Subsite::currentSubsiteID()) { $link = $page->AbsoluteLink(); return $link . 'detail/' . $this->owner->Slug; } // In the cms and with subsite, we might need to use absolute link if (Controller::has_curr() && Controller::curr() instanceof LeftAndMain) { return $page->AbsoluteLink() . 'detail/' . $this->owner->Slug; } } return $page->Link('detail/' . $this->owner->Slug); }