From 7d8425538ba2aebd31cded35aa0d94845d5db018 Mon Sep 17 00:00:00 2001 From: flynsarmy Date: Fri, 26 Sep 2014 09:20:01 +1000 Subject: [PATCH 01/22] Send a 0 value when a checkbox is unchecked --- modules/backend/widgets/form/partials/_field_checkbox.htm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/backend/widgets/form/partials/_field_checkbox.htm b/modules/backend/widgets/form/partials/_field_checkbox.htm index 5b29d8eca..67675d46f 100644 --- a/modules/backend/widgets/form/partials/_field_checkbox.htm +++ b/modules/backend/widgets/form/partials/_field_checkbox.htm @@ -1,5 +1,10 @@
+ previewMode ? 'disabled="disabled"' : '' ?>> Date: Mon, 6 Oct 2014 17:55:50 +0200 Subject: [PATCH 02/22] add mailgun support patch --- modules/system/models/MailSettings.php | 7 +++++++ modules/system/models/mailsettings/fields.yaml | 12 +++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/system/models/MailSettings.php b/modules/system/models/MailSettings.php index 76e9ecf0e..87cd1203f 100644 --- a/modules/system/models/MailSettings.php +++ b/modules/system/models/MailSettings.php @@ -19,6 +19,7 @@ class MailSettings extends Model const MODE_MAIL = 'mail'; const MODE_SENDMAIL = 'sendmail'; const MODE_SMTP = 'smtp'; + const MODE_MAILGUN = 'mailgun'; public function initSettingsData() { @@ -40,6 +41,7 @@ class MailSettings extends Model static::MODE_MAIL => 'PHP mail', static::MODE_SENDMAIL => 'Sendmail', static::MODE_SMTP => 'SMTP', + static::MODE_MAILGUN => 'Mailgun', ]; } @@ -69,6 +71,11 @@ class MailSettings extends Model case self::MODE_SENDMAIL: $config->set('mail.sendmail', $settings->sendmail_path); break; + + case self::MODE_MAILGUN: + $config->set('services.mailgun.domain', $settings->mailgun_domain); + $config->set('services.mailgun.secret', $settings->mailgun_secret); + break; } } } \ No newline at end of file diff --git a/modules/system/models/mailsettings/fields.yaml b/modules/system/models/mailsettings/fields.yaml index de3ece272..318951fb9 100644 --- a/modules/system/models/mailsettings/fields.yaml +++ b/modules/system/models/mailsettings/fields.yaml @@ -52,4 +52,14 @@ tabs: sendmail_path: label: system::lang.mail.sendmail_path commentAbove: system::lang.mail.sendmail_path_comment - tab: system::lang.mail.sendmail \ No newline at end of file + tab: system::lang.mail.sendmail + + mailgun_domain: + label: system::lang.mail.mailgun_domain + commentAbove: system::lang.mail.mailgun_domain_comment + tab: system::lang.mail.mailgun + + mailgun_secret: + label: system::lang.mail.mailgun_secret + commentAbove: system::lang.mail.mailgun_domain_secret + tab: system::lang.mail.mailgun \ No newline at end of file From f5422544034c8efcaf016a54eadc18bfd8c27fdd Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Tue, 7 Oct 2014 18:26:08 +1100 Subject: [PATCH 03/22] Minor --- modules/backend/behaviors/ListController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/backend/behaviors/ListController.php b/modules/backend/behaviors/ListController.php index f700ce21d..608d166dc 100644 --- a/modules/backend/behaviors/ListController.php +++ b/modules/backend/behaviors/ListController.php @@ -323,7 +323,7 @@ class ListController extends ControllerBehavior $calledClass = self::getCalledExtensionClass(); Event::listen('backend.list.extendColumns', function($widget) use ($calledClass, $callback) { if (!is_a($widget->getController(), $calledClass)) return; - $callback($widget, $widget->model, $widget->getContext()); + $callback($widget, $widget->model); }); } From 9d3934c23b9961ea4c97b45542f1d02838382c9f Mon Sep 17 00:00:00 2001 From: Nikos Gr Date: Tue, 7 Oct 2014 14:13:04 +0300 Subject: [PATCH 04/22] Add .env.*.php files to .gitignore It's undoubtedly a best practice to use .env.*.php files to store db credentials, api keys etc. We should make sure that these files do not get version controlled. --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 44273319d..f1f19299a 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,6 @@ nginx-ssl.access.log nginx-ssl.error.log php-errors.log sftp-config.json -selenium.php \ No newline at end of file +selenium.php +.env.*.php +.env.php From 1cf70bf0323915d48e82f8b81bdd584c6ab59a75 Mon Sep 17 00:00:00 2001 From: sajjad-ser Date: Tue, 7 Oct 2014 17:37:37 +0330 Subject: [PATCH 05/22] Add Persian Translate --- modules/backend/lang/fa/lang.php | 256 ++++++++++++++++++ modules/backend/models/BackendPreferences.php | 1 + modules/cms/lang/fa/lang.php | 173 ++++++++++++ modules/system/lang/de/lang.php | 1 + modules/system/lang/en/lang.php | 1 + modules/system/lang/fa/lang.php | 237 ++++++++++++++++ modules/system/lang/fa/validation.php | 98 +++++++ modules/system/lang/fr/lang.php | 1 + modules/system/lang/it/lang.php | 1 + modules/system/lang/ja/lang.php | 1 + modules/system/lang/nl/lang.php | 1 + modules/system/lang/pt-br/lang.php | 1 + modules/system/lang/ro/lang.php | 1 + modules/system/lang/ru/lang.php | 1 + modules/system/lang/sv/lang.php | 1 + modules/system/lang/tr/lang.php | 1 + 16 files changed, 776 insertions(+) create mode 100644 modules/backend/lang/fa/lang.php create mode 100644 modules/cms/lang/fa/lang.php create mode 100644 modules/system/lang/fa/lang.php create mode 100644 modules/system/lang/fa/validation.php diff --git a/modules/backend/lang/fa/lang.php b/modules/backend/lang/fa/lang.php new file mode 100644 index 000000000..96571f99d --- /dev/null +++ b/modules/backend/lang/fa/lang.php @@ -0,0 +1,256 @@ + [ + 'invalid_type' => 'نوع فیلد :type نا معتبر می باشد.', + 'options_method_not_exists' => 'کلاس مدل :model باید شامل متد :method() باشد و گزینه های مورد نیاز ":field" را بازگرداند.', + ], + 'widget' => [ + 'not_registered' => "کلاس مربوط به ابزارک ':name' به سیستم معرفی نشده است", + 'not_bound' => "ابزارکی تعریف شده در کلاس با نام ':name' به هیچ کنترلری ارتباط داده نشده است", + ], + 'page' => [ + 'untitled' => "بدون عنوان", + 'access_denied' => [ + 'label' => "شما مجوز دسترسی ندارید", + 'help' => "شما مجوز لازم براس دسترسی به این صفحه را ندارید.", + 'cms_link' => "بازگشت به مدیریت", + ], + ], + 'partial' => [ + 'not_found' => "بخشی با نام ':name' یافت نشد.", + ], + 'account' => [ + 'sign_out' => 'خروج', + 'login' => 'ورود', + 'reset' => 'تنظیم مجدد', + 'restore' => 'بازگرداندن', + 'login_placeholder' => 'ورود', + 'password_placeholder' => 'کلمه عبور', + 'forgot_password' => "کلمه عبور خود را فراموش کرده اید؟", + 'enter_email' => "پست الکترونیکی خود را وارد نمایید", + 'enter_login' => "نام کاربری خود را وارد نمایید", + 'email_placeholder' => "پست الکترونیکی", + 'enter_new_password' => "کلمه عبور جدید را وارد نمایید", + 'password_reset' => "بازگرداندن کلمه عبور", + 'restore_success' => "یک نامه به پست الکترونیکی شما جهت شروع عملیات بارگرداندن کلمه عبور ارسال شد.", + 'restore_error' => "کاربری با نام کاریری ':login' یافت نشد.", + 'reset_success' => "کلمه عبور شما بارگردانی شد و شما هم اکنون میتوانید وارد سیستم شوید.", + 'reset_error' => "اطلاعات رمز عبور نا معتبر است , لطفا مجددا تلاش نمایید!", + 'reset_fail' => "عدم توانایی در بازگرداندن کلمه عبور شما!", + 'apply' => 'اعمال کردن', + 'cancel' => 'انصراف', + 'delete' => 'حذف', + 'ok' => 'تایید', + ], + 'dashboard' => [ + 'menu_label' => 'میز کار', + 'widget_label' => 'ابزارک', + 'widget_width' => 'عرض', + 'full_width' => 'عرض کامل', + 'add_widget' => 'افزودن ابزارک', + 'widget_inspector_title' => 'تنظیمات ابزارک', + 'widget_inspector_description' => 'پیکر بندی ابزارک گزارشگیری', + 'widget_columns_label' => 'عرض :columns', + 'widget_columns_description' => 'عرض ابزارک باید عددی مابین 1 تا 10 باشد.', + 'widget_columns_error' => 'لطفا عرض ابزارک را عددی مابین 1 تا 10 وارد نمایید.', + 'columns' => '{1} ستون|[2,Inf] ستون ها', + 'widget_new_row_label' => 'تحمیل سطر جدید', + 'widget_new_row_description' => 'افزودن ابزارک در سطر جدید.', + 'widget_title_label' => 'عنوان ابزارک', + 'widget_title_error' => 'گزینه "عنوان ابزارک" حتما باید وارد شود.', + 'status' => [ + 'widget_title_default' => 'وضعیت سیستم', + 'online' => 'online', + 'update_available' => '{0} به روز رسانی موجود است!|{1} به روز رسانی موجود است!|[2,Inf] به روز رسانی موجود است!', + ] + ], + 'user' => [ + 'name' => 'مدیریت', + 'menu_label' => 'مدیران', + 'menu_description' => 'مدیریت کاربران , گروه ها و دسترسی های مدیران.', + 'list_title' => 'مدیریت مدیران', + 'new' => 'مدیر جدید', + 'login' => "ورود", + 'first_name' => "نام", + 'last_name' => "نام خانوادگی", + 'full_name' => "نام کامل", + 'email' => "پست الکترونیکی", + 'groups' => "گروه ها", + 'groups_comment' => "مختص گروهی که این شخص به آن تعلق دارد.", + 'avatar' => "نمایه", + 'password' => "کلمه عبور", + 'password_confirmation' => "تکرار کلمه عبور", + 'superuser' => "کاربر ممتاز", + 'superuser_comment' => "اگر میخواهید این شخص به تمام قسمت ها دسترسی داشته باشد این گزینه را فعال نمایید.", + 'send_invite' => 'دعوت نامه توسط پست الکترونیکی ارسال شود', + 'send_invite_comment' => 'جهت ارسال دعوت نامه به پست الکترونیکی این شخص این گزینه را فعال نمایید', + 'delete_confirm' => 'آیا از حذف این مدیر اطمینان دارید؟', + 'return' => 'بازگشت به لیست مدیران', + 'allow' => 'اجازه دسترسی', + 'inherit' => 'ارث بری', + 'deny' => 'عدم دسترسی', + 'group' => [ + 'name' => 'گروه', + 'name_field' => 'نام', + 'menu_label' => 'گروه ها', + 'list_title' => 'مدیریت گروه ها', + 'new' => 'گروه مدیریت جدید', + 'delete_confirm' => 'آیا از حذف این گروه از مدیران اطمینان دارید?', + 'return' => 'بازگشت به لیست گروه ها', + ], + 'preferences' => [ + 'not_authenticated' => 'هیچ کاربر ثبت شده ای جهت بارگذاری یا ذخیره تنظیمات وجود ندارد.' + ] + ], + 'list' => [ + 'default_title' => 'لیست', + 'search_prompt' => 'جستجو...', + 'no_records' => 'چیزی یافت نشد.', + 'missing_model' => 'هیچ مدلی برای لیست استفاده شده در کلاس :class تعریف نشده است.', + 'missing_column' => 'ستونی برای :columns تعریف نشده است.', + 'missing_columns' => 'ستونی برای لیست عریف شده در :class موجود نیست.', + 'missing_definition' => "در لیست تعریف شده ستونی برای ':field' موجود نیست.", + 'behavior_not_ready' => 'لسیت مقدار دهی اولیه شده است ، لطفا بررسی نمایید که متد makeLists() در کنترلر خود فراخوانی کرده باشید.', + 'invalid_column_datetime' => "ستون ':column' از نوع شی تاریخ نمی باشد ، لطفا بررسی نمایید که این ستون در مدل از نوع تاریخ تعریف شده باشد.", + 'pagination' => 'نمایش :from تا :to از :total مورد', + 'prev_page' => 'صفحه قبل', + 'next_page' => 'صفحه بعد', + 'loading' => 'در حال بارگذاری...', + 'setup_title' => 'راه اندازی لیست', + 'setup_help' => 'ستون هایی را که میخواهید مشاهده نمایید را انتخاب نمایید. میتوانید محل قرار گیری ستونها را با جابجا نمودن آنها به .', + 'records_per_page' => 'مورد در هر صفحه', + 'records_per_page_help' => 'تعداد موارد نمایش داده شده در هر صفحه را انتخاب نمایید. لطفا توجه نمایید نمایش تعداد زیادی از موارد در هر صفحه از کارایی سیستم میکاهد.' + ], + 'fileupload' => [ + 'attachment' => 'فایل ضمیمه', + 'help' => 'برای فایل ضمیمه عنوان و توضیح مختصری وارد نمایید.', + 'title_label' => 'عنوان', + 'description_label' => 'توضیحات' + ], + 'form' => [ + 'create_title' => ":name جدید", + 'update_title' => "ویرایش :name", + 'preview_title' => "پیش نمایش :name", + 'create_success' => ':name با موفقیت ایجاد شد.', + 'update_success' => ':name با موفقیت به روز رسانی شد.', + 'delete_success' => ':name با موفقیت حذف شد.', + 'missing_id' => "رکورد مشخصه (ID) برای فرم انتخاب نشده است.", + 'missing_model' => 'مدلی برای فرن تعریف شده در کلاس :class مشخص نشده است.', + 'missing_definition' => "فرم مورد نظر شامل فیلدی برای ':field' نمی باشد.", + 'not_found' => 'فرمی با مشخصه :id یافت نشد.', + 'create' => 'ایجاد', + 'create_and_close' => 'ایجاد و خروج', + 'creating' => 'در حال ایجاد...', + 'save' => 'ذخیره', + 'save_and_close' => 'ذخیره و خروج', + 'saving' => 'در حال ذخیره...', + 'delete' => 'حذف', + 'deleting' => 'در حال حذف...', + 'undefined_tab' => 'متفرقه', + 'field_off' => 'خاموش', + 'field_on' => 'روشن', + 'add' => 'افزودن', + 'apply' => 'اعمال', + 'cancel' => 'انصراف', + 'close' => 'خروج', + 'ok' => 'تایید', + 'or' => 'یا', + 'confirm_tab_close' => 'در صورت بستن این پنجره موارد ذخیره نشده از بین خواهند رفت. آیا از حذف شدن این پنجره اطمینان دارید؟', + 'behavior_not_ready' => 'فرم مور نظر مقدار دهی اولیه نشده است ، بررسی کنید که متد initForm() در کنترلر فرتخوانی شده باشد.', + 'preview_no_files_message' => 'فایل ها ارسال نشدند', + 'select' => 'انتخاب', + 'select_all' => 'همه', + 'select_none' => 'هیچ', + 'select_placeholder' => 'لطفا انتخاب نمایید', + 'insert_row' => 'افزودن سطر', + 'delete_row' => 'حذف سطر', + 'concurrency-file-changed-title' => 'فایل تغییر کرد', + 'concurrency-file-changed-description' => 'فایلی که شما ویرایش کردید توسط کاربر دیگری تغییر یافته و ذخیره شده است. شما میتوانید فایل را مجددا بارگذاری نمایید و تغییراتی که اعمال کرده اید را از دست بدهید و یا تغییرات اعمال شده توسط آن کاربر را بین برده و فایل را بازنویسی نمایید.', + 'reload' => 'بارگذاری مجدد', + ], + 'relation' => [ + 'missing_definition' => "در ارتباط مورد نظر فیلد ':field' وجود ندارد.", + 'missing_model' => "مدلی برای ارتباط موجود در :class وجود ندارد.", + 'invalid_action_single' => "این عمل در ارتباط یک تعرفه نمبتواند اعمال شود.", + 'invalid_action_multi' => "این عمل در ارتباط چند طرفه نمیتواند اعمال شود.", + 'help' => "بر روی یک گزینه کلیک کنید تا افزوده شود", + 'related_data' => "اعلاعات :name مرتبط", + 'add' => "افزودن", + 'add_selected' => "افرودن انتخاب شده ها", + 'add_a_new' => ":name جدید", + 'cancel' => "انصراف", + 'add_name' => "افزودن :name", + 'create' => "ایجاد", + 'create_name' => "ایجاد :name", + 'update' => "بروز رسانی", + 'update_name' => "بروز رسانی :name", + 'remove' => "حذف", + 'remove_name' => "حذف :name", + 'delete' => "حذف", + 'delete_name' => "حذف :name", + 'delete_confirm' => "آیا اطمینان دارید؟", + ], + 'model' => [ + 'name' => "مدل", + 'not_found' => "مدل ':class' با مشخصه ی :id یافت نشد", + 'missing_id' => "مشخصه ای برای مودل مورد نظر یافت نشد.", + 'missing_relation' => "مدل ':class' شامل تعریفی از ':relation'.", + 'invalid_class' => "مدل :model استفاده شده در :class معتبر نمی باشد، این مدل باید از کلاس \Model ارث برده باشد.", + 'mass_assignment_failed' => "Mass assignment failed for Model attribute ':attribute'.", + ], + 'warnings' => [ + 'tips' => 'راهنمایی پیکر بندی سیستم', + 'tips_description' => 'مشکلاتی در پیکربندی سیستم وجود دارد، شما باید تنظیمات زیر را بررسی نمایید.', + 'permissions' => 'پوشه :name یا یکی از زیر پوشه های آن برای PHP قابل نوشتن نیستند. لطفا تنظیمات این پوشه را تعییر دهید.', + 'extension' => 'افزونه PHP با نام :name نصب نشده است. لطفن این افزونه را نصب کرده و فعال نمایید.' + ], + 'editor' => [ + 'menu_label' => 'تنظیمات ویرایشگر کد', + 'menu_description' => 'سفارشی سازی ویرایشگر کد، مانند اندازه فونت و رنگ بندی آن.', + 'font_size' => 'اندازه فونت', + 'tab_size' => 'اندازه کاراکتر TAB', + 'use_hard_tabs' => 'فاصله گذاری با استفاده از TAB', + 'code_folding' => 'بلاک بندی کدها', + 'word_wrap' => 'چیدمان کلمات', + 'highlight_active_line' => 'مشخص نودن خط فعال', + 'show_invisibles' => 'نمایش کاراکتر های مخفی', + 'show_gutter' => 'نمایش نشانگر', + 'theme' => 'رنگ بندی', + ], + 'tooltips' => [ + 'preview_website' => 'پیش نماسش وب سایت' + ], + 'mysettings' => [ + 'menu_label' => 'تنظیمات من', + 'menu_description' => 'تنظیمات مربوط به حساب کاربری شما', + ], + 'myaccount' => [ + 'menu_label' => 'حساب کاربری من', + 'menu_description' => 'به روز رسانی اطلاعات حساب کار بری شما مانند نام و کلمه عبور و ... .', + 'menu_keywords' => 'ورود امن' + ], + 'backend_preferences' => [ + 'menu_label' => 'تنظیمات مدیریت', + 'menu_description' => 'تنظیمات مربوط به زبان مربوط به قسمت مدیریت.', + 'locale' => 'زبان', + 'locale_comment' => 'زبان مورد نظر خود را انتخاب نمایید.', + ], + 'access_log' => [ + 'hint' => 'این لیست نشاندهنده ورود کاربران مدیر به سیستم می باشد. موارد برای مدت :days روز نگهداری می شوند.', + 'menu_label' => 'ثبت دسترسی ها', + 'menu_description' => 'نمایش لیست ورود موفقیت آمیز کاربران مدیر.', + 'created_at' => 'زمان و تاریخ', + 'login' => 'ورود', + 'ip_address' => 'آدرس آی پی', + 'first_name' => 'نام', + 'last_name' => 'نام خوانوادگی', + 'email' => 'پست الکترونیکی', + ], + 'filter' => [ + 'all' => 'همه' + ], + 'layout' => [ + 'direction' => 'rtl' + ] +]; diff --git a/modules/backend/models/BackendPreferences.php b/modules/backend/models/BackendPreferences.php index f60bf927e..1d2fbdf06 100644 --- a/modules/backend/models/BackendPreferences.php +++ b/modules/backend/models/BackendPreferences.php @@ -49,6 +49,7 @@ class BackendPreferences extends Model 'it' => [Lang::get('system::lang.locale.it'), 'flag-it'], 'ro' => [Lang::get('system::lang.locale.ro'), 'flag-ro'], 'pt-br' => [Lang::get('system::lang.locale.pt-br'), 'flag-br'], + 'fa' => [Lang::get('system::lang.locale.fa'), 'flag-ir'], ]; // Sort locales alphabetically diff --git a/modules/cms/lang/fa/lang.php b/modules/cms/lang/fa/lang.php new file mode 100644 index 000000000..2645b8e12 --- /dev/null +++ b/modules/cms/lang/fa/lang.php @@ -0,0 +1,173 @@ + [ + 'invalid_file' => 'نام :name برای فایل نام معتبر است. نام فایل میتواند شامل کاراکتر ، خط تیره و نقطه باشد. لعنوان مثال page.htm، page و subdirectory/page', + 'invalid_property' => 'عدم توانایی در تغییر خاصیت ":name"', + 'file_already_exists' => 'فایلی با نام ":name" موجود است.', + 'error_saving' => 'خطا در ذخیره فایل ":name". لطفا حق دسترسی ها را بررسی نمایید.', + 'error_creating_directory' => 'خطا در ایجاد پوشه ی :name. لطفا حق دسترسی ها را بررسی نمایید.', + 'invalid_file_extension'=>'پسوند :invalid برای فایل نا معتبر است. پسوند های معتبر عبارتند از: :allowed.', + 'error_deleting' => 'خطا در خذف فایل ":name". لطفا حق دسترسی ها را بررسی نمایید.', + 'delete_success' => 'تعداد :count فایل با موفقیت حذف شد.', + 'file_name_required' => 'نام فایل را وارد نمایید.' + ], + 'theme' => [ + 'active' => [ + 'not_set' => "قالب فعال مشخص نشده است.", + 'not_found' => "قالب فعال یافت نشد.", + ], + 'edit' => [ + 'not_set' => "قالب ویرایش مشخص نشده ایت.", + 'not_found' => "قالب ویرایش یافت نشد.", + 'not_match' => "شی مورد مظر شما در قالبی که ویرایش می کنید یافت نشد. لطفا صفحه را مجددا بارگذاری نمایید." + ], + 'settings_menu' => 'قالب نمایشی', + 'settings_menu_description' => 'پیش نمایش قالب های موجود و انتخاب قالب فعال.', + 'find_more_themes' => 'دریافت قالب های بیشتر.', + 'activate_button' => 'فعال کردن', + 'active_button' => 'فعال', + ], + 'page' => [ + 'not_found' => [ + 'label' => "صفحه مورد نظر یافت نشد", + 'help' => "صفحه مورد نظر یافت نشد.", + ], + 'custom_error' => [ + 'label' => "خطای صفحه", + 'help' => "متاسفانه مشکلی در نمایش صفحه مورد نظر به وجود آمده است.", + ], + 'menu_label' => 'صفخات', + 'no_list_records' => 'صفحه ای یافت نشد', + 'new' => 'New page', + 'invalid_url' => 'قالب آدرس صحیح نمی باشد. آدرس باید با اسلش شروع شده و می تواند شامل اعداد، خروف لاتین و این کاراکتر ها باشد: ._-[]:?|/+*', + 'delete_confirm_multiple' => 'آیا از حذف صفحات انتخاب شده اطمینان دارید؟', + 'delete_confirm_single' => 'آیا از حذف این صفحه اطمینان دارید؟', + 'no_layout' => '-- بدون طرح بندی --' + ], + 'layout' => [ + 'not_found' => "طرح بندی ی ':name' یافت نشد", + 'menu_label' => 'طرح بندی ها', + 'no_list_records' => 'طرحبندی یافت نشد', + 'new' => 'طرح بندی جدید', + 'delete_confirm_multiple' => 'آیا از حذف طرح بندی های انتخاب شده اطمینان دارید؟', + 'delete_confirm_single' => 'آیا از حذف این طرحبندی اطمینان دارید؟' + ], + 'partial' => [ + 'invalid_name' => "نام بخش نا معتبر است: :name.", + 'not_found' => "بخشی با نام ':name' یافت نشد.", + 'menu_label' => 'بخش ها', + 'no_list_records' => 'بخشی وجود ندارد', + 'delete_confirm_multiple' => 'آیا از حذف بخش های انتخاب شده اطمینان دارید؟', + 'delete_confirm_single' => 'آیا از حذف این بخش بندی اطمینان دارید؟', + 'new' => 'بخش بندی جدید' + ], + 'content' => [ + 'not_found' => "فایل محتوای ':name' یافت نشد.", + 'menu_label' => 'محتوا', + 'no_list_records' => 'هیچ فایل محتوایی وجود ندارد', + 'delete_confirm_multiple' => 'آیا از خذف فایل ها و یا پوشه های انتخاب شده اطمینان دارید؟', + 'delete_confirm_single' => 'آیا از حذف این فایل اطمینان دارید؟', + 'new' => 'فایل محتوی جدید' + ], + 'ajax_handler' => [ + 'invalid_name' => "نام کنترل کننده آژاکس نا معتبر است: :name.", + 'not_found' => "کنترل کننده آژاکس ':name' یافت نشد.", + ], + 'combiner' => [ + 'not_found' => "فایل ترکیب کننده ':name' یافت نشد.", + ], + 'cms' => [ + 'menu_label' => "مدیریت محتوی" + ], + 'sidebar' => [ + 'add' => 'افزودن', + 'search' => 'جستجو...' + ], + 'editor' => [ + 'settings' => 'تنظیمات', + 'title' => 'عنوان', + 'new_title' => 'عنوان صفحه جدید', + 'url' => 'آدرس', + 'filename' => 'تام فایل', + 'layout' => 'طرح بندی', + 'description' => 'توضیحات', + 'preview' => 'پیش نمایش', + 'meta' => 'متا', + 'meta_title' => 'عنوان متا', + 'meta_description' => 'توضیحات متا', + 'markup' => 'نشانه گذاری', + 'code' => 'کد', + 'content' => 'محتوی', + 'hidden' => 'مخفی', + 'hidden_comment' => 'صفحات مخفی فقط برای کاربران وارد شده به سیستم نمایش داده می شود.', + 'enter_fullscreen' => 'حالت تمام صفحه', + 'exit_fullscreen' => 'خروج از حالت تمام صفحه' + ], + 'asset' => [ + 'menu_label' => "فایلها", + 'drop_down_add_title' => 'افزودن...', + 'drop_down_operation_title' => 'عملیات...', + 'upload_files' => 'افزودن فایل(ها)', + 'create_file' => 'ایجاد فایل', + 'create_directory' => 'ایجاد پوشه', + 'directory_popup_title' => 'پوشه ی جدید', + 'directory_name' => 'نام پوشه', + 'rename' => 'تغییر نام', + 'delete' => 'حذف', + 'move' => 'جابحایی', + 'select' => 'انتخاب', + 'new' => 'فایل جدید', + 'rename_popup_title' => 'تغییر نام', + 'rename_new_name' => 'نام جدید', + 'invalid_path' => 'مسیر می تواند فقط شلمل اعداد، حروف لاتین، حط فاصلع و این کاراکتر ها باشد: ._-/', + 'error_deleting_file' => 'در حذف فایل :name مشکلی به وجود آمده است.', + 'error_deleting_dir_not_empty' => 'در حذف پوشه ی :name مشکلی به وجود آمده است. پوشه خالی نیست.', + 'error_deleting_dir' => 'خطایی در حذف :name به وجود آمده است.', + 'invalid_name' => 'نام میتوامد شامل اعداد، خروف لاتین، خط فاصله و این کاراکتر ها باشد: ._-', + 'original_not_found' => 'فایل یا پوشه ی اصلی یافت نشد.', + 'already_exists' => 'فایل یا پوشه ای با این نام وجود دارد.', + 'error_renaming' => 'در تغییر نام فایل یا پوشه مورد نظر خطایی رخ داده است', + 'name_cant_be_empty' => 'نام منی تواند خالی باشد', + 'too_large' => 'فایل ارسال شده بیش از حد حجیم اشت. بیشترین حجم مورد قبول :max_size می باشد', + 'type_not_allowed' => 'فقط این نوع فایل ها قابل قبول می باشد: :allowed_types', + 'file_not_valid' => 'فال نا معتبر است', + 'error_uploading_file' => 'خطا در ارسال فال ":name": :error', + 'move_please_select' => 'اطفا انتخاب نمایید', + 'move_destination' => 'پوشه مورد نظر', + 'move_popup_title' => 'جابجایی فایل', + 'move_button' => 'جابجایی', + 'selected_files_not_found' => 'فایل انتخاب شده یافت نشد', + 'select_destination_dir' => 'لطفا پوشه ی مورد نظر را انتخاب نمایید', + 'destination_not_found' => 'پوشه مورد نظر یافت نشد', + 'error_moving_file' => 'خطایی در جابجایی :file رخ داده است', + 'error_moving_directory' => 'خطایی در جابجایی :dir رخ داده است', + 'error_deleting_directory' => 'خطایی در حذف :dir رخ داده است', + 'path' => 'Path' + ], + 'component' => [ + 'menu_label' => "ابرار ها", + 'unnamed' => "بدون نام", + 'no_description' => "توصیحات وجود ندارد", + 'alias' => "نام مستعار", + 'alias_description' => "نام یکتایی که به این ابزار داده می شود تا درون صفحات و طرح بندی ها به این ابزار اشاره کند.", + 'validation_message' => "نام مستعار برای ابزار مورد نیاز بوده و می تواند شامل حروف لاتین، اعداد، و خط زیر باشد و باید با حرف لاتین شروع شود.", + 'invalid_request' => "بدلیل داده ی نا معتبر ابزار امکان ذخیره قالب وجود ندارد.", + 'no_records' => 'ابزاری یافت نشد', + 'not_found' => "ابزار ':name' یافت نشد.", + 'method_not_found' => "ابزار ':name' شامل متدی با نام ':method' نمی باشد.", + ], + 'template' => [ + 'invalid_type' => "نوع قالب معتبر نمی باشد.", + 'not_found' => "قالب درخواست شده یافت نشد.", + 'saved'=> "قالب با موفقیت ذخیره شد." + ], + 'permissions' => [ + 'manage_content' => 'مدیریت محتوی', + 'manage_assets' => 'مدیریت فایلها', + 'manage_pages' => 'مدیریت صفحات', + 'manage_layouts' => 'مدیریت طرح بندی ها', + 'manage_partials' => 'مدیریت بخش ها', + 'manage_themes' => 'مدیریت قالب ها' + ] +]; \ No newline at end of file diff --git a/modules/system/lang/de/lang.php b/modules/system/lang/de/lang.php index cf104e1fb..cddcfcbd2 100644 --- a/modules/system/lang/de/lang.php +++ b/modules/system/lang/de/lang.php @@ -17,6 +17,7 @@ return [ 'it' => 'Italian', 'ro' => 'Romana', 'pt-br' => 'Brazilian Portuguese', + 'fa' => 'Persian', ], 'directory' => [ 'create_fail' => "Konnte Verzeichnis: :name nicht erstellen", diff --git a/modules/system/lang/en/lang.php b/modules/system/lang/en/lang.php index 5323f7761..8329fbd9d 100644 --- a/modules/system/lang/en/lang.php +++ b/modules/system/lang/en/lang.php @@ -17,6 +17,7 @@ return [ 'it' => 'Italian', 'ro' => 'Romana', 'pt-br' => 'Brazilian Portuguese', + 'fa' => 'Persian', ], 'directory' => [ 'create_fail' => "Cannot create directory: :name", diff --git a/modules/system/lang/fa/lang.php b/modules/system/lang/fa/lang.php new file mode 100644 index 000000000..c1beca058 --- /dev/null +++ b/modules/system/lang/fa/lang.php @@ -0,0 +1,237 @@ + [ + 'name' => 'مدیریت محتوی اکتبر', + 'motto' => 'بازگشت به گذشته', + ], + 'locale' => [ + 'en' => 'انگلیسی', + 'nl' => 'هلندی', + 'ja' => 'ژاپنی', + 'se' => 'سوئدی', + 'tr' => 'ترکی', + 'de' => 'آلمانی', + 'ru' => 'روسی', + 'fr' => 'فرانسوی', + 'it' => 'ایتالیایی', + 'ro' => 'رومانیایی', + 'pt-br' => 'پرتغالی برزیل', + 'fa' => 'فارسی', + ], + 'directory' => [ + 'create_fail' => "مشکلی در ایجاد پوشه ی :name به وجود آمده است", + ], + 'file' => [ + 'create_fail' => "مشکلی در ایجاد فایل :name به وجود آمده است", + ], + 'system' => [ + 'name' => 'سیستم', + 'menu_label' => 'سیستم', + 'categories' => [ + 'cms' => 'مدیریت محتوی', + 'misc' => 'متفرقه', + 'logs' => 'وقایع', + 'mail' => 'پست الکترونیکی', + 'shop' => 'فروشگاه', + 'team' => 'تیم', + 'users' => 'کاربران', + 'system' => 'سیستم', + 'social' => 'شبکه اجتماعی', + 'events' => 'رویداد ها', + 'customers' => 'مشتریان', + 'my_settings' => 'تنظیمات من', + ], + ], + 'plugin' => [ + 'unnamed' => 'افزونه بدون نام', + 'name' => [ + 'label' => 'نام افزونه', + 'help' => 'افزونه را با نام یکتایی نام گذاری کنید. برای مثال: RainLab.Blog', + ], + ], + 'plugins' => [ + 'manage' => 'مدیریت افزونه ها', + 'enable_or_disable' => 'فعال یا غیر فعال کردن', + 'enable_or_disable_title' => 'فعال یا غیر فعال کردن افزونه ها', + 'remove' => 'خذف', + 'refresh' => 'تازه کردن', + 'disabled_label' => 'غیر فعال', + 'disabled_help' => 'افزونه های غیر فعال توسط برنامه نادیده گرفته می شوند.', + 'selected_amount' => 'افزونه های انتخاب شده: :amount', + 'remove_confirm' => 'آیا اطمینان دارید؟', + 'remove_success' => "افزونه های با موفقیت از سیستم حذف شدند.", + 'refresh_confirm' => 'آیا اطمینان دارید؟', + 'refresh_success' => "افزونه ها با موفقیت بارگذاری مجدد شدند.", + 'disable_confirm' => 'آیا اطمینان دارید؟', + 'disable_success' => "افزونه ها با موفقیت غیر فعال شدند.", + 'enable_success' => "افرونه ها با موفقیت فعال شدند.", + 'unknown_plugin' => "افرونه ها با موفقیت پاک شدند.", + ], + 'project' => [ + 'name' => 'پروژه', + 'owner_label' => 'صاحب امتیاز', + 'attach' => 'افرودن به پروژه', + 'detach' => 'حذف از پروژه', + 'none' => 'هیچ', + 'id' => [ + 'label' => 'مشخصه ی پروژه', + 'help' => 'مشخصه ی پروژه ی خود را چگونه بیابید', + 'missing' => 'لطفا مشخصه ی پروژهی خود را وارد نمایید.', + ], + 'detach_confirm' => 'آیا از حذف این پروژه اطمینان دارید؟', + 'unbind_success' => 'پروژه با موفقیت پاک شد.', + ], + 'settings' => [ + 'menu_label' => 'تنظیمات', + 'missing_model' => 'صفحه تنظیمات شامل یک مدل تعریف نشده می باشد.', + 'update_success' => 'تنظیمات برای :name با موفقیت تغییر یافتند.', + 'return' => 'بازگشت به تنظیمات سیستم', + 'search' => 'جستجو' + ], + 'mail' => [ + 'menu_label' => 'تنظیمات پست الکترونیکی', + 'menu_description' => 'مدیریت تنظیمات پست الکترونیکی.', + 'general' => 'عمومی', + 'method' => 'روش ارسال', + 'sender_name' => 'نام ارسال کننده', + 'sender_email' => 'پست الکترونیکی ارسال کننده', + 'smtp' => 'SMTP', + 'smtp_address' => 'آدرس SMTP', + 'smtp_authorization' => 'مجوز اتصال به SMTP مورد نیاز است', + 'smtp_authorization_comment' => 'این گزیتع را جهت اتصال به سرور SMTP در صورت نیاز فعال نمایید.', + 'smtp_username' => 'نام کاربری', + 'smtp_password' => 'کلمه عبور', + 'smtp_port' => 'درگاه SMTP', + 'smtp_ssl' => 'اتصال امن SSL مورد نیاز است', + 'sendmail' => 'Sendmail', + 'sendmail_path' => 'محل Sendmail', + 'sendmail_path_comment' => 'لطفا محل ذخیره نرم افزار sendmail را مشخص نمایید.', + ], + 'mail_templates' => [ + 'menu_label' => 'قالب های نامه الکترونیکی', + 'menu_description' => 'مدیریت و تغییر قالب های نامه الکترونیکی که برای کاربران و مدیران ارسال می شود، مدیریت طرح بندی نامه الکترونیکی.', + 'new_template' => 'قالب جدید', + 'new_layout' => 'طرح بندی ی جدید', + 'template' => 'قالب', + 'templates' => 'قالب ها', + 'menu_layouts_label' => 'طرح بندی نامه الکترونیکی', + 'layout' => 'طرح بندی', + 'layouts' => 'طرح بندی ها', + 'name' => 'نام', + 'name_comment' => 'نام یکتای مشخص کننده ی این قالی', + 'code' => 'کد', + 'code_comment' => 'کد یکتای مشخص کننده ی این قالب', + 'subject' => 'موضوع', + 'subject_comment' => 'موجوع نامه الکترونیکی', + 'description' => 'توضیحات', + 'content_html' => 'اچ تی ام ال', + 'content_css' => 'شیوه نامه', + 'content_text' => 'متن معمولی', + 'test_send' => 'ارسال پیغام آزمایشی', + 'test_success' => 'پیغان آزمایشی ارسال شد.', + 'return' => 'بازگشت به لیست قالب ها' + ], + 'install' => [ + 'project_label' => 'ضمیمه کردن به نرم افزار', + 'plugin_label' => 'نصب افزونه', + 'missing_plugin_name' => 'لطفان نام افزونه را جهت نصب وارد نمایید.', + 'install_completing' => 'مرحله ی پایانی عملیات نصب', + 'install_success' => 'افزونه با موفقیت نصب شد.', + ], + 'updates' => [ + 'title' => 'مدیریت بروز رسانی', + 'name' => 'بروز رسانی نرم افزار', + 'menu_label' => 'بروز رسانی ها', + 'menu_description' => 'به روز رسانی ی سیستم، مدیریت افزونه ها و قالب های نصب شده.', + 'check_label' => 'بررسی بروز رسانی', + 'retry_label' => 'تلاش مجدد', + 'plugin_name' => 'نام', + 'plugin_description' => 'توضیحات', + 'plugin_version' => 'نسخه', + 'plugin_author' => 'تولید کننده', + 'core_build' => 'نسخه ی کنونی', + 'core_build_old' => 'نسخه ی کنونی :build', + 'core_build_new' => 'نسخه ی :build', + 'core_build_new_help' => 'آخرین نسخه موجود است.', + 'core_downloading' => 'دریافت فایل های نرم افزار', + 'core_extracting' => 'گشودن فایل های نرم افزار', + 'plugin_downloading' => 'دریافت افزونه: :name', + 'plugin_extracting' => 'گشودن افزونه: :name', + 'plugin_version_none' => 'افزونه ی جدید', + 'plugin_version_old' => 'نسخه کنونی:version', + 'plugin_version_new' => 'مسخه:version', + 'theme_label' => 'قالب', + 'theme_new_install' => 'قالب جدید نصب شد.', + 'theme_downloading' => 'دریافت قالب: :name', + 'theme_extracting' => 'گشودن قالب: :name', + 'update_label' => 'بروز رسانی نرم افزار', + 'update_completing' => 'اعمال بروز رسانی', + 'update_loading' => 'بارگزاری بروز رسانی های موجود...', + 'update_success' => 'بروز رسانی با موفقیت انجام شد..', + 'update_failed_label' => 'بروز رسانی موفق نبود', + 'force_label' => 'اصرار در بروز رسانی', + 'found' => [ + 'label' => 'بروز رسانی جدیدی یافت شده است!', + 'help' => 'بر روی بروز رسانی نرم افزار جهت شروع عملیات بروز رسانی کلیک کنید.', + ], + 'none' => [ + 'label' => '0 به روز رسانی', + 'help' => 'هیچ به روز رسانی یافت نشد.', + ], + ], + 'server' => [ + 'connect_error' => 'خطا در برقراری ارتباط با سرور.', + 'response_not_found' => 'سرور به روز رسانی یافت نشد.', + 'response_invalid' => 'پاسخ نا معتبر از سوی سرور.', + 'response_empty' => 'پاسخ خالی از سوی سرور.', + 'file_error' => 'خطا در ارسال یا دریافت بسته به سرور.', + 'file_corrupt' => 'فایل دریافت شده از سرور ناقص است.', + ], + 'behavior' => [ + 'missing_property' => 'کلاس :class باید شامل خصوصیت $:property که در :behavior استفاده شده است باشد.', + ], + 'config' => [ + 'not_found' => 'فایل پیکربندی :file تعریف شده در :location یافت نشد.', + 'required' => "پیکربندی استفاده شده در :location باید مقدار ':property' را ارائه نماید.", + ], + 'zip' => [ + 'extract_failed' => "عدم توانایی در گسودن فایل هسته ':file'.", + ], + 'event_log' => [ + 'hint' => 'این گزارش نمایش دهنده خطاهای عملکردی در سیستم می باشد، مانند خطاهای در حال اجرا و اطلاغات خطایابی.', + 'menu_label' => 'گزارش رویدادها', + 'menu_description' => 'نمایش گزارش های سیستمی همراه با زمان و توضیح آنها.', + 'empty_link' => 'پاک سازی گزارش رویداد ها', + 'empty_loading' => 'درحال پاکسازی گزارشها...', + 'empty_success' => 'گزارشها با موفقیت پاک شدند.', + 'return_link' => 'بازگشت به گزارش رویداد ها', + 'id' => 'مشخصه', + 'id_label' => 'مشخصه ی رویداد', + 'created_at' => 'ساعت و تاریخ', + 'message' => 'پیغام', + 'level' => 'مرحله', + ], + 'request_log' => [ + 'hint' => 'این گزارش درخواستهایی از طرف مرورگر را که نیاز به بررسی دارند را نمایش می دهد. به عنوان مثال اکر بازدید کنند صفحه ای را که موجود نیست درخواست کند، یک گزینه با کد وضعیت 404 ایجاد می شود.', + 'menu_label' => 'گزارش درخواست ها', + 'menu_description' => 'نمایش درخواستهای مشکل ساز و انتقال داده شده مانند خطای : صفحه مورد نظر یافت نشد 404.', + 'empty_link' => 'پاک کردن گزارش دخواستها', + 'empty_loading' => 'در حال پاکسازی...', + 'empty_success' => 'گزارش درخواستها با موفقیت پاکسازی شد.', + 'return_link' => 'بازگشت به گزارش درخواستها', + 'id' => 'مشخصه', + 'id_label' => 'مشخصه ی گزارش', + 'count' => 'شمارشگر', + 'referer' => 'معرف ها', + 'url' => 'آردس', + 'status_code' => 'وضعیت', + ], + 'permissions' => [ + 'manage_system_settings' => 'مدیریت تنظیمات سیستم', + 'manage_software_updates' => 'مدیریت به روز رسانی نرم افزار', + 'manage_mail_templates' => 'مدیریت قالب پست الکترونیکی', + 'manage_other_administrators' => 'مدیریت سایر مدیران', + 'view_the_dashboard' => 'نمایش صفحه مدیریت' + ] +]; diff --git a/modules/system/lang/fa/validation.php b/modules/system/lang/fa/validation.php new file mode 100644 index 000000000..cb1c0a24f --- /dev/null +++ b/modules/system/lang/fa/validation.php @@ -0,0 +1,98 @@ + ":attribute باید مورد قبولتان باشد.", + "active_url" => ":attribute آدرس الکترونیکی معتبری نیست.", + "after" => ":attribute باید تاریخی بعد از :date باشد.", + "alpha" => ":attribute فقط میتواند حاوی حروف انگلیسی باشد.", + "alpha_dash" => ":attribute فقط میتواند شامل حروف انگلیسی، اعداد و خط تیره باشد.", + "alpha_num" => ":attribute فقط میتواند شامل حروف انگلیسی و عدد باشد.", + "array" => ":attribute باید یک آرایه باشد.", + "before" => ":attribute باید تاریخی قبل از :date باشد.", + "between" => array( + "numeric" => ":attribute میتواند مابین :min و :max باشد.", + "file" => "اندازه ی :attribute بای مابین :min و :max کیلوبایت باشد.", + "string" => ":attribute باید مابین :min و :max کاراکتر باشد.", + "array" => ":attribute باید شامل :min تا :max مورد باشد.", + ), + "confirmed" => "مقداری :attribute با تاییدیه اش یکسان نیست.", + "date" => ":attribute تاریخ معتبری نیست.", + "date_format" => "مقدار :attribute در قالب :format نمی باشد.", + "different" => "مقدار :attribute و :other نباید یکسان باشد.", + "digits" => "مقدار :attribute باید یم عدد :digits رقمی باشد.", + "digits_between" => "مقدار :attribute باید ما بین :min و :max باشد.", + "email" => "قالب :attribute نامعتبر است.", + "exists" => ":attribute انتخاب شده نامعتبر است.", + "image" => ":attribute باید یک تصویر باشد.", + "in" => ":attribute انتخاب شده نا معتبر است.", + "integer" => ":attribute باید یک عدد صحیح باشد.", + "ip" => ":attribute حاوی یک آدرس آی پی معتبر نیست.", + "max" => array( + "numeric" => ":attribute نباید بیشتر از :max باشد.", + "file" => ":attribute نباید بیش از :max کیلوبایت باشد.", + "string" => ":attribute نباید بیش از :max کاراکتر باشد.", + "array" => ":attribute نباید بیش تر از :max مورد داشته باشد.", + ), + "mimes" => ":attribute باید فایلی از نوع :values باشد.", + "min" => array( + "numeric" => "مقدار :attribute باید حد اقل :min باشد.", + "file" => ":attribute باید حداقل :min کیلوبایت باشد.", + "string" => ":attribute باید شامل حداقل :min کاراکتر باشد.", + "array" => ":attribute باید شامل حد اقل :min مورد باشد.", + ), + "not_in" => ":attribute انتخاب شده نا معتبر است.", + "numeric" => "مقدار :attribute باید یم مقدار عددی باشد.", + "regex" => "قالب :attribute نا معتبر است.", + "required" => "وارد کردن :attribute الزامیست.", + "required_if" => "اگر مقدار :other برابر با :value باشد وارد کردن :attribute الزامیست.", + "required_with" => "فیل :attribute در صورتی که :values موجود باشد مورد نیاز است.", + "required_without" => "فیلد :attribute در صورتی که مقدار :values وجود نداشته باشد مورد نیاز است.", + "same" => ":attribute و :other باید مقدار یکسانی داشته باشند.", + "size" => array( + "numeric" => ":attribute باید به اندازه ی :size باشد.", + "file" => ":attribute باید :size کیلوبایت باشد.", + "string" => ":attribute باید :size کاراکتر باشد.", + "array" => ":attribute باید شامل :size مورد باشد.", + ), + "unique" => ":attribute استفاده شده تکراری می باشد.", + "url" => "قالب :attribute نا معتبر است.", + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => array(), + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => array(), + +); diff --git a/modules/system/lang/fr/lang.php b/modules/system/lang/fr/lang.php index e741f5cec..bd8b3916f 100644 --- a/modules/system/lang/fr/lang.php +++ b/modules/system/lang/fr/lang.php @@ -15,6 +15,7 @@ return [ 'ru' => 'Russe', 'fr' => 'Français', 'pt-br' => 'Portugais-Brésilien', + 'fa' => 'Persian', ], 'directory' => [ 'create_fail' => "Impossible de créer le répertoire : :name", diff --git a/modules/system/lang/it/lang.php b/modules/system/lang/it/lang.php index 487c4ffa7..48a826a8e 100644 --- a/modules/system/lang/it/lang.php +++ b/modules/system/lang/it/lang.php @@ -16,6 +16,7 @@ return [ 'fr' => 'Francese', 'it' => 'Italiano', 'pt-br' => 'Portoghese (Brasile)', + 'fa' => 'Persian', ], 'directory' => [ 'create_fail' => "Impossibile creare la cartella: :name", diff --git a/modules/system/lang/ja/lang.php b/modules/system/lang/ja/lang.php index abe5cc6fd..b8babf08b 100644 --- a/modules/system/lang/ja/lang.php +++ b/modules/system/lang/ja/lang.php @@ -17,6 +17,7 @@ return [ 'it' => 'Italian', 'ro' => 'Romana', 'pt-br' => 'Brazilian Portuguese', + 'fa' => 'Persian', ], 'directory' => [ 'create_fail' => "ディレクトリーが作成できません: :name", diff --git a/modules/system/lang/nl/lang.php b/modules/system/lang/nl/lang.php index 9a4ccc7f3..c12e92329 100644 --- a/modules/system/lang/nl/lang.php +++ b/modules/system/lang/nl/lang.php @@ -17,6 +17,7 @@ return [ 'it' => 'Italiaans', 'ro' => 'Roemeens', 'pt-br' => 'Braziliaans Portugees', + 'fa' => 'Persian', ], 'directory' => [ 'create_fail' => "Map aanmaken mislukt: :name", diff --git a/modules/system/lang/pt-br/lang.php b/modules/system/lang/pt-br/lang.php index 3b028b507..bb6924c6c 100644 --- a/modules/system/lang/pt-br/lang.php +++ b/modules/system/lang/pt-br/lang.php @@ -17,6 +17,7 @@ return [ 'it' => 'Italiano', 'ro' => 'Romano', 'pt-br' => 'Português do Brasil', + 'fa' => 'Persian', ], 'directory' => [ 'create_fail' => "Não é possível criar o diretório: :name", diff --git a/modules/system/lang/ro/lang.php b/modules/system/lang/ro/lang.php index 9f7646a5f..9c7d7db76 100644 --- a/modules/system/lang/ro/lang.php +++ b/modules/system/lang/ro/lang.php @@ -16,6 +16,7 @@ return [ 'fr' => 'Franceza', 'ro' => 'Romana', 'pt-br' => 'Portugheza (Brazilia)', + 'fa' => 'Persian', ], 'directory' => [ 'create_fail' => "Nu se poate crea directorul: :name", diff --git a/modules/system/lang/ru/lang.php b/modules/system/lang/ru/lang.php index 6aa777fd4..c0c566b25 100644 --- a/modules/system/lang/ru/lang.php +++ b/modules/system/lang/ru/lang.php @@ -17,6 +17,7 @@ return [ 'it' => 'Italian', 'ro' => 'Romana', 'pt-br' => 'Brazilian Portuguese', + 'fa' => 'Persian', ], 'directory' => [ 'create_fail' => "Невозможно создать директорию: :name", diff --git a/modules/system/lang/sv/lang.php b/modules/system/lang/sv/lang.php index 8462962bd..c60c2c778 100644 --- a/modules/system/lang/sv/lang.php +++ b/modules/system/lang/sv/lang.php @@ -17,6 +17,7 @@ return [ 'it' => 'Italian', 'ro' => 'Romana', 'pt-br' => 'Brazilian Portuguese', + 'fa' => 'Persian', ], 'directory' => [ 'create_fail' => "Kunde inte skapa mapp: :name", diff --git a/modules/system/lang/tr/lang.php b/modules/system/lang/tr/lang.php index fb3bae1ee..17cac9da9 100644 --- a/modules/system/lang/tr/lang.php +++ b/modules/system/lang/tr/lang.php @@ -17,6 +17,7 @@ return [ 'it' => 'Italian', 'ro' => 'Romana', 'pt-br' => 'Brazilian Portuguese', + 'fa' => 'Persian', ], 'directory' => [ 'create_fail' => "Klasör oluşturulamıyor: :name", From 2c4317f8f259a0f72661eec059565fe21dfd377f Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Wed, 8 Oct 2014 18:54:45 +1100 Subject: [PATCH 06/22] Allow API to override login Attribute --- modules/backend/controllers/Users.php | 6 +++--- modules/backend/models/User.php | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/backend/controllers/Users.php b/modules/backend/controllers/Users.php index 9c7cdd0c2..5db153b3d 100644 --- a/modules/backend/controllers/Users.php +++ b/modules/backend/controllers/Users.php @@ -84,9 +84,9 @@ class Users extends Controller /** * Add available permission fields to the User form. */ - protected function formExtendFields($host) + protected function formExtendFields($form) { - if ($host->getContext() == 'myaccount') + if ($form->getContext() == 'myaccount') return; $permissionFields = []; @@ -116,6 +116,6 @@ class Users extends Controller $permissionFields[$fieldName] = $fieldConfig; } - $host->addTabFields($permissionFields); + $form->addTabFields($permissionFields); } } \ No newline at end of file diff --git a/modules/backend/models/User.php b/modules/backend/models/User.php index e4fa9c687..30af0514f 100644 --- a/modules/backend/models/User.php +++ b/modules/backend/models/User.php @@ -43,7 +43,10 @@ class User extends UserBase */ protected $purgeable = ['password_confirmation', 'send_invite']; - protected static $loginAttribute = 'login'; + /** + * @var string Login attribute + */ + public static $loginAttribute = 'login'; /** * @return string Returns the user's full name. From 8d5253930d70fdb67acd14082a05f4be177f7bc3 Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Wed, 8 Oct 2014 18:55:09 +1100 Subject: [PATCH 07/22] Form fields can now be marked as hidden --- modules/backend/classes/FormField.php | 6 ++++++ modules/backend/widgets/form/partials/_form_fields.htm | 1 + 2 files changed, 7 insertions(+) diff --git a/modules/backend/classes/FormField.php b/modules/backend/classes/FormField.php index 6646b71fd..942abfaf4 100644 --- a/modules/backend/classes/FormField.php +++ b/modules/backend/classes/FormField.php @@ -83,6 +83,11 @@ class FormField */ public $disabled = false; + /** + * @var bool Specify if the field is hidden. Hiddens fields are not included in postbacks. + */ + public $hidden = false; + /** * @var bool Specifies if this field stretch to fit the page height. */ @@ -245,6 +250,7 @@ class FormField if (array_key_exists('required', $config)) $this->required = $config['required']; if (array_key_exists('disabled', $config)) $this->disabled = $config['disabled']; + if (array_key_exists('hidden', $config)) $this->hidden = $config['hidden']; if (array_key_exists('stretch', $config)) $this->stretch = $config['stretch']; if (isset($config['valueFrom'])) $this->valueFrom = $config['valueFrom']; diff --git a/modules/backend/widgets/form/partials/_form_fields.htm b/modules/backend/widgets/form/partials/_form_fields.htm index 9ff1aa619..477110ce5 100644 --- a/modules/backend/widgets/form/partials/_form_fields.htm +++ b/modules/backend/widgets/form/partials/_form_fields.htm @@ -1,3 +1,4 @@ + hidden) continue; ?> makePartial('field-container', ['field' => $field]) ?> From eff70e23427f49b95527c259d6e11c5c1f24e9a9 Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Wed, 8 Oct 2014 18:55:17 +1100 Subject: [PATCH 08/22] Minor --- modules/backend/widgets/form/partials/_field_dropdown.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/backend/widgets/form/partials/_field_dropdown.htm b/modules/backend/widgets/form/partials/_field_dropdown.htm index 4e55cfe36..7c45fea79 100644 --- a/modules/backend/widgets/form/partials/_field_dropdown.htm +++ b/modules/backend/widgets/form/partials/_field_dropdown.htm @@ -21,7 +21,7 @@ value ? 'selected="selected"' : '' ?> data-="" value=""> - + From f5eff8d74d69b724f35172f58b58dc2802959f41 Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Thu, 9 Oct 2014 08:36:18 +1100 Subject: [PATCH 09/22] Update changelog --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17bc36b07..a6d2f16ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ -* **Build 15x** (2014-10-xx) +* **Build 153** (2014-10-09) - Plugins are now updated in order of their dependency definitions. - Moved `ViewMaker` trait now lives under system, it can be useful for Models too. + - Mailgun support added to Mail settings. + - Form fields can now be marked as **hidden** (see Backend > Forms docs). + - Added Controller behavior extension helpers `extendFormFields` and `extendListColumns`. * **Build 149** (2014-09-29) - Added new `hint` form field type (see Backend > Forms docs). From 7e62ef59257b26f90dbf8ed0f1dc15f8210aacec Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Thu, 9 Oct 2014 17:14:29 +1100 Subject: [PATCH 10/22] Refs #670 - Attempt fix --- modules/cms/classes/Content.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/cms/classes/Content.php b/modules/cms/classes/Content.php index c8f4e5b5c..3aeaaf536 100644 --- a/modules/cms/classes/Content.php +++ b/modules/cms/classes/Content.php @@ -37,8 +37,8 @@ class Content extends CmsCompoundObject */ public static function load($theme, $fileName) { - $obj = parent::load($theme, $fileName); - $obj->parsedMarkup = $obj->parseMarkup(); + if ($obj = parent::load($theme, $fileName)) + $obj->parsedMarkup = $obj->parseMarkup(); return $obj; } @@ -51,9 +51,9 @@ class Content extends CmsCompoundObject { parent::initFromCache($cached); - $this->parsedMarkup = array_key_exists('parsed-markup', $cached) ? - $cached['parsed-markup'] : - $this->parseMarkup($this->markup); + $this->parsedMarkup = array_key_exists('parsed-markup', $cached) + ? $cached['parsed-markup'] + : $this->parseMarkup($this->markup); } /** From d78dadafd088e4a9792dc100299111dcea82fcdb Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Thu, 9 Oct 2014 17:46:23 +1100 Subject: [PATCH 11/22] Check for CLI or system/updates route and disable any plugin initialization --- modules/system/ServiceProvider.php | 9 +++++++++ modules/system/classes/PluginManager.php | 9 +++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/modules/system/ServiceProvider.php b/modules/system/ServiceProvider.php index aabc01181..94cf56830 100644 --- a/modules/system/ServiceProvider.php +++ b/modules/system/ServiceProvider.php @@ -60,6 +60,15 @@ class ServiceProvider extends ModuleServiceProvider App::singleton('backend.menu', function() { return \Backend\Classes\NavigationManager::instance(); }); App::singleton('backend.auth', function() { return \Backend\Classes\AuthManager::instance(); }); + /* + * Check for CLI or system/updates route and disable any plugin initialization + * @todo This should be moved to middleware + */ + $requestPath = \October\Rain\Router\Helper::normalizeUrl(\Request::path()); + $systemPath = \October\Rain\Router\Helper::normalizeUrl(Config::get('cms.backendUri') . '/system/updates'); + if (App::runningInConsole() || stripos($requestPath, $systemPath) === 0) + PluginManager::$noInit = true; + /* * Register all plugins */ diff --git a/modules/system/classes/PluginManager.php b/modules/system/classes/PluginManager.php index 7c8efe11f..2da124526 100644 --- a/modules/system/classes/PluginManager.php +++ b/modules/system/classes/PluginManager.php @@ -56,6 +56,11 @@ class PluginManager */ protected $disabledPlugins = []; + /** + * @var boolean Prevent all plugins from registering or booting + */ + public static $noInit = false; + /** * Initializes the plugin manager */ @@ -111,7 +116,7 @@ class PluginManager */ public function registerAll() { - if ($this->registered) + if ($this->registered || self::$noInit) return; foreach ($this->plugins as $pluginId => $plugin) { @@ -166,7 +171,7 @@ class PluginManager */ public function bootAll() { - if ($this->booted) + if ($this->booted || self::$noInit) return; foreach ($this->plugins as $plugin) { From 1c4706bbbb420702227d703b1c2058fa232a930d Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Thu, 9 Oct 2014 18:08:28 +1100 Subject: [PATCH 12/22] Fixes unit tests so they pass --- modules/cms/classes/Theme.php | 34 ++++++++++++++++++++-------- tests/unit/cms/classes/ThemeTest.php | 1 + 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/modules/cms/classes/Theme.php b/modules/cms/classes/Theme.php index dd0380f03..f6c10ec19 100644 --- a/modules/cms/classes/Theme.php +++ b/modules/cms/classes/Theme.php @@ -32,10 +32,19 @@ class Theme */ protected $configCache = null; + /** + * @var mixed Active theme cache in memory + */ protected static $activeThemeCache = false; + /** + * @var mixed Edit theme cache in memory + */ protected static $editThemeCache = false; + const ACTIVE_KEY = 'cms::theme.active'; + const EDIT_KEY = 'cms::theme.edit'; + /** * Loads the theme. */ @@ -102,12 +111,11 @@ class Theme if (self::$activeThemeCache !== false) return self::$activeThemeCache; - $paramKey = 'cms::theme.active'; $activeTheme = Config::get('cms.activeTheme'); if (DbDongle::hasDatabase()) { - $dbResult = Parameters::findRecord($paramKey) - ->remember(1440, $paramKey) + $dbResult = Parameters::findRecord(self::ACTIVE_KEY) + ->remember(1440, self::ACTIVE_KEY) ->pluck('value') ; @@ -137,12 +145,8 @@ class Theme */ public static function setActiveTheme($code) { - self::$activeThemeCache = false; - self::$editThemeCache = false; - - $paramKey = 'cms::theme.active'; - Parameters::set($paramKey, $code); - Cache::forget($paramKey); + self::resetCache(); + Parameters::set(self::ACTIVE_KEY, $code); } /** @@ -247,4 +251,16 @@ class Theme return URL::asset('themes/'.$this->getDirName().$previewPath); } + + /** + * Resets any memory or cache involved with the active or edit theme. + * @return void + */ + public static function resetCache() + { + self::$activeThemeCache = false; + self::$editThemeCache = false; + Cache::forget(self::ACTIVE_KEY); + Cache::forget(self::EDIT_KEY); + } } diff --git a/tests/unit/cms/classes/ThemeTest.php b/tests/unit/cms/classes/ThemeTest.php index dc148b977..c019af495 100644 --- a/tests/unit/cms/classes/ThemeTest.php +++ b/tests/unit/cms/classes/ThemeTest.php @@ -8,6 +8,7 @@ class ThemeTest extends TestCase { Config::set('cms.activeTheme', 'test'); Event::flush('cms.activeTheme'); + Theme::resetCache(); } protected function countThemePages($path) From 463b971fbf95a3729c086162581723297832e0fd Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Fri, 10 Oct 2014 09:04:12 +1100 Subject: [PATCH 13/22] Fixes #674 - Add koala to readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a5eab05a3..78ba95dd7 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ The theme is based on the Twitter Bootstrap framework and uses LESS language for * [LESS.app](http://incident57.com/less/) for Mac * [WinLess](http://winless.org/) for Windows +* [Koala](http://koala-app.com/) for Linux ### Contact From fd547bb4852baefe0fb831806c27a7285d453040 Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Sat, 11 Oct 2014 08:44:30 +1100 Subject: [PATCH 14/22] We can't sort by relation fields anymore --- modules/backend/models/accesslog/columns.yaml | 14 +++++++++----- modules/backend/models/user/columns.yaml | 3 ++- modules/system/models/mailtemplate/columns.yaml | 3 ++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/modules/backend/models/accesslog/columns.yaml b/modules/backend/models/accesslog/columns.yaml index ecd6ae313..65c7133c8 100644 --- a/modules/backend/models/accesslog/columns.yaml +++ b/modules/backend/models/accesslog/columns.yaml @@ -10,8 +10,9 @@ columns: login: label: backend::lang.access_log.login relation: user - select: @login + select: login searchable: yes + sortable: false ip_address: label: backend::lang.access_log.ip_address @@ -20,17 +21,20 @@ columns: first_name: label: backend::lang.access_log.first_name relation: user - select: @first_name + select: first_name searchable: yes + sortable: false last_name: label: backend::lang.access_log.last_name relation: user - select: @last_name + select: last_name searchable: yes + sortable: false email: label: backend::lang.access_log.email relation: user - select: @email - searchable: yes \ No newline at end of file + select: email + searchable: yes + sortable: false \ No newline at end of file diff --git a/modules/backend/models/user/columns.yaml b/modules/backend/models/user/columns.yaml index 94aae5bcb..4bdec362f 100644 --- a/modules/backend/models/user/columns.yaml +++ b/modules/backend/models/user/columns.yaml @@ -22,4 +22,5 @@ columns: groups: label: backend::lang.user.groups relation: groups - select: @name \ No newline at end of file + select: name + sortable: false \ No newline at end of file diff --git a/modules/system/models/mailtemplate/columns.yaml b/modules/system/models/mailtemplate/columns.yaml index abd5985dd..5b9ac8207 100644 --- a/modules/system/models/mailtemplate/columns.yaml +++ b/modules/system/models/mailtemplate/columns.yaml @@ -19,4 +19,5 @@ columns: layout: label: system::lang.mail_templates.layout relation: layout - select: @name \ No newline at end of file + select: name + sortable: false \ No newline at end of file From 4504d5bf4c6011f5ae9facb797bac6ea0da98579 Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Sat, 11 Oct 2014 10:37:48 +1100 Subject: [PATCH 15/22] Improve translation handling --- .../backend/assets/js/october.inspector.js | 2 +- modules/backend/behaviors/FormController.php | 24 ++++++++++++------- modules/backend/lang/de/lang.php | 4 ++-- modules/backend/lang/en/lang.php | 13 ++++++---- modules/backend/lang/fa/lang.php | 4 ++-- .../backend/traits/InspectableContainer.php | 2 +- modules/backend/widgets/Form.php | 2 +- modules/cms/classes/ComponentHelpers.php | 13 +++++++--- modules/cms/formwidgets/Components.php | 4 ++++ .../components/partials/_component.htm | 10 ++++---- .../components/partials/_formcomponents.htm | 23 +++++++++--------- 11 files changed, 62 insertions(+), 39 deletions(-) diff --git a/modules/backend/assets/js/october.inspector.js b/modules/backend/assets/js/october.inspector.js index 88d4d13b9..a4baa7f33 100644 --- a/modules/backend/assets/js/october.inspector.js +++ b/modules/backend/assets/js/october.inspector.js @@ -587,7 +587,7 @@ // DROPDOWN EDITOR // ================== - + var InspectorEditorDropdown = function(editorId, inspector, fieldDef) { this.inspector = inspector this.fieldDef = fieldDef diff --git a/modules/backend/behaviors/FormController.php b/modules/backend/behaviors/FormController.php index e87683a2c..05754ef4e 100644 --- a/modules/backend/behaviors/FormController.php +++ b/modules/backend/behaviors/FormController.php @@ -107,6 +107,17 @@ class FormController extends ControllerBehavior */ if ($this->controller->isClassExtendedWith('Backend.Behaviors.RelationController')) $this->controller->initRelation($model); + + $this->prepareVars($model); + } + + /** + * Prepares common form data + */ + protected function prepareVars($model) + { + $this->controller->vars['formModel'] = $model; + $this->controller->vars['formRecordName'] = Lang::get($this->getConfig('name', 'backend::lang.model.name')); } // @@ -124,9 +135,8 @@ class FormController extends ControllerBehavior $this->context = strlen($context) ? $context : $this->getConfig('create[context]', 'create'); $this->controller->pageTitle = $this->controller->pageTitle ?: $this->getLang('create[title]', 'backend::lang.form.create_title'); $model = $this->controller->formCreateModelObject(); - $this->initForm($model); - $this->controller->vars['formModel'] = $model; + $this->initForm($model); } catch (Exception $ex) { $this->controller->handleError($ex); @@ -176,9 +186,8 @@ class FormController extends ControllerBehavior $this->context = strlen($context) ? $context : $this->getConfig('update[context]', 'update'); $this->controller->pageTitle = $this->controller->pageTitle ?: $this->getLang('update[title]', 'backend::lang.form.update_title'); $model = $this->controller->formFindModelObject($recordId); - $this->initForm($model); - $this->controller->vars['formModel'] = $model; + $this->initForm($model); } catch (Exception $ex) { $this->controller->handleError($ex); @@ -250,9 +259,8 @@ class FormController extends ControllerBehavior $this->context = strlen($context) ? $context : $this->getConfig('preview[context]', 'preview'); $this->controller->pageTitle = $this->controller->pageTitle ?: $this->getLang('preview[title]', 'backend::lang.form.preview_title'); $model = $this->controller->formFindModelObject($recordId); - $this->initForm($model); - $this->controller->vars['formModel'] = $model; + $this->initForm($model); } catch (Exception $ex) { $this->controller->handleError($ex); @@ -353,10 +361,10 @@ class FormController extends ControllerBehavior { $name = $this->getConfig($name, $default); $vars = [ - 'name' => Lang::get($this->getConfig('name', trans('backend::lang.model.name'))) + 'name' => Lang::get($this->getConfig('name', 'backend::lang.model.name')) ]; $vars = array_merge($vars, $extras); - return trans($name, $vars); + return Lang::get($name, $vars); } // diff --git a/modules/backend/lang/de/lang.php b/modules/backend/lang/de/lang.php index c9a1b0796..ee851ae68 100644 --- a/modules/backend/lang/de/lang.php +++ b/modules/backend/lang/de/lang.php @@ -163,8 +163,8 @@ return [ 'select_placeholder' => 'Bitte auswählen', 'insert_row' => 'Reihe einfügen', 'delete_row' => 'Reihe löschen', - 'concurrency-file-changed-title' => 'Datei wurde geändert', - 'concurrency-file-changed-description' => 'Die Datei, welche Sie bearbeiten, wurde auf von einem anderen Benutzer geändert. Sie können die Datei entweder erneut laden, wodurch Ihre Änderungen verloren gehen oder Sie überschreiben die Datei auf dem Server', + 'concurrency_file_changed_title' => 'Datei wurde geändert', + 'concurrency_file_changed_description' => 'Die Datei, welche Sie bearbeiten, wurde auf von einem anderen Benutzer geändert. Sie können die Datei entweder erneut laden, wodurch Ihre Änderungen verloren gehen oder Sie überschreiben die Datei auf dem Server', 'reload' => 'Erneut laden', ], 'relation' => [ diff --git a/modules/backend/lang/en/lang.php b/modules/backend/lang/en/lang.php index 4442ad9f0..2243df5f3 100644 --- a/modules/backend/lang/en/lang.php +++ b/modules/backend/lang/en/lang.php @@ -139,14 +139,18 @@ return [ 'missing_model' => 'Form behavior used in :class does not have a model defined.', 'missing_definition' => "Form behavior does not contain a field for ':field'.", 'not_found' => 'Form record with an ID of :id could not be found.', + 'action_confirm' => "Are you sure?", 'create' => 'Create', 'create_and_close' => 'Create and close', 'creating' => 'Creating...', + 'creating_name' => 'Creating :name...', 'save' => 'Save', 'save_and_close' => 'Save and close', 'saving' => 'Saving...', + 'saving_name' => 'Saving :name...', 'delete' => 'Delete', 'deleting' => 'Deleting...', + 'deleting_name' => 'Deleting :name...', 'undefined_tab' => 'Misc', 'field_off' => 'Off', 'field_on' => 'On', @@ -154,6 +158,8 @@ return [ 'apply' => 'Apply', 'cancel' => 'Cancel', 'close' => 'Close', + 'confirm' => 'Confirm', + 'reload' => 'Reload', 'ok' => 'OK', 'or' => 'or', 'confirm_tab_close' => 'Do you really want to close the tab? Unsaved changes will be lost.', @@ -165,16 +171,15 @@ return [ 'select_placeholder' => 'please select', 'insert_row' => 'Insert Row', 'delete_row' => 'Delete Row', - 'concurrency-file-changed-title' => 'File was changed', - 'concurrency-file-changed-description' => 'The file you\'re editing has been changed on disk by another user. You can either reload the file and lose your changes or override the file on the disk.', - 'reload' => 'Reload', + 'concurrency_file_changed_title' => "File was changed", + 'concurrency_file_changed_description' => "The file you're editing has been changed on disk by another user. You can either reload the file and lose your changes or override the file on the disk.", ], 'relation' => [ 'missing_definition' => "Relation behavior does not contain a definition for ':field'.", 'missing_model' => "Relation behavior used in :class does not have a model defined.", 'invalid_action_single' => "This action cannot be performed on a singular relationship.", 'invalid_action_multi' => "This action cannot be performed on a multiple relationship.", - 'help' => "Click on an item to add", + 'help' => "Click on an item to add", 'related_data' => "Related :name data", 'add' => "Add", 'add_selected' => "Add selected", diff --git a/modules/backend/lang/fa/lang.php b/modules/backend/lang/fa/lang.php index 96571f99d..9c40d06c1 100644 --- a/modules/backend/lang/fa/lang.php +++ b/modules/backend/lang/fa/lang.php @@ -165,8 +165,8 @@ return [ 'select_placeholder' => 'لطفا انتخاب نمایید', 'insert_row' => 'افزودن سطر', 'delete_row' => 'حذف سطر', - 'concurrency-file-changed-title' => 'فایل تغییر کرد', - 'concurrency-file-changed-description' => 'فایلی که شما ویرایش کردید توسط کاربر دیگری تغییر یافته و ذخیره شده است. شما میتوانید فایل را مجددا بارگذاری نمایید و تغییراتی که اعمال کرده اید را از دست بدهید و یا تغییرات اعمال شده توسط آن کاربر را بین برده و فایل را بازنویسی نمایید.', + 'concurrency_file_changed_title' => 'فایل تغییر کرد', + 'concurrency_file_changed_description' => 'فایلی که شما ویرایش کردید توسط کاربر دیگری تغییر یافته و ذخیره شده است. شما میتوانید فایل را مجددا بارگذاری نمایید و تغییراتی که اعمال کرده اید را از دست بدهید و یا تغییرات اعمال شده توسط آن کاربر را بین برده و فایل را بازنویسی نمایید.', 'reload' => 'بارگذاری مجدد', ], 'relation' => [ diff --git a/modules/backend/traits/InspectableContainer.php b/modules/backend/traits/InspectableContainer.php index 3b6eb64ca..90a2bea73 100644 --- a/modules/backend/traits/InspectableContainer.php +++ b/modules/backend/traits/InspectableContainer.php @@ -1,8 +1,8 @@ $value) { - if (!in_array($name, $translate)) continue; - $property[$name] = Lang::get($value); + if (!in_array($name, $translate)) + continue; + + if (is_array($value)) { + array_walk($property[$name], function(&$_value, $key) { $_value = Lang::get($_value); }); + } + else { + $property[$name] = Lang::get($value); + } } $result[] = $property; diff --git a/modules/cms/formwidgets/Components.php b/modules/cms/formwidgets/Components.php index a3f6014c0..5c94c9305 100644 --- a/modules/cms/formwidgets/Components.php +++ b/modules/cms/formwidgets/Components.php @@ -44,12 +44,16 @@ class Components extends FormWidgetBase $componentObj->alias = $alias; $componentObj->pluginIcon = 'icon-puzzle-piece'; + /* + * Look up the plugin hosting this component + */ $plugin = $manager->findComponentPlugin($componentObj); if ($plugin) { $pluginDetails = $plugin->pluginDetails(); if (isset($pluginDetails['icon'])) $componentObj->pluginIcon = $pluginDetails['icon']; } + } catch (Exception $ex) { $componentObj = new UnknownComponent(null, $properties, $ex->getMessage()); diff --git a/modules/cms/formwidgets/components/partials/_component.htm b/modules/cms/formwidgets/components/partials/_component.htm index 41f5834ec..0707d8ba9 100644 --- a/modules/cms/formwidgets/components/partials/_component.htm +++ b/modules/cms/formwidgets/components/partials/_component.htm @@ -1,6 +1,6 @@
-
inspectorEnabled): ?>data-inspectable data-inspector-title="getComponentName($component)) ?>" data-inspector-description="getComponentDescription($component)) ?>" @@ -9,9 +9,9 @@ alias) ?> - - - + + + ×
\ No newline at end of file diff --git a/modules/cms/formwidgets/components/partials/_formcomponents.htm b/modules/cms/formwidgets/components/partials/_formcomponents.htm index 51af8f844..842d04771 100644 --- a/modules/cms/formwidgets/components/partials/_formcomponents.htm +++ b/modules/cms/formwidgets/components/partials/_formcomponents.htm @@ -1,18 +1,17 @@
- isHidden) - echo $this->makePartial('component', ['component'=>$component]); - } - ?> + + isHidden): ?> + makePartial('component', ['component' => $component]) ?> + + +
- isHidden) - echo $this->makePartial('component', ['component'=>$component]); - } - ?> + + isHidden): ?> + makePartial('component', ['component' => $component]) ?> + +
From 1dcaa0d1d6a8d5ba1bd18da4327b0f4944df8095 Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Sat, 11 Oct 2014 12:13:25 +1100 Subject: [PATCH 16/22] Fixes #677 - use FQN for "instanceof Model" expressions --- modules/backend/widgets/Form.php | 2 +- modules/cms/twig/DebugExtension.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/backend/widgets/Form.php b/modules/backend/widgets/Form.php index 74492f3d5..928144bc6 100644 --- a/modules/backend/widgets/Form.php +++ b/modules/backend/widgets/Form.php @@ -3,7 +3,6 @@ use App; use Str; use Lang; -use Model; use Form as FormHelper; use Input; use Event; @@ -12,6 +11,7 @@ use Backend\Classes\WidgetBase; use Backend\Classes\WidgetManager; use System\Classes\ApplicationException; use Backend\Classes\FormWidgetBase; +use October\Rain\Database\Model; /** * Form Widget diff --git a/modules/cms/twig/DebugExtension.php b/modules/cms/twig/DebugExtension.php index 9546fbd5b..52dc460f1 100644 --- a/modules/cms/twig/DebugExtension.php +++ b/modules/cms/twig/DebugExtension.php @@ -7,7 +7,7 @@ use Cms\Classes\Controller; use Cms\Classes\ComponentBase; use Illuminate\Pagination\Paginator; use Illuminate\Support\Collection; -use Model; +use October\Rain\Database\Model; class DebugExtension extends Twig_Extension { From 3836a9b8d7e44b1ec12809a500642a45849ba199 Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Sat, 11 Oct 2014 12:27:21 +1100 Subject: [PATCH 17/22] Refs #679 - Fixed Visibility must be declared on property issues --- modules/backend/classes/AuthManager.php | 6 +++--- modules/backend/classes/NavigationManager.php | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/backend/classes/AuthManager.php b/modules/backend/classes/AuthManager.php index 41b992f76..c8dfcb43b 100644 --- a/modules/backend/classes/AuthManager.php +++ b/modules/backend/classes/AuthManager.php @@ -27,7 +27,7 @@ class AuthManager extends RainAuthManager // Permission management // - static $permissionDefaults = [ + protected static $permissionDefaults = [ 'code' => null, 'label' => null, 'comment' => null, @@ -82,8 +82,8 @@ class AuthManager extends RainAuthManager { foreach ($definitions as $code=>$definition) { $permission = (object)array_merge(self::$permissionDefaults, array_merge($definition, [ - 'code'=>$code, - 'owner'=>$owner + 'code' => $code, + 'owner' => $owner ])); $this->permissions[] = $permission; diff --git a/modules/backend/classes/NavigationManager.php b/modules/backend/classes/NavigationManager.php index 8b21c68f4..a65f8726a 100644 --- a/modules/backend/classes/NavigationManager.php +++ b/modules/backend/classes/NavigationManager.php @@ -30,7 +30,7 @@ class NavigationManager protected $contextMainMenuItemCode; protected $contextSideMenuItemCode; - static $mainItemDefaults = [ + protected static $mainItemDefaults = [ 'code' => null, 'label' => null, 'icon' => null, @@ -40,7 +40,7 @@ class NavigationManager 'sideMenu' => [] ]; - static $sideItemDefaults = [ + protected static $sideItemDefaults = [ 'code' => null, 'label' => null, 'icon' => null, From 543f1616b7f64b3d1fcee33c506f9c81352e48bb Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Sat, 11 Oct 2014 12:31:14 +1100 Subject: [PATCH 18/22] Fixes 675 - Add |trans (Lang::get) and |transchoice (Lang::choice) filters --- modules/system/ServiceProvider.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/system/ServiceProvider.php b/modules/system/ServiceProvider.php index 94cf56830..88c6c64af 100644 --- a/modules/system/ServiceProvider.php +++ b/modules/system/ServiceProvider.php @@ -213,6 +213,8 @@ class ServiceProvider extends ModuleServiceProvider 'snake' => ['Str', 'snake'], 'camel' => ['Str', 'camel'], 'studly' => ['Str', 'studly'], + 'trans' => ['Lang', 'get'], + 'transchoice' => ['Lang', 'choice'], 'md' => ['October\Rain\Support\Markdown', 'parse'], ]); }); From 7d313a0409884b62d014fa860a72814bc624f4a3 Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Sat, 11 Oct 2014 13:43:00 +1100 Subject: [PATCH 19/22] Update changelog and Fixes #582 --- CHANGELOG.md | 3 +++ modules/system/controllers/updates/_disable_form.htm | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6d2f16ed..e419ff0b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +* **Build 15x** (2014-10-x) + - Added twig filters `|trans` for `Lang::get(...)` and `|transchoice` for `Lang::choice(...)`. + * **Build 153** (2014-10-09) - Plugins are now updated in order of their dependency definitions. - Moved `ViewMaker` trait now lives under system, it can be useful for Models too. diff --git a/modules/system/controllers/updates/_disable_form.htm b/modules/system/controllers/updates/_disable_form.htm index a6aa37e65..5f116dfda 100644 --- a/modules/system/controllers/updates/_disable_form.htm +++ b/modules/system/controllers/updates/_disable_form.htm @@ -41,7 +41,7 @@ type="submit" class="btn btn-primary" data-request="onDisablePlugins" - data-request-confirm="" + data-request-confirm="" data-stripe-load-indicator> From 71f9df8e136cb15a49605749a629218171cb7eb7 Mon Sep 17 00:00:00 2001 From: Sam Georges Date: Sat, 11 Oct 2014 14:31:09 +1100 Subject: [PATCH 20/22] Use HTML to pass unchecked checkboxes/switches. Refs #648 --- modules/backend/widgets/Form.php | 9 +++------ .../backend/widgets/form/partials/_field_checkbox.htm | 2 +- modules/backend/widgets/form/partials/_field_switch.htm | 7 ++++++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/modules/backend/widgets/Form.php b/modules/backend/widgets/Form.php index 928144bc6..8efc7d7c6 100644 --- a/modules/backend/widgets/Form.php +++ b/modules/backend/widgets/Form.php @@ -693,12 +693,10 @@ class Form extends WidgetBase $data = []; /* - * Boolean fields (checkbox, switch) won't be present value FALSE * Number fields should be converted to integers */ foreach ($this->fields as $field) { - - if (!in_array($field->type, ['switch', 'checkbox', 'number'])) + if ($field->type != 'number') continue; /* @@ -706,11 +704,10 @@ class Form extends WidgetBase */ $parts = Str::evalHtmlArray($field->fieldName); $dotted = implode('.', $parts); - $value = array_get($data, $dotted, 0); - if ($field->type == 'number') { + if (($value = array_get($data, $dotted)) !== null) { $value = !strlen(trim($value)) ? null : (float) $value; + array_set($data, $dotted, $value); } - array_set($data, $dotted, $value); } /* diff --git a/modules/backend/widgets/form/partials/_field_checkbox.htm b/modules/backend/widgets/form/partials/_field_checkbox.htm index 5d91128aa..962501a34 100644 --- a/modules/backend/widgets/form/partials/_field_checkbox.htm +++ b/modules/backend/widgets/form/partials/_field_checkbox.htm @@ -4,7 +4,7 @@ type="hidden" name="getName() ?>" value="0" - previewMode ? 'disabled="disabled"' : '' ?>> + previewMode ? 'disabled="disabled"' : '' ?>> comment)) ?>

-