2020-03-01 18:05:21 +01:00
|
|
|
<?php
|
|
|
|
App::uses('AppModel', 'Model');
|
|
|
|
class Dashboard extends AppModel
|
|
|
|
{
|
|
|
|
public $useTable = false;
|
|
|
|
|
2020-03-01 23:56:40 +01:00
|
|
|
public function loadWidget($user, $name)
|
2020-03-01 18:05:21 +01:00
|
|
|
{
|
|
|
|
if (file_exists(APP . 'Lib/Dashboard/' . $name . '.php')) {
|
|
|
|
App::uses($name, 'Dashboard');
|
|
|
|
} else if (file_exists(APP . 'Lib/Dashboard/Custom/' . $name . '.php')) {
|
|
|
|
App::uses($name, 'Dashboard/Custom');
|
|
|
|
} else {
|
|
|
|
throw new NotFoundException(__('Invalid widget or widget not found.'));
|
|
|
|
}
|
|
|
|
$widget = new $name();
|
2020-03-01 23:56:40 +01:00
|
|
|
if (method_exists($widget, 'checkPermissions')) {
|
|
|
|
if (!$widget->checkPermissions($user)) {
|
|
|
|
throw new NotFoundException(__('Invalid widget or widget not found.'));
|
|
|
|
}
|
|
|
|
}
|
2020-03-01 18:05:21 +01:00
|
|
|
return $widget;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function loadAllWidgets()
|
|
|
|
{
|
|
|
|
$dir = new Folder(APP . 'Lib/Dashboard');
|
|
|
|
$customdir = new Folder(APP . 'Lib/Dashboard/Custom');
|
|
|
|
$widgetFiles = $dir->find('.*Widget\.php');
|
|
|
|
$customWidgetFiles = $customdir->find('.*Widget\.php');
|
|
|
|
$widgets = array();
|
|
|
|
foreach ($widgetFiles as $widgetFile) {
|
|
|
|
$className = substr($widgetFile, 0, strlen($widgetFile) -4);
|
2020-03-01 23:56:40 +01:00
|
|
|
$temp = $this->__extractMeta($className, false);
|
|
|
|
if ($temp !== false) {
|
|
|
|
$widgets[$className] = $temp;
|
|
|
|
}
|
2020-03-01 18:05:21 +01:00
|
|
|
}
|
2020-03-01 18:24:12 +01:00
|
|
|
foreach ($customWidgetFiles as $widgetFile) {
|
|
|
|
$className = substr($widgetFile, 0, strlen($widgetFile) -4);
|
2020-03-01 23:56:40 +01:00
|
|
|
$temp = $this->__extractMeta($className, true);
|
|
|
|
if ($temp !== false) {
|
|
|
|
$widgets[$className] = $temp;
|
|
|
|
}
|
2020-03-01 18:24:12 +01:00
|
|
|
}
|
2020-03-01 18:05:21 +01:00
|
|
|
return $widgets;
|
|
|
|
}
|
|
|
|
|
|
|
|
private function __extractMeta($className, $custom)
|
|
|
|
{
|
2020-03-01 18:28:52 +01:00
|
|
|
App::uses($className, 'Dashboard' . ($custom ? '/Custom' : ''));
|
2020-03-01 18:05:21 +01:00
|
|
|
$widgetClass = new $className();
|
2020-03-01 23:56:40 +01:00
|
|
|
if (method_exists($widgetClass, 'checkPermissions')) {
|
|
|
|
if (!$widgetClass->checkPermissions($user)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2020-03-01 18:05:21 +01:00
|
|
|
$widget = array(
|
|
|
|
'widget' => $className,
|
|
|
|
'title' => $widgetClass->title,
|
|
|
|
'render' => $widgetClass->render,
|
|
|
|
'params' => empty($widgetClass->params) ? array() : $widgetClass->params,
|
|
|
|
'description' => empty($widgetClass->description) ? $widgetClass->title : $widgetClass->description,
|
|
|
|
'height' => empty($widgetClass->height) ? 1 : $widgetClass->height,
|
|
|
|
'width' => empty($widgetClass->width) ? 1 : $widgetClass->width,
|
|
|
|
'placeholder' => empty($widgetClass->placeholder) ? '' : $widgetClass->placeholder
|
|
|
|
);
|
|
|
|
return $widget;
|
|
|
|
}
|
|
|
|
}
|