diff --git a/modules/backend/assets/css/october.css b/modules/backend/assets/css/october.css
index 478fc8fb2..f8f3d356c 100644
--- a/modules/backend/assets/css/october.css
+++ b/modules/backend/assets/css/october.css
@@ -252,7 +252,7 @@
.oc-logo{background-image:url(../images/october-logo.svg);background-position:50% 50%;background-repeat:no-repeat;background-size:contain}
.layout.control-tabs.oc-logo-transparent:not(.has-tabs),.layout-cell.oc-logo-transparent{background-size:50% auto;background-repeat:no-repeat;background-image:url(../images/october-logo.svg);background-position:50% 50%;position:relative}
.layout.control-tabs.oc-logo-transparent:not(.has-tabs):after,.layout-cell.oc-logo-transparent:after{content:'';display:table-cell;position:absolute;left:0;top:0;height:100%;width:100%;background:rgba(249,249,249,0.7)}
-.report-widget{padding:15px;background:white;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
+.report-widget{padding:15px;background:white;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;font-size:13px}
.report-widget h3{font-size:14px;color:#7e8c8d;text-transform:uppercase;font-weight:600;margin-top:0;margin-bottom:30px}
.report-widget .height-100{height:100px}
.report-widget .height-200{height:200px}
@@ -260,7 +260,14 @@
.report-widget .height-400{height:400px}
.report-widget .height-500{height:500px}
.report-widget p.report-description{margin-bottom:0;margin-top:15px;font-size:12px;line-height:190%;color:#7e8c8d}
+.report-widget a{color:#7e8c8d;text-decoration:none}
+.report-widget a:hover{color:#0181b9;text-decoration:none}
.report-widget p.flash-message.static{margin-bottom:0}
+.report-widget .icon-circle.success{color:#31ac5f}
+.report-widget .icon-circle.primary{color:#34495e}
+.report-widget .icon-circle.warning{color:#f0ad4e}
+.report-widget .icon-circle.danger{color:#ab2a1c}
+.report-widget .icon-circle.info{color:#5bc0de}
.control-treelist ol{padding:0;margin:0;list-style:none}
.control-treelist ol ol{margin:0;margin-left:15px;padding-left:15px;border-left:1px solid #dbdee0}
.control-treelist > ol > li > div.record:before{display:none}
diff --git a/modules/backend/assets/less/controls/reportwidgets.less b/modules/backend/assets/less/controls/reportwidgets.less
index d044bef37..821a661e1 100644
--- a/modules/backend/assets/less/controls/reportwidgets.less
+++ b/modules/backend/assets/less/controls/reportwidgets.less
@@ -3,9 +3,10 @@
background: white;
.box-sizing(border-box);
.border-radius(@border-radius-base);
+ font-size: @font-size-base - 1;
h3 {
- font-size: 14px;
+ font-size: @font-size-base;
color: @color-report-widget-title;
text-transform: uppercase;
font-weight: 600;
@@ -27,7 +28,24 @@
color: @color-report-widget-description;
}
+ a {
+ color: @color-report-widget-link;
+ text-decoration: none;
+ &:hover {
+ color: @link-color;
+ text-decoration: none;
+ }
+ }
+
p.flash-message.static {
margin-bottom: 0;
}
+
+ .icon-circle {
+ &.success { color: @brand-success; }
+ &.primary { color: @brand-primary; }
+ &.warning { color: @brand-warning; }
+ &.danger { color: @brand-danger; }
+ &.info { color: @brand-info; }
+ }
}
\ No newline at end of file
diff --git a/modules/backend/assets/less/core/variables.less b/modules/backend/assets/less/core/variables.less
index bee68d3cb..8ceb85332 100644
--- a/modules/backend/assets/less/core/variables.less
+++ b/modules/backend/assets/less/core/variables.less
@@ -119,6 +119,7 @@
@color-report-widget-title: #7e8c8d;
@color-report-widget-control-inactive: #b6b6b6;
@color-report-widget-description: @color-report-widget-title;
+@color-report-widget-link: @color-report-widget-title;
@color-treeview-item-bg: #ffffff;
@color-treeview-item-title: #2b3e50;
diff --git a/modules/backend/controllers/index/_warnings.htm b/modules/backend/controllers/index/_warnings.htm
deleted file mode 100644
index db076a269..000000000
--- a/modules/backend/controllers/index/_warnings.htm
+++ /dev/null
@@ -1,50 +0,0 @@
- extension_loaded('gd'),
- 'fileinfo' => extension_loaded('fileinfo'),
- 'Zip' => class_exists('ZipArchive'),
- 'cURL' => function_exists('curl_init') && defined('CURLOPT_FOLLOWLOCATION'),
- 'OpenSSL' => function_exists('openssl_random_pseudo_bytes'),
-];
-
-foreach ($writablePaths as $path) {
- if (!is_writable($path))
- $warnings[] = Lang::get('backend::lang.warnings.permissions', ['name' => ''.$path.'']);
-}
-foreach ($requiredExtensions as $extension => $installed) {
- if (!$installed)
- $warnings[] = Lang::get('backend::lang.warnings.extension', ['name' => ''.$extension.'']);
-}
-
-?>
-
-
diff --git a/modules/backend/lang/cs/lang.php b/modules/backend/lang/cs/lang.php
index 96e009313..0cd167cc3 100644
--- a/modules/backend/lang/cs/lang.php
+++ b/modules/backend/lang/cs/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'Musíte zadat název widgetu',
'status' => [
'widget_title_default' => 'Status systému',
- 'online' => 'online',
- 'maintenance' => 'v údržbě',
'update_available' => '{0} dostupných aktualizací!|{1} dostupná aktualizace!|[2,Inf] dostupných aktualizací!'
]
],
diff --git a/modules/backend/lang/el/lang.php b/modules/backend/lang/el/lang.php
index 5ed74f0c1..a9b0a369f 100644
--- a/modules/backend/lang/el/lang.php
+++ b/modules/backend/lang/el/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'O τίτλος του Widget είναι απαραίτητος.',
'status' => [
'widget_title_default' => 'Κατάσταση συστήματος',
- 'online' => 'ενεργό',
- 'maintenance' => 'σε συντήρηση',
'update_available' => '{0} διαθέσιμες ενημερώσεις!|{1} διαθέσιμη ενημέρωση!|[2,Inf] διαθέσιμες ενημερώσεις!',
]
],
diff --git a/modules/backend/lang/en/lang.php b/modules/backend/lang/en/lang.php
index f417b743e..b30e3830e 100644
--- a/modules/backend/lang/en/lang.php
+++ b/modules/backend/lang/en/lang.php
@@ -67,11 +67,29 @@ return [
'widget_title_error' => 'The Widget Title is required.',
'status' => [
'widget_title_default' => 'System status',
- 'online' => 'online',
- 'maintenance' => 'in maintenance',
- 'update_available' => '{0} updates available!|{1} update available!|[2,Inf] updates available!'
+ 'update_available' => '{0} updates available!|{1} update available!|[2,Inf] updates available!',
+ 'updates_pending' => 'Pending software updates',
+ 'updates_nil' => 'Software is up to date',
+ 'updates_link' => 'Update',
+ 'warnings_pending' => 'Some issues need attention',
+ 'warnings_nil' => 'No warnings to display',
+ 'warnings_link' => 'View',
+ 'core_build' => 'System build',
+ 'event_log' => 'Event log',
+ 'request_log' => 'Request log',
+ 'app_birthday' => 'Online since',
+ ],
+ 'welcome' => [
+ 'widget_title_default' => 'Welcome',
+ 'welcome_back_name' => 'Welcome back to :app, :name.',
+ 'welcome_to_name' => 'Welcome to :app, :name.',
+ 'first_sign_in' => 'This is the first time you have signed in.',
+ 'last_sign_in' => 'Your last sign in was',
+ 'view_access_logs' => 'View access logs',
+ 'nice_message' => 'Have a great day!',
]
],
+
'user' => [
'name' => 'Administrator',
'menu_label' => 'Administrators',
diff --git a/modules/backend/lang/es/lang.php b/modules/backend/lang/es/lang.php
index 81a81201b..f771a1857 100644
--- a/modules/backend/lang/es/lang.php
+++ b/modules/backend/lang/es/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'El título del módulo es obligatorio.',
'status' => [
'widget_title_default' => 'Estado del sistema',
- 'online' => 'en línea',
- 'maintenance' => 'en mantenimiento',
'update_available' => '{0} actualizaciones disponibles!|{1} actualización disponible!|[2,Inf] actualizaciones disponibles!'
]
],
diff --git a/modules/backend/lang/fa/lang.php b/modules/backend/lang/fa/lang.php
index bee25c83a..c87989be6 100644
--- a/modules/backend/lang/fa/lang.php
+++ b/modules/backend/lang/fa/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'گزینه "عنوان ابزارک" حتما باید وارد شود.',
'status' => [
'widget_title_default' => 'وضعیت سیستم',
- 'online' => 'online',
- 'maintenance' => 'در حال به روز رسانی',
'update_available' => '{0} به روز رسانی موجود است!|{1} به روز رسانی موجود است!|[2,Inf] به روز رسانی موجود است!',
]
],
diff --git a/modules/backend/lang/fr/lang.php b/modules/backend/lang/fr/lang.php
index 018c5b58a..1f0cda39b 100644
--- a/modules/backend/lang/fr/lang.php
+++ b/modules/backend/lang/fr/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'Le titre du Widget est obligatoire.',
'status' => [
'widget_title_default' => 'État du système',
- 'online' => 'en ligne',
- 'maintenance' => 'en cours de maintenance',
'update_available' => '{0} mise à jour disponible !|{1} mise à jour disponible !|[2,Inf] mises à jour disponibles !'
]
],
diff --git a/modules/backend/lang/hu/lang.php b/modules/backend/lang/hu/lang.php
index e3bf5c32f..e1a72cc67 100644
--- a/modules/backend/lang/hu/lang.php
+++ b/modules/backend/lang/hu/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'A widget címének megadása kötelező.',
'status' => [
'widget_title_default' => 'Rendszer állapota',
- 'online' => 'online',
- 'maintenance' => 'karbantartás',
'update_available' => '{0} frissítés érhető el!|{1} frissítés érhető el!|[2,Inf] frissítés érhető el!'
]
],
diff --git a/modules/backend/lang/id/lang.php b/modules/backend/lang/id/lang.php
index aaa810054..26a81cd14 100644
--- a/modules/backend/lang/id/lang.php
+++ b/modules/backend/lang/id/lang.php
@@ -64,8 +64,6 @@ return [
'widget_title_error' => 'Tajuk gawit diperlukan.',
'status' => [
'widget_title_default' => 'Status sistem',
- 'online' => 'daring',
- 'maintenance' => 'dalam perawatan',
'update_available' => '{0} pembaruan tersedia!|{1} pembaruan tersedia!|[2,Inf] pembaruan tersedia!'
]
],
diff --git a/modules/backend/lang/it/lang.php b/modules/backend/lang/it/lang.php
index 0f9f99703..2cc8edec6 100644
--- a/modules/backend/lang/it/lang.php
+++ b/modules/backend/lang/it/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'Il titolo del widget è un campo obbligatorio.',
'status' => [
'widget_title_default' => 'Stato del sistema',
- 'online' => 'online',
- 'maintenance' => 'in manutenzione',
'update_available' => '{0} aggiornamenti disponibili!|{1} aggiornamento disponibile!|[2,Inf] aggiornamenti disponibili!'
]
],
diff --git a/modules/backend/lang/ja/lang.php b/modules/backend/lang/ja/lang.php
index 1f109acfb..e67ec5a8a 100644
--- a/modules/backend/lang/ja/lang.php
+++ b/modules/backend/lang/ja/lang.php
@@ -64,8 +64,6 @@ return [
'widget_title_error' => 'ウィジェットタイトルを指定してください。',
'status' => [
'widget_title_default' => 'システム状態',
- 'online' => 'オンライン',
- 'maintenance' => 'メンテナンスモード',
'update_available' => '{0}個のアップデートが見つかりました。|{1} 個のアップデートが見つかりました。|[2,Inf] 個のアップデートが見つかりました。'
],
],
diff --git a/modules/backend/lang/lv/lang.php b/modules/backend/lang/lv/lang.php
index e642f93a0..ebf75f851 100644
--- a/modules/backend/lang/lv/lang.php
+++ b/modules/backend/lang/lv/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'Logrīka virsraksts ir obligāts.',
'status' => [
'widget_title_default' => 'Sistēmas statuss',
- 'online' => 'online',
- 'maintenance' => 'atkopšana',
'update_available' => '{0} atjauninājumi pieejami!|{1} atjauninājums pieejams!|[2,Inf] atjauninājumi pieejami!'
]
],
diff --git a/modules/backend/lang/nb-no/lang.php b/modules/backend/lang/nb-no/lang.php
index 6afddd05a..43a114ae5 100644
--- a/modules/backend/lang/nb-no/lang.php
+++ b/modules/backend/lang/nb-no/lang.php
@@ -64,8 +64,6 @@ return [
'widget_title_error' => 'Tittel er obligatorisk.',
'status' => [
'widget_title_default' => 'Systemstatus',
- 'online' => 'online',
- 'maintenance' => 'in maintenance',
'update_available' => '{0} oppdateringer tilgjengelig!|{1} oppdatering tilgjengelig!|[2,Inf] oppdateringer tilgjengelig!'
]
],
diff --git a/modules/backend/lang/nl/lang.php b/modules/backend/lang/nl/lang.php
index b8c362d2f..3c22b6e5b 100644
--- a/modules/backend/lang/nl/lang.php
+++ b/modules/backend/lang/nl/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'Een widget titel is verplicht.',
'status' => [
'widget_title_default' => 'Systeemstatus',
- 'online' => 'online',
- 'maintenance' => 'in onderhoud',
'update_available' => '{0} updates beschikbaar!|{1} update beschikbaar!|[2,Inf] updates beschikbaar!',
],
],
diff --git a/modules/backend/lang/pl/lang.php b/modules/backend/lang/pl/lang.php
index 0e25d0df8..94beb6909 100644
--- a/modules/backend/lang/pl/lang.php
+++ b/modules/backend/lang/pl/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'Nazwa widgetu jest wymagana.',
'status' => [
'widget_title_default' => 'Status systemu',
- 'online' => 'online',
- 'maintenance' => 'w konserwacji',
'update_available' => '{0} dostępnych aktualizacji!|{1} dostępna aktualizacja!|[2,Inf] dostępne aktualizacje!'
]
],
diff --git a/modules/backend/lang/pt-br/lang.php b/modules/backend/lang/pt-br/lang.php
index 4f2676f09..06c644df0 100644
--- a/modules/backend/lang/pt-br/lang.php
+++ b/modules/backend/lang/pt-br/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'O título do widget é necessário.',
'status' => [
'widget_title_default' => 'Status do Sistema',
- 'online' => 'online',
- 'maintenance' => 'em manutenção',
'update_available' => '{0} atualizações disponíveis!|{1} atualização disponível!|[2,Inf] atualizações disponíveis!',
],
],
diff --git a/modules/backend/lang/ru/lang.php b/modules/backend/lang/ru/lang.php
index f51d77a9f..995e20f48 100644
--- a/modules/backend/lang/ru/lang.php
+++ b/modules/backend/lang/ru/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'Заголовок виджета обязателен.',
'status' => [
'widget_title_default' => 'Статус системы',
- 'online' => 'Онлайн',
- 'maintenance' => 'в разработке',
'update_available' => '{0} нет новый обновлений!|{1} доступно новое обновление!|[2,Inf] доступны новые обновления!'
]
],
diff --git a/modules/backend/lang/sv/lang.php b/modules/backend/lang/sv/lang.php
index e1984bf84..f13adf8a6 100644
--- a/modules/backend/lang/sv/lang.php
+++ b/modules/backend/lang/sv/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'En widgets titel är tvingande.',
'status' => [
'widget_title_default' => 'Systemstatus',
- 'online' => 'online',
- 'maintenance' => 'i underhåll',
'update_available' => '{0} uppdateringar tillgängliga!|{1} uppdatering tillgänglig!|[2,Inf] uppdateringar tillgängliga!'
]
],
diff --git a/modules/backend/lang/tr/lang.php b/modules/backend/lang/tr/lang.php
index fb2bc47d6..d0e3162e6 100644
--- a/modules/backend/lang/tr/lang.php
+++ b/modules/backend/lang/tr/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => 'Eklenti Başlığı gerekli.',
'status' => [
'widget_title_default' => 'Sistem durumu',
- 'online' => 'yayında',
- 'maintenance' => 'bakım modunda',
'update_available' => '{0} güncelleme var!|{1} güncelleme var!|[2,Inf] güncelleme var!'
]
],
diff --git a/modules/backend/lang/zh-cn/lang.php b/modules/backend/lang/zh-cn/lang.php
index 0abdb9457..785868aa0 100644
--- a/modules/backend/lang/zh-cn/lang.php
+++ b/modules/backend/lang/zh-cn/lang.php
@@ -67,8 +67,6 @@ return [
'widget_title_error' => '需要小工具标题.',
'status' => [
'widget_title_default' => '系统状态',
- 'online' => '在线',
- 'maintenance' => '维护中',
'update_available' => '{0} 更新可用!|{1} 更新可用!|[2,Inf] 更新可用!'
]
],
diff --git a/modules/backend/lang/zh-tw/lang.php b/modules/backend/lang/zh-tw/lang.php
index 885e3185f..65dad939d 100644
--- a/modules/backend/lang/zh-tw/lang.php
+++ b/modules/backend/lang/zh-tw/lang.php
@@ -64,8 +64,6 @@ return [
'widget_title_error' => '需要元件標題',
'status' => [
'widget_title_default' => '系統狀態',
- 'online' => '在線',
- 'maintenance' => '維護中',
'update_available' => '{0} 更新可用!|{1} 更新可用!|[2,Inf] 更新可用!'
]
],
diff --git a/modules/backend/models/AccessLog.php b/modules/backend/models/AccessLog.php
index 060530b99..72ede7449 100644
--- a/modules/backend/models/AccessLog.php
+++ b/modules/backend/models/AccessLog.php
@@ -37,4 +37,26 @@ class AccessLog extends Model
return $record;
}
+
+ /**
+ * Returns a recent entry, latest entry is not considered recent
+ * if the creation day is the same as today.
+ * @return self
+ */
+ public static function getRecent($user)
+ {
+ $records = static::where('user_id', $user->id)
+ ->orderBy('created_at', 'desc')
+ ->limit(2)
+ ->get()
+ ;
+
+ if (!count($records)) {
+ return null;
+ }
+
+ $first = $records->first();
+
+ return !$first->created_at->isToday() ? $first : $records->pop();
+ }
}
diff --git a/modules/backend/reportwidgets/Welcome.php b/modules/backend/reportwidgets/Welcome.php
new file mode 100644
index 000000000..8cfa60bff
--- /dev/null
+++ b/modules/backend/reportwidgets/Welcome.php
@@ -0,0 +1,65 @@
+loadData();
+ }
+ catch (Exception $ex) {
+ traceLog($ex);
+ $this->vars['error'] = $ex->getMessage();
+ }
+
+ return $this->makePartial('widget');
+ }
+
+ public function defineProperties()
+ {
+ return [
+ 'title' => [
+ 'title' => 'backend::lang.dashboard.widget_title_label',
+ 'default' => 'backend::lang.dashboard.welcome.widget_title_default',
+ 'type' => 'string',
+ 'validationPattern' => '^.+$',
+ 'validationMessage' => 'backend::lang.dashboard.widget_title_error',
+ ]
+ ];
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected function loadAssets()
+ {
+ $this->addCss('css/welcome.css', 'core');
+ }
+
+ protected function loadData()
+ {
+ $this->vars['user'] = $user = BackendAuth::getUser();
+ $this->vars['appName'] = BrandSetting::get('app_name');
+ $this->vars['lastSeen'] = AccessLog::getRecent($user);
+ }
+}
diff --git a/modules/backend/reportwidgets/welcome/assets/css/welcome.css b/modules/backend/reportwidgets/welcome/assets/css/welcome.css
new file mode 100644
index 000000000..457b9ee47
--- /dev/null
+++ b/modules/backend/reportwidgets/welcome/assets/css/welcome.css
@@ -0,0 +1,24 @@
+.widget-welcome .welcome-container {
+ margin-top: -15px;
+ overflow: hidden; /* clearfix */
+}
+
+.widget-welcome .welcome-message {
+ margin-left: 220px;
+ color: #7e8c8d;
+ margin-top: 15px;
+}
+.widget-welcome .welcome-message strong {
+ color: #666;
+}
+
+.widget-welcome .welcome-logo {
+ background: #f9f9f9;
+ width: 200px;
+ padding: 15px;
+ float: left;
+}
+
+.widget-welcome .welcome-logo .oc-logo {
+ height: 80px;
+}
diff --git a/modules/backend/reportwidgets/welcome/partials/_widget.htm b/modules/backend/reportwidgets/welcome/partials/_widget.htm
new file mode 100644
index 000000000..5debc2acd
--- /dev/null
+++ b/modules/backend/reportwidgets/welcome/partials/_widget.htm
@@ -0,0 +1,39 @@
+
diff --git a/modules/backend/widgets/reportcontainer/partials/_widget.htm b/modules/backend/widgets/reportcontainer/partials/_widget.htm
index 0a92fb4f5..2532271a7 100644
--- a/modules/backend/widgets/reportcontainer/partials/_widget.htm
+++ b/modules/backend/widgets/reportcontainer/partials/_widget.htm
@@ -30,4 +30,4 @@
-
\ No newline at end of file
+
diff --git a/modules/cms/lang/cs/lang.php b/modules/cms/lang/cs/lang.php
index 057ed3712..020580796 100644
--- a/modules/cms/lang/cs/lang.php
+++ b/modules/cms/lang/cs/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'Šablony úspěšně smazány: :count.',
'file_name_required' => 'Je nutno vyplnit Název souboru.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'online',
+ 'maintenance' => 'v údržbě',
+ ]
+ ],
'theme' => [
'not_found_name' => "Téma ':name' nebylo nalezeno.",
'active' => [
diff --git a/modules/cms/lang/el/lang.php b/modules/cms/lang/el/lang.php
index c7e2d0401..ebdcec794 100644
--- a/modules/cms/lang/el/lang.php
+++ b/modules/cms/lang/el/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'Τα πρότυπα τα οποία διαγράφηκαν επιτυχώς: :count.',
'file_name_required' => 'Το πεδίο του Ονόματος του Αρχείου είναι υποχρεωτικό.',
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'ενεργό',
+ 'maintenance' => 'σε συντήρηση',
+ ]
+ ],
'theme' => [
'not_found_name' => "Το θέμα ':name' δεν βρέθηκε.",
'active' => [
diff --git a/modules/cms/lang/en/lang.php b/modules/cms/lang/en/lang.php
index addf06873..9169e9376 100644
--- a/modules/cms/lang/en/lang.php
+++ b/modules/cms/lang/en/lang.php
@@ -13,6 +13,14 @@ return [
'file_name_required' => 'The File Name field is required.',
'safe_mode_enabled' => 'Safe mode is currently enabled.',
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'widget_title_default' => 'Website',
+ 'online' => 'Online',
+ 'maintenance' => 'In maintenance',
+ 'manage_themes' => 'Manage themes',
+ ]
+ ],
'theme' => [
'not_found_name' => "The theme ':name' is not found.",
'active' => [
diff --git a/modules/cms/lang/es/lang.php b/modules/cms/lang/es/lang.php
index 035e991d8..bb4ea204e 100644
--- a/modules/cms/lang/es/lang.php
+++ b/modules/cms/lang/es/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'Los templates fueron borrados satisfactoriamente: :count.',
'file_name_required' => 'Falta el nombre del campo del archivo.',
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'en línea',
+ 'maintenance' => 'en mantenimiento',
+ ]
+ ],
'theme' => [
'not_found_name' => "El tema ':name' no se ha encontrado.",
'active' => [
diff --git a/modules/cms/lang/fa/lang.php b/modules/cms/lang/fa/lang.php
index fd26d58fa..ae483b846 100644
--- a/modules/cms/lang/fa/lang.php
+++ b/modules/cms/lang/fa/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'تعداد :count فایل با موفقیت حذف شد.',
'file_name_required' => 'نام فایل را وارد نمایید.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'online',
+ 'maintenance' => 'در حال به روز رسانی',
+ ]
+ ],
'theme' => [
'not_found_name' => "یافتن قالبی با نام ':name یافت نشد.'",
'active' => [
diff --git a/modules/cms/lang/fr/lang.php b/modules/cms/lang/fr/lang.php
index 8164fcb1c..7e807fd6d 100644
--- a/modules/cms/lang/fr/lang.php
+++ b/modules/cms/lang/fr/lang.php
@@ -13,6 +13,12 @@ return [
'file_name_required' => 'Le nom du fichier est requis.',
'safe_mode_enabled' => 'Le mode protégé est activé.',
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'en ligne',
+ 'maintenance' => 'en cours de maintenance',
+ ]
+ ],
'theme' => [
'not_found_name' => 'Le thème ":name" n’a pas été trouvé.',
'active' => [
diff --git a/modules/cms/lang/hu/lang.php b/modules/cms/lang/hu/lang.php
index 5b1ee596a..a5f1ab3f4 100644
--- a/modules/cms/lang/hu/lang.php
+++ b/modules/cms/lang/hu/lang.php
@@ -13,6 +13,12 @@ return [
'file_name_required' => 'A Fájlnév mező kitöltése kötelező.',
'safe_mode_enabled' => 'A biztonságos mód jelenleg engedélyezett.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'online',
+ 'maintenance' => 'karbantartás',
+ ]
+ ],
'theme' => [
'not_found_name' => "A következő sablon nem található: ':name'",
'active' => [
diff --git a/modules/cms/lang/id/lang.php b/modules/cms/lang/id/lang.php
index 6e41bbbb1..c7a066d41 100644
--- a/modules/cms/lang/id/lang.php
+++ b/modules/cms/lang/id/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'Acuan: :count berhasil dihapus.',
'file_name_required' => 'Bidang nama berkas diperlukan.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'daring',
+ 'maintenance' => 'dalam perawatan',
+ ]
+ ],
'theme' => [
'active' => [
'not_set' => 'Tema aktif tidak diatur.',
diff --git a/modules/cms/lang/it/lang.php b/modules/cms/lang/it/lang.php
index 9e7f570a6..e9d792d3c 100644
--- a/modules/cms/lang/it/lang.php
+++ b/modules/cms/lang/it/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'Template eliminati correttamente: :count.',
'file_name_required' => 'Il campo Nome file è obbligatorio.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'online',
+ 'maintenance' => 'in manutenzione',
+ ]
+ ],
'theme' => [
'not_found_name' => "Tema ':name' non trovato.",
'active' => [
diff --git a/modules/cms/lang/ja/lang.php b/modules/cms/lang/ja/lang.php
index 81bf8ca61..a410309d7 100644
--- a/modules/cms/lang/ja/lang.php
+++ b/modules/cms/lang/ja/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => ':count個のテンプレートを削除しました。',
'file_name_required' => 'ファイル名フィールドが必要です。',
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'オンライン',
+ 'maintenance' => 'メンテナンスモード',
+ ]
+ ],
'theme' => [
'active' => [
'not_set' => "アクティブなテーマが設定されていません。",
diff --git a/modules/cms/lang/lv/lang.php b/modules/cms/lang/lv/lang.php
index 0ea5be30f..c6aaacf1e 100644
--- a/modules/cms/lang/lv/lang.php
+++ b/modules/cms/lang/lv/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'Tika veiksmīgi izdzēstas veidnes: :count.',
'file_name_required' => 'Faila nosaukuma lauks ir obligāts.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'online',
+ 'maintenance' => 'atkopšana',
+ ]
+ ],
'theme' => [
'not_found_name' => "Tēma ':name' netika atrasta.",
'active' => [
diff --git a/modules/cms/lang/nb-no/lang.php b/modules/cms/lang/nb-no/lang.php
index 1d9e461a3..e9e64959f 100644
--- a/modules/cms/lang/nb-no/lang.php
+++ b/modules/cms/lang/nb-no/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'Templates som ble slettet: :count.',
'file_name_required' => 'Filnavnfeltet er obligatorisk.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'online',
+ 'maintenance' => 'in maintenance',
+ ]
+ ],
'theme' => [
'not_found_name' => "Tema ':name' ble ikke funnet.",
'active' => [
diff --git a/modules/cms/lang/nl/lang.php b/modules/cms/lang/nl/lang.php
index 6c8ac757b..2836c83ca 100644
--- a/modules/cms/lang/nl/lang.php
+++ b/modules/cms/lang/nl/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'Templates zijn succesvol verwijderd: :count.',
'file_name_required' => 'Het invullen van een bestandsnaam is verplicht.',
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'online',
+ 'maintenance' => 'in onderhoud',
+ ]
+ ],
'theme' => [
'not_found_name' => 'Het thema \':name\' is niet gevonden.',
'active' => [
diff --git a/modules/cms/lang/pl/lang.php b/modules/cms/lang/pl/lang.php
index 5dd7a5921..a433a7158 100644
--- a/modules/cms/lang/pl/lang.php
+++ b/modules/cms/lang/pl/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'Szablony zostały prawidłowo usunięte: :count.',
'file_name_required' => 'Pole Nazwa Pliku jest wymagane.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'online',
+ 'maintenance' => 'w konserwacji',
+ ]
+ ],
'theme' => [
'not_found_name' => "Motyw ':name' nie został odnaleziony.",
'active' => [
diff --git a/modules/cms/lang/pt-br/lang.php b/modules/cms/lang/pt-br/lang.php
index d4eae593a..b634420fe 100644
--- a/modules/cms/lang/pt-br/lang.php
+++ b/modules/cms/lang/pt-br/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'Templates apagados com sucesso: :count.',
'file_name_required' => 'O campo de Nome do Arquivo é necessário.',
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'online',
+ 'maintenance' => 'em manutenção',
+ ]
+ ],
'theme' => [
'not_found_name' => 'O tema ":name" não foi encontrado.',
'active' => [
diff --git a/modules/cms/lang/ru/lang.php b/modules/cms/lang/ru/lang.php
index 25f105a7d..4d782f429 100644
--- a/modules/cms/lang/ru/lang.php
+++ b/modules/cms/lang/ru/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'Шаблоны были успешно удалены: :count.',
'file_name_required' => 'Пожалуйста, укажите имя файла шаблона.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'Онлайн',
+ 'maintenance' => 'в разработке',
+ ]
+ ],
'theme' => [
'not_found_name' => "Тема ':name' не найдена.",
'active' => [
diff --git a/modules/cms/lang/sv/lang.php b/modules/cms/lang/sv/lang.php
index bb7b19faa..61c66ac90 100644
--- a/modules/cms/lang/sv/lang.php
+++ b/modules/cms/lang/sv/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => 'Mallarna är nu raderade: :count.',
'file_name_required' => 'Filnamnsfältet är obligatoriskt.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'online',
+ 'maintenance' => 'i underhåll',
+ ]
+ ],
'theme' => [
'not_found_name' => "Kunde inte hitta temat ':name'.",
'active' => [
diff --git a/modules/cms/lang/tr/lang.php b/modules/cms/lang/tr/lang.php
index f64557b2c..acab437ae 100644
--- a/modules/cms/lang/tr/lang.php
+++ b/modules/cms/lang/tr/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => ':count şablon başarıyla silindi.',
'file_name_required' => 'Dosya adı alanı gereklidir.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => 'yayında',
+ 'maintenance' => 'bakım modunda',
+ ]
+ ],
'theme' => [
'not_found_name' => "':name' isimli tema bulunamadı.",
'active' => [
diff --git a/modules/cms/lang/zh-cn/lang.php b/modules/cms/lang/zh-cn/lang.php
index 2df542424..baf99f483 100644
--- a/modules/cms/lang/zh-cn/lang.php
+++ b/modules/cms/lang/zh-cn/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => '模板成功删除: :count.',
'file_name_required' => '需要文件名字段.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => '在线',
+ 'maintenance' => '维护中',
+ ]
+ ],
'theme' => [
'not_found_name' => "主题 ':name' 没找到.",
'active' => [
diff --git a/modules/cms/lang/zh-tw/lang.php b/modules/cms/lang/zh-tw/lang.php
index 0e95e3c01..47cfedae7 100644
--- a/modules/cms/lang/zh-tw/lang.php
+++ b/modules/cms/lang/zh-tw/lang.php
@@ -12,6 +12,12 @@ return [
'delete_success' => '模板成功刪除: :count.',
'file_name_required' => '需要檔案名字串.'
],
+ 'dashboard' => [
+ 'active_theme' => [
+ 'online' => '在線',
+ 'maintenance' => '維護中',
+ ]
+ ],
'theme' => [
'not_found_name' => "主題 ':name' 沒找到.",
'active' => [
diff --git a/modules/cms/reportwidgets/ActiveTheme.php b/modules/cms/reportwidgets/ActiveTheme.php
new file mode 100644
index 000000000..d65d91e8b
--- /dev/null
+++ b/modules/cms/reportwidgets/ActiveTheme.php
@@ -0,0 +1,62 @@
+loadData();
+ }
+ catch (Exception $ex) {
+ $this->vars['error'] = $ex->getMessage();
+ }
+
+ return $this->makePartial('widget');
+ }
+
+ public function defineProperties()
+ {
+ return [
+ 'title' => [
+ 'title' => 'backend::lang.dashboard.widget_title_label',
+ 'default' => 'cms::lang.dashboard.active_theme.widget_title_default',
+ 'type' => 'string',
+ 'validationPattern' => '^.+$',
+ 'validationMessage' => 'backend::lang.dashboard.widget_title_error',
+ ]
+ ];
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected function loadAssets()
+ {
+ $this->addCss('css/activetheme.css', 'core');
+ }
+
+ protected function loadData()
+ {
+ $this->vars['theme'] = Theme::getActiveTheme();
+ $this->vars['inMaintenance'] = MaintenanceSetting::get('is_enabled');
+ }
+}
diff --git a/modules/cms/reportwidgets/activetheme/assets/css/activetheme.css b/modules/cms/reportwidgets/activetheme/assets/css/activetheme.css
new file mode 100644
index 000000000..6449e4f67
--- /dev/null
+++ b/modules/cms/reportwidgets/activetheme/assets/css/activetheme.css
@@ -0,0 +1,4 @@
+.widget-activetheme .theme-thumbnail {
+ margin-top: -15px;
+ margin-bottom: 15px;
+}
diff --git a/modules/cms/reportwidgets/activetheme/partials/_widget.htm b/modules/cms/reportwidgets/activetheme/partials/_widget.htm
new file mode 100644
index 000000000..e3174541a
--- /dev/null
+++ b/modules/cms/reportwidgets/activetheme/partials/_widget.htm
@@ -0,0 +1,33 @@
+