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:
Damian Mooyman 2016-01-20 13:16:43 +13:00
commit 7dfe145412
189 changed files with 1372 additions and 1409 deletions

24
.editorconfig Normal file
View 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

View File

@ -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"

View File

@ -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");

View File

@ -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

View File

@ -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));
}

View File

@ -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;
}
}

View File

@ -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() {

View File

@ -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');

View File

@ -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'];

View File

@ -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();
}

View File

@ -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;

View File

@ -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"))

View File

@ -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 &lt;meta name=\"customName\" content=\"your custom content here\" /&gt;"
)
)
@ -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() {

View File

@ -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.

View File

@ -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);

View File

@ -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'] . ',';
}
}

View File

@ -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(

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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) {

View File

@ -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;
}
}

View File

@ -1,3 +1,3 @@
div#SideReportsHolder {
clear: left;
}
}

View File

@ -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;
}
*/
*/

View File

@ -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.

View File

@ -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
*/

View File

@ -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);

View File

@ -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)) {

View File

@ -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');

View File

@ -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();
}
}
});

View File

@ -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)
*/

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "إلغاء",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Storno",
"URLSEGMENT.UpdateURL": "Aktualizovat URL"
});
}
}

View File

@ -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"
});
}
}

View File

@ -42,4 +42,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Άκυρο"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Cancel",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Rezigni",
"URLSEGMENT.UpdateURL": "Ĝisdatigi je URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Cancelar",
"URLSEGMENT.UpdateURL": "Actualizar URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "لغو",
"URLSEGMENT.UpdateURL": "به روز رسانی URL"
});
}
}

View File

@ -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"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Annuler",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Mégsem",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Batal",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Hætta við",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Annulla",
"URLSEGMENT.UpdateURL": "Aggiornare l'URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "キャンセル",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "취소",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Atšaukti",
"URLSEGMENT.UpdateURL": "Atnaujinti URL dalį"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Whakakore",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Avbryt",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Annuleren",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Anuluj",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Renunţare",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Отмена",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Zrušiť",
"URLSEGMENT.UpdateURL": "Aktualizovať URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Prekliči",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Одустани",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Odustani",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "موافق",
"URLSEGMENT.Cancel": "إلغاء",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Storno",
"URLSEGMENT.UpdateURL": "Aktualizovat URL"
}
}

View File

@ -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"
}
}

View File

@ -36,4 +36,4 @@
"URLSEGMENT.Edit": "Επεξεργασία",
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Άκυρο"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Cancel",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "Akcepti",
"URLSEGMENT.Cancel": "Rezigni",
"URLSEGMENT.UpdateURL": "Ĝisdatigi je URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "Ok",
"URLSEGMENT.Cancel": "Cancelar",
"URLSEGMENT.UpdateURL": "Actualizar URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "تایید",
"URLSEGMENT.Cancel": "لغو",
"URLSEGMENT.UpdateURL": "به روز رسانی URL"
}
}

View File

@ -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"
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "Ok",
"URLSEGMENT.Cancel": "Annuler",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Mégsem",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Batal",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "Allt í lagi",
"URLSEGMENT.Cancel": "Hætta við",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Annulla",
"URLSEGMENT.UpdateURL": "Aggiornare l'URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "キャンセル",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "취소",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "Gerai",
"URLSEGMENT.Cancel": "Atšaukti",
"URLSEGMENT.UpdateURL": "Atnaujinti URL dalį"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "ĀE",
"URLSEGMENT.Cancel": "Whakakore",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Avbryt",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Annuleren",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Anuluj",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Renunţare",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "ОК",
"URLSEGMENT.Cancel": "Отмена",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Zrušiť",
"URLSEGMENT.UpdateURL": "Aktualizovať URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Prekliči",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "У реду",
"URLSEGMENT.Cancel": "Одустани",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "U redu",
"URLSEGMENT.Cancel": "Odustani",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Avbryt",
"URLSEGMENT.UpdateURL": "Uppdatera URL"
}
}

View File

@ -42,4 +42,4 @@
"URLSEGMENT.OK": "确定",
"URLSEGMENT.Cancel": "取消",
"URLSEGMENT.UpdateURL": "Update URL"
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "Avbryt",
"URLSEGMENT.UpdateURL": "Uppdatera URL"
});
}
}

View File

@ -48,4 +48,4 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"URLSEGMENT.Cancel": "取消",
"URLSEGMENT.UpdateURL": "Update URL"
});
}
}

View File

@ -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:

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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: 'صفحات مجازی'

View File

@ -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.'

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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

View File

@ -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:
FILTERDATETO: Ki
FILTERLABELTEXT: Ngā Ihirangi
CMSSettingsController:
MENUTITLE: Ngā Tautuhinga
CMSSiteTreeFilter_Search:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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'

View File

@ -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."

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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'

View File

@ -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:

View File

@ -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:

View File

@ -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 @@
}
}
}
}
}

View File

@ -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;
}
}

View File

@ -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.
*/

View File

@ -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

View File

@ -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)
);

