new \Where(\Where::_operator(self::$PARENT,'=',$id)), ]); while($l = \DB::fetch($r)){ self::deleteByID($l[self::$ID]); } $r = Post::select([ \Query::WHERE => new \Where(\Where::_operator(Post::$DEPARTMENT,'=',$id)) ]); while($l = \DB::fetch($r)){ Post::deleteByID($l[Post::$ID]); } return $res; } static function format($v){ $id = intval($v[self::$ID]); $r = Post::select([ \Query::WHERE => new \Where(\Where::_and([ \Where::_operator( Post::$DEPARTMENT,'=',$id ), ])) ]); $directors = []; $employees = []; $emp_ids = []; $emp_active = []; while($l = \DB::fetch($r)){ $post_id = intval($l[Post::$ID]); /* while($role_l = \DB::fetch($roles_r)){ $roles[] = [ 'id'=>intval($role_l[Role::$ID]), 'post_id'=>intval($post_id), 'emp'=>Emp::format($role_l,false), ]; } */ $roles = []; if($l[Post::$EMP]) { $emp_ids[] = $l[Post::$EMP]; if(!$l[Emp::$ARCHIVE]){ $emp_active[] = $l[Post::$EMP]; } } $post = [ 'id'=>$post_id, 'title'=>Post::getName($l), 'is_director'=>boolval($l[Post::$IS_DIRECTOR]), 'emp'=>Emp::format($l,false), //'roles'=>$roles, ]; if($l[Post::$IS_DIRECTOR]){ $directors[] = $post; } else $employees[] = $post; } return [ 'id'=>$id, 'title'=>self::getName($v), 'parent'=>$v[self::$PARENT], 'directors'=>$directors, 'employees'=>$employees, 'emp_ids'=>$emp_ids, 'emp_active'=>$emp_active, ]; } static function getPath($id) { if(self::$CACHE['getPath'][$id]) return self::$CACHE['getPath'][$id]; $s = self::getStructure(); $i = 1; do{ $path[] = $id; $id = $s['base'][$id][self::$PARENT]; $i++; if($i>10) break; } while($s['base'][$id]); $path = array_reverse($path); return self::$CACHE['getPath'][$id] = $path; } static function getStructure(){ $key = 'getStructure'; if(self::$CACHE[$key]) return self::$CACHE[$key]; $res = []; $a = self::getAll(); foreach ($a as $k=>$v){ $id = intval($v[self::$ID]); $parent = intval($v[self::$PARENT]); $res['base'][$id] = $v+self::format($v); $res[$parent][] = $id; } return self::$CACHE[$key] = $res; } static function getFormInputs(\ModuleBZ\Form &$form, array $data, $C, bool $isEdit) { $row = (new Row()); $row->addColumn(((new Text()) ->setName(self::$NAME) ->setValue($C[self::$NAME]) ->setClassAll('c-100') ->setLabel($c = V::get(Vars::$NAME)) ->setPlaceholder($c) )); if(Emp::isAdmin()){ $row->addColumn(((new Text()) ->setName(self::$SHORT) ->setValue($C[self::$SHORT]) ->setClassAll('c-100') ->setLabel($c = V::get(Vars::$SHORT)) ) )->addColumn(((new Switcher()) ->setName(self::$IS_COMPANY_REPORT) ->setValue($C[self::$IS_COMPANY_REPORT]) ->setClassAll('c-100') ->setPlaceholder($c = V::get(Vars::$IS_COMPANY_REPORT)) ->setChecked(boolval($C[self::$IS_COMPANY_REPORT])) ) ) ; } $row->addColumn(((new InputSave())->setClassAll('c-100')->setName('save'))); $form ->addInput((new Hidden())->setName(self::$PARENT)->setValue(intval($C[self::$PARENT]?:$data['parent']))) ->addRow((new Row()) ->addColumn((new Column())->setClassAll('c-40 ')->addRow((new Row()))) ->addColumn( (new Column())->setClassAll('c-20 ') ->addRow($row) )); } 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::$SHORT, C::TYPE => eColumnType::TEXT, C::TH => V::get(Vars::$SHORT), ]), new C([ C::VAR_NAME => &self::$IS_COMPANY_REPORT, C::TYPE => eColumnType::TINYINT, C::LENGTH => 1, C::DEFAULT => 0, C::TH => V::get(Vars::$IS_COMPANY_REPORT), ]), new C([ C::VAR_NAME => &self::$PARENT, C::TYPE => eColumnType::INT, C::TH => V::get(Vars::$PARENT), ]), new C([ C::VAR_NAME => &self::$PORTAL, C::TYPE => eColumnType::INT, C::DEFAULT => intval(\Site::$portal_id), c::HIDDEN => true, ]), new C([ C::VAR_NAME => &self::$ACCOUNT, C::TYPE => eColumnType::INT, C::DEFAULT => intval(\Site::$owner_id), //C::TH => V::get(Vars::$ACCOUNT), c::HIDDEN => true, ]), ]; } } new Department(); ///