Merge branch '3'

This commit is contained in:
Daniel Hensby 2016-08-22 16:39:11 +01:00
commit 1d1227cc9a
No known key found for this signature in database
GPG Key ID: B00D1E9767F0B06E
65 changed files with 1878 additions and 253 deletions

View File

@ -433,6 +433,7 @@ class ArrayList extends ViewableData implements SS_List, SS_Filterable, SS_Sorta
// This the main sorting algorithm that supports infinite sorting params
$multisortArgs = array();
$values = array();
$firstRun = true;
foreach($columnsToSort as $column => $direction) {
// The reason these are added to columns is of the references, otherwise when the foreach
// is done, all $values and $direction look the same
@ -440,7 +441,7 @@ class ArrayList extends ViewableData implements SS_List, SS_Filterable, SS_Sorta
$sortDirection[$column] = $direction;
// We need to subtract every value into a temporary array for sorting
foreach($this->items as $index => $item) {
$values[$column][] = $this->extractValue($item, $column);
$values[$column][] = strtolower($this->extractValue($item, $column));
}
// PHP 5.3 requires below arguments to be reference when using array_multisort together
// with call_user_func_array
@ -448,6 +449,10 @@ class ArrayList extends ViewableData implements SS_List, SS_Filterable, SS_Sorta
$multisortArgs[] = &$values[$column];
// First argument is the direction to be sorted,
$multisortArgs[] = &$sortDirection[$column];
if ($firstRun) {
$multisortArgs[] = defined('SORT_NATURAL') ? SORT_NATURAL : SORT_STRING;
}
$firstRun = false;
}
$multisortArgs[] = &$originalKeys;

View File

