Navigation Menu

Skip to content

Commit

Permalink
BUG Prevent archived pages from having add to campaign action
Browse files Browse the repository at this point in the history
Fixes #1626
  • Loading branch information
Damian Mooyman committed Oct 31, 2016
1 parent 062c820 commit 4bf4fca
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 6 deletions.
16 changes: 10 additions & 6 deletions code/Model/SiteTree.php
Expand Up @@ -2215,6 +2215,11 @@ public function getCMSActions() {
$isPublished = $this->isPublished();
$stagesDiffer = $this->stagesDiffer(Versioned::DRAFT, Versioned::LIVE);

// Check permissions
$canPublish = $this->canPublish();
$canUnpublish = $this->canUnpublish();
$canEdit = $this->canEdit();

// Major actions appear as buttons immediately visible as page actions.
$majorActions = CompositeField::create()->setName('MajorActions');
$majorActions->setFieldHolderTemplate(get_class($majorActions) . '_holder_buttongroup');
Expand All @@ -2239,7 +2244,11 @@ public function getCMSActions() {
))->renderWith($infoTemplate)
)
);
$moreOptions->push(AddToCampaignHandler_FormAction::create());

// Add to campaign option if not-archived and has publish permission
if (($isPublished || $isOnDraft) && $canPublish) {
$moreOptions->push(AddToCampaignHandler_FormAction::create());
}

// "readonly"/viewing version that isn't the current version of the record
$stageRecord = Versioned::get_by_stage(static::class, Versioned::DRAFT)->byID($this->ID);
Expand All @@ -2254,11 +2263,6 @@ public function getCMSActions() {
return $actions;
}

// Check permissions
$canPublish = $this->canPublish();
$canUnpublish = $this->canUnpublish();
$canEdit = $this->canEdit();

// "unpublish"
if($isPublished && $canPublish && $isOnDraft && $canUnpublish) {
$moreOptions->push(
Expand Down
6 changes: 6 additions & 0 deletions tests/model/SiteTreeActionsTest.php
Expand Up @@ -45,6 +45,7 @@ public function testActionsReadonly() {
$page = Page::get()->byID($page->ID);
$actions = $page->getCMSActions();

$this->assertNull($actions->dataFieldByName('action_addtocampaign'));
$this->assertNull($actions->dataFieldByName('action_save'));
$this->assertNull($actions->dataFieldByName('action_publish'));
$this->assertNull($actions->dataFieldByName('action_unpublish'));
Expand Down Expand Up @@ -105,6 +106,7 @@ public function testActionsPublishedRecord() {

$actions = $page->getCMSActions();

$this->assertNotNull($actions->dataFieldByName('action_addtocampaign'));
$this->assertNotNull($actions->dataFieldByName('action_save'));
$this->assertNotNull($actions->dataFieldByName('action_publish'));
$this->assertNotNull($actions->dataFieldByName('action_unpublish'));
Expand Down Expand Up @@ -135,6 +137,8 @@ public function testActionsDeletedFromStageRecord() {

$actions = $page->getCMSActions();

// Theoretically allow deletions to be staged via add to campaign
$this->assertNotNull($actions->dataFieldByName('action_addtocampaign'));
$this->assertNull($actions->dataFieldByName('action_save'));
$this->assertNull($actions->dataFieldByName('action_publish'));
$this->assertNull($actions->dataFieldByName('action_unpublish'));
Expand Down Expand Up @@ -164,6 +168,7 @@ public function testActionsChangedOnStageRecord() {
$page = Page::get()->byID($page->ID);

$actions = $page->getCMSActions();
$this->assertNotNull($actions->dataFieldByName('action_addtocampaign'));
$this->assertNotNull($actions->dataFieldByName('action_save'));
$this->assertNotNull($actions->dataFieldByName('action_publish'));
$this->assertNotNull($actions->dataFieldByName('action_unpublish'));
Expand All @@ -187,6 +192,7 @@ public function testActionsViewingOldVersion() {
$version = DB::query('SELECT "Version" FROM "SiteTree_Versions" WHERE "Content" = \'test page first version\'')->value();
$old = Versioned::get_version('Page', $p->ID, $version);
$actions = $old->getCMSActions();
$this->assertNull($actions->dataFieldByName('action_addtocampaign'));
$this->assertNull($actions->dataFieldByName('action_save'));
$this->assertNull($actions->dataFieldByName('action_publish'));
$this->assertNull($actions->dataFieldByName('action_unpublish'));
Expand Down

0 comments on commit 4bf4fca

Please sign in to comment.