diff --git a/artisan b/artisan index df630d0d6..961e94d0b 100644 --- a/artisan +++ b/artisan @@ -28,7 +28,7 @@ $app = require_once __DIR__.'/bootstrap/app.php'; | */ -$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class); +$kernel = $app->make('Illuminate\Contracts\Console\Kernel'); $status = $kernel->handle( $input = new Symfony\Component\Console\Input\ArgvInput, @@ -48,4 +48,4 @@ $status = $kernel->handle( $kernel->terminate($input, $status); -exit($status); +exit($status); \ No newline at end of file diff --git a/index.php b/index.php index 9c4d23a06..ba43df3ec 100644 --- a/index.php +++ b/index.php @@ -37,7 +37,7 @@ $app = require_once __DIR__.'/bootstrap/app.php'; | */ -$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); +$kernel = $app->make('Illuminate\Contracts\Http\Kernel'); $response = $kernel->handle( $request = Illuminate\Http\Request::capture() diff --git a/modules/backend/ServiceProvider.php b/modules/backend/ServiceProvider.php index e21bda158..7452c4247 100644 --- a/modules/backend/ServiceProvider.php +++ b/modules/backend/ServiceProvider.php @@ -80,7 +80,6 @@ class ServiceProvider extends ModuleServiceProvider $combiner->registerBundle('~/modules/backend/formwidgets/colorpicker/assets/less/colorpicker.less'); $combiner->registerBundle('~/modules/backend/formwidgets/permissioneditor/assets/less/permissioneditor.less'); $combiner->registerBundle('~/modules/backend/formwidgets/markdowneditor/assets/less/markdowneditor.less'); - $combiner->registerBundle('~/modules/backend/formwidgets/sensitive/assets/less/sensitive.less'); /* * Rich Editor is protected by DRM @@ -165,16 +164,10 @@ class ServiceProvider extends ModuleServiceProvider 'backend.manage_editor' => [ 'label' => 'system::lang.permissions.manage_editor', 'tab' => 'system::lang.permissions.name', - 'roles' => UserRole::CODE_DEVELOPER, - ], - 'backend.manage_own_editor' => [ - 'label' => 'system::lang.permissions.manage_own_editor', - 'tab' => 'system::lang.permissions.name', ], 'backend.manage_branding' => [ 'label' => 'system::lang.permissions.manage_branding', 'tab' => 'system::lang.permissions.name', - 'roles' => UserRole::CODE_DEVELOPER, ], 'media.manage_media' => [ 'label' => 'backend::lang.permissions.manage_media', @@ -209,7 +202,6 @@ class ServiceProvider extends ModuleServiceProvider $manager->registerFormWidget('Backend\FormWidgets\TagList', 'taglist'); $manager->registerFormWidget('Backend\FormWidgets\MediaFinder', 'mediafinder'); $manager->registerFormWidget('Backend\FormWidgets\NestedForm', 'nestedform'); - $manager->registerFormWidget('Backend\FormWidgets\Sensitive', 'sensitive'); }); } diff --git a/modules/backend/assets/css/october.css b/modules/backend/assets/css/october.css index 5703da3d0..e11e70041 100644 --- a/modules/backend/assets/css/october.css +++ b/modules/backend/assets/css/october.css @@ -679,10 +679,9 @@ nav#layout-mainmenu .toolbar-item:before {left:-12px} nav#layout-mainmenu .toolbar-item:after {right:-12px} nav#layout-mainmenu .toolbar-item.scroll-active-before:before {color:#fff} nav#layout-mainmenu .toolbar-item.scroll-active-after:after {color:#fff} -nav#layout-mainmenu ul.mainmenu-toolbar li.mainmenu-quick-action {margin:0} -nav#layout-mainmenu ul.mainmenu-toolbar li.mainmenu-quick-action:first-child {margin-left:21px} -nav#layout-mainmenu ul.mainmenu-toolbar li.mainmenu-quick-action i {font-size:20px} -nav#layout-mainmenu ul.mainmenu-toolbar li.mainmenu-quick-action a {position:relative;padding:0 10px;top:-1px} +nav#layout-mainmenu ul.mainmenu-toolbar li.mainmenu-preview {margin:0 0 0 21px} +nav#layout-mainmenu ul.mainmenu-toolbar li.mainmenu-preview i {font-size:20px} +nav#layout-mainmenu ul.mainmenu-toolbar li.mainmenu-preview a {position:relative;padding:0 10px;top:-1px} nav#layout-mainmenu ul.mainmenu-toolbar li.mainmenu-account {margin-right:0} nav#layout-mainmenu ul.mainmenu-toolbar li.mainmenu-account >a {padding:0 15px 0 10px;font-size:13px;position:relative} nav#layout-mainmenu ul.mainmenu-toolbar li.mainmenu-account.highlight >a {z-index:600} @@ -707,8 +706,8 @@ nav#layout-mainmenu ul li .mainmenu-accountmenu li:first-child a:active:after {c nav#layout-mainmenu ul li .mainmenu-accountmenu li.divider {height:1px;width:100%;background-color:#e0e0e0} nav#layout-mainmenu.navbar-mode-inline, nav#layout-mainmenu.navbar-mode-inline_no_icons {height:60px} -nav#layout-mainmenu.navbar-mode-inline ul.mainmenu-toolbar li.mainmenu-quick-action a, -nav#layout-mainmenu.navbar-mode-inline_no_icons ul.mainmenu-toolbar li.mainmenu-quick-action a {height:60px;line-height:60px} +nav#layout-mainmenu.navbar-mode-inline ul.mainmenu-toolbar li.mainmenu-preview a, +nav#layout-mainmenu.navbar-mode-inline_no_icons ul.mainmenu-toolbar li.mainmenu-preview a {height:60px;line-height:60px} nav#layout-mainmenu.navbar-mode-inline ul.mainmenu-toolbar li.mainmenu-account >a, nav#layout-mainmenu.navbar-mode-inline_no_icons ul.mainmenu-toolbar li.mainmenu-account >a {height:60px;line-height:60px} nav#layout-mainmenu.navbar-mode-inline ul li .mainmenu-accountmenu, @@ -731,7 +730,7 @@ nav#layout-mainmenu.navbar-mode-inline ul.mainmenu-nav li:last-child, nav#layout-mainmenu.navbar-mode-inline_no_icons ul.mainmenu-nav li:last-child {margin-right:0} nav#layout-mainmenu.navbar-mode-inline_no_icons .nav-icon {display:none !important} nav#layout-mainmenu.navbar-mode-tile {height:78px} -nav#layout-mainmenu.navbar-mode-tile ul.mainmenu-toolbar li.mainmenu-quick-action a {height:78px;line-height:78px} +nav#layout-mainmenu.navbar-mode-tile ul.mainmenu-toolbar li.mainmenu-preview a {height:78px;line-height:78px} nav#layout-mainmenu.navbar-mode-tile ul.mainmenu-toolbar li.mainmenu-account >a {height:78px;line-height:78px} nav#layout-mainmenu.navbar-mode-tile ul li .mainmenu-accountmenu {top:88px} nav#layout-mainmenu.navbar-mode-tile ul.mainmenu-nav li a {position:relative;width:65px;height:65px} @@ -750,14 +749,14 @@ nav#layout-mainmenu .menu-toggle .menu-toggle-title {margin-left:10px} nav#layout-mainmenu .menu-toggle:hover .menu-toggle-icon {opacity:1} body.mainmenu-open nav#layout-mainmenu .menu-toggle-icon {opacity:1} nav#layout-mainmenu.navbar-mode-collapse {padding-left:0;height:45px} -nav#layout-mainmenu.navbar-mode-collapse ul.mainmenu-toolbar li.mainmenu-quick-action a {height:45px;line-height:45px} +nav#layout-mainmenu.navbar-mode-collapse ul.mainmenu-toolbar li.mainmenu-preview a {height:45px;line-height:45px} nav#layout-mainmenu.navbar-mode-collapse ul.mainmenu-toolbar li.mainmenu-account >a {height:45px;line-height:45px} nav#layout-mainmenu.navbar-mode-collapse ul li .mainmenu-accountmenu {top:55px} nav#layout-mainmenu.navbar-mode-collapse ul.mainmenu-toolbar li.mainmenu-account >a {padding-right:0} nav#layout-mainmenu.navbar-mode-collapse ul li .mainmenu-accountmenu:after {right:13px} nav#layout-mainmenu.navbar-mode-collapse ul.nav {display:none} nav#layout-mainmenu.navbar-mode-collapse .menu-toggle {display:inline-block;color:#fff !important} -@media (max-width:769px) {nav#layout-mainmenu.navbar {padding-left:0;height:45px }nav#layout-mainmenu.navbar ul.mainmenu-toolbar li.mainmenu-quick-action a {height:45px;line-height:45px }nav#layout-mainmenu.navbar ul.mainmenu-toolbar li.mainmenu-account >a {height:45px;line-height:45px }nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu {top:55px }nav#layout-mainmenu.navbar ul.mainmenu-toolbar li.mainmenu-account >a {padding-right:0 }nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu:after {right:13px }nav#layout-mainmenu.navbar ul.nav {display:none }nav#layout-mainmenu.navbar .menu-toggle {display:inline-block;color:#fff !important }} +@media (max-width:769px) {nav#layout-mainmenu.navbar {padding-left:0;height:45px }nav#layout-mainmenu.navbar ul.mainmenu-toolbar li.mainmenu-preview a {height:45px;line-height:45px }nav#layout-mainmenu.navbar ul.mainmenu-toolbar li.mainmenu-account >a {height:45px;line-height:45px }nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu {top:55px }nav#layout-mainmenu.navbar ul.mainmenu-toolbar li.mainmenu-account >a {padding-right:0 }nav#layout-mainmenu.navbar ul li .mainmenu-accountmenu:after {right:13px }nav#layout-mainmenu.navbar ul.nav {display:none }nav#layout-mainmenu.navbar .menu-toggle {display:inline-block;color:#fff !important }} .mainmenu-collapsed {position:absolute;height:100%;top:0;left:0;margin:0;background:#000} .mainmenu-collapsed >div {display:block;height:100%} .mainmenu-collapsed >div ul.mainmenu-nav li a {position:relative;width:65px;height:65px} diff --git a/modules/backend/assets/less/layout/mainmenu.less b/modules/backend/assets/less/layout/mainmenu.less index f4b8c37cb..5d3492c26 100644 --- a/modules/backend/assets/less/layout/mainmenu.less +++ b/modules/backend/assets/less/layout/mainmenu.less @@ -47,7 +47,7 @@ body.mainmenu-open { height: @height; ul.mainmenu-toolbar { - li.mainmenu-quick-action { + li.mainmenu-preview { a { height: @height; line-height: @height; @@ -191,12 +191,8 @@ nav#layout-mainmenu { // ul.mainmenu-toolbar { - li.mainmenu-quick-action { - margin: 0; - - &:first-child { - margin-left: 21px; - } + li.mainmenu-preview { + margin: 0 0 0 21px; i { font-size: 20px; diff --git a/modules/backend/behaviors/ImportExportController.php b/modules/backend/behaviors/ImportExportController.php index 0af1497ac..c146050b6 100644 --- a/modules/backend/behaviors/ImportExportController.php +++ b/modules/backend/behaviors/ImportExportController.php @@ -11,7 +11,7 @@ use Backend\Behaviors\ImportExportController\TranscodeFilter; use Illuminate\Database\Eloquent\MassAssignmentException; use League\Csv\Reader as CsvReader; use League\Csv\Writer as CsvWriter; -use League\Csv\EscapeFormula as CsvEscapeFormula; +use October\Rain\Parse\League\EscapeFormula as CsvEscapeFormula; use ApplicationException; use SplTempFileObject; use Exception; @@ -624,7 +624,9 @@ class ImportExportController extends ControllerBehavior $csv->setDelimiter($options['delimiter']); $csv->setEnclosure($options['enclosure']); $csv->setEscape($options['escape']); - $csv->addFormatter(new CsvEscapeFormula()); + + // Temporary until upgrading to league/csv >= 9.1.0 (will be $csv->addFormatter($formatter)) + $formatter = new CsvEscapeFormula(); /* * Add headers @@ -660,6 +662,9 @@ class ImportExportController extends ControllerBehavior $record[] = $value; } + // Temporary until upgrading to league/csv >= 9.1.0 + $record = $formatter($record); + $csv->insertOne($record); } @@ -803,9 +808,9 @@ class ImportExportController extends ControllerBehavior if ( $options['encoding'] !== null && - $reader->supportsStreamFilter() + $reader->isActiveStreamFilter() ) { - $reader->addStreamFilter(sprintf( + $reader->appendStreamFilter(sprintf( '%s%s:%s', TranscodeFilter::FILTER_NAME, strtolower($options['encoding']), diff --git a/modules/backend/behaviors/ListController.php b/modules/backend/behaviors/ListController.php index 4bc6c4d8b..d885f1625 100644 --- a/modules/backend/behaviors/ListController.php +++ b/modules/backend/behaviors/ListController.php @@ -297,6 +297,16 @@ class ListController extends ControllerBehavior return call_user_func_array([$this->controller, 'onDelete'], func_get_args()); } + /* + * Validate checked identifiers + */ + $checkedIds = post('checked'); + + if (!$checkedIds || !is_array($checkedIds) || !count($checkedIds)) { + Flash::error(Lang::get('backend::lang.list.delete_selected_empty')); + return $this->controller->listRefresh(); + } + /* * Establish the list definition */ @@ -308,20 +318,6 @@ class ListController extends ControllerBehavior $listConfig = $this->controller->listGetConfig($definition); - /* - * Validate checked identifiers - */ - $checkedIds = post('checked'); - - if (!$checkedIds || !is_array($checkedIds) || !count($checkedIds)) { - Flash::error(Lang::get( - (!empty($listConfig->noRecordsDeletedMessage)) - ? $listConfig->noRecordsDeletedMessage - : 'backend::lang.list.delete_selected_empty' - )); - return $this->controller->listRefresh(); - } - /* * Create the model */ @@ -348,18 +344,10 @@ class ListController extends ControllerBehavior $record->delete(); } - Flash::success(Lang::get( - (!empty($listConfig->deleteMessage)) - ? $listConfig->deleteMessage - : 'backend::lang.list.delete_selected_success' - )); + Flash::success(Lang::get('backend::lang.list.delete_selected_success')); } else { - Flash::error(Lang::get( - (!empty($listConfig->noRecordsDeletedMessage)) - ? $listConfig->noRecordsDeletedMessage - : 'backend::lang.list.delete_selected_empty' - )); + Flash::error(Lang::get('backend::lang.list.delete_selected_empty')); } return $this->controller->listRefresh($definition); diff --git a/modules/backend/behaviors/RelationController.php b/modules/backend/behaviors/RelationController.php index 88ef54ff4..f6c96382d 100644 --- a/modules/backend/behaviors/RelationController.php +++ b/modules/backend/behaviors/RelationController.php @@ -669,9 +669,8 @@ class RelationController extends ControllerBehavior $config->defaultSort = $this->getConfig('view[defaultSort]'); $config->recordsPerPage = $this->getConfig('view[recordsPerPage]'); $config->showCheckboxes = $this->getConfig('view[showCheckboxes]', !$this->readOnly); - $config->recordUrl = $this->getConfig('view[recordUrl]'); - $config->customViewPath = $this->getConfig('view[customViewPath]'); - $config->noRecordsMessage = $this->getConfig('view[noRecordsMessage]'); + $config->recordUrl = $this->getConfig('view[recordUrl]', null); + $config->customViewPath = $this->getConfig('view[customViewPath]', null); $defaultOnClick = sprintf( "$.oc.relationBehavior.clickViewListRecord(':%s', '%s', '%s')", @@ -819,7 +818,6 @@ class RelationController extends ControllerBehavior $config->showSorting = $this->getConfig('manage[showSorting]', !$isPivot); $config->defaultSort = $this->getConfig('manage[defaultSort]'); $config->recordsPerPage = $this->getConfig('manage[recordsPerPage]'); - $config->noRecordsMessage = $this->getConfig('manage[noRecordsMessage]'); if ($this->viewMode == 'single') { $config->showCheckboxes = false; @@ -1115,7 +1113,7 @@ class RelationController extends ControllerBehavior $this->relationObject->add($newModel, $sessionKey); } elseif ($this->viewMode == 'single') { - $newModel = $this->viewModel = $this->viewWidget->model = $this->manageWidget->model; + $newModel = $this->manageWidget->model; $this->viewWidget->setFormValues($saveData); /* @@ -1125,15 +1123,6 @@ class RelationController extends ControllerBehavior $newModel->save(null, $this->manageWidget->getSessionKey()); } - if ($this->relationType === 'hasOne') { - // Unassign previous relation if one is already assigned - $relation = $this->relationObject->getParent()->{$this->relationName} ?? null; - - if ($relation) { - $this->relationObject->remove($relation, $sessionKey); - } - } - $this->relationObject->add($newModel, $sessionKey); /* @@ -1168,11 +1157,7 @@ class RelationController extends ControllerBehavior } } elseif ($this->viewMode == 'single') { - // Ensure that the view widget model is the same instance as the manage widget model - // since they will technically be different object instances in this context as - // $viewWidet->model is populated by $this->relationObject->getResults() and - // $manageWidget->model is populated by $this->relationModel->find($manageId); - $this->viewModel = $this->viewWidget->model = $this->manageWidget->model; + $this->viewModel = $this->manageWidget->model; $this->viewWidget->setFormValues($saveData); $this->viewModel->save(null, $this->manageWidget->getSessionKey()); @@ -1256,15 +1241,6 @@ class RelationController extends ControllerBehavior */ elseif ($this->viewMode == 'single') { if ($recordId && ($model = $this->relationModel->find($recordId))) { - if ($this->relationType === 'hasOne') { - // Unassign previous relation if one is already assigned - $relation = $this->relationObject->getParent()->{$this->relationName} ?? null; - - if ($relation) { - $this->relationObject->remove($relation, $sessionKey); - } - } - $this->relationObject->add($model, $sessionKey); $this->viewWidget->setFormValues($model->attributes); @@ -1333,11 +1309,7 @@ class RelationController extends ControllerBehavior } } - // Reinitialise the form with a blank model - $this->initRelation($this->model); - $this->viewWidget->setFormValues([]); - $this->viewModel = $this->relationModel; } return $this->relationRefresh(); diff --git a/modules/backend/behaviors/ReorderController.php b/modules/backend/behaviors/ReorderController.php index 4b9681972..1795afca0 100644 --- a/modules/backend/behaviors/ReorderController.php +++ b/modules/backend/behaviors/ReorderController.php @@ -214,10 +214,7 @@ class ReorderController extends ControllerBehavior $model = $this->controller->reorderGetModel(); $modelTraits = class_uses($model); - if ( - isset($modelTraits[\October\Rain\Database\Traits\Sortable::class]) || - $model->isClassExtendedWith(\October\Rain\Database\Behaviors\Sortable::class) - ) { + if (isset($modelTraits[\October\Rain\Database\Traits\Sortable::class])) { $this->sortMode = 'simple'; } elseif (isset($modelTraits[\October\Rain\Database\Traits\NestedTree::class])) { @@ -225,7 +222,7 @@ class ReorderController extends ControllerBehavior $this->showTree = true; } else { - throw new ApplicationException('The model must implement the Sortable trait/behavior or the NestedTree trait.'); + throw new ApplicationException('The model must implement the NestedTree or Sortable traits.'); } return $model; diff --git a/modules/backend/classes/FormField.php b/modules/backend/classes/FormField.php index d9782a267..f2b6efc68 100644 --- a/modules/backend/classes/FormField.php +++ b/modules/backend/classes/FormField.php @@ -124,7 +124,7 @@ class FormField /** * @var string Specifies a comment to accompany the field */ - public $comment = ''; + public $comment; /** * @var string Specifies the comment position. @@ -139,7 +139,7 @@ class FormField /** * @var string Specifies a message to display when there is no value supplied (placeholder). */ - public $placeholder = ''; + public $placeholder; /** * @var array Contains a list of attributes specified in the field configuration. diff --git a/modules/backend/classes/NavigationManager.php b/modules/backend/classes/NavigationManager.php index f88baf6c9..ee57c1666 100644 --- a/modules/backend/classes/NavigationManager.php +++ b/modules/backend/classes/NavigationManager.php @@ -28,11 +28,6 @@ class NavigationManager */ protected $items; - /** - * @var QuickActionItem[] List of registered quick actions. - */ - protected $quickActions; - protected $contextSidenavPartials = []; protected $contextOwner; @@ -59,9 +54,6 @@ class NavigationManager */ protected function loadItems() { - $this->items = []; - $this->quickActions = []; - /* * Load module items */ @@ -76,18 +68,11 @@ class NavigationManager foreach ($plugins as $id => $plugin) { $items = $plugin->registerNavigation(); - $quickActions = $plugin->registerQuickActions(); - - if (!is_array($items) && !is_array($quickActions)) { + if (!is_array($items)) { continue; } - if (is_array($items)) { - $this->registerMenuItems($id, $items); - } - if (is_array($quickActions)) { - $this->registerQuickActions($id, $quickActions); - } + $this->registerMenuItems($id, $items); } /** @@ -106,21 +91,17 @@ class NavigationManager Event::fire('backend.menu.extendItems', [$this]); /* - * Sort menu items and quick actions + * Sort menu items */ uasort($this->items, static function ($a, $b) { return $a->order - $b->order; }); - uasort($this->quickActions, static function ($a, $b) { - return $a->order - $b->order; - }); /* - * Filter items and quick actions that the user lacks permission for + * Filter items user lacks permission for */ $user = BackendAuth::getUser(); $this->items = $this->filterItemPermissions($user, $this->items); - $this->quickActions = $this->filterItemPermissions($user, $this->quickActions); foreach ($this->items as $item) { if (!$item->sideMenu || !count($item->sideMenu)) { @@ -202,6 +183,10 @@ class NavigationManager */ public function registerMenuItems($owner, array $definitions) { + if (!$this->items) { + $this->items = []; + } + $validator = Validator::make($definitions, [ '*.label' => 'required', '*.icon' => 'required_without:*.iconSvg', @@ -335,21 +320,6 @@ class NavigationManager return true; } - /** - * Remove multiple side menu items - * - * @param string $owner - * @param string $code - * @param array $sideCodes - * @return void - */ - public function removeSideMenuItems($owner, $code, $sideCodes) - { - foreach ($sideCodes as $sideCode) { - $this->removeSideMenuItem($owner, $code, $sideCode); - } - } - /** * Removes a single main menu item * @param string $owner @@ -376,12 +346,8 @@ class NavigationManager */ public function listMainMenuItems() { - if ($this->items === null && $this->quickActions === null) { - $this->loadItems(); - } - if ($this->items === null) { - return []; + $this->loadItems(); } foreach ($this->items as $item) { @@ -463,137 +429,6 @@ class NavigationManager return $items; } - /** - * Registers quick actions in the main navigation. - * - * Quick actions are single purpose links displayed to the left of the user menu in the - * backend main navigation. - * - * The argument is an array of the quick action items. The array keys represent the - * quick action item codes, specific for the plugin/module. Each element in the - * array should be an associative array with the following keys: - * - label - specifies the action label localization string key, used as a tooltip, required. - * - icon - an icon name from the Font Awesome icon collection, required if iconSvg is unspecified. - * - iconSvg - a custom SVG icon to use for the icon, required if icon is unspecified. - * - url - the back-end relative URL the quick action item should point to, required. - * - permissions - an array of permissions the back-end user should have, optional. - * The item will be displayed if the user has any of the specified permissions. - * - order - a position of the item in the menu, optional. - * - * @param string $owner Specifies the quick action items owner plugin or module in the format Author.Plugin. - * @param array $definitions An array of the quick action item definitions. - * @return void - * @throws SystemException If the validation of the quick action configuration fails - */ - public function registerQuickActions($owner, array $definitions) - { - $validator = Validator::make($definitions, [ - '*.label' => 'required', - '*.icon' => 'required_without:*.iconSvg', - '*.url' => 'required' - ]); - - if ($validator->fails()) { - $errorMessage = 'Invalid quick action item detected in ' . $owner . '. Contact the plugin author to fix (' . $validator->errors()->first() . ')'; - if (Config::get('app.debug', false)) { - throw new SystemException($errorMessage); - } - - Log::error($errorMessage); - } - - $this->addQuickActionItems($owner, $definitions); - } - - /** - * Dynamically add an array of quick action items - * - * @param string $owner - * @param array $definitions - * @return void - */ - public function addQuickActionItems($owner, array $definitions) - { - foreach ($definitions as $code => $definition) { - $this->addQuickActionItem($owner, $code, $definition); - } - } - - /** - * Dynamically add a single quick action item - * - * @param string $owner - * @param string $code - * @param array $definition - * @return void - */ - public function addQuickActionItem($owner, $code, array $definition) - { - $itemKey = $this->makeItemKey($owner, $code); - - if (isset($this->quickActions[$itemKey])) { - $definition = array_merge((array) $this->quickActions[$itemKey], $definition); - } - - $item = array_merge($definition, [ - 'code' => $code, - 'owner' => $owner - ]); - - $this->quickActions[$itemKey] = QuickActionItem::createFromArray($item); - } - - /** - * Gets the instance of a specified quick action item. - * - * @param string $owner - * @param string $code - * @return QuickActionItem - * @throws SystemException - */ - public function getQuickActionItem(string $owner, string $code) - { - $itemKey = $this->makeItemKey($owner, $code); - - if (!array_key_exists($itemKey, $this->quickActions)) { - throw new SystemException('No quick action item found with key ' . $itemKey); - } - - return $this->quickActions[$itemKey]; - } - - /** - * Removes a single quick action item - * - * @param $owner - * @param $code - * @return void - */ - public function removeQuickActionItem($owner, $code) - { - $itemKey = $this->makeItemKey($owner, $code); - unset($this->quickActions[$itemKey]); - } - - /** - * Returns a list of quick action items. - * - * @return array - * @throws SystemException - */ - public function listQuickActionItems() - { - if ($this->items === null && $this->quickActions === null) { - $this->loadItems(); - } - - if ($this->quickActions === null) { - return []; - } - - return $this->quickActions; - } - /** * Sets the navigation context. * The function sets the navigation owner, main menu item code and the side menu item code. diff --git a/modules/backend/composer.json b/modules/backend/composer.json index c199e9fe1..aae3d258f 100644 --- a/modules/backend/composer.json +++ b/modules/backend/composer.json @@ -8,13 +8,11 @@ "authors": [ { "name": "Alexey Bobkov", - "email": "aleksey.bobkov@gmail.com", - "role": "Co-founder" + "email": "aleksey.bobkov@gmail.com" }, { "name": "Samuel Georges", - "email": "daftspunky@gmail.com", - "role": "Co-founder" + "email": "daftspunky@gmail.com" }, { "name": "Luke Towers", @@ -24,10 +22,9 @@ } ], "require": { - "php": ">=7.2", + "php": ">=7.0", "composer/installers": "~1.0", - "october/rain": "~1.1.0", - "laravel/framework": "~6.0" + "october/rain": "~1.0.469" }, "autoload": { "psr-4": { diff --git a/modules/backend/controllers/Preferences.php b/modules/backend/controllers/Preferences.php index 1a9e25828..9a79f88b5 100644 --- a/modules/backend/controllers/Preferences.php +++ b/modules/backend/controllers/Preferences.php @@ -57,7 +57,7 @@ class Preferences extends Controller */ public function formExtendFields($form) { - if (!$this->user->hasAccess('backend.manage_own_editor')) { + if (!$this->user->hasAccess('backend.manage_editor')) { $form->removeTab('backend::lang.backend_preferences.code_editor'); } } diff --git a/modules/backend/controllers/users/config_filter.yaml b/modules/backend/controllers/users/config_filter.yaml index d9660cc48..08ebb3f56 100644 --- a/modules/backend/controllers/users/config_filter.yaml +++ b/modules/backend/controllers/users/config_filter.yaml @@ -8,8 +8,8 @@ scopes: label: backend::lang.user.superuser type: switch conditions: - - is_superuser = 0 - - is_superuser = 1 + - is_superuser = false + - is_superuser = true login_date: label: backend::lang.user.last_login diff --git a/modules/backend/database/seeds/DatabaseSeeder.php b/modules/backend/database/seeds/DatabaseSeeder.php index 50701273e..7be5f9885 100644 --- a/modules/backend/database/seeds/DatabaseSeeder.php +++ b/modules/backend/database/seeds/DatabaseSeeder.php @@ -1,6 +1,5 @@ setDefaults([ - 'password' => $adminPassword - ]); - $this->call($adminSeeder); - }); - - return 'The following password has been automatically generated for the "admin" account: ' - . "${adminPassword}"; + $this->call('Backend\Database\Seeds\SeedSetupAdmin'); } } diff --git a/modules/backend/facades/Backend.php b/modules/backend/facades/Backend.php index 1a1ae24bd..4ca59f641 100644 --- a/modules/backend/facades/Backend.php +++ b/modules/backend/facades/Backend.php @@ -2,24 +2,12 @@ use October\Rain\Support\Facade; -/** - * @method static string uri() - * @method static string url(string $path = null, array $parameters = [], bool $secure = null) - * @method static string baseUrl(string $path = null) - * @method static string skinAsset(string $path = null) - * @method static \Illuminate\Http\RedirectResponse redirect(string $path, int $status = 302, array $headers = [], bool $secure = null) - * @method static \Illuminate\Http\RedirectResponse redirectGuest(string $path, int $status = 302, array $headers = [], bool $secure = null) - * @method static \Illuminate\Http\RedirectResponse redirectIntended(string $path, int $status = 302, array $headers = [], bool $secure = null) - * @method static string date($dateTime, array $options = []) - * @method static string dateTime($dateTime, array $options = []) - * - * @see \Backend\Helpers\Backend - */ class Backend extends Facade { /** * Get the registered name of the component. * + * @see \Backend\Helpers\Backend * @return string */ protected static function getFacadeAccessor() diff --git a/modules/backend/facades/BackendAuth.php b/modules/backend/facades/BackendAuth.php index 6c3cfc078..99dde86f3 100644 --- a/modules/backend/facades/BackendAuth.php +++ b/modules/backend/facades/BackendAuth.php @@ -2,22 +2,14 @@ use October\Rain\Support\Facade; -/** - * @method static void registerCallback(callable $callback) - * @method static void registerPermissions(string $owner, array $definitions) - * @method static void removePermission(string $owner, string $code) - * @method static array listPermissions() - * @method static array listTabbedPermissions() - * @method static array listPermissionsForRole(string $role, bool $includeOrphans = true) - * @method static boolean hasPermissionsForRole(string $role) - * - * @see \Backend\Classes\AuthManager - */ class BackendAuth extends Facade { /** * Get the registered name of the component. * + * Resolves to: + * - Backend\Classes\AuthManager + * * @return string */ protected static function getFacadeAccessor() diff --git a/modules/backend/facades/BackendMenu.php b/modules/backend/facades/BackendMenu.php index 9b305c188..eb93dff9a 100644 --- a/modules/backend/facades/BackendMenu.php +++ b/modules/backend/facades/BackendMenu.php @@ -2,36 +2,14 @@ use October\Rain\Support\Facade; -/** - * @method static void registerCallback(callable $callback) - * @method static void registerMenuItems(string $owner, array $definitions) - * @method static void addMainMenuItems(string $owner, array $definitions) - * @method static void addMainMenuItem(string $owner, $code, array $definition) - * @method static \Backend\Classes\MainMenuItem getMainMenuItem(string $owner, string $code) - * @method static void removeMainMenuItem(string $owner, string $code) - * @method static void addSideMenuItems(string $owner, string $code, array $definitions) - * @method static bool addSideMenuItem(string $owner, string $code, string $sideCode, array $definition) - * @method static bool removeSideMenuItem(string $owner, string $code, string $sideCode) - * @method static \Backend\Classes\MainMenuItem[] listMainMenuItems() - * @method static \Backend\Classes\SideMenuItem[] listSideMenuItems(string|null $owner = null, string|null $code = null) - * @method static void setContext(string $owner, string $mainMenuItemCode, string|null $sideMenuItemCode = null) - * @method static void setContextOwner(string $owner) - * @method static void setContextMainMenu(string $mainMenuItemCode) - * @method static object getContext() - * @method static void setContextSideMenu(string $sideMenuItemCode) - * @method static bool isMainMenuItemActive(\Backend\Classes\MainMenuItem $item) - * @method static \Backend\Classes\MainMenuItem|null getActiveMainMenuItem() - * @method static bool isSideMenuItemActive(\Backend\Classes\SideMenuItem $item) - * @method static void registerContextSidenavPartial(string $owner, string $mainMenuItemCode, string $partial) - * @method static mixed getContextSidenavPartial(string $owner, string $mainMenuItemCode) - * - * @see \Backend\Classes\NavigationManager - */ class BackendMenu extends Facade { /** * Get the registered name of the component. * + * Resolves to: + * - Backend\Classes\NavigationManager + * * @return string */ protected static function getFacadeAccessor() diff --git a/modules/backend/formwidgets/Repeater.php b/modules/backend/formwidgets/Repeater.php index 159f20c3e..95ac67c90 100644 --- a/modules/backend/formwidgets/Repeater.php +++ b/modules/backend/formwidgets/Repeater.php @@ -248,6 +248,16 @@ class Repeater extends FormWidgetBase } } + if (!$this->childAddItemCalled && $currentValue === null) { + $this->formWidgets = []; + return; + } + + if ($this->childAddItemCalled && !isset($currentValue[$this->childIndexCalled])) { + // If no value is available but a child repeater has added an item, add a "stub" repeater item + $this->makeItemFormWidget($this->childIndexCalled); + } + // Ensure that the minimum number of items are preinitialized // ONLY DONE WHEN NOT IN GROUP MODE if (!$this->useGroups && $this->minItems > 0) { @@ -263,16 +273,6 @@ class Repeater extends FormWidgetBase } } - if (!$this->childAddItemCalled && $currentValue === null) { - $this->formWidgets = []; - return; - } - - if ($this->childAddItemCalled && !isset($currentValue[$this->childIndexCalled])) { - // If no value is available but a child repeater has added an item, add a "stub" repeater item - $this->makeItemFormWidget($this->childIndexCalled); - } - if (!is_array($currentValue)) { return; } diff --git a/modules/backend/formwidgets/RichEditor.php b/modules/backend/formwidgets/RichEditor.php index d8d26785e..0949ced02 100644 --- a/modules/backend/formwidgets/RichEditor.php +++ b/modules/backend/formwidgets/RichEditor.php @@ -186,19 +186,6 @@ class RichEditor extends FormWidgetBase { $result = []; - /** - * @event backend.richeditor.listTypes - * Register additional "page link types" to the RichEditor FormWidget - * - * Example usage: - * - * Event::listen('backend.richeditor.listTypes', function () { - * return [ - * 'my-identifier' => 'author.plugin::lang.richeditor.link_types.my_identifier', - * ]; - * }); - * - */ $apiResult = Event::fire('backend.richeditor.listTypes'); if (is_array($apiResult)) { foreach ($apiResult as $typeList) { @@ -218,28 +205,6 @@ class RichEditor extends FormWidgetBase protected function getPageLinks($type) { $result = []; - - /** - * @event backend.richeditor.getTypeInfo - * Register additional "page link types" to the RichEditor FormWidget - * - * Example usage: - * - * Event::listen('backend.richeditor.getTypeInfo', function ($type) { - * if ($type === 'my-identifier') { - * return [ - * 'https://example.com/page1' => 'Page 1', - * 'https://example.com/parent-page' => [ - * 'title' => 'Parent Page', - * 'links' => [ - * 'https://example.com/child-page' => 'Child Page', - * ], - * ], - * ]; - * } - * }); - * - */ $apiResult = Event::fire('backend.richeditor.getTypeInfo', [$type]); if (is_array($apiResult)) { foreach ($apiResult as $typeInfo) { diff --git a/modules/backend/formwidgets/fileupload/assets/js/fileupload.js b/modules/backend/formwidgets/fileupload/assets/js/fileupload.js index 23a7bed70..021fcab97 100644 --- a/modules/backend/formwidgets/fileupload/assets/js/fileupload.js +++ b/modules/backend/formwidgets/fileupload/assets/js/fileupload.js @@ -142,7 +142,7 @@ targetWidth, targetHeight - if (!this.options.thumbnailWidth && !this.options.thumbnailHeight) { + if (!this.options.thumbnailWidth && !this.options.thumbnailWidth) { targetWidth = targetHeight = 100 } else if (this.options.thumbnailWidth) { diff --git a/modules/backend/helpers/Backend.php b/modules/backend/helpers/Backend.php index de9cae563..18671e94e 100644 --- a/modules/backend/helpers/Backend.php +++ b/modules/backend/helpers/Backend.php @@ -214,14 +214,14 @@ class Backend $contents = file_get_contents($assetFile); // Find all assets that are compiled in this file - preg_match_all('/^=require\s+([A-z0-9-_+\.\/]+)[\n|\r\n|$]/m', $contents, $matches, PREG_SET_ORDER); + preg_match_all('/^=require\s+([A-z0-9-_+\.\/]+)$/m', $contents, $matches, PREG_SET_ORDER); // Determine correct asset path $directory = str_replace(basename($file), '', $file); if (count($matches)) { $results = array_map(function ($match) use ($directory) { - return str_replace('/', DIRECTORY_SEPARATOR, $directory . $match[1]); + return $directory . $match[1]; }, $matches); foreach ($results as $i => $result) { diff --git a/modules/backend/lang/de/lang.php b/modules/backend/lang/de/lang.php index e765f39f6..5118bb7f5 100644 --- a/modules/backend/lang/de/lang.php +++ b/modules/backend/lang/de/lang.php @@ -2,15 +2,12 @@ return [ 'auth' => [ - 'title' => 'Admin-Bereich', - 'invalid_login' => 'Die Angaben stimmen nicht mit unseren Aufzeichnungen überein. Überprüfen Sie diese und versuchen Sie es noch einmal.', + 'title' => 'Admin-Bereich' ], 'field' => [ 'invalid_type' => 'Ungültiger Feldtyp :type.', 'options_method_invalid_model' => 'Das Attribut ":field" löst sich nicht zu einen gültigen Model auf. Probiere die options Methode der Model-Klasse :model explicit zu definieren.', - 'options_method_not_exists' => 'Die Modell-Klasse :model muss eine Methode :method() mit Rückgabe der Werte von ":field" besitzen.', - 'options_static_method_invalid_value' => "Die statische Methode ':method()' in der Klasse :class hat kein valides Optionsarray zurückgegeben.", - 'colors_method_not_exists' => "Die Modellklasse :model muss eine Methode :method() definieren, welche html color (HEX) codes für das ':field' Formularfeld zurückgibt.", + 'options_method_not_exists' => 'Die Model-Klasse :model muss eine Methode :method() mit Rückgabe der Werte von ":field" besitzen.', ], 'widget' => [ 'not_registered' => "Ein Widget namens ':name' wurde nicht registriert", @@ -18,11 +15,6 @@ return [ ], 'page' => [ 'untitled' => "Unbenannt", - '404' => [ - 'label' => 'Seite nicht gefunden', - 'help' => "Die von Ihnen angeforderte Seite konnte nicht gefunden werden.", - 'back_link' => 'Zurück zur vorigen Seite', - ], 'access_denied' => [ 'label' => "Zugriff verweigert", 'help' => "Sie haben nicht die erforderlichen Berechtigungen, um diese Seite zu sehen.", @@ -36,23 +28,14 @@ return [ ], 'partial' => [ 'not_found_name' => "Das Partial ':name' wurde nicht gefunden.", - 'invalid_name' => 'Ungültiger Partial: :name.', - ], - 'ajax_handler' => [ - 'invalid_name' => 'Ungültiger AJAX handler: :name.', - 'not_found' => "AJAX handler ':name' wurde nicht gefunden.", ], 'account' => [ - 'impersonate_confirm' => 'Sind Sie sicher, dass Sie sich als dieser Benutzer anmelden wollen? Sie können zu Ihrem ursprünglichen Zustand zurückkehren, indem Sie sich abmelden.', - 'impersonate_success' => 'Sie sind jetzt als dieser Benutzer angemeldet', - 'signed_in_as' => 'Angemeldet als :full_name', 'sign_out' => 'Abmelden', 'login' => 'Anmelden', 'reset' => 'Zurücksetzen', 'restore' => 'Wiederherstellen', 'login_placeholder' => 'Benutzername', 'password_placeholder' => 'Passwort', - 'remember_me' => 'Angemeldet bleiben', 'forgot_password' => "Passwort vergessen?", 'enter_email' => "Bitte E-Mail-Adresse eingeben", 'enter_login' => "Bitte Benutzernamen eingeben", @@ -129,8 +112,6 @@ return [ 'last_name' => 'Nachname', 'full_name' => 'Kompletter Name', 'email' => 'E-Mail', - 'role_field' => 'Rolle', - 'role_comment' => 'Rollen definieren Benutzerberechtigungen, die auf Benutzerebene auf der Registerkarte Berechtigungen überschrieben werden können.', 'groups' => 'Gruppen', 'groups_comment' => 'Geben Sie hier die Gruppenzugehörigkeit an', 'avatar' => 'Avatar', @@ -167,25 +148,9 @@ return [ 'return' => 'Zurück zur Gruppen-Übersicht', 'users_count' => 'Benutzer', ], - 'role' => [ - 'name' => 'Rolle', - 'name_field' => 'Name', - 'name_comment' => 'Der Name wird in der Rollenliste auf dem Administratorformular angezeigt.', - 'description_field' => 'Beschreibung', - 'code_field' => 'Code', - 'code_comment' => 'Geben Sie einen eindeutigen Code an, wenn Sie mit der API auf das Rollenobjekt zugreifen möchten.', - 'menu_label' => 'Rollen verwalten', - 'list_title' => 'Rollen verwalten', - 'new' => 'Neue Rolle', - 'delete_confirm' => 'Diese Administratorrolle löschen?', - 'return' => 'Zurück zur Rollenliste', - 'users_count' => 'Benutzer', - ], 'preferences' => [ 'not_authenticated' => 'Zum Speichern oder Anzeigen dieser Einstellungen liegt kein Nutzerkonto vor' - ], - 'trashed_hint_title' => 'Dieses Konto wurde gelöscht.', - 'trashed_hint_desc' => 'Dieses Konto wurde gelöscht und kann nicht mehr angemeldet werden. Um es wiederherzustellen, klicken Sie auf das Symbol "Benutzer wiederherstellen" unten rechts', + ] ], 'list' => [ 'default_title' => 'Auflisten', @@ -230,11 +195,6 @@ return [ 'remove_confirm' => 'Sind Sie sicher?', 'remove_file' => 'Datei entfernen', ], - 'repeater' => [ - 'add_new_item' => 'Neues Element hinzufügen', - 'min_items_failed' => ':name erfordert ein Minimum an :min Elementen, aber es wurden nur :items bereitgestellt', - 'max_items_failed' => ':name lässt nur bis zu :max Elemente zu, :items wurden bereitgestellt', - ], 'form' => [ 'create_title' => "Neuer :name", 'update_title' => "Bearbeite :name", @@ -352,8 +312,6 @@ return [ 'permissions' => 'Verzeichnis :name oder ein Unterverzeichnis kann nicht von PHP beschrieben werden. Bitte setzen Sie die korrekten Rechte für den Webserver in diesem Verzeichnis.', 'extension' => 'Die PHP Erweiterung :name ist nicht installiert. Bitte installieren Sie diese Library und aktivieren Sie die Erweiterung.', 'plugin_missing' => 'Das Plugin :name hat eine Abhängigkeit die nicht installiert ist. Bitte installieren Sie alle benötigten Plugins.', - 'debug' => 'Der Debug-Modus ist aktiviert. Dies wird für Produktionsinstallationen nicht empfohlen.', - 'decompileBackendAssets' => 'Assets im Backend sind derzeit dekompiliert. Dies wird für Produktionsinstallationen nicht empfohlen.', ], 'editor' => [ 'menu_label' => 'Editor Einstellungen', @@ -409,8 +367,6 @@ return [ 'minimal' => 'Minimal', 'full' => 'Vollständig', ], - 'paragraph_formats' => 'Absatzformatierungen', - 'paragraph_formats_comment' => 'Die Optionen, welche in der Dropdown-Liste für Absatzformatierungen angezeigt werden.', ], 'tooltips' => [ 'preview_website' => 'Vorschau der Webseite' @@ -430,8 +386,6 @@ return [ 'brand' => 'Brand', 'logo' => 'Logo', 'logo_description' => 'Lade ein eigenes Logo hoch, das im Backend verwendet werden soll.', - 'favicon' => 'Favicon', - 'favicon_description' => 'Laden Sie ein benutzerdefiniertes Favicon zur Verwendung im Back-End hoch', 'app_name' => 'App-Name', 'app_name_description' => 'Dieser Name wird als Titel des Backends angezeigt.', 'app_tagline' => 'App-Tagline', @@ -445,7 +399,6 @@ return [ 'navigation' => 'Navigation', 'menu_mode' => 'Menustyles', 'menu_mode_inline' => 'Inline', - 'menu_mode_inline_no_icons' => 'Inline (ohne Icons)', 'menu_mode_tile' => 'Tiles', 'menu_mode_collapsed' => 'Collapsed' ], @@ -550,7 +503,6 @@ return [ ], 'permissions' => [ 'manage_media' => 'Medien verwalten', - 'allow_unsafe_markdown' => 'Unsicheres Markdown verwenden (kann Javascript enthalten)', ], 'mediafinder' => [ 'label' => 'Media Finder', @@ -582,12 +534,7 @@ return [ 'multiple_selected' => 'Mehrere Dateien ausgewählt.', 'uploading_file_num' => 'Lade :number Datei(en)...', 'uploading_complete' => 'Upload vollständig', - 'uploading_error' => 'Upload fehlgeschlagen', - 'type_blocked' => 'Der verwendete Dateityp ist aus Sicherheitsgründen gesperrt.', 'order_by' => 'Sortieren nach', - 'direction' => 'Direction', - 'direction_asc' => 'Aufsteigend', - 'direction_desc' => 'Absteigend', 'folder' => 'Ordner', 'no_files_found' => 'Keine entsprechenden Dateien gefunden.', 'delete_empty' => 'Bitte Wählen Sie Dateien zum Löschen aus.', @@ -610,11 +557,11 @@ return [ 'restore' => 'Alle Änderungen rückgängig machen', 'resize' => 'Größe anpassen...', 'selection_mode_normal' => 'Normal', - 'selection_mode_fixed_ratio' => 'Festes Verhältnis', - 'selection_mode_fixed_size' => 'Feste Größe', + 'selection_mode_fixed_ratio' => 'Fixes Verhältnis', + 'selection_mode_fixed_size' => 'Fixe Größe', 'height' => 'Höhe', 'width' => 'Breite', - 'selection_mode' => 'Auswahlmodus', + 'selection_mode' => 'Selection mode', 'resize_image' => 'Bildgröße anpassen', 'image_size' => 'Dimensionen:', 'selected_size' => 'Ausgewählt:' diff --git a/modules/backend/lang/en/lang.php b/modules/backend/lang/en/lang.php index aca0ab6cd..368664c63 100644 --- a/modules/backend/lang/en/lang.php +++ b/modules/backend/lang/en/lang.php @@ -9,7 +9,6 @@ return [ 'invalid_type' => 'Invalid field type used :type.', 'options_method_invalid_model' => "The attribute ':field' does not resolve to a valid model. Try specifying the options method for model class :model explicitly.", 'options_method_not_exists' => "The model class :model must define a method :method() returning options for the ':field' form field.", - 'options_static_method_invalid_value' => "The static method ':method()' on :class did not return a valid options array.", 'colors_method_not_exists' => "The model class :model must define a method :method() returning html color HEX codes for the ':field' form field.", ], 'widget' => [ @@ -373,7 +372,6 @@ return [ 'editor' => [ 'menu_label' => 'Editor settings', 'menu_description' => 'Customize the global editor preferences, such as font size and color scheme.', - 'preview' => 'Preview', 'font_size' => 'Font size', 'tab_size' => 'Tab size', 'use_hard_tabs' => 'Indent using tabs', diff --git a/modules/backend/lang/es/lang.php b/modules/backend/lang/es/lang.php index e8c0a257e..2e5764c61 100644 --- a/modules/backend/lang/es/lang.php +++ b/modules/backend/lang/es/lang.php @@ -307,11 +307,11 @@ return [ 'auto_closing' => 'Cerrado de etiquetas automático', 'show_invisibles' => 'Mostrar caracteres invisibles', 'show_gutter' => 'Mostrar numeros de línea', - 'basic_autocompletion' => 'Autocompletado Basico (Ctrl + Espacio)', - 'live_autocompletion' => 'Autocompletado en Vivo', - 'enable_snippets' => 'Activar uso de Snippets', - 'display_indent_guides' => 'Mostrar Guias de Identado', - 'show_print_margin' => 'Mostrar Margen de impresión', + 'basic_autocompletion'=> 'Autocompletado Basico (Ctrl + Espacio)', + 'live_autocompletion'=> 'Autocompletado en Vivo', + 'enable_snippets'=> 'Activar uso de Snippets', + 'display_indent_guides'=> 'Mostrar Guias de Identado', + 'show_print_margin'=> 'Mostrar Margen de impresión', 'mode_off' => 'Off', 'mode_fluid' => 'Fluido', '40_characters' => '40 Caracteres', @@ -396,8 +396,7 @@ return [ 'filter' => [ 'all' => 'todo', 'options_method_not_exists' => "La clase de modelo :model debe definir un método :method() para regresar opciones para el filtro ':filter'.", - 'date_all' => 'todo el período', - 'number_all' => 'todos los números' + 'date_all' => 'todo el período' ], 'import_export' => [ 'upload_csv_file' => '1. Subir un archivo CSV', diff --git a/modules/backend/lang/it/lang.php b/modules/backend/lang/it/lang.php index e0dab8b92..022bdbb33 100644 --- a/modules/backend/lang/it/lang.php +++ b/modules/backend/lang/it/lang.php @@ -228,7 +228,7 @@ return [ 'preview_no_record_message' => 'Nessun record selezionato.', 'select' => 'Seleziona', 'select_all' => 'seleziona tutto', - 'select_none' => 'deseleziona tutto', + 'select_none' => 'non selezionare niente', 'select_placeholder' => 'seleziona', 'insert_row' => 'Inserisci riga', 'insert_row_below' => 'Inserisci riga sotto', diff --git a/modules/backend/lang/nl/lang.php b/modules/backend/lang/nl/lang.php index 4c8375b32..d214a087c 100644 --- a/modules/backend/lang/nl/lang.php +++ b/modules/backend/lang/nl/lang.php @@ -9,7 +9,6 @@ return [ 'invalid_type' => 'Ongeldig type veld: :type.', 'options_method_invalid_model' => "Het attribuut ':field' levert geen geldig model op. Probeer de opties methode expliciet te specifieren voor modelklasse :model.", 'options_method_not_exists' => 'De modelklasse :model moet de methode :method() definiëren met daarin opties voor het veld ":field".', - 'options_static_method_invalid_value' => "De statische methode ':method()' in :class leverde geen geldige array met opties op.", 'colors_method_not_exists' => 'De modelklasse :model moet de methode :method() definiëren met daarin html HEX kleurcodes voor het veld ":field".', ], 'widget' => [ @@ -373,7 +372,6 @@ return [ 'editor' => [ 'menu_label' => 'Editor instellingen', 'menu_description' => 'Beheer editor instellingen, zoals lettergrootte en kleurschema.', - 'preview' => 'Voorbeeldweergave', 'font_size' => 'Lettergrootte', 'tab_size' => 'Tab grootte', 'use_hard_tabs' => 'Inspringen met tabs', @@ -408,7 +406,6 @@ return [ 'label' => 'Label', 'class_name' => 'Class naam', 'markup_tags' => 'Opmaak HTML-tags', - 'markup_tag' => 'Opmaak HTML-tag', 'allowed_empty_tags' => 'Toegestane lege HTML-tags', 'allowed_empty_tags_comment' => 'Een lijst van HTML-tags die niet worden verwijderd als ze leeg zijn.', 'allowed_tags' => 'Toegestane HTML-tags', @@ -419,7 +416,6 @@ return [ 'remove_tags_comment' => 'Een lijst van HTML-tags die samen met hun inhoud worden verwijderd.', 'line_breaker_tags' => 'Line breaker tags', 'line_breaker_tags_comment' => 'Een lijst van HTML-tags waartussen een line breaker element wordt geplaatst.', - 'toolbar_options' => 'Toolbar opties', 'toolbar_buttons' => 'Toolbar knoppen', 'toolbar_buttons_comment' => 'De toolbar knoppen die standaard getoond worden door de Rich Editor.', 'toolbar_buttons_preset' => 'Voeg preset toe voor toolbar knoppen:', @@ -428,11 +424,9 @@ return [ 'minimal' => 'Minimaal', 'full' => 'Volledig', ], - 'paragraph_formats' => 'Paragraaf formaten', - 'paragraph_formats_comment' => 'De opties die in de "Paragraaf formaat" lijst zullen verschijnen.', ], 'tooltips' => [ - 'preview_website' => 'Voorbeeldweergave website', + 'preview_website' => 'Voorvertoning website', ], 'mysettings' => [ 'menu_label' => 'Mijn instellingen', diff --git a/modules/backend/lang/ru/lang.php b/modules/backend/lang/ru/lang.php index eedd93811..f7db22112 100644 --- a/modules/backend/lang/ru/lang.php +++ b/modules/backend/lang/ru/lang.php @@ -7,9 +7,8 @@ return [ ], 'field' => [ 'invalid_type' => 'Использован неверный тип поля: :type.', - 'options_method_invalid_model' => "Атрибут ':field' не соответствует допустимой модели. Попробуйте явно указать метод параметров для класса :model .", 'options_method_not_exists' => "Класс модели :model должен содержать метод :method(), возвращающий опции для поля формы ':field'.", - 'colors_method_not_exists' => "Класс модели :model должен содержать метод :method(), возвращающий HTML цвет в HEX для поля формы ':field'.", + 'colors_method_not_exists' => "Класс модели :model должен содержать метод :method(), возвращающий HTML цвет в HEX для поля формы ':field'." ], 'widget' => [ 'not_registered' => "Класс виджета ':name' не зарегистрирован.", @@ -25,12 +24,12 @@ return [ 'access_denied' => [ 'label' => 'Доступ запрещен', 'help' => 'У вас нет необходимых прав для просмотра этой страницы.', - 'cms_link' => 'Перейти к CMS', + 'cms_link' => 'Перейти к CMS' ], 'no_database' => [ 'label' => 'Отсутствует база данных', 'help' => "Для доступа к серверу требуется база данных. Проверьте, что база данных настроена и перенесена, прежде чем повторять попытку.", - 'cms_link' => 'Вернуться на главную страницу', + 'cms_link' => 'Вернуться на главную страницу' ], ], 'partial' => [ @@ -42,12 +41,6 @@ return [ 'not_found' => "AJAX обработчик ':name' не найден.", ], 'account' => [ - 'impersonate' => 'Имперсонация пользователя', - 'impersonate_confirm' => 'Вы уверены, что хотите имперсонировать себя в качестве этого пользователя? Вы сможете вернуться в исходное состояние выйдя из системы.', - 'impersonate_success' => 'Теперь вы имперсонированы как этот пользователь', - 'impersonate_working' => 'Имперсонация...', - 'impersonating' => 'Имперсонация :full_name', - 'stop_impersonating' => 'Остановить имперсонацию', 'signed_in_as' => 'Выполнен вход как :full_name', 'sign_out' => 'Выйти', 'login' => 'Вход', @@ -57,9 +50,9 @@ return [ 'password_placeholder' => 'пароль', 'remember_me' => 'Оставаться в системе', 'forgot_password' => 'Забыли пароль?', - 'enter_email' => 'Введите ваш Email', + 'enter_email' => 'Введите вашу почту', 'enter_login' => 'Введите ваш Логин', - 'email_placeholder' => 'email', + 'email_placeholder' => 'почта', 'enter_new_password' => 'Введите новый пароль', 'password_reset' => 'Сбросить пароль', 'restore_success' => 'На вашу электронную почту отправлено сообщение с инструкциями для восстановления пароля.', @@ -70,7 +63,7 @@ return [ 'apply' => 'Применить', 'cancel' => 'Отменить', 'delete' => 'Удалить', - 'ok' => 'OK', + 'ok' => 'OK' ], 'dashboard' => [ 'menu_label' => 'Панель управления', @@ -99,7 +92,7 @@ return [ 'expand_all' => 'Развернуть всё', 'status' => [ 'widget_title_default' => 'Статус системы', - 'update_available' => '{0} нет новых обновлений!|{1} доступно новое обновление!|[2,Inf] доступны новые обновления!', + 'update_available' => '{0} нет новый обновлений!|{1} доступно новое обновление!|[2,Inf] доступны новые обновления!', 'updates_pending' => 'Доступны обновления', 'updates_nil' => 'Используется последняя версия', 'updates_link' => 'Обновить', @@ -109,7 +102,7 @@ return [ 'core_build' => 'Сборка', 'event_log' => 'Лог событий', 'request_log' => 'Лог запросов', - 'app_birthday' => 'Онлайн с', + 'app_birthday' => 'Онлайн с' ], 'welcome' => [ 'widget_title_default' => 'Добро пожаловать', @@ -118,7 +111,7 @@ return [ 'first_sign_in' => 'Это первый раз, когда вы вошли в систему.', 'last_sign_in' => 'Последний раз вы заходили', 'view_access_logs' => 'Посмотреть лог доступа', - 'nice_message' => 'Хорошего дня!', + 'nice_message' => 'Хорошего дня!' ], ], 'user' => [ @@ -170,7 +163,7 @@ return [ 'new' => 'Добавить группу', 'delete_confirm' => 'Вы действительно хотите удалить эту группу администраторов?', 'return' => 'Вернуться к списку групп', - 'users_count' => 'Пользователи', + 'users_count' => 'Пользователи' ], 'role' => [ 'name' => 'Роль', @@ -184,10 +177,10 @@ return [ 'new' => 'Новая роль', 'delete_confirm' => 'Удалить эту роль администратора?', 'return' => 'Вернуться к списку ролей', - 'users_count' => 'Пользователи', + 'users_count' => 'Пользователи' ], 'preferences' => [ - 'not_authenticated' => 'Невозможно загрузить или сохранить настройки для неавторизованного пользователя.', + 'not_authenticated' => 'Невозможно загрузить или сохранить настройки для неавторизованного пользователя.' ], 'trashed_hint_title' => 'Этот аккаунт был удален', 'trashed_hint_desc' => 'Этот аккаунт был удален и не может быть авторизован. Чтобы восстановить его, нажмите иконку восстановления пользователя в правом нижнем углу.', @@ -221,7 +214,7 @@ return [ 'delete_selected_confirm' => 'Удалить выбранные записи?', 'delete_selected_success' => 'Выбранные записи успешно удалены.', 'column_switch_true' => 'Да', - 'column_switch_false' => 'Нет', + 'column_switch_false' => 'Нет' ], 'fileupload' => [ 'attachment' => 'Приложение', @@ -233,7 +226,7 @@ return [ 'upload_file' => 'Загрузить файл', 'upload_error' => 'Ошибка загрузки', 'remove_confirm' => 'Вы уверены?', - 'remove_file' => 'Удалить файл', + 'remove_file' => 'Удалить файл' ], 'repeater' => [ 'add_new_item' => 'Добавить новый объект', @@ -299,16 +292,15 @@ return [ 'delete_row' => 'Удалить строку', 'concurrency_file_changed_title' => 'Файл был изменен', 'concurrency_file_changed_description' => 'Файл,редактируемый вами, был изменен другим пользователем. Вы можете перезагрузить файл и потерять ваши изменения или перезаписать его', - 'return_to_list' => 'Вернуться к списку', + 'return_to_list' => 'Вернуться к списку' ], 'recordfinder' => [ 'find_record' => 'Найти запись', - 'invalid_model_class' => 'Предоставленный класс модели ":modelClass" для поиска записи является недействительным', - 'cancel' => 'Отмена', + 'cancel' => 'Отмена' ], 'pagelist' => [ 'page_link' => 'Ссылка на страницу', - 'select_page' => 'Выберите страницу...', + 'select_page' => 'Выберите страницу...' ], 'relation' => [ 'missing_config' => "Поведение отношения не имеет конфигурации для ':config'.", @@ -341,11 +333,11 @@ return [ 'link_name' => 'Соединение :name', 'unlink' => 'Отвязать', 'unlink_name' => 'Разъединение :name', - 'unlink_confirm' => 'Вы уверены?', + 'unlink_confirm' => 'Вы уверены?' ], 'reorder' => [ 'default_title' => 'Сортировать записи', - 'no_records' => 'Нет доступных записей для сортировки.', + 'no_records' => 'Нет доступных записей для сортировки.' ], 'model' => [ 'name' => 'Модель', @@ -363,7 +355,6 @@ return [ 'extension' => 'Расширение PHP :name не установлено. Установите эту библиотеку и активируйте расширение.', 'plugin_missing' => 'Плагин :name имеет зависимость. Установите этот плагин.', 'debug' => 'Режим отладки включен. Это не рекомендуется для рабочих инсталяций.', - 'decompileBackendAssets' => 'Ассеты в бэкенде в настоящее время декомпилированы. Это не рекомендуется для рабочих инсталяций.', ], 'editor' => [ 'menu_label' => 'Настройки редактора', @@ -402,7 +393,6 @@ return [ 'label' => 'Название', 'class_name' => 'Класс', 'markup_tags' => 'Теги разметки', - 'markup_tag' => 'Тег разметки', 'allowed_empty_tags' => 'Разрешенные пустые теги', 'allowed_empty_tags_comment' => 'Список тегов, которые не будут удаляться, если внутри них нет содержания.', 'allowed_tags' => 'Разрешенные теги', @@ -413,29 +403,20 @@ return [ 'remove_tags_comment' => 'Список тегов, которые будут удалены вместе с их содержанием.', 'line_breaker_tags' => 'Теги с переводом строки', 'line_breaker_tags_comment' => 'Список тегов, в которых будет использоваться тег перевода строки', - 'toolbar_options' => 'Опции панели инструментов', 'toolbar_buttons' => 'Кнопки панели инструментов', - 'toolbar_buttons_comment' => 'Кнопки панели инструментов, которые будут отображаться в Rich Editor по умолчанию.', - 'toolbar_buttons_preset' => 'Вставить предустановленный набор кнопок панели инструментов:', - 'toolbar_buttons_presets' => [ - 'default' => 'По умолчанию', - 'minimal' => 'Минимальный', - 'full' => 'Полный', - ], - 'paragraph_formats' => 'Форматы абзацев', - 'paragraph_formats_comment' => 'Опции появляющиеся в выпадающем списке Форматы абзацев.', + 'toolbar_buttons_comment' => 'Кнопки панели инструментов, которые будут отображаться в Rich Editor по умолчанию.' ], 'tooltips' => [ - 'preview_website' => 'Просмотр сайта', + 'preview_website' => 'Просмотр сайта' ], 'mysettings' => [ 'menu_label' => 'Мои настройки', - 'menu_description' => 'Управление настройками учетной записи администратора.', + 'menu_description' => 'Управление настройками учетной записи администратора.' ], 'myaccount' => [ 'menu_label' => 'Мой аккаунт', 'menu_description' => 'Управление личной информацией (имя, почта, пароль)', - 'menu_keywords' => 'безопасность логин', + 'menu_keywords' => 'безопасность логин' ], 'branding' => [ 'menu_label' => 'Персонализация панели управления', @@ -460,7 +441,7 @@ return [ 'menu_mode_inline' => 'Строчный', 'menu_mode_inline_no_icons' => 'Строчный (без иконок)', 'menu_mode_tile' => 'Плитка', - 'menu_mode_collapsed' => 'Схлопнутый', + 'menu_mode_collapsed' => 'Схлопнутый' ], 'backend_preferences' => [ 'menu_label' => 'Настройки панели управления', @@ -470,7 +451,7 @@ return [ 'timezone' => 'Часовой пояс', 'timezone_comment' => 'Выводить даты в выбранном часовом поясе.', 'locale' => 'Язык', - 'locale_comment' => 'Выберите желаемый язык панели управления.', + 'locale_comment' => 'Выберите желаемый язык панели управления.' ], 'access_log' => [ 'hint' => 'В этом журнале отображается список успешных попыток авторизаций администраторов. Записи хранятся :days дней.', @@ -483,13 +464,13 @@ return [ 'ip_address' => 'IP адрес', 'first_name' => 'Имя', 'last_name' => 'Фамилия', - 'email' => 'Email', + 'email' => 'Почта' ], 'filter' => [ 'all' => 'все', 'options_method_not_exists' => "Модель класса :model должна определить метод :method() возвращающего варианты для фильтра ':filter'.", 'date_all' => 'весь период', - 'number_all' => 'все номера', + 'number_all' => 'все номера' ], 'import_export' => [ 'upload_csv_file' => '1. Загрузка CSV-файл', @@ -560,14 +541,12 @@ return [ 'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)', 'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)', 'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)', - 'windows_1250' => 'Windows-1250 (CP1250, Central and Eastern European)', 'windows_1251' => 'Windows-1251 (CP1251)', 'windows_1252' => 'Windows-1252 (CP1252)' ] ], 'permissions' => [ 'manage_media' => 'Загрузка и управление медиаконтентом - изображениями, видео, звуками, документами', - 'allow_unsafe_markdown' => 'Использовать небезопасный Markdown (может включать Javascript)', ], 'mediafinder' => [ 'label' => 'Поиск медиа', @@ -635,6 +614,6 @@ return [ 'selection_mode' => 'Режим выделения', 'resize_image' => 'Изменение размера изображения', 'image_size' => 'Размер изображения:', - 'selected_size' => 'Выбрано:', + 'selected_size' => 'Выбрано:' ], ]; diff --git a/modules/backend/lang/sl/lang.php b/modules/backend/lang/sl/lang.php index 4cb459a2b..d8ca85772 100644 --- a/modules/backend/lang/sl/lang.php +++ b/modules/backend/lang/sl/lang.php @@ -6,11 +6,10 @@ return [ 'invalid_login' => 'Podatki, ki ste jih vnesli, se ne ujemajo z našimi zapisi. Prosimo, ponovno preverite podatke in poskusite znova.', ], 'field' => [ - 'invalid_type' => 'Uporabljen je neveljaven tip polja :type.', - 'options_method_invalid_model' => "Atribut ':field' ne ustreza veljavnemu modelu. Poskusite natančno določiti možnosti metode za model :model.", - 'options_method_not_exists' => "Model :model mora vsebovati metodo :method(), ki vrača možnosti za polje ':field' na obrazcu.", - 'options_static_method_invalid_value' => "Statična metoda ':method()' v razredu :class ni vrnila veljavnih možnosti.", - 'colors_method_not_exists' => "Model :model mora vsebovati metodo :method(), ki vrača HTML barvne kode v HEX formatu za polje ':field' na obrazcu.", + 'invalid_type' => 'Uporabljen je neveljaven tip polja :type.', + 'options_method_invalid_model' => "Atribut ':field' ne ustreza veljavnemu modelu. Poskusite natančno določiti možnosti metode za model :model.", + 'options_method_not_exists' => "Model :model mora vsebovati metodo :method(), ki vrača možnosti za polje ':field' na obrazcu.", + 'colors_method_not_exists' => "Model :model mora vsebovati metodo :method(), ki vrača HTML barvne kode v HEX formatu za polje ':field' na obrazcu.", ], 'widget' => [ 'not_registered' => "Ime vtičnika ':name' ni bilo registrirano.", @@ -49,10 +48,6 @@ return [ 'impersonate_working' => 'Impersoniram...', 'impersonating' => 'Impersonacija uporabnika :full_name', 'stop_impersonating' => 'Prekliči impersonacijo', - 'unsuspend' => 'Odsuspendiraj', - 'unsuspend_confirm' => 'Ali ste prepričani, da želite odsuspendirati tega uporabnika?', - 'unsuspend_success' => 'Uporabnik je odsuspendiran.', - 'unsuspend_working' => 'Odsuspendiram...', 'signed_in_as' => 'Prijavljeni ste kot :full_name', 'sign_out' => 'Odjava', 'login' => 'Prijava', @@ -407,7 +402,6 @@ return [ 'label' => 'Opis', 'class_name' => 'Oznaka razreda', 'markup_tags' => 'Označevalne oznake', - 'markup_tag' => 'Označevalna oznaka', 'allowed_empty_tags' => 'Dovoljene prazne oznake', 'allowed_empty_tags_comment' => 'Seznam oznak, ki niso odstranjene, če v njih ni vsebine.', 'allowed_tags' => 'Dovoljene oznake', @@ -418,7 +412,6 @@ return [ 'remove_tags_comment' => 'Seznam oznak, ki so odstranjene skupaj z njihovo vsebino.', 'line_breaker_tags' => 'Oznake prekinitve vrstic', 'line_breaker_tags_comment' => 'Seznam oznak, ki se uporabljajo za postavitev elementa prekinitve med vrstice.', - 'toolbar_options' => 'Nastavitve orodne vrstice', 'toolbar_buttons' => 'Gumbi orodne vrstice', 'toolbar_buttons_comment' => 'Gumbi orodne vrstice, ki se privzeto prikažejo v urejevalniku. [fullscreen, bold, italic, underline, strikeThrough, subscript, superscript, fontFamily, fontSize, |, color, emoticons, inlineStyle, paragraphStyle, |, paragraphFormat, align, formatOL, formatUL, outdent, indent, quote, insertHR, -, insertLink, insertImage, insertVideo, insertAudio, insertFile, insertTable, undo, redo, clearFormatting, selectAll, html]', 'toolbar_buttons_preset' => 'Vstavite prednastavljeno konfiguracijo gumbov orodne vrstice:', @@ -427,8 +420,6 @@ return [ 'minimal' => 'Minimalno', 'full' => 'Polno', ], - 'paragraph_formats' => 'Formati odstavkov', - 'paragraph_formats_comment' => 'Možnosti, ki se prikažejo v spustnem seznamu Format odstavka.', ], 'tooltips' => [ 'preview_website' => 'Ogled spletne strani', @@ -479,7 +470,7 @@ return [ ], 'access_log' => [ 'hint' => 'Ta dnevnik beleži seznam uspešnih prijav administratorjev. Zapisi se hranijo :days dni.', - 'menu_label' => 'Dnevnik dostopov', + 'menu_label' => 'Dnevnik dostopa', 'menu_description' => 'Prikaz seznama uspešnih prijav administratorjev.', 'id' => 'ID', 'created_at' => 'Datum in čas', @@ -567,12 +558,11 @@ return [ 'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)', 'windows_1250' => 'Windows-1250 (CP1250, Central and Eastern European)', 'windows_1251' => 'Windows-1251 (CP1251)', - 'windows_1252' => 'Windows-1252 (CP1252)', - ], + 'windows_1252' => 'Windows-1252 (CP1252)' + ] ], 'permissions' => [ - 'manage_media' => 'Nalaganje in upravljanje z media vsebinami - slike, video posnetki, zvočni posnetki, dokumenti', - 'allow_unsafe_markdown' => 'Dovoli uporabo nevarnih označb (lahko vključi Javascript)', + 'manage_media' => 'Nalaganje in upravljanje z media vsebinami - slike, video posnetki, zvočni posnetki, dokumenti', ], 'mediafinder' => [ 'label' => 'Media brskalnik', diff --git a/modules/backend/lang/zh-tw/lang.php b/modules/backend/lang/zh-tw/lang.php index 9655ef6e6..35ab3510b 100644 --- a/modules/backend/lang/zh-tw/lang.php +++ b/modules/backend/lang/zh-tw/lang.php @@ -52,7 +52,6 @@ return [ 'widget_width' => '寬度', 'full_width' => '全部寬度', 'add_widget' => '新增元件', - 'manage_widgets' => '管理元件', 'widget_inspector_title' => '元件設定', 'widget_inspector_description' => '設定報表元件', 'widget_columns_label' => '寬度 :columns', @@ -63,12 +62,6 @@ return [ 'widget_new_row_description' => '把元件放到新列', 'widget_title_label' => '元件標題', 'widget_title_error' => '需要元件標題', - 'reset_layout' => '重置版面', - 'reset_layout_confirm' => '確定重置為預設版面?', - 'reset_layout_success' => '版面已重置。', - 'make_default' => '設定為預設', - 'make_default_confirm' => '確定將此版面設定為預設?', - 'make_default_success' => '已設定此版面為預設。', 'status' => [ 'widget_title_default' => '系統狀態', 'update_available' => '{0} 更新可用!|{1} 更新可用!|[2,Inf] 更新可用!' @@ -177,7 +170,7 @@ return [ 'field_off' => '關', 'field_on' => '開', 'add' => '增加', - 'apply' => '確定', + 'apply' => '應用', 'cancel' => '取消', 'close' => '關閉', 'confirm' => '確認', @@ -304,9 +297,7 @@ return [ 'email' => 'Email' ], 'filter' => [ - 'all' => '全部', - 'date_all' => '全部區間', - 'number_all' => '全部數目', + 'all' => '全部' ], 'permissions' => [ 'manage_media' => 'Upload and manage media contents - images, videos, sounds, documents' @@ -325,10 +316,10 @@ return [ 'display' => '顯示', 'filter_everything' => '所有', 'filter_images' => '圖片', - 'filter_video' => '影片', - 'filter_audio' => '音訊', + 'filter_video' => '視頻', + 'filter_audio' => '音頻', 'filter_documents' => '文檔', - 'library' => '媒體庫', + 'library' => '庫', 'size' => '大小', 'title' => '標題', 'last_modified' => '最近修改', @@ -341,7 +332,7 @@ return [ 'multiple_selected' => '多選.', 'uploading_file_num' => '上傳 :number 檔案...', 'uploading_complete' => '上傳完畢', - 'order_by' => '排列方式', + 'order_by' => '排序', 'folder' => '檔案夾', 'no_files_found' => '沒找到您請求的檔案.', 'delete_empty' => '請選擇刪除項.', @@ -371,9 +362,6 @@ return [ 'selection_mode' => '選擇模式', 'resize_image' => '調整圖片', 'image_size' => '圖片大小:', - 'selected_size' => '選中:', - 'direction' => '順序', - 'direction_asc' => '升冪', - 'direction_desc' => '降冪', + 'selected_size' => '選中:' ] ]; diff --git a/modules/backend/layouts/_custom_styles.htm b/modules/backend/layouts/_custom_styles.htm index cb4e3ad82..8eec0413b 100644 --- a/modules/backend/layouts/_custom_styles.htm +++ b/modules/backend/layouts/_custom_styles.htm @@ -9,6 +9,6 @@ diff --git a/modules/backend/layouts/_mainmenu.htm b/modules/backend/layouts/_mainmenu.htm index 3327218e4..0cf31ac6d 100644 --- a/modules/backend/layouts/_mainmenu.htm +++ b/modules/backend/layouts/_mainmenu.htm @@ -49,24 +49,15 @@