1
0
Files
TaskBoard/backend/app/class/enity/class_project.php
Falknat 3bfa1e9e1b Комментарии, файлы и права проекта
- Система комментариев к задачам с вложенными ответами
- Редактирование и удаление комментариев
- Прикрепление файлов к задачам и комментариям (картинки, архивы до 10 МБ)
- Система прав проекта: админ проекта может удалять чужие комментарии и файлы
- Универсальный класс FileUpload для загрузки файлов
- Защита загрузки: только автор комментария может добавлять файлы
- Каскадное удаление: задача → комментарии → файлы
- Автообновление комментариев в реальном времени
2026-01-15 06:40:47 +07:00

130 lines
4.2 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.

<?php
class Project extends BaseEntity {
protected $db_name = 'project';
// Получение всех проектов
public function getAll() {
$current_user_id = RestApi::getCurrentUserId();
$projects = Database::select($this->db_name, [
'id',
'id_order',
'name',
'id_ready',
'id_admin'
], [
'ORDER' => ['id_order' => 'ASC']
]);
// Обрабатываем id_admin для каждого проекта
return array_map(function($project) use ($current_user_id) {
$admins = $project['id_admin'] ? json_decode($project['id_admin'], true) : [];
if ($current_user_id && in_array((int)$current_user_id, $admins, true)) {
$project['id_admin'] = true;
} else {
unset($project['id_admin']);
}
return $project;
}, $projects);
}
// Получение одного проекта
// $current_user_id — ID текущего пользователя для проверки админства
public static function get($id, $current_user_id = null) {
$project = Database::get('project', [
'id',
'id_order',
'name',
'id_ready',
'id_admin'
], ['id' => $id]);
if ($project) {
$admins = $project['id_admin'] ? json_decode($project['id_admin'], true) : [];
// Если передан user_id — проверяем админство
if ($current_user_id && in_array((int)$current_user_id, $admins, true)) {
$project['id_admin'] = true;
} else {
// Не админ — убираем поле
unset($project['id_admin']);
}
}
return $project;
}
// Получение id_ready (ID колонки "Готово") по ID проекта
public static function getReadyColumnId($project_id) {
$project = Database::get('project', ['id_ready'], ['id' => $project_id]);
return $project ? (int)$project['id_ready'] : null;
}
// Получение колонок проекта
public static function getColumns($project_id) {
return Database::select('columns', [
'id',
'name_columns',
'color',
'id_order'
], [
'id_project' => $project_id,
'ORDER' => ['id_order' => 'ASC']
]);
}
// Получение отделов проекта
public static function getDepartments($project_id) {
return Database::select('departments', [
'id',
'name_departments',
'color'
], [
'id_project' => $project_id
]);
}
// Получение всех данных проекта (проект + колонки + отделы + метки)
public static function getProjectData($project_id) {
// Получаем ID текущего пользователя для проверки админства
$current_user_id = RestApi::getCurrentUserId();
$project = self::get($project_id, $current_user_id);
if (!$project) {
return null;
}
// Получаем метки (глобальные)
$labels = Database::select('labels', [
'id',
'name_labels',
'icon',
'color'
]);
return [
'project' => $project,
'columns' => self::getColumns($project_id),
'departments' => self::getDepartments($project_id),
'labels' => $labels
];
}
// Проверка является ли пользователь админом проекта
public static function isAdmin($project_id, $user_id): bool {
$project = Database::get('project', ['id_admin'], ['id' => $project_id]);
if (!$project || !$project['id_admin']) {
return false;
}
$admins = json_decode($project['id_admin'], true) ?: [];
return in_array((int)$user_id, $admins, true);
}
}
?>