diff --git a/client/dist/js/bundle.js b/client/dist/js/bundle.js
index dc5b2d05..9718d992 100644
--- a/client/dist/js/bundle.js
+++ b/client/dist/js/bundle.js
@@ -74,22 +74,20 @@ onclick:function g(t){var e=this.parents("form:first"),n=e.find(":input[name=Ver
return i=r["default"].sprintf(r["default"]._t("CMSMain.Archive"),n),!!confirm(i)&&this._super(t)}}),t(".cms-edit-form .btn-toolbar #Form_EditForm_action_restore").entwine({onclick:function _(t){var e=this.parents("form:first"),n=e.find(":input[name=Version]").val(),i="",a=this.data("toRoot")
-return i=r["default"].sprintf(r["default"]._t(a?"CMSMain.RestoreToRoot":"CMSMain.Restore"),n),!!confirm(i)&&this._super(t)}}),t(".cms-edit-form .btn-toolbar #Form_EditForm_action_delete").entwine({onclick:function b(t){
+return i=r["default"].sprintf(r["default"]._t(a?"CMSMain.RestoreToRoot":"CMSMain.Restore"),n),!!confirm(i)&&this._super(t)}}),t(".cms-edit-form .btn-toolbar #Form_EditForm_action_unpublish").entwine({onclick:function b(t){
var e=this.parents("form:first"),n=e.find(":input[name=Version]").val(),i=""
-return i=r["default"].sprintf(r["default"]._t("CMSMain.DeleteFromDraft"),n),!!confirm(i)&&this._super(t)}}),t(".cms-edit-form .btn-toolbar #Form_EditForm_action_unpublish").entwine({onclick:function w(t){
-var e=this.parents("form:first"),n=e.find(":input[name=Version]").val(),i=""
-return i=r["default"].sprintf(r["default"]._t("CMSMain.Unpublish"),n),!!confirm(i)&&this._super(t)}}),t(".cms-edit-form.changed").entwine({onmatch:function C(t){this.find("button[name=action_save]").button("option","showingAlternate",!0),
-this.find("button[name=action_publish]").button("option","showingAlternate",!0),this._super(t)},onunmatch:function F(t){var e=this.find("button[name=action_save]")
+return i=r["default"].sprintf(r["default"]._t("CMSMain.Unpublish"),n),!!confirm(i)&&this._super(t)}}),t(".cms-edit-form.changed").entwine({onmatch:function w(t){this.find("button[name=action_save]").button("option","showingAlternate",!0),
+this.find("button[name=action_publish]").button("option","showingAlternate",!0),this._super(t)},onunmatch:function C(t){var e=this.find("button[name=action_save]")
e.data("button")&&e.button("option","showingAlternate",!1)
var n=this.find("button[name=action_publish]")
-n.data("button")&&n.button("option","showingAlternate",!1),this._super(t)}}),t(".cms-edit-form .btn-toolbar button[name=action_publish]").entwine({onbuttonafterrefreshalternate:function P(){this.button("option","showingAlternate")?this.addClass("ss-ui-action-constructive"):this.removeClass("ss-ui-action-constructive")
+n.data("button")&&n.button("option","showingAlternate",!1),this._super(t)}}),t(".cms-edit-form .btn-toolbar button[name=action_publish]").entwine({onbuttonafterrefreshalternate:function F(){this.button("option","showingAlternate")?this.addClass("ss-ui-action-constructive"):this.removeClass("ss-ui-action-constructive")
-}}),t(".cms-edit-form .btn-toolbar button[name=action_save]").entwine({onbuttonafterrefreshalternate:function T(){this.button("option","showingAlternate")?this.addClass("ss-ui-action-constructive"):this.removeClass("ss-ui-action-constructive")
+}}),t(".cms-edit-form .btn-toolbar button[name=action_save]").entwine({onbuttonafterrefreshalternate:function P(){this.button("option","showingAlternate")?this.addClass("ss-ui-action-constructive"):this.removeClass("ss-ui-action-constructive")
-}}),t('.cms-edit-form.CMSPageSettingsController input[name="ParentType"]:checked').entwine({onmatch:function S(){this.redraw(),this._super()},onunmatch:function k(){this._super()},redraw:function x(){var e=t(".cms-edit-form.CMSPageSettingsController #Form_EditForm_ParentID_Holder")
+}}),t('.cms-edit-form.CMSPageSettingsController input[name="ParentType"]:checked').entwine({onmatch:function T(){this.redraw(),this._super()},onunmatch:function S(){this._super()},redraw:function x(){var e=t(".cms-edit-form.CMSPageSettingsController #Form_EditForm_ParentID_Holder")
-"Form_EditForm_ParentType_root"==t(this).attr("id")?e.slideUp():e.slideDown()},onclick:function E(){this.redraw()}}),"Form_EditForm_ParentType_root"==t('.cms-edit-form.CMSPageSettingsController input[name="ParentType"]:checked').attr("id")&&t(".cms-edit-form.CMSPageSettingsController #Form_EditForm_ParentID_Holder").hide()
+"Form_EditForm_ParentType_root"==t(this).attr("id")?e.slideUp():e.slideDown()},onclick:function k(){this.redraw()}}),"Form_EditForm_ParentType_root"==t('.cms-edit-form.CMSPageSettingsController input[name="ParentType"]:checked').attr("id")&&t(".cms-edit-form.CMSPageSettingsController #Form_EditForm_ParentID_Holder").hide()
})},function(t,e){t.exports=i18n},function(t,e,n){"use strict"
function i(t){return t&&t.__esModule?t:{"default":t}}var a=n(2),o=i(a)
diff --git a/client/src/legacy/CMSMain.EditForm.js b/client/src/legacy/CMSMain.EditForm.js
index 41d30bac..dc9c1c1e 100644
--- a/client/src/legacy/CMSMain.EditForm.js
+++ b/client/src/legacy/CMSMain.EditForm.js
@@ -347,33 +347,6 @@ $.entwine('ss', function($){
}
});
- /**
- * Class: .cms-edit-form .btn-toolbar #Form_EditForm_action_delete
- *
- * Informing the user about the delete from draft action while requiring confirmation
- */
- $('.cms-edit-form .btn-toolbar #Form_EditForm_action_delete').entwine({
-
- /**
- * Function: onclick
- *
- * Parameters:
- * (Event) e
- */
- onclick: function(e) {
- var form = this.parents('form:first'), version = form.find(':input[name=Version]').val(), message = '';
- message = i18n.sprintf(
- i18n._t('CMSMain.DeleteFromDraft'),
- version
- );
- if(confirm(message)) {
- return this._super(e);
- } else {
- return false;
- }
- }
- });
-
/**
* Class: .cms-edit-form .btn-toolbar #Form_EditForm_action_unpublish
* Informing the user about the unpublish action while requiring confirmation
diff --git a/code/BatchActions/CMSBatchAction_Archive.php b/code/BatchActions/CMSBatchAction_Archive.php
index 4664c7f7..31b2a49f 100644
--- a/code/BatchActions/CMSBatchAction_Archive.php
+++ b/code/BatchActions/CMSBatchAction_Archive.php
@@ -2,30 +2,24 @@
namespace SilverStripe\CMS\BatchActions;
-use SilverStripe\Admin\CMSBatchAction;
use SilverStripe\ORM\SS_List;
+use SilverStripe\Admin\CMSBatchAction;
/**
- * Archives a page, removing it from both live and stage
+ * Delete items batch action.
*/
-class CMSBatchAction_Archive extends CMSBatchAction
-{
-
- public function getActionTitle()
- {
- return _t('CMSBatchActions.ARCHIVE', 'Archive');
+class CMSBatchAction_Archive extends CMSBatchAction {
+ public function getActionTitle() {
+ return _t('CMSBatchAction_Archive.TITLE', 'Unpublish and archive');
}
- public function run(SS_List $pages)
- {
+ public function run(SS_List $pages) {
return $this->batchaction($pages, 'doArchive',
- _t('CMSBatchActions.ARCHIVED_PAGES', 'Archived %d pages')
+ _t('CMSBatchAction_Archive.RESULT', 'Deleted %d pages from draft and live, and sent them to the archive')
);
}
- public function applicablePages($ids)
- {
- return $this->applicablePagesHelper($ids, 'canArchive', true, true);
+ public function applicablePages($ids) {
+ return $this->applicablePagesHelper($ids, 'canArchive');
}
-
}
diff --git a/code/BatchActions/CMSBatchAction_Delete.php b/code/BatchActions/CMSBatchAction_Delete.php
deleted file mode 100644
index b959f157..00000000
--- a/code/BatchActions/CMSBatchAction_Delete.php
+++ /dev/null
@@ -1,52 +0,0 @@
-array(),
- 'deleted'=>array(),
- 'error'=>array()
- );
-
- foreach($pages as $page) {
- $id = $page->ID;
-
- // Perform the action
- if($page->canDelete()) $page->delete();
- else $status['error'][$page->ID] = true;
-
- // check to see if the record exists on the live site,
- // if it doesn't remove the tree node
- $liveRecord = Versioned::get_one_by_stage( 'SilverStripe\\CMS\\Model\\SiteTree', 'Live', array(
- '"SiteTree"."ID"' => $id
- ));
- if($liveRecord) {
- $status['modified'][$liveRecord->ID] = array(
- 'TreeTitle' => $liveRecord->TreeTitle,
- );
- } else {
- $status['deleted'][$id] = array();
- }
-
- }
-
- return $this->response(_t('CMSBatchActions.DELETED_DRAFT_PAGES', 'Deleted %d pages from draft site, %d failures'), $status);
- }
-
- public function applicablePages($ids) {
- return $this->applicablePagesHelper($ids, 'canDelete', true, false);
- }
-}
diff --git a/code/Controllers/CMSMain.php b/code/Controllers/CMSMain.php
index 6486e2b0..4b3a63eb 100644
--- a/code/Controllers/CMSMain.php
+++ b/code/Controllers/CMSMain.php
@@ -6,6 +6,10 @@ use SilverStripe\Admin\AdminRootController;
use SilverStripe\Admin\CMSBatchActionHandler;
use SilverStripe\Admin\CMSPreviewable;
use SilverStripe\Admin\LeftAndMain;
+use SilverStripe\CMS\BatchActions\CMSBatchAction_Archive;
+use SilverStripe\CMS\BatchActions\CMSBatchAction_Publish;
+use SilverStripe\CMS\BatchActions\CMSBatchAction_Restore;
+use SilverStripe\CMS\BatchActions\CMSBatchAction_Unpublish;
use SilverStripe\CMS\Model\CurrentPageIdentifier;
use SilverStripe\CMS\Model\RedirectorPage;
use SilverStripe\CMS\Model\SiteTree;
@@ -82,9 +86,9 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr
private static $menu_priority = 10;
- private static $tree_class = "SilverStripe\\CMS\\Model\\SiteTree";
+ private static $tree_class = SiteTree::class;
- private static $subitem_class = "SilverStripe\\Security\\Member";
+ private static $subitem_class = Member::class;
private static $session_namespace = 'SilverStripe\\CMS\\Controllers\\CMSMain';
@@ -146,11 +150,10 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr
Requirements::customCSS($this->generatePageIconsCss());
Requirements::add_i18n_javascript(CMS_DIR . '/client/lang', false, true);
- CMSBatchActionHandler::register('publish', 'SilverStripe\\CMS\\BatchActions\\CMSBatchAction_Publish');
- CMSBatchActionHandler::register('unpublish', 'SilverStripe\\CMS\\BatchActions\\CMSBatchAction_Unpublish');
- CMSBatchActionHandler::register('delete', 'SilverStripe\\CMS\\BatchActions\\CMSBatchAction_Delete');
- CMSBatchActionHandler::register('archive', 'SilverStripe\\CMS\\BatchActions\\CMSBatchAction_Archive');
- CMSBatchActionHandler::register('restore', 'SilverStripe\\CMS\\BatchActions\\CMSBatchAction_Restore');
+ CMSBatchActionHandler::register('restore', CMSBatchAction_Restore::class);
+ CMSBatchActionHandler::register('archive', CMSBatchAction_Archive::class);
+ CMSBatchActionHandler::register('unpublish', CMSBatchAction_Unpublish::class);
+ CMSBatchActionHandler::register('publish', CMSBatchAction_Publish::class);
}
public function index($request) {
@@ -324,8 +327,8 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr
*/
public function SiteTreeAsUL() {
// Pre-cache sitetree version numbers for querying efficiency
- Versioned::prepopulate_versionnumber_cache("SilverStripe\\CMS\\Model\\SiteTree", "Stage");
- Versioned::prepopulate_versionnumber_cache("SilverStripe\\CMS\\Model\\SiteTree", "Live");
+ Versioned::prepopulate_versionnumber_cache(SiteTree::class, "Stage");
+ Versioned::prepopulate_versionnumber_cache(SiteTree::class, "Live");
$html = $this->getSiteTreeFor($this->stat('tree_class'));
$this->extend('updateSiteTreeAsUL', $html);
@@ -1114,7 +1117,7 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr
}
$id = (int) $data['ID'];
- $restoredPage = Versioned::get_latest_version("SilverStripe\\CMS\\Model\\SiteTree", $id);
+ $restoredPage = Versioned::get_latest_version(SiteTree::class, $id);
if(!$restoredPage) {
throw new HTTPResponse_Exception("SiteTree #$id not found", 400);
}
@@ -1401,7 +1404,7 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr
$id = (int)$data['ID'];
/** @var SiteTree $restoredPage */
- $restoredPage = Versioned::get_latest_version("SilverStripe\\CMS\\Model\\SiteTree", $id);
+ $restoredPage = Versioned::get_latest_version(SiteTree::class, $id);
if(!$restoredPage) {
return new HTTPResponse("SiteTree #$id not found", 400);
}
diff --git a/code/Model/SiteTree.php b/code/Model/SiteTree.php
index a8fc4b0f..91428217 100755
--- a/code/Model/SiteTree.php
+++ b/code/Model/SiteTree.php
@@ -366,7 +366,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
// Traverse down the remaining URL segments and grab the relevant SiteTree objects.
foreach($parts as $segment) {
- $next = DataObject::get_one('SilverStripe\\CMS\\Model\\SiteTree', array(
+ $next = DataObject::get_one(self::class, array(
'"SiteTree"."URLSegment"' => $segment,
'"SiteTree"."ParentID"' => $sitetree->ID
),
@@ -1722,7 +1722,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
}
// Check existence
- $existingPage = DataObject::get_one('SilverStripe\\CMS\\Model\\SiteTree', $filter);
+ $existingPage = DataObject::get_one(self::class, $filter);
if ($existingPage) return false;
return !($existingPage);
@@ -1758,7 +1758,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
* @return string
*/
public function getStageURLSegment() {
- $stageRecord = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', Versioned::DRAFT, array(
+ $stageRecord = Versioned::get_one_by_stage(self::class, Versioned::DRAFT, array(
'"SiteTree"."ID"' => $this->ID
));
return ($stageRecord) ? $stageRecord->URLSegment : null;
@@ -1770,7 +1770,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
* @return string
*/
public function getLiveURLSegment() {
- $liveRecord = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', Versioned::LIVE, array(
+ $liveRecord = Versioned::get_one_by_stage(self::class, Versioned::LIVE, array(
'"SiteTree"."ID"' => $this->ID
));
return ($liveRecord) ? $liveRecord->URLSegment : null;
@@ -2068,7 +2068,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
"root" => _t("SiteTree.PARENTTYPE_ROOT", "Top-level page"),
"subpage" => _t("SiteTree.PARENTTYPE_SUBPAGE", "Sub-page underneath a parent page"),
)),
- $parentIDField = new TreeDropdownField("ParentID", $this->fieldLabel('ParentID'), 'SilverStripe\\CMS\\Model\\SiteTree', 'ID', 'MenuTitle')
+ $parentIDField = new TreeDropdownField("ParentID", $this->fieldLabel('ParentID'), self::class, 'ID', 'MenuTitle')
),
$visibility = new FieldGroup(
new CheckboxField("ShowInMenus", $this->fieldLabel('ShowInMenus')),
@@ -2211,11 +2211,13 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
* @return FieldList The available actions for this page.
*/
public function getCMSActions() {
- $existsOnLive = $this->isPublished();
+ // Get status of page
+ $isOnDraft = $this->isOnDraft();
+ $isPublished = $this->isPublished();
+ $stagesDiffer = $this->stagesDiffer(Versioned::DRAFT, Versioned::LIVE);
// Major actions appear as buttons immediately visible as page actions.
- $majorActions = CompositeField::create()
- ->setName('MajorActions');
+ $majorActions = CompositeField::create()->setName('MajorActions');
$majorActions->setFieldHolderTemplate(get_class($majorActions) . '_holder_buttongroup');
// Minor options are hidden behind a drop-up and appear as links (although they are still FormActions).
@@ -2228,39 +2230,38 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
$rootTabSet->addExtraClass('ss-ui-action-tabset action-menus noborder');
// Render page information into the "more-options" drop-up, on the top.
- $live = Versioned::get_one_by_stage('SilverStripe\\CMS\\Model\\SiteTree', Versioned::LIVE, array(
- '"SiteTree"."ID"' => $this->ID
- ));
+ $liveRecord = Versioned::get_by_stage(self::class, Versioned::LIVE)->byID($this->ID);
$infoTemplate = SSViewer::get_templates_by_class(static::class, '_Information', self::class);
$moreOptions->push(
new LiteralField('Information',
$this->customise(array(
- 'Live' => $live,
- 'ExistsOnLive' => $existsOnLive
+ 'Live' => $liveRecord,
+ 'ExistsOnLive' => $isPublished
))->renderWith($infoTemplate)
)
);
-
$moreOptions->push(AddToCampaignHandler_FormAction::create());
// "readonly"/viewing version that isn't the current version of the record
- $stageOrLiveRecord = Versioned::get_one_by_stage(static::class, Versioned::get_stage(), array(
- '"SiteTree"."ID"' => $this->ID
- ));
- if($stageOrLiveRecord && $stageOrLiveRecord->Version != $this->Version) {
- $moreOptions->push(FormAction::create('email', _t('CMSMain.EMAIL', 'SilverStripe\\Control\\Email\\Email')));
+ $stageRecord = Versioned::get_by_stage(static::class, Versioned::DRAFT)->byID($this->ID);
+ /** @skipUpgrade */
+ if($stageRecord && $stageRecord->Version != $this->Version) {
+ $moreOptions->push(FormAction::create('email', _t('CMSMain.EMAIL', 'Email')));
$moreOptions->push(FormAction::create('rollback', _t('CMSMain.ROLLBACK', 'Roll back to this version')));
-
$actions = new FieldList(array($majorActions, $rootTabSet));
// getCMSActions() can be extended with updateCMSActions() on a extension
$this->extend('updateCMSActions', $actions);
-
return $actions;
}
- if($this->isPublished() && $this->canPublish() && $this->isOnDraft() && $this->canUnpublish()) {
- // "unpublish"
+ // Check permissions
+ $canPublish = $this->canPublish();
+ $canUnpublish = $this->canUnpublish();
+ $canEdit = $this->canEdit();
+
+ // "unpublish"
+ if($isPublished && $canPublish && $isOnDraft && $canUnpublish) {
$moreOptions->push(
FormAction::create('unpublish', _t('SiteTree.BUTTONUNPUBLISH', 'Unpublish'), 'delete')
->setDescription(_t('SiteTree.BUTTONUNPUBLISHDESC', 'Remove this page from the published site'))
@@ -2268,78 +2269,69 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
);
}
- if($this->stagesDiffer(Versioned::DRAFT, Versioned::LIVE) && $this->isOnDraft()) {
- if($this->isPublished() && $this->canEdit()) {
- // "rollback"
- $moreOptions->push(
- FormAction::create('rollback', _t('SiteTree.BUTTONCANCELDRAFT', 'Cancel draft changes'), 'delete')
- ->setDescription(_t('SiteTree.BUTTONCANCELDRAFTDESC', 'Delete your draft and revert to the currently published page'))
- );
- }
+ // "rollback"
+ if($isOnDraft && $isPublished && $canEdit && $stagesDiffer) {
+ $moreOptions->push(
+ FormAction::create('rollback', _t('SiteTree.BUTTONCANCELDRAFT', 'Cancel draft changes'))
+ ->setDescription(_t(
+ 'SiteTree.BUTTONCANCELDRAFTDESC',
+ 'Delete your draft and revert to the currently published page'
+ ))
+ );
}
- if($this->canEdit()) {
- if(!$this->isOnDraft()) {
- // The usual major actions are not available, so we provide alternatives here.
- if($existsOnLive) {
- // "restore"
- $majorActions->push(FormAction::create('revert',_t('CMSMain.RESTORE','Restore')));
- if($this->canDelete() && $this->canUnpublish()) {
- // "delete from live"
- $majorActions->push(
- FormAction::create('deletefromlive',_t('CMSMain.DELETEFP','Delete'))
- ->addExtraClass('ss-ui-action-destructive')
- );
- }
- } else {
- // Determine if we should force a restore to root (where once it was a subpage)
- $restoreToRoot = $this->isParentArchived();
-
- // "restore"
- $title = $restoreToRoot
- ? _t('CMSMain.RESTORE_TO_ROOT','Restore draft at top level')
- : _t('CMSMain.RESTORE','Restore draft');
- $description = $restoreToRoot
- ? _t('CMSMain.RESTORE_TO_ROOT_DESC','Restore the archived version to draft as a top level page')
- : _t('CMSMain.RESTORE_DESC', 'Restore the archived version to draft');
- $majorActions->push(
- FormAction::create('restore', $title)
- ->setDescription($description)
- ->setAttribute('data-to-root', $restoreToRoot)
- ->setAttribute('data-icon', 'decline')
- );
- }
- } else {
- if($this->canDelete()) {
- // delete
- $moreOptions->push(
- FormAction::create('delete',_t('CMSMain.DELETE','Delete draft'))
- ->addExtraClass('delete ss-ui-action-destructive')
- );
- }
- if($this->canArchive()) {
- // "archive"
- $moreOptions->push(
- FormAction::create('archive',_t('CMSMain.ARCHIVE','Archive'))
- ->setDescription(_t(
- 'SiteTree.BUTTONARCHIVEDESC',
- 'Unpublish and send to archive'
- ))
- ->addExtraClass('delete ss-ui-action-destructive')
- );
- }
-
- // "save", supports an alternate state that is still clickable, but notifies the user that the action is not needed.
- $majorActions->push(
- FormAction::create('save', _t('SiteTree.BUTTONSAVED', 'Saved'))
- ->setAttribute('data-icon', 'accept')
- ->setAttribute('data-icon-alternate', 'addpage')
- ->setAttribute('data-text-alternate', _t('CMSMain.SAVEDRAFT','Save draft'))
- );
- }
+ // "restore"
+ if($canEdit && !$isOnDraft && $isPublished) {
+ $majorActions->push(FormAction::create('revert',_t('CMSMain.RESTORE','Restore')));
}
- if($this->canPublish() && $this->isOnDraft()) {
+ // Check if we can restore a deleted page
+ // Note: It would be nice to have a canRestore() permission at some point
+ if($canEdit && !$isOnDraft && !$isPublished) {
+ // Determine if we should force a restore to root (where once it was a subpage)
+ $restoreToRoot = $this->isParentArchived();
+
+ // "restore"
+ $title = $restoreToRoot
+ ? _t('CMSMain.RESTORE_TO_ROOT','Restore draft at top level')
+ : _t('CMSMain.RESTORE','Restore draft');
+ $description = $restoreToRoot
+ ? _t('CMSMain.RESTORE_TO_ROOT_DESC','Restore the archived version to draft as a top level page')
+ : _t('CMSMain.RESTORE_DESC', 'Restore the archived version to draft');
+ $majorActions->push(
+ FormAction::create('restore', $title)
+ ->setDescription($description)
+ ->setAttribute('data-to-root', $restoreToRoot)
+ ->setAttribute('data-icon', 'decline')
+ );
+ }
+
+ // If a page is on any stage it can be archived
+ if (($isOnDraft || $isPublished) && $this->canArchive()) {
+ $title = $isPublished
+ ? _t('CMSMain.UNPUBLISH_AND_ARCHIVE', 'Unpublish and archive')
+ : _t('CMSMain.ARCHIVE', 'Archive');
+ $moreOptions->push(
+ FormAction::create('archive', $title)
+ ->addExtraClass('delete ss-ui-action-destructive')
+ ->setDescription(_t(
+ 'SiteTree.BUTTONDELETEDESC',
+ 'Remove from draft/live and send to archive'
+ ))
+ );
+ }
+
+ // "save", supports an alternate state that is still clickable, but notifies the user that the action is not needed.
+ if ($canEdit && $isOnDraft) {
+ $majorActions->push(
+ FormAction::create('save', _t('SiteTree.BUTTONSAVED', 'Saved'))
+ ->setAttribute('data-icon', 'accept')
+ ->setAttribute('data-icon-alternate', 'addpage')
+ ->setAttribute('data-text-alternate', _t('CMSMain.SAVEDRAFT','Save draft'))
+ );
+ }
+
+ if($canPublish && $isOnDraft) {
// "publish", as with "save", it supports an alternate state to show when action is needed.
$majorActions->push(
$publish = FormAction::create('publish', _t('SiteTree.BUTTONPUBLISHED', 'Published'))
@@ -2349,7 +2341,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
);
// Set up the initial state of the button to reflect the state of the underlying SiteTree object.
- if($this->stagesDiffer(Versioned::DRAFT, Versioned::LIVE)) {
+ if($stagesDiffer) {
$publish->addExtraClass('ss-ui-alternate');
}
}
@@ -2377,7 +2369,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
public function onAfterRevertToLive() {
// Use an alias to get the updates made by $this->publish
/** @var SiteTree $stageSelf */
- $stageSelf = Versioned::get_by_stage('SilverStripe\\CMS\\Model\\SiteTree', Versioned::DRAFT)->byID($this->ID);
+ $stageSelf = Versioned::get_by_stage(self::class, Versioned::DRAFT)->byID($this->ID);
$stageSelf->writeWithoutVersion();
// Need to update pages linking to this one as no longer broken
@@ -2420,9 +2412,9 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
// create an empty record
if(!DB::prepared_query("SELECT \"ID\" FROM \"SiteTree\" WHERE \"ID\" = ?", array($this->ID))->value()) {
$conn = DB::get_conn();
- if(method_exists($conn, 'allowPrimaryKeyEditing')) $conn->allowPrimaryKeyEditing('SilverStripe\\CMS\\Model\\SiteTree', true);
+ if(method_exists($conn, 'allowPrimaryKeyEditing')) $conn->allowPrimaryKeyEditing(self::class, true);
DB::prepared_query("INSERT INTO \"SiteTree\" (\"ID\") VALUES (?)", array($this->ID));
- if(method_exists($conn, 'allowPrimaryKeyEditing')) $conn->allowPrimaryKeyEditing('SilverStripe\\CMS\\Model\\SiteTree', false);
+ if(method_exists($conn, 'allowPrimaryKeyEditing')) $conn->allowPrimaryKeyEditing(self::class, false);
}
$oldReadingMode = Versioned::get_reading_mode();
diff --git a/javascript/lang/hr.js b/javascript/lang/hr.js
deleted file mode 100644
index 95cbdd5f..00000000
--- a/javascript/lang/hr.js
+++ /dev/null
@@ -1,53 +0,0 @@
-// This file was generated by silverstripe/cow from javascript/lang/src/hr.js.
-// See https://github.com/tractorcow/cow for details
-if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') {
- if (typeof(console) !== 'undefined') { // eslint-disable-line no-console
- console.error('Class ss.i18n not defined'); // eslint-disable-line no-console
- }
-} else {
- ss.i18n.addDictionary('hr', {
- "AssetAdmin.BATCHACTIONSDELETECONFIRM": "Jeste li sigurni da želite obrisati %s direktorije?",
- "AssetAdmin.ConfirmDelete": "Jeste li sigurni da želite obrisati ovaj direktorij i sve datoteke u njemu?",
- "AssetTableField.MOVING": "Premještam %s datoteku(e)",
- "AssetTableField.REALLYDELETE": "Jeste li sigurni da želite obrisati označene datoteke?",
- "CMSMAIN.ALERTCLASSNAME": "Tip stranice će biti osvježen nakon spremanja stranice",
- "CMSMAIN.AddSearchCriteria": "Dodaj obilježja",
- "CMSMAIN.CANTADDCHILDREN": "Ne možete dodati podstranice za označeni čvor",
- "CMSMAIN.DELETINGPAGES": "Brišem stranice...",
- "CMSMAIN.ERRORADDINGPAGE": "Greška u dodavanju stranice",
- "CMSMAIN.ERRORDELETINGPAGES": "Greška u brisanju stranice",
- "CMSMAIN.ERRORFILTERPAGES": "Ne mogu filtrirati stablo za prikaz izmjenjenih stranica
%s",
- "CMSMAIN.ERRORPUBLISHING": "Greška u objavljivanju stranice",
- "CMSMAIN.ERRORREVERTING": "Greška pri vraćanju objavljenog sadržaja",
- "CMSMAIN.ERRORUNFILTER": "Nefiltirano stablo",
- "CMSMAIN.FILTEREDTREE": "Filtrirano stablo prikazuje samo promjenjene stranice",
- "CMSMAIN.PUBLISHING": "Objavljujem...",
- "CMSMAIN.PUBLISHINGPAGES": "Objavljujem stranice...",
- "CMSMAIN.REALLYDELETEPAGES": "Jeste li sigurni da želite obrisati %s označene stranice?",
- "CMSMAIN.RESTORING": "Vraćam...",
- "CMSMAIN.SAVING": "spremam...",
- "CMSMAIN.SELECTMOREPAGES": "Označili ste %s stranica.\n\nJeste li sigurni da želite izvršiti ovu akciju?",
- "CMSMAIN.SELECTONEPAGE": "Molimo odaberite bar 1 stranicu.",
- "CMSMAIN.URLSEGMENTVALIDATION": "Linkovi mogu biti sastavljeni samo od slova, brojki i crtica.",
- "CMSMAIN.WARNINGSAVEPAGESBEFOREADDING": "Morate spremiti stranicu prije dodavanja podstranica ispod nje",
- "CMSMain.Archive": "Jeste li sigurni da želite arhivirati ovu stranicu i sve podstranice?\n\nOva stranica i sve njene podstranice će biti odjavljene i poslane u arhivu.",
- "CMSMain.ConfirmRestoreFromLive": "Da li ste sigurni da želite vratiti predložak kada je stranica zadnji put objavljena?",
- "CMSMain.DeleteFromDraft": "Jeste li sigurni da želite ukloniti ovu stranicu iz neobjavljene stranice?\n\nOva stranica će ostati na objavljenoj stranici.",
- "CMSMain.Restore": "Da li ste sigurni da želite vratiti stranicu iz arhive?",
- "CMSMain.RestoreToRoot": "Jeste li sigurni da želite vratiti ovu stranicu iz arhive?\n\nNadstranica neće biti dostupna kada se stranica vrati.",
- "CMSMain.RollbackToVersion": "Jeste li sigurni da želite vratiti na verziju #%s ove stranice?",
- "CMSMain.Unpublish": "Jeste li sigurni da želite ukloniti ovu stranicu iz objavljene stranice?\n\nOva stranica će ostati dostupna u stablu kao predložak.",
- "Folder.Name": "Naziv direktorija",
- "Tree.AddSubPage": "Dodaj novu stranicu ovdje",
- "Tree.Duplicate": "Dupliciraj",
- "Tree.EditPage": "Uredi",
- "Tree.ShowAsList": "Prikaži podstranice kao listu",
- "Tree.ThisPageAndSubpages": "Ova stranica i podstranice",
- "Tree.ThisPageOnly": "Samo ova stranica",
- "URLSEGMENT.Cancel": "Odustani",
- "URLSEGMENT.Edit": "Uredi",
- "URLSEGMENT.OK": "Ok",
- "URLSEGMENT.UpdateURL": "Ažuriraj link ",
- "WidgetAreaEditor.TOOMANY": "Nažalost, prešli ste maksimalni broj widgeta za ovu zonu"
-});
-}
\ No newline at end of file
diff --git a/javascript/lang/src/hr.js b/javascript/lang/src/hr.js
deleted file mode 100644
index dcfbe6cc..00000000
--- a/javascript/lang/src/hr.js
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "AssetAdmin.BATCHACTIONSDELETECONFIRM": "Jeste li sigurni da želite obrisati %s direktorije?",
- "AssetAdmin.ConfirmDelete": "Jeste li sigurni da želite obrisati ovaj direktorij i sve datoteke u njemu?",
- "AssetTableField.MOVING": "Premještam %s datoteku(e)",
- "AssetTableField.REALLYDELETE": "Jeste li sigurni da želite obrisati označene datoteke?",
- "CMSMAIN.ALERTCLASSNAME": "Tip stranice će biti osvježen nakon spremanja stranice",
- "CMSMAIN.AddSearchCriteria": "Dodaj obilježja",
- "CMSMAIN.CANTADDCHILDREN": "Ne možete dodati podstranice za označeni čvor",
- "CMSMAIN.DELETINGPAGES": "Brišem stranice...",
- "CMSMAIN.ERRORADDINGPAGE": "Greška u dodavanju stranice",
- "CMSMAIN.ERRORDELETINGPAGES": "Greška u brisanju stranice",
- "CMSMAIN.ERRORFILTERPAGES": "Ne mogu filtrirati stablo za prikaz izmjenjenih stranica
%s",
- "CMSMAIN.ERRORPUBLISHING": "Greška u objavljivanju stranice",
- "CMSMAIN.ERRORREVERTING": "Greška pri vraćanju objavljenog sadržaja",
- "CMSMAIN.ERRORUNFILTER": "Nefiltirano stablo",
- "CMSMAIN.FILTEREDTREE": "Filtrirano stablo prikazuje samo promjenjene stranice",
- "CMSMAIN.PUBLISHING": "Objavljujem...",
- "CMSMAIN.PUBLISHINGPAGES": "Objavljujem stranice...",
- "CMSMAIN.REALLYDELETEPAGES": "Jeste li sigurni da želite obrisati %s označene stranice?",
- "CMSMAIN.RESTORING": "Vraćam...",
- "CMSMAIN.SAVING": "spremam...",
- "CMSMAIN.SELECTMOREPAGES": "Označili ste %s stranica.\n\nJeste li sigurni da želite izvršiti ovu akciju?",
- "CMSMAIN.SELECTONEPAGE": "Molimo odaberite bar 1 stranicu.",
- "CMSMAIN.URLSEGMENTVALIDATION": "Linkovi mogu biti sastavljeni samo od slova, brojki i crtica.",
- "CMSMAIN.WARNINGSAVEPAGESBEFOREADDING": "Morate spremiti stranicu prije dodavanja podstranica ispod nje",
- "CMSMain.Archive": "Jeste li sigurni da želite arhivirati ovu stranicu i sve podstranice?\n\nOva stranica i sve njene podstranice će biti odjavljene i poslane u arhivu.",
- "CMSMain.ConfirmRestoreFromLive": "Da li ste sigurni da želite vratiti predložak kada je stranica zadnji put objavljena?",
- "CMSMain.DeleteFromDraft": "Jeste li sigurni da želite ukloniti ovu stranicu iz neobjavljene stranice?\n\nOva stranica će ostati na objavljenoj stranici.",
- "CMSMain.Restore": "Da li ste sigurni da želite vratiti stranicu iz arhive?",
- "CMSMain.RestoreToRoot": "Jeste li sigurni da želite vratiti ovu stranicu iz arhive?\n\nNadstranica neće biti dostupna kada se stranica vrati.",
- "CMSMain.RollbackToVersion": "Jeste li sigurni da želite vratiti na verziju #%s ove stranice?",
- "CMSMain.Unpublish": "Jeste li sigurni da želite ukloniti ovu stranicu iz objavljene stranice?\n\nOva stranica će ostati dostupna u stablu kao predložak.",
- "Folder.Name": "Naziv direktorija",
- "Tree.AddSubPage": "Dodaj novu stranicu ovdje",
- "Tree.Duplicate": "Dupliciraj",
- "Tree.EditPage": "Uredi",
- "Tree.ShowAsList": "Prikaži podstranice kao listu",
- "Tree.ThisPageAndSubpages": "Ova stranica i podstranice",
- "Tree.ThisPageOnly": "Samo ova stranica",
- "URLSEGMENT.Cancel": "Odustani",
- "URLSEGMENT.Edit": "Uredi",
- "URLSEGMENT.OK": "Ok",
- "URLSEGMENT.UpdateURL": "Ažuriraj link ",
- "WidgetAreaEditor.TOOMANY": "Nažalost, prešli ste maksimalni broj widgeta za ovu zonu"
-}
\ No newline at end of file
diff --git a/tests/controller/CMSBatchActionsTest.php b/tests/controller/CMSBatchActionsTest.php
index 75210312..7cb3ebfe 100644
--- a/tests/controller/CMSBatchActionsTest.php
+++ b/tests/controller/CMSBatchActionsTest.php
@@ -1,15 +1,13 @@
logInWithPermission('ADMIN');
// published page
- $published = $this->objFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'published');
+ $published = $this->objFromFixture(SiteTree::class, 'published');
$published->publishSingle();
// Deleted / archived page
- $archived = $this->objFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archived');
+ $archived = $this->objFromFixture(SiteTree::class, 'archived');
$archived->doArchive(); // should archive all children
// Unpublished
- $unpublished = $this->objFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'unpublished');
+ $unpublished = $this->objFromFixture(SiteTree::class, 'unpublished');
$unpublished->publishSingle();
$unpublished->doUnpublish();
// Modified
- $modified = $this->objFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'modified');
+ $modified = $this->objFromFixture(SiteTree::class, 'modified');
$modified->publishSingle();
$modified->Title = 'modified2';
$modified->write();
@@ -47,18 +45,18 @@ class CMSBatchActionsTest extends SapphireTest {
*/
public function testBatchPublishApplicable() {
$this->logInWithPermission('ADMIN');
- $pages = Versioned::get_including_deleted('SilverStripe\\CMS\\Model\\SiteTree');
+ $pages = Versioned::get_including_deleted(SiteTree::class);
$ids = $pages->column('ID');
$action = new CMSBatchAction_Publish();
// Test applicable pages
$applicable = $action->applicablePages($ids);
- $this->assertContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'published'), $applicable);
- $this->assertNotContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archived'), $applicable);
- $this->assertNotContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archivedx'), $applicable);
- $this->assertNotContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archivedy'), $applicable);
- $this->assertContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'unpublished'), $applicable);
- $this->assertContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'modified'), $applicable);
+ $this->assertContains($this->idFromFixture(SiteTree::class, 'published'), $applicable);
+ $this->assertNotContains($this->idFromFixture(SiteTree::class, 'archived'), $applicable);
+ $this->assertNotContains($this->idFromFixture(SiteTree::class, 'archivedx'), $applicable);
+ $this->assertNotContains($this->idFromFixture(SiteTree::class, 'archivedy'), $applicable);
+ $this->assertContains($this->idFromFixture(SiteTree::class, 'unpublished'), $applicable);
+ $this->assertContains($this->idFromFixture(SiteTree::class, 'modified'), $applicable);
}
@@ -67,35 +65,35 @@ class CMSBatchActionsTest extends SapphireTest {
*/
public function testBatchUnpublishApplicable() {
$this->logInWithPermission('ADMIN');
- $pages = Versioned::get_including_deleted('SilverStripe\\CMS\\Model\\SiteTree');
+ $pages = Versioned::get_including_deleted(SiteTree::class);
$ids = $pages->column('ID');
$action = new CMSBatchAction_Unpublish();
// Test applicable page
$applicable = $action->applicablePages($ids);
- $this->assertContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'published'), $applicable);
- $this->assertNotContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archived'), $applicable);
- $this->assertNotContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archivedx'), $applicable);
- $this->assertNotContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archivedy'), $applicable);
- $this->assertNotContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'unpublished'), $applicable);
- $this->assertContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'modified'), $applicable);
+ $this->assertContains($this->idFromFixture(SiteTree::class, 'published'), $applicable);
+ $this->assertNotContains($this->idFromFixture(SiteTree::class, 'archived'), $applicable);
+ $this->assertNotContains($this->idFromFixture(SiteTree::class, 'archivedx'), $applicable);
+ $this->assertNotContains($this->idFromFixture(SiteTree::class, 'archivedy'), $applicable);
+ $this->assertNotContains($this->idFromFixture(SiteTree::class, 'unpublished'), $applicable);
+ $this->assertContains($this->idFromFixture(SiteTree::class, 'modified'), $applicable);
}
/**
- * Test which pages can be archived via batch actions
+ * Test which pages can be archived via delete batch actions
*/
- public function testBatchArchiveApplicable() {
+ public function testBatchDeleteApplicable() {
$this->logInWithPermission('ADMIN');
- $pages = Versioned::get_including_deleted('SilverStripe\\CMS\\Model\\SiteTree');
+ $pages = Versioned::get_including_deleted(SiteTree::class);
$ids = $pages->column('ID');
$action = new CMSBatchAction_Archive();
// Test applicable pages
$applicable = $action->applicablePages($ids);
- $this->assertContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'published'), $applicable);
- $this->assertNotContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archived'), $applicable);
- $this->assertContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'unpublished'), $applicable);
- $this->assertContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'modified'), $applicable);
+ $this->assertContains($this->idFromFixture(SiteTree::class, 'published'), $applicable);
+ $this->assertNotContains($this->idFromFixture(SiteTree::class, 'archived'), $applicable);
+ $this->assertContains($this->idFromFixture(SiteTree::class, 'unpublished'), $applicable);
+ $this->assertContains($this->idFromFixture(SiteTree::class, 'modified'), $applicable);
}
/**
@@ -103,27 +101,27 @@ class CMSBatchActionsTest extends SapphireTest {
*/
public function testBatchRestoreApplicable() {
$this->logInWithPermission('ADMIN');
- $pages = Versioned::get_including_deleted('SilverStripe\\CMS\\Model\\SiteTree');
+ $pages = Versioned::get_including_deleted(SiteTree::class);
$ids = $pages->column('ID');
$action = new CMSBatchAction_Restore();
// Test applicable pages
$applicable = $action->applicablePages($ids);
- $this->assertNotContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'published'), $applicable);
- $this->assertContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archived'), $applicable);
- $this->assertContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archivedx'), $applicable);
- $this->assertContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archivedy'), $applicable);
- $this->assertNotContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'unpublished'), $applicable);
- $this->assertNotContains($this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'modified'), $applicable);
+ $this->assertNotContains($this->idFromFixture(SiteTree::class, 'published'), $applicable);
+ $this->assertContains($this->idFromFixture(SiteTree::class, 'archived'), $applicable);
+ $this->assertContains($this->idFromFixture(SiteTree::class, 'archivedx'), $applicable);
+ $this->assertContains($this->idFromFixture(SiteTree::class, 'archivedy'), $applicable);
+ $this->assertNotContains($this->idFromFixture(SiteTree::class, 'unpublished'), $applicable);
+ $this->assertNotContains($this->idFromFixture(SiteTree::class, 'modified'), $applicable);
}
public function testBatchRestore() {
$this->logInWithPermission('ADMIN');
- $pages = Versioned::get_including_deleted('SilverStripe\\CMS\\Model\\SiteTree');
+ $pages = Versioned::get_including_deleted(SiteTree::class);
$action = new CMSBatchAction_Restore();
- $archivedID = $this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archived');
- $archivedxID = $this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archivedx');
- $archivedyID = $this->idFromFixture('SilverStripe\\CMS\\Model\\SiteTree', 'archivedy');
+ $archivedID = $this->idFromFixture(SiteTree::class, 'archived');
+ $archivedxID = $this->idFromFixture(SiteTree::class, 'archivedx');
+ $archivedyID = $this->idFromFixture(SiteTree::class, 'archivedy');
// Just restore one child
$list = $pages->filter('RecordID', $archivedxID);
diff --git a/tests/controller/CMSMainTest.php b/tests/controller/CMSMainTest.php
index f93e845d..a127aecf 100644
--- a/tests/controller/CMSMainTest.php
+++ b/tests/controller/CMSMainTest.php
@@ -36,7 +36,7 @@ class CMSMainTest extends FunctionalTest {
parent::setUp();
// Clear automatically created siteconfigs (in case one was created outside of the specified fixtures).
- $ids = $this->allFixtureIDs('SilverStripe\\SiteConfig\\SiteConfig');
+ $ids = $this->allFixtureIDs(SiteConfig::class);
if($ids) {
foreach(SiteConfig::get()->exclude('ID', $ids) as $config) {
$config->delete();
@@ -120,8 +120,8 @@ class CMSMainTest extends FunctionalTest {
* @todo Test the results of a publication better
*/
public function testPublish() {
- $page1 = $this->objFromFixture('Page', "page1");
- $page2 = $this->objFromFixture('Page', "page2");
+ $page1 = $this->objFromFixture(Page::class, "page1");
+ $page2 = $this->objFromFixture(Page::class, "page2");
$this->session()->inst_set('loggedInAs', $this->idFromFixture('SilverStripe\\Security\\Member', 'admin'));
$response = $this->get('admin/pages/publishall?confirm=1');
@@ -130,8 +130,6 @@ class CMSMainTest extends FunctionalTest {
$response->getBody()
);
- $actions = CMSBatchActionHandler::config()->batch_actions;
-
// Some modules (e.g., cmsworkflow) will remove this action
$actions = CMSBatchActionHandler::config()->batch_actions;
if (isset($actions['publish'])) {
@@ -213,8 +211,8 @@ class CMSMainTest extends FunctionalTest {
$this->logInWithPermission('ADMIN');
Config::inst()->update('SilverStripe\\CMS\\Model\\SiteTree', 'enforce_strict_hierarchy', true);
- $parentPage = $this->objFromFixture('Page', 'page3');
- $childPage = $this->objFromFixture('Page', 'page1');
+ $parentPage = $this->objFromFixture(Page::class, 'page3');
+ $childPage = $this->objFromFixture(Page::class, 'page1');
$parentPage->doUnpublish();
$childPage->doUnpublish();
@@ -235,7 +233,7 @@ class CMSMainTest extends FunctionalTest {
$this->session()->inst_set('loggedInAs', $this->idFromFixture('SilverStripe\\Security\\Member', 'admin'));
// Set up a page that is delete from live
- $page = $this->objFromFixture('Page', 'page1');
+ $page = $this->objFromFixture(Page::class, 'page1');
$pageID = $page->ID;
$page->publishRecursive();
$page->delete();
@@ -256,8 +254,10 @@ class CMSMainTest extends FunctionalTest {
* Test CMSMain::getRecord()
*/
public function testGetRecord() {
+ $this->logInWithPermission('ADMIN');
+
// Set up a page that is delete from live
- $page1 = $this->objFromFixture('Page', 'page1');
+ $page1 = $this->objFromFixture(Page::class, 'page1');
$page1ID = $page1->ID;
$page1->publishRecursive();
$page1->delete();
@@ -410,8 +410,8 @@ class CMSMainTest extends FunctionalTest {
}
public function testBreadcrumbs() {
- $page3 = $this->objFromFixture('Page', 'page3');
- $page31 = $this->objFromFixture('Page', 'page31');
+ $page3 = $this->objFromFixture(Page::class, 'page3');
+ $page31 = $this->objFromFixture(Page::class, 'page31');
$adminuser = $this->objFromFixture('SilverStripe\\Security\\Member', 'admin');
$this->session()->inst_set('loggedInAs', $adminuser->ID);
@@ -463,10 +463,10 @@ class CMSMainTest extends FunctionalTest {
);
// Change state of tree
- $page1 = $this->objFromFixture('Page', 'page1');
- $page3 = $this->objFromFixture('Page', 'page3');
- $page11 = $this->objFromFixture('Page', 'page11');
- $page12 = $this->objFromFixture('Page', 'page12');
+ $page1 = $this->objFromFixture(Page::class, 'page1');
+ $page3 = $this->objFromFixture(Page::class, 'page3');
+ $page11 = $this->objFromFixture(Page::class, 'page11');
+ $page12 = $this->objFromFixture(Page::class, 'page12');
// Deleted
$page1->doUnpublish();
$page1->delete();
@@ -542,7 +542,7 @@ class CMSMainTest extends FunctionalTest {
$this->loginWithPermission('ADMIN');
// Get a associated with a fixture page.
- $page = $this->objFromFixture('Page', 'page1');
+ $page = $this->objFromFixture(Page::class, 'page1');
$controller = new CMSMain();
$form = $controller->getEditForm($page->ID);
$this->assertInstanceOf("SilverStripe\\Forms\\Form", $form);
diff --git a/tests/model/ErrorPageTest.php b/tests/model/ErrorPageTest.php
index 709a2d23..dd1dc7f5 100644
--- a/tests/model/ErrorPageTest.php
+++ b/tests/model/ErrorPageTest.php
@@ -93,10 +93,10 @@ class ErrorPageTest extends FunctionalTest {
// Write new 401 page
$page = new ErrorPage();
+ $page->Title = '401 Error';
$page->ErrorCode = 401;
$page->Title = 'Unauthorised';
$page->write();
- $page->copyVersionToStage('Stage', 'Live');
$page->publishRecursive();
// Static cache should now exist
diff --git a/tests/model/SiteTreeActionsTest.php b/tests/model/SiteTreeActionsTest.php
index 44833394..a323db30 100644
--- a/tests/model/SiteTreeActionsTest.php
+++ b/tests/model/SiteTreeActionsTest.php
@@ -1,7 +1,9 @@
objFromFixture('SilverStripe\\Security\\Member', 'cmsreadonlyeditor');
- $this->session()->inst_set('loggedInAs', $readonlyEditor->ID);
+ if(class_exists('SiteTreeCMSWorkflow')) {
+ $this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed');
+ }
+ // Publish record
+ $this->logInWithPermission('ADMIN');
$page = new SiteTreeActionsTest_Page();
$page->CanEditType = 'LoggedInUsers';
$page->write();
$page->publishRecursive();
+ // Log in as another user
+ $readonlyEditor = $this->objFromFixture(Member::class, 'cmsreadonlyeditor');
+ $this->session()->inst_set('loggedInAs', $readonlyEditor->ID);
+
+ // Reload latest version
+ $page = Page::get()->byID($page->ID);
$actions = $page->getCMSActions();
$this->assertNull($actions->dataFieldByName('action_save'));
$this->assertNull($actions->dataFieldByName('action_publish'));
$this->assertNull($actions->dataFieldByName('action_unpublish'));
- $this->assertNull($actions->dataFieldByName('action_delete'));
- $this->assertNull($actions->dataFieldByName('action_deletefromlive'));
+ $this->assertNull($actions->dataFieldByName('action_archive'));
$this->assertNull($actions->dataFieldByName('action_rollback'));
$this->assertNull($actions->dataFieldByName('action_revert'));
}
public function testActionsNoDeletePublishedRecord() {
- if(class_exists('SiteTreeCMSWorkflow')) return true;
+ if(class_exists('SiteTreeCMSWorkflow')) {
+ $this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed');
+ }
$this->logInWithPermission('ADMIN');
@@ -56,100 +65,118 @@ class SiteTreeActionsTest extends FunctionalTest {
$page->write();
$pageID = $page->ID;
$page->publishRecursive();
- $page->deleteFromStage('Stage');
+ $page->deleteFromStage(Versioned::DRAFT);
// Get the live version of the page
- $page = Versioned::get_one_by_stage("SilverStripe\\CMS\\Model\\SiteTree", "Live", "\"SiteTree\".\"ID\" = $pageID");
- $this->assertInstanceOf("SilverStripe\\CMS\\Model\\SiteTree", $page);
+ $page = Versioned::get_one_by_stage(SiteTree::class, "Live", "\"SiteTree\".\"ID\" = $pageID");
+ $this->assertInstanceOf(SiteTree::class, $page);
// Check that someone without the right permission can't delete the page
- $editor = $this->objFromFixture('SilverStripe\\Security\\Member', 'cmsnodeleteeditor');
+ $editor = $this->objFromFixture(Member::class, 'cmsnodeleteeditor');
$this->session()->inst_set('loggedInAs', $editor->ID);
$actions = $page->getCMSActions();
- $this->assertNull($actions->dataFieldByName('action_deletefromlive'));
+ $this->assertNull($actions->dataFieldByName('action_archive'));
// Check that someone with the right permission can delete the page
- $this->objFromFixture('SilverStripe\\Security\\Member', 'cmseditor')->logIn();
+ /** @var Member $member */
+ $member = $this->objFromFixture(Member::class, 'cmseditor');
+ $member->logIn();
$actions = $page->getCMSActions();
- $this->assertNotNull($actions->dataFieldByName('action_deletefromlive'));
+ $this->assertNotNull($actions->dataFieldByName('action_archive'));
}
public function testActionsPublishedRecord() {
- if(class_exists('SiteTreeCMSWorkflow')) return true;
+ if(class_exists('SiteTreeCMSWorkflow')) {
+ $this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed');
+ }
- $author = $this->objFromFixture('SilverStripe\\Security\\Member', 'cmseditor');
+ $author = $this->objFromFixture(Member::class, 'cmseditor');
$this->session()->inst_set('loggedInAs', $author->ID);
+ /** @var Page $page */
$page = new Page();
$page->CanEditType = 'LoggedInUsers';
$page->write();
$page->publishRecursive();
+ // Reload latest version
+ $page = Page::get()->byID($page->ID);
+
$actions = $page->getCMSActions();
$this->assertNotNull($actions->dataFieldByName('action_save'));
$this->assertNotNull($actions->dataFieldByName('action_publish'));
$this->assertNotNull($actions->dataFieldByName('action_unpublish'));
$this->assertNotNull($actions->dataFieldByName('action_archive'));
- $this->assertNull($actions->dataFieldByName('action_deletefromlive'));
$this->assertNull($actions->dataFieldByName('action_rollback'));
$this->assertNull($actions->dataFieldByName('action_revert'));
}
public function testActionsDeletedFromStageRecord() {
- if(class_exists('SiteTreeCMSWorkflow')) return true;
+ if(class_exists('SiteTreeCMSWorkflow')) {
+ $this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed');
+ }
- $author = $this->objFromFixture('SilverStripe\\Security\\Member', 'cmseditor');
+ $author = $this->objFromFixture(Member::class, 'cmseditor');
$this->session()->inst_set('loggedInAs', $author->ID);
$page = new Page();
$page->CanEditType = 'LoggedInUsers';
$page->write();
+ $this->assertTrue($page->canPublish());
$pageID = $page->ID;
$page->publishRecursive();
$page->deleteFromStage('Stage');
// Get the live version of the page
- $page = Versioned::get_one_by_stage("SilverStripe\\CMS\\Model\\SiteTree", "Live", "\"SiteTree\".\"ID\" = $pageID");
- $this->assertInstanceOf('SilverStripe\\CMS\\Model\\SiteTree', $page);
+ $page = Versioned::get_one_by_stage(SiteTree::class, "Live", "\"SiteTree\".\"ID\" = $pageID");
+ $this->assertInstanceOf(SiteTree::class, $page);
$actions = $page->getCMSActions();
$this->assertNull($actions->dataFieldByName('action_save'));
$this->assertNull($actions->dataFieldByName('action_publish'));
$this->assertNull($actions->dataFieldByName('action_unpublish'));
- $this->assertNull($actions->dataFieldByName('action_archive'));
- $this->assertNotNull($actions->dataFieldByName('action_deletefromlive'));
+ $this->assertNotNull($actions->dataFieldByName('action_archive'));
$this->assertNull($actions->dataFieldByName('action_rollback'));
$this->assertNotNull($actions->dataFieldByName('action_revert'));
}
public function testActionsChangedOnStageRecord() {
- if(class_exists('SiteTreeCMSWorkflow')) return true;
+ if(class_exists('SiteTreeCMSWorkflow')) {
+ $this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed');
+ }
- $author = $this->objFromFixture('SilverStripe\\Security\\Member', 'cmseditor');
+ $author = $this->objFromFixture(Member::class, 'cmseditor');
$this->session()->inst_set('loggedInAs', $author->ID);
$page = new Page();
$page->CanEditType = 'LoggedInUsers';
$page->write();
+ $this->assertTrue($page->canPublish());
$page->publishRecursive();
$page->Content = 'Changed on Stage';
$page->write();
$page->flushCache();
+ // Reload latest version
+ $page = Page::get()->byID($page->ID);
+
$actions = $page->getCMSActions();
$this->assertNotNull($actions->dataFieldByName('action_save'));
$this->assertNotNull($actions->dataFieldByName('action_publish'));
$this->assertNotNull($actions->dataFieldByName('action_unpublish'));
$this->assertNotNull($actions->dataFieldByName('action_archive'));
- $this->assertNull($actions->dataFieldByName('action_deletefromlive'));
$this->assertNotNull($actions->dataFieldByName('action_rollback'));
$this->assertNull($actions->dataFieldByName('action_revert'));
}
public function testActionsViewingOldVersion() {
+ if(class_exists('SiteTreeCMSWorkflow')) {
+ $this->markTestSkipped('Skip if SiteTreeCMSWorkflow installed');
+ }
+
$p = new Page();
$p->Content = 'test page first version';
$p->write();
@@ -163,7 +190,6 @@ class SiteTreeActionsTest extends FunctionalTest {
$this->assertNull($actions->dataFieldByName('action_save'));
$this->assertNull($actions->dataFieldByName('action_publish'));
$this->assertNull($actions->dataFieldByName('action_unpublish'));
- $this->assertNull($actions->dataFieldByName('action_archive'));
$this->assertNotNull($actions->dataFieldByName('action_email'));
$this->assertNotNull($actions->dataFieldByName('action_rollback'));
}