meraproject/themes/merakomis/project/controller.php

253 lines
8.6 KiB
PHP
Raw Normal View History

<?
namespace controller\themes\merakomis\project;
use core\core\structure\eRowClick;
use themes\Merakomis;
use themes\merakomis\Emp;
use themes\merakomis\emp\Rules;
use themes\merakomis\Emp\structure\eEmpGroup;
use themes\merakomis\Project;
use themes\merakomis\structure\merakomisControllerTable;
use themes\merakomis\structure\merakomisModuleTable;
class Api extends merakomisControllerTable {
/** @var merakomisModuleTable */
static $class = 'themes\merakomis\Project';
static function test()
{
//Project::checkAddAllEmps(48);
Project::checkAllProjectsForAllEmps();;
}
public static function getForm() {
$res = [];
if(Emp::$IS_AUTH) {
$_POST[static::$class::$ID] = $_POST['id'];
$res = static::$class::getFormInfo($_POST);
$res['title'] = 'Редактор проекта';
}
echo je($res);
}
public static function getTableData($post = []) {
$post['options'][\ModuleTable::ROW_CLICK] = eRowClick::CUSTOM;
//$post['options'][\Query::COUNT] = 0;
$post['options'][\Query::SORT] = $post['options']['sort']?:[Project::$CODE=>'ASC'];
$isArchive = false;
if($post['data']['my']){
$post['options'][\Query::WHERE] = Project::getWhereForMe();
}
$post['options'][\ModuleTable::COLUMN_RENDER]= [
Project::$TEAM => [
\ModuleTable::COLUMN_RENDER_LINK_ID => 'team/member/',
\ModuleTable::COLUMN_RENDER_LINK_BLANK => false,
\ModuleTable::COLUMN_RENDER_LINK_COLUMN_ID => Project::$TEAM,
],
Project::$LEFT => [
\ModuleTable::COLUMN_RENDER_AS_HTML => true,
],
Project::$SECTIONS => [
\ModuleTable::COLUMN_RENDER_AS_HTML => true,
],
];
if(isset($post['data']['archive'])){
$archive = intval($post['data']['archive']);
$isArchive = boolval($archive);
$justDirector = null;
$or = [];
if(!Rules::isAdmin()){
if(!(Rules::isGroupProjectEditor() || Emp::isMeAnyDepartmentDirector() )){
if($archive) {
$or[] = \Where::_operator(Project::$DIRECTOR, '=', Emp::$AUTH_ID);
} else {
$projects = Project::getListForTable();
$pids = [];
foreach ($projects as $v) {
$pids[] = $v[Project::$ID];
}
$or[] = \Where::_in(Project::$ID, $pids);
}
}
}
if($archive==0){
} else {
$post['options'][\ModuleTable::COLUMN_LIST]= [
Project::$CODE,
Project::$NAME,
Project::$DATE,
Project::$STEP,
Project::$SECTIONS,
Project::$DIRECTOR,
Project::$LINK,
Project::$CONTRACTOR,
Project::$STATUS,
Project::$LEFT,
Project::$TEAM,
Project::$ARCHIVE_DATE,
];
}
$post['options'][\Query::WHERE] = \Where::_and([
\Where::_operator(Project::$ARCHIVE, '=',intval($post['data']['archive'])),
$or ? \Where::_or($or) : null,
]);
}
$post['getData'] = true;
$res = parent::getTableData($post);
//$res['title'] = ['title'=>'Проекты','subtitle'=>Merakomis::$PROJECT_TABLE_SUBTITLE,'text'=>Merakomis::$PROJECT_TABLE_TEXT];
$res['title'] = [
'title' => 'Проекты',
'edit' => true,
'subtitle' => $isArchive ? Merakomis::$PROJECT_TABLE_ARCHIVE_SUBTITLE : Merakomis::$PROJECT_TABLE_SUBTITLE,
'text' => $isArchive ? Merakomis::$PROJECT_TABLE_ARCHIVE_TEXT : Merakomis::$PROJECT_TABLE_TEXT,
'subtitle_var' => $isArchive ? Merakomis::$_PROJECT_TABLE_ARCHIVE_SUBTITLE : Merakomis::$_PROJECT_TABLE_SUBTITLE,
'text_var' => $isArchive ? Merakomis::$_PROJECT_TABLE_ARCHIVE_TEXT : Merakomis::$_PROJECT_TABLE_TEXT,
];
if(!$post['data']['archive']){
$res["per_page_options"] = [
["id"=>0,"title"=>'Показать все'],
["id"=>10, "title"=>'10'],
["id"=>25, "title"=>'25'],
["id"=>50, "title"=>'50'],
["id"=>100,"title"=>'100'],
];
}
echo je($res);
}
public function aaa(){
}
public function getMyListForAnalysis(){
$res = [];
if(Emp::$IS_AUTH){
$list = Project::getListForAnalysis();
foreach ($list as $v) {
$res[] = Project::format($v);
}
}
echo je($res);
}
public function getMyList(){
$res = [];
if(Emp::$IS_AUTH){
$empId = intval($_POST['emp']);
$isOther = boolval($empId);
$archive = intval($_POST['archive']);
$active = intval($_POST['active']);
$isCabinet = boolval($_POST['cabinet']);
// Есть следующие ситуации отображения списка
// 1. Раздел "Мои проекты", тут отображаются все проекты, в которых я участник.
// 2. Раздел "Мои проекты", но смотрим с ролью "проект наблюдатель" или админ, отображаются не архивные проекты
// 3. Смотрим чужой список проектов
$res = [];
// 3. Если чужой список проектов
if($isOther){
$res = Project::getListFormatted($empId,$archive,$active);
} else {
// 2. Если смотрит с ролью "проект наблюдатель" или админ
if((Rules::isAdmin() && !$isCabinet) || (Rules::isGroupProjectViewer() && !$isCabinet)){
$r = Project::select([
\Query::WHERE => new \Where(\Where::_and([
\Where::_operator(Project::$ARCHIVE,'=',0),
\Where::_operator(Project::$REMOVED,'=',0),
])),
\Query::SORT => [Project::$CODE=>'ASC'],
]);
while($l = \DB::fetch($r)){
$res[] = Project::format($l);
}
} else {
// 1. Если я смотрю свои "Мои проекты"
$res = Project::getListFormatted(Emp::$AUTH_ID,$archive,$active);
}
}
/*
if((Emp::isMeGroup(eEmpGroup::TOP) || Emp::isMeGroup(eEmpGroup::GENERAL) || Emp::isAdmin()) && !isset($_POST['emp'])){
$r = Project::select([
\Query::WHERE => new \Where(\Where::_and([
\Where::_operator(Project::$ARCHIVE,'=',0),
\Where::_operator(Project::$REMOVED,'=',0),
])),
\Query::SORT => [Project::$CODE=>'ASC'],
]);
$a = [];
while($l = \DB::fetch($r)){
$a[] = Project::format($l);
}
} else {
$a = Project::getListFormatted(intval($_POST['emp']) ?: Emp::$AUTH_ID, $_POST['archive'], $_POST['active']);
}
if($isOther) {
$r = Project::select([
// \Query::WHERE => $isAdmin ? null : new \Where(\Where::_operator(Project::$DIRECTOR,'=',Emp::$AUTH_ID))
\Query::SORT => [Project::$CODE=>'ASC'],
]);
$ids = [];
while($l = \DB::fetch($r)){
$ids[] = $l[Project::$ID];
}
foreach ($a as $v){
if(in_array($v['id'],$ids)){
$res[] = $v;
}
}
} else {
$res = $a;
}
*/
}
echo je($res);
}
public function getData(){
$res = [];
if(Emp::$IS_AUTH){
$res = Project::format(Project::getByID(intval($_POST['id'])));
}
echo je($res);
}
}