37254-vm/cls/class.pef.php
Flatlogic Bot 6908213cbc init
2026-02-15 21:17:22 +00:00

138 lines
4.5 KiB
PHP

<?php
require_once __DIR__ . '/../db/config.php';
class Pef {
private $db;
public function __construct() {
$this->db = db();
}
/**
* Get all projects, optionally filtered by industry or status.
*/
public function getProjects(?string $industry = null, ?string $status = null): array {
$sql = "SELECT * FROM projects WHERE 1=1";
$params = [];
if ($industry) {
$sql .= " AND industry = :industry";
$params['industry'] = $industry;
}
if ($status) {
$sql .= " AND status = :status";
$params['status'] = $status;
}
$sql .= " ORDER BY updated_at DESC";
$stmt = $this->db->prepare($sql);
$stmt->execute($params);
return $stmt->fetchAll();
}
/**
* User authentication.
*/
public function login(string $username, string $password): ?array {
$stmt = $this->db->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute(['username' => $username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
unset($user['password']);
return $user;
}
return null;
}
/**
* Update project status or details.
*/
public function updateProject(int $id, array $data): bool {
$fields = [];
foreach ($data as $key => $value) {
$fields[] = "$key = :$key";
}
$sql = "UPDATE projects SET " . implode(', ', $fields) . " WHERE id = :id";
$data['id'] = $id;
$stmt = $this->db->prepare($sql);
return $stmt->execute($data);
}
/**
* Delete project.
*/
public function deleteProject(int $id): bool {
$stmt = $this->db->prepare("DELETE FROM projects WHERE id = :id");
return $stmt->execute(['id' => $id]);
}
/**
* Dashboard stats.
*/
public function getStats(): array {
$stats = [];
$stats['total_projects'] = $this->db->query("SELECT COUNT(*) FROM projects")->fetchColumn();
$stats['active_projects'] = $this->db->query("SELECT COUNT(*) FROM projects WHERE status = 'active'")->fetchColumn();
$stats['latest_logs'] = $this->db->query("SELECT pl.*, p.name as project_name FROM project_logs pl JOIN projects p ON pl.project_id = p.id ORDER BY pl.created_at DESC LIMIT 5")->fetchAll();
return $stats;
}
/**
* Get a single project by ID.
*/
public function getProject(int $id): ?array {
$stmt = $this->db->prepare("SELECT * FROM projects WHERE id = :id");
$stmt->execute(['id' => $id]);
return $stmt->fetch() ?: null;
}
/**
* Get all logs for a specific project.
*/
public function getProjectLogs(int $projectId): array {
$stmt = $this->db->prepare("SELECT * FROM project_logs WHERE project_id = :project_id ORDER BY created_at DESC");
$stmt->execute(['project_id' => $projectId]);
return $stmt->fetchAll();
}
/**
* Create a new project.
*/
public function createProject(string $name, string $description, string $industry, string $version = '1.0.0'): int {
$stmt = $this->db->prepare("INSERT INTO projects (name, description, industry, current_version) VALUES (:name, :description, :industry, :version)");
$stmt->execute([
'name' => $name,
'description' => $description,
'industry' => $industry,
'version' => $version
]);
return (int)$this->db->lastInsertId();
}
/**
* Add a log entry for a project and update its current version.
*/
public function addLog(int $projectId, string $version, string $logEntry, string $author = 'System'): bool {
try {
$this->db->beginTransaction();
$stmt = $this->db->prepare("INSERT INTO project_logs (project_id, version, log_entry, author) VALUES (:project_id, :version, :log_entry, :author)");
$stmt->execute([
'project_id' => $projectId,
'version' => $version,
'log_entry' => $logEntry,
'author' => $author
]);
$stmt = $this->db->prepare("UPDATE projects SET current_version = :version WHERE id = :id");
$stmt->execute(['version' => $version, 'id' => $projectId]);
$this->db->commit();
return true;
} catch (Exception $e) {
$this->db->rollBack();
return false;
}
}
}