Merge 3.3.3 into 3.3

This commit is contained in:
Damian Mooyman 2016-08-15 18:36:16 +12:00
commit cba7950701
22 changed files with 717 additions and 38 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -23,7 +23,7 @@ class VersionedRequestFilter implements RequestFilter {
'You must log in with your CMS password in order to view the draft or archived content. '. 'You must log in with your CMS password in order to view the draft or archived content. '.
'<a href="%s">Click here to go back to the published site.</a>' '<a href="%s">Click here to go back to the published site.</a>'
), ),
Controller::join_links(Director::baseURL(), $request->getURL(), "?stage=Live") Convert::raw2xml(Controller::join_links(Director::baseURL(), $request->getURL(), "?stage=Live"))
); );
// Force output since RequestFilter::preRequest doesn't support response overriding // Force output since RequestFilter::preRequest doesn't support response overriding

View File

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

View File

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

View File

@ -132,11 +132,14 @@ class CheckboxSetField extends OptionsetField {
} }
foreach($source as $value => $item) { foreach($source as $value => $item) {
// Ensure $title is cast for template
if($item instanceof DataObject) { if($item instanceof DataObject) {
$value = $item->ID; $value = $item->ID;
$title = $item->Title; $title = $item->obj('Title');
} else { } elseif ($item instanceof DBField) {
$title = $item; $title = $item;
} else {
$title = DBField::create_field('Text', $item);
} }
$itemID = $this->ID() . '_' . preg_replace('/[^a-zA-Z0-9]/', '', $value); $itemID = $this->ID() . '_' . preg_replace('/[^a-zA-Z0-9]/', '', $value);

View File

@ -62,6 +62,11 @@ class OptionsetField extends DropdownField {
if($source) { if($source) {
foreach($source as $value => $title) { foreach($source as $value => $title) {
// Ensure $title is safely cast
if ( !($title instanceof DBField) ) {
$title = DBField::create_field('Text', $title);
}
$itemID = $this->ID() . '_' . preg_replace('/[^a-zA-Z0-9]/', '', $value); $itemID = $this->ID() . '_' . preg_replace('/[^a-zA-Z0-9]/', '', $value);
$odd = ($odd + 1) % 2; $odd = ($odd + 1) % 2;
$extraClass = $odd ? 'odd' : 'even'; $extraClass = $odd ? 'odd' : 'even';

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

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

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

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

View File

@ -210,12 +210,15 @@ cs:
JsType: 'Javascript soubor' JsType: 'Javascript soubor'
Mp3Type: 'MP3 audio soubor' Mp3Type: 'MP3 audio soubor'
MpgType: 'MPEG video soubor' MpgType: 'MPEG video soubor'
NOFILESIZE: 'Velikost souboru je 0 bajtů.'
NOVALIDUPLOAD: 'Soubor není validní pro nahrání' NOVALIDUPLOAD: 'Soubor není validní pro nahrání'
Name: Jméno Name: Jméno
PLURALNAME: Soubory PLURALNAME: Soubory
PdfType: 'Adobe Acrobat PDF soubor' PdfType: 'Adobe Acrobat PDF soubor'
PngType: 'PNG obrázek - vhodný jako univerzálmí formát' PngType: 'PNG obrázek - vhodný jako univerzálmí formát'
SINGULARNAME: Soubor SINGULARNAME: Soubor
TOOLARGE: 'Velikost souboru je příliš velká, povolené maximum {size}'
TOOLARGESHORT: 'Velikost souboru překračuje {size}'
TiffType: 'Tiff formát obrázku' TiffType: 'Tiff formát obrázku'
Title: Titulek Title: Titulek
WavType: 'WAV audo soubor' WavType: 'WAV audo soubor'
@ -378,6 +381,8 @@ cs:
FROMWEB: 'Z webu' FROMWEB: 'Z webu'
FindInFolder: 'Hledat ve složce' FindInFolder: 'Hledat ve složce'
IMAGEALT: 'Alternativní text (alt)' IMAGEALT: 'Alternativní text (alt)'
IMAGEALTTEXT: 'Alternativní text (alt) - ukáže se, když obrázek nemúže být zobrazen'
IMAGEALTTEXTDESC: 'Zobrazeno na obrazovce, anebo když obrázek nemůže být zobrazen'
IMAGEDIMENSIONS: Rozměry IMAGEDIMENSIONS: Rozměry
IMAGEHEIGHTPX: Výška IMAGEHEIGHTPX: Výška
IMAGETITLE: 'Titul text (tooltip) - další informace o obrázku' IMAGETITLE: 'Titul text (tooltip) - další informace o obrázku'
@ -412,10 +417,13 @@ cs:
CANCEL: Storno CANCEL: Storno
CANT_REORGANISE: 'Nemáte oprávnění měnit stránky nejvyšší úrovně. Vaše změna nebyla uložena.' CANT_REORGANISE: 'Nemáte oprávnění měnit stránky nejvyšší úrovně. Vaše změna nebyla uložena.'
DELETED: Smazáno. DELETED: Smazáno.
DropdownBatchActionsDefault: Akce
HELP: Nápověda HELP: Nápověda
PAGETYPE: 'Typ stránky'
PERMAGAIN: 'Byli jste odhlášeni z CMS. Pokud se chcete znovu přihlásit, zadejte níže své uživatelské jméno a heslo.' PERMAGAIN: 'Byli jste odhlášeni z CMS. Pokud se chcete znovu přihlásit, zadejte níže své uživatelské jméno a heslo.'
PERMALREADY: 'Omlouvám se, ale nemůžete vstoupit do této části CMS. Pokud se chcete přihlásit jako někdo jiný, udělejte tak níže.' PERMALREADY: 'Omlouvám se, ale nemůžete vstoupit do této části CMS. Pokud se chcete přihlásit jako někdo jiný, udělejte tak níže.'
PERMDEFAULT: 'Musíte být přihlášen/a k přístup do oblasti administrace, níže zadejte vaše přihlašovací údaje, prosím.' PERMDEFAULT: 'Musíte být přihlášen/a k přístup do oblasti administrace, níže zadejte vaše přihlašovací údaje, prosím.'
PLEASESAVE: 'Prosím uložte stránku: Tato stránka nemohla být aktualizována, protože ještě nebyla uložena.'
PreviewButton: Náhled PreviewButton: Náhled
REORGANISATIONSUCCESSFUL: 'Strom webu reorganizován úspěšně.' REORGANISATIONSUCCESSFUL: 'Strom webu reorganizován úspěšně.'
SAVEDUP: Uloženo. SAVEDUP: Uloženo.
@ -471,6 +479,7 @@ cs:
SUBJECTPASSWORDRESET: 'Nulovací odkaz pro Vaše heslo' SUBJECTPASSWORDRESET: 'Nulovací odkaz pro Vaše heslo'
SURNAME: Příjmení SURNAME: Příjmení
TIMEFORMAT: 'Formát času' TIMEFORMAT: 'Formát času'
VALIDATIONMEMBEREXISTS: 'Již existuje člen se stejnou %s'
ValidationIdentifierFailed: 'Nemůžete přepsat existujícího člena #{id} s identickým identifikátorem ({name} = {value}))' ValidationIdentifierFailed: 'Nemůžete přepsat existujícího člena #{id} s identickým identifikátorem ({name} = {value}))'
WELCOMEBACK: 'Vítejte zpět, {firstname}' WELCOMEBACK: 'Vítejte zpět, {firstname}'
YOUROLDPASSWORD: 'Vaše staré heslo' YOUROLDPASSWORD: 'Vaše staré heslo'

View File

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

View File

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

View File

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

View File

@ -210,12 +210,15 @@ sk:
JsType: 'Javascript súbor' JsType: 'Javascript súbor'
Mp3Type: 'MP3 audio súbor' Mp3Type: 'MP3 audio súbor'
MpgType: 'MPEG video súbor' MpgType: 'MPEG video súbor'
NOFILESIZE: 'Veľkosť súboru je nula bajtov.'
NOVALIDUPLOAD: 'Subor nie je povolený pre nahratie' NOVALIDUPLOAD: 'Subor nie je povolený pre nahratie'
Name: Meno Name: Meno
PLURALNAME: Súbory PLURALNAME: Súbory
PdfType: 'Adobe Acrobat PDF súbor' PdfType: 'Adobe Acrobat PDF súbor'
PngType: 'PNG obrázok - vhodný univerzálny formát' PngType: 'PNG obrázok - vhodný univerzálny formát'
SINGULARNAME: Súbor SINGULARNAME: Súbor
TOOLARGE: 'Veľkosť súboru je príliš veľká, maximum {size} je povolené'
TOOLARGESHORT: 'Veľkosť súboru prekračuje {size}'
TiffType: 'Tiff formát obrázku' TiffType: 'Tiff formát obrázku'
Title: Názov Title: Názov
WavType: 'WAV audo súbor' WavType: 'WAV audo súbor'
@ -378,6 +381,8 @@ sk:
FROMWEB: 'Z webu' FROMWEB: 'Z webu'
FindInFolder: 'Vyhľadať v priečinku' FindInFolder: 'Vyhľadať v priečinku'
IMAGEALT: 'Atlernatívny text (alt)' IMAGEALT: 'Atlernatívny text (alt)'
IMAGEALTTEXT: 'Atlernatívny text (alt) - zobrazí sa ak obrázok nemože byť zobrazený '
IMAGEALTTEXTDESC: 'Zobrazí sa na obrazovke, ak obrázok nemôže byť zobrazený'
IMAGEDIMENSIONS: Rozmery IMAGEDIMENSIONS: Rozmery
IMAGEHEIGHTPX: Výška IMAGEHEIGHTPX: Výška
IMAGETITLE: 'Text titulky (tooltip) - pre doplňujúce informácie o obrázku' IMAGETITLE: 'Text titulky (tooltip) - pre doplňujúce informácie o obrázku'
@ -412,10 +417,13 @@ sk:
CANCEL: Zrušiť CANCEL: Zrušiť
CANT_REORGANISE: 'Nemáte oprávnenie meniť stránky najvyššej úrovne. Vaša zmena nebola uložená.' CANT_REORGANISE: 'Nemáte oprávnenie meniť stránky najvyššej úrovne. Vaša zmena nebola uložená.'
DELETED: Zmazané. DELETED: Zmazané.
DropdownBatchActionsDefault: Akcie
HELP: Pomoc HELP: Pomoc
PAGETYPE: 'Typ stránky'
PERMAGAIN: 'Boli ste odhlásený' PERMAGAIN: 'Boli ste odhlásený'
PERMALREADY: 'Je nám ľúto, ale k tejto časti CMS nemáte prístup . Ak sa chcete prihlásiť ako niekto iný, urobte tak nižšie.' PERMALREADY: 'Je nám ľúto, ale k tejto časti CMS nemáte prístup . Ak sa chcete prihlásiť ako niekto iný, urobte tak nižšie.'
PERMDEFAULT: 'Musíte byť prihlásený/á k prístupu do oblasti administrácie, zadajte vaše prihlasovacie údaje dole, prosím.' PERMDEFAULT: 'Musíte byť prihlásený/á k prístupu do oblasti administrácie, zadajte vaše prihlasovacie údaje dole, prosím.'
PLEASESAVE: 'Prosím uložte stránku: Táto stránka nemôže byť aktualizovaná, lebo ešte nebola uložená.'
PreviewButton: Náhľad PreviewButton: Náhľad
REORGANISATIONSUCCESSFUL: 'Strom webu bol reorganizovaný úspešne.' REORGANISATIONSUCCESSFUL: 'Strom webu bol reorganizovaný úspešne.'
SAVEDUP: Uložené. SAVEDUP: Uložené.
@ -471,6 +479,7 @@ sk:
SUBJECTPASSWORDRESET: 'Odkaz na resetovanie hesla' SUBJECTPASSWORDRESET: 'Odkaz na resetovanie hesla'
SURNAME: Priezvisko SURNAME: Priezvisko
TIMEFORMAT: 'Formát času' TIMEFORMAT: 'Formát času'
VALIDATIONMEMBEREXISTS: 'Člen už existuje s rovnakým %s'
ValidationIdentifierFailed: 'Nemôžte prepísať existujúceho člena #{id} s identickým identifikátorm ({name} = {value})' ValidationIdentifierFailed: 'Nemôžte prepísať existujúceho člena #{id} s identickým identifikátorm ({name} = {value})'
WELCOMEBACK: 'Vitajte späť, {firstname}' WELCOMEBACK: 'Vitajte späť, {firstname}'
YOUROLDPASSWORD: 'Vaše staré heslo' YOUROLDPASSWORD: 'Vaše staré heslo'

View File

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

View File

@ -118,12 +118,24 @@ class Member extends DataObject implements TemplateGlobalProvider {
'Email', 'Email',
); );
/**
* @config
* @var array
*/
private static $summary_fields = array( private static $summary_fields = array(
'FirstName', 'FirstName',
'Surname', 'Surname',
'Email', 'Email',
); );
/**
* @config
* @var array
*/
private static $casting = array(
'Name' => 'Varchar',
);
/** /**
* Internal-use only fields * Internal-use only fields
* *
@ -472,7 +484,8 @@ class Member extends DataObject implements TemplateGlobalProvider {
$this->addVisit(); $this->addVisit();
if($remember) { // Only set the cookie if autologin is enabled
if($remember && Security::config()->autologin_enabled) {
// Store the hash and give the client the cookie with the token. // Store the hash and give the client the cookie with the token.
$generator = new RandomGenerator(); $generator = new RandomGenerator();
$token = $generator->randomToken('sha1'); $token = $generator->randomToken('sha1');
@ -555,7 +568,8 @@ class Member extends DataObject implements TemplateGlobalProvider {
// Don't bother trying this multiple times // Don't bother trying this multiple times
self::$_already_tried_to_auto_log_in = true; self::$_already_tried_to_auto_log_in = true;
if(strpos(Cookie::get('alc_enc'), ':') === false if(!Security::config()->autologin_enabled
|| strpos(Cookie::get('alc_enc'), ':') === false
|| Session::get("loggedInAs") || Session::get("loggedInAs")
|| !Security::database_is_ready() || !Security::database_is_ready()
) { ) {
@ -824,7 +838,7 @@ class Member extends DataObject implements TemplateGlobalProvider {
} else { } else {
$random = rand(); $random = rand();
$string = md5($random); $string = md5($random);
$output = substr($string, 0, 6); $output = substr($string, 0, 8);
return $output; return $output;
} }
} }
@ -880,6 +894,9 @@ class Member extends DataObject implements TemplateGlobalProvider {
// Note that this only works with cleartext passwords, as we can't rehash // Note that this only works with cleartext passwords, as we can't rehash
// existing passwords. // existing passwords.
if((!$this->ID && $this->Password) || $this->isChanged('Password')) { if((!$this->ID && $this->Password) || $this->isChanged('Password')) {
//reset salt so that it gets regenerated - this will invalidate any persistant login cookies
// or other information encrypted with this Member's settings (see self::encryptWithUserSettings)
$this->Salt = '';
// Password was changed: encrypt the password according the settings // Password was changed: encrypt the password according the settings
$encryption_details = Security::encrypt_password( $encryption_details = Security::encrypt_password(
$this->Password, // this is assumed to be cleartext $this->Password, // this is assumed to be cleartext

View File

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

View File

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

View File

@ -206,6 +206,27 @@ class CheckboxSetFieldTest extends SapphireTest {
); );
} }
public function testSafelyCast() {
$member = new Member();
$member->FirstName = '<firstname>';
$member->Surname = '<surname>';
$member->write();
$field1 = new CheckboxSetField('Options', 'Options', array(
'one' => 'One',
'two' => 'Two & Three',
'three' => DBField::create_field('HTMLText', 'Four &amp; Five &amp; Six'),
$member
));
$fieldHTML = (string)$field1->Field();
$this->assertContains('One', $fieldHTML);
$this->assertContains('Two &amp; Three', $fieldHTML);
$this->assertNotContains('Two & Three', $fieldHTML);
$this->assertContains('Four &amp; Five &amp; Six', $fieldHTML);
$this->assertNotContains('Four & Five & Six', $fieldHTML);
$this->assertContains('&lt;firstname&gt;', $fieldHTML);
$this->assertNotContains('<firstname>', $fieldHTML);
}
} }
/** /**

View File

@ -63,4 +63,18 @@ class OptionsetFieldTest extends SapphireTest {
preg_match('/Yes/', $field->Field(), $matches); preg_match('/Yes/', $field->Field(), $matches);
$this->assertEquals($matches[0], 'Yes'); $this->assertEquals($matches[0], 'Yes');
} }
public function testSafelyCast() {
$field1 = new OptionsetField('Options', 'Options', array(
1 => 'One',
2 => 'Two & Three',
3 => DBField::create_field('HTMLText', 'Four &amp; Five &amp; Six')
));
$fieldHTML = (string)$field1->Field();
$this->assertContains('One', $fieldHTML);
$this->assertContains('Two &amp; Three', $fieldHTML);
$this->assertNotContains('Two & Three', $fieldHTML);
$this->assertContains('Four &amp; Five &amp; Six', $fieldHTML);
$this->assertNotContains('Four & Five & Six', $fieldHTML);
}
} }