10) break; } return array_reverse($res); } public function _getStructure(){ return self::getStructure($this->id_for_theme,$this->owner_id); } static function getStructure($parent_id = 0,$UID=UID){ $s = []; $res = []; //if(self::$structure) $s = self::$structure; //else { $r = self::select([ \Query::WHERE => new \Where(\Where::_and([ \Where::_operator(self::$ACCOUNT,'=', $UID), ])), \Query::SORT=>[self::$POS=>'ASC'] ]); while($l = \DB::fetch($r) ) { $id = $l[self::$ID]; $pid = $l[self::$PARENT]; $s['base'][$id] = $l; $s[$pid][] = $id; } //} if($parent_id) { $getChilds = function($s,$par,&$res,$getChilds){ $res['base'][$par] = $s['base'][$par]; $res[$par] = $s[$par]; foreach ($res[$par] as $v) { $getChilds($s,$v,$res,$getChilds); } }; $getChilds($s,$parent_id,$res,$getChilds); } else { $res = $s; } return $res; } public static function getName($v, array $options = []): string { return $v?$v[self::$NAME]:'-'; } public static function getEditTabs($values=[]) { $id = $values[self::$ID]; return [ [ eTab::NAME=>'Редактировать', eTab::TYPE=>eTabType::FORM, eTab::CONTENT=>function($values=[]){ return self::_getForm($values, static::getFormOptions($values)); }, ], [ eTab::NAME=>'Ссылки в меню', eTab::TYPE=>eTabType::TABLE, eTab::CONTENT=>function($values=[]){ $id = $values[self::$ID]; $o = [ \Query::WHERE=>new \Where(\Where::_operator(self::$PARENT,'=',$id)), \ModuleTable::FORM_INIT_DATA=>[ self::$PARENT => $id, ], \ModuleTable::SORTABLE=>true, \ModuleTable::TABLE_ID => self::$table_name.'_'.self::$table_name.'_'.$id, \ModuleTable::ROW_CLICK => \core\core\structure\eRowClick::CARD, \Query::SORT => Menu::$POS, \ModuleTable::COLUMN_RENDER => [ Menu::$IMG => [ \ModuleTable::COLUMN_RENDER_IMAGE_WRAP => true, \ModuleTable::COLUMN_RENDER_LINK_ID => \Site::sectionUrl('content/menu/'), \ModuleTable::COLUMN_RENDER_LINK_CSS_CLASS => 'link', //ModuleTable::COLUMN_RENDER_LINK_MODAL=>true, ], Menu::$NAME => [ \ModuleTable::COLUMN_RENDER_LINK_ID => \Site::sectionUrl('content/menu/'), \ModuleTable::COLUMN_RENDER_LINK_CSS_CLASS => 'link', //ModuleTable::COLUMN_RENDER_LINK_MODAL => true, ], ], ]; return boolval($values['justData']) ? self::getTableData( $o ) : self::drawTable( $o ); }, ], ]; } public static function getWindowTableRules() { return [ \Query::WHERE=>new \Where( \Where::_and( [ \Where::_operator(static::$ACCOUNT,'=',UID), \Where::_operator(static::$PARENT,'=',0), ])), \ModuleTable::FORM_INIT_DATA=>[ self::$PARENT=>0, ] ]; } static function isMainNode($C){ return boolval($C[self::$PARENT]==0);} static function getForm($values = [], $options = []) :array { $isMain = self::isMainNode($values); return [ self::getCommonFormInputs(), [ Form::VIEW =>Form::INPUT, Form::KEY_VALUE =>self::$PARENT, Form::TYPE =>eInputType::HIDDEN, ], [ Form::VIEW=>Form::ROW, Form::COLS => [ [ Form::VIEW =>Form::INPUT, Form::COL_CLASSES =>'c', Form::KEY_VALUE =>self::$IMG, Form::TYPE =>eInputType::IMAGE, Form::INPUT_OPT => [ Input::PLACEHOLDER => $c = V::get(Vars::$IMG), Input::LABEL => $c, Input::SRC => ($c = $values[self::$IMG]) ? Image::imageResize(Image::getByID($c)[Image::$URL],600,0,100) : '', ], ], [ Form::VIEW =>Form::INPUT, Form::COL_CLASSES =>'c c-50', Form::KEY_VALUE =>self::$NAME, Form::TYPE =>eInputType::TEXT, Form::INPUT_OPT => [ Input::PLACEHOLDER => $c = V::get(Vars::$NAME), Input::LABEL => $c, ], ], $isMain?null:[ Form::VIEW =>Form::INPUT, Form::COL_CLASSES =>'c c-50', Form::KEY_VALUE =>self::$LINK, Form::TYPE =>eInputType::TEXT, Form::INPUT_OPT => [ Input::PLACEHOLDER => $c = V::get(Vars::$LINK), Input::LABEL => $c, ], ], $isMain?null:[ Form::VIEW =>Form::INPUT, Form::COL_CLASSES =>'c c-50', Form::KEY_VALUE =>self::$CSS_CLASS, Form::TYPE =>eInputType::SELECT, Form::INPUT_OPT => [ Input::PLACEHOLDER => $c = V::get(Vars::$CSS_CLASS), Input::LABEL => $c, Input::OPTIONS => eMenuCssClass::getNameList(), ], ], $isMain?null:[ Form::VIEW =>Form::INPUT, Form::COL_CLASSES =>'c c-50', Form::KEY_VALUE =>self::$VIS, Form::TYPE =>eInputType::CHECKBOX, Form::INPUT_OPT => [ Input::PLACEHOLDER => $c = V::get(Vars::$VIS), Input::LABEL => $c, Input::VALUE => 1, Input::CHECKED => boolval($values[self::$VIS]), ], ], $isMain?null:[ Form::VIEW =>Form::INPUT, Form::COL_CLASSES =>'c ', Form::KEY_VALUE =>self::$TEXT, Form::TYPE =>eInputType::TEXTAREA, Form::INPUT_OPT => [ Input::PLACEHOLDER => $c = V::get(Vars::$TEXT), Input::LABEL => $c, ], ], ] ], self::getCommonFormSubmits($values), ]; } 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::$NAME, C::TYPE => eColumnType::VARCHAR, C::LENGTH => 1023, C::TH => V::get(Vars::$NAME), ]), new C([ C::VAR_NAME => &self::$PARENT, C::TYPE => eColumnType::INT, C::HIDDEN => true, ]), new C([ C::VAR_NAME => &self::$IMG, C::TYPE => eColumnType::INT, C::DEFAULT => 0, C::HIDDEN => true, C::FUNC_VALUE => function($v){ $img = Image::getByID($v[self::$IMG]); return ''; }, C::FUNC_VALUE_DATA => function($v){ $img = Image::getByID($v[self::$IMG]); return Image::imageResize($img[Image::$URL],50,50,100,['crop'=>'center']); } ]), new C([ C::VAR_NAME => &self::$TEXT, C::TYPE => eColumnType::TEXT, C::DEFAULT => '', C::HIDDEN => true, ]), new C([ C::VAR_NAME => &self::$LINK, C::TYPE => eColumnType::VARCHAR, C::LENGTH => 1023, C::TH => V::get(Vars::$LINK), ]), new C([ C::VAR_NAME => &self::$POS, C::TYPE => eColumnType::INT, C::DEFAULT => time(), C::HIDDEN => true, ]), new C([ C::VAR_NAME => &self::$CSS_CLASS, C::TYPE => eColumnType::TINYINT, C::DEFAULT => 3, C::HIDDEN => true, ]), new C([ C::VAR_NAME => &self::$VIS, C::TYPE => eColumnType::TINYINT, C::LENGTH => 1, C::DEFAULT => 1, C::TH => V::get(Vars::$VIS), C::FUNC_VALUE => function($v){ return MS::getBoolValText($v[self::$VIS]); }, C::FUNC_VALUE_DATA => function($v){ return MS::getBoolValText($v[self::$VIS]); } ]), 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 Menu();