/
Francuz
/
DailyPort
Обзор
Документация
Войти
/
Francuz
/
DailyPort
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/Archive.php
99 строк
4 KB
Francuz
docs: подробные комментарии ко всем PHP-файлам проекта
15 июн 2026, 08:08
15 июн 2026, 08:08
594585d
Код
Авторство
О чём код?
<?php /** * Класс Archive — система архивирования (мягкое удаление). * * Вместо физического удаления ссылок и страниц, * данные сохраняются в JSON-формате в таблицу archive. * * Поддерживает: * - архивацию ссылок (сохраняет title, url, page) * - архивацию страниц (сохраняет данные страницы + все ссылки) * - восстановление из архива * - полную очистку архива */ class Archive { private Database $db; public function __construct(Database $db) { $this->db = $db; } /** * Получить все записи архива (от новых к старым). * * @return array Массив записей с декодированным JSON в поле data */ public function all(): array { $result = $this->db->query("SELECT * FROM archive ORDER BY archived_at DESC"); $items = $result->fetch_all(MYSQLI_ASSOC); foreach ($items as &$item) { $item['data'] = json_decode($item['data'], true); } return $items; } /** * Архивировать ссылку. * * @param array $linkData Данные ссылки из БД [id, title, url, page, ...] */ public function archiveLink(array $linkData): void { $entityId = $this->db->escape((string)$linkData['id']); $data = $this->db->escape(json_encode($linkData, JSON_UNESCAPED_UNICODE)); $this->db->query("INSERT INTO archive (entity_type, entity_id, data) VALUES ('link', $entityId, '$data')"); } /** * Архивировать страницу со всеми её ссылками. * * @param array $pageData Данные страницы из БД * @param array $links Массив ссылок этой страницы */ public function archivePage(array $pageData, array $links = []): void { $entityId = $this->db->escape((string)$pageData['id']); $payload = ['page' => $pageData, 'links' => $links]; $data = $this->db->escape(json_encode($payload, JSON_UNESCAPED_UNICODE)); $this->db->query("INSERT INTO archive (entity_type, entity_id, data) VALUES ('page', $entityId, '$data')"); } /** * Восстановить запись из архива (без удаления из archive). * * @param int $archiveId ID записи в archive * @return array|null Запись с декодированными данными или null */ public function restore(int $archiveId): ?array { $archiveId = $this->db->escape((string)$archiveId); $result = $this->db->query("SELECT * FROM archive WHERE id = $archiveId"); $item = $result->fetch_assoc(); if (!$item) return null; $item['data'] = json_decode($item['data'], true); return $item; } /** * Удалить запись из архива (безвозвратно). * * @param int $archiveId ID записи в archive */ public function delete(int $archiveId): void { $archiveId = $this->db->escape((string)$archiveId); $this->db->query("DELETE FROM archive WHERE id = $archiveId"); } /** * Полностью очистить архив (TRUNCATE). */ public function clear(): void { $this->db->query("TRUNCATE TABLE archive"); } }