264 lines
9.2 KiB
PHP
264 lines
9.2 KiB
PHP
|
|
<?
|
|||
|
|
namespace ms;
|
|||
|
|
|
|||
|
|
use core\db\structure\Column as C;
|
|||
|
|
use core\db\structure\eColumnType;
|
|||
|
|
use ms\widget\structure\eWidget;
|
|||
|
|
use ms\widget\structure\eWidgetType;
|
|||
|
|
use ui\form\structure\eInputType;
|
|||
|
|
use ui\Form;
|
|||
|
|
use ui\input\Input;
|
|||
|
|
use core\lang\structure\LangVariable as V;
|
|||
|
|
use ms\ms\structure\msModuleTable;
|
|||
|
|
use ms\widget\structure\msWidgetLang as Vars;
|
|||
|
|
|
|||
|
|
class Widget extends msModuleTable {
|
|||
|
|
static $self;
|
|||
|
|
static $table_name = 'msWidget';
|
|||
|
|
static $controller = 'ms.widget';
|
|||
|
|
|
|||
|
|
static $ID = 'id';
|
|||
|
|
static $NAME = 'name';
|
|||
|
|
|
|||
|
|
static $DASHBOARD = 'dashboard';
|
|||
|
|
static $X = 'x';
|
|||
|
|
static $Y = 'y';
|
|||
|
|
static $COLS = 'cols';
|
|||
|
|
static $ROWS = 'rows';
|
|||
|
|
static $ENTITY = 'entity';
|
|||
|
|
static $TYPE = 'type';
|
|||
|
|
static $POS = 'pos';
|
|||
|
|
static $ACTION = 'action';
|
|||
|
|
|
|||
|
|
static $ACCOUNT = 'account';
|
|||
|
|
static $CREATED = 'created';
|
|||
|
|
static $UPDATED = 'updated';
|
|||
|
|
|
|||
|
|
|
|||
|
|
static function getTitle(){return V::get(Vars::$MODULE_NAME);}
|
|||
|
|
static function getSystemLangValues():array{ return Vars::getArray(); }
|
|||
|
|
public function _update(\Where $w, array $values) {
|
|||
|
|
$values[self::$UPDATED] = time();
|
|||
|
|
return parent::_update($w, $values);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static function getMyByDashboardID($id,$isAssocArray = false){
|
|||
|
|
$id = intval($id);
|
|||
|
|
return self::select([
|
|||
|
|
\Query::WHERE => $w = new \Where(\Where::_and([
|
|||
|
|
\Where::_operator(self::$ACCOUNT,'=',UID),
|
|||
|
|
\Where::_operator(self::$DASHBOARD,'=',$id),
|
|||
|
|
])),
|
|||
|
|
\Query::SORT=>self::$POS
|
|||
|
|
],$isAssocArray);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
static function renderWidgetTools(){
|
|||
|
|
return '<div class="widget_tools"><button class="widget_delete">x</button></div>';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static function renderIcon($l,$options=[]){
|
|||
|
|
$options['class'] = ($c = $options['class'])?$c:'';
|
|||
|
|
$type = ($c = $l[self::$TYPE])?$c:$options['type'];
|
|||
|
|
$id = ($c = $l[self::$ID])?$c:0;
|
|||
|
|
$widget = eWidget::$array[$type];
|
|||
|
|
return '<div class="icon_td drag_handle '.$widget[eWidget::BG].' '.$options['class'].'" data-type="'.$type.'" data-id="'.$id.'">
|
|||
|
|
<div class="img '.$widget[eWidget::ICON].'"></div>
|
|||
|
|
<div class="title">'.$widget[eWidget::TITLE].'</div>
|
|||
|
|
</div>';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static function getWidgetTableID($v){
|
|||
|
|
$id = 0;
|
|||
|
|
if(is_array($v)) $id = $v[self::$ID];
|
|||
|
|
if(is_numeric($v)) $id = $v;
|
|||
|
|
return 'widget_'.$id;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
static function renderWidget($l){
|
|||
|
|
$res = '';
|
|||
|
|
$id = $l[self::$ID];
|
|||
|
|
|
|||
|
|
$x = $l[self::$X];
|
|||
|
|
$y = $l[self::$Y];
|
|||
|
|
$cols = $l[self::$COLS];
|
|||
|
|
$rows = $l[self::$ROWS];
|
|||
|
|
|
|||
|
|
$widget = eWidget::$array[$l[self::$TYPE]];
|
|||
|
|
|
|||
|
|
switch ($widget[eWidget::TYPE]){
|
|||
|
|
case eWidgetType::TABLE:
|
|||
|
|
$table_id = self::getWidgetTableID($l);
|
|||
|
|
$settings = Table::getSettings($table_id,$widget[eWidget::CONTROLLER]);
|
|||
|
|
$settings += $settings['class']::getWindowTableRules();
|
|||
|
|
|
|||
|
|
$res .= '<div class="drag_handle"><span>'.$widget[eWidget::TITLE].'</span></div>'.$settings['class']::drawTable($settings);
|
|||
|
|
$cols = 12;
|
|||
|
|
$rows = 6;
|
|||
|
|
break;
|
|||
|
|
default : $res .= self::renderIcon($l);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$style = '';
|
|||
|
|
// если у нас заданы точные координаты
|
|||
|
|
if($x and $y and $cols and $rows){
|
|||
|
|
$style .= 'grid-area:'.$y .' / '.$x.' / '.($y + $rows).' / '.($x + $cols).';';
|
|||
|
|
// если заданы только ширина и длина
|
|||
|
|
} else if (!($x and $y) and $rows and $cols) {
|
|||
|
|
$style .= 'grid-column:span '.$cols.';';
|
|||
|
|
$style .= 'grid-row:span '.$rows.';';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return '<div class="dash_cell"
|
|||
|
|
'.($style?'style="'.$style.'"':'').'
|
|||
|
|
data-type="'.$l[self::$TYPE].'"
|
|||
|
|
data-id="'.$id.'">'.self::renderWidgetTools().$res.'</div>';
|
|||
|
|
}
|
|||
|
|
static function getMyListByDashboardID($dashboard_id = 0){
|
|||
|
|
if(!($dashboard_id = intval($dashboard_id))) return '';
|
|||
|
|
$res = '';
|
|||
|
|
$r = self::getMyByDashboardID($dashboard_id);
|
|||
|
|
while($l = \DB::fetch($r)){
|
|||
|
|
$res .= self::renderWidget($l);
|
|||
|
|
}
|
|||
|
|
return $res;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
static function getForm($values = [], $options = []) :array {
|
|||
|
|
return [
|
|||
|
|
self::getCommonFormInputs(),
|
|||
|
|
[
|
|||
|
|
Form::VIEW=>Form::ROW,
|
|||
|
|
Form::COLS => [
|
|||
|
|
[
|
|||
|
|
Form::VIEW =>Form::INPUT,
|
|||
|
|
Form::COL_CLASSES =>'col-12',
|
|||
|
|
Form::KEY_VALUE =>self::$NAME,
|
|||
|
|
Form::TYPE =>eInputType::TEXT,
|
|||
|
|
Form::INPUT_OPT => [
|
|||
|
|
Input::PLACEHOLDER => $c = V::get(Vars::$NAME),
|
|||
|
|
Input::LABEL => $c,
|
|||
|
|
],
|
|||
|
|
],
|
|||
|
|
]
|
|||
|
|
],
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static function columnInfo() : array {
|
|||
|
|
return [
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME =>&self::$ID,
|
|||
|
|
C::TYPE =>eColumnType::INT,
|
|||
|
|
C::AUTO_INCREMENT =>true,
|
|||
|
|
C::PRIMARY =>true,
|
|||
|
|
C::DEFAULT =>0,
|
|||
|
|
C::HIDDEN =>true,
|
|||
|
|
C::TH =>V::get(Vars::$ID),
|
|||
|
|
]),
|
|||
|
|
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME =>&self::$DASHBOARD,
|
|||
|
|
C::TYPE =>eColumnType::INT,
|
|||
|
|
C::DEFAULT =>0,
|
|||
|
|
C::TH =>V::get(Vars::$DASHBOARD),
|
|||
|
|
]),
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME =>&self::$X,
|
|||
|
|
C::TYPE =>eColumnType::INT,
|
|||
|
|
C::DEFAULT =>0,
|
|||
|
|
C::TH =>V::get(Vars::$X),
|
|||
|
|
]),
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME =>&self::$Y,
|
|||
|
|
C::TYPE =>eColumnType::INT,
|
|||
|
|
C::DEFAULT =>0,
|
|||
|
|
C::TH =>V::get(Vars::$Y),
|
|||
|
|
]),
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME =>&self::$COLS,
|
|||
|
|
C::TYPE =>eColumnType::INT,
|
|||
|
|
C::DEFAULT =>0,
|
|||
|
|
C::TH =>V::get(Vars::$COLS),
|
|||
|
|
]),
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME =>&self::$ROWS,
|
|||
|
|
C::TYPE =>eColumnType::INT,
|
|||
|
|
C::DEFAULT =>0,
|
|||
|
|
C::TH =>V::get(Vars::$ROWS),
|
|||
|
|
]),
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME =>&self::$ENTITY,
|
|||
|
|
C::TYPE =>eColumnType::INT,
|
|||
|
|
C::DEFAULT =>0,
|
|||
|
|
C::TH =>V::get(Vars::$ENTITY),
|
|||
|
|
]),
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME =>&self::$TYPE,
|
|||
|
|
C::TYPE =>eColumnType::INT,
|
|||
|
|
C::DEFAULT =>0,
|
|||
|
|
C::TH =>V::get(Vars::$TYPE),
|
|||
|
|
]),
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME =>&self::$POS,
|
|||
|
|
C::TYPE =>eColumnType::INT,
|
|||
|
|
C::DEFAULT =>time(),
|
|||
|
|
C::TH =>V::get(Vars::$POS),
|
|||
|
|
]),
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME =>&self::$ACTION,
|
|||
|
|
C::TYPE =>eColumnType::INT,
|
|||
|
|
C::DEFAULT =>0,
|
|||
|
|
C::TH =>V::get(Vars::$ACTION),
|
|||
|
|
]),
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME => &self::$NAME,
|
|||
|
|
C::TYPE => eColumnType::VARCHAR,
|
|||
|
|
C::LENGTH => 1023,
|
|||
|
|
C::TH => V::get(Vars::$NAME),
|
|||
|
|
]),
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME => &self::$ACCOUNT,
|
|||
|
|
C::TYPE => eColumnType::INT,
|
|||
|
|
C::LENGTH => 11,
|
|||
|
|
C::TH => V::get(Vars::$ACCOUNT),
|
|||
|
|
C::DEFAULT => intval(UID),
|
|||
|
|
//c::HIDDEN=>true,
|
|||
|
|
|
|||
|
|
c::FUNC_VALUE => function($v){
|
|||
|
|
if($id = $v[self::$ACCOUNT]) {
|
|||
|
|
return \Account::getName( \Account::getByID($id) );
|
|||
|
|
} else return '-';
|
|||
|
|
},
|
|||
|
|
]),
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME => &self::$CREATED,
|
|||
|
|
C::TYPE => eColumnType::INT,
|
|||
|
|
C::LENGTH => 11,
|
|||
|
|
C::TH => V::get(Vars::$CREATED),
|
|||
|
|
C::DEFAULT => time(),
|
|||
|
|
c::FUNC_VALUE => function($v){return self::formatDate($v[self::$CREATED]);},
|
|||
|
|
c::HIDDEN=>true,
|
|||
|
|
]),
|
|||
|
|
new C([
|
|||
|
|
C::VAR_NAME => &self::$UPDATED,
|
|||
|
|
C::TYPE => eColumnType::INT,
|
|||
|
|
C::DEFAULT => time(),
|
|||
|
|
C::TH => V::get(Vars::$UPDATED),
|
|||
|
|
c::FUNC_VALUE => function($v){return self::formatDate($v[self::$UPDATED]);},
|
|||
|
|
c::HIDDEN=>true,
|
|||
|
|
]),
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
new Widget();
|
|||
|
|
|
|||
|
|
|