mirror of
https://github.com/silverstripe/silverstripe-cms
synced 2024-10-22 08:05:56 +02:00
Merge remote-tracking branch 'origin/3'
# Conflicts: # code/controllers/CMSFileAddController.php # code/controllers/CMSPageAddController.php # code/controllers/CMSPageHistoryController.php # code/controllers/CMSSiteTreeFilter.php # code/controllers/ContentController.php # code/controllers/LeftAndMainPageIconsExtension.php # code/controllers/SilverStripeNavigator.php # code/model/SiteTreeFileExtension.php # code/model/VirtualPage.php # composer.json # tests/model/ErrorPageTest.yml # tests/model/FileLinkTrackingTest.yml # tests/model/VirtualPageTest.yml
This commit is contained in:
commit
7dfe145412
24
.editorconfig
Normal file
24
.editorconfig
Normal file
@ -0,0 +1,24 @@
|
||||
# For more information about the properties used in
|
||||
# this file, please see the EditorConfig documentation:
|
||||
# http://editorconfig.org/
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = tab
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.yml]
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
|
||||
# Don't perform any clean-up on thirdparty files
|
||||
|
||||
[thirdparty/**]
|
||||
trim_trailing_whitespace = false
|
||||
insert_final_newline = false
|
@ -41,7 +41,7 @@ before_script:
|
||||
- php ~/travis-support/travis_setup_selenium.php --if-env BEHAT_TEST
|
||||
- php ~/travis-support/travis_setup_php54_webserver.php --if-env BEHAT_TEST
|
||||
|
||||
script:
|
||||
script:
|
||||
- "if [ \"$BEHAT_TEST\" = \"\" ]; then vendor/bin/phpunit cms/tests; fi"
|
||||
- "if [ \"$BEHAT_TEST\" = \"1\" ]; then vendor/bin/behat @cms; fi"
|
||||
|
||||
|
@ -22,4 +22,4 @@ CMSMenu::remove_menu_item('CMSPageHistoryController');
|
||||
CMSMenu::remove_menu_item('CMSPageReportsController');
|
||||
CMSMenu::remove_menu_item('CMSPageAddController');
|
||||
|
||||
CMSMenu::remove_menu_item("SiteConfigLeftAndMain");
|
||||
CMSMenu::remove_menu_item("SiteConfigLeftAndMain");
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
/**
|
||||
* Publish items batch action.
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage batchaction
|
||||
*/
|
||||
@ -23,7 +23,7 @@ class CMSBatchAction_Publish extends CMSBatchAction {
|
||||
|
||||
/**
|
||||
* Unpublish items batch action.
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage batchaction
|
||||
*/
|
||||
@ -116,7 +116,7 @@ class CMSBatchAction_Restore extends CMSBatchAction {
|
||||
|
||||
/**
|
||||
* Delete items batch action.
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage batchaction
|
||||
* @deprecated since version 4.0
|
||||
@ -141,7 +141,7 @@ class CMSBatchAction_Delete extends CMSBatchAction {
|
||||
if($page->canDelete()) $page->delete();
|
||||
else $status['error'][$page->ID] = true;
|
||||
|
||||
// check to see if the record exists on the live site,
|
||||
// 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( 'SiteTree', 'Live', array(
|
||||
'"SiteTree"."ID"' => $id
|
||||
@ -166,7 +166,7 @@ class CMSBatchAction_Delete extends CMSBatchAction {
|
||||
|
||||
/**
|
||||
* Unpublish (delete from live site) items batch action.
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage batchaction
|
||||
* @deprecated since version 4.0
|
||||
|
@ -50,7 +50,7 @@ class CMSPageAddController extends CMSPageEditController {
|
||||
new SelectionGroup_Item(
|
||||
'child',
|
||||
$parentField = new TreeDropdownField(
|
||||
"ParentID",
|
||||
"ParentID",
|
||||
"",
|
||||
'SiteTree',
|
||||
'ID',
|
||||
@ -61,8 +61,8 @@ class CMSPageAddController extends CMSPageEditController {
|
||||
)
|
||||
),
|
||||
$typeField = new OptionsetField(
|
||||
"PageType",
|
||||
sprintf($numericLabelTmpl, 2, _t('CMSMain.ChoosePageType', 'Choose page type')),
|
||||
"PageType",
|
||||
sprintf($numericLabelTmpl, 2, _t('CMSMain.ChoosePageType', 'Choose page type')),
|
||||
$pageTypes,
|
||||
'Page'
|
||||
),
|
||||
@ -71,7 +71,7 @@ class CMSPageAddController extends CMSPageEditController {
|
||||
sprintf(
|
||||
'<p class="message notice message-restricted">%s</p>',
|
||||
_t(
|
||||
'CMSMain.AddPageRestriction',
|
||||
'CMSMain.AddPageRestriction',
|
||||
'Note: Some page types are not allowed for this selection'
|
||||
)
|
||||
)
|
||||
@ -79,7 +79,7 @@ class CMSPageAddController extends CMSPageEditController {
|
||||
);
|
||||
$parentField->setSearchFunction(function ($sourceObject, $labelField, $search) {
|
||||
return DataObject::get(
|
||||
$sourceObject,
|
||||
$sourceObject,
|
||||
sprintf(
|
||||
"\"MenuTitle\" LIKE '%%%s%%' OR \"Title\" LIKE '%%%s%%'",
|
||||
Convert::raw2sql($search),
|
||||
@ -88,10 +88,10 @@ class CMSPageAddController extends CMSPageEditController {
|
||||
);
|
||||
});
|
||||
|
||||
// TODO Re-enable search once it allows for HTML title display,
|
||||
// TODO Re-enable search once it allows for HTML title display,
|
||||
// see http://open.silverstripe.org/ticket/7455
|
||||
// $parentField->setShowSearch(true);
|
||||
|
||||
|
||||
$parentModeField->addExtraClass('parent-mode');
|
||||
|
||||
// CMSMain->currentPageID() automatically sets the homepage,
|
||||
@ -102,7 +102,7 @@ class CMSPageAddController extends CMSPageEditController {
|
||||
} else {
|
||||
$parentModeField->setValue('top');
|
||||
}
|
||||
|
||||
|
||||
$actions = new FieldList(
|
||||
FormAction::create("doAdd", _t('CMSMain.Create',"Create"))
|
||||
->addExtraClass('ss-ui-action-constructive')->setAttribute('data-icon', 'accept')
|
||||
@ -111,10 +111,10 @@ class CMSPageAddController extends CMSPageEditController {
|
||||
->addExtraClass('ss-ui-action-destructive ss-ui-action-cancel')
|
||||
->setUseButtonTag(true)
|
||||
);
|
||||
|
||||
|
||||
$this->extend('updatePageOptions', $fields);
|
||||
|
||||
$form = CMSForm::create(
|
||||
|
||||
$form = CMSForm::create(
|
||||
$this, "AddForm", $fields, $actions
|
||||
)->setHTMLID('Form_AddForm');
|
||||
$form->setAttribute('data-hints', $this->SiteTreeHints());
|
||||
@ -140,7 +140,7 @@ class CMSPageAddController extends CMSPageEditController {
|
||||
|
||||
if(is_numeric($parentID) && $parentID > 0) $parentObj = DataObject::get_by_id("SiteTree", $parentID);
|
||||
else $parentObj = null;
|
||||
|
||||
|
||||
if(!$parentObj || !$parentObj->ID) $parentID = 0;
|
||||
|
||||
if(!singleton($className)->canCreate(Member::currentUser(), array('Parent' => $parentObj))) {
|
||||
@ -163,11 +163,11 @@ class CMSPageAddController extends CMSPageEditController {
|
||||
$editController->setCurrentPageID($record->ID);
|
||||
|
||||
Session::set(
|
||||
"FormInfo.Form_EditForm.formError.message",
|
||||
"FormInfo.Form_EditForm.formError.message",
|
||||
_t('CMSMain.PageAdded', 'Successfully created page')
|
||||
);
|
||||
Session::set("FormInfo.Form_EditForm.formError.type", 'good');
|
||||
|
||||
|
||||
return $this->redirect(Controller::join_links(singleton('CMSPageEditController')->Link('show'), $record->ID));
|
||||
}
|
||||
|
||||
|
@ -12,14 +12,14 @@ class CMSPageHistoryController extends CMSMain {
|
||||
private static $menu_title = 'History';
|
||||
private static $required_permission_codes = 'CMS_ACCESS_CMSMain';
|
||||
private static $session_namespace = 'CMSMain';
|
||||
|
||||
|
||||
private static $allowed_actions = array(
|
||||
'VersionsForm',
|
||||
'CompareVersionsForm',
|
||||
'show',
|
||||
'compare'
|
||||
);
|
||||
|
||||
|
||||
private static $url_handlers = array(
|
||||
'$Action/$ID/$VersionID/$OtherVersionID' => 'handleAction'
|
||||
);
|
||||
@ -37,14 +37,14 @@ class CMSPageHistoryController extends CMSMain {
|
||||
});
|
||||
return $negotiator;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param SS_HTTPRequest $request
|
||||
* @return array
|
||||
*/
|
||||
public function show($request) {
|
||||
$form = $this->ShowVersionForm($request->param('VersionID'));
|
||||
|
||||
|
||||
$negotiator = $this->getResponseNegotiator();
|
||||
$controller = $this;
|
||||
$negotiator->setCallback('CurrentForm', function() use(&$controller, &$form) {
|
||||
@ -56,14 +56,14 @@ class CMSPageHistoryController extends CMSMain {
|
||||
|
||||
return $negotiator->respond($request);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param SS_HTTPRequest $request
|
||||
* @return array
|
||||
*/
|
||||
public function compare($request) {
|
||||
$form = $this->CompareVersionsForm(
|
||||
$request->param('VersionID'),
|
||||
$request->param('VersionID'),
|
||||
$request->param('OtherVersionID')
|
||||
);
|
||||
|
||||
@ -88,13 +88,13 @@ class CMSPageHistoryController extends CMSMain {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the read only version of the edit form. Detaches all {@link FormAction}
|
||||
* Returns the read only version of the edit form. Detaches all {@link FormAction}
|
||||
* instances attached since only action relates to revert.
|
||||
*
|
||||
* Permission checking is done at the {@link CMSMain::getEditForm()} level.
|
||||
*
|
||||
*
|
||||
* @param int $id ID of the record to show
|
||||
* @param array $fields optional
|
||||
* @param int $versionID
|
||||
@ -104,10 +104,10 @@ class CMSPageHistoryController extends CMSMain {
|
||||
*/
|
||||
public function getEditForm($id = null, $fields = null, $versionID = null, $compareID = null) {
|
||||
if(!$id) $id = $this->currentPageID();
|
||||
|
||||
|
||||
$record = $this->getRecord($id, $versionID);
|
||||
$versionID = ($record) ? $record->Version : $versionID;
|
||||
|
||||
|
||||
$form = parent::getEditForm($record, ($record) ? $record->getCMSFields() : null);
|
||||
// Respect permission failures from parent implementation
|
||||
if(!($form instanceof Form)) return $form;
|
||||
@ -118,14 +118,14 @@ class CMSPageHistoryController extends CMSMain {
|
||||
$form->setActions(new FieldList(
|
||||
$revert = FormAction::create('doRollback', _t('CMSPageHistoryController.REVERTTOTHISVERSION', 'Revert to this version'))->setUseButtonTag(true)
|
||||
));
|
||||
|
||||
|
||||
$fields = $form->Fields();
|
||||
$fields->removeByName("Status");
|
||||
$fields->push(new HiddenField("ID"));
|
||||
$fields->push(new HiddenField("Version"));
|
||||
|
||||
$fields = $fields->makeReadonly();
|
||||
|
||||
|
||||
$fields = $fields->makeReadonly();
|
||||
|
||||
if($compareID) {
|
||||
$link = Controller::join_links(
|
||||
$this->Link('show'),
|
||||
@ -133,7 +133,7 @@ class CMSPageHistoryController extends CMSMain {
|
||||
);
|
||||
|
||||
$view = _t('CMSPageHistoryController.VIEW',"view");
|
||||
|
||||
|
||||
$message = _t(
|
||||
'CMSPageHistoryController.COMPARINGVERSION',
|
||||
"Comparing versions {version1} and {version2}.",
|
||||
@ -142,7 +142,7 @@ class CMSPageHistoryController extends CMSMain {
|
||||
'version2' => sprintf('%s (<a href="%s">%s</a>)', $compareID, Controller::join_links($link, $compareID), $view)
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
$revert->setReadonly(true);
|
||||
} else {
|
||||
if($record->isLatestVersion()) {
|
||||
@ -155,8 +155,8 @@ class CMSPageHistoryController extends CMSMain {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$fields->addFieldToTab('Root.Main',
|
||||
|
||||
$fields->addFieldToTab('Root.Main',
|
||||
new LiteralField('CurrentlyViewingMessage', $this->customise(array(
|
||||
'Content' => $message,
|
||||
'Classes' => 'notice'
|
||||
@ -169,23 +169,23 @@ class CMSPageHistoryController extends CMSMain {
|
||||
"ID" => $id,
|
||||
"Version" => $versionID,
|
||||
));
|
||||
|
||||
|
||||
if(($record && $record->isLatestVersion())) {
|
||||
$revert->setReadonly(true);
|
||||
}
|
||||
|
||||
|
||||
$form->removeExtraClass('cms-content');
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Version select form. Main interface between selecting versions to view
|
||||
* Version select form. Main interface between selecting versions to view
|
||||
* and comparing multiple versions.
|
||||
*
|
||||
*
|
||||
* Because we can reload the page directly to a compare view (history/compare/1/2/3)
|
||||
* this form has to adapt to those parameters as well.
|
||||
* this form has to adapt to those parameters as well.
|
||||
*
|
||||
* @return Form
|
||||
*/
|
||||
@ -197,7 +197,7 @@ class CMSPageHistoryController extends CMSMain {
|
||||
$action = $this->getRequest()->param('Action');
|
||||
$versionID = $this->getRequest()->param('VersionID');
|
||||
$otherVersionID = $this->getRequest()->param('OtherVersionID');
|
||||
|
||||
|
||||
$showUnpublishedChecked = 0;
|
||||
$compareModeChecked = ($action == "compare");
|
||||
|
||||
@ -208,19 +208,19 @@ class CMSPageHistoryController extends CMSMain {
|
||||
if($versions) {
|
||||
foreach($versions as $k => $version) {
|
||||
$active = false;
|
||||
|
||||
|
||||
if($version->Version == $versionID || $version->Version == $otherVersionID) {
|
||||
$active = true;
|
||||
|
||||
|
||||
if(!$version->WasPublished) $showUnpublishedChecked = 1;
|
||||
}
|
||||
|
||||
$version->Active = ($active);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$vd = new ViewableData();
|
||||
|
||||
|
||||
$versionsHtml = $vd->customise(array(
|
||||
'Versions' => $versions
|
||||
))->renderWith('CMSPageHistoryController_versions');
|
||||
@ -246,14 +246,14 @@ class CMSPageHistoryController extends CMSMain {
|
||||
'doCompare', _t('CMSPageHistoryController.COMPAREVERSIONS','Compare Versions')
|
||||
),
|
||||
new FormAction(
|
||||
'doShowVersion', _t('CMSPageHistoryController.SHOWVERSION','Show Version')
|
||||
'doShowVersion', _t('CMSPageHistoryController.SHOWVERSION','Show Version')
|
||||
)
|
||||
);
|
||||
|
||||
// Use <button> to allow full jQuery UI styling
|
||||
foreach($actions->dataFields() as $action) $action->setUseButtonTag(true);
|
||||
|
||||
$form = CMSForm::create(
|
||||
$form = CMSForm::create(
|
||||
$this,
|
||||
'VersionsForm',
|
||||
$fields,
|
||||
@ -263,15 +263,15 @@ class CMSPageHistoryController extends CMSMain {
|
||||
$form->loadDataFrom($this->getRequest()->requestVars());
|
||||
$hiddenID->setValue($id);
|
||||
$form->unsetValidator();
|
||||
|
||||
|
||||
$form
|
||||
->addExtraClass('cms-versions-form') // placeholder, necessary for $.metadata() to work
|
||||
->setAttribute('data-link-tmpl-compare', Controller::join_links($this->Link('compare'), '%s', '%s', '%s'))
|
||||
->setAttribute('data-link-tmpl-show', Controller::join_links($this->Link('show'), '%s', '%s'));
|
||||
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process the {@link VersionsForm} compare function between two pages.
|
||||
*
|
||||
@ -283,7 +283,7 @@ class CMSPageHistoryController extends CMSMain {
|
||||
public function doCompare($data, $form) {
|
||||
$versions = $data['Versions'];
|
||||
if(count($versions) < 2) return null;
|
||||
|
||||
|
||||
$id = $this->currentPageID();
|
||||
$version1 = array_shift($versions);
|
||||
$version2 = array_shift($versions);
|
||||
@ -295,11 +295,11 @@ class CMSPageHistoryController extends CMSMain {
|
||||
return $this->customise(array(
|
||||
"EditForm" => $form
|
||||
))->renderWith(array(
|
||||
$this->class . '_EditForm',
|
||||
$this->class . '_EditForm',
|
||||
'LeftAndMain_Content'
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
// non javascript, redirect the user to the page
|
||||
$this->redirect(Controller::join_links(
|
||||
$this->Link('compare'),
|
||||
@ -316,21 +316,21 @@ class CMSPageHistoryController extends CMSMain {
|
||||
* @param Form
|
||||
*
|
||||
* @return html
|
||||
*/
|
||||
*/
|
||||
public function doShowVersion($data, $form) {
|
||||
$versionID = null;
|
||||
|
||||
if(isset($data['Versions']) && is_array($data['Versions'])) {
|
||||
|
||||
if(isset($data['Versions']) && is_array($data['Versions'])) {
|
||||
$versionID = array_shift($data['Versions']);
|
||||
}
|
||||
|
||||
|
||||
if(!$versionID) return;
|
||||
|
||||
|
||||
if($request->isAjax()) {
|
||||
return $this->customise(array(
|
||||
"EditForm" => $this->ShowVersionForm($versionID)
|
||||
))->renderWith(array(
|
||||
$this->class . '_EditForm',
|
||||
$this->class . '_EditForm',
|
||||
'LeftAndMain_Content'
|
||||
));
|
||||
}
|
||||
@ -354,7 +354,7 @@ class CMSPageHistoryController extends CMSMain {
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param int $versionID
|
||||
* @param int $otherVersionID
|
||||
@ -370,10 +370,10 @@ class CMSPageHistoryController extends CMSMain {
|
||||
}
|
||||
|
||||
if(!$toVersion || !$toVersion) return false;
|
||||
|
||||
|
||||
$id = $this->currentPageID();
|
||||
$page = DataObject::get_by_id("SiteTree", $id);
|
||||
|
||||
|
||||
if($page && !$page->canView()) {
|
||||
return Security::permissionFailure($this);
|
||||
}
|
||||
@ -382,11 +382,11 @@ class CMSPageHistoryController extends CMSMain {
|
||||
|
||||
$fromVersionRecord = Versioned::get_version('SiteTree', $id, $fromVersion);
|
||||
$toVersionRecord = Versioned::get_version('SiteTree', $id, $toVersion);
|
||||
|
||||
|
||||
if(!$fromVersionRecord) {
|
||||
user_error("Can't find version $fromVersion of page $id", E_USER_ERROR);
|
||||
}
|
||||
|
||||
|
||||
if(!$toVersionRecord) {
|
||||
user_error("Can't find version $toVersion of page $id", E_USER_ERROR);
|
||||
}
|
||||
@ -395,23 +395,23 @@ class CMSPageHistoryController extends CMSMain {
|
||||
$form = $this->getEditForm($id, null, null, true);
|
||||
$form->setActions(new FieldList());
|
||||
$form->addExtraClass('compare');
|
||||
|
||||
|
||||
// Comparison views shouldn't be editable.
|
||||
// Its important to convert fields *before* loading data,
|
||||
// as the comparison output is HTML and not valid values for the various field types
|
||||
$readonlyFields = $form->Fields()->makeReadonly();
|
||||
$form->setFields($readonlyFields);
|
||||
|
||||
|
||||
$form->loadDataFrom($record);
|
||||
$form->loadDataFrom(array(
|
||||
"ID" => $id,
|
||||
"Version" => $fromVersion,
|
||||
));
|
||||
|
||||
|
||||
foreach($form->Fields()->dataFields() as $field) {
|
||||
$field->dontEscape = true;
|
||||
}
|
||||
|
||||
|
||||
return $form;
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
/**
|
||||
* Base class for filtering the subtree for certain node statuses.
|
||||
*
|
||||
*
|
||||
* The simplest way of building a CMSSiteTreeFilter is to create a pagesToBeShown() method that
|
||||
* returns an Iterator of maps, each entry containing the 'ID' and 'ParentID' of the pages to be
|
||||
* included in the tree. The result of a DB::query() can then be returned directly.
|
||||
@ -9,7 +9,7 @@
|
||||
* If you wish to make a more complex tree, you can overload includeInTree($page) to return true/
|
||||
* false depending on whether the given page should be included. Note that you will need to include
|
||||
* parent helper pages yourself.
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage content
|
||||
*/
|
||||
@ -20,10 +20,10 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
|
||||
* Caution: Unescaped data.
|
||||
*/
|
||||
protected $params = array();
|
||||
|
||||
|
||||
/**
|
||||
* List of filtered items and all their parents
|
||||
*
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_cache_ids = null;
|
||||
@ -37,12 +37,12 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
|
||||
* @var array
|
||||
*/
|
||||
protected $_cache_highlight_ids = null;
|
||||
|
||||
|
||||
/**
|
||||
* @var Array
|
||||
*/
|
||||
protected $_cache_expanded = array();
|
||||
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
@ -55,38 +55,38 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
|
||||
|
||||
/**
|
||||
* Returns a sorted array of all implementators of CMSSiteTreeFilter, suitable for use in a dropdown.
|
||||
*
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_all_filters() {
|
||||
// get all filter instances
|
||||
$filters = ClassInfo::subclassesFor('CMSSiteTreeFilter');
|
||||
|
||||
|
||||
// remove abstract CMSSiteTreeFilter class
|
||||
array_shift($filters);
|
||||
|
||||
|
||||
// add filters to map
|
||||
$filterMap = array();
|
||||
foreach($filters as $filter) {
|
||||
$filterMap[$filter] = $filter::title();
|
||||
}
|
||||
|
||||
|
||||
// Ensure that 'all pages' filter is on top position and everything else is sorted alphabetically
|
||||
uasort($filterMap, function($a, $b) {
|
||||
return ($a === CMSSiteTreeFilter_Search::title())
|
||||
? -1
|
||||
: strcasecmp($a, $b);
|
||||
});
|
||||
|
||||
|
||||
return $filterMap;
|
||||
}
|
||||
|
||||
|
||||
public function __construct($params = null) {
|
||||
if($params) $this->params = $params;
|
||||
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
|
||||
public function getChildrenMethod() {
|
||||
return $this->childrenMethod;
|
||||
}
|
||||
@ -120,7 +120,7 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
|
||||
public function pagesIncluded() {
|
||||
return $this->mapIDs($this->getFilteredPages());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Populate the IDs of the pages returned by pagesIncluded(), also including
|
||||
* the necessary parent helper pages.
|
||||
@ -129,10 +129,10 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
|
||||
$parents = array();
|
||||
$this->_cache_ids = array();
|
||||
$this->_cache_highlight_ids = array();
|
||||
|
||||
|
||||
if($pages = $this->pagesIncluded()) {
|
||||
|
||||
// And keep a record of parents we don't need to get
|
||||
|
||||
// And keep a record of parents we don't need to get
|
||||
// parents of themselves, as well as IDs to mark
|
||||
foreach($pages as $pageArr) {
|
||||
$parents[$pageArr['ParentID']] = true;
|
||||
@ -152,7 +152,7 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function isPageIncluded($page) {
|
||||
if($this->_cache_ids === NULL) {
|
||||
$this->populateIDs();
|
||||
@ -160,10 +160,10 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
|
||||
|
||||
return !empty($this->_cache_ids[$page->ID]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Applies the default filters to a specified DataList of pages
|
||||
*
|
||||
*
|
||||
* @param DataList $query Unfiltered query
|
||||
* @return DataList Filtered query
|
||||
*/
|
||||
@ -208,10 +208,10 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
|
||||
}
|
||||
return $query;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Maps a list of pages to an array of associative arrays with ID and ParentID keys
|
||||
*
|
||||
*
|
||||
* @param DataList $pages
|
||||
* @return array
|
||||
*/
|
||||
@ -272,7 +272,7 @@ class CMSSiteTreeFilter_PublishedPages extends CMSSiteTreeFilter {
|
||||
* Works a bit different than the other filters:
|
||||
* Shows all pages *including* those deleted from stage and live.
|
||||
* It does not filter out pages still existing in the different stages.
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage content
|
||||
*/
|
||||
@ -287,11 +287,11 @@ class CMSSiteTreeFilter_DeletedPages extends CMSSiteTreeFilter {
|
||||
* @var string
|
||||
*/
|
||||
protected $numChildrenMethod = 'numHistoricalChildren';
|
||||
|
||||
|
||||
static public function title() {
|
||||
return _t('CMSSiteTreeFilter_DeletedPages.Title', "All pages, including archived");
|
||||
}
|
||||
|
||||
|
||||
public function getFilteredPages() {
|
||||
$pages = Versioned::get_including_deleted('SiteTree');
|
||||
$pages = $this->applyDefaultFilters($pages);
|
||||
@ -301,40 +301,40 @@ class CMSSiteTreeFilter_DeletedPages extends CMSSiteTreeFilter {
|
||||
|
||||
/**
|
||||
* Gets all pages which have changed on stage.
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage content
|
||||
*/
|
||||
class CMSSiteTreeFilter_ChangedPages extends CMSSiteTreeFilter {
|
||||
|
||||
|
||||
static public function title() {
|
||||
return _t('CMSSiteTreeFilter_ChangedPages.Title', "Modified pages");
|
||||
}
|
||||
|
||||
|
||||
public function getFilteredPages() {
|
||||
$pages = Versioned::get_by_stage('SiteTree', 'Stage');
|
||||
$pages = $this->applyDefaultFilters($pages)
|
||||
->leftJoin('SiteTree_Live', '"SiteTree_Live"."ID" = "SiteTree"."ID"')
|
||||
->where('"SiteTree"."Version" <> "SiteTree_Live"."Version"');
|
||||
return $pages;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters pages which have a status "Removed from Draft".
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage content
|
||||
*/
|
||||
class CMSSiteTreeFilter_StatusRemovedFromDraftPages extends CMSSiteTreeFilter {
|
||||
|
||||
|
||||
static public function title() {
|
||||
return _t('CMSSiteTreeFilter_StatusRemovedFromDraftPages.Title', 'Live but removed from draft');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Filters out all pages who's status is set to "Removed from draft".
|
||||
*
|
||||
*
|
||||
* @return SS_List
|
||||
*/
|
||||
public function getFilteredPages() {
|
||||
@ -345,24 +345,24 @@ class CMSSiteTreeFilter_StatusRemovedFromDraftPages extends CMSSiteTreeFilter {
|
||||
return $page->getIsDeletedFromStage() && $page->getExistsOnLive();
|
||||
});
|
||||
return $pages;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters pages which have a status "Draft".
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage content
|
||||
*/
|
||||
class CMSSiteTreeFilter_StatusDraftPages extends CMSSiteTreeFilter {
|
||||
|
||||
|
||||
static public function title() {
|
||||
return _t('CMSSiteTreeFilter_StatusDraftPages.Title', 'Draft pages');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Filters out all pages who's status is set to "Draft".
|
||||
*
|
||||
*
|
||||
* @see {@link SiteTree::getStatusFlags()}
|
||||
* @return SS_List
|
||||
*/
|
||||
@ -374,12 +374,12 @@ class CMSSiteTreeFilter_StatusDraftPages extends CMSSiteTreeFilter {
|
||||
return (!$page->getIsDeletedFromStage() && $page->getIsAddedToStage());
|
||||
});
|
||||
return $pages;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters pages which have a status "Deleted".
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage content
|
||||
*/
|
||||
@ -394,14 +394,14 @@ class CMSSiteTreeFilter_StatusDeletedPages extends CMSSiteTreeFilter {
|
||||
* @var string
|
||||
*/
|
||||
protected $numChildrenMethod = 'numHistoricalChildren';
|
||||
|
||||
|
||||
static public function title() {
|
||||
return _t('CMSSiteTreeFilter_StatusDeletedPages.Title', 'Archived pages');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Filters out all pages who's status is set to "Deleted".
|
||||
*
|
||||
*
|
||||
* @see {@link SiteTree::getStatusFlags()}
|
||||
* @return SS_List
|
||||
*/
|
||||
@ -414,7 +414,7 @@ class CMSSiteTreeFilter_StatusDeletedPages extends CMSSiteTreeFilter {
|
||||
return $page->getIsDeletedFromStage() && !$page->getExistsOnLive();
|
||||
});
|
||||
return $pages;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -426,11 +426,11 @@ class CMSSiteTreeFilter_Search extends CMSSiteTreeFilter {
|
||||
static public function title() {
|
||||
return _t('CMSSiteTreeFilter_Search.Title', "All pages");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retun an array of maps containing the keys, 'ID' and 'ParentID' for each page to be displayed
|
||||
* in the search.
|
||||
*
|
||||
*
|
||||
* @return SS_List
|
||||
*/
|
||||
public function getFilteredPages() {
|
||||
|
@ -12,7 +12,7 @@
|
||||
*
|
||||
* Subclasses of ContentController are generally instantiated by ModelAsController; this will create
|
||||
* a controller based on the URLSegment action variable, by looking in the SiteTree table.
|
||||
*
|
||||
*
|
||||
* @todo Can this be used for anything other than SiteTree controllers?
|
||||
*
|
||||
* @package cms
|
||||
@ -29,7 +29,7 @@ class ContentController extends Controller {
|
||||
'deleteinstallfiles', // secured through custom code
|
||||
'LoginForm'
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* The ContentController will take the URLSegment parameter from the URL and use that to look
|
||||
* up a SiteTree record.
|
||||
@ -41,12 +41,14 @@ class ContentController extends Controller {
|
||||
$dataRecord->URLSegment = get_class($this);
|
||||
$dataRecord->ID = -1;
|
||||
}
|
||||
|
||||
|
||||
$this->dataRecord = $dataRecord;
|
||||
$this->failover = $this->dataRecord;
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->setFailover($this->dataRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the link to this controller, but force the expanded link to be returned so that form methods and
|
||||
* similar will function properly.
|
||||
@ -57,10 +59,10 @@ class ContentController extends Controller {
|
||||
public function Link($action = null) {
|
||||
return $this->data()->Link(($action ? $action : true));
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------//
|
||||
// These flexible data methods remove the need for custom code to do simple stuff
|
||||
|
||||
|
||||
/**
|
||||
* Return the children of a given page. The parent reference can either be a page link or an ID.
|
||||
*
|
||||
@ -69,14 +71,14 @@ class ContentController extends Controller {
|
||||
*/
|
||||
public function ChildrenOf($parentRef) {
|
||||
$parent = SiteTree::get_by_link($parentRef);
|
||||
|
||||
|
||||
if(!$parent && is_numeric($parentRef)) {
|
||||
$parent = DataObject::get_by_id('SiteTree', $parentRef);
|
||||
}
|
||||
|
||||
|
||||
if($parent) return $parent->Children();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $link
|
||||
* @return SiteTree
|
||||
@ -87,10 +89,10 @@ class ContentController extends Controller {
|
||||
|
||||
public function init() {
|
||||
parent::init();
|
||||
|
||||
|
||||
// If we've accessed the homepage as /home/, then we should redirect to /.
|
||||
if($this->dataRecord && $this->dataRecord instanceof SiteTree
|
||||
&& RootURLController::should_be_on_root($this->dataRecord) && (!isset($this->urlParams['Action']) || !$this->urlParams['Action'] )
|
||||
&& RootURLController::should_be_on_root($this->dataRecord) && (!isset($this->urlParams['Action']) || !$this->urlParams['Action'] )
|
||||
&& !$_POST && !$_FILES && !$this->redirectedTo() ) {
|
||||
$getVars = $_GET;
|
||||
unset($getVars['url']);
|
||||
@ -99,7 +101,7 @@ class ContentController extends Controller {
|
||||
$this->redirect($url, 301);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if($this->dataRecord) $this->dataRecord->extend('contentcontrollerInit', $this);
|
||||
else singleton('SiteTree')->extend('contentcontrollerInit', $this);
|
||||
|
||||
@ -110,39 +112,12 @@ class ContentController extends Controller {
|
||||
return Security::permissionFailure($this);
|
||||
}
|
||||
|
||||
// Draft/Archive security check - only CMS users should be able to look at stage/archived content
|
||||
if(
|
||||
$this->URLSegment != 'Security'
|
||||
&& !Session::get('unsecuredDraftSite')
|
||||
&& (
|
||||
Versioned::current_archived_date()
|
||||
|| (Versioned::current_stage() && Versioned::current_stage() != 'Live')
|
||||
)
|
||||
) {
|
||||
if(!$this->dataRecord->canView()) {
|
||||
Session::clear('currentStage');
|
||||
Session::clear('archiveDate');
|
||||
|
||||
$permissionMessage = sprintf(
|
||||
_t(
|
||||
"ContentController.DRAFT_SITE_ACCESS_RESTRICTION",
|
||||
'You must log in with your CMS password in order to view the draft or archived content. '.
|
||||
'<a href="%s">Click here to go back to the published site.</a>'
|
||||
),
|
||||
Controller::join_links($this->Link(), "?stage=Live")
|
||||
);
|
||||
|
||||
return Security::permissionFailure($this, $permissionMessage);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Use theme from the site config
|
||||
if(($config = SiteConfig::current_site_config()) && $config->Theme) {
|
||||
Config::inst()->update('SSViewer', 'theme', $config->Theme);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This acts the same as {@link Controller::handleRequest()}, but if an action cannot be found this will attempt to
|
||||
* fall over to a child controller in order to provide functionality for nested URLs.
|
||||
@ -156,7 +131,7 @@ class ContentController extends Controller {
|
||||
$child = null;
|
||||
$action = $request->param('Action');
|
||||
$this->setDataModel($model);
|
||||
|
||||
|
||||
// If nested URLs are enabled, and there is no action handler for the current request then attempt to pass
|
||||
// control to a child controller. This allows for the creation of chains of controllers which correspond to a
|
||||
// nested URL.
|
||||
@ -170,20 +145,21 @@ class ContentController extends Controller {
|
||||
))->first();
|
||||
if(class_exists('Translatable')) Translatable::enable_locale_filter();
|
||||
}
|
||||
|
||||
|
||||
// we found a page with this URLSegment.
|
||||
if($child) {
|
||||
$request->shiftAllParams();
|
||||
$request->shift();
|
||||
|
||||
|
||||
$response = ModelAsController::controller_for($child)->handleRequest($request, $model);
|
||||
} else {
|
||||
// If a specific locale is requested, and it doesn't match the page found by URLSegment,
|
||||
// look for a translation and redirect (see #5001). Only happens on the last child in
|
||||
// a potentially nested URL chain.
|
||||
if(class_exists('Translatable')) {
|
||||
if($request->getVar('locale') && $this->dataRecord && $this->dataRecord->Locale != $request->getVar('locale')) {
|
||||
$translation = $this->dataRecord->getTranslation($request->getVar('locale'));
|
||||
$locale = $request->getVar('locale');
|
||||
if($locale && i18n::validate_locale($locale) && $this->dataRecord && $this->dataRecord->Locale != $locale) {
|
||||
$translation = $this->dataRecord->getTranslation($locale);
|
||||
if($translation) {
|
||||
$response = new SS_HTTPResponse();
|
||||
$response->redirect($translation->Link(), 301);
|
||||
@ -191,7 +167,7 @@ class ContentController extends Controller {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Director::set_current_page($this->data());
|
||||
|
||||
try {
|
||||
@ -200,16 +176,16 @@ class ContentController extends Controller {
|
||||
Director::set_current_page(null);
|
||||
} catch(SS_HTTPResponse_Exception $e) {
|
||||
$this->popCurrent();
|
||||
|
||||
|
||||
Director::set_current_page(null);
|
||||
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the project name
|
||||
*
|
||||
@ -219,7 +195,7 @@ class ContentController extends Controller {
|
||||
global $project;
|
||||
return $project;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the associated database record
|
||||
*/
|
||||
@ -244,13 +220,13 @@ class ContentController extends Controller {
|
||||
} else {
|
||||
$parent = $this->data();
|
||||
$stack = array($parent);
|
||||
|
||||
|
||||
if($parent) {
|
||||
while($parent = $parent->Parent) {
|
||||
array_unshift($stack, $parent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(isset($stack[$level-2])) $result = $stack[$level-2]->Children();
|
||||
}
|
||||
|
||||
@ -288,12 +264,12 @@ class ContentController extends Controller {
|
||||
$items = '';
|
||||
$message = '';
|
||||
|
||||
if(Director::isDev() || Permission::check('CMS_ACCESS_CMSMain') || Permission::check('VIEW_DRAFT_CONTENT')) {
|
||||
if(Director::isDev() || Permission::check('CMS_ACCESS_CMSMain') || Permission::check('VIEW_DRAFT_CONTENT')) {
|
||||
if($this->dataRecord) {
|
||||
Requirements::css(CMS_DIR . '/css/SilverStripeNavigator.css');
|
||||
Requirements::javascript(FRAMEWORK_DIR . '/thirdparty/jquery/jquery.js');
|
||||
Requirements::javascript(CMS_DIR . '/javascript/SilverStripeNavigator.js');
|
||||
|
||||
|
||||
$return = $nav = SilverStripeNavigator::get_for_record($this->dataRecord);
|
||||
$items = $return['items'];
|
||||
$message = $return['message'];
|
||||
@ -312,7 +288,7 @@ class ContentController extends Controller {
|
||||
);
|
||||
}
|
||||
$viewPageIn = _t('ContentController.VIEWPAGEIN', 'View Page in:');
|
||||
|
||||
|
||||
return <<<HTML
|
||||
<div id="SilverStripeNavigator">
|
||||
<div class="holder">
|
||||
@ -321,7 +297,7 @@ class ContentController extends Controller {
|
||||
</div>
|
||||
|
||||
<div id="switchView" class="bottomTabs">
|
||||
$viewPageIn
|
||||
$viewPageIn
|
||||
$items
|
||||
</div>
|
||||
</div>
|
||||
@ -339,7 +315,7 @@ HTML;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function SiteConfig() {
|
||||
if(method_exists($this->dataRecord, 'getSiteConfig')) {
|
||||
return $this->dataRecord->getSiteConfig();
|
||||
@ -353,10 +329,10 @@ HTML;
|
||||
* Inspects the associated {@link dataRecord} for a {@link SiteTree->Locale} value if present,
|
||||
* and falls back to {@link Translatable::get_current_locale()} or {@link i18n::default_locale()},
|
||||
* depending if Translatable is enabled.
|
||||
*
|
||||
*
|
||||
* Suitable for insertion into lang= and xml:lang=
|
||||
* attributes in HTML or XHTML output.
|
||||
*
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function ContentLocale() {
|
||||
@ -367,9 +343,9 @@ HTML;
|
||||
} else {
|
||||
$locale = i18n::get_locale();
|
||||
}
|
||||
|
||||
|
||||
return i18n::convert_rfc1766($locale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@ -414,20 +390,20 @@ HTML;
|
||||
if (!file_exists(BASE_PATH . '/install.php')) {
|
||||
$this->httpError(410);
|
||||
}
|
||||
|
||||
|
||||
// TODO Allow this to work when allow_url_fopen=0
|
||||
if(isset($_SESSION['StatsID']) && $_SESSION['StatsID']) {
|
||||
$url = 'http://ss2stat.silverstripe.com/Installation/installed?ID=' . $_SESSION['StatsID'];
|
||||
@file_get_contents($url);
|
||||
}
|
||||
|
||||
|
||||
global $project;
|
||||
$data = new ArrayData(array(
|
||||
'Project' => Convert::raw2xml($project),
|
||||
'Username' => Convert::raw2xml(Session::get('username')),
|
||||
'Password' => Convert::raw2xml(Session::get('password')),
|
||||
));
|
||||
|
||||
|
||||
return array(
|
||||
"Title" => _t("ContentController.INSTALL_SUCCESS", "Installation Successful!"),
|
||||
"Content" => $data->renderWith('Install_successfullyinstalled'),
|
||||
@ -436,7 +412,7 @@ HTML;
|
||||
|
||||
public function deleteinstallfiles() {
|
||||
if(!Permission::check("ADMIN")) return Security::permissionFailure($this);
|
||||
|
||||
|
||||
$title = new Varchar("Title");
|
||||
$content = new HTMLText('Content');
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
/**
|
||||
* Extension to include custom page icons
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage controller
|
||||
*/
|
||||
@ -18,12 +18,12 @@ class LeftAndMainPageIconsExtension extends Extension {
|
||||
* @return string CSS
|
||||
*/
|
||||
public function generatePageIconsCss() {
|
||||
$css = '';
|
||||
|
||||
$classes = ClassInfo::subclassesFor('SiteTree');
|
||||
$css = '';
|
||||
|
||||
$classes = ClassInfo::subclassesFor('SiteTree');
|
||||
foreach($classes as $class) {
|
||||
$obj = singleton($class);
|
||||
$iconSpec = $obj->stat('icon');
|
||||
$obj = singleton($class);
|
||||
$iconSpec = $obj->stat('icon');
|
||||
|
||||
if(!$iconSpec) continue;
|
||||
|
||||
@ -33,9 +33,9 @@ class LeftAndMainPageIconsExtension extends Extension {
|
||||
// Legacy support: Add file extension if none exists
|
||||
if(!pathinfo($iconFile, PATHINFO_EXTENSION)) $iconFile .= '-file.gif';
|
||||
|
||||
$iconPathInfo = pathinfo($iconFile);
|
||||
|
||||
// Base filename
|
||||
$iconPathInfo = pathinfo($iconFile);
|
||||
|
||||
// Base filename
|
||||
$baseFilename = $iconPathInfo['dirname'] . '/' . $iconPathInfo['filename'];
|
||||
$fileExtension = $iconPathInfo['extension'];
|
||||
|
||||
|
@ -4,21 +4,21 @@
|
||||
* for CMS authors, usually for {@link SiteTree} objects with "stage" and "live" links.
|
||||
* Useful both in the CMS and alongside the page template (for logged in authors).
|
||||
* The class can be used for any {@link DataObject} subclass implementing the {@link CMSPreviewable} interface.
|
||||
*
|
||||
*
|
||||
* New item types can be defined by extending the {@link SilverStripeNavigatorItem} class,
|
||||
* for example the "cmsworkflow" module defines a new "future state" item with a date selector
|
||||
* to view embargoed data at a future point in time. So the item doesn't always have to be a simple link.
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage content
|
||||
*/
|
||||
class SilverStripeNavigator extends ViewableData {
|
||||
|
||||
|
||||
/**
|
||||
* @var DataObject
|
||||
*/
|
||||
protected $record;
|
||||
|
||||
|
||||
/**
|
||||
* @param DataObject $record
|
||||
* @throws InvalidArgumentException if record doesn't implement CMSPreviewable
|
||||
@ -30,7 +30,7 @@ class SilverStripeNavigator extends ViewableData {
|
||||
get_class($record)
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
$this->record = $record;
|
||||
}
|
||||
|
||||
@ -39,26 +39,26 @@ class SilverStripeNavigator extends ViewableData {
|
||||
*/
|
||||
public function getItems() {
|
||||
$items = array();
|
||||
|
||||
|
||||
$classes = ClassInfo::subclassesFor('SilverStripeNavigatorItem');
|
||||
array_shift($classes);
|
||||
|
||||
|
||||
// Sort menu items according to priority
|
||||
$i = 0;
|
||||
foreach($classes as $class) {
|
||||
// Skip base class
|
||||
if($class == 'SilverStripeNavigatorItem') continue;
|
||||
|
||||
|
||||
$i++;
|
||||
$item = new $class($this->record);
|
||||
if(!$item->canView()) continue;
|
||||
|
||||
|
||||
// This funny litle formula ensures that the first item added with the same priority will be left-most.
|
||||
$priority = $item->getPriority() * 100 - 1;
|
||||
|
||||
|
||||
// Ensure that we can have duplicates with the same (default) priority
|
||||
while(isset($items[$priority])) $priority++;
|
||||
|
||||
|
||||
$items[$priority] = $item;
|
||||
}
|
||||
ksort($items);
|
||||
@ -66,7 +66,7 @@ class SilverStripeNavigator extends ViewableData {
|
||||
// Drop the keys and let the ArrayList handle the numbering, so $First, $Last and others work properly.
|
||||
return new ArrayList(array_values($items));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return DataObject
|
||||
*/
|
||||
@ -83,13 +83,13 @@ class SilverStripeNavigator extends ViewableData {
|
||||
$message = '';
|
||||
$navigator = new SilverStripeNavigator($record);
|
||||
$items = $navigator->getItems();
|
||||
foreach($items as $item) {
|
||||
foreach($items as $item) {
|
||||
$text = $item->getHTML();
|
||||
if($text) $html .= $text;
|
||||
$newMessage = $item->getMessage();
|
||||
if($newMessage && $item->isActive()) $message = $newMessage;
|
||||
}
|
||||
|
||||
|
||||
return array(
|
||||
'items' => $html,
|
||||
'message' => $message
|
||||
@ -101,24 +101,24 @@ class SilverStripeNavigator extends ViewableData {
|
||||
* Navigator items are links that appear in the $SilverStripeNavigator bar.
|
||||
* To add an item, extend this class - it will be automatically picked up.
|
||||
* When instanciating items manually, please ensure to call {@link canView()}.
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage content
|
||||
*/
|
||||
class SilverStripeNavigatorItem extends ViewableData {
|
||||
|
||||
|
||||
/**
|
||||
* @param DataObject
|
||||
*/
|
||||
protected $record;
|
||||
|
||||
|
||||
/**
|
||||
* @param DataObject
|
||||
*/
|
||||
public function __construct($record) {
|
||||
$this->record = $record;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return string HTML, mostly a link - but can be more complex as well.
|
||||
* For example, a "future state" item might show a date selector.
|
||||
@ -130,7 +130,7 @@ class SilverStripeNavigatorItem extends ViewableData {
|
||||
* Get the Title of an item
|
||||
*/
|
||||
public function getTitle() {}
|
||||
|
||||
|
||||
/**
|
||||
* Machine-friendly name.
|
||||
*/
|
||||
@ -142,44 +142,44 @@ class SilverStripeNavigatorItem extends ViewableData {
|
||||
* Optional link to a specific view of this record.
|
||||
* Not all items are simple links, please use {@link getHTML()}
|
||||
* to represent an item in markup unless you know what you're doing.
|
||||
*
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLink() {}
|
||||
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getMessage() {}
|
||||
|
||||
|
||||
/**
|
||||
* @return DataObject
|
||||
*/
|
||||
public function getRecord() {
|
||||
return $this->record;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getPriority() {
|
||||
return $this->stat('priority');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* As items might convey different record states like a "stage" or "live" table,
|
||||
* an item can be active (showing the record in this state).
|
||||
*
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function isActive() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Filters items based on member permissions or other criteria,
|
||||
* such as if a state is generally available for the current record.
|
||||
*
|
||||
*
|
||||
* @param Member
|
||||
* @return Boolean
|
||||
*/
|
||||
@ -189,12 +189,12 @@ class SilverStripeNavigatorItem extends ViewableData {
|
||||
|
||||
/**
|
||||
* Counts as "archived" if the current record is a different version from both live and draft.
|
||||
*
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function isArchived() {
|
||||
if(!$this->record->hasExtension('Versioned')) return false;
|
||||
|
||||
|
||||
if(!isset($this->record->_cached_isArchived)) {
|
||||
$baseTable = ClassInfo::baseDataClass($this->record->class);
|
||||
$currentDraft = Versioned::get_one_by_stage($baseTable, 'Stage', array(
|
||||
@ -203,9 +203,9 @@ class SilverStripeNavigatorItem extends ViewableData {
|
||||
$currentLive = Versioned::get_one_by_stage($baseTable, 'Live', array(
|
||||
"\"$baseTable\".\"ID\"" => $this->record->ID
|
||||
));
|
||||
|
||||
|
||||
$this->record->_cached_isArchived = (
|
||||
(!$currentDraft || ($currentDraft && $this->record->Version != $currentDraft->Version))
|
||||
(!$currentDraft || ($currentDraft && $this->record->Version != $currentDraft->Version))
|
||||
&& (!$currentLive || ($currentLive && $this->record->Version != $currentLive->Version))
|
||||
);
|
||||
}
|
||||
@ -220,8 +220,8 @@ class SilverStripeNavigatorItem extends ViewableData {
|
||||
*/
|
||||
class SilverStripeNavigatorItem_CMSLink extends SilverStripeNavigatorItem {
|
||||
/** @config */
|
||||
private static $priority = 10;
|
||||
|
||||
private static $priority = 10;
|
||||
|
||||
public function getHTML() {
|
||||
return sprintf(
|
||||
'<a href="%s">%s</a>',
|
||||
@ -229,19 +229,19 @@ class SilverStripeNavigatorItem_CMSLink extends SilverStripeNavigatorItem {
|
||||
_t('ContentController.CMS', 'CMS')
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function getTitle() {
|
||||
return _t('ContentController.CMS', 'CMS', 'Used in navigation. Should be a short label');
|
||||
return _t('ContentController.CMS', 'CMS', 'Used in navigation. Should be a short label');
|
||||
}
|
||||
|
||||
|
||||
public function getLink() {
|
||||
return $this->record->CMSEditLink();
|
||||
}
|
||||
|
||||
|
||||
public function isActive() {
|
||||
return (Controller::curr() instanceof LeftAndMain);
|
||||
}
|
||||
|
||||
|
||||
public function canView($member = null) {
|
||||
return (
|
||||
// Don't show in CMS
|
||||
@ -272,37 +272,37 @@ class SilverStripeNavigatorItem_StageLink extends SilverStripeNavigatorItem {
|
||||
public function getTitle() {
|
||||
return _t('ContentController.DRAFT', 'Draft', 'Used for the Switch between draft and published view mode. Needs to be a short label');
|
||||
}
|
||||
|
||||
|
||||
public function getMessage() {
|
||||
return "<div id=\"SilverStripeNavigatorMessage\" title=\"". _t('ContentControl.NOTEWONTBESHOWN', 'Note: this message will not be shown to your visitors') ."\">". _t('ContentController.DRAFTSITE', 'Draft Site') ."</div>";
|
||||
}
|
||||
|
||||
|
||||
public function getLink() {
|
||||
$date = Versioned::current_archived_date();
|
||||
return Controller::join_links(
|
||||
$this->record->PreviewLink(),
|
||||
$this->record->PreviewLink(),
|
||||
'?stage=Stage',
|
||||
$date ? '?archiveDate=' . $date : null
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function canView($member = null) {
|
||||
return (
|
||||
$this->record->hasExtension('Versioned')
|
||||
$this->record->hasExtension('Versioned')
|
||||
&& $this->getDraftPage()
|
||||
// Don't follow redirects in preview, they break the CMS editing form
|
||||
&& !($this->record instanceof RedirectorPage)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function isActive() {
|
||||
return (
|
||||
Versioned::current_stage() == 'Stage'
|
||||
Versioned::current_stage() == 'Stage'
|
||||
&& !(ClassInfo::exists('SiteTreeFutureState') && SiteTreeFutureState::get_future_datetime())
|
||||
&& !$this->isArchived()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
protected function getDraftPage() {
|
||||
$baseTable = ClassInfo::baseDataClass($this->record->class);
|
||||
return Versioned::get_one_by_stage($baseTable, 'Stage', array(
|
||||
@ -330,31 +330,31 @@ class SilverStripeNavigatorItem_LiveLink extends SilverStripeNavigatorItem {
|
||||
public function getTitle() {
|
||||
return _t('ContentController.PUBLISHED', 'Published', 'Used for the Switch between draft and published view mode. Needs to be a short label');
|
||||
}
|
||||
|
||||
|
||||
public function getMessage() {
|
||||
return "<div id=\"SilverStripeNavigatorMessage\" title=\"". _t('ContentControl.NOTEWONTBESHOWN', 'Note: this message will not be shown to your visitors') ."\">". _t('ContentController.PUBLISHEDSITE', 'Published Site') ."</div>";
|
||||
}
|
||||
|
||||
|
||||
public function getLink() {
|
||||
return Controller::join_links($this->record->PreviewLink(), '?stage=Live');
|
||||
}
|
||||
|
||||
|
||||
public function canView($member = null) {
|
||||
return (
|
||||
$this->record->hasExtension('Versioned')
|
||||
$this->record->hasExtension('Versioned')
|
||||
&& $this->getLivePage()
|
||||
// Don't follow redirects in preview, they break the CMS editing form
|
||||
&& !($this->record instanceof RedirectorPage)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function isActive() {
|
||||
return (
|
||||
(!Versioned::current_stage() || Versioned::current_stage() == 'Live')
|
||||
&& !$this->isArchived()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
protected function getLivePage() {
|
||||
$baseTable = ClassInfo::baseDataClass($this->record->class);
|
||||
return Versioned::get_one_by_stage($baseTable, 'Live', array(
|
||||
@ -375,31 +375,31 @@ class SilverStripeNavigatorItem_ArchiveLink extends SilverStripeNavigatorItem {
|
||||
$this->recordLink = $this->record->AbsoluteLink();
|
||||
return "<a class=\"ss-ui-button". ($this->isActive() ? ' current' : '') ."\" href=\"$this->recordLink?archiveDate={$this->record->LastEdited}\" target=\"_blank\">". _t('ContentController.ARCHIVEDSITE', 'Preview version') ."</a>";
|
||||
}
|
||||
|
||||
|
||||
public function getTitle() {
|
||||
return _t('SilverStripeNavigator.ARCHIVED', 'Archived');
|
||||
}
|
||||
|
||||
public function getMessage() {
|
||||
|
||||
public function getMessage() {
|
||||
if($date = Versioned::current_archived_date()) {
|
||||
$dateObj = DBField::create_field('Datetime', $date);
|
||||
return "<div id=\"SilverStripeNavigatorMessage\" title=\"". _t('ContentControl.NOTEWONTBESHOWN', 'Note: this message will not be shown to your visitors') ."\">". _t('ContentController.ARCHIVEDSITEFROM', 'Archived site from') ."<br>" . $dateObj->Nice() . "</div>";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function getLink() {
|
||||
return $this->record->PreviewLink() . '?archiveDate=' . urlencode($this->record->LastEdited);
|
||||
}
|
||||
|
||||
|
||||
public function canView($member = null) {
|
||||
return (
|
||||
$this->record->hasExtension('Versioned')
|
||||
$this->record->hasExtension('Versioned')
|
||||
&& $this->isArchived()
|
||||
// Don't follow redirects in preview, they break the CMS editing form
|
||||
&& !($this->record instanceof RedirectorPage)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function isActive() {
|
||||
return $this->isArchived();
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
/**
|
||||
* Used to edit the SiteTree->URLSegment property, and suggest input based on the serverside rules
|
||||
* defined through {@link SiteTree->generateURLSegment()} and {@link URLSegmentFilter}.
|
||||
*
|
||||
*
|
||||
* Note: The actual conversion for saving the value takes place in the model layer.
|
||||
*
|
||||
* @package cms
|
||||
@ -12,8 +12,8 @@
|
||||
|
||||
class SiteTreeURLSegmentField extends TextField {
|
||||
|
||||
/**
|
||||
* @var string
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $helpText, $urlPrefix, $urlSuffix, $defaultUrl;
|
||||
|
||||
|
@ -41,7 +41,7 @@ class RedirectorPage extends Page {
|
||||
* Return the the link that should be used for this redirector page, in navigation, etc.
|
||||
* If the redirectorpage has been appropriately configured, then it will return the redirection
|
||||
* destination, to prevent unnecessary 30x redirections. However, if it's misconfigured, then
|
||||
* it will return a link to itself, which will then display an error message.
|
||||
* it will return a link to itself, which will then display an error message.
|
||||
*/
|
||||
public function Link() {
|
||||
if($link = $this->redirectionLink()) return $link;
|
||||
@ -108,8 +108,8 @@ class RedirectorPage extends Page {
|
||||
|
||||
// Prefix the URL with "http://" if no prefix is found
|
||||
if(
|
||||
$this->ExternalURL
|
||||
&& !parse_url($this->ExternalURL, PHP_URL_SCHEME)
|
||||
$this->ExternalURL
|
||||
&& !parse_url($this->ExternalURL, PHP_URL_SCHEME)
|
||||
&& !preg_match('#^//#', $this->ExternalURL)
|
||||
) {
|
||||
$this->ExternalURL = 'http://' . $this->ExternalURL;
|
||||
@ -129,17 +129,17 @@ class RedirectorPage extends Page {
|
||||
array(
|
||||
new HeaderField('RedirectorDescHeader',_t('RedirectorPage.HEADER', "This page will redirect users to another page")),
|
||||
new OptionsetField(
|
||||
"RedirectionType",
|
||||
_t('RedirectorPage.REDIRECTTO', "Redirect to"),
|
||||
"RedirectionType",
|
||||
_t('RedirectorPage.REDIRECTTO', "Redirect to"),
|
||||
array(
|
||||
"Internal" => _t('RedirectorPage.REDIRECTTOPAGE', "A page on your website"),
|
||||
"External" => _t('RedirectorPage.REDIRECTTOEXTERNAL', "Another website"),
|
||||
),
|
||||
),
|
||||
"Internal"
|
||||
),
|
||||
new TreeDropdownField(
|
||||
"LinkToID",
|
||||
_t('RedirectorPage.YOURPAGE', "Page on your website"),
|
||||
"LinkToID",
|
||||
_t('RedirectorPage.YOURPAGE', "Page on your website"),
|
||||
"SiteTree"
|
||||
),
|
||||
new TextField("ExternalURL", _t('RedirectorPage.OTHERURL', "Other website URL"))
|
||||
|
@ -3,7 +3,7 @@
|
||||
* Basic data-object representing all pages within the site tree. All page types that live within the hierarchy should
|
||||
* inherit from this. In addition, it contains a number of static methods for querying the site tree and working with
|
||||
* draft and published states.
|
||||
*
|
||||
*
|
||||
* <h2>URLs</h2>
|
||||
* A page is identified during request handling via its "URLSegment" database column. As pages can be nested, the full
|
||||
* path of a URL might contain multiple segments. Each segment is stored in its filtered representation (through
|
||||
@ -44,7 +44,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
* class is allowed - no subclasses. Otherwise, the class and all its
|
||||
* subclasses are allowed.
|
||||
* To control allowed children on root level (no parent), use {@link $can_be_root}.
|
||||
*
|
||||
*
|
||||
* Note that this setting is cached when used in the CMS, use the "flush" query parameter to clear it.
|
||||
*
|
||||
* @config
|
||||
@ -168,7 +168,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
/**
|
||||
* Icon to use in the CMS page tree. This should be the full filename, relative to the webroot.
|
||||
* Also supports custom CSS rule contents (applied to the correct selector for the tree UI implementation).
|
||||
*
|
||||
*
|
||||
* @see CMSMain::generateTreeStylingCSS()
|
||||
* @config
|
||||
* @var string
|
||||
@ -240,7 +240,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
* Determines if the system should avoid orphaned pages
|
||||
* by deleting all children when the their parent is deleted (TRUE),
|
||||
* or rather preserve this data even if its not reachable through any navigation path (FALSE).
|
||||
*
|
||||
*
|
||||
* @deprecated 4.0 Use the "SiteTree.enforce_strict_hierarchy" config setting instead
|
||||
* @param boolean
|
||||
*/
|
||||
@ -364,7 +364,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('SiteTree', array(
|
||||
'"SiteTree"."URLSegment"' => $segment,
|
||||
'"SiteTree"."URLSegment"' => $segment,
|
||||
'"SiteTree"."ParentID"' => $sitetree->ID
|
||||
),
|
||||
$cache
|
||||
@ -482,7 +482,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
/**
|
||||
* Base link used for previewing. Defaults to absolute URL, in order to account for domain changes, e.g. on multi
|
||||
* site setups. Does not contain hints about the stage, see {@link SilverStripeNavigator} for details.
|
||||
*
|
||||
*
|
||||
* @param string $action See {@link Link()}
|
||||
* @return string
|
||||
*/
|
||||
@ -502,7 +502,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
* and returned in its full form.
|
||||
*
|
||||
* @uses RootURLController::get_homepage_link()
|
||||
*
|
||||
*
|
||||
* @param string $action See {@link Link()}
|
||||
* @return string
|
||||
*/
|
||||
@ -516,7 +516,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
$base = $parent->RelativeLink($this->URLSegment);
|
||||
} elseif(!$action && $this->URLSegment == RootURLController::get_homepage_link()) {
|
||||
// Unset base for root-level homepages.
|
||||
// Note: Homepages with action parameters (or $action === true)
|
||||
// Note: Homepages with action parameters (or $action === true)
|
||||
// need to retain their URLSegment.
|
||||
$base = null;
|
||||
} else {
|
||||
@ -599,7 +599,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
* Check if the parent of this page has been removed (or made otherwise unavailable), and is still referenced by
|
||||
* this child. Any such orphaned page may still require access via the CMS, but should not be shown as accessible
|
||||
* to external users.
|
||||
*
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isOrphaned() {
|
||||
@ -751,11 +751,11 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
$pages = array();
|
||||
|
||||
while(
|
||||
$page
|
||||
&& (!$maxDepth || count($pages) < $maxDepth)
|
||||
$page
|
||||
&& (!$maxDepth || count($pages) < $maxDepth)
|
||||
&& (!$stopAtPageType || $page->ClassName != $stopAtPageType)
|
||||
) {
|
||||
if($showHidden || $page->ShowInMenus || ($page->ID == $this->ID)) {
|
||||
if($showHidden || $page->ShowInMenus || ($page->ID == $this->ID)) {
|
||||
$pages[] = $page;
|
||||
}
|
||||
|
||||
@ -768,7 +768,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
|
||||
/**
|
||||
* Make this page a child of another page.
|
||||
*
|
||||
*
|
||||
* If the parent page does not exist, resolve it to a valid ID before updating this page's reference.
|
||||
*
|
||||
* @param SiteTree|int $item Either the parent object, or the parent ID
|
||||
@ -813,7 +813,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
/**
|
||||
* This function should return true if the current user can execute this action. It can be overloaded to customise
|
||||
* the security model for an application.
|
||||
*
|
||||
*
|
||||
* Slightly altered from parent behaviour in {@link DataObject->can()}:
|
||||
* - Checks for existence of a method named "can<$perm>()" on the object
|
||||
* - Calls decorators and only returns for FALSE "vetoes"
|
||||
@ -847,12 +847,12 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
/**
|
||||
* This function should return true if the current user can add children to this page. It can be overloaded to
|
||||
* customise the security model for an application.
|
||||
*
|
||||
*
|
||||
* Denies permission if any of the following conditions is true:
|
||||
* - alternateCanAddChildren() on a extension returns false
|
||||
* - canEdit() is not granted
|
||||
* - There are no classes defined in {@link $allowed_children}
|
||||
*
|
||||
*
|
||||
* @uses SiteTreeExtension->canAddChildren()
|
||||
* @uses canEdit()
|
||||
* @uses $allowed_children
|
||||
@ -882,7 +882,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
/**
|
||||
* This function should return true if the current user can view this page. It can be overloaded to customise the
|
||||
* security model for an application.
|
||||
*
|
||||
*
|
||||
* Denies permission if any of the following conditions is true:
|
||||
* - canView() on any extension returns false
|
||||
* - "CanViewType" directive is set to "Inherit" and any parent page return false for canView()
|
||||
@ -902,23 +902,6 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
|
||||
// admin override
|
||||
if($member && Permission::checkMember($member, array("ADMIN", "SITETREE_VIEW_ALL"))) return true;
|
||||
|
||||
// make sure we were loaded off an allowed stage
|
||||
|
||||
// Were we definitely loaded directly off Live during our query?
|
||||
$fromLive = true;
|
||||
|
||||
foreach (array('mode' => 'stage', 'stage' => 'live') as $param => $match) {
|
||||
$fromLive = $fromLive && strtolower((string)$this->getSourceQueryParam("Versioned.$param")) == $match;
|
||||
}
|
||||
|
||||
if(!$fromLive
|
||||
&& !Session::get('unsecuredDraftSite')
|
||||
&& !Permission::checkMember($member, array('CMS_ACCESS_LeftAndMain', 'CMS_ACCESS_CMSMain', 'VIEW_DRAFT_CONTENT'))) {
|
||||
// If we weren't definitely loaded from live, and we can't view non-live content, we need to
|
||||
// check to make sure this version is the live version and so can be viewed
|
||||
if (Versioned::get_versionnumber_by_stage($this->class, 'Live', $this->ID) != $this->Version) return false;
|
||||
}
|
||||
|
||||
// Orphaned pages (in the current stage) are unavailable, except for admins via the CMS
|
||||
if($this->isOrphaned()) return false;
|
||||
@ -944,43 +927,23 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
// check for specific groups
|
||||
if($member && is_numeric($member)) $member = DataObject::get_by_id('Member', $member);
|
||||
if(
|
||||
$this->CanViewType == 'OnlyTheseUsers'
|
||||
&& $member
|
||||
$this->CanViewType == 'OnlyTheseUsers'
|
||||
&& $member
|
||||
&& $member->inGroups($this->ViewerGroups())
|
||||
) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines canView permissions for the latest version of this Page on a specific stage (see {@link Versioned}).
|
||||
* Usually the stage is read from {@link Versioned::current_stage()}.
|
||||
*
|
||||
* @todo Implement in CMS UI.
|
||||
*
|
||||
* @param string $stage
|
||||
* @param Member $member
|
||||
* @return bool
|
||||
*/
|
||||
public function canViewStage($stage = 'Live', $member = null) {
|
||||
$oldMode = Versioned::get_reading_mode();
|
||||
Versioned::reading_stage($stage);
|
||||
|
||||
$versionFromStage = DataObject::get($this->class)->byID($this->ID);
|
||||
|
||||
Versioned::set_reading_mode($oldMode);
|
||||
return $versionFromStage ? $versionFromStage->canView($member) : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function should return true if the current user can delete this page. It can be overloaded to customise the
|
||||
* security model for an application.
|
||||
*
|
||||
*
|
||||
* Denies permission if any of the following conditions is true:
|
||||
* - canDelete() returns false on any extension
|
||||
* - canEdit() returns false
|
||||
* - any descendant page returns false for canDelete()
|
||||
*
|
||||
*
|
||||
* @uses canDelete()
|
||||
* @uses SiteTreeExtension->canDelete()
|
||||
* @uses canEdit()
|
||||
@ -1010,14 +973,14 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
}
|
||||
|
||||
/**
|
||||
* This function should return true if the current user can create new pages of this class, regardless of class. It
|
||||
* This function should return true if the current user can create new pages of this class, regardless of class. It
|
||||
* can be overloaded to customise the security model for an application.
|
||||
*
|
||||
* By default, permission to create at the root level is based on the SiteConfig configuration, and permission to
|
||||
*
|
||||
* By default, permission to create at the root level is based on the SiteConfig configuration, and permission to
|
||||
* create beneath a parent is based on the ability to edit that parent page.
|
||||
*
|
||||
*
|
||||
* Use {@link canAddChildren()} to control behaviour of creating children under this page.
|
||||
*
|
||||
*
|
||||
* @uses $can_create
|
||||
* @uses DataExtension->canCreate()
|
||||
*
|
||||
@ -1063,7 +1026,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
/**
|
||||
* This function should return true if the current user can edit this page. It can be overloaded to customise the
|
||||
* security model for an application.
|
||||
*
|
||||
*
|
||||
* Denies permission if any of the following conditions is true:
|
||||
* - canEdit() on any extension returns false
|
||||
* - canView() return false
|
||||
@ -1071,7 +1034,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
* - "CanEditType" directive is set to "LoggedInUsers" and no user is logged in or doesn't have the
|
||||
* CMS_Access_CMSMAIN permission code
|
||||
* - "CanEditType" directive is set to "OnlyTheseUsers" and user is not in the given groups
|
||||
*
|
||||
*
|
||||
* @uses canView()
|
||||
* @uses EditorGroups()
|
||||
* @uses DataExtension->canEdit()
|
||||
@ -1108,11 +1071,11 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
/**
|
||||
* This function should return true if the current user can publish this page. It can be overloaded to customise
|
||||
* the security model for an application.
|
||||
*
|
||||
*
|
||||
* Denies permission if any of the following conditions is true:
|
||||
* - canPublish() on any extension returns false
|
||||
* - canEdit() returns false
|
||||
*
|
||||
*
|
||||
* @uses SiteTreeExtension->canPublish()
|
||||
*
|
||||
* @param Member $member
|
||||
@ -1268,7 +1231,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
// Get permissions that are inherited
|
||||
$potentiallyInherited = Versioned::get_by_stage(
|
||||
"SiteTree",
|
||||
$stage,
|
||||
$stage,
|
||||
array("\"$typeField\" = 'Inherit' AND \"SiteTree\".\"ID\" IN ($idPlaceholders)" => $ids)
|
||||
);
|
||||
|
||||
@ -1309,7 +1272,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
// Cache the results
|
||||
if(empty(self::$cache_permissions[$cacheKey])) self::$cache_permissions[$cacheKey] = array();
|
||||
self::$cache_permissions[$cacheKey] = $combinedStageResult + self::$cache_permissions[$cacheKey];
|
||||
|
||||
|
||||
return $combinedStageResult;
|
||||
} else {
|
||||
return array();
|
||||
@ -1441,9 +1404,9 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
if($this->MetaDescription) {
|
||||
$tags .= "<meta name=\"description\" content=\"" . Convert::raw2att($this->MetaDescription) . "\" />\n";
|
||||
}
|
||||
if($this->ExtraMeta) {
|
||||
if($this->ExtraMeta) {
|
||||
$tags .= $this->ExtraMeta . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
if(Permission::check('CMS_ACCESS_CMSMain')
|
||||
&& in_array('CMSPreviewable', class_implements($this))
|
||||
@ -1534,7 +1497,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
if(!$this->Sort) {
|
||||
$parentID = ($this->ParentID) ? $this->ParentID : 0;
|
||||
$this->Sort = DB::prepared_query(
|
||||
"SELECT MAX(\"Sort\") + 1 FROM \"SiteTree\" WHERE \"ParentID\" = ?",
|
||||
"SELECT MAX(\"Sort\") + 1 FROM \"SiteTree\" WHERE \"ParentID\" = ?",
|
||||
array($parentID)
|
||||
)->value();
|
||||
}
|
||||
@ -1635,10 +1598,10 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
public function validate() {
|
||||
$result = parent::validate();
|
||||
|
||||
// Allowed children validation
|
||||
// Allowed children validation
|
||||
$parent = $this->getParent();
|
||||
if($parent && $parent->exists()) {
|
||||
// No need to check for subclasses or instanceof, as allowedChildren() already
|
||||
// No need to check for subclasses or instanceof, as allowedChildren() already
|
||||
// deconstructs any inheritance trees already.
|
||||
$allowed = $parent->allowedChildren();
|
||||
$subject = ($this instanceof VirtualPage && $this->CopyContentFromID) ? $this->CopyContentFrom() : $this;
|
||||
@ -1646,8 +1609,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
|
||||
$result->error(
|
||||
_t(
|
||||
'SiteTree.PageTypeNotAllowed',
|
||||
'Page type "{type}" not allowed as child of this parent page',
|
||||
'SiteTree.PageTypeNotAllowed',
|
||||
'Page type "{type}" not allowed as child of this parent page',
|
||||
array('type' => $subject->i18n_singular_name())
|
||||
),
|
||||
'ALLOWED_CHILDREN'
|
||||
@ -1659,8 +1622,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
if(!$this->stat('can_be_root') && !$this->ParentID) {
|
||||
$result->error(
|
||||
_t(
|
||||
'SiteTree.PageTypNotAllowedOnRoot',
|
||||
'Page type "{type}" is not allowed on the root level',
|
||||
'SiteTree.PageTypNotAllowedOnRoot',
|
||||
'Page type "{type}" is not allowed on the root level',
|
||||
array('type' => $this->i18n_singular_name())
|
||||
),
|
||||
'CAN_BE_ROOT'
|
||||
@ -1700,7 +1663,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
}
|
||||
|
||||
$votes = array_filter(
|
||||
(array)$this->extend('augmentValidURLSegment'),
|
||||
(array)$this->extend('augmentValidURLSegment'),
|
||||
function($v) {return !is_null($v);}
|
||||
);
|
||||
if($votes) {
|
||||
@ -1721,7 +1684,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
* updateURLSegment(&$url, $title). $url will be passed by reference and should be modified. $title will contain
|
||||
* the title that was originally used as the source of this generated URL. This lets extensions either start from
|
||||
* scratch, or incrementally modify the generated URL.
|
||||
*
|
||||
*
|
||||
* @param string $title Page title
|
||||
* @return string Generated url segment
|
||||
*/
|
||||
@ -1805,7 +1768,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
|
||||
/**
|
||||
* Returns the pages that depend on this page. This includes virtual pages, pages that link to it, etc.
|
||||
*
|
||||
*
|
||||
* @param bool $includeVirtuals Set to false to exlcude virtual pages.
|
||||
* @return ArrayList
|
||||
*/
|
||||
@ -1931,7 +1894,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
}
|
||||
|
||||
$statusMessage[] = _t(
|
||||
'SiteTree.APPEARSVIRTUALPAGES',
|
||||
'SiteTree.APPEARSVIRTUALPAGES',
|
||||
"This content also appears on the virtual pages in the {title} sections.",
|
||||
array('title' => $parentList)
|
||||
);
|
||||
@ -2026,7 +1989,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
$metaFieldDesc
|
||||
->setRightTitle(
|
||||
_t(
|
||||
'SiteTree.METADESCHELP',
|
||||
'SiteTree.METADESCHELP',
|
||||
"Search engines use this content for displaying search results (although it will not influence their ranking)."
|
||||
)
|
||||
)
|
||||
@ -2034,7 +1997,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
$metaFieldExtra
|
||||
->setRightTitle(
|
||||
_t(
|
||||
'SiteTree.METAEXTRAHELP',
|
||||
'SiteTree.METAEXTRAHELP',
|
||||
"HTML tags for additional meta information. For example <meta name=\"customName\" content=\"your custom content here\" />"
|
||||
)
|
||||
)
|
||||
@ -2061,8 +2024,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
}
|
||||
|
||||
if(file_exists(BASE_PATH . '/install.php')) {
|
||||
$fields->addFieldToTab("Root.Main", new LiteralField("InstallWarningHeader",
|
||||
"<p class=\"message warning\">" . _t("SiteTree.REMOVE_INSTALL_WARNING",
|
||||
$fields->addFieldToTab("Root.Main", new LiteralField("InstallWarningHeader",
|
||||
"<p class=\"message warning\">" . _t("SiteTree.REMOVE_INSTALL_WARNING",
|
||||
"Warning: You should remove install.php from this SilverStripe install for security reasons.")
|
||||
. "</p>"), "Title");
|
||||
}
|
||||
@ -2084,7 +2047,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
/**
|
||||
* Returns fields related to configuration aspects on this record, e.g. access control. See {@link getCMSFields()}
|
||||
* for content-related fields.
|
||||
*
|
||||
*
|
||||
* @return FieldList
|
||||
*/
|
||||
public function getSettingsFields() {
|
||||
@ -2099,8 +2062,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
$rootTab = new TabSet("Root",
|
||||
$tabBehaviour = new Tab('Settings',
|
||||
new DropdownField(
|
||||
"ClassName",
|
||||
$this->fieldLabel('ClassName'),
|
||||
"ClassName",
|
||||
$this->fieldLabel('ClassName'),
|
||||
$this->getClassDropdown()
|
||||
),
|
||||
$parentTypeSelector = new CompositeField(
|
||||
@ -2115,25 +2078,25 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
new CheckboxField("ShowInSearch", $this->fieldLabel('ShowInSearch'))
|
||||
),
|
||||
$viewersOptionsField = new OptionsetField(
|
||||
"CanViewType",
|
||||
"CanViewType",
|
||||
_t('SiteTree.ACCESSHEADER', "Who can view this page?")
|
||||
),
|
||||
$viewerGroupsField = ListboxField::create("ViewerGroups", _t('SiteTree.VIEWERGROUPS', "Viewer Groups"))
|
||||
->setMultiple(true)
|
||||
->setSource($groupsMap)
|
||||
->setAttribute(
|
||||
'data-placeholder',
|
||||
'data-placeholder',
|
||||
_t('SiteTree.GroupPlaceholder', 'Click to select group')
|
||||
),
|
||||
$editorsOptionsField = new OptionsetField(
|
||||
"CanEditType",
|
||||
"CanEditType",
|
||||
_t('SiteTree.EDITHEADER', "Who can edit this page?")
|
||||
),
|
||||
$editorGroupsField = ListboxField::create("EditorGroups", _t('SiteTree.EDITORGROUPS', "Editor Groups"))
|
||||
->setMultiple(true)
|
||||
->setSource($groupsMap)
|
||||
->setAttribute(
|
||||
'data-placeholder',
|
||||
'data-placeholder',
|
||||
_t('SiteTree.GroupPlaceholder', 'Click to select group')
|
||||
)
|
||||
)
|
||||
@ -2260,7 +2223,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
// Minor options are hidden behind a drop-up and appear as links (although they are still FormActions).
|
||||
$rootTabSet = new TabSet('ActionMenus');
|
||||
$moreOptions = new Tab(
|
||||
'MoreOptions',
|
||||
'MoreOptions',
|
||||
_t('SiteTree.MoreOptions', 'More options', 'Expands a view for more buttons')
|
||||
);
|
||||
$rootTabSet->push($moreOptions);
|
||||
@ -2405,7 +2368,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
|
||||
/**
|
||||
* Publish this page.
|
||||
*
|
||||
*
|
||||
* @uses SiteTreeExtension->onBeforePublish()
|
||||
* @uses SiteTreeExtension->onAfterPublish()
|
||||
* @return bool True if published
|
||||
@ -2455,7 +2418,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
|
||||
/**
|
||||
* Unpublish this page - remove it from the live site
|
||||
*
|
||||
*
|
||||
* @uses SiteTreeExtension->onBeforeUnpublish()
|
||||
* @uses SiteTreeExtension->onAfterUnpublish()
|
||||
*/
|
||||
@ -2541,6 +2504,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
* @return self
|
||||
*/
|
||||
public function doRestoreToStage() {
|
||||
$this->invokeWithExtensions('onBeforeRestoreToStage', $this);
|
||||
|
||||
// Ensure that the parent page is restored, otherwise restore to root
|
||||
if($this->isParentArchived()) {
|
||||
$this->ParentID = 0;
|
||||
@ -2569,6 +2534,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
}
|
||||
|
||||
Versioned::reading_stage($oldStage);
|
||||
|
||||
$this->invokeWithExtensions('onAfterRestoreToStage', $this);
|
||||
|
||||
return $result;
|
||||
}
|
||||
@ -2579,10 +2546,15 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
* @return bool Success
|
||||
*/
|
||||
public function doArchive() {
|
||||
$this->invokeWithExtensions('onBeforeArchive', $this);
|
||||
|
||||
if($this->doUnpublish()) {
|
||||
$this->delete();
|
||||
$this->invokeWithExtensions('onAfterArchive', $this);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -2608,12 +2580,12 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
if(!$this->canDelete($member)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// If published, check if we can delete from live
|
||||
if($this->ExistsOnLive && !$this->canDeleteFromLive($member)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -2790,11 +2762,11 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
* status. Each page can have more than one status flag. Returns a map of a unique key to a (localized) title for
|
||||
* the flag. The unique key can be reused as a CSS class. Use the 'updateStatusFlags' extension point to customize
|
||||
* the flags.
|
||||
*
|
||||
* Example (simple):
|
||||
*
|
||||
* Example (simple):
|
||||
* "deletedonlive" => "Deleted"
|
||||
*
|
||||
* Example (with optional title attribute):
|
||||
*
|
||||
* Example (with optional title attribute):
|
||||
* "deletedonlive" => array('text' => "Deleted", 'title' => 'This page has been deleted')
|
||||
*
|
||||
* @param bool $cached Whether to serve the fields from cache; false regenerate them
|
||||
@ -2942,7 +2914,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
/**
|
||||
* Compares current draft with live version, and returns true if no draft version of this page exists but the page
|
||||
* is still published (eg, after triggering "Delete from draft site" in the CMS).
|
||||
*
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getIsDeletedFromStage() {
|
||||
@ -2967,7 +2939,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
/**
|
||||
* Compares current draft with live version, and returns true if these versions differ, meaning there have been
|
||||
* unpublished changes to the draft site.
|
||||
*
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getIsModifiedOnStage() {
|
||||
@ -2986,7 +2958,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
/**
|
||||
* Compares current draft with live version, and returns true if no live version exists, meaning the page was never
|
||||
* published.
|
||||
*
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getIsAddedToStage() {
|
||||
@ -3052,7 +3024,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
|
||||
|
||||
/**
|
||||
* Return the translated Singular name.
|
||||
*
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function i18n_singular_name() {
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
/**
|
||||
* Plug-ins for additional functionality in your SiteTree classes.
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage model
|
||||
*/
|
||||
@ -10,7 +10,7 @@ abstract class SiteTreeExtension extends DataExtension {
|
||||
|
||||
/**
|
||||
* Hook called before the page's {@link SiteTree::doPublish()} action is completed
|
||||
*
|
||||
*
|
||||
* @param SiteTree &$original The current Live SiteTree record prior to publish
|
||||
*/
|
||||
public function onBeforePublish(&$original) {
|
||||
@ -18,7 +18,7 @@ abstract class SiteTreeExtension extends DataExtension {
|
||||
|
||||
/**
|
||||
* Hook called after the page's {@link SiteTree::doPublish()} action is completed
|
||||
*
|
||||
*
|
||||
* @param SiteTree &$original The current Live SiteTree record prior to publish
|
||||
*/
|
||||
public function onAfterPublish(&$original) {
|
||||
@ -39,9 +39,9 @@ abstract class SiteTreeExtension extends DataExtension {
|
||||
|
||||
/**
|
||||
* Hook called to determine if a user may add children to this SiteTree object
|
||||
*
|
||||
*
|
||||
* @see SiteTree::canAddChildren()
|
||||
*
|
||||
*
|
||||
* @param Member $member The member to check permission against, or the currently
|
||||
* logged in user
|
||||
* @return boolean|null Return false to deny rights, or null to yield to default
|
||||
@ -51,9 +51,9 @@ abstract class SiteTreeExtension extends DataExtension {
|
||||
|
||||
/**
|
||||
* Hook called to determine if a user may publish this SiteTree object
|
||||
*
|
||||
*
|
||||
* @see SiteTree::canPublish()
|
||||
*
|
||||
*
|
||||
* @param Member $member The member to check permission against, or the currently
|
||||
* logged in user
|
||||
* @return boolean|null Return false to deny rights, or null to yield to default
|
||||
@ -65,7 +65,7 @@ abstract class SiteTreeExtension extends DataExtension {
|
||||
* Hook called to modify the $base url of this page, with a given $action,
|
||||
* before {@link SiteTree::RelativeLink()} calls {@link Controller::join_links()}
|
||||
* on the $base and $action
|
||||
*
|
||||
*
|
||||
* @param string &$base The URL of this page relative to siteroot, not including
|
||||
* the action
|
||||
* @param string|boolean &$action The action or subpage called on this page.
|
||||
|
@ -16,8 +16,8 @@ class SiteTreeFileExtension extends DataExtension {
|
||||
_t('AssetTableField.BACKLINKCOUNT', 'Used on:'),
|
||||
$this->BackLinkTracking()->Count() . ' ' . _t('AssetTableField.PAGES', 'page(s)')
|
||||
)
|
||||
->addExtraClass('cms-description-toggle')
|
||||
->setDescription($this->BackLinkHTMLList()),
|
||||
->addExtraClass('cms-description-toggle')
|
||||
->setDescription($this->BackLinkHTMLList()),
|
||||
'LastEdited'
|
||||
);
|
||||
}
|
||||
@ -62,7 +62,7 @@ class SiteTreeFileExtension extends DataExtension {
|
||||
$rememberSubsiteFilter = Subsite::$disable_subsite_filter;
|
||||
Subsite::disable_subsite_filter(true);
|
||||
}
|
||||
|
||||
|
||||
$links = $this->owner->getManyManyComponents('BackLinkTracking');
|
||||
$this->owner->extend('updateBackLinkTracking', $links);
|
||||
|
||||
|
@ -10,7 +10,7 @@ class SiteTreeFolderExtension extends DataExtension {
|
||||
|
||||
/**
|
||||
* Looks for files used in system and create where clause which contains all ID's of files.
|
||||
*
|
||||
*
|
||||
* @returns String where clause which will work as filter.
|
||||
*/
|
||||
public function getUnusedFilesListFilter() {
|
||||
@ -21,7 +21,7 @@ class SiteTreeFolderExtension extends DataExtension {
|
||||
|
||||
if($result->numRecords() > 0) {
|
||||
while($nextResult = $result->next()) {
|
||||
$where .= $nextResult['FileID'] . ',';
|
||||
$where .= $nextResult['FileID'] . ',';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -218,14 +218,18 @@ class SiteTreeLinkTracking_Parser {
|
||||
$matches = array();
|
||||
if(preg_match('/\[sitetree_link(?:\s*|%20|,)?id=([0-9]+)\](#(.*))?/i', $href, $matches)) {
|
||||
$page = DataObject::get_by_id('SiteTree', $matches[1]);
|
||||
$broken = false;
|
||||
|
||||
if (!$page) {
|
||||
// Page doesn't exist.
|
||||
$broken = true;
|
||||
} else if (!empty($matches[3]) && !preg_match("/(name|id)=\"{$matches[3]}\"/", $page->Content)) {
|
||||
// Broken anchor on the target page.
|
||||
$broken = true;
|
||||
} else {
|
||||
$broken = false;
|
||||
} else if (!empty($matches[3])) {
|
||||
$anchor = preg_quote($matches[3], '/');
|
||||
|
||||
if (!preg_match("/(name|id)=\"{$anchor}\"/", $page->Content)) {
|
||||
// Broken anchor on the target page.
|
||||
$broken = true;
|
||||
}
|
||||
}
|
||||
|
||||
$results[] = array(
|
||||
|
@ -59,7 +59,7 @@ class VirtualPage extends Page {
|
||||
foreach($record->db() as $field => $type) {
|
||||
if(!in_array($field, $nonVirtualFields)) {
|
||||
$virtualFields[] = $field;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $virtualFields;
|
||||
}
|
||||
@ -422,7 +422,7 @@ class VirtualPage extends Page {
|
||||
public function __get($field) {
|
||||
if(parent::hasMethod($funcName = "get$field")) {
|
||||
return $this->$funcName();
|
||||
} else if(parent::hasField($field)) {
|
||||
} else if(parent::hasField($field) || ($field === 'ID' && !$this->exists())) {
|
||||
return $this->getField($field);
|
||||
} else {
|
||||
return $this->copyContentFrom()->$field;
|
||||
@ -451,7 +451,7 @@ class VirtualPage extends Page {
|
||||
public function hasField($field) {
|
||||
if(parent::hasField($field)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return $this->CopyContentFrom()->hasField($field);
|
||||
}
|
||||
/**
|
||||
@ -463,7 +463,7 @@ class VirtualPage extends Page {
|
||||
public function hasMethod($method) {
|
||||
if(parent::hasMethod($method)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return $this->CopyContentFrom()->hasMethod($method);
|
||||
}
|
||||
|
||||
@ -569,12 +569,17 @@ class VirtualPage_Controller extends Page_Controller {
|
||||
} catch (Exception $e) {
|
||||
// Hack... detect exception type. We really should use exception subclasses.
|
||||
// if the exception isn't a 'no method' error, rethrow it
|
||||
if ($e->getCode() !== 2175) throw $e;
|
||||
if ($e->getCode() !== 2175) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
$original = $this->copyContentFrom();
|
||||
$originalClass = get_class($original);
|
||||
if ($originalClass == 'SiteTree') $name = 'ContentController';
|
||||
else $name = $originalClass."_Controller";
|
||||
$controller = new $name($this->dataRecord->copyContentFrom());
|
||||
$controller = ModelAsController::controller_for($original);
|
||||
|
||||
// Ensure request/response data is available on virtual controller
|
||||
$controller->setRequest($this->getRequest());
|
||||
$controller->response = $this->response; // @todo - replace with getter/setter in 3.3
|
||||
|
||||
return call_user_func_array(array($controller, $method), $args);
|
||||
}
|
||||
}
|
||||
|
@ -16,16 +16,18 @@ class BrokenFilesReport extends SS_Report {
|
||||
|
||||
public function sourceRecords($params = null) {
|
||||
// Get class names for page types that are not virtual pages or redirector pages
|
||||
$classes = array_diff(ClassInfo::subclassesFor('SiteTree'), ClassInfo::subclassesFor('VirtualPage'), ClassInfo::subclassesFor('RedirectorPage'));
|
||||
$classes = array_diff(
|
||||
ClassInfo::subclassesFor('SiteTree'),
|
||||
ClassInfo::subclassesFor('VirtualPage'),
|
||||
ClassInfo::subclassesFor('RedirectorPage')
|
||||
);
|
||||
$classParams = DB::placeholders($classes);
|
||||
$classFilter = array(
|
||||
"\"ClassName\" IN ($classParams) AND \"HasBrokenFile\" = 1" => $classes
|
||||
);
|
||||
|
||||
$classNames = "'".join("','", $classes)."'";
|
||||
|
||||
if (isset($_REQUEST['OnLive'])) {
|
||||
$ret = Versioned::get_by_stage('SiteTree', 'Live', "\"ClassName\" IN ($classNames) AND \"HasBrokenFile\" = 1");
|
||||
} else {
|
||||
$ret = DataObject::get('SiteTree', "\"ClassName\" IN ($classNames) AND \"HasBrokenFile\" = 1");
|
||||
}
|
||||
return $ret;
|
||||
$stage = isset($params['OnLive']) ? 'Live' : 'Stage';
|
||||
return Versioned::get_by_stage('SiteTree', $stage, $classFilter);
|
||||
}
|
||||
|
||||
public function columns() {
|
||||
@ -42,4 +44,14 @@ class BrokenFilesReport extends SS_Report {
|
||||
new CheckboxField('OnLive', _t('SideReport.ParameterLiveCheckbox', 'Check live site'))
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated 3.2..4.0
|
||||
*/
|
||||
class SideReport_BrokenFiles extends BrokenFilesReport {
|
||||
public function __construct() {
|
||||
Deprecation::notice('4.0', 'Use BrokenFilesReport instead');
|
||||
parent::__construct();
|
||||
}
|
||||
}
|
||||
|
@ -29,14 +29,14 @@ class BrokenLinksReport extends SS_Report {
|
||||
$sort = '';
|
||||
}
|
||||
}
|
||||
if (!isset($_REQUEST['CheckSite']) || $params['CheckSite'] == 'Published') {
|
||||
$ret = Versioned::get_by_stage('SiteTree', 'Live', array(
|
||||
'"SiteTree"."HasBrokenLink" = ? OR "SiteTree"."HasBrokenFile" = ?' => array(true, true)
|
||||
), $sort, $join, $limit);
|
||||
$brokenFilter = array(
|
||||
'"SiteTree"."HasBrokenLink" = ? OR "SiteTree"."HasBrokenFile" = ?' => array(true, true)
|
||||
);
|
||||
$isLive = !isset($params['CheckSite']) || $params['CheckSite'] == 'Published';
|
||||
if ($isLive) {
|
||||
$ret = Versioned::get_by_stage('SiteTree', 'Live', $brokenFilter, $sort, $join, $limit);
|
||||
} else {
|
||||
$ret = DataObject::get('SiteTree', array(
|
||||
'"SiteTree"."HasBrokenFile" = ? OR "SiteTree"."HasBrokenLink" = ?' => array(true, true)
|
||||
), $sort, $join, $limit);
|
||||
$ret = DataObject::get('SiteTree', $brokenFilter, $sort, $join, $limit);
|
||||
}
|
||||
|
||||
$returnSet = new ArrayList();
|
||||
@ -128,8 +128,8 @@ class BrokenLinksReport extends SS_Report {
|
||||
'Draft' => _t('BrokenLinksReport.CheckSiteDropdownDraft', 'Draft Site')
|
||||
)),
|
||||
new DropdownField(
|
||||
'Reason',
|
||||
_t('BrokenLinksReport.ReasonDropdown', 'Problem to check'),
|
||||
'Reason',
|
||||
_t('BrokenLinksReport.ReasonDropdown', 'Problem to check'),
|
||||
array(
|
||||
'' => _t('BrokenLinksReport.Any', 'Any'),
|
||||
'BROKENFILE' => _t('BrokenLinksReport.ReasonDropdownBROKENFILE', 'Broken file'),
|
||||
@ -141,3 +141,14 @@ class BrokenLinksReport extends SS_Report {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @deprecated 3.2..4.0
|
||||
*/
|
||||
class SideReport_BrokenLinks extends BrokenLinksReport {
|
||||
public function __construct() {
|
||||
Deprecation::notice('4.0', 'Use BrokenLinksReport instead');
|
||||
parent::__construct();
|
||||
}
|
||||
}
|
||||
|
@ -15,11 +15,13 @@ class BrokenRedirectorPagesReport extends SS_Report {
|
||||
}
|
||||
|
||||
public function sourceRecords($params = null) {
|
||||
$classNames = "'".join("','", ClassInfo::subclassesFor('RedirectorPage'))."'";
|
||||
|
||||
if (isset($_REQUEST['OnLive'])) $ret = Versioned::get_by_stage('SiteTree', 'Live', "\"ClassName\" IN ($classNames) AND \"HasBrokenLink\" = 1");
|
||||
else $ret = DataObject::get('SiteTree', "\"ClassName\" IN ($classNames) AND \"HasBrokenLink\" = 1");
|
||||
return $ret;
|
||||
$classes = ClassInfo::subclassesFor('RedirectorPage');
|
||||
$classParams = DB::placeholders($classes);
|
||||
$classFilter = array(
|
||||
"\"ClassName\" IN ($classParams) AND \"HasBrokenLink\" = 1" => $classes
|
||||
);
|
||||
$stage = isset($params['OnLive']) ? 'Live' : 'Stage';
|
||||
return Versioned::get_by_stage('SiteTree', $stage, $classFilter);
|
||||
}
|
||||
|
||||
public function columns() {
|
||||
@ -37,3 +39,13 @@ class BrokenRedirectorPagesReport extends SS_Report {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated 3.2..4.0
|
||||
*/
|
||||
class SideReport_BrokenRedirectorPages extends BrokenRedirectorPagesReport {
|
||||
public function __construct() {
|
||||
Deprecation::notice('4.0', 'Use BrokenRedirectorPagesReport instead');
|
||||
parent::__construct();
|
||||
}
|
||||
}
|
||||
|
@ -15,15 +15,13 @@ class BrokenVirtualPagesReport extends SS_Report {
|
||||
}
|
||||
|
||||
public function sourceRecords($params = null) {
|
||||
$classNames = "'".join("','", ClassInfo::subclassesFor('VirtualPage'))."'";
|
||||
|
||||
if (isset($_REQUEST['OnLive'])) {
|
||||
$ret = Versioned::get_by_stage('SiteTree', 'Live', "\"ClassName\" IN ($classNames) AND \"HasBrokenLink\" = 1");
|
||||
} else {
|
||||
$ret = DataObject::get('SiteTree', "\"ClassName\" IN ($classNames) AND \"HasBrokenLink\" = 1");
|
||||
}
|
||||
|
||||
return $ret;
|
||||
$classes = ClassInfo::subclassesFor('VirtualPage');
|
||||
$classParams = DB::placeholders($classes);
|
||||
$classFilter = array(
|
||||
"\"ClassName\" IN ($classParams) AND \"HasBrokenLink\" = 1" => $classes
|
||||
);
|
||||
$stage = isset($params['OnLive']) ? 'Live' : 'Stage';
|
||||
return Versioned::get_by_stage('SiteTree', $stage, $classFilter);
|
||||
}
|
||||
|
||||
public function columns() {
|
||||
@ -40,4 +38,14 @@ class BrokenVirtualPagesReport extends SS_Report {
|
||||
new CheckboxField('OnLive', _t('SideReport.ParameterLiveCheckbox', 'Check live site'))
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated 3.2..4.0
|
||||
*/
|
||||
class SideReport_BrokenVirtualPages extends BrokenVirtualPagesReport {
|
||||
public function __construct() {
|
||||
Deprecation::notice('4.0', 'Use BrokenVirtualPagesReport instead');
|
||||
parent::__construct();
|
||||
}
|
||||
}
|
||||
|
@ -32,4 +32,14 @@ class EmptyPagesReport extends SS_Report {
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated 3.2..4.0
|
||||
*/
|
||||
class SideReport_EmptyPages extends EmptyPagesReport {
|
||||
public function __construct() {
|
||||
Deprecation::notice('4.0', 'Use EmptyPagesReport instead');
|
||||
parent::__construct();
|
||||
}
|
||||
}
|
||||
|
@ -31,4 +31,14 @@ class RecentlyEditedReport extends SS_Report {
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated 3.2..4.0
|
||||
*/
|
||||
class SideReport_RecentlyEdited extends RecentlyEditedReport {
|
||||
public function __construct() {
|
||||
Deprecation::notice('4.0', 'Use RecentlyEditedReport instead');
|
||||
parent::__construct();
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,13 @@
|
||||
<?php
|
||||
/**
|
||||
* Standard basic search form which conducts a fulltext search on all {@link SiteTree}
|
||||
* objects.
|
||||
* objects.
|
||||
*
|
||||
* If multilingual content is enabled through the {@link Translatable} extension,
|
||||
* only pages the currently set language on the holder for this searchform are found.
|
||||
* The language is set through a hidden field in the form, which is prepoluated
|
||||
* with {@link Translatable::get_current_locale()} when then form is constructed.
|
||||
*
|
||||
*
|
||||
* @see Use ModelController and SearchContext for a more generic search implementation based around DataObject
|
||||
* @package cms
|
||||
* @subpackage search
|
||||
@ -32,7 +32,7 @@ class SearchForm extends Form {
|
||||
);
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @param Controller $controller
|
||||
* @param string $name The name of the form (used in URL addressing)
|
||||
* @param FieldList $fields Optional, defaults to a single field named "Search". Search logic needs to be customized
|
||||
@ -66,7 +66,7 @@ class SearchForm extends Form {
|
||||
|
||||
/**
|
||||
* Return a rendered version of this form.
|
||||
*
|
||||
*
|
||||
* This is returned when you access a form as $FormObject rather
|
||||
* than <% with FormObject %>
|
||||
*/
|
||||
@ -84,7 +84,7 @@ class SearchForm extends Form {
|
||||
|
||||
/**
|
||||
* Set the classes to search.
|
||||
* Currently you can only choose from "SiteTree" and "File", but a future version might improve this.
|
||||
* Currently you can only choose from "SiteTree" and "File", but a future version might improve this.
|
||||
*/
|
||||
public function classesToSearch($classes) {
|
||||
$illegalClasses = array_diff($classes, array('SiteTree', 'File'));
|
||||
@ -101,13 +101,13 @@ class SearchForm extends Form {
|
||||
* @return array
|
||||
*/
|
||||
public function getClassesToSearch() {
|
||||
return $this->classesToSearch;
|
||||
return $this->classesToSearch;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return dataObjectSet of the results using $_REQUEST to get info from form.
|
||||
* Wraps around {@link searchEngine()}.
|
||||
*
|
||||
*
|
||||
* @param int $pageLength DEPRECATED 2.3 Use SearchForm->pageLength
|
||||
* @param array $data Request data as an associative array. Should contain at least a key 'Search' with all searched keywords.
|
||||
* @return SS_List
|
||||
@ -193,7 +193,7 @@ class SearchForm extends Form {
|
||||
|
||||
/**
|
||||
* Get the search query for display in a "You searched for ..." sentence.
|
||||
*
|
||||
*
|
||||
* @param array $data
|
||||
* @return string
|
||||
*/
|
||||
@ -207,7 +207,7 @@ class SearchForm extends Form {
|
||||
|
||||
/**
|
||||
* Set the maximum number of records shown on each page.
|
||||
*
|
||||
*
|
||||
* @param int $length
|
||||
*/
|
||||
public function setPageLength($length) {
|
||||
|
@ -4,7 +4,7 @@
|
||||
#right form #deletemarked .middleColumn {
|
||||
background: none;
|
||||
}
|
||||
.dragfile,
|
||||
.dragfile,
|
||||
.dragfile img {
|
||||
float: left;
|
||||
cursor: move;
|
||||
@ -38,4 +38,4 @@ form#Form_AddForm .field span.readonly {
|
||||
/* Same as .checkboxAboveTree */
|
||||
border-top: 1px solid #CCCCCC;
|
||||
padding: .5em;
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
div#SideReportsHolder {
|
||||
clear: left;
|
||||
}
|
||||
}
|
||||
|
@ -41,4 +41,4 @@ included in the template due to a bug since 29/09/08 (r63175), and we can't find
|
||||
font-size: 80%;
|
||||
font-style: italic;
|
||||
}
|
||||
*/
|
||||
*/
|
||||
|
@ -25,7 +25,7 @@
|
||||
},
|
||||
/**
|
||||
* Function: drop
|
||||
*
|
||||
*
|
||||
* Take selected files and move them to a folder target in the tree.
|
||||
*/
|
||||
drop: function(e, ui) {
|
||||
@ -44,10 +44,10 @@
|
||||
|
||||
/**
|
||||
* Function: getSelected
|
||||
*
|
||||
*
|
||||
* Get the IDs of all selected files in the table.
|
||||
* Used for drag'n'drop.
|
||||
*
|
||||
*
|
||||
* Returns:
|
||||
* Array
|
||||
*/
|
||||
@ -69,8 +69,8 @@
|
||||
appendTo: 'body',
|
||||
helper: function() {
|
||||
return $(
|
||||
'<div class="NumFilesIndicator">' +
|
||||
ss.i18n.sprintf(ss.i18n._t('AssetTableField.MOVING'),container.getSelected().length) +
|
||||
'<div class="NumFilesIndicator">'
|
||||
ss.i18n.sprintf(ss.i18n._t('AssetTableField.MOVING'),container.getSelected().length)
|
||||
'</div>'
|
||||
);
|
||||
}
|
||||
@ -83,10 +83,10 @@
|
||||
},
|
||||
/**
|
||||
* Function: onmousedown
|
||||
*
|
||||
*
|
||||
* Parameters:
|
||||
* (Event) e
|
||||
*
|
||||
*
|
||||
* Automatically select the checkbox in the same table row
|
||||
* to signify that this element is moved, and hint that
|
||||
* all checkboxed elements will be moved along with it.
|
||||
|
@ -11,7 +11,7 @@
|
||||
$(document).ready(function() {
|
||||
$('#Form_BatchActionsForm').entwine('.ss.tree').register(
|
||||
// TODO Hardcoding of base URL
|
||||
'admin/assets/batchactions/delete',
|
||||
'admin/assets/batchactions/delete',
|
||||
function(ids) {
|
||||
var confirmed = confirm(
|
||||
ss.i18n.sprintf(
|
||||
@ -55,7 +55,7 @@
|
||||
msg = ss.i18n._t('AssetAdmin.ConfirmDelete');
|
||||
} else {
|
||||
msg = ss.i18n._t('TABLEFIELD.DELETECONFIRMMESSAGE');
|
||||
}
|
||||
}
|
||||
if(!confirm(msg)) return false;
|
||||
|
||||
this.getGridField().reload({data: [{name: this.attr('name'), value: this.val()}]});
|
||||
@ -94,7 +94,7 @@
|
||||
|
||||
/**
|
||||
* Function: onsubmit
|
||||
*
|
||||
*
|
||||
* Parameters:
|
||||
* (Event) e
|
||||
*/
|
||||
|
@ -44,7 +44,7 @@
|
||||
* Similar implementation to LeftAndMain.Tree.js.
|
||||
*/
|
||||
updateTypeList: function() {
|
||||
var hints = this.data('hints'),
|
||||
var hints = this.data('hints'),
|
||||
parentTree = this.find('#Form_AddForm_ParentID_Holder .TreeDropdownField'),
|
||||
parentMode = this.find("input[name=ParentModeField]:checked").val(),
|
||||
metadata = parentTree.data('metadata'),
|
||||
@ -101,7 +101,7 @@
|
||||
},
|
||||
/**
|
||||
* Update the selection filter with the given blacklist and default selection
|
||||
*
|
||||
*
|
||||
* @param array disallowedChildren
|
||||
* @param string defaultChildClass
|
||||
*/
|
||||
@ -109,7 +109,7 @@
|
||||
// Limit selection
|
||||
var allAllowed = null; // troolian
|
||||
this.find('#Form_AddForm_PageType li').each(function() {
|
||||
var className = $(this).find('input').val(),
|
||||
var className = $(this).find('input').val(),
|
||||
isAllowed = ($.inArray(className, disallowedChildren) === -1);
|
||||
|
||||
$(this).setEnabled(isAllowed);
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
/**
|
||||
* Class: .cms-edit-form input[name=Title]
|
||||
*
|
||||
*
|
||||
* Input validation on the Title field
|
||||
*/
|
||||
$('.cms-edit-form input[name=Title]').entwine({
|
||||
@ -61,7 +61,7 @@
|
||||
|
||||
/**
|
||||
* Function: updateRelatedFields
|
||||
*
|
||||
*
|
||||
* Update the related fields if appropriate
|
||||
* (String) title The new title
|
||||
* (Stirng) origTitle The original title
|
||||
@ -80,7 +80,7 @@
|
||||
|
||||
/**
|
||||
* Function: updateURLSegment
|
||||
*
|
||||
*
|
||||
* Update the URLSegment
|
||||
* (String) title
|
||||
*/
|
||||
@ -96,7 +96,7 @@
|
||||
|
||||
/**
|
||||
* Function: updateBreadcrumbLabel
|
||||
*
|
||||
*
|
||||
* Update the breadcrumb
|
||||
* (String) title
|
||||
*/
|
||||
@ -110,9 +110,9 @@
|
||||
|
||||
/**
|
||||
* Function: _addActions
|
||||
*
|
||||
*
|
||||
* Utility to add update from title action
|
||||
*
|
||||
*
|
||||
*/
|
||||
_addActions: function() {
|
||||
var self = this;
|
||||
@ -137,7 +137,7 @@
|
||||
|
||||
/**
|
||||
* Class: .cms-edit-form .parentTypeSelector
|
||||
*
|
||||
*
|
||||
* ParentID field combination - mostly toggling between
|
||||
* the two radiobuttons and setting the hidden "ParentID" field
|
||||
*/
|
||||
@ -159,7 +159,7 @@
|
||||
|
||||
/**
|
||||
* Function: _toggleSelection
|
||||
*
|
||||
*
|
||||
* Parameters:
|
||||
* (Event) e
|
||||
*/
|
||||
@ -175,7 +175,7 @@
|
||||
|
||||
/**
|
||||
* Function: _changeParentId
|
||||
*
|
||||
*
|
||||
* Parameters:
|
||||
* (Event) e
|
||||
*/
|
||||
@ -188,7 +188,7 @@
|
||||
|
||||
/**
|
||||
* Class: .cms-edit-form #CanViewType, .cms-edit-form #CanEditType
|
||||
*
|
||||
*
|
||||
* Toggle display of group dropdown in "access" tab,
|
||||
* based on selection of radiobuttons.
|
||||
*/
|
||||
@ -226,20 +226,20 @@
|
||||
|
||||
/**
|
||||
* Class: .cms-edit-form .Actions #Form_EditForm_action_print
|
||||
*
|
||||
*
|
||||
* Open a printable representation of the form in a new window.
|
||||
* Used for readonly older versions of a specific page.
|
||||
*/
|
||||
$('.cms-edit-form .Actions #Form_EditForm_action_print').entwine({
|
||||
/**
|
||||
* Function: onclick
|
||||
*
|
||||
*
|
||||
* Parameters:
|
||||
* (Event) e
|
||||
*/
|
||||
onclick: function(e) {
|
||||
var printURL = $(this[0].form).attr('action').replace(/\?.*$/,'')
|
||||
+ '/printable/'
|
||||
var printURL = $(this[0].form).attr('action').replace(/\?.*$/,'')
|
||||
+ '/printable/'
|
||||
+ $(':input[name=ID]',this[0].form).val();
|
||||
if(printURL.substr(0,7) != 'http://') printURL = $('base').attr('href') + printURL;
|
||||
|
||||
@ -251,14 +251,14 @@
|
||||
|
||||
/**
|
||||
* Class: .cms-edit-form .Actions #Form_EditForm_action_rollback
|
||||
*
|
||||
*
|
||||
* A "rollback" to a specific version needs user confirmation.
|
||||
*/
|
||||
$('.cms-edit-form .Actions #Form_EditForm_action_rollback').entwine({
|
||||
|
||||
/**
|
||||
* Function: onclick
|
||||
*
|
||||
*
|
||||
* Parameters:
|
||||
* (Event) e
|
||||
*/
|
||||
@ -266,7 +266,7 @@
|
||||
var form = this.parents('form:first'), version = form.find(':input[name=Version]').val(), message = '';
|
||||
if(version) {
|
||||
message = ss.i18n.sprintf(
|
||||
ss.i18n._t('CMSMain.RollbackToVersion'),
|
||||
ss.i18n._t('CMSMain.RollbackToVersion'),
|
||||
version
|
||||
);
|
||||
} else {
|
||||
@ -282,21 +282,21 @@
|
||||
|
||||
/**
|
||||
* Class: .cms-edit-form .Actions #Form_EditForm_action_archive
|
||||
*
|
||||
*
|
||||
* Informing the user about the archive action while requiring confirmation
|
||||
*/
|
||||
$('.cms-edit-form .Actions #Form_EditForm_action_archive').entwine({
|
||||
|
||||
/**
|
||||
* Function: onclick
|
||||
*
|
||||
*
|
||||
* Parameters:
|
||||
* (Event) e
|
||||
*/
|
||||
onclick: function(e) {
|
||||
var form = this.parents('form:first'), version = form.find(':input[name=Version]').val(), message = '';
|
||||
message = ss.i18n.sprintf(
|
||||
ss.i18n._t('CMSMain.Archive'),
|
||||
ss.i18n._t('CMSMain.Archive'),
|
||||
version
|
||||
);
|
||||
if(confirm(message)) {
|
||||
@ -309,14 +309,14 @@
|
||||
|
||||
/**
|
||||
* Class: .cms-edit-form .Actions #Form_EditForm_action_restore
|
||||
*
|
||||
*
|
||||
* Informing the user about the archive action while requiring confirmation
|
||||
*/
|
||||
$('.cms-edit-form .Actions #Form_EditForm_action_restore').entwine({
|
||||
|
||||
/**
|
||||
* Function: onclick
|
||||
*
|
||||
*
|
||||
* Parameters:
|
||||
* (Event) e
|
||||
*/
|
||||
@ -326,7 +326,7 @@
|
||||
message = '',
|
||||
toRoot = this.data('toRoot');
|
||||
message = ss.i18n.sprintf(
|
||||
ss.i18n._t(toRoot ? 'CMSMain.RestoreToRoot' : 'CMSMain.Restore'),
|
||||
ss.i18n._t(toRoot ? 'CMSMain.RestoreToRoot' : 'CMSMain.Restore'),
|
||||
version
|
||||
);
|
||||
if(confirm(message)) {
|
||||
@ -339,21 +339,21 @@
|
||||
|
||||
/**
|
||||
* Class: .cms-edit-form .Actions #Form_EditForm_action_delete
|
||||
*
|
||||
*
|
||||
* Informing the user about the delete from draft action while requiring confirmation
|
||||
*/
|
||||
$('.cms-edit-form .Actions #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 = ss.i18n.sprintf(
|
||||
ss.i18n._t('CMSMain.DeleteFromDraft'),
|
||||
ss.i18n._t('CMSMain.DeleteFromDraft'),
|
||||
version
|
||||
);
|
||||
if(confirm(message)) {
|
||||
@ -372,14 +372,14 @@
|
||||
|
||||
/**
|
||||
* Function: onclick
|
||||
*
|
||||
*
|
||||
* Parameters:
|
||||
* (Event) e
|
||||
*/
|
||||
onclick: function(e) {
|
||||
var form = this.parents('form:first'), version = form.find(':input[name=Version]').val(), message = '';
|
||||
message = ss.i18n.sprintf(
|
||||
ss.i18n._t('CMSMain.Unpublish'),
|
||||
ss.i18n._t('CMSMain.Unpublish'),
|
||||
version
|
||||
);
|
||||
if(confirm(message)) {
|
||||
|
@ -1,8 +1,8 @@
|
||||
(function($) {
|
||||
/**
|
||||
* File: CMSPageHistoryController.js
|
||||
*
|
||||
* Handles related interactions between the version selection form on the
|
||||
*
|
||||
* Handles related interactions between the version selection form on the
|
||||
* left hand side of the panel and the version displaying on the right
|
||||
* hand side.
|
||||
*/
|
||||
@ -32,7 +32,7 @@
|
||||
* display based on whether we have two or 1 option selected
|
||||
*
|
||||
* Todo:
|
||||
* Handle coupling to admin url
|
||||
* Handle coupling to admin url
|
||||
*/
|
||||
onsubmit: function(e, d) {
|
||||
e.preventDefault();
|
||||
@ -116,7 +116,7 @@
|
||||
* Selects or deselects the row (if in compare mode). Will trigger
|
||||
* an update of the edit form if either selected (in single mode)
|
||||
* or if this is the second row selected (in compare mode)
|
||||
*/
|
||||
*/
|
||||
onclick: function(e) {
|
||||
var compare, selected;
|
||||
|
||||
@ -153,9 +153,9 @@
|
||||
},
|
||||
|
||||
/**
|
||||
* Function: _unselect()
|
||||
* Function: _unselect()
|
||||
*
|
||||
* Unselects the row from the form selection.
|
||||
* Unselects the row from the form selection.
|
||||
*/
|
||||
_unselect: function() {
|
||||
this.removeClass('active');
|
||||
|
@ -14,11 +14,11 @@
|
||||
},
|
||||
toggle: function() {
|
||||
if($(this).attr('value') == 'Internal') {
|
||||
$('#ExternalURL').hide();
|
||||
$('#LinkToID').show();
|
||||
$('#Form_EditForm_ExternalURL_Holder').hide();
|
||||
$('#Form_EditForm_LinkToID_Holder').show();
|
||||
} else {
|
||||
$('#ExternalURL').show();
|
||||
$('#LinkToID').hide();
|
||||
$('#Form_EditForm_ExternalURL_Holder').show();
|
||||
$('#Form_EditForm_LinkToID_Holder').hide();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -23,7 +23,7 @@
|
||||
},
|
||||
|
||||
redraw: function() {
|
||||
var field = this.find(':text'),
|
||||
var field = this.find(':text'),
|
||||
url = decodeURI(field.data('prefix') + field.val()),
|
||||
previewUrl = url;
|
||||
|
||||
@ -87,7 +87,7 @@
|
||||
|
||||
/**
|
||||
* Return a value matching the criteria.
|
||||
*
|
||||
*
|
||||
* @param (String)
|
||||
* @param (Function)
|
||||
*/
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "إلغاء",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Storno",
|
||||
"URLSEGMENT.UpdateURL": "Aktualizovat URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -36,16 +36,16 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"Tree.ThisPageOnly": "Nur diese Seite",
|
||||
"Tree.ThisPageAndSubpages": "Diese Seite und Unterseiten",
|
||||
"Tree.ShowAsList": "Kinder als LIste zeigen",
|
||||
"CMSMain.ConfirmRestoreFromLive": "Are you sure you want to revert draft to when the page was last published?",
|
||||
"CMSMain.ConfirmRestoreFromLive": "Sind Sie sicher, dass Sie den Entwurf zu der zuletzt veröffentlichten Version zurücksetzen wollen?",
|
||||
"CMSMain.RollbackToVersion": "Wollen Sie wirklich Version #%s dieser Seite wiederherstellen?",
|
||||
"CMSMain.Archive": "Are you sure you want to archive this page and all of its children pages?\n\nThis page and all of its children will be unpublished and sent to the archive.",
|
||||
"CMSMain.Restore": "Are you sure you want to restore this page from archive?",
|
||||
"CMSMain.RestoreToRoot": "Are you sure you want to restore this page from archive?\n\nBecause the parent page is not available this will be restored to the top level.",
|
||||
"CMSMain.Unpublish": "Are you sure you want to remove your page from the published site?\n\nThis page will still be available in the sitetree as draft.",
|
||||
"CMSMain.DeleteFromDraft": "Are you sure you want to remove your page from the draft site?\n\nThis page will remain on the published site.",
|
||||
"CMSMain.Archive": "Sind Sie sicher, dass Sie diese Seite und alle Unterseiten archivieren wollen?\n\nBei dieser Seite und allen Unterseiten wird die Veröffentlichung zurückgenommen und sie werden ins Archiv verschoben.",
|
||||
"CMSMain.Restore": "Sind Sie sicher, dass Sie diese Seite aus dem Archiv wiederherstellen wollen?",
|
||||
"CMSMain.RestoreToRoot": "Sind Sie sicher, dass Sie diese Seite aus dem Archiv wiederherstellen wollen?\n\nWeil die ehemalige Elternseite nicht verfügbar ist wird diese Seite auf oberster Ebene wiederhergestellt.",
|
||||
"CMSMain.Unpublish": "Sind Sie sicher, dass Sie diese Seite von der veröffentlichten Seite entfernen wollen?\n\nDie Seite wird weiterhin im Seitenbaum als Entwurf bleiben.",
|
||||
"CMSMain.DeleteFromDraft": "Sind Sie sicher, dass Sie diese Seite aus den Entwürfen entfernen wollen?\n\nDiese Seite wird weiterhin veröffentlicht bleiben.",
|
||||
"URLSEGMENT.Edit": "Bearbeiten",
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Abbrechen",
|
||||
"URLSEGMENT.UpdateURL": "URL aktualisieren"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Άκυρο"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Cancel",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Rezigni",
|
||||
"URLSEGMENT.UpdateURL": "Ĝisdatigi je URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Cancelar",
|
||||
"URLSEGMENT.UpdateURL": "Actualizar URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "لغو",
|
||||
"URLSEGMENT.UpdateURL": "به روز رسانی URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -36,16 +36,16 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"Tree.ThisPageOnly": "Vain tämä sivu",
|
||||
"Tree.ThisPageAndSubpages": "Tämä sivu ja alasivut",
|
||||
"Tree.ShowAsList": "Näytä alasivut listana",
|
||||
"CMSMain.ConfirmRestoreFromLive": "Are you sure you want to revert draft to when the page was last published?",
|
||||
"CMSMain.ConfirmRestoreFromLive": "Haluatko varmasti palata luonnoksen viimeisimpään julkaistuun versioon?",
|
||||
"CMSMain.RollbackToVersion": "Haluatko varmasti palauttaa #%s version tästä sivusta?",
|
||||
"CMSMain.Archive": "Are you sure you want to archive this page and all of its children pages?\n\nThis page and all of its children will be unpublished and sent to the archive.",
|
||||
"CMSMain.Restore": "Are you sure you want to restore this page from archive?",
|
||||
"CMSMain.RestoreToRoot": "Are you sure you want to restore this page from archive?\n\nBecause the parent page is not available this will be restored to the top level.",
|
||||
"CMSMain.Unpublish": "Are you sure you want to remove your page from the published site?\n\nThis page will still be available in the sitetree as draft.",
|
||||
"CMSMain.DeleteFromDraft": "Are you sure you want to remove your page from the draft site?\n\nThis page will remain on the published site.",
|
||||
"CMSMain.Archive": "Haluatko varmasti arkistoida tämän sivun ja kaikki sen alasivut?\n\nTämä sivu ja kaikki alasivut poistetaan julkaisusta sekä siirretään arkistoon.",
|
||||
"CMSMain.Restore": "Haluatko varmasti palauttaa sivun arkistosta?",
|
||||
"CMSMain.RestoreToRoot": "Haluatko varmasti palauttaa tämän sivun arkistosta?\n\nKoska isäntäsivua ei ole saatavilla, sivu palautetaan päätasolle.",
|
||||
"CMSMain.Unpublish": "Haluatko varmasti poistaa tämän sivun julkaisusta?\n\nTämä sivu on vielä saatavilla vedoksena rakennepuusta.",
|
||||
"CMSMain.DeleteFromDraft": "Haluatko varmasti poistaa tämän sivun luonnoksista?\n\nTämä sivu pysyy julkaistuna.",
|
||||
"URLSEGMENT.Edit": "Muokkaa",
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Peruuta",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
"URLSEGMENT.UpdateURL": "Päivitä URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Annuler",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Mégsem",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Batal",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Hætta við",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Annulla",
|
||||
"URLSEGMENT.UpdateURL": "Aggiornare l'URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "キャンセル",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "취소",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Atšaukti",
|
||||
"URLSEGMENT.UpdateURL": "Atnaujinti URL dalį"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Whakakore",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Avbryt",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Annuleren",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Anuluj",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Renunţare",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Отмена",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Zrušiť",
|
||||
"URLSEGMENT.UpdateURL": "Aktualizovať URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Prekliči",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Одустани",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Odustani",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "موافق",
|
||||
"URLSEGMENT.Cancel": "إلغاء",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Storno",
|
||||
"URLSEGMENT.UpdateURL": "Aktualizovat URL"
|
||||
}
|
||||
}
|
||||
|
@ -31,15 +31,15 @@
|
||||
"Tree.ThisPageOnly": "Nur diese Seite",
|
||||
"Tree.ThisPageAndSubpages": "Diese Seite und Unterseiten",
|
||||
"Tree.ShowAsList": "Kinder als LIste zeigen",
|
||||
"CMSMain.ConfirmRestoreFromLive": "Are you sure you want to revert draft to when the page was last published?",
|
||||
"CMSMain.ConfirmRestoreFromLive": "Sind Sie sicher, dass Sie den Entwurf zu der zuletzt veröffentlichten Version zurücksetzen wollen?",
|
||||
"CMSMain.RollbackToVersion": "Wollen Sie wirklich Version #%s dieser Seite wiederherstellen?",
|
||||
"CMSMain.Archive": "Are you sure you want to archive this page and all of its children pages?\n\nThis page and all of its children will be unpublished and sent to the archive.",
|
||||
"CMSMain.Restore": "Are you sure you want to restore this page from archive?",
|
||||
"CMSMain.RestoreToRoot": "Are you sure you want to restore this page from archive?\n\nBecause the parent page is not available this will be restored to the top level.",
|
||||
"CMSMain.Unpublish": "Are you sure you want to remove your page from the published site?\n\nThis page will still be available in the sitetree as draft.",
|
||||
"CMSMain.DeleteFromDraft": "Are you sure you want to remove your page from the draft site?\n\nThis page will remain on the published site.",
|
||||
"CMSMain.Archive": "Sind Sie sicher, dass Sie diese Seite und alle Unterseiten archivieren wollen?\n\nBei dieser Seite und allen Unterseiten wird die Veröffentlichung zurückgenommen und sie werden ins Archiv verschoben.",
|
||||
"CMSMain.Restore": "Sind Sie sicher, dass Sie diese Seite aus dem Archiv wiederherstellen wollen?",
|
||||
"CMSMain.RestoreToRoot": "Sind Sie sicher, dass Sie diese Seite aus dem Archiv wiederherstellen wollen?\n\nWeil die ehemalige Elternseite nicht verfügbar ist wird diese Seite auf oberster Ebene wiederhergestellt.",
|
||||
"CMSMain.Unpublish": "Sind Sie sicher, dass Sie diese Seite von der veröffentlichten Seite entfernen wollen?\n\nDie Seite wird weiterhin im Seitenbaum als Entwurf bleiben.",
|
||||
"CMSMain.DeleteFromDraft": "Sind Sie sicher, dass Sie diese Seite aus den Entwürfen entfernen wollen?\n\nDiese Seite wird weiterhin veröffentlicht bleiben.",
|
||||
"URLSEGMENT.Edit": "Bearbeiten",
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Abbrechen",
|
||||
"URLSEGMENT.UpdateURL": "URL aktualisieren"
|
||||
}
|
||||
}
|
||||
|
@ -36,4 +36,4 @@
|
||||
"URLSEGMENT.Edit": "Επεξεργασία",
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Άκυρο"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Cancel",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "Akcepti",
|
||||
"URLSEGMENT.Cancel": "Rezigni",
|
||||
"URLSEGMENT.UpdateURL": "Ĝisdatigi je URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "Ok",
|
||||
"URLSEGMENT.Cancel": "Cancelar",
|
||||
"URLSEGMENT.UpdateURL": "Actualizar URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "تایید",
|
||||
"URLSEGMENT.Cancel": "لغو",
|
||||
"URLSEGMENT.UpdateURL": "به روز رسانی URL"
|
||||
}
|
||||
}
|
||||
|
@ -31,15 +31,15 @@
|
||||
"Tree.ThisPageOnly": "Vain tämä sivu",
|
||||
"Tree.ThisPageAndSubpages": "Tämä sivu ja alasivut",
|
||||
"Tree.ShowAsList": "Näytä alasivut listana",
|
||||
"CMSMain.ConfirmRestoreFromLive": "Are you sure you want to revert draft to when the page was last published?",
|
||||
"CMSMain.ConfirmRestoreFromLive": "Haluatko varmasti palata luonnoksen viimeisimpään julkaistuun versioon?",
|
||||
"CMSMain.RollbackToVersion": "Haluatko varmasti palauttaa #%s version tästä sivusta?",
|
||||
"CMSMain.Archive": "Are you sure you want to archive this page and all of its children pages?\n\nThis page and all of its children will be unpublished and sent to the archive.",
|
||||
"CMSMain.Restore": "Are you sure you want to restore this page from archive?",
|
||||
"CMSMain.RestoreToRoot": "Are you sure you want to restore this page from archive?\n\nBecause the parent page is not available this will be restored to the top level.",
|
||||
"CMSMain.Unpublish": "Are you sure you want to remove your page from the published site?\n\nThis page will still be available in the sitetree as draft.",
|
||||
"CMSMain.DeleteFromDraft": "Are you sure you want to remove your page from the draft site?\n\nThis page will remain on the published site.",
|
||||
"CMSMain.Archive": "Haluatko varmasti arkistoida tämän sivun ja kaikki sen alasivut?\n\nTämä sivu ja kaikki alasivut poistetaan julkaisusta sekä siirretään arkistoon.",
|
||||
"CMSMain.Restore": "Haluatko varmasti palauttaa sivun arkistosta?",
|
||||
"CMSMain.RestoreToRoot": "Haluatko varmasti palauttaa tämän sivun arkistosta?\n\nKoska isäntäsivua ei ole saatavilla, sivu palautetaan päätasolle.",
|
||||
"CMSMain.Unpublish": "Haluatko varmasti poistaa tämän sivun julkaisusta?\n\nTämä sivu on vielä saatavilla vedoksena rakennepuusta.",
|
||||
"CMSMain.DeleteFromDraft": "Haluatko varmasti poistaa tämän sivun luonnoksista?\n\nTämä sivu pysyy julkaistuna.",
|
||||
"URLSEGMENT.Edit": "Muokkaa",
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Peruuta",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
"URLSEGMENT.UpdateURL": "Päivitä URL"
|
||||
}
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "Ok",
|
||||
"URLSEGMENT.Cancel": "Annuler",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Mégsem",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Batal",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "Allt í lagi",
|
||||
"URLSEGMENT.Cancel": "Hætta við",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Annulla",
|
||||
"URLSEGMENT.UpdateURL": "Aggiornare l'URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "キャンセル",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "취소",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "Gerai",
|
||||
"URLSEGMENT.Cancel": "Atšaukti",
|
||||
"URLSEGMENT.UpdateURL": "Atnaujinti URL dalį"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "ĀE",
|
||||
"URLSEGMENT.Cancel": "Whakakore",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Avbryt",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Annuleren",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Anuluj",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Renunţare",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "ОК",
|
||||
"URLSEGMENT.Cancel": "Отмена",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Zrušiť",
|
||||
"URLSEGMENT.UpdateURL": "Aktualizovať URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Prekliči",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "У реду",
|
||||
"URLSEGMENT.Cancel": "Одустани",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "U redu",
|
||||
"URLSEGMENT.Cancel": "Odustani",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "OK",
|
||||
"URLSEGMENT.Cancel": "Avbryt",
|
||||
"URLSEGMENT.UpdateURL": "Uppdatera URL"
|
||||
}
|
||||
}
|
||||
|
@ -42,4 +42,4 @@
|
||||
"URLSEGMENT.OK": "确定",
|
||||
"URLSEGMENT.Cancel": "取消",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "Avbryt",
|
||||
"URLSEGMENT.UpdateURL": "Uppdatera URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
||||
"URLSEGMENT.Cancel": "取消",
|
||||
"URLSEGMENT.UpdateURL": "Update URL"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -85,13 +85,10 @@ ar:
|
||||
DUPLICATEDWITHCHILDREN: 'تكرار ''{title}'' والتوابع بنجاح'
|
||||
EMAIL: البريد الإلكتروني
|
||||
EditTree: 'تعديل الهيكل'
|
||||
ListFiltered: 'قائمة تمت تصفيتها.'
|
||||
MENUTITLE: 'حرر الصفحة'
|
||||
NEWPAGE: '{pagetype} جديد'
|
||||
PAGENOTEXISTS: 'هذه الصفحة غير موجودة'
|
||||
PAGES: الصفحات
|
||||
PAGETYPEANYOPT: أي
|
||||
PAGETYPEOPT: 'نوع الصفحة'
|
||||
PUBALLCONFIRM: 'فضلاً قم بنشر كل صفحة من صفحات الموقع'
|
||||
PUBALLFUN: '"نشر الجميع"خاصية '
|
||||
PUBALLFUN2: "الضغط على هذا الزر يعني الذهاب لكل صفحة و نشرها. It's\nintended to be used after there have been massive edits of the content, such as when the site was\nfirst built.\n"
|
||||
@ -109,10 +106,7 @@ ar:
|
||||
TabContent: المحتوى
|
||||
TabHistory: السوابق
|
||||
TabSettings: الإعدادات
|
||||
TreeFiltered: 'الشجرة المصفاة.'
|
||||
TreeFilteredClear: 'أزل المصفي'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'طبق عامل تصفية'
|
||||
RESET: إعادة الوضع الأصلي
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'أضف صفحة'
|
||||
@ -144,15 +138,12 @@ ar:
|
||||
ListView: 'عرض القائمة'
|
||||
MENUTITLE: الصفحات
|
||||
TreeView: 'عرض الشجرة'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: متعدد الاختيار
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: مصفاة
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: من
|
||||
FILTERDATEHEADING: موعد
|
||||
FILTERDATETO: إلى
|
||||
FILTERLABELTEXT: المحتوى
|
||||
CMSSettingsController:
|
||||
MENUTITLE: الإعدادات
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -70,10 +70,8 @@ bg:
|
||||
Create: Създай
|
||||
DELETE: 'Изтрий черновата и отиди на текущата публикувана страница'
|
||||
DELETEFP: Изтрии
|
||||
ListFiltered: 'Филтриран списък.'
|
||||
MENUTITLE: 'Редактиране на страницата'
|
||||
PAGENOTEXISTS: 'Тази страница не съществува'
|
||||
PAGES: Страници
|
||||
PAGETYPEANYOPT: Всички
|
||||
PUBALLCONFIRM: 'Публикувай всяка страница в сайта'
|
||||
PUBALLFUN: '"Публикувай всичко" функционалност'
|
||||
@ -88,9 +86,6 @@ bg:
|
||||
TabContent: Съдържание
|
||||
TabHistory: История
|
||||
TabSettings: Настройки
|
||||
TreeFilteredClear: 'Нулирай филтъра'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Приложи филтър'
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Добави страница'
|
||||
ParentMode_child: 'Под друга страница'
|
||||
@ -110,13 +105,10 @@ bg:
|
||||
WHEN: Когато
|
||||
CMSPageSettingsController:
|
||||
MENUTITLE: 'Редактиране на страницата'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Избиране на няколко
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Филтър
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: От
|
||||
FILTERLABELTEXT: Съдържание
|
||||
CMSSiteTreeFilter_Search:
|
||||
Title: 'Всички страници'
|
||||
ContentControl:
|
||||
|
31
lang/cs.yml
31
lang/cs.yml
@ -72,7 +72,7 @@ cs:
|
||||
RESTORE: Obnovit
|
||||
RESTORED_PAGES: 'Obnoveno %d stránek'
|
||||
UNPUBLISHED_PAGES: 'Nezveřejněných %d stránek'
|
||||
UNPUBLISH_PAGES: Nezveřejnit
|
||||
UNPUBLISH_PAGES: Nezveřejňovat
|
||||
CMSFileAddController:
|
||||
MENUTITLE: Soubory
|
||||
CMSMain:
|
||||
@ -94,11 +94,11 @@ cs:
|
||||
DUPLICATEDWITHCHILDREN: 'Duplikováno ''{title}'' a potomci úspěšně'
|
||||
EMAIL: E-mail
|
||||
EditTree: 'Upravit strom'
|
||||
ListFiltered: 'Filtrovaný seznam.'
|
||||
ListFiltered: 'Zobrazení výsledků vyhledávání.'
|
||||
MENUTITLE: 'Upravit stránku'
|
||||
NEWPAGE: 'Nová {pagetype}'
|
||||
PAGENOTEXISTS: 'Tato stránka neexistuje'
|
||||
PAGES: Stránky
|
||||
PAGES: 'Stav stránky'
|
||||
PAGETYPEANYOPT: Jakékoliv
|
||||
PAGETYPEOPT: 'Typ stránky'
|
||||
PUBALLCONFIRM: 'Prosím zveřejněte veškeré stránky z úschovny'
|
||||
@ -109,7 +109,7 @@ cs:
|
||||
REMOVED: 'Smazáno ''{title}''{description} z webu'
|
||||
REMOVEDPAGE: 'Odstraněno ''{title}'' ze zveřejněného webu'
|
||||
REMOVEDPAGEFROMDRAFT: 'Odstraněno ''%s'' z konceptu webu'
|
||||
RESTORE: Obnovit
|
||||
RESTORE: 'Obnovit koncept'
|
||||
RESTORED: 'Obnoveno ''{title}'' úspěšně'
|
||||
RESTORE_DESC: 'Obnovit archivovanou verzi na koncept'
|
||||
RESTORE_TO_ROOT: 'Obnovit koncept do nejvyšší úrovně'
|
||||
@ -122,11 +122,11 @@ cs:
|
||||
TabContent: Obsah
|
||||
TabHistory: Historie
|
||||
TabSettings: Nastavení
|
||||
TreeFiltered: 'Filtrovaný strom.'
|
||||
TreeFilteredClear: 'Vyčistit filtr'
|
||||
TreeFiltered: 'Zobrazení výsledků vyhledávání.'
|
||||
TreeFilteredClear: Vyčistit
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Použít filtr'
|
||||
CLEAR_FILTER: 'Vyčistit filtr'
|
||||
APPLY_FILTER: Hledat
|
||||
CLEAR_FILTER: Vyčistit
|
||||
RESET: Resetovat
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Přidat stránku'
|
||||
@ -159,7 +159,7 @@ cs:
|
||||
MENUTITLE: Stránky
|
||||
TreeView: 'Pohled strom'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Multi výběr
|
||||
MULTISELECT: 'Dávkové akce'
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtr
|
||||
CMSSIteTreeFilter_PublishedPages:
|
||||
@ -168,19 +168,20 @@ cs:
|
||||
FILTERDATEFROM: Od
|
||||
FILTERDATEHEADING: Datum
|
||||
FILTERDATETO: Do
|
||||
FILTERLABELTEXT: Obsah
|
||||
FILTERLABELTEXT: Hledat
|
||||
PAGEFILTERDATEHEADING: 'Poslední změna'
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Možnosti
|
||||
CMSSiteTreeFilter_ChangedPages:
|
||||
Title: 'Změnené stránky'
|
||||
Title: 'Upravené stránky'
|
||||
CMSSiteTreeFilter_DeletedPages:
|
||||
Title: 'Všechny stránky, včetně odstraněných'
|
||||
Title: 'Všechny stránky, včetně archivovaných'
|
||||
CMSSiteTreeFilter_Search:
|
||||
Title: 'Všechny stránky'
|
||||
CMSSiteTreeFilter_StatusDeletedPages:
|
||||
Title: 'Smazané stránky'
|
||||
Title: 'Archivované stránky'
|
||||
CMSSiteTreeFilter_StatusDraftPages:
|
||||
Title: 'Koncept nezveřejněných stránek'
|
||||
Title: 'Konceptové stránky'
|
||||
CMSSiteTreeFilter_StatusRemovedFromDraftPages:
|
||||
Title: 'Živé, ale odstraněno z konceptu'
|
||||
ContentControl:
|
||||
@ -298,7 +299,7 @@ cs:
|
||||
SilverStripeNavigator:
|
||||
ARCHIVED: Archivováno
|
||||
SilverStripeNavigatorLink:
|
||||
ShareInstructions: 'K sdílení této stránky, odkaz zkopírujte a vložte dolů..'
|
||||
ShareInstructions: 'Pro zdílení této stránky, zkopírujte a přilepte odkaz dole.'
|
||||
ShareLink: 'Sdílet odkaz'
|
||||
SilverStripeNavigatorLinkl:
|
||||
CloseLink: Zavřít
|
||||
|
21
lang/da.yml
21
lang/da.yml
@ -4,7 +4,10 @@ da:
|
||||
ActionAdd: 'Tilføj mappe'
|
||||
AppCategoryArchive: Arkiv
|
||||
AppCategoryAudio: Lyd
|
||||
AppCategoryDocument: Dokument
|
||||
AppCategoryFlash: Flash
|
||||
AppCategoryImage: Billeder
|
||||
AppCategoryVideo: Video
|
||||
BackToFolder: 'Tilbage til mappen'
|
||||
CREATED: Dato
|
||||
CurrentFolderOnly: 'Begræns til den nuværende mappe'
|
||||
@ -24,6 +27,8 @@ da:
|
||||
Upload: Overfør
|
||||
AssetAdmin_DeleteBatchAction:
|
||||
TITLE: 'Slet mapper'
|
||||
AssetAdmin_Tools:
|
||||
FILTER: Filter
|
||||
AssetTableField:
|
||||
BACKLINKCOUNT: 'Brugt på:'
|
||||
PAGES: side(r)
|
||||
@ -53,6 +58,8 @@ da:
|
||||
CMSAddPageController:
|
||||
Title: 'Tilføj side'
|
||||
CMSBatchActions:
|
||||
ARCHIVE: Arkiv
|
||||
ARCHIVED_PAGES: 'Arkiverede %d sider'
|
||||
DELETED_DRAFT_PAGES: 'Slettede %d sider fra kladdesiden, %d fejl'
|
||||
DELETED_PAGES: 'Slettede %d sider fra udgivet webside, %d fejl'
|
||||
DELETE_DRAFT_PAGES: 'Slet fra kladder'
|
||||
@ -64,6 +71,7 @@ da:
|
||||
CMSMain:
|
||||
ACCESS: 'Adgang til ''{title}'' sektionen'
|
||||
ACCESS_HELP: 'Tillad visning af den sektion, som indeholder sidetræet og indhold. Visnings- og redigeringstilladelser kan håndteres gennem sidespecifikke rullemenuer, såvel som de enkelte "Inholdstilladelser".'
|
||||
ARCHIVE: Arkiv
|
||||
AddNew: 'Tilføj ny side'
|
||||
AddNewButton: 'Tilføj ny'
|
||||
ChoosePageParentMode: 'Vælg hvor denne side skal oprettes'
|
||||
@ -73,13 +81,10 @@ da:
|
||||
DELETEFP: Slet
|
||||
DESCREMOVED: 'og {count} efterkommere'
|
||||
EditTree: 'Rediger sidetræ'
|
||||
ListFiltered: 'Filtreret liste.'
|
||||
MENUTITLE: 'Rediger side'
|
||||
NEWPAGE: 'Ny {pagetype}'
|
||||
PAGENOTEXISTS: 'Denne side eksisterer ikke'
|
||||
PAGES: Sider
|
||||
PAGETYPEANYOPT: Enhver
|
||||
PAGETYPEOPT: 'Sidetype'
|
||||
PUBALLCONFIRM: 'Udgiv alle sider på sitet. Kopierer indhold fra kladde til offentlig'
|
||||
PUBALLFUN: '"Udgiv alle" funktionalitet'
|
||||
PUBALLFUN2: "Hvis du trykker på denne knap, svarer det til at gå til hver enkel side og vælge udgiv. Det er hensigten at denne funktion benyttes når der er blevet lavet mange ændringer på flere sider, som f.eks da websitet blev påbegyndt."
|
||||
@ -93,10 +98,7 @@ da:
|
||||
TabContent: Indhold
|
||||
TabHistory: Historik
|
||||
TabSettings: Indstillinger
|
||||
TreeFiltered: 'Filtreret sidetræ.'
|
||||
TreeFilteredClear: 'Nulstil filter'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Anvend filter'
|
||||
RESET: Nulstil
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Tilføj side'
|
||||
@ -127,15 +129,12 @@ da:
|
||||
ListView: 'Listevisning'
|
||||
MENUTITLE: Sider
|
||||
TreeView: 'Trævisning'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Multivalg
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtre
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: Fra
|
||||
FILTERDATEHEADING: Dato
|
||||
FILTERDATETO: Til
|
||||
FILTERLABELTEXT: Indhold
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Indstillinger
|
||||
CMSSiteTreeFilter_Search:
|
||||
@ -152,6 +151,7 @@ da:
|
||||
LOGIN: Log ind
|
||||
LOGOUT: 'Log ud'
|
||||
NOTLOGGEDIN: 'Ikke logget ind'
|
||||
PUBLISHED: Udgivet
|
||||
PUBLISHEDSITE: 'Udgivet side'
|
||||
Password: Adgangskode
|
||||
UnableDeleteInstall: 'Var ikke i stand til at slette installationsfilerne. Slet venligst filerne herunder manuelt.'
|
||||
@ -240,6 +240,9 @@ da:
|
||||
APPEARSVIRTUALPAGES: 'Dette indhold er også på de virtuelle sider i {title}sektionerne'
|
||||
BUTTONCANCELDRAFT: 'Annuller ændringer i kladden '
|
||||
BUTTONCANCELDRAFTDESC: 'Slet kladden og benyt istedet den nuværende side'
|
||||
BUTTONPUBLISHED: Udgivet
|
||||
BUTTONSAVED: Gemt
|
||||
BUTTONSAVEPUBLISH: 'Gem & udgiv'
|
||||
BUTTONUNPUBLISH: Annuller udgivelse
|
||||
BUTTONUNPUBLISHDESC: 'Fjern denne side fra det udgivne websted'
|
||||
Comments: Kommentarer
|
||||
|
30
lang/de.yml
30
lang/de.yml
@ -71,6 +71,8 @@ de:
|
||||
PUBLISH_PAGES: Veröffentlichen
|
||||
RESTORE: Wiederherstellen
|
||||
RESTORED_PAGES: '%d Seiten wiederhergestellt'
|
||||
UNPUBLISHED_PAGES: 'Veröffentlichung von %d Seiten zurückgenommen'
|
||||
UNPUBLISH_PAGES: Veröffentlichung zurücknehmen
|
||||
CMSFileAddController:
|
||||
MENUTITLE: Dateien
|
||||
CMSMain:
|
||||
@ -92,13 +94,11 @@ de:
|
||||
DUPLICATEDWITHCHILDREN: '''{title}'' und alle Unterseiten wurden erfolgreich dupliziert'
|
||||
EMAIL: E-Mail
|
||||
EditTree: 'Seitenbaum bearbeiten'
|
||||
ListFiltered: 'Gefilterte Liste'
|
||||
MENUTITLE: 'Seite bearbeiten'
|
||||
NEWPAGE: 'Neue {pagetype}'
|
||||
PAGENOTEXISTS: 'Diese Seite existiert nicht'
|
||||
PAGES: Seiten
|
||||
PAGETYPEANYOPT: Alle
|
||||
PAGETYPEOPT: 'Seitentyp'
|
||||
PAGETYPEOPT: 'Seitentyp:'
|
||||
PUBALLCONFIRM: 'Veröffentlicht jede Seite des Seitenbaumes und kopiert den Inhalt von Entwurf zu Live.'
|
||||
PUBALLFUN: '"Alle veröffentlichen"-Funktion'
|
||||
PUBALLFUN2: "Dieser Button bewirkt dasselbe wie auf jeder Seite \"veröffentlichen\" zu wählen. Sie sollten diese Funktion nutzen, wenn grössere Inhaltsänderungen stattgefunden haben, zum Beispiel wenn die Seite erstellt wurde."
|
||||
@ -107,6 +107,7 @@ de:
|
||||
REMOVED: 'Lösche ''{title}''{description} von Live Umgebung'
|
||||
REMOVEDPAGE: '''{title}'' wurde von der veröffentlichten Site entfernt'
|
||||
REMOVEDPAGEFROMDRAFT: 'Lösche ''%s'' von der Entwurfs-Site'
|
||||
RESTORE: 'Entwurf wiederherstellen'
|
||||
RESTORED: '''{title}'' wurde wiederhergestellt'
|
||||
RESTORE_DESC: 'Entwurf aus archivierter Version wiederherstellen'
|
||||
RESTORE_TO_ROOT: 'Entwurf in oberster Ebene wiederherstellen'
|
||||
@ -119,11 +120,10 @@ de:
|
||||
TabContent: Inhalt
|
||||
TabHistory: Historie
|
||||
TabSettings: Einstellungen
|
||||
TreeFiltered: 'Seitenbaum gefiltert'
|
||||
TreeFilteredClear: 'Filter zurücksetzen'
|
||||
TreeFilteredClear: Zurücksetzen
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Filter anwenden'
|
||||
CLEAR_FILTER: 'Filter zurücksetzen'
|
||||
APPLY_FILTER: Suchen
|
||||
CLEAR_FILTER: Zurücksetzen
|
||||
RESET: Zurücksetzen
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Seite hinzufügen'
|
||||
@ -155,21 +155,28 @@ de:
|
||||
ListView: 'Listenansicht'
|
||||
MENUTITLE: Seiten
|
||||
TreeView: 'Baumansicht'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Mehrfachauswahl
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filter
|
||||
CMSSIteTreeFilter_PublishedPages:
|
||||
Title: 'Nicht veröffentlichte Seiten'
|
||||
Title: 'Veröffentlichte Seiten'
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: Von
|
||||
FILTERDATEHEADING: Datum
|
||||
FILTERDATETO: Bis
|
||||
FILTERLABELTEXT: Inhalt
|
||||
FILTERLABELTEXT: Suchen
|
||||
PAGEFILTERDATEHEADING: 'Zuletzt bearbeitet'
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Einstellungen
|
||||
CMSSiteTreeFilter_ChangedPages:
|
||||
Title: 'Geänderte Seiten'
|
||||
CMSSiteTreeFilter_DeletedPages:
|
||||
Title: 'Alle Seiten, auch archivierte'
|
||||
CMSSiteTreeFilter_Search:
|
||||
Title: 'Alle Seiten'
|
||||
CMSSiteTreeFilter_StatusDeletedPages:
|
||||
Title: 'Alle Seiten, auch archivierte'
|
||||
CMSSiteTreeFilter_StatusDraftPages:
|
||||
Title: 'Entwürfe'
|
||||
CMSSiteTreeFilter_StatusRemovedFromDraftPages:
|
||||
Title: 'Veröffentlicht aber aus Entwurf entfernt'
|
||||
ContentControl:
|
||||
@ -287,6 +294,7 @@ de:
|
||||
SilverStripeNavigator:
|
||||
ARCHIVED: Archiviert
|
||||
SilverStripeNavigatorLink:
|
||||
ShareInstructions: 'Kopieren Sie den untenstehenden Link um ihn zu teilen.'
|
||||
ShareLink: 'Link teilen'
|
||||
SilverStripeNavigatorLinkl:
|
||||
CloseLink: schließen
|
||||
|
@ -72,13 +72,10 @@ el:
|
||||
DELETEFP: Διαγραφή
|
||||
EMAIL: Email
|
||||
EditTree: 'Επεξεργασία Δένδρου'
|
||||
ListFiltered: 'Φιλτραρισμένη λίστα.'
|
||||
MENUTITLE: 'Επεξεργασία Σελίδας'
|
||||
NEWPAGE: 'Νέο {pagetype}'
|
||||
PAGENOTEXISTS: 'Αυτή η σελίδα δεν υπάρχει'
|
||||
PAGES: Σελίδες
|
||||
PAGETYPEANYOPT: Οποιοδήποτε
|
||||
PAGETYPEOPT: 'Τύπος Σελίδας'
|
||||
PUBALLFUN: 'Λειτουργία "Δημοσίευση Όλων"'
|
||||
PUBPAGES: 'Ολοκληρώθηκε: Δημοσίευση {count} σελίδων'
|
||||
PageAdded: 'Η σελίδα δημιουργήθηκε με επιτυχία'
|
||||
@ -86,10 +83,7 @@ el:
|
||||
TabContent: Περιεχόμενο
|
||||
TabHistory: Ιστορικό
|
||||
TabSettings: Ρυθμίσεις
|
||||
TreeFiltered: 'Φιλτραρισμένο δένδρο.'
|
||||
TreeFilteredClear: 'Καθαρισμός φίλτρου'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Εφαρμογή Φίλτρου'
|
||||
RESET: Επαναφορά
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Προσθήκη σελίδας'
|
||||
@ -122,7 +116,6 @@ el:
|
||||
FILTERDATEFROM: Από
|
||||
FILTERDATEHEADING: Ημερομηνία
|
||||
FILTERDATETO: Έως
|
||||
FILTERLABELTEXT: Περιεχόμενο
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Ρυθμίσεις
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
14
lang/en.yml
14
lang/en.yml
@ -124,12 +124,9 @@ en:
|
||||
TabSettings: Settings
|
||||
TreeFiltered: 'Showing search results.'
|
||||
TreeFilteredClear: Clear
|
||||
MENUTITLE: 'Edit Page'
|
||||
ARCHIVE: Archive
|
||||
ARCHIVEDPAGE: 'Archived page ''%s'''
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Search'
|
||||
CLEAR_FILTER: 'Clear Filter'
|
||||
APPLY_FILTER: Search
|
||||
CLEAR_FILTER: Clear
|
||||
RESET: Reset
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Add page'
|
||||
@ -162,16 +159,17 @@ en:
|
||||
MENUTITLE: Pages
|
||||
TreeView: 'Tree View'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Bulk actions
|
||||
MULTISELECT: 'Batch actions'
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filter
|
||||
CMSSIteTreeFilter_PublishedPages:
|
||||
Title: 'Published pages'
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: From
|
||||
FILTERDATEHEADING: 'Date'
|
||||
FILTERDATEHEADING: Date
|
||||
FILTERDATETO: To
|
||||
FILTERLABELTEXT: 'Search'
|
||||
FILTERLABELTEXT: Search
|
||||
PAGEFILTERDATEHEADING: 'Last edited'
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Settings
|
||||
CMSSiteTreeFilter_ChangedPages:
|
||||
|
10
lang/eo.yml
10
lang/eo.yml
@ -92,13 +92,10 @@ eo:
|
||||
DUPLICATEDWITHCHILDREN: 'Sukcese duobligis je ''{title}'' kaj idoj'
|
||||
EMAIL: Retpoŝto
|
||||
EditTree: 'Redakta arbo'
|
||||
ListFiltered: 'Filtrita listo.'
|
||||
MENUTITLE: 'Redakti paĝon'
|
||||
NEWPAGE: 'Nova {pagetype}'
|
||||
PAGENOTEXISTS: 'Ĉi tiu paĝo ne ekzistas'
|
||||
PAGES: Paĝoj
|
||||
PAGETYPEANYOPT: Ajna
|
||||
PAGETYPEOPT: 'Tipo de paĝo'
|
||||
PUBALLCONFIRM: 'Bonvolu eldoni ĉiun paĝon en la retejo, kopiante enhavan stadion al la publika'
|
||||
PUBALLFUN: 'Funkcio "Eldoni Ĉiujn"'
|
||||
PUBALLFUN2: "Premi ĉi tiun butonon estas same kiel viziti al ĉiu paĝo kaj premi je \"eldoni\". La intenco estas ke oni uzu ĝin post multnombraj redaktoj de la enhavo, ekzemple kiam oni unue konstruis la retejon."
|
||||
@ -119,11 +116,7 @@ eo:
|
||||
TabContent: Enhavo
|
||||
TabHistory: Historio
|
||||
TabSettings: Agordoj
|
||||
TreeFiltered: 'Filtrita arbo.'
|
||||
TreeFilteredClear: 'Vakigi filtrilon'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Apliki filtrilon'
|
||||
CLEAR_FILTER: 'Vakigi filtrilon'
|
||||
RESET: Restartigi
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Enmeti paĝon'
|
||||
@ -155,8 +148,6 @@ eo:
|
||||
ListView: 'Lista vido'
|
||||
MENUTITLE: Paĝoj
|
||||
TreeView: 'Arba vido'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Plurelekto
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtri
|
||||
CMSSIteTreeFilter_PublishedPages:
|
||||
@ -165,7 +156,6 @@ eo:
|
||||
FILTERDATEFROM: De
|
||||
FILTERDATEHEADING: Dato
|
||||
FILTERDATETO: Al
|
||||
FILTERLABELTEXT: Enhavo
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Agordoj
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
10
lang/es.yml
10
lang/es.yml
@ -92,13 +92,10 @@ es:
|
||||
DUPLICATEDWITHCHILDREN: 'Duplicado con hijos'
|
||||
EMAIL: E-mail
|
||||
EditTree: 'Editar árbol'
|
||||
ListFiltered: 'Mostrar lista'
|
||||
MENUTITLE: 'Editar página'
|
||||
NEWPAGE: 'Nuevo {pagetype}'
|
||||
PAGENOTEXISTS: 'Esta página no existe'
|
||||
PAGES: Páginas
|
||||
PAGETYPEANYOPT: Cualquiera
|
||||
PAGETYPEOPT: 'Tipo de Página'
|
||||
PUBALLCONFIRM: 'Por favor publica todas las páginas del sitio, copiando el contenido del borrador al sitio público'
|
||||
PUBALLFUN: 'Función "Publicar Todo"'
|
||||
PUBALLFUN2: "Pulsando este botón es el equivalente de ir a cada página y pulsar \"Publicar\". Está pensado para ser usado en ediciones masivas del contenido, por ejemplo cuando el sitio se construye por primera vez."
|
||||
@ -119,11 +116,7 @@ es:
|
||||
TabContent: Contenido
|
||||
TabHistory: Historial
|
||||
TabSettings: Ajustes
|
||||
TreeFiltered: 'Árbol filtrado'
|
||||
TreeFilteredClear: 'Borrar filtro'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Aplicar filtro'
|
||||
CLEAR_FILTER: 'Limpiar filtro'
|
||||
RESET: Restablecer
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Añadir página'
|
||||
@ -155,8 +148,6 @@ es:
|
||||
ListView: 'Vista como lista'
|
||||
MENUTITLE: Páginas
|
||||
TreeView: 'Ver como árbol'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Multi-selección
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtro
|
||||
CMSSIteTreeFilter_PublishedPages:
|
||||
@ -165,7 +156,6 @@ es:
|
||||
FILTERDATEFROM: De
|
||||
FILTERDATEHEADING: Fecha
|
||||
FILTERDATETO: Hasta
|
||||
FILTERLABELTEXT: Filtrar
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Ajustes
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -82,13 +82,10 @@ et_EE:
|
||||
DESCREMOVED: 'ja {count} järglast'
|
||||
EMAIL: E-post
|
||||
EditTree: 'Redigeeri'
|
||||
ListFiltered: 'Filtreeritud loend'
|
||||
MENUTITLE: 'Redigeeri lehte'
|
||||
NEWPAGE: 'Uus {pagetype}'
|
||||
PAGENOTEXISTS: 'Antud lehekülge ei eksisteeri'
|
||||
PAGES: Lehed
|
||||
PAGETYPEANYOPT: Kõik
|
||||
PAGETYPEOPT: 'Lehe tüüp'
|
||||
PUBALLCONFIRM: 'Palun avaldage iga leht selles saidis'
|
||||
PUBALLFUN: '"Avalda Kõik" funktsionaalsus'
|
||||
PUBALLFUN2: "Sellele nupule vajutamine on sama, kui käia igal lehel ja vajutada igal lehel \"Avalda\" nuppu. Nuppu on soovitatav kasutada, kui oled muutnud mitmeid lehti - see salvestab igal lehel toimunud muudatused."
|
||||
@ -103,10 +100,7 @@ et_EE:
|
||||
TabContent: Sisu
|
||||
TabHistory: Ajalugu
|
||||
TabSettings: Seaded
|
||||
TreeFiltered: 'Filtreeritud puu.'
|
||||
TreeFilteredClear: 'Eemalda filtreering'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Aktiveeri filter'
|
||||
RESET: Lähtesta
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Lisa leht'
|
||||
@ -136,15 +130,12 @@ et_EE:
|
||||
ListView: 'Loendivaade'
|
||||
MENUTITLE: Lehed
|
||||
TreeView: 'Puuvaade'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Mitmikvalik
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtreeri
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: Alates
|
||||
FILTERDATEHEADING: Kuupäev
|
||||
FILTERDATETO: Kuni
|
||||
FILTERLABELTEXT: Sisu
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Seaded
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -71,6 +71,8 @@ fa_IR:
|
||||
PUBLISH_PAGES: انتشار
|
||||
RESTORE: بازنشاندن
|
||||
RESTORED_PAGES: 'بازنشاندن %d صفحه'
|
||||
UNPUBLISHED_PAGES: '%d صفحهی منتشرنشده'
|
||||
UNPUBLISH_PAGES: عدم انتشار
|
||||
CMSFileAddController:
|
||||
MENUTITLE: فایلها
|
||||
CMSMain:
|
||||
@ -88,24 +90,27 @@ fa_IR:
|
||||
DELETEFP: حذف کردن از منتشر شده های سایت
|
||||
EMAIL: پست الکترونیک
|
||||
EditTree: 'ویرایش درخت'
|
||||
ListFiltered: 'لیست پالایش شده'
|
||||
ListFiltered: 'نمایش نتایج جستجو'
|
||||
MENUTITLE: 'ویرایش صفحه'
|
||||
NEWPAGE: '{pagetype} جدید'
|
||||
PAGENOTEXISTS: 'این صفحه وجود ندارد'
|
||||
PAGES: صفحات
|
||||
PAGES: 'وضعیت صفحه'
|
||||
PAGETYPEANYOPT: هر
|
||||
PAGETYPEOPT: 'نوع صفحه'
|
||||
PUBALLFUN: 'عملکرد "انتشار همه"'
|
||||
PageAdded: 'صفحه با موفقیت ایجاد شد'
|
||||
RESTORE: 'بازنشانی پیشنویس'
|
||||
ROLLBACK: 'بازگردانی به این نسخه'
|
||||
SAVE: ذخیره
|
||||
SAVEDRAFT: 'ذخیره پیشنویس'
|
||||
TabContent: محتوا
|
||||
TabHistory: تاریخچه
|
||||
TabSettings: تنظیمات
|
||||
TreeFiltered: 'لیست درختی پالایش شده'
|
||||
TreeFilteredClear: 'پاک کردن پالایش'
|
||||
TreeFiltered: 'نمایش نتایج جستجو'
|
||||
TreeFilteredClear: پاککردن
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'اعمال پالایش'
|
||||
CLEAR_FILTER: 'پاک کردن پالایش'
|
||||
APPLY_FILTER: جستجو
|
||||
CLEAR_FILTER: پاککردن
|
||||
RESET: تنظیم مجدد
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'افزودن صفحه'
|
||||
@ -122,6 +127,8 @@ fa_IR:
|
||||
SHOWUNPUBLISHED: 'نمایش نسخههای منتشر نشده'
|
||||
SHOWVERSION: 'نمایش ویرایش'
|
||||
VIEW: نمایش
|
||||
VIEWINGLATEST: 'در حال حاضر آخرین نسخه را مشاهده میکنید.'
|
||||
VIEWINGVERSION: 'در حال حاضر نسخه {version} را مشاهده میکنید.'
|
||||
CMSPageHistoryController_versions_ss:
|
||||
AUTHOR: ناشر
|
||||
NOTPUBLISHED: 'منتشر نشده'
|
||||
@ -143,11 +150,18 @@ fa_IR:
|
||||
FILTERDATEFROM: از
|
||||
FILTERDATEHEADING: تاریخ
|
||||
FILTERDATETO: تا
|
||||
FILTERLABELTEXT: محتوا
|
||||
FILTERLABELTEXT: جستجو
|
||||
PAGEFILTERDATEHEADING: 'آخرین ویرایش'
|
||||
CMSSettingsController:
|
||||
MENUTITLE: تنظیمات
|
||||
CMSSiteTreeFilter_ChangedPages:
|
||||
Title: 'صفحات تغییر یافته'
|
||||
CMSSiteTreeFilter_Search:
|
||||
Title: 'تمامی صفحات'
|
||||
CMSSiteTreeFilter_StatusDeletedPages:
|
||||
Title: 'صفحات بایگانی شده'
|
||||
CMSSiteTreeFilter_StatusDraftPages:
|
||||
Title: 'صفحات پیشنویس'
|
||||
ContentController:
|
||||
ARCHIVEDSITE: 'نسخه پیشنمایش'
|
||||
ARCHIVEDSITEFROM: 'سایت بایگانی شده از'
|
||||
@ -156,6 +170,9 @@ fa_IR:
|
||||
DRAFTSITE: 'سایت پیشنویس'
|
||||
Email: ایمیل
|
||||
INSTALL_SUCCESS: 'نصب موفقیتآمیز!'
|
||||
InstallFilesDeleted: 'فایلهای نصبی با موفقیت حذف شدند.'
|
||||
InstallSuccessCongratulations: 'سیلوراسترایپ با موفقیت نصب شد!'
|
||||
LOGGEDINAS: 'وارد شده تحت عنوان'
|
||||
LOGIN: ورود
|
||||
LOGOUT: 'خروج'
|
||||
NOTLOGGEDIN: 'وارد نشده'
|
||||
@ -175,9 +192,11 @@ fa_IR:
|
||||
410: '410 - از دست رفت'
|
||||
412: '412 - پیش شرط درست نبود'
|
||||
429: '429 - درخواستهای بسیار'
|
||||
500: '500 - خطای داخلی سرور'
|
||||
502: '502 - درگاه نادرست'
|
||||
CODE: 'شماره ایراد'
|
||||
DEFAULTERRORPAGETITLE: 'برگ پیدا نشد'
|
||||
DEFAULTSERVERERRORPAGECONTENT: '<p>با پوزش، در پردازش درخواست شما ایرادی بوجود آمد.</p>'
|
||||
DEFAULTSERVERERRORPAGETITLE: 'خطای سرور'
|
||||
PLURALNAME: 'صفحات خطا'
|
||||
SINGULARNAME: 'صفحهی خطا'
|
||||
@ -198,10 +217,14 @@ fa_IR:
|
||||
CONTENT_CATEGORY: 'دسترسی محتوا'
|
||||
PERMISSIONS_CATEGORY: 'مجوز دسترسی ها و وظایف'
|
||||
RedirectorPage:
|
||||
DESCRIPTION: 'به صفحهی داخلی دیگری هدایت میکند'
|
||||
HEADER: 'این صفحه کاربران را به صفحهای دیگر هدایت میکند'
|
||||
OTHERURL: 'نشانی تارگاه دیگر'
|
||||
PLURALNAME: 'صفحات هدایتگر'
|
||||
REDIRECTTO: 'بازگردانی به'
|
||||
REDIRECTTOEXTERNAL: 'یک تارگاه دیگر'
|
||||
REDIRECTTOPAGE: 'یک برگ روی تارگاه شما'
|
||||
SINGULARNAME: 'صفحه هدایتگر'
|
||||
YOURPAGE: 'برگ روی تارگاه شما'
|
||||
ReportAdmin:
|
||||
MENUTITLE: گزارشات
|
||||
@ -248,19 +271,24 @@ fa_IR:
|
||||
ACCESSHEADER: 'چه کسی بتواند این صفحه را مشاهده کنید ؟'
|
||||
ACCESSLOGGEDIN: 'کاربران وارد شده'
|
||||
ACCESSONLYTHESE: 'فقط این افراد (انتخاب از لیست)'
|
||||
ADDEDTODRAFTHELP: 'این صفحه تاکنون منتشر نشده است'
|
||||
ADDEDTODRAFTSHORT: پیشنویس
|
||||
ALLOWCOMMENTS: 'پذیرفتن نظرات در این صفحه ؟'
|
||||
ARCHIVEDPAGESHORT: بایگانی شده
|
||||
BUTTONARCHIVEDESC: 'عدم انتشار و ارسال به بایگانی'
|
||||
BUTTONCANCELDRAFT: 'لغو تغییرات پیشنویس'
|
||||
BUTTONPUBLISHED: منتشر شده
|
||||
BUTTONSAVED: ذخیره شده
|
||||
BUTTONSAVEPUBLISH: 'ذخیره و انتشار'
|
||||
BUTTONUNPUBLISH: عدم انتشار
|
||||
BUTTONUNPUBLISHDESC: 'حذف این صفحه از سایت منتشر شده'
|
||||
Comments: دیدگاهها
|
||||
Content: درون مایه
|
||||
DEFAULTABOUTTITLE: 'درباره ما'
|
||||
DEFAULTCONTACTTITLE: 'تماس با ما'
|
||||
DEFAULTHOMECONTENT: '<p>به سیلوراسترایپ خوش آمدید! این صفحه اصلی پیش فرض است. میتوانید این صفحه را با بازکردن <a href="admin/">سامانه مدیریت محتوا</a> ویرایش نمایید.</p><p>میتوانید به<a href="http://docs.silverstripe.org">مستندات توسعه دهندگان</a> دسترسی یابید، و یا <a href="http://www.silverstripe.org/learn/lessons">درس های سیلوراسترایپ</a> را آغاز نمایید.</p>'
|
||||
DEFAULTHOMETITLE: خانه
|
||||
DELETEDPAGEHELP: 'صفحه دیگر منتشر شده نیست'
|
||||
DELETEDPAGESHORT: حذف شده
|
||||
DEPENDENT_NOTE: 'صفحات زیر وابسته به این صفحه هستند. شامل صفحات مجازی، انتقال دهنده و صفحاتی با محتوای لینک'
|
||||
DependtPageColumnLinkType: 'نوع پیوند'
|
||||
@ -281,6 +309,7 @@ fa_IR:
|
||||
MENUTITLE: 'برچسب ناوبری'
|
||||
METADESC: 'توضیحات'
|
||||
METAEXTRA: 'متا تگهای اختصاصی'
|
||||
MODIFIEDONDRAFTHELP: 'صفحه دارای تغییرات منتشر نشده است'
|
||||
MODIFIEDONDRAFTSHORT: تغییر یافته
|
||||
MetadataToggle: متاداده
|
||||
MoreOptions: 'گزینههای بیشتر'
|
||||
@ -293,6 +322,8 @@ fa_IR:
|
||||
PARENTTYPE_ROOT: 'صفحهی سطح بالا'
|
||||
PLURALNAME: صفحات
|
||||
REMOVEDFROMDRAFTSHORT: 'حذف شده از پیشنویس'
|
||||
REMOVE_INSTALL_WARNING: 'هشدار: به دلایل امنیتی بایستی فایل install.php را از این سیلوراسترایپ نصب شده حذف نمایید.'
|
||||
REORGANISE_DESCRIPTION: 'تغییر ساختار سایت'
|
||||
SHOWINMENUS: 'نمایش در منوها؟'
|
||||
SHOWINSEARCH: 'نمایش در جستجو ؟'
|
||||
SINGULARNAME: صفحه
|
||||
@ -308,6 +339,7 @@ fa_IR:
|
||||
Visibility: پدیداری
|
||||
has_one_Parent: 'برگ مادر'
|
||||
many_many_BackLinkTracking: 'ردیابی بکلینک'
|
||||
many_many_ImageTracking: 'ردیابی تصویر'
|
||||
many_many_LinkTracking: 'ردیابی پیوند'
|
||||
SiteTreeFileExtension:
|
||||
EDIT: ویرایش
|
||||
@ -319,6 +351,7 @@ fa_IR:
|
||||
HAVEASKED: 'شما خواسته اید که درونمایه تارگاه ما را ببینید در'
|
||||
VirtualPage:
|
||||
CHOOSE: 'صفحه ارجاعی'
|
||||
DESCRIPTION: 'نمایش محتوای صفحه ی دیگر'
|
||||
EditLink: ویرایش
|
||||
HEADER: 'این یک صفحه مجازی است'
|
||||
PLURALNAME: 'صفحات مجازی'
|
||||
|
41
lang/fi.yml
41
lang/fi.yml
@ -61,17 +61,25 @@ fi:
|
||||
CMSAddPageController:
|
||||
Title: 'Lisää sivu'
|
||||
CMSBatchActions:
|
||||
ARCHIVE: Arkisto
|
||||
ARCHIVED_PAGES: 'Arkistoitu %d sivua'
|
||||
DELETED_DRAFT_PAGES: 'Poistettiin %d sivua luonnostelusivustolta, %d virhettä'
|
||||
DELETED_PAGES: 'Poistettiin %d sivua julkaistulta sivustolta, %d virhettä'
|
||||
DELETE_DRAFT_PAGES: 'Poista luonnossivustosta'
|
||||
DELETE_PAGES: 'Poista julkaistulta sivustolta'
|
||||
PUBLISHED_PAGES: 'Julkaistu %d sivua, %d epäonnistumista'
|
||||
PUBLISH_PAGES: Julkaise
|
||||
RESTORE: Palauta
|
||||
RESTORED_PAGES: 'Palautettu %d sivua'
|
||||
UNPUBLISHED_PAGES: 'Julkaisemattomat %d sivua'
|
||||
UNPUBLISH_PAGES: Poista näkyvistä
|
||||
CMSFileAddController:
|
||||
MENUTITLE: Tiedostot
|
||||
CMSMain:
|
||||
ACCESS: 'Pääsy ''{title}'' -osioon'
|
||||
ACCESS_HELP: 'Oikeuttaa näkemään osion, joka sisältää sivurakenteen ja sisällön. Katselu- ja muokkausoikeuksia voidaan käsitellä sivukohtaisten pudotusvalikoiden kautta, kuten myös erillisestä "Sisällön oikeudet"-kohdasta.'
|
||||
ARCHIVE: Arkistoi
|
||||
ARCHIVEDPAGE: 'Arkistoitiin sivu ''%s'''
|
||||
AddNew: 'Lisää uusi sivu'
|
||||
AddNewButton: 'Lisää uusi'
|
||||
AddPageRestriction: 'Huomio: Tietyt sivutyypit eivät ole sallittuja valitun sivutyypin alle.'
|
||||
@ -86,13 +94,10 @@ fi:
|
||||
DUPLICATEDWITHCHILDREN: '''{title}'' ja alasivu monistettiin onnistuneesti'
|
||||
EMAIL: Sähköposti
|
||||
EditTree: 'Muokkaa rakennepuuta'
|
||||
ListFiltered: 'Suodatettu lista.'
|
||||
MENUTITLE: 'Muokkaa sivua'
|
||||
NEWPAGE: 'Uusi {pagetype}'
|
||||
PAGENOTEXISTS: 'Tätä sivua ei ole olemassa'
|
||||
PAGES: Sivut
|
||||
PAGETYPEANYOPT: Mikä tahansa
|
||||
PAGETYPEOPT: 'Sivutyyppi'
|
||||
PUBALLCONFIRM: 'Julkaise jokainen sivu tällä sivustolla kopioiden luonnosten sisältö julkiselle sivustolle'
|
||||
PUBALLFUN: 'Julkaise kaikki -toiminto'
|
||||
PUBALLFUN2: "Painamalla tätä nappia, tekee se saman kuin kävisit painamassa joka sivulla \"julkaise\". Se on käytännöllinen, jos on tehnyt isoja muutoksia sisältöön, esim. kun sivusto luotiin."
|
||||
@ -101,7 +106,11 @@ fi:
|
||||
REMOVED: 'Poista ''{title}''{description} näkyvältä sivustolta'
|
||||
REMOVEDPAGE: '''{title}'' poistettiin julkaistulta sivustolta'
|
||||
REMOVEDPAGEFROMDRAFT: 'Poistettu ''%s'' luonnossivustolta'
|
||||
RESTORE: 'Palauta luonnos'
|
||||
RESTORED: '''{title}'' palautettiin onnistuneesti'
|
||||
RESTORE_DESC: 'Palauta arkistoitu versio luonnokseksi'
|
||||
RESTORE_TO_ROOT: 'Palauta luonnos päätasolle'
|
||||
RESTORE_TO_ROOT_DESC: 'Palauta arkistoitu versio luonnoksena päätason sivuksi'
|
||||
ROLLBACK: 'Siirry takaisin tähän versioon.'
|
||||
ROLLEDBACKPUBv2: 'Palattiin takaisin julkaistuun versioon'
|
||||
ROLLEDBACKVERSIONv2: 'Palautettu versioon #%d.'
|
||||
@ -110,10 +119,7 @@ fi:
|
||||
TabContent: Sisältö
|
||||
TabHistory: Historia
|
||||
TabSettings: Asetukset
|
||||
TreeFiltered: 'Suodatettu hakemistopuu.'
|
||||
TreeFilteredClear: 'Nollaa suodatin'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Suodata'
|
||||
RESET: Nollaa
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Lisää sivu'
|
||||
@ -145,19 +151,28 @@ fi:
|
||||
ListView: 'Listanäkymä'
|
||||
MENUTITLE: Sivut
|
||||
TreeView: 'Puunäkymä'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Monivalinta
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Suodata
|
||||
CMSSIteTreeFilter_PublishedPages:
|
||||
Title: 'Julkaistut sivut'
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: Alkaen
|
||||
FILTERDATEHEADING: Pvm
|
||||
FILTERDATETO: Päättyen
|
||||
FILTERLABELTEXT: Sisältö
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Asetukset
|
||||
CMSSiteTreeFilter_ChangedPages:
|
||||
Title: 'Muokatut sivut'
|
||||
CMSSiteTreeFilter_DeletedPages:
|
||||
Title: 'Kaikki sivut, sisältäen arkistoidut'
|
||||
CMSSiteTreeFilter_Search:
|
||||
Title: 'Kaikki sivut'
|
||||
CMSSiteTreeFilter_StatusDeletedPages:
|
||||
Title: 'Arkistoidut sivut'
|
||||
CMSSiteTreeFilter_StatusDraftPages:
|
||||
Title: 'Luonnossivut'
|
||||
CMSSiteTreeFilter_StatusRemovedFromDraftPages:
|
||||
Title: 'Näkyvillä, mutta poistettu luonnoksista'
|
||||
ContentControl:
|
||||
NOTEWONTBESHOWN: 'Huomaa: tätä viestiä ei näytetä vierailijoille'
|
||||
ContentController:
|
||||
@ -273,6 +288,7 @@ fi:
|
||||
SilverStripeNavigator:
|
||||
ARCHIVED: Arkistoitu
|
||||
SilverStripeNavigatorLink:
|
||||
ShareInstructions: 'Jaa tämä sivu kopioimalla ja liittämällä alapuolella oleva linkki'
|
||||
ShareLink: 'Jaa linkki'
|
||||
SilverStripeNavigatorLinkl:
|
||||
CloseLink: Sulje
|
||||
@ -301,6 +317,9 @@ fi:
|
||||
ADDEDTODRAFTSHORT: Luonnos
|
||||
ALLOWCOMMENTS: 'Sallitaanko kommenttien jättö tälle sivulle?'
|
||||
APPEARSVIRTUALPAGES: 'Tämä sisältö on käytössä myös virtuaalisivuilla osioissa {title}'
|
||||
ARCHIVEDPAGEHELP: 'Sivu poistettiin luonnoksista ja näkyviltä'
|
||||
ARCHIVEDPAGESHORT: Arkistoitu
|
||||
BUTTONARCHIVEDESC: 'Poista näkyviltä ja lähetä arkistoon'
|
||||
BUTTONCANCELDRAFT: 'Peruuta muutokset, jotka teit luonnokseen'
|
||||
BUTTONCANCELDRAFTDESC: 'Poista luonnoksesi ja palauta julkaistu sivu'
|
||||
BUTTONPUBLISHED: Julkaistu
|
||||
@ -314,6 +333,7 @@ fi:
|
||||
DEFAULTABOUTTITLE: 'Tietoa meistä'
|
||||
DEFAULTCONTACTCONTENT: '<p>Voit täyttää tämän sivun omalla sisällölläsi tai poistaa sen ja luoda omia sivujasi.<br /></p>'
|
||||
DEFAULTCONTACTTITLE: 'Ota yhteyttä meihin'
|
||||
DEFAULTHOMECONTENT: '<p>Tervetuloa käyttämään SilverStripe-järjestelmää! Tämä on oletus etusivu. Voit muokata tätä sivua avaamalla <a href="admin/">ylläpidon</a>.</p><p>Voit tutustua <a href="http://docs.silverstripe.org">kehittäjädokumentaatioon</a>, tai tutustua<a href="http://www.silverstripe.org/learn/lessons">SilverStripe-koulutusmateriaaliin</a>.</p>'
|
||||
DEFAULTHOMETITLE: Koti
|
||||
DELETEDPAGEHELP: 'Sivu ei ole enää julkaistuna'
|
||||
DELETEDPAGESHORT: Poistettu
|
||||
@ -384,6 +404,9 @@ fi:
|
||||
many_many_BackLinkTracking: 'Käänteinen seuranta'
|
||||
many_many_ImageTracking: 'Kuvan seuranta'
|
||||
many_many_LinkTracking: 'Linkin seuranta'
|
||||
SiteTreeFileExtension:
|
||||
BACKLINK_LIST_DESCRIPTION: 'Tämä listaus näyttää kaikki sivut, joissa tiedosto on lisätty WYSIWYG-editorin avulla.'
|
||||
EDIT: Muokkaa
|
||||
SiteTreeURLSegmentField:
|
||||
EMPTY: 'Anna URL-osoite tai napsauta peruuta'
|
||||
HelpChars: 'Erikoismerkit muunnetaan tai poistetaan automaattisesti.'
|
||||
|
10
lang/fr.yml
10
lang/fr.yml
@ -92,13 +92,10 @@ fr:
|
||||
DUPLICATEDWITHCHILDREN: '''{title}'' et ses enfants dupliqués avec succès'
|
||||
EMAIL: Email
|
||||
EditTree: 'Editer l''arbre'
|
||||
ListFiltered: 'Liste filtrée.'
|
||||
MENUTITLE: 'Éditer la page'
|
||||
NEWPAGE: 'Nouveau {pagetype}'
|
||||
PAGENOTEXISTS: 'Cette page n''existe pas'
|
||||
PAGES: Pages
|
||||
PAGETYPEANYOPT: Tous
|
||||
PAGETYPEOPT: 'Type de page'
|
||||
PUBALLCONFIRM: 'Publier chaque page du site en copiant le contenu à partir du site brouillon s''il vous plaît'
|
||||
PUBALLFUN: 'Fonctionnalité "Tout Publier"'
|
||||
PUBALLFUN2: "Presser ce boutton fera la même chose que d'aller sur chaque page et d'appuer sur \"publier\"."
|
||||
@ -116,11 +113,7 @@ fr:
|
||||
TabContent: Contenu
|
||||
TabHistory: Historique
|
||||
TabSettings: Paramètres
|
||||
TreeFiltered: 'Arbre filtré.'
|
||||
TreeFilteredClear: 'Réinitialiser le filtre.'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Appliquer le filtre'
|
||||
CLEAR_FILTER: 'Réinitialiser le filtre.'
|
||||
RESET: Réinitialiser
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Ajouter page'
|
||||
@ -152,8 +145,6 @@ fr:
|
||||
ListView: 'Liste'
|
||||
MENUTITLE: Pages
|
||||
TreeView: 'Arbre'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Choix multiple
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtrer
|
||||
CMSSIteTreeFilter_PublishedPages:
|
||||
@ -162,7 +153,6 @@ fr:
|
||||
FILTERDATEFROM: De
|
||||
FILTERDATEHEADING: Date
|
||||
FILTERDATETO: A
|
||||
FILTERLABELTEXT: Terme
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Paramètres
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -65,9 +65,7 @@ gl_ES:
|
||||
EMAIL: Correo-e
|
||||
MENUTITLE: 'Editar Páxina'
|
||||
PAGENOTEXISTS: 'Esta páxina non existe'
|
||||
PAGES: Páxinas
|
||||
PAGETYPEANYOPT: Ningún
|
||||
PAGETYPEOPT: 'Tipo de Páxina'
|
||||
PUBALLCONFIRM: 'Por favor publica toda a páxina no sitio, copiando o contido a contorna de produción'
|
||||
PUBALLFUN: 'Funcionalidade "Publicar Todo"'
|
||||
PUBALLFUN2: "Premendo este botón farás o equivalente de ir a todas as páxinas e premer en \"publicar\". \nIsto está pensado para facer un uso masivo despois das edicións de contido, por exemplo \ncando o sitio foi construído por primeira vez."
|
||||
@ -78,7 +76,6 @@ gl_ES:
|
||||
TabHistory: Historial
|
||||
TabSettings: Configuracións
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Aplicar Filtro'
|
||||
RESET: Reiniciar
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Engadir páxina'
|
||||
@ -106,8 +103,6 @@ gl_ES:
|
||||
ListView: 'Vista en Listado'
|
||||
MENUTITLE: Páxinas
|
||||
TreeView: 'Vista en Árbore'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Selección múltiple
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtro
|
||||
CMSSettingsController:
|
||||
|
@ -82,13 +82,10 @@ he_IL:
|
||||
DESCREMOVED: 'ו־{count} צאצאים'
|
||||
EMAIL: דוא״ל
|
||||
EditTree: 'עריכת העץ'
|
||||
ListFiltered: 'רשימה מסוננת.'
|
||||
MENUTITLE: 'עריכת העמוד'
|
||||
NEWPAGE: '{pagetype} חדש'
|
||||
PAGENOTEXISTS: 'עמוד זה אינו קיים במערכת'
|
||||
PAGES: עמודים
|
||||
PAGETYPEANYOPT: כלשהם
|
||||
PAGETYPEOPT: 'סוג העמוד'
|
||||
PUBALLCONFIRM: 'פרסום העמודים באתר, תוך העתקת כל הטיוטות לגרסה הסופית'
|
||||
PUBALLFUN: 'פרסום הכול'
|
||||
PUBALLFUN2: "לחיצה על כפתור זה מקבילה לאישור פרסום על כל העמודים באתר. הכפתור נועד לאישורים גורפים שבאו בעקבות עריכה נרחבת באתר דוגמת ההגדרות הראשוניות בעת יצירת אתר זה"
|
||||
@ -102,10 +99,7 @@ he_IL:
|
||||
TabContent: תוכן
|
||||
TabHistory: היסטורייה
|
||||
TabSettings: הגדרות
|
||||
TreeFiltered: 'עץ מסונן.'
|
||||
TreeFilteredClear: 'ביטול הסינון'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'החלת המסנן'
|
||||
RESET: איפוס
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'הוספת עמוד'
|
||||
@ -136,15 +130,12 @@ he_IL:
|
||||
ListView: 'תצוגת רשימה'
|
||||
MENUTITLE: עמודים
|
||||
TreeView: 'תצוגת עץ'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: בחירה מרובה
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: מסנן
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: מ־
|
||||
FILTERDATEHEADING: תאריך
|
||||
FILTERDATETO: עד
|
||||
FILTERLABELTEXT: תוכן
|
||||
CMSSettingsController:
|
||||
MENUTITLE: הגדרות
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -77,13 +77,10 @@ hu:
|
||||
DUPLICATEDWITHCHILDREN: '''{title}'' és oldalai sikeresen duplikálva'
|
||||
EMAIL: E-mail
|
||||
EditTree: 'Menüszerkeszet módosítása'
|
||||
ListFiltered: 'Szűrt lista'
|
||||
MENUTITLE: 'Oldal szerkesztése'
|
||||
NEWPAGE: 'Új {pagetype}'
|
||||
PAGENOTEXISTS: 'Ez az oldal nem létezik.'
|
||||
PAGES: Oldalak
|
||||
PAGETYPEANYOPT: Egyéb
|
||||
PAGETYPEOPT: 'Oldal típusa'
|
||||
PUBALLCONFIRM: 'Minden oldal publikálása, fázistartalmak kitevése'
|
||||
PUBALLFUN: '"Összes publikálása" funkció'
|
||||
PUBALLFUN2: "Ennek a gombnak a megnyomásával ugyanazt érheted el, mintha az összes oldalon megnyomnád a publikálás gombot. Akkor célszerű használni, ha a tartalom nagy változáson ment keresztül, mint például az oldal kezdeti felépítésénél."
|
||||
@ -101,9 +98,6 @@ hu:
|
||||
TabContent: Tartalom
|
||||
TabHistory: Történet
|
||||
TabSettings: Beállítások
|
||||
TreeFilteredClear: 'Szűrő törlése'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Szűrő alkalmazása'
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Oldal hozzáadása'
|
||||
ParentMode_child: 'Másik oldal alatt'
|
||||
@ -140,7 +134,6 @@ hu:
|
||||
FILTERDATEFROM: -tól
|
||||
FILTERDATEHEADING: Dátum
|
||||
FILTERDATETO: -ig
|
||||
FILTERLABELTEXT: Tartalom
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Beállítások
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -90,13 +90,10 @@ id:
|
||||
DUPLICATEDWITHCHILDREN: '''{title}'' dan turunannya berhasil diduplikasi'
|
||||
EMAIL: Surel
|
||||
EditTree: 'Edit Struktur'
|
||||
ListFiltered: 'Daftar tersaring'
|
||||
MENUTITLE: 'Edit Laman'
|
||||
NEWPAGE: '{pagetype} baru'
|
||||
PAGENOTEXISTS: 'Laman ini tidak ada'
|
||||
PAGES: Laman
|
||||
PAGETYPEANYOPT: Lain
|
||||
PAGETYPEOPT: 'Jenis Laman'
|
||||
PUBALLCONFIRM: 'Mohon terbitkan semua laman pada situs'
|
||||
PUBALLFUN: 'Fungsi "Terbitkan Semua"'
|
||||
PUBALLFUN2: "Menekan tombol ini sama dengan membuka semua laman dan menerbitkannya. Hal ini \n\t\t\t\tditujukan untuk dilakukan setelah ada banyak pengeditan konten, misalnya saat situs pertama kali \n\t\t\t\tdiinstal."
|
||||
@ -117,10 +114,7 @@ id:
|
||||
TabContent: Konten
|
||||
TabHistory: Sejarah
|
||||
TabSettings: Pengaturan
|
||||
TreeFiltered: 'Struktur tersaring.'
|
||||
TreeFilteredClear: 'Bersihkan saring'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Terapkan Saring'
|
||||
RESET: Reset
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Tambah laman'
|
||||
@ -152,15 +146,12 @@ id:
|
||||
ListView: 'Tampilan daftar'
|
||||
MENUTITLE: Laman
|
||||
TreeView: 'Tampilan Struktur'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Multi-pilihan
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Saring
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: Dari
|
||||
FILTERDATEHEADING: Tanggal
|
||||
FILTERDATETO: Ke
|
||||
FILTERLABELTEXT: Konten
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Pengaturan
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
10
lang/it.yml
10
lang/it.yml
@ -92,13 +92,10 @@ it:
|
||||
DUPLICATEDWITHCHILDREN: '''{title}'' e figlie duplicate con successo'
|
||||
EMAIL: Email
|
||||
EditTree: 'Modifica albero'
|
||||
ListFiltered: 'Lista filtrata.'
|
||||
MENUTITLE: 'Modifica pagina'
|
||||
NEWPAGE: 'Nuova {pagetype}'
|
||||
PAGENOTEXISTS: 'Questa pagina non esiste'
|
||||
PAGES: Pagine
|
||||
PAGETYPEANYOPT: Qualsiasi
|
||||
PAGETYPEOPT: 'Tipo di pagina'
|
||||
PUBALLCONFIRM: 'Per favore pubblica ogni singola pagina nel sito, copiando i contenuti da ''bozza'' a ''pubblicato''.'
|
||||
PUBALLFUN: 'Funzione "Pubblica tutto"'
|
||||
PUBALLFUN2: "Cliccare questo bottone equivale ad accedere a tutte le pagine e cliccare 'pubblica'. Tale bottone è inteso per essere utilizzato dopo aver apportato modifiche di massa ai contenuti, come nella prima pubblicazione del sito."
|
||||
@ -119,11 +116,7 @@ it:
|
||||
TabContent: Contenuto
|
||||
TabHistory: Archivio
|
||||
TabSettings: Impostazioni
|
||||
TreeFiltered: 'Albero filtrato.'
|
||||
TreeFilteredClear: 'Azzera filtro'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Applica filtro'
|
||||
CLEAR_FILTER: 'Azzera filtro'
|
||||
RESET: Azzera
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Aggiungi pagina'
|
||||
@ -155,8 +148,6 @@ it:
|
||||
ListView: 'Visualizzazione a lista'
|
||||
MENUTITLE: Pagine
|
||||
TreeView: 'Visualizzazione a albero'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Selezione multipla
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtra
|
||||
CMSSIteTreeFilter_PublishedPages:
|
||||
@ -165,7 +156,6 @@ it:
|
||||
FILTERDATEFROM: Da
|
||||
FILTERDATEHEADING: Data
|
||||
FILTERDATETO: A
|
||||
FILTERLABELTEXT: Contenuto
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Impostazioni
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -85,13 +85,10 @@ ja:
|
||||
DUPLICATEDWITHCHILDREN: '''{title}'' と子の複製が完了しました'
|
||||
EMAIL: Eメール
|
||||
EditTree: 'ツリーを編集'
|
||||
ListFiltered: 'フィルタリングされたリスト'
|
||||
MENUTITLE: 'ページを編集'
|
||||
NEWPAGE: '新しい {pagetype}'
|
||||
PAGENOTEXISTS: 'このページは存在しません'
|
||||
PAGES: ページ
|
||||
PAGETYPEANYOPT: 何でも
|
||||
PAGETYPEOPT: 'ページの種類'
|
||||
PUBALLCONFIRM: 'コンテンツのステージをコピーして配信するために、サイト内のすべてのページを公開してください'
|
||||
PUBALLFUN: '"すべてを公開" 機能'
|
||||
PUBALLFUN2: "このボタンを押すことはすべてのページへ移動して\"公開\"を押すことと同じです。この機能は、サイトをはじめて作成した時など多くのコンテンツの編集がある場合に利用されることを想定されています。"
|
||||
@ -109,10 +106,7 @@ ja:
|
||||
TabContent: コンテンツ
|
||||
TabHistory: 履歴
|
||||
TabSettings: 設定
|
||||
TreeFiltered: 'フィルタリングされたツリー'
|
||||
TreeFilteredClear: 'フィルタを解除'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'フィルタを適用'
|
||||
RESET: リセット
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'ページを追加'
|
||||
@ -144,15 +138,12 @@ ja:
|
||||
ListView: '一覧表示'
|
||||
MENUTITLE: ページ
|
||||
TreeView: 'ツリー表示'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: 複数選択
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: フィルタ
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: 開始日
|
||||
FILTERDATEHEADING: 日付
|
||||
FILTERDATETO: 終了日
|
||||
FILTERLABELTEXT: コンテンツ
|
||||
CMSSettingsController:
|
||||
MENUTITLE: 設定
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -86,13 +86,10 @@ ko:
|
||||
DUPLICATEDWITHCHILDREN: '''{title}'' 와 그 하위에대한 복제가 완료되었습니다'
|
||||
EMAIL: 이메일
|
||||
EditTree: '트리를 편집'
|
||||
ListFiltered: '필터링된 목록'
|
||||
MENUTITLE: '페이지 편집'
|
||||
NEWPAGE: '새로운 {pagetype}'
|
||||
PAGENOTEXISTS: '이 페이지는 존재하지 않습니다'
|
||||
PAGES: 페이지
|
||||
PAGETYPEANYOPT: 아무거나
|
||||
PAGETYPEOPT: '페이지 유형'
|
||||
PUBALLCONFIRM: '콘텐츠의 스테이지를 복사하고 전달하기 위해 사이트의 모든 페이지를 공개합니다'
|
||||
PUBALLFUN: ' "모두 공개"기능'
|
||||
PUBALLFUN2: "이 버튼을 누르면 모든 페이지로 이동하고 \"공개\"를 눌러도 됩니다. 이 기능은 사이트를 처음 만들 때 등 많은 컨텐츠를 편집하는 경우에 이용될 것같습니다."
|
||||
@ -110,10 +107,7 @@ ko:
|
||||
TabContent: 컨텐츠
|
||||
TabHistory: 기록
|
||||
TabSettings: 설정
|
||||
TreeFiltered: '필터링된 트리'
|
||||
TreeFilteredClear: '필터 제거'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: '필터링'
|
||||
RESET: 리셋
|
||||
CMSPageAddController:
|
||||
MENUTITLE: '페이지 추가'
|
||||
@ -145,15 +139,12 @@ ko:
|
||||
ListView: '목록보기'
|
||||
MENUTITLE: 페이지
|
||||
TreeView: '트리보기'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: 복수선택
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: 필터
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: 시작일
|
||||
FILTERDATEHEADING: 날짜
|
||||
FILTERDATETO: 종료일
|
||||
FILTERLABELTEXT: 컨텐츠
|
||||
CMSSettingsController:
|
||||
MENUTITLE: 설정
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
29
lang/lt.yml
29
lang/lt.yml
@ -94,11 +94,11 @@ lt:
|
||||
DUPLICATEDWITHCHILDREN: 'Puslapis ''{title}'' , bei jo vaikai kopijuoti sėkmingai'
|
||||
EMAIL: E. paštas
|
||||
EditTree: 'Redaguoti medį'
|
||||
ListFiltered: 'Filtruotas sąrašas.'
|
||||
ListFiltered: 'Rodomi paieškos rezultatai'
|
||||
MENUTITLE: 'Redaguoti puslapį'
|
||||
NEWPAGE: 'Naujas {pagetype}'
|
||||
PAGENOTEXISTS: 'Šis puslapis neegzistuoja'
|
||||
PAGES: Puslapiai
|
||||
PAGES: 'Puslapio būsena'
|
||||
PAGETYPEANYOPT: Bet koks
|
||||
PAGETYPEOPT: 'Puslapio tipas'
|
||||
PUBALLCONFIRM: 'Prašome publikuoti kiekvieną svetainės puslapį, kopijuojant turinį į svetainę'
|
||||
@ -109,7 +109,7 @@ lt:
|
||||
REMOVED: 'Iš publikuojamos svetainės ištrintas ''{title}''{description}'
|
||||
REMOVEDPAGE: 'Iš publikuojamos svetainės pašalintas ''{title}'''
|
||||
REMOVEDPAGEFROMDRAFT: '''%s'' pašalintas iš juodraštinės svetainės'
|
||||
RESTORE: Atstatyti
|
||||
RESTORE: 'Atstatyti'
|
||||
RESTORED: '''{title}'' atstatytas sėkmingai'
|
||||
RESTORE_DESC: 'Atstatyti suarchyvuotą versiją kaip juodraštinį puslapį'
|
||||
RESTORE_TO_ROOT: 'Atstatyti juodraštį aukščiausiame lygyje'
|
||||
@ -122,11 +122,11 @@ lt:
|
||||
TabContent: Turinys
|
||||
TabHistory: Istorija
|
||||
TabSettings: Nustatymai
|
||||
TreeFiltered: 'Filtruotas medis.'
|
||||
TreeFilteredClear: 'Išvalyti filtrą'
|
||||
TreeFiltered: 'Rodomi paieškos rezultatai'
|
||||
TreeFilteredClear: Išvalyti filtrą
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Vykdyti'
|
||||
CLEAR_FILTER: 'Išvalyti filtrą'
|
||||
APPLY_FILTER: Ieškoti
|
||||
CLEAR_FILTER: Išvalyti filtrą
|
||||
RESET: Atstatyti
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Pridėti puslapį'
|
||||
@ -159,7 +159,7 @@ lt:
|
||||
MENUTITLE: Puslapiai
|
||||
TreeView: 'Medžio rodinys'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Daugybinis pasirinkimas
|
||||
MULTISELECT: 'Daugybinis pasirinkimas'
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtras
|
||||
CMSSIteTreeFilter_PublishedPages:
|
||||
@ -168,19 +168,20 @@ lt:
|
||||
FILTERDATEFROM: Nuo
|
||||
FILTERDATEHEADING: Data
|
||||
FILTERDATETO: Iki
|
||||
FILTERLABELTEXT: Turinys
|
||||
FILTERLABELTEXT: Ieškoti
|
||||
PAGEFILTERDATEHEADING: 'Redaguota'
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Nustatymai
|
||||
CMSSiteTreeFilter_ChangedPages:
|
||||
Title: 'Ištrinti puslapiai'
|
||||
Title: 'Pakeisti puslapiai'
|
||||
CMSSiteTreeFilter_DeletedPages:
|
||||
Title: 'Visi puslapiai, kartu su suarchyvuotais'
|
||||
Title: 'Visi puslapiai, taip pat ir archyvuoti'
|
||||
CMSSiteTreeFilter_Search:
|
||||
Title: 'Visi puslapiai'
|
||||
CMSSiteTreeFilter_StatusDeletedPages:
|
||||
Title: 'Ištrinti puslapiai'
|
||||
Title: 'Archyvuoti puslapiai'
|
||||
CMSSiteTreeFilter_StatusDraftPages:
|
||||
Title: 'Juodraštiniai nepublikuoti puslapiai'
|
||||
Title: 'Juodraštiniai puslapiai'
|
||||
CMSSiteTreeFilter_StatusRemovedFromDraftPages:
|
||||
Title: 'Publikuotas, bet pašalintas iš juodraščių'
|
||||
ContentControl:
|
||||
@ -298,7 +299,7 @@ lt:
|
||||
SilverStripeNavigator:
|
||||
ARCHIVED: Archyvuota
|
||||
SilverStripeNavigatorLink:
|
||||
ShareInstructions: 'Norėdami pasidalinti šiuo puslapiu, nukopijuokite ir įdėkite nuorodą žemiau.'
|
||||
ShareInstructions: 'Norėdami pasidalinti šiuo puslapiu, kopijuokite žemiau esančią nuorodą.'
|
||||
ShareLink: 'Dalintis nuoroda'
|
||||
SilverStripeNavigatorLinkl:
|
||||
CloseLink: Uždaryti
|
||||
|
@ -85,13 +85,10 @@ mi:
|
||||
DUPLICATEDWITHCHILDREN: 'I momoho te tārite i ''{title}'' me ngā tamariki'
|
||||
EMAIL: Īmēra
|
||||
EditTree: 'Whakatika Rākau'
|
||||
ListFiltered: 'Rārangi kua tātaritia'
|
||||
MENUTITLE: 'Whakatika Whārangi'
|
||||
NEWPAGE: '{pagetype} hou'
|
||||
PAGENOTEXISTS: 'KIāore tēnei whārangi e tīari'
|
||||
PAGES: Ngā Whārangi
|
||||
PAGETYPEANYOPT: Ko tētahi
|
||||
PAGETYPEOPT: 'Momo wharangi '
|
||||
PUBALLCONFIRM: 'Whakaputaina koa i ia whārangi i te pae me te tārua i te content stage kia ora ai.'
|
||||
PUBALLFUN: 'Te taumahinga "Whakaputaina Katoatia"'
|
||||
PUBALLFUN2: "Ko te pēhi i tēnei pātene he taurite ki te haere ki ia whārangi me te pēhi i te \"whakaputaina\". Ko te tikanga, ka whakamahia tēnei pātene i muri ake i te mahi whakatikatika kua maha ngā tinihanga, pērā i te wā i hangaia tuatahi mai te pae. "
|
||||
@ -109,10 +106,7 @@ mi:
|
||||
TabContent: Ngā Ihirangi
|
||||
TabHistory: Hītori
|
||||
TabSettings: Ngā Tautuhinga
|
||||
TreeFiltered: 'Rākau kua tātaritia'
|
||||
TreeFilteredClear: 'Ūkui tātari'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Hoatu Tātari'
|
||||
RESET: Tautuhi Anō
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Tāpiri whārangi'
|
||||
@ -144,15 +138,12 @@ mi:
|
||||
ListView: 'Tirohanga Rārangi'
|
||||
MENUTITLE: Ngā Whārangi
|
||||
TreeView: 'Tirohanga Rākau'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Tīpakonga-maha
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Tātari
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: Mai i
|
||||
FILTERDATEHEADING: Rā
|
||||
FILTERDATETO: Ki
|
||||
FILTERLABELTEXT: Ngā Ihirangi
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Ngā Tautuhinga
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
10
lang/nb.yml
10
lang/nb.yml
@ -92,13 +92,10 @@ nb:
|
||||
DUPLICATEDWITHCHILDREN: 'Vellykket duplisering av "{title}" og undersider.'
|
||||
EMAIL: Epost
|
||||
EditTree: 'Rediger treet'
|
||||
ListFiltered: 'Filtrerte liste.'
|
||||
MENUTITLE: 'Rediger side'
|
||||
NEWPAGE: 'Ny {pagetype}'
|
||||
PAGENOTEXISTS: 'Siden eksisterer ikke'
|
||||
PAGES: Sider
|
||||
PAGETYPEANYOPT: Hvilken som helst
|
||||
PAGETYPEOPT: 'Sidetype'
|
||||
PUBALLCONFIRM: 'Vennligst publiser hver eneste side på nettstedet, og kopier innhold til aktivt nettsted'
|
||||
PUBALLFUN: 'Funksjonalitet for "Publiser alle"'
|
||||
PUBALLFUN2: "Å trykke på denne knappen er det samme som å gå på hver side og trykke \"publiser\". Den er ment for å bli brukt etter at det har blitt gjort massive endringer av innholdet, som for eksempel når siden først ble laget."
|
||||
@ -119,11 +116,7 @@ nb:
|
||||
TabContent: Innhold
|
||||
TabHistory: Historikk
|
||||
TabSettings: Innstillinger
|
||||
TreeFiltered: 'Filtrerte treet.'
|
||||
TreeFilteredClear: 'Fjern filtrering'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Aktiver filter'
|
||||
CLEAR_FILTER: 'Fjern filter'
|
||||
RESET: Tilbakestill
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Legg til side'
|
||||
@ -155,8 +148,6 @@ nb:
|
||||
ListView: 'Listevisning'
|
||||
MENUTITLE: Sider
|
||||
TreeView: 'Trevisning'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Flervalg
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filter
|
||||
CMSSIteTreeFilter_PublishedPages:
|
||||
@ -165,7 +156,6 @@ nb:
|
||||
FILTERDATEFROM: Fra
|
||||
FILTERDATEHEADING: Dato
|
||||
FILTERDATETO: Til
|
||||
FILTERLABELTEXT: Innhold
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Innstillinger
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
11
lang/nl.yml
11
lang/nl.yml
@ -61,6 +61,7 @@ nl:
|
||||
CMSAddPageController:
|
||||
Title: 'Pagina toevoegen'
|
||||
CMSBatchActions:
|
||||
ARCHIVE: Archief
|
||||
DELETED_DRAFT_PAGES: '%d pagina''s van de concept-site verwijderd, %d mislukt'
|
||||
DELETED_PAGES: '%d pagina''s van de gepubliceerde site verwijderd, %d mislukt'
|
||||
DELETE_DRAFT_PAGES: 'Verwijder van concept site'
|
||||
@ -72,6 +73,7 @@ nl:
|
||||
CMSMain:
|
||||
ACCESS: 'Toegang tot het ''{title}'' gedeelte'
|
||||
ACCESS_HELP: 'Bevoegdheid om paginastructuur en inhoud te bekijken. Bekijk- en bewerkingstoestemmingen kunnen worden toegekend met pagina-specifieke menu''s en het aparte "Inhoudsmachtigingen".'
|
||||
ARCHIVE: Archief
|
||||
AddNew: 'Voeg nieuwe pagina toe'
|
||||
AddNewButton: 'Nieuw'
|
||||
AddPageRestriction: 'Opmerking: Sommige paginatypes zijn niet toegestaan voor deze selectie'
|
||||
@ -86,13 +88,10 @@ nl:
|
||||
DUPLICATEDWITHCHILDREN: '''{title}'' en onderliggende items met succes gedupliceerd'
|
||||
EMAIL: E-mail
|
||||
EditTree: 'Paginastructuur aanpassen'
|
||||
ListFiltered: 'Gefilterde lijst.'
|
||||
MENUTITLE: 'Wijzig pagina'
|
||||
NEWPAGE: 'Nieuwe {pagetype}'
|
||||
PAGENOTEXISTS: 'Deze pagina bestaat niet'
|
||||
PAGES: Pagina 's
|
||||
PAGETYPEANYOPT: Elke
|
||||
PAGETYPEOPT: 'Paginatype'
|
||||
PUBALLCONFIRM: 'Publiceer elke pagina van de site: dit kopieert de inhoud van de concept site naar de live site'
|
||||
PUBALLFUN: '"Publiceer alles" functionaliteit'
|
||||
PUBALLFUN2: "Op deze knop klikken heeft hetzelfde resultaat als bij elke pagina's op \"Publiceer\" te klikken. Het is bedoeld om te gebruiken wanneer er erg grote inhoudsaanpassingen gebeurd zijn, bijvoorbeeld wanneer een nieuwe site voor het eerst gebouwd wordt."
|
||||
@ -110,10 +109,7 @@ nl:
|
||||
TabContent: Inhoud
|
||||
TabHistory: Geschiedenis
|
||||
TabSettings: Instellingen
|
||||
TreeFiltered: 'Gefilterde boomstructuur.'
|
||||
TreeFilteredClear: 'Filter leegmaken'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Filter toepassen'
|
||||
RESET: Reset
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Pagina toevoegen'
|
||||
@ -145,15 +141,12 @@ nl:
|
||||
ListView: 'Lijstweergave'
|
||||
MENUTITLE: Pagina's
|
||||
TreeView: 'Hierarchische weergave'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Meervoudige selectie
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filteren
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: Van
|
||||
FILTERDATEHEADING: Datum
|
||||
FILTERDATETO: Tot
|
||||
FILTERLABELTEXT: Inhoud
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Instellingen
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -86,13 +86,10 @@ pl:
|
||||
DUPLICATEDWITHCHILDREN: 'Duplikowanie ''{title}'' oraz podstron zakończone powodzeniem'
|
||||
EMAIL: Email
|
||||
EditTree: 'Edytuj drzewko'
|
||||
ListFiltered: 'Filtrowana lista.'
|
||||
MENUTITLE: 'Edytuj stronę'
|
||||
NEWPAGE: 'Nowa {pagetype}'
|
||||
PAGENOTEXISTS: 'Ta strona nie istnieje'
|
||||
PAGES: Strony
|
||||
PAGETYPEANYOPT: Jakikolwiek
|
||||
PAGETYPEOPT: 'Rodzaj strony'
|
||||
PUBALLCONFIRM: 'Opublikuj każdą stronę w witrynie'
|
||||
PUBALLFUN: '"Opublikuj wszystko"'
|
||||
PUBALLFUN2: "Naciśnięcie tego przycisku spowoduje przejście po wszystkich stronach i opublikowanie ich. Zazwyczaj używa się tego, gdy w witrynie było bardzo dużo zmian, na przykład gdy witryna została utworzona."
|
||||
@ -110,10 +107,7 @@ pl:
|
||||
TabContent: Zawartość
|
||||
TabHistory: Historia
|
||||
TabSettings: Opcje
|
||||
TreeFiltered: 'Filtruj drzewko'
|
||||
TreeFilteredClear: 'Wyczyść filtr'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Zastosuj filtr'
|
||||
RESET: Resetuj
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Dodaj stronę'
|
||||
@ -145,15 +139,12 @@ pl:
|
||||
ListView: 'Widok listy'
|
||||
MENUTITLE: Strony
|
||||
TreeView: 'Widok drzewa'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Multi wybór
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtr
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: Od
|
||||
FILTERDATEHEADING: Data
|
||||
FILTERDATETO: Do
|
||||
FILTERLABELTEXT: Zawartość
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Ustawienia
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -81,13 +81,10 @@ pt:
|
||||
DUPLICATED: 'Página ''{title}'' duplicada com sucesso'
|
||||
DUPLICATEDWITHCHILDREN: 'Página ''{title}'' e filhos duplicados com sucesso'
|
||||
EditTree: 'Editar árvore'
|
||||
ListFiltered: 'Lista filtrada.'
|
||||
MENUTITLE: 'Editar página'
|
||||
NEWPAGE: 'Nova {pagetype}'
|
||||
PAGENOTEXISTS: 'Esta página não existe'
|
||||
PAGES: Páginas
|
||||
PAGETYPEANYOPT: Qualquer
|
||||
PAGETYPEOPT: 'Tipo de Página'
|
||||
PUBALLCONFIRM: 'Por favor, publique cada uma das páginas do site, copiando o conteúdo para a versão publicada'
|
||||
PUBALLFUN: 'funcionalidade "Publicar tudo"'
|
||||
PUBALLFUN2: "Ao pressionar este botão fará o equivalente a ir a cada página e pressionar o botão \"publicar\". É aconselhado a sua utilização quando existem muitas edições de diferentes páginas ou então quando o site se encontra disponível para ser publicado para o público em geral."
|
||||
@ -104,10 +101,7 @@ pt:
|
||||
TabContent: Conteúdo
|
||||
TabHistory: Histórico
|
||||
TabSettings: Configurações
|
||||
TreeFiltered: 'Filtrar árvore'
|
||||
TreeFilteredClear: 'Remover filtro'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Aplicar filtro'
|
||||
RESET: Redefinir
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Adicionar página'
|
||||
@ -139,15 +133,12 @@ pt:
|
||||
ListView: 'Vista em lista'
|
||||
MENUTITLE: Páginas
|
||||
TreeView: 'Vista em árvore'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Multi-selecção
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtrar
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: De
|
||||
FILTERDATEHEADING: Data
|
||||
FILTERDATETO: Para
|
||||
FILTERLABELTEXT: Conteúdo
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Configurações
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -85,13 +85,10 @@ ro:
|
||||
DUPLICATEDWITHCHILDREN: '''{title}'' și descendenții săi duplicați cu succes'
|
||||
EMAIL: E-mail
|
||||
EditTree: 'Editare structură arbore'
|
||||
ListFiltered: 'Listă filtrată'
|
||||
MENUTITLE: 'Editează pagina'
|
||||
NEWPAGE: '{pagetype} nouă'
|
||||
PAGENOTEXISTS: 'Această pagină nu există'
|
||||
PAGES: Pagini
|
||||
PAGETYPEANYOPT: Oricare
|
||||
PAGETYPEOPT: 'Tip pagină'
|
||||
PUBALLCONFIRM: 'Vă rugăm publicați toate paginile din site, copiind conținutul curent în live'
|
||||
PUBALLFUN: 'Funcționalitatea "Publică Tot" '
|
||||
PUBALLFUN2: "Apăsând acest buton se v-a face echivalentul apăsării pe fiecare pagină a butonului \"publicare\". Este\n\t\t\t\tintenționat să fie folosit după ce s-au făcut editări masive de conținut, precum când site-ul a fost\n\t\t\t\tprima oară construit."
|
||||
@ -109,10 +106,7 @@ ro:
|
||||
TabContent: Conținut
|
||||
TabHistory: Istorie
|
||||
TabSettings: Setări
|
||||
TreeFiltered: 'Arbore filtrat'
|
||||
TreeFilteredClear: 'Șterge filtru'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Aplică Filtrul'
|
||||
RESET: Resetează
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Adaugă pagină'
|
||||
@ -144,15 +138,12 @@ ro:
|
||||
ListView: 'View listă'
|
||||
MENUTITLE: Pagini
|
||||
TreeView: 'View Arbore'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Selecție multiplă
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtru
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: De la
|
||||
FILTERDATEHEADING: Data
|
||||
FILTERDATETO: La
|
||||
FILTERLABELTEXT: Conținut
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Setări
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -86,13 +86,10 @@ ru:
|
||||
DUPLICATEDWITHCHILDREN: 'Копия ''{title}'' и дочерних элементов создана'
|
||||
EMAIL: Email
|
||||
EditTree: 'Редактировать дерево'
|
||||
ListFiltered: 'Отфильтрованный список.'
|
||||
MENUTITLE: 'Править страницу'
|
||||
NEWPAGE: 'Новая {pagetype}'
|
||||
PAGENOTEXISTS: 'Страница не существует'
|
||||
PAGES: Страницы
|
||||
PAGETYPEANYOPT: Любой
|
||||
PAGETYPEOPT: 'Тип страницы'
|
||||
PUBALLCONFIRM: 'Пожалуйста, опубликуйте каждую страницу сайта, перенося содержимое из чернового режима в опубликованный'
|
||||
PUBALLFUN: 'Функция "Опубликовать все"'
|
||||
PUBALLFUN2: "Нажатие этой кнопки выполнит ту же функцию, что и нажатие кнопки \"Опубликовать\" для каждой отдельной страницы. Данная функция предназначена для использования после значительных изменений содержимого, например, в момент создания нового сайта."
|
||||
@ -110,10 +107,7 @@ ru:
|
||||
TabContent: Содержимое
|
||||
TabHistory: История
|
||||
TabSettings: Настройки
|
||||
TreeFiltered: 'Отфильтрованное дерево.'
|
||||
TreeFilteredClear: 'Сбросить фильтр'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Применить фильтр'
|
||||
RESET: Восстановить
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Добавить страницу'
|
||||
@ -145,15 +139,12 @@ ru:
|
||||
ListView: 'Обзор списка'
|
||||
MENUTITLE: Страницы
|
||||
TreeView: 'Обзор дерева'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Множественный выбор
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Фильтр
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: От
|
||||
FILTERDATEHEADING: Дата
|
||||
FILTERDATETO: До
|
||||
FILTERLABELTEXT: Содержимое
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Настройки
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
35
lang/sk.yml
35
lang/sk.yml
@ -94,11 +94,11 @@ sk:
|
||||
DUPLICATEDWITHCHILDREN: 'Duplikované ''{title}'' a potomkovia úspešne'
|
||||
EMAIL: Pošli e-mailom
|
||||
EditTree: 'Editovať strom'
|
||||
ListFiltered: 'Filtrovaný zoznam.'
|
||||
ListFiltered: 'Zobrazenie výsledkov vyhľadávania.'
|
||||
MENUTITLE: 'Upraviť stránku'
|
||||
NEWPAGE: 'Nová {pagetype}'
|
||||
PAGENOTEXISTS: 'Táto stránka neexistuje.'
|
||||
PAGES: Stránky
|
||||
PAGES: 'Stav stránky'
|
||||
PAGETYPEANYOPT: Akákoľvek
|
||||
PAGETYPEOPT: 'Typ stránky'
|
||||
PUBALLCONFIRM: 'Prosím, zverejnite všetky stránky webu, zkopírovaním obsahu na verejné'
|
||||
@ -109,7 +109,7 @@ sk:
|
||||
REMOVED: 'Smazané ''{title}''{description} z webu'
|
||||
REMOVEDPAGE: 'Smazané ''{title}'' z verejného webu'
|
||||
REMOVEDPAGEFROMDRAFT: 'Odstránené ''%s'' z konceptu webu'
|
||||
RESTORE: Obnoviť
|
||||
RESTORE: 'Obnoviť koncept'
|
||||
RESTORED: 'Obnovené ''{title}'' úspešne'
|
||||
RESTORE_DESC: 'Obnoviť archivovanú verziu na koncept'
|
||||
RESTORE_TO_ROOT: 'Obnoviť koncept na najvyšiu úroveň'
|
||||
@ -122,11 +122,11 @@ sk:
|
||||
TabContent: Obsah
|
||||
TabHistory: História
|
||||
TabSettings: Nastavenia
|
||||
TreeFiltered: 'Filtrovaný strom.'
|
||||
TreeFilteredClear: 'Vyčistiť filter'
|
||||
TreeFiltered: 'Zobrazenie výsledkov vyhľadávania.'
|
||||
TreeFilteredClear: Vyčistiť
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Použiť filter'
|
||||
CLEAR_FILTER: 'Vyčistiť filter'
|
||||
APPLY_FILTER: Hľadať
|
||||
CLEAR_FILTER: Vyčistiť
|
||||
RESET: Reset
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Pridať stránku'
|
||||
@ -159,7 +159,7 @@ sk:
|
||||
MENUTITLE: Stránky
|
||||
TreeView: 'Zobraziť strom'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Multi výber
|
||||
MULTISELECT: 'Dávkové akcie'
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filtrovať
|
||||
CMSSIteTreeFilter_PublishedPages:
|
||||
@ -168,19 +168,20 @@ sk:
|
||||
FILTERDATEFROM: Od
|
||||
FILTERDATEHEADING: Dátum
|
||||
FILTERDATETO: Do
|
||||
FILTERLABELTEXT: Obsah
|
||||
FILTERLABELTEXT: Hľadať
|
||||
PAGEFILTERDATEHEADING: 'Posledne zmenené'
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Nastavenia
|
||||
CMSSiteTreeFilter_ChangedPages:
|
||||
Title: 'Zmenené stránky'
|
||||
CMSSiteTreeFilter_DeletedPages:
|
||||
Title: 'Všetky stránky, vrátane vymazaných'
|
||||
Title: 'Všetky stránky, vrátane archivovaných'
|
||||
CMSSiteTreeFilter_Search:
|
||||
Title: 'Všechny stránky'
|
||||
CMSSiteTreeFilter_StatusDeletedPages:
|
||||
Title: 'Zmazané stránky'
|
||||
Title: 'Archivované stránky'
|
||||
CMSSiteTreeFilter_StatusDraftPages:
|
||||
Title: 'Koncept nezverejnených stránok'
|
||||
Title: 'Konceptové stránky'
|
||||
CMSSiteTreeFilter_StatusRemovedFromDraftPages:
|
||||
Title: 'Živé, ale odstránené z konceptu'
|
||||
ContentControl:
|
||||
@ -291,14 +292,14 @@ sk:
|
||||
BrokenLinksGroupTitle: 'Výkazy porušených odkazov'
|
||||
ContentGroupTitle: 'Výkazy obsahu'
|
||||
EMPTYPAGES: 'Prázdne stránky'
|
||||
LAST2WEEKS: 'Stránky upravené počaas posledných 2 týždňov'
|
||||
LAST2WEEKS: 'Stránky upravené počas posledných 2 týždňov'
|
||||
OtherGroupTitle: Ostatné
|
||||
ParameterLiveCheckbox: 'Skontolovať živú stránku'
|
||||
REPEMPTY: '{title} výkaz je prázdny.'
|
||||
SilverStripeNavigator:
|
||||
ARCHIVED: Archivované
|
||||
SilverStripeNavigatorLink:
|
||||
ShareInstructions: 'Pre zdielanie tejto stránky, skopírujte a vložte odkaz nižšie.'
|
||||
ShareInstructions: 'Pre zdielanie stránky, zkopírujte a prilepte odkaz dolu.'
|
||||
ShareLink: 'Zdieľať odkaz'
|
||||
SilverStripeNavigatorLinkl:
|
||||
CloseLink: Zavrieť
|
||||
@ -330,7 +331,7 @@ sk:
|
||||
ARCHIVEDPAGEHELP: 'Stránka je odstránená z konceptu a z webu'
|
||||
ARCHIVEDPAGESHORT: Archivované
|
||||
BUTTONARCHIVEDESC: 'Nezverejniť a odoslať do archívu'
|
||||
BUTTONCANCELDRAFT: 'Zrušiť zmeny v konceptu'
|
||||
BUTTONCANCELDRAFT: 'Zrušiť zmeny v koncepte'
|
||||
BUTTONCANCELDRAFTDESC: 'Vymazať návrh a vrátiť sa k aktuálne zverejnenej stránke'
|
||||
BUTTONPUBLISHED: Publikované
|
||||
BUTTONSAVED: Uložené
|
||||
@ -348,11 +349,11 @@ sk:
|
||||
DELETEDPAGEHELP: 'Stránka už nie je viacej zverejnená'
|
||||
DELETEDPAGESHORT: Smazané
|
||||
DEPENDENT_NOTE: 'Nasledujúce stránky sú závislé na tejto stránke. To zahŕňa virtuálne stránky, presmerovacie stránky a stránky s odkazmi obsahu.'
|
||||
DESCRIPTION: 'Obecný obsah stránky'
|
||||
DESCRIPTION: 'Obyčajná jednoduchá stránka s vlastným obsahom.'
|
||||
DependtPageColumnLinkType: 'Typ odkazu'
|
||||
DependtPageColumnURL: URL
|
||||
EDITANYONE: 'Ktokoľvek kto sa môže prihlásiť do CMS'
|
||||
EDITHEADER: 'Kto môže editovať túto stránnku?'
|
||||
EDITHEADER: 'Kto môže editovať túto stránku?'
|
||||
EDITONLYTHESE: 'Iba títo ľudia (vyberte zo zoznamu)'
|
||||
EDITORGROUPS: 'Skupiny upravovateľov'
|
||||
EDIT_ALL_DESCRIPTION: 'Upraviť akúkoľvek stránku'
|
||||
|
@ -72,8 +72,6 @@ sl:
|
||||
MENUTITLE: 'Uredi stran'
|
||||
NEWPAGE: 'Nov {pagetype}'
|
||||
PAGENOTEXISTS: 'Stran na tem naslovu ne obstaja'
|
||||
PAGES: Strani
|
||||
PAGETYPEOPT: 'Tip strani'
|
||||
PUBALLCONFIRM: 'Objavite vse strani spletnega mesta (vsebine bodo prekopirane v "objavljeno" različico spletnega mesta).'
|
||||
PUBALLFUN: 'Funkcionalnost "Objavi vse"'
|
||||
PUBALLFUN2: "Rezultat klika tega gumba bo enak, kot če bi kliknili \"Objavi\" na vsaki posamezni strani. Namenjen je uporabi pri večjih spremembah vsebine, kot na primer ob začetku postavljanja spletnega mesta."
|
||||
|
@ -85,13 +85,10 @@ sr:
|
||||
DUPLICATEDWITHCHILDREN: '''{title}'' и деца успешно дуплирани'
|
||||
EMAIL: Е-пошта
|
||||
EditTree: 'Измени стабло'
|
||||
ListFiltered: 'Филтрирана листа.'
|
||||
MENUTITLE: 'Измени страницу'
|
||||
NEWPAGE: 'Нова {pagetype}'
|
||||
PAGENOTEXISTS: 'Ова страница не постоји'
|
||||
PAGES: Странице
|
||||
PAGETYPEANYOPT: Било која
|
||||
PAGETYPEOPT: 'Тип странице'
|
||||
PUBALLCONFIRM: 'Објавите сваку страну на овом сајту копирањем садржај на жив сајт.'
|
||||
PUBALLFUN: 'Функција „Објави све“ '
|
||||
PUBALLFUN2: "Притиском на ово дугме постићи ћете исто што и одласком на сваку страну и притискањем дугмета „Објави“ . Намењена је за коришћење након великих измена садржаја као када се сајт први пут објављује."
|
||||
@ -109,10 +106,7 @@ sr:
|
||||
TabContent: Садржај
|
||||
TabHistory: Историја
|
||||
TabSettings: Подешавања
|
||||
TreeFiltered: 'Филтрирано стабло'
|
||||
TreeFilteredClear: 'Избриши филтер'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Примени филтер'
|
||||
RESET: Врати у пређашње стање
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Додај страницу'
|
||||
@ -144,15 +138,12 @@ sr:
|
||||
ListView: 'Приказ у виду листе'
|
||||
MENUTITLE: Странице
|
||||
TreeView: 'Приказ у виду стабла'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Вишеструки избор
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Филтер
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: Од
|
||||
FILTERDATEHEADING: Датум
|
||||
FILTERDATETO: За
|
||||
FILTERLABELTEXT: Садржај
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Подешавања
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -85,13 +85,10 @@ sr_RS@latin:
|
||||
DUPLICATEDWITHCHILDREN: '''{title}'' i deca uspešno duplirani'
|
||||
EMAIL: E-pošta
|
||||
EditTree: 'Izmeni stablo'
|
||||
ListFiltered: 'Filtrirana lista.'
|
||||
MENUTITLE: 'Izmeni stranicu'
|
||||
NEWPAGE: 'Nova {pagetype}'
|
||||
PAGENOTEXISTS: 'Ova stranica ne postoji'
|
||||
PAGES: Stranice
|
||||
PAGETYPEANYOPT: Bilo koja
|
||||
PAGETYPEOPT: 'Tip stranice'
|
||||
PUBALLCONFIRM: 'Objavite svaku stranu na ovom sajtu kopiranjem sadržaj na živ sajt.'
|
||||
PUBALLFUN: 'Funkcija „Objavi sve“ '
|
||||
PUBALLFUN2: "Pritiskom na ovo dugme postići ćete isto što i odlaskom na svaku stranu i pritiskanjem dugmeta „Objavi“ . Namenjena je za korišćene nakon velikih izmena sadržaja kao kada se sajt prvi put objavljuje."
|
||||
@ -109,10 +106,7 @@ sr_RS@latin:
|
||||
TabContent: Sadržaj
|
||||
TabHistory: Istorija
|
||||
TabSettings: Podešavanja
|
||||
TreeFiltered: 'Filtrirano stablo'
|
||||
TreeFilteredClear: 'Izbriši filter'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Primeni filter'
|
||||
RESET: Vrati u pređašnje stanje
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Dodaj stranicu'
|
||||
@ -144,15 +138,12 @@ sr_RS@latin:
|
||||
ListView: 'Prikaz u vidu liste'
|
||||
MENUTITLE: Stranice
|
||||
TreeView: 'Prikaz u vidu stabla'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Višestruki izbor
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filter
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: Od
|
||||
FILTERDATEHEADING: Datum
|
||||
FILTERDATETO: Za
|
||||
FILTERLABELTEXT: Sadržaj
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Podešavanja
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
10
lang/sv.yml
10
lang/sv.yml
@ -92,13 +92,10 @@ sv:
|
||||
DUPLICATEDWITHCHILDREN: 'Duplicerade ''{title}'' och undersidor utan problem'
|
||||
EMAIL: E-post
|
||||
EditTree: 'Redigera trädet'
|
||||
ListFiltered: 'Filtrerad lista'
|
||||
MENUTITLE: 'Redigera sida'
|
||||
NEWPAGE: 'Ny {pagetype}'
|
||||
PAGENOTEXISTS: 'Den här sidan finns inte'
|
||||
PAGES: Sidor
|
||||
PAGETYPEANYOPT: Vilken som helst
|
||||
PAGETYPEOPT: 'Sidtyp'
|
||||
PUBALLCONFIRM: 'Publicera alla sidor på sajten och kopiera dem till "live"'
|
||||
PUBALLFUN: '"Publicera alla"-funktion'
|
||||
PUBALLFUN2: "Ett klick på den här knappen är samma sak som att gå till varje sida och klicka på \"Publicera\". Tanken är att den ska användas efter stora uppdateringar av innehållet på sidan, som när den skapas."
|
||||
@ -119,11 +116,7 @@ sv:
|
||||
TabContent: Innehåll
|
||||
TabHistory: Historia
|
||||
TabSettings: Inställningar
|
||||
TreeFiltered: 'Filtrerat träd'
|
||||
TreeFilteredClear: 'Rensa lista'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Filtrera'
|
||||
CLEAR_FILTER: 'Rensa lista'
|
||||
RESET: Rensa
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Skapa sida'
|
||||
@ -155,8 +148,6 @@ sv:
|
||||
ListView: 'Listvy'
|
||||
MENUTITLE: Sidor
|
||||
TreeView: 'Trädvy'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Flerval
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Filter
|
||||
CMSSIteTreeFilter_PublishedPages:
|
||||
@ -165,7 +156,6 @@ sv:
|
||||
FILTERDATEFROM: Från
|
||||
FILTERDATEHEADING: Datum
|
||||
FILTERDATETO: Till
|
||||
FILTERLABELTEXT: Innehåll
|
||||
CMSSettingsController:
|
||||
MENUTITLE: Inställningar
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -81,13 +81,10 @@ th:
|
||||
DESCREMOVED: 'และ {count} รายการลูก'
|
||||
EMAIL: อีเมล
|
||||
EditTree: 'แก้ไขรายการแบบ Tree'
|
||||
ListFiltered: 'แสดงรายการตามตัวกรองข้อมูล'
|
||||
MENUTITLE: 'แก้ไขหน้าเว็บ'
|
||||
NEWPAGE: 'ใหม่ {pagetype}'
|
||||
PAGENOTEXISTS: 'ไม่มีหน้านี้อยู่'
|
||||
PAGES: หน้า
|
||||
PAGETYPEANYOPT: ประเภทใดก็ได้
|
||||
PAGETYPEOPT: 'ประเภทหน้าเว็บ'
|
||||
PUBALLCONFIRM: 'กรุณาเผยแพร่หน้าเว็บทุกหน้าในเว็บไซต์, คัดลอกเนื้อหาลงไปที่'
|
||||
PUBALLFUN: 'ฟังก์ชั่นการทำงาน "เผยแพร่ทั้งหมด"'
|
||||
PUBALLFUN2: "การกดปุ่มนี้จะเทียบเท่ากับการไปที่หน้าต่างๆทุกๆหน้าแล้วกด \"เผยแพร่\". It's\nปุ่มดังกล่าวมีไว้ด้วยความตั้งใจที่ต้องการให้นำไปใช้กับการแก้ไขเนื้อหาเป็นจำนวนมาก เช่น เมื่อเว็บไซต์\nถูกสร้างขึ้นเป็นครั้งแรก."
|
||||
@ -101,10 +98,7 @@ th:
|
||||
TabContent: เนื้อหา
|
||||
TabHistory: ประวัติย้อนหลัง
|
||||
TabSettings: ตั้งค่า
|
||||
TreeFiltered: 'แสดงรายการแบบ Tree ตามตัวกรองข้อมูล'
|
||||
TreeFilteredClear: 'ล้างค่าตัวกรองข้อมูล'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'นำตัวกรองข้อมูลไปใช้งาน'
|
||||
RESET: รีเซ็ต
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'เพิ่มหน้า'
|
||||
@ -132,8 +126,6 @@ th:
|
||||
MENUTITLE: 'แก้ไขหน้าเว็บ'
|
||||
CMSPagesController:
|
||||
GalleryView: 'มุมมองแบบแกลอรี่'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: การเลือกพร้อมกันหลายรายการ
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: ตัวกรองข้อมูล
|
||||
CMSSearch:
|
||||
|
@ -37,8 +37,6 @@ tr:
|
||||
EMAIL: Eposta
|
||||
MENUTITLE: 'Sayfayı düzenle'
|
||||
PAGENOTEXISTS: 'Sayfa bulunamadı'
|
||||
PAGES: Sayfalar
|
||||
PAGETYPEOPT: 'Sayfa Tipi'
|
||||
PUBALLCONFIRM: 'Lütfen taslak sitedeki tüm sayfaları yayınlanmakta olan siteye kopyalayıp yayınla.'
|
||||
PUBALLFUN: '"Hepsini Yayınla" özelliği'
|
||||
PUBALLFUN2: "Bu butona bastığınız zaman, tüm sayfaları tek tek açıp \"yayınla\" butonuna basmışsınız gibi işlem yapılacaktır. Bunun amacı sitede toplu miktarda içerik düzenleyip eklediyseniz (örneğin sitenin ilk yayınlanması gibi) size kolaylık sağlamaktır."
|
||||
@ -50,7 +48,6 @@ tr:
|
||||
TabHistory: Geçmiş
|
||||
TabSettings: Ayarlar
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Filteri Uygula'
|
||||
RESET: Sıfırla
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Sayfa ekle'
|
||||
|
@ -77,9 +77,7 @@ uk:
|
||||
EMAIL: Електронна пошта
|
||||
MENUTITLE: 'Редагувати сторінку'
|
||||
PAGENOTEXISTS: 'Ця сторінка не існує'
|
||||
PAGES: Сторінки
|
||||
PAGETYPEANYOPT: Будь-який
|
||||
PAGETYPEOPT: 'Тип сторінки'
|
||||
PUBALLCONFIRM: 'Будь ласка, опублікуйте кожну сторінку. Для цього перенесіть проміжний варіант до існуючого.'
|
||||
PUBALLFUN: 'Дія "Опублікувати все"'
|
||||
PUBALLFUN2: "Натиснувши цю кнопку Ви зробите те ж саме, що й перейшовши до кожної сторінки та натиснувши \"Публікувати\". Це внесено для тих випадків, коли Ви маєте намір маштабно змінити вміст, наприклад, після першого створення сайту."
|
||||
@ -92,7 +90,6 @@ uk:
|
||||
TabHistory: Історія
|
||||
TabSettings: Налаштування
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: 'Застосувати фільтр'
|
||||
RESET: Відновити
|
||||
CMSPageAddController:
|
||||
MENUTITLE: 'Додати сторінку'
|
||||
@ -118,8 +115,6 @@ uk:
|
||||
WHEN: Коли
|
||||
CMSPageSettingsController:
|
||||
MENUTITLE: 'Редагувати сторінку'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: Множинний вибір
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: Фільтр
|
||||
CMSSearch:
|
||||
|
@ -85,13 +85,10 @@ zh:
|
||||
DUPLICATEDWITHCHILDREN: '成功复制‘{title}’及其子页面'
|
||||
EMAIL: 电子邮件
|
||||
EditTree: '编辑树'
|
||||
ListFiltered: '已过滤的列表。'
|
||||
MENUTITLE: '编辑页面'
|
||||
NEWPAGE: '新建{pagetype}'
|
||||
PAGENOTEXISTS: '该页面不存在'
|
||||
PAGES: 页面
|
||||
PAGETYPEANYOPT: 任何
|
||||
PAGETYPEOPT: '页面类型'
|
||||
PUBALLCONFIRM: '请发布站点上的所有页面,将内容复制到线上'
|
||||
PUBALLFUN: '“全部发布”功能'
|
||||
PUBALLFUN2: "按下此按钮将做相当于跳转到每一页,然后按下“发布”。拟用于对内容进行了大量编辑工作之时,例如站点初建时。"
|
||||
@ -109,10 +106,7 @@ zh:
|
||||
TabContent: 内容
|
||||
TabHistory: 历史记录
|
||||
TabSettings: 设置
|
||||
TreeFiltered: '已过滤的树。'
|
||||
TreeFilteredClear: '清除过滤器'
|
||||
CMSMain_left_ss:
|
||||
APPLY_FILTER: '应用过滤器'
|
||||
RESET: 重置
|
||||
CMSPageAddController:
|
||||
MENUTITLE: '添加页面'
|
||||
@ -144,15 +138,12 @@ zh:
|
||||
ListView: '列表视图'
|
||||
MENUTITLE: 页面
|
||||
TreeView: '树视图'
|
||||
CMSPagesController_ContentToolbar_ss:
|
||||
MULTISELECT: 多选
|
||||
CMSPagesController_Tools_ss:
|
||||
FILTER: 过滤器
|
||||
CMSSearch:
|
||||
FILTERDATEFROM: 从
|
||||
FILTERDATEHEADING: 日期
|
||||
FILTERDATETO: 到
|
||||
FILTERLABELTEXT: 内容
|
||||
CMSSettingsController:
|
||||
MENUTITLE: 设置
|
||||
CMSSiteTreeFilter_Search:
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
.cms-edit-form.AssetAdmin {
|
||||
width: 100%;
|
||||
overflow-y:auto; //adds scrolling only to the datagrid
|
||||
overflow-y:auto; //adds scrolling only to the datagrid
|
||||
}
|
||||
|
||||
/**
|
||||
@ -82,5 +82,5 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Style custom to the CMSMain admin interface. CMSMain extends the built in
|
||||
* SilverStripe admin section styles. As much as possible we want to use those
|
||||
* built in styles. If anything in this file can be implemented in a generic
|
||||
* Style custom to the CMSMain admin interface. CMSMain extends the built in
|
||||
* SilverStripe admin section styles. As much as possible we want to use those
|
||||
* built in styles. If anything in this file can be implemented in a generic
|
||||
* way then it should be include in the admin scss files.
|
||||
*
|
||||
* @package cms
|
||||
@ -123,4 +123,4 @@
|
||||
|
||||
#Form_EditForm #Title .update {
|
||||
margin-left: 7px;
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
/**
|
||||
* This file is the central collection of included modules, links to custom SCSS files,
|
||||
* and any global SCSS variable definitions.
|
||||
*
|
||||
*
|
||||
* DO NOT ADD stylesheet rules to this file directly!
|
||||
*
|
||||
*
|
||||
* Note: By prefixing files with an underscore, they won't create individual CSS files.
|
||||
*/
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
* Shows the pages to an administrator, who can then
|
||||
* decide which pages to remove by ticking a checkbox
|
||||
* and manually executing the removal.
|
||||
*
|
||||
*
|
||||
* Caution: Pages also count as orphans if they don't
|
||||
* have parents in this stage, even if the parent has a representation
|
||||
* in the other stage:
|
||||
@ -16,7 +16,7 @@
|
||||
* before and after orphan removal.
|
||||
*
|
||||
* @author Ingo Schommer (<firstname>@silverstripe.com), SilverStripe Ltd.
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage tasks
|
||||
*/
|
||||
@ -87,13 +87,13 @@ in the other stage:<br />
|
||||
$latestAuthor = DataObject::get_by_id('Member', $latestVersion->AuthorID);
|
||||
$orphanBaseClass = ClassInfo::baseDataClass($this->orphanedSearchClass);
|
||||
$stageRecord = Versioned::get_one_by_stage(
|
||||
$this->orphanedSearchClass,
|
||||
$this->orphanedSearchClass,
|
||||
'Stage',
|
||||
array("\"$orphanBaseClass\".\"ID\"" => $orphan->ID)
|
||||
);
|
||||
$liveRecord = Versioned::get_one_by_stage(
|
||||
$this->orphanedSearchClass,
|
||||
'Live',
|
||||
$this->orphanedSearchClass,
|
||||
'Live',
|
||||
array("\"$orphanBaseClass\".\"ID\"" => $orphan->ID)
|
||||
);
|
||||
$label = sprintf(
|
||||
@ -125,11 +125,11 @@ in the other stage:<br />
|
||||
)
|
||||
));
|
||||
$fields->push(new OptionSetField(
|
||||
'OrphanOperation',
|
||||
'OrphanOperation',
|
||||
_t('RemoveOrphanedPagesTask.CHOOSEOPERATION', 'Choose operation:'),
|
||||
array(
|
||||
'rebase' => _t(
|
||||
'RemoveOrphanedPagesTask.OPERATION_REBASE',
|
||||
'RemoveOrphanedPagesTask.OPERATION_REBASE',
|
||||
sprintf(
|
||||
'Rebase selected to a new holder page "%s" and unpublish. None of these pages will show up for website visitors.',
|
||||
$this->rebaseHolderTitle()
|
||||
@ -143,7 +143,7 @@ in the other stage:<br />
|
||||
'Warning',
|
||||
sprintf('<p class="message">%s</p>',
|
||||
_t(
|
||||
'RemoveOrphanedPagesTask.DELETEWARNING',
|
||||
'RemoveOrphanedPagesTask.DELETEWARNING',
|
||||
'Warning: These operations are not reversible. Please handle with care.'
|
||||
)
|
||||
)
|
||||
@ -216,8 +216,8 @@ in the other stage:<br />
|
||||
$orphanBaseClass = ClassInfo::baseDataClass($this->orphanedSearchClass);
|
||||
foreach($orphanIDs as $id) {
|
||||
$stageRecord = Versioned::get_one_by_stage(
|
||||
$this->orphanedSearchClass,
|
||||
'Stage',
|
||||
$this->orphanedSearchClass,
|
||||
'Stage',
|
||||
array("\"$orphanBaseClass\".\"ID\"" => $id)
|
||||
);
|
||||
if($stageRecord) {
|
||||
@ -227,8 +227,8 @@ in the other stage:<br />
|
||||
unset($stageRecord);
|
||||
}
|
||||
$liveRecord = Versioned::get_one_by_stage(
|
||||
$this->orphanedSearchClass,
|
||||
'Live',
|
||||
$this->orphanedSearchClass,
|
||||
'Live',
|
||||
array("\"$orphanBaseClass\".\"ID\"" => $id)
|
||||
);
|
||||
if($liveRecord) {
|
||||
@ -258,7 +258,7 @@ in the other stage:<br />
|
||||
$orphanBaseClass = ClassInfo::baseDataClass($this->orphanedSearchClass);
|
||||
foreach($orphanIDs as $id) {
|
||||
$stageRecord = Versioned::get_one_by_stage(
|
||||
$this->orphanedSearchClass,
|
||||
$this->orphanedSearchClass,
|
||||
'Stage',
|
||||
array("\"$orphanBaseClass\".\"ID\"" => $id)
|
||||
);
|
||||
@ -273,7 +273,7 @@ in the other stage:<br />
|
||||
//unset($stageRecord);
|
||||
}
|
||||
$liveRecord = Versioned::get_one_by_stage(
|
||||
$this->orphanedSearchClass,
|
||||
$this->orphanedSearchClass,
|
||||
'Live',
|
||||
array("\"$orphanBaseClass\".\"ID\"" => $id)
|
||||
);
|
||||
@ -298,7 +298,7 @@ in the other stage:<br />
|
||||
|
||||
/**
|
||||
* Gets all orphans from "Stage" and "Live" stages.
|
||||
*
|
||||
*
|
||||
* @param string $class
|
||||
* @param array $filter
|
||||
* @param string $sort
|
||||
|
@ -18,14 +18,14 @@ class SiteTreeMaintenanceTask extends Controller {
|
||||
$page->write();
|
||||
if($urlSegment != $page->URLSegment) {
|
||||
echo _t(
|
||||
'SiteTree.LINKSCHANGEDTO',
|
||||
" changed {url1} -> {url2}",
|
||||
'SiteTree.LINKSCHANGEDTO',
|
||||
" changed {url1} -> {url2}",
|
||||
array('url1' => $urlSegment, 'url2' => $page->URLSegment)
|
||||
);
|
||||
}
|
||||
else {
|
||||
echo _t(
|
||||
'SiteTree.LINKSALREADYUNIQUE',
|
||||
'SiteTree.LINKSALREADYUNIQUE',
|
||||
" {url} is already unique",
|
||||
array('url' => $urlSegment)
|
||||
);
|
||||
|
@ -11,4 +11,4 @@
|
||||
$Form
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
@ -1,3 +1,3 @@
|
||||
<div class="message $Classes">
|
||||
<p>$Content</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -20,4 +20,4 @@
|
||||
</tr>
|
||||
<% end_loop %>
|
||||
</tbody>
|
||||
</table>
|
||||
</table>
|
||||
|
@ -27,4 +27,4 @@
|
||||
</div>
|
||||
<% end_if %>
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
@ -25,4 +25,4 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
@ -22,4 +22,4 @@
|
||||
$ListViewForm
|
||||
</div>
|
||||
<% end_if %>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -3,4 +3,4 @@
|
||||
<div class="cms-panel-content cms-helper-hide-actions center">
|
||||
$VersionsForm
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -38,4 +38,4 @@
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
@ -18,4 +18,4 @@
|
||||
<%t ContentController.Email "Email" %>: $Username<br />
|
||||
<%t ContentController.Password "Password" %>: $Password<br />
|
||||
</p>
|
||||
<% end_if %>
|
||||
<% end_if %>
|
||||
|
@ -23,4 +23,4 @@
|
||||
<% end_with %>
|
||||
<% include TableListField %>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
<a id="SilverStripeNavigatorLink" href="#">
|
||||
<% _t('SilverStripeNavigatorLink.ShareLink','Share link') %>
|
||||
</a>
|
||||
|
@ -1,3 +1,3 @@
|
||||
<% _t('ViewArchivedEmail_ss.HAVEASKED','You have asked to view the content of our site on',30,'Followed by a date') %> $ArchiveDate.Date
|
||||
|
||||
<% _t('ViewArchivedEmail_ss.CANACCESS','You can access the archived site at this link:') %> $ArchiveURL
|
||||
<% _t('ViewArchivedEmail_ss.CANACCESS','You can access the archived site at this link:') %> $ArchiveURL
|
||||
|
@ -15,4 +15,4 @@
|
||||
<% _t('URLSegmentField.Cancel', 'Cancel') %>
|
||||
</button>
|
||||
<% if $HelpText %><p class="help">$HelpText</p><% end_if %>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -30,4 +30,4 @@ saucelabs:
|
||||
capabilities:
|
||||
platform: "Windows 2008"
|
||||
browser: "firefox"
|
||||
version: "15"
|
||||
version: "15"
|
||||
|
@ -47,7 +47,7 @@ class FeatureContext extends \SilverStripe\Framework\Test\Behaviour\FeatureConte
|
||||
$obj->publish('Stage', 'Live');
|
||||
});
|
||||
$factory->define($class, $blueprint);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -23,8 +23,8 @@ class FixtureContext extends \SilverStripe\BehatExtension\Context\FixtureContext
|
||||
|
||||
/**
|
||||
* Find or create a redirector page and link to another existing page.
|
||||
* Example: Given a "page" "My Redirect" which redirects to a "page" "Page 1"
|
||||
*
|
||||
* Example: Given a "page" "My Redirect" which redirects to a "page" "Page 1"
|
||||
*
|
||||
* @Given /^(?:(an|a|the) )"(?<type>[^"]+)" "(?<id>[^"]+)" (:?which )?redirects to (?:(an|a|the) )"(?<targetType>[^"]+)" "(?<targetId>[^"]+)"$/
|
||||
*/
|
||||
public function stepCreateRedirectorPage($type, $id, $targetType, $targetId) {
|
||||
@ -46,17 +46,17 @@ class FixtureContext extends \SilverStripe\BehatExtension\Context\FixtureContext
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* Check if the user can edit a page
|
||||
*
|
||||
* Example: Then pages should be editable by "Admin"
|
||||
*
|
||||
* Example: Then pages should be editable by "Admin"
|
||||
* Then pages should not be editable by "Admin"
|
||||
*
|
||||
*
|
||||
* @Then /^pages should( not? |\s*)be editable by "([^"]*)"$/
|
||||
*/
|
||||
public function pagesShouldBeEditableBy($negative, $member){
|
||||
public function pagesShouldBeEditableBy($negative, $member){
|
||||
$page = \Page::get()->First();
|
||||
|
||||
|
||||
return array(
|
||||
new Step\Given('I am not logged in'),
|
||||
new Step\Given('I am logged in with "' . $member . '" permissions'),
|
||||
|
@ -26,7 +26,7 @@ class ThemeContext extends BehatContext {
|
||||
|
||||
/**
|
||||
* Create a test theme
|
||||
*
|
||||
*
|
||||
* @Given /^a theme "(?<theme>[^"]+)"/
|
||||
*/
|
||||
public function stepCreateTheme($theme) {
|
||||
@ -39,7 +39,7 @@ class ThemeContext extends BehatContext {
|
||||
|
||||
/**
|
||||
* Create a template within a test theme
|
||||
*
|
||||
*
|
||||
* @Given /^a template "(?<template>[^"]+)" in theme "(?<theme>[^"]+)" with content "(?<content>[^"]+)"/
|
||||
*/
|
||||
public function stepCreateTemplate($template, $theme, $content) {
|
||||
@ -76,7 +76,7 @@ class ThemeContext extends BehatContext {
|
||||
|
||||
/**
|
||||
* Clean up any theme manipulation
|
||||
*
|
||||
*
|
||||
* @AfterScenario
|
||||
*/
|
||||
public function cleanThemesAfterScenario() {
|
||||
|
@ -57,6 +57,10 @@ So that I can link to a external website or a page on my site
|
||||
Then the "Content" HTML field should contain "<a href="[file_link,id=4]" target="_blank">awesome</a>"
|
||||
# Required to avoid "unsaved changes" browser dialog
|
||||
Then I press the "Save draft" button
|
||||
# Check that the field is reset when adding another new link
|
||||
Given I select "content" in the "Content" HTML field
|
||||
When I press the "Insert Link" button
|
||||
Then I should not see a ".ss-uploadfield-files .ss-uploadfield-item" element
|
||||
|
||||
Scenario: I can link to an anchor
|
||||
Given I fill in the "Content" HTML field with "<p>My awesome content<a name='myanchor'></a></p>"
|
||||
|
@ -9,6 +9,18 @@ class CMSMainTest extends FunctionalTest {
|
||||
|
||||
static protected $orig = array();
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
// Clear automatically created siteconfigs (in case one was created outside of the specified fixtures).
|
||||
$ids = $this->allFixtureIDs('SiteConfig');
|
||||
if($ids) {
|
||||
foreach(SiteConfig::get()->exclude('ID', $ids) as $config) {
|
||||
$config->delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function testSiteTreeHints() {
|
||||
$cache = SS_Cache::factory('CMSMain_SiteTreeHints');
|
||||
// Login as user with root creation privileges
|
||||
@ -106,7 +118,7 @@ class CMSMainTest extends FunctionalTest {
|
||||
$this->assertArrayHasKey($page2->ID, $responseData['modified']);
|
||||
}
|
||||
|
||||
// Get the latest version of the redirector page
|
||||
// Get the latest version of the redirector page
|
||||
$pageID = $this->idFromFixture('RedirectorPage', 'page5');
|
||||
$latestID = DB::prepared_query('select max("Version") from "RedirectorPage_versions" where "RecordID" = ?', array($pageID))->value();
|
||||
$dsCount = DB::prepared_query('select count("Version") from "RedirectorPage_versions" where "RecordID" = ? and "Version"= ?', array($pageID, $latestID))->value();
|
||||
@ -262,16 +274,16 @@ class CMSMainTest extends FunctionalTest {
|
||||
$cmsUser->logIn();
|
||||
$this->get('admin/pages/add');
|
||||
$response = $this->post(
|
||||
'admin/pages/add/AddForm',
|
||||
array(
|
||||
'ParentID' => '0',
|
||||
'PageType' => 'Page',
|
||||
'Locale' => 'en_US',
|
||||
'action_doAdd' => 1,
|
||||
'ajax' => 1,
|
||||
), array(
|
||||
'X-Pjax' => 'CurrentForm,Breadcrumbs',
|
||||
)
|
||||
'admin/pages/add/AddForm',
|
||||
array(
|
||||
'ParentID' => '0',
|
||||
'PageType' => 'Page',
|
||||
'Locale' => 'en_US',
|
||||
'action_doAdd' => 1,
|
||||
'ajax' => 1,
|
||||
), array(
|
||||
'X-Pjax' => 'CurrentForm,Breadcrumbs',
|
||||
)
|
||||
);
|
||||
// should redirect, which is a permission error
|
||||
$this->assertEquals(403, $response->getStatusCode(), 'Add TopLevel page must fail for normal user');
|
||||
@ -281,16 +293,16 @@ class CMSMainTest extends FunctionalTest {
|
||||
$response = $this->get('admin/pages/add');
|
||||
|
||||
$response = $this->post(
|
||||
'admin/pages/add/AddForm',
|
||||
array(
|
||||
'ParentID' => '0',
|
||||
'PageType' => 'Page',
|
||||
'Locale' => 'en_US',
|
||||
'action_doAdd' => 1,
|
||||
'ajax' => 1,
|
||||
), array(
|
||||
'X-Pjax' => 'CurrentForm,Breadcrumbs',
|
||||
)
|
||||
'admin/pages/add/AddForm',
|
||||
array(
|
||||
'ParentID' => '0',
|
||||
'PageType' => 'Page',
|
||||
'Locale' => 'en_US',
|
||||
'action_doAdd' => 1,
|
||||
'ajax' => 1,
|
||||
), array(
|
||||
'X-Pjax' => 'CurrentForm,Breadcrumbs',
|
||||
)
|
||||
);
|
||||
|
||||
$location = $response->getHeader('X-ControllerURL');
|
||||
@ -312,27 +324,60 @@ class CMSMainTest extends FunctionalTest {
|
||||
// Create toplevel page
|
||||
$this->get('admin/pages/add');
|
||||
$response = $this->post(
|
||||
'admin/pages/add/AddForm',
|
||||
array('ParentID' => '0', 'PageType' => 'CMSMainTest_ClassA', 'Locale' => 'en_US', 'action_doAdd' => 1)
|
||||
'admin/pages/add/AddForm',
|
||||
array(
|
||||
'ParentID' => '0',
|
||||
'PageType' => 'CMSMainTest_ClassA',
|
||||
'Locale' => 'en_US',
|
||||
'action_doAdd' => 1,
|
||||
'ajax' => 1
|
||||
), array(
|
||||
'X-Pjax' => 'CurrentForm,Breadcrumbs',
|
||||
)
|
||||
);
|
||||
$this->assertFalse($response->isError());
|
||||
preg_match('/edit\/show\/(\d*)/', $response->getHeader('Location'), $matches);
|
||||
$ok = preg_match('/edit\/show\/(\d*)/', $response->getHeader('X-ControllerURL'), $matches);
|
||||
$this->assertNotEmpty($ok);
|
||||
$newPageId = $matches[1];
|
||||
|
||||
// Create allowed child
|
||||
$this->get('admin/pages/add');
|
||||
$response = $this->post(
|
||||
'admin/pages/add/AddForm',
|
||||
array('ParentID' => $newPageId, 'PageType' => 'CMSMainTest_ClassB', 'Locale' => 'en_US', 'action_doAdd' => 1)
|
||||
'admin/pages/add/AddForm',
|
||||
array(
|
||||
'ParentID' => $newPageId,
|
||||
'PageType' => 'CMSMainTest_ClassB',
|
||||
'Locale' => 'en_US',
|
||||
'action_doAdd' => 1,
|
||||
'ajax' => 1
|
||||
), array(
|
||||
'X-Pjax' => 'CurrentForm,Breadcrumbs',
|
||||
)
|
||||
);
|
||||
$this->assertFalse($response->isError());
|
||||
$this->assertNull($response->getBody());
|
||||
$this->assertEmpty($response->getBody());
|
||||
|
||||
// Verify that the page was created and redirected to accurately
|
||||
$newerPage = SiteTree::get()->byID($newPageId)->AllChildren()->first();
|
||||
$this->assertNotEmpty($newerPage);
|
||||
$ok = preg_match('/edit\/show\/(\d*)/', $response->getHeader('X-ControllerURL'), $matches);
|
||||
$this->assertNotEmpty($ok);
|
||||
$newerPageID = $matches[1];
|
||||
$this->assertEquals($newerPage->ID, $newerPageID);
|
||||
|
||||
// Create disallowed child
|
||||
$this->get('admin/pages/add');
|
||||
$response = $this->post(
|
||||
'admin/pages/add/AddForm',
|
||||
array('ParentID' => $newPageId, 'PageType' => 'Page', 'Locale' => 'en_US', 'action_doAdd' => 1)
|
||||
'admin/pages/add/AddForm',
|
||||
array(
|
||||
'ParentID' => $newPageId,
|
||||
'PageType' => 'Page',
|
||||
'Locale' => 'en_US',
|
||||
'action_doAdd' => 1,
|
||||
'ajax' => 1
|
||||
), array(
|
||||
'X-Pjax' => 'CurrentForm,Breadcrumbs',
|
||||
)
|
||||
);
|
||||
$this->assertEquals(403, $response->getStatusCode(), 'Add disallowed child should fail');
|
||||
|
||||
|
@ -1,142 +1,142 @@
|
||||
Page:
|
||||
page1:
|
||||
Title: Page 1
|
||||
Sort: 1
|
||||
page2:
|
||||
Title: Page 2
|
||||
Sort: 2
|
||||
page3:
|
||||
Title: Page 3
|
||||
Sort: 3
|
||||
page31:
|
||||
Title: Page 3.1
|
||||
Parent: =>Page.page3
|
||||
Sort: 1
|
||||
page32:
|
||||
Title: Page 3.2
|
||||
Parent: =>Page.page3
|
||||
Sort: 2
|
||||
page4:
|
||||
Title: Page 4
|
||||
Sort: 4
|
||||
page5:
|
||||
Title: Page 5
|
||||
Sort: 5
|
||||
page6:
|
||||
Title: Page 6
|
||||
Sort: 6
|
||||
page7:
|
||||
Title: Page 7
|
||||
Sort: 7
|
||||
page8:
|
||||
Title: Page 8
|
||||
Sort: 8
|
||||
page9:
|
||||
Title: Page 9
|
||||
Sort: 9
|
||||
page10:
|
||||
Title: Page 10
|
||||
Sort: 10
|
||||
page11:
|
||||
Title: Page 11
|
||||
Sort: 11
|
||||
page12:
|
||||
Title: Page 12
|
||||
Sort: 12
|
||||
page13:
|
||||
Title: Page 13
|
||||
Sort: 13
|
||||
page14:
|
||||
Title: Page 14
|
||||
Sort: 14
|
||||
page15:
|
||||
Title: Page 15
|
||||
Sort: 15
|
||||
page16:
|
||||
Title: Page 16
|
||||
Sort: 16
|
||||
page17:
|
||||
Title: Page 17
|
||||
Sort: 17
|
||||
page18:
|
||||
Title: Page 18
|
||||
Sort: 18
|
||||
page19:
|
||||
Title: Page 19
|
||||
Sort: 19
|
||||
page20:
|
||||
Title: Page 20
|
||||
Sort: 20
|
||||
page21:
|
||||
Title: Page 21
|
||||
Sort: 21
|
||||
page22:
|
||||
Title: Page 22
|
||||
Sort: 22
|
||||
page23:
|
||||
Title: Page 23
|
||||
Sort: 23
|
||||
page24:
|
||||
Title: Page 24
|
||||
Sort: 24
|
||||
page25:
|
||||
Title: Page 25
|
||||
Sort: 25
|
||||
page26:
|
||||
Title: Page 26
|
||||
Sort: 26
|
||||
home:
|
||||
Title: Home
|
||||
URLSegment: home
|
||||
Sort: 27
|
||||
page1:
|
||||
Title: Page 1
|
||||
Sort: 1
|
||||
page2:
|
||||
Title: Page 2
|
||||
Sort: 2
|
||||
page3:
|
||||
Title: Page 3
|
||||
Sort: 3
|
||||
page31:
|
||||
Title: Page 3.1
|
||||
Parent: =>Page.page3
|
||||
Sort: 1
|
||||
page32:
|
||||
Title: Page 3.2
|
||||
Parent: =>Page.page3
|
||||
Sort: 2
|
||||
page4:
|
||||
Title: Page 4
|
||||
Sort: 4
|
||||
page5:
|
||||
Title: Page 5
|
||||
Sort: 5
|
||||
page6:
|
||||
Title: Page 6
|
||||
Sort: 6
|
||||
page7:
|
||||
Title: Page 7
|
||||
Sort: 7
|
||||
page8:
|
||||
Title: Page 8
|
||||
Sort: 8
|
||||
page9:
|
||||
Title: Page 9
|
||||
Sort: 9
|
||||
page10:
|
||||
Title: Page 10
|
||||
Sort: 10
|
||||
page11:
|
||||
Title: Page 11
|
||||
Sort: 11
|
||||
page12:
|
||||
Title: Page 12
|
||||
Sort: 12
|
||||
page13:
|
||||
Title: Page 13
|
||||
Sort: 13
|
||||
page14:
|
||||
Title: Page 14
|
||||
Sort: 14
|
||||
page15:
|
||||
Title: Page 15
|
||||
Sort: 15
|
||||
page16:
|
||||
Title: Page 16
|
||||
Sort: 16
|
||||
page17:
|
||||
Title: Page 17
|
||||
Sort: 17
|
||||
page18:
|
||||
Title: Page 18
|
||||
Sort: 18
|
||||
page19:
|
||||
Title: Page 19
|
||||
Sort: 19
|
||||
page20:
|
||||
Title: Page 20
|
||||
Sort: 20
|
||||
page21:
|
||||
Title: Page 21
|
||||
Sort: 21
|
||||
page22:
|
||||
Title: Page 22
|
||||
Sort: 22
|
||||
page23:
|
||||
Title: Page 23
|
||||
Sort: 23
|
||||
page24:
|
||||
Title: Page 24
|
||||
Sort: 24
|
||||
page25:
|
||||
Title: Page 25
|
||||
Sort: 25
|
||||
page26:
|
||||
Title: Page 26
|
||||
Sort: 26
|
||||
home:
|
||||
Title: Home
|
||||
URLSegment: home
|
||||
Sort: 27
|
||||
Group:
|
||||
admin:
|
||||
Title: Administrators
|
||||
empty:
|
||||
Title: Empty Group
|
||||
assetsonly:
|
||||
Title: assetsonly
|
||||
allcmssections:
|
||||
Title: allcmssections
|
||||
rooteditusers:
|
||||
Title: rooteditusers
|
||||
admin:
|
||||
Title: Administrators
|
||||
empty:
|
||||
Title: Empty Group
|
||||
assetsonly:
|
||||
Title: assetsonly
|
||||
allcmssections:
|
||||
Title: allcmssections
|
||||
rooteditusers:
|
||||
Title: rooteditusers
|
||||
Member:
|
||||
admin:
|
||||
Email: admin@example.com
|
||||
Password: ZXXlkwecxz2390232233
|
||||
Groups: =>Group.admin
|
||||
assetsonlyuser:
|
||||
Email: assetsonlyuser@test.com
|
||||
Groups: =>Group.assetsonly
|
||||
allcmssectionsuser:
|
||||
Email: allcmssectionsuser@test.com
|
||||
Groups: =>Group.allcmssections
|
||||
rootedituser:
|
||||
Email: rootedituser@test.com
|
||||
Groups: =>Group.rooteditusers
|
||||
admin:
|
||||
Email: admin@example.com
|
||||
Password: ZXXlkwecxz2390232233
|
||||
Groups: =>Group.admin
|
||||
assetsonlyuser:
|
||||
Email: assetsonlyuser@test.com
|
||||
Groups: =>Group.assetsonly
|
||||
allcmssectionsuser:
|
||||
Email: allcmssectionsuser@test.com
|
||||
Groups: =>Group.allcmssections
|
||||
rootedituser:
|
||||
Email: rootedituser@test.com
|
||||
Groups: =>Group.rooteditusers
|
||||
Permission:
|
||||
admin:
|
||||
Code: ADMIN
|
||||
GroupID: =>Group.admin
|
||||
assetsonly:
|
||||
Code: CMS_ACCESS_AssetAdmin
|
||||
GroupID: =>Group.assetsonly
|
||||
allcmssections:
|
||||
Code: CMS_ACCESS_LeftAndMain
|
||||
GroupID: =>Group.allcmssections
|
||||
allcmssections2:
|
||||
Code: CMS_ACCESS_LeftAndMain
|
||||
GroupID: =>Group.rooteditusers
|
||||
admin:
|
||||
Code: ADMIN
|
||||
GroupID: =>Group.admin
|
||||
assetsonly:
|
||||
Code: CMS_ACCESS_AssetAdmin
|
||||
GroupID: =>Group.assetsonly
|
||||
allcmssections:
|
||||
Code: CMS_ACCESS_LeftAndMain
|
||||
GroupID: =>Group.allcmssections
|
||||
allcmssections2:
|
||||
Code: CMS_ACCESS_LeftAndMain
|
||||
GroupID: =>Group.rooteditusers
|
||||
SiteConfig:
|
||||
siteconfig1:
|
||||
EditorGroups: =>Group.rooteditusers
|
||||
CanCreateTopLevelType: 'OnlyTheseUsers'
|
||||
siteconfig1:
|
||||
EditorGroups: =>Group.rooteditusers
|
||||
CanCreateTopLevelType: 'OnlyTheseUsers'
|
||||
SiteConfig_CreateTopLevelGroups:
|
||||
createtoplevelgroups1:
|
||||
SiteConfigID: =>SiteConfig.siteconfig1
|
||||
GroupID: =>Group.rooteditusers
|
||||
createtoplevelgroups1:
|
||||
SiteConfigID: =>SiteConfig.siteconfig1
|
||||
GroupID: =>Group.rooteditusers
|
||||
RedirectorPage:
|
||||
page5:
|
||||
Title: Page 5
|
||||
RedirectionType: External
|
||||
ExternalURL: http://www.google.com
|
||||
page5:
|
||||
Title: Page 5
|
||||
RedirectionType: External
|
||||
ExternalURL: http://www.google.com
|
||||
|
@ -21,7 +21,7 @@ class CMSPageHistoryControllerTest extends FunctionalTest {
|
||||
$this->page = new Page();
|
||||
$this->page->URLSegment = "test";
|
||||
$this->page->Content = "new content";
|
||||
$this->page->write();
|
||||
$this->page->write();
|
||||
$this->versionUnpublishedCheck = $this->page->Version;
|
||||
|
||||
$this->page->Content = "some further content";
|
||||
|
@ -7,4 +7,4 @@ Page:
|
||||
Sort: 2
|
||||
page3:
|
||||
Title: Page 3
|
||||
Sort: 3
|
||||
Sort: 3
|
||||
|
@ -91,8 +91,8 @@ class CMSSiteTreeFilterTest extends SapphireTest {
|
||||
$deletedPageID = $deletedPage->ID;
|
||||
$deletedPage->delete();
|
||||
$deletedPage = Versioned::get_one_by_stage(
|
||||
'SiteTree',
|
||||
'Live',
|
||||
'SiteTree',
|
||||
'Live',
|
||||
array('"SiteTree_Live"."ID"' => $deletedPageID)
|
||||
);
|
||||
|
||||
@ -108,8 +108,8 @@ class CMSSiteTreeFilterTest extends SapphireTest {
|
||||
$draftPage = $this->objFromFixture('Page', 'page4');
|
||||
$draftPage->publish('Stage', 'Stage');
|
||||
$draftPage = Versioned::get_one_by_stage(
|
||||
'SiteTree',
|
||||
'Stage',
|
||||
'SiteTree',
|
||||
'Stage',
|
||||
sprintf('"SiteTree"."ID" = %d', $draftPage->ID)
|
||||
);
|
||||
|
||||
@ -144,8 +144,8 @@ class CMSSiteTreeFilterTest extends SapphireTest {
|
||||
$removedDraftPage->doPublish();
|
||||
$removedDraftPage->deleteFromStage('Stage');
|
||||
$removedDraftPage = Versioned::get_one_by_stage(
|
||||
'SiteTree',
|
||||
'Live',
|
||||
'SiteTree',
|
||||
'Live',
|
||||
sprintf('"SiteTree"."ID" = %d', $removedDraftPage->ID)
|
||||
);
|
||||
|
||||
|
@ -13,9 +13,9 @@ Page:
|
||||
page6:
|
||||
Title: Page 6
|
||||
page7:
|
||||
Title: Page 7
|
||||
Title: Page 7
|
||||
page7a:
|
||||
Parent: =>Page.page7
|
||||
Parent: =>Page.page7
|
||||
Title: Page 7a
|
||||
page2a:
|
||||
Parent: =>Page.page2
|
||||
@ -28,4 +28,4 @@ Page:
|
||||
Title: Page 3a
|
||||
page3b:
|
||||
Parent: =>Page.page3
|
||||
Title: Page 3b
|
||||
Title: Page 3b
|
||||
|
@ -21,16 +21,20 @@ class ContentControllerPermissionsTest extends FunctionalTest {
|
||||
$page->write();
|
||||
|
||||
$response = $this->get('/testpage');
|
||||
$this->assertEquals($response->getStatusCode(), 200, 'Doesnt require login for implicit live stage');
|
||||
$this->assertEquals($response->getStatusCode(), 200, "Doesn't require login for implicit live stage");
|
||||
|
||||
$response = $this->get('/testpage/?stage=Live');
|
||||
$this->assertEquals($response->getStatusCode(), 200, 'Doesnt require login for explicit live stage');
|
||||
|
||||
$response = $this->get('/testpage/?stage=Stage');
|
||||
$this->assertEquals($response->getStatusCode(), 200, "Doesn't require login for explicit live stage");
|
||||
|
||||
try {
|
||||
$response = $this->get('/testpage/?stage=Stage');
|
||||
} catch(SS_HTTPResponse_Exception $responseException) {
|
||||
$response = $responseException->getResponse();
|
||||
}
|
||||
// should redirect to login
|
||||
$this->assertEquals($response->getStatusCode(), 302, 'Redirects to login page when not logged in for draft stage');
|
||||
$this->assertContains(
|
||||
Config::inst()->get('Security', 'login_url'),
|
||||
Config::inst()->get('Security', 'login_url'),
|
||||
$response->getHeader('Location')
|
||||
);
|
||||
|
||||
|
@ -6,9 +6,9 @@ class ContentControllerSearchExtensionTest extends SapphireTest {
|
||||
$page->URLSegment = 'whatever';
|
||||
$page->Content = 'oh really?';
|
||||
$page->write();
|
||||
$page->publish('Stage', 'Live');
|
||||
$page->publish('Stage', 'Live');
|
||||
$controller = new ContentController($page);
|
||||
$form = $controller->SearchForm();
|
||||
$form = $controller->SearchForm();
|
||||
|
||||
if (get_class($form) == 'SearchForm') $this->assertEquals(array('File'), $form->getClassesToSearch());
|
||||
}
|
||||
|
@ -4,13 +4,13 @@
|
||||
* @subpackage tests
|
||||
*/
|
||||
class ContentControllerTest extends FunctionalTest {
|
||||
|
||||
|
||||
protected static $fixture_file = 'ContentControllerTest.yml';
|
||||
|
||||
|
||||
protected static $use_draft_site = true;
|
||||
|
||||
protected static $disable_themes = true;
|
||||
|
||||
|
||||
/**
|
||||
* Test that nested pages, basic actions, and nested/non-nested URL switching works properly
|
||||
*/
|
||||
@ -93,25 +93,31 @@ class ContentControllerTest extends FunctionalTest {
|
||||
}
|
||||
|
||||
public function testViewDraft(){
|
||||
|
||||
|
||||
// test when user does not have permission, should get login form
|
||||
$this->logInWithPermission('EDITOR');
|
||||
$this->assertEquals('403', $this->get('/contact/?stage=Stage')->getstatusCode());
|
||||
|
||||
|
||||
try {
|
||||
$response = $this->get('/contact/?stage=Stage');
|
||||
} catch(SS_HTTPResponse_Exception $responseException) {
|
||||
$response = $responseException->getResponse();
|
||||
}
|
||||
|
||||
$this->assertEquals('403', $response->getstatusCode());
|
||||
|
||||
|
||||
// test when user does have permission, should show page title and header ok.
|
||||
$this->logInWithPermission('ADMIN');
|
||||
$this->assertEquals('200', $this->get('/contact/?stage=Stage')->getstatusCode());
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function testLinkShortcodes() {
|
||||
$linkedPage = new SiteTree();
|
||||
$linkedPage->URLSegment = 'linked-page';
|
||||
$linkedPage->write();
|
||||
$linkedPage->publish('Stage', 'Live');
|
||||
|
||||
|
||||
$page = new SiteTree();
|
||||
$page->URLSegment = 'linking-page';
|
||||
$page->Content = sprintf('<a href="[sitetree_link,id=%s]">Testlink</a>', $linkedPage->ID);
|
||||
@ -123,7 +129,7 @@ class ContentControllerTest extends FunctionalTest {
|
||||
$this->get($page->RelativeLink())->getBody(),
|
||||
'"sitetree_link" shortcodes get parsed properly'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@ -132,7 +138,7 @@ class ContentControllerTest extends FunctionalTest {
|
||||
* @covers ContentController::getViewer()
|
||||
**/
|
||||
public function testGetViewer() {
|
||||
|
||||
|
||||
$self = $this;
|
||||
$this->useTestTheme(dirname(__FILE__), 'controllertest', function() use ($self) {
|
||||
|
||||
@ -143,8 +149,8 @@ class ContentControllerTest extends FunctionalTest {
|
||||
$page->publish("Stage", "Live");
|
||||
|
||||
$response = $self->get($page->RelativeLink());
|
||||
$self->assertEquals("ContentControllerTestPageWithoutController", $response->getBody());
|
||||
|
||||
$self->assertEquals("ContentControllerTestPageWithoutController", trim($response->getBody()));
|
||||
|
||||
// // This should fall over to user Page.ss
|
||||
$page = new ContentControllerTestPage();
|
||||
$page->URLSegment = "test";
|
||||
@ -152,7 +158,7 @@ class ContentControllerTest extends FunctionalTest {
|
||||
$page->publish("Stage", "Live");
|
||||
|
||||
$response = $self->get($page->RelativeLink());
|
||||
$self->assertEquals("Page", $response->getBody());
|
||||
$self->assertEquals("Page", trim($response->getBody()));
|
||||
|
||||
|
||||
// Test that the action template is rendered.
|
||||
@ -162,12 +168,12 @@ class ContentControllerTest extends FunctionalTest {
|
||||
$page->publish("Stage", "Live");
|
||||
|
||||
$response = $self->get($page->RelativeLink("test"));
|
||||
$self->assertEquals("ContentControllerTestPage_test", $response->getBody());
|
||||
$self->assertEquals("ContentControllerTestPage_test", trim($response->getBody()));
|
||||
|
||||
// Test that an action without a template will default to the index template, which is
|
||||
// to say the default Page.ss template
|
||||
$response = $self->get($page->RelativeLink("testwithouttemplate"));
|
||||
$self->assertEquals("Page", $response->getBody());
|
||||
$self->assertEquals("Page", trim($response->getBody()));
|
||||
|
||||
// Test that an action with a template will render the both action template *and* the
|
||||
// correct parent template
|
||||
|
@ -3,14 +3,14 @@ Group:
|
||||
Title: Editors
|
||||
admins:
|
||||
Title: Administrators
|
||||
|
||||
|
||||
Permission:
|
||||
admins:
|
||||
Code: VIEW_DRAFT_CONTENT
|
||||
Group: =>Group.admins
|
||||
editors:
|
||||
Group: =>Group.editors
|
||||
|
||||
|
||||
Member:
|
||||
editor:
|
||||
FirstName: Test
|
||||
@ -43,4 +43,4 @@ ContentControllerTest_Page:
|
||||
URLSegment: contact
|
||||
CanViewType: OnlyTheseUsers
|
||||
EditorGroups: =>Group.admins
|
||||
|
||||
|
||||
|
@ -14,8 +14,8 @@ class ModelAsControllerTest extends FunctionalTest {
|
||||
protected $orig = array();
|
||||
|
||||
/**
|
||||
* New tests require nested urls to be enabled, but the site might not
|
||||
* support nested URLs.
|
||||
* New tests require nested urls to be enabled, but the site might not
|
||||
* support nested URLs.
|
||||
* This setup will enable nested-urls for this test and resets the state
|
||||
* after the tests have been performed.
|
||||
*/
|
||||
@ -27,8 +27,8 @@ class ModelAsControllerTest extends FunctionalTest {
|
||||
}
|
||||
|
||||
/**
|
||||
* New tests require nested urls to be enabled, but the site might not
|
||||
* support nested URLs.
|
||||
* New tests require nested urls to be enabled, but the site might not
|
||||
* support nested URLs.
|
||||
* This setup will enable nested-urls for this test and resets the state
|
||||
* after the tests have been performed.
|
||||
*/
|
||||
@ -81,14 +81,14 @@ class ModelAsControllerTest extends FunctionalTest {
|
||||
* all pages will be found by their old segments.
|
||||
*
|
||||
* NOTE: This test requires nested_urls
|
||||
*
|
||||
*
|
||||
* Original: level1/level2/level3
|
||||
* Republished as: newlevel1/newlevel2/newlevel3
|
||||
*/
|
||||
public function testRedirectsNestedRenamedPages(){
|
||||
$this->generateNestedPagesFixture();
|
||||
|
||||
// check a first level URLSegment
|
||||
// check a first level URLSegment
|
||||
$response = $this->get('level1/action');
|
||||
$this->assertEquals($response->getStatusCode(),301);
|
||||
$this->assertEquals(
|
||||
@ -96,7 +96,7 @@ class ModelAsControllerTest extends FunctionalTest {
|
||||
$response->getHeader('Location')
|
||||
);
|
||||
|
||||
// check second level URLSegment
|
||||
// check second level URLSegment
|
||||
$response = $this->get('newlevel1/level2');
|
||||
$this->assertEquals($response->getStatusCode(),301 );
|
||||
$this->assertEquals(
|
||||
@ -104,7 +104,7 @@ class ModelAsControllerTest extends FunctionalTest {
|
||||
$response->getHeader('Location')
|
||||
);
|
||||
|
||||
// check third level URLSegment
|
||||
// check third level URLSegment
|
||||
$response = $this->get('newlevel1/newlevel2/level3');
|
||||
$this->assertEquals($response->getStatusCode(), 301);
|
||||
$this->assertEquals(
|
||||
@ -199,7 +199,7 @@ class ModelAsControllerTest extends FunctionalTest {
|
||||
|
||||
$response = $this->get('newlevel1/otherparent');
|
||||
$this->assertEquals(
|
||||
$response->getStatusCode(),
|
||||
$response->getStatusCode(),
|
||||
404,
|
||||
'Requesting an unrelated page on a renamed parent should be interpreted as a missing action, not a redirect'
|
||||
);
|
||||
@ -208,12 +208,12 @@ class ModelAsControllerTest extends FunctionalTest {
|
||||
/**
|
||||
*
|
||||
* NOTE: This test requires nested_urls
|
||||
*
|
||||
*
|
||||
*/
|
||||
public function testRedirectsNestedRenamedPagesWithGetParameters() {
|
||||
$this->generateNestedPagesFixture();
|
||||
|
||||
// check third level URLSegment
|
||||
// check third level URLSegment
|
||||
$response = $this->get('newlevel1/newlevel2/level3/?foo=bar&test=test');
|
||||
$this->assertEquals($response->getStatusCode(), 301);
|
||||
$this->assertEquals(
|
||||
@ -225,7 +225,7 @@ class ModelAsControllerTest extends FunctionalTest {
|
||||
/**
|
||||
*
|
||||
* NOTE: This test requires nested_urls
|
||||
*
|
||||
*
|
||||
*/
|
||||
public function testDoesntRedirectToNestedRenamedPageWhenNewExists() {
|
||||
$this->generateNestedPagesFixture();
|
||||
@ -239,14 +239,14 @@ class ModelAsControllerTest extends FunctionalTest {
|
||||
|
||||
$response = $this->get('level1');
|
||||
$this->assertEquals(
|
||||
$response->getStatusCode(),
|
||||
$response->getStatusCode(),
|
||||
200
|
||||
);
|
||||
|
||||
$response = $this->get('level1/newlevel2');
|
||||
$this->assertEquals(
|
||||
$response->getStatusCode(),
|
||||
404,
|
||||
$response->getStatusCode(),
|
||||
404,
|
||||
'The old newlevel2/ URLSegment is checked as an action on the new page, which shouldnt exist.'
|
||||
);
|
||||
}
|
||||
@ -254,7 +254,7 @@ class ModelAsControllerTest extends FunctionalTest {
|
||||
/**
|
||||
*
|
||||
* NOTE: This test requires nested_urls
|
||||
*
|
||||
*
|
||||
*/
|
||||
public function testFindOldPage(){
|
||||
$page = new Page();
|
||||
|
@ -15,4 +15,4 @@ Page:
|
||||
page3:
|
||||
Title: Third Page
|
||||
URLSegment: page3
|
||||
HomepageForDomain: only.com
|
||||
HomepageForDomain: only.com
|
||||
|
@ -1 +1 @@
|
||||
ContentControllerTestPageWithoutController
|
||||
ContentControllerTestPageWithoutController
|
||||
|
@ -1 +1 @@
|
||||
ContentControllerTestPage_test
|
||||
ContentControllerTestPage_test
|
||||
|
@ -1 +1 @@
|
||||
Controller
|
||||
Controller
|
||||
|
@ -1 +1 @@
|
||||
Page
|
||||
Page
|
||||
|
@ -1 +1 @@
|
||||
$Layout
|
||||
$Layout
|
||||
|
@ -1,11 +1,11 @@
|
||||
ErrorPage:
|
||||
404:
|
||||
Title: Page Not Found
|
||||
URLSegment: page-not-found
|
||||
Content: My error page body
|
||||
ErrorCode: 404
|
||||
403:
|
||||
Title: Permission Failure
|
||||
URLSegment: permission-denied
|
||||
Content: You do not have permission to view this page
|
||||
ErrorCode: 403
|
||||
404:
|
||||
Title: Page Not Found
|
||||
URLSegment: page-not-found
|
||||
Content: My error page body
|
||||
ErrorCode: 404
|
||||
403:
|
||||
Title: Permission Failure
|
||||
URLSegment: permission-denied
|
||||
Content: You do not have permission to view this page
|
||||
ErrorCode: 403
|
@ -31,7 +31,7 @@ RedirectorPage:
|
||||
Title: Reflexive
|
||||
RedirectionType: Internal
|
||||
LinkTo: =>RedirectorPage.reflexive
|
||||
URLSegment: reflexive
|
||||
URLSegment: reflexive
|
||||
transitive:
|
||||
Title: Transitive
|
||||
RedirectionType: Internal
|
||||
|
@ -8,7 +8,7 @@
|
||||
* - action_deletefromlive
|
||||
* - action_rollback
|
||||
* - action_revert
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage tests
|
||||
*/
|
||||
|
@ -30,4 +30,4 @@ Member:
|
||||
Groups: =>Group.cmsreadonly
|
||||
cmsnodeleteeditor:
|
||||
Email: cmsnodeleteeditor@test.com
|
||||
Groups: =>Group.cmsnodelete
|
||||
Groups: =>Group.cmsnodelete
|
||||
|
@ -1,4 +1,4 @@
|
||||
Page:
|
||||
Page:
|
||||
page1:
|
||||
ID: 1
|
||||
Title: page1
|
||||
@ -13,5 +13,5 @@ Page:
|
||||
URLSegment: page3
|
||||
Content: '<p><a href="[sitetree_link,id=1]">Testing page 1 link</a></p>'
|
||||
LinkTracking: =>Page.page1
|
||||
|
||||
|
||||
|
||||
|
@ -107,7 +107,7 @@ class SiteTreeBrokenLinksTest extends SapphireTest {
|
||||
|
||||
// Confirm no broken link
|
||||
$this->assertEquals(0, (int)$linkSrc->HasBrokenLink);
|
||||
$this->assertEquals(0, DB::query("SELECT \"HasBrokenLink\" FROM \"SiteTree_Live\"
|
||||
$this->assertEquals(0, DB::query("SELECT \"HasBrokenLink\" FROM \"SiteTree_Live\"
|
||||
WHERE \"ID\" = $linkSrc->ID")->value());
|
||||
|
||||
// Delete page from draft
|
||||
@ -119,7 +119,7 @@ class SiteTreeBrokenLinksTest extends SapphireTest {
|
||||
$linkSrc = $this->objFromFixture('Page', 'content');
|
||||
|
||||
$this->assertEquals(1, (int)$linkSrc->HasBrokenLink);
|
||||
$this->assertEquals(0, DB::query("SELECT \"HasBrokenLink\" FROM \"SiteTree_Live\"
|
||||
$this->assertEquals(0, DB::query("SELECT \"HasBrokenLink\" FROM \"SiteTree_Live\"
|
||||
WHERE \"ID\" = $linkSrc->ID")->value());
|
||||
|
||||
// Delete from live
|
||||
@ -131,7 +131,7 @@ class SiteTreeBrokenLinksTest extends SapphireTest {
|
||||
$linkSrc = $this->objFromFixture('Page', 'content');
|
||||
|
||||
$this->assertEquals(1, (int)$linkSrc->HasBrokenLink);
|
||||
$this->assertEquals(1, DB::query("SELECT \"HasBrokenLink\" FROM \"SiteTree_Live\"
|
||||
$this->assertEquals(1, DB::query("SELECT \"HasBrokenLink\" FROM \"SiteTree_Live\"
|
||||
WHERE \"ID\" = $linkSrc->ID")->value());
|
||||
}
|
||||
|
||||
@ -147,12 +147,12 @@ class SiteTreeBrokenLinksTest extends SapphireTest {
|
||||
$linkSrc->Content = "<p><a href=\"[sitetree_link,id=$linkDest->ID]\">about us</a></p>";
|
||||
$linkSrc->write();
|
||||
|
||||
// Publish the source of the link, while the dest is still unpublished.
|
||||
// Publish the source of the link, while the dest is still unpublished.
|
||||
$linkSrc->doPublish();
|
||||
|
||||
// Verify that the link isn't broken on draft but is broken on published
|
||||
$this->assertEquals(0, (int)$linkSrc->HasBrokenLink);
|
||||
$this->assertEquals(1, DB::query("SELECT \"HasBrokenLink\" FROM \"SiteTree_Live\"
|
||||
$this->assertEquals(1, DB::query("SELECT \"HasBrokenLink\" FROM \"SiteTree_Live\"
|
||||
WHERE \"ID\" = $linkSrc->ID")->value());
|
||||
}
|
||||
|
||||
|
@ -24,4 +24,4 @@ File:
|
||||
ErrorPage:
|
||||
404:
|
||||
Title: Page not Found
|
||||
ErrorCode: 404
|
||||
ErrorCode: 404
|
||||
|
@ -32,6 +32,7 @@ class SiteTreeLinkTrackingTest extends SapphireTest {
|
||||
$this->assertFalse($this->isBroken("<a href=\"[sitetree_link,id=$page->ID]#yes-name-anchor\">link</a>"));
|
||||
$this->assertFalse($this->isBroken("<a href=\"[sitetree_link,id=$page->ID]#yes-id-anchor\">link</a>"));
|
||||
$this->assertFalse($this->isBroken("<a href=\"[file_link,id=$file->ID]\">link</a>"));
|
||||
$this->assertTrue($this->isBroken("<a href=\"[sitetree_link,id=$page->ID]#http://invalid-anchor.com\"></a>"));
|
||||
}
|
||||
|
||||
protected function highlight($content) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @package cms
|
||||
* @subpackage tests
|
||||
*
|
||||
*
|
||||
* @todo Test canAddChildren()
|
||||
* @todo Test canCreate()
|
||||
*/
|
||||
@ -40,10 +40,14 @@ class SiteTreePermissionsTest extends FunctionalTest {
|
||||
$this->assertEquals($response->getStatusCode(), '404');
|
||||
|
||||
// should be prompted for a login
|
||||
$response = $this->get($page->URLSegment . '?stage=Stage');
|
||||
try {
|
||||
$response = $this->get($page->URLSegment . '?stage=Stage');
|
||||
} catch(SS_HTTPResponse_Exception $responseException) {
|
||||
$response = $responseException->getResponse();
|
||||
}
|
||||
$this->assertEquals($response->getStatusCode(), '302');
|
||||
$this->assertContains(
|
||||
Config::inst()->get('Security', 'login_url'),
|
||||
Config::inst()->get('Security', 'login_url'),
|
||||
$response->getHeader('Location')
|
||||
);
|
||||
|
||||
|
@ -85,4 +85,4 @@ Page:
|
||||
URLSegment: deleteTestChildPage
|
||||
draftOnlyPage:
|
||||
CanViewType: Anyone
|
||||
URLSegment: draft-only
|
||||
URLSegment: draft-only
|
||||
|
@ -413,7 +413,7 @@ class SiteTreeTest extends SapphireTest {
|
||||
Versioned::reading_stage('Stage');
|
||||
Config::inst()->update('SiteTree', 'enforce_strict_hierarchy', true);
|
||||
}
|
||||
|
||||
|
||||
public function testDeleteFromLiveOperatesRecursivelyStrict() {
|
||||
$this->logInWithPermission('ADMIN');
|
||||
|
||||
@ -1192,7 +1192,7 @@ class SiteTreeTest_Conflicted_Controller extends Page_Controller implements Test
|
||||
return parent::hasActionTemplate($template);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
class SiteTreeTest_NullHtmlCleaner extends HTMLCleaner {
|
||||
@ -1210,7 +1210,7 @@ class SiteTreeTest_ClassA extends Page implements TestOnly {
|
||||
|
||||
class SiteTreeTest_ClassB extends Page implements TestOnly {
|
||||
// Also allowed subclasses
|
||||
private static $allowed_children = array('SiteTreeTest_ClassC');
|
||||
private static $allowed_children = array('SiteTreeTest_ClassC');
|
||||
}
|
||||
|
||||
class SiteTreeTest_ClassC extends Page implements TestOnly {
|
||||
|
@ -1,7 +1,9 @@
|
||||
<?php
|
||||
|
||||
class VirtualPageTest extends SapphireTest {
|
||||
class VirtualPageTest extends FunctionalTest {
|
||||
protected static $fixture_file = 'VirtualPageTest.yml';
|
||||
protected static $use_draft_site = false;
|
||||
protected $autoFollowRedirection = false;
|
||||
|
||||
protected $extraDataObjects = array(
|
||||
'VirtualPageTest_ClassA',
|
||||
@ -25,6 +27,9 @@ class VirtualPageTest extends SapphireTest {
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
// Ensure we always have permission to save/publish
|
||||
$this->logInWithPermission("ADMIN");
|
||||
|
||||
$this->origInitiallyCopiedFields = VirtualPage::config()->initially_copied_fields;
|
||||
Config::inst()->remove('VirtualPage', 'initially_copied_fields');
|
||||
VirtualPage::config()->initially_copied_fields = array_merge(
|
||||
@ -274,7 +279,7 @@ class VirtualPageTest extends SapphireTest {
|
||||
|
||||
$this->assertEquals($vp->ID, DB::query("SELECT \"RecordID\" FROM \"SiteTree_versions\"
|
||||
WHERE \"RecordID\" = $vp->ID AND \"Title\" = 'T1'")->value());
|
||||
$this->assertEquals($vp->ID, DB::query("SELECT \"RecordID\" FROM \"SiteTree_versions\"
|
||||
$this->assertEquals($vp->ID, DB::query("SELECT \"RecordID\" FROM \"SiteTree_versions\"
|
||||
WHERE \"RecordID\" = $vp->ID AND \"Title\" = 'T2'")->value());
|
||||
$this->assertEquals($vp->ID, DB::query("SELECT \"RecordID\" FROM \"SiteTree_versions\"
|
||||
WHERE \"RecordID\" = $vp->ID AND \"Version\" = $vp->Version")->value());
|
||||
@ -285,12 +290,12 @@ class VirtualPageTest extends SapphireTest {
|
||||
// version
|
||||
$liveVersion = DB::query("SELECT \"Version\" FROM \"SiteTree_Live\" WHERE \"ID\" = $vp->ID")->value();
|
||||
|
||||
$this->assertEquals("T0", DB::query("SELECT \"Title\" FROM \"SiteTree_Live\"
|
||||
$this->assertEquals("T0", DB::query("SELECT \"Title\" FROM \"SiteTree_Live\"
|
||||
WHERE \"ID\" = $vp->ID")->value());
|
||||
|
||||
// SiteTree_Live.Version should reference a legal entry in SiteTree_versions for the
|
||||
// virtual page
|
||||
$this->assertEquals("T0", DB::query("SELECT \"Title\" FROM \"SiteTree_versions\"
|
||||
$this->assertEquals("T0", DB::query("SELECT \"Title\" FROM \"SiteTree_versions\"
|
||||
WHERE \"RecordID\" = $vp->ID AND \"Version\" = $liveVersion")->value());
|
||||
}
|
||||
|
||||
@ -421,12 +426,12 @@ class VirtualPageTest extends SapphireTest {
|
||||
$virtual->copyFrom($original);
|
||||
// Using getField() to avoid side effects from an overloaded __get()
|
||||
$this->assertEquals(
|
||||
'original',
|
||||
'original',
|
||||
$virtual->getField('MyInitiallyCopiedField'),
|
||||
'Fields listed in $initially_copied_fields are copied on first copyFrom() invocation'
|
||||
);
|
||||
$this->assertEquals(
|
||||
'original',
|
||||
'original',
|
||||
$virtual->getField('MyVirtualField'),
|
||||
'Fields not listed in $initially_copied_fields are copied in copyFrom()'
|
||||
);
|
||||
@ -439,7 +444,7 @@ class VirtualPageTest extends SapphireTest {
|
||||
$original->write();
|
||||
$virtual->copyFrom($original);
|
||||
$this->assertEquals(
|
||||
'original',
|
||||
'original',
|
||||
$virtual->MyInitiallyCopiedField,
|
||||
'Fields listed in $initially_copied_fields are not copied on subsequent copyFrom() invocations'
|
||||
);
|
||||
@ -465,8 +470,8 @@ class VirtualPageTest extends SapphireTest {
|
||||
$virtual->Title = 'changed 1';
|
||||
$virtual->writeWithoutVersion();
|
||||
$this->assertEquals(
|
||||
$virtual->Version,
|
||||
$virtualVersion,
|
||||
$virtual->Version,
|
||||
$virtualVersion,
|
||||
'writeWithoutVersion() on VirtualPage doesnt increment version'
|
||||
);
|
||||
|
||||
@ -476,8 +481,8 @@ class VirtualPageTest extends SapphireTest {
|
||||
DataObject::flush_and_destroy_cache();
|
||||
$virtual = DataObject::get_by_id('VirtualPage', $virtual->ID, false);
|
||||
$this->assertEquals(
|
||||
$virtual->Version,
|
||||
$virtualVersion,
|
||||
$virtual->Version,
|
||||
$virtualVersion,
|
||||
'writeWithoutVersion() on original page doesnt increment version on related VirtualPage'
|
||||
);
|
||||
|
||||
@ -486,8 +491,8 @@ class VirtualPageTest extends SapphireTest {
|
||||
DataObject::flush_and_destroy_cache();
|
||||
$virtual = DataObject::get_by_id('VirtualPage', $virtual->ID, false);
|
||||
$this->assertGreaterThan(
|
||||
$virtualVersion,
|
||||
$virtual->Version,
|
||||
$virtualVersion,
|
||||
$virtual->Version,
|
||||
'write() on original page does increment version on related VirtualPage'
|
||||
);
|
||||
}
|
||||
@ -499,7 +504,7 @@ class VirtualPageTest extends SapphireTest {
|
||||
|
||||
$notRootPage = new VirtualPageTest_NotRoot();
|
||||
// we don't want the original on root, but rather the VirtualPage pointing to it
|
||||
$notRootPage->ParentID = $page->ID;
|
||||
$notRootPage->ParentID = $page->ID;
|
||||
$notRootPage->write();
|
||||
|
||||
$virtual = new VirtualPage();
|
||||
@ -516,7 +521,7 @@ class VirtualPageTest extends SapphireTest {
|
||||
} catch(ValidationException $e) {
|
||||
$this->assertContains('is not allowed on the root level', $e->getMessage());
|
||||
$isDetected = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(!$isDetected) $this->fail('Fails validation with $can_be_root=false');
|
||||
}
|
||||
@ -644,10 +649,28 @@ class VirtualPageTest extends SapphireTest {
|
||||
} catch(ValidationException $e) {
|
||||
$this->assertContains('not allowed as child of this parent page', $e->getMessage());
|
||||
$isDetected = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(!$isDetected) $this->fail("Shouldn't be allowed to write a VirtualPage that links to a disallowed child");
|
||||
}
|
||||
|
||||
public function testVirtualPagePointingToRedirectorPage() {
|
||||
if (!class_exists('RedirectorPage')) {
|
||||
$this->markTestSkipped('RedirectorPage required');
|
||||
}
|
||||
|
||||
$rp = new RedirectorPage(array('ExternalURL' => 'http://google.com', 'RedirectionType' => 'External'));
|
||||
$rp->write();
|
||||
$rp->doPublish();
|
||||
|
||||
$vp = new VirtualPage(array('URLSegment' => 'vptest', 'CopyContentFromID' => $rp->ID));
|
||||
$vp->write();
|
||||
$vp->doPublish();
|
||||
|
||||
$response = $this->get($vp->Link());
|
||||
$this->assertEquals(301, $response->getStatusCode());
|
||||
$this->assertEquals('http://google.com', $response->getHeader('Location'));
|
||||
}
|
||||
}
|
||||
|
||||
class VirtualPageTest_ClassA extends Page implements TestOnly {
|
||||
@ -663,7 +686,7 @@ class VirtualPageTest_ClassA extends Page implements TestOnly {
|
||||
}
|
||||
|
||||
class VirtualPageTest_ClassB extends Page implements TestOnly {
|
||||
private static $allowed_children = array('VirtualPageTest_ClassC');
|
||||
private static $allowed_children = array('VirtualPageTest_ClassC');
|
||||
}
|
||||
|
||||
class VirtualPageTest_ClassC extends Page implements TestOnly {
|
||||
|
@ -37,15 +37,13 @@ class CmsReportsTest extends SapphireTest {
|
||||
$class = get_class($report);
|
||||
|
||||
// ASSERT that the "draft" report is returning the correct results.
|
||||
|
||||
$results = count($report->sourceRecords(array())) > 0;
|
||||
$parameters = array('CheckSite' => 'Draft');
|
||||
$results = count($report->sourceRecords($parameters, null, null)) > 0;
|
||||
$isDraftBroken ? $this->assertTrue($results, "{$class} has NOT returned the correct DRAFT results, as NO pages were found.") : $this->assertFalse($results, "{$class} has NOT returned the correct DRAFT results, as pages were found.");
|
||||
|
||||
// ASSERT that the "published" report is returning the correct results.
|
||||
|
||||
$results = count($report->sourceRecords(array(
|
||||
'OnLive' => 1
|
||||
))) > 0;
|
||||
$parameters = array('CheckSite' => 'Published', 'OnLive' => 1);
|
||||
$results = count($report->sourceRecords($parameters, null, null)) > 0;
|
||||
$isPublishedBroken ? $this->assertTrue($results, "{$class} has NOT returned the correct PUBLISHED results, as NO pages were found.") : $this->assertFalse($results, "{$class} has NOT returned the correct PUBLISHED results, as pages were found.");
|
||||
}
|
||||
|
||||
@ -82,49 +80,50 @@ class CmsReportsTest extends SapphireTest {
|
||||
$reports = SS_Report::get_reports();
|
||||
$brokenLinksReport = null;
|
||||
foreach($reports as $report) {
|
||||
if($report instanceof SideReport_BrokenLinks) {
|
||||
if($report instanceof BrokenLinksReport) {
|
||||
$brokenLinksReport = $report;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Determine that the report exists, otherwise it has been excluded.
|
||||
|
||||
if($brokenLinksReport) {
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken link.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken link, as the page has not been "published" yet.
|
||||
|
||||
$this->isReportBroken($brokenLinksReport, true, false);
|
||||
|
||||
// Make sure the page is now "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken link.
|
||||
// ASSERT that the "published" report has detected the page having a broken link.
|
||||
|
||||
$this->isReportBroken($brokenLinksReport, true, true);
|
||||
|
||||
// Correct the "draft" broken link.
|
||||
|
||||
$page->Content = str_replace('987654321', $page->ID, $page->Content);
|
||||
$page->writeToStage('Stage');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken link.
|
||||
// ASSERT that the "published" report has detected the page having a broken link, as the previous content remains "published".
|
||||
|
||||
$this->isReportBroken($brokenLinksReport, false, true);
|
||||
|
||||
// Make sure the change has now been "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken link.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken link.
|
||||
|
||||
$this->isReportBroken($brokenLinksReport, false, false);
|
||||
if(!$brokenLinksReport){
|
||||
$this->markTestSkipped('BrokenLinksReport is not an available report');
|
||||
return;
|
||||
}
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken link.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken link, as the page has not been "published" yet.
|
||||
|
||||
$this->isReportBroken($brokenLinksReport, true, false);
|
||||
|
||||
// Make sure the page is now "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken link.
|
||||
// ASSERT that the "published" report has detected the page having a broken link.
|
||||
|
||||
$this->isReportBroken($brokenLinksReport, true, true);
|
||||
|
||||
// Correct the "draft" broken link.
|
||||
|
||||
$page->Content = str_replace('987654321', $page->ID, $page->Content);
|
||||
$page->writeToStage('Stage');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken link.
|
||||
// ASSERT that the "published" report has detected the page having a broken link, as the previous content remains "published".
|
||||
|
||||
$this->isReportBroken($brokenLinksReport, false, true);
|
||||
|
||||
// Make sure the change has now been "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken link.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken link.
|
||||
|
||||
$this->isReportBroken($brokenLinksReport, false, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -144,52 +143,53 @@ class CmsReportsTest extends SapphireTest {
|
||||
$reports = SS_Report::get_reports();
|
||||
$brokenFilesReport = null;
|
||||
foreach($reports as $report) {
|
||||
if($report instanceof SideReport_BrokenFiles) {
|
||||
if($report instanceof BrokenFilesReport) {
|
||||
$brokenFilesReport = $report;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Determine that the report exists, otherwise it has been excluded.
|
||||
|
||||
if($brokenFilesReport) {
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken file.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken file, as the page has not been "published" yet.
|
||||
|
||||
$this->isReportBroken($brokenFilesReport, true, false);
|
||||
|
||||
// Make sure the page is now "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken file.
|
||||
// ASSERT that the "published" report has detected the page having a broken file.
|
||||
|
||||
$this->isReportBroken($brokenFilesReport, true, true);
|
||||
|
||||
// Correct the "draft" broken file.
|
||||
|
||||
$file = File::create();
|
||||
$file->Filename = 'name.pdf';
|
||||
$file->write();
|
||||
$page->Content = str_replace('987654321', $file->ID, $page->Content);
|
||||
$page->writeToStage('Stage');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken file.
|
||||
// ASSERT that the "published" report has detected the page having a broken file, as the previous content remains "published".
|
||||
|
||||
$this->isReportBroken($brokenFilesReport, false, true);
|
||||
|
||||
// Make sure the change has now been "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken file.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken file.
|
||||
|
||||
$this->isReportBroken($brokenFilesReport, false, false);
|
||||
if(!$brokenFilesReport){
|
||||
$this->markTestSkipped('BrokenFilesReport is not an available report');
|
||||
return;
|
||||
}
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken file.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken file, as the page has not been "published" yet.
|
||||
|
||||
$this->isReportBroken($brokenFilesReport, true, false);
|
||||
|
||||
// Make sure the page is now "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken file.
|
||||
// ASSERT that the "published" report has detected the page having a broken file.
|
||||
|
||||
$this->isReportBroken($brokenFilesReport, true, true);
|
||||
|
||||
// Correct the "draft" broken file.
|
||||
|
||||
$file = File::create();
|
||||
$file->Filename = 'name.pdf';
|
||||
$file->write();
|
||||
$page->Content = str_replace('987654321', $file->ID, $page->Content);
|
||||
$page->writeToStage('Stage');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken file.
|
||||
// ASSERT that the "published" report has detected the page having a broken file, as the previous content remains "published".
|
||||
|
||||
$this->isReportBroken($brokenFilesReport, false, true);
|
||||
|
||||
// Make sure the change has now been "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken file.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken file.
|
||||
|
||||
$this->isReportBroken($brokenFilesReport, false, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -209,53 +209,54 @@ class CmsReportsTest extends SapphireTest {
|
||||
$reports = SS_Report::get_reports();
|
||||
$brokenVirtualPagesReport = null;
|
||||
foreach($reports as $report) {
|
||||
if($report instanceof SideReport_BrokenVirtualPages) {
|
||||
if($report instanceof BrokenVirtualPagesReport) {
|
||||
$brokenVirtualPagesReport = $report;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Determine that the report exists, otherwise it has been excluded.
|
||||
|
||||
if($brokenVirtualPagesReport) {
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken link.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken link, as the page has not been "published" yet.
|
||||
|
||||
$this->isReportBroken($brokenVirtualPagesReport, true, false);
|
||||
|
||||
// Make sure the page is now "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken link.
|
||||
// ASSERT that the "published" report has detected the page having a broken link.
|
||||
|
||||
$this->isReportBroken($brokenVirtualPagesReport, true, true);
|
||||
|
||||
// Correct the "draft" broken link.
|
||||
|
||||
$contentPage = Page::create();
|
||||
$contentPage->Content = 'This is some content.';
|
||||
$contentPage->writeToStage('Stage');
|
||||
$contentPage->writeToStage('Live');
|
||||
$page->CopyContentFromID = $contentPage->ID;
|
||||
$page->writeToStage('Stage');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken link.
|
||||
// ASSERT that the "published" report has detected the page having a broken link, as the previous content remains "published".
|
||||
|
||||
$this->isReportBroken($brokenVirtualPagesReport, false, true);
|
||||
|
||||
// Make sure the change has now been "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken link.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken link.
|
||||
|
||||
$this->isReportBroken($brokenVirtualPagesReport, false, false);
|
||||
if(!$brokenVirtualPagesReport){
|
||||
$this->markTestSkipped('BrokenFilesReport is not an available report');
|
||||
return;
|
||||
}
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken link.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken link, as the page has not been "published" yet.
|
||||
|
||||
$this->isReportBroken($brokenVirtualPagesReport, true, false);
|
||||
|
||||
// Make sure the page is now "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken link.
|
||||
// ASSERT that the "published" report has detected the page having a broken link.
|
||||
|
||||
$this->isReportBroken($brokenVirtualPagesReport, true, true);
|
||||
|
||||
// Correct the "draft" broken link.
|
||||
|
||||
$contentPage = Page::create();
|
||||
$contentPage->Content = 'This is some content.';
|
||||
$contentPage->writeToStage('Stage');
|
||||
$contentPage->writeToStage('Live');
|
||||
$page->CopyContentFromID = $contentPage->ID;
|
||||
$page->writeToStage('Stage');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken link.
|
||||
// ASSERT that the "published" report has detected the page having a broken link, as the previous content remains "published".
|
||||
|
||||
$this->isReportBroken($brokenVirtualPagesReport, false, true);
|
||||
|
||||
// Make sure the change has now been "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken link.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken link.
|
||||
|
||||
$this->isReportBroken($brokenVirtualPagesReport, false, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -276,53 +277,54 @@ class CmsReportsTest extends SapphireTest {
|
||||
$reports = SS_Report::get_reports();
|
||||
$brokenRedirectorPagesReport = null;
|
||||
foreach($reports as $report) {
|
||||
if($report instanceof SideReport_BrokenRedirectorPages) {
|
||||
if($report instanceof BrokenRedirectorPagesReport) {
|
||||
$brokenRedirectorPagesReport = $report;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Determine that the report exists, otherwise it has been excluded.
|
||||
|
||||
if($brokenRedirectorPagesReport) {
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken link.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken link, as the page has not been "published" yet.
|
||||
|
||||
$this->isReportBroken($brokenRedirectorPagesReport, true, false);
|
||||
|
||||
// Make sure the page is now "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken link.
|
||||
// ASSERT that the "published" report has detected the page having a broken link.
|
||||
|
||||
$this->isReportBroken($brokenRedirectorPagesReport, true, true);
|
||||
|
||||
// Correct the "draft" broken link.
|
||||
|
||||
$contentPage = Page::create();
|
||||
$contentPage->Content = 'This is some content.';
|
||||
$contentPage->writeToStage('Stage');
|
||||
$contentPage->writeToStage('Live');
|
||||
$page->LinkToID = $contentPage->ID;
|
||||
$page->writeToStage('Stage');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken link.
|
||||
// ASSERT that the "published" report has detected the page having a broken link, as the previous content remains "published".
|
||||
|
||||
$this->isReportBroken($brokenRedirectorPagesReport, false, true);
|
||||
|
||||
// Make sure the change has now been "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken link.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken link.
|
||||
|
||||
$this->isReportBroken($brokenRedirectorPagesReport, false, false);
|
||||
if(!$brokenRedirectorPagesReport){
|
||||
$this->markTestSkipped('BrokenRedirectorPagesReport is not an available report');
|
||||
return;
|
||||
}
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken link.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken link, as the page has not been "published" yet.
|
||||
|
||||
$this->isReportBroken($brokenRedirectorPagesReport, true, false);
|
||||
|
||||
// Make sure the page is now "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has detected the page having a broken link.
|
||||
// ASSERT that the "published" report has detected the page having a broken link.
|
||||
|
||||
$this->isReportBroken($brokenRedirectorPagesReport, true, true);
|
||||
|
||||
// Correct the "draft" broken link.
|
||||
|
||||
$contentPage = Page::create();
|
||||
$contentPage->Content = 'This is some content.';
|
||||
$contentPage->writeToStage('Stage');
|
||||
$contentPage->writeToStage('Live');
|
||||
$page->LinkToID = $contentPage->ID;
|
||||
$page->writeToStage('Stage');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken link.
|
||||
// ASSERT that the "published" report has detected the page having a broken link, as the previous content remains "published".
|
||||
|
||||
$this->isReportBroken($brokenRedirectorPagesReport, false, true);
|
||||
|
||||
// Make sure the change has now been "published".
|
||||
|
||||
$page->writeToStage('Live');
|
||||
|
||||
// ASSERT that the "draft" report has NOT detected the page having a broken link.
|
||||
// ASSERT that the "published" report has NOT detected the page having a broken link.
|
||||
|
||||
$this->isReportBroken($brokenRedirectorPagesReport, false, false);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,4 +2,4 @@ SiteTree:
|
||||
after:
|
||||
Title: after
|
||||
before:
|
||||
Title: before
|
||||
Title: before
|
||||
|
@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @package cms
|
||||
* @subpackage testing
|
||||
*
|
||||
*
|
||||
* @todo Fix unpublished pages check in testPublishedPagesMatchedByTitle()
|
||||
* @todo All tests run on unpublished pages at the moment, due to the searchform not distinguishing between them
|
||||
*
|
||||
*
|
||||
* Because this manipulates the test database in severe ways, I've renamed the test to force it to run last...
|
||||
*/
|
||||
class ZZZSearchFormTest extends FunctionalTest {
|
||||
|
@ -40,4 +40,4 @@ File:
|
||||
ShowInSearch: 1
|
||||
dontShowInSearchFile:
|
||||
Title: dontShowInSearchFile
|
||||
ShowInSearch: 0
|
||||
ShowInSearch: 0
|
||||
|
@ -58,7 +58,7 @@ class MigrateSiteTreeLinkingTaskTest extends SapphireTest {
|
||||
'HTML URLSegment links are rewritten.'
|
||||
);
|
||||
$this->assertEquals (
|
||||
$aboutContent,
|
||||
$aboutContent,
|
||||
DataObject::get_by_id('SiteTree', $aboutID)->Content
|
||||
);
|
||||
$this->assertEquals (
|
||||
|
@ -14,7 +14,7 @@
|
||||
* parent2
|
||||
* child2_1_published_orphaned // is orphaned because parent is not published
|
||||
* </code>
|
||||
*
|
||||
*
|
||||
* <h2>Cleaned up tree</h2>
|
||||
* <code>
|
||||
* parent1_published
|
||||
@ -24,9 +24,9 @@
|
||||
* child2_1_published_orphaned
|
||||
* parent2
|
||||
* </code>
|
||||
*
|
||||
*
|
||||
* @author Ingo Schommer (<firstname>@silverstripe.com), SilverStripe Ltd.
|
||||
*
|
||||
*
|
||||
* @package cms
|
||||
* @subpackage tests
|
||||
*/
|
||||
|
@ -29,4 +29,4 @@ Page:
|
||||
Title: Parent2
|
||||
child2_1_published_orphaned:
|
||||
Title: Child2.1
|
||||
Parent: =>Page.parent2
|
||||
Parent: =>Page.parent2
|
||||
|
Loading…
Reference in New Issue
Block a user