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 diff --git a/CHANGELOG.md b/CHANGELOG.md index 17bc36b07..e419ff0b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ -* **Build 15x** (2014-10-xx) +* **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. + - 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). 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 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/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); }); } 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/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/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, 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/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 new file mode 100644 index 000000000..9c40d06c1 --- /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/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. 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/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 @@ 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 ea24f3021..962501a34 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"' : '' ?>> value ? 'selected="selected"' : '' ?> data-="" value=""> - + diff --git a/modules/backend/widgets/form/partials/_field_switch.htm b/modules/backend/widgets/form/partials/_field_switch.htm index de0d4750e..224f6c7ed 100644 --- a/modules/backend/widgets/form/partials/_field_switch.htm +++ b/modules/backend/widgets/form/partials/_field_switch.htm @@ -5,7 +5,14 @@

comment)) ?>

-