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_selenium.php --if-env BEHAT_TEST
- php ~/travis-support/travis_setup_php54_webserver.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\" = \"\" ]; then vendor/bin/phpunit cms/tests; fi"
- "if [ \"$BEHAT_TEST\" = \"1\" ]; then vendor/bin/behat @cms; 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('CMSPageReportsController');
CMSMenu::remove_menu_item('CMSPageAddController'); CMSMenu::remove_menu_item('CMSPageAddController');
CMSMenu::remove_menu_item("SiteConfigLeftAndMain"); CMSMenu::remove_menu_item("SiteConfigLeftAndMain");

View File

@ -1,7 +1,7 @@
<?php <?php
/** /**
* Publish items batch action. * Publish items batch action.
* *
* @package cms * @package cms
* @subpackage batchaction * @subpackage batchaction
*/ */
@ -23,7 +23,7 @@ class CMSBatchAction_Publish extends CMSBatchAction {
/** /**
* Unpublish items batch action. * Unpublish items batch action.
* *
* @package cms * @package cms
* @subpackage batchaction * @subpackage batchaction
*/ */
@ -116,7 +116,7 @@ class CMSBatchAction_Restore extends CMSBatchAction {
/** /**
* Delete items batch action. * Delete items batch action.
* *
* @package cms * @package cms
* @subpackage batchaction * @subpackage batchaction
* @deprecated since version 4.0 * @deprecated since version 4.0
@ -141,7 +141,7 @@ class CMSBatchAction_Delete extends CMSBatchAction {
if($page->canDelete()) $page->delete(); if($page->canDelete()) $page->delete();
else $status['error'][$page->ID] = true; 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 // if it doesn't remove the tree node
$liveRecord = Versioned::get_one_by_stage( 'SiteTree', 'Live', array( $liveRecord = Versioned::get_one_by_stage( 'SiteTree', 'Live', array(
'"SiteTree"."ID"' => $id '"SiteTree"."ID"' => $id
@ -166,7 +166,7 @@ class CMSBatchAction_Delete extends CMSBatchAction {
/** /**
* Unpublish (delete from live site) items batch action. * Unpublish (delete from live site) items batch action.
* *
* @package cms * @package cms
* @subpackage batchaction * @subpackage batchaction
* @deprecated since version 4.0 * @deprecated since version 4.0

View File

@ -50,7 +50,7 @@ class CMSPageAddController extends CMSPageEditController {
new SelectionGroup_Item( new SelectionGroup_Item(
'child', 'child',
$parentField = new TreeDropdownField( $parentField = new TreeDropdownField(
"ParentID", "ParentID",
"", "",
'SiteTree', 'SiteTree',
'ID', 'ID',
@ -61,8 +61,8 @@ class CMSPageAddController extends CMSPageEditController {
) )
), ),
$typeField = new OptionsetField( $typeField = new OptionsetField(
"PageType", "PageType",
sprintf($numericLabelTmpl, 2, _t('CMSMain.ChoosePageType', 'Choose page type')), sprintf($numericLabelTmpl, 2, _t('CMSMain.ChoosePageType', 'Choose page type')),
$pageTypes, $pageTypes,
'Page' 'Page'
), ),
@ -71,7 +71,7 @@ class CMSPageAddController extends CMSPageEditController {
sprintf( sprintf(
'<p class="message notice message-restricted">%s</p>', '<p class="message notice message-restricted">%s</p>',
_t( _t(
'CMSMain.AddPageRestriction', 'CMSMain.AddPageRestriction',
'Note: Some page types are not allowed for this selection' 'Note: Some page types are not allowed for this selection'
) )
) )
@ -79,7 +79,7 @@ class CMSPageAddController extends CMSPageEditController {
); );
$parentField->setSearchFunction(function ($sourceObject, $labelField, $search) { $parentField->setSearchFunction(function ($sourceObject, $labelField, $search) {
return DataObject::get( return DataObject::get(
$sourceObject, $sourceObject,
sprintf( sprintf(
"\"MenuTitle\" LIKE '%%%s%%' OR \"Title\" LIKE '%%%s%%'", "\"MenuTitle\" LIKE '%%%s%%' OR \"Title\" LIKE '%%%s%%'",
Convert::raw2sql($search), 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 // see http://open.silverstripe.org/ticket/7455
// $parentField->setShowSearch(true); // $parentField->setShowSearch(true);
$parentModeField->addExtraClass('parent-mode'); $parentModeField->addExtraClass('parent-mode');
// CMSMain->currentPageID() automatically sets the homepage, // CMSMain->currentPageID() automatically sets the homepage,
@ -102,7 +102,7 @@ class CMSPageAddController extends CMSPageEditController {
} else { } else {
$parentModeField->setValue('top'); $parentModeField->setValue('top');
} }
$actions = new FieldList( $actions = new FieldList(
FormAction::create("doAdd", _t('CMSMain.Create',"Create")) FormAction::create("doAdd", _t('CMSMain.Create',"Create"))
->addExtraClass('ss-ui-action-constructive')->setAttribute('data-icon', 'accept') ->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') ->addExtraClass('ss-ui-action-destructive ss-ui-action-cancel')
->setUseButtonTag(true) ->setUseButtonTag(true)
); );
$this->extend('updatePageOptions', $fields); $this->extend('updatePageOptions', $fields);
$form = CMSForm::create( $form = CMSForm::create(
$this, "AddForm", $fields, $actions $this, "AddForm", $fields, $actions
)->setHTMLID('Form_AddForm'); )->setHTMLID('Form_AddForm');
$form->setAttribute('data-hints', $this->SiteTreeHints()); $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); if(is_numeric($parentID) && $parentID > 0) $parentObj = DataObject::get_by_id("SiteTree", $parentID);
else $parentObj = null; else $parentObj = null;
if(!$parentObj || !$parentObj->ID) $parentID = 0; if(!$parentObj || !$parentObj->ID) $parentID = 0;
if(!singleton($className)->canCreate(Member::currentUser(), array('Parent' => $parentObj))) { if(!singleton($className)->canCreate(Member::currentUser(), array('Parent' => $parentObj))) {
@ -163,11 +163,11 @@ class CMSPageAddController extends CMSPageEditController {
$editController->setCurrentPageID($record->ID); $editController->setCurrentPageID($record->ID);
Session::set( Session::set(
"FormInfo.Form_EditForm.formError.message", "FormInfo.Form_EditForm.formError.message",
_t('CMSMain.PageAdded', 'Successfully created page') _t('CMSMain.PageAdded', 'Successfully created page')
); );
Session::set("FormInfo.Form_EditForm.formError.type", 'good'); Session::set("FormInfo.Form_EditForm.formError.type", 'good');
return $this->redirect(Controller::join_links(singleton('CMSPageEditController')->Link('show'), $record->ID)); 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 $menu_title = 'History';
private static $required_permission_codes = 'CMS_ACCESS_CMSMain'; private static $required_permission_codes = 'CMS_ACCESS_CMSMain';
private static $session_namespace = 'CMSMain'; private static $session_namespace = 'CMSMain';
private static $allowed_actions = array( private static $allowed_actions = array(
'VersionsForm', 'VersionsForm',
'CompareVersionsForm', 'CompareVersionsForm',
'show', 'show',
'compare' 'compare'
); );
private static $url_handlers = array( private static $url_handlers = array(
'$Action/$ID/$VersionID/$OtherVersionID' => 'handleAction' '$Action/$ID/$VersionID/$OtherVersionID' => 'handleAction'
); );
@ -37,14 +37,14 @@ class CMSPageHistoryController extends CMSMain {
}); });
return $negotiator; return $negotiator;
} }
/** /**
* @param SS_HTTPRequest $request * @param SS_HTTPRequest $request
* @return array * @return array
*/ */
public function show($request) { public function show($request) {
$form = $this->ShowVersionForm($request->param('VersionID')); $form = $this->ShowVersionForm($request->param('VersionID'));
$negotiator = $this->getResponseNegotiator(); $negotiator = $this->getResponseNegotiator();
$controller = $this; $controller = $this;
$negotiator->setCallback('CurrentForm', function() use(&$controller, &$form) { $negotiator->setCallback('CurrentForm', function() use(&$controller, &$form) {
@ -56,14 +56,14 @@ class CMSPageHistoryController extends CMSMain {
return $negotiator->respond($request); return $negotiator->respond($request);
} }
/** /**
* @param SS_HTTPRequest $request * @param SS_HTTPRequest $request
* @return array * @return array
*/ */
public function compare($request) { public function compare($request) {
$form = $this->CompareVersionsForm( $form = $this->CompareVersionsForm(
$request->param('VersionID'), $request->param('VersionID'),
$request->param('OtherVersionID') $request->param('OtherVersionID')
); );
@ -88,13 +88,13 @@ class CMSPageHistoryController extends CMSMain {
return false; 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. * instances attached since only action relates to revert.
* *
* Permission checking is done at the {@link CMSMain::getEditForm()} level. * Permission checking is done at the {@link CMSMain::getEditForm()} level.
* *
* @param int $id ID of the record to show * @param int $id ID of the record to show
* @param array $fields optional * @param array $fields optional
* @param int $versionID * @param int $versionID
@ -104,10 +104,10 @@ class CMSPageHistoryController extends CMSMain {
*/ */
public function getEditForm($id = null, $fields = null, $versionID = null, $compareID = null) { public function getEditForm($id = null, $fields = null, $versionID = null, $compareID = null) {
if(!$id) $id = $this->currentPageID(); if(!$id) $id = $this->currentPageID();
$record = $this->getRecord($id, $versionID); $record = $this->getRecord($id, $versionID);
$versionID = ($record) ? $record->Version : $versionID; $versionID = ($record) ? $record->Version : $versionID;
$form = parent::getEditForm($record, ($record) ? $record->getCMSFields() : null); $form = parent::getEditForm($record, ($record) ? $record->getCMSFields() : null);
// Respect permission failures from parent implementation // Respect permission failures from parent implementation
if(!($form instanceof Form)) return $form; if(!($form instanceof Form)) return $form;
@ -118,14 +118,14 @@ class CMSPageHistoryController extends CMSMain {
$form->setActions(new FieldList( $form->setActions(new FieldList(
$revert = FormAction::create('doRollback', _t('CMSPageHistoryController.REVERTTOTHISVERSION', 'Revert to this version'))->setUseButtonTag(true) $revert = FormAction::create('doRollback', _t('CMSPageHistoryController.REVERTTOTHISVERSION', 'Revert to this version'))->setUseButtonTag(true)
)); ));
$fields = $form->Fields(); $fields = $form->Fields();
$fields->removeByName("Status"); $fields->removeByName("Status");
$fields->push(new HiddenField("ID")); $fields->push(new HiddenField("ID"));
$fields->push(new HiddenField("Version")); $fields->push(new HiddenField("Version"));
$fields = $fields->makeReadonly(); $fields = $fields->makeReadonly();
if($compareID) { if($compareID) {
$link = Controller::join_links( $link = Controller::join_links(
$this->Link('show'), $this->Link('show'),
@ -133,7 +133,7 @@ class CMSPageHistoryController extends CMSMain {
); );
$view = _t('CMSPageHistoryController.VIEW',"view"); $view = _t('CMSPageHistoryController.VIEW',"view");
$message = _t( $message = _t(
'CMSPageHistoryController.COMPARINGVERSION', 'CMSPageHistoryController.COMPARINGVERSION',
"Comparing versions {version1} and {version2}.", "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) 'version2' => sprintf('%s (<a href="%s">%s</a>)', $compareID, Controller::join_links($link, $compareID), $view)
) )
); );
$revert->setReadonly(true); $revert->setReadonly(true);
} else { } else {
if($record->isLatestVersion()) { 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( new LiteralField('CurrentlyViewingMessage', $this->customise(array(
'Content' => $message, 'Content' => $message,
'Classes' => 'notice' 'Classes' => 'notice'
@ -169,23 +169,23 @@ class CMSPageHistoryController extends CMSMain {
"ID" => $id, "ID" => $id,
"Version" => $versionID, "Version" => $versionID,
)); ));
if(($record && $record->isLatestVersion())) { if(($record && $record->isLatestVersion())) {
$revert->setReadonly(true); $revert->setReadonly(true);
} }
$form->removeExtraClass('cms-content'); $form->removeExtraClass('cms-content');
return $form; 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. * and comparing multiple versions.
* *
* Because we can reload the page directly to a compare view (history/compare/1/2/3) * 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 * @return Form
*/ */
@ -197,7 +197,7 @@ class CMSPageHistoryController extends CMSMain {
$action = $this->getRequest()->param('Action'); $action = $this->getRequest()->param('Action');
$versionID = $this->getRequest()->param('VersionID'); $versionID = $this->getRequest()->param('VersionID');
$otherVersionID = $this->getRequest()->param('OtherVersionID'); $otherVersionID = $this->getRequest()->param('OtherVersionID');
$showUnpublishedChecked = 0; $showUnpublishedChecked = 0;
$compareModeChecked = ($action == "compare"); $compareModeChecked = ($action == "compare");
@ -208,19 +208,19 @@ class CMSPageHistoryController extends CMSMain {
if($versions) { if($versions) {
foreach($versions as $k => $version) { foreach($versions as $k => $version) {
$active = false; $active = false;
if($version->Version == $versionID || $version->Version == $otherVersionID) { if($version->Version == $versionID || $version->Version == $otherVersionID) {
$active = true; $active = true;
if(!$version->WasPublished) $showUnpublishedChecked = 1; if(!$version->WasPublished) $showUnpublishedChecked = 1;
} }
$version->Active = ($active); $version->Active = ($active);
} }
} }
$vd = new ViewableData(); $vd = new ViewableData();
$versionsHtml = $vd->customise(array( $versionsHtml = $vd->customise(array(
'Versions' => $versions 'Versions' => $versions
))->renderWith('CMSPageHistoryController_versions'); ))->renderWith('CMSPageHistoryController_versions');
@ -246,14 +246,14 @@ class CMSPageHistoryController extends CMSMain {
'doCompare', _t('CMSPageHistoryController.COMPAREVERSIONS','Compare Versions') 'doCompare', _t('CMSPageHistoryController.COMPAREVERSIONS','Compare Versions')
), ),
new FormAction( new FormAction(
'doShowVersion', _t('CMSPageHistoryController.SHOWVERSION','Show Version') 'doShowVersion', _t('CMSPageHistoryController.SHOWVERSION','Show Version')
) )
); );
// Use <button> to allow full jQuery UI styling // Use <button> to allow full jQuery UI styling
foreach($actions->dataFields() as $action) $action->setUseButtonTag(true); foreach($actions->dataFields() as $action) $action->setUseButtonTag(true);
$form = CMSForm::create( $form = CMSForm::create(
$this, $this,
'VersionsForm', 'VersionsForm',
$fields, $fields,
@ -263,15 +263,15 @@ class CMSPageHistoryController extends CMSMain {
$form->loadDataFrom($this->getRequest()->requestVars()); $form->loadDataFrom($this->getRequest()->requestVars());
$hiddenID->setValue($id); $hiddenID->setValue($id);
$form->unsetValidator(); $form->unsetValidator();
$form $form
->addExtraClass('cms-versions-form') // placeholder, necessary for $.metadata() to work ->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-compare', Controller::join_links($this->Link('compare'), '%s', '%s', '%s'))
->setAttribute('data-link-tmpl-show', Controller::join_links($this->Link('show'), '%s', '%s')); ->setAttribute('data-link-tmpl-show', Controller::join_links($this->Link('show'), '%s', '%s'));
return $form; return $form;
} }
/** /**
* Process the {@link VersionsForm} compare function between two pages. * Process the {@link VersionsForm} compare function between two pages.
* *
@ -283,7 +283,7 @@ class CMSPageHistoryController extends CMSMain {
public function doCompare($data, $form) { public function doCompare($data, $form) {
$versions = $data['Versions']; $versions = $data['Versions'];
if(count($versions) < 2) return null; if(count($versions) < 2) return null;
$id = $this->currentPageID(); $id = $this->currentPageID();
$version1 = array_shift($versions); $version1 = array_shift($versions);
$version2 = array_shift($versions); $version2 = array_shift($versions);
@ -295,11 +295,11 @@ class CMSPageHistoryController extends CMSMain {
return $this->customise(array( return $this->customise(array(
"EditForm" => $form "EditForm" => $form
))->renderWith(array( ))->renderWith(array(
$this->class . '_EditForm', $this->class . '_EditForm',
'LeftAndMain_Content' 'LeftAndMain_Content'
)); ));
} }
// non javascript, redirect the user to the page // non javascript, redirect the user to the page
$this->redirect(Controller::join_links( $this->redirect(Controller::join_links(
$this->Link('compare'), $this->Link('compare'),
@ -316,21 +316,21 @@ class CMSPageHistoryController extends CMSMain {
* @param Form * @param Form
* *
* @return html * @return html
*/ */
public function doShowVersion($data, $form) { public function doShowVersion($data, $form) {
$versionID = null; $versionID = null;
if(isset($data['Versions']) && is_array($data['Versions'])) { if(isset($data['Versions']) && is_array($data['Versions'])) {
$versionID = array_shift($data['Versions']); $versionID = array_shift($data['Versions']);
} }
if(!$versionID) return; if(!$versionID) return;
if($request->isAjax()) { if($request->isAjax()) {
return $this->customise(array( return $this->customise(array(
"EditForm" => $this->ShowVersionForm($versionID) "EditForm" => $this->ShowVersionForm($versionID)
))->renderWith(array( ))->renderWith(array(
$this->class . '_EditForm', $this->class . '_EditForm',
'LeftAndMain_Content' 'LeftAndMain_Content'
)); ));
} }
@ -354,7 +354,7 @@ class CMSPageHistoryController extends CMSMain {
return $form; return $form;
} }
/** /**
* @param int $versionID * @param int $versionID
* @param int $otherVersionID * @param int $otherVersionID
@ -370,10 +370,10 @@ class CMSPageHistoryController extends CMSMain {
} }
if(!$toVersion || !$toVersion) return false; if(!$toVersion || !$toVersion) return false;
$id = $this->currentPageID(); $id = $this->currentPageID();
$page = DataObject::get_by_id("SiteTree", $id); $page = DataObject::get_by_id("SiteTree", $id);
if($page && !$page->canView()) { if($page && !$page->canView()) {
return Security::permissionFailure($this); return Security::permissionFailure($this);
} }
@ -382,11 +382,11 @@ class CMSPageHistoryController extends CMSMain {
$fromVersionRecord = Versioned::get_version('SiteTree', $id, $fromVersion); $fromVersionRecord = Versioned::get_version('SiteTree', $id, $fromVersion);
$toVersionRecord = Versioned::get_version('SiteTree', $id, $toVersion); $toVersionRecord = Versioned::get_version('SiteTree', $id, $toVersion);
if(!$fromVersionRecord) { if(!$fromVersionRecord) {
user_error("Can't find version $fromVersion of page $id", E_USER_ERROR); user_error("Can't find version $fromVersion of page $id", E_USER_ERROR);
} }
if(!$toVersionRecord) { if(!$toVersionRecord) {
user_error("Can't find version $toVersion of page $id", E_USER_ERROR); 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 = $this->getEditForm($id, null, null, true);
$form->setActions(new FieldList()); $form->setActions(new FieldList());
$form->addExtraClass('compare'); $form->addExtraClass('compare');
// Comparison views shouldn't be editable. // Comparison views shouldn't be editable.
// Its important to convert fields *before* loading data, // Its important to convert fields *before* loading data,
// as the comparison output is HTML and not valid values for the various field types // as the comparison output is HTML and not valid values for the various field types
$readonlyFields = $form->Fields()->makeReadonly(); $readonlyFields = $form->Fields()->makeReadonly();
$form->setFields($readonlyFields); $form->setFields($readonlyFields);
$form->loadDataFrom($record); $form->loadDataFrom($record);
$form->loadDataFrom(array( $form->loadDataFrom(array(
"ID" => $id, "ID" => $id,
"Version" => $fromVersion, "Version" => $fromVersion,
)); ));
foreach($form->Fields()->dataFields() as $field) { foreach($form->Fields()->dataFields() as $field) {
$field->dontEscape = true; $field->dontEscape = true;
} }
return $form; return $form;
} }
} }

View File

@ -1,7 +1,7 @@
<?php <?php
/** /**
* Base class for filtering the subtree for certain node statuses. * Base class for filtering the subtree for certain node statuses.
* *
* The simplest way of building a CMSSiteTreeFilter is to create a pagesToBeShown() method that * 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 * 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. * 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/ * 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 * false depending on whether the given page should be included. Note that you will need to include
* parent helper pages yourself. * parent helper pages yourself.
* *
* @package cms * @package cms
* @subpackage content * @subpackage content
*/ */
@ -20,10 +20,10 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
* Caution: Unescaped data. * Caution: Unescaped data.
*/ */
protected $params = array(); protected $params = array();
/** /**
* List of filtered items and all their parents * List of filtered items and all their parents
* *
* @var array * @var array
*/ */
protected $_cache_ids = null; protected $_cache_ids = null;
@ -37,12 +37,12 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
* @var array * @var array
*/ */
protected $_cache_highlight_ids = null; protected $_cache_highlight_ids = null;
/** /**
* @var Array * @var Array
*/ */
protected $_cache_expanded = array(); protected $_cache_expanded = array();
/** /**
* @var string * @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. * Returns a sorted array of all implementators of CMSSiteTreeFilter, suitable for use in a dropdown.
* *
* @return array * @return array
*/ */
public static function get_all_filters() { public static function get_all_filters() {
// get all filter instances // get all filter instances
$filters = ClassInfo::subclassesFor('CMSSiteTreeFilter'); $filters = ClassInfo::subclassesFor('CMSSiteTreeFilter');
// remove abstract CMSSiteTreeFilter class // remove abstract CMSSiteTreeFilter class
array_shift($filters); array_shift($filters);
// add filters to map // add filters to map
$filterMap = array(); $filterMap = array();
foreach($filters as $filter) { foreach($filters as $filter) {
$filterMap[$filter] = $filter::title(); $filterMap[$filter] = $filter::title();
} }
// Ensure that 'all pages' filter is on top position and everything else is sorted alphabetically // Ensure that 'all pages' filter is on top position and everything else is sorted alphabetically
uasort($filterMap, function($a, $b) { uasort($filterMap, function($a, $b) {
return ($a === CMSSiteTreeFilter_Search::title()) return ($a === CMSSiteTreeFilter_Search::title())
? -1 ? -1
: strcasecmp($a, $b); : strcasecmp($a, $b);
}); });
return $filterMap; return $filterMap;
} }
public function __construct($params = null) { public function __construct($params = null) {
if($params) $this->params = $params; if($params) $this->params = $params;
parent::__construct(); parent::__construct();
} }
public function getChildrenMethod() { public function getChildrenMethod() {
return $this->childrenMethod; return $this->childrenMethod;
} }
@ -120,7 +120,7 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
public function pagesIncluded() { public function pagesIncluded() {
return $this->mapIDs($this->getFilteredPages()); return $this->mapIDs($this->getFilteredPages());
} }
/** /**
* Populate the IDs of the pages returned by pagesIncluded(), also including * Populate the IDs of the pages returned by pagesIncluded(), also including
* the necessary parent helper pages. * the necessary parent helper pages.
@ -129,10 +129,10 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
$parents = array(); $parents = array();
$this->_cache_ids = array(); $this->_cache_ids = array();
$this->_cache_highlight_ids = array(); $this->_cache_highlight_ids = array();
if($pages = $this->pagesIncluded()) { 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 // parents of themselves, as well as IDs to mark
foreach($pages as $pageArr) { foreach($pages as $pageArr) {
$parents[$pageArr['ParentID']] = true; $parents[$pageArr['ParentID']] = true;
@ -152,7 +152,7 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
} }
} }
} }
public function isPageIncluded($page) { public function isPageIncluded($page) {
if($this->_cache_ids === NULL) { if($this->_cache_ids === NULL) {
$this->populateIDs(); $this->populateIDs();
@ -160,10 +160,10 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
return !empty($this->_cache_ids[$page->ID]); return !empty($this->_cache_ids[$page->ID]);
} }
/** /**
* Applies the default filters to a specified DataList of pages * Applies the default filters to a specified DataList of pages
* *
* @param DataList $query Unfiltered query * @param DataList $query Unfiltered query
* @return DataList Filtered query * @return DataList Filtered query
*/ */
@ -208,10 +208,10 @@ abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFil
} }
return $query; return $query;
} }
/** /**
* Maps a list of pages to an array of associative arrays with ID and ParentID keys * Maps a list of pages to an array of associative arrays with ID and ParentID keys
* *
* @param DataList $pages * @param DataList $pages
* @return array * @return array
*/ */
@ -272,7 +272,7 @@ class CMSSiteTreeFilter_PublishedPages extends CMSSiteTreeFilter {
* Works a bit different than the other filters: * Works a bit different than the other filters:
* Shows all pages *including* those deleted from stage and live. * Shows all pages *including* those deleted from stage and live.
* It does not filter out pages still existing in the different stages. * It does not filter out pages still existing in the different stages.
* *
* @package cms * @package cms
* @subpackage content * @subpackage content
*/ */
@ -287,11 +287,11 @@ class CMSSiteTreeFilter_DeletedPages extends CMSSiteTreeFilter {
* @var string * @var string
*/ */
protected $numChildrenMethod = 'numHistoricalChildren'; protected $numChildrenMethod = 'numHistoricalChildren';
static public function title() { static public function title() {
return _t('CMSSiteTreeFilter_DeletedPages.Title', "All pages, including archived"); return _t('CMSSiteTreeFilter_DeletedPages.Title', "All pages, including archived");
} }
public function getFilteredPages() { public function getFilteredPages() {
$pages = Versioned::get_including_deleted('SiteTree'); $pages = Versioned::get_including_deleted('SiteTree');
$pages = $this->applyDefaultFilters($pages); $pages = $this->applyDefaultFilters($pages);
@ -301,40 +301,40 @@ class CMSSiteTreeFilter_DeletedPages extends CMSSiteTreeFilter {
/** /**
* Gets all pages which have changed on stage. * Gets all pages which have changed on stage.
* *
* @package cms * @package cms
* @subpackage content * @subpackage content
*/ */
class CMSSiteTreeFilter_ChangedPages extends CMSSiteTreeFilter { class CMSSiteTreeFilter_ChangedPages extends CMSSiteTreeFilter {
static public function title() { static public function title() {
return _t('CMSSiteTreeFilter_ChangedPages.Title', "Modified pages"); return _t('CMSSiteTreeFilter_ChangedPages.Title', "Modified pages");
} }
public function getFilteredPages() { public function getFilteredPages() {
$pages = Versioned::get_by_stage('SiteTree', 'Stage'); $pages = Versioned::get_by_stage('SiteTree', 'Stage');
$pages = $this->applyDefaultFilters($pages) $pages = $this->applyDefaultFilters($pages)
->leftJoin('SiteTree_Live', '"SiteTree_Live"."ID" = "SiteTree"."ID"') ->leftJoin('SiteTree_Live', '"SiteTree_Live"."ID" = "SiteTree"."ID"')
->where('"SiteTree"."Version" <> "SiteTree_Live"."Version"'); ->where('"SiteTree"."Version" <> "SiteTree_Live"."Version"');
return $pages; return $pages;
} }
} }
/** /**
* Filters pages which have a status "Removed from Draft". * Filters pages which have a status "Removed from Draft".
* *
* @package cms * @package cms
* @subpackage content * @subpackage content
*/ */
class CMSSiteTreeFilter_StatusRemovedFromDraftPages extends CMSSiteTreeFilter { class CMSSiteTreeFilter_StatusRemovedFromDraftPages extends CMSSiteTreeFilter {
static public function title() { static public function title() {
return _t('CMSSiteTreeFilter_StatusRemovedFromDraftPages.Title', 'Live but removed from draft'); return _t('CMSSiteTreeFilter_StatusRemovedFromDraftPages.Title', 'Live but removed from draft');
} }
/** /**
* Filters out all pages who's status is set to "Removed from draft". * Filters out all pages who's status is set to "Removed from draft".
* *
* @return SS_List * @return SS_List
*/ */
public function getFilteredPages() { public function getFilteredPages() {
@ -345,24 +345,24 @@ class CMSSiteTreeFilter_StatusRemovedFromDraftPages extends CMSSiteTreeFilter {
return $page->getIsDeletedFromStage() && $page->getExistsOnLive(); return $page->getIsDeletedFromStage() && $page->getExistsOnLive();
}); });
return $pages; return $pages;
} }
} }
/** /**
* Filters pages which have a status "Draft". * Filters pages which have a status "Draft".
* *
* @package cms * @package cms
* @subpackage content * @subpackage content
*/ */
class CMSSiteTreeFilter_StatusDraftPages extends CMSSiteTreeFilter { class CMSSiteTreeFilter_StatusDraftPages extends CMSSiteTreeFilter {
static public function title() { static public function title() {
return _t('CMSSiteTreeFilter_StatusDraftPages.Title', 'Draft pages'); return _t('CMSSiteTreeFilter_StatusDraftPages.Title', 'Draft pages');
} }
/** /**
* Filters out all pages who's status is set to "Draft". * Filters out all pages who's status is set to "Draft".
* *
* @see {@link SiteTree::getStatusFlags()} * @see {@link SiteTree::getStatusFlags()}
* @return SS_List * @return SS_List
*/ */
@ -374,12 +374,12 @@ class CMSSiteTreeFilter_StatusDraftPages extends CMSSiteTreeFilter {
return (!$page->getIsDeletedFromStage() && $page->getIsAddedToStage()); return (!$page->getIsDeletedFromStage() && $page->getIsAddedToStage());
}); });
return $pages; return $pages;
} }
} }
/** /**
* Filters pages which have a status "Deleted". * Filters pages which have a status "Deleted".
* *
* @package cms * @package cms
* @subpackage content * @subpackage content
*/ */
@ -394,14 +394,14 @@ class CMSSiteTreeFilter_StatusDeletedPages extends CMSSiteTreeFilter {
* @var string * @var string
*/ */
protected $numChildrenMethod = 'numHistoricalChildren'; protected $numChildrenMethod = 'numHistoricalChildren';
static public function title() { static public function title() {
return _t('CMSSiteTreeFilter_StatusDeletedPages.Title', 'Archived pages'); return _t('CMSSiteTreeFilter_StatusDeletedPages.Title', 'Archived pages');
} }
/** /**
* Filters out all pages who's status is set to "Deleted". * Filters out all pages who's status is set to "Deleted".
* *
* @see {@link SiteTree::getStatusFlags()} * @see {@link SiteTree::getStatusFlags()}
* @return SS_List * @return SS_List
*/ */
@ -414,7 +414,7 @@ class CMSSiteTreeFilter_StatusDeletedPages extends CMSSiteTreeFilter {
return $page->getIsDeletedFromStage() && !$page->getExistsOnLive(); return $page->getIsDeletedFromStage() && !$page->getExistsOnLive();
}); });
return $pages; return $pages;
} }
} }
/** /**
@ -426,11 +426,11 @@ class CMSSiteTreeFilter_Search extends CMSSiteTreeFilter {
static public function title() { static public function title() {
return _t('CMSSiteTreeFilter_Search.Title', "All pages"); return _t('CMSSiteTreeFilter_Search.Title', "All pages");
} }
/** /**
* Retun an array of maps containing the keys, 'ID' and 'ParentID' for each page to be displayed * Retun an array of maps containing the keys, 'ID' and 'ParentID' for each page to be displayed
* in the search. * in the search.
* *
* @return SS_List * @return SS_List
*/ */
public function getFilteredPages() { public function getFilteredPages() {

View File

@ -12,7 +12,7 @@
* *
* Subclasses of ContentController are generally instantiated by ModelAsController; this will create * 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. * 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? * @todo Can this be used for anything other than SiteTree controllers?
* *
* @package cms * @package cms
@ -29,7 +29,7 @@ class ContentController extends Controller {
'deleteinstallfiles', // secured through custom code 'deleteinstallfiles', // secured through custom code
'LoginForm' 'LoginForm'
); );
/** /**
* The ContentController will take the URLSegment parameter from the URL and use that to look * The ContentController will take the URLSegment parameter from the URL and use that to look
* up a SiteTree record. * up a SiteTree record.
@ -41,12 +41,14 @@ class ContentController extends Controller {
$dataRecord->URLSegment = get_class($this); $dataRecord->URLSegment = get_class($this);
$dataRecord->ID = -1; $dataRecord->ID = -1;
} }
$this->dataRecord = $dataRecord; $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 * Return the link to this controller, but force the expanded link to be returned so that form methods and
* similar will function properly. * similar will function properly.
@ -57,10 +59,10 @@ class ContentController extends Controller {
public function Link($action = null) { public function Link($action = null) {
return $this->data()->Link(($action ? $action : true)); return $this->data()->Link(($action ? $action : true));
} }
//----------------------------------------------------------------------------------// //----------------------------------------------------------------------------------//
// These flexible data methods remove the need for custom code to do simple stuff // 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. * 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) { public function ChildrenOf($parentRef) {
$parent = SiteTree::get_by_link($parentRef); $parent = SiteTree::get_by_link($parentRef);
if(!$parent && is_numeric($parentRef)) { if(!$parent && is_numeric($parentRef)) {
$parent = DataObject::get_by_id('SiteTree', $parentRef); $parent = DataObject::get_by_id('SiteTree', $parentRef);
} }
if($parent) return $parent->Children(); if($parent) return $parent->Children();
} }
/** /**
* @param string $link * @param string $link
* @return SiteTree * @return SiteTree
@ -87,10 +89,10 @@ class ContentController extends Controller {
public function init() { public function init() {
parent::init(); parent::init();
// If we've accessed the homepage as /home/, then we should redirect to /. // If we've accessed the homepage as /home/, then we should redirect to /.
if($this->dataRecord && $this->dataRecord instanceof SiteTree 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() ) { && !$_POST && !$_FILES && !$this->redirectedTo() ) {
$getVars = $_GET; $getVars = $_GET;
unset($getVars['url']); unset($getVars['url']);
@ -99,7 +101,7 @@ class ContentController extends Controller {
$this->redirect($url, 301); $this->redirect($url, 301);
return; return;
} }
if($this->dataRecord) $this->dataRecord->extend('contentcontrollerInit', $this); if($this->dataRecord) $this->dataRecord->extend('contentcontrollerInit', $this);
else singleton('SiteTree')->extend('contentcontrollerInit', $this); else singleton('SiteTree')->extend('contentcontrollerInit', $this);
@ -110,39 +112,12 @@ class ContentController extends Controller {
return Security::permissionFailure($this); 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 // Use theme from the site config
if(($config = SiteConfig::current_site_config()) && $config->Theme) { if(($config = SiteConfig::current_site_config()) && $config->Theme) {
Config::inst()->update('SSViewer', 'theme', $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 * 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. * fall over to a child controller in order to provide functionality for nested URLs.
@ -156,7 +131,7 @@ class ContentController extends Controller {
$child = null; $child = null;
$action = $request->param('Action'); $action = $request->param('Action');
$this->setDataModel($model); $this->setDataModel($model);
// If nested URLs are enabled, and there is no action handler for the current request then attempt to pass // 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 // control to a child controller. This allows for the creation of chains of controllers which correspond to a
// nested URL. // nested URL.
@ -170,20 +145,21 @@ class ContentController extends Controller {
))->first(); ))->first();
if(class_exists('Translatable')) Translatable::enable_locale_filter(); if(class_exists('Translatable')) Translatable::enable_locale_filter();
} }
// we found a page with this URLSegment. // we found a page with this URLSegment.
if($child) { if($child) {
$request->shiftAllParams(); $request->shiftAllParams();
$request->shift(); $request->shift();
$response = ModelAsController::controller_for($child)->handleRequest($request, $model); $response = ModelAsController::controller_for($child)->handleRequest($request, $model);
} else { } else {
// If a specific locale is requested, and it doesn't match the page found by URLSegment, // 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 // look for a translation and redirect (see #5001). Only happens on the last child in
// a potentially nested URL chain. // a potentially nested URL chain.
if(class_exists('Translatable')) { if(class_exists('Translatable')) {
if($request->getVar('locale') && $this->dataRecord && $this->dataRecord->Locale != $request->getVar('locale')) { $locale = $request->getVar('locale');
$translation = $this->dataRecord->getTranslation($request->getVar('locale')); if($locale && i18n::validate_locale($locale) && $this->dataRecord && $this->dataRecord->Locale != $locale) {
$translation = $this->dataRecord->getTranslation($locale);
if($translation) { if($translation) {
$response = new SS_HTTPResponse(); $response = new SS_HTTPResponse();
$response->redirect($translation->Link(), 301); $response->redirect($translation->Link(), 301);
@ -191,7 +167,7 @@ class ContentController extends Controller {
} }
} }
} }
Director::set_current_page($this->data()); Director::set_current_page($this->data());
try { try {
@ -200,16 +176,16 @@ class ContentController extends Controller {
Director::set_current_page(null); Director::set_current_page(null);
} catch(SS_HTTPResponse_Exception $e) { } catch(SS_HTTPResponse_Exception $e) {
$this->popCurrent(); $this->popCurrent();
Director::set_current_page(null); Director::set_current_page(null);
throw $e; throw $e;
} }
} }
return $response; return $response;
} }
/** /**
* Get the project name * Get the project name
* *
@ -219,7 +195,7 @@ class ContentController extends Controller {
global $project; global $project;
return $project; return $project;
} }
/** /**
* Returns the associated database record * Returns the associated database record
*/ */
@ -244,13 +220,13 @@ class ContentController extends Controller {
} else { } else {
$parent = $this->data(); $parent = $this->data();
$stack = array($parent); $stack = array($parent);
if($parent) { if($parent) {
while($parent = $parent->Parent) { while($parent = $parent->Parent) {
array_unshift($stack, $parent); array_unshift($stack, $parent);
} }
} }
if(isset($stack[$level-2])) $result = $stack[$level-2]->Children(); if(isset($stack[$level-2])) $result = $stack[$level-2]->Children();
} }
@ -288,12 +264,12 @@ class ContentController extends Controller {
$items = ''; $items = '';
$message = ''; $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) { if($this->dataRecord) {
Requirements::css(CMS_DIR . '/css/SilverStripeNavigator.css'); Requirements::css(CMS_DIR . '/css/SilverStripeNavigator.css');
Requirements::javascript(FRAMEWORK_DIR . '/thirdparty/jquery/jquery.js'); Requirements::javascript(FRAMEWORK_DIR . '/thirdparty/jquery/jquery.js');
Requirements::javascript(CMS_DIR . '/javascript/SilverStripeNavigator.js'); Requirements::javascript(CMS_DIR . '/javascript/SilverStripeNavigator.js');
$return = $nav = SilverStripeNavigator::get_for_record($this->dataRecord); $return = $nav = SilverStripeNavigator::get_for_record($this->dataRecord);
$items = $return['items']; $items = $return['items'];
$message = $return['message']; $message = $return['message'];
@ -312,7 +288,7 @@ class ContentController extends Controller {
); );
} }
$viewPageIn = _t('ContentController.VIEWPAGEIN', 'View Page in:'); $viewPageIn = _t('ContentController.VIEWPAGEIN', 'View Page in:');
return <<<HTML return <<<HTML
<div id="SilverStripeNavigator"> <div id="SilverStripeNavigator">
<div class="holder"> <div class="holder">
@ -321,7 +297,7 @@ class ContentController extends Controller {
</div> </div>
<div id="switchView" class="bottomTabs"> <div id="switchView" class="bottomTabs">
$viewPageIn $viewPageIn
$items $items
</div> </div>
</div> </div>
@ -339,7 +315,7 @@ HTML;
} }
} }
} }
public function SiteConfig() { public function SiteConfig() {
if(method_exists($this->dataRecord, 'getSiteConfig')) { if(method_exists($this->dataRecord, 'getSiteConfig')) {
return $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, * 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()}, * and falls back to {@link Translatable::get_current_locale()} or {@link i18n::default_locale()},
* depending if Translatable is enabled. * depending if Translatable is enabled.
* *
* Suitable for insertion into lang= and xml:lang= * Suitable for insertion into lang= and xml:lang=
* attributes in HTML or XHTML output. * attributes in HTML or XHTML output.
* *
* @return string * @return string
*/ */
public function ContentLocale() { public function ContentLocale() {
@ -367,9 +343,9 @@ HTML;
} else { } else {
$locale = i18n::get_locale(); $locale = i18n::get_locale();
} }
return i18n::convert_rfc1766($locale); return i18n::convert_rfc1766($locale);
} }
/** /**
@ -414,20 +390,20 @@ HTML;
if (!file_exists(BASE_PATH . '/install.php')) { if (!file_exists(BASE_PATH . '/install.php')) {
$this->httpError(410); $this->httpError(410);
} }
// TODO Allow this to work when allow_url_fopen=0 // TODO Allow this to work when allow_url_fopen=0
if(isset($_SESSION['StatsID']) && $_SESSION['StatsID']) { if(isset($_SESSION['StatsID']) && $_SESSION['StatsID']) {
$url = 'http://ss2stat.silverstripe.com/Installation/installed?ID=' . $_SESSION['StatsID']; $url = 'http://ss2stat.silverstripe.com/Installation/installed?ID=' . $_SESSION['StatsID'];
@file_get_contents($url); @file_get_contents($url);
} }
global $project; global $project;
$data = new ArrayData(array( $data = new ArrayData(array(
'Project' => Convert::raw2xml($project), 'Project' => Convert::raw2xml($project),
'Username' => Convert::raw2xml(Session::get('username')), 'Username' => Convert::raw2xml(Session::get('username')),
'Password' => Convert::raw2xml(Session::get('password')), 'Password' => Convert::raw2xml(Session::get('password')),
)); ));
return array( return array(
"Title" => _t("ContentController.INSTALL_SUCCESS", "Installation Successful!"), "Title" => _t("ContentController.INSTALL_SUCCESS", "Installation Successful!"),
"Content" => $data->renderWith('Install_successfullyinstalled'), "Content" => $data->renderWith('Install_successfullyinstalled'),
@ -436,7 +412,7 @@ HTML;
public function deleteinstallfiles() { public function deleteinstallfiles() {
if(!Permission::check("ADMIN")) return Security::permissionFailure($this); if(!Permission::check("ADMIN")) return Security::permissionFailure($this);
$title = new Varchar("Title"); $title = new Varchar("Title");
$content = new HTMLText('Content'); $content = new HTMLText('Content');

View File

@ -1,7 +1,7 @@
<?php <?php
/** /**
* Extension to include custom page icons * Extension to include custom page icons
* *
* @package cms * @package cms
* @subpackage controller * @subpackage controller
*/ */
@ -18,12 +18,12 @@ class LeftAndMainPageIconsExtension extends Extension {
* @return string CSS * @return string CSS
*/ */
public function generatePageIconsCss() { public function generatePageIconsCss() {
$css = ''; $css = '';
$classes = ClassInfo::subclassesFor('SiteTree'); $classes = ClassInfo::subclassesFor('SiteTree');
foreach($classes as $class) { foreach($classes as $class) {
$obj = singleton($class); $obj = singleton($class);
$iconSpec = $obj->stat('icon'); $iconSpec = $obj->stat('icon');
if(!$iconSpec) continue; if(!$iconSpec) continue;
@ -33,9 +33,9 @@ class LeftAndMainPageIconsExtension extends Extension {
// Legacy support: Add file extension if none exists // Legacy support: Add file extension if none exists
if(!pathinfo($iconFile, PATHINFO_EXTENSION)) $iconFile .= '-file.gif'; if(!pathinfo($iconFile, PATHINFO_EXTENSION)) $iconFile .= '-file.gif';
$iconPathInfo = pathinfo($iconFile); $iconPathInfo = pathinfo($iconFile);
// Base filename // Base filename
$baseFilename = $iconPathInfo['dirname'] . '/' . $iconPathInfo['filename']; $baseFilename = $iconPathInfo['dirname'] . '/' . $iconPathInfo['filename'];
$fileExtension = $iconPathInfo['extension']; $fileExtension = $iconPathInfo['extension'];

View File

@ -4,21 +4,21 @@
* for CMS authors, usually for {@link SiteTree} objects with "stage" and "live" links. * 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). * 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. * 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, * 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 * 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. * to view embargoed data at a future point in time. So the item doesn't always have to be a simple link.
* *
* @package cms * @package cms
* @subpackage content * @subpackage content
*/ */
class SilverStripeNavigator extends ViewableData { class SilverStripeNavigator extends ViewableData {
/** /**
* @var DataObject * @var DataObject
*/ */
protected $record; protected $record;
/** /**
* @param DataObject $record * @param DataObject $record
* @throws InvalidArgumentException if record doesn't implement CMSPreviewable * @throws InvalidArgumentException if record doesn't implement CMSPreviewable
@ -30,7 +30,7 @@ class SilverStripeNavigator extends ViewableData {
get_class($record) get_class($record)
)); ));
} }
$this->record = $record; $this->record = $record;
} }
@ -39,26 +39,26 @@ class SilverStripeNavigator extends ViewableData {
*/ */
public function getItems() { public function getItems() {
$items = array(); $items = array();
$classes = ClassInfo::subclassesFor('SilverStripeNavigatorItem'); $classes = ClassInfo::subclassesFor('SilverStripeNavigatorItem');
array_shift($classes); array_shift($classes);
// Sort menu items according to priority // Sort menu items according to priority
$i = 0; $i = 0;
foreach($classes as $class) { foreach($classes as $class) {
// Skip base class // Skip base class
if($class == 'SilverStripeNavigatorItem') continue; if($class == 'SilverStripeNavigatorItem') continue;
$i++; $i++;
$item = new $class($this->record); $item = new $class($this->record);
if(!$item->canView()) continue; if(!$item->canView()) continue;
// This funny litle formula ensures that the first item added with the same priority will be left-most. // This funny litle formula ensures that the first item added with the same priority will be left-most.
$priority = $item->getPriority() * 100 - 1; $priority = $item->getPriority() * 100 - 1;
// Ensure that we can have duplicates with the same (default) priority // Ensure that we can have duplicates with the same (default) priority
while(isset($items[$priority])) $priority++; while(isset($items[$priority])) $priority++;
$items[$priority] = $item; $items[$priority] = $item;
} }
ksort($items); 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. // Drop the keys and let the ArrayList handle the numbering, so $First, $Last and others work properly.
return new ArrayList(array_values($items)); return new ArrayList(array_values($items));
} }
/** /**
* @return DataObject * @return DataObject
*/ */
@ -83,13 +83,13 @@ class SilverStripeNavigator extends ViewableData {
$message = ''; $message = '';
$navigator = new SilverStripeNavigator($record); $navigator = new SilverStripeNavigator($record);
$items = $navigator->getItems(); $items = $navigator->getItems();
foreach($items as $item) { foreach($items as $item) {
$text = $item->getHTML(); $text = $item->getHTML();
if($text) $html .= $text; if($text) $html .= $text;
$newMessage = $item->getMessage(); $newMessage = $item->getMessage();
if($newMessage && $item->isActive()) $message = $newMessage; if($newMessage && $item->isActive()) $message = $newMessage;
} }
return array( return array(
'items' => $html, 'items' => $html,
'message' => $message 'message' => $message
@ -101,24 +101,24 @@ class SilverStripeNavigator extends ViewableData {
* Navigator items are links that appear in the $SilverStripeNavigator bar. * Navigator items are links that appear in the $SilverStripeNavigator bar.
* To add an item, extend this class - it will be automatically picked up. * To add an item, extend this class - it will be automatically picked up.
* When instanciating items manually, please ensure to call {@link canView()}. * When instanciating items manually, please ensure to call {@link canView()}.
* *
* @package cms * @package cms
* @subpackage content * @subpackage content
*/ */
class SilverStripeNavigatorItem extends ViewableData { class SilverStripeNavigatorItem extends ViewableData {
/** /**
* @param DataObject * @param DataObject
*/ */
protected $record; protected $record;
/** /**
* @param DataObject * @param DataObject
*/ */
public function __construct($record) { public function __construct($record) {
$this->record = $record; $this->record = $record;
} }
/** /**
* @return string HTML, mostly a link - but can be more complex as well. * @return string HTML, mostly a link - but can be more complex as well.
* For example, a "future state" item might show a date selector. * 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 * Get the Title of an item
*/ */
public function getTitle() {} public function getTitle() {}
/** /**
* Machine-friendly name. * Machine-friendly name.
*/ */
@ -142,44 +142,44 @@ class SilverStripeNavigatorItem extends ViewableData {
* Optional link to a specific view of this record. * Optional link to a specific view of this record.
* Not all items are simple links, please use {@link getHTML()} * Not all items are simple links, please use {@link getHTML()}
* to represent an item in markup unless you know what you're doing. * to represent an item in markup unless you know what you're doing.
* *
* @return string * @return string
*/ */
public function getLink() {} public function getLink() {}
/** /**
* @return string * @return string
*/ */
public function getMessage() {} public function getMessage() {}
/** /**
* @return DataObject * @return DataObject
*/ */
public function getRecord() { public function getRecord() {
return $this->record; return $this->record;
} }
/** /**
* @return int * @return int
*/ */
public function getPriority() { public function getPriority() {
return $this->stat('priority'); return $this->stat('priority');
} }
/** /**
* As items might convey different record states like a "stage" or "live" table, * As items might convey different record states like a "stage" or "live" table,
* an item can be active (showing the record in this state). * an item can be active (showing the record in this state).
* *
* @return boolean * @return boolean
*/ */
public function isActive() { public function isActive() {
return false; return false;
} }
/** /**
* Filters items based on member permissions or other criteria, * Filters items based on member permissions or other criteria,
* such as if a state is generally available for the current record. * such as if a state is generally available for the current record.
* *
* @param Member * @param Member
* @return Boolean * @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. * Counts as "archived" if the current record is a different version from both live and draft.
* *
* @return boolean * @return boolean
*/ */
public function isArchived() { public function isArchived() {
if(!$this->record->hasExtension('Versioned')) return false; if(!$this->record->hasExtension('Versioned')) return false;
if(!isset($this->record->_cached_isArchived)) { if(!isset($this->record->_cached_isArchived)) {
$baseTable = ClassInfo::baseDataClass($this->record->class); $baseTable = ClassInfo::baseDataClass($this->record->class);
$currentDraft = Versioned::get_one_by_stage($baseTable, 'Stage', array( $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( $currentLive = Versioned::get_one_by_stage($baseTable, 'Live', array(
"\"$baseTable\".\"ID\"" => $this->record->ID "\"$baseTable\".\"ID\"" => $this->record->ID
)); ));
$this->record->_cached_isArchived = ( $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)) && (!$currentLive || ($currentLive && $this->record->Version != $currentLive->Version))
); );
} }
@ -220,8 +220,8 @@ class SilverStripeNavigatorItem extends ViewableData {
*/ */
class SilverStripeNavigatorItem_CMSLink extends SilverStripeNavigatorItem { class SilverStripeNavigatorItem_CMSLink extends SilverStripeNavigatorItem {
/** @config */ /** @config */
private static $priority = 10; private static $priority = 10;
public function getHTML() { public function getHTML() {
return sprintf( return sprintf(
'<a href="%s">%s</a>', '<a href="%s">%s</a>',
@ -229,19 +229,19 @@ class SilverStripeNavigatorItem_CMSLink extends SilverStripeNavigatorItem {
_t('ContentController.CMS', 'CMS') _t('ContentController.CMS', 'CMS')
); );
} }
public function getTitle() { 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() { public function getLink() {
return $this->record->CMSEditLink(); return $this->record->CMSEditLink();
} }
public function isActive() { public function isActive() {
return (Controller::curr() instanceof LeftAndMain); return (Controller::curr() instanceof LeftAndMain);
} }
public function canView($member = null) { public function canView($member = null) {
return ( return (
// Don't show in CMS // Don't show in CMS
@ -272,37 +272,37 @@ class SilverStripeNavigatorItem_StageLink extends SilverStripeNavigatorItem {
public function getTitle() { public function getTitle() {
return _t('ContentController.DRAFT', 'Draft', 'Used for the Switch between draft and published view mode. Needs to be a short label'); return _t('ContentController.DRAFT', 'Draft', 'Used for the Switch between draft and published view mode. Needs to be a short label');
} }
public function getMessage() { 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>"; 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() { public function getLink() {
$date = Versioned::current_archived_date(); $date = Versioned::current_archived_date();
return Controller::join_links( return Controller::join_links(
$this->record->PreviewLink(), $this->record->PreviewLink(),
'?stage=Stage', '?stage=Stage',
$date ? '?archiveDate=' . $date : null $date ? '?archiveDate=' . $date : null
); );
} }
public function canView($member = null) { public function canView($member = null) {
return ( return (
$this->record->hasExtension('Versioned') $this->record->hasExtension('Versioned')
&& $this->getDraftPage() && $this->getDraftPage()
// Don't follow redirects in preview, they break the CMS editing form // Don't follow redirects in preview, they break the CMS editing form
&& !($this->record instanceof RedirectorPage) && !($this->record instanceof RedirectorPage)
); );
} }
public function isActive() { public function isActive() {
return ( return (
Versioned::current_stage() == 'Stage' Versioned::current_stage() == 'Stage'
&& !(ClassInfo::exists('SiteTreeFutureState') && SiteTreeFutureState::get_future_datetime()) && !(ClassInfo::exists('SiteTreeFutureState') && SiteTreeFutureState::get_future_datetime())
&& !$this->isArchived() && !$this->isArchived()
); );
} }
protected function getDraftPage() { protected function getDraftPage() {
$baseTable = ClassInfo::baseDataClass($this->record->class); $baseTable = ClassInfo::baseDataClass($this->record->class);
return Versioned::get_one_by_stage($baseTable, 'Stage', array( return Versioned::get_one_by_stage($baseTable, 'Stage', array(
@ -330,31 +330,31 @@ class SilverStripeNavigatorItem_LiveLink extends SilverStripeNavigatorItem {
public function getTitle() { public function getTitle() {
return _t('ContentController.PUBLISHED', 'Published', 'Used for the Switch between draft and published view mode. Needs to be a short label'); return _t('ContentController.PUBLISHED', 'Published', 'Used for the Switch between draft and published view mode. Needs to be a short label');
} }
public function getMessage() { 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>"; 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() { public function getLink() {
return Controller::join_links($this->record->PreviewLink(), '?stage=Live'); return Controller::join_links($this->record->PreviewLink(), '?stage=Live');
} }
public function canView($member = null) { public function canView($member = null) {
return ( return (
$this->record->hasExtension('Versioned') $this->record->hasExtension('Versioned')
&& $this->getLivePage() && $this->getLivePage()
// Don't follow redirects in preview, they break the CMS editing form // Don't follow redirects in preview, they break the CMS editing form
&& !($this->record instanceof RedirectorPage) && !($this->record instanceof RedirectorPage)
); );
} }
public function isActive() { public function isActive() {
return ( return (
(!Versioned::current_stage() || Versioned::current_stage() == 'Live') (!Versioned::current_stage() || Versioned::current_stage() == 'Live')
&& !$this->isArchived() && !$this->isArchived()
); );
} }
protected function getLivePage() { protected function getLivePage() {
$baseTable = ClassInfo::baseDataClass($this->record->class); $baseTable = ClassInfo::baseDataClass($this->record->class);
return Versioned::get_one_by_stage($baseTable, 'Live', array( return Versioned::get_one_by_stage($baseTable, 'Live', array(
@ -375,31 +375,31 @@ class SilverStripeNavigatorItem_ArchiveLink extends SilverStripeNavigatorItem {
$this->recordLink = $this->record->AbsoluteLink(); $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>"; 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() { public function getTitle() {
return _t('SilverStripeNavigator.ARCHIVED', 'Archived'); return _t('SilverStripeNavigator.ARCHIVED', 'Archived');
} }
public function getMessage() { public function getMessage() {
if($date = Versioned::current_archived_date()) { if($date = Versioned::current_archived_date()) {
$dateObj = DBField::create_field('Datetime', $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>"; 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() { public function getLink() {
return $this->record->PreviewLink() . '?archiveDate=' . urlencode($this->record->LastEdited); return $this->record->PreviewLink() . '?archiveDate=' . urlencode($this->record->LastEdited);
} }
public function canView($member = null) { public function canView($member = null) {
return ( return (
$this->record->hasExtension('Versioned') $this->record->hasExtension('Versioned')
&& $this->isArchived() && $this->isArchived()
// Don't follow redirects in preview, they break the CMS editing form // Don't follow redirects in preview, they break the CMS editing form
&& !($this->record instanceof RedirectorPage) && !($this->record instanceof RedirectorPage)
); );
} }
public function isActive() { public function isActive() {
return $this->isArchived(); return $this->isArchived();
} }

View File

@ -3,7 +3,7 @@
/** /**
* Used to edit the SiteTree->URLSegment property, and suggest input based on the serverside rules * Used to edit the SiteTree->URLSegment property, and suggest input based on the serverside rules
* defined through {@link SiteTree->generateURLSegment()} and {@link URLSegmentFilter}. * defined through {@link SiteTree->generateURLSegment()} and {@link URLSegmentFilter}.
* *
* Note: The actual conversion for saving the value takes place in the model layer. * Note: The actual conversion for saving the value takes place in the model layer.
* *
* @package cms * @package cms
@ -12,8 +12,8 @@
class SiteTreeURLSegmentField extends TextField { class SiteTreeURLSegmentField extends TextField {
/** /**
* @var string * @var string
*/ */
protected $helpText, $urlPrefix, $urlSuffix, $defaultUrl; 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. * 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 * 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 * 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() { public function Link() {
if($link = $this->redirectionLink()) return $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 // Prefix the URL with "http://" if no prefix is found
if( if(
$this->ExternalURL $this->ExternalURL
&& !parse_url($this->ExternalURL, PHP_URL_SCHEME) && !parse_url($this->ExternalURL, PHP_URL_SCHEME)
&& !preg_match('#^//#', $this->ExternalURL) && !preg_match('#^//#', $this->ExternalURL)
) { ) {
$this->ExternalURL = 'http://' . $this->ExternalURL; $this->ExternalURL = 'http://' . $this->ExternalURL;
@ -129,17 +129,17 @@ class RedirectorPage extends Page {
array( array(
new HeaderField('RedirectorDescHeader',_t('RedirectorPage.HEADER', "This page will redirect users to another page")), new HeaderField('RedirectorDescHeader',_t('RedirectorPage.HEADER', "This page will redirect users to another page")),
new OptionsetField( new OptionsetField(
"RedirectionType", "RedirectionType",
_t('RedirectorPage.REDIRECTTO', "Redirect to"), _t('RedirectorPage.REDIRECTTO', "Redirect to"),
array( array(
"Internal" => _t('RedirectorPage.REDIRECTTOPAGE', "A page on your website"), "Internal" => _t('RedirectorPage.REDIRECTTOPAGE', "A page on your website"),
"External" => _t('RedirectorPage.REDIRECTTOEXTERNAL', "Another website"), "External" => _t('RedirectorPage.REDIRECTTOEXTERNAL', "Another website"),
), ),
"Internal" "Internal"
), ),
new TreeDropdownField( new TreeDropdownField(
"LinkToID", "LinkToID",
_t('RedirectorPage.YOURPAGE', "Page on your website"), _t('RedirectorPage.YOURPAGE', "Page on your website"),
"SiteTree" "SiteTree"
), ),
new TextField("ExternalURL", _t('RedirectorPage.OTHERURL', "Other website URL")) 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 * 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 * inherit from this. In addition, it contains a number of static methods for querying the site tree and working with
* draft and published states. * draft and published states.
* *
* <h2>URLs</h2> * <h2>URLs</h2>
* A page is identified during request handling via its "URLSegment" database column. As pages can be nested, the full * 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 * 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 * class is allowed - no subclasses. Otherwise, the class and all its
* subclasses are allowed. * subclasses are allowed.
* To control allowed children on root level (no parent), use {@link $can_be_root}. * 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. * Note that this setting is cached when used in the CMS, use the "flush" query parameter to clear it.
* *
* @config * @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. * 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). * Also supports custom CSS rule contents (applied to the correct selector for the tree UI implementation).
* *
* @see CMSMain::generateTreeStylingCSS() * @see CMSMain::generateTreeStylingCSS()
* @config * @config
* @var string * @var string
@ -240,7 +240,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
* Determines if the system should avoid orphaned pages * Determines if the system should avoid orphaned pages
* by deleting all children when the their parent is deleted (TRUE), * 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). * 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 * @deprecated 4.0 Use the "SiteTree.enforce_strict_hierarchy" config setting instead
* @param boolean * @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. // Traverse down the remaining URL segments and grab the relevant SiteTree objects.
foreach($parts as $segment) { foreach($parts as $segment) {
$next = DataObject::get_one('SiteTree', array( $next = DataObject::get_one('SiteTree', array(
'"SiteTree"."URLSegment"' => $segment, '"SiteTree"."URLSegment"' => $segment,
'"SiteTree"."ParentID"' => $sitetree->ID '"SiteTree"."ParentID"' => $sitetree->ID
), ),
$cache $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 * 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. * site setups. Does not contain hints about the stage, see {@link SilverStripeNavigator} for details.
* *
* @param string $action See {@link Link()} * @param string $action See {@link Link()}
* @return string * @return string
*/ */
@ -502,7 +502,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
* and returned in its full form. * and returned in its full form.
* *
* @uses RootURLController::get_homepage_link() * @uses RootURLController::get_homepage_link()
* *
* @param string $action See {@link Link()} * @param string $action See {@link Link()}
* @return string * @return string
*/ */
@ -516,7 +516,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
$base = $parent->RelativeLink($this->URLSegment); $base = $parent->RelativeLink($this->URLSegment);
} elseif(!$action && $this->URLSegment == RootURLController::get_homepage_link()) { } elseif(!$action && $this->URLSegment == RootURLController::get_homepage_link()) {
// Unset base for root-level homepages. // 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. // need to retain their URLSegment.
$base = null; $base = null;
} else { } 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 * 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 * this child. Any such orphaned page may still require access via the CMS, but should not be shown as accessible
* to external users. * to external users.
* *
* @return bool * @return bool
*/ */
public function isOrphaned() { public function isOrphaned() {
@ -751,11 +751,11 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
$pages = array(); $pages = array();
while( while(
$page $page
&& (!$maxDepth || count($pages) < $maxDepth) && (!$maxDepth || count($pages) < $maxDepth)
&& (!$stopAtPageType || $page->ClassName != $stopAtPageType) && (!$stopAtPageType || $page->ClassName != $stopAtPageType)
) { ) {
if($showHidden || $page->ShowInMenus || ($page->ID == $this->ID)) { if($showHidden || $page->ShowInMenus || ($page->ID == $this->ID)) {
$pages[] = $page; $pages[] = $page;
} }
@ -768,7 +768,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
/** /**
* Make this page a child of another page. * 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. * 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 * @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 * 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. * the security model for an application.
* *
* Slightly altered from parent behaviour in {@link DataObject->can()}: * Slightly altered from parent behaviour in {@link DataObject->can()}:
* - Checks for existence of a method named "can<$perm>()" on the object * - Checks for existence of a method named "can<$perm>()" on the object
* - Calls decorators and only returns for FALSE "vetoes" * - 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 * 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. * customise the security model for an application.
* *
* Denies permission if any of the following conditions is true: * Denies permission if any of the following conditions is true:
* - alternateCanAddChildren() on a extension returns false * - alternateCanAddChildren() on a extension returns false
* - canEdit() is not granted * - canEdit() is not granted
* - There are no classes defined in {@link $allowed_children} * - There are no classes defined in {@link $allowed_children}
* *
* @uses SiteTreeExtension->canAddChildren() * @uses SiteTreeExtension->canAddChildren()
* @uses canEdit() * @uses canEdit()
* @uses $allowed_children * @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 * 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. * security model for an application.
* *
* Denies permission if any of the following conditions is true: * Denies permission if any of the following conditions is true:
* - canView() on any extension returns false * - canView() on any extension returns false
* - "CanViewType" directive is set to "Inherit" and any parent page return false for canView() * - "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 // admin override
if($member && Permission::checkMember($member, array("ADMIN", "SITETREE_VIEW_ALL"))) return true; 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 // Orphaned pages (in the current stage) are unavailable, except for admins via the CMS
if($this->isOrphaned()) return false; if($this->isOrphaned()) return false;
@ -944,43 +927,23 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
// check for specific groups // check for specific groups
if($member && is_numeric($member)) $member = DataObject::get_by_id('Member', $member); if($member && is_numeric($member)) $member = DataObject::get_by_id('Member', $member);
if( if(
$this->CanViewType == 'OnlyTheseUsers' $this->CanViewType == 'OnlyTheseUsers'
&& $member && $member
&& $member->inGroups($this->ViewerGroups()) && $member->inGroups($this->ViewerGroups())
) return true; ) return true;
return false; 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 * 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. * security model for an application.
* *
* Denies permission if any of the following conditions is true: * Denies permission if any of the following conditions is true:
* - canDelete() returns false on any extension * - canDelete() returns false on any extension
* - canEdit() returns false * - canEdit() returns false
* - any descendant page returns false for canDelete() * - any descendant page returns false for canDelete()
* *
* @uses canDelete() * @uses canDelete()
* @uses SiteTreeExtension->canDelete() * @uses SiteTreeExtension->canDelete()
* @uses canEdit() * @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. * 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. * 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. * Use {@link canAddChildren()} to control behaviour of creating children under this page.
* *
* @uses $can_create * @uses $can_create
* @uses DataExtension->canCreate() * @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 * 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. * security model for an application.
* *
* Denies permission if any of the following conditions is true: * Denies permission if any of the following conditions is true:
* - canEdit() on any extension returns false * - canEdit() on any extension returns false
* - canView() return 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 * - "CanEditType" directive is set to "LoggedInUsers" and no user is logged in or doesn't have the
* CMS_Access_CMSMAIN permission code * CMS_Access_CMSMAIN permission code
* - "CanEditType" directive is set to "OnlyTheseUsers" and user is not in the given groups * - "CanEditType" directive is set to "OnlyTheseUsers" and user is not in the given groups
* *
* @uses canView() * @uses canView()
* @uses EditorGroups() * @uses EditorGroups()
* @uses DataExtension->canEdit() * @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 * 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. * the security model for an application.
* *
* Denies permission if any of the following conditions is true: * Denies permission if any of the following conditions is true:
* - canPublish() on any extension returns false * - canPublish() on any extension returns false
* - canEdit() returns false * - canEdit() returns false
* *
* @uses SiteTreeExtension->canPublish() * @uses SiteTreeExtension->canPublish()
* *
* @param Member $member * @param Member $member
@ -1268,7 +1231,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
// Get permissions that are inherited // Get permissions that are inherited
$potentiallyInherited = Versioned::get_by_stage( $potentiallyInherited = Versioned::get_by_stage(
"SiteTree", "SiteTree",
$stage, $stage,
array("\"$typeField\" = 'Inherit' AND \"SiteTree\".\"ID\" IN ($idPlaceholders)" => $ids) array("\"$typeField\" = 'Inherit' AND \"SiteTree\".\"ID\" IN ($idPlaceholders)" => $ids)
); );
@ -1309,7 +1272,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
// Cache the results // Cache the results
if(empty(self::$cache_permissions[$cacheKey])) self::$cache_permissions[$cacheKey] = array(); if(empty(self::$cache_permissions[$cacheKey])) self::$cache_permissions[$cacheKey] = array();
self::$cache_permissions[$cacheKey] = $combinedStageResult + self::$cache_permissions[$cacheKey]; self::$cache_permissions[$cacheKey] = $combinedStageResult + self::$cache_permissions[$cacheKey];
return $combinedStageResult; return $combinedStageResult;
} else { } else {
return array(); return array();
@ -1441,9 +1404,9 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
if($this->MetaDescription) { if($this->MetaDescription) {
$tags .= "<meta name=\"description\" content=\"" . Convert::raw2att($this->MetaDescription) . "\" />\n"; $tags .= "<meta name=\"description\" content=\"" . Convert::raw2att($this->MetaDescription) . "\" />\n";
} }
if($this->ExtraMeta) { if($this->ExtraMeta) {
$tags .= $this->ExtraMeta . "\n"; $tags .= $this->ExtraMeta . "\n";
} }
if(Permission::check('CMS_ACCESS_CMSMain') if(Permission::check('CMS_ACCESS_CMSMain')
&& in_array('CMSPreviewable', class_implements($this)) && in_array('CMSPreviewable', class_implements($this))
@ -1534,7 +1497,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
if(!$this->Sort) { if(!$this->Sort) {
$parentID = ($this->ParentID) ? $this->ParentID : 0; $parentID = ($this->ParentID) ? $this->ParentID : 0;
$this->Sort = DB::prepared_query( $this->Sort = DB::prepared_query(
"SELECT MAX(\"Sort\") + 1 FROM \"SiteTree\" WHERE \"ParentID\" = ?", "SELECT MAX(\"Sort\") + 1 FROM \"SiteTree\" WHERE \"ParentID\" = ?",
array($parentID) array($parentID)
)->value(); )->value();
} }
@ -1635,10 +1598,10 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
public function validate() { public function validate() {
$result = parent::validate(); $result = parent::validate();
// Allowed children validation // Allowed children validation
$parent = $this->getParent(); $parent = $this->getParent();
if($parent && $parent->exists()) { 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. // deconstructs any inheritance trees already.
$allowed = $parent->allowedChildren(); $allowed = $parent->allowedChildren();
$subject = ($this instanceof VirtualPage && $this->CopyContentFromID) ? $this->CopyContentFrom() : $this; $subject = ($this instanceof VirtualPage && $this->CopyContentFromID) ? $this->CopyContentFrom() : $this;
@ -1646,8 +1609,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
$result->error( $result->error(
_t( _t(
'SiteTree.PageTypeNotAllowed', 'SiteTree.PageTypeNotAllowed',
'Page type "{type}" not allowed as child of this parent page', 'Page type "{type}" not allowed as child of this parent page',
array('type' => $subject->i18n_singular_name()) array('type' => $subject->i18n_singular_name())
), ),
'ALLOWED_CHILDREN' 'ALLOWED_CHILDREN'
@ -1659,8 +1622,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
if(!$this->stat('can_be_root') && !$this->ParentID) { if(!$this->stat('can_be_root') && !$this->ParentID) {
$result->error( $result->error(
_t( _t(
'SiteTree.PageTypNotAllowedOnRoot', 'SiteTree.PageTypNotAllowedOnRoot',
'Page type "{type}" is not allowed on the root level', 'Page type "{type}" is not allowed on the root level',
array('type' => $this->i18n_singular_name()) array('type' => $this->i18n_singular_name())
), ),
'CAN_BE_ROOT' 'CAN_BE_ROOT'
@ -1700,7 +1663,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
} }
$votes = array_filter( $votes = array_filter(
(array)$this->extend('augmentValidURLSegment'), (array)$this->extend('augmentValidURLSegment'),
function($v) {return !is_null($v);} function($v) {return !is_null($v);}
); );
if($votes) { 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 * 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 * 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. * scratch, or incrementally modify the generated URL.
* *
* @param string $title Page title * @param string $title Page title
* @return string Generated url segment * @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. * 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. * @param bool $includeVirtuals Set to false to exlcude virtual pages.
* @return ArrayList * @return ArrayList
*/ */
@ -1931,7 +1894,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
} }
$statusMessage[] = _t( $statusMessage[] = _t(
'SiteTree.APPEARSVIRTUALPAGES', 'SiteTree.APPEARSVIRTUALPAGES',
"This content also appears on the virtual pages in the {title} sections.", "This content also appears on the virtual pages in the {title} sections.",
array('title' => $parentList) array('title' => $parentList)
); );
@ -2026,7 +1989,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
$metaFieldDesc $metaFieldDesc
->setRightTitle( ->setRightTitle(
_t( _t(
'SiteTree.METADESCHELP', 'SiteTree.METADESCHELP',
"Search engines use this content for displaying search results (although it will not influence their ranking)." "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 $metaFieldExtra
->setRightTitle( ->setRightTitle(
_t( _t(
'SiteTree.METAEXTRAHELP', 'SiteTree.METAEXTRAHELP',
"HTML tags for additional meta information. For example &lt;meta name=\"customName\" content=\"your custom content here\" /&gt;" "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')) { if(file_exists(BASE_PATH . '/install.php')) {
$fields->addFieldToTab("Root.Main", new LiteralField("InstallWarningHeader", $fields->addFieldToTab("Root.Main", new LiteralField("InstallWarningHeader",
"<p class=\"message warning\">" . _t("SiteTree.REMOVE_INSTALL_WARNING", "<p class=\"message warning\">" . _t("SiteTree.REMOVE_INSTALL_WARNING",
"Warning: You should remove install.php from this SilverStripe install for security reasons.") "Warning: You should remove install.php from this SilverStripe install for security reasons.")
. "</p>"), "Title"); . "</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()} * Returns fields related to configuration aspects on this record, e.g. access control. See {@link getCMSFields()}
* for content-related fields. * for content-related fields.
* *
* @return FieldList * @return FieldList
*/ */
public function getSettingsFields() { public function getSettingsFields() {
@ -2099,8 +2062,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
$rootTab = new TabSet("Root", $rootTab = new TabSet("Root",
$tabBehaviour = new Tab('Settings', $tabBehaviour = new Tab('Settings',
new DropdownField( new DropdownField(
"ClassName", "ClassName",
$this->fieldLabel('ClassName'), $this->fieldLabel('ClassName'),
$this->getClassDropdown() $this->getClassDropdown()
), ),
$parentTypeSelector = new CompositeField( $parentTypeSelector = new CompositeField(
@ -2115,25 +2078,25 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
new CheckboxField("ShowInSearch", $this->fieldLabel('ShowInSearch')) new CheckboxField("ShowInSearch", $this->fieldLabel('ShowInSearch'))
), ),
$viewersOptionsField = new OptionsetField( $viewersOptionsField = new OptionsetField(
"CanViewType", "CanViewType",
_t('SiteTree.ACCESSHEADER', "Who can view this page?") _t('SiteTree.ACCESSHEADER', "Who can view this page?")
), ),
$viewerGroupsField = ListboxField::create("ViewerGroups", _t('SiteTree.VIEWERGROUPS', "Viewer Groups")) $viewerGroupsField = ListboxField::create("ViewerGroups", _t('SiteTree.VIEWERGROUPS', "Viewer Groups"))
->setMultiple(true) ->setMultiple(true)
->setSource($groupsMap) ->setSource($groupsMap)
->setAttribute( ->setAttribute(
'data-placeholder', 'data-placeholder',
_t('SiteTree.GroupPlaceholder', 'Click to select group') _t('SiteTree.GroupPlaceholder', 'Click to select group')
), ),
$editorsOptionsField = new OptionsetField( $editorsOptionsField = new OptionsetField(
"CanEditType", "CanEditType",
_t('SiteTree.EDITHEADER', "Who can edit this page?") _t('SiteTree.EDITHEADER', "Who can edit this page?")
), ),
$editorGroupsField = ListboxField::create("EditorGroups", _t('SiteTree.EDITORGROUPS', "Editor Groups")) $editorGroupsField = ListboxField::create("EditorGroups", _t('SiteTree.EDITORGROUPS', "Editor Groups"))
->setMultiple(true) ->setMultiple(true)
->setSource($groupsMap) ->setSource($groupsMap)
->setAttribute( ->setAttribute(
'data-placeholder', 'data-placeholder',
_t('SiteTree.GroupPlaceholder', 'Click to select group') _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). // Minor options are hidden behind a drop-up and appear as links (although they are still FormActions).
$rootTabSet = new TabSet('ActionMenus'); $rootTabSet = new TabSet('ActionMenus');
$moreOptions = new Tab( $moreOptions = new Tab(
'MoreOptions', 'MoreOptions',
_t('SiteTree.MoreOptions', 'More options', 'Expands a view for more buttons') _t('SiteTree.MoreOptions', 'More options', 'Expands a view for more buttons')
); );
$rootTabSet->push($moreOptions); $rootTabSet->push($moreOptions);
@ -2405,7 +2368,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
/** /**
* Publish this page. * Publish this page.
* *
* @uses SiteTreeExtension->onBeforePublish() * @uses SiteTreeExtension->onBeforePublish()
* @uses SiteTreeExtension->onAfterPublish() * @uses SiteTreeExtension->onAfterPublish()
* @return bool True if published * @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 * Unpublish this page - remove it from the live site
* *
* @uses SiteTreeExtension->onBeforeUnpublish() * @uses SiteTreeExtension->onBeforeUnpublish()
* @uses SiteTreeExtension->onAfterUnpublish() * @uses SiteTreeExtension->onAfterUnpublish()
*/ */
@ -2541,6 +2504,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
* @return self * @return self
*/ */
public function doRestoreToStage() { public function doRestoreToStage() {
$this->invokeWithExtensions('onBeforeRestoreToStage', $this);
// Ensure that the parent page is restored, otherwise restore to root // Ensure that the parent page is restored, otherwise restore to root
if($this->isParentArchived()) { if($this->isParentArchived()) {
$this->ParentID = 0; $this->ParentID = 0;
@ -2569,6 +2534,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
} }
Versioned::reading_stage($oldStage); Versioned::reading_stage($oldStage);
$this->invokeWithExtensions('onAfterRestoreToStage', $this);
return $result; return $result;
} }
@ -2579,10 +2546,15 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
* @return bool Success * @return bool Success
*/ */
public function doArchive() { public function doArchive() {
$this->invokeWithExtensions('onBeforeArchive', $this);
if($this->doUnpublish()) { if($this->doUnpublish()) {
$this->delete(); $this->delete();
$this->invokeWithExtensions('onAfterArchive', $this);
return true; return true;
} }
return false; return false;
} }
@ -2608,12 +2580,12 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
if(!$this->canDelete($member)) { if(!$this->canDelete($member)) {
return false; return false;
} }
// If published, check if we can delete from live // If published, check if we can delete from live
if($this->ExistsOnLive && !$this->canDeleteFromLive($member)) { if($this->ExistsOnLive && !$this->canDeleteFromLive($member)) {
return false; return false;
} }
return true; 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 * 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 flag. The unique key can be reused as a CSS class. Use the 'updateStatusFlags' extension point to customize
* the flags. * the flags.
* *
* Example (simple): * Example (simple):
* "deletedonlive" => "Deleted" * "deletedonlive" => "Deleted"
* *
* Example (with optional title attribute): * Example (with optional title attribute):
* "deletedonlive" => array('text' => "Deleted", 'title' => 'This page has been deleted') * "deletedonlive" => array('text' => "Deleted", 'title' => 'This page has been deleted')
* *
* @param bool $cached Whether to serve the fields from cache; false regenerate them * @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 * 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). * is still published (eg, after triggering "Delete from draft site" in the CMS).
* *
* @return bool * @return bool
*/ */
public function getIsDeletedFromStage() { 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 * Compares current draft with live version, and returns true if these versions differ, meaning there have been
* unpublished changes to the draft site. * unpublished changes to the draft site.
* *
* @return bool * @return bool
*/ */
public function getIsModifiedOnStage() { 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 * Compares current draft with live version, and returns true if no live version exists, meaning the page was never
* published. * published.
* *
* @return bool * @return bool
*/ */
public function getIsAddedToStage() { public function getIsAddedToStage() {
@ -3052,7 +3024,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
/** /**
* Return the translated Singular name. * Return the translated Singular name.
* *
* @return string * @return string
*/ */
public function i18n_singular_name() { public function i18n_singular_name() {

View File

@ -2,7 +2,7 @@
/** /**
* Plug-ins for additional functionality in your SiteTree classes. * Plug-ins for additional functionality in your SiteTree classes.
* *
* @package cms * @package cms
* @subpackage model * @subpackage model
*/ */
@ -10,7 +10,7 @@ abstract class SiteTreeExtension extends DataExtension {
/** /**
* Hook called before the page's {@link SiteTree::doPublish()} action is completed * Hook called before the page's {@link SiteTree::doPublish()} action is completed
* *
* @param SiteTree &$original The current Live SiteTree record prior to publish * @param SiteTree &$original The current Live SiteTree record prior to publish
*/ */
public function onBeforePublish(&$original) { 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 * Hook called after the page's {@link SiteTree::doPublish()} action is completed
* *
* @param SiteTree &$original The current Live SiteTree record prior to publish * @param SiteTree &$original The current Live SiteTree record prior to publish
*/ */
public function onAfterPublish(&$original) { 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 * Hook called to determine if a user may add children to this SiteTree object
* *
* @see SiteTree::canAddChildren() * @see SiteTree::canAddChildren()
* *
* @param Member $member The member to check permission against, or the currently * @param Member $member The member to check permission against, or the currently
* logged in user * logged in user
* @return boolean|null Return false to deny rights, or null to yield to default * @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 * Hook called to determine if a user may publish this SiteTree object
* *
* @see SiteTree::canPublish() * @see SiteTree::canPublish()
* *
* @param Member $member The member to check permission against, or the currently * @param Member $member The member to check permission against, or the currently
* logged in user * logged in user
* @return boolean|null Return false to deny rights, or null to yield to default * @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, * Hook called to modify the $base url of this page, with a given $action,
* before {@link SiteTree::RelativeLink()} calls {@link Controller::join_links()} * before {@link SiteTree::RelativeLink()} calls {@link Controller::join_links()}
* on the $base and $action * on the $base and $action
* *
* @param string &$base The URL of this page relative to siteroot, not including * @param string &$base The URL of this page relative to siteroot, not including
* the action * the action
* @param string|boolean &$action The action or subpage called on this page. * @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:'), _t('AssetTableField.BACKLINKCOUNT', 'Used on:'),
$this->BackLinkTracking()->Count() . ' ' . _t('AssetTableField.PAGES', 'page(s)') $this->BackLinkTracking()->Count() . ' ' . _t('AssetTableField.PAGES', 'page(s)')
) )
->addExtraClass('cms-description-toggle') ->addExtraClass('cms-description-toggle')
->setDescription($this->BackLinkHTMLList()), ->setDescription($this->BackLinkHTMLList()),
'LastEdited' 'LastEdited'
); );
} }
@ -62,7 +62,7 @@ class SiteTreeFileExtension extends DataExtension {
$rememberSubsiteFilter = Subsite::$disable_subsite_filter; $rememberSubsiteFilter = Subsite::$disable_subsite_filter;
Subsite::disable_subsite_filter(true); Subsite::disable_subsite_filter(true);
} }
$links = $this->owner->getManyManyComponents('BackLinkTracking'); $links = $this->owner->getManyManyComponents('BackLinkTracking');
$this->owner->extend('updateBackLinkTracking', $links); $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. * 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. * @returns String where clause which will work as filter.
*/ */
public function getUnusedFilesListFilter() { public function getUnusedFilesListFilter() {
@ -21,7 +21,7 @@ class SiteTreeFolderExtension extends DataExtension {
if($result->numRecords() > 0) { if($result->numRecords() > 0) {
while($nextResult = $result->next()) { while($nextResult = $result->next()) {
$where .= $nextResult['FileID'] . ','; $where .= $nextResult['FileID'] . ',';
} }
} }

View File

@ -218,14 +218,18 @@ class SiteTreeLinkTracking_Parser {
$matches = array(); $matches = array();
if(preg_match('/\[sitetree_link(?:\s*|%20|,)?id=([0-9]+)\](#(.*))?/i', $href, $matches)) { if(preg_match('/\[sitetree_link(?:\s*|%20|,)?id=([0-9]+)\](#(.*))?/i', $href, $matches)) {
$page = DataObject::get_by_id('SiteTree', $matches[1]); $page = DataObject::get_by_id('SiteTree', $matches[1]);
$broken = false;
if (!$page) { if (!$page) {
// Page doesn't exist. // Page doesn't exist.
$broken = true; $broken = true;
} else if (!empty($matches[3]) && !preg_match("/(name|id)=\"{$matches[3]}\"/", $page->Content)) { } else if (!empty($matches[3])) {
// Broken anchor on the target page. $anchor = preg_quote($matches[3], '/');
$broken = true;
} else { if (!preg_match("/(name|id)=\"{$anchor}\"/", $page->Content)) {
$broken = false; // Broken anchor on the target page.
$broken = true;
}
} }
$results[] = array( $results[] = array(

View File

@ -59,7 +59,7 @@ class VirtualPage extends Page {
foreach($record->db() as $field => $type) { foreach($record->db() as $field => $type) {
if(!in_array($field, $nonVirtualFields)) { if(!in_array($field, $nonVirtualFields)) {
$virtualFields[] = $field; $virtualFields[] = $field;
} }
} }
return $virtualFields; return $virtualFields;
} }
@ -422,7 +422,7 @@ class VirtualPage extends Page {
public function __get($field) { public function __get($field) {
if(parent::hasMethod($funcName = "get$field")) { if(parent::hasMethod($funcName = "get$field")) {
return $this->$funcName(); return $this->$funcName();
} else if(parent::hasField($field)) { } else if(parent::hasField($field) || ($field === 'ID' && !$this->exists())) {
return $this->getField($field); return $this->getField($field);
} else { } else {
return $this->copyContentFrom()->$field; return $this->copyContentFrom()->$field;
@ -451,7 +451,7 @@ class VirtualPage extends Page {
public function hasField($field) { public function hasField($field) {
if(parent::hasField($field)) { if(parent::hasField($field)) {
return true; return true;
} }
return $this->CopyContentFrom()->hasField($field); return $this->CopyContentFrom()->hasField($field);
} }
/** /**
@ -463,7 +463,7 @@ class VirtualPage extends Page {
public function hasMethod($method) { public function hasMethod($method) {
if(parent::hasMethod($method)) { if(parent::hasMethod($method)) {
return true; return true;
} }
return $this->CopyContentFrom()->hasMethod($method); return $this->CopyContentFrom()->hasMethod($method);
} }
@ -569,12 +569,17 @@ class VirtualPage_Controller extends Page_Controller {
} catch (Exception $e) { } catch (Exception $e) {
// Hack... detect exception type. We really should use exception subclasses. // Hack... detect exception type. We really should use exception subclasses.
// if the exception isn't a 'no method' error, rethrow it // 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(); $original = $this->copyContentFrom();
$originalClass = get_class($original); $controller = ModelAsController::controller_for($original);
if ($originalClass == 'SiteTree') $name = 'ContentController';
else $name = $originalClass."_Controller"; // Ensure request/response data is available on virtual controller
$controller = new $name($this->dataRecord->copyContentFrom()); $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); 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) { public function sourceRecords($params = null) {
// Get class names for page types that are not virtual pages or redirector pages // 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)."'"; $stage = isset($params['OnLive']) ? 'Live' : 'Stage';
return Versioned::get_by_stage('SiteTree', $stage, $classFilter);
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;
} }
public function columns() { public function columns() {
@ -42,4 +44,14 @@ class BrokenFilesReport extends SS_Report {
new CheckboxField('OnLive', _t('SideReport.ParameterLiveCheckbox', 'Check live site')) 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 = ''; $sort = '';
} }
} }
if (!isset($_REQUEST['CheckSite']) || $params['CheckSite'] == 'Published') { $brokenFilter = array(
$ret = Versioned::get_by_stage('SiteTree', 'Live', array( '"SiteTree"."HasBrokenLink" = ? OR "SiteTree"."HasBrokenFile" = ?' => array(true, true)
'"SiteTree"."HasBrokenLink" = ? OR "SiteTree"."HasBrokenFile" = ?' => array(true, true) );
), $sort, $join, $limit); $isLive = !isset($params['CheckSite']) || $params['CheckSite'] == 'Published';
if ($isLive) {
$ret = Versioned::get_by_stage('SiteTree', 'Live', $brokenFilter, $sort, $join, $limit);
} else { } else {
$ret = DataObject::get('SiteTree', array( $ret = DataObject::get('SiteTree', $brokenFilter, $sort, $join, $limit);
'"SiteTree"."HasBrokenFile" = ? OR "SiteTree"."HasBrokenLink" = ?' => array(true, true)
), $sort, $join, $limit);
} }
$returnSet = new ArrayList(); $returnSet = new ArrayList();
@ -128,8 +128,8 @@ class BrokenLinksReport extends SS_Report {
'Draft' => _t('BrokenLinksReport.CheckSiteDropdownDraft', 'Draft Site') 'Draft' => _t('BrokenLinksReport.CheckSiteDropdownDraft', 'Draft Site')
)), )),
new DropdownField( new DropdownField(
'Reason', 'Reason',
_t('BrokenLinksReport.ReasonDropdown', 'Problem to check'), _t('BrokenLinksReport.ReasonDropdown', 'Problem to check'),
array( array(
'' => _t('BrokenLinksReport.Any', 'Any'), '' => _t('BrokenLinksReport.Any', 'Any'),
'BROKENFILE' => _t('BrokenLinksReport.ReasonDropdownBROKENFILE', 'Broken file'), '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) { public function sourceRecords($params = null) {
$classNames = "'".join("','", ClassInfo::subclassesFor('RedirectorPage'))."'"; $classes = ClassInfo::subclassesFor('RedirectorPage');
$classParams = DB::placeholders($classes);
if (isset($_REQUEST['OnLive'])) $ret = Versioned::get_by_stage('SiteTree', 'Live', "\"ClassName\" IN ($classNames) AND \"HasBrokenLink\" = 1"); $classFilter = array(
else $ret = DataObject::get('SiteTree', "\"ClassName\" IN ($classNames) AND \"HasBrokenLink\" = 1"); "\"ClassName\" IN ($classParams) AND \"HasBrokenLink\" = 1" => $classes
return $ret; );
$stage = isset($params['OnLive']) ? 'Live' : 'Stage';
return Versioned::get_by_stage('SiteTree', $stage, $classFilter);
} }
public function columns() { 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) { public function sourceRecords($params = null) {
$classNames = "'".join("','", ClassInfo::subclassesFor('VirtualPage'))."'"; $classes = ClassInfo::subclassesFor('VirtualPage');
$classParams = DB::placeholders($classes);
if (isset($_REQUEST['OnLive'])) { $classFilter = array(
$ret = Versioned::get_by_stage('SiteTree', 'Live', "\"ClassName\" IN ($classNames) AND \"HasBrokenLink\" = 1"); "\"ClassName\" IN ($classParams) AND \"HasBrokenLink\" = 1" => $classes
} else { );
$ret = DataObject::get('SiteTree', "\"ClassName\" IN ($classNames) AND \"HasBrokenLink\" = 1"); $stage = isset($params['OnLive']) ? 'Live' : 'Stage';
} return Versioned::get_by_stage('SiteTree', $stage, $classFilter);
return $ret;
} }
public function columns() { public function columns() {
@ -40,4 +38,14 @@ class BrokenVirtualPagesReport extends SS_Report {
new CheckboxField('OnLive', _t('SideReport.ParameterLiveCheckbox', 'Check live site')) 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 <?php
/** /**
* Standard basic search form which conducts a fulltext search on all {@link SiteTree} * 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, * If multilingual content is enabled through the {@link Translatable} extension,
* only pages the currently set language on the holder for this searchform are found. * 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 * 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. * 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 * @see Use ModelController and SearchContext for a more generic search implementation based around DataObject
* @package cms * @package cms
* @subpackage search * @subpackage search
@ -32,7 +32,7 @@ class SearchForm extends Form {
); );
/** /**
* *
* @param Controller $controller * @param Controller $controller
* @param string $name The name of the form (used in URL addressing) * @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 * @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. * Return a rendered version of this form.
* *
* This is returned when you access a form as $FormObject rather * This is returned when you access a form as $FormObject rather
* than <% with FormObject %> * than <% with FormObject %>
*/ */
@ -84,7 +84,7 @@ class SearchForm extends Form {
/** /**
* Set the classes to search. * 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) { public function classesToSearch($classes) {
$illegalClasses = array_diff($classes, array('SiteTree', 'File')); $illegalClasses = array_diff($classes, array('SiteTree', 'File'));
@ -101,13 +101,13 @@ class SearchForm extends Form {
* @return array * @return array
*/ */
public function getClassesToSearch() { public function getClassesToSearch() {
return $this->classesToSearch; return $this->classesToSearch;
} }
/** /**
* Return dataObjectSet of the results using $_REQUEST to get info from form. * Return dataObjectSet of the results using $_REQUEST to get info from form.
* Wraps around {@link searchEngine()}. * Wraps around {@link searchEngine()}.
* *
* @param int $pageLength DEPRECATED 2.3 Use SearchForm->pageLength * @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. * @param array $data Request data as an associative array. Should contain at least a key 'Search' with all searched keywords.
* @return SS_List * @return SS_List
@ -193,7 +193,7 @@ class SearchForm extends Form {
/** /**
* Get the search query for display in a "You searched for ..." sentence. * Get the search query for display in a "You searched for ..." sentence.
* *
* @param array $data * @param array $data
* @return string * @return string
*/ */
@ -207,7 +207,7 @@ class SearchForm extends Form {
/** /**
* Set the maximum number of records shown on each page. * Set the maximum number of records shown on each page.
* *
* @param int $length * @param int $length
*/ */
public function setPageLength($length) { public function setPageLength($length) {

View File

@ -4,7 +4,7 @@
#right form #deletemarked .middleColumn { #right form #deletemarked .middleColumn {
background: none; background: none;
} }
.dragfile, .dragfile,
.dragfile img { .dragfile img {
float: left; float: left;
cursor: move; cursor: move;
@ -38,4 +38,4 @@ form#Form_AddForm .field span.readonly {
/* Same as .checkboxAboveTree */ /* Same as .checkboxAboveTree */
border-top: 1px solid #CCCCCC; border-top: 1px solid #CCCCCC;
padding: .5em; padding: .5em;
} }

View File

@ -1,3 +1,3 @@
div#SideReportsHolder { div#SideReportsHolder {
clear: left; 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-size: 80%;
font-style: italic; font-style: italic;
} }
*/ */

View File

@ -25,7 +25,7 @@
}, },
/** /**
* Function: drop * Function: drop
* *
* Take selected files and move them to a folder target in the tree. * Take selected files and move them to a folder target in the tree.
*/ */
drop: function(e, ui) { drop: function(e, ui) {
@ -44,10 +44,10 @@
/** /**
* Function: getSelected * Function: getSelected
* *
* Get the IDs of all selected files in the table. * Get the IDs of all selected files in the table.
* Used for drag'n'drop. * Used for drag'n'drop.
* *
* Returns: * Returns:
* Array * Array
*/ */
@ -69,8 +69,8 @@
appendTo: 'body', appendTo: 'body',
helper: function() { helper: function() {
return $( return $(
'<div class="NumFilesIndicator">' + '<div class="NumFilesIndicator">'
ss.i18n.sprintf(ss.i18n._t('AssetTableField.MOVING'),container.getSelected().length) + ss.i18n.sprintf(ss.i18n._t('AssetTableField.MOVING'),container.getSelected().length)
'</div>' '</div>'
); );
} }
@ -83,10 +83,10 @@
}, },
/** /**
* Function: onmousedown * Function: onmousedown
* *
* Parameters: * Parameters:
* (Event) e * (Event) e
* *
* Automatically select the checkbox in the same table row * Automatically select the checkbox in the same table row
* to signify that this element is moved, and hint that * to signify that this element is moved, and hint that
* all checkboxed elements will be moved along with it. * all checkboxed elements will be moved along with it.

View File

@ -11,7 +11,7 @@
$(document).ready(function() { $(document).ready(function() {
$('#Form_BatchActionsForm').entwine('.ss.tree').register( $('#Form_BatchActionsForm').entwine('.ss.tree').register(
// TODO Hardcoding of base URL // TODO Hardcoding of base URL
'admin/assets/batchactions/delete', 'admin/assets/batchactions/delete',
function(ids) { function(ids) {
var confirmed = confirm( var confirmed = confirm(
ss.i18n.sprintf( ss.i18n.sprintf(
@ -55,7 +55,7 @@
msg = ss.i18n._t('AssetAdmin.ConfirmDelete'); msg = ss.i18n._t('AssetAdmin.ConfirmDelete');
} else { } else {
msg = ss.i18n._t('TABLEFIELD.DELETECONFIRMMESSAGE'); msg = ss.i18n._t('TABLEFIELD.DELETECONFIRMMESSAGE');
} }
if(!confirm(msg)) return false; if(!confirm(msg)) return false;
this.getGridField().reload({data: [{name: this.attr('name'), value: this.val()}]}); this.getGridField().reload({data: [{name: this.attr('name'), value: this.val()}]});
@ -94,7 +94,7 @@
/** /**
* Function: onsubmit * Function: onsubmit
* *
* Parameters: * Parameters:
* (Event) e * (Event) e
*/ */

View File

@ -44,7 +44,7 @@
* Similar implementation to LeftAndMain.Tree.js. * Similar implementation to LeftAndMain.Tree.js.
*/ */
updateTypeList: function() { updateTypeList: function() {
var hints = this.data('hints'), var hints = this.data('hints'),
parentTree = this.find('#Form_AddForm_ParentID_Holder .TreeDropdownField'), parentTree = this.find('#Form_AddForm_ParentID_Holder .TreeDropdownField'),
parentMode = this.find("input[name=ParentModeField]:checked").val(), parentMode = this.find("input[name=ParentModeField]:checked").val(),
metadata = parentTree.data('metadata'), metadata = parentTree.data('metadata'),
@ -101,7 +101,7 @@
}, },
/** /**
* Update the selection filter with the given blacklist and default selection * Update the selection filter with the given blacklist and default selection
* *
* @param array disallowedChildren * @param array disallowedChildren
* @param string defaultChildClass * @param string defaultChildClass
*/ */
@ -109,7 +109,7 @@
// Limit selection // Limit selection
var allAllowed = null; // troolian var allAllowed = null; // troolian
this.find('#Form_AddForm_PageType li').each(function() { 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); isAllowed = ($.inArray(className, disallowedChildren) === -1);
$(this).setEnabled(isAllowed); $(this).setEnabled(isAllowed);

View File

@ -17,7 +17,7 @@
/** /**
* Class: .cms-edit-form input[name=Title] * Class: .cms-edit-form input[name=Title]
* *
* Input validation on the Title field * Input validation on the Title field
*/ */
$('.cms-edit-form input[name=Title]').entwine({ $('.cms-edit-form input[name=Title]').entwine({
@ -61,7 +61,7 @@
/** /**
* Function: updateRelatedFields * Function: updateRelatedFields
* *
* Update the related fields if appropriate * Update the related fields if appropriate
* (String) title The new title * (String) title The new title
* (Stirng) origTitle The original title * (Stirng) origTitle The original title
@ -80,7 +80,7 @@
/** /**
* Function: updateURLSegment * Function: updateURLSegment
* *
* Update the URLSegment * Update the URLSegment
* (String) title * (String) title
*/ */
@ -96,7 +96,7 @@
/** /**
* Function: updateBreadcrumbLabel * Function: updateBreadcrumbLabel
* *
* Update the breadcrumb * Update the breadcrumb
* (String) title * (String) title
*/ */
@ -110,9 +110,9 @@
/** /**
* Function: _addActions * Function: _addActions
* *
* Utility to add update from title action * Utility to add update from title action
* *
*/ */
_addActions: function() { _addActions: function() {
var self = this; var self = this;
@ -137,7 +137,7 @@
/** /**
* Class: .cms-edit-form .parentTypeSelector * Class: .cms-edit-form .parentTypeSelector
* *
* ParentID field combination - mostly toggling between * ParentID field combination - mostly toggling between
* the two radiobuttons and setting the hidden "ParentID" field * the two radiobuttons and setting the hidden "ParentID" field
*/ */
@ -159,7 +159,7 @@
/** /**
* Function: _toggleSelection * Function: _toggleSelection
* *
* Parameters: * Parameters:
* (Event) e * (Event) e
*/ */
@ -175,7 +175,7 @@
/** /**
* Function: _changeParentId * Function: _changeParentId
* *
* Parameters: * Parameters:
* (Event) e * (Event) e
*/ */
@ -188,7 +188,7 @@
/** /**
* Class: .cms-edit-form #CanViewType, .cms-edit-form #CanEditType * Class: .cms-edit-form #CanViewType, .cms-edit-form #CanEditType
* *
* Toggle display of group dropdown in "access" tab, * Toggle display of group dropdown in "access" tab,
* based on selection of radiobuttons. * based on selection of radiobuttons.
*/ */
@ -226,20 +226,20 @@
/** /**
* Class: .cms-edit-form .Actions #Form_EditForm_action_print * Class: .cms-edit-form .Actions #Form_EditForm_action_print
* *
* Open a printable representation of the form in a new window. * Open a printable representation of the form in a new window.
* Used for readonly older versions of a specific page. * Used for readonly older versions of a specific page.
*/ */
$('.cms-edit-form .Actions #Form_EditForm_action_print').entwine({ $('.cms-edit-form .Actions #Form_EditForm_action_print').entwine({
/** /**
* Function: onclick * Function: onclick
* *
* Parameters: * Parameters:
* (Event) e * (Event) e
*/ */
onclick: function(e) { onclick: function(e) {
var printURL = $(this[0].form).attr('action').replace(/\?.*$/,'') var printURL = $(this[0].form).attr('action').replace(/\?.*$/,'')
+ '/printable/' + '/printable/'
+ $(':input[name=ID]',this[0].form).val(); + $(':input[name=ID]',this[0].form).val();
if(printURL.substr(0,7) != 'http://') printURL = $('base').attr('href') + printURL; if(printURL.substr(0,7) != 'http://') printURL = $('base').attr('href') + printURL;
@ -251,14 +251,14 @@
/** /**
* Class: .cms-edit-form .Actions #Form_EditForm_action_rollback * Class: .cms-edit-form .Actions #Form_EditForm_action_rollback
* *
* A "rollback" to a specific version needs user confirmation. * A "rollback" to a specific version needs user confirmation.
*/ */
$('.cms-edit-form .Actions #Form_EditForm_action_rollback').entwine({ $('.cms-edit-form .Actions #Form_EditForm_action_rollback').entwine({
/** /**
* Function: onclick * Function: onclick
* *
* Parameters: * Parameters:
* (Event) e * (Event) e
*/ */
@ -266,7 +266,7 @@
var form = this.parents('form:first'), version = form.find(':input[name=Version]').val(), message = ''; var form = this.parents('form:first'), version = form.find(':input[name=Version]').val(), message = '';
if(version) { if(version) {
message = ss.i18n.sprintf( message = ss.i18n.sprintf(
ss.i18n._t('CMSMain.RollbackToVersion'), ss.i18n._t('CMSMain.RollbackToVersion'),
version version
); );
} else { } else {
@ -282,21 +282,21 @@
/** /**
* Class: .cms-edit-form .Actions #Form_EditForm_action_archive * Class: .cms-edit-form .Actions #Form_EditForm_action_archive
* *
* Informing the user about the archive action while requiring confirmation * Informing the user about the archive action while requiring confirmation
*/ */
$('.cms-edit-form .Actions #Form_EditForm_action_archive').entwine({ $('.cms-edit-form .Actions #Form_EditForm_action_archive').entwine({
/** /**
* Function: onclick * Function: onclick
* *
* Parameters: * Parameters:
* (Event) e * (Event) e
*/ */
onclick: function(e) { onclick: function(e) {
var form = this.parents('form:first'), version = form.find(':input[name=Version]').val(), message = ''; var form = this.parents('form:first'), version = form.find(':input[name=Version]').val(), message = '';
message = ss.i18n.sprintf( message = ss.i18n.sprintf(
ss.i18n._t('CMSMain.Archive'), ss.i18n._t('CMSMain.Archive'),
version version
); );
if(confirm(message)) { if(confirm(message)) {
@ -309,14 +309,14 @@
/** /**
* Class: .cms-edit-form .Actions #Form_EditForm_action_restore * Class: .cms-edit-form .Actions #Form_EditForm_action_restore
* *
* Informing the user about the archive action while requiring confirmation * Informing the user about the archive action while requiring confirmation
*/ */
$('.cms-edit-form .Actions #Form_EditForm_action_restore').entwine({ $('.cms-edit-form .Actions #Form_EditForm_action_restore').entwine({
/** /**
* Function: onclick * Function: onclick
* *
* Parameters: * Parameters:
* (Event) e * (Event) e
*/ */
@ -326,7 +326,7 @@
message = '', message = '',
toRoot = this.data('toRoot'); toRoot = this.data('toRoot');
message = ss.i18n.sprintf( message = ss.i18n.sprintf(
ss.i18n._t(toRoot ? 'CMSMain.RestoreToRoot' : 'CMSMain.Restore'), ss.i18n._t(toRoot ? 'CMSMain.RestoreToRoot' : 'CMSMain.Restore'),
version version
); );
if(confirm(message)) { if(confirm(message)) {
@ -339,21 +339,21 @@
/** /**
* Class: .cms-edit-form .Actions #Form_EditForm_action_delete * Class: .cms-edit-form .Actions #Form_EditForm_action_delete
* *
* Informing the user about the delete from draft action while requiring confirmation * Informing the user about the delete from draft action while requiring confirmation
*/ */
$('.cms-edit-form .Actions #Form_EditForm_action_delete').entwine({ $('.cms-edit-form .Actions #Form_EditForm_action_delete').entwine({
/** /**
* Function: onclick * Function: onclick
* *
* Parameters: * Parameters:
* (Event) e * (Event) e
*/ */
onclick: function(e) { onclick: function(e) {
var form = this.parents('form:first'), version = form.find(':input[name=Version]').val(), message = ''; var form = this.parents('form:first'), version = form.find(':input[name=Version]').val(), message = '';
message = ss.i18n.sprintf( message = ss.i18n.sprintf(
ss.i18n._t('CMSMain.DeleteFromDraft'), ss.i18n._t('CMSMain.DeleteFromDraft'),
version version
); );
if(confirm(message)) { if(confirm(message)) {
@ -372,14 +372,14 @@
/** /**
* Function: onclick * Function: onclick
* *
* Parameters: * Parameters:
* (Event) e * (Event) e
*/ */
onclick: function(e) { onclick: function(e) {
var form = this.parents('form:first'), version = form.find(':input[name=Version]').val(), message = ''; var form = this.parents('form:first'), version = form.find(':input[name=Version]').val(), message = '';
message = ss.i18n.sprintf( message = ss.i18n.sprintf(
ss.i18n._t('CMSMain.Unpublish'), ss.i18n._t('CMSMain.Unpublish'),
version version
); );
if(confirm(message)) { if(confirm(message)) {

View File

@ -1,8 +1,8 @@
(function($) { (function($) {
/** /**
* File: CMSPageHistoryController.js * 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 * left hand side of the panel and the version displaying on the right
* hand side. * hand side.
*/ */
@ -32,7 +32,7 @@
* display based on whether we have two or 1 option selected * display based on whether we have two or 1 option selected
* *
* Todo: * Todo:
* Handle coupling to admin url * Handle coupling to admin url
*/ */
onsubmit: function(e, d) { onsubmit: function(e, d) {
e.preventDefault(); e.preventDefault();
@ -116,7 +116,7 @@
* Selects or deselects the row (if in compare mode). Will trigger * Selects or deselects the row (if in compare mode). Will trigger
* an update of the edit form if either selected (in single mode) * an update of the edit form if either selected (in single mode)
* or if this is the second row selected (in compare mode) * or if this is the second row selected (in compare mode)
*/ */
onclick: function(e) { onclick: function(e) {
var compare, selected; 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() { _unselect: function() {
this.removeClass('active'); this.removeClass('active');

View File

@ -14,11 +14,11 @@
}, },
toggle: function() { toggle: function() {
if($(this).attr('value') == 'Internal') { if($(this).attr('value') == 'Internal') {
$('#ExternalURL').hide(); $('#Form_EditForm_ExternalURL_Holder').hide();
$('#LinkToID').show(); $('#Form_EditForm_LinkToID_Holder').show();
} else { } else {
$('#ExternalURL').show(); $('#Form_EditForm_ExternalURL_Holder').show();
$('#LinkToID').hide(); $('#Form_EditForm_LinkToID_Holder').hide();
} }
} }
}); });

View File

@ -23,7 +23,7 @@
}, },
redraw: function() { redraw: function() {
var field = this.find(':text'), var field = this.find(':text'),
url = decodeURI(field.data('prefix') + field.val()), url = decodeURI(field.data('prefix') + field.val()),
previewUrl = url; previewUrl = url;
@ -87,7 +87,7 @@
/** /**
* Return a value matching the criteria. * Return a value matching the criteria.
* *
* @param (String) * @param (String)
* @param (Function) * @param (Function)
*/ */

View File

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

View File

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

View File

@ -36,16 +36,16 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"Tree.ThisPageOnly": "Nur diese Seite", "Tree.ThisPageOnly": "Nur diese Seite",
"Tree.ThisPageAndSubpages": "Diese Seite und Unterseiten", "Tree.ThisPageAndSubpages": "Diese Seite und Unterseiten",
"Tree.ShowAsList": "Kinder als LIste zeigen", "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.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.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": "Are you sure you want to restore this page from archive?", "CMSMain.Restore": "Sind Sie sicher, dass Sie diese Seite aus dem Archiv wiederherstellen wollen?",
"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.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": "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.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": "Are you sure you want to remove your page from the draft site?\n\nThis page will remain on the published site.", "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.Edit": "Bearbeiten",
"URLSEGMENT.OK": "OK", "URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Abbrechen", "URLSEGMENT.Cancel": "Abbrechen",
"URLSEGMENT.UpdateURL": "URL aktualisieren" "URLSEGMENT.UpdateURL": "URL aktualisieren"
}); });
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -36,16 +36,16 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
"Tree.ThisPageOnly": "Vain tämä sivu", "Tree.ThisPageOnly": "Vain tämä sivu",
"Tree.ThisPageAndSubpages": "Tämä sivu ja alasivut", "Tree.ThisPageAndSubpages": "Tämä sivu ja alasivut",
"Tree.ShowAsList": "Näytä alasivut listana", "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.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.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": "Are you sure you want to restore this page from archive?", "CMSMain.Restore": "Haluatko varmasti palauttaa sivun arkistosta?",
"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.RestoreToRoot": "Haluatko varmasti palauttaa tämän sivun arkistosta?\n\nKoska isäntäsivua ei ole saatavilla, sivu palautetaan päätasolle.",
"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.Unpublish": "Haluatko varmasti poistaa tämän sivun julkaisusta?\n\nTämä sivu on vielä saatavilla vedoksena rakennepuusta.",
"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.DeleteFromDraft": "Haluatko varmasti poistaa tämän sivun luonnoksista?\n\nTämä sivu pysyy julkaistuna.",
"URLSEGMENT.Edit": "Muokkaa", "URLSEGMENT.Edit": "Muokkaa",
"URLSEGMENT.OK": "OK", "URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Peruuta", "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.Cancel": "Annuler",
"URLSEGMENT.UpdateURL": "Update URL" "URLSEGMENT.UpdateURL": "Update URL"
}); });
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -31,15 +31,15 @@
"Tree.ThisPageOnly": "Nur diese Seite", "Tree.ThisPageOnly": "Nur diese Seite",
"Tree.ThisPageAndSubpages": "Diese Seite und Unterseiten", "Tree.ThisPageAndSubpages": "Diese Seite und Unterseiten",
"Tree.ShowAsList": "Kinder als LIste zeigen", "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.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.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": "Are you sure you want to restore this page from archive?", "CMSMain.Restore": "Sind Sie sicher, dass Sie diese Seite aus dem Archiv wiederherstellen wollen?",
"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.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": "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.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": "Are you sure you want to remove your page from the draft site?\n\nThis page will remain on the published site.", "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.Edit": "Bearbeiten",
"URLSEGMENT.OK": "OK", "URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Abbrechen", "URLSEGMENT.Cancel": "Abbrechen",
"URLSEGMENT.UpdateURL": "URL aktualisieren" "URLSEGMENT.UpdateURL": "URL aktualisieren"
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -31,15 +31,15 @@
"Tree.ThisPageOnly": "Vain tämä sivu", "Tree.ThisPageOnly": "Vain tämä sivu",
"Tree.ThisPageAndSubpages": "Tämä sivu ja alasivut", "Tree.ThisPageAndSubpages": "Tämä sivu ja alasivut",
"Tree.ShowAsList": "Näytä alasivut listana", "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.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.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": "Are you sure you want to restore this page from archive?", "CMSMain.Restore": "Haluatko varmasti palauttaa sivun arkistosta?",
"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.RestoreToRoot": "Haluatko varmasti palauttaa tämän sivun arkistosta?\n\nKoska isäntäsivua ei ole saatavilla, sivu palautetaan päätasolle.",
"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.Unpublish": "Haluatko varmasti poistaa tämän sivun julkaisusta?\n\nTämä sivu on vielä saatavilla vedoksena rakennepuusta.",
"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.DeleteFromDraft": "Haluatko varmasti poistaa tämän sivun luonnoksista?\n\nTämä sivu pysyy julkaistuna.",
"URLSEGMENT.Edit": "Muokkaa", "URLSEGMENT.Edit": "Muokkaa",
"URLSEGMENT.OK": "OK", "URLSEGMENT.OK": "OK",
"URLSEGMENT.Cancel": "Peruuta", "URLSEGMENT.Cancel": "Peruuta",
"URLSEGMENT.UpdateURL": "Update URL" "URLSEGMENT.UpdateURL": "Päivitä URL"
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -85,13 +85,10 @@ ar:
DUPLICATEDWITHCHILDREN: 'تكرار ''{title}'' والتوابع بنجاح' DUPLICATEDWITHCHILDREN: 'تكرار ''{title}'' والتوابع بنجاح'
EMAIL: البريد الإلكتروني EMAIL: البريد الإلكتروني
EditTree: 'تعديل الهيكل' EditTree: 'تعديل الهيكل'
ListFiltered: 'قائمة تمت تصفيتها.'
MENUTITLE: 'حرر الصفحة' MENUTITLE: 'حرر الصفحة'
NEWPAGE: '{pagetype} جديد' NEWPAGE: '{pagetype} جديد'
PAGENOTEXISTS: 'هذه الصفحة غير موجودة' PAGENOTEXISTS: 'هذه الصفحة غير موجودة'
PAGES: الصفحات
PAGETYPEANYOPT: أي PAGETYPEANYOPT: أي
PAGETYPEOPT: 'نوع الصفحة'
PUBALLCONFIRM: 'فضلاً قم بنشر كل صفحة من صفحات الموقع' PUBALLCONFIRM: 'فضلاً قم بنشر كل صفحة من صفحات الموقع'
PUBALLFUN: '"نشر الجميع"خاصية ' 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" 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: المحتوى TabContent: المحتوى
TabHistory: السوابق TabHistory: السوابق
TabSettings: الإعدادات TabSettings: الإعدادات
TreeFiltered: 'الشجرة المصفاة.'
TreeFilteredClear: 'أزل المصفي'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'طبق عامل تصفية'
RESET: إعادة الوضع الأصلي RESET: إعادة الوضع الأصلي
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'أضف صفحة' MENUTITLE: 'أضف صفحة'
@ -144,15 +138,12 @@ ar:
ListView: 'عرض القائمة' ListView: 'عرض القائمة'
MENUTITLE: الصفحات MENUTITLE: الصفحات
TreeView: 'عرض الشجرة' TreeView: 'عرض الشجرة'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: متعدد الاختيار
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: مصفاة FILTER: مصفاة
CMSSearch: CMSSearch:
FILTERDATEFROM: من FILTERDATEFROM: من
FILTERDATEHEADING: موعد FILTERDATEHEADING: موعد
FILTERDATETO: إلى FILTERDATETO: إلى
FILTERLABELTEXT: المحتوى
CMSSettingsController: CMSSettingsController:
MENUTITLE: الإعدادات MENUTITLE: الإعدادات
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -70,10 +70,8 @@ bg:
Create: Създай Create: Създай
DELETE: 'Изтрий черновата и отиди на текущата публикувана страница' DELETE: 'Изтрий черновата и отиди на текущата публикувана страница'
DELETEFP: Изтрии DELETEFP: Изтрии
ListFiltered: 'Филтриран списък.'
MENUTITLE: 'Редактиране на страницата' MENUTITLE: 'Редактиране на страницата'
PAGENOTEXISTS: 'Тази страница не съществува' PAGENOTEXISTS: 'Тази страница не съществува'
PAGES: Страници
PAGETYPEANYOPT: Всички PAGETYPEANYOPT: Всички
PUBALLCONFIRM: 'Публикувай всяка страница в сайта' PUBALLCONFIRM: 'Публикувай всяка страница в сайта'
PUBALLFUN: '"Публикувай всичко" функционалност' PUBALLFUN: '"Публикувай всичко" функционалност'
@ -88,9 +86,6 @@ bg:
TabContent: Съдържание TabContent: Съдържание
TabHistory: История TabHistory: История
TabSettings: Настройки TabSettings: Настройки
TreeFilteredClear: 'Нулирай филтъра'
CMSMain_left_ss:
APPLY_FILTER: 'Приложи филтър'
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Добави страница' MENUTITLE: 'Добави страница'
ParentMode_child: 'Под друга страница' ParentMode_child: 'Под друга страница'
@ -110,13 +105,10 @@ bg:
WHEN: Когато WHEN: Когато
CMSPageSettingsController: CMSPageSettingsController:
MENUTITLE: 'Редактиране на страницата' MENUTITLE: 'Редактиране на страницата'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Избиране на няколко
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Филтър FILTER: Филтър
CMSSearch: CMSSearch:
FILTERDATEFROM: От FILTERDATEFROM: От
FILTERLABELTEXT: Съдържание
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:
Title: 'Всички страници' Title: 'Всички страници'
ContentControl: ContentControl:

View File

@ -72,7 +72,7 @@ cs:
RESTORE: Obnovit RESTORE: Obnovit
RESTORED_PAGES: 'Obnoveno %d stránek' RESTORED_PAGES: 'Obnoveno %d stránek'
UNPUBLISHED_PAGES: 'Nezveřejněných %d stránek' UNPUBLISHED_PAGES: 'Nezveřejněných %d stránek'
UNPUBLISH_PAGES: Nezveřejnit UNPUBLISH_PAGES: Nezveřejňovat
CMSFileAddController: CMSFileAddController:
MENUTITLE: Soubory MENUTITLE: Soubory
CMSMain: CMSMain:
@ -94,11 +94,11 @@ cs:
DUPLICATEDWITHCHILDREN: 'Duplikováno ''{title}'' a potomci úspěšně' DUPLICATEDWITHCHILDREN: 'Duplikováno ''{title}'' a potomci úspěšně'
EMAIL: E-mail EMAIL: E-mail
EditTree: 'Upravit strom' EditTree: 'Upravit strom'
ListFiltered: 'Filtrovaný seznam.' ListFiltered: 'Zobrazení výsledků vyhledávání.'
MENUTITLE: 'Upravit stránku' MENUTITLE: 'Upravit stránku'
NEWPAGE: 'Nová {pagetype}' NEWPAGE: 'Nová {pagetype}'
PAGENOTEXISTS: 'Tato stránka neexistuje' PAGENOTEXISTS: 'Tato stránka neexistuje'
PAGES: Stránky PAGES: 'Stav stránky'
PAGETYPEANYOPT: Jakékoliv PAGETYPEANYOPT: Jakékoliv
PAGETYPEOPT: 'Typ stránky' PAGETYPEOPT: 'Typ stránky'
PUBALLCONFIRM: 'Prosím zveřejněte veškeré stránky z úschovny' PUBALLCONFIRM: 'Prosím zveřejněte veškeré stránky z úschovny'
@ -109,7 +109,7 @@ cs:
REMOVED: 'Smazáno ''{title}''{description} z webu' REMOVED: 'Smazáno ''{title}''{description} z webu'
REMOVEDPAGE: 'Odstraněno ''{title}'' ze zveřejněného webu' REMOVEDPAGE: 'Odstraněno ''{title}'' ze zveřejněného webu'
REMOVEDPAGEFROMDRAFT: 'Odstraněno ''%s'' z konceptu webu' REMOVEDPAGEFROMDRAFT: 'Odstraněno ''%s'' z konceptu webu'
RESTORE: Obnovit RESTORE: 'Obnovit koncept'
RESTORED: 'Obnoveno ''{title}'' úspěšně' RESTORED: 'Obnoveno ''{title}'' úspěšně'
RESTORE_DESC: 'Obnovit archivovanou verzi na koncept' RESTORE_DESC: 'Obnovit archivovanou verzi na koncept'
RESTORE_TO_ROOT: 'Obnovit koncept do nejvyšší úrovně' RESTORE_TO_ROOT: 'Obnovit koncept do nejvyšší úrovně'
@ -122,11 +122,11 @@ cs:
TabContent: Obsah TabContent: Obsah
TabHistory: Historie TabHistory: Historie
TabSettings: Nastavení TabSettings: Nastavení
TreeFiltered: 'Filtrovaný strom.' TreeFiltered: 'Zobrazení výsledků vyhledávání.'
TreeFilteredClear: 'Vyčistit filtr' TreeFilteredClear: Vyčistit
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Použít filtr' APPLY_FILTER: Hledat
CLEAR_FILTER: 'Vyčistit filtr' CLEAR_FILTER: Vyčistit
RESET: Resetovat RESET: Resetovat
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Přidat stránku' MENUTITLE: 'Přidat stránku'
@ -159,7 +159,7 @@ cs:
MENUTITLE: Stránky MENUTITLE: Stránky
TreeView: 'Pohled strom' TreeView: 'Pohled strom'
CMSPagesController_ContentToolbar_ss: CMSPagesController_ContentToolbar_ss:
MULTISELECT: Multi výběr MULTISELECT: 'Dávkové akce'
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtr FILTER: Filtr
CMSSIteTreeFilter_PublishedPages: CMSSIteTreeFilter_PublishedPages:
@ -168,19 +168,20 @@ cs:
FILTERDATEFROM: Od FILTERDATEFROM: Od
FILTERDATEHEADING: Datum FILTERDATEHEADING: Datum
FILTERDATETO: Do FILTERDATETO: Do
FILTERLABELTEXT: Obsah FILTERLABELTEXT: Hledat
PAGEFILTERDATEHEADING: 'Poslední změna'
CMSSettingsController: CMSSettingsController:
MENUTITLE: Možnosti MENUTITLE: Možnosti
CMSSiteTreeFilter_ChangedPages: CMSSiteTreeFilter_ChangedPages:
Title: 'Změnené stránky' Title: 'Upravené stránky'
CMSSiteTreeFilter_DeletedPages: CMSSiteTreeFilter_DeletedPages:
Title: 'Všechny stránky, včetně odstraněných' Title: 'Všechny stránky, včetně archivovaných'
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:
Title: 'Všechny stránky' Title: 'Všechny stránky'
CMSSiteTreeFilter_StatusDeletedPages: CMSSiteTreeFilter_StatusDeletedPages:
Title: 'Smazané stránky' Title: 'Archivované stránky'
CMSSiteTreeFilter_StatusDraftPages: CMSSiteTreeFilter_StatusDraftPages:
Title: 'Koncept nezveřejněných stránek' Title: 'Konceptové stránky'
CMSSiteTreeFilter_StatusRemovedFromDraftPages: CMSSiteTreeFilter_StatusRemovedFromDraftPages:
Title: 'Živé, ale odstraněno z konceptu' Title: 'Živé, ale odstraněno z konceptu'
ContentControl: ContentControl:
@ -298,7 +299,7 @@ cs:
SilverStripeNavigator: SilverStripeNavigator:
ARCHIVED: Archivováno ARCHIVED: Archivováno
SilverStripeNavigatorLink: 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' ShareLink: 'Sdílet odkaz'
SilverStripeNavigatorLinkl: SilverStripeNavigatorLinkl:
CloseLink: Zavřít CloseLink: Zavřít

View File

@ -4,7 +4,10 @@ da:
ActionAdd: 'Tilføj mappe' ActionAdd: 'Tilføj mappe'
AppCategoryArchive: Arkiv AppCategoryArchive: Arkiv
AppCategoryAudio: Lyd AppCategoryAudio: Lyd
AppCategoryDocument: Dokument
AppCategoryFlash: Flash
AppCategoryImage: Billeder AppCategoryImage: Billeder
AppCategoryVideo: Video
BackToFolder: 'Tilbage til mappen' BackToFolder: 'Tilbage til mappen'
CREATED: Dato CREATED: Dato
CurrentFolderOnly: 'Begræns til den nuværende mappe' CurrentFolderOnly: 'Begræns til den nuværende mappe'
@ -24,6 +27,8 @@ da:
Upload: Overfør Upload: Overfør
AssetAdmin_DeleteBatchAction: AssetAdmin_DeleteBatchAction:
TITLE: 'Slet mapper' TITLE: 'Slet mapper'
AssetAdmin_Tools:
FILTER: Filter
AssetTableField: AssetTableField:
BACKLINKCOUNT: 'Brugt på:' BACKLINKCOUNT: 'Brugt på:'
PAGES: side(r) PAGES: side(r)
@ -53,6 +58,8 @@ da:
CMSAddPageController: CMSAddPageController:
Title: 'Tilføj side' Title: 'Tilføj side'
CMSBatchActions: CMSBatchActions:
ARCHIVE: Arkiv
ARCHIVED_PAGES: 'Arkiverede %d sider'
DELETED_DRAFT_PAGES: 'Slettede %d sider fra kladdesiden, %d fejl' DELETED_DRAFT_PAGES: 'Slettede %d sider fra kladdesiden, %d fejl'
DELETED_PAGES: 'Slettede %d sider fra udgivet webside, %d fejl' DELETED_PAGES: 'Slettede %d sider fra udgivet webside, %d fejl'
DELETE_DRAFT_PAGES: 'Slet fra kladder' DELETE_DRAFT_PAGES: 'Slet fra kladder'
@ -64,6 +71,7 @@ da:
CMSMain: CMSMain:
ACCESS: 'Adgang til ''{title}'' sektionen' 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".' 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' AddNew: 'Tilføj ny side'
AddNewButton: 'Tilføj ny' AddNewButton: 'Tilføj ny'
ChoosePageParentMode: 'Vælg hvor denne side skal oprettes' ChoosePageParentMode: 'Vælg hvor denne side skal oprettes'
@ -73,13 +81,10 @@ da:
DELETEFP: Slet DELETEFP: Slet
DESCREMOVED: 'og {count} efterkommere' DESCREMOVED: 'og {count} efterkommere'
EditTree: 'Rediger sidetræ' EditTree: 'Rediger sidetræ'
ListFiltered: 'Filtreret liste.'
MENUTITLE: 'Rediger side' MENUTITLE: 'Rediger side'
NEWPAGE: 'Ny {pagetype}' NEWPAGE: 'Ny {pagetype}'
PAGENOTEXISTS: 'Denne side eksisterer ikke' PAGENOTEXISTS: 'Denne side eksisterer ikke'
PAGES: Sider
PAGETYPEANYOPT: Enhver PAGETYPEANYOPT: Enhver
PAGETYPEOPT: 'Sidetype'
PUBALLCONFIRM: 'Udgiv alle sider på sitet. Kopierer indhold fra kladde til offentlig' PUBALLCONFIRM: 'Udgiv alle sider på sitet. Kopierer indhold fra kladde til offentlig'
PUBALLFUN: '"Udgiv alle" funktionalitet' 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." 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 TabContent: Indhold
TabHistory: Historik TabHistory: Historik
TabSettings: Indstillinger TabSettings: Indstillinger
TreeFiltered: 'Filtreret sidetræ.'
TreeFilteredClear: 'Nulstil filter'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Anvend filter'
RESET: Nulstil RESET: Nulstil
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Tilføj side' MENUTITLE: 'Tilføj side'
@ -127,15 +129,12 @@ da:
ListView: 'Listevisning' ListView: 'Listevisning'
MENUTITLE: Sider MENUTITLE: Sider
TreeView: 'Trævisning' TreeView: 'Trævisning'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Multivalg
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtre FILTER: Filtre
CMSSearch: CMSSearch:
FILTERDATEFROM: Fra FILTERDATEFROM: Fra
FILTERDATEHEADING: Dato FILTERDATEHEADING: Dato
FILTERDATETO: Til FILTERDATETO: Til
FILTERLABELTEXT: Indhold
CMSSettingsController: CMSSettingsController:
MENUTITLE: Indstillinger MENUTITLE: Indstillinger
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:
@ -152,6 +151,7 @@ da:
LOGIN: Log ind LOGIN: Log ind
LOGOUT: 'Log ud' LOGOUT: 'Log ud'
NOTLOGGEDIN: 'Ikke logget ind' NOTLOGGEDIN: 'Ikke logget ind'
PUBLISHED: Udgivet
PUBLISHEDSITE: 'Udgivet side' PUBLISHEDSITE: 'Udgivet side'
Password: Adgangskode Password: Adgangskode
UnableDeleteInstall: 'Var ikke i stand til at slette installationsfilerne. Slet venligst filerne herunder manuelt.' 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' APPEARSVIRTUALPAGES: 'Dette indhold er også på de virtuelle sider i {title}sektionerne'
BUTTONCANCELDRAFT: 'Annuller ændringer i kladden ' BUTTONCANCELDRAFT: 'Annuller ændringer i kladden '
BUTTONCANCELDRAFTDESC: 'Slet kladden og benyt istedet den nuværende side' BUTTONCANCELDRAFTDESC: 'Slet kladden og benyt istedet den nuværende side'
BUTTONPUBLISHED: Udgivet
BUTTONSAVED: Gemt
BUTTONSAVEPUBLISH: 'Gem & udgiv'
BUTTONUNPUBLISH: Annuller udgivelse BUTTONUNPUBLISH: Annuller udgivelse
BUTTONUNPUBLISHDESC: 'Fjern denne side fra det udgivne websted' BUTTONUNPUBLISHDESC: 'Fjern denne side fra det udgivne websted'
Comments: Kommentarer Comments: Kommentarer

View File

@ -71,6 +71,8 @@ de:
PUBLISH_PAGES: Veröffentlichen PUBLISH_PAGES: Veröffentlichen
RESTORE: Wiederherstellen RESTORE: Wiederherstellen
RESTORED_PAGES: '%d Seiten wiederhergestellt' RESTORED_PAGES: '%d Seiten wiederhergestellt'
UNPUBLISHED_PAGES: 'Veröffentlichung von %d Seiten zurückgenommen'
UNPUBLISH_PAGES: Veröffentlichung zurücknehmen
CMSFileAddController: CMSFileAddController:
MENUTITLE: Dateien MENUTITLE: Dateien
CMSMain: CMSMain:
@ -92,13 +94,11 @@ de:
DUPLICATEDWITHCHILDREN: '''{title}'' und alle Unterseiten wurden erfolgreich dupliziert' DUPLICATEDWITHCHILDREN: '''{title}'' und alle Unterseiten wurden erfolgreich dupliziert'
EMAIL: E-Mail EMAIL: E-Mail
EditTree: 'Seitenbaum bearbeiten' EditTree: 'Seitenbaum bearbeiten'
ListFiltered: 'Gefilterte Liste'
MENUTITLE: 'Seite bearbeiten' MENUTITLE: 'Seite bearbeiten'
NEWPAGE: 'Neue {pagetype}' NEWPAGE: 'Neue {pagetype}'
PAGENOTEXISTS: 'Diese Seite existiert nicht' PAGENOTEXISTS: 'Diese Seite existiert nicht'
PAGES: Seiten
PAGETYPEANYOPT: Alle PAGETYPEANYOPT: Alle
PAGETYPEOPT: 'Seitentyp' PAGETYPEOPT: 'Seitentyp:'
PUBALLCONFIRM: 'Veröffentlicht jede Seite des Seitenbaumes und kopiert den Inhalt von Entwurf zu Live.' PUBALLCONFIRM: 'Veröffentlicht jede Seite des Seitenbaumes und kopiert den Inhalt von Entwurf zu Live.'
PUBALLFUN: '"Alle veröffentlichen"-Funktion' 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." 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' REMOVED: 'Lösche ''{title}''{description} von Live Umgebung'
REMOVEDPAGE: '''{title}'' wurde von der veröffentlichten Site entfernt' REMOVEDPAGE: '''{title}'' wurde von der veröffentlichten Site entfernt'
REMOVEDPAGEFROMDRAFT: 'Lösche ''%s'' von der Entwurfs-Site' REMOVEDPAGEFROMDRAFT: 'Lösche ''%s'' von der Entwurfs-Site'
RESTORE: 'Entwurf wiederherstellen'
RESTORED: '''{title}'' wurde wiederhergestellt' RESTORED: '''{title}'' wurde wiederhergestellt'
RESTORE_DESC: 'Entwurf aus archivierter Version wiederherstellen' RESTORE_DESC: 'Entwurf aus archivierter Version wiederherstellen'
RESTORE_TO_ROOT: 'Entwurf in oberster Ebene wiederherstellen' RESTORE_TO_ROOT: 'Entwurf in oberster Ebene wiederherstellen'
@ -119,11 +120,10 @@ de:
TabContent: Inhalt TabContent: Inhalt
TabHistory: Historie TabHistory: Historie
TabSettings: Einstellungen TabSettings: Einstellungen
TreeFiltered: 'Seitenbaum gefiltert' TreeFilteredClear: Zurücksetzen
TreeFilteredClear: 'Filter zurücksetzen'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Filter anwenden' APPLY_FILTER: Suchen
CLEAR_FILTER: 'Filter zurücksetzen' CLEAR_FILTER: Zurücksetzen
RESET: Zurücksetzen RESET: Zurücksetzen
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Seite hinzufügen' MENUTITLE: 'Seite hinzufügen'
@ -155,21 +155,28 @@ de:
ListView: 'Listenansicht' ListView: 'Listenansicht'
MENUTITLE: Seiten MENUTITLE: Seiten
TreeView: 'Baumansicht' TreeView: 'Baumansicht'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Mehrfachauswahl
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filter FILTER: Filter
CMSSIteTreeFilter_PublishedPages: CMSSIteTreeFilter_PublishedPages:
Title: 'Nicht veröffentlichte Seiten' Title: 'Veröffentlichte Seiten'
CMSSearch: CMSSearch:
FILTERDATEFROM: Von FILTERDATEFROM: Von
FILTERDATEHEADING: Datum FILTERDATEHEADING: Datum
FILTERDATETO: Bis FILTERDATETO: Bis
FILTERLABELTEXT: Inhalt FILTERLABELTEXT: Suchen
PAGEFILTERDATEHEADING: 'Zuletzt bearbeitet'
CMSSettingsController: CMSSettingsController:
MENUTITLE: Einstellungen MENUTITLE: Einstellungen
CMSSiteTreeFilter_ChangedPages:
Title: 'Geänderte Seiten'
CMSSiteTreeFilter_DeletedPages:
Title: 'Alle Seiten, auch archivierte'
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:
Title: 'Alle Seiten' Title: 'Alle Seiten'
CMSSiteTreeFilter_StatusDeletedPages:
Title: 'Alle Seiten, auch archivierte'
CMSSiteTreeFilter_StatusDraftPages:
Title: 'Entwürfe'
CMSSiteTreeFilter_StatusRemovedFromDraftPages: CMSSiteTreeFilter_StatusRemovedFromDraftPages:
Title: 'Veröffentlicht aber aus Entwurf entfernt' Title: 'Veröffentlicht aber aus Entwurf entfernt'
ContentControl: ContentControl:
@ -287,6 +294,7 @@ de:
SilverStripeNavigator: SilverStripeNavigator:
ARCHIVED: Archiviert ARCHIVED: Archiviert
SilverStripeNavigatorLink: SilverStripeNavigatorLink:
ShareInstructions: 'Kopieren Sie den untenstehenden Link um ihn zu teilen.'
ShareLink: 'Link teilen' ShareLink: 'Link teilen'
SilverStripeNavigatorLinkl: SilverStripeNavigatorLinkl:
CloseLink: schließen CloseLink: schließen

View File

@ -72,13 +72,10 @@ el:
DELETEFP: Διαγραφή DELETEFP: Διαγραφή
EMAIL: Email EMAIL: Email
EditTree: 'Επεξεργασία Δένδρου' EditTree: 'Επεξεργασία Δένδρου'
ListFiltered: 'Φιλτραρισμένη λίστα.'
MENUTITLE: 'Επεξεργασία Σελίδας' MENUTITLE: 'Επεξεργασία Σελίδας'
NEWPAGE: 'Νέο {pagetype}' NEWPAGE: 'Νέο {pagetype}'
PAGENOTEXISTS: 'Αυτή η σελίδα δεν υπάρχει' PAGENOTEXISTS: 'Αυτή η σελίδα δεν υπάρχει'
PAGES: Σελίδες
PAGETYPEANYOPT: Οποιοδήποτε PAGETYPEANYOPT: Οποιοδήποτε
PAGETYPEOPT: 'Τύπος Σελίδας'
PUBALLFUN: 'Λειτουργία "Δημοσίευση Όλων"' PUBALLFUN: 'Λειτουργία "Δημοσίευση Όλων"'
PUBPAGES: 'Ολοκληρώθηκε: Δημοσίευση {count} σελίδων' PUBPAGES: 'Ολοκληρώθηκε: Δημοσίευση {count} σελίδων'
PageAdded: 'Η σελίδα δημιουργήθηκε με επιτυχία' PageAdded: 'Η σελίδα δημιουργήθηκε με επιτυχία'
@ -86,10 +83,7 @@ el:
TabContent: Περιεχόμενο TabContent: Περιεχόμενο
TabHistory: Ιστορικό TabHistory: Ιστορικό
TabSettings: Ρυθμίσεις TabSettings: Ρυθμίσεις
TreeFiltered: 'Φιλτραρισμένο δένδρο.'
TreeFilteredClear: 'Καθαρισμός φίλτρου'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Εφαρμογή Φίλτρου'
RESET: Επαναφορά RESET: Επαναφορά
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Προσθήκη σελίδας' MENUTITLE: 'Προσθήκη σελίδας'
@ -122,7 +116,6 @@ el:
FILTERDATEFROM: Από FILTERDATEFROM: Από
FILTERDATEHEADING: Ημερομηνία FILTERDATEHEADING: Ημερομηνία
FILTERDATETO: Έως FILTERDATETO: Έως
FILTERLABELTEXT: Περιεχόμενο
CMSSettingsController: CMSSettingsController:
MENUTITLE: Ρυθμίσεις MENUTITLE: Ρυθμίσεις
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -124,12 +124,9 @@ en:
TabSettings: Settings TabSettings: Settings
TreeFiltered: 'Showing search results.' TreeFiltered: 'Showing search results.'
TreeFilteredClear: Clear TreeFilteredClear: Clear
MENUTITLE: 'Edit Page'
ARCHIVE: Archive
ARCHIVEDPAGE: 'Archived page ''%s'''
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Search' APPLY_FILTER: Search
CLEAR_FILTER: 'Clear Filter' CLEAR_FILTER: Clear
RESET: Reset RESET: Reset
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Add page' MENUTITLE: 'Add page'
@ -162,16 +159,17 @@ en:
MENUTITLE: Pages MENUTITLE: Pages
TreeView: 'Tree View' TreeView: 'Tree View'
CMSPagesController_ContentToolbar_ss: CMSPagesController_ContentToolbar_ss:
MULTISELECT: Bulk actions MULTISELECT: 'Batch actions'
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filter FILTER: Filter
CMSSIteTreeFilter_PublishedPages: CMSSIteTreeFilter_PublishedPages:
Title: 'Published pages' Title: 'Published pages'
CMSSearch: CMSSearch:
FILTERDATEFROM: From FILTERDATEFROM: From
FILTERDATEHEADING: 'Date' FILTERDATEHEADING: Date
FILTERDATETO: To FILTERDATETO: To
FILTERLABELTEXT: 'Search' FILTERLABELTEXT: Search
PAGEFILTERDATEHEADING: 'Last edited'
CMSSettingsController: CMSSettingsController:
MENUTITLE: Settings MENUTITLE: Settings
CMSSiteTreeFilter_ChangedPages: CMSSiteTreeFilter_ChangedPages:

View File

@ -92,13 +92,10 @@ eo:
DUPLICATEDWITHCHILDREN: 'Sukcese duobligis je ''{title}'' kaj idoj' DUPLICATEDWITHCHILDREN: 'Sukcese duobligis je ''{title}'' kaj idoj'
EMAIL: Retpoŝto EMAIL: Retpoŝto
EditTree: 'Redakta arbo' EditTree: 'Redakta arbo'
ListFiltered: 'Filtrita listo.'
MENUTITLE: 'Redakti paĝon' MENUTITLE: 'Redakti paĝon'
NEWPAGE: 'Nova {pagetype}' NEWPAGE: 'Nova {pagetype}'
PAGENOTEXISTS: 'Ĉi tiu paĝo ne ekzistas' PAGENOTEXISTS: 'Ĉi tiu paĝo ne ekzistas'
PAGES: Paĝoj
PAGETYPEANYOPT: Ajna PAGETYPEANYOPT: Ajna
PAGETYPEOPT: 'Tipo de paĝo'
PUBALLCONFIRM: 'Bonvolu eldoni ĉiun paĝon en la retejo, kopiante enhavan stadion al la publika' PUBALLCONFIRM: 'Bonvolu eldoni ĉiun paĝon en la retejo, kopiante enhavan stadion al la publika'
PUBALLFUN: 'Funkcio "Eldoni Ĉiujn"' 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." 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 TabContent: Enhavo
TabHistory: Historio TabHistory: Historio
TabSettings: Agordoj TabSettings: Agordoj
TreeFiltered: 'Filtrita arbo.'
TreeFilteredClear: 'Vakigi filtrilon'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Apliki filtrilon'
CLEAR_FILTER: 'Vakigi filtrilon'
RESET: Restartigi RESET: Restartigi
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Enmeti paĝon' MENUTITLE: 'Enmeti paĝon'
@ -155,8 +148,6 @@ eo:
ListView: 'Lista vido' ListView: 'Lista vido'
MENUTITLE: Paĝoj MENUTITLE: Paĝoj
TreeView: 'Arba vido' TreeView: 'Arba vido'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Plurelekto
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtri FILTER: Filtri
CMSSIteTreeFilter_PublishedPages: CMSSIteTreeFilter_PublishedPages:
@ -165,7 +156,6 @@ eo:
FILTERDATEFROM: De FILTERDATEFROM: De
FILTERDATEHEADING: Dato FILTERDATEHEADING: Dato
FILTERDATETO: Al FILTERDATETO: Al
FILTERLABELTEXT: Enhavo
CMSSettingsController: CMSSettingsController:
MENUTITLE: Agordoj MENUTITLE: Agordoj
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -92,13 +92,10 @@ es:
DUPLICATEDWITHCHILDREN: 'Duplicado con hijos' DUPLICATEDWITHCHILDREN: 'Duplicado con hijos'
EMAIL: E-mail EMAIL: E-mail
EditTree: 'Editar árbol' EditTree: 'Editar árbol'
ListFiltered: 'Mostrar lista'
MENUTITLE: 'Editar página' MENUTITLE: 'Editar página'
NEWPAGE: 'Nuevo {pagetype}' NEWPAGE: 'Nuevo {pagetype}'
PAGENOTEXISTS: 'Esta página no existe' PAGENOTEXISTS: 'Esta página no existe'
PAGES: Páginas
PAGETYPEANYOPT: Cualquiera 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' PUBALLCONFIRM: 'Por favor publica todas las páginas del sitio, copiando el contenido del borrador al sitio público'
PUBALLFUN: 'Función "Publicar Todo"' 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." 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 TabContent: Contenido
TabHistory: Historial TabHistory: Historial
TabSettings: Ajustes TabSettings: Ajustes
TreeFiltered: 'Árbol filtrado'
TreeFilteredClear: 'Borrar filtro'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Aplicar filtro'
CLEAR_FILTER: 'Limpiar filtro'
RESET: Restablecer RESET: Restablecer
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Añadir página' MENUTITLE: 'Añadir página'
@ -155,8 +148,6 @@ es:
ListView: 'Vista como lista' ListView: 'Vista como lista'
MENUTITLE: Páginas MENUTITLE: Páginas
TreeView: 'Ver como árbol' TreeView: 'Ver como árbol'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Multi-selección
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtro FILTER: Filtro
CMSSIteTreeFilter_PublishedPages: CMSSIteTreeFilter_PublishedPages:
@ -165,7 +156,6 @@ es:
FILTERDATEFROM: De FILTERDATEFROM: De
FILTERDATEHEADING: Fecha FILTERDATEHEADING: Fecha
FILTERDATETO: Hasta FILTERDATETO: Hasta
FILTERLABELTEXT: Filtrar
CMSSettingsController: CMSSettingsController:
MENUTITLE: Ajustes MENUTITLE: Ajustes
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -82,13 +82,10 @@ et_EE:
DESCREMOVED: 'ja {count} järglast' DESCREMOVED: 'ja {count} järglast'
EMAIL: E-post EMAIL: E-post
EditTree: 'Redigeeri' EditTree: 'Redigeeri'
ListFiltered: 'Filtreeritud loend'
MENUTITLE: 'Redigeeri lehte' MENUTITLE: 'Redigeeri lehte'
NEWPAGE: 'Uus {pagetype}' NEWPAGE: 'Uus {pagetype}'
PAGENOTEXISTS: 'Antud lehekülge ei eksisteeri' PAGENOTEXISTS: 'Antud lehekülge ei eksisteeri'
PAGES: Lehed
PAGETYPEANYOPT: Kõik PAGETYPEANYOPT: Kõik
PAGETYPEOPT: 'Lehe tüüp'
PUBALLCONFIRM: 'Palun avaldage iga leht selles saidis' PUBALLCONFIRM: 'Palun avaldage iga leht selles saidis'
PUBALLFUN: '"Avalda Kõik" funktsionaalsus' 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." 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 TabContent: Sisu
TabHistory: Ajalugu TabHistory: Ajalugu
TabSettings: Seaded TabSettings: Seaded
TreeFiltered: 'Filtreeritud puu.'
TreeFilteredClear: 'Eemalda filtreering'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Aktiveeri filter'
RESET: Lähtesta RESET: Lähtesta
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Lisa leht' MENUTITLE: 'Lisa leht'
@ -136,15 +130,12 @@ et_EE:
ListView: 'Loendivaade' ListView: 'Loendivaade'
MENUTITLE: Lehed MENUTITLE: Lehed
TreeView: 'Puuvaade' TreeView: 'Puuvaade'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Mitmikvalik
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtreeri FILTER: Filtreeri
CMSSearch: CMSSearch:
FILTERDATEFROM: Alates FILTERDATEFROM: Alates
FILTERDATEHEADING: Kuupäev FILTERDATEHEADING: Kuupäev
FILTERDATETO: Kuni FILTERDATETO: Kuni
FILTERLABELTEXT: Sisu
CMSSettingsController: CMSSettingsController:
MENUTITLE: Seaded MENUTITLE: Seaded
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -71,6 +71,8 @@ fa_IR:
PUBLISH_PAGES: انتشار PUBLISH_PAGES: انتشار
RESTORE: بازنشاندن RESTORE: بازنشاندن
RESTORED_PAGES: 'بازنشاندن %d صفحه' RESTORED_PAGES: 'بازنشاندن %d صفحه'
UNPUBLISHED_PAGES: '%d صفحه‌ی منتشر‌نشده'
UNPUBLISH_PAGES: عدم انتشار
CMSFileAddController: CMSFileAddController:
MENUTITLE: فایل‌ها MENUTITLE: فایل‌ها
CMSMain: CMSMain:
@ -88,24 +90,27 @@ fa_IR:
DELETEFP: حذف کردن از منتشر شده های سایت DELETEFP: حذف کردن از منتشر شده های سایت
EMAIL: پست الکترونیک EMAIL: پست الکترونیک
EditTree: 'ویرایش درخت' EditTree: 'ویرایش درخت'
ListFiltered: 'لیست پالایش شده' ListFiltered: 'نمایش نتایج جستجو'
MENUTITLE: 'ویرایش صفحه' MENUTITLE: 'ویرایش صفحه'
NEWPAGE: '{pagetype} جدید' NEWPAGE: '{pagetype} جدید'
PAGENOTEXISTS: 'این صفحه وجود ندارد' PAGENOTEXISTS: 'این صفحه وجود ندارد'
PAGES: صفحات PAGES: 'وضعیت صفحه'
PAGETYPEANYOPT: هر PAGETYPEANYOPT: هر
PAGETYPEOPT: 'نوع صفحه' PAGETYPEOPT: 'نوع صفحه'
PUBALLFUN: 'عملکرد "انتشار همه"' PUBALLFUN: 'عملکرد "انتشار همه"'
PageAdded: 'صفحه با موفقیت ایجاد شد'
RESTORE: 'بازنشانی پیش‌نویس'
ROLLBACK: 'بازگردانی به این نسخه'
SAVE: ذخیره SAVE: ذخیره
SAVEDRAFT: 'ذخیره پیش‌نویس' SAVEDRAFT: 'ذخیره پیش‌نویس'
TabContent: محتوا TabContent: محتوا
TabHistory: تاریخچه TabHistory: تاریخچه
TabSettings: تنظیمات TabSettings: تنظیمات
TreeFiltered: 'لیست درختی پالایش شده' TreeFiltered: 'نمایش نتایج جستجو'
TreeFilteredClear: 'پاک کردن پالایش' TreeFilteredClear: پاک‌کردن
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'اعمال پالایش' APPLY_FILTER: جستجو
CLEAR_FILTER: 'پاک کردن پالایش' CLEAR_FILTER: پاک‌کردن
RESET: تنظیم مجدد RESET: تنظیم مجدد
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'افزودن صفحه' MENUTITLE: 'افزودن صفحه'
@ -122,6 +127,8 @@ fa_IR:
SHOWUNPUBLISHED: 'نمایش نسخه‌های منتشر نشده' SHOWUNPUBLISHED: 'نمایش نسخه‌های منتشر نشده'
SHOWVERSION: 'نمایش ویرایش' SHOWVERSION: 'نمایش ویرایش'
VIEW: نمایش VIEW: نمایش
VIEWINGLATEST: 'در حال حاضر آخرین نسخه را مشاهده می‌کنید.'
VIEWINGVERSION: 'در حال حاضر نسخه {version} را مشاهده می‌کنید.'
CMSPageHistoryController_versions_ss: CMSPageHistoryController_versions_ss:
AUTHOR: ناشر AUTHOR: ناشر
NOTPUBLISHED: 'منتشر نشده' NOTPUBLISHED: 'منتشر نشده'
@ -143,11 +150,18 @@ fa_IR:
FILTERDATEFROM: از FILTERDATEFROM: از
FILTERDATEHEADING: تاریخ FILTERDATEHEADING: تاریخ
FILTERDATETO: تا FILTERDATETO: تا
FILTERLABELTEXT: محتوا FILTERLABELTEXT: جستجو
PAGEFILTERDATEHEADING: 'آخرین ویرایش'
CMSSettingsController: CMSSettingsController:
MENUTITLE: تنظیمات MENUTITLE: تنظیمات
CMSSiteTreeFilter_ChangedPages:
Title: 'صفحات تغییر یافته'
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:
Title: 'تمامی صفحات' Title: 'تمامی صفحات'
CMSSiteTreeFilter_StatusDeletedPages:
Title: 'صفحات بایگانی شده'
CMSSiteTreeFilter_StatusDraftPages:
Title: 'صفحات پیش‌نویس'
ContentController: ContentController:
ARCHIVEDSITE: 'نسخه پیش‌نمایش' ARCHIVEDSITE: 'نسخه پیش‌نمایش'
ARCHIVEDSITEFROM: 'سایت بایگانی شده از' ARCHIVEDSITEFROM: 'سایت بایگانی شده از'
@ -156,6 +170,9 @@ fa_IR:
DRAFTSITE: 'سایت پیش‌نویس' DRAFTSITE: 'سایت پیش‌نویس'
Email: ای‌میل Email: ای‌میل
INSTALL_SUCCESS: 'نصب موفقیت‌آمیز!' INSTALL_SUCCESS: 'نصب موفقیت‌آمیز!'
InstallFilesDeleted: 'فایل‌های نصبی با موفقیت حذف شدند.'
InstallSuccessCongratulations: 'سیلوراسترایپ با موفقیت نصب شد!'
LOGGEDINAS: 'وارد شده تحت عنوان'
LOGIN: ورود LOGIN: ورود
LOGOUT: 'خروج' LOGOUT: 'خروج'
NOTLOGGEDIN: 'وارد نشده' NOTLOGGEDIN: 'وارد نشده'
@ -175,9 +192,11 @@ fa_IR:
410: '410 - از دست رفت' 410: '410 - از دست رفت'
412: '412 - پیش شرط درست نبود' 412: '412 - پیش شرط درست نبود'
429: '429 - درخواست‌های بسیار' 429: '429 - درخواست‌های بسیار'
500: '500 - خطای داخلی سرور'
502: '502 - درگاه نادرست' 502: '502 - درگاه نادرست'
CODE: 'شماره ایراد' CODE: 'شماره ایراد'
DEFAULTERRORPAGETITLE: 'برگ پیدا نشد' DEFAULTERRORPAGETITLE: 'برگ پیدا نشد'
DEFAULTSERVERERRORPAGECONTENT: '<p>با پوزش، در پردازش درخواست شما ایرادی بوجود آمد.</p>'
DEFAULTSERVERERRORPAGETITLE: 'خطای سرور' DEFAULTSERVERERRORPAGETITLE: 'خطای سرور'
PLURALNAME: 'صفحات خطا' PLURALNAME: 'صفحات خطا'
SINGULARNAME: 'صفحه‌ی خطا' SINGULARNAME: 'صفحه‌ی خطا'
@ -198,10 +217,14 @@ fa_IR:
CONTENT_CATEGORY: 'دسترسی محتوا' CONTENT_CATEGORY: 'دسترسی محتوا'
PERMISSIONS_CATEGORY: 'مجوز دسترسی ها و وظایف' PERMISSIONS_CATEGORY: 'مجوز دسترسی ها و وظایف'
RedirectorPage: RedirectorPage:
DESCRIPTION: 'به صفحه‌ی داخلی دیگری هدایت می‌کند'
HEADER: 'این صفحه کاربران را به صفحه‌ای دیگر هدایت می‌کند'
OTHERURL: 'نشانی تارگاه دیگر' OTHERURL: 'نشانی تارگاه دیگر'
PLURALNAME: 'صفحات هدایت‌گر'
REDIRECTTO: 'بازگردانی به' REDIRECTTO: 'بازگردانی به'
REDIRECTTOEXTERNAL: 'یک تارگاه دیگر' REDIRECTTOEXTERNAL: 'یک تارگاه دیگر'
REDIRECTTOPAGE: 'یک برگ روی تارگاه شما' REDIRECTTOPAGE: 'یک برگ روی تارگاه شما'
SINGULARNAME: 'صفحه هدایت‌گر'
YOURPAGE: 'برگ روی تارگاه شما' YOURPAGE: 'برگ روی تارگاه شما'
ReportAdmin: ReportAdmin:
MENUTITLE: گزارشات MENUTITLE: گزارشات
@ -248,19 +271,24 @@ fa_IR:
ACCESSHEADER: 'چه کسی بتواند این صفحه را مشاهده کنید ؟' ACCESSHEADER: 'چه کسی بتواند این صفحه را مشاهده کنید ؟'
ACCESSLOGGEDIN: 'کاربران وارد شده' ACCESSLOGGEDIN: 'کاربران وارد شده'
ACCESSONLYTHESE: 'فقط این افراد (انتخاب از لیست)' ACCESSONLYTHESE: 'فقط این افراد (انتخاب از لیست)'
ADDEDTODRAFTHELP: 'این صفحه تاکنون منتشر نشده است'
ADDEDTODRAFTSHORT: پیش‌نویس ADDEDTODRAFTSHORT: پیش‌نویس
ALLOWCOMMENTS: 'پذیرفتن نظرات در این صفحه ؟' ALLOWCOMMENTS: 'پذیرفتن نظرات در این صفحه ؟'
ARCHIVEDPAGESHORT: بایگانی شده ARCHIVEDPAGESHORT: بایگانی شده
BUTTONARCHIVEDESC: 'عدم انتشار و ارسال به بایگانی'
BUTTONCANCELDRAFT: 'لغو تغییرات پیش‌نویس' BUTTONCANCELDRAFT: 'لغو تغییرات پیش‌نویس'
BUTTONPUBLISHED: منتشر شده BUTTONPUBLISHED: منتشر شده
BUTTONSAVED: ذخیره شده BUTTONSAVED: ذخیره شده
BUTTONSAVEPUBLISH: 'ذخیره و انتشار' BUTTONSAVEPUBLISH: 'ذخیره و انتشار'
BUTTONUNPUBLISH: عدم انتشار BUTTONUNPUBLISH: عدم انتشار
BUTTONUNPUBLISHDESC: 'حذف این صفحه از سایت منتشر شده'
Comments: دیدگاه‌ها Comments: دیدگاه‌ها
Content: درون مایه Content: درون مایه
DEFAULTABOUTTITLE: 'درباره ما' DEFAULTABOUTTITLE: 'درباره ما'
DEFAULTCONTACTTITLE: 'تماس با ما' 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: خانه DEFAULTHOMETITLE: خانه
DELETEDPAGEHELP: 'صفحه دیگر منتشر شده نیست'
DELETEDPAGESHORT: حذف شده DELETEDPAGESHORT: حذف شده
DEPENDENT_NOTE: 'صفحات زیر وابسته به این صفحه هستند. شامل صفحات مجازی، انتقال دهنده و صفحاتی با محتوای لینک' DEPENDENT_NOTE: 'صفحات زیر وابسته به این صفحه هستند. شامل صفحات مجازی، انتقال دهنده و صفحاتی با محتوای لینک'
DependtPageColumnLinkType: 'نوع پیوند' DependtPageColumnLinkType: 'نوع پیوند'
@ -281,6 +309,7 @@ fa_IR:
MENUTITLE: 'برچسب ناوبری' MENUTITLE: 'برچسب ناوبری'
METADESC: 'توضیحات' METADESC: 'توضیحات'
METAEXTRA: 'متا تگ‌های اختصاصی' METAEXTRA: 'متا تگ‌های اختصاصی'
MODIFIEDONDRAFTHELP: 'صفحه دارای تغییرات منتشر نشده است'
MODIFIEDONDRAFTSHORT: تغییر یافته MODIFIEDONDRAFTSHORT: تغییر یافته
MetadataToggle: متاداده MetadataToggle: متاداده
MoreOptions: 'گزینه‌های بیشتر' MoreOptions: 'گزینه‌های بیشتر'
@ -293,6 +322,8 @@ fa_IR:
PARENTTYPE_ROOT: 'صفحه‌ی سطح بالا' PARENTTYPE_ROOT: 'صفحه‌ی سطح بالا'
PLURALNAME: صفحات PLURALNAME: صفحات
REMOVEDFROMDRAFTSHORT: 'حذف شده از پیش‌نویس' REMOVEDFROMDRAFTSHORT: 'حذف شده از پیش‌نویس'
REMOVE_INSTALL_WARNING: 'هشدار: به دلایل امنیتی بایستی فایل install.php را از این سیلوراسترایپ نصب شده حذف نمایید.'
REORGANISE_DESCRIPTION: 'تغییر ساختار سایت'
SHOWINMENUS: 'نمایش در منوها؟' SHOWINMENUS: 'نمایش در منوها؟'
SHOWINSEARCH: 'نمایش در جستجو ؟' SHOWINSEARCH: 'نمایش در جستجو ؟'
SINGULARNAME: صفحه SINGULARNAME: صفحه
@ -308,6 +339,7 @@ fa_IR:
Visibility: پدیداری Visibility: پدیداری
has_one_Parent: 'برگ مادر' has_one_Parent: 'برگ مادر'
many_many_BackLinkTracking: 'ردیابی بک‌لینک' many_many_BackLinkTracking: 'ردیابی بک‌لینک'
many_many_ImageTracking: 'ردیابی تصویر'
many_many_LinkTracking: 'ردیابی پیوند' many_many_LinkTracking: 'ردیابی پیوند'
SiteTreeFileExtension: SiteTreeFileExtension:
EDIT: ویرایش EDIT: ویرایش
@ -319,6 +351,7 @@ fa_IR:
HAVEASKED: 'شما خواسته اید که درون‌مایه تارگاه ما را ببینید در' HAVEASKED: 'شما خواسته اید که درون‌مایه تارگاه ما را ببینید در'
VirtualPage: VirtualPage:
CHOOSE: 'صفحه ارجاعی' CHOOSE: 'صفحه ارجاعی'
DESCRIPTION: 'نمایش محتوای صفحه ی دیگر'
EditLink: ویرایش EditLink: ویرایش
HEADER: 'این یک صفحه مجازی است' HEADER: 'این یک صفحه مجازی است'
PLURALNAME: 'صفحات مجازی' PLURALNAME: 'صفحات مجازی'

View File

@ -61,17 +61,25 @@ fi:
CMSAddPageController: CMSAddPageController:
Title: 'Lisää sivu' Title: 'Lisää sivu'
CMSBatchActions: CMSBatchActions:
ARCHIVE: Arkisto
ARCHIVED_PAGES: 'Arkistoitu %d sivua'
DELETED_DRAFT_PAGES: 'Poistettiin %d sivua luonnostelusivustolta, %d virhettä' DELETED_DRAFT_PAGES: 'Poistettiin %d sivua luonnostelusivustolta, %d virhettä'
DELETED_PAGES: 'Poistettiin %d sivua julkaistulta sivustolta, %d virhettä' DELETED_PAGES: 'Poistettiin %d sivua julkaistulta sivustolta, %d virhettä'
DELETE_DRAFT_PAGES: 'Poista luonnossivustosta' DELETE_DRAFT_PAGES: 'Poista luonnossivustosta'
DELETE_PAGES: 'Poista julkaistulta sivustolta' DELETE_PAGES: 'Poista julkaistulta sivustolta'
PUBLISHED_PAGES: 'Julkaistu %d sivua, %d epäonnistumista' PUBLISHED_PAGES: 'Julkaistu %d sivua, %d epäonnistumista'
PUBLISH_PAGES: Julkaise PUBLISH_PAGES: Julkaise
RESTORE: Palauta
RESTORED_PAGES: 'Palautettu %d sivua'
UNPUBLISHED_PAGES: 'Julkaisemattomat %d sivua'
UNPUBLISH_PAGES: Poista näkyvistä
CMSFileAddController: CMSFileAddController:
MENUTITLE: Tiedostot MENUTITLE: Tiedostot
CMSMain: CMSMain:
ACCESS: 'Pääsy ''{title}'' -osioon' 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.' 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' AddNew: 'Lisää uusi sivu'
AddNewButton: 'Lisää uusi' AddNewButton: 'Lisää uusi'
AddPageRestriction: 'Huomio: Tietyt sivutyypit eivät ole sallittuja valitun sivutyypin alle.' AddPageRestriction: 'Huomio: Tietyt sivutyypit eivät ole sallittuja valitun sivutyypin alle.'
@ -86,13 +94,10 @@ fi:
DUPLICATEDWITHCHILDREN: '''{title}'' ja alasivu monistettiin onnistuneesti' DUPLICATEDWITHCHILDREN: '''{title}'' ja alasivu monistettiin onnistuneesti'
EMAIL: Sähköposti EMAIL: Sähköposti
EditTree: 'Muokkaa rakennepuuta' EditTree: 'Muokkaa rakennepuuta'
ListFiltered: 'Suodatettu lista.'
MENUTITLE: 'Muokkaa sivua' MENUTITLE: 'Muokkaa sivua'
NEWPAGE: 'Uusi {pagetype}' NEWPAGE: 'Uusi {pagetype}'
PAGENOTEXISTS: 'Tätä sivua ei ole olemassa' PAGENOTEXISTS: 'Tätä sivua ei ole olemassa'
PAGES: Sivut
PAGETYPEANYOPT: Mikä tahansa PAGETYPEANYOPT: Mikä tahansa
PAGETYPEOPT: 'Sivutyyppi'
PUBALLCONFIRM: 'Julkaise jokainen sivu tällä sivustolla kopioiden luonnosten sisältö julkiselle sivustolle' PUBALLCONFIRM: 'Julkaise jokainen sivu tällä sivustolla kopioiden luonnosten sisältö julkiselle sivustolle'
PUBALLFUN: 'Julkaise kaikki -toiminto' 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." 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' REMOVED: 'Poista ''{title}''{description} näkyvältä sivustolta'
REMOVEDPAGE: '''{title}'' poistettiin julkaistulta sivustolta' REMOVEDPAGE: '''{title}'' poistettiin julkaistulta sivustolta'
REMOVEDPAGEFROMDRAFT: 'Poistettu ''%s'' luonnossivustolta' REMOVEDPAGEFROMDRAFT: 'Poistettu ''%s'' luonnossivustolta'
RESTORE: 'Palauta luonnos'
RESTORED: '''{title}'' palautettiin onnistuneesti' 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.' ROLLBACK: 'Siirry takaisin tähän versioon.'
ROLLEDBACKPUBv2: 'Palattiin takaisin julkaistuun versioon' ROLLEDBACKPUBv2: 'Palattiin takaisin julkaistuun versioon'
ROLLEDBACKVERSIONv2: 'Palautettu versioon #%d.' ROLLEDBACKVERSIONv2: 'Palautettu versioon #%d.'
@ -110,10 +119,7 @@ fi:
TabContent: Sisältö TabContent: Sisältö
TabHistory: Historia TabHistory: Historia
TabSettings: Asetukset TabSettings: Asetukset
TreeFiltered: 'Suodatettu hakemistopuu.'
TreeFilteredClear: 'Nollaa suodatin'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Suodata'
RESET: Nollaa RESET: Nollaa
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Lisää sivu' MENUTITLE: 'Lisää sivu'
@ -145,19 +151,28 @@ fi:
ListView: 'Listanäkymä' ListView: 'Listanäkymä'
MENUTITLE: Sivut MENUTITLE: Sivut
TreeView: 'Puunäkymä' TreeView: 'Puunäkymä'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Monivalinta
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Suodata FILTER: Suodata
CMSSIteTreeFilter_PublishedPages:
Title: 'Julkaistut sivut'
CMSSearch: CMSSearch:
FILTERDATEFROM: Alkaen FILTERDATEFROM: Alkaen
FILTERDATEHEADING: Pvm FILTERDATEHEADING: Pvm
FILTERDATETO: Päättyen FILTERDATETO: Päättyen
FILTERLABELTEXT: Sisältö
CMSSettingsController: CMSSettingsController:
MENUTITLE: Asetukset MENUTITLE: Asetukset
CMSSiteTreeFilter_ChangedPages:
Title: 'Muokatut sivut'
CMSSiteTreeFilter_DeletedPages:
Title: 'Kaikki sivut, sisältäen arkistoidut'
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:
Title: 'Kaikki sivut' Title: 'Kaikki sivut'
CMSSiteTreeFilter_StatusDeletedPages:
Title: 'Arkistoidut sivut'
CMSSiteTreeFilter_StatusDraftPages:
Title: 'Luonnossivut'
CMSSiteTreeFilter_StatusRemovedFromDraftPages:
Title: 'Näkyvillä, mutta poistettu luonnoksista'
ContentControl: ContentControl:
NOTEWONTBESHOWN: 'Huomaa: tätä viestiä ei näytetä vierailijoille' NOTEWONTBESHOWN: 'Huomaa: tätä viestiä ei näytetä vierailijoille'
ContentController: ContentController:
@ -273,6 +288,7 @@ fi:
SilverStripeNavigator: SilverStripeNavigator:
ARCHIVED: Arkistoitu ARCHIVED: Arkistoitu
SilverStripeNavigatorLink: SilverStripeNavigatorLink:
ShareInstructions: 'Jaa tämä sivu kopioimalla ja liittämällä alapuolella oleva linkki'
ShareLink: 'Jaa linkki' ShareLink: 'Jaa linkki'
SilverStripeNavigatorLinkl: SilverStripeNavigatorLinkl:
CloseLink: Sulje CloseLink: Sulje
@ -301,6 +317,9 @@ fi:
ADDEDTODRAFTSHORT: Luonnos ADDEDTODRAFTSHORT: Luonnos
ALLOWCOMMENTS: 'Sallitaanko kommenttien jättö tälle sivulle?' ALLOWCOMMENTS: 'Sallitaanko kommenttien jättö tälle sivulle?'
APPEARSVIRTUALPAGES: 'Tämä sisältö on käytössä myös virtuaalisivuilla osioissa {title}' 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' BUTTONCANCELDRAFT: 'Peruuta muutokset, jotka teit luonnokseen'
BUTTONCANCELDRAFTDESC: 'Poista luonnoksesi ja palauta julkaistu sivu' BUTTONCANCELDRAFTDESC: 'Poista luonnoksesi ja palauta julkaistu sivu'
BUTTONPUBLISHED: Julkaistu BUTTONPUBLISHED: Julkaistu
@ -314,6 +333,7 @@ fi:
DEFAULTABOUTTITLE: 'Tietoa meistä' 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>' 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' 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 DEFAULTHOMETITLE: Koti
DELETEDPAGEHELP: 'Sivu ei ole enää julkaistuna' DELETEDPAGEHELP: 'Sivu ei ole enää julkaistuna'
DELETEDPAGESHORT: Poistettu DELETEDPAGESHORT: Poistettu
@ -384,6 +404,9 @@ fi:
many_many_BackLinkTracking: 'Käänteinen seuranta' many_many_BackLinkTracking: 'Käänteinen seuranta'
many_many_ImageTracking: 'Kuvan seuranta' many_many_ImageTracking: 'Kuvan seuranta'
many_many_LinkTracking: 'Linkin 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: SiteTreeURLSegmentField:
EMPTY: 'Anna URL-osoite tai napsauta peruuta' EMPTY: 'Anna URL-osoite tai napsauta peruuta'
HelpChars: 'Erikoismerkit muunnetaan tai poistetaan automaattisesti.' HelpChars: 'Erikoismerkit muunnetaan tai poistetaan automaattisesti.'

View File

@ -92,13 +92,10 @@ fr:
DUPLICATEDWITHCHILDREN: '''{title}'' et ses enfants dupliqués avec succès' DUPLICATEDWITHCHILDREN: '''{title}'' et ses enfants dupliqués avec succès'
EMAIL: Email EMAIL: Email
EditTree: 'Editer l''arbre' EditTree: 'Editer l''arbre'
ListFiltered: 'Liste filtrée.'
MENUTITLE: 'Éditer la page' MENUTITLE: 'Éditer la page'
NEWPAGE: 'Nouveau {pagetype}' NEWPAGE: 'Nouveau {pagetype}'
PAGENOTEXISTS: 'Cette page n''existe pas' PAGENOTEXISTS: 'Cette page n''existe pas'
PAGES: Pages
PAGETYPEANYOPT: Tous 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' PUBALLCONFIRM: 'Publier chaque page du site en copiant le contenu à partir du site brouillon s''il vous plaît'
PUBALLFUN: 'Fonctionnalité "Tout Publier"' PUBALLFUN: 'Fonctionnalité "Tout Publier"'
PUBALLFUN2: "Presser ce boutton fera la même chose que d'aller sur chaque page et d'appuer sur \"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 TabContent: Contenu
TabHistory: Historique TabHistory: Historique
TabSettings: Paramètres TabSettings: Paramètres
TreeFiltered: 'Arbre filtré.'
TreeFilteredClear: 'Réinitialiser le filtre.'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Appliquer le filtre'
CLEAR_FILTER: 'Réinitialiser le filtre.'
RESET: Réinitialiser RESET: Réinitialiser
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Ajouter page' MENUTITLE: 'Ajouter page'
@ -152,8 +145,6 @@ fr:
ListView: 'Liste' ListView: 'Liste'
MENUTITLE: Pages MENUTITLE: Pages
TreeView: 'Arbre' TreeView: 'Arbre'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Choix multiple
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtrer FILTER: Filtrer
CMSSIteTreeFilter_PublishedPages: CMSSIteTreeFilter_PublishedPages:
@ -162,7 +153,6 @@ fr:
FILTERDATEFROM: De FILTERDATEFROM: De
FILTERDATEHEADING: Date FILTERDATEHEADING: Date
FILTERDATETO: A FILTERDATETO: A
FILTERLABELTEXT: Terme
CMSSettingsController: CMSSettingsController:
MENUTITLE: Paramètres MENUTITLE: Paramètres
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -65,9 +65,7 @@ gl_ES:
EMAIL: Correo-e EMAIL: Correo-e
MENUTITLE: 'Editar Páxina' MENUTITLE: 'Editar Páxina'
PAGENOTEXISTS: 'Esta páxina non existe' PAGENOTEXISTS: 'Esta páxina non existe'
PAGES: Páxinas
PAGETYPEANYOPT: Ningún 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' PUBALLCONFIRM: 'Por favor publica toda a páxina no sitio, copiando o contido a contorna de produción'
PUBALLFUN: 'Funcionalidade "Publicar Todo"' 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." 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 TabHistory: Historial
TabSettings: Configuracións TabSettings: Configuracións
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Aplicar Filtro'
RESET: Reiniciar RESET: Reiniciar
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Engadir páxina' MENUTITLE: 'Engadir páxina'
@ -106,8 +103,6 @@ gl_ES:
ListView: 'Vista en Listado' ListView: 'Vista en Listado'
MENUTITLE: Páxinas MENUTITLE: Páxinas
TreeView: 'Vista en Árbore' TreeView: 'Vista en Árbore'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Selección múltiple
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtro FILTER: Filtro
CMSSettingsController: CMSSettingsController:

View File

@ -82,13 +82,10 @@ he_IL:
DESCREMOVED: 'ו־{count} צאצאים' DESCREMOVED: 'ו־{count} צאצאים'
EMAIL: דוא״ל EMAIL: דוא״ל
EditTree: 'עריכת העץ' EditTree: 'עריכת העץ'
ListFiltered: 'רשימה מסוננת.'
MENUTITLE: 'עריכת העמוד' MENUTITLE: 'עריכת העמוד'
NEWPAGE: '{pagetype} חדש' NEWPAGE: '{pagetype} חדש'
PAGENOTEXISTS: 'עמוד זה אינו קיים במערכת' PAGENOTEXISTS: 'עמוד זה אינו קיים במערכת'
PAGES: עמודים
PAGETYPEANYOPT: כלשהם PAGETYPEANYOPT: כלשהם
PAGETYPEOPT: 'סוג העמוד'
PUBALLCONFIRM: 'פרסום העמודים באתר, תוך העתקת כל הטיוטות לגרסה הסופית' PUBALLCONFIRM: 'פרסום העמודים באתר, תוך העתקת כל הטיוטות לגרסה הסופית'
PUBALLFUN: 'פרסום הכול' PUBALLFUN: 'פרסום הכול'
PUBALLFUN2: "לחיצה על כפתור זה מקבילה לאישור פרסום על כל העמודים באתר. הכפתור נועד לאישורים גורפים שבאו בעקבות עריכה נרחבת באתר דוגמת ההגדרות הראשוניות בעת יצירת אתר זה" PUBALLFUN2: "לחיצה על כפתור זה מקבילה לאישור פרסום על כל העמודים באתר. הכפתור נועד לאישורים גורפים שבאו בעקבות עריכה נרחבת באתר דוגמת ההגדרות הראשוניות בעת יצירת אתר זה"
@ -102,10 +99,7 @@ he_IL:
TabContent: תוכן TabContent: תוכן
TabHistory: היסטורייה TabHistory: היסטורייה
TabSettings: הגדרות TabSettings: הגדרות
TreeFiltered: 'עץ מסונן.'
TreeFilteredClear: 'ביטול הסינון'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'החלת המסנן'
RESET: איפוס RESET: איפוס
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'הוספת עמוד' MENUTITLE: 'הוספת עמוד'
@ -136,15 +130,12 @@ he_IL:
ListView: 'תצוגת רשימה' ListView: 'תצוגת רשימה'
MENUTITLE: עמודים MENUTITLE: עמודים
TreeView: 'תצוגת עץ' TreeView: 'תצוגת עץ'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: בחירה מרובה
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: מסנן FILTER: מסנן
CMSSearch: CMSSearch:
FILTERDATEFROM: מ־ FILTERDATEFROM: מ־
FILTERDATEHEADING: תאריך FILTERDATEHEADING: תאריך
FILTERDATETO: עד FILTERDATETO: עד
FILTERLABELTEXT: תוכן
CMSSettingsController: CMSSettingsController:
MENUTITLE: הגדרות MENUTITLE: הגדרות
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -77,13 +77,10 @@ hu:
DUPLICATEDWITHCHILDREN: '''{title}'' és oldalai sikeresen duplikálva' DUPLICATEDWITHCHILDREN: '''{title}'' és oldalai sikeresen duplikálva'
EMAIL: E-mail EMAIL: E-mail
EditTree: 'Menüszerkeszet módosítása' EditTree: 'Menüszerkeszet módosítása'
ListFiltered: 'Szűrt lista'
MENUTITLE: 'Oldal szerkesztése' MENUTITLE: 'Oldal szerkesztése'
NEWPAGE: 'Új {pagetype}' NEWPAGE: 'Új {pagetype}'
PAGENOTEXISTS: 'Ez az oldal nem létezik.' PAGENOTEXISTS: 'Ez az oldal nem létezik.'
PAGES: Oldalak
PAGETYPEANYOPT: Egyéb PAGETYPEANYOPT: Egyéb
PAGETYPEOPT: 'Oldal típusa'
PUBALLCONFIRM: 'Minden oldal publikálása, fázistartalmak kitevése' PUBALLCONFIRM: 'Minden oldal publikálása, fázistartalmak kitevése'
PUBALLFUN: '"Összes publikálása" funkció' 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." 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 TabContent: Tartalom
TabHistory: Történet TabHistory: Történet
TabSettings: Beállítások TabSettings: Beállítások
TreeFilteredClear: 'Szűrő törlése'
CMSMain_left_ss:
APPLY_FILTER: 'Szűrő alkalmazása'
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Oldal hozzáadása' MENUTITLE: 'Oldal hozzáadása'
ParentMode_child: 'Másik oldal alatt' ParentMode_child: 'Másik oldal alatt'
@ -140,7 +134,6 @@ hu:
FILTERDATEFROM: -tól FILTERDATEFROM: -tól
FILTERDATEHEADING: Dátum FILTERDATEHEADING: Dátum
FILTERDATETO: -ig FILTERDATETO: -ig
FILTERLABELTEXT: Tartalom
CMSSettingsController: CMSSettingsController:
MENUTITLE: Beállítások MENUTITLE: Beállítások
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -90,13 +90,10 @@ id:
DUPLICATEDWITHCHILDREN: '''{title}'' dan turunannya berhasil diduplikasi' DUPLICATEDWITHCHILDREN: '''{title}'' dan turunannya berhasil diduplikasi'
EMAIL: Surel EMAIL: Surel
EditTree: 'Edit Struktur' EditTree: 'Edit Struktur'
ListFiltered: 'Daftar tersaring'
MENUTITLE: 'Edit Laman' MENUTITLE: 'Edit Laman'
NEWPAGE: '{pagetype} baru' NEWPAGE: '{pagetype} baru'
PAGENOTEXISTS: 'Laman ini tidak ada' PAGENOTEXISTS: 'Laman ini tidak ada'
PAGES: Laman
PAGETYPEANYOPT: Lain PAGETYPEANYOPT: Lain
PAGETYPEOPT: 'Jenis Laman'
PUBALLCONFIRM: 'Mohon terbitkan semua laman pada situs' PUBALLCONFIRM: 'Mohon terbitkan semua laman pada situs'
PUBALLFUN: 'Fungsi "Terbitkan Semua"' 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." 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 TabContent: Konten
TabHistory: Sejarah TabHistory: Sejarah
TabSettings: Pengaturan TabSettings: Pengaturan
TreeFiltered: 'Struktur tersaring.'
TreeFilteredClear: 'Bersihkan saring'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Terapkan Saring'
RESET: Reset RESET: Reset
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Tambah laman' MENUTITLE: 'Tambah laman'
@ -152,15 +146,12 @@ id:
ListView: 'Tampilan daftar' ListView: 'Tampilan daftar'
MENUTITLE: Laman MENUTITLE: Laman
TreeView: 'Tampilan Struktur' TreeView: 'Tampilan Struktur'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Multi-pilihan
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Saring FILTER: Saring
CMSSearch: CMSSearch:
FILTERDATEFROM: Dari FILTERDATEFROM: Dari
FILTERDATEHEADING: Tanggal FILTERDATEHEADING: Tanggal
FILTERDATETO: Ke FILTERDATETO: Ke
FILTERLABELTEXT: Konten
CMSSettingsController: CMSSettingsController:
MENUTITLE: Pengaturan MENUTITLE: Pengaturan
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -92,13 +92,10 @@ it:
DUPLICATEDWITHCHILDREN: '''{title}'' e figlie duplicate con successo' DUPLICATEDWITHCHILDREN: '''{title}'' e figlie duplicate con successo'
EMAIL: Email EMAIL: Email
EditTree: 'Modifica albero' EditTree: 'Modifica albero'
ListFiltered: 'Lista filtrata.'
MENUTITLE: 'Modifica pagina' MENUTITLE: 'Modifica pagina'
NEWPAGE: 'Nuova {pagetype}' NEWPAGE: 'Nuova {pagetype}'
PAGENOTEXISTS: 'Questa pagina non esiste' PAGENOTEXISTS: 'Questa pagina non esiste'
PAGES: Pagine
PAGETYPEANYOPT: Qualsiasi PAGETYPEANYOPT: Qualsiasi
PAGETYPEOPT: 'Tipo di pagina'
PUBALLCONFIRM: 'Per favore pubblica ogni singola pagina nel sito, copiando i contenuti da ''bozza'' a ''pubblicato''.' PUBALLCONFIRM: 'Per favore pubblica ogni singola pagina nel sito, copiando i contenuti da ''bozza'' a ''pubblicato''.'
PUBALLFUN: 'Funzione "Pubblica tutto"' 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." 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 TabContent: Contenuto
TabHistory: Archivio TabHistory: Archivio
TabSettings: Impostazioni TabSettings: Impostazioni
TreeFiltered: 'Albero filtrato.'
TreeFilteredClear: 'Azzera filtro'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Applica filtro'
CLEAR_FILTER: 'Azzera filtro'
RESET: Azzera RESET: Azzera
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Aggiungi pagina' MENUTITLE: 'Aggiungi pagina'
@ -155,8 +148,6 @@ it:
ListView: 'Visualizzazione a lista' ListView: 'Visualizzazione a lista'
MENUTITLE: Pagine MENUTITLE: Pagine
TreeView: 'Visualizzazione a albero' TreeView: 'Visualizzazione a albero'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Selezione multipla
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtra FILTER: Filtra
CMSSIteTreeFilter_PublishedPages: CMSSIteTreeFilter_PublishedPages:
@ -165,7 +156,6 @@ it:
FILTERDATEFROM: Da FILTERDATEFROM: Da
FILTERDATEHEADING: Data FILTERDATEHEADING: Data
FILTERDATETO: A FILTERDATETO: A
FILTERLABELTEXT: Contenuto
CMSSettingsController: CMSSettingsController:
MENUTITLE: Impostazioni MENUTITLE: Impostazioni
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -85,13 +85,10 @@ ja:
DUPLICATEDWITHCHILDREN: '''{title}'' と子の複製が完了しました' DUPLICATEDWITHCHILDREN: '''{title}'' と子の複製が完了しました'
EMAIL: Eメール EMAIL: Eメール
EditTree: 'ツリーを編集' EditTree: 'ツリーを編集'
ListFiltered: 'フィルタリングされたリスト'
MENUTITLE: 'ページを編集' MENUTITLE: 'ページを編集'
NEWPAGE: '新しい {pagetype}' NEWPAGE: '新しい {pagetype}'
PAGENOTEXISTS: 'このページは存在しません' PAGENOTEXISTS: 'このページは存在しません'
PAGES: ページ
PAGETYPEANYOPT: 何でも PAGETYPEANYOPT: 何でも
PAGETYPEOPT: 'ページの種類'
PUBALLCONFIRM: 'コンテンツのステージをコピーして配信するために、サイト内のすべてのページを公開してください' PUBALLCONFIRM: 'コンテンツのステージをコピーして配信するために、サイト内のすべてのページを公開してください'
PUBALLFUN: '"すべてを公開" 機能' PUBALLFUN: '"すべてを公開" 機能'
PUBALLFUN2: "このボタンを押すことはすべてのページへ移動して\"公開\"を押すことと同じです。この機能は、サイトをはじめて作成した時など多くのコンテンツの編集がある場合に利用されることを想定されています。" PUBALLFUN2: "このボタンを押すことはすべてのページへ移動して\"公開\"を押すことと同じです。この機能は、サイトをはじめて作成した時など多くのコンテンツの編集がある場合に利用されることを想定されています。"
@ -109,10 +106,7 @@ ja:
TabContent: コンテンツ TabContent: コンテンツ
TabHistory: 履歴 TabHistory: 履歴
TabSettings: 設定 TabSettings: 設定
TreeFiltered: 'フィルタリングされたツリー'
TreeFilteredClear: 'フィルタを解除'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'フィルタを適用'
RESET: リセット RESET: リセット
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'ページを追加' MENUTITLE: 'ページを追加'
@ -144,15 +138,12 @@ ja:
ListView: '一覧表示' ListView: '一覧表示'
MENUTITLE: ページ MENUTITLE: ページ
TreeView: 'ツリー表示' TreeView: 'ツリー表示'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: 複数選択
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: フィルタ FILTER: フィルタ
CMSSearch: CMSSearch:
FILTERDATEFROM: 開始日 FILTERDATEFROM: 開始日
FILTERDATEHEADING: 日付 FILTERDATEHEADING: 日付
FILTERDATETO: 終了日 FILTERDATETO: 終了日
FILTERLABELTEXT: コンテンツ
CMSSettingsController: CMSSettingsController:
MENUTITLE: 設定 MENUTITLE: 設定
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -86,13 +86,10 @@ ko:
DUPLICATEDWITHCHILDREN: '''{title}'' 와 그 하위에대한 복제가 완료되었습니다' DUPLICATEDWITHCHILDREN: '''{title}'' 와 그 하위에대한 복제가 완료되었습니다'
EMAIL: 이메일 EMAIL: 이메일
EditTree: '트리를 편집' EditTree: '트리를 편집'
ListFiltered: '필터링된 목록'
MENUTITLE: '페이지 편집' MENUTITLE: '페이지 편집'
NEWPAGE: '새로운 {pagetype}' NEWPAGE: '새로운 {pagetype}'
PAGENOTEXISTS: '이 페이지는 존재하지 않습니다' PAGENOTEXISTS: '이 페이지는 존재하지 않습니다'
PAGES: 페이지
PAGETYPEANYOPT: 아무거나 PAGETYPEANYOPT: 아무거나
PAGETYPEOPT: '페이지 유형'
PUBALLCONFIRM: '콘텐츠의 스테이지를 복사하고 전달하기 위해 사이트의 모든 페이지를 공개합니다' PUBALLCONFIRM: '콘텐츠의 스테이지를 복사하고 전달하기 위해 사이트의 모든 페이지를 공개합니다'
PUBALLFUN: ' "모두 공개"기능' PUBALLFUN: ' "모두 공개"기능'
PUBALLFUN2: "이 버튼을 누르면 모든 페이지로 이동하고 \"공개\"를 눌러도 됩니다. 이 기능은 사이트를 처음 만들 때 등 많은 컨텐츠를 편집하는 경우에 이용될 것같습니다." PUBALLFUN2: "이 버튼을 누르면 모든 페이지로 이동하고 \"공개\"를 눌러도 됩니다. 이 기능은 사이트를 처음 만들 때 등 많은 컨텐츠를 편집하는 경우에 이용될 것같습니다."
@ -110,10 +107,7 @@ ko:
TabContent: 컨텐츠 TabContent: 컨텐츠
TabHistory: 기록 TabHistory: 기록
TabSettings: 설정 TabSettings: 설정
TreeFiltered: '필터링된 트리'
TreeFilteredClear: '필터 제거'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: '필터링'
RESET: 리셋 RESET: 리셋
CMSPageAddController: CMSPageAddController:
MENUTITLE: '페이지 추가' MENUTITLE: '페이지 추가'
@ -145,15 +139,12 @@ ko:
ListView: '목록보기' ListView: '목록보기'
MENUTITLE: 페이지 MENUTITLE: 페이지
TreeView: '트리보기' TreeView: '트리보기'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: 복수선택
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: 필터 FILTER: 필터
CMSSearch: CMSSearch:
FILTERDATEFROM: 시작일 FILTERDATEFROM: 시작일
FILTERDATEHEADING: 날짜 FILTERDATEHEADING: 날짜
FILTERDATETO: 종료일 FILTERDATETO: 종료일
FILTERLABELTEXT: 컨텐츠
CMSSettingsController: CMSSettingsController:
MENUTITLE: 설정 MENUTITLE: 설정
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -94,11 +94,11 @@ lt:
DUPLICATEDWITHCHILDREN: 'Puslapis ''{title}'' , bei jo vaikai kopijuoti sėkmingai' DUPLICATEDWITHCHILDREN: 'Puslapis ''{title}'' , bei jo vaikai kopijuoti sėkmingai'
EMAIL: E. paštas EMAIL: E. paštas
EditTree: 'Redaguoti medį' EditTree: 'Redaguoti medį'
ListFiltered: 'Filtruotas sąrašas.' ListFiltered: 'Rodomi paieškos rezultatai'
MENUTITLE: 'Redaguoti puslapį' MENUTITLE: 'Redaguoti puslapį'
NEWPAGE: 'Naujas {pagetype}' NEWPAGE: 'Naujas {pagetype}'
PAGENOTEXISTS: 'Šis puslapis neegzistuoja' PAGENOTEXISTS: 'Šis puslapis neegzistuoja'
PAGES: Puslapiai PAGES: 'Puslapio būsena'
PAGETYPEANYOPT: Bet koks PAGETYPEANYOPT: Bet koks
PAGETYPEOPT: 'Puslapio tipas' PAGETYPEOPT: 'Puslapio tipas'
PUBALLCONFIRM: 'Prašome publikuoti kiekvieną svetainės puslapį, kopijuojant turinį į svetainę' 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}' REMOVED: 'Iš publikuojamos svetainės ištrintas ''{title}''{description}'
REMOVEDPAGE: 'Iš publikuojamos svetainės pašalintas ''{title}''' REMOVEDPAGE: 'Iš publikuojamos svetainės pašalintas ''{title}'''
REMOVEDPAGEFROMDRAFT: '''%s'' pašalintas iš juodraštinės svetainės' REMOVEDPAGEFROMDRAFT: '''%s'' pašalintas iš juodraštinės svetainės'
RESTORE: Atstatyti RESTORE: 'Atstatyti'
RESTORED: '''{title}'' atstatytas sėkmingai' RESTORED: '''{title}'' atstatytas sėkmingai'
RESTORE_DESC: 'Atstatyti suarchyvuotą versiją kaip juodraštinį puslapį' RESTORE_DESC: 'Atstatyti suarchyvuotą versiją kaip juodraštinį puslapį'
RESTORE_TO_ROOT: 'Atstatyti juodraštį aukščiausiame lygyje' RESTORE_TO_ROOT: 'Atstatyti juodraštį aukščiausiame lygyje'
@ -122,11 +122,11 @@ lt:
TabContent: Turinys TabContent: Turinys
TabHistory: Istorija TabHistory: Istorija
TabSettings: Nustatymai TabSettings: Nustatymai
TreeFiltered: 'Filtruotas medis.' TreeFiltered: 'Rodomi paieškos rezultatai'
TreeFilteredClear: 'Išvalyti filtrą' TreeFilteredClear: Išvalyti filtrą
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Vykdyti' APPLY_FILTER: Ieškoti
CLEAR_FILTER: 'Išvalyti filtrą' CLEAR_FILTER: Išvalyti filtrą
RESET: Atstatyti RESET: Atstatyti
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Pridėti puslapį' MENUTITLE: 'Pridėti puslapį'
@ -159,7 +159,7 @@ lt:
MENUTITLE: Puslapiai MENUTITLE: Puslapiai
TreeView: 'Medžio rodinys' TreeView: 'Medžio rodinys'
CMSPagesController_ContentToolbar_ss: CMSPagesController_ContentToolbar_ss:
MULTISELECT: Daugybinis pasirinkimas MULTISELECT: 'Daugybinis pasirinkimas'
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtras FILTER: Filtras
CMSSIteTreeFilter_PublishedPages: CMSSIteTreeFilter_PublishedPages:
@ -168,19 +168,20 @@ lt:
FILTERDATEFROM: Nuo FILTERDATEFROM: Nuo
FILTERDATEHEADING: Data FILTERDATEHEADING: Data
FILTERDATETO: Iki FILTERDATETO: Iki
FILTERLABELTEXT: Turinys FILTERLABELTEXT: Ieškoti
PAGEFILTERDATEHEADING: 'Redaguota'
CMSSettingsController: CMSSettingsController:
MENUTITLE: Nustatymai MENUTITLE: Nustatymai
CMSSiteTreeFilter_ChangedPages: CMSSiteTreeFilter_ChangedPages:
Title: 'Ištrinti puslapiai' Title: 'Pakeisti puslapiai'
CMSSiteTreeFilter_DeletedPages: CMSSiteTreeFilter_DeletedPages:
Title: 'Visi puslapiai, kartu su suarchyvuotais' Title: 'Visi puslapiai, taip pat ir archyvuoti'
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:
Title: 'Visi puslapiai' Title: 'Visi puslapiai'
CMSSiteTreeFilter_StatusDeletedPages: CMSSiteTreeFilter_StatusDeletedPages:
Title: 'Ištrinti puslapiai' Title: 'Archyvuoti puslapiai'
CMSSiteTreeFilter_StatusDraftPages: CMSSiteTreeFilter_StatusDraftPages:
Title: 'Juodraštiniai nepublikuoti puslapiai' Title: 'Juodraštiniai puslapiai'
CMSSiteTreeFilter_StatusRemovedFromDraftPages: CMSSiteTreeFilter_StatusRemovedFromDraftPages:
Title: 'Publikuotas, bet pašalintas iš juodraščių' Title: 'Publikuotas, bet pašalintas iš juodraščių'
ContentControl: ContentControl:
@ -298,7 +299,7 @@ lt:
SilverStripeNavigator: SilverStripeNavigator:
ARCHIVED: Archyvuota ARCHIVED: Archyvuota
SilverStripeNavigatorLink: 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' ShareLink: 'Dalintis nuoroda'
SilverStripeNavigatorLinkl: SilverStripeNavigatorLinkl:
CloseLink: Uždaryti CloseLink: Uždaryti

View File

@ -85,13 +85,10 @@ mi:
DUPLICATEDWITHCHILDREN: 'I momoho te tārite i ''{title}'' me ngā tamariki' DUPLICATEDWITHCHILDREN: 'I momoho te tārite i ''{title}'' me ngā tamariki'
EMAIL: Īmēra EMAIL: Īmēra
EditTree: 'Whakatika Rākau' EditTree: 'Whakatika Rākau'
ListFiltered: 'Rārangi kua tātaritia'
MENUTITLE: 'Whakatika Whārangi' MENUTITLE: 'Whakatika Whārangi'
NEWPAGE: '{pagetype} hou' NEWPAGE: '{pagetype} hou'
PAGENOTEXISTS: 'KIāore tēnei whārangi e tīari' PAGENOTEXISTS: 'KIāore tēnei whārangi e tīari'
PAGES: Ngā Whārangi
PAGETYPEANYOPT: Ko tētahi 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.' 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"' 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. " 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 TabContent: Ngā Ihirangi
TabHistory: Hītori TabHistory: Hītori
TabSettings: Ngā Tautuhinga TabSettings: Ngā Tautuhinga
TreeFiltered: 'Rākau kua tātaritia'
TreeFilteredClear: 'Ūkui tātari'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Hoatu Tātari'
RESET: Tautuhi Anō RESET: Tautuhi Anō
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Tāpiri whārangi' MENUTITLE: 'Tāpiri whārangi'
@ -144,15 +138,12 @@ mi:
ListView: 'Tirohanga Rārangi' ListView: 'Tirohanga Rārangi'
MENUTITLE: Ngā Whārangi MENUTITLE: Ngā Whārangi
TreeView: 'Tirohanga Rākau' TreeView: 'Tirohanga Rākau'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Tīpakonga-maha
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Tātari FILTER: Tātari
CMSSearch: CMSSearch:
FILTERDATEFROM: Mai i FILTERDATEFROM: Mai i
FILTERDATEHEADING: FILTERDATEHEADING:
FILTERDATETO: Ki FILTERDATETO: Ki
FILTERLABELTEXT: Ngā Ihirangi
CMSSettingsController: CMSSettingsController:
MENUTITLE: Ngā Tautuhinga MENUTITLE: Ngā Tautuhinga
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -92,13 +92,10 @@ nb:
DUPLICATEDWITHCHILDREN: 'Vellykket duplisering av "{title}" og undersider.' DUPLICATEDWITHCHILDREN: 'Vellykket duplisering av "{title}" og undersider.'
EMAIL: Epost EMAIL: Epost
EditTree: 'Rediger treet' EditTree: 'Rediger treet'
ListFiltered: 'Filtrerte liste.'
MENUTITLE: 'Rediger side' MENUTITLE: 'Rediger side'
NEWPAGE: 'Ny {pagetype}' NEWPAGE: 'Ny {pagetype}'
PAGENOTEXISTS: 'Siden eksisterer ikke' PAGENOTEXISTS: 'Siden eksisterer ikke'
PAGES: Sider
PAGETYPEANYOPT: Hvilken som helst PAGETYPEANYOPT: Hvilken som helst
PAGETYPEOPT: 'Sidetype'
PUBALLCONFIRM: 'Vennligst publiser hver eneste side på nettstedet, og kopier innhold til aktivt nettsted' PUBALLCONFIRM: 'Vennligst publiser hver eneste side på nettstedet, og kopier innhold til aktivt nettsted'
PUBALLFUN: 'Funksjonalitet for "Publiser alle"' 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." 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 TabContent: Innhold
TabHistory: Historikk TabHistory: Historikk
TabSettings: Innstillinger TabSettings: Innstillinger
TreeFiltered: 'Filtrerte treet.'
TreeFilteredClear: 'Fjern filtrering'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Aktiver filter'
CLEAR_FILTER: 'Fjern filter'
RESET: Tilbakestill RESET: Tilbakestill
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Legg til side' MENUTITLE: 'Legg til side'
@ -155,8 +148,6 @@ nb:
ListView: 'Listevisning' ListView: 'Listevisning'
MENUTITLE: Sider MENUTITLE: Sider
TreeView: 'Trevisning' TreeView: 'Trevisning'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Flervalg
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filter FILTER: Filter
CMSSIteTreeFilter_PublishedPages: CMSSIteTreeFilter_PublishedPages:
@ -165,7 +156,6 @@ nb:
FILTERDATEFROM: Fra FILTERDATEFROM: Fra
FILTERDATEHEADING: Dato FILTERDATEHEADING: Dato
FILTERDATETO: Til FILTERDATETO: Til
FILTERLABELTEXT: Innhold
CMSSettingsController: CMSSettingsController:
MENUTITLE: Innstillinger MENUTITLE: Innstillinger
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -61,6 +61,7 @@ nl:
CMSAddPageController: CMSAddPageController:
Title: 'Pagina toevoegen' Title: 'Pagina toevoegen'
CMSBatchActions: CMSBatchActions:
ARCHIVE: Archief
DELETED_DRAFT_PAGES: '%d pagina''s van de concept-site verwijderd, %d mislukt' 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' DELETED_PAGES: '%d pagina''s van de gepubliceerde site verwijderd, %d mislukt'
DELETE_DRAFT_PAGES: 'Verwijder van concept site' DELETE_DRAFT_PAGES: 'Verwijder van concept site'
@ -72,6 +73,7 @@ nl:
CMSMain: CMSMain:
ACCESS: 'Toegang tot het ''{title}'' gedeelte' 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".' 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' AddNew: 'Voeg nieuwe pagina toe'
AddNewButton: 'Nieuw' AddNewButton: 'Nieuw'
AddPageRestriction: 'Opmerking: Sommige paginatypes zijn niet toegestaan voor deze selectie' AddPageRestriction: 'Opmerking: Sommige paginatypes zijn niet toegestaan voor deze selectie'
@ -86,13 +88,10 @@ nl:
DUPLICATEDWITHCHILDREN: '''{title}'' en onderliggende items met succes gedupliceerd' DUPLICATEDWITHCHILDREN: '''{title}'' en onderliggende items met succes gedupliceerd'
EMAIL: E-mail EMAIL: E-mail
EditTree: 'Paginastructuur aanpassen' EditTree: 'Paginastructuur aanpassen'
ListFiltered: 'Gefilterde lijst.'
MENUTITLE: 'Wijzig pagina' MENUTITLE: 'Wijzig pagina'
NEWPAGE: 'Nieuwe {pagetype}' NEWPAGE: 'Nieuwe {pagetype}'
PAGENOTEXISTS: 'Deze pagina bestaat niet' PAGENOTEXISTS: 'Deze pagina bestaat niet'
PAGES: Pagina 's
PAGETYPEANYOPT: Elke PAGETYPEANYOPT: Elke
PAGETYPEOPT: 'Paginatype'
PUBALLCONFIRM: 'Publiceer elke pagina van de site: dit kopieert de inhoud van de concept site naar de live site' PUBALLCONFIRM: 'Publiceer elke pagina van de site: dit kopieert de inhoud van de concept site naar de live site'
PUBALLFUN: '"Publiceer alles" functionaliteit' 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." 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 TabContent: Inhoud
TabHistory: Geschiedenis TabHistory: Geschiedenis
TabSettings: Instellingen TabSettings: Instellingen
TreeFiltered: 'Gefilterde boomstructuur.'
TreeFilteredClear: 'Filter leegmaken'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Filter toepassen'
RESET: Reset RESET: Reset
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Pagina toevoegen' MENUTITLE: 'Pagina toevoegen'
@ -145,15 +141,12 @@ nl:
ListView: 'Lijstweergave' ListView: 'Lijstweergave'
MENUTITLE: Pagina's MENUTITLE: Pagina's
TreeView: 'Hierarchische weergave' TreeView: 'Hierarchische weergave'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Meervoudige selectie
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filteren FILTER: Filteren
CMSSearch: CMSSearch:
FILTERDATEFROM: Van FILTERDATEFROM: Van
FILTERDATEHEADING: Datum FILTERDATEHEADING: Datum
FILTERDATETO: Tot FILTERDATETO: Tot
FILTERLABELTEXT: Inhoud
CMSSettingsController: CMSSettingsController:
MENUTITLE: Instellingen MENUTITLE: Instellingen
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -86,13 +86,10 @@ pl:
DUPLICATEDWITHCHILDREN: 'Duplikowanie ''{title}'' oraz podstron zakończone powodzeniem' DUPLICATEDWITHCHILDREN: 'Duplikowanie ''{title}'' oraz podstron zakończone powodzeniem'
EMAIL: Email EMAIL: Email
EditTree: 'Edytuj drzewko' EditTree: 'Edytuj drzewko'
ListFiltered: 'Filtrowana lista.'
MENUTITLE: 'Edytuj stronę' MENUTITLE: 'Edytuj stronę'
NEWPAGE: 'Nowa {pagetype}' NEWPAGE: 'Nowa {pagetype}'
PAGENOTEXISTS: 'Ta strona nie istnieje' PAGENOTEXISTS: 'Ta strona nie istnieje'
PAGES: Strony
PAGETYPEANYOPT: Jakikolwiek PAGETYPEANYOPT: Jakikolwiek
PAGETYPEOPT: 'Rodzaj strony'
PUBALLCONFIRM: 'Opublikuj każdą stronę w witrynie' PUBALLCONFIRM: 'Opublikuj każdą stronę w witrynie'
PUBALLFUN: '"Opublikuj wszystko"' 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." 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ść TabContent: Zawartość
TabHistory: Historia TabHistory: Historia
TabSettings: Opcje TabSettings: Opcje
TreeFiltered: 'Filtruj drzewko'
TreeFilteredClear: 'Wyczyść filtr'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Zastosuj filtr'
RESET: Resetuj RESET: Resetuj
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Dodaj stronę' MENUTITLE: 'Dodaj stronę'
@ -145,15 +139,12 @@ pl:
ListView: 'Widok listy' ListView: 'Widok listy'
MENUTITLE: Strony MENUTITLE: Strony
TreeView: 'Widok drzewa' TreeView: 'Widok drzewa'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Multi wybór
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtr FILTER: Filtr
CMSSearch: CMSSearch:
FILTERDATEFROM: Od FILTERDATEFROM: Od
FILTERDATEHEADING: Data FILTERDATEHEADING: Data
FILTERDATETO: Do FILTERDATETO: Do
FILTERLABELTEXT: Zawartość
CMSSettingsController: CMSSettingsController:
MENUTITLE: Ustawienia MENUTITLE: Ustawienia
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -81,13 +81,10 @@ pt:
DUPLICATED: 'Página ''{title}'' duplicada com sucesso' DUPLICATED: 'Página ''{title}'' duplicada com sucesso'
DUPLICATEDWITHCHILDREN: 'Página ''{title}'' e filhos duplicados com sucesso' DUPLICATEDWITHCHILDREN: 'Página ''{title}'' e filhos duplicados com sucesso'
EditTree: 'Editar árvore' EditTree: 'Editar árvore'
ListFiltered: 'Lista filtrada.'
MENUTITLE: 'Editar página' MENUTITLE: 'Editar página'
NEWPAGE: 'Nova {pagetype}' NEWPAGE: 'Nova {pagetype}'
PAGENOTEXISTS: 'Esta página não existe' PAGENOTEXISTS: 'Esta página não existe'
PAGES: Páginas
PAGETYPEANYOPT: Qualquer 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' PUBALLCONFIRM: 'Por favor, publique cada uma das páginas do site, copiando o conteúdo para a versão publicada'
PUBALLFUN: 'funcionalidade "Publicar tudo"' 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." 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 TabContent: Conteúdo
TabHistory: Histórico TabHistory: Histórico
TabSettings: Configurações TabSettings: Configurações
TreeFiltered: 'Filtrar árvore'
TreeFilteredClear: 'Remover filtro'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Aplicar filtro'
RESET: Redefinir RESET: Redefinir
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Adicionar página' MENUTITLE: 'Adicionar página'
@ -139,15 +133,12 @@ pt:
ListView: 'Vista em lista' ListView: 'Vista em lista'
MENUTITLE: Páginas MENUTITLE: Páginas
TreeView: 'Vista em árvore' TreeView: 'Vista em árvore'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Multi-selecção
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtrar FILTER: Filtrar
CMSSearch: CMSSearch:
FILTERDATEFROM: De FILTERDATEFROM: De
FILTERDATEHEADING: Data FILTERDATEHEADING: Data
FILTERDATETO: Para FILTERDATETO: Para
FILTERLABELTEXT: Conteúdo
CMSSettingsController: CMSSettingsController:
MENUTITLE: Configurações MENUTITLE: Configurações
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -85,13 +85,10 @@ ro:
DUPLICATEDWITHCHILDREN: '''{title}'' și descendenții săi duplicați cu succes' DUPLICATEDWITHCHILDREN: '''{title}'' și descendenții săi duplicați cu succes'
EMAIL: E-mail EMAIL: E-mail
EditTree: 'Editare structură arbore' EditTree: 'Editare structură arbore'
ListFiltered: 'Listă filtrată'
MENUTITLE: 'Editează pagina' MENUTITLE: 'Editează pagina'
NEWPAGE: '{pagetype} nouă' NEWPAGE: '{pagetype} nouă'
PAGENOTEXISTS: 'Această pagină nu există' PAGENOTEXISTS: 'Această pagină nu există'
PAGES: Pagini
PAGETYPEANYOPT: Oricare PAGETYPEANYOPT: Oricare
PAGETYPEOPT: 'Tip pagină'
PUBALLCONFIRM: 'Vă rugăm publicați toate paginile din site, copiind conținutul curent în live' PUBALLCONFIRM: 'Vă rugăm publicați toate paginile din site, copiind conținutul curent în live'
PUBALLFUN: 'Funcționalitatea "Publică Tot" ' 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." 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 TabContent: Conținut
TabHistory: Istorie TabHistory: Istorie
TabSettings: Setări TabSettings: Setări
TreeFiltered: 'Arbore filtrat'
TreeFilteredClear: 'Șterge filtru'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Aplică Filtrul'
RESET: Resetează RESET: Resetează
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Adaugă pagină' MENUTITLE: 'Adaugă pagină'
@ -144,15 +138,12 @@ ro:
ListView: 'View listă' ListView: 'View listă'
MENUTITLE: Pagini MENUTITLE: Pagini
TreeView: 'View Arbore' TreeView: 'View Arbore'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Selecție multiplă
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtru FILTER: Filtru
CMSSearch: CMSSearch:
FILTERDATEFROM: De la FILTERDATEFROM: De la
FILTERDATEHEADING: Data FILTERDATEHEADING: Data
FILTERDATETO: La FILTERDATETO: La
FILTERLABELTEXT: Conținut
CMSSettingsController: CMSSettingsController:
MENUTITLE: Setări MENUTITLE: Setări
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -86,13 +86,10 @@ ru:
DUPLICATEDWITHCHILDREN: 'Копия ''{title}'' и дочерних элементов создана' DUPLICATEDWITHCHILDREN: 'Копия ''{title}'' и дочерних элементов создана'
EMAIL: Email EMAIL: Email
EditTree: 'Редактировать дерево' EditTree: 'Редактировать дерево'
ListFiltered: 'Отфильтрованный список.'
MENUTITLE: 'Править страницу' MENUTITLE: 'Править страницу'
NEWPAGE: 'Новая {pagetype}' NEWPAGE: 'Новая {pagetype}'
PAGENOTEXISTS: 'Страница не существует' PAGENOTEXISTS: 'Страница не существует'
PAGES: Страницы
PAGETYPEANYOPT: Любой PAGETYPEANYOPT: Любой
PAGETYPEOPT: 'Тип страницы'
PUBALLCONFIRM: 'Пожалуйста, опубликуйте каждую страницу сайта, перенося содержимое из чернового режима в опубликованный' PUBALLCONFIRM: 'Пожалуйста, опубликуйте каждую страницу сайта, перенося содержимое из чернового режима в опубликованный'
PUBALLFUN: 'Функция "Опубликовать все"' PUBALLFUN: 'Функция "Опубликовать все"'
PUBALLFUN2: "Нажатие этой кнопки выполнит ту же функцию, что и нажатие кнопки \"Опубликовать\" для каждой отдельной страницы. Данная функция предназначена для использования после значительных изменений содержимого, например, в момент создания нового сайта." PUBALLFUN2: "Нажатие этой кнопки выполнит ту же функцию, что и нажатие кнопки \"Опубликовать\" для каждой отдельной страницы. Данная функция предназначена для использования после значительных изменений содержимого, например, в момент создания нового сайта."
@ -110,10 +107,7 @@ ru:
TabContent: Содержимое TabContent: Содержимое
TabHistory: История TabHistory: История
TabSettings: Настройки TabSettings: Настройки
TreeFiltered: 'Отфильтрованное дерево.'
TreeFilteredClear: 'Сбросить фильтр'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Применить фильтр'
RESET: Восстановить RESET: Восстановить
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Добавить страницу' MENUTITLE: 'Добавить страницу'
@ -145,15 +139,12 @@ ru:
ListView: 'Обзор списка' ListView: 'Обзор списка'
MENUTITLE: Страницы MENUTITLE: Страницы
TreeView: 'Обзор дерева' TreeView: 'Обзор дерева'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Множественный выбор
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Фильтр FILTER: Фильтр
CMSSearch: CMSSearch:
FILTERDATEFROM: От FILTERDATEFROM: От
FILTERDATEHEADING: Дата FILTERDATEHEADING: Дата
FILTERDATETO: До FILTERDATETO: До
FILTERLABELTEXT: Содержимое
CMSSettingsController: CMSSettingsController:
MENUTITLE: Настройки MENUTITLE: Настройки
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -94,11 +94,11 @@ sk:
DUPLICATEDWITHCHILDREN: 'Duplikované ''{title}'' a potomkovia úspešne' DUPLICATEDWITHCHILDREN: 'Duplikované ''{title}'' a potomkovia úspešne'
EMAIL: Pošli e-mailom EMAIL: Pošli e-mailom
EditTree: 'Editovať strom' EditTree: 'Editovať strom'
ListFiltered: 'Filtrovaný zoznam.' ListFiltered: 'Zobrazenie výsledkov vyhľadávania.'
MENUTITLE: 'Upraviť stránku' MENUTITLE: 'Upraviť stránku'
NEWPAGE: 'Nová {pagetype}' NEWPAGE: 'Nová {pagetype}'
PAGENOTEXISTS: 'Táto stránka neexistuje.' PAGENOTEXISTS: 'Táto stránka neexistuje.'
PAGES: Stránky PAGES: 'Stav stránky'
PAGETYPEANYOPT: Akákoľvek PAGETYPEANYOPT: Akákoľvek
PAGETYPEOPT: 'Typ stránky' PAGETYPEOPT: 'Typ stránky'
PUBALLCONFIRM: 'Prosím, zverejnite všetky stránky webu, zkopírovaním obsahu na verejné' 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' REMOVED: 'Smazané ''{title}''{description} z webu'
REMOVEDPAGE: 'Smazané ''{title}'' z verejného webu' REMOVEDPAGE: 'Smazané ''{title}'' z verejného webu'
REMOVEDPAGEFROMDRAFT: 'Odstránené ''%s'' z konceptu webu' REMOVEDPAGEFROMDRAFT: 'Odstránené ''%s'' z konceptu webu'
RESTORE: Obnoviť RESTORE: 'Obnoviť koncept'
RESTORED: 'Obnovené ''{title}'' úspešne' RESTORED: 'Obnovené ''{title}'' úspešne'
RESTORE_DESC: 'Obnoviť archivovanú verziu na koncept' RESTORE_DESC: 'Obnoviť archivovanú verziu na koncept'
RESTORE_TO_ROOT: 'Obnoviť koncept na najvyšiu úroveň' RESTORE_TO_ROOT: 'Obnoviť koncept na najvyšiu úroveň'
@ -122,11 +122,11 @@ sk:
TabContent: Obsah TabContent: Obsah
TabHistory: História TabHistory: História
TabSettings: Nastavenia TabSettings: Nastavenia
TreeFiltered: 'Filtrovaný strom.' TreeFiltered: 'Zobrazenie výsledkov vyhľadávania.'
TreeFilteredClear: 'Vyčistiť filter' TreeFilteredClear: Vyčistiť
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Použiť filter' APPLY_FILTER: Hľadať
CLEAR_FILTER: 'Vyčistiť filter' CLEAR_FILTER: Vyčistiť
RESET: Reset RESET: Reset
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Pridať stránku' MENUTITLE: 'Pridať stránku'
@ -159,7 +159,7 @@ sk:
MENUTITLE: Stránky MENUTITLE: Stránky
TreeView: 'Zobraziť strom' TreeView: 'Zobraziť strom'
CMSPagesController_ContentToolbar_ss: CMSPagesController_ContentToolbar_ss:
MULTISELECT: Multi výber MULTISELECT: 'Dávkové akcie'
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filtrovať FILTER: Filtrovať
CMSSIteTreeFilter_PublishedPages: CMSSIteTreeFilter_PublishedPages:
@ -168,19 +168,20 @@ sk:
FILTERDATEFROM: Od FILTERDATEFROM: Od
FILTERDATEHEADING: Dátum FILTERDATEHEADING: Dátum
FILTERDATETO: Do FILTERDATETO: Do
FILTERLABELTEXT: Obsah FILTERLABELTEXT: Hľadať
PAGEFILTERDATEHEADING: 'Posledne zmenené'
CMSSettingsController: CMSSettingsController:
MENUTITLE: Nastavenia MENUTITLE: Nastavenia
CMSSiteTreeFilter_ChangedPages: CMSSiteTreeFilter_ChangedPages:
Title: 'Zmenené stránky' Title: 'Zmenené stránky'
CMSSiteTreeFilter_DeletedPages: CMSSiteTreeFilter_DeletedPages:
Title: 'Všetky stránky, vrátane vymazaných' Title: 'Všetky stránky, vrátane archivovaných'
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:
Title: 'Všechny stránky' Title: 'Všechny stránky'
CMSSiteTreeFilter_StatusDeletedPages: CMSSiteTreeFilter_StatusDeletedPages:
Title: 'Zmazané stránky' Title: 'Archivované stránky'
CMSSiteTreeFilter_StatusDraftPages: CMSSiteTreeFilter_StatusDraftPages:
Title: 'Koncept nezverejnených stránok' Title: 'Konceptové stránky'
CMSSiteTreeFilter_StatusRemovedFromDraftPages: CMSSiteTreeFilter_StatusRemovedFromDraftPages:
Title: 'Živé, ale odstránené z konceptu' Title: 'Živé, ale odstránené z konceptu'
ContentControl: ContentControl:
@ -291,14 +292,14 @@ sk:
BrokenLinksGroupTitle: 'Výkazy porušených odkazov' BrokenLinksGroupTitle: 'Výkazy porušených odkazov'
ContentGroupTitle: 'Výkazy obsahu' ContentGroupTitle: 'Výkazy obsahu'
EMPTYPAGES: 'Prázdne stránky' 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é OtherGroupTitle: Ostatné
ParameterLiveCheckbox: 'Skontolovať živú stránku' ParameterLiveCheckbox: 'Skontolovať živú stránku'
REPEMPTY: '{title} výkaz je prázdny.' REPEMPTY: '{title} výkaz je prázdny.'
SilverStripeNavigator: SilverStripeNavigator:
ARCHIVED: Archivované ARCHIVED: Archivované
SilverStripeNavigatorLink: 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' ShareLink: 'Zdieľať odkaz'
SilverStripeNavigatorLinkl: SilverStripeNavigatorLinkl:
CloseLink: Zavrieť CloseLink: Zavrieť
@ -330,7 +331,7 @@ sk:
ARCHIVEDPAGEHELP: 'Stránka je odstránená z konceptu a z webu' ARCHIVEDPAGEHELP: 'Stránka je odstránená z konceptu a z webu'
ARCHIVEDPAGESHORT: Archivované ARCHIVEDPAGESHORT: Archivované
BUTTONARCHIVEDESC: 'Nezverejniť a odoslať do archívu' 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' BUTTONCANCELDRAFTDESC: 'Vymazať návrh a vrátiť sa k aktuálne zverejnenej stránke'
BUTTONPUBLISHED: Publikované BUTTONPUBLISHED: Publikované
BUTTONSAVED: Uložené BUTTONSAVED: Uložené
@ -348,11 +349,11 @@ sk:
DELETEDPAGEHELP: 'Stránka už nie je viacej zverejnená' DELETEDPAGEHELP: 'Stránka už nie je viacej zverejnená'
DELETEDPAGESHORT: Smazané 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.' 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' DependtPageColumnLinkType: 'Typ odkazu'
DependtPageColumnURL: URL DependtPageColumnURL: URL
EDITANYONE: 'Ktokoľvek kto sa môže prihlásiť do CMS' 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)' EDITONLYTHESE: 'Iba títo ľudia (vyberte zo zoznamu)'
EDITORGROUPS: 'Skupiny upravovateľov' EDITORGROUPS: 'Skupiny upravovateľov'
EDIT_ALL_DESCRIPTION: 'Upraviť akúkoľvek stránku' EDIT_ALL_DESCRIPTION: 'Upraviť akúkoľvek stránku'

View File

@ -72,8 +72,6 @@ sl:
MENUTITLE: 'Uredi stran' MENUTITLE: 'Uredi stran'
NEWPAGE: 'Nov {pagetype}' NEWPAGE: 'Nov {pagetype}'
PAGENOTEXISTS: 'Stran na tem naslovu ne obstaja' 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).' PUBALLCONFIRM: 'Objavite vse strani spletnega mesta (vsebine bodo prekopirane v "objavljeno" različico spletnega mesta).'
PUBALLFUN: 'Funkcionalnost "Objavi vse"' 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." 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}'' и деца успешно дуплирани' DUPLICATEDWITHCHILDREN: '''{title}'' и деца успешно дуплирани'
EMAIL: Е-пошта EMAIL: Е-пошта
EditTree: 'Измени стабло' EditTree: 'Измени стабло'
ListFiltered: 'Филтрирана листа.'
MENUTITLE: 'Измени страницу' MENUTITLE: 'Измени страницу'
NEWPAGE: 'Нова {pagetype}' NEWPAGE: 'Нова {pagetype}'
PAGENOTEXISTS: 'Ова страница не постоји' PAGENOTEXISTS: 'Ова страница не постоји'
PAGES: Странице
PAGETYPEANYOPT: Било која PAGETYPEANYOPT: Било која
PAGETYPEOPT: 'Тип странице'
PUBALLCONFIRM: 'Објавите сваку страну на овом сајту копирањем садржај на жив сајт.' PUBALLCONFIRM: 'Објавите сваку страну на овом сајту копирањем садржај на жив сајт.'
PUBALLFUN: 'Функција „Објави све“ ' PUBALLFUN: 'Функција „Објави све“ '
PUBALLFUN2: "Притиском на ово дугме постићи ћете исто што и одласком на сваку страну и притискањем дугмета „Објави“ . Намењена је за коришћење након великих измена садржаја као када се сајт први пут објављује." PUBALLFUN2: "Притиском на ово дугме постићи ћете исто што и одласком на сваку страну и притискањем дугмета „Објави“ . Намењена је за коришћење након великих измена садржаја као када се сајт први пут објављује."
@ -109,10 +106,7 @@ sr:
TabContent: Садржај TabContent: Садржај
TabHistory: Историја TabHistory: Историја
TabSettings: Подешавања TabSettings: Подешавања
TreeFiltered: 'Филтрирано стабло'
TreeFilteredClear: 'Избриши филтер'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Примени филтер'
RESET: Врати у пређашње стање RESET: Врати у пређашње стање
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Додај страницу' MENUTITLE: 'Додај страницу'
@ -144,15 +138,12 @@ sr:
ListView: 'Приказ у виду листе' ListView: 'Приказ у виду листе'
MENUTITLE: Странице MENUTITLE: Странице
TreeView: 'Приказ у виду стабла' TreeView: 'Приказ у виду стабла'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Вишеструки избор
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Филтер FILTER: Филтер
CMSSearch: CMSSearch:
FILTERDATEFROM: Од FILTERDATEFROM: Од
FILTERDATEHEADING: Датум FILTERDATEHEADING: Датум
FILTERDATETO: За FILTERDATETO: За
FILTERLABELTEXT: Садржај
CMSSettingsController: CMSSettingsController:
MENUTITLE: Подешавања MENUTITLE: Подешавања
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -85,13 +85,10 @@ sr_RS@latin:
DUPLICATEDWITHCHILDREN: '''{title}'' i deca uspešno duplirani' DUPLICATEDWITHCHILDREN: '''{title}'' i deca uspešno duplirani'
EMAIL: E-pošta EMAIL: E-pošta
EditTree: 'Izmeni stablo' EditTree: 'Izmeni stablo'
ListFiltered: 'Filtrirana lista.'
MENUTITLE: 'Izmeni stranicu' MENUTITLE: 'Izmeni stranicu'
NEWPAGE: 'Nova {pagetype}' NEWPAGE: 'Nova {pagetype}'
PAGENOTEXISTS: 'Ova stranica ne postoji' PAGENOTEXISTS: 'Ova stranica ne postoji'
PAGES: Stranice
PAGETYPEANYOPT: Bilo koja PAGETYPEANYOPT: Bilo koja
PAGETYPEOPT: 'Tip stranice'
PUBALLCONFIRM: 'Objavite svaku stranu na ovom sajtu kopiranjem sadržaj na živ sajt.' PUBALLCONFIRM: 'Objavite svaku stranu na ovom sajtu kopiranjem sadržaj na živ sajt.'
PUBALLFUN: 'Funkcija „Objavi sve“ ' 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." 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 TabContent: Sadržaj
TabHistory: Istorija TabHistory: Istorija
TabSettings: Podešavanja TabSettings: Podešavanja
TreeFiltered: 'Filtrirano stablo'
TreeFilteredClear: 'Izbriši filter'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Primeni filter'
RESET: Vrati u pređašnje stanje RESET: Vrati u pređašnje stanje
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Dodaj stranicu' MENUTITLE: 'Dodaj stranicu'
@ -144,15 +138,12 @@ sr_RS@latin:
ListView: 'Prikaz u vidu liste' ListView: 'Prikaz u vidu liste'
MENUTITLE: Stranice MENUTITLE: Stranice
TreeView: 'Prikaz u vidu stabla' TreeView: 'Prikaz u vidu stabla'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Višestruki izbor
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filter FILTER: Filter
CMSSearch: CMSSearch:
FILTERDATEFROM: Od FILTERDATEFROM: Od
FILTERDATEHEADING: Datum FILTERDATEHEADING: Datum
FILTERDATETO: Za FILTERDATETO: Za
FILTERLABELTEXT: Sadržaj
CMSSettingsController: CMSSettingsController:
MENUTITLE: Podešavanja MENUTITLE: Podešavanja
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -92,13 +92,10 @@ sv:
DUPLICATEDWITHCHILDREN: 'Duplicerade ''{title}'' och undersidor utan problem' DUPLICATEDWITHCHILDREN: 'Duplicerade ''{title}'' och undersidor utan problem'
EMAIL: E-post EMAIL: E-post
EditTree: 'Redigera trädet' EditTree: 'Redigera trädet'
ListFiltered: 'Filtrerad lista'
MENUTITLE: 'Redigera sida' MENUTITLE: 'Redigera sida'
NEWPAGE: 'Ny {pagetype}' NEWPAGE: 'Ny {pagetype}'
PAGENOTEXISTS: 'Den här sidan finns inte' PAGENOTEXISTS: 'Den här sidan finns inte'
PAGES: Sidor
PAGETYPEANYOPT: Vilken som helst PAGETYPEANYOPT: Vilken som helst
PAGETYPEOPT: 'Sidtyp'
PUBALLCONFIRM: 'Publicera alla sidor på sajten och kopiera dem till "live"' PUBALLCONFIRM: 'Publicera alla sidor på sajten och kopiera dem till "live"'
PUBALLFUN: '"Publicera alla"-funktion' 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." 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 TabContent: Innehåll
TabHistory: Historia TabHistory: Historia
TabSettings: Inställningar TabSettings: Inställningar
TreeFiltered: 'Filtrerat träd'
TreeFilteredClear: 'Rensa lista'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Filtrera'
CLEAR_FILTER: 'Rensa lista'
RESET: Rensa RESET: Rensa
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Skapa sida' MENUTITLE: 'Skapa sida'
@ -155,8 +148,6 @@ sv:
ListView: 'Listvy' ListView: 'Listvy'
MENUTITLE: Sidor MENUTITLE: Sidor
TreeView: 'Trädvy' TreeView: 'Trädvy'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Flerval
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Filter FILTER: Filter
CMSSIteTreeFilter_PublishedPages: CMSSIteTreeFilter_PublishedPages:
@ -165,7 +156,6 @@ sv:
FILTERDATEFROM: Från FILTERDATEFROM: Från
FILTERDATEHEADING: Datum FILTERDATEHEADING: Datum
FILTERDATETO: Till FILTERDATETO: Till
FILTERLABELTEXT: Innehåll
CMSSettingsController: CMSSettingsController:
MENUTITLE: Inställningar MENUTITLE: Inställningar
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -81,13 +81,10 @@ th:
DESCREMOVED: 'และ {count} รายการลูก' DESCREMOVED: 'และ {count} รายการลูก'
EMAIL: อีเมล EMAIL: อีเมล
EditTree: 'แก้ไขรายการแบบ Tree' EditTree: 'แก้ไขรายการแบบ Tree'
ListFiltered: 'แสดงรายการตามตัวกรองข้อมูล'
MENUTITLE: 'แก้ไขหน้าเว็บ' MENUTITLE: 'แก้ไขหน้าเว็บ'
NEWPAGE: 'ใหม่ {pagetype}' NEWPAGE: 'ใหม่ {pagetype}'
PAGENOTEXISTS: 'ไม่มีหน้านี้อยู่' PAGENOTEXISTS: 'ไม่มีหน้านี้อยู่'
PAGES: หน้า
PAGETYPEANYOPT: ประเภทใดก็ได้ PAGETYPEANYOPT: ประเภทใดก็ได้
PAGETYPEOPT: 'ประเภทหน้าเว็บ'
PUBALLCONFIRM: 'กรุณาเผยแพร่หน้าเว็บทุกหน้าในเว็บไซต์, คัดลอกเนื้อหาลงไปที่' PUBALLCONFIRM: 'กรุณาเผยแพร่หน้าเว็บทุกหน้าในเว็บไซต์, คัดลอกเนื้อหาลงไปที่'
PUBALLFUN: 'ฟังก์ชั่นการทำงาน "เผยแพร่ทั้งหมด"' PUBALLFUN: 'ฟังก์ชั่นการทำงาน "เผยแพร่ทั้งหมด"'
PUBALLFUN2: "การกดปุ่มนี้จะเทียบเท่ากับการไปที่หน้าต่างๆทุกๆหน้าแล้วกด \"เผยแพร่\". It's\nปุ่มดังกล่าวมีไว้ด้วยความตั้งใจที่ต้องการให้นำไปใช้กับการแก้ไขเนื้อหาเป็นจำนวนมาก เช่น เมื่อเว็บไซต์\nถูกสร้างขึ้นเป็นครั้งแรก." PUBALLFUN2: "การกดปุ่มนี้จะเทียบเท่ากับการไปที่หน้าต่างๆทุกๆหน้าแล้วกด \"เผยแพร่\". It's\nปุ่มดังกล่าวมีไว้ด้วยความตั้งใจที่ต้องการให้นำไปใช้กับการแก้ไขเนื้อหาเป็นจำนวนมาก เช่น เมื่อเว็บไซต์\nถูกสร้างขึ้นเป็นครั้งแรก."
@ -101,10 +98,7 @@ th:
TabContent: เนื้อหา TabContent: เนื้อหา
TabHistory: ประวัติย้อนหลัง TabHistory: ประวัติย้อนหลัง
TabSettings: ตั้งค่า TabSettings: ตั้งค่า
TreeFiltered: 'แสดงรายการแบบ Tree ตามตัวกรองข้อมูล'
TreeFilteredClear: 'ล้างค่าตัวกรองข้อมูล'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'นำตัวกรองข้อมูลไปใช้งาน'
RESET: รีเซ็ต RESET: รีเซ็ต
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'เพิ่มหน้า' MENUTITLE: 'เพิ่มหน้า'
@ -132,8 +126,6 @@ th:
MENUTITLE: 'แก้ไขหน้าเว็บ' MENUTITLE: 'แก้ไขหน้าเว็บ'
CMSPagesController: CMSPagesController:
GalleryView: 'มุมมองแบบแกลอรี่' GalleryView: 'มุมมองแบบแกลอรี่'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: การเลือกพร้อมกันหลายรายการ
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: ตัวกรองข้อมูล FILTER: ตัวกรองข้อมูล
CMSSearch: CMSSearch:

View File

@ -37,8 +37,6 @@ tr:
EMAIL: Eposta EMAIL: Eposta
MENUTITLE: 'Sayfayı düzenle' MENUTITLE: 'Sayfayı düzenle'
PAGENOTEXISTS: 'Sayfa bulunamadı' PAGENOTEXISTS: 'Sayfa bulunamadı'
PAGES: Sayfalar
PAGETYPEOPT: 'Sayfa Tipi'
PUBALLCONFIRM: 'Lütfen taslak sitedeki tüm sayfaları yayınlanmakta olan siteye kopyalayıp yayınla.' PUBALLCONFIRM: 'Lütfen taslak sitedeki tüm sayfaları yayınlanmakta olan siteye kopyalayıp yayınla.'
PUBALLFUN: '"Hepsini Yayınla" özelliği' 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." 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ş TabHistory: Geçmiş
TabSettings: Ayarlar TabSettings: Ayarlar
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Filteri Uygula'
RESET: Sıfırla RESET: Sıfırla
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Sayfa ekle' MENUTITLE: 'Sayfa ekle'

View File

@ -77,9 +77,7 @@ uk:
EMAIL: Електронна пошта EMAIL: Електронна пошта
MENUTITLE: 'Редагувати сторінку' MENUTITLE: 'Редагувати сторінку'
PAGENOTEXISTS: 'Ця сторінка не існує' PAGENOTEXISTS: 'Ця сторінка не існує'
PAGES: Сторінки
PAGETYPEANYOPT: Будь-який PAGETYPEANYOPT: Будь-який
PAGETYPEOPT: 'Тип сторінки'
PUBALLCONFIRM: 'Будь ласка, опублікуйте кожну сторінку. Для цього перенесіть проміжний варіант до існуючого.' PUBALLCONFIRM: 'Будь ласка, опублікуйте кожну сторінку. Для цього перенесіть проміжний варіант до існуючого.'
PUBALLFUN: 'Дія "Опублікувати все"' PUBALLFUN: 'Дія "Опублікувати все"'
PUBALLFUN2: "Натиснувши цю кнопку Ви зробите те ж саме, що й перейшовши до кожної сторінки та натиснувши \"Публікувати\". Це внесено для тих випадків, коли Ви маєте намір маштабно змінити вміст, наприклад, після першого створення сайту." PUBALLFUN2: "Натиснувши цю кнопку Ви зробите те ж саме, що й перейшовши до кожної сторінки та натиснувши \"Публікувати\". Це внесено для тих випадків, коли Ви маєте намір маштабно змінити вміст, наприклад, після першого створення сайту."
@ -92,7 +90,6 @@ uk:
TabHistory: Історія TabHistory: Історія
TabSettings: Налаштування TabSettings: Налаштування
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: 'Застосувати фільтр'
RESET: Відновити RESET: Відновити
CMSPageAddController: CMSPageAddController:
MENUTITLE: 'Додати сторінку' MENUTITLE: 'Додати сторінку'
@ -118,8 +115,6 @@ uk:
WHEN: Коли WHEN: Коли
CMSPageSettingsController: CMSPageSettingsController:
MENUTITLE: 'Редагувати сторінку' MENUTITLE: 'Редагувати сторінку'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: Множинний вибір
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: Фільтр FILTER: Фільтр
CMSSearch: CMSSearch:

View File

@ -85,13 +85,10 @@ zh:
DUPLICATEDWITHCHILDREN: '成功复制‘{title}’及其子页面' DUPLICATEDWITHCHILDREN: '成功复制‘{title}’及其子页面'
EMAIL: 电子邮件 EMAIL: 电子邮件
EditTree: '编辑树' EditTree: '编辑树'
ListFiltered: '已过滤的列表。'
MENUTITLE: '编辑页面' MENUTITLE: '编辑页面'
NEWPAGE: '新建{pagetype}' NEWPAGE: '新建{pagetype}'
PAGENOTEXISTS: '该页面不存在' PAGENOTEXISTS: '该页面不存在'
PAGES: 页面
PAGETYPEANYOPT: 任何 PAGETYPEANYOPT: 任何
PAGETYPEOPT: '页面类型'
PUBALLCONFIRM: '请发布站点上的所有页面,将内容复制到线上' PUBALLCONFIRM: '请发布站点上的所有页面,将内容复制到线上'
PUBALLFUN: '“全部发布”功能' PUBALLFUN: '“全部发布”功能'
PUBALLFUN2: "按下此按钮将做相当于跳转到每一页,然后按下“发布”。拟用于对内容进行了大量编辑工作之时,例如站点初建时。" PUBALLFUN2: "按下此按钮将做相当于跳转到每一页,然后按下“发布”。拟用于对内容进行了大量编辑工作之时,例如站点初建时。"
@ -109,10 +106,7 @@ zh:
TabContent: 内容 TabContent: 内容
TabHistory: 历史记录 TabHistory: 历史记录
TabSettings: 设置 TabSettings: 设置
TreeFiltered: '已过滤的树。'
TreeFilteredClear: '清除过滤器'
CMSMain_left_ss: CMSMain_left_ss:
APPLY_FILTER: '应用过滤器'
RESET: 重置 RESET: 重置
CMSPageAddController: CMSPageAddController:
MENUTITLE: '添加页面' MENUTITLE: '添加页面'
@ -144,15 +138,12 @@ zh:
ListView: '列表视图' ListView: '列表视图'
MENUTITLE: 页面 MENUTITLE: 页面
TreeView: '树视图' TreeView: '树视图'
CMSPagesController_ContentToolbar_ss:
MULTISELECT: 多选
CMSPagesController_Tools_ss: CMSPagesController_Tools_ss:
FILTER: 过滤器 FILTER: 过滤器
CMSSearch: CMSSearch:
FILTERDATEFROM: FILTERDATEFROM:
FILTERDATEHEADING: 日期 FILTERDATEHEADING: 日期
FILTERDATETO: FILTERDATETO:
FILTERLABELTEXT: 内容
CMSSettingsController: CMSSettingsController:
MENUTITLE: 设置 MENUTITLE: 设置
CMSSiteTreeFilter_Search: CMSSiteTreeFilter_Search:

View File

@ -4,7 +4,7 @@
.cms-edit-form.AssetAdmin { .cms-edit-form.AssetAdmin {
width: 100%; 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 * 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 * 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 * 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. * way then it should be include in the admin scss files.
* *
* @package cms * @package cms
@ -123,4 +123,4 @@
#Form_EditForm #Title .update { #Form_EditForm #Title .update {
margin-left: 7px; margin-left: 7px;
} }

View File

@ -1,9 +1,9 @@
/** /**
* This file is the central collection of included modules, links to custom SCSS files, * This file is the central collection of included modules, links to custom SCSS files,
* and any global SCSS variable definitions. * and any global SCSS variable definitions.
* *
* DO NOT ADD stylesheet rules to this file directly! * DO NOT ADD stylesheet rules to this file directly!
* *
* Note: By prefixing files with an underscore, they won't create individual CSS files. * 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 * Shows the pages to an administrator, who can then
* decide which pages to remove by ticking a checkbox * decide which pages to remove by ticking a checkbox
* and manually executing the removal. * and manually executing the removal.
* *
* Caution: Pages also count as orphans if they don't * Caution: Pages also count as orphans if they don't
* have parents in this stage, even if the parent has a representation * have parents in this stage, even if the parent has a representation
* in the other stage: * in the other stage:
@ -16,7 +16,7 @@
* before and after orphan removal. * before and after orphan removal.
* *
* @author Ingo Schommer (<firstname>@silverstripe.com), SilverStripe Ltd. * @author Ingo Schommer (<firstname>@silverstripe.com), SilverStripe Ltd.
* *
* @package cms * @package cms
* @subpackage tasks * @subpackage tasks
*/ */
@ -87,13 +87,13 @@ in the other stage:<br />
$latestAuthor = DataObject::get_by_id('Member', $latestVersion->AuthorID); $latestAuthor = DataObject::get_by_id('Member', $latestVersion->AuthorID);
$orphanBaseClass = ClassInfo::baseDataClass($this->orphanedSearchClass); $orphanBaseClass = ClassInfo::baseDataClass($this->orphanedSearchClass);
$stageRecord = Versioned::get_one_by_stage( $stageRecord = Versioned::get_one_by_stage(
$this->orphanedSearchClass, $this->orphanedSearchClass,
'Stage', 'Stage',
array("\"$orphanBaseClass\".\"ID\"" => $orphan->ID) array("\"$orphanBaseClass\".\"ID\"" => $orphan->ID)
); );
$liveRecord = Versioned::get_one_by_stage( $liveRecord = Versioned::get_one_by_stage(
$this->orphanedSearchClass, $this->orphanedSearchClass,
'Live', 'Live',
array("\"$orphanBaseClass\".\"ID\"" => $orphan->ID) array("\"$orphanBaseClass\".\"ID\"" => $orphan->ID)
); );
$label = sprintf( $label = sprintf(
@ -125,11 +125,11 @@ in the other stage:<br />
) )
)); ));
$fields->push(new OptionSetField( $fields->push(new OptionSetField(
'OrphanOperation', 'OrphanOperation',
_t('RemoveOrphanedPagesTask.CHOOSEOPERATION', 'Choose operation:'), _t('RemoveOrphanedPagesTask.CHOOSEOPERATION', 'Choose operation:'),
array( array(
'rebase' => _t( 'rebase' => _t(
'RemoveOrphanedPagesTask.OPERATION_REBASE', 'RemoveOrphanedPagesTask.OPERATION_REBASE',
sprintf( sprintf(
'Rebase selected to a new holder page "%s" and unpublish. None of these pages will show up for website visitors.', 'Rebase selected to a new holder page "%s" and unpublish. None of these pages will show up for website visitors.',
$this->rebaseHolderTitle() $this->rebaseHolderTitle()
@ -143,7 +143,7 @@ in the other stage:<br />
'Warning', 'Warning',
sprintf('<p class="message">%s</p>', sprintf('<p class="message">%s</p>',
_t( _t(
'RemoveOrphanedPagesTask.DELETEWARNING', 'RemoveOrphanedPagesTask.DELETEWARNING',
'Warning: These operations are not reversible. Please handle with care.' 'Warning: These operations are not reversible. Please handle with care.'
) )
) )
@ -216,8 +216,8 @@ in the other stage:<br />
$orphanBaseClass = ClassInfo::baseDataClass($this->orphanedSearchClass); $orphanBaseClass = ClassInfo::baseDataClass($this->orphanedSearchClass);
foreach($orphanIDs as $id) { foreach($orphanIDs as $id) {
$stageRecord = Versioned::get_one_by_stage( $stageRecord = Versioned::get_one_by_stage(
$this->orphanedSearchClass, $this->orphanedSearchClass,
'Stage', 'Stage',
array("\"$orphanBaseClass\".\"ID\"" => $id) array("\"$orphanBaseClass\".\"ID\"" => $id)
); );
if($stageRecord) { if($stageRecord) {
@ -227,8 +227,8 @@ in the other stage:<br />
unset($stageRecord); unset($stageRecord);
} }
$liveRecord = Versioned::get_one_by_stage( $liveRecord = Versioned::get_one_by_stage(
$this->orphanedSearchClass, $this->orphanedSearchClass,
'Live', 'Live',
array("\"$orphanBaseClass\".\"ID\"" => $id) array("\"$orphanBaseClass\".\"ID\"" => $id)
); );
if($liveRecord) { if($liveRecord) {
@ -258,7 +258,7 @@ in the other stage:<br />
$orphanBaseClass = ClassInfo::baseDataClass($this->orphanedSearchClass); $orphanBaseClass = ClassInfo::baseDataClass($this->orphanedSearchClass);
foreach($orphanIDs as $id) { foreach($orphanIDs as $id) {
$stageRecord = Versioned::get_one_by_stage( $stageRecord = Versioned::get_one_by_stage(
$this->orphanedSearchClass, $this->orphanedSearchClass,
'Stage', 'Stage',
array("\"$orphanBaseClass\".\"ID\"" => $id) array("\"$orphanBaseClass\".\"ID\"" => $id)
); );
@ -273,7 +273,7 @@ in the other stage:<br />
//unset($stageRecord); //unset($stageRecord);
} }
$liveRecord = Versioned::get_one_by_stage( $liveRecord = Versioned::get_one_by_stage(
$this->orphanedSearchClass, $this->orphanedSearchClass,
'Live', 'Live',
array("\"$orphanBaseClass\".\"ID\"" => $id) array("\"$orphanBaseClass\".\"ID\"" => $id)
); );
@ -298,7 +298,7 @@ in the other stage:<br />
/** /**
* Gets all orphans from "Stage" and "Live" stages. * Gets all orphans from "Stage" and "Live" stages.
* *
* @param string $class * @param string $class
* @param array $filter * @param array $filter
* @param string $sort * @param string $sort

View File

@ -18,14 +18,14 @@ class SiteTreeMaintenanceTask extends Controller {
$page->write(); $page->write();
if($urlSegment != $page->URLSegment) { if($urlSegment != $page->URLSegment) {
echo _t( echo _t(
'SiteTree.LINKSCHANGEDTO', 'SiteTree.LINKSCHANGEDTO',
" changed {url1} -> {url2}", " changed {url1} -> {url2}",
array('url1' => $urlSegment, 'url2' => $page->URLSegment) array('url1' => $urlSegment, 'url2' => $page->URLSegment)
); );
} }
else { else {
echo _t( echo _t(
'SiteTree.LINKSALREADYUNIQUE', 'SiteTree.LINKSALREADYUNIQUE',
" {url} is already unique", " {url} is already unique",
array('url' => $urlSegment) array('url' => $urlSegment)
); );

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
&nbsp; &nbsp; &nbsp; &nbsp;
<a id="SilverStripeNavigatorLink" href="#"> <a id="SilverStripeNavigatorLink" href="#">
<% _t('SilverStripeNavigatorLink.ShareLink','Share link') %> <% _t('SilverStripeNavigatorLink.ShareLink','Share link') %>
</a> </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.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') %> <% _t('URLSegmentField.Cancel', 'Cancel') %>
</button> </button>
<% if $HelpText %><p class="help">$HelpText</p><% end_if %> <% if $HelpText %><p class="help">$HelpText</p><% end_if %>
</div> </div>

View File

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

View File

@ -47,7 +47,7 @@ class FeatureContext extends \SilverStripe\Framework\Test\Behaviour\FeatureConte
$obj->publish('Stage', 'Live'); $obj->publish('Stage', 'Live');
}); });
$factory->define($class, $blueprint); $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. * 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>[^"]+)"$/ * @Given /^(?:(an|a|the) )"(?<type>[^"]+)" "(?<id>[^"]+)" (:?which )?redirects to (?:(an|a|the) )"(?<targetType>[^"]+)" "(?<targetId>[^"]+)"$/
*/ */
public function stepCreateRedirectorPage($type, $id, $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 * 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 be editable by "Admin"
* *
* @Then /^pages should( not? |\s*)be editable by "([^"]*)"$/ * @Then /^pages should( not? |\s*)be editable by "([^"]*)"$/
*/ */
public function pagesShouldBeEditableBy($negative, $member){ public function pagesShouldBeEditableBy($negative, $member){
$page = \Page::get()->First(); $page = \Page::get()->First();
return array( return array(
new Step\Given('I am not logged in'), new Step\Given('I am not logged in'),
new Step\Given('I am logged in with "' . $member . '" permissions'), new Step\Given('I am logged in with "' . $member . '" permissions'),

View File

@ -26,7 +26,7 @@ class ThemeContext extends BehatContext {
/** /**
* Create a test theme * Create a test theme
* *
* @Given /^a theme "(?<theme>[^"]+)"/ * @Given /^a theme "(?<theme>[^"]+)"/
*/ */
public function stepCreateTheme($theme) { public function stepCreateTheme($theme) {
@ -39,7 +39,7 @@ class ThemeContext extends BehatContext {
/** /**
* Create a template within a test theme * Create a template within a test theme
* *
* @Given /^a template "(?<template>[^"]+)" in theme "(?<theme>[^"]+)" with content "(?<content>[^"]+)"/ * @Given /^a template "(?<template>[^"]+)" in theme "(?<theme>[^"]+)" with content "(?<content>[^"]+)"/
*/ */
public function stepCreateTemplate($template, $theme, $content) { public function stepCreateTemplate($template, $theme, $content) {
@ -76,7 +76,7 @@ class ThemeContext extends BehatContext {
/** /**
* Clean up any theme manipulation * Clean up any theme manipulation
* *
* @AfterScenario * @AfterScenario
*/ */
public function cleanThemesAfterScenario() { 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>" Then the "Content" HTML field should contain "<a href="[file_link,id=4]" target="_blank">awesome</a>"
# Required to avoid "unsaved changes" browser dialog # Required to avoid "unsaved changes" browser dialog
Then I press the "Save draft" button 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 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>" 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(); 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() { function testSiteTreeHints() {
$cache = SS_Cache::factory('CMSMain_SiteTreeHints'); $cache = SS_Cache::factory('CMSMain_SiteTreeHints');
// Login as user with root creation privileges // Login as user with root creation privileges
@ -106,7 +118,7 @@ class CMSMainTest extends FunctionalTest {
$this->assertArrayHasKey($page2->ID, $responseData['modified']); $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'); $pageID = $this->idFromFixture('RedirectorPage', 'page5');
$latestID = DB::prepared_query('select max("Version") from "RedirectorPage_versions" where "RecordID" = ?', array($pageID))->value(); $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(); $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(); $cmsUser->logIn();
$this->get('admin/pages/add'); $this->get('admin/pages/add');
$response = $this->post( $response = $this->post(
'admin/pages/add/AddForm', 'admin/pages/add/AddForm',
array( array(
'ParentID' => '0', 'ParentID' => '0',
'PageType' => 'Page', 'PageType' => 'Page',
'Locale' => 'en_US', 'Locale' => 'en_US',
'action_doAdd' => 1, 'action_doAdd' => 1,
'ajax' => 1, 'ajax' => 1,
), array( ), array(
'X-Pjax' => 'CurrentForm,Breadcrumbs', 'X-Pjax' => 'CurrentForm,Breadcrumbs',
) )
); );
// should redirect, which is a permission error // should redirect, which is a permission error
$this->assertEquals(403, $response->getStatusCode(), 'Add TopLevel page must fail for normal user'); $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->get('admin/pages/add');
$response = $this->post( $response = $this->post(
'admin/pages/add/AddForm', 'admin/pages/add/AddForm',
array( array(
'ParentID' => '0', 'ParentID' => '0',
'PageType' => 'Page', 'PageType' => 'Page',
'Locale' => 'en_US', 'Locale' => 'en_US',
'action_doAdd' => 1, 'action_doAdd' => 1,
'ajax' => 1, 'ajax' => 1,
), array( ), array(
'X-Pjax' => 'CurrentForm,Breadcrumbs', 'X-Pjax' => 'CurrentForm,Breadcrumbs',
) )
); );
$location = $response->getHeader('X-ControllerURL'); $location = $response->getHeader('X-ControllerURL');
@ -312,27 +324,60 @@ class CMSMainTest extends FunctionalTest {
// Create toplevel page // Create toplevel page
$this->get('admin/pages/add'); $this->get('admin/pages/add');
$response = $this->post( $response = $this->post(
'admin/pages/add/AddForm', 'admin/pages/add/AddForm',
array('ParentID' => '0', 'PageType' => 'CMSMainTest_ClassA', 'Locale' => 'en_US', 'action_doAdd' => 1) array(
'ParentID' => '0',
'PageType' => 'CMSMainTest_ClassA',
'Locale' => 'en_US',
'action_doAdd' => 1,
'ajax' => 1
), array(
'X-Pjax' => 'CurrentForm,Breadcrumbs',
)
); );
$this->assertFalse($response->isError()); $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]; $newPageId = $matches[1];
// Create allowed child // Create allowed child
$this->get('admin/pages/add'); $this->get('admin/pages/add');
$response = $this->post( $response = $this->post(
'admin/pages/add/AddForm', 'admin/pages/add/AddForm',
array('ParentID' => $newPageId, 'PageType' => 'CMSMainTest_ClassB', 'Locale' => 'en_US', 'action_doAdd' => 1) array(
'ParentID' => $newPageId,
'PageType' => 'CMSMainTest_ClassB',
'Locale' => 'en_US',
'action_doAdd' => 1,
'ajax' => 1
), array(
'X-Pjax' => 'CurrentForm,Breadcrumbs',
)
); );
$this->assertFalse($response->isError()); $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 // Create disallowed child
$this->get('admin/pages/add'); $this->get('admin/pages/add');
$response = $this->post( $response = $this->post(
'admin/pages/add/AddForm', 'admin/pages/add/AddForm',
array('ParentID' => $newPageId, 'PageType' => 'Page', 'Locale' => 'en_US', 'action_doAdd' => 1) 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'); $this->assertEquals(403, $response->getStatusCode(), 'Add disallowed child should fail');

View File

@ -1,142 +1,142 @@
Page: Page:
page1: page1:
Title: Page 1 Title: Page 1
Sort: 1 Sort: 1
page2: page2:
Title: Page 2 Title: Page 2
Sort: 2 Sort: 2
page3: page3:
Title: Page 3 Title: Page 3
Sort: 3 Sort: 3
page31: page31:
Title: Page 3.1 Title: Page 3.1
Parent: =>Page.page3 Parent: =>Page.page3
Sort: 1 Sort: 1
page32: page32:
Title: Page 3.2 Title: Page 3.2
Parent: =>Page.page3 Parent: =>Page.page3
Sort: 2 Sort: 2
page4: page4:
Title: Page 4 Title: Page 4
Sort: 4 Sort: 4
page5: page5:
Title: Page 5 Title: Page 5
Sort: 5 Sort: 5
page6: page6:
Title: Page 6 Title: Page 6
Sort: 6 Sort: 6
page7: page7:
Title: Page 7 Title: Page 7
Sort: 7 Sort: 7
page8: page8:
Title: Page 8 Title: Page 8
Sort: 8 Sort: 8
page9: page9:
Title: Page 9 Title: Page 9
Sort: 9 Sort: 9
page10: page10:
Title: Page 10 Title: Page 10
Sort: 10 Sort: 10
page11: page11:
Title: Page 11 Title: Page 11
Sort: 11 Sort: 11
page12: page12:
Title: Page 12 Title: Page 12
Sort: 12 Sort: 12
page13: page13:
Title: Page 13 Title: Page 13
Sort: 13 Sort: 13
page14: page14:
Title: Page 14 Title: Page 14
Sort: 14 Sort: 14
page15: page15:
Title: Page 15 Title: Page 15
Sort: 15 Sort: 15
page16: page16:
Title: Page 16 Title: Page 16
Sort: 16 Sort: 16
page17: page17:
Title: Page 17 Title: Page 17
Sort: 17 Sort: 17
page18: page18:
Title: Page 18 Title: Page 18
Sort: 18 Sort: 18
page19: page19:
Title: Page 19 Title: Page 19
Sort: 19 Sort: 19
page20: page20:
Title: Page 20 Title: Page 20
Sort: 20 Sort: 20
page21: page21:
Title: Page 21 Title: Page 21
Sort: 21 Sort: 21
page22: page22:
Title: Page 22 Title: Page 22
Sort: 22 Sort: 22
page23: page23:
Title: Page 23 Title: Page 23
Sort: 23 Sort: 23
page24: page24:
Title: Page 24 Title: Page 24
Sort: 24 Sort: 24
page25: page25:
Title: Page 25 Title: Page 25
Sort: 25 Sort: 25
page26: page26:
Title: Page 26 Title: Page 26
Sort: 26 Sort: 26
home: home:
Title: Home Title: Home
URLSegment: home URLSegment: home
Sort: 27 Sort: 27
Group: Group:
admin: admin:
Title: Administrators Title: Administrators
empty: empty:
Title: Empty Group Title: Empty Group
assetsonly: assetsonly:
Title: assetsonly Title: assetsonly
allcmssections: allcmssections:
Title: allcmssections Title: allcmssections
rooteditusers: rooteditusers:
Title: rooteditusers Title: rooteditusers
Member: Member:
admin: admin:
Email: admin@example.com Email: admin@example.com
Password: ZXXlkwecxz2390232233 Password: ZXXlkwecxz2390232233
Groups: =>Group.admin Groups: =>Group.admin
assetsonlyuser: assetsonlyuser:
Email: assetsonlyuser@test.com Email: assetsonlyuser@test.com
Groups: =>Group.assetsonly Groups: =>Group.assetsonly
allcmssectionsuser: allcmssectionsuser:
Email: allcmssectionsuser@test.com Email: allcmssectionsuser@test.com
Groups: =>Group.allcmssections Groups: =>Group.allcmssections
rootedituser: rootedituser:
Email: rootedituser@test.com Email: rootedituser@test.com
Groups: =>Group.rooteditusers Groups: =>Group.rooteditusers
Permission: Permission:
admin: admin:
Code: ADMIN Code: ADMIN
GroupID: =>Group.admin GroupID: =>Group.admin
assetsonly: assetsonly:
Code: CMS_ACCESS_AssetAdmin Code: CMS_ACCESS_AssetAdmin
GroupID: =>Group.assetsonly GroupID: =>Group.assetsonly
allcmssections: allcmssections:
Code: CMS_ACCESS_LeftAndMain Code: CMS_ACCESS_LeftAndMain
GroupID: =>Group.allcmssections GroupID: =>Group.allcmssections
allcmssections2: allcmssections2:
Code: CMS_ACCESS_LeftAndMain Code: CMS_ACCESS_LeftAndMain
GroupID: =>Group.rooteditusers GroupID: =>Group.rooteditusers
SiteConfig: SiteConfig:
siteconfig1: siteconfig1:
EditorGroups: =>Group.rooteditusers EditorGroups: =>Group.rooteditusers
CanCreateTopLevelType: 'OnlyTheseUsers' CanCreateTopLevelType: 'OnlyTheseUsers'
SiteConfig_CreateTopLevelGroups: SiteConfig_CreateTopLevelGroups:
createtoplevelgroups1: createtoplevelgroups1:
SiteConfigID: =>SiteConfig.siteconfig1 SiteConfigID: =>SiteConfig.siteconfig1
GroupID: =>Group.rooteditusers GroupID: =>Group.rooteditusers
RedirectorPage: RedirectorPage:
page5: page5:
Title: Page 5 Title: Page 5
RedirectionType: External RedirectionType: External
ExternalURL: http://www.google.com ExternalURL: http://www.google.com

View File

@ -21,7 +21,7 @@ class CMSPageHistoryControllerTest extends FunctionalTest {
$this->page = new Page(); $this->page = new Page();
$this->page->URLSegment = "test"; $this->page->URLSegment = "test";
$this->page->Content = "new content"; $this->page->Content = "new content";
$this->page->write(); $this->page->write();
$this->versionUnpublishedCheck = $this->page->Version; $this->versionUnpublishedCheck = $this->page->Version;
$this->page->Content = "some further content"; $this->page->Content = "some further content";

View File

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

View File

@ -91,8 +91,8 @@ class CMSSiteTreeFilterTest extends SapphireTest {
$deletedPageID = $deletedPage->ID; $deletedPageID = $deletedPage->ID;
$deletedPage->delete(); $deletedPage->delete();
$deletedPage = Versioned::get_one_by_stage( $deletedPage = Versioned::get_one_by_stage(
'SiteTree', 'SiteTree',
'Live', 'Live',
array('"SiteTree_Live"."ID"' => $deletedPageID) array('"SiteTree_Live"."ID"' => $deletedPageID)
); );
@ -108,8 +108,8 @@ class CMSSiteTreeFilterTest extends SapphireTest {
$draftPage = $this->objFromFixture('Page', 'page4'); $draftPage = $this->objFromFixture('Page', 'page4');
$draftPage->publish('Stage', 'Stage'); $draftPage->publish('Stage', 'Stage');
$draftPage = Versioned::get_one_by_stage( $draftPage = Versioned::get_one_by_stage(
'SiteTree', 'SiteTree',
'Stage', 'Stage',
sprintf('"SiteTree"."ID" = %d', $draftPage->ID) sprintf('"SiteTree"."ID" = %d', $draftPage->ID)
); );
@ -144,8 +144,8 @@ class CMSSiteTreeFilterTest extends SapphireTest {
$removedDraftPage->doPublish(); $removedDraftPage->doPublish();
$removedDraftPage->deleteFromStage('Stage'); $removedDraftPage->deleteFromStage('Stage');
$removedDraftPage = Versioned::get_one_by_stage( $removedDraftPage = Versioned::get_one_by_stage(
'SiteTree', 'SiteTree',
'Live', 'Live',
sprintf('"SiteTree"."ID" = %d', $removedDraftPage->ID) sprintf('"SiteTree"."ID" = %d', $removedDraftPage->ID)
); );

View File

@ -13,9 +13,9 @@ Page:
page6: page6:
Title: Page 6 Title: Page 6
page7: page7:
Title: Page 7 Title: Page 7
page7a: page7a:
Parent: =>Page.page7 Parent: =>Page.page7
Title: Page 7a Title: Page 7a
page2a: page2a:
Parent: =>Page.page2 Parent: =>Page.page2
@ -28,4 +28,4 @@ Page:
Title: Page 3a Title: Page 3a
page3b: page3b:
Parent: =>Page.page3 Parent: =>Page.page3
Title: Page 3b Title: Page 3b

View File

@ -21,16 +21,20 @@ class ContentControllerPermissionsTest extends FunctionalTest {
$page->write(); $page->write();
$response = $this->get('/testpage'); $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'); $response = $this->get('/testpage/?stage=Live');
$this->assertEquals($response->getStatusCode(), 200, 'Doesnt require login for explicit live stage'); $this->assertEquals($response->getStatusCode(), 200, "Doesn't require login for explicit live stage");
$response = $this->get('/testpage/?stage=Stage'); try {
$response = $this->get('/testpage/?stage=Stage');
} catch(SS_HTTPResponse_Exception $responseException) {
$response = $responseException->getResponse();
}
// should redirect to login // should redirect to login
$this->assertEquals($response->getStatusCode(), 302, 'Redirects to login page when not logged in for draft stage'); $this->assertEquals($response->getStatusCode(), 302, 'Redirects to login page when not logged in for draft stage');
$this->assertContains( $this->assertContains(
Config::inst()->get('Security', 'login_url'), Config::inst()->get('Security', 'login_url'),
$response->getHeader('Location') $response->getHeader('Location')
); );

View File

@ -6,9 +6,9 @@ class ContentControllerSearchExtensionTest extends SapphireTest {
$page->URLSegment = 'whatever'; $page->URLSegment = 'whatever';
$page->Content = 'oh really?'; $page->Content = 'oh really?';
$page->write(); $page->write();
$page->publish('Stage', 'Live'); $page->publish('Stage', 'Live');
$controller = new ContentController($page); $controller = new ContentController($page);
$form = $controller->SearchForm(); $form = $controller->SearchForm();
if (get_class($form) == 'SearchForm') $this->assertEquals(array('File'), $form->getClassesToSearch()); if (get_class($form) == 'SearchForm') $this->assertEquals(array('File'), $form->getClassesToSearch());
} }

View File

@ -4,13 +4,13 @@
* @subpackage tests * @subpackage tests
*/ */
class ContentControllerTest extends FunctionalTest { class ContentControllerTest extends FunctionalTest {
protected static $fixture_file = 'ContentControllerTest.yml'; protected static $fixture_file = 'ContentControllerTest.yml';
protected static $use_draft_site = true; protected static $use_draft_site = true;
protected static $disable_themes = true; protected static $disable_themes = true;
/** /**
* Test that nested pages, basic actions, and nested/non-nested URL switching works properly * 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(){ public function testViewDraft(){
// test when user does not have permission, should get login form // test when user does not have permission, should get login form
$this->logInWithPermission('EDITOR'); $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. // test when user does have permission, should show page title and header ok.
$this->logInWithPermission('ADMIN'); $this->logInWithPermission('ADMIN');
$this->assertEquals('200', $this->get('/contact/?stage=Stage')->getstatusCode()); $this->assertEquals('200', $this->get('/contact/?stage=Stage')->getstatusCode());
} }
public function testLinkShortcodes() { public function testLinkShortcodes() {
$linkedPage = new SiteTree(); $linkedPage = new SiteTree();
$linkedPage->URLSegment = 'linked-page'; $linkedPage->URLSegment = 'linked-page';
$linkedPage->write(); $linkedPage->write();
$linkedPage->publish('Stage', 'Live'); $linkedPage->publish('Stage', 'Live');
$page = new SiteTree(); $page = new SiteTree();
$page->URLSegment = 'linking-page'; $page->URLSegment = 'linking-page';
$page->Content = sprintf('<a href="[sitetree_link,id=%s]">Testlink</a>', $linkedPage->ID); $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(), $this->get($page->RelativeLink())->getBody(),
'"sitetree_link" shortcodes get parsed properly' '"sitetree_link" shortcodes get parsed properly'
); );
} }
/** /**
@ -132,7 +138,7 @@ class ContentControllerTest extends FunctionalTest {
* @covers ContentController::getViewer() * @covers ContentController::getViewer()
**/ **/
public function testGetViewer() { public function testGetViewer() {
$self = $this; $self = $this;
$this->useTestTheme(dirname(__FILE__), 'controllertest', function() use ($self) { $this->useTestTheme(dirname(__FILE__), 'controllertest', function() use ($self) {
@ -143,8 +149,8 @@ class ContentControllerTest extends FunctionalTest {
$page->publish("Stage", "Live"); $page->publish("Stage", "Live");
$response = $self->get($page->RelativeLink()); $response = $self->get($page->RelativeLink());
$self->assertEquals("ContentControllerTestPageWithoutController", $response->getBody()); $self->assertEquals("ContentControllerTestPageWithoutController", trim($response->getBody()));
// // This should fall over to user Page.ss // // This should fall over to user Page.ss
$page = new ContentControllerTestPage(); $page = new ContentControllerTestPage();
$page->URLSegment = "test"; $page->URLSegment = "test";
@ -152,7 +158,7 @@ class ContentControllerTest extends FunctionalTest {
$page->publish("Stage", "Live"); $page->publish("Stage", "Live");
$response = $self->get($page->RelativeLink()); $response = $self->get($page->RelativeLink());
$self->assertEquals("Page", $response->getBody()); $self->assertEquals("Page", trim($response->getBody()));
// Test that the action template is rendered. // Test that the action template is rendered.
@ -162,12 +168,12 @@ class ContentControllerTest extends FunctionalTest {
$page->publish("Stage", "Live"); $page->publish("Stage", "Live");
$response = $self->get($page->RelativeLink("test")); $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 // Test that an action without a template will default to the index template, which is
// to say the default Page.ss template // to say the default Page.ss template
$response = $self->get($page->RelativeLink("testwithouttemplate")); $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 // Test that an action with a template will render the both action template *and* the
// correct parent template // correct parent template

View File

@ -3,14 +3,14 @@ Group:
Title: Editors Title: Editors
admins: admins:
Title: Administrators Title: Administrators
Permission: Permission:
admins: admins:
Code: VIEW_DRAFT_CONTENT Code: VIEW_DRAFT_CONTENT
Group: =>Group.admins Group: =>Group.admins
editors: editors:
Group: =>Group.editors Group: =>Group.editors
Member: Member:
editor: editor:
FirstName: Test FirstName: Test
@ -43,4 +43,4 @@ ContentControllerTest_Page:
URLSegment: contact URLSegment: contact
CanViewType: OnlyTheseUsers CanViewType: OnlyTheseUsers
EditorGroups: =>Group.admins EditorGroups: =>Group.admins

View File

@ -14,8 +14,8 @@ class ModelAsControllerTest extends FunctionalTest {
protected $orig = array(); protected $orig = array();
/** /**
* New tests require nested urls to be enabled, but the site might not * New tests require nested urls to be enabled, but the site might not
* support nested URLs. * support nested URLs.
* This setup will enable nested-urls for this test and resets the state * This setup will enable nested-urls for this test and resets the state
* after the tests have been performed. * 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 * New tests require nested urls to be enabled, but the site might not
* support nested URLs. * support nested URLs.
* This setup will enable nested-urls for this test and resets the state * This setup will enable nested-urls for this test and resets the state
* after the tests have been performed. * after the tests have been performed.
*/ */
@ -81,14 +81,14 @@ class ModelAsControllerTest extends FunctionalTest {
* all pages will be found by their old segments. * all pages will be found by their old segments.
* *
* NOTE: This test requires nested_urls * NOTE: This test requires nested_urls
* *
* Original: level1/level2/level3 * Original: level1/level2/level3
* Republished as: newlevel1/newlevel2/newlevel3 * Republished as: newlevel1/newlevel2/newlevel3
*/ */
public function testRedirectsNestedRenamedPages(){ public function testRedirectsNestedRenamedPages(){
$this->generateNestedPagesFixture(); $this->generateNestedPagesFixture();
// check a first level URLSegment // check a first level URLSegment
$response = $this->get('level1/action'); $response = $this->get('level1/action');
$this->assertEquals($response->getStatusCode(),301); $this->assertEquals($response->getStatusCode(),301);
$this->assertEquals( $this->assertEquals(
@ -96,7 +96,7 @@ class ModelAsControllerTest extends FunctionalTest {
$response->getHeader('Location') $response->getHeader('Location')
); );
// check second level URLSegment // check second level URLSegment
$response = $this->get('newlevel1/level2'); $response = $this->get('newlevel1/level2');
$this->assertEquals($response->getStatusCode(),301 ); $this->assertEquals($response->getStatusCode(),301 );
$this->assertEquals( $this->assertEquals(
@ -104,7 +104,7 @@ class ModelAsControllerTest extends FunctionalTest {
$response->getHeader('Location') $response->getHeader('Location')
); );
// check third level URLSegment // check third level URLSegment
$response = $this->get('newlevel1/newlevel2/level3'); $response = $this->get('newlevel1/newlevel2/level3');
$this->assertEquals($response->getStatusCode(), 301); $this->assertEquals($response->getStatusCode(), 301);
$this->assertEquals( $this->assertEquals(
@ -199,7 +199,7 @@ class ModelAsControllerTest extends FunctionalTest {
$response = $this->get('newlevel1/otherparent'); $response = $this->get('newlevel1/otherparent');
$this->assertEquals( $this->assertEquals(
$response->getStatusCode(), $response->getStatusCode(),
404, 404,
'Requesting an unrelated page on a renamed parent should be interpreted as a missing action, not a redirect' '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 * NOTE: This test requires nested_urls
* *
*/ */
public function testRedirectsNestedRenamedPagesWithGetParameters() { public function testRedirectsNestedRenamedPagesWithGetParameters() {
$this->generateNestedPagesFixture(); $this->generateNestedPagesFixture();
// check third level URLSegment // check third level URLSegment
$response = $this->get('newlevel1/newlevel2/level3/?foo=bar&test=test'); $response = $this->get('newlevel1/newlevel2/level3/?foo=bar&test=test');
$this->assertEquals($response->getStatusCode(), 301); $this->assertEquals($response->getStatusCode(), 301);
$this->assertEquals( $this->assertEquals(
@ -225,7 +225,7 @@ class ModelAsControllerTest extends FunctionalTest {
/** /**
* *
* NOTE: This test requires nested_urls * NOTE: This test requires nested_urls
* *
*/ */
public function testDoesntRedirectToNestedRenamedPageWhenNewExists() { public function testDoesntRedirectToNestedRenamedPageWhenNewExists() {
$this->generateNestedPagesFixture(); $this->generateNestedPagesFixture();
@ -239,14 +239,14 @@ class ModelAsControllerTest extends FunctionalTest {
$response = $this->get('level1'); $response = $this->get('level1');
$this->assertEquals( $this->assertEquals(
$response->getStatusCode(), $response->getStatusCode(),
200 200
); );
$response = $this->get('level1/newlevel2'); $response = $this->get('level1/newlevel2');
$this->assertEquals( $this->assertEquals(
$response->getStatusCode(), $response->getStatusCode(),
404, 404,
'The old newlevel2/ URLSegment is checked as an action on the new page, which shouldnt exist.' '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 * NOTE: This test requires nested_urls
* *
*/ */
public function testFindOldPage(){ public function testFindOldPage(){
$page = new Page(); $page = new Page();

View File

@ -15,4 +15,4 @@ Page:
page3: page3:
Title: Third Page Title: Third Page
URLSegment: page3 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: ErrorPage:
404: 404:
Title: Page Not Found Title: Page Not Found
URLSegment: page-not-found URLSegment: page-not-found
Content: My error page body Content: My error page body
ErrorCode: 404 ErrorCode: 404
403: 403:
Title: Permission Failure Title: Permission Failure
URLSegment: permission-denied URLSegment: permission-denied
Content: You do not have permission to view this page Content: You do not have permission to view this page
ErrorCode: 403 ErrorCode: 403

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
Page: Page:
page1: page1:
ID: 1 ID: 1
Title: page1 Title: page1
@ -13,5 +13,5 @@ Page:
URLSegment: page3 URLSegment: page3
Content: '<p><a href="[sitetree_link,id=1]">Testing page 1 link</a></p>' Content: '<p><a href="[sitetree_link,id=1]">Testing page 1 link</a></p>'
LinkTracking: =>Page.page1 LinkTracking: =>Page.page1

View File

@ -107,7 +107,7 @@ class SiteTreeBrokenLinksTest extends SapphireTest {
// Confirm no broken link // Confirm no broken link
$this->assertEquals(0, (int)$linkSrc->HasBrokenLink); $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()); WHERE \"ID\" = $linkSrc->ID")->value());
// Delete page from draft // Delete page from draft
@ -119,7 +119,7 @@ class SiteTreeBrokenLinksTest extends SapphireTest {
$linkSrc = $this->objFromFixture('Page', 'content'); $linkSrc = $this->objFromFixture('Page', 'content');
$this->assertEquals(1, (int)$linkSrc->HasBrokenLink); $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()); WHERE \"ID\" = $linkSrc->ID")->value());
// Delete from live // Delete from live
@ -131,7 +131,7 @@ class SiteTreeBrokenLinksTest extends SapphireTest {
$linkSrc = $this->objFromFixture('Page', 'content'); $linkSrc = $this->objFromFixture('Page', 'content');
$this->assertEquals(1, (int)$linkSrc->HasBrokenLink); $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()); 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->Content = "<p><a href=\"[sitetree_link,id=$linkDest->ID]\">about us</a></p>";
$linkSrc->write(); $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(); $linkSrc->doPublish();
// Verify that the link isn't broken on draft but is broken on published // Verify that the link isn't broken on draft but is broken on published
$this->assertEquals(0, (int)$linkSrc->HasBrokenLink); $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()); WHERE \"ID\" = $linkSrc->ID")->value());
} }

View File

@ -24,4 +24,4 @@ File:
ErrorPage: ErrorPage:
404: 404:
Title: Page not Found 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-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=\"[sitetree_link,id=$page->ID]#yes-id-anchor\">link</a>"));
$this->assertFalse($this->isBroken("<a href=\"[file_link,id=$file->ID]\">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) { protected function highlight($content) {

View File

@ -2,7 +2,7 @@
/** /**
* @package cms * @package cms
* @subpackage tests * @subpackage tests
* *
* @todo Test canAddChildren() * @todo Test canAddChildren()
* @todo Test canCreate() * @todo Test canCreate()
*/ */
@ -40,10 +40,14 @@ class SiteTreePermissionsTest extends FunctionalTest {
$this->assertEquals($response->getStatusCode(), '404'); $this->assertEquals($response->getStatusCode(), '404');
// should be prompted for a login // 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->assertEquals($response->getStatusCode(), '302');
$this->assertContains( $this->assertContains(
Config::inst()->get('Security', 'login_url'), Config::inst()->get('Security', 'login_url'),
$response->getHeader('Location') $response->getHeader('Location')
); );

View File

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

View File

@ -413,7 +413,7 @@ class SiteTreeTest extends SapphireTest {
Versioned::reading_stage('Stage'); Versioned::reading_stage('Stage');
Config::inst()->update('SiteTree', 'enforce_strict_hierarchy', true); Config::inst()->update('SiteTree', 'enforce_strict_hierarchy', true);
} }
public function testDeleteFromLiveOperatesRecursivelyStrict() { public function testDeleteFromLiveOperatesRecursivelyStrict() {
$this->logInWithPermission('ADMIN'); $this->logInWithPermission('ADMIN');
@ -1192,7 +1192,7 @@ class SiteTreeTest_Conflicted_Controller extends Page_Controller implements Test
return parent::hasActionTemplate($template); return parent::hasActionTemplate($template);
} }
} }
} }
class SiteTreeTest_NullHtmlCleaner extends HTMLCleaner { class SiteTreeTest_NullHtmlCleaner extends HTMLCleaner {
@ -1210,7 +1210,7 @@ class SiteTreeTest_ClassA extends Page implements TestOnly {
class SiteTreeTest_ClassB extends Page implements TestOnly { class SiteTreeTest_ClassB extends Page implements TestOnly {
// Also allowed subclasses // Also allowed subclasses
private static $allowed_children = array('SiteTreeTest_ClassC'); private static $allowed_children = array('SiteTreeTest_ClassC');
} }
class SiteTreeTest_ClassC extends Page implements TestOnly { class SiteTreeTest_ClassC extends Page implements TestOnly {

View File

@ -1,7 +1,9 @@
<?php <?php
class VirtualPageTest extends SapphireTest { class VirtualPageTest extends FunctionalTest {
protected static $fixture_file = 'VirtualPageTest.yml'; protected static $fixture_file = 'VirtualPageTest.yml';
protected static $use_draft_site = false;
protected $autoFollowRedirection = false;
protected $extraDataObjects = array( protected $extraDataObjects = array(
'VirtualPageTest_ClassA', 'VirtualPageTest_ClassA',
@ -25,6 +27,9 @@ class VirtualPageTest extends SapphireTest {
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
// Ensure we always have permission to save/publish
$this->logInWithPermission("ADMIN");
$this->origInitiallyCopiedFields = VirtualPage::config()->initially_copied_fields; $this->origInitiallyCopiedFields = VirtualPage::config()->initially_copied_fields;
Config::inst()->remove('VirtualPage', 'initially_copied_fields'); Config::inst()->remove('VirtualPage', 'initially_copied_fields');
VirtualPage::config()->initially_copied_fields = array_merge( 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\" $this->assertEquals($vp->ID, DB::query("SELECT \"RecordID\" FROM \"SiteTree_versions\"
WHERE \"RecordID\" = $vp->ID AND \"Title\" = 'T1'")->value()); 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()); WHERE \"RecordID\" = $vp->ID AND \"Title\" = 'T2'")->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 \"Version\" = $vp->Version")->value()); WHERE \"RecordID\" = $vp->ID AND \"Version\" = $vp->Version")->value());
@ -285,12 +290,12 @@ class VirtualPageTest extends SapphireTest {
// version // version
$liveVersion = DB::query("SELECT \"Version\" FROM \"SiteTree_Live\" WHERE \"ID\" = $vp->ID")->value(); $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()); WHERE \"ID\" = $vp->ID")->value());
// SiteTree_Live.Version should reference a legal entry in SiteTree_versions for the // SiteTree_Live.Version should reference a legal entry in SiteTree_versions for the
// virtual page // 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()); WHERE \"RecordID\" = $vp->ID AND \"Version\" = $liveVersion")->value());
} }
@ -421,12 +426,12 @@ class VirtualPageTest extends SapphireTest {
$virtual->copyFrom($original); $virtual->copyFrom($original);
// Using getField() to avoid side effects from an overloaded __get() // Using getField() to avoid side effects from an overloaded __get()
$this->assertEquals( $this->assertEquals(
'original', 'original',
$virtual->getField('MyInitiallyCopiedField'), $virtual->getField('MyInitiallyCopiedField'),
'Fields listed in $initially_copied_fields are copied on first copyFrom() invocation' 'Fields listed in $initially_copied_fields are copied on first copyFrom() invocation'
); );
$this->assertEquals( $this->assertEquals(
'original', 'original',
$virtual->getField('MyVirtualField'), $virtual->getField('MyVirtualField'),
'Fields not listed in $initially_copied_fields are copied in copyFrom()' 'Fields not listed in $initially_copied_fields are copied in copyFrom()'
); );
@ -439,7 +444,7 @@ class VirtualPageTest extends SapphireTest {
$original->write(); $original->write();
$virtual->copyFrom($original); $virtual->copyFrom($original);
$this->assertEquals( $this->assertEquals(
'original', 'original',
$virtual->MyInitiallyCopiedField, $virtual->MyInitiallyCopiedField,
'Fields listed in $initially_copied_fields are not copied on subsequent copyFrom() invocations' '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->Title = 'changed 1';
$virtual->writeWithoutVersion(); $virtual->writeWithoutVersion();
$this->assertEquals( $this->assertEquals(
$virtual->Version, $virtual->Version,
$virtualVersion, $virtualVersion,
'writeWithoutVersion() on VirtualPage doesnt increment version' 'writeWithoutVersion() on VirtualPage doesnt increment version'
); );
@ -476,8 +481,8 @@ class VirtualPageTest extends SapphireTest {
DataObject::flush_and_destroy_cache(); DataObject::flush_and_destroy_cache();
$virtual = DataObject::get_by_id('VirtualPage', $virtual->ID, false); $virtual = DataObject::get_by_id('VirtualPage', $virtual->ID, false);
$this->assertEquals( $this->assertEquals(
$virtual->Version, $virtual->Version,
$virtualVersion, $virtualVersion,
'writeWithoutVersion() on original page doesnt increment version on related VirtualPage' 'writeWithoutVersion() on original page doesnt increment version on related VirtualPage'
); );
@ -486,8 +491,8 @@ class VirtualPageTest extends SapphireTest {
DataObject::flush_and_destroy_cache(); DataObject::flush_and_destroy_cache();
$virtual = DataObject::get_by_id('VirtualPage', $virtual->ID, false); $virtual = DataObject::get_by_id('VirtualPage', $virtual->ID, false);
$this->assertGreaterThan( $this->assertGreaterThan(
$virtualVersion, $virtualVersion,
$virtual->Version, $virtual->Version,
'write() on original page does increment version on related VirtualPage' 'write() on original page does increment version on related VirtualPage'
); );
} }
@ -499,7 +504,7 @@ class VirtualPageTest extends SapphireTest {
$notRootPage = new VirtualPageTest_NotRoot(); $notRootPage = new VirtualPageTest_NotRoot();
// we don't want the original on root, but rather the VirtualPage pointing to it // 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(); $notRootPage->write();
$virtual = new VirtualPage(); $virtual = new VirtualPage();
@ -516,7 +521,7 @@ class VirtualPageTest extends SapphireTest {
} catch(ValidationException $e) { } catch(ValidationException $e) {
$this->assertContains('is not allowed on the root level', $e->getMessage()); $this->assertContains('is not allowed on the root level', $e->getMessage());
$isDetected = true; $isDetected = true;
} }
if(!$isDetected) $this->fail('Fails validation with $can_be_root=false'); if(!$isDetected) $this->fail('Fails validation with $can_be_root=false');
} }
@ -644,10 +649,28 @@ class VirtualPageTest extends SapphireTest {
} catch(ValidationException $e) { } catch(ValidationException $e) {
$this->assertContains('not allowed as child of this parent page', $e->getMessage()); $this->assertContains('not allowed as child of this parent page', $e->getMessage());
$isDetected = true; $isDetected = true;
} }
if(!$isDetected) $this->fail("Shouldn't be allowed to write a VirtualPage that links to a disallowed child"); 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 { 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 { 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 { class VirtualPageTest_ClassC extends Page implements TestOnly {

View File

@ -37,15 +37,13 @@ class CmsReportsTest extends SapphireTest {
$class = get_class($report); $class = get_class($report);
// ASSERT that the "draft" report is returning the correct results. // ASSERT that the "draft" report is returning the correct results.
$parameters = array('CheckSite' => 'Draft');
$results = count($report->sourceRecords(array())) > 0; $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."); $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. // ASSERT that the "published" report is returning the correct results.
$parameters = array('CheckSite' => 'Published', 'OnLive' => 1);
$results = count($report->sourceRecords(array( $results = count($report->sourceRecords($parameters, null, null)) > 0;
'OnLive' => 1
))) > 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."); $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(); $reports = SS_Report::get_reports();
$brokenLinksReport = null; $brokenLinksReport = null;
foreach($reports as $report) { foreach($reports as $report) {
if($report instanceof SideReport_BrokenLinks) { if($report instanceof BrokenLinksReport) {
$brokenLinksReport = $report; $brokenLinksReport = $report;
break; break;
} }
} }
// Determine that the report exists, otherwise it has been excluded. // Determine that the report exists, otherwise it has been excluded.
if(!$brokenLinksReport){
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);
} }
// 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(); $reports = SS_Report::get_reports();
$brokenFilesReport = null; $brokenFilesReport = null;
foreach($reports as $report) { foreach($reports as $report) {
if($report instanceof SideReport_BrokenFiles) { if($report instanceof BrokenFilesReport) {
$brokenFilesReport = $report; $brokenFilesReport = $report;
break; break;
} }
} }
// Determine that the report exists, otherwise it has been excluded. // Determine that the report exists, otherwise it has been excluded.
if(!$brokenFilesReport){
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);
} }
// 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(); $reports = SS_Report::get_reports();
$brokenVirtualPagesReport = null; $brokenVirtualPagesReport = null;
foreach($reports as $report) { foreach($reports as $report) {
if($report instanceof SideReport_BrokenVirtualPages) { if($report instanceof BrokenVirtualPagesReport) {
$brokenVirtualPagesReport = $report; $brokenVirtualPagesReport = $report;
break; break;
} }
} }
// Determine that the report exists, otherwise it has been excluded. // Determine that the report exists, otherwise it has been excluded.
if(!$brokenVirtualPagesReport){
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);
} }
// 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(); $reports = SS_Report::get_reports();
$brokenRedirectorPagesReport = null; $brokenRedirectorPagesReport = null;
foreach($reports as $report) { foreach($reports as $report) {
if($report instanceof SideReport_BrokenRedirectorPages) { if($report instanceof BrokenRedirectorPagesReport) {
$brokenRedirectorPagesReport = $report; $brokenRedirectorPagesReport = $report;
break; break;
} }
} }
// Determine that the report exists, otherwise it has been excluded. // Determine that the report exists, otherwise it has been excluded.
if(!$brokenRedirectorPagesReport){
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);
} }
// 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: after:
Title: after Title: after
before: before:
Title: before Title: before

View File

@ -2,10 +2,10 @@
/** /**
* @package cms * @package cms
* @subpackage testing * @subpackage testing
* *
* @todo Fix unpublished pages check in testPublishedPagesMatchedByTitle() * @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 * @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... * Because this manipulates the test database in severe ways, I've renamed the test to force it to run last...
*/ */
class ZZZSearchFormTest extends FunctionalTest { class ZZZSearchFormTest extends FunctionalTest {

View File

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

View File

@ -58,7 +58,7 @@ class MigrateSiteTreeLinkingTaskTest extends SapphireTest {
'HTML URLSegment links are rewritten.' 'HTML URLSegment links are rewritten.'
); );
$this->assertEquals ( $this->assertEquals (
$aboutContent, $aboutContent,
DataObject::get_by_id('SiteTree', $aboutID)->Content DataObject::get_by_id('SiteTree', $aboutID)->Content
); );
$this->assertEquals ( $this->assertEquals (

View File

@ -14,7 +14,7 @@
* parent2 * parent2
* child2_1_published_orphaned // is orphaned because parent is not published * child2_1_published_orphaned // is orphaned because parent is not published
* </code> * </code>
* *
* <h2>Cleaned up tree</h2> * <h2>Cleaned up tree</h2>
* <code> * <code>
* parent1_published * parent1_published
@ -24,9 +24,9 @@
* child2_1_published_orphaned * child2_1_published_orphaned
* parent2 * parent2
* </code> * </code>
* *
* @author Ingo Schommer (<firstname>@silverstripe.com), SilverStripe Ltd. * @author Ingo Schommer (<firstname>@silverstripe.com), SilverStripe Ltd.
* *
* @package cms * @package cms
* @subpackage tests * @subpackage tests
*/ */

View File

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