From aa286ef7d77d78cde1aaedb2eca5b3c07803366b Mon Sep 17 00:00:00 2001 From: Jonathon Menz Date: Mon, 27 Jul 2015 15:08:25 -0700 Subject: [PATCH 01/23] FIX Missing thumbnails and inconsistencies Made thumbnails and columns in File list Grid Fields more consistent (fixes #4409) --- admin/css/screen.css | 3 --- admin/scss/_style.scss | 12 ------------ css/GridField.css | 2 ++ forms/HtmlEditorField.php | 10 +++++++--- forms/UploadField.php | 11 ++++++++--- scss/GridField.scss | 13 +++++++++++++ 6 files changed, 30 insertions(+), 21 deletions(-) diff --git a/admin/css/screen.css b/admin/css/screen.css index 96388b161..e51607493 100644 --- a/admin/css/screen.css +++ b/admin/css/screen.css @@ -691,9 +691,6 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai .htmleditorfield-linkform .ss-uploadfield .middleColumn { width: auto; } .htmleditorfield-mediaform .ss-gridfield .gridfield-button-delete { display: none; } -.htmleditorfield-mediaform .ss-gridfield table.ss-gridfield-table tbody td:first-child { padding: 0; text-align: center; } -.htmleditorfield-mediaform .ss-gridfield table.ss-gridfield-table tbody td:first-child img { max-height: 30px; } -.htmleditorfield-mediaform .ss-gridfield table.ss-gridfield-table tr td { padding: 4px; } .htmleditorfield-mediaform .htmleditorfield-from-web .ss-uploadfield .middleColumn, .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield .middleColumn { width: auto; background: none; border: none; margin-top: 13px; } .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield h4 { float: left; margin-top: 4px; margin-bottom: 0; } .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield .middleColumn { margin-top: 16px; margin-left: 184px; min-width: 0; clear: none; } diff --git a/admin/scss/_style.scss b/admin/scss/_style.scss index 3a4f776b4..a91f9458a 100644 --- a/admin/scss/_style.scss +++ b/admin/scss/_style.scss @@ -1533,18 +1533,6 @@ body.cms-dialog { // TODO Remove from PHP instead of hiding display: none; // delete action shouldn't be allowed here } - table.ss-gridfield-table { - tbody td:first-child { - padding: 0; - text-align: center; - img { - max-height: 30px; // same thumbnail size as uploadfield rows - } - } - tr td { - padding: $grid-x/2; // more compressed space - } - } } .htmleditorfield-from-web, .htmleditorfield-from-cms { diff --git a/css/GridField.css b/css/GridField.css index c671c0695..29f61b074 100644 --- a/css/GridField.css +++ b/css/GridField.css @@ -134,3 +134,5 @@ Used in side panels and action tabs .cms table.ss-gridfield-table tr.last td { border-bottom: 0 none; } .cms table.ss-gridfield-table td:first-child { border-left: 1px solid rgba(0, 0, 0, 0.1); } .cms table.ss-gridfield-table td:last-child { border-right: 1px solid rgba(0, 0, 0, 0.1); } +.cms table.ss-gridfield-table td.col-StripThumbnail { padding: 2px 4px; width: 32px; height: 32px; } +.cms table.ss-gridfield-table td.col-StripThumbnail img { width: 32px; height: 32px; display: block; } diff --git a/forms/HtmlEditorField.php b/forms/HtmlEditorField.php index e96b73db5..fad081a74 100644 --- a/forms/HtmlEditorField.php +++ b/forms/HtmlEditorField.php @@ -311,7 +311,7 @@ class HtmlEditorField_Toolbar extends RequestHandler { new GridFieldFilterHeader(), new GridFieldSortableHeader(), new GridFieldDataColumns(), - new GridFieldPaginator(5), + new GridFieldPaginator(7), // TODO Shouldn't allow delete here, its too confusing with a "remove from editor view" action. // Remove once we can fit the search button in the last actual title column new GridFieldDeleteAction(), @@ -323,8 +323,12 @@ class HtmlEditorField_Toolbar extends RequestHandler { $fileField->setAttribute('data-multiselect', true); $columns = $fileField->getConfig()->getComponentByType('GridFieldDataColumns'); $columns->setDisplayFields(array( - 'CMSThumbnail' => false, - 'Name' => _t('File.Name'), + 'StripThumbnail' => false, + 'Title' => _t('File.Title'), + 'Created' => singleton('File')->fieldLabel('Created'), + )); + $columns->setFieldCasting(array( + 'Created' => 'SS_Datetime->Nice' )); $numericLabelTmpl = '%d' diff --git a/forms/UploadField.php b/forms/UploadField.php index 17c92eb50..41485b489 100644 --- a/forms/UploadField.php +++ b/forms/UploadField.php @@ -1566,16 +1566,21 @@ class UploadField_SelectHandler extends RequestHandler { $config->addComponent(new GridFieldFilterHeader()); $config->addComponent($colsComponent = new GridFieldDataColumns()); $colsComponent->setDisplayFields(array( - 'Title' => singleton('File')->fieldLabel('Name'), - 'Filename' => singleton('File')->fieldLabel('Filename'), + 'StripThumbnail' => '', + 'Title' => singleton('File')->fieldLabel('Title'), + 'Created' => singleton('File')->fieldLabel('Created'), 'Size' => singleton('File')->fieldLabel('Size') )); + $colsComponent->setFieldCasting(array( + 'Created' => 'SS_Datetime->Nice' + )); + $config->addComponent(new GridFieldPaginator(11)); // If relation is to be autoset, we need to make sure we only list compatible objects. $baseClass = $this->parent->getRelationAutosetClass(); // Create the data source for the list of files within the current directory. - $files = DataList::create($baseClass); + $files = DataList::create($baseClass)->exclude('ClassName', 'Folder'); if($folderID) $files = $files->filter('ParentID', $folderID); $fileField = new GridField('Files', false, $files, $config); diff --git a/scss/GridField.scss b/scss/GridField.scss index 27bcc76f5..5d42fd607 100644 --- a/scss/GridField.scss +++ b/scss/GridField.scss @@ -674,5 +674,18 @@ $gf_grid_x: 16px; td:last-child{ border-right: 1px solid $gf_colour_border; } + + // Thumbnails e.g. in File admin, UploadField and HtmlEditorField file selection + td.col-StripThumbnail { + padding: 2px 4px; + width: 32px; + height: 32px; + + img { + width: 32px; + height: 32px; + display: block; + } + } } } From 1aa5d7314c582ef5d18826b03f15d34150c97695 Mon Sep 17 00:00:00 2001 From: Loz Calver Date: Fri, 31 Jul 2015 09:42:35 +0100 Subject: [PATCH 02/23] Fix issues with tests and "subfolder" URLs --- tests/control/ControllerTest.php | 4 ++-- tests/forms/RequirementsTest.php | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/control/ControllerTest.php b/tests/control/ControllerTest.php index 1357ae5e0..3ec7c8866 100644 --- a/tests/control/ControllerTest.php +++ b/tests/control/ControllerTest.php @@ -328,7 +328,7 @@ class ControllerTest extends FunctionalTest { */ public function testRedirectBackByReferer() { - $internalRelativeUrl = '/some-url'; + $internalRelativeUrl = Controller::join_links(Director::baseURL(), '/some-url'); $internalAbsoluteUrl = Controller::join_links(Director::absoluteBaseURL(), '/some-url'); $response = $this->get('ControllerTest_Controller/redirectbacktest', null, @@ -354,7 +354,7 @@ class ControllerTest extends FunctionalTest { } public function testRedirectBackByBackUrl() { - $internalRelativeUrl = '/some-url'; + $internalRelativeUrl = Controller::join_links(Director::baseURL(), '/some-url'); $internalAbsoluteUrl = Controller::join_links(Director::absoluteBaseURL(), '/some-url'); $response = $this->get('ControllerTest_Controller/redirectbacktest?BackURL=' . urlencode($internalRelativeUrl)); diff --git a/tests/forms/RequirementsTest.php b/tests/forms/RequirementsTest.php index 3dfa8611b..aa459766f 100644 --- a/tests/forms/RequirementsTest.php +++ b/tests/forms/RequirementsTest.php @@ -366,10 +366,11 @@ class RequirementsTest extends SapphireTest { $backend = new Requirements_Backend(); $backend->set_suffix_requirements(false); $src = $this->getCurrentRelativePath() . '/RequirementsTest_a.js'; + $urlSrc = Controller::join_links(Director::baseURL(), $src); $backend->javascript($src); $html = $backend->includeInHTML(false, $template); $this->assertEquals('' - . '

more content

', $html); + . '

more content

', $html); } public function testForceJsToBottom() { From 88c5e7f6e2c74f3c2cd99a2877c21d708b38c94b Mon Sep 17 00:00:00 2001 From: jeroendedauw Date: Fri, 31 Jul 2015 21:49:41 +0200 Subject: [PATCH 03/23] Remove dead assignment --- forms/Form.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/forms/Form.php b/forms/Form.php index 7a0fb6649..519a7d76d 100644 --- a/forms/Form.php +++ b/forms/Form.php @@ -829,9 +829,6 @@ class Form extends RequestHandler { public function getAttributesHTML($attrs = null) { $exclude = (is_string($attrs)) ? func_get_args() : null; - if(!$attrs || is_string($attrs)) $attrs = $this->getAttributes(); - - // Figure out if we can cache this form // - forms with validation shouldn't be cached, cos their error messages won't be shown // - forms with security tokens shouldn't be cached because security tokens expire From 9a4ecbf41b2f999cc8299b58856389cd2ae0014f Mon Sep 17 00:00:00 2001 From: jeroendedauw Date: Fri, 31 Jul 2015 21:52:21 +0200 Subject: [PATCH 04/23] Remove unused local vars --- forms/gridfield/GridFieldExportButton.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/forms/gridfield/GridFieldExportButton.php b/forms/gridfield/GridFieldExportButton.php index 150a9af3e..ba58fe882 100644 --- a/forms/gridfield/GridFieldExportButton.php +++ b/forms/gridfield/GridFieldExportButton.php @@ -103,8 +103,6 @@ class GridFieldExportButton implements GridField_HTMLProvider, GridField_ActionP ? $this->exportColumns : singleton($gridField->getModelClass())->summaryFields(); $fileData = ''; - $columnData = array(); - $fieldItems = new ArrayList(); if($this->csvHasHeader) { $headers = array(); From 66ca5405d0cb8116e5cdf5f886b96d321b20477c Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Fri, 31 Jul 2015 10:16:18 +1200 Subject: [PATCH 05/23] BUG Fix change detection on browser back button --- admin/javascript/LeftAndMain.EditForm.js | 12 +++- admin/javascript/LeftAndMain.js | 86 ++++++++++++++++++++---- 2 files changed, 83 insertions(+), 15 deletions(-) diff --git a/admin/javascript/LeftAndMain.EditForm.js b/admin/javascript/LeftAndMain.EditForm.js index 1a2b3e047..79414bfc6 100644 --- a/admin/javascript/LeftAndMain.EditForm.js +++ b/admin/javascript/LeftAndMain.EditForm.js @@ -129,13 +129,23 @@ * Doesn't cancel any unload or form removal events, you'll need to implement this based on the return * value of this message. * + * If changes are confirmed for discard, the 'changed' flag is reset. + * * Returns: * (Boolean) FALSE if the user wants to abort with changes present, TRUE if no changes are detected * or the user wants to discard them. */ confirmUnsavedChanges: function() { this.trigger('beforesubmitform'); - return (this.is('.changed')) ? confirm(ss.i18n._t('LeftAndMain.CONFIRMUNSAVED')) : true; + if(!this.is('.changed')) { + return true; + } + var confirmed = confirm(ss.i18n._t('LeftAndMain.CONFIRMUNSAVED')); + if(confirmed) { + // confirm discard changes + this.removeClass('changed'); + } + return confirmed; }, /** diff --git a/admin/javascript/LeftAndMain.js b/admin/javascript/LeftAndMain.js index 8e424f123..cbaed7a67 100644 --- a/admin/javascript/LeftAndMain.js +++ b/admin/javascript/LeftAndMain.js @@ -253,12 +253,13 @@ jQuery.noConflict(); $('body').removeClass('loading'); $(window).unbind('resize', positionLoadingSpinner); this.restoreTabState(); - this._super(); }, fromWindow: { - onstatechange: function(){ this.handleStateChange(); } + onstatechange: function(e){ + this.handleStateChange(e); + } }, 'onwindowresize': function() { @@ -358,6 +359,34 @@ jQuery.noConflict(); this.find('.cms-preview').redraw(); this.find('.cms-content').redraw(); }, + + /** + * Confirm whether the current user can navigate away from this page + * + * @param {array} selectors Optional list of selectors + * @returns {boolean} True if the navigation can proceed + */ + checkCanNavigate: function(selectors) { + // Check change tracking (can't use events as we need a way to cancel the current state change) + var contentEls = this._findFragments(selectors || ['Content']), + trackedEls = contentEls + .find(':data(changetracker)') + .add(contentEls.filter(':data(changetracker)')), + safe = true; + + if(!trackedEls.length) { + return true; + } + + trackedEls.each(function() { + // See LeftAndMain.EditForm.js + if(!$(this).confirmUnsavedChanges()) { + safe = false; + } + }); + + return safe; + }, /** * Proxy around History.pushState() which handles non-HTML5 fallbacks, @@ -377,18 +406,9 @@ jQuery.noConflict(); if(!title) title = ""; if (!forceReferer) forceReferer = History.getState().url; - // Check change tracking (can't use events as we need a way to cancel the current state change) - var contentEls = this._findFragments(data.pjax ? data.pjax.split(',') : ['Content']); - var trackedEls = contentEls.find(':data(changetracker)').add(contentEls.filter(':data(changetracker)')); - - if(trackedEls.length) { - var abort = false; - - trackedEls.each(function() { - if(!$(this).confirmUnsavedChanges()) abort = true; - }); - - if(abort) return; + // Check for unsaved changes + if(!this.checkCanNavigate(data.pjax ? data.pjax.split(',') : ['Content'])) { + return; } // Save tab selections so we can restore them later @@ -493,6 +513,16 @@ jQuery.noConflict(); return false; }, + + /** + * Last html5 history state + */ + LastState: null, + + /** + * Flag to pause handleStateChange + */ + PauseState: false, /** * Handles ajax loading of new panels through the window.History object. @@ -517,6 +547,10 @@ jQuery.noConflict(); * if the URL is loaded without ajax. */ handleStateChange: function() { + if(this.getPauseState()) { + return; + } + // Don't allow parallel loading to avoid edge cases if(this.getStateChangeXHR()) this.getStateChangeXHR().abort(); @@ -534,6 +568,30 @@ jQuery.noConflict(); return; } + if(!this.checkCanNavigate()) { + // If history is emulated (ie8 or below) disable attempting to restore + if(h.emulated.pushState) { + return; + } + + var lastState = this.getLastState(); + + // Suppress panel loading while resetting state + this.setPauseState(true); + + // Restore best last state + if(lastState) { + h.pushState(lastState.id, lastState.title, lastState.url); + } else { + h.back(); + } + this.setPauseState(false); + + // Abort loading of this panel + return; + } + this.setLastState(state); + // If any of the requested Pjax fragments don't exist in the current view, // fetch the "Content" view instead, which is the "outermost" fragment // that can be reloaded without reloading the whole window. From ea16aca74bbfacaa0c6a6f058997d63bc2b7bb2f Mon Sep 17 00:00:00 2001 From: Cam Findlay Date: Mon, 3 Aug 2015 12:50:24 +1200 Subject: [PATCH 06/23] DOCS create() makes objects not classes. Thanks to Matthew at Cabbage Tree Creative for reporting. --- docs/en/02_Developer_Guides/05_Extending/05_Injector.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/02_Developer_Guides/05_Extending/05_Injector.md b/docs/en/02_Developer_Guides/05_Extending/05_Injector.md index d17603362..2ebea9775 100644 --- a/docs/en/02_Developer_Guides/05_Extending/05_Injector.md +++ b/docs/en/02_Developer_Guides/05_Extending/05_Injector.md @@ -31,7 +31,7 @@ The benefit of constructing objects through this syntax is `ClassName` can be sw MyClassName: class: MyBetterClassName -Repeated calls to `create()` create a new class each time. +Repeated calls to `create()` create a new object each time. :::php $object = Injector::inst()->create('MyClassName'); From a6fdcd238a675444a92f6feef2fdf16512d77a8c Mon Sep 17 00:00:00 2001 From: John Milmine Date: Sat, 1 Aug 2015 15:55:31 +1200 Subject: [PATCH 07/23] fixing has_one cache to use get_one rather byID This helps becuase it uses the get_one internal Dataobject cache --- model/DataObject.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/DataObject.php b/model/DataObject.php index fc652bad8..4a30167ea 100644 --- a/model/DataObject.php +++ b/model/DataObject.php @@ -1535,7 +1535,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity } if($joinID) { - $component = $this->model->$class->byID($joinID); + $component = DataObject::get_by_id($class, $joinID); } if(empty($component)) { From dfaaa3353e8e253bff6567a4129b51f41182e351 Mon Sep 17 00:00:00 2001 From: scott1702 Date: Mon, 3 Aug 2015 16:17:31 +1200 Subject: [PATCH 08/23] Update batch archive warning to incl children pages --- admin/javascript/LeftAndMain.BatchActions.js | 2 +- admin/javascript/lang/en.js | 2 +- admin/javascript/lang/src/en.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/admin/javascript/LeftAndMain.BatchActions.js b/admin/javascript/LeftAndMain.BatchActions.js index ef58e4811..abd9ddf14 100644 --- a/admin/javascript/LeftAndMain.BatchActions.js +++ b/admin/javascript/LeftAndMain.BatchActions.js @@ -92,7 +92,7 @@ ss.i18n.inject( ss.i18n._t( "CMSMAIN.BATCH_ARCHIVE_PROMPT", - "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history." + "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." ), {'num': ids.length} ) diff --git a/admin/javascript/lang/en.js b/admin/javascript/lang/en.js index 24d6c8740..f08085f7c 100644 --- a/admin/javascript/lang/en.js +++ b/admin/javascript/lang/en.js @@ -8,7 +8,7 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", - "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "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?", "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.", diff --git a/admin/javascript/lang/src/en.js b/admin/javascript/lang/src/en.js index 498862f57..07c969442 100644 --- a/admin/javascript/lang/src/en.js +++ b/admin/javascript/lang/src/en.js @@ -3,7 +3,7 @@ "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", - "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", + "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?", "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.", From f2c39aac200f50157d9163b825ea7a7dd1f7aa18 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 3 Aug 2015 15:56:58 +1200 Subject: [PATCH 09/23] API batch restore action --- admin/javascript/LeftAndMain.BatchActions.js | 14 ++++++++++++++ admin/javascript/lang/en.js | 1 + admin/javascript/lang/src/en.js | 1 + 3 files changed, 16 insertions(+) diff --git a/admin/javascript/LeftAndMain.BatchActions.js b/admin/javascript/LeftAndMain.BatchActions.js index abd9ddf14..de5caa4da 100644 --- a/admin/javascript/LeftAndMain.BatchActions.js +++ b/admin/javascript/LeftAndMain.BatchActions.js @@ -100,6 +100,20 @@ return (confirmed) ? ids : false; }); + // Restore selected archived pages + this.register('admin/pages/batchactions/restore', function(ids) { + var confirmed = confirm( + ss.i18n.inject( + ss.i18n._t( + "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." + ), + {'num': ids.length} + ) + ); + return (confirmed) ? ids : false; + }); + // Delete selected pages from live action this.register('admin/pages/batchactions/deletefromlive', function(ids) { var confirmed = confirm( diff --git a/admin/javascript/lang/en.js b/admin/javascript/lang/en.js index f08085f7c..4cc354bf4 100644 --- a/admin/javascript/lang/en.js +++ b/admin/javascript/lang/en.js @@ -9,6 +9,7 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", "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.", + "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_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "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.", diff --git a/admin/javascript/lang/src/en.js b/admin/javascript/lang/src/en.js index 07c969442..38d4f3de8 100644 --- a/admin/javascript/lang/src/en.js +++ b/admin/javascript/lang/src/en.js @@ -4,6 +4,7 @@ "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", "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.", + "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_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "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.", From 1b6442058d20ad9bf8ab27a31112f07437617e73 Mon Sep 17 00:00:00 2001 From: Loz Calver Date: Mon, 3 Aug 2015 16:49:18 +0100 Subject: [PATCH 10/23] Check that method 'hasMethod' exists in GridFieldSortableHeader --- forms/gridfield/GridFieldSortableHeader.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forms/gridfield/GridFieldSortableHeader.php b/forms/gridfield/GridFieldSortableHeader.php index cfd4983c4..13c08cd86 100644 --- a/forms/gridfield/GridFieldSortableHeader.php +++ b/forms/gridfield/GridFieldSortableHeader.php @@ -111,7 +111,7 @@ class GridFieldSortableHeader implements GridField_HTMLProvider, GridField_DataM if($tmpItem instanceof SS_List) { // It's impossible to sort on a HasManyList/ManyManyList break; - } elseif($tmpItem->hasMethod($methodName)) { + } elseif(method_exists($tmpItem, 'hasMethod') && $tmpItem->hasMethod($methodName)) { // The part is a relation name, so get the object/list from it $tmpItem = $tmpItem->$methodName(); } elseif($tmpItem instanceof DataObject && $tmpItem->hasField($methodName)) { From 3ee017a07f731443f801576e27463000f5bb5743 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Tue, 4 Aug 2015 10:29:40 +1200 Subject: [PATCH 11/23] Remove old changlog file Add reference for 3.2.0-beta2 --- docs/en/04_Changelogs/beta/3.2.0-beta2.md | 3 ++ docs/en/changelogs/4.0.0.md | 52 ----------------------- 2 files changed, 3 insertions(+), 52 deletions(-) create mode 100644 docs/en/04_Changelogs/beta/3.2.0-beta2.md delete mode 100644 docs/en/changelogs/4.0.0.md diff --git a/docs/en/04_Changelogs/beta/3.2.0-beta2.md b/docs/en/04_Changelogs/beta/3.2.0-beta2.md new file mode 100644 index 000000000..5f572c059 --- /dev/null +++ b/docs/en/04_Changelogs/beta/3.2.0-beta2.md @@ -0,0 +1,3 @@ +# 3.2.0 beta2 + +See [3.2.0 beta 1](3.2.0-beta1) changelog for more information on what is new in 3.2 diff --git a/docs/en/changelogs/4.0.0.md b/docs/en/changelogs/4.0.0.md deleted file mode 100644 index 5c8beee15..000000000 --- a/docs/en/changelogs/4.0.0.md +++ /dev/null @@ -1,52 +0,0 @@ -# 4.0.0 (unreleased) - -## Overview - -### Framework - - * Deprecate `SQLQuery` in favour `SQLSelect` - -## Upgrading - -### Update code that uses SQLQuery - -SQLQuery is still implemented, but now extends the new SQLSelect class and has some methods -deprecated. Previously this class was used for both selecting and deleting, but these -have been superceded by the specialised SQLSelect and SQLDelete classes. - -Take care for any code or functions which expect an object of type `SQLQuery`, as -these references should be replaced with `SQLSelect`. Legacy code which generates -`SQLQuery` can still communicate with new code that expects `SQLSelect` as it is a -subclass of `SQLSelect`, but the inverse is not true. - -### Update implementations of augmentSQL - -Since this method now takes a `SQLSelect` as a first parameter, existing code referencing the deprecated `SQLQuery` -type will raise a PHP error. - -E.g. - -Before: - - :::php - function augmentSQL(SQLQuery &$query, DataQuery &$dataQuery = null) { - $locale = Translatable::get_current_locale(); - if(!preg_match('/("|\'|`)Locale("|\'|`)/', implode(' ', $query->getWhere()))) { - $qry = sprintf('"Locale" = \'%s\'', Convert::raw2sql($locale)); - $query->addWhere($qry); - } - } - -After: - - :::php - function augmentSQL(SQLSelect $query, DataQuery $dataQuery = null) { - $locale = Translatable::get_current_locale(); - if(!preg_match('/("|\'|`)Locale("|\'|`)/', implode(' ', $query->getWhereParameterised($parameters)))) { - $query->addWhere(array( - '"Locale"' => $locale - )); - } - } - - From 55fa6452695fde91d12dafb672cc64506728bbea Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Tue, 4 Aug 2015 10:39:12 +1200 Subject: [PATCH 12/23] Added 3.2.0-beta2 changelog --- docs/en/04_Changelogs/beta/3.2.0-beta2.md | 38 +++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/en/04_Changelogs/beta/3.2.0-beta2.md b/docs/en/04_Changelogs/beta/3.2.0-beta2.md index 5f572c059..ce263d045 100644 --- a/docs/en/04_Changelogs/beta/3.2.0-beta2.md +++ b/docs/en/04_Changelogs/beta/3.2.0-beta2.md @@ -1,3 +1,41 @@ # 3.2.0 beta2 See [3.2.0 beta 1](3.2.0-beta1) changelog for more information on what is new in 3.2 + + +## Change Log + +### API Changes + + * 2015-08-03 [f2c39aa](https://github.com/silverstripe/silverstripe-framework/commit/f2c39aac200f50157d9163b825ea7a7dd1f7aa18) batch restore action (Damian Mooyman) + * 2015-08-03 [e22b653](https://github.com/silverstripe/silverstripe-cms/commit/e22b653e06207bfdc0b36ac7a9e6be250e10bde8) batch restore action (Damian Mooyman) + * 2015-07-10 [a6677b1](https://github.com/silverstripe/silverstripe-cms/commit/a6677b1653cf338d66b8b6d1e4d5b14d66250c0e) respect custom attributes on OptionsetField and CheckboxSetField (Damian Mooyman) + * 2015-07-10 [560f9a6](https://github.com/silverstripe/silverstripe-framework/commit/560f9a6e39df4f09dfe4bed5978f6dcddc0bb299) respect custom attributes on OptionsetField and CheckboxSetField (Damian Mooyman) + * 2015-06-09 [914d734](https://github.com/silverstripe/silverstripe-framework/commit/914d734df004947eb869de2abb6fb2fc463be574) Disable deprecation notices by default (Damian Mooyman) + * 2015-01-28 [782c4cb](https://github.com/silverstripe/silverstripe-framework/commit/782c4cbf6f5cde2fa4d45cdbd17552773a67f88f) Enable single-column fulltext filter search as fallback (Damian Mooyman) + +### Bugfixes + + * 2015-07-30 [66ca540](https://github.com/silverstripe/silverstripe-framework/commit/66ca5405d0cb8116e5cdf5f886b96d321b20477c) Fix change detection on browser back button (Damian Mooyman) + * 2015-07-30 [97b226a](https://github.com/silverstripe/silverstripe-framework/commit/97b226abe023bbc059633cd944ff04c281a675a8) Fix semver violation in create_table_options (Damian Mooyman) + * 2015-07-27 [aa286ef](https://github.com/silverstripe/silverstripe-framework/commit/aa286ef7d77d78cde1aaedb2eca5b3c07803366b) Missing thumbnails and inconsistencies (Jonathon Menz) + * 2015-07-26 [5f5ce8a](https://github.com/silverstripe/silverstripe-framework/commit/5f5ce8a82c2bb1a29f9f8b7011d5cd990c34f128) Disable cache to prevent caching of build target (Damian Mooyman) + * 2015-07-23 [10b2fdc](https://github.com/silverstripe/silverstripe-cms/commit/10b2fdc3181310ec3ca75361852deca57ccbbe4c) ContentController::getViewer() not returning all found templates (fixes #1244) (Loz Calver) + * 2015-07-22 [b7480b9](https://github.com/silverstripe/silverstripe-framework/commit/b7480b92a9c734058135a3259a1c4432c6bb474d) Hide 'Logged Passwords' tab in member CMS fields (fixes #4422) (Loz Calver) + * 2015-07-16 [a3201d6](https://github.com/silverstripe/silverstripe-framework/commit/a3201d6ed9967179aa020802e6fb88d2a6a0e37e) $callerClass is undefined (Christopher Darling) + * 2015-07-08 [c7bd504](https://github.com/silverstripe/silverstripe-framework/commit/c7bd50427a4e0ad446502547b81648d78d354062) Fix cookie errors when running in CLI (Damian Mooyman) + * 2015-07-07 [5ace490](https://github.com/silverstripe/silverstripe-framework/commit/5ace4905c90be1373f49dbb0e1a579b279786a1c) Fix issue when SS_ALLOWED_HOSTS is run in CLI (Damian Mooyman) + * 2015-07-05 [a556b48](https://github.com/silverstripe/silverstripe-framework/commit/a556b4854a44b9dfe86c40140ec03d781d354d19) Fix of multiple i18nTextCollector issues: #3797, #3798, #3417 (Damian Mooyman) + * 2015-07-05 [a5b3083](https://github.com/silverstripe/silverstripe-framework/commit/a5b3083dccaedf6a78a5bfd5ecfc5d12ca7cdfba) memory exhaustion in MySQLStatement->bind() (micmania1) + * 2015-07-01 [6fabd01](https://github.com/silverstripe/silverstripe-framework/commit/6fabd0122be37faa671923b534a74e5684d58220) Fix potential XSS injection (Damian Mooyman) + * 2015-07-01 [3b90fef](https://github.com/silverstripe/silverstripe-cms/commit/3b90fef04f914aa6d4a43322771ea1d6b3329af2) fix behat tests (Damian Mooyman) + * 2015-06-26 [d78d325](https://github.com/silverstripe/silverstripe-cms/commit/d78d3250736c5d2f48c5cfc1690fba8b98cc222b) RedirectorPage_Controller shouldn't attempt redirection if the response is finished (fixes #1230) (Loz Calver) + * 2015-06-24 [3507ddb](https://github.com/silverstripe/silverstripe-framework/commit/3507ddb0e8f85cb2a2cb20595590b1c89cc27c67) MemberPassword history removed with with Members (Daniel Hensby) + * 2015-06-19 [a58e595](https://github.com/silverstripe/silverstripe-framework/commit/a58e59565b7b092451b084643d58ddb6ccfbee31) docs not included in composer package installs (through export-ignore git attribute) (Sam Minnee) + * 2015-05-04 [1cca37c](https://github.com/silverstripe/silverstripe-framework/commit/1cca37c9082ef53f02633d1bdac27f4a815d4208) File::getFileType() was case sensitive (fixes #3631) (Loz Calver) + * 2015-04-02 [dd0e2dc](https://github.com/silverstripe/silverstripe-framework/commit/dd0e2dc36200e3931923693c2b9dc978aea99825) Image_Cached exists method doesnt check for positive ID (Daniel Hensby) + * 2015-04-01 [7ff131d](https://github.com/silverstripe/silverstripe-framework/commit/7ff131daa76d345cff90410469accdcca9049cf1) Fix default casted (boolean)false evaluating to true in templates (Damian Mooyman) + * 2015-02-13 [66391ab](https://github.com/silverstripe/silverstripe-framework/commit/66391ab57ad49c2a40bad59fc1fc9e1f12e39d97) Imported namespaces now correctly used to determine class inheritance (Daniel Hensby) + * 2014-12-31 [71a14c3](https://github.com/silverstripe/silverstripe-framework/commit/71a14c30352e69e4c0ac59e5ea72e1da0c79009b) Prevent url= querystring argument override (Damian Mooyman) + * 2014-05-25 [40c5b8b](https://github.com/silverstripe/silverstripe-framework/commit/40c5b8b6758676a3e2a5daf3c438a7720c49baaf) FulltextFilter did not work and was not usable (micmania1) + * 2014-03-24 [fd755a7](https://github.com/silverstripe/silverstripe-framework/commit/fd755a7ff9de69802f04763570f69e4c3b68c08c) ChangePasswordForm validation message should render HTML correctly. (Sean Harvey) From 102892e2477b1b24a030d2e60172bbe99dbb83ad Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Tue, 4 Aug 2015 13:02:20 +1200 Subject: [PATCH 13/23] Update translations --- admin/javascript/lang/en.js | 2 +- admin/javascript/lang/src/cs.js | 12 ++--- admin/javascript/lang/src/de.js | 2 +- admin/javascript/lang/src/en.js | 30 ++++++------ admin/javascript/lang/src/it.js | 18 ++++---- admin/javascript/lang/src/lt.js | 12 ++--- admin/javascript/lang/src/sk.js | 12 ++--- javascript/lang/en.js | 81 ++++++++++++++++----------------- javascript/lang/it.js | 60 ++++++++++++------------ javascript/lang/src/en.js | 80 ++++++++++++++++---------------- javascript/lang/src/it.js | 60 ++++++++++++------------ lang/ar.yml | 4 -- lang/bg.yml | 1 - lang/bs.yml | 1 - lang/ca.yml | 1 - lang/cs.yml | 4 +- lang/da.yml | 1 - lang/de.yml | 6 ++- lang/el.yml | 17 +++++++ lang/en.yml | 37 ++++++++------- lang/eo.yml | 2 - lang/es.yml | 6 --- lang/es_AR.yml | 1 - lang/es_MX.yml | 1 - lang/et_EE.yml | 3 -- lang/fa_IR.yml | 1 - lang/fi.yml | 2 - lang/fo.yml | 1 - lang/fr.yml | 4 -- lang/gl_ES.yml | 1 - lang/he_IL.yml | 1 - lang/hr.yml | 1 - lang/hu.yml | 1 - lang/id.yml | 2 - lang/id_ID.yml | 2 - lang/it.yml | 53 +++++++++++++++++++-- lang/ja.yml | 4 -- lang/lt.yml | 4 +- lang/mi.yml | 4 -- lang/nb.yml | 4 -- lang/nl.yml | 4 -- lang/pl.yml | 4 -- lang/pt.yml | 1 - lang/pt_BR.yml | 1 - lang/ru.yml | 4 -- lang/si.yml | 1 - lang/sk.yml | 4 +- lang/sl.yml | 2 - lang/sr.yml | 4 -- lang/sr_RS.yml | 4 -- lang/sv.yml | 2 - lang/th.yml | 1 - lang/tr.yml | 1 - lang/uk.yml | 1 - lang/zh.yml | 4 -- lang/zh_CN.yml | 1 - lang/zh_TW.yml | 1 - 57 files changed, 280 insertions(+), 299 deletions(-) diff --git a/admin/javascript/lang/en.js b/admin/javascript/lang/en.js index 4cc354bf4..daae3f428 100644 --- a/admin/javascript/lang/en.js +++ b/admin/javascript/lang/en.js @@ -9,7 +9,7 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", "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.", - "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_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", "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.", diff --git a/admin/javascript/lang/src/cs.js b/admin/javascript/lang/src/cs.js index 3ff0dedf4..54cd8718c 100644 --- a/admin/javascript/lang/src/cs.js +++ b/admin/javascript/lang/src/cs.js @@ -1,10 +1,10 @@ { - "CMSMAIN.SELECTONEPAGE": "Please select at least one page", - "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", - "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", - "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", - "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", - "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", + "CMSMAIN.SELECTONEPAGE": "Prosím, vyberte nejméně 1 stránku", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Máte vybráno {num} stránek.\n\nSkutečně je chcete nezveřejnit?", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "Máte vybráno {num} stránek.\n\nSkutečně je chcete zveřejnit?", + "CMSMAIN.BATCH_DELETE_PROMPT": "Máte vybráno {num} stránek.\n\nSkutečně je chcete vymazat?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "Máte vybráno {num} stránek.\n\nSkutečně je chcte archivovat?\n\nTyto stránky budou odstraněny z obou koncept a zveřejněné weby bez vyřazení historie.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "Máte vybráno {num} stránek.\n\nSkutečně chcete vymazat tyto stránky z webu?", "LeftAndMain.CONFIRMUNSAVED": "Určitě chcete opustit navigaci z této stránky?\n\nUPOZORNĚNÍ: Vaše změny nebyly uloženy.\n\nStlačte OK pro pokračovat, nebo Cancel, zůstanete na této stránce.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "UPOZORNĚNÍ: Vaše změny nebyly uloženy.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Skutečně chcete smazat %s skupiny?", diff --git a/admin/javascript/lang/src/de.js b/admin/javascript/lang/src/de.js index 8dbbf9240..9127a30c6 100644 --- a/admin/javascript/lang/src/de.js +++ b/admin/javascript/lang/src/de.js @@ -1,5 +1,5 @@ { - "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.SELECTONEPAGE": "Bitte mindestens eine Seite auswählen", "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", diff --git a/admin/javascript/lang/src/en.js b/admin/javascript/lang/src/en.js index 38d4f3de8..ab19c28ba 100644 --- a/admin/javascript/lang/src/en.js +++ b/admin/javascript/lang/src/en.js @@ -1,17 +1,17 @@ { - "CMSMAIN.SELECTONEPAGE": "Please select at least one page", - "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", - "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", - "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.SELECTONEPAGE": "Please select at least one page", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", "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.", - "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_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", - "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.", - "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Do you really want to delete %s groups?", - "ModelAdmin.SAVED": "Saved", - "ModelAdmin.REALLYDELETE": "Do you really want to delete?", - "ModelAdmin.DELETED": "Deleted", - "ModelAdmin.VALIDATIONERROR": "Validation Error", - "LeftAndMain.PAGEWASDELETED": "This page was deleted. To edit a page, select it from the left." -} + "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_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", + "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.", + "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Do you really want to delete %s groups?", + "ModelAdmin.SAVED": "Saved", + "ModelAdmin.REALLYDELETE": "Do you really want to delete?", + "ModelAdmin.DELETED": "Deleted", + "ModelAdmin.VALIDATIONERROR": "Validation Error", + "LeftAndMain.PAGEWASDELETED": "This page was deleted. To edit a page, select it from the left." +} \ No newline at end of file diff --git a/admin/javascript/lang/src/it.js b/admin/javascript/lang/src/it.js index 9498fc6e2..cd36cc804 100644 --- a/admin/javascript/lang/src/it.js +++ b/admin/javascript/lang/src/it.js @@ -1,16 +1,16 @@ { - "CMSMAIN.SELECTONEPAGE": "Please select at least one page", - "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", - "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", - "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", - "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", - "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", + "CMSMAIN.SELECTONEPAGE": "Per favore selezionare almeno una pagina", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Hai {num} pagine selezionate.\n\nVuoi veramente nasconderle?", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "Hai {num} pagine selezionate.\n\nVuoi veramente pubblicarle?", + "CMSMAIN.BATCH_DELETE_PROMPT": "Hai {num} pagine selezionate.\n\nVuoi veramente eliminarle?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "Hai {num} pagine selezionate.\n\nVuoi veramente archiviare?\n\nQueste pagine verranno rimosse sia dal sito bozza che dal sito pubblico lasciando intatta la cronologia.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "Hai {num} pagine selezionate.\n\nVuoi veramente eliminare queste pagine dal sito live?", "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": "WARNING: Your changes have not been saved.", - "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Do you really want to delete %s groups?", + "LeftAndMain.CONFIRMUNSAVEDSHORT": "ATTENZIONE: le tue modifiche non sono state salvate.", + "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Vuoi veramente eliminare %s gruppi?", "ModelAdmin.SAVED": "Salvato", "ModelAdmin.REALLYDELETE": "Si è sicuri di voler eliminare?", "ModelAdmin.DELETED": "Eliminato", - "ModelAdmin.VALIDATIONERROR": "Validation Error", + "ModelAdmin.VALIDATIONERROR": "Errore di validazione", "LeftAndMain.PAGEWASDELETED": "Questa pagina è stata eliminata. Per modificare questa pagine, selezionarla a sinistra." } \ No newline at end of file diff --git a/admin/javascript/lang/src/lt.js b/admin/javascript/lang/src/lt.js index cfebed860..e1ba36cbd 100644 --- a/admin/javascript/lang/src/lt.js +++ b/admin/javascript/lang/src/lt.js @@ -1,10 +1,10 @@ { - "CMSMAIN.SELECTONEPAGE": "Please select at least one page", - "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", - "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", - "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", - "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", - "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", + "CMSMAIN.SELECTONEPAGE": "Prašome pasirinkti bent vieną puslapį", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Pažymėjote {num} puslapius(-į).\n\nAr tikrai norite nebepublikuoti?", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "Pažymėjote {num} puslapius(-į).\n\nAr tikrai norite publikuoti?", + "CMSMAIN.BATCH_DELETE_PROMPT": "Pažymėjote {num} puslapius(-į).\n\nAr tikrai norite ištrinti?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "Pažymėjote {num} puslapius(-į).\n\nAr tikrai norite suarchyvuoti?\n\nŠie puslapiai bus pašalinti iš juodraščių ir publikuotų puslapių sąrašo, tačiau bus palikta visa pakeitimų istorija.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "Pažymėjote {num} puslapius(-į).\n\nAr tikrai norite ištrinti iš publikuotų puslapių?", "LeftAndMain.CONFIRMUNSAVED": "Ar tikrai norite išeiti iš šio puslapio?\n\nDĖMESIO: Jūsų pakeitimai neišsaugoti.\n\nNorėdami tęsti, spauskite OK, jeigu norite likti, spauskite Cancel.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "DĖMESIO: Jūsų pakeitimai neišsaugoti.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Ar tikrai norite ištrinti %s grupes?", diff --git a/admin/javascript/lang/src/sk.js b/admin/javascript/lang/src/sk.js index df76b69da..2193c7d27 100644 --- a/admin/javascript/lang/src/sk.js +++ b/admin/javascript/lang/src/sk.js @@ -1,10 +1,10 @@ { - "CMSMAIN.SELECTONEPAGE": "Please select at least one page", - "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", - "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", - "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", - "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to archive?\n\nThese pages will be removed from both the draft and published sites without discarding the history.", - "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", + "CMSMAIN.SELECTONEPAGE": "Prosím, vyberte najmenej 1 stránku", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Máte vybratých {num} stránok.\n\nSkutočne ich chcete nezverejniť?", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "Máte vybratých {num} stránok.\n\nSkutočne ich chcete zverejniť?", + "CMSMAIN.BATCH_DELETE_PROMPT": "Máte vybratých {num} stránok.\n\nSkutočne ich chcete vymazať?", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "Máte vybratých {num} stránok.\n\nSkutočne ich chcete archívovať?\n\nTieto stránky budú odstránené z oboch koncept a zverejnené weby bez vyradenia histórie.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "Máte vybratých {num} stránok.\n\nSkutočne chcete tieto stránky vymazať z webu?", "LeftAndMain.CONFIRMUNSAVED": "Určite chcete opustiť navigáciu z tejto stránky?\n\nUPOZORNENIE: Vaše zmeny neboli uložené.\n\nStlačte OK pre pokračovať, alebo Cancel, ostanete na teto stránke.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "UPOZORNENIE: Vaše zmeny neboli uložené.", "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Skutočne chcete zmazať % skupiny?", diff --git a/javascript/lang/en.js b/javascript/lang/en.js index 41a49b5d2..e506cba5c 100644 --- a/javascript/lang/en.js +++ b/javascript/lang/en.js @@ -4,45 +4,44 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); } else { ss.i18n.addDictionary('en', { - "VALIDATOR.FIELDREQUIRED": "Please fill out \"%s\", it is required.", - "HASMANYFILEFIELD.UPLOADING": "Uploading... %s", - "TABLEFIELD.DELETECONFIRMMESSAGE": "Are you sure you want to delete this record?", - "LOADING": "loading...", - "UNIQUEFIELD.SUGGESTED": "Changed value to '%s' : %s", - "UNIQUEFIELD.ENTERNEWVALUE": "You will need to enter a new value for this field", - "UNIQUEFIELD.CANNOTLEAVEEMPTY": "This field cannot be left empty", - "RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "The character '%s' cannot be used in this field", - "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'", - "FILEIFRAMEFIELD.DELETEFILE": "Delete File", - "FILEIFRAMEFIELD.UNATTACHFILE": "Un-Attach File", - "FILEIFRAMEFIELD.DELETEIMAGE": "Delete Image", - "FILEIFRAMEFIELD.CONFIRMDELETE": "Are you sure you want to delete this file?", - "LeftAndMain.IncompatBrowserWarning": "Your browser is not compatible with the CMS interface. Please use Internet Explorer 7+, Google Chrome 10+ or Mozilla Firefox 3.5+.", - "GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.", - "HtmlEditorField.SelectAnchor": "Select an anchor", - "UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?", - "UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)", - "UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)", - "UploadField.ONLYPARTIALUPLOADED": "File was only partially uploaded", - "UploadField.NOFILEUPLOADED": "No File was uploaded", - "UploadField.NOTMPFOLDER": "Missing a temporary folder", - "UploadField.WRITEFAILED": "Failed to write file to disk", - "UploadField.STOPEDBYEXTENSION": "File upload stopped by extension", - "UploadField.TOOLARGE": "Filesize is too large", - "UploadField.TOOSMALL": "Filesize is too small", - "UploadField.INVALIDEXTENSION": "Extension is not allowed", - "UploadField.MAXNUMBEROFFILESSIMPLE": "Max number of files exceeded", - "UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size", - "UploadField.EMPTYRESULT": "Empty file upload result", - "UploadField.LOADING": "Loading ...", - "UploadField.Editing": "Editing ...", - "UploadField.Uploaded": "Uploaded", - "UploadField.OVERWRITEWARNING": "File with the same name already exists", - "TreeDropdownField.ENTERTOSEARCH": "Press enter to search", - "TreeDropdownField.OpenLink": "Open", - "TreeDropdownField.FieldTitle": "Choose", - "TreeDropdownField.SearchFieldTitle": "Choose or Search" -} -); + "VALIDATOR.FIELDREQUIRED": "Please fill out \"%s\", it is required.", + "HASMANYFILEFIELD.UPLOADING": "Uploading... %s", + "TABLEFIELD.DELETECONFIRMMESSAGE": "Are you sure you want to delete this record?", + "LOADING": "loading...", + "UNIQUEFIELD.SUGGESTED": "Changed value to '%s' : %s", + "UNIQUEFIELD.ENTERNEWVALUE": "You will need to enter a new value for this field", + "UNIQUEFIELD.CANNOTLEAVEEMPTY": "This field cannot be left empty", + "RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "The character '%s' cannot be used in this field", + "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'", + "FILEIFRAMEFIELD.DELETEFILE": "Delete File", + "FILEIFRAMEFIELD.UNATTACHFILE": "Un-Attach File", + "FILEIFRAMEFIELD.DELETEIMAGE": "Delete Image", + "FILEIFRAMEFIELD.CONFIRMDELETE": "Are you sure you want to delete this file?", + "LeftAndMain.IncompatBrowserWarning": "Your browser is not compatible with the CMS interface. Please use Internet Explorer 7+, Google Chrome 10+ or Mozilla Firefox 3.5+.", + "GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.", + "HtmlEditorField.SelectAnchor": "Select an anchor", + "UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?", + "UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)", + "UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)", + "UploadField.ONLYPARTIALUPLOADED": "File was only partially uploaded", + "UploadField.NOFILEUPLOADED": "No File was uploaded", + "UploadField.NOTMPFOLDER": "Missing a temporary folder", + "UploadField.WRITEFAILED": "Failed to write file to disk", + "UploadField.STOPEDBYEXTENSION": "File upload stopped by extension", + "UploadField.TOOLARGE": "Filesize is too large", + "UploadField.TOOSMALL": "Filesize is too small", + "UploadField.INVALIDEXTENSION": "Extension is not allowed", + "UploadField.MAXNUMBEROFFILESSIMPLE": "Max number of files exceeded", + "UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size", + "UploadField.EMPTYRESULT": "Empty file upload result", + "UploadField.LOADING": "Loading ...", + "UploadField.Editing": "Editing ...", + "UploadField.Uploaded": "Uploaded", + "UploadField.OVERWRITEWARNING": "File with the same name already exists", + "TreeDropdownField.ENTERTOSEARCH": "Press enter to search", + "TreeDropdownField.OpenLink": "Open", + "TreeDropdownField.FieldTitle": "Choose", + "TreeDropdownField.SearchFieldTitle": "Choose or Search" +}); } \ No newline at end of file diff --git a/javascript/lang/it.js b/javascript/lang/it.js index 6f66aa061..ff1f6f432 100644 --- a/javascript/lang/it.js +++ b/javascript/lang/it.js @@ -13,35 +13,35 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { "UNIQUEFIELD.CANNOTLEAVEEMPTY": "Questo campo non può essere lasciato vuoto", "RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "Il carattere '%s' non può essere utilizzato in questo campo", "UPDATEURL.CONFIRM": "Volete cambiare l'URL in:\n\n%s/\n\nClicca OK per cambiare l'URL, clicca Annuler per lasciarla a:\n\n%s", - "UPDATEURL.CONFIRMURLCHANGED": "The URL has been changed to\n'%s'", - "FILEIFRAMEFIELD.DELETEFILE": "Delete File", - "FILEIFRAMEFIELD.UNATTACHFILE": "Un-Attach File", - "FILEIFRAMEFIELD.DELETEIMAGE": "Delete Image", - "FILEIFRAMEFIELD.CONFIRMDELETE": "Are you sure you want to delete this file?", - "LeftAndMain.IncompatBrowserWarning": "Your browser is not compatible with the CMS interface. Please use Internet Explorer 7+, Google Chrome 10+ or Mozilla Firefox 3.5+.", - "GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.", - "HtmlEditorField.SelectAnchor": "Select an anchor", - "UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?", - "UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)", - "UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)", - "UploadField.ONLYPARTIALUPLOADED": "File was only partially uploaded", - "UploadField.NOFILEUPLOADED": "No File was uploaded", - "UploadField.NOTMPFOLDER": "Missing a temporary folder", - "UploadField.WRITEFAILED": "Failed to write file to disk", - "UploadField.STOPEDBYEXTENSION": "File upload stopped by extension", - "UploadField.TOOLARGE": "Filesize is too large", - "UploadField.TOOSMALL": "Filesize is too small", - "UploadField.INVALIDEXTENSION": "Extension is not allowed", - "UploadField.MAXNUMBEROFFILESSIMPLE": "Max number of files exceeded", - "UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size", - "UploadField.EMPTYRESULT": "Empty file upload result", - "UploadField.LOADING": "Loading ...", - "UploadField.Editing": "Editing ...", - "UploadField.Uploaded": "Uploaded", - "UploadField.OVERWRITEWARNING": "File with the same name already exists", - "TreeDropdownField.ENTERTOSEARCH": "Press enter to search", - "TreeDropdownField.OpenLink": "Open", - "TreeDropdownField.FieldTitle": "Choose", - "TreeDropdownField.SearchFieldTitle": "Choose or Search" + "UPDATEURL.CONFIRMURLCHANGED": "L'URL è stato cambiato in\n'%s'", + "FILEIFRAMEFIELD.DELETEFILE": "Eliminare file", + "FILEIFRAMEFIELD.UNATTACHFILE": "Scollegare file", + "FILEIFRAMEFIELD.DELETEIMAGE": "Eliminare immagine", + "FILEIFRAMEFIELD.CONFIRMDELETE": "Si è sicuri di voler eliminare questo file?", + "LeftAndMain.IncompatBrowserWarning": "Il tuo browser non è compatibile con l'interfaccia del CMS. Per favore, usare Internet Explorer 7+, Google Chrome 10+ o Mozilla Firefox 3.5+.", + "GRIDFIELD.ERRORINTRANSACTION": "Errore durante la lettura dei dati dal server.\nPer favore riprovare più tardi.", + "HtmlEditorField.SelectAnchor": "Selezionare un riferimento", + "UploadField.ConfirmDelete": "Si è sicuri di voler eliminare questo file dal filesystem del server?", + "UploadField.PHP_MAXFILESIZE": "Il file supera upload_max_filesize (direttiva php.ini)", + "UploadField.HTML_MAXFILESIZE": "Il file supera MAX_FILE_SIZE (direttiva moduli HTML)", + "UploadField.ONLYPARTIALUPLOADED": "Il file è stato caricato solo parzialmente", + "UploadField.NOFILEUPLOADED": "Nessun file caricato", + "UploadField.NOTMPFOLDER": "Cartella temporanea assente", + "UploadField.WRITEFAILED": "Scrittura del file su disco fallita", + "UploadField.STOPEDBYEXTENSION": "Caricamento del file interrotto dall'estensione", + "UploadField.TOOLARGE": "La dimensione del file è troppo grande", + "UploadField.TOOSMALL": "La dimensione del file è troppo piccola", + "UploadField.INVALIDEXTENSION": "Estensione non consentita", + "UploadField.MAXNUMBEROFFILESSIMPLE": "Numero massimo di file superato", + "UploadField.UPLOADEDBYTES": "Il numero di byte caricati supera la dimensione del file", + "UploadField.EMPTYRESULT": "File caricato vuoto", + "UploadField.LOADING": "Caricamento ...", + "UploadField.Editing": "Modifica ...", + "UploadField.Uploaded": "Caricato", + "UploadField.OVERWRITEWARNING": "Un file con lo stesso nome esiste già", + "TreeDropdownField.ENTERTOSEARCH": "Premere INVIO per cercare", + "TreeDropdownField.OpenLink": "Aprire", + "TreeDropdownField.FieldTitle": "Scegliere", + "TreeDropdownField.SearchFieldTitle": "Scegliere o Cercare" }); } \ No newline at end of file diff --git a/javascript/lang/src/en.js b/javascript/lang/src/en.js index fe55684e6..e8c0b5ad6 100644 --- a/javascript/lang/src/en.js +++ b/javascript/lang/src/en.js @@ -1,41 +1,41 @@ { - "VALIDATOR.FIELDREQUIRED": "Please fill out \"%s\", it is required.", - "HASMANYFILEFIELD.UPLOADING": "Uploading... %s", - "TABLEFIELD.DELETECONFIRMMESSAGE": "Are you sure you want to delete this record?", - "LOADING": "loading...", - "UNIQUEFIELD.SUGGESTED": "Changed value to '%s' : %s", - "UNIQUEFIELD.ENTERNEWVALUE": "You will need to enter a new value for this field", - "UNIQUEFIELD.CANNOTLEAVEEMPTY": "This field cannot be left empty", - "RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "The character '%s' cannot be used in this field", - "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'", - "FILEIFRAMEFIELD.DELETEFILE": "Delete File", - "FILEIFRAMEFIELD.UNATTACHFILE": "Un-Attach File", - "FILEIFRAMEFIELD.DELETEIMAGE": "Delete Image", - "FILEIFRAMEFIELD.CONFIRMDELETE": "Are you sure you want to delete this file?", - "LeftAndMain.IncompatBrowserWarning": "Your browser is not compatible with the CMS interface. Please use Internet Explorer 7+, Google Chrome 10+ or Mozilla Firefox 3.5+.", - "GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.", - "HtmlEditorField.SelectAnchor": "Select an anchor", - "UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?", - "UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)", - "UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)", - "UploadField.ONLYPARTIALUPLOADED": "File was only partially uploaded", - "UploadField.NOFILEUPLOADED": "No File was uploaded", - "UploadField.NOTMPFOLDER": "Missing a temporary folder", - "UploadField.WRITEFAILED": "Failed to write file to disk", - "UploadField.STOPEDBYEXTENSION": "File upload stopped by extension", - "UploadField.TOOLARGE": "Filesize is too large", - "UploadField.TOOSMALL": "Filesize is too small", - "UploadField.INVALIDEXTENSION": "Extension is not allowed", - "UploadField.MAXNUMBEROFFILESSIMPLE": "Max number of files exceeded", - "UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size", - "UploadField.EMPTYRESULT": "Empty file upload result", - "UploadField.LOADING": "Loading ...", - "UploadField.Editing": "Editing ...", - "UploadField.Uploaded": "Uploaded", - "UploadField.OVERWRITEWARNING": "File with the same name already exists", - "TreeDropdownField.ENTERTOSEARCH": "Press enter to search", - "TreeDropdownField.OpenLink": "Open", - "TreeDropdownField.FieldTitle": "Choose", - "TreeDropdownField.SearchFieldTitle": "Choose or Search" -} + "VALIDATOR.FIELDREQUIRED": "Please fill out \"%s\", it is required.", + "HASMANYFILEFIELD.UPLOADING": "Uploading... %s", + "TABLEFIELD.DELETECONFIRMMESSAGE": "Are you sure you want to delete this record?", + "LOADING": "loading...", + "UNIQUEFIELD.SUGGESTED": "Changed value to '%s' : %s", + "UNIQUEFIELD.ENTERNEWVALUE": "You will need to enter a new value for this field", + "UNIQUEFIELD.CANNOTLEAVEEMPTY": "This field cannot be left empty", + "RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "The character '%s' cannot be used in this field", + "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'", + "FILEIFRAMEFIELD.DELETEFILE": "Delete File", + "FILEIFRAMEFIELD.UNATTACHFILE": "Un-Attach File", + "FILEIFRAMEFIELD.DELETEIMAGE": "Delete Image", + "FILEIFRAMEFIELD.CONFIRMDELETE": "Are you sure you want to delete this file?", + "LeftAndMain.IncompatBrowserWarning": "Your browser is not compatible with the CMS interface. Please use Internet Explorer 7+, Google Chrome 10+ or Mozilla Firefox 3.5+.", + "GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.", + "HtmlEditorField.SelectAnchor": "Select an anchor", + "UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?", + "UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)", + "UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)", + "UploadField.ONLYPARTIALUPLOADED": "File was only partially uploaded", + "UploadField.NOFILEUPLOADED": "No File was uploaded", + "UploadField.NOTMPFOLDER": "Missing a temporary folder", + "UploadField.WRITEFAILED": "Failed to write file to disk", + "UploadField.STOPEDBYEXTENSION": "File upload stopped by extension", + "UploadField.TOOLARGE": "Filesize is too large", + "UploadField.TOOSMALL": "Filesize is too small", + "UploadField.INVALIDEXTENSION": "Extension is not allowed", + "UploadField.MAXNUMBEROFFILESSIMPLE": "Max number of files exceeded", + "UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size", + "UploadField.EMPTYRESULT": "Empty file upload result", + "UploadField.LOADING": "Loading ...", + "UploadField.Editing": "Editing ...", + "UploadField.Uploaded": "Uploaded", + "UploadField.OVERWRITEWARNING": "File with the same name already exists", + "TreeDropdownField.ENTERTOSEARCH": "Press enter to search", + "TreeDropdownField.OpenLink": "Open", + "TreeDropdownField.FieldTitle": "Choose", + "TreeDropdownField.SearchFieldTitle": "Choose or Search" +} \ No newline at end of file diff --git a/javascript/lang/src/it.js b/javascript/lang/src/it.js index 428c5acad..3b4844644 100644 --- a/javascript/lang/src/it.js +++ b/javascript/lang/src/it.js @@ -8,34 +8,34 @@ "UNIQUEFIELD.CANNOTLEAVEEMPTY": "Questo campo non può essere lasciato vuoto", "RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "Il carattere '%s' non può essere utilizzato in questo campo", "UPDATEURL.CONFIRM": "Volete cambiare l'URL in:\n\n%s/\n\nClicca OK per cambiare l'URL, clicca Annuler per lasciarla a:\n\n%s", - "UPDATEURL.CONFIRMURLCHANGED": "The URL has been changed to\n'%s'", - "FILEIFRAMEFIELD.DELETEFILE": "Delete File", - "FILEIFRAMEFIELD.UNATTACHFILE": "Un-Attach File", - "FILEIFRAMEFIELD.DELETEIMAGE": "Delete Image", - "FILEIFRAMEFIELD.CONFIRMDELETE": "Are you sure you want to delete this file?", - "LeftAndMain.IncompatBrowserWarning": "Your browser is not compatible with the CMS interface. Please use Internet Explorer 7+, Google Chrome 10+ or Mozilla Firefox 3.5+.", - "GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.", - "HtmlEditorField.SelectAnchor": "Select an anchor", - "UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?", - "UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)", - "UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)", - "UploadField.ONLYPARTIALUPLOADED": "File was only partially uploaded", - "UploadField.NOFILEUPLOADED": "No File was uploaded", - "UploadField.NOTMPFOLDER": "Missing a temporary folder", - "UploadField.WRITEFAILED": "Failed to write file to disk", - "UploadField.STOPEDBYEXTENSION": "File upload stopped by extension", - "UploadField.TOOLARGE": "Filesize is too large", - "UploadField.TOOSMALL": "Filesize is too small", - "UploadField.INVALIDEXTENSION": "Extension is not allowed", - "UploadField.MAXNUMBEROFFILESSIMPLE": "Max number of files exceeded", - "UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size", - "UploadField.EMPTYRESULT": "Empty file upload result", - "UploadField.LOADING": "Loading ...", - "UploadField.Editing": "Editing ...", - "UploadField.Uploaded": "Uploaded", - "UploadField.OVERWRITEWARNING": "File with the same name already exists", - "TreeDropdownField.ENTERTOSEARCH": "Press enter to search", - "TreeDropdownField.OpenLink": "Open", - "TreeDropdownField.FieldTitle": "Choose", - "TreeDropdownField.SearchFieldTitle": "Choose or Search" + "UPDATEURL.CONFIRMURLCHANGED": "L'URL è stato cambiato in\n'%s'", + "FILEIFRAMEFIELD.DELETEFILE": "Eliminare file", + "FILEIFRAMEFIELD.UNATTACHFILE": "Scollegare file", + "FILEIFRAMEFIELD.DELETEIMAGE": "Eliminare immagine", + "FILEIFRAMEFIELD.CONFIRMDELETE": "Si è sicuri di voler eliminare questo file?", + "LeftAndMain.IncompatBrowserWarning": "Il tuo browser non è compatibile con l'interfaccia del CMS. Per favore, usare Internet Explorer 7+, Google Chrome 10+ o Mozilla Firefox 3.5+.", + "GRIDFIELD.ERRORINTRANSACTION": "Errore durante la lettura dei dati dal server.\nPer favore riprovare più tardi.", + "HtmlEditorField.SelectAnchor": "Selezionare un riferimento", + "UploadField.ConfirmDelete": "Si è sicuri di voler eliminare questo file dal filesystem del server?", + "UploadField.PHP_MAXFILESIZE": "Il file supera upload_max_filesize (direttiva php.ini)", + "UploadField.HTML_MAXFILESIZE": "Il file supera MAX_FILE_SIZE (direttiva moduli HTML)", + "UploadField.ONLYPARTIALUPLOADED": "Il file è stato caricato solo parzialmente", + "UploadField.NOFILEUPLOADED": "Nessun file caricato", + "UploadField.NOTMPFOLDER": "Cartella temporanea assente", + "UploadField.WRITEFAILED": "Scrittura del file su disco fallita", + "UploadField.STOPEDBYEXTENSION": "Caricamento del file interrotto dall'estensione", + "UploadField.TOOLARGE": "La dimensione del file è troppo grande", + "UploadField.TOOSMALL": "La dimensione del file è troppo piccola", + "UploadField.INVALIDEXTENSION": "Estensione non consentita", + "UploadField.MAXNUMBEROFFILESSIMPLE": "Numero massimo di file superato", + "UploadField.UPLOADEDBYTES": "Il numero di byte caricati supera la dimensione del file", + "UploadField.EMPTYRESULT": "File caricato vuoto", + "UploadField.LOADING": "Caricamento ...", + "UploadField.Editing": "Modifica ...", + "UploadField.Uploaded": "Caricato", + "UploadField.OVERWRITEWARNING": "Un file con lo stesso nome esiste già", + "TreeDropdownField.ENTERTOSEARCH": "Premere INVIO per cercare", + "TreeDropdownField.OpenLink": "Aprire", + "TreeDropdownField.FieldTitle": "Scegliere", + "TreeDropdownField.SearchFieldTitle": "Scegliere o Cercare" } \ No newline at end of file diff --git a/lang/ar.yml b/lang/ar.yml index 960e9ec73..78e8cf743 100644 --- a/lang/ar.yml +++ b/lang/ar.yml @@ -169,7 +169,6 @@ ar: TEXT2: 'رابط إعادة تعيين كلمة المرور' TEXT3: لـ Form: - CSRF_FAILED_MESSAGE: "هناك على ما يبدو مشكلة فنية. الرجاء الضغط على الزر مرة أخرى، و تحديث المتصفح الخاص بك، ثم حاول مرة أخرى." FIELDISREQUIRED: '{الاسم} مطلوب' SubmitBtnLabel: اذهب VALIDATIONCREDITNUMBER: 'يرجى التأكد من أنك قد قمت بإدخال {رقم} رقم بطاقة الائتمان بشكل صحيح' @@ -235,7 +234,6 @@ ar: many_many_Members: الأعضاء GroupImportForm: Help1: '

استيراد واحد أو أكثر من المجموعات في CSVتهيئة (قيم مفصولة بفواصل) إظهار استخدام المتقدم

' - Help2: "

الاستخدام المتقدم

  • الأعمدة المسموح بها: %s
  • تتم مطابقة المجموعات الموجودة بقيمتها الفريدة من نوعها رمز و تحديثها مع أي قيم جديدة من الملف المستورد
  • يمكن إنشاء مجموعة التسلسلات الهرمية باستخدام الرمز الرئيسي عمود
  • .
  • يمكن تعيين رموز التصريح من قبل رمز التصريح .العمود. لا يتم مسح رموز إذن موجود
  • .
" ResultCreated: 'تم إنشاء {عدد} مجموعات' ResultDeleted: 'حذف مجموعات %d' ResultUpdated: 'تحديث مجموعات %d ' @@ -304,7 +302,6 @@ ar: PERMAGAIN: 'تم خروجك من النظام بنجاح. للدخول مرة أخرى أدحل البريد الإلكتروني و الرقم السري بالأسفل' PERMALREADY: 'عذراً , لكن لا يمكنك الوصول لهذا القسم من النظام. يتوجب عليك الدخول بصلاحية أخرى' PERMDEFAULT: 'أدخل البريد الإلكتروني و الرقم السري للوصول إلى نظام إدارة المحتوى' - PLEASESAVE: 'فضلاً احفظ الصفحة: هذه الصفحة لا يمكن تحديثها لأنها لم تحفظ بعد' PreviewButton: استعراض REORGANISATIONSUCCESSFUL: 'تم إعادة تنظيم خريطة الموقع بنجاح' SAVEDUP: تم الحفظ. @@ -453,7 +450,6 @@ ar: SINGULARNAME: دور Title: عنوان PermissionRoleCode: - PLURALNAME: 'رموز دور الأذن' PermsError: 'لا يمكن تعيين كود "s%" مع سماحيات مميزة (يتطلب دخول اعن طريق المشرف)' SINGULARNAME: 'رمز دور الأذن' Permissions: diff --git a/lang/bg.yml b/lang/bg.yml index bd3bc2d0d..620c3e9fb 100644 --- a/lang/bg.yml +++ b/lang/bg.yml @@ -220,7 +220,6 @@ bg: PERMAGAIN: 'Вие излязохте от CMS. Ако искате да влезете отново, моля, въведете потребителско име и парола.' PERMALREADY: 'Съжалявам, но нямате достъп до тази част от CMS. Ако искате да влезете с друго потребителско име, моля, направете го по-долу' PERMDEFAULT: 'Въведете имейл адреса и паролата си, за да влезете в CMS.' - PLEASESAVE: 'Съхрани страницата: Тази страница не може да бъде обновена, защото още не е записана.' PreviewButton: Преглед REORGANISATIONSUCCESSFUL: 'Реорганизацията на дървото на сайта беше успешна.' SAVEDUP: Записано diff --git a/lang/bs.yml b/lang/bs.yml index c091e3bf7..0364642a0 100644 --- a/lang/bs.yml +++ b/lang/bs.yml @@ -104,7 +104,6 @@ bs: PERMAGAIN: 'Odjavljeni ste sa CMS-a. Ukoliko se želite ponovo prijaviti, unesite korisničko ime i šifru ispod.' PERMALREADY: 'Žao nam je ali ne možete pristupiti ovom dijelu CMS-a. Ako se želite prijaviti sa drugim korisnikom uradite to ispod' PERMDEFAULT: 'Unesite vašu e-mail adresu i šifru kako biste pristupili CMS-u.' - PLEASESAVE: 'Molimo snimite stranicu: Ova stranica ne može biti ažurirana ako nije prethodno snimljena.' Member: BUTTONCHANGEPASSWORD: 'Promijeni šifru' BUTTONLOGIN: 'Prijava' diff --git a/lang/ca.yml b/lang/ca.yml index ff0b6042b..a13b261cc 100644 --- a/lang/ca.yml +++ b/lang/ca.yml @@ -123,7 +123,6 @@ ca: PERMAGAIN: 'Heu estat desconnectat del SGC. Si voleu entrar de nou, introduïu un nom d''usuari i contrasenya a sota' PERMALREADY: 'Lamentant-ho molt, no podeu accedir a aquesta part del SGC. Si voleu entrar com a algú altre, feu-ho a sota' PERMDEFAULT: 'Introduïu la vostra adreça de correu electrònic i la contrasenya per a entrar al SGC.' - PLEASESAVE: 'Si us plau, deseu la pàgina: aquesta pàgina no s''ha pogut actualitzar perquè encara no s''ha desat.' LoginAttempt: Email: 'Adreça de correu' IP: 'Adreça IP' diff --git a/lang/cs.yml b/lang/cs.yml index 76eebd525..ca0f67cab 100644 --- a/lang/cs.yml +++ b/lang/cs.yml @@ -342,7 +342,7 @@ cs: Hello: Ahoj LOGOUT: 'Odhlásit se' ListboxField: - SOURCE_VALIDATION: 'Prosím vyberte hodnotu v seznamu. {value} není platná volba' + SOURCE_VALIDATION: 'Prosím vyberte hodnotu v nabídnutém seznamu. %s není platná volba' LoginAttempt: Email: 'Emailové adresy' IP: 'IP adresy' @@ -548,6 +548,8 @@ cs: Print: Tisk TableListField_PageControls_ss: OF: z + TextField: + VALIDATEMAXLENGTH: 'Hodnota pro {name} nesmí překročit {maxLength} v délce znaků' TimeField: VALIDATEFORMAT: 'Prosím zadejte platný formát času ({format})' ToggleField: diff --git a/lang/da.yml b/lang/da.yml index ea485b3e6..d30af63b6 100644 --- a/lang/da.yml +++ b/lang/da.yml @@ -20,7 +20,6 @@ da: PERMAGAIN: 'Du er blevet logget ud af CMS, hvis du vil logge ind igen, indtast brugernavn og kodeord nedenfor.' PERMALREADY: 'Beklager, men du kan ikke få adgang til denne del af CMS, hvis du vil logge ind som en anden, kan du gøre det nedenfor' PERMDEFAULT: 'Indtast din email adresse og kodeord for at få adgang til CMS systemet' - PLEASESAVE: 'Gem siden: Denne side kunne ikke blive opdateret, fordi den endnu ikke er gemt.' ModelAdmin: DELETE: Slet IMPORT: 'Importer fra CSV' diff --git a/lang/de.yml b/lang/de.yml index a9f67f7fc..3b5290850 100644 --- a/lang/de.yml +++ b/lang/de.yml @@ -100,7 +100,7 @@ de: ConfirmedPasswordField: ATLEAST: 'Passwörter müssen mindestens {min} Zeichen lang sein.' BETWEEN: 'Passwörter müssen zwischen {min} und {max} Zeichen lang sein.' - MAXIMUM: 'Passwörter dürfen maxinal {max} Zeichen lang sein.' + MAXIMUM: 'Passwörter dürfen maximal {max} Zeichen lang sein.' SHOWONCLICKTITLE: 'Passwort ändern' ContentController: NOTLOGGEDIN: 'Nicht eingeloggt' @@ -342,7 +342,7 @@ de: Hello: Hallo LOGOUT: 'Abmelden' ListboxField: - SOURCE_VALIDATION: 'Bitte wählen Sie aus der Liste. {value} ist kein gültiger Wert' + SOURCE_VALIDATION: 'Bitte wählen Sie aus der Liste. %s ist kein gültiger Wert' LoginAttempt: Email: 'E-Mail-Adresse' IP: 'IP-Adresse' @@ -548,6 +548,8 @@ de: Print: Drucken TableListField_PageControls_ss: OF: von + TextField: + VALIDATEMAXLENGTH: 'Der für {name} eingegebene Wert darf nicht mehr als {maxLength} Zeichen lang sein' TimeField: VALIDATEFORMAT: 'Bitte geben Sie die Uhrzeit im korrekten Format ein ({format})' ToggleField: diff --git a/lang/el.yml b/lang/el.yml index 763877ddd..f56036e2e 100644 --- a/lang/el.yml +++ b/lang/el.yml @@ -1,5 +1,22 @@ el: + AssetTableField: + DIM: Διαστάσεις + FILENAME: Όνομα αρχείου + FOLDER: Φάκελος + OWNER: Ιδιοκτήτης + TITLE: Τίτλος + AssetUploadField: + FILES: Αρχεία + TOTAL: Σύνολο + UPLOADOR: Ή + BBCodeParser: + IMAGE: Εικόνα + Boolean: + NOANSWER: 'Όχι' + YESANSWER: 'Ναί' CMSMain: SAVE: Αποθήκευση + CMSProfileController: + MENUTITLE: 'Το προφίλ μου' LeftAndMain: HELP: Βοήθεια diff --git a/lang/en.yml b/lang/en.yml index 829026f2d..e436c0197 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -70,10 +70,22 @@ en: ACCESSALLINTERFACES: 'Access to all CMS sections' ACCESSALLINTERFACESHELP: 'Overrules more specific access settings.' SAVE: Save + CMSMemberLoginForm: + BUTTONFORGOTPASSWORD: 'Forgot password?' + BUTTONLOGIN: 'Log back in' + BUTTONLOGOUT: 'Log out' + PASSWORDEXPIRED: '

Your password has expired. Please choose a new one.

' CMSPageHistoryController_versions_ss: PREVIEW: 'Website preview' CMSProfileController: MENUTITLE: 'My Profile' + CMSSecurity: + INVALIDUSER: '

Invalid user. Please re-authenticate here to continue.

' + LoginMessage: '

If you have any unsaved work you can return to where you left off by logging back in below.

' + SUCCESS: Success + SUCCESSCONTENT: '

Login success. If you are not automatically redirected click here

' + TimedOutTitleAnonymous: 'Your session has timed out.' + TimedOutTitleMember: 'Hey {name}!
Your session has timed out.' ChangePasswordEmail_ss: CHANGEPASSWORDTEXT1: 'You changed your password for' CHANGEPASSWORDTEXT2: 'You can now use the following credentials to log in:' @@ -85,18 +97,8 @@ en: YESANSWER: 'Yes' CheckboxFieldSetField: SOURCE_VALIDATION: 'Please select a value within the list provided. {value} is not a valid option' - CMSMemberLoginForm: - BUTTONFORGOTPASSWORD: 'Forgot password?' - BUTTONLOGIN: 'Log back in' - BUTTONLOGOUT: 'Log out' - PASSWORDEXPIRED: '

Your password has expired. Please choose a new one.

' - CMSSecurity: - INVALIDUSER: '

Invalid user. Please re-authenticate here to continue.

' - LoginMessage: '

If you have any unsaved work you can return to where you left off by logging back in below.

' - SUCCESS: Success - SUCCESSCONTENT: '

Login success. If you are not automatically redirected click here

' - TimedOutTitleAnonymous: 'Your session has timed out.' - TimedOutTitleMember: 'Hey {name}!
Your session has timed out.' + CheckboxSetField: + SOURCE_VALIDATION: 'Please select a value within the list provided. ''{value}'' is not a valid option' ConfirmedPasswordField: ATLEAST: 'Passwords must be at least {min} characters long.' BETWEEN: 'Passwords must be {min} to {max} characters long.' @@ -202,7 +204,6 @@ en: VALIDATIONSTRONGPASSWORD: 'Passwords must have at least one digit and one alphanumeric character' VALIDATOR: Validator VALIDCURRENCY: 'Please enter a valid currency' - CSRF_EXPIRED_MESSAGE: 'Your session has expired. Please re-submit the form.' FormField: Example: 'e.g. %s' NONE: none @@ -310,10 +311,10 @@ en: LINKOPENNEWWIN: 'Open link in a new window?' LINKTO: 'Link to' PAGE: Page + SUBJECT: 'Email subject' URL: URL URLNOTANOEMBEDRESOURCE: 'The URL ''{url}'' could not be turned into a media resource.' UpdateMEDIA: 'Update Media' - SUBJECT: 'Email subject' Image: PLURALNAME: Files SINGULARNAME: File @@ -327,7 +328,7 @@ en: DELETED: Deleted. DropdownBatchActionsDefault: Actions HELP: Help - PAGETYPE: 'Page type: ' + PAGETYPE: 'Page type' PERMAGAIN: 'You have been logged out of the CMS. If you would like to log in again, enter a username and password below.' PERMALREADY: 'I''m sorry, but you can''t access that part of the CMS. If you want to log in as someone else, do so below' PERMDEFAULT: 'Please choose an authentication method and enter your credentials to access the CMS.' @@ -338,7 +339,7 @@ en: ShowAsList: 'show as list' TooManyPages: 'Too many pages' ValidationError: 'Validation error' - VersionUnknown: Unknown + VersionUnknown: unknown LeftAndMain_Menu_ss: Hello: Hi LOGOUT: 'Log out' @@ -483,8 +484,8 @@ en: SINGULARNAME: Role Title: Title PermissionRoleCode: - PermsError: 'Can''t assign code "%s" with privileged permissions (requires ADMIN access)' PLURALNAME: 'Permission Role Codes' + PermsError: 'Can''t assign code "%s" with privileged permissions (requires ADMIN access)' SINGULARNAME: 'Permission Role Code' Permissions: PERMISSIONS_CATEGORY: 'Roles and access permissions' @@ -586,5 +587,3 @@ en: UPLOADSINTO: 'saves into /{path}' Versioned: has_many_Versions: Versions - CheckboxSetField: - SOURCE_VALIDATION: 'Please select a value within the list provided. ''{value}'' is not a valid option' diff --git a/lang/eo.yml b/lang/eo.yml index a63a76742..9fb2c5346 100644 --- a/lang/eo.yml +++ b/lang/eo.yml @@ -341,8 +341,6 @@ eo: LeftAndMain_Menu_ss: Hello: Saluton LOGOUT: 'Elsaluti' - ListboxField: - SOURCE_VALIDATION: 'Bonvolu elekti valoron el la listo donita. {value} ne estas valida agordo' LoginAttempt: Email: 'Retadreso' IP: 'IP-Adreso' diff --git a/lang/es.yml b/lang/es.yml index 5e7d045b0..60bad0429 100644 --- a/lang/es.yml +++ b/lang/es.yml @@ -171,7 +171,6 @@ es: TEXT2: 'enlace para restablecer contraseña' TEXT3: para Form: - CSRF_FAILED_MESSAGE: "Parece que hay un problema técnico. Por favor presionar el botón volver \n\n⇥⇥⇥⇥⇥refresca tu navegador e intenta nuevamente" FIELDISREQUIRED: 'Se requiere este campo' SubmitBtnLabel: Ir VALIDATIONCREDITNUMBER: 'Por favor, asegúrese de que ha introducido el número de tarjeta de crédito correctamente {number}' @@ -238,7 +237,6 @@ es: many_many_Members: Miembros GroupImportForm: Help1: '

Importar uno o más grupos en formato CSV (valores separados por coma). Mostrar uso avanzado

' - Help2: "
\\n

Uso avanzado

\\n
    \\n
  • Columnas permitidas: %s
  • \\n
  • Grupos existentes son relacionados por su valor Code, y actualizados con nuevos valores desde el archivo importado
  • \\n
  • Jerarquías de grupos pueden ser creadas usando una columna ParentCode.
  • \\n
  • Códigos de permiso pueden ser asignados por la columna PermissionCode. Códigos de permisos existentes no son borrados.
  • \\n
\\n
" ResultCreated: 'Creados {count} grupos' ResultDeleted: 'Se eliminaron %d grupos' ResultUpdated: 'Actualizados grupos %d' @@ -307,7 +305,6 @@ es: PERMAGAIN: 'Ha sido desconectado del CMS. Si quiere volver a entrar, introduzca su nombre de usuario y contraseña a continuación.' PERMALREADY: 'Lamentablemente no puede acceder a esta parte del CMS. Si quiere entrar como alguien distinto, hágalo a continuación' PERMDEFAULT: 'Introduzca su correo electrónico y su contraseña para acceder al CMS.' - PLEASESAVE: 'Por favor guardar la página: Esta página no puede ser actualizada porque no ha sido guardada aún.' PreviewButton: Vista previa REORGANISATIONSUCCESSFUL: 'Reorganizado el árbol del sitio con éxito.' SAVEDUP: Guardado @@ -368,7 +365,6 @@ es: db_NumVisit: 'Número de Visitas' db_Password: Contraseña db_PasswordExpiry: 'Fecha de vencimiento de la contraseña' - NoPassword: 'No hay contraseña para este usuario' MemberAuthenticator: TITLE: 'E-mail & Contraseña' MemberDatetimeOptionsetField: @@ -457,7 +453,6 @@ es: SINGULARNAME: Regla Title: Título PermissionRoleCode: - PLURALNAME: 'Códigos de las reglas de permisos' PermsError: 'No se puede asignar permisos privilegiados al código "% s" (requiere acceso de administrador)' SINGULARNAME: 'Códigos de las regla de permisos' Permissions: @@ -467,7 +462,6 @@ es: VALIDATION: 'Por favor introduzca un número de teléfono válido' Security: ALREADYLOGGEDIN: 'No tiene acceso a esta página. Si posee otra cuenta con los privilegios para acceder a esta página, puede iniciar sesión a continuación.' - LOSTPASSWORDHEADER: 'Contraseña perdida' BUTTONSEND: 'Envíenme el enlace para restaurar la contraseña' CHANGEPASSWORDBELOW: 'Puede cambiar su contraseña a continuación.' CHANGEPASSWORDHEADER: 'Modifique su contraseña' diff --git a/lang/es_AR.yml b/lang/es_AR.yml index 098e1c0b9..672d2ff4e 100644 --- a/lang/es_AR.yml +++ b/lang/es_AR.yml @@ -136,7 +136,6 @@ es_AR: PERMAGAIN: 'Haz sido desconectado del CMS. Si quieres volver a entrar, a continuación introduce tu nombre de usuario y contraseña.' PERMALREADY: 'Lamentablemente no puedes ingresar a esta parte del CMS. Si quieres entrar como alguien distinto, haz eso a continuación' PERMDEFAULT: 'Por favor elegir un método de autenticación e ingresar sus credenciales para acceder al CMS.' - PLEASESAVE: 'Por favor Guarda la Página: No se puede actualizar esta página porque aún no se ha guardado.' LoginAttempt: Email: 'Dirección Email' IP: 'Dirección IP' diff --git a/lang/es_MX.yml b/lang/es_MX.yml index ed575e0ae..58dcaa250 100644 --- a/lang/es_MX.yml +++ b/lang/es_MX.yml @@ -187,7 +187,6 @@ es_MX: PERMAGAIN: 'Usted ha sido desconectado del CMS. Si quiere volver a entrar, introduzca su nombre de usuario y contraseña.' PERMALREADY: 'Lamentablemente no puedes ingresar a esta parte del CMS. Si quieres entrar como alguien distinto, hazlo a continuación' PERMDEFAULT: 'Por favor, elija un método de autenticación e introduzca sus credenciales para acceder al CMS.' - PLEASESAVE: 'Por favor Guarda la Página: No se puede actualizar esta página porque aún no se ha guardado.' VersionUnknown: desconocido LoginAttempt: Email: 'Dirección de Correo Electrónico' diff --git a/lang/et_EE.yml b/lang/et_EE.yml index 1dff69430..c1f84104f 100644 --- a/lang/et_EE.yml +++ b/lang/et_EE.yml @@ -56,8 +56,6 @@ et_EE: ERRORNOTREC: 'See kasutajanimi / parool ei ole tunnustatud' Boolean: ANY: Kõik - NOANSWER: "Ei" - YESANSWER: "Jah" CMSLoadingScreen_ss: LOADING: Laadimine... REQUIREJS: 'Sisuhaldussüsteem nõuab, et JavaScript oleks lubatud.' @@ -280,7 +278,6 @@ et_EE: PERMAGAIN: 'Oled Sisuhaldusest välja logitud. Kui soovite uuesti sisse logida sisestage kasutajanimi ja parool.' PERMALREADY: 'Vabandust, aga sul pole lubatud sisuhaldussüsteemi selle osa juurde pääseda. Kui soovid kellegi teisena sisse logida, tee seda allpool.' PERMDEFAULT: 'Sisesta oma e-posti aadress ja parool sisuhaldussüsteemi ligipääsemiseks.' - PLEASESAVE: 'Palun Salvesta Lehekülg: Antud lehekülge ei uuendatud, kuna seda ei ole veel salvestatud.' PreviewButton: Eelvaade REORGANISATIONSUCCESSFUL: 'Saidipuu korraldati edukalt ümber.' SAVEDUP: Salvestatud. diff --git a/lang/fa_IR.yml b/lang/fa_IR.yml index a9842c599..1d2a6806f 100644 --- a/lang/fa_IR.yml +++ b/lang/fa_IR.yml @@ -99,7 +99,6 @@ fa_IR: PAGETYPE: 'نوع صفحه' PERMAGAIN: 'شما از سیستم مدیریت محتوا خارج شده اید.اگر میخواهید دوباره وارد شوید نام کاربری و رمز عبور خود را در قسمت زیر وارد کنید' PERMALREADY: 'من متاسفم، شما نمی توانید به آن قسمت از سیستم مدیریت محتوا دسترسی پیدا کنید. اگر میخواهید به عنوان شخص دیگری وارد شوید از قسمت زیر تلاش کنید' - PLEASESAVE: 'لطفاً صفحه را ذخیره کنید : این صفحه نمی تواند بروز شود چراکه هنوز ذخیره نشده است.' LoginAttempt: Email: 'آدرس های ایمیل' Member: diff --git a/lang/fi.yml b/lang/fi.yml index 6619a76a1..7b74b902e 100644 --- a/lang/fi.yml +++ b/lang/fi.yml @@ -341,8 +341,6 @@ fi: LeftAndMain_Menu_ss: Hello: Hei LOGOUT: 'Kirjaudu ulos' - ListboxField: - SOURCE_VALIDATION: 'Valitse arvo annetuista vaihtoehdoista. {value} ei kelpaa.' LoginAttempt: Email: 'Sähköpostiosoite' IP: 'IP-osoite' diff --git a/lang/fo.yml b/lang/fo.yml index c18fd85c6..bbb0a2ef2 100644 --- a/lang/fo.yml +++ b/lang/fo.yml @@ -92,7 +92,6 @@ fo: PERMAGAIN: 'Tú ert blivin útritaður av CMS skipanini. Um tú ynskir at innrita aftur, inntøppa so títt brúkaranavn og loyniorð niðanfyri:' PERMALREADY: 'Tíanverri, tú hevur ikki atgongd til handan partin av CMS skipanini. Um tú ynskir at innrita sum onkur annar, so kann tú gera tað niðanfyri.' PERMDEFAULT: 'Inntøppa tygara teldupost og loyniorð fyri at fáa atgongd til CMS skipanina.' - PLEASESAVE: 'Vinarliga goym síðuna: Hendan síðan kundi ikki blíva dagført, tí at hon er ikki goymd enn.' LoginAttempt: Email: 'Teldupostur' IP: 'IP adressa' diff --git a/lang/fr.yml b/lang/fr.yml index 41374eeb5..3b557fc06 100644 --- a/lang/fr.yml +++ b/lang/fr.yml @@ -170,7 +170,6 @@ fr: TEXT2: 'lien de réinitialisation de mot de passe' TEXT3: pour Form: - CSRF_FAILED_MESSAGE: "Il semble qu'il y ait eu un problème technique. Veuillez cliquez sur le bouton Retour, raffraîchir votre navigateur, et essayer à nouveau" FIELDISREQUIRED: '{name} requis' SubmitBtnLabel: Envoyer VALIDATIONCREDITNUMBER: 'Vérifiez que vous avez bien saisi votre numéro de carte bleue {number}.' @@ -235,7 +234,6 @@ fr: many_many_Members: Membres GroupImportForm: Help1: '

Importer un ou plusieurs groupe(s) au format CSV (comma-separated values). Montrer l''usage avancé

' - Help2: "
\n

Utilisation avancée

\n
    \n
  • Colonnes autorisées : %s
  • \n
  • Les utilisateurs existants sont retrouvés avec leur Code unique et les registres sont mis à jour avec les nouvelles valeurs du fichier importé.
  • \n
  • Des hiérarchies de groupes peuvent être créées à l’aide de la colonne ParentCode.
  • \n
  • Les autorisations sont assignées par la colonne PermissionCode. Les autorisations actuelles ne sont pas modifiées.
  • \n
\n
" ResultCreated: '{count} groupes créés' ResultDeleted: '%d groupes supprimés' ResultUpdated: '%d groupes mises à jour' @@ -304,7 +302,6 @@ fr: 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.' PERMALREADY: 'Désolé, mais vous ne pouvez pas accéder à cette partie du CMS. Si vous voulez changer d''identité, faites le ci-dessous' PERMDEFAULT: 'Saisissez votre adresse de courriel et votre mot de passe pour accéder au CMS.' - PLEASESAVE: 'Enregistrez la page s’il vous plaît : elle ne pouvait pas être mise à jour car elle n’avait pas encore été sauvegardée.' PreviewButton: Aperçu REORGANISATIONSUCCESSFUL: 'L’arbre du site a été bien réorganisé.' SAVEDUP: Enregistré. @@ -453,7 +450,6 @@ fr: SINGULARNAME: Rôle Title: Titre PermissionRoleCode: - PLURALNAME: 'Codes des autorisations liées au rôle' SINGULARNAME: 'Code de l’autorisation liée au rôle' Permissions: PERMISSIONS_CATEGORY: 'Rôles et autorisations d’accès' diff --git a/lang/gl_ES.yml b/lang/gl_ES.yml index 1ed449b9c..b61335747 100644 --- a/lang/gl_ES.yml +++ b/lang/gl_ES.yml @@ -162,7 +162,6 @@ gl_ES: PERMAGAIN: 'Non tes unha sesión válida no CMS. Se queres volver entrar, insire o nome de usuario e contrasinal a continuación.' PERMALREADY: 'Sintoo, pero non podes acceder a esta parte do CMS. Se queres iniciar sesión con outras credenciais, faino a continuación' PERMDEFAULT: 'Escolle un método de autenticación e insire as túas credenciais para acceder o CMS.' - PLEASESAVE: 'Por favor Garda Páxina: Esta páxina podería non ser actualizada porque inda non foi gardada.' VersionUnknown: descoñecido LoginAttempt: Email: 'Enderezo Correo-e' diff --git a/lang/he_IL.yml b/lang/he_IL.yml index d1a558ca1..447d9e7ab 100644 --- a/lang/he_IL.yml +++ b/lang/he_IL.yml @@ -67,7 +67,6 @@ he_IL: PERMAGAIN: 'התנתקת מהמערכת. לחיבור מחדש נא להזין שם וסיסמה' PERMALREADY: 'צר לנו, אך לא תוכל לגשת לחלק זה של מערכת ניהול התוכן. אם ברצונך להתחבר למערכת בתור משתמש אחר נא להשתמש בתיבה בעמוד זה' PERMDEFAULT: 'נא לבחור בשיטת וידוא והזן פרטיך למערכת' - PLEASESAVE: 'נא לשמור עמוד זה. העמוד לא עודכן מכיוון ולא עודכן.' Member: BUTTONCHANGEPASSWORD: 'שנה סיסמא' BUTTONLOGIN: 'התחבר' diff --git a/lang/hr.yml b/lang/hr.yml index 7756312c6..b2947247d 100644 --- a/lang/hr.yml +++ b/lang/hr.yml @@ -119,7 +119,6 @@ hr: PERMAGAIN: 'Odjavili ste se sa sustava. Želite li se ponovno prijaviti upišite korisničko ime i lozinku.' PERMALREADY: 'Nažalost, ne možete pristupiti tom dijelu sustava. Želite li se prijaviti kao netko drugi učinite to ispod' PERMDEFAULT: 'Odaberite metodu autorizacije te upišite svoje podatke za pristup sustavu.' - PLEASESAVE: 'Molim spremite stranicu: Stranica ne može biti ažurirana jer još uvijek nije spremljena.' Member: BUTTONCHANGEPASSWORD: 'Promjeni lozinku' BUTTONLOGIN: 'Prijava' diff --git a/lang/hu.yml b/lang/hu.yml index a250aa38a..d703622e0 100644 --- a/lang/hu.yml +++ b/lang/hu.yml @@ -71,7 +71,6 @@ hu: PERMAGAIN: 'Kiléptetésre kerültél a CMS-ből. Ha újra be szeretnél lépni, add meg alább a felhasználóneved és jelszavad.' PERMALREADY: 'Nincs jogosultságod a CMS ezen részének megtekintéséhez. Ha be szeretnél jelentkezni más felhasználóként, lejjebb megteheted.' PERMDEFAULT: 'A CMS- be való belépéshez, kérünk válassz egy azonosítási módot, és írd be az azonosítási infomációkat.' - PLEASESAVE: 'Kérjük, mentsd el az oldalt: az oldalt nem lehetett frissíteni, mivel még nem került elmentésre.' Member: BUTTONCHANGEPASSWORD: 'Jelszó megváltoztatása' BUTTONLOGIN: 'Bejelentkezés' diff --git a/lang/id.yml b/lang/id.yml index 4499a47f5..d05052e74 100644 --- a/lang/id.yml +++ b/lang/id.yml @@ -341,8 +341,6 @@ id: LeftAndMain_Menu_ss: Hello: Hai LOGOUT: 'Keluar' - ListboxField: - SOURCE_VALIDATION: 'Mohon pilih nilai dari daftar yang ada. ''{value}'' bukan pilihan valid' LoginAttempt: Email: 'Alamat Email' IP: 'Alamat IP' diff --git a/lang/id_ID.yml b/lang/id_ID.yml index 4a7c3aa27..0d0d8f817 100644 --- a/lang/id_ID.yml +++ b/lang/id_ID.yml @@ -341,8 +341,6 @@ id_ID: LeftAndMain_Menu_ss: Hello: Hai LOGOUT: 'Keluar' - ListboxField: - SOURCE_VALIDATION: 'Mohon pilih nilai dari daftar yang ada. ''{value}'' bukan pilihan valid' LoginAttempt: Email: 'Alamat Email' IP: 'Alamat IP' diff --git a/lang/it.yml b/lang/it.yml index 81bd05be5..18a9f6fe9 100644 --- a/lang/it.yml +++ b/lang/it.yml @@ -1,7 +1,7 @@ it: AssetAdmin: NEWFOLDER: NuovaCartella - SHOWALLOWEDEXTS: 'Mostra le estensioni permesse' + SHOWALLOWEDEXTS: 'Mostra le estensioni consentite' AssetTableField: CREATED: 'Inizialmente caricato' DIM: Dimensioni @@ -60,6 +60,8 @@ it: ERRORNOTREC: 'Nome utente / password non riconosciuti' Boolean: ANY: Qualsiasi + NOANSWER: 'No' + YESANSWER: 'Sì' CMSLoadingScreen_ss: LOADING: Caricamento in corso... REQUIREJS: 'Il CMS richiede JavaScript abilitato.' @@ -78,6 +80,23 @@ it: EMAIL: Email HELLO: Ciao PASSWORD: Password + CheckboxField: + NOANSWER: 'No' + YESANSWER: 'Sì' + CheckboxFieldSetField: + SOURCE_VALIDATION: 'Per favore selezionare un valore tra quelli forniti. {value} non è un''opzione valida' + CMSMemberLoginForm: + BUTTONFORGOTPASSWORD: 'Password dimenticata?' + BUTTONLOGIN: 'Accedi nuovamente' + BUTTONLOGOUT: 'Scollegati' + PASSWORDEXPIRED: '

La tua password è scaduta. Per favore selezionarne una nuova.

' + CMSSecurity: + INVALIDUSER: '

Utente non valido. Per favore autenticarsi di nuovo per continuare.

' + LoginMessage: '

Se hai del lavoro non salvato puo tornare a dove eri accedendo nuovamente da qui sotto.

' + SUCCESS: Successo + SUCCESSCONTENT: '

Accesso eseguito. Se non sarai ridirezionato automaticamente, cliccare qui

' + TimedOutTitleAnonymous: 'La tua sessione è scaduta.' + TimedOutTitleMember: 'Ciao {name}!
La tua sessione è scaduta.' ConfirmedPasswordField: ATLEAST: 'La password deve essere lunga almeno {min} caratteri.' BETWEEN: 'La password deve essere lunga da {min} a {max} caratteri.' @@ -92,6 +111,9 @@ it: THIRD: terzo CurrencyField: CURRENCYSYMBOL: $ + DataObject: + PLURALNAME: 'Data Object' + SINGULARNAME: 'Data Object' Date: DAY: giorno DAYS: giorni @@ -105,6 +127,7 @@ it: SEC: secondo SECS: secondi TIMEDIFFAGO: '{difference} fa' + TIMEDIFFIN: 'in {difference}' YEAR: anno YEARS: anni DateField: @@ -119,6 +142,8 @@ it: INVALID_REQUEST: 'Richiesta non valida' DropdownField: CHOOSE: (Scegli) + CHOOSESEARCH: '(Scegliere o Cercare)' + SOURCE_VALIDATION: 'Per favore selezionare un valore tra quelli forniti. {value} non è un''opzione valida' EmailField: VALIDATION: 'Inserisci un indirizzo e-mail' Enum: @@ -166,7 +191,7 @@ it: TEXT2: 'Link per l''azzeramento della password' TEXT3: per Form: - CSRF_FAILED_MESSAGE: "Sembra che ci sia stato un problema tecnico. Per favore clicca sul pulsante \"indietro\", ricarica la pagina e riprova." + CSRF_FAILED_MESSAGE: 'Sembra che ci sia stato un problema tecnico. Per favore cliccare sul pulsante "indietro", ricaricare la pagina e riprovare.' FIELDISREQUIRED: '{name} è richiesto' SubmitBtnLabel: Vai VALIDATIONCREDITNUMBER: 'Assicurati che il numero di carta di credito {number} sia inserito correttamente' @@ -176,6 +201,7 @@ it: VALIDATIONSTRONGPASSWORD: 'Le password devono avere almeno un numero e un carattere alfanumerico.' VALIDATOR: Valiidatore VALIDCURRENCY: 'Inserisci una valuta valida' + CSRF_EXPIRED_MESSAGE: 'La tua sessione è scaduta. Per favore ritrasmettere la form.' FormField: Example: 'es. %s' NONE: nessuno @@ -220,6 +246,7 @@ it: DefaultGroupTitleContentAuthors: 'Autori di contenuto' Description: Descrizione GroupReminder: 'Se scegli un gruppo genitore, questo gruppo erediterà tutti i suoi ruoli' + HierarchyPermsError: 'Non posso assegnare permessi privilegiati al gruppo genitore "%s" (richiede accesso ADMIN)' Locked: 'Bloccato?' NoRoles: 'Nessun ruolo trovato' PLURALNAME: Gruppi @@ -231,7 +258,7 @@ it: many_many_Members: Membri GroupImportForm: Help1: '

Importa gruppi in formato CSV (valori separati da virgole). Mostra utilizzo avanzato

' - Help2: "
\n

Utilizzo avanzato

\n
    \n
  • Colonne consentite: %s
  • \n
  • Gruppi esistenti sono individuati tramite il loro valore univoco Code e aggiornati con i nuovi valori dal file importato.
  • \n
  • È possibile creare gerarchie tra i gruppi usando la colonna ParentCode
  • \n
  • Codici di permessi possono essere assegnati tramite la colonna PermissionCode. Codici di permessi esistenti non verranno cancellati.
  • \n
\n
" + Help2: "
\n

Utilizzo avanzato

\n
    \n
  • Colonne consentite: %s
  • \n
  • I gruppi esistenti sono identificati dalla proprietà univoca Code e aggiornati con i nuovi valori dal file importato.
  • \n
  • Gerarchie di gruppi possono essere create usando la colonna ParentCode.
  • \n
  • I codici di permesso possono essere assegnati con la colonna ParentCode. I permessi esistenti non saranno azzerati.
  • \n
\n
" ResultCreated: 'Creati {count} gruppi' ResultDeleted: 'Eliminati %d gruppi' ResultUpdated: 'Aggiornati %d gruppi' @@ -240,6 +267,8 @@ it: HtmlEditorField: ADDURL: 'Aggiungi URL' ADJUSTDETAILSDIMENSIONS: 'Dettagli e dimensioni' + ANCHORSCANNOTACCESSPAGE: 'Non ti è consentito accedere al contenuto della pagina di destinazione.' + ANCHORSPAGENOTFOUND: 'Pagina di destinazione non trovata.' ANCHORVALUE: Ancora BUTTONADDURL: 'Aggiungi url' BUTTONINSERT: Inserisci @@ -283,6 +312,7 @@ it: URL: URL URLNOTANOEMBEDRESOURCE: 'L''URL ''{url}'' non può essere convertito in una risorsa media.' UpdateMEDIA: 'Aggiorna Media' + SUBJECT: 'Oggetto email' Image: PLURALNAME: Files SINGULARNAME: File @@ -300,7 +330,7 @@ it: PERMAGAIN: 'Sei stato disconnesso dal CMS. Se desideri autenticarti nuovamente, inserisci qui sotto nome utente e password.' PERMALREADY: 'Siamo spiacenti, ma non puoi accedere a questa sezione del CMS. Se desideri autenticarti come qualcun altro, fallo qui sotto.' PERMDEFAULT: 'Inserisci il tuo indirizzo email e password per accedere al CMS.' - PLEASESAVE: 'Per favore salva la pagina: La stessa potrebbe non venire aggiornata se non si provvede quanto prima a salvarla.' + PLEASESAVE: 'Per favore salvare la pagina: potrebbe non venire aggiornata perché non è ancora stata salvata.' PreviewButton: Anteprima REORGANISATIONSUCCESSFUL: 'Albero del sito riorganizzato con successo.' SAVEDUP: Salvato. @@ -311,6 +341,8 @@ it: LeftAndMain_Menu_ss: Hello: Ciao LOGOUT: 'Disconnetti' + ListboxField: + SOURCE_VALIDATION: 'Per favore selezionare un valore tra quelli forniti. %s non è un''opzione valida' LoginAttempt: Email: 'Indirizzo e-mail' IP: 'Indirizzo IP' @@ -335,6 +367,7 @@ it: ERRORLOCKEDOUT2: 'Il tuo account è stato temporaneamente disabilitato perchè ci sono stati troppi tentativi di accesso errati. Riprova tra {count} minuti.' ERRORNEWPASSWORD: 'Hai inserito la tua nuova password in modo differente, prova di nuovo' ERRORPASSWORDNOTMATCH: 'La tua password attuale non corrisponde, per favore prova ancora' + ERRORWRONGCRED: 'I dettagli forniti non sembrano corretti. Per favore riprovare.' FIRSTNAME: 'Nome' INTERFACELANG: 'Lingua dell''interfaccia' INVALIDNEWPASSWORD: 'Non possiamo accettare questa password: {password}' @@ -342,6 +375,7 @@ it: NEWPASSWORD: 'Nuova password' NoPassword: 'Manca la password per questo utente.' PASSWORD: Password + PASSWORDEXPIRED: 'La tua password è scaduta. Per favore selezionarne una nuova.' PLURALNAME: Utenti REMEMBERME: 'Ricordati di me la prossima volta?' SINGULARNAME: Utente @@ -448,7 +482,8 @@ it: SINGULARNAME: Ruolo Title: Titolo PermissionRoleCode: - PLURALNAME: 'Codici di Ruolo' + PermsError: 'Non posso assegnare permessi privilegiati al codice "%s" (richiede accesso ADMIN)' + PLURALNAME: 'Codici di ruolo' SINGULARNAME: 'Codice Ruolo' Permissions: PERMISSIONS_CATEGORY: 'Ruoli e permessi d''accesso' @@ -464,6 +499,7 @@ it: ERRORPASSWORDPERMISSION: 'Devi essere autenticato per poter cambiare la tua password!' LOGGEDOUT: 'Sei stato disconnesso. Se vuoi autenticarti nuovamente, inserisci qui sotto le tue credenziali.' LOGIN: 'Entra' + LOSTPASSWORDHEADER: 'Password smarrita' NOTEPAGESECURED: 'La pagina è protetta. Inserisci le credenziali qui sotto per poter andare avanti.' NOTERESETLINKINVALID: '

Il link per azzerare la password non è valido o è scaduto.

Puoi richiederne uno nuovo qui o cambiare la tua password dopo che ti sei connesso.

' NOTERESETPASSWORD: 'Inserisci il tuo indirizzo e-mail e ti verrà inviato un link per poter azzerare la tua password.' @@ -494,11 +530,14 @@ it: Auto: Auto ChangeViewMode: 'Cambia visualizzazione' Desktop: Desktop + DualWindowView: 'Finestra doppia' Edit: Modifica EditView: 'Modalità modifica' Mobile: Mobile + PreviewState: 'Stato anteprima' PreviewView: 'Modalità anteprima' Responsive: Responsivo + SplitView: 'Modalità promiscua' Tablet: Preview mode ViewDeviceWidth: 'Seleziona una larghezza di preview' Width: larghezza @@ -509,6 +548,8 @@ it: Print: Stampa TableListField_PageControls_ss: OF: di + TextField: + VALIDATEMAXLENGTH: 'Il valore di {name} non deve superare i {maxLength} caratteri di lunghezza' TimeField: VALIDATEFORMAT: 'Inserisci un formato d''ora valido ({format})' ToggleField: @@ -544,3 +585,5 @@ it: UPLOADSINTO: 'salva in /{path}' Versioned: has_many_Versions: Versioni + CheckboxSetField: + SOURCE_VALIDATION: 'Per favore selezionare un valore tra quelli forniti. ''{value}'' non è un''opzione valida' diff --git a/lang/ja.yml b/lang/ja.yml index 9b22554dc..b4f98327a 100644 --- a/lang/ja.yml +++ b/lang/ja.yml @@ -168,7 +168,6 @@ ja: TEXT2: 'パスワードリセットのリンク' TEXT3: は Form: - CSRF_FAILED_MESSAGE: "技術的な問題が生じた可能性があります。 戻るボタンをクリックしてブラウザを更新し、もう一度試してください。" FIELDISREQUIRED: '{name} が必要' SubmitBtnLabel: Go VALIDATIONCREDITNUMBER: 'クレジットカード番号 {number} が正しく入力されたかどうか確認してください' @@ -233,7 +232,6 @@ ja: many_many_Members: メンバー GroupImportForm: Help1: '

CSVフォーマット(カンマ区切り)から一つ以上のグループを取り込みます。高度な利用法について表示

' - Help2: "
\n

Advanced usage

\n
    \n
  • 許可された列 : %s
  • \n
  • 既存のグループは独自の コード  の数値で照合されて、インポートされたファイル
  • からの数値によりアップデートされます。\n
  • グループの階層は 親コード 列を使って作成することができます。
  • \n
  • 権限のコードは 権限コード 列によって割り当てることができます。 既存の権限コードはクリアされていません。
  • \n
\n
" ResultCreated: '{count} グループを作成しました' ResultDeleted: '%dグループを削除しました' ResultUpdated: '%dグループを更新しました' @@ -302,7 +300,6 @@ ja: PERMAGAIN: 'ログアウトしました。再度ログインする場合は下にユーザー名とパスワードを入力してください。' PERMALREADY: '申し訳ございません。ご指定になられたCMSの箇所にはアクセスいただけません。別ユーザーとしてログインをされたい場合は、下記より行えます。' PERMDEFAULT: '認証方法を選択し、CMSにアクセスするために利用する認証情報を入力してください。' - PLEASESAVE: '保存してください: 保存してないため更新できません。' PreviewButton: プレビュー REORGANISATIONSUCCESSFUL: 'サイトツリーの再編集に成功しました。' SAVEDUP: 保存済み @@ -451,7 +448,6 @@ ja: SINGULARNAME: 役割 Title: タイトル PermissionRoleCode: - PLURALNAME: '許可の役割のコード' SINGULARNAME: '許可の役割のコード' Permissions: PERMISSIONS_CATEGORY: '役割とアクセス権限' diff --git a/lang/lt.yml b/lang/lt.yml index e7c543d2e..22c6522e3 100644 --- a/lang/lt.yml +++ b/lang/lt.yml @@ -342,7 +342,7 @@ lt: Hello: Sveiki LOGOUT: 'Atsijungti' ListboxField: - SOURCE_VALIDATION: 'Prašome pasirinkti reikšmę iš pateikto sąrašo. ''{value}'' yra negalima reikšmė.' + SOURCE_VALIDATION: 'Prašome pasirinkti reikšmę iš pateikto sąrašo. ''%s'' yra negalima reikšmė.' LoginAttempt: Email: 'E. pašto adresas' IP: 'IP adresas' @@ -548,6 +548,8 @@ lt: Print: Spausdinti TableListField_PageControls_ss: OF: iš + TextField: + VALIDATEMAXLENGTH: '''{name}'' reikšmė negali būti ilgesnė nei {maxLength} simbolių ilgio.' TimeField: VALIDATEFORMAT: 'Prašome suvesti laiką teisingu formatu ({format})' ToggleField: diff --git a/lang/mi.yml b/lang/mi.yml index 705ed5c5d..bad7f4276 100644 --- a/lang/mi.yml +++ b/lang/mi.yml @@ -170,7 +170,6 @@ mi: TEXT2: 'hono tautuhi kupuhipa anō' TEXT3: mā Form: - CSRF_FAILED_MESSAGE: "Te āhua nei kua puta he raru hangarau. Pāwhiria te pātene hoki, ka tāmata anō i tō pūtirotiro, ka ngana anō." FIELDISREQUIRED: 'Ka hiahiatia te {name}' SubmitBtnLabel: Haere VALIDATIONCREDITNUMBER: 'Tirohia kua tika tō tāuru i te tau kāri nama {number}' @@ -235,7 +234,6 @@ mi: many_many_Members: Ngā Mema GroupImportForm: Help1: '

Kawea mai ngā kaiwhakamahi i te hōputu CSV (ngā uara ka wehea ki te piko). Whakaatu whakamahinga ara atu anō

' - Help2: "
\n

Advanced usage

\n
    \n
  • Allowed columns: %s
  • \n
  • Existing groups are matched by their unique Code value, and updated with any new values from the \n imported file
  • \n
  • Group hierarchies can be created by using a ParentCode column.
  • \n
  • Permission codes can be assigned by the PermissionCode column. Existing permission codes are not\n cleared.
  • \n
\n
" ResultCreated: 'I hangaia e {count} ngā rōpū' ResultDeleted: 'Kua mukua e %d ngā rōpū' ResultUpdated: 'Kua whakahōutia e %d ngā rōpū' @@ -304,7 +302,6 @@ mi: PERMAGAIN: 'Kua takiputaina atu koe i te CMS. Ki te pīrangi koe ki te takiuru atu anō, tāurutia tētahi ingoa kaiwhakamahi me te kupuhipa i raro.' PERMALREADY: 'Aroha mai, kāore e taea te whakauru i tērā wāhanga o te CMS. Ki te pīrangi koe ki te takiuru atu mā tētahi atu ingoa, whakamahia ki raro nei.' PERMDEFAULT: 'Whiriwhiria tētahi aratuka motuhēhēnga me te tāuru i ō taipitopito tuakiri ki te uru ki te CMS.' - PLEASESAVE: 'Tiaki Whārangi: Kāore i taea tēnei whārangi te whakahōu nā te mea kāore anō kia tiakina.' PreviewButton: Arokite REORGANISATIONSUCCESSFUL: 'Kua momoho te whakaraupapa anō i te rākau pae' SAVEDUP: Kua Tiakina @@ -453,7 +450,6 @@ mi: SINGULARNAME: Tūranga Title: Taitara PermissionRoleCode: - PLURALNAME: 'Ngā Waehere Tūnga Whakaaetanga' SINGULARNAME: 'Waehere Tūnga Whakaaetanga' Permissions: PERMISSIONS_CATEGORY: 'Ngā tūnga me ngā whakaaetanga uru' diff --git a/lang/nb.yml b/lang/nb.yml index 53ada3d26..bb1c7c384 100644 --- a/lang/nb.yml +++ b/lang/nb.yml @@ -171,7 +171,6 @@ nb: TEXT2: 'lenke for nullstilling av passord' TEXT3: for Form: - CSRF_FAILED_MESSAGE: "Det ser ut til å ha oppstått et teknisk problem. Vennligst trykk på tilbakeknappen, oppdater nettsiden og prøv på nytt." FIELDISREQUIRED: '{name} er påkrevet' SubmitBtnLabel: Utfør VALIDATIONCREDITNUMBER: 'Vennligst sjekk at du har skrevet inn {number} korrekt kortnummer' @@ -237,7 +236,6 @@ nb: many_many_Members: Medlemmer GroupImportForm: Help1: '

Importer en eller flere grupper i CSV-format (kommaseparerte verdier). Vis avanserte alternativer

' - Help2: "
\n

Avanserte alternativer

\n
    \n
  • Tillatte kolonner: %s
  • \n
  • Eksisterende grupper matches mot deres Code-verdi og oppdateres med nye verdier fra den importerte filen.
  • \n
  • Gruppehierarkier kan bli opprettet ved å benytte en ParentCode-kolonne.
  • \n
  • Tillatelseskoder kan bli angitt med PermissionCode-kolonnen. Eksisterende tillatelselskoder blir ikke fjernet.
  • \n
\n
" ResultCreated: 'Opprettet {count} grupper' ResultDeleted: 'Slettet %d grupper' ResultUpdated: 'Oppdaterte %d grupper' @@ -306,7 +304,6 @@ nb: PERMAGAIN: 'Du har blitt logget ut av publiseringssystemet. Hvis du vil logge deg på igjen, skriv inn brukernavn og passord under.' PERMALREADY: 'Beklager, men du har ikke tilgang til denne delen av publiseringssystemet. Hvis du vil logge inn som en annen bruker, gjør det nedenfor.' PERMDEFAULT: 'Vennligst velg en autentiseringsmetode og skriv inn brukernavn og passord for å få tilgang til publiseringssystemet.' - PLEASESAVE: 'Vennligst lagre siden: Denne siden kunne ikke oppdateres fordi den ikke har blitt lagret ennå.' PreviewButton: Forhåndsvisning REORGANISATIONSUCCESSFUL: 'Omorganisering av sidetreet vellykket' SAVEDUP: Lagret. @@ -455,7 +452,6 @@ nb: SINGULARNAME: Rolle Title: Tittel PermissionRoleCode: - PLURALNAME: 'Koder for tillatelser' PermsError: 'Kan ikke angi kode "%s" med administratorrettigheter (krever ADMIN-tilgang)' SINGULARNAME: 'Tillatelseskode' Permissions: diff --git a/lang/nl.yml b/lang/nl.yml index 241715533..257cc3b86 100644 --- a/lang/nl.yml +++ b/lang/nl.yml @@ -171,7 +171,6 @@ nl: TEXT2: 'wachtwoord reset link' TEXT3: voor Form: - CSRF_FAILED_MESSAGE: "Er lijkt een technisch probleem te zijn. Klik op de knop 'terug', ververs de pagina, en probeer het opnieuw." FIELDISREQUIRED: '{name} is verplicht' SubmitBtnLabel: Versturen VALIDATIONCREDITNUMBER: 'Gelieve uw credit card number {number} juist in te vullen' @@ -238,7 +237,6 @@ nl: many_many_Members: Leden GroupImportForm: Help1: '

Importeer een of meerdere groepen in CSV-formaat (comma-separated values). Toon geavanceerd gebruik

' - Help2: "
\n

Geavanceerd gebruik

\n
    \n
  • Toegestane kolommen: %s
  • \n
  • Bestaande groepen worden geïdentificeerd door middel van hun unieke Code-waarde, en aangepast met de nieuwe waarden vanuit het geïmporteerde bestand
  • \n
  • Groepshiërarchiën kunnen aangemaakt worden door een ParentCode-kolom te gebruiken
  • \n
  • Toegangscodeskunnen toegewezen worden met de PermissionCode kolom. Bestaande toegangscodes worden niet verwijderd.
  • \n
\n
" ResultCreated: '{count} groepen aangemaakt' ResultDeleted: '%d groepen verwijderd' ResultUpdated: '%d groepen aangepast' @@ -307,7 +305,6 @@ nl: PERMAGAIN: 'U bent uitgelogd uit het CMS. Als u weer wilt inloggen vul dan uw gebruikersnaam en wachtwoord hieronder in.' PERMALREADY: 'Helaas, dat deel van het CMS is niet toegankelijk voor u. Hieronder kunt u als iemand anders inloggen.' PERMDEFAULT: 'Geef uw e-mailadres en wachtwoord in om in te loggen op het CMS.' - PLEASESAVE: 'Deze pagina kon niet bijgewerkt worden, omdat deze nog niet is opgeslagen.' PreviewButton: Voorbeeld REORGANISATIONSUCCESSFUL: 'Menu-indeling is aangepast' SAVEDUP: Opgeslagen. @@ -456,7 +453,6 @@ nl: SINGULARNAME: Rol Title: Titel PermissionRoleCode: - PLURALNAME: 'Machtigingen rol codes' PermsError: 'U moet (ADMIN) rechten hebben om de code "%s" toe te kennen' SINGULARNAME: 'Machtigingen rol code' Permissions: diff --git a/lang/pl.yml b/lang/pl.yml index fce09d031..ab803fbfd 100644 --- a/lang/pl.yml +++ b/lang/pl.yml @@ -171,7 +171,6 @@ pl: TEXT2: 'link zmiany hasła' TEXT3: dla Form: - CSRF_FAILED_MESSAGE: "Wygląda na to, że wystąpił błąd techniczny. Kliknij przycisk Wstecz, odśwież przeglądarkę i spróbuj ponownie." FIELDISREQUIRED: '{name} jest wymagane' SubmitBtnLabel: Przejdź VALIDATIONCREDITNUMBER: 'Proszę upewnij się, że wprowadzony numer karty kredytowej {number} jest prawidłowy' @@ -237,7 +236,6 @@ pl: many_many_Members: Użytkownicy GroupImportForm: Help1: '

Zaimportuj użytkowników w formacie CSV (tekst rozdzielany przecinkami). Zaawansowane

' - Help2: "
\n⇥

Użycie zaawansowane

\n⇥
    \n⇥
  • Rozpoznawane pola: %s
  • \n⇥
  • Istniejące grupy zostaną uaktualnione nowymi wartościami z importowanego pliku. Dopasowanie nastąpi poprzez porównanie z unikalną wartością w polu Code.
  • \n⇥
  • Grupy hierarchiczne mogą zostać utworzone przy pomocy pola ParentCode.
  • \n⇥
  • Kody zezwoleń mogą zostać dodane przy użyciu pola PermissionCode. Istniejące zezwolenia nie zostaną usunięte.
  • \n⇥
\n
" ResultCreated: 'Stworzono grup: {count}' ResultDeleted: 'Usunięto grup: %d' ResultUpdated: 'Zaktualizowano grup: %d' @@ -306,7 +304,6 @@ pl: PERMAGAIN: 'Zostałeś wylogowany z CMSa. Jeśli chcesz zalogować się ponownie, wpisz login i hasło poniżej.' PERMALREADY: 'Niestety nie masz dostępu do tej części CMS. Jeśli chcesz zalogować się jako ktoś inny, zrób to poniżej' PERMDEFAULT: 'Proszę wybrać metodę identyfikacji i wpisać swoje dane, aby uruchomić CMSa.' - PLEASESAVE: 'Proszę zapisać stronę. Ta strona nie mogła zostać uaktualniona, ponieważ nie została jeszcze zapisana.' PreviewButton: Podgląd REORGANISATIONSUCCESSFUL: 'Pomyślnie zreorganizowano drzewo serwisu.' SAVEDUP: Zapisano. @@ -455,7 +452,6 @@ pl: SINGULARNAME: Rola Title: Tytuł PermissionRoleCode: - PLURALNAME: 'Kod roli uprawnień' PermsError: 'Nie można przyporządkować uprzywilejowanego uprawnienia "%s" (wymagane uprawnienie ADMIN)' SINGULARNAME: 'Kod roli uprawnienia' Permissions: diff --git a/lang/pt.yml b/lang/pt.yml index 248406ad7..428cab5ad 100644 --- a/lang/pt.yml +++ b/lang/pt.yml @@ -146,7 +146,6 @@ pt: HELP: Ajuda PAGETYPE: 'Tipo de página: ' PERMAGAIN: 'Saiu do CMS. Se se deseja autenticar novamente insira as suas credenciais abaixo.' - PLEASESAVE: 'Por favor salve a página: Esta página não pode ser atulizada porque ainda não foi salva.' LoginAttempt: Email: 'Endereço de Email' IP: 'Endereço IP' diff --git a/lang/pt_BR.yml b/lang/pt_BR.yml index 01eeb1274..3f46cc4ae 100644 --- a/lang/pt_BR.yml +++ b/lang/pt_BR.yml @@ -123,7 +123,6 @@ pt_BR: PERMAGAIN: 'Você foi desconectado do CMS. Se você quiser entrar novamente, digite um nome de usuário e senha abaixo.' PERMALREADY: 'Sinto muito, mas você não pode acessar essa parte do CMS. Se você quiser entrar como outra pessoa, faça-o abaixo.' PERMDEFAULT: 'Por favor, entre com seu e-mail e senha para entrar no sistema.' - PLEASESAVE: 'Por favor salve a página: Esta página não pode ser atulizada porque ainda não foi salva.' LoginAttempt: Email: 'Endereço de E-mail' IP: 'Endereço IP' diff --git a/lang/ru.yml b/lang/ru.yml index 476f21082..954a0d468 100644 --- a/lang/ru.yml +++ b/lang/ru.yml @@ -171,7 +171,6 @@ ru: TEXT2: 'ссылка переустановки пароля' TEXT3: для Form: - CSRF_FAILED_MESSAGE: "Произошла техническая ошибка. Нажмите кнопку \"Назад\", обновите страницу в браузере и повторите попытку." FIELDISREQUIRED: 'Поле {$name} является обязательным' SubmitBtnLabel: Выбрать VALIDATIONCREDITNUMBER: 'Пожалуйста, убедитесь, что номер кредитной карты {number} задан правильно' @@ -237,7 +236,6 @@ ru: many_many_Members: Члены группы GroupImportForm: Help1: '

Импорт одной или нескольких групп в формате CSV (comma-separated values). Подробные сведения

' - Help2: "
\n

Расширенное использование

\n
    \n
  • Разрешенные столбцы: %s
  • \n
  • Существующие группы сверяются с уникальным значением Code и новые значения из \nимпортированного файла вносятся в записи
  • \n
  • Иерархические структуры групп создаются с помощью столбца ParentCode.
  • \n
  • Назначение кодов прав доступа производится с помощью столбца PermissionCode. Существующие коды прав доступа \nне сбрасываются.
  • \n
\n
" ResultCreated: 'Создано {count} групп' ResultDeleted: 'Удалено %d групп' ResultUpdated: 'Обновлено %d групп' @@ -306,7 +304,6 @@ ru: PERMAGAIN: 'Вы вышли из Системы Управления Сайтом. Если Вы хотите войти снова, введите внизу имя пользователя и пароль.' PERMALREADY: 'Извините, у вас нет доступа к этому разделу Системы Управления. Если Вы хотите войти под другой учетной записью, сделайте это ниже' PERMDEFAULT: 'Введите ваши адрес электр. почты и пароль для доступа к системе.' - PLEASESAVE: 'Пожалуйста, сохраните страницу: ее нельзя обновить, т.к. она еще не была сохранена.' PreviewButton: Просмотр REORGANISATIONSUCCESSFUL: 'Древесная структура сайта успешно реорганизована.' SAVEDUP: Сохранено. @@ -455,7 +452,6 @@ ru: SINGULARNAME: Роль Title: Название PermissionRoleCode: - PLURALNAME: 'Коды ролей доступа' SINGULARNAME: 'Код роли доступа' Permissions: PERMISSIONS_CATEGORY: 'Роли и права доступа' diff --git a/lang/si.yml b/lang/si.yml index 89652f2c3..92559be01 100644 --- a/lang/si.yml +++ b/lang/si.yml @@ -82,7 +82,6 @@ si: PERMAGAIN: 'ඹබ CMS ඵකෙන් ඉවත් වී ඇත. නැවත ඇතුල් වීමට නම හා මුරපදය යොදන්න' PERMALREADY: 'සමාවන්න ඔබට මෙම කොටස පරිශීලනය කල නොහැක. පහතින් වෙනත් නමකින් ඇතුල් වන්න' PERMDEFAULT: 'හදුනාගැනීමේ ක්රමයක් තෝරා ඹබගේ දත්ත ඇතුල් කරන්න' - PLEASESAVE: 'පිටුව සේව් කරන්න, නැතිනම් මෙම පිටුව යාවත්කාලීන කල නොහැක' Member: BUTTONCHANGEPASSWORD: 'මුර පදය අලුත් කරන්න' BUTTONLOGIN: 'ඇතුල්වන්න' diff --git a/lang/sk.yml b/lang/sk.yml index 419e3a5aa..c4658a2cb 100644 --- a/lang/sk.yml +++ b/lang/sk.yml @@ -342,7 +342,7 @@ sk: Hello: Ahoj LOGOUT: 'Odhlásiť sa' ListboxField: - SOURCE_VALIDATION: 'Prosím vyberte hodnotu v zozname. {value} nie je platná voľba.' + SOURCE_VALIDATION: 'Prosím vyberte hodnotu v zozname. %s nie je platná voľba' LoginAttempt: Email: 'Emailová adresa' IP: 'IP adreasa' @@ -548,6 +548,8 @@ sk: Print: Tlačiť TableListField_PageControls_ss: OF: z + TextField: + VALIDATEMAXLENGTH: 'Hodnota pre {name} nesmie prekročiť {maxLength} v dĺžke znakov' TimeField: VALIDATEFORMAT: 'Prosím zadajte platný formát času ({format})' ToggleField: diff --git a/lang/sl.yml b/lang/sl.yml index e3f77b5a1..3cfd53d98 100644 --- a/lang/sl.yml +++ b/lang/sl.yml @@ -166,7 +166,6 @@ sl: TEXT2: 'povezava za ponastavitev gesla' TEXT3: za Form: - CSRF_FAILED_MESSAGE: "Verjetno je prišlo do tehničnih napak. Kliknite \"the back button\", osvežite brskalnik in poskusite ponovno." FIELDISREQUIRED: '{name} je potrebno' SubmitBtnLabel: Naprej VALIDATIONCREDITNUMBER: 'Prosim, preverite, da ste vnesli številko kreditne kartice {number} pravilno.' @@ -291,7 +290,6 @@ sl: PERMAGAIN: 'Odjavili ste se iz CMS-vmesnika. Če se želite ponovno prijaviti, vpišite uporabniško ime in geslo.' PERMALREADY: 'Do tega dela CMS-vmesnika nimate dostopa. Če se želite vpisati z drugim uporabniškim imenom, lahko to storite spodaj' PERMDEFAULT: 'Izberite način avtentikacije in vpišite svoje podatke za dostop do CMS-vmesnika.' - PLEASESAVE: 'Shranite stran: te strani ne morete posodobiti, ker še ni bila shranjena.' PreviewButton: Predogled REORGANISATIONSUCCESSFUL: 'Struktura spletnega mesta je bila uspešno spremenjena.' SAVEDUP: Shranjeno. diff --git a/lang/sr.yml b/lang/sr.yml index 15c974275..d17f3f7f1 100644 --- a/lang/sr.yml +++ b/lang/sr.yml @@ -171,7 +171,6 @@ sr: TEXT2: 'линк за ресетовање лозинке' TEXT3: за Form: - CSRF_FAILED_MESSAGE: "Изгелда да постоји технички проблем. Кликните на дугме за повратак, освежите страницу и покушајте поново." FIELDISREQUIRED: '{name} је обавезно' SubmitBtnLabel: Иди VALIDATIONCREDITNUMBER: 'Уверите се да сте исправно унели {number} број кредитне картице' @@ -237,7 +236,6 @@ sr: many_many_Members: Чланови GroupImportForm: Help1: '

Увези једну или више група у CSV формату (зарезима раздвојене вредности). Прикажи напредно коришћење

' - Help2: "
\n

Напредно коришћење

\n
    \n
  • Дозвољене колоне: %s
  • \n
  • Постојеће групе се препознају по њиховом јединственом коду и ажурирају новим вредностима из увезене датотеке
  • \n
  • Хијерархије група могу се креирати коришћењем колоне РодитељскиКод.
  • \n
  • Кодови дозвола могу бити додељени помоћу колоне КодДозволе. Постојећи кодови дозволе се не бришу.
  • \n
\n
" ResultCreated: 'Креирано {count} група' ResultDeleted: 'Избрисао %d група' ResultUpdated: 'Ажурирано %d група' @@ -306,7 +304,6 @@ sr: PERMAGAIN: 'Одјављени сте са CMS-а. Уколико желите да се поново пријавите, унесите корисничко име и лозинку.' PERMALREADY: 'Не можете да приступите овом делу CMS-а. Ако желите да се пријавите као неко други, урадите то испод' PERMDEFAULT: 'Изаберите методу аутентификације и унесите податке за приступ CMS-у.' - PLEASESAVE: 'Сачувајте страну: ова страна не може да буде ажурирана јер још увек није сачувана.' PreviewButton: Претходни преглед REORGANISATIONSUCCESSFUL: 'Стабло сајта је успешно реорганизовано.' SAVEDUP: Сачувано. @@ -455,7 +452,6 @@ sr: SINGULARNAME: Улога Title: Наслов PermissionRoleCode: - PLURALNAME: 'Кодови улога за дозволе' PermsError: 'Није могуће доделити кôд "%s" са привилегованим дозволама (захтева Администраторски приступ)' SINGULARNAME: 'Кôд улоге за дозволе' Permissions: diff --git a/lang/sr_RS.yml b/lang/sr_RS.yml index c074ee868..67c64c5b5 100644 --- a/lang/sr_RS.yml +++ b/lang/sr_RS.yml @@ -171,7 +171,6 @@ sr_RS: TEXT2: 'линк за ресетовање лозинке' TEXT3: за Form: - CSRF_FAILED_MESSAGE: "Изгелда да постоји технички проблем. Кликните на дугме за повратак, освежите страницу и покушајте поново." FIELDISREQUIRED: '{name} је обавезно' SubmitBtnLabel: Иди VALIDATIONCREDITNUMBER: 'Уверите се да сте исправно унели {number} број кредитне картице' @@ -237,7 +236,6 @@ sr_RS: many_many_Members: Чланови GroupImportForm: Help1: '

Увези једну или више група у CSV формату (зарезима раздвојене вредности). Прикажи напредно коришћење

' - Help2: "
\n

Напредно коришћење

\n
    \n
  • Дозвољене колоне: %s
  • \n
  • Постојеће групе се препознају по њиховом јединственом коду и ажурирају новим вредностима из увезене датотеке
  • \n
  • Хијерархије група могу се креирати коришћењем колоне РодитељскиКод.
  • \n
  • Кодови дозвола могу бити додељени помоћу колоне КодДозволе. Постојећи кодови дозволе се не бришу.
  • \n
\n
" ResultCreated: 'Креирано {count} група' ResultDeleted: 'Избрисао %d група' ResultUpdated: 'Ажурирано %d група' @@ -306,7 +304,6 @@ sr_RS: PERMAGAIN: 'Одјављени сте са CMS-а. Уколико желите да се поново пријавите, унесите корисничко име и лозинку.' PERMALREADY: 'Не можете да приступите овом делу CMS-а. Ако желите да се пријавите као неко други, урадите то испод' PERMDEFAULT: 'Изаберите методу аутентификације и унесите податке за приступ CMS-у.' - PLEASESAVE: 'Сачувајте страну: ова страна не може да буде ажурирана јер још увек није сачувана.' PreviewButton: Претходни преглед REORGANISATIONSUCCESSFUL: 'Стабло сајта је успешно реорганизовано.' SAVEDUP: Сачувано. @@ -455,7 +452,6 @@ sr_RS: SINGULARNAME: Улога Title: Наслов PermissionRoleCode: - PLURALNAME: 'Кодови улога за дозволе' PermsError: 'Није могуће доделити кôд "%s" са привилегованим дозволама (захтева Администраторски приступ)' SINGULARNAME: 'Кôд улоге за дозволе' Permissions: diff --git a/lang/sv.yml b/lang/sv.yml index 35c98db5e..37c765220 100644 --- a/lang/sv.yml +++ b/lang/sv.yml @@ -339,8 +339,6 @@ sv: LeftAndMain_Menu_ss: Hello: Hej LOGOUT: 'Logga ut' - ListboxField: - SOURCE_VALIDATION: 'Vänligen välj att värde i listan. {value} är inget giltigt val' LoginAttempt: Email: 'E-postadress' IP: 'IP-adress' diff --git a/lang/th.yml b/lang/th.yml index 5c873f81b..38b5322b5 100644 --- a/lang/th.yml +++ b/lang/th.yml @@ -209,7 +209,6 @@ th: PERMAGAIN: 'คุณได้ออกจากระบบของ CMS แล้ว หากคุณต้องการเข้าสู่ระบบอีกครั้ง กรุณากรอกชื่อผู้ใช้งานและรหัสผ่านของคุณด้านล่าง' PERMALREADY: 'ขออภัย, คุณไม่สามารถเข้าใช้งานในส่วนนี้ของ CMS ได้ หากคุณต้องการเข้าสู่ระบบในชื่ออื่นได้จากด้านล่าง' PERMDEFAULT: 'กรุณาเลือกวิธีการยืนยันตัวบุคคลและกรอกข้อมูลประจำตัวเพื่อเข้าใช้งาน CMS' - PLEASESAVE: 'กรุณาบันทึกหน้าเว็บ หน้าเว็บนี้ยังไม่สามรถอัพเดทข้อมูลได้ เนื่องจากยังไม่ได้ถูกบันทึกข้อมูล' LeftAndMain_Menu_ss: Hello: สวัสดีค่ะ LOGOUT: 'ออกจากระบบ' diff --git a/lang/tr.yml b/lang/tr.yml index 9bc334766..8d6f19f8e 100644 --- a/lang/tr.yml +++ b/lang/tr.yml @@ -137,7 +137,6 @@ tr: PERMAGAIN: 'İYS yönetiminden çıkış yaptınız. Eğer tekrar giriş yapmak isterseniz, aşağıya kullanıcı adı ve şifrenizi giriniz.' PERMALREADY: 'Üzgünüm ama İYS''nin bu bölümüne erişim hakkınız yok. Başka bir kullanıcı olarak giriş yapmak istiyorsanız aşağıdan bunu yapabilirsiniz' PERMDEFAULT: 'İYS erişimi için eposta adresinizi ve parolanızı giriniz.e kolaylık sağlama' - PLEASESAVE: 'Lütfen Sayfayı Kaydedin: Bu sayfa henüz kaydedilmediği için güncellenemedi.' PreviewButton: Önizleme SAVEDUP: Kaydedildi. LoginAttempt: diff --git a/lang/uk.yml b/lang/uk.yml index 8c8acea57..cf86cf1e1 100644 --- a/lang/uk.yml +++ b/lang/uk.yml @@ -142,7 +142,6 @@ uk: PERMAGAIN: 'Ви вийшли з системи. Якщо Ви хочете повторно ідентифікуватися, введіть дані нижче.' PERMALREADY: 'Вибачте, та Ви не маєте доступу до цієї чатини системи. Якщо Ви хочете ідентифікуватися як хтось інший, зробіть це нижче ' PERMDEFAULT: 'Будь ласка, оберіть метод ідентифікації та введіть дані доступу до системи.' - PLEASESAVE: 'Будь ласка, збережіть сторінку: Ця сторінка не може бути оновлена, бо вона ще не була збережена.' LeftAndMain_Menu_ss: Hello: Привіт LOGOUT: 'Вилогуватися' diff --git a/lang/zh.yml b/lang/zh.yml index 5df2d580d..6b783998f 100644 --- a/lang/zh.yml +++ b/lang/zh.yml @@ -171,7 +171,6 @@ zh: TEXT2: '密码重设链接' TEXT3: 为 Form: - CSRF_FAILED_MESSAGE: "似乎出现了技术问题。请点击返回按钮,刷新您的浏览器,然后再试一次。" FIELDISREQUIRED: '{name} 为必填' SubmitBtnLabel: 前往 VALIDATIONCREDITNUMBER: '请确保您输入了正确的 {number} 信用卡号码' @@ -237,7 +236,6 @@ zh: many_many_Members: 成员 GroupImportForm: Help1: '

CSV格式(逗号分隔值)导入一个或多个小组。显示高级用法

' - Help2: "
\n

高级用法

\n
    \n
  • 允许的列:%s
  • \n
  • 现存的小组根据其独特的代码值来匹配,并根据导入文件中的任何新值来更新
  • \n
  • 小组的层次结构可以通过使用父代码列来创建。
  • \n
  • 权限代码可由权限代码列来分配。现存的权限代码并不会被清除。
  • \n
\n
" ResultCreated: '创建 {count} 个小组' ResultDeleted: '已删除 %d 小组' ResultUpdated: '已更新 %d 小组' @@ -306,7 +304,6 @@ zh: PERMAGAIN: '您已经退出 CMS。如果您想再次登录,请在下面输入用户名和密码。' PERMALREADY: '抱歉,您不能访问 CMS 的这一部分。如果您想以不同的身份登录,请在下面进行操作' PERMDEFAULT: '请选择一种认证方法并输入您的凭据以访问 CMS。' - PLEASESAVE: '请保存页面:不能更新该页面因为它还没有被保存。' PreviewButton: 预览 REORGANISATIONSUCCESSFUL: '重新组织网站地图已成功' SAVEDUP: 已保存。 @@ -455,7 +452,6 @@ zh: SINGULARNAME: 角色 Title: 标题 PermissionRoleCode: - PLURALNAME: '权限角色代码' PermsError: '无法为代码 "%s"分配特权权限(要求具备 ADMIN 访问)' SINGULARNAME: '权限角色代码' Permissions: diff --git a/lang/zh_CN.yml b/lang/zh_CN.yml index 95a94aaf7..eed70ea26 100644 --- a/lang/zh_CN.yml +++ b/lang/zh_CN.yml @@ -73,7 +73,6 @@ zh_CN: PERMAGAIN: '您于CMS的登录已被注销,请在下面输入用户名和密码重新登录。' PERMALREADY: '对不起,您无权登录CMS的这一部分。如果您要用另外的帐号,请在下面登录。' PERMDEFAULT: '请先选择一种验证方法并输入您的权限信息,以登录CMS。' - PLEASESAVE: '请先保存:因为该网页还未保存,所以该页无法更新。' Member: BUTTONCHANGEPASSWORD: '更改密码' BUTTONLOGIN: '登录' diff --git a/lang/zh_TW.yml b/lang/zh_TW.yml index 95b59e25d..2225446a9 100644 --- a/lang/zh_TW.yml +++ b/lang/zh_TW.yml @@ -59,7 +59,6 @@ zh_TW: PERMAGAIN: '您已被登出,請在下面重新登入。' PERMALREADY: '抱歉,您沒有權力使用這個部分。您可以用別的帳號登入。' PERMDEFAULT: '請選擇一個認證方法並登入。' - PLEASESAVE: '請儲存:這個網頁沒有被更新因為尚未被儲存。' Member: BUTTONCHANGEPASSWORD: '更改密碼' BUTTONLOGIN: '登入' From 9ad64716ccf12dc6fc9fb70f60889d3a57f00045 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 4 Aug 2015 15:55:07 +1000 Subject: [PATCH 14/23] Issue #4424 Model Admin : 'Show Specification for' toggle link breaks if Title contains spaces #4424 --- admin/code/ModelAdmin.php | 1 + 1 file changed, 1 insertion(+) diff --git a/admin/code/ModelAdmin.php b/admin/code/ModelAdmin.php index dd78c1dd7..dd96e2c8d 100644 --- a/admin/code/ModelAdmin.php +++ b/admin/code/ModelAdmin.php @@ -366,6 +366,7 @@ abstract class ModelAdmin extends LeftAndMain { $specRelations->push(new ArrayData(array('Name' => $name, 'Description' => $desc))); } $specHTML = $this->customise(array( + 'attrModelName' => str_replace(' ', '',$modelName), 'ModelName' => Convert::raw2att($modelName), 'Fields' => $specFields, 'Relations' => $specRelations, From 1438a53900c5206ac8b54988a1c7c97a69dd4b19 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 4 Aug 2015 15:57:38 +1000 Subject: [PATCH 15/23] Issue #4424 Model Admin : 'Show Specification for' toggle link breaks if Title contains spaces #4424 --- admin/templates/Includes/ModelAdmin_ImportSpec.ss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/admin/templates/Includes/ModelAdmin_ImportSpec.ss b/admin/templates/Includes/ModelAdmin_ImportSpec.ss index 7afe2d2ed..08844c2bc 100644 --- a/admin/templates/Includes/ModelAdmin_ImportSpec.ss +++ b/admin/templates/Includes/ModelAdmin_ImportSpec.ss @@ -1,6 +1,6 @@ -
- <% sprintf(_t('ModelAdmin_ImportSpec_ss.IMPORTSPECLINK', 'Show Specification for %s'),$ModelName) %> -
+
+ <% sprintf(_t('ModelAdmin_ImportSpec_ss.IMPORTSPECLINK', 'Show Specification for %s'),$ModelName) %> +

<% sprintf(_t('ModelAdmin_ImportSpec_ss.IMPORTSPECTITLE', 'Specification for %s'),$ModelName) %>

<% _t('ModelAdmin_ImportSpec_ss.IMPORTSPECFIELDS', 'Database columns') %>
<% loop $Fields %> From 009458e34258dba0e214f93b88ccb111f729d23d Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Tue, 4 Aug 2015 12:23:22 +0100 Subject: [PATCH 16/23] Fixing rubbish login message when trying to access the CMS --- admin/code/LeftAndMain.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/admin/code/LeftAndMain.php b/admin/code/LeftAndMain.php index 3f3031cc5..226fa5853 100644 --- a/admin/code/LeftAndMain.php +++ b/admin/code/LeftAndMain.php @@ -247,14 +247,20 @@ class LeftAndMain extends Controller implements PermissionProvider { // if no alternate menu items have matched, return a permission error $messageSet = array( - 'default' => _t('LeftAndMain.PERMDEFAULT', - "Please choose an authentication method and enter your credentials to access the CMS."), - 'alreadyLoggedIn' => _t('LeftAndMain.PERMALREADY', + 'default' => _t( + 'LeftAndMain.PERMDEFAULT', + "You must be logged in to access the administration area; please enter your credentials below." + ), + 'alreadyLoggedIn' => _t( + 'LeftAndMain.PERMALREADY', "I'm sorry, but you can't access that part of the CMS. If you want to log in as someone else, do" - . " so below"), - 'logInAgain' => _t('LeftAndMain.PERMAGAIN', + . " so below." + ), + 'logInAgain' => _t( + 'LeftAndMain.PERMAGAIN', "You have been logged out of the CMS. If you would like to log in again, enter a username and" - . " password below."), + . " password below." + ), ); return Security::permissionFailure($this, $messageSet); From 687de33d0d122c7cefef210bbd8fd7ccbd4c65d9 Mon Sep 17 00:00:00 2001 From: Loz Calver Date: Tue, 4 Aug 2015 14:05:15 +0100 Subject: [PATCH 17/23] Ensure ClassInfo is backwards compatible with non-existant classes --- core/ClassInfo.php | 7 +++++++ tests/core/ClassInfoTest.php | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/core/ClassInfo.php b/core/ClassInfo.php index 71681f362..ac04c2508 100644 --- a/core/ClassInfo.php +++ b/core/ClassInfo.php @@ -159,6 +159,13 @@ class ClassInfo { public static function class_name($nameOrObject) { if (is_object($nameOrObject)) { return get_class($nameOrObject); + } elseif (!self::exists($nameOrObject)) { + Deprecation::notice( + '4.0', + "ClassInfo::class_name() passed a class that doesn't exist. Support for this will be removed in 4.0", + Deprecation::SCOPE_GLOBAL + ); + return $nameOrObject; } $reflection = new ReflectionClass($nameOrObject); return $reflection->getName(); diff --git a/tests/core/ClassInfoTest.php b/tests/core/ClassInfoTest.php index cc6952b7d..84c2e59f2 100644 --- a/tests/core/ClassInfoTest.php +++ b/tests/core/ClassInfoTest.php @@ -42,6 +42,15 @@ class ClassInfoTest extends SapphireTest { ); } + public function testClassName() { + $this->assertEquals('ClassInfoTest', ClassInfo::class_name($this)); + $this->assertEquals('ClassInfoTest', ClassInfo::class_name('ClassInfoTest')); + $this->assertEquals('ClassInfoTest', ClassInfo::class_name('CLaSsInfOTEsT')); + + // This is for backwards compatiblity and will be removed in 4.0 + $this->assertEquals('IAmAClassThatDoesNotExist', ClassInfo::class_name('IAmAClassThatDoesNotExist')); + } + public function testClassesForFolder() { //$baseFolder = Director::baseFolder() . '/' . FRAMEWORK_DIR . '/tests/_ClassInfoTest'; //$manifestInfo = ManifestBuilder::get_manifest_info($baseFolder); From 30bdcc5dc3d987c87e9a4828bc1f218864a584f3 Mon Sep 17 00:00:00 2001 From: Abagail Yost Date: Wed, 5 Aug 2015 15:28:38 +1000 Subject: [PATCH 18/23] Explicitly don't support PHP7 --- .travis.yml | 3 --- composer.json | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index c0f46cd4a..0feb4ce58 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,7 +25,6 @@ env: matrix: allow_failures: - php: hhvm - - php: 7.0 - php: nightly include: @@ -37,8 +36,6 @@ matrix: env: DB=MYSQL BEHAT_TEST=1 - php: 5.3 env: DB=MYSQL - - php: 7.0 - env: DB=MYSQL - php: nightly env: DB=MYSQL - php: hhvm diff --git a/composer.json b/composer.json index 65ee367fc..3f7541eb7 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=5.3.2", + "php": ">=5.3.2,<7", "composer/installers": "*" }, "require-dev": { From 44680d175c07f6c705d27307ffc05b5ce9f6af7a Mon Sep 17 00:00:00 2001 From: David Alexander Date: Wed, 5 Aug 2015 21:34:35 +1200 Subject: [PATCH 19/23] Spelling --- docs/en/02_Developer_Guides/01_Templates/07_Caching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/02_Developer_Guides/01_Templates/07_Caching.md b/docs/en/02_Developer_Guides/01_Templates/07_Caching.md index e0d46ed81..c0d2c51af 100644 --- a/docs/en/02_Developer_Guides/01_Templates/07_Caching.md +++ b/docs/en/02_Developer_Guides/01_Templates/07_Caching.md @@ -1,5 +1,5 @@ title: Caching -summary: Reduce rending time with cached templates and understand the limitations of the ViewableData object caching. +summary: Reduce rendering time with cached templates and understand the limitations of the ViewableData object caching. # Caching From 18e163d985dc00ace381c26e812f5c8a0525e286 Mon Sep 17 00:00:00 2001 From: JorisDebonnet Date: Tue, 28 Jul 2015 03:54:49 +0200 Subject: [PATCH 20/23] Url-safe alternative for base64_encode in resampled Image filenames --- core/Convert.php | 33 +++++++++++++-- model/Image.php | 12 +++--- tests/core/ConvertTest.php | 65 +++++++++++++++++++++++++++++ tests/forms/HtmlEditorFieldTest.php | 2 +- tests/model/ImageTest.php | 8 ++-- 5 files changed, 106 insertions(+), 14 deletions(-) diff --git a/core/Convert.php b/core/Convert.php index 73235e79e..b230abc31 100644 --- a/core/Convert.php +++ b/core/Convert.php @@ -290,8 +290,8 @@ class Convert { /** * Create a link if the string is a valid URL * - * @param string The string to linkify - * @return A link to the URL if string is a URL + * @param string $string The string to linkify + * @return string A link to the URL if string is a URL */ public static function linkIfMatch($string) { if( preg_match( '/^[a-z+]+\:\/\/[a-zA-Z0-9$-_.+?&=!*\'()%]+$/', $string ) ) @@ -305,7 +305,9 @@ class Convert { * * @param string $data Input data * @param bool $preserveLinks - * @param int $wordwrap + * @param int $wordWrap + * @param array $config + * @return string */ public static function html2raw($data, $preserveLinks = false, $wordWrap = 0, $config = null) { $defaultConfig = array( @@ -414,8 +416,33 @@ class Convert { * sequences including \r, \r\n, \n, or unicode newline characters * @param string $nl The newline sequence to normalise to. Defaults to that * specified by the current OS + * @return string */ public static function nl2os($data, $nl = PHP_EOL) { return preg_replace('~\R~u', $nl, $data); } + + /** + * Encode a value into a string that can be used as part of a filename. + * All string data must be UTF-8 encoded. + * + * @param mixed $val Value to be encoded + * @return string + */ + public static function base64url_encode($val) { + return rtrim(strtr(base64_encode(json_encode($val)), '+/', '~_'), '='); + } + + /** + * Decode a value that was encoded with Convert::base64url_encode. + * + * @param string $val Value to be decoded + * @return mixed Original value + */ + public static function base64url_decode($val) { + return json_decode( + base64_decode(str_pad(strtr($val, '~_', '+/'), strlen($val) % 4, '=', STR_PAD_RIGHT)), + true + ); + } } diff --git a/model/Image.php b/model/Image.php index 72e7d9a9c..e17a79556 100644 --- a/model/Image.php +++ b/model/Image.php @@ -701,7 +701,7 @@ class Image extends File implements Flushable { } /** - * Return the filename for the cached image, given it's format name and arguments. + * Return the filename for the cached image, given its format name and arguments. * @param string $format The format name. * @return string * @throws InvalidArgumentException @@ -711,7 +711,7 @@ class Image extends File implements Flushable { array_shift($args); $folder = $this->ParentID ? $this->Parent()->Filename : ASSETS_DIR . "/"; - $format = $format . base64_encode(json_encode($args, JSON_NUMERIC_CHECK)); + $format = $format . Convert::base64url_encode($args); $filename = $format . "-" . $this->Name; $patterns = $this->getFilenamePatterns($this->Name); if (!preg_match($patterns['FullPattern'], $filename)) { @@ -836,11 +836,11 @@ class Image extends File implements Flushable { } // All generate functions may appear any number of times in the image cache name. $generateFuncs = implode('|', $generateFuncs); - $base64Match = "[a-zA-Z0-9\/\r\n+]*={0,2}"; + $base64url_match = "[a-zA-Z0-9_~]*={0,2}"; return array( - 'FullPattern' => "/^((?P{$generateFuncs})(?P" . $base64Match . ")\-)+" + 'FullPattern' => "/^((?P{$generateFuncs})(?P" . $base64url_match . ")\-)+" . preg_quote($filename) . "$/i", - 'GeneratorPattern' => "/(?P{$generateFuncs})(?P" . $base64Match . ")\-/i" + 'GeneratorPattern' => "/(?P{$generateFuncs})(?P" . $base64url_match . ")\-/i" ); } @@ -877,7 +877,7 @@ class Image extends File implements Flushable { $generatorArray = array(); foreach ($subMatches as $singleMatch) { $generatorArray[] = array('Generator' => $singleMatch['Generator'], - 'Args' => json_decode(base64_decode($singleMatch['Args']))); + 'Args' => Convert::base64url_decode($singleMatch['Args'])); } // Using array_reverse is important, as a cached image will diff --git a/tests/core/ConvertTest.php b/tests/core/ConvertTest.php index 3bdbad71e..2ccf7e19b 100644 --- a/tests/core/ConvertTest.php +++ b/tests/core/ConvertTest.php @@ -36,6 +36,9 @@ class ConvertTest extends SapphireTest { 'Normal text is not escaped'); } + /** + * Tests {@link Convert::html2raw()} + */ public function testHtml2raw() { $val1 = 'This has a strong tag.'; $this->assertEquals('This has a *strong tag*.', Convert::html2raw($val1), @@ -139,6 +142,9 @@ PHP $this->assertEquals('This is some normal text.', Convert::xml2raw($val2), 'Normal text is not escaped'); } + /** + * Tests {@link Convert::xml2raw()} + */ public function testArray2JSON() { $val = array( 'Joe' => 'Bloggs', @@ -152,6 +158,9 @@ PHP 'Array is encoded in JSON'); } + /** + * Tests {@link Convert::json2array()} + */ public function testJSON2Array() { $val = '{"Joe":"Bloggs","Tom":"Jones","My":{"Complicated":"Structure"}}'; $decoded = Convert::json2array($val); @@ -161,6 +170,9 @@ PHP $this->assertContains('Structure', $decoded['My']['Complicated']); } + /** + * Tests {@link Convert::testJSON2Obj()} + */ public function testJSON2Obj() { $val = '{"Joe":"Bloggs","Tom":"Jones","My":{"Complicated":"Structure"}}'; $obj = Convert::json2obj($val); @@ -170,6 +182,7 @@ PHP } /** + * Tests {@link Convert::testRaw2URL()} * @todo test toASCII() */ public function testRaw2URL() { @@ -196,6 +209,9 @@ PHP $this->assertEquals($expected, $actual, $message); } + /** + * Tests {@link Convert::nl2os()} + */ public function testNL2OS() { foreach(array("\r\n", "\r", "\n") as $nl) { @@ -229,6 +245,9 @@ PHP } } + /** + * Tests {@link Convert::raw2js()} + */ public function testRaw2JS() { // Test attempt to break out of string $this->assertEquals( @@ -255,6 +274,9 @@ PHP ); } + /** + * Tests {@link Convert::raw2json()} + */ public function testRaw2JSON() { // Test object @@ -281,6 +303,9 @@ PHP ); } + /** + * Tests {@link Convert::xml2array()} + */ public function testXML2Array() { // Ensure an XML file at risk of entity expansion can be avoided safely $inputXML = <<assertEquals( + $data, + Convert::base64url_decode(Convert::base64url_encode($data)) + ); + + $data = 654.423; + $this->assertEquals( + $data, + Convert::base64url_decode(Convert::base64url_encode($data)) + ); + + $data = true; + $this->assertEquals( + $data, + Convert::base64url_decode(Convert::base64url_encode($data)) + ); + + $data = array('simple','array','¤Ø¶÷╬'); + $this->assertEquals( + $data, + Convert::base64url_decode(Convert::base64url_encode($data)) + ); + + $data = array( + 'a' => 'associative', + 4 => 'array', + '☺' => '¤Ø¶÷╬' + ); + $this->assertEquals( + $data, + Convert::base64url_decode(Convert::base64url_encode($data)) + ); + } } diff --git a/tests/forms/HtmlEditorFieldTest.php b/tests/forms/HtmlEditorFieldTest.php index e828864b6..52bb3aa79 100644 --- a/tests/forms/HtmlEditorFieldTest.php +++ b/tests/forms/HtmlEditorFieldTest.php @@ -88,7 +88,7 @@ class HtmlEditorFieldTest extends FunctionalTest { $this->assertEquals(10, (int)$xml[0]['width'], 'Width tag of resized image is set.'); $this->assertEquals(20, (int)$xml[0]['height'], 'Height tag of resized image is set.'); - $neededFilename = 'assets/_resampled/ResizedImage' . base64_encode(json_encode(array(10,20))) . + $neededFilename = 'assets/_resampled/ResizedImage' . Convert::base64url_encode(array(10,20)) . '-HTMLEditorFieldTest_example.jpg'; $this->assertEquals($neededFilename, (string)$xml[0]['src'], 'Correct URL of resized image is set.'); diff --git a/tests/model/ImageTest.php b/tests/model/ImageTest.php index e9d87d8dc..5ba108662 100644 --- a/tests/model/ImageTest.php +++ b/tests/model/ImageTest.php @@ -287,7 +287,7 @@ class ImageTest extends SapphireTest { $imageFirst = $image->Pad(200,200,'CCCCCC'); $imageFilename = $imageFirst->getFullPath(); // Encoding of the arguments is duplicated from cacheFilename - $neededPart = 'Pad' . base64_encode(json_encode(array(200,200,'CCCCCC'))); + $neededPart = 'Pad' . Convert::base64url_encode(array(200,200,'CCCCCC')); $this->assertContains($neededPart, $imageFilename, 'Filename for cached image is correctly generated'); } @@ -310,7 +310,7 @@ class ImageTest extends SapphireTest { $imageThird = $imageSecond->Pad(600,600,'0F0F0F'); // Encoding of the arguments is duplicated from cacheFilename - $argumentString = base64_encode(json_encode(array(600,600,'0F0F0F'))); + $argumentString = Convert::base64url_encode(array(600,600,'0F0F0F')); $this->assertNotNull($imageThird); $this->assertContains($argumentString, $imageThird->getFullPath(), 'Image contains background color for padded resizement'); @@ -352,8 +352,8 @@ class ImageTest extends SapphireTest { $this->assertTrue(file_exists($p), 'Resized image exists after creation call'); // Encoding of the arguments is duplicated from cacheFilename - $oldArgumentString = base64_encode(json_encode(array(200))); - $newArgumentString = base64_encode(json_encode(array(300))); + $oldArgumentString = Convert::base64url_encode(array(200)); + $newArgumentString = Convert::base64url_encode(array(300)); $newPath = str_replace($oldArgumentString, $newArgumentString, $p); $newRelative = str_replace($oldArgumentString, $newArgumentString, $image_generated->getFileName()); From 1f0602d42fd9e1c0a4268f3a51aa7f483100a935 Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Fri, 7 Aug 2015 14:20:01 +1200 Subject: [PATCH 21/23] FIX: Fixed regression from ClassInfo case-sensitivity fix. This fixes a bug introduced by ffbeac6b7d3ed1a6e02a150573ee4b2f9251cf9c. ClassInfo::subclassesFor() didn't previously throw an Exception if passed an invalid class; it just returned no values. This will annoy minor-release upgrades, and so I've made it return null instead in these situation. --- core/ClassInfo.php | 11 +++++++++++ model/DataQuery.php | 10 ++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/core/ClassInfo.php b/core/ClassInfo.php index b6aac6a56..ac959e2b5 100644 --- a/core/ClassInfo.php +++ b/core/ClassInfo.php @@ -61,6 +61,8 @@ class ClassInfo { * @return array List of subclasses */ public static function getValidSubClasses($class = 'SiteTree', $includeUnbacked = false) { + if(is_string($class) && !class_exists($class)) return null; + $class = self::class_name($class); $classes = DB::get_schema()->enumValuesForField($class, 'ClassName'); if (!$includeUnbacked) $classes = array_filter($classes, array('ClassInfo', 'exists')); @@ -76,6 +78,8 @@ class ClassInfo { * @return array */ public static function dataClassesFor($class) { + if(is_string($class) && !class_exists($class)) return null; + $result = array(); $class = self::class_name($class); @@ -100,6 +104,8 @@ class ClassInfo { * @return string */ public static function baseDataClass($class) { + if(is_string($class) && !class_exists($class)) return null; + $class = self::class_name($class); if (!is_subclass_of($class, 'DataObject')) { @@ -134,6 +140,8 @@ class ClassInfo { * @return array Names of all subclasses as an associative array. */ public static function subclassesFor($class) { + if(is_string($class) && !class_exists($class)) return null; + //normalise class case $className = self::class_name($class); $descendants = SS_ClassLoader::instance()->getManifest()->getDescendantsOf($class); @@ -159,6 +167,7 @@ class ClassInfo { if (is_object($nameOrObject)) { return get_class($nameOrObject); } + $reflection = new ReflectionClass($nameOrObject); return $reflection->getName(); } @@ -172,6 +181,8 @@ class ClassInfo { * @return array */ public static function ancestry($class, $tablesOnly = false) { + if(is_string($class) && !class_exists($class)) return null; + $class = self::class_name($class); $lClass = strtolower($class); diff --git a/model/DataQuery.php b/model/DataQuery.php index ea84b02fa..4e3a4065d 100644 --- a/model/DataQuery.php +++ b/model/DataQuery.php @@ -232,10 +232,12 @@ class DataQuery { foreach($collisions as $collision) { if(preg_match('/^"([^"]+)"/', $collision, $matches)) { $collisionBase = $matches[1]; - $collisionClasses = ClassInfo::subclassesFor($collisionBase); - $collisionClasses = Convert::raw2sql($collisionClasses, true); - $caseClauses[] = "WHEN \"$baseClass\".\"ClassName\" IN (" - . implode(", ", $collisionClasses) . ") THEN $collision"; + if(class_exists($collisionBase)) { + $collisionClasses = ClassInfo::subclassesFor($collisionBase); + $collisionClasses = Convert::raw2sql($collisionClasses, true); + $caseClauses[] = "WHEN \"$baseClass\".\"ClassName\" IN (" + . implode(", ", $collisionClasses) . ") THEN $collision"; + } } else { user_error("Bad collision item '$collision'", E_USER_WARNING); } From cf9d2d12ac7fc6a2509ee70f8e6f304b3b232019 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 10 Aug 2015 09:54:30 +1200 Subject: [PATCH 22/23] BUG Fix duplicate primary key crash on duplicate --- model/Versioned.php | 10 ++++++++++ tests/model/VersionedTest.php | 17 +++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/model/Versioned.php b/model/Versioned.php index 0060ba21d..e089d4feb 100644 --- a/model/Versioned.php +++ b/model/Versioned.php @@ -1395,6 +1395,16 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { $fields->removeByName('Version'); } + /** + * Ensure version ID is reset to 0 on duplicate + * + * @param DataObject $source Record this was duplicated from + * @param bool $doWrite + */ + public function onBeforeDuplicate($source, $doWrite) { + $this->owner->Version = 0; + } + public function flushCache() { self::$cache_versionnumber = array(); } diff --git a/tests/model/VersionedTest.php b/tests/model/VersionedTest.php index 746e57c49..989b71be0 100644 --- a/tests/model/VersionedTest.php +++ b/tests/model/VersionedTest.php @@ -100,6 +100,23 @@ class VersionedTest extends SapphireTest { $this->assertEquals($count, $count2); } + public function testDuplicate() { + $obj1 = new VersionedTest_Subclass(); + $obj1->ExtraField = 'Foo'; + $obj1->write(); // version 1 + $obj1->publish('Stage', 'Live'); + $obj1->ExtraField = 'Foo2'; + $obj1->write(); // version 2 + + // Make duplicate + $obj2 = $obj1->duplicate(); + + // Check records differ + $this->assertNotEquals($obj1->ID, $obj2->ID); + $this->assertEquals(2, $obj1->Version); + $this->assertEquals(1, $obj2->Version); + } + public function testForceChangeUpdatesVersion() { $obj = new VersionedTest_DataObject(); $obj->Name = "test"; From c4c4d79c26318f7c15ff25cd86a648145f42452a Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 11 Aug 2015 14:56:13 +1000 Subject: [PATCH 23/23] Fix for Issue #4424 Model Admin : 'Show Specification for' toggle link breaks if Title contains spaces. Uses className for element ID on ImportSpec template. --- admin/code/ModelAdmin.php | 2 +- admin/templates/Includes/ModelAdmin_ImportSpec.ss | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/admin/code/ModelAdmin.php b/admin/code/ModelAdmin.php index dd96e2c8d..2bb77ab5b 100644 --- a/admin/code/ModelAdmin.php +++ b/admin/code/ModelAdmin.php @@ -366,7 +366,7 @@ abstract class ModelAdmin extends LeftAndMain { $specRelations->push(new ArrayData(array('Name' => $name, 'Description' => $desc))); } $specHTML = $this->customise(array( - 'attrModelName' => str_replace(' ', '',$modelName), + 'ClassName' => str_replace('\\', '_', $className), 'ModelName' => Convert::raw2att($modelName), 'Fields' => $specFields, 'Relations' => $specRelations, diff --git a/admin/templates/Includes/ModelAdmin_ImportSpec.ss b/admin/templates/Includes/ModelAdmin_ImportSpec.ss index 08844c2bc..21ebdffce 100644 --- a/admin/templates/Includes/ModelAdmin_ImportSpec.ss +++ b/admin/templates/Includes/ModelAdmin_ImportSpec.ss @@ -1,6 +1,6 @@ -
- <% sprintf(_t('ModelAdmin_ImportSpec_ss.IMPORTSPECLINK', 'Show Specification for %s'),$ModelName) %> -
+
+ <% sprintf(_t('ModelAdmin_ImportSpec_ss.IMPORTSPECLINK', 'Show Specification for %s'),$ModelName) %> +

<% sprintf(_t('ModelAdmin_ImportSpec_ss.IMPORTSPECTITLE', 'Specification for %s'),$ModelName) %>

<% _t('ModelAdmin_ImportSpec_ss.IMPORTSPECFIELDS', 'Database columns') %>
<% loop $Fields %>