diff --git a/system/controllers/dashboard_widget.php b/system/controllers/dashboard_widget.php index a4937662..412b901e 100644 --- a/system/controllers/dashboard_widget.php +++ b/system/controllers/dashboard_widget.php @@ -33,13 +33,19 @@ if (date("d") >= $reset_day) { } $current_date = date('Y-m-d'); +$ui->assign('start_date', $start_date); +$ui->assign('current_date', $current_date); $widgets = ORM::for_table('tbl_widgets')->selects("enabled", 1)->order_by_asc("orders")->findArray(); $count = count($widgets); for ($i = 0; $i < $count; $i++) { try{ - require_once $WIDGET_PATH . DIRECTORY_SEPARATOR . $widgets[$i]['widget'].".php"; - $widgets[$i]['content'] = (new $widgets[$i]['widget'])->getWidget($widgets[$i]);; + if(file_exists($WIDGET_PATH . DIRECTORY_SEPARATOR . $widgets[$i]['widget'].".php")){ + require_once $WIDGET_PATH . DIRECTORY_SEPARATOR . $widgets[$i]['widget'].".php"; + $widgets[$i]['content'] = (new $widgets[$i]['widget'])->getWidget($widgets[$i]); + }else{ + $widgets[$i]['content'] = "Widget not found"; + } } catch (Throwable $e) { $widgets[$i]['content'] = $e->getMessage(); } @@ -47,139 +53,4 @@ for ($i = 0; $i < $count; $i++) { $ui->assign('widgets', $widgets); run_hook('view_dashboard'); #HOOK -$ui->display('admin/dashboard_widget.tpl'); -die(); - -//activity log -$dlog = ORM::for_table('tbl_logs')->limit(5)->order_by_desc('id')->find_many(); -$ui->assign('dlog', $dlog); -$log = ORM::for_table('tbl_logs')->count(); -$ui->assign('log', $log); - - -if ($config['hide_vs'] != 'yes') { - $cacheStocksfile = $CACHE_PATH . File::pathFixer('/VoucherStocks.temp'); - $cachePlanfile = $CACHE_PATH . File::pathFixer('/VoucherPlans.temp'); - //Cache for 5 minutes - if (file_exists($cacheStocksfile) && time() - filemtime($cacheStocksfile) < 600) { - $stocks = json_decode(file_get_contents($cacheStocksfile), true); - $plans = json_decode(file_get_contents($cachePlanfile), true); - } else { - // Count stock - $tmp = $v = ORM::for_table('tbl_plans')->select('id')->select('name_plan')->find_many(); - $plans = array(); - $stocks = array("used" => 0, "unused" => 0); - $n = 0; - foreach ($tmp as $plan) { - $unused = ORM::for_table('tbl_voucher') - ->where('id_plan', $plan['id']) - ->where('status', 0)->count(); - $used = ORM::for_table('tbl_voucher') - ->where('id_plan', $plan['id']) - ->where('status', 1)->count(); - if ($unused > 0 || $used > 0) { - $plans[$n]['name_plan'] = $plan['name_plan']; - $plans[$n]['unused'] = $unused; - $plans[$n]['used'] = $used; - $stocks["unused"] += $unused; - $stocks["used"] += $used; - $n++; - } - } - file_put_contents($cacheStocksfile, json_encode($stocks)); - file_put_contents($cachePlanfile, json_encode($plans)); - } -} - -$cacheMRfile = File::pathFixer('/monthlyRegistered.temp'); -//Cache for 1 hour -if (file_exists($cacheMRfile) && time() - filemtime($cacheMRfile) < 3600) { - $monthlyRegistered = json_decode(file_get_contents($cacheMRfile), true); -} else { - //Monthly Registered Customers - $result = ORM::for_table('tbl_customers') - ->select_expr('MONTH(created_at)', 'month') - ->select_expr('COUNT(*)', 'count') - ->where_raw('YEAR(created_at) = YEAR(NOW())') - ->group_by_expr('MONTH(created_at)') - ->find_many(); - - $monthlyRegistered = []; - foreach ($result as $row) { - $monthlyRegistered[] = [ - 'date' => $row->month, - 'count' => $row->count - ]; - } - file_put_contents($cacheMRfile, json_encode($monthlyRegistered)); -} - -$cacheMSfile = $CACHE_PATH . File::pathFixer('/monthlySales.temp'); -//Cache for 12 hours -if (file_exists($cacheMSfile) && time() - filemtime($cacheMSfile) < 43200) { - $monthlySales = json_decode(file_get_contents($cacheMSfile), true); -} else { - // Query to retrieve monthly data - $results = ORM::for_table('tbl_transactions') - ->select_expr('MONTH(recharged_on)', 'month') - ->select_expr('SUM(price)', 'total') - ->where_raw("YEAR(recharged_on) = YEAR(CURRENT_DATE())") // Filter by the current year - ->where_not_equal('method', 'Customer - Balance') - ->where_not_equal('method', 'Recharge Balance - Administrator') - ->group_by_expr('MONTH(recharged_on)') - ->find_many(); - - // Create an array to hold the monthly sales data - $monthlySales = array(); - - // Iterate over the results and populate the array - foreach ($results as $result) { - $month = $result->month; - $totalSales = $result->total; - - $monthlySales[$month] = array( - 'month' => $month, - 'totalSales' => $totalSales - ); - } - - // Fill in missing months with zero sales - for ($month = 1; $month <= 12; $month++) { - if (!isset($monthlySales[$month])) { - $monthlySales[$month] = array( - 'month' => $month, - 'totalSales' => 0 - ); - } - } - - // Sort the array by month - ksort($monthlySales); - - // Reindex the array - $monthlySales = array_values($monthlySales); - file_put_contents($cacheMSfile, json_encode($monthlySales)); -} - -if ($config['router_check']) { - $routeroffs = ORM::for_table('tbl_routers')->selects(['id', 'name', 'last_seen'])->where('status', 'Offline')->where('enabled', '1')->order_by_desc('name')->find_array(); - $ui->assign('routeroffs', $routeroffs); -} - -$timestampFile = "$UPLOAD_PATH/cron_last_run.txt"; -if (file_exists($timestampFile)) { - $lastRunTime = file_get_contents($timestampFile); - $ui->assign('run_date', date('Y-m-d h:i:s A', $lastRunTime)); -} - -// Assign the monthly sales data to Smarty -$ui->assign('start_date', $start_date); -$ui->assign('current_date', $current_date); -$ui->assign('monthlySales', $monthlySales); -$ui->assign('xfooter', ''); -$ui->assign('monthlyRegistered', $monthlyRegistered); -$ui->assign('stocks', $stocks); -$ui->assign('plans', $plans); - -run_hook('view_dashboard'); #HOOK -$ui->display('admin/dashboard.tpl'); +$ui->display('admin/dashboard_widget.tpl'); \ No newline at end of file diff --git a/system/widgets/activity_log.php b/system/widgets/activity_log.php new file mode 100644 index 00000000..94719149 --- /dev/null +++ b/system/widgets/activity_log.php @@ -0,0 +1,15 @@ +limit(5)->order_by_desc('id')->findArray(); + $ui->assign('dlog', $dlog); + // $log = ORM::for_table('tbl_logs')->count(); + // $ui->assign('log', $log); + return $ui->fetch('widget/activity_log.tpl'); + } +} diff --git a/system/widgets/cron_monitor.php b/system/widgets/cron_monitor.php new file mode 100644 index 00000000..eba0e6e3 --- /dev/null +++ b/system/widgets/cron_monitor.php @@ -0,0 +1,17 @@ +assign('run_date', date('Y-m-d h:i:s A', $lastRunTime)); + } + + return $ui->fetch('widget/cron_monitor.tpl'); + } +} \ No newline at end of file diff --git a/system/widgets/default_info_row.php b/system/widgets/default_info_row.php new file mode 100644 index 00000000..ff82ee58 --- /dev/null +++ b/system/widgets/default_info_row.php @@ -0,0 +1,17 @@ +whereGte('balance', 0)->sum('balance'); + $ui->assign('cb', $cb); + } + + + return $ui->fetch('widget/default_info_row.tpl'); + } +} \ No newline at end of file diff --git a/system/widgets/graph_customers_insight.php b/system/widgets/graph_customers_insight.php new file mode 100644 index 00000000..5a642ab6 --- /dev/null +++ b/system/widgets/graph_customers_insight.php @@ -0,0 +1,28 @@ +where('status', 'on')->count(); + if (empty($u_act)) { + $u_act = '0'; + } + $ui->assign('u_act', $u_act); + + $u_all = ORM::for_table('tbl_user_recharges')->count(); + if (empty($u_all)) { + $u_all = '0'; + } + $ui->assign('u_all', $u_all); + + + $c_all = ORM::for_table('tbl_customers')->count(); + if (empty($c_all)) { + $c_all = '0'; + } + $ui->assign('c_all', $c_all); + return $ui->fetch('widget/graph_customers_insight.tpl'); + } +} \ No newline at end of file diff --git a/system/widgets/graph_monthly_registered_customers.php b/system/widgets/graph_monthly_registered_customers.php new file mode 100644 index 00000000..7fec063e --- /dev/null +++ b/system/widgets/graph_monthly_registered_customers.php @@ -0,0 +1,34 @@ +select_expr('MONTH(created_at)', 'month') + ->select_expr('COUNT(*)', 'count') + ->where_raw('YEAR(created_at) = YEAR(NOW())') + ->group_by_expr('MONTH(created_at)') + ->find_many(); + + $monthlyRegistered = []; + foreach ($result as $row) { + $monthlyRegistered[] = [ + 'date' => $row->month, + 'count' => $row->count + ]; + } + file_put_contents($cacheMRfile, json_encode($monthlyRegistered)); + } + $ui->assign('monthlyRegistered', $monthlyRegistered); + return $ui->fetch('widget/graph_monthly_registered_customers.tpl'); + } +} \ No newline at end of file diff --git a/system/widgets/graph_monthly_sales.php b/system/widgets/graph_monthly_sales.php new file mode 100644 index 00000000..1ace4f99 --- /dev/null +++ b/system/widgets/graph_monthly_sales.php @@ -0,0 +1,60 @@ +select_expr('MONTH(recharged_on)', 'month') + ->select_expr('SUM(price)', 'total') + ->where_raw("YEAR(recharged_on) = YEAR(CURRENT_DATE())") // Filter by the current year + ->where_not_equal('method', 'Customer - Balance') + ->where_not_equal('method', 'Recharge Balance - Administrator') + ->group_by_expr('MONTH(recharged_on)') + ->find_many(); + + // Create an array to hold the monthly sales data + $monthlySales = array(); + + // Iterate over the results and populate the array + foreach ($results as $result) { + $month = $result->month; + $totalSales = $result->total; + + $monthlySales[$month] = array( + 'month' => $month, + 'totalSales' => $totalSales + ); + } + + // Fill in missing months with zero sales + for ($month = 1; $month <= 12; $month++) { + if (!isset($monthlySales[$month])) { + $monthlySales[$month] = array( + 'month' => $month, + 'totalSales' => 0 + ); + } + } + + // Sort the array by month + ksort($monthlySales); + + // Reindex the array + $monthlySales = array_values($monthlySales); + file_put_contents($cacheMSfile, json_encode($monthlySales)); + } + + $ui->assign('monthlySales', $monthlySales); + return $ui->fetch('widget/graph_monthly_sales.tpl'); + } +} diff --git a/system/widgets/html_only.php b/system/widgets/html_only.php new file mode 100644 index 00000000..b7131c01 --- /dev/null +++ b/system/widgets/html_only.php @@ -0,0 +1,11 @@ +selects(['id', 'name', 'last_seen'])->where('status', 'Offline')->where('enabled', '1')->order_by_desc('name')->find_array(); + $ui->assign('routeroffs', $routeroffs); + } + + return $ui->fetch('widget/mikrotik_cron_monitor.tpl'); + } +} \ No newline at end of file diff --git a/system/widgets/top_widget.php b/system/widgets/top_widget.php index 3c6909a9..bb554590 100644 --- a/system/widgets/top_widget.php +++ b/system/widgets/top_widget.php @@ -5,7 +5,7 @@ class top_widget { public function getWidget() { - global $config, $ui, $current_date, $start_date; + global $ui, $current_date, $start_date; $iday = ORM::for_table('tbl_transactions') ->where('recharged_on', $current_date) @@ -28,11 +28,6 @@ class top_widget } $ui->assign('imonth', $imonth); - if ($config['enable_balance'] == 'yes') { - $cb = ORM::for_table('tbl_customers')->whereGte('balance', 0)->sum('balance'); - $ui->assign('cb', $cb); - } - $u_act = ORM::for_table('tbl_user_recharges')->where('status', 'on')->count(); if (empty($u_act)) { $u_act = '0'; diff --git a/system/widgets/voucher_stocks.php b/system/widgets/voucher_stocks.php new file mode 100644 index 00000000..44533870 --- /dev/null +++ b/system/widgets/voucher_stocks.php @@ -0,0 +1,43 @@ +select('id')->select('name_plan')->find_many(); + $plans = array(); + $stocks = array("used" => 0, "unused" => 0); + $n = 0; + foreach ($tmp as $plan) { + $unused = ORM::for_table('tbl_voucher') + ->where('id_plan', $plan['id']) + ->where('status', 0)->count(); + $used = ORM::for_table('tbl_voucher') + ->where('id_plan', $plan['id']) + ->where('status', 1)->count(); + if ($unused > 0 || $used > 0) { + $plans[$n]['name_plan'] = $plan['name_plan']; + $plans[$n]['unused'] = $unused; + $plans[$n]['used'] = $used; + $stocks["unused"] += $unused; + $stocks["used"] += $used; + $n++; + } + } + file_put_contents($cacheStocksfile, json_encode($stocks)); + file_put_contents($cachePlanfile, json_encode($plans)); + } + $ui->assign('stocks', $stocks); + $ui->assign('plans', $plans); + return $ui->fetch('widget/voucher_stocks.tpl'); + } +} \ No newline at end of file diff --git a/ui/ui/widget/activity_log.tpl b/ui/ui/widget/activity_log.tpl index 28dfc88a..101d241e 100644 --- a/ui/ui/widget/activity_log.tpl +++ b/ui/ui/widget/activity_log.tpl @@ -2,11 +2,11 @@
{Lang::T('Activity Log')}
diff --git a/ui/ui/widget/graph_customers_insight.tpl b/ui/ui/widget/graph_customers_insight.tpl index e94d8aea..203adc8c 100644 --- a/ui/ui/widget/graph_customers_insight.tpl +++ b/ui/ui/widget/graph_customers_insight.tpl @@ -7,53 +7,51 @@ \ No newline at end of file diff --git a/ui/ui/widget/graph_monthly_registered_customers.tpl b/ui/ui/widget/graph_monthly_registered_customers.tpl index 0f4a682e..c1a164aa 100644 --- a/ui/ui/widget/graph_monthly_registered_customers.tpl +++ b/ui/ui/widget/graph_monthly_registered_customers.tpl @@ -18,56 +18,54 @@ \ No newline at end of file diff --git a/ui/ui/widget/mikrotik_offline.tpl b/ui/ui/widget/mikrotik_cron_monitor.tpl similarity index 100% rename from ui/ui/widget/mikrotik_offline.tpl rename to ui/ui/widget/mikrotik_cron_monitor.tpl