253 lines
8.6 KiB
PHP
253 lines
8.6 KiB
PHP
<?
|
||
|
||
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);
|
||
}
|
||
|
||
|
||
}
|
||
|