From 3ca2861c2dd9abf94cfc8d1b760c9a3d93dee469 Mon Sep 17 00:00:00 2001 From: micmania1 Date: Tue, 17 Feb 2015 01:13:56 +0000 Subject: [PATCH 1/9] FIX: Removed unnecessary redirect. This is early enough in the script that the correct subsite will be used from hereon. --- code/extensions/LeftAndMainSubsites.php | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/code/extensions/LeftAndMainSubsites.php b/code/extensions/LeftAndMainSubsites.php index a0f3497..af8c464 100644 --- a/code/extensions/LeftAndMainSubsites.php +++ b/code/extensions/LeftAndMainSubsites.php @@ -217,12 +217,10 @@ class LeftAndMainSubsites extends Extension { // Update current subsite in session Subsite::changeSubsite($_GET['SubsiteID']); - if ($this->owner->canView(Member::currentUser())) { - //Redirect to clear the current page - return $this->owner->redirect($this->owner->Link()); + if (!$this->owner->canView(Member::currentUser())) { + //Redirect to the default CMS section + return $this->owner->redirect('admin/'); } - //Redirect to the default CMS section - return $this->owner->redirect('admin/'); } // Automatically redirect the session to appropriate subsite when requesting a record. @@ -234,12 +232,10 @@ class LeftAndMainSubsites extends Extension { // Update current subsite in session Subsite::changeSubsite($record->SubsiteID); - if ($this->owner->canView(Member::currentUser())) { - //Redirect to clear the current page - return $this->owner->redirect($this->owner->Link()); + if (!$this->owner->canView(Member::currentUser())) { + //Redirect to the default CMS section + return $this->owner->redirect('admin/'); } - //Redirect to the default CMS section - return $this->owner->redirect('admin/'); } } From 2595d655cbd2f5846c8c138ef0694a229e07a172 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 23 Mar 2015 14:35:52 +1300 Subject: [PATCH 2/9] Fix subsites to use correct permissions See http://www.silverstripe.org/software/download/security-releases/ss-2015-008-sitetree-creation-permission-vulnerability --- tests/SiteTreeSubsitesTest.php | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/tests/SiteTreeSubsitesTest.php b/tests/SiteTreeSubsitesTest.php index cdd120d..b687da5 100644 --- a/tests/SiteTreeSubsitesTest.php +++ b/tests/SiteTreeSubsitesTest.php @@ -8,6 +8,10 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest { 'SiteTreeSubsitesTest_ClassA', 'SiteTreeSubsitesTest_ClassB' ); + + protected $illegalExtensions = array( + 'SiteTree' => array('Translatable') + ); function testPagesInDifferentSubsitesCanShareURLSegment() { $subsiteMain = $this->objFromFixture('Subsite', 'main'); @@ -129,7 +133,7 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest { } function testPageTypesBlacklistInClassDropdown() { - Session::set("loggedInAs", null); + $this->logInWithPermission('CMS_ACCESS_CMSMain'); $s1 = $this->objFromFixture('Subsite','domaintest1'); $s2 = $this->objFromFixture('Subsite','domaintest2'); @@ -164,7 +168,7 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest { } function testPageTypesBlacklistInCMSMain() { - Session::set("loggedInAs", null); + $this->logInWithPermission('CMS_ACCESS_CMSMain'); $cmsmain = new CMSMain(); @@ -175,16 +179,18 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest { $s1->write(); Subsite::changeSubsite($s1); - $classes = $cmsmain->PageTypes()->column('ClassName'); - $this->assertNotContains('ErrorPage', $classes); - $this->assertNotContains('SiteTreeSubsitesTest_ClassA', $classes); - $this->assertContains('SiteTreeSubsitesTest_ClassB', $classes); - - Subsite::changeSubsite($s2); - $classes = $cmsmain->PageTypes()->column("ClassName"); + $hints = Convert::json2array($cmsmain->SiteTreeHints()); + $classes = $hints['Root']['disallowedChildren']; $this->assertContains('ErrorPage', $classes); $this->assertContains('SiteTreeSubsitesTest_ClassA', $classes); - $this->assertContains('SiteTreeSubsitesTest_ClassB', $classes); + $this->assertNotContains('SiteTreeSubsitesTest_ClassB', $classes); + + Subsite::changeSubsite($s2); + $hints = Convert::json2array($cmsmain->SiteTreeHints()); + $classes = $hints['Root']['disallowedChildren']; + $this->assertNotContains('ErrorPage', $classes); + $this->assertNotContains('SiteTreeSubsitesTest_ClassA', $classes); + $this->assertNotContains('SiteTreeSubsitesTest_ClassB', $classes); } } From 750cdbcff9218db984e24ba39adde7409ddbe31c Mon Sep 17 00:00:00 2001 From: Christopher Pitt Date: Tue, 9 Jun 2015 09:29:51 +1200 Subject: [PATCH 3/9] 3.2 compat changes --- .gitignore | 1 + code/extensions/SiteTreeSubsites.php | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e43b0f9..6fdc0f3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store +host-map.php diff --git a/code/extensions/SiteTreeSubsites.php b/code/extensions/SiteTreeSubsites.php index ebb2a2b..2a82701 100644 --- a/code/extensions/SiteTreeSubsites.php +++ b/code/extensions/SiteTreeSubsites.php @@ -205,7 +205,10 @@ class SiteTreeSubsites extends DataExtension { */ static function contentcontrollerInit($controller) { $subsite = Subsite::currentSubsite(); - if($subsite && $subsite->Theme) SSViewer::set_theme(Subsite::currentSubsite()->Theme); + + if($subsite && $subsite->Theme){ + Config::inst()->update('SSViewer', 'theme', Subsite::currentSubsite()->Theme); + } } function alternateAbsoluteLink() { From 996abfcc583cb262b75def28ec8aaebd23aeb77b Mon Sep 17 00:00:00 2001 From: wernerkrauss Date: Wed, 17 Jun 2015 16:30:56 +0200 Subject: [PATCH 4/9] Wrong edit link in SubsitesVirtualPage In SS3.1 we have /admin/pages for cms, was still old link. --- code/SubsitesVirtualPage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/SubsitesVirtualPage.php b/code/SubsitesVirtualPage.php index 5d8831c..8b41f04 100644 --- a/code/SubsitesVirtualPage.php +++ b/code/SubsitesVirtualPage.php @@ -51,7 +51,7 @@ class SubsitesVirtualPage extends VirtualPage { // Create links back to the original object in the CMS if($this->CopyContentFromID) { - $editLink = "admin/page/edit/show/$this->CopyContentFromID/?SubsiteID=" . $this->CopyContentFrom()->SubsiteID; + $editLink = "admin/pages/edit/show/$this->CopyContentFromID/?SubsiteID=" . $this->CopyContentFrom()->SubsiteID; $linkToContent = " " . _t('VirtualPage.EDITCONTENT', 'Click here to edit the content') . From 3bcaa48d6728efca2e86879a9a8653a1c3cd6af7 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Thu, 20 Aug 2015 12:47:37 +1200 Subject: [PATCH 5/9] Update translations --- lang/en.yml | 15 ++++++++++----- lang/id.yml | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 lang/id.yml diff --git a/lang/en.yml b/lang/en.yml index daab8de..4a4bda6 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -1,8 +1,4 @@ en: - SubsiteAdmin: - MENUTITLE: Subsites - SubsiteXHRController: - MENUTITLE: SubsiteXHRController ASSETADMIN: SUBSITENOTICE: 'Folders and files created in the main site are accessible by all subsites.' FileSubsites: @@ -20,6 +16,9 @@ en: SECURITYTABTITLE: Subsites LeftAndMainSubsites: Saved: 'Saved, please update related pages.' + LeftAndMain_Menu: + Hello: Hi + LOGOUT: 'Log out' SiteTreeSubsites: CopyAction: Copy CopyToSubsite: 'Copy page to subsite' @@ -42,6 +41,8 @@ en: SiteConfigTitle: 'Your Site Name' TabTitleConfig: Configuration ValidateTitle: 'Please add a "Title"' + SubsiteAdmin: + MENUTITLE: Subsites SubsiteDomain: DOMAIN: Domain IS_PRIMARY: 'Is Primary Domain' @@ -49,6 +50,8 @@ en: SINGULARNAME: 'Subsite Domain' SubsiteReportWrapper: ReportDropdown: Sites + SubsiteXHRController: + MENUTITLE: SubsiteXHRController Subsites: DefaultSiteFieldLabel: 'Default site' DomainFieldLabel: Domain @@ -62,6 +65,8 @@ en: TitleFieldLabel: 'Subsite Name' SubsitesVirtualPage: DESCRIPTION: 'Displays the content of a page on another subsite' - PLURALNAME: 'Subsites Virtual Pages' + PLURALNAME: 'Base Pages' SINGULARNAME: 'Subsites Virtual Page' SubsiteField: Subsite + VirtualPage: + EDITCONTENT: 'Click here to edit the content' diff --git a/lang/id.yml b/lang/id.yml new file mode 100644 index 0000000..52c3151 --- /dev/null +++ b/lang/id.yml @@ -0,0 +1,19 @@ +id: + SubsiteAdmin: + MENUTITLE: Subsitus + FileSubsites: + SubsiteFieldLabel: Subsitus + GroupSubsites: + SECURITYTABTITLE: Subsitus + Subsite: + CustomMetaDescription: Deskripsi + CustomMetaKeywords: Kata kunci + CustomMetaTitle: Judul + PLURALNAME: Subsitus + SINGULARNAME: Subsitus + SubsiteReportWrapper: + ReportDropdown: Situs + Subsites: + LanguageFieldLabel: Bahasa + SubsitesVirtualPage: + SubsiteField: Subsitus From 798a1158d6f58c4e4a1537e62dfee85d8be99239 Mon Sep 17 00:00:00 2001 From: Roman Schmid Date: Wed, 28 Oct 2015 10:39:21 +0100 Subject: [PATCH 6/9] Added missing route to `SubsiteXHRController` for SilverStripe 3.2 compatibility. --- _config/config.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/_config/config.yml b/_config/config.yml index b3b2e21..2e04505 100644 --- a/_config/config.yml +++ b/_config/config.yml @@ -4,3 +4,7 @@ After: 'framework/*','cms/*' --- AssetAdmin: treats_subsite_0_as_global: true + +Director: + rules: + 'SubsiteXHRController': 'SubsiteXHRController' From 8c9c62f08c15f7a261460d2f5b9b6e012d3ec3d6 Mon Sep 17 00:00:00 2001 From: scott1702 Date: Fri, 30 Oct 2015 15:46:16 +1300 Subject: [PATCH 7/9] Add sticky nav toggle button --- templates/LeftAndMain_Menu.ss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/templates/LeftAndMain_Menu.ss b/templates/LeftAndMain_Menu.ss index 9f77926..85c3c9f 100644 --- a/templates/LeftAndMain_Menu.ss +++ b/templates/LeftAndMain_Menu.ss @@ -37,6 +37,8 @@ From c7077ae74957792bf2af9cefcd69d85dee1e16f7 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Fri, 30 Oct 2015 17:44:50 +1300 Subject: [PATCH 8/9] Test 3 / 3.2 branches and php 5.6 --- .travis.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index fc0913f..92baae9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,18 +6,16 @@ php: - 5.4 env: - global: - - CORE_RELEASE=3 - matrix: - - DB=MYSQL - - DB=PGSQL + - DB=MYSQL CORE_RELEASE=3.2 matrix: include: - php: 5.3 - env: DB=MYSQL + env: DB=PGSQL CORE_RELEASE=3.2 + - php: 5.6 + env: DB=MYSQL CORE_RELEASE=3 - php: 5.4 - env: DB=MYSQL BEHAT_TEST=1 + env: DB=MYSQL CORE_RELEASE=3.2 BEHAT_TEST=1 before_script: - composer self-update From cf534aad31cb7b698e0e53353309cb80e9bb7277 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Wed, 10 Jul 2013 15:29:22 +0200 Subject: [PATCH 9/9] BUG Subsites selection on SubsitesVirtualPage (fixes #45 and #47) --- code/SubsitesVirtualPage.php | 18 ++++++----- javascript/SubsitesTreeDropdownField.js | 42 ++++++++++++++----------- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/code/SubsitesVirtualPage.php b/code/SubsitesVirtualPage.php index 5d8831c..d8ca46a 100644 --- a/code/SubsitesVirtualPage.php +++ b/code/SubsitesVirtualPage.php @@ -22,15 +22,13 @@ class SubsitesVirtualPage extends VirtualPage { $subsites->push(new ArrayData(array('Title' => 'Main site', 'ID' => 0))); - $subsiteSelectionField = new DropdownField( - "CopyContentFromID_SubsiteID", - _t('SubsitesVirtualPage.SubsiteField',"Subsite"), - $subsites->map('ID', 'Title'), - ($this->CopyContentFromID) ? $this->CopyContentFrom()->SubsiteID : Session::get('SubsiteID') - ); $fields->addFieldToTab( 'Root.Main', - $subsiteSelectionField, + DropdownField::create( + "CopyContentFromID_SubsiteID", + _t('SubsitesVirtualPage.SubsiteField',"Subsite"), + $subsites->map('ID', 'Title') + )->addExtraClass('subsitestreedropdownfield-chooser no-change-track'), 'CopyContentFromID' ); @@ -44,7 +42,7 @@ class SubsitesVirtualPage extends VirtualPage { ); if(Controller::has_curr() && Controller::curr()->getRequest()) { - $subsiteID = Controller::curr()->getRequest()->postVar('CopyContentFromID_SubsiteID'); + $subsiteID = Controller::curr()->getRequest()->requestVar('CopyContentFromID_SubsiteID'); $pageSelectionField->setSubsiteID($subsiteID); } $fields->replaceField('CopyContentFromID', $pageSelectionField); @@ -111,6 +109,10 @@ class SubsitesVirtualPage extends VirtualPage { return $labels; } + + public function getCopyContentFromID_SubsiteID() { + return ($this->CopyContentFromID) ? (int)$this->CopyContentFrom()->SubsiteID : (int)Session::get('SubsiteID'); + } public function getVirtualFields() { $fields = parent::getVirtualFields(); diff --git a/javascript/SubsitesTreeDropdownField.js b/javascript/SubsitesTreeDropdownField.js index 11365b5..3b24c34 100644 --- a/javascript/SubsitesTreeDropdownField.js +++ b/javascript/SubsitesTreeDropdownField.js @@ -1,24 +1,30 @@ (function($) { $.entwine('ss', function($) { - $('.TreeDropdownField').entwine({ - subsiteID: function() { - var subsiteSel = $('#CopyContentFromID_SubsiteID select')[0]; - if(!subsiteSel) return; - - subsiteSel.onchange = (function() { - this.createTreeNode(true); - this.ajaxGetTree((function(response) { - this.newTreeReady(response, true); - this.updateTreeLabel(); - }).bind(this)); - }).bind(this); - return subsiteSel.options[subsiteSel.selectedIndex].value; - }, - + /** + * Choose a subsite from which to select pages. + * Needs to clear tree dropdowns in case selection is changed. + */ + $('.subsitestreedropdownfield-chooser').entwine({ + onchange: function() { + // TODO Data binding between two fields + // TODO create resetField method on API instead + var fields = $('.SubsitesTreeDropdownField'); + fields.setValue(null); + fields.setTitle(null); + fields.find('.tree-holder').empty(); + } + }); + + /** + * Add selected subsite from separate dropdown to the request parameters + * before asking for the tree. + */ + $('.TreeDropdownField.SubsitesTreeDropdownField').entwine({ getRequestParams: function() { - var name = this.find(':input:hidden').attr('name'), obj = {}; - obj[name + '_SubsiteID'] = parseInt(this.subsiteID()); - return obj; + var name = this.find(':input[type=hidden]:first').attr('name') + '_SubsiteID', + source = $('[name=' + name + ']'), params = {}; + params[name] = source.length ? source.val() : null; + return params; } }); });