View File

@ -11,4 +11,4 @@
$Form
</div>
</body>
</html>
</html>

View File

@ -1,3 +1,3 @@
<div class="message $Classes">
<p>$Content</p>
</div>
</div>

View File

@ -20,4 +20,4 @@
</tr>
<% end_loop %>
</tbody>
</table>
</table>

View File

@ -27,4 +27,4 @@
</div>
<% end_if %>
</form>
</form>

View File

@ -25,4 +25,4 @@
</div>
</div>
</div>
</div>

View File

@ -22,4 +22,4 @@
$ListViewForm
</div>
<% end_if %>
</div>
</div>

View File

@ -3,4 +3,4 @@
<div class="cms-panel-content cms-helper-hide-actions center">
$VersionsForm
</div>
</div>
</div>

View File

@ -38,4 +38,4 @@
</div>
</div>
</div>

View File

@ -18,4 +18,4 @@
&nbsp; &nbsp; <%t ContentController.Email "Email" %>: $Username<br />
&nbsp; &nbsp; <%t ContentController.Password "Password" %>: $Password<br />
</p>
<% end_if %>
<% end_if %>

View File

@ -23,4 +23,4 @@
<% end_with %>
<% include TableListField %>
</body>
</html>
</html>

View File

@ -1,4 +1,4 @@
&nbsp; &nbsp;
&nbsp; &nbsp;
<a id="SilverStripeNavigatorLink" href="#">
<% _t('SilverStripeNavigatorLink.ShareLink','Share link') %>
</a>

View File

@ -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

View File

@ -15,4 +15,4 @@
<% _t('URLSegmentField.Cancel', 'Cancel') %>
</button>
<% if $HelpText %><p class="help">$HelpText</p><% end_if %>
</div>
</div>

View File

@ -30,4 +30,4 @@ saucelabs:
capabilities:
platform: "Windows 2008"
browser: "firefox"
version: "15"
version: "15"

View File

@ -47,7 +47,7 @@ class FeatureContext extends \SilverStripe\Framework\Test\Behaviour\FeatureConte
$obj->publish('Stage', 'Live');
});
$factory->define($class, $blueprint);
}
}
}
}

View File

@ -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'),

View File

@ -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() {

View File

@ -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>"

View File

@ -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');

View File

@ -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

View File

@ -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";

View File

@ -7,4 +7,4 @@ Page:
Sort: 2
page3:
Title: Page 3
Sort: 3
Sort: 3

View File

@ -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)
);

View File

@ -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

View File

@ -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')
);

View File

@ -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());
}

View File

@ -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

View File

@ -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

View File

@ -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();

View File

@ -15,4 +15,4 @@ Page:
page3:
Title: Third Page
URLSegment: page3
HomepageForDomain: only.com
HomepageForDomain: only.com

View File

@ -1 +1 @@
ContentControllerTestPageWithoutController
ContentControllerTestPageWithoutController

View File

@ -1 +1 @@
ContentControllerTestPage_test
ContentControllerTestPage_test

View File

@ -1 +1 @@
Controller
Controller

View File

@ -1 +1 @@
Page
Page

View File

@ -1 +1 @@
$Layout
$Layout

View File

@ -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

View File

@ -31,7 +31,7 @@ RedirectorPage:
Title: Reflexive
RedirectionType: Internal
LinkTo: =>RedirectorPage.reflexive
URLSegment: reflexive
URLSegment: reflexive
transitive:
Title: Transitive
RedirectionType: Internal

View File

@ -8,7 +8,7 @@
* - action_deletefromlive
* - action_rollback
* - action_revert
*
*
* @package cms
* @subpackage tests
*/

View File

@ -30,4 +30,4 @@ Member:
Groups: =>Group.cmsreadonly
cmsnodeleteeditor:
Email: cmsnodeleteeditor@test.com
Groups: =>Group.cmsnodelete
Groups: =>Group.cmsnodelete

View File

@ -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

View File

@ -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());
}

View File

@ -24,4 +24,4 @@ File:
ErrorPage:
404:
Title: Page not Found
ErrorCode: 404
ErrorCode: 404

View File

@ -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) {

View File

@ -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')
);

View File

@ -85,4 +85,4 @@ Page:
URLSegment: deleteTestChildPage
draftOnlyPage:
CanViewType: Anyone
URLSegment: draft-only
URLSegment: draft-only

View File

@ -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 {

View File

@ -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 {

View File

@ -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);
}
}

View File

@ -2,4 +2,4 @@ SiteTree:
after:
Title: after
before:
Title: before
Title: before

View File

@ -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 {

View File

@ -40,4 +40,4 @@ File:
ShowInSearch: 1
dontShowInSearchFile:
Title: dontShowInSearchFile
ShowInSearch: 0
ShowInSearch: 0

View File

@ -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 (

View File

@ -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
*/

View File

@ -29,4 +29,4 @@ Page:
Title: Parent2
child2_1_published_orphaned:
Title: Child2.1
Parent: =>Page.parent2
Parent: =>Page.parent2