@ -123,7 +123,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* alterDataQuery
*
* @param callable $callback
* @return DataList
* @return static
* @throws Exception
*/
public function alterDataQuery($callback) {
@ -157,7 +157,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* Return a new DataList instance with the underlying {@link DataQuery} object changed
*
* @param DataQuery $dataQuery
* @return DataList
* @return static
*/
public function setDataQuery(DataQuery $dataQuery) {
$clone = clone $this;
@ -206,7 +206,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
*
* @param string|array|SQLConditionGroup $filter Predicate(s) to set, as escaped SQL statements or
* paramaterised queries
* @return DataList
* @return static
*/
public function where($filter) {
return $this->alterDataQuery(function(DataQuery $query) use ($filter){
@ -224,7 +224,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
*
* @param string|array|SQLConditionGroup $filter Predicate(s) to set, as escaped SQL statements or
* paramaterised queries
* @return DataList
* @return static
*/
public function whereAny($filter) {
return $this->alterDataQuery(function(DataQuery $query) use ($filter){
@ -245,12 +245,24 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
}
/**
* Returns true if this DataList can be filtered by the given field.
*
* @param string $fieldName
* @param string $fieldName (May be a related field in dot notation like Member.FirstName)
* @return boolean
*/
public function canFilterBy($fieldName) {
if($t = singleton($this->dataClass)->hasDatabaseField($fieldName)){
$model = singleton($this->dataClass);
$relations = explode(".", $fieldName);
// First validate the relationships
$fieldName = array_pop($relations);
foreach ($relations as $r) {
$relationClass = $model->getRelationClass($r);
if (!$relationClass) return false;
$model = singleton($relationClass);
if (!$model) return false;
}
// Then check field
if ($model->hasDatabaseField($fieldName)){
return true;
}
return false;
@ -262,7 +274,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
*
* @param int $limit
* @param int $offset
* @return DataList
* @return static
*/
public function limit($limit, $offset = 0) {
return $this->alterDataQuery(function(DataQuery $query) use ($limit, $offset){
@ -274,7 +286,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* Return a new DataList instance with distinct records or not
*
* @param bool $value
* @return DataList
* @return static
*/
public function distinct($value) {
return $this->alterDataQuery(function(DataQuery $query) use ($value){
@ -294,7 +306,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* @example $list = $list->sort(array('Name'=>'ASC', 'Age'=>'DESC'));
*
* @param String|array Escaped SQL statement. If passed as array, all keys and values are assumed to be escaped.
* @return DataList
* @return static
*/
public function sort() {
$count = func_num_args();
@ -367,7 +379,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* @todo extract the sql from $customQuery into a SQLGenerator class
*
* @param string|array Escaped SQL statement. If passed as array, all keys and values will be escaped internally
* @return DataList
* @return $this
*/
public function filter() {
// Validate and process arguments
@ -386,7 +398,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* Return a new instance of the list with an added filter
*
* @param array $filterArray
* @return DataList
* @return $this
*/
public function addFilter($filterArray) {
$list = $this;
@ -424,7 +436,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* @todo extract the sql from this method into a SQLGenerator class
*
* @param string|array See {@link filter()}
* @return DataList
* @return static
*/
public function filterAny() {
$numberFuncArgs = count(func_get_args());
@ -498,7 +510,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* @param string &$columnName Quoted column name
* @param bool $linearOnly Set to true to restrict to linear relations only. Set this
* if this relation will be used for sorting, and should not include duplicate rows.
* @return DataList DataList with this relation applied
* @return $this DataList with this relation applied
*/
public function applyRelation($field, &$columnName = null, $linearOnly = false) {
// If field is invalid, return it without modification
@ -544,7 +556,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* @param string $filter - example StartsWith, relates to a filtercontext
* @param array $modifiers - Modifiers to pass to the filter, ie not,nocase
* @param string $value - the value that the filtercontext will use for matching
* @return DataList
* @return static
*/
private function applyFilterContext($field, $filter, $modifiers, $value) {
if($filter) {
@ -578,7 +590,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* @todo extract the sql from this method into a SQLGenerator class
*
* @param string|array Escaped SQL statement. If passed as array, all keys and values will be escaped internally
* @return DataList
* @return $this
*/
public function exclude() {
$numberFuncArgs = count(func_get_args());
@ -622,7 +634,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* The $list passed needs to contain the same dataclass as $this
*
* @param DataList $list
* @return DataList
* @return static
* @throws BadMethodCallException
*/
public function subtract(DataList $list) {
@ -645,7 +657,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* will cause the query to appear first. The default is 20, and joins created automatically by the
* ORM have a value of 10.
* @param array $parameters Any additional parameters if the join is a parameterised subquery
* @return DataList
* @return static
*/
public function innerJoin($table, $onClause, $alias = null, $order = 20, $parameters = array()) {
return $this->alterDataQuery(function(DataQuery $query) use ($table, $onClause, $alias, $order, $parameters){
@ -663,7 +675,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* will cause the query to appear first. The default is 20, and joins created automatically by the
* ORM have a value of 10.
* @param array $parameters Any additional parameters if the join is a parameterised subquery
* @return DataList
* @return static
*/
public function leftJoin($table, $onClause, $alias = null, $order = 20, $parameters = array()) {
return $this->alterDataQuery(function(DataQuery $query) use ($table, $onClause, $alias, $order, $parameters){
@ -708,7 +720,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* Walks the list using the specified callback
*
* @param callable $callback
* @return DataList
* @return $this
*/
public function each($callback) {
foreach($this as $row) {
@ -881,7 +893,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* Restrict the columns to fetch into this DataList
*
* @param array $queriedColumns
* @return DataList
* @return static
*/
public function setQueriedColumns($queriedColumns) {
return $this->alterDataQuery(function(DataQuery $query) use ($queriedColumns){
@ -893,7 +905,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* Filter this list to only contain the given Primary IDs
*
* @param array $ids Array of integers
* @return DataList
* @return $this
*/
public function byIDs($ids) {
return $this->filter('ID', $ids);
@ -987,7 +999,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* Add a number of items to the component set.
*
* @param array $items Items to add, as either DataObjects or IDs.
* @return DataList
* @return $this
*/
public function addMany($items) {
foreach($items as $item) {
@ -1000,7 +1012,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* Remove the items from this list with the given IDs
*
* @param array $idList
* @return DataList
* @return $this
*/
public function removeMany($idList) {
foreach($idList as $id) {
@ -1013,7 +1025,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* Remove every element in this DataList matching the given $filter.
*
* @param string $filter - a sql type where filter
* @return DataList
* @return $this
*/
public function removeByFilter($filter) {
foreach($this->where($filter) as $item) {
@ -1025,7 +1037,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
/**
* Remove every element in this DataList.
*
* @return DataList
* @return $this
*/
public function removeAll() {
foreach($this as $item) {
@ -1085,7 +1097,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
/**
* Reverses a list of items.
*
* @return DataList
* @return static
*/
public function reverse() {
return $this->alterDataQuery(function(DataQuery $query){

View File

@ -12,6 +12,9 @@ use InvalidArgumentException;
*/
class HasManyList extends RelationList {
/**
* @var string
*/
protected $foreignKey;
/**
@ -38,6 +41,10 @@ class HasManyList extends RelationList {
return $this->foreignKey;
}
/**
* @param null|int $id
* @return array
*/
protected function foreignIDFilter($id = null) {
if ($id === null) {
$id = $this->getForeignID();

View File

@ -158,6 +158,14 @@ class ManyManyList extends RelationList {
return $dataObject;
}
/**
* Return a filter expression for when getting the contents of the
* relationship for some foreign ID
*
* @param int|null $id
*
* @return array
*/
protected function foreignIDFilter($id = null) {
if ($id === null) {
$id = $this->getForeignID();
@ -179,7 +187,7 @@ class ManyManyList extends RelationList {
* entries. However some subclasses of ManyManyList (Member_GroupSet) modify foreignIDFilter to
* include additional calculated entries, so we need different filters when reading and when writing
*
* @param array|integer $id (optional) An ID or an array of IDs - if not provided, will use the current ids
* @param array|int|null $id (optional) An ID or an array of IDs - if not provided, will use the current ids
* as per getForeignID
* @return array Condition In array(SQL => parameters format)
*/
@ -191,7 +199,10 @@ class ManyManyList extends RelationList {
* Add an item to this many_many relationship
* Does so by adding an entry to the joinTable.
*
* @param mixed $item
* @throws InvalidArgumentException
* @throws Exception
*
* @param DataObject|int $item
* @param array $extraFields A map of additional columns to insert into the joinTable.
* Column names should be ANSI quoted.
* @throws Exception

View File

@ -14,6 +14,9 @@ use Exception;
*/
abstract class RelationList extends DataList implements Relation {
/**
* @return string|null
*/
public function getForeignID() {
return $this->dataQuery->getQueryParam('Foreign.ID');
}
@ -37,6 +40,7 @@ abstract class RelationList extends DataList implements Relation {
* the given foreign ID.
*
* @param int|array $id An ID or an array of IDs.
*
* @return static
*/
public function forForeignID($id) {
@ -46,7 +50,8 @@ abstract class RelationList extends DataList implements Relation {
// Calculate the new filter
$filter = $this->foreignIDFilter($id);
$list = $this->alterDataQuery(function($query, $list) use ($id, $filter){
$list = $this->alterDataQuery(function($query) use ($id, $filter){
/** @var DataQuery $query */
// Check if there is an existing filter, remove if there is
$currentFilter = $query->getQueryParam('Foreign.Filter');
if($currentFilter) {

View File

@ -51,7 +51,7 @@ class CMSMemberLoginForm extends LoginForm {
);
if(Security::config()->autologin_enabled) {
$fields->push(new CheckboxField(
$fields->push(CheckboxField::create(
"Remember",
_t('Member.REMEMBERME', "Remember me next time?")
));

View File

@ -111,16 +111,19 @@ class ChangePasswordForm extends Form {
else if($data['NewPassword1'] == $data['NewPassword2']) {
$isValid = $member->changePassword($data['NewPassword1']);
if($isValid->valid()) {
$member->logIn();
// TODO Add confirmation message to login redirect
Session::clear('AutoLoginHash');
// Clear locked out status
$member->LockedOutUntil = null;
$member->FailedLoginCount = null;
$member->write();
if ($member->canLogIn()->valid()) {
$member->logIn();
}
// TODO Add confirmation message to login redirect
Session::clear('AutoLoginHash');
if (!empty($_REQUEST['BackURL'])
// absolute redirection URLs may cause spoofing
&& Director::is_site_url($_REQUEST['BackURL'])

View File

@ -131,12 +131,24 @@ class Member extends DataObject implements TemplateGlobalProvider {
'Email',
);
/**
* @config
* @var array
*/
private static $summary_fields = array(
'FirstName',
'Surname',
'Email',
);
/**
* @config
* @var array
*/
private static $casting = array(
'Name' => 'Varchar',
);
/**
* Internal-use only fields
*
@ -505,24 +517,39 @@ class Member extends DataObject implements TemplateGlobalProvider {
// This lets apache rules detect whether the user has logged in
if(Member::config()->login_marker_cookie) Cookie::set(Member::config()->login_marker_cookie, 1, 0);
if (Security::config()->autologin_enabled) {
// Cleans up any potential previous hash for this member on this device
if ($alcDevice = Cookie::get('alc_device')) {
RememberLoginHash::get()->filter('DeviceID', $alcDevice)->removeAll();
}
if ($remember) {
$rememberLoginHash = RememberLoginHash::generate($this);
$tokenExpiryDays = Config::inst()->get('SilverStripe\\Security\\RememberLoginHash', 'token_expiry_days');
$deviceExpiryDays = Config::inst()->get('SilverStripe\\Security\\RememberLoginHash', 'device_expiry_days');
Cookie::set('alc_enc', $this->ID . ':' . $rememberLoginHash->getToken(),
$tokenExpiryDays, null, null, null, true);
$tokenExpiryDays = Config::inst()->get(
'SilverStripe\\Security\\RememberLoginHash',
'token_expiry_days'
);
$deviceExpiryDays = Config::inst()->get(
'SilverStripe\\Security\\RememberLoginHash',
'device_expiry_days'
);
Cookie::set(
'alc_enc',
$this->ID . ':' . $rememberLoginHash->getToken(),
$tokenExpiryDays,
null,
null,
null,
true
);
Cookie::set('alc_device', $rememberLoginHash->DeviceID, $deviceExpiryDays, null, null, null, true);
} else {
}
else {
Cookie::set('alc_enc', null);
Cookie::set('alc_device', null);
Cookie::force_expiry('alc_enc');
Cookie::force_expiry('alc_device');
}
}
// Clear the incorrect log-in count
$this->registerSuccessfulLogin();
@ -580,7 +607,8 @@ class Member extends DataObject implements TemplateGlobalProvider {
self::$_already_tried_to_auto_log_in = true;
}
if(strpos(Cookie::get('alc_enc'), ':') === false
if(!Security::config()->autologin_enabled
|| strpos(Cookie::get('alc_enc'), ':') === false
|| Session::get("loggedInAs")
|| !Security::database_is_ready()
) {
@ -905,7 +933,7 @@ class Member extends DataObject implements TemplateGlobalProvider {
} else {
$random = rand();
$string = md5($random);
$output = substr($string, 0, 6);
$output = substr($string, 0, 8);
return $output;
}
}
@ -964,6 +992,9 @@ class Member extends DataObject implements TemplateGlobalProvider {
// Note that this only works with cleartext passwords, as we can't rehash
// existing passwords.
if((!$this->ID && $this->Password) || $this->isChanged('Password')) {
//reset salt so that it gets regenerated - this will invalidate any persistant login cookies
// or other information encrypted with this Member's settings (see self::encryptWithUserSettings)
$this->Salt = '';
// Password was changed: encrypt the password according the settings
$encryption_details = Security::encrypt_password(
$this->Password, // this is assumed to be cleartext

View File

@ -372,10 +372,8 @@ class Security extends Controller implements TemplateGlobalProvider {
if(in_array($authenticator, $authenticators)) {
return $authenticator;
}
} else {
return Authenticator::get_default_authenticator();
}
return Authenticator::get_default_authenticator();
}
/**

View File

@ -6,25 +6,25 @@ if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') {
}
} else {
ss.i18n.addDictionary('fa_IR', {
"CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nAre you sure you want to archive these pages?\n\nThese pages and all of their children pages will be unpublished and sent to the archive.",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?",
"CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?",
"CMSMAIN.BATCH_ARCHIVE_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\n\nآیا از این‌که می‌خواهید بایگانی شوند اطمینان دارید؟\n\nتمامی این صفحات و تمامی صفحات فرزند آن‌ها عدم انتشار می‌شوند و به بایگانی ارسال می‌گردند.",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید آن‌ها از لایو را حذف نمایید؟",
"CMSMAIN.BATCH_DELETE_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید آن‌ها را حذف نمایید؟",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید آن‌ها را منتشر نمایید؟",
"CMSMAIN.BATCH_RESTORE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to restore to stage?\n\nChildren of archived pages will be restored to the root level, unless those pages are also being restored.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "شما {num} صفحه را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید انتشار آن‌ها را لغو نمایید",
"CMSMAIN.SELECTONEPAGE": "لطفاً حداقل ۱ صفحه را انتخاب نمایید.",
"Campaigns.ADDCAMPAIGN": "Add campaign",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s items",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s item",
"Campaigns.PUBLISHCAMPAIGN": "Publish campaign",
"Campaigns.REVERTCAMPAIGN": "Revert",
"Campaigns.ADDCAMPAIGN": "افزودن کمپین",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s آیتم",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s آیتم",
"Campaigns.PUBLISHCAMPAIGN": "انتشار کمپین",
"Campaigns.REVERTCAMPAIGN": "بازگرداندن",
"LeftAndMain.CONFIRMUNSAVED": "Are you sure you want to navigate away from this page?\n\nWARNING: Your changes have not been saved.\n\nPress OK to continue, or Cancel to stay on the current page.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "WARNING: Your changes have not been saved.",
"LeftAndMain.PAGEWASDELETED": "This page was deleted. To edit a page, select it from the left.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "هشدار: تغییرات شما ذخیره نشده‌اند.",
"LeftAndMain.PAGEWASDELETED": "این صفحه حذف شده است. برای ویرایش یک صفحه، آن‌را از لیست چپ انتخاب نمایید.",
"ModelAdmin.DELETED": "حذف شده",
"ModelAdmin.REALLYDELETE": "Do you really want to delete?",
"ModelAdmin.REALLYDELETE": "آیا واقعاً می‌خواهید حذف نمایید؟",
"ModelAdmin.SAVED": "ذخیره شده",
"ModelAdmin.VALIDATIONERROR": "خطای اعتبار‌سنجی",
"SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Do you really want to delete %s groups?"
"SecurityAdmin.BATCHACTIONSDELETECONFIRM": "آیا واقعاً می‌خواهید %s گروه را حذف نمایید؟"
});
}

View File

@ -13,11 +13,11 @@ if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') {
"CMSMAIN.BATCH_RESTORE_PROMPT": "Hai selezionato {num} pagina(e).\n\nSei sicuri di volerle ripristinare?\n\nI figli delle pagine archiviate saranno ripristinati nel primo livello, a meno anche i genitori non vengano ripristinati.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Hai {num} pagine selezionate.\n\nVuoi veramente nasconderle?",
"CMSMAIN.SELECTONEPAGE": "Per favore selezionare almeno una pagina",
"Campaigns.ADDCAMPAIGN": "Add campaign",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s items",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s item",
"Campaigns.PUBLISHCAMPAIGN": "Publish campaign",
"Campaigns.REVERTCAMPAIGN": "Revert",
"Campaigns.ADDCAMPAIGN": "Aggiungi campagna",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s elementi",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s elemento",
"Campaigns.PUBLISHCAMPAIGN": "Pubblica campagna",
"Campaigns.REVERTCAMPAIGN": "Ripristina",
"LeftAndMain.CONFIRMUNSAVED": "Siete sicuri di voler uscire da questa pagina?\n\nATTENZIONE: I vostri cambiamenti non sono stati salvati.\n\nCliccare OK per continuare, o su Annulla per rimanere sulla pagina corrente.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "ATTENZIONE: le tue modifiche non sono state salvate.",
"LeftAndMain.PAGEWASDELETED": "Questa pagina è stata eliminata. Per modificare questa pagine, selezionarla a sinistra.",

View File

@ -6,18 +6,18 @@ if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') {
}
} else {
ss.i18n.addDictionary('ru', {
"CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nAre you sure you want to archive these pages?\n\nThese pages and all of their children pages will be unpublished and sent to the archive.",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?",
"CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?",
"CMSMAIN.BATCH_RESTORE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to restore to stage?\n\nChildren of archived pages will be restored to the root level, unless those pages are also being restored.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish",
"CMSMAIN.SELECTONEPAGE": "Please select at least one page",
"Campaigns.ADDCAMPAIGN": "Add campaign",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s items",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s item",
"Campaigns.PUBLISHCAMPAIGN": "Publish campaign",
"Campaigns.REVERTCAMPAIGN": "Revert",
"CMSMAIN.BATCH_ARCHIVE_PROMPT": "Вы выбрали {num} страниц(у)\nВы уверены что хотите отправить их в архив?\n\nПубликации этих страниц и их под-страниц будут отменены и отправлены в архив. ",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите отменить публикацию этих страниц?",
"CMSMAIN.BATCH_DELETE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите их удалить?",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите их опубликовать?",
"CMSMAIN.BATCH_RESTORE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите восстановить эти страницы в черновик?\n\nПод-страницы архивных страниц будут восстановлены в корень если эти страницы также не отмечены для восстановления.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите отменить их публикацию?",
"CMSMAIN.SELECTONEPAGE": "Пожалуйста, выберите хотя бы одну страницу.",
"Campaigns.ADDCAMPAIGN": "Добавить кампанию",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s элементов",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s элемент",
"Campaigns.PUBLISHCAMPAIGN": "Опубликовать кампанию",
"Campaigns.REVERTCAMPAIGN": "Отменить",
"LeftAndMain.CONFIRMUNSAVED": "Вы действительно хотите покинуть эту страницу?\n\nВНИМАНИЕ: Ваши изменения не были сохранены.\n\nНажмите ОК, чтобы продолжить или Отмена, чтобы остаться на текущей странице.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "ВНИМАНИЕ: Ваши изменения не были сохранены",
"LeftAndMain.PAGEWASDELETED": "Эта страница была удалена. Чтобы изменить страницу, выберите её из списка слева.",

View File

@ -1,22 +1,22 @@
{
"CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nAre you sure you want to archive these pages?\n\nThese pages and all of their children pages will be unpublished and sent to the archive.",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?",
"CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?",
"CMSMAIN.BATCH_ARCHIVE_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\n\nآیا از این‌که می‌خواهید بایگانی شوند اطمینان دارید؟\n\nتمامی این صفحات و تمامی صفحات فرزند آن‌ها عدم انتشار می‌شوند و به بایگانی ارسال می‌گردند.",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید آن‌ها از لایو را حذف نمایید؟",
"CMSMAIN.BATCH_DELETE_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید آن‌ها را حذف نمایید؟",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید آن‌ها را منتشر نمایید؟",
"CMSMAIN.BATCH_RESTORE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to restore to stage?\n\nChildren of archived pages will be restored to the root level, unless those pages are also being restored.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "شما {num} صفحه را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید انتشار آن‌ها را لغو نمایید",
"CMSMAIN.SELECTONEPAGE": "لطفاً حداقل ۱ صفحه را انتخاب نمایید.",
"Campaigns.ADDCAMPAIGN": "Add campaign",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s items",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s item",
"Campaigns.PUBLISHCAMPAIGN": "Publish campaign",
"Campaigns.REVERTCAMPAIGN": "Revert",
"Campaigns.ADDCAMPAIGN": "افزودن کمپین",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s آیتم",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s آیتم",
"Campaigns.PUBLISHCAMPAIGN": "انتشار کمپین",
"Campaigns.REVERTCAMPAIGN": "بازگرداندن",
"LeftAndMain.CONFIRMUNSAVED": "Are you sure you want to navigate away from this page?\n\nWARNING: Your changes have not been saved.\n\nPress OK to continue, or Cancel to stay on the current page.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "WARNING: Your changes have not been saved.",
"LeftAndMain.PAGEWASDELETED": "This page was deleted. To edit a page, select it from the left.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "هشدار: تغییرات شما ذخیره نشده‌اند.",
"LeftAndMain.PAGEWASDELETED": "این صفحه حذف شده است. برای ویرایش یک صفحه، آن‌را از لیست چپ انتخاب نمایید.",
"ModelAdmin.DELETED": "حذف شده",
"ModelAdmin.REALLYDELETE": "Do you really want to delete?",
"ModelAdmin.REALLYDELETE": "آیا واقعاً می‌خواهید حذف نمایید؟",
"ModelAdmin.SAVED": "ذخیره شده",
"ModelAdmin.VALIDATIONERROR": "خطای اعتبار‌سنجی",
"SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Do you really want to delete %s groups?"
"SecurityAdmin.BATCHACTIONSDELETECONFIRM": "آیا واقعاً می‌خواهید %s گروه را حذف نمایید؟"
}

View File

@ -6,11 +6,11 @@
"CMSMAIN.BATCH_RESTORE_PROMPT": "Hai selezionato {num} pagina(e).\n\nSei sicuri di volerle ripristinare?\n\nI figli delle pagine archiviate saranno ripristinati nel primo livello, a meno anche i genitori non vengano ripristinati.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Hai {num} pagine selezionate.\n\nVuoi veramente nasconderle?",
"CMSMAIN.SELECTONEPAGE": "Per favore selezionare almeno una pagina",
"Campaigns.ADDCAMPAIGN": "Add campaign",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s items",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s item",
"Campaigns.PUBLISHCAMPAIGN": "Publish campaign",
"Campaigns.REVERTCAMPAIGN": "Revert",
"Campaigns.ADDCAMPAIGN": "Aggiungi campagna",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s elementi",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s elemento",
"Campaigns.PUBLISHCAMPAIGN": "Pubblica campagna",
"Campaigns.REVERTCAMPAIGN": "Ripristina",
"LeftAndMain.CONFIRMUNSAVED": "Siete sicuri di voler uscire da questa pagina?\n\nATTENZIONE: I vostri cambiamenti non sono stati salvati.\n\nCliccare OK per continuare, o su Annulla per rimanere sulla pagina corrente.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "ATTENZIONE: le tue modifiche non sono state salvate.",
"LeftAndMain.PAGEWASDELETED": "Questa pagina è stata eliminata. Per modificare questa pagine, selezionarla a sinistra.",

View File

@ -1,16 +1,16 @@
{
"CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nAre you sure you want to archive these pages?\n\nThese pages and all of their children pages will be unpublished and sent to the archive.",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?",
"CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?",
"CMSMAIN.BATCH_RESTORE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to restore to stage?\n\nChildren of archived pages will be restored to the root level, unless those pages are also being restored.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish",
"CMSMAIN.SELECTONEPAGE": "Please select at least one page",
"Campaigns.ADDCAMPAIGN": "Add campaign",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s items",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s item",
"Campaigns.PUBLISHCAMPAIGN": "Publish campaign",
"Campaigns.REVERTCAMPAIGN": "Revert",
"CMSMAIN.BATCH_ARCHIVE_PROMPT": "Вы выбрали {num} страниц(у)\nВы уверены что хотите отправить их в архив?\n\nПубликации этих страниц и их под-страниц будут отменены и отправлены в архив. ",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите отменить публикацию этих страниц?",
"CMSMAIN.BATCH_DELETE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите их удалить?",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите их опубликовать?",
"CMSMAIN.BATCH_RESTORE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите восстановить эти страницы в черновик?\n\nПод-страницы архивных страниц будут восстановлены в корень если эти страницы также не отмечены для восстановления.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите отменить их публикацию?",
"CMSMAIN.SELECTONEPAGE": "Пожалуйста, выберите хотя бы одну страницу.",
"Campaigns.ADDCAMPAIGN": "Добавить кампанию",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s элементов",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s элемент",
"Campaigns.PUBLISHCAMPAIGN": "Опубликовать кампанию",
"Campaigns.REVERTCAMPAIGN": "Отменить",
"LeftAndMain.CONFIRMUNSAVED": "Вы действительно хотите покинуть эту страницу?\n\nВНИМАНИЕ: Ваши изменения не были сохранены.\n\nНажмите ОК, чтобы продолжить или Отмена, чтобы остаться на текущей странице.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "ВНИМАНИЕ: Ваши изменения не были сохранены",
"LeftAndMain.PAGEWASDELETED": "Эта страница была удалена. Чтобы изменить страницу, выберите её из списка слева.",

View File

@ -1813,6 +1813,9 @@ class LeftAndMain extends Controller implements PermissionProvider {
public function currentPageID() {
if($this->getRequest()->requestVar('ID') && is_numeric($this->getRequest()->requestVar('ID'))) {
return $this->getRequest()->requestVar('ID');
} elseif ($this->getRequest()->requestVar('CMSMainCurrentPageID') && is_numeric($this->getRequest()->requestVar('CMSMainCurrentPageID'))) {
// see GridFieldDetailForm::ItemEditForm
return $this->getRequest()->requestVar('CMSMainCurrentPageID');
} elseif (isset($this->urlParams['ID']) && is_numeric($this->urlParams['ID'])) {
return $this->urlParams['ID'];
} elseif(Session::get($this->sessionNamespace() . ".currentPage")) {

View File

@ -0,0 +1,30 @@
// This file was generated by silverstripe/cow from admin/javascript/lang/src/hr.js.
// See https://github.com/tractorcow/cow for details
if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') {
if (typeof(console) !== 'undefined') { // eslint-disable-line no-console
console.error('Class ss.i18n not defined'); // eslint-disable-line no-console
}
} else {
ss.i18n.addDictionary('hr', {
"CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nAre you sure you want to archive these pages?\n\nThese pages and all of their children pages will be unpublished and sent to the archive.",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?",
"CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?",
"CMSMAIN.BATCH_RESTORE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to restore to stage?\n\nChildren of archived pages will be restored to the root level, unless those pages are also being restored.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Označili ste {num} stranicu(a).\n\nJeste li sigurni da želite odjaviti?",
"CMSMAIN.SELECTONEPAGE": "Molimo odaberite bar jednu stranicu",
"Campaigns.ADDCAMPAIGN": "Dodaj kampanju",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s stavki",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s stavka",
"Campaigns.PUBLISHCAMPAIGN": "Objavi kampanju",
"Campaigns.REVERTCAMPAIGN": "Vrati",
"LeftAndMain.CONFIRMUNSAVED": "Jeste li sigurni da želite otići s ove stranice?\n\nUPOZORENJE: Vaše promjene nisu spremljene.\n\nPritisnike OK za nastavka, ili Odustani za ostati na trenutnoj stranici.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "UPOZORENJE: Vaše promjene nisu spremljene.",
"LeftAndMain.PAGEWASDELETED": "Ova stranica je obrisana. Za uređivanje stranice, odaberite je s lijeve stranice.",
"ModelAdmin.DELETED": "Obrisano",
"ModelAdmin.REALLYDELETE": "Jeste li sigurni da želite obrisati?",
"ModelAdmin.SAVED": "Spremljeno",
"ModelAdmin.VALIDATIONERROR": "Greška validacije",
"SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Jeste li sigurni da želite obrisati %s grupe?"
});
}

View File

@ -0,0 +1,30 @@
// This file was generated by silverstripe/cow from admin/javascript/lang/src/sl_SI.js.
// See https://github.com/tractorcow/cow for details
if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') {
if (typeof(console) !== 'undefined') { // eslint-disable-line no-console
console.error('Class ss.i18n not defined'); // eslint-disable-line no-console
}
} else {
ss.i18n.addDictionary('sl_SI', {
"CMSMAIN.BATCH_ARCHIVE_PROMPT": "Izbrano število strani: {num}\n\nSte prepričani, da želite arhivirati te strani?\n\nTe strani in vse ostale podstrani bodo odstranjene iz objave in premaknjene v arhiv.",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "Izbrali ste {num} strani.\n\nAli ste prepričani, da želite izbrisati te strani iz objave?",
"CMSMAIN.BATCH_DELETE_PROMPT": "Izbrali ste {num} strani.\n\nAli ste prepričani, da jih želite izbrisati?",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?",
"CMSMAIN.BATCH_RESTORE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to restore to stage?\n\nChildren of archived pages will be restored to the root level, unless those pages are also being restored.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish",
"CMSMAIN.SELECTONEPAGE": "Prosimo izberite vsaj eno stran",
"Campaigns.ADDCAMPAIGN": "Dodaj kampanjo",
"Campaigns.ITEM_SUMMARY_PLURAL": "% predmetov",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s predmet",
"Campaigns.PUBLISHCAMPAIGN": "Objavi kampanjo",
"Campaigns.REVERTCAMPAIGN": "Povrni",
"LeftAndMain.CONFIRMUNSAVED": "Are you sure you want to navigate away from this page?\n\nWARNING: Your changes have not been saved.\n\nPress OK to continue, or Cancel to stay on the current page.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "POZOR: Spremembe niso bile shranjene.",
"LeftAndMain.PAGEWASDELETED": "Ta stran je bila izbrisana. Če želite urediti stran, jo najprej izberite na levi strani.",
"ModelAdmin.DELETED": "Izbrisano",
"ModelAdmin.REALLYDELETE": "Ste prepričani, da želite izbrisati?",
"ModelAdmin.SAVED": "Shranjeno",
"ModelAdmin.VALIDATIONERROR": "Napaka pri validaciji",
"SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Ste prepričani, da želite pobrisati grupe: %s ?"
});
}

View File

@ -0,0 +1,22 @@
{
"CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nAre you sure you want to archive these pages?\n\nThese pages and all of their children pages will be unpublished and sent to the archive.",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?",
"CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?",
"CMSMAIN.BATCH_RESTORE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to restore to stage?\n\nChildren of archived pages will be restored to the root level, unless those pages are also being restored.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Označili ste {num} stranicu(a).\n\nJeste li sigurni da želite odjaviti?",
"CMSMAIN.SELECTONEPAGE": "Molimo odaberite bar jednu stranicu",
"Campaigns.ADDCAMPAIGN": "Dodaj kampanju",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s stavki",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s stavka",
"Campaigns.PUBLISHCAMPAIGN": "Objavi kampanju",
"Campaigns.REVERTCAMPAIGN": "Vrati",
"LeftAndMain.CONFIRMUNSAVED": "Jeste li sigurni da želite otići s ove stranice?\n\nUPOZORENJE: Vaše promjene nisu spremljene.\n\nPritisnike OK za nastavka, ili Odustani za ostati na trenutnoj stranici.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "UPOZORENJE: Vaše promjene nisu spremljene.",
"LeftAndMain.PAGEWASDELETED": "Ova stranica je obrisana. Za uređivanje stranice, odaberite je s lijeve stranice.",
"ModelAdmin.DELETED": "Obrisano",
"ModelAdmin.REALLYDELETE": "Jeste li sigurni da želite obrisati?",
"ModelAdmin.SAVED": "Spremljeno",
"ModelAdmin.VALIDATIONERROR": "Greška validacije",
"SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Jeste li sigurni da želite obrisati %s grupe?"
}

View File

@ -0,0 +1,22 @@
{
"CMSMAIN.BATCH_ARCHIVE_PROMPT": "Izbrano število strani: {num}\n\nSte prepričani, da želite arhivirati te strani?\n\nTe strani in vse ostale podstrani bodo odstranjene iz objave in premaknjene v arhiv.",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "Izbrali ste {num} strani.\n\nAli ste prepričani, da želite izbrisati te strani iz objave?",
"CMSMAIN.BATCH_DELETE_PROMPT": "Izbrali ste {num} strani.\n\nAli ste prepričani, da jih želite izbrisati?",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?",
"CMSMAIN.BATCH_RESTORE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to restore to stage?\n\nChildren of archived pages will be restored to the root level, unless those pages are also being restored.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish",
"CMSMAIN.SELECTONEPAGE": "Prosimo izberite vsaj eno stran",
"Campaigns.ADDCAMPAIGN": "Dodaj kampanjo",
"Campaigns.ITEM_SUMMARY_PLURAL": "% predmetov",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s predmet",
"Campaigns.PUBLISHCAMPAIGN": "Objavi kampanjo",
"Campaigns.REVERTCAMPAIGN": "Povrni",
"LeftAndMain.CONFIRMUNSAVED": "Are you sure you want to navigate away from this page?\n\nWARNING: Your changes have not been saved.\n\nPress OK to continue, or Cancel to stay on the current page.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "POZOR: Spremembe niso bile shranjene.",
"LeftAndMain.PAGEWASDELETED": "Ta stran je bila izbrisana. Če želite urediti stran, jo najprej izberite na levi strani.",
"ModelAdmin.DELETED": "Izbrisano",
"ModelAdmin.REALLYDELETE": "Ste prepričani, da želite izbrisati?",
"ModelAdmin.SAVED": "Shranjeno",
"ModelAdmin.VALIDATIONERROR": "Napaka pri validaciji",
"SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Ste prepričani, da želite pobrisati grupe: %s ?"
}

View File

@ -10,40 +10,40 @@ if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') {
"FILEIFRAMEFIELD.DELETEFILE": "حذف فایل‌",
"FILEIFRAMEFIELD.DELETEIMAGE": "حذف تصویر",
"FILEIFRAMEFIELD.UNATTACHFILE": "حذف ضمیمه فایل",
"GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.",
"GRIDFIELD.ERRORINTRANSACTION": "یک خطا هنگام دستیابی به داده‌های سرور روی داد\nلطفاً بعداً تلاش نمایید.",
"HASMANYFILEFIELD.UPLOADING": "در حال آپلود... %s",
"HtmlEditorField.SelectAnchor": "Select an anchor",
"HtmlEditorField.SelectAnchor": "انتخاب یک محل ارجاع لینک",
"LOADING": "بارگذاری...",
"LeftAndMain.IncompatBrowserWarning": "Your browser is not compatible with the CMS interface. Please use Internet Explorer 7+, Google Chrome 10+ or Mozilla Firefox 3.5+.",
"RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "The character '%s' cannot be used in this field",
"LeftAndMain.IncompatBrowserWarning": "مرورگر شما با محیط کاربری سی‌ام‌اس سازگار نیست. لطفاً از اینترنت اکسپلورر نسخه 7 به بعد، گوگل کروم 10 به بعد یا موزیلا فایرفاکس 3.5 به بعد استفاده کنید.",
"RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "کاراکتر '%s' نمی‌تواند در این فیلد استفاده شود",
"TABLEFIELD.DELETECONFIRMMESSAGE": "آیا مطمئن هستید که می‌خواهید این رکورد حذف شود؟",
"TreeDropdownField.ENTERTOSEARCH": "Press enter to search",
"TreeDropdownField.FieldTitle": "انتخاب کنید",
"TreeDropdownField.ENTERTOSEARCH": "جهت جستجو دکمه‌ی enter را بزنید",
"TreeDropdownField.FieldTitle": "انتخاب",
"TreeDropdownField.OpenLink": "باز کنید",
"TreeDropdownField.SearchFieldTitle": "گزینش یا جستجو",
"UNIQUEFIELD.CANNOTLEAVEEMPTY": "This field cannot be left empty",
"UNIQUEFIELD.ENTERNEWVALUE": "You will need to enter a new value for this field",
"UNIQUEFIELD.SUGGESTED": "Changed value to '%s' : %s",
"UPDATEURL.CONFIRM": "Would you like me to change the URL to:\n\n%s/\n\nClick Ok to change the URL, click Cancel to leave it as:\n\n%s",
"UPDATEURL.CONFIRMURLCHANGED": "The URL has been changed to\n'%s'",
"UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?",
"UploadField.EMPTYRESULT": "Empty file upload result",
"UploadField.Editing": "Editing ...",
"UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)",
"TreeDropdownField.SearchFieldTitle": "انتخاب یا جستجو",
"UNIQUEFIELD.CANNOTLEAVEEMPTY": "این فیلد نمی‌تواند خالی بماند",
"UNIQUEFIELD.ENTERNEWVALUE": "شما نیازمند این هستید که ارزش جدیدی برای این فیلد وارد نمایید",
"UNIQUEFIELD.SUGGESTED": "ارزش به '%s' : %s تغییر کرد",
"UPDATEURL.CONFIRM": "آیا می‌خواهید که نشانی اینترنتی را تغییر دهم به:\n\n%s/\n\nبله را کلیک نمایید تا نشانی تغییر یابد، لغو را کلیک کنید تا بدین شکل باقی بماند:\n\n%s",
"UPDATEURL.CONFIRMURLCHANGED": "نشانی اینترنتی تغییر یافت به\n'%s'",
"UploadField.ConfirmDelete": "آیا مطمئن هستید که می‌خواهید این فایل از فایل‌سیستم سرور حذف شود؟",
"UploadField.EMPTYRESULT": "نتیجه‌ی آپلود فایل خالی است",
"UploadField.Editing": "ویراستن ...",
"UploadField.HTML_MAXFILESIZE": "فایل از MAX_FILE_SIZE تجاوز می‌کند (اچ‌تی‌ام‌ال از متضمن دستور)",
"UploadField.INVALIDEXTENSION": "قالب مجاز نیست",
"UploadField.LOADING": "بارگذاری...",
"UploadField.MAXNUMBEROFFILESSIMPLE": "Max number of files exceeded",
"UploadField.MAXNUMBEROFFILESSIMPLE": "از حداکثر تعداد فایل تجاوز کرد",
"UploadField.NOFILEUPLOADED": "هیچ فایلی آپلود نشد",
"UploadField.NOTMPFOLDER": "Missing a temporary folder",
"UploadField.ONLYPARTIALUPLOADED": "File was only partially uploaded",
"UploadField.NOTMPFOLDER": "پوشه‌ی موقت پیدا نشد",
"UploadField.ONLYPARTIALUPLOADED": "تنها بخش‌هایی از فایل آپلود شده است",
"UploadField.OVERWRITEWARNING": "فایل با نام یکسان از پیش وجود دارد",
"UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)",
"UploadField.STOPEDBYEXTENSION": "File upload stopped by extension",
"UploadField.TOOLARGE": "Filesize is too large",
"UploadField.TOOSMALL": "Filesize is too small",
"UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size",
"UploadField.PHP_MAXFILESIZE": "فایل از upload_max_filesize تجاوز می‌کند (متضمن دستور php.ini)",
"UploadField.STOPEDBYEXTENSION": "آپلود فایل به دلیل قالب متوقف شد",
"UploadField.TOOLARGE": "حجم فایل بسیار زیاد است",
"UploadField.TOOSMALL": "حجم فایل بسیار کم است",
"UploadField.UPLOADEDBYTES": "بایت‌های آپلودشده از سایز فایل تجاوز می‌کند",
"UploadField.Uploaded": "آپلود‌شده",
"UploadField.WRITEFAILED": "Failed to write file to disk",
"UploadField.WRITEFAILED": "ناتوان از نگارش فایل بر هارددیسک",
"VALIDATOR.FIELDREQUIRED": "لطفاً \"%s\" را تکمیل نمایید، پرکردن آن الزامی است."
});
}

View File

@ -3,39 +3,39 @@
"FILEIFRAMEFIELD.DELETEFILE": "حذف فایل‌",
"FILEIFRAMEFIELD.DELETEIMAGE": "حذف تصویر",
"FILEIFRAMEFIELD.UNATTACHFILE": "حذف ضمیمه فایل",
"GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.",
"GRIDFIELD.ERRORINTRANSACTION": "یک خطا هنگام دستیابی به داده‌های سرور روی داد\nلطفاً بعداً تلاش نمایید.",
"HASMANYFILEFIELD.UPLOADING": "در حال آپلود... %s",
"HtmlEditorField.SelectAnchor": "Select an anchor",
"HtmlEditorField.SelectAnchor": "انتخاب یک محل ارجاع لینک",
"LOADING": "بارگذاری...",
"LeftAndMain.IncompatBrowserWarning": "Your browser is not compatible with the CMS interface. Please use Internet Explorer 7+, Google Chrome 10+ or Mozilla Firefox 3.5+.",
"RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "The character '%s' cannot be used in this field",
"LeftAndMain.IncompatBrowserWarning": "مرورگر شما با محیط کاربری سی‌ام‌اس سازگار نیست. لطفاً از اینترنت اکسپلورر نسخه 7 به بعد، گوگل کروم 10 به بعد یا موزیلا فایرفاکس 3.5 به بعد استفاده کنید.",
"RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "کاراکتر '%s' نمی‌تواند در این فیلد استفاده شود",
"TABLEFIELD.DELETECONFIRMMESSAGE": "آیا مطمئن هستید که می‌خواهید این رکورد حذف شود؟",
"TreeDropdownField.ENTERTOSEARCH": "Press enter to search",
"TreeDropdownField.FieldTitle": "انتخاب کنید",
"TreeDropdownField.ENTERTOSEARCH": "جهت جستجو دکمه‌ی enter را بزنید",
"TreeDropdownField.FieldTitle": "انتخاب",
"TreeDropdownField.OpenLink": "باز کنید",
"TreeDropdownField.SearchFieldTitle": "گزینش یا جستجو",
"UNIQUEFIELD.CANNOTLEAVEEMPTY": "This field cannot be left empty",
"UNIQUEFIELD.ENTERNEWVALUE": "You will need to enter a new value for this field",
"UNIQUEFIELD.SUGGESTED": "Changed value to '%s' : %s",
"UPDATEURL.CONFIRM": "Would you like me to change the URL to:\n\n%s/\n\nClick Ok to change the URL, click Cancel to leave it as:\n\n%s",
"UPDATEURL.CONFIRMURLCHANGED": "The URL has been changed to\n'%s'",
"UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?",
"UploadField.EMPTYRESULT": "Empty file upload result",
"UploadField.Editing": "Editing ...",
"UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)",
"TreeDropdownField.SearchFieldTitle": "انتخاب یا جستجو",
"UNIQUEFIELD.CANNOTLEAVEEMPTY": "این فیلد نمی‌تواند خالی بماند",
"UNIQUEFIELD.ENTERNEWVALUE": "شما نیازمند این هستید که ارزش جدیدی برای این فیلد وارد نمایید",
"UNIQUEFIELD.SUGGESTED": "ارزش به '%s' : %s تغییر کرد",
"UPDATEURL.CONFIRM": "آیا می‌خواهید که نشانی اینترنتی را تغییر دهم به:\n\n%s/\n\nبله را کلیک نمایید تا نشانی تغییر یابد، لغو را کلیک کنید تا بدین شکل باقی بماند:\n\n%s",
"UPDATEURL.CONFIRMURLCHANGED": "نشانی اینترنتی تغییر یافت به\n'%s'",
"UploadField.ConfirmDelete": "آیا مطمئن هستید که می‌خواهید این فایل از فایل‌سیستم سرور حذف شود؟",
"UploadField.EMPTYRESULT": "نتیجه‌ی آپلود فایل خالی است",
"UploadField.Editing": "ویراستن ...",
"UploadField.HTML_MAXFILESIZE": "فایل از MAX_FILE_SIZE تجاوز می‌کند (اچ‌تی‌ام‌ال از متضمن دستور)",
"UploadField.INVALIDEXTENSION": "قالب مجاز نیست",
"UploadField.LOADING": "بارگذاری ...",
"UploadField.MAXNUMBEROFFILESSIMPLE": "Max number of files exceeded",
"UploadField.MAXNUMBEROFFILESSIMPLE": "از حداکثر تعداد فایل تجاوز کرد",
"UploadField.NOFILEUPLOADED": "هیچ فایلی آپلود نشد",
"UploadField.NOTMPFOLDER": "Missing a temporary folder",
"UploadField.ONLYPARTIALUPLOADED": "File was only partially uploaded",
"UploadField.NOTMPFOLDER": "پوشه‌ی موقت پیدا نشد",
"UploadField.ONLYPARTIALUPLOADED": "تنها بخش‌هایی از فایل آپلود شده است",
"UploadField.OVERWRITEWARNING": "فایل با نام یکسان از پیش وجود دارد",
"UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)",
"UploadField.STOPEDBYEXTENSION": "File upload stopped by extension",
"UploadField.TOOLARGE": "Filesize is too large",
"UploadField.TOOSMALL": "Filesize is too small",
"UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size",
"UploadField.PHP_MAXFILESIZE": "فایل از upload_max_filesize تجاوز می‌کند (متضمن دستور php.ini)",
"UploadField.STOPEDBYEXTENSION": "آپلود فایل به دلیل قالب متوقف شد",
"UploadField.TOOLARGE": "حجم فایل بسیار زیاد است",
"UploadField.TOOSMALL": "حجم فایل بسیار کم است",
"UploadField.UPLOADEDBYTES": "بایت‌های آپلودشده از سایز فایل تجاوز می‌کند",
"UploadField.Uploaded": "آپلود‌شده",
"UploadField.WRITEFAILED": "Failed to write file to disk",
"UploadField.WRITEFAILED": "ناتوان از نگارش فایل بر هارددیسک",
"VALIDATOR.FIELDREQUIRED": "لطفاً \"%s\" را تکمیل نمایید، پرکردن آن الزامی است."
}

View File

@ -335,6 +335,9 @@ class HTTP {
* @param string $etag
*/
public static function register_etag($etag) {
if (0 !== strpos('"')) {
$etag = sprintf('"%s"', $etag);
}
self::$etag = $etag;
}
@ -486,6 +489,11 @@ class HTTP {
$responseHeaders['ETag'] = self::$etag;
}
// etag needs to be a quoted string according to HTTP spec
if (!empty($responseHeaders['ETag']) && 0 !== strpos($responseHeaders['ETag'], '"')) {
$responseHeaders['ETag'] = sprintf('"%s"', $responseHeaders['ETag']);
}
// Now that we've generated them, either output them or attach them to the SS_HTTPResponse as appropriate
foreach($responseHeaders as $k => $v) {
if($body) {

View File

@ -254,6 +254,10 @@ EOT
if(!headers_sent($file, $line)) {
header($_SERVER['SERVER_PROTOCOL'] . " $this->statusCode " . $this->getStatusDescription());
foreach($this->headers as $header => $value) {
//etags need to be quoted
if (strcasecmp('etag', $header) === 0 && 0 !== strpos($value, '"')) {
$value = sprintf('"%s"', $value);
}
header("$header: $value", true, $this->statusCode);
}
} else {

View File

@ -28,7 +28,7 @@ class VersionedRequestFilter implements RequestFilter {
'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(Director::baseURL(), $request->getURL(), "?stage=Live")
Convert::raw2xml(Controller::join_links(Director::baseURL(), $request->getURL(), "?stage=Live"))
);
// Force output since RequestFilter::preRequest doesn't support response overriding

View File

@ -918,6 +918,7 @@ class Config_ForClass {
/**
* @param string $name
* @return mixed
*/
public function __get($name) {
return Config::inst()->get($this->class, $name);
@ -931,6 +932,16 @@ class Config_ForClass {
return Config::inst()->update($this->class, $name, $val);
}
/**
* @param string $name
* @return bool
*/
public function __isset($name)
{
$val = $this->__get($name);
return isset($val);
}
/**
* @param string $name
* @param int $sourceOptions

View File

@ -172,8 +172,10 @@ class MySQLDatabaseConfigurationHelper implements DatabaseConfigurationHelper {
if(!$this->checkValidDatabaseName($database)) return false;
// Escape all valid database patterns (permission must exist on all tables)
$sqlDatabase = addcslashes($database, '_%'); // See http://dev.mysql.com/doc/refman/5.7/en/string-literals.html
$dbPattern = sprintf(
'((%s)|(%s)|(%s))',
'((%s)|(%s)|(%s)|(%s))',
preg_quote("\"$sqlDatabase\".*"), // Regexp escape sql-escaped db identifier
preg_quote("\"$database\".*"),
preg_quote('"%".*'),
preg_quote('*.*')

View File

@ -19,7 +19,7 @@ name, and normally they all exist under the `Root` [api:TabSet].
display up to two levels of tabs in the interface. If you want to group data further than that, try [api:ToggleField].
</div>
## Adding a field from a tab.
## Adding a field to a tab
:::php
$fields->addFieldToTab('Root.Main', new TextField(..));

View File

@ -11,6 +11,11 @@ SilverStripe lets you customise the style of content in the CMS. This is done by
Will load the `mysite/css/editor.css` file.
If using this config option in `mysite/_config.php`, you will have to instead call:
:::php
HtmlEditorConfig::get('cms')->setOption('content_css', project() . '/css/editor.css');
Any CSS classes within this file will be automatically added to the `WYSIWYG` editors 'style' dropdown. For instance, to
add the color 'red' as an option within the `WYSIWYG` add the following to the `editor.css`

View File

@ -0,0 +1,23 @@
# 3.1.20
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### Security
* 2016-08-02 [62a2421](https://github.com/silverstripe/silverstripe-framework/commit/62a242154ec3508fe9b174a40713c8520ac1684c) Fix value / title escaping in CheckboxSetField and OptionsetField (Damian Mooyman) - See [ss-2016-015](http://www.silverstripe.org/download/security-releases/ss-2016-015)
* 2016-07-25 [1c7d5de](https://github.com/silverstripe/silverstripe-framework/commit/1c7d5de51bcdf16ebb21c5a0ebe5fe9e31f9a822) Autologin cookies are ignored if autologin is disabled (Daniel Hensby) - See [ss-2016-014](http://www.silverstripe.org/download/security-releases/ss-2016-014)
* 2016-07-22 [6817c57](https://github.com/silverstripe/silverstripe-framework/commit/6817c57f64b9eb2b271b81662cd83b074a3daee4) Uncasted member name (Daniel Hensby) - See [ss-2016-013](http://www.silverstripe.org/download/security-releases/ss-2016-013)
* 2016-07-15 [298f615](https://github.com/silverstripe/silverstripe-framework/commit/298f61521c55b07e5c898a92264dbe111735a87a) Reset `Member::Salt` on password change (Daniel Hensby) - See [ss-2016-008](http://www.silverstripe.org/download/security-releases/ss-2016-008)
* 2016-07-14 [6606d98](https://github.com/silverstripe/silverstripe-framework/commit/6606d986634f5b5dec16462acaa8d9a513c29fec) ChangePasswordForm does not check $member-&gt;canLogin before login (Daniel Hensby) - See [ss-2016-011](http://www.silverstripe.org/download/security-releases/ss-2016-011)
* 2016-07-14 [5f73d34](https://github.com/silverstripe/silverstripe-cms/commit/5f73d3454ecbc4850e91a0a3007102f6d4d9b853) Missing ACL check on ReportAdmin (Daniel Hensby) - See [ss-2016-012](http://www.silverstripe.org/download/security-releases/ss-2016-012)
### Bugfixes
* 2016-08-15 [95c640a](https://github.com/silverstripe/silverstripe-cms/commit/95c640ae6b5620be83d38e8060317554bc0820ed) Fix regression in FormField casting (Damian Mooyman)
* 2016-05-20 [8382685](https://github.com/silverstripe/silverstripe-framework/commit/83826850346bc486bc4599dca56067897961cbfa) #5557 Tests with no DB requirements wont create test DB (Daniel Hensby)
* 2016-05-18 [62bd26d](https://github.com/silverstripe/silverstripe-framework/commit/62bd26d11ab9c9bf5b91ba8abb776ab3a4813a18) Fix suppression of display_errors in ErrorControlChain (Damian Mooyman)
* 2016-05-10 [3738d88](https://github.com/silverstripe/silverstripe-framework/commit/3738d888e0fbce48e0d88735edd3455a116937b5) Empty FROM clause (Daniel Hensby)
* 2016-05-05 [cc7a2ae](https://github.com/silverstripe/silverstripe-installer/commit/cc7a2aeb1e03f3f8db67a1ca547280b05dd9372a) Add framework/admin tests (#118) (Daniel Hensby)
* 2015-04-21 [a7100e9](https://github.com/silverstripe/silverstripe-framework/commit/a7100e9006b27e7885eb2ce851d9bc0839ca4468) Object::parse_class_spec failed to parse associative arrays (Loz Calver)

View File

@ -0,0 +1,31 @@
# 3.2.5
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### Security
* 2016-08-02 [12a6b35](https://github.com/silverstripe/silverstripe-framework/commit/12a6b357e761f09d818fd0013eb2d85014de79a0) Fix value / title escaping in CheckboxSetField and OptionsetField (Damian Mooyman) - See [ss-2016-015](http://www.silverstripe.org/download/security-releases/ss-2016-015)
* 2016-07-25 [b1f4497](https://github.com/silverstripe/silverstripe-framework/commit/b1f449762b5d11658b11d5036d5ae361a95fd61e) Autologin cookies are ignored if autologin is disabled (Daniel Hensby) - See [ss-2016-014](http://www.silverstripe.org/download/security-releases/ss-2016-014)
* 2016-07-22 [281b0de](https://github.com/silverstripe/silverstripe-framework/commit/281b0de571fe0ae159ac47891c02acf2214fa619) Uncasted member name (Daniel Hensby) - See [ss-2016-013](http://www.silverstripe.org/download/security-releases/ss-2016-013)
* 2016-07-15 [dc47f7e](https://github.com/silverstripe/silverstripe-framework/commit/dc47f7ec9adf67a3f31887467de5b110e8e5b285) Reset `Member::Salt` on password change (Daniel Hensby) - See [ss-2016-008](http://www.silverstripe.org/download/security-releases/ss-2016-008)
* 2016-07-14 [2b30ade](https://github.com/silverstripe/silverstripe-framework/commit/2b30ade44d333a4da4d13b31ffa28d0a34597442) ChangePasswordForm does not check $member-&gt;canLogin before login (Daniel Hensby) - See [ss-2016-011](http://www.silverstripe.org/download/security-releases/ss-2016-011)
* 2016-07-14 [cff2ea9](https://github.com/silverstripe-labs/silverstripe-reports/commit/cff2ea9a98f592d80083633aef6bd082480281d9) Missing ACL check on ReportAdmin (Daniel Hensby) - See [ss-2016-012](http://www.silverstripe.org/download/security-releases/ss-2016-012)
### Bugfixes
* 2016-08-15 [5ad8157](https://github.com/silverstripe/silverstripe-cms/commit/5ad8157655a5dd581cbc90a95e8588907794a9c9) Fix regression in FormField casting (Damian Mooyman)
* 2016-07-07 [4aa1fc2](https://github.com/silverstripe/silverstripe-framework/commit/4aa1fc2d2cafd1c90401896cefb03e64b530a59c) Changed form fields that call renderWith in Field() to call parent::Field() instead (#5783) (Ed Chipman)
* 2016-07-07 [27cea80](https://github.com/silverstripe/silverstripe-framework/commit/27cea80b15a986d43b832658b13d01c08a5cfce1) SS_ConfigStaticManifest_Parser failed to handle ::class syntax (fixes #5701) (#5781) (Loz Calver)
* 2016-07-01 [39238d9](https://github.com/silverstripe/silverstripe-framework/commit/39238d908e0ed077d7aaf773562749468b6827ee) falsey attribute values in shortcodes now work (Daniel Hensby)
* 2016-06-30 [2cdfe6c](https://github.com/silverstripe/silverstripe-framework/commit/2cdfe6cc21f0cb253401fa169b5e1c3bb8738d43) Use RAW for DBField template helpers (Daniel Hensby)
* 2016-06-30 [b0f237b](https://github.com/silverstripe/silverstripe-framework/commit/b0f237bb3a336eea9f3a9f9bece2b65661c03cbc) Use RAW instead of Value for parsing shortcodes (Daniel Hensby)
* 2016-05-31 [eba89b9](https://github.com/silverstripe/silverstripe-cms/commit/eba89b9520a0103e4c0cb4b6730c3c0742f8b0d9) OldPageRedirector no longer loops infinitely if 404 thrown on existing page (Daniel Hensby)
* 2016-05-31 [341f49c](https://github.com/silverstripe/silverstripe-framework/commit/341f49c630c23ee665c195250c19935763172e36) Fixed lookup of next closest visible field for focus restoring (fixes #5618) (UndefinedOffset)
* 2016-05-20 [8382685](https://github.com/silverstripe/silverstripe-framework/commit/83826850346bc486bc4599dca56067897961cbfa) #5557 Tests with no DB requirements wont create test DB (Daniel Hensby)
* 2016-05-18 [62bd26d](https://github.com/silverstripe/silverstripe-framework/commit/62bd26d11ab9c9bf5b91ba8abb776ab3a4813a18) Fix suppression of display_errors in ErrorControlChain (Damian Mooyman)
* 2016-05-10 [3738d88](https://github.com/silverstripe/silverstripe-framework/commit/3738d888e0fbce48e0d88735edd3455a116937b5) Empty FROM clause (Daniel Hensby)
* 2016-05-05 [cc7a2ae](https://github.com/silverstripe/silverstripe-installer/commit/cc7a2aeb1e03f3f8db67a1ca547280b05dd9372a) Add framework/admin tests (#118) (Daniel Hensby)
* 2016-04-19 [43dcde5](https://github.com/silverstripe/silverstripe-framework/commit/43dcde5197e0995225235f69937ed57bec0cd7e2) Hierarchy was incorrectly unexpanding nodes that had been previously expanded (madmatt)
* 2015-04-21 [a7100e9](https://github.com/silverstripe/silverstripe-framework/commit/a7100e9006b27e7885eb2ce851d9bc0839ca4468) Object::parse_class_spec failed to parse associative arrays (Loz Calver)

View File

@ -0,0 +1,49 @@
# 3.3.3
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### Security
* 2016-08-02 [049cdef](https://github.com/silverstripe/silverstripe-framework/commit/049cdefacfd3122d59d5488c1317f999fe8aacc4) Fix value / title escaping in CheckboxSetField and OptionsetField (Damian Mooyman) - See [ss-2016-015](http://www.silverstripe.org/download/security-releases/ss-2016-015)
* 2016-07-25 [fa7f5af](https://github.com/silverstripe/silverstripe-framework/commit/fa7f5af8618a83c865b11fd6cc981ad9661046e6) Autologin cookies are ignored if autologin is disabled (Daniel Hensby) - See [ss-2016-014](http://www.silverstripe.org/download/security-releases/ss-2016-014)
* 2016-07-22 [83e3302](https://github.com/silverstripe/silverstripe-framework/commit/83e3302c0425d9b0e4fe42e82e3df03379f4dca5) Uncasted member name (Daniel Hensby) - See [ss-2016-013](http://www.silverstripe.org/download/security-releases/ss-2016-013)
* 2016-07-15 [f85dea2](https://github.com/silverstripe/silverstripe-framework/commit/f85dea2e6d5b303abd43b5e5efc07c66c8d2acf4) Reset `Member::Salt` on password change (Daniel Hensby) - See [ss-2016-008](http://www.silverstripe.org/download/security-releases/ss-2016-008)
* 2016-07-14 [6d41db7](https://github.com/silverstripe/silverstripe-framework/commit/6d41db77fa78f473db7bcff389456c980ef4e412) ChangePasswordForm does not check $member-&gt;canLogin before login (Daniel Hensby) - See [ss-2016-011](http://www.silverstripe.org/download/security-releases/ss-2016-011)
* 2016-07-14 [efa20d2](https://github.com/silverstripe-labs/silverstripe-reports/commit/efa20d2da03f80758cce7fe697c62f7f42fe098a) Missing ACL check on ReportAdmin (Daniel Hensby) - See [ss-2016-012](http://www.silverstripe.org/download/security-releases/ss-2016-012)
* 2016-05-03 [3fa84cf](https://github.com/silverstripe/silverstripe-framework/commit/3fa84cf0c64a539d78600c36364817a8e38411d8) Encode user supplied URL for embeding into page (Daniel Hensby) - See [ss-2016-007](http://www.silverstripe.org/download/security-releases/ss-2016-007)
### Bugfixes
* 2016-08-15 [a6a9cd7](https://github.com/silverstripe/silverstripe-cms/commit/a6a9cd729fd24b19f7b39fdeb867a491489687e0) Fix regression in FormField casting (Damian Mooyman)
* 2016-08-02 [cd80d50](https://github.com/silverstripe/silverstripe-framework/commit/cd80d501f9eb12d9aca3e65f742041b142ee659f) Fix unset config options returning isset() = true (Damian Mooyman)
* 2016-07-25 [3306deb](https://github.com/silverstripe/silverstripe-cms/commit/3306deb69b88473efac009f46a90cbaa6bb27351) Fix link concatenation in SilverStripeNavigator (#1560) (Damian Mooyman)
* 2016-07-20 [319d6d2](https://github.com/silverstripe/silverstripe-framework/commit/319d6d293e873d989c55473a0aa7ae1679010474) Fix doclink (#5827) (Damian Mooyman)
* 2016-07-19 [10e06dc](https://github.com/silverstripe/silverstripe-cms/commit/10e06dce507c6f9b3588e4f8669ce36ee843f79e) Fixes #1054 By preventing errors in the CMS _only_. (Russell Michell)
* 2016-07-15 [b3fea37](https://github.com/silverstripe/silverstripe-framework/commit/b3fea3723fae822068a6b761a682011b0970fff5) Fixes support for "inline" form actions (fixes #2534) (Loz Calver)
* 2016-07-12 [24efc7e](https://github.com/silverstripe/silverstripe-framework/commit/24efc7edf83bb06b5a01080d2742c07ef68d21b2) Fix sorting ArrayList with sql-like syntax (Damian Mooyman)
* 2016-07-12 [8123c43](https://github.com/silverstripe/silverstripe-cms/commit/8123c433f01ca1ce59062e45ad90bac13be1e990) Fix getAbsoluteLiveLink() concatenation (Damian Mooyman)
* 2016-07-12 [87477a1](https://github.com/silverstripe-labs/silverstripe-reports/commit/87477a1e01d03ebee7eb71c352b3da47da73a9f2) Fix incorrect url manipulation (Damian Mooyman)
* 2016-07-07 [4aa1fc2](https://github.com/silverstripe/silverstripe-framework/commit/4aa1fc2d2cafd1c90401896cefb03e64b530a59c) Changed form fields that call renderWith in Field() to call parent::Field() instead (#5783) (Ed Chipman)
* 2016-07-07 [27cea80](https://github.com/silverstripe/silverstripe-framework/commit/27cea80b15a986d43b832658b13d01c08a5cfce1) SS_ConfigStaticManifest_Parser failed to handle ::class syntax (fixes #5701) (#5781) (Loz Calver)
* 2016-07-01 [39238d9](https://github.com/silverstripe/silverstripe-framework/commit/39238d908e0ed077d7aaf773562749468b6827ee) falsey attribute values in shortcodes now work (Daniel Hensby)
* 2016-06-30 [2cdfe6c](https://github.com/silverstripe/silverstripe-framework/commit/2cdfe6cc21f0cb253401fa169b5e1c3bb8738d43) Use RAW for DBField template helpers (Daniel Hensby)
* 2016-06-30 [b0f237b](https://github.com/silverstripe/silverstripe-framework/commit/b0f237bb3a336eea9f3a9f9bece2b65661c03cbc) Use RAW instead of Value for parsing shortcodes (Daniel Hensby)
* 2016-06-13 [f0d4951](https://github.com/silverstripe/silverstripe-framework/commit/f0d49518152bb9743e32174bc870fac6951c161d) for #5683: Address security warning in CMS when attempting to access &lt;iframe&gt; contents (Back-porting fix from PR #5163) (Patrick Nelson)
* 2016-06-08 [bf00810](https://github.com/silverstripe/silverstripe-framework/commit/bf00810e1f5a7164d74ad66f3d03e813d81dfa25) Fix buttonClicked() error (Damian Mooyman)
* 2016-05-31 [eba89b9](https://github.com/silverstripe/silverstripe-cms/commit/eba89b9520a0103e4c0cb4b6730c3c0742f8b0d9) OldPageRedirector no longer loops infinitely if 404 thrown on existing page (Daniel Hensby)
* 2016-05-31 [341f49c](https://github.com/silverstripe/silverstripe-framework/commit/341f49c630c23ee665c195250c19935763172e36) Fixed lookup of next closest visible field for focus restoring (fixes #5618) (UndefinedOffset)
* 2016-05-27 [f1a0aef](https://github.com/silverstripe/silverstripe-framework/commit/f1a0aef0d7e18b921b53a381ff8489bc5c12740b) fix CMS_ACCESS permission being ignored if in incorrect order in array (Damian Mooyman)
* 2016-05-21 [decd7e5](https://github.com/silverstripe/silverstripe-framework/commit/decd7e5c57a0839cb873c86782a870326ffa175a) Fix getFinalisedQuery not including all queried columns (Damian Mooyman)
* 2016-05-20 [8382685](https://github.com/silverstripe/silverstripe-framework/commit/83826850346bc486bc4599dca56067897961cbfa) #5557 Tests with no DB requirements wont create test DB (Daniel Hensby)
* 2016-05-18 [62bd26d](https://github.com/silverstripe/silverstripe-framework/commit/62bd26d11ab9c9bf5b91ba8abb776ab3a4813a18) Fix suppression of display_errors in ErrorControlChain (Damian Mooyman)
* 2016-05-16 [79d0590](https://github.com/silverstripe/silverstripe-framework/commit/79d05906286698e7cf7274703088a47c54b106f2) Fix singleton('DBLocale') (Damian Mooyman)
* 2016-05-10 [3738d88](https://github.com/silverstripe/silverstripe-framework/commit/3738d888e0fbce48e0d88735edd3455a116937b5) Empty FROM clause (Daniel Hensby)
* 2016-05-10 [d1df67d](https://github.com/silverstripe/silverstripe-framework/commit/d1df67d3089a51c0db63fbaed869738453bee482) SQLSelect count methods now cast to int (fixes #5498) (Loz Calver)
* 2016-05-05 [cc7a2ae](https://github.com/silverstripe/silverstripe-installer/commit/cc7a2aeb1e03f3f8db67a1ca547280b05dd9372a) Add framework/admin tests (#118) (Daniel Hensby)
* 2016-05-02 [096f30e](https://github.com/silverstripe/silverstripe-framework/commit/096f30ebe5ff6446a399abc92813a6ff2d02e04e) Fix GridFieldAddExistingAutocompleter (Damian Mooyman)
* 2016-04-28 [6934083](https://github.com/silverstripe/silverstripe-framework/commit/693408330bdd235b92690912ad36ba8adbebdbef) for #5410 to help focus errors occurring on tabs within GridField controlled DataObjects (et al). (Patrick Nelson)
* 2016-04-19 [43dcde5](https://github.com/silverstripe/silverstripe-framework/commit/43dcde5197e0995225235f69937ed57bec0cd7e2) Hierarchy was incorrectly unexpanding nodes that had been previously expanded (madmatt)
* 2016-01-22 [4bd66b9](https://github.com/silverstripe/silverstripe-framework/commit/4bd66b9d3693492806bb4e9a512f8ae623c6a306) for #4909: Ensure RSSFeed_Entry is instantiated using the injector. (Patrick Nelson)
* 2015-04-21 [a7100e9](https://github.com/silverstripe/silverstripe-framework/commit/a7100e9006b27e7885eb2ce851d9bc0839ca4468) Object::parse_class_spec failed to parse associative arrays (Loz Calver)

View File

@ -0,0 +1,50 @@
# 3.4.1
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### Security
* 2016-08-02 [b0ba201](https://github.com/silverstripe/silverstripe-framework/commit/b0ba2015d9684ee7b124dafcf6b59b046e20f8ed) Fix value / title escaping in CheckboxSetField and OptionsetField (Damian Mooyman) - See [ss-2016-015](http://www.silverstripe.org/download/security-releases/ss-2016-015)
* 2016-07-25 [d1163d8](https://github.com/silverstripe/silverstripe-framework/commit/d1163d87b70e3e147f22a1e423b9f70f6fd85e8f) Autologin cookies are ignored if autologin is disabled (Daniel Hensby) - See [ss-2016-014](http://www.silverstripe.org/download/security-releases/ss-2016-014)
* 2016-07-22 [8bbf1ca](https://github.com/silverstripe/silverstripe-framework/commit/8bbf1caae665a07b3e44e8d5d32556a03d38c296) Uncasted member name (Daniel Hensby) - See [ss-2016-013](http://www.silverstripe.org/download/security-releases/ss-2016-013)
* 2016-07-15 [08384bb](https://github.com/silverstripe/silverstripe-framework/commit/08384bb4d6b98c44388ffb4727c317ed14fe3c81) Reset `Member::Salt` on password change (Daniel Hensby) - See [ss-2016-008](http://www.silverstripe.org/download/security-releases/ss-2016-008)
* 2016-07-14 [782c18f](https://github.com/silverstripe/silverstripe-framework/commit/782c18fd13b9fb92707d0ea3b231023204928297) ChangePasswordForm does not check $member-&gt;canLogin before login (Daniel Hensby) - See [ss-2016-011](http://www.silverstripe.org/download/security-releases/ss-2016-011)
* 2016-07-14 [c1525c8](https://github.com/silverstripe-labs/silverstripe-reports/commit/c1525c8ba68f6d4fc0fb5f30929f9678c0199411) Missing ACL check on ReportAdmin (Daniel Hensby) - See [ss-2016-012](http://www.silverstripe.org/download/security-releases/ss-2016-012)
* 2016-05-03 [41be95c](https://github.com/silverstripe/silverstripe-framework/commit/41be95c95a55031412ee4056aeee5c2c69595836) Encode user supplied URL for embeding into page (Daniel Hensby) - See [ss-2016-007](http://www.silverstripe.org/download/security-releases/ss-2016-007)
### Bugfixes
* 2016-08-15 [ac26816](https://github.com/silverstripe/silverstripe-framework/commit/ac2681658ac33f6c060b7f5f881bd94eba92791b) Fix regression in url concatenation #4967 (Damian Mooyman)
* 2016-08-15 [ef85618](https://github.com/silverstripe/silverstripe-cms/commit/ef856185ab7a86f25fda718a88256c9e6e27a763) Fix regression in FormField casting (Damian Mooyman)
* 2016-08-02 [cd80d50](https://github.com/silverstripe/silverstripe-framework/commit/cd80d501f9eb12d9aca3e65f742041b142ee659f) Fix unset config options returning isset() = true (Damian Mooyman)
* 2016-08-01 [7d0b8e6](https://github.com/silverstripe/silverstripe-framework/commit/7d0b8e6520a246bd20204613233a0a6ad0f19437) Fix permission checking code not correctly handling escaped SQL identifiers (Damian Mooyman)
* 2016-07-28 [6c37532](https://github.com/silverstripe/silverstripe-framework/commit/6c37532a7ae4877fe1eaff45f41ff9902d5cccee) Gridfield delete action back link (#5848) (Jono Menz)
* 2016-07-28 [c965133](https://github.com/silverstripe/silverstripe-cms/commit/c965133da03941fc736384d17518dc37be3d0e07) Direct edit file by URL (Jonathon Menz)
* 2016-07-25 [3306deb](https://github.com/silverstripe/silverstripe-cms/commit/3306deb69b88473efac009f46a90cbaa6bb27351) Fix link concatenation in SilverStripeNavigator (#1560) (Damian Mooyman)
* 2016-07-25 [9c7c7f6](https://github.com/silverstripe/silverstripe-framework/commit/9c7c7f6aa945ce5eeea3468bca59e5496e765016) Fix regression in missing require_js from #4259 (Damian Mooyman)
* 2016-07-22 [82e5431](https://github.com/silverstripe/silverstripe-cms/commit/82e54314bf2d26a5eb233018f472e248e44dc1ba) do not show HiddenClass pages in allowed children (#1555) (Robbie Averill)
* 2016-07-20 [319d6d2](https://github.com/silverstripe/silverstripe-framework/commit/319d6d293e873d989c55473a0aa7ae1679010474) Fix doclink (#5827) (Damian Mooyman)
* 2016-07-19 [10e06dc](https://github.com/silverstripe/silverstripe-cms/commit/10e06dce507c6f9b3588e4f8669ce36ee843f79e) Fixes #1054 By preventing errors in the CMS _only_. (Russell Michell)
* 2016-07-15 [b3fea37](https://github.com/silverstripe/silverstripe-framework/commit/b3fea3723fae822068a6b761a682011b0970fff5) Fixes support for "inline" form actions (fixes #2534) (Loz Calver)
* 2016-07-12 [24efc7e](https://github.com/silverstripe/silverstripe-framework/commit/24efc7edf83bb06b5a01080d2742c07ef68d21b2) Fix sorting ArrayList with sql-like syntax (Damian Mooyman)
* 2016-07-12 [8123c43](https://github.com/silverstripe/silverstripe-cms/commit/8123c433f01ca1ce59062e45ad90bac13be1e990) Fix getAbsoluteLiveLink() concatenation (Damian Mooyman)
* 2016-07-12 [87477a1](https://github.com/silverstripe-labs/silverstripe-reports/commit/87477a1e01d03ebee7eb71c352b3da47da73a9f2) Fix incorrect url manipulation (Damian Mooyman)
* 2016-07-07 [4aa1fc2](https://github.com/silverstripe/silverstripe-framework/commit/4aa1fc2d2cafd1c90401896cefb03e64b530a59c) Changed form fields that call renderWith in Field() to call parent::Field() instead (#5783) (Ed Chipman)
* 2016-07-07 [27cea80](https://github.com/silverstripe/silverstripe-framework/commit/27cea80b15a986d43b832658b13d01c08a5cfce1) SS_ConfigStaticManifest_Parser failed to handle ::class syntax (fixes #5701) (#5781) (Loz Calver)
* 2016-07-04 [0b7dab3](https://github.com/silverstripe/silverstripe-framework/commit/0b7dab3f66d64a4415b436b4301d4608b01b0597) Fix missing icons (Damian Mooyman)
* 2016-07-01 [39238d9](https://github.com/silverstripe/silverstripe-framework/commit/39238d908e0ed077d7aaf773562749468b6827ee) falsey attribute values in shortcodes now work (Daniel Hensby)
* 2016-06-30 [2cdfe6c](https://github.com/silverstripe/silverstripe-framework/commit/2cdfe6cc21f0cb253401fa169b5e1c3bb8738d43) Use RAW for DBField template helpers (Daniel Hensby)
* 2016-06-30 [b0f237b](https://github.com/silverstripe/silverstripe-framework/commit/b0f237bb3a336eea9f3a9f9bece2b65661c03cbc) Use RAW instead of Value for parsing shortcodes (Daniel Hensby)
* 2016-06-13 [f0d4951](https://github.com/silverstripe/silverstripe-framework/commit/f0d49518152bb9743e32174bc870fac6951c161d) for #5683: Address security warning in CMS when attempting to access &lt;iframe&gt; contents (Back-porting fix from PR #5163) (Patrick Nelson)
* 2016-06-08 [bf00810](https://github.com/silverstripe/silverstripe-framework/commit/bf00810e1f5a7164d74ad66f3d03e813d81dfa25) Fix buttonClicked() error (Damian Mooyman)
* 2016-06-06 [946495b](https://github.com/silverstripe/silverstripe-framework/commit/946495bcf575d727726dcacc0a6eba596661cfa2) Regression with &lt;% with / %&gt; (fixes #5656) (Loz Calver)
* 2016-05-31 [eba89b9](https://github.com/silverstripe/silverstripe-cms/commit/eba89b9520a0103e4c0cb4b6730c3c0742f8b0d9) OldPageRedirector no longer loops infinitely if 404 thrown on existing page (Daniel Hensby)
* 2016-05-31 [341f49c](https://github.com/silverstripe/silverstripe-framework/commit/341f49c630c23ee665c195250c19935763172e36) Fixed lookup of next closest visible field for focus restoring (fixes #5618) (UndefinedOffset)
* 2016-05-27 [f1a0aef](https://github.com/silverstripe/silverstripe-framework/commit/f1a0aef0d7e18b921b53a381ff8489bc5c12740b) fix CMS_ACCESS permission being ignored if in incorrect order in array (Damian Mooyman)
* 2016-05-21 [decd7e5](https://github.com/silverstripe/silverstripe-framework/commit/decd7e5c57a0839cb873c86782a870326ffa175a) Fix getFinalisedQuery not including all queried columns (Damian Mooyman)
* 2016-05-20 [8382685](https://github.com/silverstripe/silverstripe-framework/commit/83826850346bc486bc4599dca56067897961cbfa) #5557 Tests with no DB requirements wont create test DB (Daniel Hensby)
* 2016-04-19 [43dcde5](https://github.com/silverstripe/silverstripe-framework/commit/43dcde5197e0995225235f69937ed57bec0cd7e2) Hierarchy was incorrectly unexpanding nodes that had been previously expanded (madmatt)
* 2016-01-22 [4bd66b9](https://github.com/silverstripe/silverstripe-framework/commit/4bd66b9d3693492806bb4e9a512f8ae623c6a306) for #4909: Ensure RSSFeed_Entry is instantiated using the injector. (Patrick Nelson)
* 2015-04-21 [a7100e9](https://github.com/silverstripe/silverstripe-framework/commit/a7100e9006b27e7885eb2ce851d9bc0839ca4468) Object::parse_class_spec failed to parse associative arrays (Loz Calver)

View File

@ -0,0 +1,13 @@
# 3.1.20-rc1
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### Bugfixes
* 2016-05-20 [8382685](https://github.com/silverstripe/silverstripe-framework/commit/83826850346bc486bc4599dca56067897961cbfa) #5557 Tests with no DB requirements wont create test DB (Daniel Hensby)
* 2016-05-18 [62bd26d](https://github.com/silverstripe/silverstripe-framework/commit/62bd26d11ab9c9bf5b91ba8abb776ab3a4813a18) Fix suppression of display_errors in ErrorControlChain (Damian Mooyman)
* 2016-05-10 [3738d88](https://github.com/silverstripe/silverstripe-framework/commit/3738d888e0fbce48e0d88735edd3455a116937b5) Empty FROM clause (Daniel Hensby)
* 2016-05-05 [cc7a2ae](https://github.com/silverstripe/silverstripe-installer/commit/cc7a2aeb1e03f3f8db67a1ca547280b05dd9372a) Add framework/admin tests (#118) (Daniel Hensby)
* 2015-04-21 [a7100e9](https://github.com/silverstripe/silverstripe-framework/commit/a7100e9006b27e7885eb2ce851d9bc0839ca4468) Object::parse_class_spec failed to parse associative arrays (Loz Calver)

View File

@ -0,0 +1,14 @@
# 3.1.20-rc2
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### Security
* 2016-08-02 [62a2421](https://github.com/silverstripe/silverstripe-framework/commit/62a242154ec3508fe9b174a40713c8520ac1684c) Fix value / title escaping in CheckboxSetField and OptionsetField (Damian Mooyman) - See [ss-2016-015](http://www.silverstripe.org/download/security-releases/ss-2016-015)
* 2016-07-25 [1c7d5de](https://github.com/silverstripe/silverstripe-framework/commit/1c7d5de51bcdf16ebb21c5a0ebe5fe9e31f9a822) Autologin cookies are ignored if autologin is disabled (Daniel Hensby) - See [ss-2016-014](http://www.silverstripe.org/download/security-releases/ss-2016-014)
* 2016-07-22 [6817c57](https://github.com/silverstripe/silverstripe-framework/commit/6817c57f64b9eb2b271b81662cd83b074a3daee4) Uncasted member name (Daniel Hensby) - See [ss-2016-013](http://www.silverstripe.org/download/security-releases/ss-2016-013)
* 2016-07-15 [298f615](https://github.com/silverstripe/silverstripe-framework/commit/298f61521c55b07e5c898a92264dbe111735a87a) Reset `Member::Salt` on password change (Daniel Hensby) - See [ss-2016-008](http://www.silverstripe.org/download/security-releases/ss-2016-008)
* 2016-07-14 [6606d98](https://github.com/silverstripe/silverstripe-framework/commit/6606d986634f5b5dec16462acaa8d9a513c29fec) ChangePasswordForm does not check $member-&gt;canLogin before login (Daniel Hensby) - See [ss-2016-011](http://www.silverstripe.org/download/security-releases/ss-2016-011)
* 2016-07-14 [5f73d34](https://github.com/silverstripe/silverstripe-cms/commit/5f73d3454ecbc4850e91a0a3007102f6d4d9b853) Missing ACL check on ReportAdmin (Daniel Hensby) - See [ss-2016-012](http://www.silverstripe.org/download/security-releases/ss-2016-012)

View File

@ -0,0 +1,21 @@
# 3.2.5-rc1
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### Bugfixes
* 2016-07-07 [4aa1fc2](https://github.com/silverstripe/silverstripe-framework/commit/4aa1fc2d2cafd1c90401896cefb03e64b530a59c) Changed form fields that call renderWith in Field() to call parent::Field() instead (#5783) (Ed Chipman)
* 2016-07-07 [27cea80](https://github.com/silverstripe/silverstripe-framework/commit/27cea80b15a986d43b832658b13d01c08a5cfce1) SS_ConfigStaticManifest_Parser failed to handle ::class syntax (fixes #5701) (#5781) (Loz Calver)
* 2016-07-01 [39238d9](https://github.com/silverstripe/silverstripe-framework/commit/39238d908e0ed077d7aaf773562749468b6827ee) falsey attribute values in shortcodes now work (Daniel Hensby)
* 2016-06-30 [2cdfe6c](https://github.com/silverstripe/silverstripe-framework/commit/2cdfe6cc21f0cb253401fa169b5e1c3bb8738d43) Use RAW for DBField template helpers (Daniel Hensby)
* 2016-06-30 [b0f237b](https://github.com/silverstripe/silverstripe-framework/commit/b0f237bb3a336eea9f3a9f9bece2b65661c03cbc) Use RAW instead of Value for parsing shortcodes (Daniel Hensby)
* 2016-05-31 [eba89b9](https://github.com/silverstripe/silverstripe-cms/commit/eba89b9520a0103e4c0cb4b6730c3c0742f8b0d9) OldPageRedirector no longer loops infinitely if 404 thrown on existing page (Daniel Hensby)
* 2016-05-31 [341f49c](https://github.com/silverstripe/silverstripe-framework/commit/341f49c630c23ee665c195250c19935763172e36) Fixed lookup of next closest visible field for focus restoring (fixes #5618) (UndefinedOffset)
* 2016-05-20 [8382685](https://github.com/silverstripe/silverstripe-framework/commit/83826850346bc486bc4599dca56067897961cbfa) #5557 Tests with no DB requirements wont create test DB (Daniel Hensby)
* 2016-05-18 [62bd26d](https://github.com/silverstripe/silverstripe-framework/commit/62bd26d11ab9c9bf5b91ba8abb776ab3a4813a18) Fix suppression of display_errors in ErrorControlChain (Damian Mooyman)
* 2016-05-10 [3738d88](https://github.com/silverstripe/silverstripe-framework/commit/3738d888e0fbce48e0d88735edd3455a116937b5) Empty FROM clause (Daniel Hensby)
* 2016-05-05 [cc7a2ae](https://github.com/silverstripe/silverstripe-installer/commit/cc7a2aeb1e03f3f8db67a1ca547280b05dd9372a) Add framework/admin tests (#118) (Daniel Hensby)
* 2016-04-19 [43dcde5](https://github.com/silverstripe/silverstripe-framework/commit/43dcde5197e0995225235f69937ed57bec0cd7e2) Hierarchy was incorrectly unexpanding nodes that had been previously expanded (madmatt)
* 2015-04-21 [a7100e9](https://github.com/silverstripe/silverstripe-framework/commit/a7100e9006b27e7885eb2ce851d9bc0839ca4468) Object::parse_class_spec failed to parse associative arrays (Loz Calver)

View File

@ -0,0 +1,14 @@
# 3.2.5-rc2
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### Security
* 2016-08-02 [12a6b35](https://github.com/silverstripe/silverstripe-framework/commit/12a6b357e761f09d818fd0013eb2d85014de79a0) Fix value / title escaping in CheckboxSetField and OptionsetField (Damian Mooyman) - See [ss-2016-015](http://www.silverstripe.org/download/security-releases/ss-2016-015)
* 2016-07-25 [b1f4497](https://github.com/silverstripe/silverstripe-framework/commit/b1f449762b5d11658b11d5036d5ae361a95fd61e) Autologin cookies are ignored if autologin is disabled (Daniel Hensby) - See [ss-2016-014](http://www.silverstripe.org/download/security-releases/ss-2016-014)
* 2016-07-22 [281b0de](https://github.com/silverstripe/silverstripe-framework/commit/281b0de571fe0ae159ac47891c02acf2214fa619) Uncasted member name (Daniel Hensby) - See [ss-2016-013](http://www.silverstripe.org/download/security-releases/ss-2016-013)
* 2016-07-15 [dc47f7e](https://github.com/silverstripe/silverstripe-framework/commit/dc47f7ec9adf67a3f31887467de5b110e8e5b285) Reset `Member::Salt` on password change (Daniel Hensby) - See [ss-2016-008](http://www.silverstripe.org/download/security-releases/ss-2016-008)
* 2016-07-14 [2b30ade](https://github.com/silverstripe/silverstripe-framework/commit/2b30ade44d333a4da4d13b31ffa28d0a34597442) ChangePasswordForm does not check $member-&gt;canLogin before login (Daniel Hensby) - See [ss-2016-011](http://www.silverstripe.org/download/security-releases/ss-2016-011)
* 2016-07-14 [cff2ea9](https://github.com/silverstripe-labs/silverstripe-reports/commit/cff2ea9a98f592d80083633aef6bd082480281d9) Missing ACL check on ReportAdmin (Daniel Hensby) - See [ss-2016-012](http://www.silverstripe.org/download/security-releases/ss-2016-012)

View File

@ -0,0 +1,38 @@
# 3.3.3-rc1
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### Bugfixes
* 2016-08-02 [cd80d50](https://github.com/silverstripe/silverstripe-framework/commit/cd80d501f9eb12d9aca3e65f742041b142ee659f) Fix unset config options returning isset() = true (Damian Mooyman)
* 2016-07-25 [3306deb](https://github.com/silverstripe/silverstripe-cms/commit/3306deb69b88473efac009f46a90cbaa6bb27351) Fix link concatenation in SilverStripeNavigator (#1560) (Damian Mooyman)
* 2016-07-20 [319d6d2](https://github.com/silverstripe/silverstripe-framework/commit/319d6d293e873d989c55473a0aa7ae1679010474) Fix doclink (#5827) (Damian Mooyman)
* 2016-07-19 [10e06dc](https://github.com/silverstripe/silverstripe-cms/commit/10e06dce507c6f9b3588e4f8669ce36ee843f79e) Fixes #1054 By preventing errors in the CMS _only_. (Russell Michell)
* 2016-07-15 [b3fea37](https://github.com/silverstripe/silverstripe-framework/commit/b3fea3723fae822068a6b761a682011b0970fff5) Fixes support for "inline" form actions (fixes #2534) (Loz Calver)
* 2016-07-12 [24efc7e](https://github.com/silverstripe/silverstripe-framework/commit/24efc7edf83bb06b5a01080d2742c07ef68d21b2) Fix sorting ArrayList with sql-like syntax (Damian Mooyman)
* 2016-07-12 [8123c43](https://github.com/silverstripe/silverstripe-cms/commit/8123c433f01ca1ce59062e45ad90bac13be1e990) Fix getAbsoluteLiveLink() concatenation (Damian Mooyman)
* 2016-07-12 [87477a1](https://github.com/silverstripe-labs/silverstripe-reports/commit/87477a1e01d03ebee7eb71c352b3da47da73a9f2) Fix incorrect url manipulation (Damian Mooyman)
* 2016-07-07 [4aa1fc2](https://github.com/silverstripe/silverstripe-framework/commit/4aa1fc2d2cafd1c90401896cefb03e64b530a59c) Changed form fields that call renderWith in Field() to call parent::Field() instead (#5783) (Ed Chipman)
* 2016-07-07 [27cea80](https://github.com/silverstripe/silverstripe-framework/commit/27cea80b15a986d43b832658b13d01c08a5cfce1) SS_ConfigStaticManifest_Parser failed to handle ::class syntax (fixes #5701) (#5781) (Loz Calver)
* 2016-07-01 [39238d9](https://github.com/silverstripe/silverstripe-framework/commit/39238d908e0ed077d7aaf773562749468b6827ee) falsey attribute values in shortcodes now work (Daniel Hensby)
* 2016-06-30 [2cdfe6c](https://github.com/silverstripe/silverstripe-framework/commit/2cdfe6cc21f0cb253401fa169b5e1c3bb8738d43) Use RAW for DBField template helpers (Daniel Hensby)
* 2016-06-30 [b0f237b](https://github.com/silverstripe/silverstripe-framework/commit/b0f237bb3a336eea9f3a9f9bece2b65661c03cbc) Use RAW instead of Value for parsing shortcodes (Daniel Hensby)
* 2016-06-13 [f0d4951](https://github.com/silverstripe/silverstripe-framework/commit/f0d49518152bb9743e32174bc870fac6951c161d) for #5683: Address security warning in CMS when attempting to access &lt;iframe&gt; contents (Back-porting fix from PR #5163) (Patrick Nelson)
* 2016-06-08 [bf00810](https://github.com/silverstripe/silverstripe-framework/commit/bf00810e1f5a7164d74ad66f3d03e813d81dfa25) Fix buttonClicked() error (Damian Mooyman)
* 2016-05-31 [eba89b9](https://github.com/silverstripe/silverstripe-cms/commit/eba89b9520a0103e4c0cb4b6730c3c0742f8b0d9) OldPageRedirector no longer loops infinitely if 404 thrown on existing page (Daniel Hensby)
* 2016-05-31 [341f49c](https://github.com/silverstripe/silverstripe-framework/commit/341f49c630c23ee665c195250c19935763172e36) Fixed lookup of next closest visible field for focus restoring (fixes #5618) (UndefinedOffset)
* 2016-05-27 [f1a0aef](https://github.com/silverstripe/silverstripe-framework/commit/f1a0aef0d7e18b921b53a381ff8489bc5c12740b) fix CMS_ACCESS permission being ignored if in incorrect order in array (Damian Mooyman)
* 2016-05-21 [decd7e5](https://github.com/silverstripe/silverstripe-framework/commit/decd7e5c57a0839cb873c86782a870326ffa175a) Fix getFinalisedQuery not including all queried columns (Damian Mooyman)
* 2016-05-20 [8382685](https://github.com/silverstripe/silverstripe-framework/commit/83826850346bc486bc4599dca56067897961cbfa) #5557 Tests with no DB requirements wont create test DB (Daniel Hensby)
* 2016-05-18 [62bd26d](https://github.com/silverstripe/silverstripe-framework/commit/62bd26d11ab9c9bf5b91ba8abb776ab3a4813a18) Fix suppression of display_errors in ErrorControlChain (Damian Mooyman)
* 2016-05-16 [79d0590](https://github.com/silverstripe/silverstripe-framework/commit/79d05906286698e7cf7274703088a47c54b106f2) Fix singleton('DBLocale') (Damian Mooyman)
* 2016-05-10 [3738d88](https://github.com/silverstripe/silverstripe-framework/commit/3738d888e0fbce48e0d88735edd3455a116937b5) Empty FROM clause (Daniel Hensby)
* 2016-05-10 [d1df67d](https://github.com/silverstripe/silverstripe-framework/commit/d1df67d3089a51c0db63fbaed869738453bee482) SQLSelect count methods now cast to int (fixes #5498) (Loz Calver)
* 2016-05-05 [cc7a2ae](https://github.com/silverstripe/silverstripe-installer/commit/cc7a2aeb1e03f3f8db67a1ca547280b05dd9372a) Add framework/admin tests (#118) (Daniel Hensby)
* 2016-05-02 [096f30e](https://github.com/silverstripe/silverstripe-framework/commit/096f30ebe5ff6446a399abc92813a6ff2d02e04e) Fix GridFieldAddExistingAutocompleter (Damian Mooyman)
* 2016-04-28 [6934083](https://github.com/silverstripe/silverstripe-framework/commit/693408330bdd235b92690912ad36ba8adbebdbef) for #5410 to help focus errors occurring on tabs within GridField controlled DataObjects (et al). (Patrick Nelson)
* 2016-04-19 [43dcde5](https://github.com/silverstripe/silverstripe-framework/commit/43dcde5197e0995225235f69937ed57bec0cd7e2) Hierarchy was incorrectly unexpanding nodes that had been previously expanded (madmatt)
* 2016-01-22 [4bd66b9](https://github.com/silverstripe/silverstripe-framework/commit/4bd66b9d3693492806bb4e9a512f8ae623c6a306) for #4909: Ensure RSSFeed_Entry is instantiated using the injector. (Patrick Nelson)
* 2015-04-21 [a7100e9](https://github.com/silverstripe/silverstripe-framework/commit/a7100e9006b27e7885eb2ce851d9bc0839ca4468) Object::parse_class_spec failed to parse associative arrays (Loz Calver)

View File

@ -0,0 +1,19 @@
# 3.3.3-rc2
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### Security
* 2016-08-02 [049cdef](https://github.com/silverstripe/silverstripe-framework/commit/049cdefacfd3122d59d5488c1317f999fe8aacc4) Fix value / title escaping in CheckboxSetField and OptionsetField (Damian Mooyman) - See [ss-2016-015](http://www.silverstripe.org/download/security-releases/ss-2016-015)
* 2016-07-25 [fa7f5af](https://github.com/silverstripe/silverstripe-framework/commit/fa7f5af8618a83c865b11fd6cc981ad9661046e6) Autologin cookies are ignored if autologin is disabled (Daniel Hensby) - See [ss-2016-014](http://www.silverstripe.org/download/security-releases/ss-2016-014)
* 2016-07-22 [83e3302](https://github.com/silverstripe/silverstripe-framework/commit/83e3302c0425d9b0e4fe42e82e3df03379f4dca5) Uncasted member name (Daniel Hensby) - See [ss-2016-013](http://www.silverstripe.org/download/security-releases/ss-2016-013)
* 2016-07-15 [f85dea2](https://github.com/silverstripe/silverstripe-framework/commit/f85dea2e6d5b303abd43b5e5efc07c66c8d2acf4) Reset `Member::Salt` on password change (Daniel Hensby) - See [ss-2016-008](http://www.silverstripe.org/download/security-releases/ss-2016-008)
* 2016-07-14 [6d41db7](https://github.com/silverstripe/silverstripe-framework/commit/6d41db77fa78f473db7bcff389456c980ef4e412) ChangePasswordForm does not check $member-&gt;canLogin before login (Daniel Hensby) - See [ss-2016-011](http://www.silverstripe.org/download/security-releases/ss-2016-011)
* 2016-07-14 [efa20d2](https://github.com/silverstripe-labs/silverstripe-reports/commit/efa20d2da03f80758cce7fe697c62f7f42fe098a) Missing ACL check on ReportAdmin (Daniel Hensby) - See [ss-2016-012](http://www.silverstripe.org/download/security-releases/ss-2016-012)
* 2016-05-03 [3fa84cf](https://github.com/silverstripe/silverstripe-framework/commit/3fa84cf0c64a539d78600c36364817a8e38411d8) Encode user supplied URL for embeding into page (Daniel Hensby) - See [ss-2016-007](http://www.silverstripe.org/download/security-releases/ss-2016-007)
### Bugfixes
* 2016-08-15 [a6a9cd7](https://github.com/silverstripe/silverstripe-cms/commit/a6a9cd729fd24b19f7b39fdeb867a491489687e0) Fix regression in FormField casting (Damian Mooyman)

View File

@ -0,0 +1,38 @@
# 3.4.1-rc1
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### Bugfixes
* 2016-08-02 [cd80d50](https://github.com/silverstripe/silverstripe-framework/commit/cd80d501f9eb12d9aca3e65f742041b142ee659f) Fix unset config options returning isset() = true (Damian Mooyman)
* 2016-08-01 [7d0b8e6](https://github.com/silverstripe/silverstripe-framework/commit/7d0b8e6520a246bd20204613233a0a6ad0f19437) Fix permission checking code not correctly handling escaped SQL identifiers (Damian Mooyman)
* 2016-07-28 [6c37532](https://github.com/silverstripe/silverstripe-framework/commit/6c37532a7ae4877fe1eaff45f41ff9902d5cccee) Gridfield delete action back link (#5848) (Jono Menz)
* 2016-07-28 [c965133](https://github.com/silverstripe/silverstripe-cms/commit/c965133da03941fc736384d17518dc37be3d0e07) Direct edit file by URL (Jonathon Menz)
* 2016-07-25 [3306deb](https://github.com/silverstripe/silverstripe-cms/commit/3306deb69b88473efac009f46a90cbaa6bb27351) Fix link concatenation in SilverStripeNavigator (#1560) (Damian Mooyman)
* 2016-07-25 [9c7c7f6](https://github.com/silverstripe/silverstripe-framework/commit/9c7c7f6aa945ce5eeea3468bca59e5496e765016) Fix regression in missing require_js from #4259 (Damian Mooyman)
* 2016-07-22 [82e5431](https://github.com/silverstripe/silverstripe-cms/commit/82e54314bf2d26a5eb233018f472e248e44dc1ba) do not show HiddenClass pages in allowed children (#1555) (Robbie Averill)
* 2016-07-20 [319d6d2](https://github.com/silverstripe/silverstripe-framework/commit/319d6d293e873d989c55473a0aa7ae1679010474) Fix doclink (#5827) (Damian Mooyman)
* 2016-07-19 [10e06dc](https://github.com/silverstripe/silverstripe-cms/commit/10e06dce507c6f9b3588e4f8669ce36ee843f79e) Fixes #1054 By preventing errors in the CMS _only_. (Russell Michell)
* 2016-07-15 [b3fea37](https://github.com/silverstripe/silverstripe-framework/commit/b3fea3723fae822068a6b761a682011b0970fff5) Fixes support for "inline" form actions (fixes #2534) (Loz Calver)
* 2016-07-12 [24efc7e](https://github.com/silverstripe/silverstripe-framework/commit/24efc7edf83bb06b5a01080d2742c07ef68d21b2) Fix sorting ArrayList with sql-like syntax (Damian Mooyman)
* 2016-07-12 [8123c43](https://github.com/silverstripe/silverstripe-cms/commit/8123c433f01ca1ce59062e45ad90bac13be1e990) Fix getAbsoluteLiveLink() concatenation (Damian Mooyman)
* 2016-07-12 [87477a1](https://github.com/silverstripe-labs/silverstripe-reports/commit/87477a1e01d03ebee7eb71c352b3da47da73a9f2) Fix incorrect url manipulation (Damian Mooyman)
* 2016-07-07 [4aa1fc2](https://github.com/silverstripe/silverstripe-framework/commit/4aa1fc2d2cafd1c90401896cefb03e64b530a59c) Changed form fields that call renderWith in Field() to call parent::Field() instead (#5783) (Ed Chipman)
* 2016-07-07 [27cea80](https://github.com/silverstripe/silverstripe-framework/commit/27cea80b15a986d43b832658b13d01c08a5cfce1) SS_ConfigStaticManifest_Parser failed to handle ::class syntax (fixes #5701) (#5781) (Loz Calver)
* 2016-07-04 [0b7dab3](https://github.com/silverstripe/silverstripe-framework/commit/0b7dab3f66d64a4415b436b4301d4608b01b0597) Fix missing icons (Damian Mooyman)
* 2016-07-01 [39238d9](https://github.com/silverstripe/silverstripe-framework/commit/39238d908e0ed077d7aaf773562749468b6827ee) falsey attribute values in shortcodes now work (Daniel Hensby)
* 2016-06-30 [2cdfe6c](https://github.com/silverstripe/silverstripe-framework/commit/2cdfe6cc21f0cb253401fa169b5e1c3bb8738d43) Use RAW for DBField template helpers (Daniel Hensby)
* 2016-06-30 [b0f237b](https://github.com/silverstripe/silverstripe-framework/commit/b0f237bb3a336eea9f3a9f9bece2b65661c03cbc) Use RAW instead of Value for parsing shortcodes (Daniel Hensby)
* 2016-06-13 [f0d4951](https://github.com/silverstripe/silverstripe-framework/commit/f0d49518152bb9743e32174bc870fac6951c161d) for #5683: Address security warning in CMS when attempting to access &lt;iframe&gt; contents (Back-porting fix from PR #5163) (Patrick Nelson)
* 2016-06-08 [bf00810](https://github.com/silverstripe/silverstripe-framework/commit/bf00810e1f5a7164d74ad66f3d03e813d81dfa25) Fix buttonClicked() error (Damian Mooyman)
* 2016-06-06 [946495b](https://github.com/silverstripe/silverstripe-framework/commit/946495bcf575d727726dcacc0a6eba596661cfa2) Regression with &lt;% with / %&gt; (fixes #5656) (Loz Calver)
* 2016-05-31 [eba89b9](https://github.com/silverstripe/silverstripe-cms/commit/eba89b9520a0103e4c0cb4b6730c3c0742f8b0d9) OldPageRedirector no longer loops infinitely if 404 thrown on existing page (Daniel Hensby)
* 2016-05-31 [341f49c](https://github.com/silverstripe/silverstripe-framework/commit/341f49c630c23ee665c195250c19935763172e36) Fixed lookup of next closest visible field for focus restoring (fixes #5618) (UndefinedOffset)
* 2016-05-27 [f1a0aef](https://github.com/silverstripe/silverstripe-framework/commit/f1a0aef0d7e18b921b53a381ff8489bc5c12740b) fix CMS_ACCESS permission being ignored if in incorrect order in array (Damian Mooyman)
* 2016-05-21 [decd7e5](https://github.com/silverstripe/silverstripe-framework/commit/decd7e5c57a0839cb873c86782a870326ffa175a) Fix getFinalisedQuery not including all queried columns (Damian Mooyman)
* 2016-05-20 [8382685](https://github.com/silverstripe/silverstripe-framework/commit/83826850346bc486bc4599dca56067897961cbfa) #5557 Tests with no DB requirements wont create test DB (Daniel Hensby)
* 2016-04-19 [43dcde5](https://github.com/silverstripe/silverstripe-framework/commit/43dcde5197e0995225235f69937ed57bec0cd7e2) Hierarchy was incorrectly unexpanding nodes that had been previously expanded (madmatt)
* 2016-01-22 [4bd66b9](https://github.com/silverstripe/silverstripe-framework/commit/4bd66b9d3693492806bb4e9a512f8ae623c6a306) for #4909: Ensure RSSFeed_Entry is instantiated using the injector. (Patrick Nelson)
* 2015-04-21 [a7100e9](https://github.com/silverstripe/silverstripe-framework/commit/a7100e9006b27e7885eb2ce851d9bc0839ca4468) Object::parse_class_spec failed to parse associative arrays (Loz Calver)

View File

@ -0,0 +1,19 @@
# 3.4.1-rc2
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### Security
* 2016-08-02 [b0ba201](https://github.com/silverstripe/silverstripe-framework/commit/b0ba2015d9684ee7b124dafcf6b59b046e20f8ed) Fix value / title escaping in CheckboxSetField and OptionsetField (Damian Mooyman) - See [ss-2016-015](http://www.silverstripe.org/download/security-releases/ss-2016-015)
* 2016-07-25 [d1163d8](https://github.com/silverstripe/silverstripe-framework/commit/d1163d87b70e3e147f22a1e423b9f70f6fd85e8f) Autologin cookies are ignored if autologin is disabled (Daniel Hensby) - See [ss-2016-014](http://www.silverstripe.org/download/security-releases/ss-2016-014)
* 2016-07-22 [8bbf1ca](https://github.com/silverstripe/silverstripe-framework/commit/8bbf1caae665a07b3e44e8d5d32556a03d38c296) Uncasted member name (Daniel Hensby) - See [ss-2016-013](http://www.silverstripe.org/download/security-releases/ss-2016-013)
* 2016-07-15 [08384bb](https://github.com/silverstripe/silverstripe-framework/commit/08384bb4d6b98c44388ffb4727c317ed14fe3c81) Reset `Member::Salt` on password change (Daniel Hensby) - See [ss-2016-008](http://www.silverstripe.org/download/security-releases/ss-2016-008)
* 2016-07-14 [782c18f](https://github.com/silverstripe/silverstripe-framework/commit/782c18fd13b9fb92707d0ea3b231023204928297) ChangePasswordForm does not check $member-&gt;canLogin before login (Daniel Hensby) - See [ss-2016-011](http://www.silverstripe.org/download/security-releases/ss-2016-011)
* 2016-07-14 [c1525c8](https://github.com/silverstripe-labs/silverstripe-reports/commit/c1525c8ba68f6d4fc0fb5f30929f9678c0199411) Missing ACL check on ReportAdmin (Daniel Hensby) - See [ss-2016-012](http://www.silverstripe.org/download/security-releases/ss-2016-012)
* 2016-05-03 [41be95c](https://github.com/silverstripe/silverstripe-framework/commit/41be95c95a55031412ee4056aeee5c2c69595836) Encode user supplied URL for embeding into page (Daniel Hensby) - See [ss-2016-007](http://www.silverstripe.org/download/security-releases/ss-2016-007)
### Bugfixes
* 2016-08-15 [ef85618](https://github.com/silverstripe/silverstripe-cms/commit/ef856185ab7a86f25fda718a88256c9e6e27a763) Fix regression in FormField casting (Damian Mooyman)

View File

@ -33,7 +33,7 @@ class SS_FileFinder {
* @var array
*/
protected static $vcs_dirs = array(
'.git', '.svn', '.hg', '.bzr'
'.git', '.svn', '.hg', '.bzr', 'node_modules',
);
/**

View File

@ -66,12 +66,12 @@ class CheckboxSetField extends MultiSelectField {
$defaultItems = $this->getDefaultItems();
// Generate list of options to display
$odd = 0;
$odd = false;
$formID = $this->ID();
$options = new ArrayList();
foreach($this->getSource() as $itemValue => $title) {
$itemID = Convert::raw2htmlid("{$formID}_{$itemValue}");
$odd = ($odd + 1) % 2;
$odd = !$odd;
$extraClass = $odd ? 'odd' : 'even';
$extraClass .= ' val' . preg_replace('/[^a-zA-Z0-9\-\_]/', '_', $itemValue);

View File

@ -63,7 +63,7 @@ class GridFieldAddExistingAutocompleter
* 'Team.Name'
* )
*
* @var Array
* @var array
*/
protected $searchFields = array();
@ -73,7 +73,7 @@ class GridFieldAddExistingAutocompleter
protected $resultsFormat = '$Title';
/**
* @var String Text shown on the search field, instructing what to search for.
* @var string Text shown on the search field, instructing what to search for.
*/
protected $placeholderText;
@ -94,7 +94,7 @@ class GridFieldAddExistingAutocompleter
/**
*
* @param GridField $gridField
* @return string - HTML
* @return string[] - HTML
*/
public function getHTMLFragments($gridField) {
$dataClass = $gridField->getList()->dataClass();
@ -224,22 +224,24 @@ class GridFieldAddExistingAutocompleter
->limit($this->getResultsLimit());
$json = array();
$originalSourceFileComments = Config::inst()->get('SSViewer', 'source_file_comments');
Config::nest();
Config::inst()->update('SSViewer', 'source_file_comments', false);
$viewer = SSViewer::fromString($this->resultsFormat);
foreach($results as $result) {
$title = html_entity_decode(SSViewer::fromString($this->resultsFormat)->process($result));
$title = html_entity_decode($viewer->process($result));
$json[] = array(
'label' => $title,
'value' => $title,
'id' => $result->ID,
);
}
Config::inst()->update('SSViewer', 'source_file_comments', $originalSourceFileComments);
Config::unnest();
return Convert::array2json($json);
}
/**
* @param string $format
*
* @return $this
*/
public function setResultsFormat($format) {
@ -248,7 +250,7 @@ class GridFieldAddExistingAutocompleter
}
/**
* @return String
* @return string
*/
public function getResultsFormat() {
return $this->resultsFormat;
@ -262,10 +264,11 @@ class GridFieldAddExistingAutocompleter
*/
public function setSearchList(SS_List $list) {
$this->searchList = $list;
return $this;
}
/**
* @param Array
* @param array $fields
*/
public function setSearchFields($fields) {
$this->searchFields = $fields;
@ -273,7 +276,7 @@ class GridFieldAddExistingAutocompleter
}
/**
* @return Array
* @return array
*/
public function getSearchFields() {
return $this->searchFields;
@ -284,8 +287,8 @@ class GridFieldAddExistingAutocompleter
* Falls back to {@link DataObject->summaryFields()} if
* no custom search fields are defined.
*
* @param String the class name
* @return Array|null names of the searchable fields
* @param string $dataClass the class name
* @return array|null names of the searchable fields
*/
public function scaffoldSearchFields($dataClass) {
$obj = singleton($dataClass);
@ -321,8 +324,9 @@ class GridFieldAddExistingAutocompleter
}
/**
* @param String The class of the object being searched for
* @return String
* @param string $dataClass The class of the object being searched for
*
* @return string
*/
public function getPlaceholderText($dataClass) {
$searchFields = ($this->getSearchFields())
@ -354,10 +358,13 @@ class GridFieldAddExistingAutocompleter
}
/**
* @param String
* @param string $text
*
* @return $this
*/
public function setPlaceholderText($text) {
$this->placeholderText = $text;
return $this;
}
/**
@ -371,8 +378,11 @@ class GridFieldAddExistingAutocompleter
/**
* @param int $limit
*
* @return $this
*/
public function setResultsLimit($limit) {
$this->resultsLimit = $limit;
return $this;
}
}

View File

@ -411,7 +411,6 @@ class GridFieldDetailForm_ItemRequest extends RequestHandler {
}
}
// Caution: API violation. Form expects a Controller, but we are giving it a RequestHandler instead.
// Thanks to this however, we are able to nest GridFields, and also access the initial Controller by
// dereferencing GridFieldDetailForm_ItemRequest->getController() multiple times. See getToplevelController
@ -702,6 +701,7 @@ class GridFieldDetailForm_ItemRequest extends RequestHandler {
public function doDelete($data, $form) {
$title = $this->record->Title;
$backLink = $this->getBacklink();
try {
if (!$this->record->canDelete()) {
throw new ValidationException(
@ -732,7 +732,7 @@ class GridFieldDetailForm_ItemRequest extends RequestHandler {
$controller = $this->getToplevelController();
$controller->getRequest()->addHeader('X-Pjax', 'Content'); // Force a content refresh
return $controller->redirect($this->getBacklink(), 302); //redirect back to admin section
return $controller->redirect($backLink, 302); //redirect back to admin section
}
/**

49
javascript/lang/hr.js Normal file
View File

@ -0,0 +1,49 @@
// This file was generated by silverstripe/cow from javascript/lang/src/hr.js.
// See https://github.com/tractorcow/cow for details
if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') {
if (typeof(console) !== 'undefined') { // eslint-disable-line no-console
console.error('Class ss.i18n not defined'); // eslint-disable-line no-console
}
} else {
ss.i18n.addDictionary('hr', {
"FILEIFRAMEFIELD.CONFIRMDELETE": "Jeste li sigurni da želite obrisati ovu datoteku?",
"FILEIFRAMEFIELD.DELETEFILE": "Obriši datoteku",
"FILEIFRAMEFIELD.DELETEIMAGE": "Obriši sliku",
"FILEIFRAMEFIELD.UNATTACHFILE": "Un-Attach File",
"GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.",
"HASMANYFILEFIELD.UPLOADING": "Prebacujem... %s",
"HtmlEditorField.SelectAnchor": "Odaberite sidro",
"LOADING": "učitavam...",
"LeftAndMain.IncompatBrowserWarning": "Vaš browser nije kompatibilan s CMS sučeljem. Molimo koristite Internet Explorer 7+, Google Chrome 10+ ili Mozilla Firefox 3.5+.",
"RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "The character '%s' cannot be used in this field",
"TABLEFIELD.DELETECONFIRMMESSAGE": "Are you sure you want to delete this record?",
"TreeDropdownField.ENTERTOSEARCH": "Press enter to search",
"TreeDropdownField.FieldTitle": "Odaberi",
"TreeDropdownField.OpenLink": "Otvori",
"TreeDropdownField.SearchFieldTitle": "Odaberi ili traži",
"UNIQUEFIELD.CANNOTLEAVEEMPTY": "Ovo polje ne može biti prazno",
"UNIQUEFIELD.ENTERNEWVALUE": "Morate unesti novu vrijednost za ovo polje",
"UNIQUEFIELD.SUGGESTED": "Promjenjene vrijednosti u '%s' : %s",
"UPDATEURL.CONFIRM": "Would you like me to change the URL to:\n\n%s/\n\nClick Ok to change the URL, click Cancel to leave it as:\n\n%s",
"UPDATEURL.CONFIRMURLCHANGED": "The URL has been changed to\n'%s'",
"UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?",
"UploadField.EMPTYRESULT": "Empty file upload result",
"UploadField.Editing": "Uređujem...",
"UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)",
"UploadField.INVALIDEXTENSION": "Extension is not allowed",
"UploadField.LOADING": "Učitavam ...",
"UploadField.MAXNUMBEROFFILESSIMPLE": "Maksimalan broj datoteka premašen",
"UploadField.NOFILEUPLOADED": "Datoteka nije uploadana",
"UploadField.NOTMPFOLDER": "Nedostaje privremeni direktorij",
"UploadField.ONLYPARTIALUPLOADED": "Datoteka je djelimično uploadana",
"UploadField.OVERWRITEWARNING": "File with the same name already exists",
"UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)",
"UploadField.STOPEDBYEXTENSION": "File upload stopped by extension",
"UploadField.TOOLARGE": "Veličina datoteke je prevelika",
"UploadField.TOOSMALL": "Veličina datoteke je premala",
"UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size",
"UploadField.Uploaded": "Prenešeno",
"UploadField.WRITEFAILED": "Failed to write file to disk",
"VALIDATOR.FIELDREQUIRED": "Please fill out \"%s\", it is required."
});
}

41
javascript/lang/src/hr.js Normal file
View File

@ -0,0 +1,41 @@
{
"FILEIFRAMEFIELD.CONFIRMDELETE": "Jeste li sigurni da želite obrisati ovu datoteku?",
"FILEIFRAMEFIELD.DELETEFILE": "Obriši datoteku",
"FILEIFRAMEFIELD.DELETEIMAGE": "Obriši sliku",
"FILEIFRAMEFIELD.UNATTACHFILE": "Un-Attach File",
"GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.",
"HASMANYFILEFIELD.UPLOADING": "Prebacujem... %s",
"HtmlEditorField.SelectAnchor": "Odaberite sidro",
"LOADING": "učitavam...",
"LeftAndMain.IncompatBrowserWarning": "Vaš browser nije kompatibilan s CMS sučeljem. Molimo koristite Internet Explorer 7+, Google Chrome 10+ ili Mozilla Firefox 3.5+.",
"RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "The character '%s' cannot be used in this field",
"TABLEFIELD.DELETECONFIRMMESSAGE": "Are you sure you want to delete this record?",
"TreeDropdownField.ENTERTOSEARCH": "Press enter to search",
"TreeDropdownField.FieldTitle": "Odaberi",
"TreeDropdownField.OpenLink": "Otvori",
"TreeDropdownField.SearchFieldTitle": "Odaberi ili traži",
"UNIQUEFIELD.CANNOTLEAVEEMPTY": "Ovo polje ne može biti prazno",
"UNIQUEFIELD.ENTERNEWVALUE": "Morate unesti novu vrijednost za ovo polje",
"UNIQUEFIELD.SUGGESTED": "Promjenjene vrijednosti u '%s' : %s",
"UPDATEURL.CONFIRM": "Would you like me to change the URL to:\n\n%s/\n\nClick Ok to change the URL, click Cancel to leave it as:\n\n%s",
"UPDATEURL.CONFIRMURLCHANGED": "The URL has been changed to\n'%s'",
"UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?",
"UploadField.EMPTYRESULT": "Empty file upload result",
"UploadField.Editing": "Uređujem...",
"UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)",
"UploadField.INVALIDEXTENSION": "Extension is not allowed",
"UploadField.LOADING": "Učitavam ...",
"UploadField.MAXNUMBEROFFILESSIMPLE": "Maksimalan broj datoteka premašen",
"UploadField.NOFILEUPLOADED": "Datoteka nije uploadana",
"UploadField.NOTMPFOLDER": "Nedostaje privremeni direktorij",
"UploadField.ONLYPARTIALUPLOADED": "Datoteka je djelimično uploadana",
"UploadField.OVERWRITEWARNING": "File with the same name already exists",
"UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)",
"UploadField.STOPEDBYEXTENSION": "File upload stopped by extension",
"UploadField.TOOLARGE": "Veličina datoteke je prevelika",
"UploadField.TOOSMALL": "Veličina datoteke je premala",
"UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size",
"UploadField.Uploaded": "Prenešeno",
"UploadField.WRITEFAILED": "Failed to write file to disk",
"VALIDATOR.FIELDREQUIRED": "Please fill out \"%s\", it is required."
}

View File

@ -298,8 +298,8 @@ cs:
FROMWEB: 'Z webu'
FindInFolder: 'Hledat ve složce'
IMAGEALT: 'Alternativní text (alt)'
IMAGEALTTEXT: 'Alternativní text (alt) - bude ukázán, když obrázek nemúže být zobrazen'
IMAGEALTTEXTDESC: 'Zobrazeno na obrazovce, když obrázek nemůže být zobrazen'
IMAGEALTTEXT: 'Alternativní text (alt) - ukáže se, když obrázek nemúže být zobrazen'
IMAGEALTTEXTDESC: 'Zobrazeno na obrazovce, anebo když obrázek nemůže být zobrazen'
IMAGEDIMENSIONS: Rozměry
IMAGEHEIGHTPX: Výška
IMAGETITLE: 'Titul text (tooltip) - další informace o obrázku'
@ -333,7 +333,7 @@ cs:
LeftAndMain:
CANT_REORGANISE: 'Nemáte oprávnění měnit stránky nejvyšší úrovně. Vaše změna nebyla uložena.'
DELETED: Smazáno.
DropdownBatchActionsDefault: 'Vyberte akci...'
DropdownBatchActionsDefault: Akce
HELP: Nápověda
PAGETYPE: 'Typ stránky'
PERMAGAIN: 'Byli jste odhlášeni z CMS. Pokud se chcete znovu přihlásit, zadejte níže své uživatelské jméno a heslo.'
@ -391,6 +391,7 @@ cs:
SUBJECTPASSWORDRESET: 'Nulovací odkaz pro Vaše heslo'
SURNAME: Příjmení
TIMEFORMAT: 'Formát času'
VALIDATIONMEMBEREXISTS: 'Již existuje člen se stejnou %s'
ValidationIdentifierFailed: 'Nemůžete přepsat existujícího člena #{id} s identickým identifikátorem ({name} = {value}))'
WELCOMEBACK: 'Vítejte zpět, {firstname}'
YOUROLDPASSWORD: 'Vaše staré heslo'

View File

@ -1,6 +1,12 @@
fa_IR:
AddToCampaign:
ErrorCampaignPermissionDenied: 'به نظر می‌رسد شما دسترسی‌های لازم برای افزودن {ObjectTitle} به {CampaignTitle} را ندارید'
ErrorGeneral: 'پوزش می‌طلبیم، اما خطایی رخ داد'
ErrorItemPermissionDenied: 'به نظر می‌رسد شما دسترسی‌های لازم برای افزودن {ObjectTitle} به کمپین را ندارید'
ErrorNotFound: 'این {Type} یافت نشد'
Success: '{ObjectTitle} با موفقیت به {CampaignTitle} افزوده شد'
AssetAdmin:
ALLOWEDEXTS: 'قالب‌های مجاز آپلود فایل'
ALLOWEDEXTS: 'قالب‌های مجاز جهت آپلود فایل'
HIDEALLOWEDEXTS: 'مخفی‌کردن قالب‌های مجاز'
NEWFOLDER: پوشه‌ی جدید
SHOWALLOWEDEXTS: 'نمایش قالب‌های مجاز'
@ -30,11 +36,12 @@ fa_IR:
INSERTURL: 'وارد‌کردن از نشانی اینترنتی'
REMOVEINFO: 'حذف این فایل از این فیلد'
TOTAL: مجموع
TOUPLOAD: 'انتخاب فایل‌ها جهت آپلود...'
UPLOADINPROGRESS: 'لطفاً صبر کنید... آپلود در جریان است'
UPLOADOR: یا
BBCodeParser:
ALIGNEMENT: جاگذاری
ALIGNEMENTEXAMPLE: 'راست‌چین'
ALIGNEMENTEXAMPLE: 'راست‌چین شده'
BOLD: 'متن درشت'
BOLDEXAMPLE: درشت
CODE: 'بلوک کد'
@ -47,7 +54,7 @@ fa_IR:
IMAGE: عکس
IMAGEDESCRIPTION: 'نمایش یک تصویر در ارسال شما'
ITALIC: 'نوشته ایتالیک'
ITALICEXAMPLE: ایتالیک
ITALICEXAMPLE: ایتالیکها
LINK: 'لینک وب‌سایت'
LINKDESCRIPTION: 'لینک به یک وب‌سایت یا نشانی اینترنتی دیگر'
STRUCK: 'متن باطل‌شده'
@ -67,6 +74,8 @@ fa_IR:
ANY: هر
NOANSWER: 'خیر'
YESANSWER: 'بله'
CAMPAIGNS:
ADDTOCAMPAIGN: 'افزودن به کمپین'
CMSLoadingScreen_ss:
LOADING: بارگذاری...
REQUIREJS: 'سی‌ام‌اس نیازمند این است که جاوااسکریپت را فعال نمایید.'
@ -93,12 +102,29 @@ fa_IR:
SUCCESSCONTENT: '<p>ورود موفق. اگر به‌طور خودکار ارجاع نشدید <a target="_top" href="{link}">اینجا را کلیک کنید.</a></p>'
TimedOutTitleAnonymous: 'جلسه شما به پایان رسیده است.'
TimedOutTitleMember: 'سلام {name}!<br />زمان جلسه شما به پایان رسیده است.'
CampaignAdmin:
MENUTITLE: کمپین‌ها
Campaigns:
AddToCampaign: 'افزودن به کمپین'
ChangePasswordEmail_ss:
CHANGEPASSWORDTEXT1: 'شما رمز عبورتان را تغییر دادید برای'
CHANGEPASSWORDTEXT2: 'اکنون می‌توانید با این اطلاعات وارد شوید:'
CHANGEPASSWORDTEXT3: 'تغییر رمز عبور'
EMAIL: ايميل
HELLO: درود
PASSWORD: رمز عبور
ChangeSet:
DESCRIPTION_AND: '{first} و {second}'
DESCRIPTION_ITEM: آیتم
DESCRIPTION_ITEMS: آیتم‌ها
DESCRIPTION_LIST_FIRST: '{item}'
DESCRIPTION_LIST_LAST: '{list}، و {item}'
DESCRIPTION_LIST_MID: '{list}، {item}'
DESCRIPTION_OTHER_ITEM: 'آیتم دیگر'
DESCRIPTION_OTHER_ITEMS: 'آیتم‌های دیگر'
NAME: نام
PLURALNAME: کمپین‌ها
SINGULARNAME: کمپین
CheckboxField:
NOANSWER: 'خیر'
YESANSWER: 'بله'
@ -109,6 +135,8 @@ fa_IR:
ConfirmedPasswordField:
ATLEAST: 'رمزهای عبور باید حداقل {min} کاراکتر باشد.'
BETWEEN: 'رمزهای عبور باید بین {min} تا {max} کاراکتر باشد.'
CURRENT_PASSWORD_MISSING: 'شما باید رمز عبور کنونی خود را وارد نمایید.'
LOGGED_IN_ERROR: 'جهت تغییر رمز عبور خود باید وارد شده باشید.'
MAXIMUM: 'رمزهای عبور باید حداکثر {max} کاراکتر باشد.'
SHOWONCLICKTITLE: 'تغییر رمز عبور'
ContentController:
@ -152,6 +180,7 @@ fa_IR:
INVALID_REQUEST: 'درخواست نامعتبر'
DropdownField:
CHOOSE: (گزینش)
CHOOSESEARCH: '(گزینش یا جستجو)'
SOURCE_VALIDATION: 'لطفاً یک ارزش از لیست فراهم‌شده برگزینید. {value} یک گزینه معتبر نیست'
EmailField:
VALIDATION: 'لطفاً یک نشانی ایمیل وارد نمایید'
@ -269,6 +298,36 @@ fa_IR:
ResultCreated: '{count} گروه ایجاد شده'
ResultDeleted: 'گروه‌های %d حذف شد'
ResultUpdated: 'گروه‌های %d به‌روز شد'
HTMLEditorField:
ANCHORSCANNOTACCESSPAGE: 'شما مجاز به دسترسی به محتوای صفحه هدف نیستید.'
ANCHORSPAGENOTFOUND: 'صفحه‌ی هدف پیدا نشد.'
BUTTONADDURL: 'افزودن نشانی اینترنتی'
CSSCLASS: 'چیدمان / سبک'
DETAILS: جزئیات
EMAIL: 'نشانی ایمیل'
FILE: فايل
FOLDER: پوشه
IMAGEDIMENSIONS: ابعاد
IMAGEHEIGHTPX: ارتفاع
IMAGETITLETEXT: 'متن عنوان (تول‌تیپ)'
IMAGETITLETEXTDESC: 'جهت اطلاعات بیشتر درباره تصویر'
IMAGEWIDTHPX: پهنا
INSERTMEDIA: 'واردکردن رسانه از'
LINK: 'واردکردن لینک'
LINKDESCR: 'توضیحات لینک'
LINKEMAIL: 'نشانی ایمیل'
LINKEXTERNAL: 'وب‌سایت دیگر'
LINKFILE: 'یک فایل دانلود کنید'
LINKINTERNAL: 'صفحه روی وب‌سایت'
LINKOPENNEWWIN: 'لینک در پنجره جدید باز شود؟'
LINKTO: 'لینک به'
PAGE: صفحه
SUBJECT: 'موضوع ایمیل'
URL: نشانی اینترنتی
URLDESCRIPTION: 'ویدیوها و تصاویر موجود در وب را به آسانی و با وارد نمودن نشانی اینترنتی آن فایل در صفحه درج نمایید. اطمینان حاصل نمایید که شما دارای حقوق یا اجازه‌های مرتبط با اشتراک‌گذاری آن رسانه از وب هستید.<br /><br />لطفاً در نظر داشته باشید که فایل‌ها در سی‌ام‌اس ذخیره نمی‌شوند و آن‌ها از محل اصلی خود فراخوانی می‌شوند، اگر به دلایلی آن فایل در محل اصلی خود موجود نباشد در این صفحه هم قابل دیدن نخواهد بود.'
UpdateMEDIA: 'به‌روز‌رسانی رسانه'
HTMLEditorField_Toolbar:
ERROR_NOTFOUND: 'ناتوان از یافتن فایل جهت دیدن'
HtmlEditorField:
ADDURL: 'افزودن URL'
ADJUSTDETAILSDIMENSIONS: 'جزئیات و ابعاد'
@ -314,6 +373,7 @@ fa_IR:
Image_iframe_ss:
TITLE: 'آی‌فریم آپلود عکس'
LeftAndMain:
CANCEL: لغو
DELETED: حذف شده
HELP: کمک
PERMAGAIN: 'شما از سیستم مدیریت محتوا خارج شده اید.اگر میخواهید دوباره وارد شوید نام کاربری و رمز عبور خود را در قسمت زیر وارد کنید'
@ -343,20 +403,25 @@ fa_IR:
CANTEDIT: 'شما دسترسی انجام این کار را ندارید.'
CONFIRMNEWPASSWORD: 'تکرار رمز عبور جدید'
CONFIRMPASSWORD: 'تکرار رمز عبور'
CURRENT_PASSWORD: 'رمز ورود کنونی'
DATEFORMAT: 'قالب تاریخ'
DefaultAdminFirstname: 'مدیر پیشفرض'
DefaultDateTime: پیش‌فرض
EDIT_PASSWORD: 'رمز ورود جدید'
EMAIL: پست الکترونیک
EMPTYNEWPASSWORD: 'رمز عبور جدید نمیتواند خالی باشد، لطفا دوباره تلاش کنید'
ENTEREMAIL: 'لطفاً یک نشانی ایمیل وارد نمایید تا پیوند ازنوسازی رمز عبور را دریافت کنید.'
ERRORPASSWORDNOTMATCH: 'رمز عبور کنونی همانند نیست، لطفاً مجدداً تلاش نمایید'
FIRSTNAME: 'نام'
INTERFACELANG: 'زبان برنامه'
KEEPMESIGNEDIN: 'مرا واردشده نگه‌دار'
LOGGEDINAS: 'شما به {name} عنوان وارد شده‌اید.'
NEWPASSWORD: 'گذرواژه تازه'
NoPassword: 'رمز عبوری برای این کاربر وجود ندارد'
PASSWORD: رمز عبور
PASSWORDEXPIRED: 'رمز عبور شما منقضی شده‌است. لطفاً یکی جدید برگزینید.'
PLURALNAME: اعضاء
REMEMBERME: 'مرا برای بار بعد به‌خاطر بسپار؟'
SINGULARNAME: عضو
SUBJECTPASSWORDCHANGED: 'گذرواژه شما دگرگون شد'
SUBJECTPASSWORDRESET: 'پیوند ازنوسازی گذرواژه شما'
@ -430,6 +495,8 @@ fa_IR:
Pagination:
Page: صفحه
View: نمایش
PasswordValidator:
TOOSHORT: 'رمز عبور بسیار کوتاه است، باید %s کاراکتر یا بیشتر باشد'
Permission:
AdminGroup: مدیر کل
CMS_ACCESS_CATEGORY: 'دسترسی CMS'
@ -458,6 +525,7 @@ fa_IR:
CHANGEPASSWORDHEADER: 'تغییر گذرواژه'
ENTERNEWPASSWORD: 'لطفاً گذرواژه جدید را وارد کنید.'
ERRORPASSWORDPERMISSION: 'جهت تغییر رمز عبور خود باید وارد شده باشید!'
LOGGEDOUT: 'شما خارج شده‌اید. اگر مایل هستید دوباره وارد شوید، اطلاعات معتبر خود را در زیر وارد نمایید.'
LOGIN: 'ورود'
LOSTPASSWORDHEADER: 'فراموشی رمز عبور'
PASSWORDSENTHEADER: 'پیوند ازنوسازی رمز عبور به ''{email}'' ارسال شد'
@ -527,3 +595,10 @@ fa_IR:
UPLOADSINTO: 'ذخیره شدن در /{path}'
Versioned:
has_many_Versions: نسخه ها
VersionedGridFieldItemRequest:
ARCHIVE: بایگانی
BUTTONARCHIVEDESC: 'عدم انتشار و ارسال به بایگانی'
BUTTONPUBLISH: انتشار
BUTTONUNPUBLISH: عدم انتشار
i18n:
PLURAL: '{number} {form}'

View File

@ -175,7 +175,6 @@ fi:
JsType: 'Javascript-tiedosto'
Mp3Type: 'MP3-äänitiedosto'
MpgType: 'MPEG-videotiedosto'
NOFILESIZE: 'Tiedostokoko on nolla tavua.'
NOVALIDUPLOAD: 'Tiedosto ei ole kelvollinen ladattavaksi'
Name: Nimi
PLURALNAME: Tiedostot

View File

@ -1,5 +1,6 @@
fr:
AssetAdmin:
HIDEALLOWEDEXTS: 'Cacher les extensions autorisées'
NEWFOLDER: Nouveau dossier
SHOWALLOWEDEXTS: 'Montrer les extensions autorisées'
AssetTableField:
@ -7,6 +8,7 @@ fr:
DIM: Dimensions
FILENAME: Nom du fichier
FOLDER: Dossier
HEIGHT: Hauteur
LASTEDIT: 'Dernière modification'
OWNER: Propriétaire
SIZE: 'Taille'
@ -80,6 +82,7 @@ fr:
ConfirmedPasswordField:
ATLEAST: 'Le mot de passe doit comporter au moins {min} caractères.'
BETWEEN: 'Le mot de passe doit comporter entre {min} et {max} caractères.'
CURRENT_PASSWORD_MISSING: 'Vous devez saisir votre mot de passe actuel.'
MAXIMUM: 'Le mot de passe ne doit comporter plus de {max} caractères.'
SHOWONCLICKTITLE: 'Changer le mot de passe'
ContentController:
@ -292,6 +295,7 @@ fr:
DELETED: Supprimé.
HELP: Aide
PERMAGAIN: 'Vous avez été déconnecté du CMS. Si vous voulez vous reconnecter, entrez un nom d''utilisateur et un mot de passe ci-dessous.'
PERMDEFAULT: 'Vous devez être connecté afin d''accéder à l''interface d''administration. Saisissez vos identifiants ci-dessous.'
PreviewButton: Aperçu
REORGANISATIONSUCCESSFUL: 'Larbre du site a été bien réorganisé.'
SAVEDUP: Enregistré.

View File

@ -5,40 +5,98 @@ hr:
AssetTableField:
CREATED: 'Uploadano'
DIM: Dimenzije
FILENAME: Ime datoteke
FOLDER: Mapa
FILENAME: Naziv datoteke
FOLDER: Direktorij
HEIGHT: Visina
LASTEDIT: 'Zadnja promjena'
OWNER: Vlasnik
SIZE: 'Veličina'
SIZE: 'Veličina datoteke'
TITLE: Naslov
TYPE: 'Tip'
URL: URL
TYPE: 'Tip datoteke'
URL: Link
WIDTH: Širina
AssetUploadField:
ChooseFiles: 'Odaberite datoteke'
DRAGFILESHERE: 'Povucite datoteke ovdje'
DROPAREA: 'Područje ubacivanja'
EDITALL: 'Uredi sve'
EDITANDORGANIZE: 'Uredi i organiziraj'
EDITINFO: 'Uredi datoteke'
FILES: Datoteke
FROMCOMPUTER: 'Odaberite datoteke sa svog računala'
FROMCOMPUTERINFO: 'Uploadajte sa svog računala'
INSERTURL: 'Ubaci sa linka'
REMOVEINFO: 'Izbrišite ovu datoteku s ovog polja'
TOTAL: Ukupno
TOUPLOAD: 'Odaberite datoteke za upload...'
UPLOADINPROGRESS: 'Molim pričekajte... upload u tijeku'
UPLOADOR: ILI
BBCodeParser:
ALIGNEMENT: Poravnanje
BOLD: 'Bold Text'
BOLDEXAMPLE: Bold
BackLink_Button_ss:
Back: Nazad
BasicAuth:
ENTERINFO: 'Unesite korisničko ime i lozinu'
ERRORNOTADMIN: 'Korisnik nije administrator'
ERRORNOTREC: 'Korisničko ime / lozinka nije prepoznata'
Boolean:
ANY: Bilo koji
NOANSWER: 'Ne'
YESANSWER: 'Da'
CAMPAIGNS:
ADDTOCAMPAIGN: 'Dodaj kampanji'
CMSLoadingScreen_ss:
LOADING: učitavam...
CMSMain:
SAVE: Snimi
CMSMemberLoginForm:
BUTTONFORGOTPASSWORD: 'Zaboravljena lozinka?'
CMSPagesController_Tools_ss:
FILTER: Filter
CMSProfileController:
MENUTITLE: 'Moj profil'
CMSSecurity:
SUCCESS: Uspjeh
TimedOutTitleAnonymous: 'Vaša sesija je istekla.'
TimedOutTitleMember: 'Bok {name}!<br />Vaša sesija je istekla.'
CampaignAdmin:
MENUTITLE: Kampanje
Campaigns:
AddToCampaign: 'Dodaj kampanji'
ChangePasswordEmail_ss:
CHANGEPASSWORDTEXT1: 'Promjenili ste lozinku za '
CHANGEPASSWORDTEXT2: 'Za prijavu koristite slijedeće podatke'
CHANGEPASSWORDTEXT3: 'Promjeni lozinku'
EMAIL: Email
HELLO: Pozdrav
PASSWORD: Lozinka
ChangeSet:
DESCRIPTION_AND: '{first} i {second}'
DESCRIPTION_ITEM: stavka
DESCRIPTION_ITEMS: stavke
DESCRIPTION_LIST_FIRST: '{item}'
DESCRIPTION_LIST_LAST: '{list}, i {item}'
DESCRIPTION_LIST_MID: '{list}, {item}'
DESCRIPTION_OTHER_ITEM: 'ostala stavka'
DESCRIPTION_OTHER_ITEMS: 'ostale stavke'
NAME: Naziv
PLURALNAME: Kampanje
SINGULARNAME: Kampanja
STATE: Stanje
CheckboxField:
NOANSWER: 'Ne'
YESANSWER: 'Da'
ConfirmedPasswordField:
SHOWONCLICKTITLE: 'Promjenite lozinku'
CreditCardField:
FIRST: prvi
FOURTH: četvrti
SECOND: drugi
THIRD: treći
CurrencyField:
CURRENCYSYMBOL: $
DataObject:
PLURALNAME: 'Podatkovni objekti'
SINGULARNAME: 'Podatkovni objekt'
@ -70,9 +128,37 @@ hr:
CHOOSE: (Odaberite)
EmailField:
VALIDATION: 'Molimo unesite email adresu'
Enum:
ANY: bilo koji
File:
AviType: 'AVI video datoteka'
Content: Sadržaj
CssType: 'CSS datoteka'
DocType: 'Word dokument'
Filename: Naziv datoteke
GifType: 'GIF slika - dobra za dijagrame'
GzType: 'GZIP komprimirana datoteka'
HtlType: 'HTML datoteka'
HtmlType: 'HTML datoteka'
INVALIDEXTENSION: 'Ekstenzija nije dozvoljena (valjane: {extensions}) '
INVALIDEXTENSIONSHORT: 'Ekstenzija nije dozvoljena'
IcoType: 'Slika ikone'
JpgType: 'JPEG slika - dobra za fotografije'
JsType: 'Javascript datoteka'
Mp3Type: 'MP3 zvuk datoteka'
MpgType: 'MPEG video datoteka'
NOVALIDUPLOAD: 'Datoteka nije valjan upload'
Name: Naziv
PLURALNAME: Datoteke
PngType: 'PNG slika - dobar generalan format'
SINGULARNAME: Datoteka
Title: Naslov
WavType: 'WAV zvuk datoteka'
XlsType: 'Excel tablica'
ZipType: 'ZIP komprimirana datoteka'
Folder:
PLURALNAME: Direktoriji
SINGULARNAME: Direktorij
ForgotPasswordEmail_ss:
HELLO: Pozdrav
TEXT1: 'Ovdje je Vaš'
@ -83,22 +169,72 @@ hr:
VALIDATIONNOTUNIQUE: 'Unešena vrijednost nije unikatna'
VALIDATIONPASSWORDSDONTMATCH: 'Lozinke se ne slažu'
VALIDATIONPASSWORDSNOTEMPTY: 'Lozinke moraju imati najmanje jedan broj i jedan alfanumerički znak'
FormField:
NONE: nijedan
GridAction:
DELETE_DESCRIPTION: Obriši
Delete: Obriši
GridField:
Add: 'Dodaj {name}'
Filter: Filter
FilterBy: 'Filtriraj po'
Find: Pronađi
GridFieldDetailForm:
CancelBtn: Odustani
Create: Kreiraj
Delete: Obriši
DeletePermissionsFailure: 'Nema dozvole brisanja'
Deleted: 'Obrisano %s %s'
Save: Spremi
Saved: 'Spremljeno {name} {link}'
GridFieldEditButton_ss:
EDIT: Uredi
GridFieldItemEditView:
Go_back: 'Idi nazad'
Group:
Code: 'Krupni kod'
DefaultGroupTitleAdministrators: Administratori
DefaultGroupTitleContentAuthors: 'Autori sadržaja'
Description: Opis
Locked: 'Zaključano?'
PLURALNAME: Grupe
Parent: 'Roditeljska grupa'
SINGULARNAME: Grupa
has_many_Permissions: Dozvole
many_many_Members: Članovi
HTMLEditorField:
ANCHORVALUE: Sidro
FILE: Datoteka
FOLDER: Direktorij
IMAGEDIMENSIONS: Dimenzije
IMAGEHEIGHTPX: Visina
IMAGEWIDTHPX: Širina
LINK: 'Ubaci vezu'
LINKFILE: 'Preuzmi datoteku'
LINKINTERNAL: 'Stranica na ovom webu'
LINKOPENNEWWIN: 'Otvori link u novom prozoru?'
LINKTO: 'Poveži na'
PAGE: Stranica
URL: Link
HtmlEditorField:
ANCHORVALUE: Sidro
BUTTONADDURL: 'Dodaj link'
BUTTONINSERT: Ubaci
BUTTONINSERTLINK: 'Ubaci vezu'
BUTTONREMOVELINK: 'Obriši vezu'
BUTTONUpdate: Ažuriraj
CSSCLASS: 'Poravnanje / Stil'
CSSCLASSCENTER: 'Centralno'
CSSCLASSLEFT: 'Lijevo, sa okruženjem teksta.'
CSSCLASSRIGHT: 'Desno, sa okruženjem teksta'
DETAILS: Detalji
EMAIL: 'Email adresa'
FILE: Datoteka
FOLDER: Direktorij
FROMCOMPUTER: 'Sa računala'
FROMWEB: 'Sa weba'
FindInFolder: 'Pronađi u direktoriju'
IMAGEALT: 'Alternativni tekst (alt)'
IMAGEDIMENSIONS: Dimenzije
IMAGEHEIGHTPX: Visina
IMAGEWIDTHPX: Širina
@ -111,18 +247,45 @@ hr:
LINKOPENNEWWIN: 'Otvori vezu (link) u novom prozoru?'
LINKTO: 'Poveži na'
PAGE: Stranica
Image:
PLURALNAME: Datoteke
SINGULARNAME: Datoteka
Image_Cached:
PLURALNAME: Datoteke
SINGULARNAME: Datoteka
Image_iframe_ss:
TITLE: 'Iframe za upload slike'
LeftAndMain:
CANCEL: Odustani
DELETED: Obrisano.
HELP: Pomoć
PERMAGAIN: 'Odjavili ste se sa sustava. Želite li se ponovno prijaviti upišite korisničko ime i lozinku.'
PreviewButton: Pregled
SAVEDUP: Spremljeno
ValidationError: 'Greška validacije'
VersionUnknown: nepoznato
LeftAndMain_Menu_ss:
Hello: Pozdrav
LOGOUT: 'Odjava'
LoginAttempt:
Email: 'Email adresa'
IP: 'IP adresa'
Status: Status
Member:
ADDGROUP: 'Dodaj grupu'
BUTTONCHANGEPASSWORD: 'Promjeni lozinku'
BUTTONLOGIN: 'Prijava'
BUTTONLOGINOTHER: 'Prijavite se kao netko drugi'
BUTTONLOSTPASSWORD: 'Zaboravljena lozinka?'
CANTEDIT: 'Nema prava za to'
CONFIRMNEWPASSWORD: 'Potvrdite novu lozinku'
CONFIRMPASSWORD: 'Potvrdi lozinku'
CURRENT_PASSWORD: 'Trenutna lozinka'
DATEFORMAT: 'Format datuma'
DefaultAdminFirstname: 'Zadani administrator'
DefaultDateTime: zadano
EDIT_PASSWORD: 'Nova lozinka'
EMAIL: Email
ERRORNEWPASSWORD: 'Pogrešno ste upisali novu lozinku, pokušajte ponovno.'
ERRORPASSWORDNOTMATCH: 'Vaša trenutna lozinka se ne podudara, probajte ponovno'
FIRSTNAME: 'Ime'
@ -136,10 +299,43 @@ hr:
SURNAME: Prezime
YOUROLDPASSWORD: 'Stara lozinka'
belongs_many_many_Groups: Grupe
db_LastVisited: 'Datum zadnje posjete'
db_LockedOutUntil: 'Zaključano do'
db_Password: Lozinka
db_PasswordExpiry: 'Lozinka ističe'
MemberAuthenticator:
TITLE: 'E-mail &amp; Lozinka'
MemberDatetimeOptionsetField:
Preview: Pregled
ModelAdmin:
IMPORT: 'Uvezi iz CSV'
IMPORTEDRECORDS: 'Uveženo {count} zapisa.'
NOCSVFILE: 'Molimo pretražite CSV datoteku za uvoz'
NOIMPORT: 'Ništa za uvoz'
RESET: Resetiraj
Title: 'Klasa podataka'
UPDATEDRECORDS: 'Osvježeno {count} zapisa.'
ModelAdmin_Tools_ss:
FILTER: Filter
IMPORT: Uvoz
ModelSidebar_ss:
IMPORT_TAB_HEADER: Uvoz
SEARCHLISTINGS: Traži
MoneyField:
FIELDLABELCURRENCY: Valuta
Pagination:
Page: Stranica
View: Pregled
Permission:
AdminGroup: Administrator
CMS_ACCESS_CATEGORY: 'CMS pristup'
FULLADMINRIGHTS: 'Puna administrativna prava'
PLURALNAME: Dozvole
SINGULARNAME: Dozvola
PermissionRole:
PLURALNAME: Uloge
SINGULARNAME: Uloga
Title: Naslov
PhoneNumberField:
VALIDATION: 'Molim unesite ispravan telefonski broj'
Security:
@ -154,11 +350,37 @@ hr:
NOTEPAGESECURED: 'Ova stranica je zaštićena. Prijavite se na sustav sa svojim pristupnim podatcima i odmah ćemo vas preusmjeriti.'
NOTERESETPASSWORD: 'Unesite svoju e-mail adresu, a mi ćemo Vam poslati link putem kojega možete resetirati Vašu lozinku.'
SecurityAdmin:
MEMBERS: Članovi
MENUTITLE: Sigurnost
NEWGROUP: 'Nova Grupa'
PERMISSIONS: Dozvole
ROLES: Uloge
TABROLES: Uloge
Users: Korisnici
SilverStripeNavigator:
Auto: Aut
Edit: Uredi
EditView: 'Mod uređivanja'
Width: širina
SiteTree:
TABMAIN: Osnovno
TableListField:
Print: Ispiši
TableListField_PageControls_ss:
OF: od
ToggleField:
LESS: manje
MORE: više
UploadField:
ATTACHFILE: 'Dodaj datoteku'
ATTACHFILES: 'Dodaj datoteke'
AttachFile: 'Dodaj datoteku(e)'
CHOOSEANOTHERFILE: 'Odaberi drugu datoteku'
DELETE: 'Obriši iz datoteka'
DOEDIT: Snimi
EDIT: Uredi
EDITINFO: 'Uredi ovu datoteku'
FROMCOMPUTER: 'Sa računala'
REMOVE: Ukloni
Versioned:
has_many_Versions: Verzije

View File

@ -1,5 +1,12 @@
id_ID:
AddToCampaign:
ErrorCampaignPermissionDenied: 'Sepertinya Anda tidak memiliki ijin yang diperlukan untuk menambahkan {ObjectTitle} ke {CampaignTitle}'
ErrorGeneral: 'Mohon maaf, ada kesalahan'
ErrorNotFound: '{Type} tidak ditemukan'
Success: 'Berhasil menambahkan {ObjectTitle} ke {CampaignTitle}'
AssetAdmin:
ALLOWEDEXTS: 'Ekstensi berkas yang diperbolehkan'
HIDEALLOWEDEXTS: 'Sembunyikan ekstensi berkas yang diperbolehkan'
NEWFOLDER: FolderBaru
SHOWALLOWEDEXTS: 'Tampilkan ekstensi yang dibolehkan'
AssetTableField:
@ -13,6 +20,7 @@ id_ID:
TITLE: Judul
TYPE: 'Jenis berkas'
URL: URL
WIDTH: Lebar
AssetUploadField:
ChooseFiles: 'Pilih berkas'
DRAGFILESHERE: 'Tarik berkas ke sini'
@ -566,3 +574,6 @@ id_ID:
UPLOADSINTO: 'disimpan ke /{path}'
Versioned:
has_many_Versions: Versi
VersionedGridFieldItemRequest:
ARCHIVE: Arsip
Archived: '%s %s diarsipkan'

View File

@ -1,5 +1,12 @@
it:
AddToCampaign:
ErrorCampaignPermissionDenied: 'Sembra tu non abbia i permessi necessari per aggiungere {ObjectTitle} a {CampaignTitle}'
ErrorGeneral: 'Spiacente, ma c''è stato un errore'
ErrorItemPermissionDenied: 'Sembra tu non abbia i permessi necessari per aggiungere {ObjectTitle} alla campagna'
ErrorNotFound: 'Non è stato possibile trovare {Type}'
Success: '{ObjectTitle} aggiunto a {CampaignTitle} con successo'
AssetAdmin:
ALLOWEDEXTS: 'Estensioni consentite per l''upload'
HIDEALLOWEDEXTS: 'Nascondi estensioni permesse'
NEWFOLDER: NuovaCartella
SHOWALLOWEDEXTS: 'Mostra le estensioni consentite'
@ -29,6 +36,7 @@ it:
INSERTURL: 'Inserisci da URL'
REMOVEINFO: 'Rimuovi questo file da questo campo'
TOTAL: Totale
TOUPLOAD: 'Scegli i file da caricare...'
UPLOADINPROGRESS: 'Attendere prego... caricamento in corso'
UPLOADOR: O
BBCodeParser:
@ -66,6 +74,8 @@ it:
ANY: Qualsiasi
NOANSWER: 'No'
YESANSWER: 'Sì'
CAMPAIGNS:
ADDTOCAMPAIGN: 'Aggiungere alla campagna'
CMSLoadingScreen_ss:
LOADING: Caricamento in corso...
REQUIREJS: 'Il CMS richiede JavaScript abilitato.'
@ -92,12 +102,34 @@ it:
SUCCESSCONTENT: '<p>Accesso eseguito. Se non sarai ridirezionato automaticamente, <a target="_top" href="{link}">cliccare qui</a></p>'
TimedOutTitleAnonymous: 'La tua sessione è scaduta.'
TimedOutTitleMember: 'Ciao {name}!<br />La tua sessione è scaduta.'
CampaignAdmin:
MENUTITLE: Campagne
Campaigns:
AddToCampaign: 'Aggiungere Alla Campagna'
ChangePasswordEmail_ss:
CHANGEPASSWORDFOREMAIL: 'La password per l''account con l''email {email} è cambiata. Se non l\''hai ancora fatto, prego cambiare la password usando il link sottostante'
CHANGEPASSWORDTEXT1: 'Hai cambiato la password per'
CHANGEPASSWORDTEXT2: 'Ora puoi utilizzare le seguenti credenziali per accedere:'
CHANGEPASSWORDTEXT3: 'Cambia password'
EMAIL: Email
HELLO: Ciao
PASSWORD: Password
ChangeSet:
DESCRIPTION_AND: '{first} e {second}'
DESCRIPTION_ITEM: elemento
DESCRIPTION_ITEMS: elementi
DESCRIPTION_LIST_FIRST: '{item}'
DESCRIPTION_LIST_LAST: '{list}, e {item}'
DESCRIPTION_LIST_MID: '{list}, {item}'
DESCRIPTION_OTHER_ITEM: 'altro elemento'
DESCRIPTION_OTHER_ITEMS: 'altri elementi'
NAME: Nome
PLURALNAME: Campagne
SINGULARNAME: Campagna
STATE: Stato
ChangeSetItem:
PLURALNAME: 'Cambiare gli elementi del set'
SINGULARNAME: 'Cambiare l''elemento del set'
CheckboxField:
NOANSWER: 'No'
YESANSWER: 'Sì'
@ -108,6 +140,9 @@ it:
ConfirmedPasswordField:
ATLEAST: 'La password deve essere lunga almeno {min} caratteri.'
BETWEEN: 'La password deve essere lunga da {min} a {max} caratteri.'
CURRENT_PASSWORD_ERROR: 'La password che hai inserito non è corretta.'
CURRENT_PASSWORD_MISSING: 'Devi inserire la tua password attuale.'
LOGGED_IN_ERROR: 'Devi essere autenticato per poter cambiare la tua password.'
MAXIMUM: 'La password deve essere lunga almeno {max} caratteri.'
SHOWONCLICKTITLE: 'Cambia password'
ContentController:
@ -151,6 +186,7 @@ it:
INVALID_REQUEST: 'Richiesta non valida'
DropdownField:
CHOOSE: (Scegli)
CHOOSESEARCH: '(Scegliere o Cercare)'
SOURCE_VALIDATION: 'Per favore selezionare un valore tra quelli forniti. {value} non è un''opzione valida'
EmailField:
VALIDATION: 'Inserisci un indirizzo e-mail'
@ -265,9 +301,73 @@ it:
many_many_Members: Membri
GroupImportForm:
Help1: '<p>Importa gruppi in formato <em>CSV</em> (valori separati da virgole). <small><a href="#" class="toggle-advanced">Mostra utilizzo avanzato</a></small></p>'
Help2: '<div class="advanced">
<h4>Utilizzo avanzato</h4>
<ul>
<li>Colonne consentite: <em>%s</em></li>
<li>Gruppi esistenti sono individuati attraverso la proprietà univoca <em>Code</em> e aggiornati con i nuovi valori dal file importato.</li>
<li>Possono essere create gerarchie usando la colonna <em>ParentCode</em></li>
<li>Codici di autorizzazione possono essere assegnati con la colonna <em>PermissionCode</em>. I codici di autorizzazione preesistenti non saranno cancellati.</li>
</ul>
</div>'
ResultCreated: 'Creati {count} gruppi'
ResultDeleted: 'Eliminati %d gruppi'
ResultUpdated: 'Aggiornati %d gruppi'
HTMLEditorField:
ANCHORSCANNOTACCESSPAGE: 'Non ti è consentito accedere al contenuto della pagina di destinazione.'
ANCHORSPAGENOTFOUND: 'Pagina di destinazione non trovata.'
ANCHORVALUE: Ancora
BUTTONADDURL: 'Aggiungi url'
CAPTIONTEXT: 'Didascalia di testo'
CSSCLASS: 'Allineamento / stile'
CSSCLASSCENTER: 'Centrato, su se stesso.'
CSSCLASSLEFT: 'Sulla sinistra, con il testo attorno.'
CSSCLASSLEFTALONE: 'Sulla sinistra, da sola.'
CSSCLASSRIGHT: 'Sulla destra, con il testo attorno.'
DETAILS: Dettagli
EMAIL: 'Indirizzo email'
FILE: File
FOLDER: Cartella
IMAGEALT: 'Testo alternativo (alt)'
IMAGEALTTEXT: 'Testo alternativo (alt) - mostrato nel caso l''immagine non possa essere visualizzata'
IMAGEALTTEXTDESC: 'Mostrato agli screen reader o se l''immagine non può essere visualizzata'
IMAGEDIMENSIONS: Dimensioni
IMAGEHEIGHTPX: Altezza
IMAGETITLE: 'Titolo (tooltip) - per informazioni aggiuntive sull''immagine.'
IMAGETITLETEXT: 'Titolo (tooltip)'
IMAGETITLETEXTDESC: 'Per informazioni aggiuntive sull''immagine'
IMAGEWIDTHPX: Larghezza
INSERTMEDIA: 'Inserisci media da'
LINK: 'Inserisci Link'
LINKANCHOR: 'Ancora su questa pagina'
LINKDESCR: 'Descrizione del link'
LINKEMAIL: 'Indirizzo email'
LINKEXTERNAL: 'Un altro sito web'
LINKFILE: 'Scarica un file'
LINKINTERNAL: 'Pagina su questo sito'
LINKOPENNEWWIN: 'Apri il link in una nuova finestra?'
LINKTO: 'Collega a'
PAGE: Pagina
SUBJECT: 'Oggetto email'
URL: URL
URLDESCRIPTION: 'Inserisci video e immagini dal Web nella tua pagina semplicemente inserendo l''URL del file. Si sicuro di avere i diritti o i permessi prima di condividere media direttamente dal Web.<br /><br />NB : i file non sono aggiunti allo storage file del CMS, ma incorpora il file dalla sua location principale, se per un qualsiasi motivo il file non e'' più raggiungibile nella sua location principale, non sara'' più visibile su questa pagina.'
URLNOTANOEMBEDRESOURCE: 'L''URL ''{url}'' non può essere convertito in una risorsa media.'
UpdateMEDIA: 'Aggiorna media'
HTMLEditorField_Toolbar:
ERROR_ABSOLUTE: 'Possono essere incorporati solo URL assoluti'
ERROR_HOSTNAME: 'L''hostname di questo file non è incluso nella whitelist'
ERROR_ID: 'Sono necessari entrambi i parametri "ID" e "FileURL" per identificare il file'
ERROR_NOTFOUND: 'Impossibile trovare il file da visualizzare'
ERROR_OEMBED_REMOTE: 'Oembed è compatibile solo con file remoti'
ERROR_SCHEME: 'Lo schema di questo file non è incluso nella whitelist'
Hierarchy:
InfiniteLoopNotAllowed: 'Trovato loop infinito nella gerarchia di "{type}". Cambia il padre per risolvere il problema'
HtmlEditorField:
@ -327,6 +427,7 @@ it:
Image_iframe_ss:
TITLE: 'Iframe per l''inserimento dell''immagine'
LeftAndMain:
CANCEL: Annulla
CANT_REORGANISE: 'Non hai i permessi per modificare le pagine di primo livello. Le modifiche non sono state salvate.'
DELETED: Eliminato.
HELP: Aiuto
@ -360,9 +461,11 @@ it:
CANTEDIT: 'Non hai i permessi per fare questo'
CONFIRMNEWPASSWORD: 'Conferma nuova password'
CONFIRMPASSWORD: 'Conferma password'
CURRENT_PASSWORD: 'Password Attuale'
DATEFORMAT: 'Formato della data'
DefaultAdminFirstname: 'Amministratore Predefinito'
DefaultDateTime: predefinito
EDIT_PASSWORD: 'Nuova password'
EMAIL: Email
EMPTYNEWPASSWORD: 'La nuova password non può essere vuota, riprova'
ENTEREMAIL: 'Inserisci un indirizzo e-mail per ricevere il link di azzeramento della password'
@ -373,12 +476,14 @@ it:
FIRSTNAME: 'Nome'
INTERFACELANG: 'Lingua dell''interfaccia'
INVALIDNEWPASSWORD: 'Non possiamo accettare questa password: {password}'
KEEPMESIGNEDIN: 'Resta autenticato'
LOGGEDINAS: 'Sei collegato come {name}.'
NEWPASSWORD: 'Nuova password'
NoPassword: 'Manca la password per questo utente.'
PASSWORD: Password
PASSWORDEXPIRED: 'La tua password è scaduta. Per favore selezionarne una nuova.'
PLURALNAME: Utenti
REMEMBERME: 'Ricordati di me la prossima volta?'
SINGULARNAME: Utente
SUBJECTPASSWORDCHANGED: 'La tua password è stata cambiata'
SUBJECTPASSWORDRESET: 'Link per azzerare la tua password'
@ -418,6 +523,17 @@ it:
Toggle: 'Mostra aiuto per la formattazione'
MemberImportForm:
Help1: '<p>Importa utenti in <em>formato CSV</em> (valori separati da virgole). <small><a href="#" class="toggle-advanced">Mostra utilizzo avanzato</a></small></p>'
Help2: '<div class="advanced">
<h4>Utilizzo avanzato</h4>
<ul>
<li>Colonne consentite: <em>%s</em></li>
<li>Utenti esistenti sono individuati attraverso la proprietà univoca <em>Code</em> e aggiornati con i nuovi valori dal file importato.</li>
<li>Possono essere assegnati gruppi usando la colonna <em>Groups</em>. I gruppi sono identificati dalla proprietà <em>Code</em>, possono essere specificati più gruppi separandoli con la virgola. I gruppi preesistenti non saranno cancellati.</li></ul></div>'
ResultCreated: 'Creati {count} utenti'
ResultDeleted: 'Eliminati %d utenti'
ResultNone: 'Nessun cambiamento'
@ -452,6 +568,8 @@ it:
MoneyField:
FIELDLABELAMOUNT: Importo
FIELDLABELCURRENCY: Valuta
MultiSelectField:
SOURCE_VALIDATION: 'Per favore selezionare un valore tra quelli forniti. È stata fornita l''opzione non valida {value}'
NullableField:
IsNullLabel: 'è nullo.'
NumericField:
@ -489,6 +607,9 @@ it:
UserPermissionsIntro: 'Assegnando gruppi a questo utente modificherà i suoi permessi. Vedi la sezione gruppi per dettagli sui permessi dei singoli gruppi.'
PhoneNumberField:
VALIDATION: 'Per favore inserisci un numero di telefono valido'
RememberLoginHash:
PLURALNAME: 'Ricordare gli Hash di Login'
SINGULARNAME: 'Ricordare l''Hash di Login'
Security:
ALREADYLOGGEDIN: 'Non hai accesso a questa pagina. Se hai un altro account che può accederci, puoi autenticarti qui sotto.'
BUTTONSEND: 'Inviami il link per azzerare la password'
@ -584,3 +705,14 @@ it:
UPLOADSINTO: 'salva in /{path}'
Versioned:
has_many_Versions: Versioni
VersionedGridFieldItemRequest:
ARCHIVE: Archiviare
Archived: '%s %s archiviata'
BUTTONARCHIVEDESC: 'Nascondere e mettere in archivio'
BUTTONPUBLISH: Pubblicare
BUTTONUNPUBLISH: Nascondere
BUTTONUNPUBLISHDESC: 'Rimuovere questo record dal sito pubblicato'
Published: 'Pubblicato {name} {link}'
Unpublished: 'Nascosto %s %s'
i18n:
PLURAL: '{number} {form}'

View File

@ -1,5 +1,13 @@
ru:
AddToCampaign:
ErrorCampaignPermissionDenied: 'У вас не достаточно прав доступа для добавления {ObjectTitle} в {CampaignTitle}'
ErrorGeneral: 'Произошла ошибка'
ErrorItemPermissionDenied: 'У вас не достаточно прав доступа для добавления {ObjectTitle} к кампании'
ErrorNotFound: '{Type} не обнаружен'
Success: '{ObjectTitle} добавлен в {CampaignTitle}'
AssetAdmin:
ALLOWEDEXTS: 'Разрешённые расширения файлов для загрузки'
HIDEALLOWEDEXTS: 'Скрыть разрешенные расширения'
NEWFOLDER: Новая папка
SHOWALLOWEDEXTS: 'Показать допустимые расширения'
AssetTableField:
@ -7,12 +15,14 @@ ru:
DIM: Размеры
FILENAME: Имя файла
FOLDER: Папка
HEIGHT: Высота
LASTEDIT: 'Последнее изменение'
OWNER: Владелец
SIZE: 'Размер'
TITLE: Название
TYPE: 'Тип'
URL: URL
WIDTH: Ширина
AssetUploadField:
ChooseFiles: 'Выберите файлы'
DRAGFILESHERE: 'Перетащите файлы сюда'
@ -23,7 +33,10 @@ ru:
FILES: Файлы
FROMCOMPUTER: 'Выберите файлы с диска вашего компьютера'
FROMCOMPUTERINFO: 'Загрузить с диска вашего компьютера'
INSERTURL: 'Вставить ссылку'
REMOVEINFO: 'Удалить этот файл из поля'
TOTAL: Всего
TOUPLOAD: 'Выберите файлы для загрузки ...'
UPLOADINPROGRESS: 'Идет загрузка... Пожалуйста, подождите'
UPLOADOR: ИЛИ
BBCodeParser:
@ -59,6 +72,10 @@ ru:
ERRORNOTREC: 'Такое имя пользователя или пароль не существует'
Boolean:
ANY: Все
NOANSWER: 'Нет'
YESANSWER: 'Да'
CAMPAIGNS:
ADDTOCAMPAIGN: 'Добавить в кампанию'
CMSLoadingScreen_ss:
LOADING: Идет загрузка...
REQUIREJS: 'Для работы с CMS у вас должен быть включен JavaScript.'
@ -67,22 +84,69 @@ ru:
ACCESSALLINTERFACES: 'Доступ ко всему интерфейсу CMS'
ACCESSALLINTERFACESHELP: 'Отменяет индивидуальные настройки прав доступа.'
SAVE: Сохранить
CMSMemberLoginForm:
BUTTONFORGOTPASSWORD: 'Забыли пароль?'
BUTTONLOGIN: 'Вход'
BUTTONLOGOUT: 'Выход'
PASSWORDEXPIRED: '<p>Время действия вашего пароля истекло. <a target="_top" href="{link}">Установите новый пароль.</a></p>'
CMSPageHistoryController_versions_ss:
PREVIEW: 'Предварительный просмотр сайта'
CMSPagesController_Tools_ss:
FILTER: Фильтр
CMSProfileController:
MENUTITLE: 'Мой профиль'
CMSSecurity:
INVALIDUSER: '<p>Неправильный пользователь. <a target="_top" href="{link}">Войдите заново в систему</a> чтобы продолжить.</p>'
LoginMessage: '<p>Если у вас есть что-либо несохраненное вы можете вернуться к этому войдя в систему заново с помощью формы ниже.</p>'
SUCCESS: Готово
SUCCESSCONTENT: '<p>Вы вошли в систему. Если вы не были автоматически перенаправлены <a target="_top" href="{link}">нажмите здесь</a></p>'
TimedOutTitleAnonymous: 'Время вашего сеанса истекло.'
TimedOutTitleMember: '{name}!<br />Время вашего сеанса истекло.'
CampaignAdmin:
MENUTITLE: Кампании
Campaigns:
AddToCampaign: 'Добавить в кампанию'
ChangePasswordEmail_ss:
CHANGEPASSWORDFOREMAIL: 'Пароль для регистрации с Email адресом {email} был изменён. Если вы его не меняли установите новый перейдя по ссылке ниже'
CHANGEPASSWORDTEXT1: 'Вы изменили свой пароль на'
CHANGEPASSWORDTEXT2: 'Для того, чтобы войти, используйте сейчас следующие учетные данные:'
CHANGEPASSWORDTEXT3: 'Изменить пароль'
EMAIL: Email
HELLO: Здравствуйте
PASSWORD: Пароль
ChangeSet:
DESCRIPTION_AND: '{first} и {second}'
DESCRIPTION_ITEM: элемент
DESCRIPTION_ITEMS: элементы
DESCRIPTION_LIST_FIRST: '{item}'
DESCRIPTION_LIST_LAST: '{list}, и {item}'
DESCRIPTION_LIST_MID: '{list}, {item}'
DESCRIPTION_OTHER_ITEM: 'другой элемент'
DESCRIPTION_OTHER_ITEMS: 'другие элементы'
NAME: Название
PLURALNAME: Кампании
SINGULARNAME: Кампания
STATE: Статус
ChangeSetItem:
PLURALNAME: 'Изменить набор элементов'
SINGULARNAME: 'Изменить элемент'
CheckboxField:
NOANSWER: 'Нет'
YESANSWER: 'Да'
CheckboxFieldSetField:
SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение: {value}'
CheckboxSetField:
SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение: ''{value}'''
ConfirmedPasswordField:
ATLEAST: 'Пароль должен быть не короче {min} символов.'
BETWEEN: 'Пароль должен иметь длину от {min} до {max} символов.'
CURRENT_PASSWORD_ERROR: 'Неправильно введён текущий пароль.'
CURRENT_PASSWORD_MISSING: 'Вы должны указать Ваш текущий пароль.'
LOGGED_IN_ERROR: 'Вы должны войти в систему, чтобы изменить Ваш пароль.'
MAXIMUM: 'Пароль должен быть не длиннее {max} символов.'
SHOWONCLICKTITLE: 'Изменить пароль'
ContentController:
DRAFT_SITE_ACCESS_RESTRICTION: 'Для просмотра чернового или архивного содержимого вам необходимо войти в систему со своим именем пользователя и паролем. <a href="%s">Щелкните здесь, чтобы вернуться на опубликованный сайт.</a>'
NOTLOGGEDIN: 'Не выполнен вход в систему'
CreditCardField:
FIRST: первая
@ -122,6 +186,8 @@ ru:
INVALID_REQUEST: 'Неверный запрос'
DropdownField:
CHOOSE: (Выберите)
CHOOSESEARCH: '(Выбрать или найти)'
SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение: {value}'
EmailField:
VALIDATION: 'Пожалуйста, задайте адрес email.'
Enum:
@ -169,6 +235,7 @@ ru:
TEXT3: для
Form:
CSRF_EXPIRED_MESSAGE: 'Срок действия сеанса истек. Пожалуйста, отправьте данные формы еще раз.'
CSRF_FAILED_MESSAGE: 'Произошла техническая ошибка. Нажмите кнопку "Назад", обновите страницу в браузере и повторите попытку.'
FIELDISREQUIRED: 'Поле {$name} является обязательным'
SubmitBtnLabel: Выбрать
VALIDATIONCREDITNUMBER: 'Пожалуйста, убедитесь, что номер кредитной карты {number} задан правильно'
@ -222,6 +289,7 @@ ru:
DefaultGroupTitleContentAuthors: 'Авторы содержимого'
Description: Описание
GroupReminder: 'При назначении группы верхнего уровня все роли будут переняты из нее'
HierarchyPermsError: 'У Вас недостаточно прав для назначения родительской группы "%s" (необходимы права администратора)'
Locked: 'Блокировано?'
NoRoles: 'Ролей не найдено'
PLURALNAME: Группы
@ -233,14 +301,64 @@ ru:
many_many_Members: Члены группы
GroupImportForm:
Help1: '<p>Импорт одной или нескольких групп в формате <em>CSV</em> (comma-separated values). <small><a href="#" class="toggle-advanced">Подробные сведения</a></small></p>'
Help2: "<div class=\"advanced\">\n<h4>Расширенное использование</h4>\n<ul>\n<li>Разрешенные столбцы: <em>%s</em></li>\n<li>Существующие пользователи сверяются c уникальным атрибутом <em>Code</em>, после чего в записи вносятся новые значения из \nимпортированного файла.</li>\n<li>Назначение групп производится с помощью столбца <em>Groups</em>. Группы идентифицируются по атрибуту <em>Code</em>, \nотдельные группы разделяются запятой. Если участник входит в какую-либо группу, это свойство не обнуляется.</li>\n</ul>\n</div>"
ResultCreated: 'Создано {count} групп'
ResultDeleted: 'Удалено %d групп'
ResultUpdated: 'Обновлено %d групп'
HTMLEditorField:
ANCHORSCANNOTACCESSPAGE: 'У Вас недостаточно прав для доступа к содержимому данной страницы.'
ANCHORSPAGENOTFOUND: 'Страница не найдена.'
ANCHORVALUE: Якорь
BUTTONADDURL: 'Добавить ссылку'
CAPTIONTEXT: 'Текст подписи'
CSSCLASS: 'Выравнивание/Стиль'
CSSCLASSCENTER: 'По центру без текста по бокам'
CSSCLASSLEFT: 'Слева с обтеканием текста'
CSSCLASSLEFTALONE: 'Независимо слева.'
CSSCLASSRIGHT: 'Справа с обтеканием текста'
DETAILS: Подробности
EMAIL: 'Email'
FILE: Файл
FOLDER: Папка
IMAGEALT: 'Альтернативный текст (alt)'
IMAGEALTTEXT: 'Альтернативный текст (alt) - показывается, если изображение недоступно'
IMAGEALTTEXTDESC: 'Отображается если в браузере отключены изображения или если изображение недоступно'
IMAGEDIMENSIONS: Размеры
IMAGEHEIGHTPX: Высота
IMAGETITLE: 'Текст (всплывающая подсказка) - для дополнительной информации об изображении'
IMAGETITLETEXT: 'Текст (всплывающая подсказка)'
IMAGETITLETEXTDESC: 'Для дополнительных сведений об изображении'
IMAGEWIDTHPX: Ширина
INSERTMEDIA: 'Вставить медиафайл'
LINK: 'Вставить ссылку'
LINKANCHOR: 'Якорь на этой странице'
LINKDESCR: 'Описание ссылки'
LINKEMAIL: 'Email'
LINKEXTERNAL: 'Другой сайт'
LINKFILE: 'Скачивание файла'
LINKINTERNAL: 'Страницу данного сайта'
LINKOPENNEWWIN: 'Открыть ссылку в новом окне?'
LINKTO: 'Ссылка на'
PAGE: Страница
SUBJECT: 'Тема Email письма'
URL: Ссылка
URLDESCRIPTION: 'Добавляйте видео и изображения из интернета просто введя нужный адрес. Убедитесь что у вас есть права на размещение данных файлов.<br /><br />Внимание: файлы не будут загружены на ваш сервер и если файл будет не доступен по указанному адресу то он так же будет не доступен на вашей странице.'
URLNOTANOEMBEDRESOURCE: 'Данная ссылка ''{url}'' не может быть использована для добавления медиа.'
UpdateMEDIA: 'Обновить медиа'
HTMLEditorField_Toolbar:
ERROR_ABSOLUTE: 'Только абсолютные (http://,https://) ссылки могут быть использованы'
ERROR_HOSTNAME: 'Данный адрес недоступен'
ERROR_ID: 'Необходимо указать "ID" или "FileURL" - ссылку на файл для идентификации файла'
ERROR_NOTFOUND: 'Файл не обнаружен'
ERROR_OEMBED_REMOTE: 'Доступны только файлы по ссылке'
ERROR_SCHEME: 'Данный тип файла не поддерживается'
Hierarchy:
InfiniteLoopNotAllowed: 'Обнаружен бесконечный цикл в иерархической структуре "{type}". Для исправления ошибки измените страницу, находящуюся уровнем выше'
HtmlEditorField:
ADDURL: 'Добавить URL'
ADJUSTDETAILSDIMENSIONS: 'Дополнительные сведения и размеры'
ANCHORSCANNOTACCESSPAGE: 'У Вас недостаточно прав для доступа к содержимому данной страницы.'
ANCHORSPAGENOTFOUND: 'Страница не найдена.'
ANCHORVALUE: Якорь
BUTTONADDURL: 'Добавить URL'
BUTTONINSERT: Вставить
@ -268,6 +386,7 @@ ru:
IMAGETITLETEXT: 'Текст (всплывающая подсказка)'
IMAGETITLETEXTDESC: 'Для дополнительных сведений об изображении'
IMAGEWIDTHPX: Ширина
INSERTMEDIA: 'Вставить медиафайл'
LINK: 'Ссылка'
LINKANCHOR: 'Якорь на этой странице'
LINKDESCR: 'Описание ссылки'
@ -278,8 +397,11 @@ ru:
LINKOPENNEWWIN: 'Открыть ссылку в новом окне?'
LINKTO: 'Ссылка на'
PAGE: Страница
SUBJECT: 'Тема Email письма'
URL: URL
URLDESCRIPTION: 'Добавляйте видео и изображения из интернета просто введя нужный адрес. Убедитесь что у вас есть права на размещение данных файлов.<br /><br />Внимание: файлы не будут загружены на ваш сервер и если файл будет не доступен по указанному адресу то он так же будет не доступен на вашей странице.'
URLNOTANOEMBEDRESOURCE: 'Не удалось преобразовать ссылку ''{url}'' в медиа-ресурс.'
UpdateMEDIA: 'Обновить медиафайл'
Image:
PLURALNAME: Файлы
SINGULARNAME: Файл
@ -289,19 +411,25 @@ ru:
Image_iframe_ss:
TITLE: 'Iframe загрузки изображений'
LeftAndMain:
CANCEL: Отмена
CANT_REORGANISE: 'У вас нет права редактировать страницы верхнего уровня. Изменения не были сохранены.'
DELETED: Удалено.
HELP: Помощь
PERMAGAIN: 'Вы вышли из Системы Управления Сайтом. Если Вы хотите войти снова, введите внизу имя пользователя и пароль.'
PERMALREADY: 'Извините, у вас нет доступа к этому разделу Системы Управления. Если Вы хотите войти под другой учетной записью, сделайте это ниже.'
PERMDEFAULT: 'Вы должны войти в систему для доступа к панели управления сайтом. Введите ваши данные ниже.'
PreviewButton: Просмотр
REORGANISATIONSUCCESSFUL: 'Древесная структура сайта успешно реорганизована.'
SAVEDUP: Сохранено.
ShowAsList: 'в виде списка'
TooManyPages: 'Слишком много страниц'
ValidationError: 'Ошибка проверки'
VersionUnknown: неизвестно
LeftAndMain_Menu_ss:
Hello: Здравствуйте
LOGOUT: 'Выход'
ListboxField:
SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение: %s'
LoginAttempt:
Email: 'Email'
IP: 'IP-адрес'
@ -317,9 +445,11 @@ ru:
CANTEDIT: 'У вас недостаточно прав'
CONFIRMNEWPASSWORD: 'Подтвердить новый пароль'
CONFIRMPASSWORD: 'Подтвердить пароль'
CURRENT_PASSWORD: 'Текущий пароль'
DATEFORMAT: 'Формат даты'
DefaultAdminFirstname: 'Администратор по умолчанию '
DefaultDateTime: по умолч.
EDIT_PASSWORD: 'Новый пароль'
EMAIL: Email
EMPTYNEWPASSWORD: 'Поле нового пароля не может быть пустым; пожалуйста, повторите попытку'
ENTEREMAIL: 'Введите email, чтобы получить ссылку на сброс пароля.'
@ -330,11 +460,14 @@ ru:
FIRSTNAME: 'Имя'
INTERFACELANG: 'Язык интерфейса'
INVALIDNEWPASSWORD: 'Недопустимый пароль: {password}'
KEEPMESIGNEDIN: 'Запомните меня'
LOGGEDINAS: 'Вы вошли в систему как {name}.'
NEWPASSWORD: 'Новый пароль'
NoPassword: 'Для этого пользователя не задан пароль.'
PASSWORD: Пароль
PASSWORDEXPIRED: 'Срок действия Вашего пароля истек. Пожалуйста установите новый.'
PLURALNAME: Члены группы
REMEMBERME: 'Запомнить меня?'
SINGULARNAME: Член группы
SUBJECTPASSWORDCHANGED: 'Ваш пароль изменен'
SUBJECTPASSWORDRESET: 'Ссылка для переустановки пароля'
@ -374,6 +507,7 @@ ru:
Toggle: 'Отобразить справку по форматированию'
MemberImportForm:
Help1: '<p>Импорт пользователей в формате <em>CSV</em> (comma-separated values). <small><a href="#" class="toggle-advanced">Подробные сведения</a></small></p>'
Help2: "<div class=\"advanced\">\n<h4>Расширенное использование</h4>\n<ul>\n<li>Разрешенные столбцы: <em>%s</em></li>\n<li>Существующие пользователи сверяются c уникальным атрибутом <em>Code</em>, после чего в записи вносятся новые значения из \nимпортированного файла.</li>\n<li>Назначение групп производится с помощью столбца <em>Groups</em>. Группы идентифицируются по атрибуту <em>Code</em>, \nотдельные группы разделяются запятой. Если участник входит в какую-либо группу, это свойство не обнуляется.</li>\n</ul>\n</div>"
ResultCreated: 'Создано {count} участников'
ResultDeleted: 'Удалено %d участников'
ResultNone: 'Изменений нет'
@ -408,6 +542,8 @@ ru:
MoneyField:
FIELDLABELAMOUNT: Сумма
FIELDLABELCURRENCY: Валюта
MultiSelectField:
SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение(я): {value}'
NullableField:
IsNullLabel: 'Недействительно'
NumericField:
@ -437,12 +573,17 @@ ru:
SINGULARNAME: Роль
Title: Название
PermissionRoleCode:
PLURALNAME: 'Код роли доступа'
PermsError: 'У Вас недостаточно прав для назначения родительской группы "%s" (необходимы права администратора)'
SINGULARNAME: 'Код роли доступа'
Permissions:
PERMISSIONS_CATEGORY: 'Роли и права доступа'
UserPermissionsIntro: 'При включении этого пользователя в определенную группу его права доступа будут изменены соответствующим образом. Более подробные сведения о правах доступа для отдельных групп содержатся в разделе "Группы".'
PhoneNumberField:
VALIDATION: 'Пожалуйста, введите верный номер телефона'
RememberLoginHash:
PLURALNAME: 'Сохраненные хэши входов'
SINGULARNAME: 'Сохраненный хэш входа'
Security:
ALREADYLOGGEDIN: 'У Вас нет доступа к этой странице. Если у вас имеется другая учетная запись, имеющая доступ к этой странице, введите ее данные ниже.'
BUTTONSEND: 'Отправить мне ссылку переустановки пароля'
@ -501,6 +642,8 @@ ru:
Print: Печать
TableListField_PageControls_ss:
OF: из
TextField:
VALIDATEMAXLENGTH: 'Значение для {name} не должно превышать {maxLength} символов'
TimeField:
VALIDATEFORMAT: 'Пожалуйста, задайте верный формат времени {format})'
ToggleField:
@ -533,5 +676,17 @@ ru:
REMOVEINFO: 'Удалить файл отсюда, но не удалять с сервера'
STARTALL: 'Стартовать все'
Saved: Сохранено
UPLOADSINTO: 'загрузка в /{path}'
Versioned:
has_many_Versions: Версии
VersionedGridFieldItemRequest:
ARCHIVE: Архив
Archived: 'Зархивировано %s %s'
BUTTONARCHIVEDESC: 'Отменить публикацию и отправить в архив'
BUTTONPUBLISH: Опубликовать
BUTTONUNPUBLISH: Отмена публикации
BUTTONUNPUBLISHDESC: 'Удалить эту страницу с опубликованного сайта'
Published: 'Опубликована {name} {link}'
Unpublished: 'Публикация отменена %s %s'
i18n:
PLURAL: '{number} {form}'

View File

@ -298,8 +298,8 @@ sk:
FROMWEB: 'Z webu'
FindInFolder: 'Vyhľadať v priečinku'
IMAGEALT: 'Atlernatívny text (alt)'
IMAGEALTTEXT: 'Atlernatívny text (alt) - zobrazí sa, ak nemože byť zobrazený obrázok'
IMAGEALTTEXTDESC: 'Zobrazí sa na obrazovke alebo ak obrázok nemôže byť zobrazený'
IMAGEALTTEXT: 'Atlernatívny text (alt) - zobrazí sa ak obrázok nemože byť zobrazený '
IMAGEALTTEXTDESC: 'Zobrazí sa na obrazovke, ak obrázok nemôže byť zobrazený'
IMAGEDIMENSIONS: Rozmery
IMAGEHEIGHTPX: Výška
IMAGETITLE: 'Text titulky (tooltip) - pre doplňujúce informácie o obrázku'
@ -333,7 +333,7 @@ sk:
LeftAndMain:
CANT_REORGANISE: 'Nemáte oprávnenie meniť stránky najvyššej úrovne. Vaša zmena nebola uložená.'
DELETED: Zmazané.
DropdownBatchActionsDefault: 'Vyberte akciu...'
DropdownBatchActionsDefault: Akcie
HELP: Pomoc
PAGETYPE: 'Typ stránky'
PERMAGAIN: 'Boli ste odhlásený'
@ -391,6 +391,7 @@ sk:
SUBJECTPASSWORDRESET: 'Odkaz na resetovanie hesla'
SURNAME: Priezvisko
TIMEFORMAT: 'Formát času'
VALIDATIONMEMBEREXISTS: 'Člen už existuje s rovnakým %s'
ValidationIdentifierFailed: 'Nemôžte prepísať existujúceho člena #{id} s identickým identifikátorm ({name} = {value})'
WELCOMEBACK: 'Vitajte späť, {firstname}'
YOUROLDPASSWORD: 'Vaše staré heslo'

295
lang/sl_SI.yml Normal file
View File

@ -0,0 +1,295 @@
sl_SI:
AddToCampaign:
ErrorGeneral: 'Se opravičujemo, prišlo je do napake'
AssetAdmin:
ALLOWEDEXTS: 'Dovoljeni tipi datotek za nalaganje'
NEWFOLDER: NovaMapa
AssetTableField:
DIM: Dimenzije
FILENAME: Ime datoteke
FOLDER: Mapa
HEIGHT: Višina
LASTEDIT: 'Nazadnje spremenjeno'
OWNER: Lastnik
SIZE: 'Velikost datoteke'
TITLE: Naslov
TYPE: 'Tip datoteke'
URL: URL
WIDTH: Širina
AssetUploadField:
ChooseFiles: 'Izberi datoteke'
DRAGFILESHERE: 'Povlecite datoteke na to mesto'
DROPAREA: 'Območje za datoteke'
EDITALL: 'Uredi vse'
EDITANDORGANIZE: 'Uredi in organiziraj'
EDITINFO: 'Uredi datoteke'
FILES: Datoteke
FROMCOMPUTER: 'Izberite datoteke iz vašega računalnika'
FROMCOMPUTERINFO: 'Naložite datoteke iz računalnika'
INSERTURL: 'Vstavite iz URL naslova'
REMOVEINFO: 'Odstranite datoteko iz tega polja'
TOTAL: Skupaj
TOUPLOAD: 'Izberite datoteke, ki jih želite naložiti'
UPLOADINPROGRESS: 'Prosimo počakajte... nalaganje datotek je v teku'
UPLOADOR: ALI
BBCodeParser:
ALIGNEMENT: Poravnava
ALIGNEMENTEXAMPLE: 'desno'
BOLD: 'Krepki tekst'
BOLDEXAMPLE: Krepko
CODE: 'Blok s kodo'
COLOREDEXAMPLE: 'modri tekst'
EMAILLINK: 'E-poštna povezava'
EMAILLINKDESCRIPTION: 'Ustvari e-poštno povezavo'
IMAGE: Slika
IMAGEDESCRIPTION: 'Prikažite fotografijo v vaši objavi'
ITALIC: 'Ležeči tekst'
ITALICEXAMPLE: Ležeče
LINK: 'Spletna povezava'
LINKDESCRIPTION: 'Povezava na drugo spletno mesto ali URL'
UNDERLINE: 'Podčrtan tekst'
UNDERLINEEXAMPLE: Podčrtano
BackLink_Button_ss:
Back: Nazaj
BasicAuth:
ENTERINFO: 'Prosimo vpišite uporabniško ime in geslo.'
ERRORNOTADMIN: 'Ta uporabnik ni administrator.'
ERRORNOTREC: 'Uporabniško ime ali geslo je neveljavno'
Boolean:
NOANSWER: 'Ne'
YESANSWER: 'Da'
CAMPAIGNS:
ADDTOCAMPAIGN: 'Dodaj v kampanjo'
CMSLoadingScreen_ss:
LOADING: Nalagam...
REQUIREJS: 'Zahteve CMS sistema so, da morate imeti omogočen JavaScript.'
CMSMain:
ACCESS: 'Dostop do ''{title}'' sekcije'
ACCESSALLINTERFACES: 'Dostop do vseh sekcije CMS-a.'
SAVE: Shrani
CMSMemberLoginForm:
BUTTONFORGOTPASSWORD: 'Pozabljeno geslo?'
BUTTONLOGIN: 'Ponovna prijava'
BUTTONLOGOUT: 'Odjava'
CMSPageHistoryController_versions_ss:
PREVIEW: 'Predogled spletne strani'
CMSPagesController_Tools_ss:
FILTER: Filter
CMSProfileController:
MENUTITLE: 'Moj profil'
CMSSecurity:
TimedOutTitleAnonymous: 'Vaša seja je potekla.'
TimedOutTitleMember: 'Hej {name}! Tvoja seja je potekla.'
CampaignAdmin:
MENUTITLE: Kampanje
ChangePasswordEmail_ss:
CHANGEPASSWORDTEXT1: 'Zamenjali ste geslo za'
CHANGEPASSWORDTEXT3: 'Zamenjaj geslo'
EMAIL: E-pošta
HELLO: Živjo
PASSWORD: Geslo
ChangeSet:
DESCRIPTION_AND: '{first} in {drugi}'
DESCRIPTION_ITEM: predmet
DESCRIPTION_ITEMS: predmetov
DESCRIPTION_OTHER_ITEM: 'drug predmet'
DESCRIPTION_OTHER_ITEMS: 'ostali predmeti'
NAME: Ime
PLURALNAME: Kampanje
SINGULARNAME: Kampanja
STATE: Stanje
CheckboxField:
NOANSWER: 'Ne'
YESANSWER: 'Da'
ConfirmedPasswordField:
SHOWONCLICKTITLE: 'Zamenjaj geslo'
ContentController:
NOTLOGGEDIN: 'Niste prijavljeni'
CreditCardField:
FIRST: prvi
FOURTH: četrti
SECOND: drugi
THIRD: tretji
CurrencyField:
CURRENCYSYMBOL:
Date:
DAY: dan
DAYS: dni
HOUR: ura
HOURS: ur
LessThanMinuteAgo: 'manj kot minuto'
MIN: min
MINS: minut
MONTH: mesec
MONTHS: mesecev
SEC: sek
SECS: sekund
YEAR: leto
YEARS: let
DateField:
NOTSET: 'ni nastavljeno'
TODAY: danes
VALIDDATEFORMAT2: 'Prosimo vnesite veljavno obliko datuma ({format})'
DatetimeField:
NOTSET: 'Ni nastavljeno'
Director:
INVALID_REQUEST: 'Neveljavna zahteva'
DropdownField:
CHOOSE: (Izberi)
CHOOSESEARCH: '(Izberi ali poišči)'
EmailField:
VALIDATION: 'Prosimo vtipkajte e-poštni naslov'
File:
Content: Vsebina
CssType: 'CSS datoteka'
DocType: 'Word-ov dokument'
Filename: Ime datoteke
HtlType: 'HTML datoteka'
HtmlType: 'HTML datoteka'
JsType: 'Javascript datoteka'
Mp3Type: 'MP3 avdio datoteka'
MpgType: 'MPEG video datoteka'
Name: Ime
PLURALNAME: Datoteke
SINGULARNAME: Datoteka
Title: Naslov
Folder:
PLURALNAME: Mape
SINGULARNAME: Mapa
ForgotPasswordEmail_ss:
HELLO: Živjo
TEXT1: 'Tukaj je vaša'
TEXT2: 'povezava za resetiranje gesla'
TEXT3: za
Form:
SubmitBtnLabel: Pojdi
GridAction:
DELETE_DESCRIPTION: Izbriši
Delete: Izbriši
UnlinkRelation: Odstrani povezavo
GridField:
Add: 'Dodaj {name}'
Filter: Filter
FilterBy: 'Filtriraj po'
Find: Najdi
LEVELUP: 'Nivo višje'
NewRecord: 'Nov %s'
ResetFilter: Resetiraj
GridFieldDetailForm:
CancelBtn: Prekliči
Create: Ustvari
Delete: Izbriši
DeletePermissionsFailure: 'Nimate pravic za brisanje'
Deleted: 'Izbrisano %s %s'
Save: Shrani
Saved: 'Shranjeno {name} {link}'
GridFieldEditButton_ss:
EDIT: Uredi
GridFieldItemEditView:
Go_back: 'Nazaj'
Group:
AddRole: 'Dodaj vlogo za to skupino'
DefaultGroupTitleAdministrators: Administratorji
DefaultGroupTitleContentAuthors: 'Avtorji vsebine'
Description: Opis
Locked: 'Zaklenjeno?'
PLURALNAME: Skupine
Parent: 'Starševska skupina'
RolesAddEditLink: 'Uredi vloge'
SINGULARNAME: Skupina
Sort: 'Vrstni red sortiranja'
has_many_Permissions: Dovoljenja
many_many_Members: Člani
Member:
EDIT_PASSWORD: 'Novo geslo'
EMAIL: E-pošta
FIRSTNAME: 'Ime'
KEEPMESIGNEDIN: 'Zapomni si me prijavljenega'
LOGGEDINAS: 'Prijavljeni ste kot {name}.'
NEWPASSWORD: 'Novo geslo'
NoPassword: 'Uporabnik nima nastavljenega gesla.'
PASSWORD: Geslo
PLURALNAME: Uporabniki
REMEMBERME: 'Zapomni si me do naslednjič?'
SINGULARNAME: Uporabnik
SUBJECTPASSWORDCHANGED: 'Vaše geslo je bilo posodobljeno'
SURNAME: Priimek
TIMEFORMAT: 'Časovni zapis'
WELCOMEBACK: 'Dobrodošli nazaj, {firstname}'
YOUROLDPASSWORD: 'Vaše staro geslo'
belongs_many_many_Groups: Grupe
db_LastVisited: 'Nazadnje obiskano'
db_Password: Geslo
db_PasswordExpiry: 'Datum poteka gesla'
MemberAuthenticator:
TITLE: 'E-pošta in geslo'
MemberDatetimeOptionsetField:
Preview: Predogled
Permission:
AdminGroup: Administrator
CMS_ACCESS_CATEGORY: 'Dostop do CMS'
FULLADMINRIGHTS: 'Polne administratorske pravice'
PLURALNAME: Dovoljenja
SINGULARNAME: Dovoljenje
PermissionRole:
PLURALNAME: Vloge
SINGULARNAME: Vloga
Title: Naslov
Security:
CHANGEPASSWORDHEADER: 'Zamenjaj geslo'
ENTERNEWPASSWORD: 'Prosimo vtipkajte novo geslo.'
LOGIN: 'Prijava'
LOSTPASSWORDHEADER: 'Pozabljeno geslo'
SecurityAdmin:
MEMBERS: Uporabniki
MENUTITLE: Varnost
PERMISSIONS: Dovoljenja
ROLES: Vloge
TABROLES: Vloge
Users: Uporabniki
SecurityAdmin_MemberImportForm:
BtnImport: 'Uvozi iz CSV'
SilverStripeNavigator:
Edit: Uredi
EditView: 'Način urejanja'
Mobile: Mobilno
PreviewView: 'Način predogleda'
Responsive: Odzivno
SplitView: 'Razdeljeni način'
Tablet: Tablica
Width: širina
TableListField:
CSVEXPORT: 'Izvozi v CSV'
Print: Natisni
TableListField_PageControls_ss:
OF: od
ToggleField:
LESS: manj
MORE: več
UploadField:
ATTACHFILE: 'Pripini datoteko'
ATTACHFILES: 'Pripni datoteke'
AttachFile: 'Pripni datoteko/(e)'
CHOOSEANOTHERFILE: 'Izberite drugo datoteko'
DELETE: 'Izbriši iz datotek'
DELETEINFO: 'Trajno izbriši to datoteko iz shrambe datotek'
DOEDIT: Shrani
Dimensions: Dimenzije
EDIT: Uredi
EDITINFO: 'Uredi datoteko'
FIELDNOTSET: 'Ni informacij o datoteki'
FROMCOMPUTER: 'Iz vašega računalnika'
FROMCOMPUTERINFO: 'Izberite iz datotek'
FROMFILES: 'Iz datotek'
REMOVE: Odstrani
STARTALL: 'Zaženi vse'
Saved: Shranjeno
Versioned:
has_many_Versions: Verzije
VersionedGridFieldItemRequest:
ARCHIVE: Arhiv
Archived: 'Arhivirano %s %s'
BUTTONARCHIVEDESC: 'Odstrani iz objave in pošlji v arhiv'
BUTTONPUBLISH: Objavi
BUTTONUNPUBLISH: Odstrani iz objave
BUTTONUNPUBLISHDESC: 'Odstrani ta zapis iz objavljene strani'

View File

@ -2,7 +2,7 @@
<% if $Options.Count %>
<% loop $Options %>
<li class="$Class">
<input id="$ID" class="checkbox" name="$Name" type="checkbox" value="$Value"<% if $isChecked %> checked="checked"<% end_if %><% if $isDisabled %> disabled="disabled"<% end_if %> />
<input id="$ID" class="checkbox" name="$Name" type="checkbox" value="$Value.ATT"<% if $isChecked %> checked="checked"<% end_if %><% if $isDisabled %> disabled="disabled"<% end_if %> />
<label for="$ID">$Title</label>
</li>
<% end_loop %>

View File

@ -1,7 +1,7 @@
<ul $AttributesHTML>
<% loop $Options %>
<li class="$Class">
<input id="$ID" class="radio" name="$Name" type="radio" value="$Value"<% if $isChecked %> checked<% end_if %><% if $isDisabled %> disabled<% end_if %> <% if $Up.Required %>required<% end_if %> />
<input id="$ID" class="radio" name="$Name" type="radio" value="$Value.ATT"<% if $isChecked %> checked<% end_if %><% if $isDisabled %> disabled<% end_if %> <% if $Up.Required %>required<% end_if %> />
<label for="$ID">$Title</label>
</li>
<% end_loop %>

View File

@ -2,6 +2,8 @@
class ConfigTest_DefinesFoo extends Object implements TestOnly {
protected static $foo = 1;
private static $not_foo = 1;
}
class ConfigTest_DefinesBar extends ConfigTest_DefinesFoo {
@ -262,6 +264,19 @@ class ConfigTest extends SapphireTest {
$this->assertEquals(Object::static_lookup('ConfigTest_DefinesFooDoesntExtendObject', 'bar'), null);
}
public function testForClass() {
$config = ConfigTest_DefinesFoo::config();
// Set values
$this->assertTrue(isset($config->not_foo));
$this->assertFalse(empty($config->not_foo));
$this->assertEquals(1, $config->not_foo);
// Unset values
$this->assertFalse(isset($config->bar));
$this->assertTrue(empty($config->bar));
$this->assertNull($config->bar);
}
public function testFragmentOrder() {
$this->markTestIncomplete();
}

View File

@ -74,6 +74,14 @@ class MySQLDatabaseConfigurationHelperTest extends SapphireTest {
. " WITH GRANT OPTION"
));
// Accept create on this database only
$this->assertNotEmpty($helper->checkDatabasePermissionGrant(
'database_name',
'create',
"GRANT ALL PRIVILEGES, CREATE ON \"database\\_name\".* TO 'root'@'localhost' IDENTIFIED BY PASSWORD 'XXXX'"
. " WITH GRANT OPTION"
));
// Accept create on any database (alternate wildcard syntax)
$this->assertNotEmpty($helper->checkDatabasePermissionGrant(
'database_name',

View File

@ -3,6 +3,8 @@
use SilverStripe\ORM\ArrayList;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\DB;
use SilverStripe\Security\Member;
use SilverStripe\ORM\FieldType\DBField;
/**
* @package framework
@ -248,6 +250,27 @@ class CheckboxSetFieldTest extends SapphireTest {
);
}
public function testSafelyCast() {
$member = new Member();
$member->FirstName = '<firstname>';
$member->Surname = '<surname>';
$member->write();
$field1 = new CheckboxSetField('Options', 'Options', array(
'one' => 'One',
'two' => 'Two & Three',
'three' => DBField::create_field('HTMLText', 'Four &amp; Five &amp; Six'),
'four' => $member->FirstName,
));
$fieldHTML = (string)$field1->Field();
$this->assertContains('One', $fieldHTML);
$this->assertContains('Two &amp; Three', $fieldHTML);
$this->assertNotContains('Two & Three', $fieldHTML);
$this->assertContains('Four &amp; Five &amp; Six', $fieldHTML);
$this->assertNotContains('Four & Five & Six', $fieldHTML);
$this->assertContains('&lt;firstname&gt;', $fieldHTML);
$this->assertNotContains('<firstname>', $fieldHTML);
}
}
/**

View File

@ -1,4 +1,7 @@
<?php
use SilverStripe\ORM\FieldType\DBField;
/**
* @package framework
* @subpackage tests
@ -63,4 +66,18 @@ class OptionsetFieldTest extends SapphireTest {
preg_match('/Yes/', $field->Field(), $matches);
$this->assertEquals($matches[0], 'Yes');
}
public function testSafelyCast() {
$field1 = new OptionsetField('Options', 'Options', array(
1 => 'One',
2 => 'Two & Three',
3 => DBField::create_field('HTMLText', 'Four &amp; Five &amp; Six')
));
$fieldHTML = (string)$field1->Field();
$this->assertContains('One', $fieldHTML);
$this->assertContains('Two &amp; Three', $fieldHTML);
$this->assertNotContains('Two & Three', $fieldHTML);
$this->assertContains('Four &amp; Five &amp; Six', $fieldHTML);
$this->assertNotContains('Four & Five & Six', $fieldHTML);
}
}

View File

@ -255,63 +255,60 @@ class ArrayListTest extends SapphireTest {
$list = new ArrayList(array(
array('Name' => 'Steve'),
(object) array('Name' => 'Bob'),
array('Name' => 'John')
array('Name' => 'John'),
array('Name' => 'bonny'),
array('Name' => 'bonny1'),
array('Name' => 'bonny10'),
array('Name' => 'bonny2'),
));
// Unquoted name
$list1 = $list->sort('Name');
$this->assertEquals($list1->toArray(), array(
$this->assertEquals(array(
(object) array('Name' => 'Bob'),
array('Name' => 'bonny'),
array('Name' => 'bonny1'),
array('Name' => 'bonny2'),
array('Name' => 'bonny10'),
array('Name' => 'John'),
array('Name' => 'Steve')
));
array('Name' => 'Steve'),
), $list1->toArray());
// Quoted name name
$list2 = $list->sort('"Name"');
$this->assertEquals($list2->toArray(), array(
$this->assertEquals(array(
(object) array('Name' => 'Bob'),
array('Name' => 'bonny'),
array('Name' => 'bonny1'),
array('Name' => 'bonny2'),
array('Name' => 'bonny10'),
array('Name' => 'John'),
array('Name' => 'Steve')
));
array('Name' => 'Steve'),
), $list2->toArray());
// Array (non-associative)
$list3 = $list->sort(array('"Name"'));
$this->assertEquals($list3->toArray(), array(
$this->assertEquals(array(
(object) array('Name' => 'Bob'),
array('Name' => 'bonny'),
array('Name' => 'bonny1'),
array('Name' => 'bonny2'),
array('Name' => 'bonny10'),
array('Name' => 'John'),
array('Name' => 'Steve')
));
// Quoted name name with table
$list4 = $list->sort('"Record"."Name"');
$this->assertEquals($list4->toArray(), array(
(object) array('Name' => 'Bob'),
array('Name' => 'John'),
array('Name' => 'Steve')
));
// Quoted name name with table (desc)
$list5 = $list->sort('"Record"."Name" DESC');
$this->assertEquals($list5->toArray(), array(
array('Name' => 'Steve'),
array('Name' => 'John'),
(object) array('Name' => 'Bob')
));
// Table without quotes
$list6 = $list->sort('Record.Name');
$this->assertEquals($list6->toArray(), array(
(object) array('Name' => 'Bob'),
array('Name' => 'John'),
array('Name' => 'Steve')
));
), $list3->toArray());
// Check original list isn't altered
$this->assertEquals($list->toArray(), array(
$this->assertEquals(array(
array('Name' => 'Steve'),
(object) array('Name' => 'Bob'),
array('Name' => 'John')
));
array('Name' => 'John'),
array('Name' => 'bonny'),
array('Name' => 'bonny1'),
array('Name' => 'bonny10'),
array('Name' => 'bonny2'),
), $list->toArray());
}
public function testSortSimpleASCOrder() {

View File

@ -542,6 +542,38 @@ class DataListTest extends SapphireTest {
/**
* Test DataList->canFilterBy()
*/
public function testCanFilterBy() {
// Basic check
$team = DataObjectTest_Team::get();
$this->assertTrue($team->canFilterBy("Title"));
$this->assertFalse($team->canFilterBy("SomethingElse"));
// Has one
$this->assertTrue($team->canFilterBy("CaptainID"));
$this->assertTrue($team->canFilterBy("Captain.ShirtNumber"));
$this->assertFalse($team->canFilterBy("SomethingElse.ShirtNumber"));
$this->assertFalse($team->canFilterBy("Captain.SomethingElse"));
$this->assertTrue($team->canFilterBy("Captain.FavouriteTeam.Captain.ShirtNumber"));
// Has many
$this->assertTrue($team->canFilterBy("Fans.Name"));
$this->assertFalse($team->canFilterBy("SomethingElse.Name"));
$this->assertFalse($team->canFilterBy("Fans.SomethingElse"));
// Many many
$this->assertTrue($team->canFilterBy("Players.FirstName"));
$this->assertFalse($team->canFilterBy("SomethingElse.FirstName"));
$this->assertFalse($team->canFilterBy("Players.SomethingElse"));
// Subclasses
$subteam = DataObjectTest_SubTeam::get();
$this->assertTrue($subteam->canFilterBy("Title"));
$this->assertTrue($subteam->canFilterBy("SubclassDatabaseField"));
}
/**
* $list->filter('Name', 'bob'); // only bob in the list
*/