function testEachSubsiteHasAUniqueSiteConfig() { $subsite1 = $this->objFromFixture('Subsite', 'domaintest1'); $subsite2 = $this->objFromFixture('Subsite', 'domaintest2'); $this->assertTrue(is_array(singleton('SiteConfigSubsites')->extraStatics())); Subsite::changeSubsite(0); $sc = SiteConfig::current_site_config(); $sc->Title = 'RootSite'; $sc->write(); Subsite::changeSubsite($subsite1->ID); $sc = SiteConfig::current_site_config(); $sc->Title = 'Subsite1'; $sc->write(); Subsite::changeSubsite($subsite2->ID); $sc = SiteConfig::current_site_config(); $sc->Title = 'Subsite2'; $sc->write(); Subsite::changeSubsite(0); $this->assertEquals(SiteConfig::current_site_config()->Title, 'RootSite'); Subsite::changeSubsite($subsite1->ID); $this->assertEquals(SiteConfig::current_site_config()->Title, 'Subsite1'); Subsite::changeSubsite($subsite2->ID); $this->assertEquals(SiteConfig::current_site_config()->Title, 'Subsite2'); $keys = SiteConfig::current_site_config()->extend('cacheKeyComponent'); $this->assertContains('subsite-' . $subsite2->ID, $keys); }
/** * Alter file path to generated a static (static) error page file to handle error page template on different sub-sites * * @see Error::get_filepath_for_errorcode() * * FIXME since {@link Subsite::currentSubsite()} partly relies on Session, viewing other sub-site (including main site) between * opening ErrorPage in the CMS and publish ErrorPage causes static error page to get generated incorrectly. */ function alternateFilepathForErrorcode($statusCode, $locale = null) { $static_filepath = Object::get_static($this->owner->ClassName, 'static_filepath'); $subdomainPart = ""; // Try to get current subsite from session $subsite = Subsite::currentSubsite(false); // since this function is called from Page class before the controller is created, we have to get subsite from domain instead if (!$subsite) { $subsiteID = Subsite::getSubsiteIDForDomain(); if ($subsiteID != 0) { $subsite = DataObject::get_by_id("Subsite", $subsiteID); } else { $subsite = null; } } if ($subsite) { $subdomain = $subsite->domain(); $subdomainPart = "-{$subdomain}"; } if (singleton('SiteTree')->hasExtension('Translatable') && $locale && $locale != Translatable::default_locale()) { $filepath = $static_filepath . "/error-{$statusCode}-{$locale}{$subdomainPart}.html"; } else { $filepath = $static_filepath . "/error-{$statusCode}{$subdomainPart}.html"; } return $filepath; }
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; }
function updateCMSFields(FieldList $fields) { if (class_exists('Subsite')) { $fields->push(new HiddenField('SubsiteID', 'SubsiteID', Subsite::currentSubsiteID())); } return $fields; }
function testWritingSubsiteID() { $this->objFromFixture('Member', 'admin')->logIn(); $subsite = $this->objFromFixture('Subsite', 'domaintest1'); FileSubsites::$default_root_folders_global = true; Subsite::changeSubsite(0); $file = new File(); $file->write(); $file->onAfterUpload(); $this->assertEquals((int) $file->SubsiteID, 0); Subsite::changeSubsite($subsite->ID); $this->assertTrue($file->canEdit()); $file = new File(); $file->write(); $this->assertEquals((int) $file->SubsiteID, 0); $this->assertTrue($file->canEdit()); FileSubsites::$default_root_folders_global = false; Subsite::changeSubsite($subsite->ID); $file = new File(); $file->write(); $this->assertEquals($file->SubsiteID, $subsite->ID); // Test inheriting from parent folder $folder = new Folder(); $folder->write(); $this->assertEquals($folder->SubsiteID, $subsite->ID); FileSubsites::$default_root_folders_global = true; $file = new File(); $file->ParentID = $folder->ID; $file->onAfterUpload(); $this->assertEquals($folder->SubsiteID, $file->SubsiteID); }
function onBeforeWrite() { if (!$this->owner->ID && !$this->owner->SubsiteID) { $this->owner->SubsiteID = Subsite::currentSubsiteID(); } parent::onBeforeWrite(); }
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; }
public function updateCMSFields(FieldList $fields) { $fields->removeByName('SubsiteID'); if (class_exists('Subsite')) { $fields->push(new HiddenField('SubsiteID', 'SubsiteID', Subsite::currentSubsiteID())); } }
public function subsiteCMSShowInMenu() { if (Subsite::currentSubsite()) { return false; } return true; }
/** * @return void */ public function onBeforeInit() { // Check if we are runing a dev build, if so check if DB needs // upgrading $controller = $this->owner->request->param("Controller"); $action = $this->owner->request->param("Action"); global $project; // Only check if the DB needs upgrading on a dev build if ($controller == "DevelopmentAdmin" && $action == "build") { // Now check if the files we need are installed // Check if we have the files we need, if not, create them if (!class_exists("Category")) { copy(BASE_PATH . "/catalogue/scaffold/Category", BASE_PATH . "/{$project}/code/model/Category.php"); } if (!class_exists("Category_Controller")) { copy(BASE_PATH . "/catalogue/scaffold/Category_Controller", BASE_PATH . "/{$project}/code/control/Category_Controller.php"); } if (!class_exists("Product")) { copy(BASE_PATH . "/catalogue/scaffold/Product", BASE_PATH . "/{$project}/code/model/Product.php"); } if (!class_exists("Product_Controller")) { copy(BASE_PATH . "/catalogue/scaffold/Product_Controller", BASE_PATH . "/{$project}/code/control/Product_Controller.php"); } } if ($controller != "DevelopmentAdmin") { if (class_exists('Subsite') && Subsite::currentSubsite()) { // Set the location i18n::set_locale(Subsite::currentSubsite()->Language); } } }
/** * Avoid subsites filtering on fixture fetching. */ function objFromFixture($class, $id) { Subsite::disable_subsite_filter(true); $obj = parent::objFromFixture($class, $id); Subsite::disable_subsite_filter(false); return $obj; }
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 getCMSFields() { $subsites = Subsite::accessible_sites("CMS_ACCESS_CMSMain"); if (!$subsites) { $subsites = new DataObjectSet(); } if (Subsite::hasMainSitePermission(null, array("CMS_ACCESS_CMSMain"))) { $subsites->push(new ArrayData(array('Title' => 'Main site', "\"ID\"" => 0))); } if ($subsites->Count()) { $subsiteSelectionField = new DropdownField("CopyContentFromID_SubsiteID", "Subsite", $subsites->toDropdownMap('ID', 'Title'), $this->CopyContentFromID ? $this->CopyContentFrom()->SubsiteID : Session::get('SubsiteID')); } // Setup the linking to the original page. $pageSelectionField = new SubsitesTreeDropdownField("RelatedPageID", _t('VirtualPage.CHOOSE', "Choose a page to link to"), "SiteTree", "ID", "MenuTitle"); if (isset($_GET['RelatedPageID_SubsiteID'])) { $pageSelectionField->setSubsiteID($_GET['RelatedPageID_SubsiteID']); } $pageSelectionField->setFilterFunction(create_function('$item', 'return $item->ClassName != "VirtualPage";')); if ($subsites->Count()) { $fields = new FieldSet($subsiteSelectionField, $pageSelectionField); } else { $fields = new FieldSet($pageSelectionField); } return $fields; }
/** * To process this job, we need to get the next page whose ID is the next greater than the last * processed. This way we don't need to remember a bunch of data about what we've processed */ public function process() { if (ClassInfo::exists('Subsite')) { Subsite::disable_subsite_filter(); } $class = $this->reindexType; $pages = $class::get(); $pages = $pages->filter(array('ID:GreaterThan' => $this->lastIndexedID)); $pages = $pages->limit(Config::inst()->get(__CLASS__, 'at_a_time')); $pages = $pages->sort('ID ASC'); if (ClassInfo::exists('Subsite')) { Subsite::$disable_subsite_filter = false; } if (!$pages || !$pages->count()) { $this->isComplete = true; return; } $mode = Versioned::get_reading_mode(); Versioned::reading_stage('Stage'); // index away $service = singleton('SolrSearchService'); $live = array(); $stage = array(); $all = array(); foreach ($pages as $page) { // Make sure the current page is not orphaned. if ($page->ParentID > 0) { $parent = $page->getParent(); if (is_null($parent) || $parent === false) { continue; } } // Appropriately index the current page, taking versioning into account. if ($page->hasExtension('Versioned')) { $stage[] = $page; $base = $page->baseTable(); $idField = '"' . $base . '_Live"."ID"'; $livePage = Versioned::get_one_by_stage($page->ClassName, 'Live', $idField . ' = ' . $page->ID); if ($livePage) { $live[] = $livePage; } } else { $all[] = $page; } $this->lastIndexedID = $page->ID; } if (count($all)) { $service->indexMultiple($all); } if (count($stage)) { $service->indexMultiple($stage, 'Stage'); } if (count($live)) { $service->indexMultiple($live, 'Live'); } Versioned::set_reading_mode($mode); $this->lastIndexedID = $page->ID; $this->currentStep += $pages->count(); }
public function run($request) { $groups = Group::get(); echo 'Pass ?drop=1 to drop groups without members<br/>'; echo 'Want more dropping? Pass ?permission=1 to also drop groups without permissions even if they have members<br/>'; echo 'Pass ?merge=1 to merge groups with the same code<br/>'; echo 'Want to merge across subsites ? Pass ?subsite=1 to disable subsite filters<br/>'; echo '<hr/>'; $merge = $request->getVar('merge'); $drop = $request->getVar('drop'); $dropNoPermission = $request->getVar('permission'); $subsite = $request->getVar('subsite'); if (class_exists('Subsite') && $subsite) { Subsite::$disable_subsite_filter = true; } if ($drop) { DB::alteration_message("Dropping groups with no members"); if ($dropNoPermission) { DB::alteration_message("Also dropping groups with no permissions"); } foreach ($groups as $group) { if (!$group->Members()->count()) { DB::alteration_message("Removing group {$group->ID} because it has no members", "deleted"); $group->delete(); } if ($dropNoPermission) { $c = $group->Permissions()->count(); if (!$c) { DB::alteration_message("Removing group {$group->ID} because it has no permissions", "deleted"); $group->delete(); } } } } if ($merge) { DB::alteration_message("Merging groups with duplicated codes"); $index = array(); /* @var $group Group */ foreach ($groups as $group) { DB::alteration_message("Found group " . $group->Code); if (!isset($index[$group->Code])) { $index[$group->Code] = $group; DB::alteration_message("First instance of group, do not merge"); continue; } $mergeGroup = $index[$group->Code]; DB::alteration_message('Merge group ' . $group->ID . ' with ' . $mergeGroup->ID, 'repaired'); $i = 0; foreach ($group->Members() as $m) { $i++; $mergeGroup->Members()->add($m); } DB::alteration_message('Added ' . $i . ' members to group', 'created'); DB::alteration_message("Group " . $group->ID . ' was deleted', 'deleted'); $group->delete(); } } DB::alteration_message('All done!'); }
function getQuery() { $oldState = Subsite::$disable_subsite_filter; Subsite::$disable_subsite_filter = true; $return = parent::getQuery(); Subsite::$disable_subsite_filter = $oldState; return $return; }
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}'"); } }
/** * @param array $compatibility */ public static function done(array $compatibility) { if (class_exists("Subsite")) { Subsite::$disable_subsite_filter = $compatibility[self::SUBSITES]; } if (class_exists("Translatable")) { Translatable::enable_locale_filter($compatibility[self::TRANSLATABLE]); } }
/** * 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; }
public function onBeforeWrite() { parent::onBeforeWrite(); // If subsites enabled if (class_exists('Subsite') && ($subsite = Subsite::currentSubsite())) { $this->SubsiteID = $subsite->ID; } // Ensure the slug is URL safe $this->Slug = $this->Slug ? Convert::raw2url($this->Slug) : Convert::raw2url($this->Title); }
/** * Modify the content to include subsite links * @global array $subsiteDomainIDs * @param array $arguments * @param string $content * @param type $parser * @return string links */ public static function link_shortcode_handler($arguments, $content = null, $parser = null) { if (!isset($arguments['id'])) { return; } $argumentarray = explode('-', $arguments['id']); if (count($argumentarray) != 2) { return; } $subsiteid = $argumentarray[0]; $id = $argumentarray[1]; $page = null; if ($id) { $page = DataObject::get_by_id('SiteTree', $id); // Get the current page by ID. if (!$page) { $page = Versioned::get_latest_version('SiteTree', $id); // Attempt link to old version. } } else { $page = DataObject::get_one('ErrorPage', '"ErrorPage"."ErrorCode" = \'404\''); // Link to 404 page. } if (!$page) { return; // There were no suitable matches at all. } $currentSubsite = Subsite::get()->byID((int) $subsiteid); $currenturl = null; if ($currentSubsite) { if (Director::isDev()) { $currenturl = $currentSubsite->DevDomainID ? $currentSubsite->DevDomain() : null; } if (Director::isTest()) { $currenturl = $currentSubsite->TestDomainID ? $currentSubsite->TestDomain() : null; } if (!$currenturl) { $currenturl = $currentSubsite->getPrimarySubsiteDomain(); } $currenturl = $currenturl->getFullProtocol() . $currenturl->Domain; // override if (Director::isDev() || Director::isTest()) { if (defined('DEV_SUBSITE_' . (int) $subsiteid)) { $subsiteurl = 'DEV_SUBSITE_' . (int) $subsiteid; $currenturl = constant($subsiteurl); } } } $link = Convert::raw2att($page->Link()); if ($content) { return sprintf('<a href="%s">%s</a>', $currenturl . $link, $parser->parse($content)); } else { return $currenturl . $link; } }
function doSave($data, $form) { $new_record = $this->record->ID == 0; if ($new_record && isset($data['TemplateID']) && !empty($data['TemplateID'])) { $template = Subsite::get()->byID(intval($data['TemplateID'])); if ($template) { $this->record = $template->duplicate(); } } return parent::doSave($data, $form); }
function Items() { if (class_exists('Subsite')) { Subsite::$disable_subsite_filter = true; } $items = parent::Items(); if (class_exists('Subsite')) { Subsite::$disable_subsite_filter = false; } return $items; }
protected function getItem() { if (ClassInfo::exists('Subsite')) { Subsite::disable_subsite_filter(true); } $item = DataObject::get_by_id($this->itemType, $this->itemID); if (ClassInfo::exists('Subsite')) { Subsite::disable_subsite_filter(false); } return $item; }
/** * Test Subsite::accessible_sites() */ function testAccessibleSites() { $member1Sites = Subsite::accessible_sites("CMS_ACCESS_CMSMain", false, null, $this->objFromFixture('Member', 'subsite1member')); $member1SiteTitles = $member1Sites->column("Title"); sort($member1SiteTitles); $this->assertEquals(array('Subsite1 Template'), $member1SiteTitles); $adminSites = Subsite::accessible_sites("CMS_ACCESS_CMSMain", false, null, $this->objFromFixture('Member', 'admin')); $adminSiteTitles = $adminSites->column("Title"); sort($adminSiteTitles); $this->assertEquals(array('Subsite1 Template', 'Subsite2 Template', 'Template', 'Test 1', 'Test 2', 'Test 3'), $adminSiteTitles); }
/** * Test generation of the view */ function testBasicView() { Subsite::$write_hostmap = false; $subsite1ID = $this->objFromFixture('Subsite', 'domaintest1')->ID; // Open the admin area logged in as admin $response1 = Director::test('admin/subsites/', null, $this->adminLoggedInSession()); // Confirm that this URL gets you the entire page, with the edit form loaded $response2 = Director::test("admin/subsites/Subsite/{$subsite1ID}/edit", null, $this->adminLoggedInSession()); $this->assertTrue(strpos($response2->getBody(), 'id="Form_EditForm_ID"') !== false, "Testing Form_EditForm_ID exists"); $this->assertTrue(strpos($response2->getBody(), '<head') !== false, "Testing <head> exists"); }
/** * 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; }
function doCreate($data, $form, $request) { if (isset($data['TemplateID']) && $data['TemplateID']) { $template = DataObject::get_by_id('Subsite_Template', $data['TemplateID']); } else { $template = null; } // Create subsite from existing template switch ($data['Type']) { case 'template': if ($template) { $subsite = $template->duplicate(); } else { $subsite = new Subsite_Template(); $subsite->write(); } break; case 'subsite': default: if ($template) { $subsite = $template->createInstance($data['Title']); } else { $subsite = new Subsite(); $subsite->Title = $data['Title']; $subsite->write(); } break; } $form->dataFieldByName('Domains')->setExtraData(array("SubsiteID" => $subsite->ID)); $form->saveInto($subsite); $subsite->write(); if (Director::is_ajax()) { $recordController = new ModelAdmin_RecordController($this, $request, $subsite->ID); return new SS_HTTPResponse($recordController->EditForm()->forAjaxTemplate(), 200, sprintf(_t('ModelAdmin.LOADEDFOREDITING', "Loaded '%s' for editing."), $subsite->Title)); } else { Director::redirect(Controller::join_links($this->Link(), $subsitess->ID, 'edit')); } }
public function subsitesTests() { $this->doEcho('Subsites', true); $subsites = Subsite::get()->sort('ID ASC'); foreach ($subsites as $s) { $this->doEcho("{$s->Title} (#{$s->ID}):"); //Setting subsite via $_GET //this is not bes practice, but this seems to be the only way that works //when running this over the command line $_GET['SubsiteID'] = $s->ID; $this->doEcho(SubsiteUploadDirRules::get_directory_for_subsite()); $this->doEcho(); } }