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

View File

@ -123,7 +123,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* alterDataQuery * alterDataQuery
* *
* @param callable $callback * @param callable $callback
* @return DataList * @return static
* @throws Exception * @throws Exception
*/ */
public function alterDataQuery($callback) { 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 * Return a new DataList instance with the underlying {@link DataQuery} object changed
* *
* @param DataQuery $dataQuery * @param DataQuery $dataQuery
* @return DataList * @return static
*/ */
public function setDataQuery(DataQuery $dataQuery) { public function setDataQuery(DataQuery $dataQuery) {
$clone = clone $this; $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 * @param string|array|SQLConditionGroup $filter Predicate(s) to set, as escaped SQL statements or
* paramaterised queries * paramaterised queries
* @return DataList * @return static
*/ */
public function where($filter) { public function where($filter) {
return $this->alterDataQuery(function(DataQuery $query) use ($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 * @param string|array|SQLConditionGroup $filter Predicate(s) to set, as escaped SQL statements or
* paramaterised queries * paramaterised queries
* @return DataList * @return static
*/ */
public function whereAny($filter) { public function whereAny($filter) {
return $this->alterDataQuery(function(DataQuery $query) use ($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 * @return boolean
*/ */
public function canFilterBy($fieldName) { 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 true;
} }
return false; return false;
@ -262,7 +274,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
* *
* @param int $limit * @param int $limit
* @param int $offset * @param int $offset
* @return DataList * @return static
*/ */
public function limit($limit, $offset = 0) { public function limit($limit, $offset = 0) {
return $this->alterDataQuery(function(DataQuery $query) use ($limit, $offset){ 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 * Return a new DataList instance with distinct records or not
* *
* @param bool $value * @param bool $value
* @return DataList * @return static
*/ */
public function distinct($value) { public function distinct($value) {
return $this->alterDataQuery(function(DataQuery $query) use ($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')); * @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. * @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() { public function sort() {
$count = func_num_args(); $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 * @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 * @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() { public function filter() {
// Validate and process arguments // 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 * Return a new instance of the list with an added filter
* *
* @param array $filterArray * @param array $filterArray
* @return DataList * @return $this
*/ */
public function addFilter($filterArray) { public function addFilter($filterArray) {
$list = $this; $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 * @todo extract the sql from this method into a SQLGenerator class
* *
* @param string|array See {@link filter()} * @param string|array See {@link filter()}
* @return DataList * @return static
*/ */
public function filterAny() { public function filterAny() {
$numberFuncArgs = count(func_get_args()); $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 string &$columnName Quoted column name
* @param bool $linearOnly Set to true to restrict to linear relations only. Set this * @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. * 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) { public function applyRelation($field, &$columnName = null, $linearOnly = false) {
// If field is invalid, return it without modification // 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 string $filter - example StartsWith, relates to a filtercontext
* @param array $modifiers - Modifiers to pass to the filter, ie not,nocase * @param array $modifiers - Modifiers to pass to the filter, ie not,nocase
* @param string $value - the value that the filtercontext will use for matching * @param string $value - the value that the filtercontext will use for matching
* @return DataList * @return static
*/ */
private function applyFilterContext($field, $filter, $modifiers, $value) { private function applyFilterContext($field, $filter, $modifiers, $value) {
if($filter) { 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 * @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 * @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() { public function exclude() {
$numberFuncArgs = count(func_get_args()); $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 * The $list passed needs to contain the same dataclass as $this
* *
* @param DataList $list * @param DataList $list
* @return DataList * @return static
* @throws BadMethodCallException * @throws BadMethodCallException
*/ */
public function subtract(DataList $list) { 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 * will cause the query to appear first. The default is 20, and joins created automatically by the
* ORM have a value of 10. * ORM have a value of 10.
* @param array $parameters Any additional parameters if the join is a parameterised subquery * @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()) { public function innerJoin($table, $onClause, $alias = null, $order = 20, $parameters = array()) {
return $this->alterDataQuery(function(DataQuery $query) use ($table, $onClause, $alias, $order, $parameters){ 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 * will cause the query to appear first. The default is 20, and joins created automatically by the
* ORM have a value of 10. * ORM have a value of 10.
* @param array $parameters Any additional parameters if the join is a parameterised subquery * @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()) { public function leftJoin($table, $onClause, $alias = null, $order = 20, $parameters = array()) {
return $this->alterDataQuery(function(DataQuery $query) use ($table, $onClause, $alias, $order, $parameters){ 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 * Walks the list using the specified callback
* *
* @param callable $callback * @param callable $callback
* @return DataList * @return $this
*/ */
public function each($callback) { public function each($callback) {
foreach($this as $row) { 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 * Restrict the columns to fetch into this DataList
* *
* @param array $queriedColumns * @param array $queriedColumns
* @return DataList * @return static
*/ */
public function setQueriedColumns($queriedColumns) { public function setQueriedColumns($queriedColumns) {
return $this->alterDataQuery(function(DataQuery $query) use ($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 * Filter this list to only contain the given Primary IDs
* *
* @param array $ids Array of integers * @param array $ids Array of integers
* @return DataList * @return $this
*/ */
public function byIDs($ids) { public function byIDs($ids) {
return $this->filter('ID', $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. * Add a number of items to the component set.
* *
* @param array $items Items to add, as either DataObjects or IDs. * @param array $items Items to add, as either DataObjects or IDs.
* @return DataList * @return $this
*/ */
public function addMany($items) { public function addMany($items) {
foreach($items as $item) { 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 * Remove the items from this list with the given IDs
* *
* @param array $idList * @param array $idList
* @return DataList * @return $this
*/ */
public function removeMany($idList) { public function removeMany($idList) {
foreach($idList as $id) { 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. * Remove every element in this DataList matching the given $filter.
* *
* @param string $filter - a sql type where filter * @param string $filter - a sql type where filter
* @return DataList * @return $this
*/ */
public function removeByFilter($filter) { public function removeByFilter($filter) {
foreach($this->where($filter) as $item) { 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. * Remove every element in this DataList.
* *
* @return DataList * @return $this
*/ */
public function removeAll() { public function removeAll() {
foreach($this as $item) { foreach($this as $item) {
@ -1085,7 +1097,7 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab
/** /**
* Reverses a list of items. * Reverses a list of items.
* *
* @return DataList * @return static
*/ */
public function reverse() { public function reverse() {
return $this->alterDataQuery(function(DataQuery $query){ return $this->alterDataQuery(function(DataQuery $query){

View File

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

View File

@ -158,6 +158,14 @@ class ManyManyList extends RelationList {
return $dataObject; 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) { protected function foreignIDFilter($id = null) {
if ($id === null) { if ($id === null) {
$id = $this->getForeignID(); $id = $this->getForeignID();
@ -179,7 +187,7 @@ class ManyManyList extends RelationList {
* entries. However some subclasses of ManyManyList (Member_GroupSet) modify foreignIDFilter to * 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 * 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 * as per getForeignID
* @return array Condition In array(SQL => parameters format) * @return array Condition In array(SQL => parameters format)
*/ */
@ -191,7 +199,10 @@ class ManyManyList extends RelationList {
* Add an item to this many_many relationship * Add an item to this many_many relationship
* Does so by adding an entry to the joinTable. * 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. * @param array $extraFields A map of additional columns to insert into the joinTable.
* Column names should be ANSI quoted. * Column names should be ANSI quoted.
* @throws Exception * @throws Exception

View File

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

View File

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

View File

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

View File

@ -131,12 +131,24 @@ class Member extends DataObject implements TemplateGlobalProvider {
'Email', 'Email',
); );
/**
* @config
* @var array
*/
private static $summary_fields = array( private static $summary_fields = array(
'FirstName', 'FirstName',
'Surname', 'Surname',
'Email', 'Email',
); );
/**
* @config
* @var array
*/
private static $casting = array(
'Name' => 'Varchar',
);
/** /**
* Internal-use only fields * 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 // 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(Member::config()->login_marker_cookie) Cookie::set(Member::config()->login_marker_cookie, 1, 0);
// Cleans up any potential previous hash for this member on this device if (Security::config()->autologin_enabled) {
if ($alcDevice = Cookie::get('alc_device')) { // Cleans up any potential previous hash for this member on this device
RememberLoginHash::get()->filter('DeviceID', $alcDevice)->removeAll(); 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
);
Cookie::set('alc_device', $rememberLoginHash->DeviceID, $deviceExpiryDays, null, null, null, true);
}
else {
Cookie::set('alc_enc', null);
Cookie::set('alc_device', null);
Cookie::force_expiry('alc_enc');
Cookie::force_expiry('alc_device');
}
} }
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);
Cookie::set('alc_device', $rememberLoginHash->DeviceID, $deviceExpiryDays, null, null, null, true);
} 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 // Clear the incorrect log-in count
$this->registerSuccessfulLogin(); $this->registerSuccessfulLogin();
@ -580,7 +607,8 @@ class Member extends DataObject implements TemplateGlobalProvider {
self::$_already_tried_to_auto_log_in = true; 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") || Session::get("loggedInAs")
|| !Security::database_is_ready() || !Security::database_is_ready()
) { ) {
@ -905,7 +933,7 @@ class Member extends DataObject implements TemplateGlobalProvider {
} else { } else {
$random = rand(); $random = rand();
$string = md5($random); $string = md5($random);
$output = substr($string, 0, 6); $output = substr($string, 0, 8);
return $output; 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 // Note that this only works with cleartext passwords, as we can't rehash
// existing passwords. // existing passwords.
if((!$this->ID && $this->Password) || $this->isChanged('Password')) { 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 // Password was changed: encrypt the password according the settings
$encryption_details = Security::encrypt_password( $encryption_details = Security::encrypt_password(
$this->Password, // this is assumed to be cleartext $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)) { if(in_array($authenticator, $authenticators)) {
return $authenticator; 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 { } else {
ss.i18n.addDictionary('fa_IR', { 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_ARCHIVE_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\n\nآیا از این‌که می‌خواهید بایگانی شوند اطمینان دارید؟\n\nتمامی این صفحات و تمامی صفحات فرزند آن‌ها عدم انتشار می‌شوند و به بایگانی ارسال می‌گردند.",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "CMSMAIN.BATCH_DELETELIVE_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید آن‌ها از لایو را حذف نمایید؟",
"CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", "CMSMAIN.BATCH_DELETE_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید آن‌ها را حذف نمایید؟",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", "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_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.BATCH_UNPUBLISH_PROMPT": "شما {num} صفحه را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید انتشار آن‌ها را لغو نمایید",
"CMSMAIN.SELECTONEPAGE": "لطفاً حداقل ۱ صفحه را انتخاب نمایید.", "CMSMAIN.SELECTONEPAGE": "لطفاً حداقل ۱ صفحه را انتخاب نمایید.",
"Campaigns.ADDCAMPAIGN": "Add campaign", "Campaigns.ADDCAMPAIGN": "افزودن کمپین",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s items", "Campaigns.ITEM_SUMMARY_PLURAL": "%s آیتم",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s item", "Campaigns.ITEM_SUMMARY_SINGULAR": "%s آیتم",
"Campaigns.PUBLISHCAMPAIGN": "Publish campaign", "Campaigns.PUBLISHCAMPAIGN": "انتشار کمپین",
"Campaigns.REVERTCAMPAIGN": "Revert", "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.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.CONFIRMUNSAVEDSHORT": "هشدار: تغییرات شما ذخیره نشده‌اند.",
"LeftAndMain.PAGEWASDELETED": "This page was deleted. To edit a page, select it from the left.", "LeftAndMain.PAGEWASDELETED": "این صفحه حذف شده است. برای ویرایش یک صفحه، آن‌را از لیست چپ انتخاب نمایید.",
"ModelAdmin.DELETED": "حذف شده", "ModelAdmin.DELETED": "حذف شده",
"ModelAdmin.REALLYDELETE": "Do you really want to delete?", "ModelAdmin.REALLYDELETE": "آیا واقعاً می‌خواهید حذف نمایید؟",
"ModelAdmin.SAVED": "ذخیره شده", "ModelAdmin.SAVED": "ذخیره شده",
"ModelAdmin.VALIDATIONERROR": "خطای اعتبار‌سنجی", "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_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.BATCH_UNPUBLISH_PROMPT": "Hai {num} pagine selezionate.\n\nVuoi veramente nasconderle?",
"CMSMAIN.SELECTONEPAGE": "Per favore selezionare almeno una pagina", "CMSMAIN.SELECTONEPAGE": "Per favore selezionare almeno una pagina",
"Campaigns.ADDCAMPAIGN": "Add campaign", "Campaigns.ADDCAMPAIGN": "Aggiungi campagna",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s items", "Campaigns.ITEM_SUMMARY_PLURAL": "%s elementi",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s item", "Campaigns.ITEM_SUMMARY_SINGULAR": "%s elemento",
"Campaigns.PUBLISHCAMPAIGN": "Publish campaign", "Campaigns.PUBLISHCAMPAIGN": "Pubblica campagna",
"Campaigns.REVERTCAMPAIGN": "Revert", "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.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.CONFIRMUNSAVEDSHORT": "ATTENZIONE: le tue modifiche non sono state salvate.",
"LeftAndMain.PAGEWASDELETED": "Questa pagina è stata eliminata. Per modificare questa pagine, selezionarla a sinistra.", "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 { } else {
ss.i18n.addDictionary('ru', { 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_ARCHIVE_PROMPT": "Вы выбрали {num} страниц(у)\nВы уверены что хотите отправить их в архив?\n\nПубликации этих страниц и их под-страниц будут отменены и отправлены в архив. ",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "CMSMAIN.BATCH_DELETELIVE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите отменить публикацию этих страниц?",
"CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", "CMSMAIN.BATCH_DELETE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите их удалить?",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", "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_RESTORE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите восстановить эти страницы в черновик?\n\nПод-страницы архивных страниц будут восстановлены в корень если эти страницы также не отмечены для восстановления.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите отменить их публикацию?",
"CMSMAIN.SELECTONEPAGE": "Please select at least one page", "CMSMAIN.SELECTONEPAGE": "Пожалуйста, выберите хотя бы одну страницу.",
"Campaigns.ADDCAMPAIGN": "Add campaign", "Campaigns.ADDCAMPAIGN": "Добавить кампанию",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s items", "Campaigns.ITEM_SUMMARY_PLURAL": "%s элементов",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s item", "Campaigns.ITEM_SUMMARY_SINGULAR": "%s элемент",
"Campaigns.PUBLISHCAMPAIGN": "Publish campaign", "Campaigns.PUBLISHCAMPAIGN": "Опубликовать кампанию",
"Campaigns.REVERTCAMPAIGN": "Revert", "Campaigns.REVERTCAMPAIGN": "Отменить",
"LeftAndMain.CONFIRMUNSAVED": "Вы действительно хотите покинуть эту страницу?\n\nВНИМАНИЕ: Ваши изменения не были сохранены.\n\nНажмите ОК, чтобы продолжить или Отмена, чтобы остаться на текущей странице.", "LeftAndMain.CONFIRMUNSAVED": "Вы действительно хотите покинуть эту страницу?\n\nВНИМАНИЕ: Ваши изменения не были сохранены.\n\nНажмите ОК, чтобы продолжить или Отмена, чтобы остаться на текущей странице.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "ВНИМАНИЕ: Ваши изменения не были сохранены", "LeftAndMain.CONFIRMUNSAVEDSHORT": "ВНИМАНИЕ: Ваши изменения не были сохранены",
"LeftAndMain.PAGEWASDELETED": "Эта страница была удалена. Чтобы изменить страницу, выберите её из списка слева.", "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_ARCHIVE_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\n\nآیا از این‌که می‌خواهید بایگانی شوند اطمینان دارید؟\n\nتمامی این صفحات و تمامی صفحات فرزند آن‌ها عدم انتشار می‌شوند و به بایگانی ارسال می‌گردند.",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "CMSMAIN.BATCH_DELETELIVE_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید آن‌ها از لایو را حذف نمایید؟",
"CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", "CMSMAIN.BATCH_DELETE_PROMPT": "شما {num} صفحه(صفحه‌ها) را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید آن‌ها را حذف نمایید؟",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", "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_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.BATCH_UNPUBLISH_PROMPT": "شما {num} صفحه را انتخاب کرده‌اید.\n\nآیا واقعاً می‌خواهید انتشار آن‌ها را لغو نمایید",
"CMSMAIN.SELECTONEPAGE": "لطفاً حداقل ۱ صفحه را انتخاب نمایید.", "CMSMAIN.SELECTONEPAGE": "لطفاً حداقل ۱ صفحه را انتخاب نمایید.",
"Campaigns.ADDCAMPAIGN": "Add campaign", "Campaigns.ADDCAMPAIGN": "افزودن کمپین",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s items", "Campaigns.ITEM_SUMMARY_PLURAL": "%s آیتم",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s item", "Campaigns.ITEM_SUMMARY_SINGULAR": "%s آیتم",
"Campaigns.PUBLISHCAMPAIGN": "Publish campaign", "Campaigns.PUBLISHCAMPAIGN": "انتشار کمپین",
"Campaigns.REVERTCAMPAIGN": "Revert", "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.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.CONFIRMUNSAVEDSHORT": "هشدار: تغییرات شما ذخیره نشده‌اند.",
"LeftAndMain.PAGEWASDELETED": "This page was deleted. To edit a page, select it from the left.", "LeftAndMain.PAGEWASDELETED": "این صفحه حذف شده است. برای ویرایش یک صفحه، آن‌را از لیست چپ انتخاب نمایید.",
"ModelAdmin.DELETED": "حذف شده", "ModelAdmin.DELETED": "حذف شده",
"ModelAdmin.REALLYDELETE": "Do you really want to delete?", "ModelAdmin.REALLYDELETE": "آیا واقعاً می‌خواهید حذف نمایید؟",
"ModelAdmin.SAVED": "ذخیره شده", "ModelAdmin.SAVED": "ذخیره شده",
"ModelAdmin.VALIDATIONERROR": "خطای اعتبار‌سنجی", "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_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.BATCH_UNPUBLISH_PROMPT": "Hai {num} pagine selezionate.\n\nVuoi veramente nasconderle?",
"CMSMAIN.SELECTONEPAGE": "Per favore selezionare almeno una pagina", "CMSMAIN.SELECTONEPAGE": "Per favore selezionare almeno una pagina",
"Campaigns.ADDCAMPAIGN": "Add campaign", "Campaigns.ADDCAMPAIGN": "Aggiungi campagna",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s items", "Campaigns.ITEM_SUMMARY_PLURAL": "%s elementi",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s item", "Campaigns.ITEM_SUMMARY_SINGULAR": "%s elemento",
"Campaigns.PUBLISHCAMPAIGN": "Publish campaign", "Campaigns.PUBLISHCAMPAIGN": "Pubblica campagna",
"Campaigns.REVERTCAMPAIGN": "Revert", "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.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.CONFIRMUNSAVEDSHORT": "ATTENZIONE: le tue modifiche non sono state salvate.",
"LeftAndMain.PAGEWASDELETED": "Questa pagina è stata eliminata. Per modificare questa pagine, selezionarla a sinistra.", "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_ARCHIVE_PROMPT": "Вы выбрали {num} страниц(у)\nВы уверены что хотите отправить их в архив?\n\nПубликации этих страниц и их под-страниц будут отменены и отправлены в архив. ",
"CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "CMSMAIN.BATCH_DELETELIVE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите отменить публикацию этих страниц?",
"CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", "CMSMAIN.BATCH_DELETE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите их удалить?",
"CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", "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_RESTORE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите восстановить эти страницы в черновик?\n\nПод-страницы архивных страниц будут восстановлены в корень если эти страницы также не отмечены для восстановления.",
"CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите отменить их публикацию?",
"CMSMAIN.SELECTONEPAGE": "Please select at least one page", "CMSMAIN.SELECTONEPAGE": "Пожалуйста, выберите хотя бы одну страницу.",
"Campaigns.ADDCAMPAIGN": "Add campaign", "Campaigns.ADDCAMPAIGN": "Добавить кампанию",
"Campaigns.ITEM_SUMMARY_PLURAL": "%s items", "Campaigns.ITEM_SUMMARY_PLURAL": "%s элементов",
"Campaigns.ITEM_SUMMARY_SINGULAR": "%s item", "Campaigns.ITEM_SUMMARY_SINGULAR": "%s элемент",
"Campaigns.PUBLISHCAMPAIGN": "Publish campaign", "Campaigns.PUBLISHCAMPAIGN": "Опубликовать кампанию",
"Campaigns.REVERTCAMPAIGN": "Revert", "Campaigns.REVERTCAMPAIGN": "Отменить",
"LeftAndMain.CONFIRMUNSAVED": "Вы действительно хотите покинуть эту страницу?\n\nВНИМАНИЕ: Ваши изменения не были сохранены.\n\nНажмите ОК, чтобы продолжить или Отмена, чтобы остаться на текущей странице.", "LeftAndMain.CONFIRMUNSAVED": "Вы действительно хотите покинуть эту страницу?\n\nВНИМАНИЕ: Ваши изменения не были сохранены.\n\nНажмите ОК, чтобы продолжить или Отмена, чтобы остаться на текущей странице.",
"LeftAndMain.CONFIRMUNSAVEDSHORT": "ВНИМАНИЕ: Ваши изменения не были сохранены", "LeftAndMain.CONFIRMUNSAVEDSHORT": "ВНИМАНИЕ: Ваши изменения не были сохранены",
"LeftAndMain.PAGEWASDELETED": "Эта страница была удалена. Чтобы изменить страницу, выберите её из списка слева.", "LeftAndMain.PAGEWASDELETED": "Эта страница была удалена. Чтобы изменить страницу, выберите её из списка слева.",

View File

@ -1813,6 +1813,9 @@ class LeftAndMain extends Controller implements PermissionProvider {
public function currentPageID() { public function currentPageID() {
if($this->getRequest()->requestVar('ID') && is_numeric($this->getRequest()->requestVar('ID'))) { if($this->getRequest()->requestVar('ID') && is_numeric($this->getRequest()->requestVar('ID'))) {
return $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'])) { } elseif (isset($this->urlParams['ID']) && is_numeric($this->urlParams['ID'])) {
return $this->urlParams['ID']; return $this->urlParams['ID'];
} elseif(Session::get($this->sessionNamespace() . ".currentPage")) { } 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.DELETEFILE": "حذف فایل‌",
"FILEIFRAMEFIELD.DELETEIMAGE": "حذف تصویر", "FILEIFRAMEFIELD.DELETEIMAGE": "حذف تصویر",
"FILEIFRAMEFIELD.UNATTACHFILE": "حذف ضمیمه فایل", "FILEIFRAMEFIELD.UNATTACHFILE": "حذف ضمیمه فایل",
"GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.", "GRIDFIELD.ERRORINTRANSACTION": "یک خطا هنگام دستیابی به داده‌های سرور روی داد\nلطفاً بعداً تلاش نمایید.",
"HASMANYFILEFIELD.UPLOADING": "در حال آپلود... %s", "HASMANYFILEFIELD.UPLOADING": "در حال آپلود... %s",
"HtmlEditorField.SelectAnchor": "Select an anchor", "HtmlEditorField.SelectAnchor": "انتخاب یک محل ارجاع لینک",
"LOADING": "بارگذاری...", "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+.", "LeftAndMain.IncompatBrowserWarning": "مرورگر شما با محیط کاربری سی‌ام‌اس سازگار نیست. لطفاً از اینترنت اکسپلورر نسخه 7 به بعد، گوگل کروم 10 به بعد یا موزیلا فایرفاکس 3.5 به بعد استفاده کنید.",
"RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "The character '%s' cannot be used in this field", "RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "کاراکتر '%s' نمی‌تواند در این فیلد استفاده شود",
"TABLEFIELD.DELETECONFIRMMESSAGE": "آیا مطمئن هستید که می‌خواهید این رکورد حذف شود؟", "TABLEFIELD.DELETECONFIRMMESSAGE": "آیا مطمئن هستید که می‌خواهید این رکورد حذف شود؟",
"TreeDropdownField.ENTERTOSEARCH": "Press enter to search", "TreeDropdownField.ENTERTOSEARCH": "جهت جستجو دکمه‌ی enter را بزنید",
"TreeDropdownField.FieldTitle": "انتخاب کنید", "TreeDropdownField.FieldTitle": "انتخاب",
"TreeDropdownField.OpenLink": "باز کنید", "TreeDropdownField.OpenLink": "باز کنید",
"TreeDropdownField.SearchFieldTitle": "گزینش یا جستجو", "TreeDropdownField.SearchFieldTitle": "انتخاب یا جستجو",
"UNIQUEFIELD.CANNOTLEAVEEMPTY": "This field cannot be left empty", "UNIQUEFIELD.CANNOTLEAVEEMPTY": "این فیلد نمی‌تواند خالی بماند",
"UNIQUEFIELD.ENTERNEWVALUE": "You will need to enter a new value for this field", "UNIQUEFIELD.ENTERNEWVALUE": "شما نیازمند این هستید که ارزش جدیدی برای این فیلد وارد نمایید",
"UNIQUEFIELD.SUGGESTED": "Changed value to '%s' : %s", "UNIQUEFIELD.SUGGESTED": "ارزش به '%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.CONFIRM": "آیا می‌خواهید که نشانی اینترنتی را تغییر دهم به:\n\n%s/\n\nبله را کلیک نمایید تا نشانی تغییر یابد، لغو را کلیک کنید تا بدین شکل باقی بماند:\n\n%s",
"UPDATEURL.CONFIRMURLCHANGED": "The URL has been changed to\n'%s'", "UPDATEURL.CONFIRMURLCHANGED": "نشانی اینترنتی تغییر یافت به\n'%s'",
"UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?", "UploadField.ConfirmDelete": "آیا مطمئن هستید که می‌خواهید این فایل از فایل‌سیستم سرور حذف شود؟",
"UploadField.EMPTYRESULT": "Empty file upload result", "UploadField.EMPTYRESULT": "نتیجه‌ی آپلود فایل خالی است",
"UploadField.Editing": "Editing ...", "UploadField.Editing": "ویراستن ...",
"UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)", "UploadField.HTML_MAXFILESIZE": "فایل از MAX_FILE_SIZE تجاوز می‌کند (اچ‌تی‌ام‌ال از متضمن دستور)",
"UploadField.INVALIDEXTENSION": "قالب مجاز نیست", "UploadField.INVALIDEXTENSION": "قالب مجاز نیست",
"UploadField.LOADING": "بارگذاری...", "UploadField.LOADING": "بارگذاری...",
"UploadField.MAXNUMBEROFFILESSIMPLE": "Max number of files exceeded", "UploadField.MAXNUMBEROFFILESSIMPLE": "از حداکثر تعداد فایل تجاوز کرد",
"UploadField.NOFILEUPLOADED": "هیچ فایلی آپلود نشد", "UploadField.NOFILEUPLOADED": "هیچ فایلی آپلود نشد",
"UploadField.NOTMPFOLDER": "Missing a temporary folder", "UploadField.NOTMPFOLDER": "پوشه‌ی موقت پیدا نشد",
"UploadField.ONLYPARTIALUPLOADED": "File was only partially uploaded", "UploadField.ONLYPARTIALUPLOADED": "تنها بخش‌هایی از فایل آپلود شده است",
"UploadField.OVERWRITEWARNING": "فایل با نام یکسان از پیش وجود دارد", "UploadField.OVERWRITEWARNING": "فایل با نام یکسان از پیش وجود دارد",
"UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)", "UploadField.PHP_MAXFILESIZE": "فایل از upload_max_filesize تجاوز می‌کند (متضمن دستور php.ini)",
"UploadField.STOPEDBYEXTENSION": "File upload stopped by extension", "UploadField.STOPEDBYEXTENSION": "آپلود فایل به دلیل قالب متوقف شد",
"UploadField.TOOLARGE": "Filesize is too large", "UploadField.TOOLARGE": "حجم فایل بسیار زیاد است",
"UploadField.TOOSMALL": "Filesize is too small", "UploadField.TOOSMALL": "حجم فایل بسیار کم است",
"UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size", "UploadField.UPLOADEDBYTES": "بایت‌های آپلودشده از سایز فایل تجاوز می‌کند",
"UploadField.Uploaded": "آپلود‌شده", "UploadField.Uploaded": "آپلود‌شده",
"UploadField.WRITEFAILED": "Failed to write file to disk", "UploadField.WRITEFAILED": "ناتوان از نگارش فایل بر هارددیسک",
"VALIDATOR.FIELDREQUIRED": "لطفاً \"%s\" را تکمیل نمایید، پرکردن آن الزامی است." "VALIDATOR.FIELDREQUIRED": "لطفاً \"%s\" را تکمیل نمایید، پرکردن آن الزامی است."
}); });
} }

View File

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

View File

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

View File

@ -254,6 +254,10 @@ EOT
if(!headers_sent($file, $line)) { if(!headers_sent($file, $line)) {
header($_SERVER['SERVER_PROTOCOL'] . " $this->statusCode " . $this->getStatusDescription()); header($_SERVER['SERVER_PROTOCOL'] . " $this->statusCode " . $this->getStatusDescription());
foreach($this->headers as $header => $value) { 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); header("$header: $value", true, $this->statusCode);
} }
} else { } 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. '. '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>' '<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 // Force output since RequestFilter::preRequest doesn't support response overriding

View File

@ -918,6 +918,7 @@ class Config_ForClass {
/** /**
* @param string $name * @param string $name
* @return mixed
*/ */
public function __get($name) { public function __get($name) {
return Config::inst()->get($this->class, $name); return Config::inst()->get($this->class, $name);
@ -931,6 +932,16 @@ class Config_ForClass {
return Config::inst()->update($this->class, $name, $val); 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 string $name
* @param int $sourceOptions * @param int $sourceOptions

View File

@ -172,8 +172,10 @@ class MySQLDatabaseConfigurationHelper implements DatabaseConfigurationHelper {
if(!$this->checkValidDatabaseName($database)) return false; if(!$this->checkValidDatabaseName($database)) return false;
// Escape all valid database patterns (permission must exist on all tables) // 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( $dbPattern = sprintf(
'((%s)|(%s)|(%s))', '((%s)|(%s)|(%s)|(%s))',
preg_quote("\"$sqlDatabase\".*"), // Regexp escape sql-escaped db identifier
preg_quote("\"$database\".*"), preg_quote("\"$database\".*"),
preg_quote('"%".*'), preg_quote('"%".*'),
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]. display up to two levels of tabs in the interface. If you want to group data further than that, try [api:ToggleField].
</div> </div>
## Adding a field from a tab. ## Adding a field to a tab
:::php :::php
$fields->addFieldToTab('Root.Main', new TextField(..)); $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. 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 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` 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 * @var array
*/ */
protected static $vcs_dirs = 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(); $defaultItems = $this->getDefaultItems();
// Generate list of options to display // Generate list of options to display
$odd = 0; $odd = false;
$formID = $this->ID(); $formID = $this->ID();
$options = new ArrayList(); $options = new ArrayList();
foreach($this->getSource() as $itemValue => $title) { foreach($this->getSource() as $itemValue => $title) {
$itemID = Convert::raw2htmlid("{$formID}_{$itemValue}"); $itemID = Convert::raw2htmlid("{$formID}_{$itemValue}");
$odd = ($odd + 1) % 2; $odd = !$odd;
$extraClass = $odd ? 'odd' : 'even'; $extraClass = $odd ? 'odd' : 'even';
$extraClass .= ' val' . preg_replace('/[^a-zA-Z0-9\-\_]/', '_', $itemValue); $extraClass .= ' val' . preg_replace('/[^a-zA-Z0-9\-\_]/', '_', $itemValue);

View File

@ -63,7 +63,7 @@ class GridFieldAddExistingAutocompleter
* 'Team.Name' * 'Team.Name'
* ) * )
* *
* @var Array * @var array
*/ */
protected $searchFields = array(); protected $searchFields = array();
@ -73,7 +73,7 @@ class GridFieldAddExistingAutocompleter
protected $resultsFormat = '$Title'; 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; protected $placeholderText;
@ -94,7 +94,7 @@ class GridFieldAddExistingAutocompleter
/** /**
* *
* @param GridField $gridField * @param GridField $gridField
* @return string - HTML * @return string[] - HTML
*/ */
public function getHTMLFragments($gridField) { public function getHTMLFragments($gridField) {
$dataClass = $gridField->getList()->dataClass(); $dataClass = $gridField->getList()->dataClass();
@ -224,22 +224,24 @@ class GridFieldAddExistingAutocompleter
->limit($this->getResultsLimit()); ->limit($this->getResultsLimit());
$json = array(); $json = array();
$originalSourceFileComments = Config::inst()->get('SSViewer', 'source_file_comments'); Config::nest();
Config::inst()->update('SSViewer', 'source_file_comments', false); Config::inst()->update('SSViewer', 'source_file_comments', false);
$viewer = SSViewer::fromString($this->resultsFormat);
foreach($results as $result) { foreach($results as $result) {
$title = html_entity_decode(SSViewer::fromString($this->resultsFormat)->process($result)); $title = html_entity_decode($viewer->process($result));
$json[] = array( $json[] = array(
'label' => $title, 'label' => $title,
'value' => $title, 'value' => $title,
'id' => $result->ID, 'id' => $result->ID,
); );
} }
Config::inst()->update('SSViewer', 'source_file_comments', $originalSourceFileComments); Config::unnest();
return Convert::array2json($json); return Convert::array2json($json);
} }
/** /**
* @param string $format * @param string $format
*
* @return $this * @return $this
*/ */
public function setResultsFormat($format) { public function setResultsFormat($format) {
@ -248,7 +250,7 @@ class GridFieldAddExistingAutocompleter
} }
/** /**
* @return String * @return string
*/ */
public function getResultsFormat() { public function getResultsFormat() {
return $this->resultsFormat; return $this->resultsFormat;
@ -262,10 +264,11 @@ class GridFieldAddExistingAutocompleter
*/ */
public function setSearchList(SS_List $list) { public function setSearchList(SS_List $list) {
$this->searchList = $list; $this->searchList = $list;
return $this;
} }
/** /**
* @param Array * @param array $fields
*/ */
public function setSearchFields($fields) { public function setSearchFields($fields) {
$this->searchFields = $fields; $this->searchFields = $fields;
@ -273,7 +276,7 @@ class GridFieldAddExistingAutocompleter
} }
/** /**
* @return Array * @return array
*/ */
public function getSearchFields() { public function getSearchFields() {
return $this->searchFields; return $this->searchFields;
@ -284,8 +287,8 @@ class GridFieldAddExistingAutocompleter
* Falls back to {@link DataObject->summaryFields()} if * Falls back to {@link DataObject->summaryFields()} if
* no custom search fields are defined. * no custom search fields are defined.
* *
* @param String the class name * @param string $dataClass the class name
* @return Array|null names of the searchable fields * @return array|null names of the searchable fields
*/ */
public function scaffoldSearchFields($dataClass) { public function scaffoldSearchFields($dataClass) {
$obj = singleton($dataClass); $obj = singleton($dataClass);
@ -321,8 +324,9 @@ class GridFieldAddExistingAutocompleter
} }
/** /**
* @param String The class of the object being searched for * @param string $dataClass The class of the object being searched for
* @return String *
* @return string
*/ */
public function getPlaceholderText($dataClass) { public function getPlaceholderText($dataClass) {
$searchFields = ($this->getSearchFields()) $searchFields = ($this->getSearchFields())
@ -354,10 +358,13 @@ class GridFieldAddExistingAutocompleter
} }
/** /**
* @param String * @param string $text
*
* @return $this
*/ */
public function setPlaceholderText($text) { public function setPlaceholderText($text) {
$this->placeholderText = $text; $this->placeholderText = $text;
return $this;
} }
/** /**
@ -371,8 +378,11 @@ class GridFieldAddExistingAutocompleter
/** /**
* @param int $limit * @param int $limit
*
* @return $this
*/ */
public function setResultsLimit($limit) { public function setResultsLimit($limit) {
$this->resultsLimit = $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. // 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 // 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 // dereferencing GridFieldDetailForm_ItemRequest->getController() multiple times. See getToplevelController
@ -702,6 +701,7 @@ class GridFieldDetailForm_ItemRequest extends RequestHandler {
public function doDelete($data, $form) { public function doDelete($data, $form) {
$title = $this->record->Title; $title = $this->record->Title;
$backLink = $this->getBacklink();
try { try {
if (!$this->record->canDelete()) { if (!$this->record->canDelete()) {
throw new ValidationException( throw new ValidationException(
@ -732,7 +732,7 @@ class GridFieldDetailForm_ItemRequest extends RequestHandler {
$controller = $this->getToplevelController(); $controller = $this->getToplevelController();
$controller->getRequest()->addHeader('X-Pjax', 'Content'); // Force a content refresh $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' FROMWEB: 'Z webu'
FindInFolder: 'Hledat ve složce' FindInFolder: 'Hledat ve složce'
IMAGEALT: 'Alternativní text (alt)' IMAGEALT: 'Alternativní text (alt)'
IMAGEALTTEXT: 'Alternativní text (alt) - bude ukázán, 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, když obrázek nemůže být zobrazen' IMAGEALTTEXTDESC: 'Zobrazeno na obrazovce, anebo když obrázek nemůže být zobrazen'
IMAGEDIMENSIONS: Rozměry IMAGEDIMENSIONS: Rozměry
IMAGEHEIGHTPX: Výška IMAGEHEIGHTPX: Výška
IMAGETITLE: 'Titul text (tooltip) - další informace o obrázku' IMAGETITLE: 'Titul text (tooltip) - další informace o obrázku'
@ -333,7 +333,7 @@ cs:
LeftAndMain: LeftAndMain:
CANT_REORGANISE: 'Nemáte oprávnění měnit stránky nejvyšší úrovně. Vaše změna nebyla uložena.' CANT_REORGANISE: 'Nemáte oprávnění měnit stránky nejvyšší úrovně. Vaše změna nebyla uložena.'
DELETED: Smazáno. DELETED: Smazáno.
DropdownBatchActionsDefault: 'Vyberte akci...' DropdownBatchActionsDefault: Akce
HELP: Nápověda HELP: Nápověda
PAGETYPE: 'Typ stránky' 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.' 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' SUBJECTPASSWORDRESET: 'Nulovací odkaz pro Vaše heslo'
SURNAME: Příjmení SURNAME: Příjmení
TIMEFORMAT: 'Formát času' 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}))' ValidationIdentifierFailed: 'Nemůžete přepsat existujícího člena #{id} s identickým identifikátorem ({name} = {value}))'
WELCOMEBACK: 'Vítejte zpět, {firstname}' WELCOMEBACK: 'Vítejte zpět, {firstname}'
YOUROLDPASSWORD: 'Vaše staré heslo' YOUROLDPASSWORD: 'Vaše staré heslo'

View File

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

View File

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

View File

@ -1,5 +1,6 @@
fr: fr:
AssetAdmin: AssetAdmin:
HIDEALLOWEDEXTS: 'Cacher les extensions autorisées'
NEWFOLDER: Nouveau dossier NEWFOLDER: Nouveau dossier
SHOWALLOWEDEXTS: 'Montrer les extensions autorisées' SHOWALLOWEDEXTS: 'Montrer les extensions autorisées'
AssetTableField: AssetTableField:
@ -7,6 +8,7 @@ fr:
DIM: Dimensions DIM: Dimensions
FILENAME: Nom du fichier FILENAME: Nom du fichier
FOLDER: Dossier FOLDER: Dossier
HEIGHT: Hauteur
LASTEDIT: 'Dernière modification' LASTEDIT: 'Dernière modification'
OWNER: Propriétaire OWNER: Propriétaire
SIZE: 'Taille' SIZE: 'Taille'
@ -80,6 +82,7 @@ fr:
ConfirmedPasswordField: ConfirmedPasswordField:
ATLEAST: 'Le mot de passe doit comporter au moins {min} caractères.' 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.' 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.' MAXIMUM: 'Le mot de passe ne doit comporter plus de {max} caractères.'
SHOWONCLICKTITLE: 'Changer le mot de passe' SHOWONCLICKTITLE: 'Changer le mot de passe'
ContentController: ContentController:
@ -292,6 +295,7 @@ fr:
DELETED: Supprimé. DELETED: Supprimé.
HELP: Aide 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.' 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 PreviewButton: Aperçu
REORGANISATIONSUCCESSFUL: 'Larbre du site a été bien réorganisé.' REORGANISATIONSUCCESSFUL: 'Larbre du site a été bien réorganisé.'
SAVEDUP: Enregistré. SAVEDUP: Enregistré.

View File

@ -5,40 +5,98 @@ hr:
AssetTableField: AssetTableField:
CREATED: 'Uploadano' CREATED: 'Uploadano'
DIM: Dimenzije DIM: Dimenzije
FILENAME: Ime datoteke FILENAME: Naziv datoteke
FOLDER: Mapa FOLDER: Direktorij
HEIGHT: Visina
LASTEDIT: 'Zadnja promjena' LASTEDIT: 'Zadnja promjena'
OWNER: Vlasnik OWNER: Vlasnik
SIZE: 'Veličina' SIZE: 'Veličina datoteke'
TITLE: Naslov TITLE: Naslov
TYPE: 'Tip' TYPE: 'Tip datoteke'
URL: URL URL: Link
WIDTH: Širina
AssetUploadField: AssetUploadField:
ChooseFiles: 'Odaberite datoteke' ChooseFiles: 'Odaberite datoteke'
DRAGFILESHERE: 'Povucite datoteke ovdje' DRAGFILESHERE: 'Povucite datoteke ovdje'
DROPAREA: 'Područje ubacivanja'
EDITALL: 'Uredi sve' EDITALL: 'Uredi sve'
EDITANDORGANIZE: 'Uredi i organiziraj' EDITANDORGANIZE: 'Uredi i organiziraj'
EDITINFO: 'Uredi datoteke' EDITINFO: 'Uredi datoteke'
FILES: Datoteke FILES: Datoteke
FROMCOMPUTER: 'Odaberite datoteke sa svog računala' FROMCOMPUTER: 'Odaberite datoteke sa svog računala'
FROMCOMPUTERINFO: 'Uploadajte sa svog računala' FROMCOMPUTERINFO: 'Uploadajte sa svog računala'
INSERTURL: 'Ubaci sa linka'
REMOVEINFO: 'Izbrišite ovu datoteku s ovog polja'
TOTAL: Ukupno TOTAL: Ukupno
TOUPLOAD: 'Odaberite datoteke za upload...'
UPLOADINPROGRESS: 'Molim pričekajte... upload u tijeku' UPLOADINPROGRESS: 'Molim pričekajte... upload u tijeku'
UPLOADOR: ILI UPLOADOR: ILI
BBCodeParser: BBCodeParser:
ALIGNEMENT: Poravnanje ALIGNEMENT: Poravnanje
BOLD: 'Bold Text'
BOLDEXAMPLE: Bold
BackLink_Button_ss:
Back: Nazad
BasicAuth: BasicAuth:
ENTERINFO: 'Unesite korisničko ime i lozinu' ENTERINFO: 'Unesite korisničko ime i lozinu'
ERRORNOTADMIN: 'Korisnik nije administrator' ERRORNOTADMIN: 'Korisnik nije administrator'
ERRORNOTREC: 'Korisničko ime / lozinka nije prepoznata' 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: CMSMain:
SAVE: Snimi 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: ChangePasswordEmail_ss:
CHANGEPASSWORDTEXT1: 'Promjenili ste lozinku za ' CHANGEPASSWORDTEXT1: 'Promjenili ste lozinku za '
CHANGEPASSWORDTEXT2: 'Za prijavu koristite slijedeće podatke' CHANGEPASSWORDTEXT2: 'Za prijavu koristite slijedeće podatke'
CHANGEPASSWORDTEXT3: 'Promjeni lozinku'
EMAIL: Email
HELLO: Pozdrav 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: ConfirmedPasswordField:
SHOWONCLICKTITLE: 'Promjenite lozinku' SHOWONCLICKTITLE: 'Promjenite lozinku'
CreditCardField:
FIRST: prvi
FOURTH: četvrti
SECOND: drugi
THIRD: treći
CurrencyField:
CURRENCYSYMBOL: $
DataObject: DataObject:
PLURALNAME: 'Podatkovni objekti' PLURALNAME: 'Podatkovni objekti'
SINGULARNAME: 'Podatkovni objekt' SINGULARNAME: 'Podatkovni objekt'
@ -70,9 +128,37 @@ hr:
CHOOSE: (Odaberite) CHOOSE: (Odaberite)
EmailField: EmailField:
VALIDATION: 'Molimo unesite email adresu' VALIDATION: 'Molimo unesite email adresu'
Enum:
ANY: bilo koji
File: 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 PLURALNAME: Datoteke
PngType: 'PNG slika - dobar generalan format'
SINGULARNAME: Datoteka SINGULARNAME: Datoteka
Title: Naslov
WavType: 'WAV zvuk datoteka'
XlsType: 'Excel tablica'
ZipType: 'ZIP komprimirana datoteka'
Folder:
PLURALNAME: Direktoriji
SINGULARNAME: Direktorij
ForgotPasswordEmail_ss: ForgotPasswordEmail_ss:
HELLO: Pozdrav HELLO: Pozdrav
TEXT1: 'Ovdje je Vaš' TEXT1: 'Ovdje je Vaš'
@ -83,22 +169,72 @@ hr:
VALIDATIONNOTUNIQUE: 'Unešena vrijednost nije unikatna' VALIDATIONNOTUNIQUE: 'Unešena vrijednost nije unikatna'
VALIDATIONPASSWORDSDONTMATCH: 'Lozinke se ne slažu' VALIDATIONPASSWORDSDONTMATCH: 'Lozinke se ne slažu'
VALIDATIONPASSWORDSNOTEMPTY: 'Lozinke moraju imati najmanje jedan broj i jedan alfanumerički znak' 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: Group:
Code: 'Krupni kod' Code: 'Krupni kod'
DefaultGroupTitleAdministrators: Administratori
DefaultGroupTitleContentAuthors: 'Autori sadržaja'
Description: Opis
Locked: 'Zaključano?' Locked: 'Zaključano?'
PLURALNAME: Grupe
Parent: 'Roditeljska grupa' Parent: 'Roditeljska grupa'
SINGULARNAME: Grupa
has_many_Permissions: Dozvole has_many_Permissions: Dozvole
many_many_Members: Članovi 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: HtmlEditorField:
ANCHORVALUE: Sidro
BUTTONADDURL: 'Dodaj link'
BUTTONINSERT: Ubaci
BUTTONINSERTLINK: 'Ubaci vezu' BUTTONINSERTLINK: 'Ubaci vezu'
BUTTONREMOVELINK: 'Obriši vezu' BUTTONREMOVELINK: 'Obriši vezu'
BUTTONUpdate: Ažuriraj
CSSCLASS: 'Poravnanje / Stil' CSSCLASS: 'Poravnanje / Stil'
CSSCLASSCENTER: 'Centralno' CSSCLASSCENTER: 'Centralno'
CSSCLASSLEFT: 'Lijevo, sa okruženjem teksta.' CSSCLASSLEFT: 'Lijevo, sa okruženjem teksta.'
CSSCLASSRIGHT: 'Desno, sa okruženjem teksta' CSSCLASSRIGHT: 'Desno, sa okruženjem teksta'
DETAILS: Detalji
EMAIL: 'Email adresa' EMAIL: 'Email adresa'
FILE: Datoteka FILE: Datoteka
FOLDER: Direktorij FOLDER: Direktorij
FROMCOMPUTER: 'Sa računala'
FROMWEB: 'Sa weba'
FindInFolder: 'Pronađi u direktoriju'
IMAGEALT: 'Alternativni tekst (alt)'
IMAGEDIMENSIONS: Dimenzije IMAGEDIMENSIONS: Dimenzije
IMAGEHEIGHTPX: Visina IMAGEHEIGHTPX: Visina
IMAGEWIDTHPX: Širina IMAGEWIDTHPX: Širina
@ -111,18 +247,45 @@ hr:
LINKOPENNEWWIN: 'Otvori vezu (link) u novom prozoru?' LINKOPENNEWWIN: 'Otvori vezu (link) u novom prozoru?'
LINKTO: 'Poveži na' LINKTO: 'Poveži na'
PAGE: Stranica PAGE: Stranica
Image:
PLURALNAME: Datoteke
SINGULARNAME: Datoteka
Image_Cached:
PLURALNAME: Datoteke
SINGULARNAME: Datoteka
Image_iframe_ss: Image_iframe_ss:
TITLE: 'Iframe za upload slike' TITLE: 'Iframe za upload slike'
LeftAndMain: LeftAndMain:
CANCEL: Odustani
DELETED: Obrisano.
HELP: Pomoć HELP: Pomoć
PERMAGAIN: 'Odjavili ste se sa sustava. Želite li se ponovno prijaviti upišite korisničko ime i lozinku.' 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: Member:
ADDGROUP: 'Dodaj grupu'
BUTTONCHANGEPASSWORD: 'Promjeni lozinku' BUTTONCHANGEPASSWORD: 'Promjeni lozinku'
BUTTONLOGIN: 'Prijava' BUTTONLOGIN: 'Prijava'
BUTTONLOGINOTHER: 'Prijavite se kao netko drugi' BUTTONLOGINOTHER: 'Prijavite se kao netko drugi'
BUTTONLOSTPASSWORD: 'Zaboravljena lozinka?' BUTTONLOSTPASSWORD: 'Zaboravljena lozinka?'
CANTEDIT: 'Nema prava za to'
CONFIRMNEWPASSWORD: 'Potvrdite novu lozinku' CONFIRMNEWPASSWORD: 'Potvrdite novu lozinku'
CONFIRMPASSWORD: 'Potvrdi 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.' ERRORNEWPASSWORD: 'Pogrešno ste upisali novu lozinku, pokušajte ponovno.'
ERRORPASSWORDNOTMATCH: 'Vaša trenutna lozinka se ne podudara, probajte ponovno' ERRORPASSWORDNOTMATCH: 'Vaša trenutna lozinka se ne podudara, probajte ponovno'
FIRSTNAME: 'Ime' FIRSTNAME: 'Ime'
@ -136,10 +299,43 @@ hr:
SURNAME: Prezime SURNAME: Prezime
YOUROLDPASSWORD: 'Stara lozinka' YOUROLDPASSWORD: 'Stara lozinka'
belongs_many_many_Groups: Grupe belongs_many_many_Groups: Grupe
db_LastVisited: 'Datum zadnje posjete'
db_LockedOutUntil: 'Zaključano do' db_LockedOutUntil: 'Zaključano do'
db_Password: Lozinka
db_PasswordExpiry: 'Lozinka ističe' db_PasswordExpiry: 'Lozinka ističe'
MemberAuthenticator: MemberAuthenticator:
TITLE: 'E-mail &amp; Lozinka' 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: PhoneNumberField:
VALIDATION: 'Molim unesite ispravan telefonski broj' VALIDATION: 'Molim unesite ispravan telefonski broj'
Security: 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.' 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.' NOTERESETPASSWORD: 'Unesite svoju e-mail adresu, a mi ćemo Vam poslati link putem kojega možete resetirati Vašu lozinku.'
SecurityAdmin: SecurityAdmin:
MEMBERS: Članovi
MENUTITLE: Sigurnost
NEWGROUP: 'Nova Grupa' NEWGROUP: 'Nova Grupa'
PERMISSIONS: Dozvole
ROLES: Uloge
TABROLES: Uloge
Users: Korisnici
SilverStripeNavigator:
Auto: Aut
Edit: Uredi
EditView: 'Mod uređivanja'
Width: širina
SiteTree: SiteTree:
TABMAIN: Osnovno TABMAIN: Osnovno
TableListField:
Print: Ispiši
TableListField_PageControls_ss:
OF: od
ToggleField: ToggleField:
LESS: manje LESS: manje
MORE: više 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: Versioned:
has_many_Versions: Verzije has_many_Versions: Verzije

View File

@ -1,5 +1,12 @@
id_ID: 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: AssetAdmin:
ALLOWEDEXTS: 'Ekstensi berkas yang diperbolehkan'
HIDEALLOWEDEXTS: 'Sembunyikan ekstensi berkas yang diperbolehkan'
NEWFOLDER: FolderBaru NEWFOLDER: FolderBaru
SHOWALLOWEDEXTS: 'Tampilkan ekstensi yang dibolehkan' SHOWALLOWEDEXTS: 'Tampilkan ekstensi yang dibolehkan'
AssetTableField: AssetTableField:
@ -13,6 +20,7 @@ id_ID:
TITLE: Judul TITLE: Judul
TYPE: 'Jenis berkas' TYPE: 'Jenis berkas'
URL: URL URL: URL
WIDTH: Lebar
AssetUploadField: AssetUploadField:
ChooseFiles: 'Pilih berkas' ChooseFiles: 'Pilih berkas'
DRAGFILESHERE: 'Tarik berkas ke sini' DRAGFILESHERE: 'Tarik berkas ke sini'
@ -566,3 +574,6 @@ id_ID:
UPLOADSINTO: 'disimpan ke /{path}' UPLOADSINTO: 'disimpan ke /{path}'
Versioned: Versioned:
has_many_Versions: Versi has_many_Versions: Versi
VersionedGridFieldItemRequest:
ARCHIVE: Arsip
Archived: '%s %s diarsipkan'

View File

@ -1,5 +1,12 @@
it: 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: AssetAdmin:
ALLOWEDEXTS: 'Estensioni consentite per l''upload'
HIDEALLOWEDEXTS: 'Nascondi estensioni permesse' HIDEALLOWEDEXTS: 'Nascondi estensioni permesse'
NEWFOLDER: NuovaCartella NEWFOLDER: NuovaCartella
SHOWALLOWEDEXTS: 'Mostra le estensioni consentite' SHOWALLOWEDEXTS: 'Mostra le estensioni consentite'
@ -29,6 +36,7 @@ it:
INSERTURL: 'Inserisci da URL' INSERTURL: 'Inserisci da URL'
REMOVEINFO: 'Rimuovi questo file da questo campo' REMOVEINFO: 'Rimuovi questo file da questo campo'
TOTAL: Totale TOTAL: Totale
TOUPLOAD: 'Scegli i file da caricare...'
UPLOADINPROGRESS: 'Attendere prego... caricamento in corso' UPLOADINPROGRESS: 'Attendere prego... caricamento in corso'
UPLOADOR: O UPLOADOR: O
BBCodeParser: BBCodeParser:
@ -66,6 +74,8 @@ it:
ANY: Qualsiasi ANY: Qualsiasi
NOANSWER: 'No' NOANSWER: 'No'
YESANSWER: 'Sì' YESANSWER: 'Sì'
CAMPAIGNS:
ADDTOCAMPAIGN: 'Aggiungere alla campagna'
CMSLoadingScreen_ss: CMSLoadingScreen_ss:
LOADING: Caricamento in corso... LOADING: Caricamento in corso...
REQUIREJS: 'Il CMS richiede JavaScript abilitato.' 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>' SUCCESSCONTENT: '<p>Accesso eseguito. Se non sarai ridirezionato automaticamente, <a target="_top" href="{link}">cliccare qui</a></p>'
TimedOutTitleAnonymous: 'La tua sessione è scaduta.' TimedOutTitleAnonymous: 'La tua sessione è scaduta.'
TimedOutTitleMember: 'Ciao {name}!<br />La tua sessione è scaduta.' TimedOutTitleMember: 'Ciao {name}!<br />La tua sessione è scaduta.'
CampaignAdmin:
MENUTITLE: Campagne
Campaigns:
AddToCampaign: 'Aggiungere Alla Campagna'
ChangePasswordEmail_ss: 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' CHANGEPASSWORDTEXT1: 'Hai cambiato la password per'
CHANGEPASSWORDTEXT2: 'Ora puoi utilizzare le seguenti credenziali per accedere:' CHANGEPASSWORDTEXT2: 'Ora puoi utilizzare le seguenti credenziali per accedere:'
CHANGEPASSWORDTEXT3: 'Cambia password'
EMAIL: Email EMAIL: Email
HELLO: Ciao HELLO: Ciao
PASSWORD: Password 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: CheckboxField:
NOANSWER: 'No' NOANSWER: 'No'
YESANSWER: 'Sì' YESANSWER: 'Sì'
@ -108,6 +140,9 @@ it:
ConfirmedPasswordField: ConfirmedPasswordField:
ATLEAST: 'La password deve essere lunga almeno {min} caratteri.' ATLEAST: 'La password deve essere lunga almeno {min} caratteri.'
BETWEEN: 'La password deve essere lunga da {min} a {max} 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.' MAXIMUM: 'La password deve essere lunga almeno {max} caratteri.'
SHOWONCLICKTITLE: 'Cambia password' SHOWONCLICKTITLE: 'Cambia password'
ContentController: ContentController:
@ -151,6 +186,7 @@ it:
INVALID_REQUEST: 'Richiesta non valida' INVALID_REQUEST: 'Richiesta non valida'
DropdownField: DropdownField:
CHOOSE: (Scegli) CHOOSE: (Scegli)
CHOOSESEARCH: '(Scegliere o Cercare)'
SOURCE_VALIDATION: 'Per favore selezionare un valore tra quelli forniti. {value} non è un''opzione valida' SOURCE_VALIDATION: 'Per favore selezionare un valore tra quelli forniti. {value} non è un''opzione valida'
EmailField: EmailField:
VALIDATION: 'Inserisci un indirizzo e-mail' VALIDATION: 'Inserisci un indirizzo e-mail'
@ -265,9 +301,73 @@ it:
many_many_Members: Membri many_many_Members: Membri
GroupImportForm: 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>' 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' ResultCreated: 'Creati {count} gruppi'
ResultDeleted: 'Eliminati %d gruppi' ResultDeleted: 'Eliminati %d gruppi'
ResultUpdated: 'Aggiornati %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: Hierarchy:
InfiniteLoopNotAllowed: 'Trovato loop infinito nella gerarchia di "{type}". Cambia il padre per risolvere il problema' InfiniteLoopNotAllowed: 'Trovato loop infinito nella gerarchia di "{type}". Cambia il padre per risolvere il problema'
HtmlEditorField: HtmlEditorField:
@ -327,6 +427,7 @@ it:
Image_iframe_ss: Image_iframe_ss:
TITLE: 'Iframe per l''inserimento dell''immagine' TITLE: 'Iframe per l''inserimento dell''immagine'
LeftAndMain: LeftAndMain:
CANCEL: Annulla
CANT_REORGANISE: 'Non hai i permessi per modificare le pagine di primo livello. Le modifiche non sono state salvate.' CANT_REORGANISE: 'Non hai i permessi per modificare le pagine di primo livello. Le modifiche non sono state salvate.'
DELETED: Eliminato. DELETED: Eliminato.
HELP: Aiuto HELP: Aiuto
@ -360,9 +461,11 @@ it:
CANTEDIT: 'Non hai i permessi per fare questo' CANTEDIT: 'Non hai i permessi per fare questo'
CONFIRMNEWPASSWORD: 'Conferma nuova password' CONFIRMNEWPASSWORD: 'Conferma nuova password'
CONFIRMPASSWORD: 'Conferma password' CONFIRMPASSWORD: 'Conferma password'
CURRENT_PASSWORD: 'Password Attuale'
DATEFORMAT: 'Formato della data' DATEFORMAT: 'Formato della data'
DefaultAdminFirstname: 'Amministratore Predefinito' DefaultAdminFirstname: 'Amministratore Predefinito'
DefaultDateTime: predefinito DefaultDateTime: predefinito
EDIT_PASSWORD: 'Nuova password'
EMAIL: Email EMAIL: Email
EMPTYNEWPASSWORD: 'La nuova password non può essere vuota, riprova' EMPTYNEWPASSWORD: 'La nuova password non può essere vuota, riprova'
ENTEREMAIL: 'Inserisci un indirizzo e-mail per ricevere il link di azzeramento della password' ENTEREMAIL: 'Inserisci un indirizzo e-mail per ricevere il link di azzeramento della password'
@ -373,12 +476,14 @@ it:
FIRSTNAME: 'Nome' FIRSTNAME: 'Nome'
INTERFACELANG: 'Lingua dell''interfaccia' INTERFACELANG: 'Lingua dell''interfaccia'
INVALIDNEWPASSWORD: 'Non possiamo accettare questa password: {password}' INVALIDNEWPASSWORD: 'Non possiamo accettare questa password: {password}'
KEEPMESIGNEDIN: 'Resta autenticato'
LOGGEDINAS: 'Sei collegato come {name}.' LOGGEDINAS: 'Sei collegato come {name}.'
NEWPASSWORD: 'Nuova password' NEWPASSWORD: 'Nuova password'
NoPassword: 'Manca la password per questo utente.' NoPassword: 'Manca la password per questo utente.'
PASSWORD: Password PASSWORD: Password
PASSWORDEXPIRED: 'La tua password è scaduta. Per favore selezionarne una nuova.' PASSWORDEXPIRED: 'La tua password è scaduta. Per favore selezionarne una nuova.'
PLURALNAME: Utenti PLURALNAME: Utenti
REMEMBERME: 'Ricordati di me la prossima volta?'
SINGULARNAME: Utente SINGULARNAME: Utente
SUBJECTPASSWORDCHANGED: 'La tua password è stata cambiata' SUBJECTPASSWORDCHANGED: 'La tua password è stata cambiata'
SUBJECTPASSWORDRESET: 'Link per azzerare la tua password' SUBJECTPASSWORDRESET: 'Link per azzerare la tua password'
@ -418,6 +523,17 @@ it:
Toggle: 'Mostra aiuto per la formattazione' Toggle: 'Mostra aiuto per la formattazione'
MemberImportForm: 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>' 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' ResultCreated: 'Creati {count} utenti'
ResultDeleted: 'Eliminati %d utenti' ResultDeleted: 'Eliminati %d utenti'
ResultNone: 'Nessun cambiamento' ResultNone: 'Nessun cambiamento'
@ -452,6 +568,8 @@ it:
MoneyField: MoneyField:
FIELDLABELAMOUNT: Importo FIELDLABELAMOUNT: Importo
FIELDLABELCURRENCY: Valuta FIELDLABELCURRENCY: Valuta
MultiSelectField:
SOURCE_VALIDATION: 'Per favore selezionare un valore tra quelli forniti. È stata fornita l''opzione non valida {value}'
NullableField: NullableField:
IsNullLabel: 'è nullo.' IsNullLabel: 'è nullo.'
NumericField: 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.' UserPermissionsIntro: 'Assegnando gruppi a questo utente modificherà i suoi permessi. Vedi la sezione gruppi per dettagli sui permessi dei singoli gruppi.'
PhoneNumberField: PhoneNumberField:
VALIDATION: 'Per favore inserisci un numero di telefono valido' VALIDATION: 'Per favore inserisci un numero di telefono valido'
RememberLoginHash:
PLURALNAME: 'Ricordare gli Hash di Login'
SINGULARNAME: 'Ricordare l''Hash di Login'
Security: Security:
ALREADYLOGGEDIN: 'Non hai accesso a questa pagina. Se hai un altro account che può accederci, puoi autenticarti qui sotto.' 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' BUTTONSEND: 'Inviami il link per azzerare la password'
@ -584,3 +705,14 @@ it:
UPLOADSINTO: 'salva in /{path}' UPLOADSINTO: 'salva in /{path}'
Versioned: Versioned:
has_many_Versions: Versioni 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: ru:
AddToCampaign:
ErrorCampaignPermissionDenied: 'У вас не достаточно прав доступа для добавления {ObjectTitle} в {CampaignTitle}'
ErrorGeneral: 'Произошла ошибка'
ErrorItemPermissionDenied: 'У вас не достаточно прав доступа для добавления {ObjectTitle} к кампании'
ErrorNotFound: '{Type} не обнаружен'
Success: '{ObjectTitle} добавлен в {CampaignTitle}'
AssetAdmin: AssetAdmin:
ALLOWEDEXTS: 'Разрешённые расширения файлов для загрузки'
HIDEALLOWEDEXTS: 'Скрыть разрешенные расширения'
NEWFOLDER: Новая папка NEWFOLDER: Новая папка
SHOWALLOWEDEXTS: 'Показать допустимые расширения' SHOWALLOWEDEXTS: 'Показать допустимые расширения'
AssetTableField: AssetTableField:
@ -7,12 +15,14 @@ ru:
DIM: Размеры DIM: Размеры
FILENAME: Имя файла FILENAME: Имя файла
FOLDER: Папка FOLDER: Папка
HEIGHT: Высота
LASTEDIT: 'Последнее изменение' LASTEDIT: 'Последнее изменение'
OWNER: Владелец OWNER: Владелец
SIZE: 'Размер' SIZE: 'Размер'
TITLE: Название TITLE: Название
TYPE: 'Тип' TYPE: 'Тип'
URL: URL URL: URL
WIDTH: Ширина
AssetUploadField: AssetUploadField:
ChooseFiles: 'Выберите файлы' ChooseFiles: 'Выберите файлы'
DRAGFILESHERE: 'Перетащите файлы сюда' DRAGFILESHERE: 'Перетащите файлы сюда'
@ -23,7 +33,10 @@ ru:
FILES: Файлы FILES: Файлы
FROMCOMPUTER: 'Выберите файлы с диска вашего компьютера' FROMCOMPUTER: 'Выберите файлы с диска вашего компьютера'
FROMCOMPUTERINFO: 'Загрузить с диска вашего компьютера' FROMCOMPUTERINFO: 'Загрузить с диска вашего компьютера'
INSERTURL: 'Вставить ссылку'
REMOVEINFO: 'Удалить этот файл из поля'
TOTAL: Всего TOTAL: Всего
TOUPLOAD: 'Выберите файлы для загрузки ...'
UPLOADINPROGRESS: 'Идет загрузка... Пожалуйста, подождите' UPLOADINPROGRESS: 'Идет загрузка... Пожалуйста, подождите'
UPLOADOR: ИЛИ UPLOADOR: ИЛИ
BBCodeParser: BBCodeParser:
@ -59,6 +72,10 @@ ru:
ERRORNOTREC: 'Такое имя пользователя или пароль не существует' ERRORNOTREC: 'Такое имя пользователя или пароль не существует'
Boolean: Boolean:
ANY: Все ANY: Все
NOANSWER: 'Нет'
YESANSWER: 'Да'
CAMPAIGNS:
ADDTOCAMPAIGN: 'Добавить в кампанию'
CMSLoadingScreen_ss: CMSLoadingScreen_ss:
LOADING: Идет загрузка... LOADING: Идет загрузка...
REQUIREJS: 'Для работы с CMS у вас должен быть включен JavaScript.' REQUIREJS: 'Для работы с CMS у вас должен быть включен JavaScript.'
@ -67,22 +84,69 @@ ru:
ACCESSALLINTERFACES: 'Доступ ко всему интерфейсу CMS' ACCESSALLINTERFACES: 'Доступ ко всему интерфейсу CMS'
ACCESSALLINTERFACESHELP: 'Отменяет индивидуальные настройки прав доступа.' ACCESSALLINTERFACESHELP: 'Отменяет индивидуальные настройки прав доступа.'
SAVE: Сохранить SAVE: Сохранить
CMSMemberLoginForm:
BUTTONFORGOTPASSWORD: 'Забыли пароль?'
BUTTONLOGIN: 'Вход'
BUTTONLOGOUT: 'Выход'
PASSWORDEXPIRED: '<p>Время действия вашего пароля истекло. <a target="_top" href="{link}">Установите новый пароль.</a></p>'
CMSPageHistoryController_versions_ss: CMSPageHistoryController_versions_ss:
PREVIEW: 'Предварительный просмотр сайта' PREVIEW: 'Предварительный просмотр сайта'
CMSPagesController_Tools_ss:
FILTER: Фильтр
CMSProfileController: CMSProfileController:
MENUTITLE: 'Мой профиль' 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: ChangePasswordEmail_ss:
CHANGEPASSWORDFOREMAIL: 'Пароль для регистрации с Email адресом {email} был изменён. Если вы его не меняли установите новый перейдя по ссылке ниже'
CHANGEPASSWORDTEXT1: 'Вы изменили свой пароль на' CHANGEPASSWORDTEXT1: 'Вы изменили свой пароль на'
CHANGEPASSWORDTEXT2: 'Для того, чтобы войти, используйте сейчас следующие учетные данные:' CHANGEPASSWORDTEXT2: 'Для того, чтобы войти, используйте сейчас следующие учетные данные:'
CHANGEPASSWORDTEXT3: 'Изменить пароль'
EMAIL: Email EMAIL: Email
HELLO: Здравствуйте HELLO: Здравствуйте
PASSWORD: Пароль 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: ConfirmedPasswordField:
ATLEAST: 'Пароль должен быть не короче {min} символов.' ATLEAST: 'Пароль должен быть не короче {min} символов.'
BETWEEN: 'Пароль должен иметь длину от {min} до {max} символов.' BETWEEN: 'Пароль должен иметь длину от {min} до {max} символов.'
CURRENT_PASSWORD_ERROR: 'Неправильно введён текущий пароль.'
CURRENT_PASSWORD_MISSING: 'Вы должны указать Ваш текущий пароль.'
LOGGED_IN_ERROR: 'Вы должны войти в систему, чтобы изменить Ваш пароль.'
MAXIMUM: 'Пароль должен быть не длиннее {max} символов.' MAXIMUM: 'Пароль должен быть не длиннее {max} символов.'
SHOWONCLICKTITLE: 'Изменить пароль' SHOWONCLICKTITLE: 'Изменить пароль'
ContentController: ContentController:
DRAFT_SITE_ACCESS_RESTRICTION: 'Для просмотра чернового или архивного содержимого вам необходимо войти в систему со своим именем пользователя и паролем. <a href="%s">Щелкните здесь, чтобы вернуться на опубликованный сайт.</a>'
NOTLOGGEDIN: 'Не выполнен вход в систему' NOTLOGGEDIN: 'Не выполнен вход в систему'
CreditCardField: CreditCardField:
FIRST: первая FIRST: первая
@ -122,6 +186,8 @@ ru:
INVALID_REQUEST: 'Неверный запрос' INVALID_REQUEST: 'Неверный запрос'
DropdownField: DropdownField:
CHOOSE: (Выберите) CHOOSE: (Выберите)
CHOOSESEARCH: '(Выбрать или найти)'
SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение: {value}'
EmailField: EmailField:
VALIDATION: 'Пожалуйста, задайте адрес email.' VALIDATION: 'Пожалуйста, задайте адрес email.'
Enum: Enum:
@ -169,6 +235,7 @@ ru:
TEXT3: для TEXT3: для
Form: Form:
CSRF_EXPIRED_MESSAGE: 'Срок действия сеанса истек. Пожалуйста, отправьте данные формы еще раз.' CSRF_EXPIRED_MESSAGE: 'Срок действия сеанса истек. Пожалуйста, отправьте данные формы еще раз.'
CSRF_FAILED_MESSAGE: 'Произошла техническая ошибка. Нажмите кнопку "Назад", обновите страницу в браузере и повторите попытку.'
FIELDISREQUIRED: 'Поле {$name} является обязательным' FIELDISREQUIRED: 'Поле {$name} является обязательным'
SubmitBtnLabel: Выбрать SubmitBtnLabel: Выбрать
VALIDATIONCREDITNUMBER: 'Пожалуйста, убедитесь, что номер кредитной карты {number} задан правильно' VALIDATIONCREDITNUMBER: 'Пожалуйста, убедитесь, что номер кредитной карты {number} задан правильно'
@ -222,6 +289,7 @@ ru:
DefaultGroupTitleContentAuthors: 'Авторы содержимого' DefaultGroupTitleContentAuthors: 'Авторы содержимого'
Description: Описание Description: Описание
GroupReminder: 'При назначении группы верхнего уровня все роли будут переняты из нее' GroupReminder: 'При назначении группы верхнего уровня все роли будут переняты из нее'
HierarchyPermsError: 'У Вас недостаточно прав для назначения родительской группы "%s" (необходимы права администратора)'
Locked: 'Блокировано?' Locked: 'Блокировано?'
NoRoles: 'Ролей не найдено' NoRoles: 'Ролей не найдено'
PLURALNAME: Группы PLURALNAME: Группы
@ -233,14 +301,64 @@ ru:
many_many_Members: Члены группы many_many_Members: Члены группы
GroupImportForm: GroupImportForm:
Help1: '<p>Импорт одной или нескольких групп в формате <em>CSV</em> (comma-separated values). <small><a href="#" class="toggle-advanced">Подробные сведения</a></small></p>' 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} групп' ResultCreated: 'Создано {count} групп'
ResultDeleted: 'Удалено %d групп' ResultDeleted: 'Удалено %d групп'
ResultUpdated: 'Обновлено %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: Hierarchy:
InfiniteLoopNotAllowed: 'Обнаружен бесконечный цикл в иерархической структуре "{type}". Для исправления ошибки измените страницу, находящуюся уровнем выше' InfiniteLoopNotAllowed: 'Обнаружен бесконечный цикл в иерархической структуре "{type}". Для исправления ошибки измените страницу, находящуюся уровнем выше'
HtmlEditorField: HtmlEditorField:
ADDURL: 'Добавить URL' ADDURL: 'Добавить URL'
ADJUSTDETAILSDIMENSIONS: 'Дополнительные сведения и размеры' ADJUSTDETAILSDIMENSIONS: 'Дополнительные сведения и размеры'
ANCHORSCANNOTACCESSPAGE: 'У Вас недостаточно прав для доступа к содержимому данной страницы.'
ANCHORSPAGENOTFOUND: 'Страница не найдена.'
ANCHORVALUE: Якорь ANCHORVALUE: Якорь
BUTTONADDURL: 'Добавить URL' BUTTONADDURL: 'Добавить URL'
BUTTONINSERT: Вставить BUTTONINSERT: Вставить
@ -268,6 +386,7 @@ ru:
IMAGETITLETEXT: 'Текст (всплывающая подсказка)' IMAGETITLETEXT: 'Текст (всплывающая подсказка)'
IMAGETITLETEXTDESC: 'Для дополнительных сведений об изображении' IMAGETITLETEXTDESC: 'Для дополнительных сведений об изображении'
IMAGEWIDTHPX: Ширина IMAGEWIDTHPX: Ширина
INSERTMEDIA: 'Вставить медиафайл'
LINK: 'Ссылка' LINK: 'Ссылка'
LINKANCHOR: 'Якорь на этой странице' LINKANCHOR: 'Якорь на этой странице'
LINKDESCR: 'Описание ссылки' LINKDESCR: 'Описание ссылки'
@ -278,8 +397,11 @@ ru:
LINKOPENNEWWIN: 'Открыть ссылку в новом окне?' LINKOPENNEWWIN: 'Открыть ссылку в новом окне?'
LINKTO: 'Ссылка на' LINKTO: 'Ссылка на'
PAGE: Страница PAGE: Страница
SUBJECT: 'Тема Email письма'
URL: URL URL: URL
URLDESCRIPTION: 'Добавляйте видео и изображения из интернета просто введя нужный адрес. Убедитесь что у вас есть права на размещение данных файлов.<br /><br />Внимание: файлы не будут загружены на ваш сервер и если файл будет не доступен по указанному адресу то он так же будет не доступен на вашей странице.'
URLNOTANOEMBEDRESOURCE: 'Не удалось преобразовать ссылку ''{url}'' в медиа-ресурс.' URLNOTANOEMBEDRESOURCE: 'Не удалось преобразовать ссылку ''{url}'' в медиа-ресурс.'
UpdateMEDIA: 'Обновить медиафайл'
Image: Image:
PLURALNAME: Файлы PLURALNAME: Файлы
SINGULARNAME: Файл SINGULARNAME: Файл
@ -289,19 +411,25 @@ ru:
Image_iframe_ss: Image_iframe_ss:
TITLE: 'Iframe загрузки изображений' TITLE: 'Iframe загрузки изображений'
LeftAndMain: LeftAndMain:
CANCEL: Отмена
CANT_REORGANISE: 'У вас нет права редактировать страницы верхнего уровня. Изменения не были сохранены.' CANT_REORGANISE: 'У вас нет права редактировать страницы верхнего уровня. Изменения не были сохранены.'
DELETED: Удалено. DELETED: Удалено.
HELP: Помощь HELP: Помощь
PERMAGAIN: 'Вы вышли из Системы Управления Сайтом. Если Вы хотите войти снова, введите внизу имя пользователя и пароль.' PERMAGAIN: 'Вы вышли из Системы Управления Сайтом. Если Вы хотите войти снова, введите внизу имя пользователя и пароль.'
PERMALREADY: 'Извините, у вас нет доступа к этому разделу Системы Управления. Если Вы хотите войти под другой учетной записью, сделайте это ниже.'
PERMDEFAULT: 'Вы должны войти в систему для доступа к панели управления сайтом. Введите ваши данные ниже.'
PreviewButton: Просмотр PreviewButton: Просмотр
REORGANISATIONSUCCESSFUL: 'Древесная структура сайта успешно реорганизована.' REORGANISATIONSUCCESSFUL: 'Древесная структура сайта успешно реорганизована.'
SAVEDUP: Сохранено. SAVEDUP: Сохранено.
ShowAsList: 'в виде списка' ShowAsList: 'в виде списка'
TooManyPages: 'Слишком много страниц' TooManyPages: 'Слишком много страниц'
ValidationError: 'Ошибка проверки' ValidationError: 'Ошибка проверки'
VersionUnknown: неизвестно
LeftAndMain_Menu_ss: LeftAndMain_Menu_ss:
Hello: Здравствуйте Hello: Здравствуйте
LOGOUT: 'Выход' LOGOUT: 'Выход'
ListboxField:
SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение: %s'
LoginAttempt: LoginAttempt:
Email: 'Email' Email: 'Email'
IP: 'IP-адрес' IP: 'IP-адрес'
@ -317,9 +445,11 @@ ru:
CANTEDIT: 'У вас недостаточно прав' CANTEDIT: 'У вас недостаточно прав'
CONFIRMNEWPASSWORD: 'Подтвердить новый пароль' CONFIRMNEWPASSWORD: 'Подтвердить новый пароль'
CONFIRMPASSWORD: 'Подтвердить пароль' CONFIRMPASSWORD: 'Подтвердить пароль'
CURRENT_PASSWORD: 'Текущий пароль'
DATEFORMAT: 'Формат даты' DATEFORMAT: 'Формат даты'
DefaultAdminFirstname: 'Администратор по умолчанию ' DefaultAdminFirstname: 'Администратор по умолчанию '
DefaultDateTime: по умолч. DefaultDateTime: по умолч.
EDIT_PASSWORD: 'Новый пароль'
EMAIL: Email EMAIL: Email
EMPTYNEWPASSWORD: 'Поле нового пароля не может быть пустым; пожалуйста, повторите попытку' EMPTYNEWPASSWORD: 'Поле нового пароля не может быть пустым; пожалуйста, повторите попытку'
ENTEREMAIL: 'Введите email, чтобы получить ссылку на сброс пароля.' ENTEREMAIL: 'Введите email, чтобы получить ссылку на сброс пароля.'
@ -330,11 +460,14 @@ ru:
FIRSTNAME: 'Имя' FIRSTNAME: 'Имя'
INTERFACELANG: 'Язык интерфейса' INTERFACELANG: 'Язык интерфейса'
INVALIDNEWPASSWORD: 'Недопустимый пароль: {password}' INVALIDNEWPASSWORD: 'Недопустимый пароль: {password}'
KEEPMESIGNEDIN: 'Запомните меня'
LOGGEDINAS: 'Вы вошли в систему как {name}.' LOGGEDINAS: 'Вы вошли в систему как {name}.'
NEWPASSWORD: 'Новый пароль' NEWPASSWORD: 'Новый пароль'
NoPassword: 'Для этого пользователя не задан пароль.' NoPassword: 'Для этого пользователя не задан пароль.'
PASSWORD: Пароль PASSWORD: Пароль
PASSWORDEXPIRED: 'Срок действия Вашего пароля истек. Пожалуйста установите новый.'
PLURALNAME: Члены группы PLURALNAME: Члены группы
REMEMBERME: 'Запомнить меня?'
SINGULARNAME: Член группы SINGULARNAME: Член группы
SUBJECTPASSWORDCHANGED: 'Ваш пароль изменен' SUBJECTPASSWORDCHANGED: 'Ваш пароль изменен'
SUBJECTPASSWORDRESET: 'Ссылка для переустановки пароля' SUBJECTPASSWORDRESET: 'Ссылка для переустановки пароля'
@ -374,6 +507,7 @@ ru:
Toggle: 'Отобразить справку по форматированию' Toggle: 'Отобразить справку по форматированию'
MemberImportForm: MemberImportForm:
Help1: '<p>Импорт пользователей в формате <em>CSV</em> (comma-separated values). <small><a href="#" class="toggle-advanced">Подробные сведения</a></small></p>' 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} участников' ResultCreated: 'Создано {count} участников'
ResultDeleted: 'Удалено %d участников' ResultDeleted: 'Удалено %d участников'
ResultNone: 'Изменений нет' ResultNone: 'Изменений нет'
@ -408,6 +542,8 @@ ru:
MoneyField: MoneyField:
FIELDLABELAMOUNT: Сумма FIELDLABELAMOUNT: Сумма
FIELDLABELCURRENCY: Валюта FIELDLABELCURRENCY: Валюта
MultiSelectField:
SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение(я): {value}'
NullableField: NullableField:
IsNullLabel: 'Недействительно' IsNullLabel: 'Недействительно'
NumericField: NumericField:
@ -437,12 +573,17 @@ ru:
SINGULARNAME: Роль SINGULARNAME: Роль
Title: Название Title: Название
PermissionRoleCode: PermissionRoleCode:
PLURALNAME: 'Код роли доступа'
PermsError: 'У Вас недостаточно прав для назначения родительской группы "%s" (необходимы права администратора)'
SINGULARNAME: 'Код роли доступа' SINGULARNAME: 'Код роли доступа'
Permissions: Permissions:
PERMISSIONS_CATEGORY: 'Роли и права доступа' PERMISSIONS_CATEGORY: 'Роли и права доступа'
UserPermissionsIntro: 'При включении этого пользователя в определенную группу его права доступа будут изменены соответствующим образом. Более подробные сведения о правах доступа для отдельных групп содержатся в разделе "Группы".' UserPermissionsIntro: 'При включении этого пользователя в определенную группу его права доступа будут изменены соответствующим образом. Более подробные сведения о правах доступа для отдельных групп содержатся в разделе "Группы".'
PhoneNumberField: PhoneNumberField:
VALIDATION: 'Пожалуйста, введите верный номер телефона' VALIDATION: 'Пожалуйста, введите верный номер телефона'
RememberLoginHash:
PLURALNAME: 'Сохраненные хэши входов'
SINGULARNAME: 'Сохраненный хэш входа'
Security: Security:
ALREADYLOGGEDIN: 'У Вас нет доступа к этой странице. Если у вас имеется другая учетная запись, имеющая доступ к этой странице, введите ее данные ниже.' ALREADYLOGGEDIN: 'У Вас нет доступа к этой странице. Если у вас имеется другая учетная запись, имеющая доступ к этой странице, введите ее данные ниже.'
BUTTONSEND: 'Отправить мне ссылку переустановки пароля' BUTTONSEND: 'Отправить мне ссылку переустановки пароля'
@ -501,6 +642,8 @@ ru:
Print: Печать Print: Печать
TableListField_PageControls_ss: TableListField_PageControls_ss:
OF: из OF: из
TextField:
VALIDATEMAXLENGTH: 'Значение для {name} не должно превышать {maxLength} символов'
TimeField: TimeField:
VALIDATEFORMAT: 'Пожалуйста, задайте верный формат времени {format})' VALIDATEFORMAT: 'Пожалуйста, задайте верный формат времени {format})'
ToggleField: ToggleField:
@ -533,5 +676,17 @@ ru:
REMOVEINFO: 'Удалить файл отсюда, но не удалять с сервера' REMOVEINFO: 'Удалить файл отсюда, но не удалять с сервера'
STARTALL: 'Стартовать все' STARTALL: 'Стартовать все'
Saved: Сохранено Saved: Сохранено
UPLOADSINTO: 'загрузка в /{path}'
Versioned: Versioned:
has_many_Versions: Версии 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' FROMWEB: 'Z webu'
FindInFolder: 'Vyhľadať v priečinku' FindInFolder: 'Vyhľadať v priečinku'
IMAGEALT: 'Atlernatívny text (alt)' IMAGEALT: 'Atlernatívny text (alt)'
IMAGEALTTEXT: 'Atlernatívny text (alt) - zobrazí sa, ak nemože byť zobrazený obrázok' IMAGEALTTEXT: 'Atlernatívny text (alt) - zobrazí sa ak obrázok nemože byť zobrazený '
IMAGEALTTEXTDESC: 'Zobrazí sa na obrazovke alebo ak obrázok nemôže byť zobrazený' IMAGEALTTEXTDESC: 'Zobrazí sa na obrazovke, ak obrázok nemôže byť zobrazený'
IMAGEDIMENSIONS: Rozmery IMAGEDIMENSIONS: Rozmery
IMAGEHEIGHTPX: Výška IMAGEHEIGHTPX: Výška
IMAGETITLE: 'Text titulky (tooltip) - pre doplňujúce informácie o obrázku' IMAGETITLE: 'Text titulky (tooltip) - pre doplňujúce informácie o obrázku'
@ -333,7 +333,7 @@ sk:
LeftAndMain: LeftAndMain:
CANT_REORGANISE: 'Nemáte oprávnenie meniť stránky najvyššej úrovne. Vaša zmena nebola uložená.' CANT_REORGANISE: 'Nemáte oprávnenie meniť stránky najvyššej úrovne. Vaša zmena nebola uložená.'
DELETED: Zmazané. DELETED: Zmazané.
DropdownBatchActionsDefault: 'Vyberte akciu...' DropdownBatchActionsDefault: Akcie
HELP: Pomoc HELP: Pomoc
PAGETYPE: 'Typ stránky' PAGETYPE: 'Typ stránky'
PERMAGAIN: 'Boli ste odhlásený' PERMAGAIN: 'Boli ste odhlásený'
@ -391,6 +391,7 @@ sk:
SUBJECTPASSWORDRESET: 'Odkaz na resetovanie hesla' SUBJECTPASSWORDRESET: 'Odkaz na resetovanie hesla'
SURNAME: Priezvisko SURNAME: Priezvisko
TIMEFORMAT: 'Formát času' 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})' ValidationIdentifierFailed: 'Nemôžte prepísať existujúceho člena #{id} s identickým identifikátorm ({name} = {value})'
WELCOMEBACK: 'Vitajte späť, {firstname}' WELCOMEBACK: 'Vitajte späť, {firstname}'
YOUROLDPASSWORD: 'Vaše staré heslo' 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 %> <% if $Options.Count %>
<% loop $Options %> <% loop $Options %>
<li class="$Class"> <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> <label for="$ID">$Title</label>
</li> </li>
<% end_loop %> <% end_loop %>

View File

@ -1,7 +1,7 @@
<ul $AttributesHTML> <ul $AttributesHTML>
<% loop $Options %> <% loop $Options %>
<li class="$Class"> <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> <label for="$ID">$Title</label>
</li> </li>
<% end_loop %> <% end_loop %>

View File

@ -2,6 +2,8 @@
class ConfigTest_DefinesFoo extends Object implements TestOnly { class ConfigTest_DefinesFoo extends Object implements TestOnly {
protected static $foo = 1; protected static $foo = 1;
private static $not_foo = 1;
} }
class ConfigTest_DefinesBar extends ConfigTest_DefinesFoo { class ConfigTest_DefinesBar extends ConfigTest_DefinesFoo {
@ -262,6 +264,19 @@ class ConfigTest extends SapphireTest {
$this->assertEquals(Object::static_lookup('ConfigTest_DefinesFooDoesntExtendObject', 'bar'), null); $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() { public function testFragmentOrder() {
$this->markTestIncomplete(); $this->markTestIncomplete();
} }

View File

@ -74,6 +74,14 @@ class MySQLDatabaseConfigurationHelperTest extends SapphireTest {
. " WITH GRANT OPTION" . " 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) // Accept create on any database (alternate wildcard syntax)
$this->assertNotEmpty($helper->checkDatabasePermissionGrant( $this->assertNotEmpty($helper->checkDatabasePermissionGrant(
'database_name', 'database_name',

View File

@ -3,6 +3,8 @@
use SilverStripe\ORM\ArrayList; use SilverStripe\ORM\ArrayList;
use SilverStripe\ORM\DataObject; use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\DB; use SilverStripe\ORM\DB;
use SilverStripe\Security\Member;
use SilverStripe\ORM\FieldType\DBField;
/** /**
* @package framework * @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 <?php
use SilverStripe\ORM\FieldType\DBField;
/** /**
* @package framework * @package framework
* @subpackage tests * @subpackage tests
@ -63,4 +66,18 @@ class OptionsetFieldTest extends SapphireTest {
preg_match('/Yes/', $field->Field(), $matches); preg_match('/Yes/', $field->Field(), $matches);
$this->assertEquals($matches[0], 'Yes'); $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

@ -253,65 +253,62 @@ class ArrayListTest extends SapphireTest {
public function testSortSimpleDefaultIsSortedASC() { public function testSortSimpleDefaultIsSortedASC() {
$list = new ArrayList(array( $list = new ArrayList(array(
array('Name' => 'Steve'), array('Name' => 'Steve'),
(object) array('Name' => 'Bob'), (object) array('Name' => 'Bob'),
array('Name' => 'John') array('Name' => 'John'),
array('Name' => 'bonny'),
array('Name' => 'bonny1'),
array('Name' => 'bonny10'),
array('Name' => 'bonny2'),
)); ));
// Unquoted name // Unquoted name
$list1 = $list->sort('Name'); $list1 = $list->sort('Name');
$this->assertEquals($list1->toArray(), array( $this->assertEquals(array(
(object) array('Name' => 'Bob'), (object) array('Name' => 'Bob'),
array('Name' => 'John'), array('Name' => 'bonny'),
array('Name' => 'Steve') array('Name' => 'bonny1'),
)); array('Name' => 'bonny2'),
array('Name' => 'bonny10'),
array('Name' => 'John'),
array('Name' => 'Steve'),
), $list1->toArray());
// Quoted name name // Quoted name name
$list2 = $list->sort('"Name"'); $list2 = $list->sort('"Name"');
$this->assertEquals($list2->toArray(), array( $this->assertEquals(array(
(object) array('Name' => 'Bob'), (object) array('Name' => 'Bob'),
array('Name' => 'John'), array('Name' => 'bonny'),
array('Name' => 'Steve') array('Name' => 'bonny1'),
)); array('Name' => 'bonny2'),
array('Name' => 'bonny10'),
array('Name' => 'John'),
array('Name' => 'Steve'),
), $list2->toArray());
// Array (non-associative) // Array (non-associative)
$list3 = $list->sort(array('"Name"')); $list3 = $list->sort(array('"Name"'));
$this->assertEquals($list3->toArray(), array( $this->assertEquals(array(
(object) array('Name' => 'Bob'), (object) array('Name' => 'Bob'),
array('Name' => 'John'), array('Name' => 'bonny'),
array('Name' => 'Steve') array('Name' => 'bonny1'),
)); array('Name' => 'bonny2'),
array('Name' => 'bonny10'),
// Quoted name name with table array('Name' => 'John'),
$list4 = $list->sort('"Record"."Name"'); array('Name' => 'Steve'),
$this->assertEquals($list4->toArray(), array( ), $list3->toArray());
(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')
));
// Check original list isn't altered // Check original list isn't altered
$this->assertEquals($list->toArray(), array( $this->assertEquals(array(
array('Name' => 'Steve'), array('Name' => 'Steve'),
(object) array('Name' => 'Bob'), (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() { 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 * $list->filter('Name', 'bob'); // only bob in the list
*/ */