meraproject/themes/merakomis/project/controller.php
keboss-m 5c21d25d45 Initial commit: Merakomis portal, Docker stack and user-reader API.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-24 11:04:05 +03:00

253 lines
8.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?
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);
}
}