<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wwoss.ru/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>worldwide open-source software - manual:file_manager_db</title>
        <description></description>
        <link>https://wwoss.ru/</link>
        <lastBuildDate>Sun, 26 Jul 2026 06:39:46 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://wwoss.ru/lib/exe/fetch.php?media=wiki:logo.png</url>
            <title>worldwide open-source software</title>
            <link>https://wwoss.ru/</link>
        </image>
        <item>
            <title>test</title>
            <link>https://wwoss.ru/doku.php?id=manual:file_manager_db:test&amp;rev=1783883404</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;файл_file_managerdb&quot;&gt;Файл file_manager.db&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0424\u0430\u0439\u043b file_manager.db&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0444\u0430\u0439\u043b_file_managerdb&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-40&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;📊_полная_схема_таблиц_базы_данных_file_managerdb_sqlite&quot;&gt;📊 ПОЛНАЯ СХЕМА ТАБЛИЦ БАЗЫ ДАННЫХ file_manager.db (SQLite)&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Локальная база данных модуля содержит 3 взаимосвязанные таблицы, которые полностью обеспечивают логику безопасности, распределения прав, учета дубликатов и ведения тегов.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\ud83d\udcca \u041f\u041e\u041b\u041d\u0410\u042f \u0421\u0425\u0415\u041c\u0410 \u0422\u0410\u0411\u041b\u0418\u0426 \u0411\u0410\u0417\u042b \u0414\u0410\u041d\u041d\u042b\u0425 file_manager.db (SQLite)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\ud83d\udcca_\u043f\u043e\u043b\u043d\u0430\u044f_\u0441\u0445\u0435\u043c\u0430_\u0442\u0430\u0431\u043b\u0438\u0446_\u0431\u0430\u0437\u044b_\u0434\u0430\u043d\u043d\u044b\u0445_file_managerdb_sqlite&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;41-457&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;📑_таблица_1files_catalog_главный_реестр_файлов&quot;&gt;📑 Таблица 1: files_catalog (Главный реестр файлов)&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Эта таблица хранит физические параметры каждого файла и жестко привязывает его к уровням приватности и пространству пользователя.
&lt;/p&gt;
&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;Имя поля (Column)&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Тип данных&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;Флаги (Constraints)&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Описание поля и его логическая роль в коде&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;id&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;INTEGE&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;RPRIMARY KEY AUTOINCREMENT&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Уникальный сквозной номер файла внутри модуля.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;user_id&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;INTEGER&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;NOT NULL&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Владелец файла. Сюда записывается глобальный ID пользователя из таблицы core_users ядра.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;orig_name&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;TEXT&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;NOT NULL&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Оригинальное имя, которое видел юзер (например, чертеж_мурманск.dwg). Поддерживает кириллицу.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;server_name&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;TEXT&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;NOT NULL&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Безопасное имя файла на флешке (например, file_8834.dat). Исключает запуск хакерских скриптов.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;file_type&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;TEXT&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;NOT NULL&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Группа файла для быстрой фильтрации в интерфейсе (&amp;#039;photo&amp;#039;, &amp;#039;video&amp;#039;, &amp;#039;audio&amp;#039;, &amp;#039;document&amp;#039;).&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;file_size&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;INTEGER&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;NOT NULL&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Размер файла в байтах. Используется для вывода в таблице и контроля лимитов места.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;file_hash&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;TEXT&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;NOT NULL&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;MD5-хэш содержимого. Нужен для защиты от дубликатов (дедупликации) и экономии памяти флешки.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;virtual_folder&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;TEXT&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;DEFAULT &amp;#039;/&amp;#039;&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Виртуальный путь в интерфейсе (например, &amp;#039;/мурманск/проекты/&amp;#039;). Избавляет от создания реальных папок на диске.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;access_level&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;TEXT&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;DEFAULT &amp;#039;private&amp;#039;&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Контур приватности. Принимает строго 3 значения: &amp;#039;private&amp;#039; (только владелец), &amp;#039;group&amp;#039; (семья/отдел), &amp;#039;public&amp;#039; (все).&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;download_count&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;INTEGER&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;DEFAULT 0&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Счетчик скачиваний. Показывает Суперадмину популярность файла.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row11&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;is_deleted&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;INTEGER&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;DEFAULT 0&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Флаг Корзины. 0 — файл активен, 1 — файл удален пользователем в Корзину (скрыт из общего списка).&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row12&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;created_at&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;DATETIME&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;DEFAULT CURRENT_TIMESTAMP&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Точная дата и время загрузки файла на сервер.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row13&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;updated_at&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;DATETIME&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;DEFAULT CURRENT_TIMESTAMP&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Дата и время последнего изменения файла. При первой загрузке равна created_at, но если пользователь отредактировал текст readme.txt через встроенный core_edit, PHP обновит это поле текущим штампом времени.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row14&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;is_draft&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;INTEGER&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;DEFAULT 1&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Флаг черновика. 1 — файл является черновиком (виден только автору), 0 — файл опубликован (активируется проверка access_level). Это спасет админа, если он загружает огромный ISO-образ приложения частями, чтобы юзеры не начали качать битый файл до конца загрузки.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row15&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;version_name&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;TEXT&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;DEFAULT &amp;#039;1.0.0&amp;#039;&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Строковый маркер версии проекта, понятный человеку (например, v1.0.12, v2.0-beta).&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row16&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;parent_id&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;INTEGER&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;DEFAULT 0&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Ключ версионирования. Если файл является новой версией старого проекта, сюда записывается id самого первого (базового) файла. Таким образом, в интерфейсе мы сможем схлопнуть историю изменений в одну строчку с выпадающим списком «История версий».&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row17&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;os_tag&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;TEXT&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;DEFAULT &amp;#039;any&amp;#039;&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Метка операционной системы, под которую собран файл (например: windows, linux, macos, any).&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row18&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;cpu_tag&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;TEXT&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;DEFAULT &amp;#039;any&amp;#039;&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Метка архитектуры процессора (например: x86_64, arm64, any). Критически важно для нашего «CD-диска» к руководству, чтобы пользователь случайно не скачал бинарник FFmpeg для ARM на обычный ПК Intel.&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;790-5171&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\ud83d\udcd1 \u0422\u0430\u0431\u043b\u0438\u0446\u0430 1: files_catalog (\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0440\u0435\u0435\u0441\u0442\u0440 \u0444\u0430\u0439\u043b\u043e\u0432)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\ud83d\udcd1_\u0442\u0430\u0431\u043b\u0438\u0446\u0430_1files_catalog_\u0433\u043b\u0430\u0432\u043d\u044b\u0439_\u0440\u0435\u0435\u0441\u0442\u0440_\u0444\u0430\u0439\u043b\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;458-5172&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;🏷️_таблица_2files_tags_индексатор_тегов_для_быстрого_поиска&quot;&gt;🏷️ Таблица 2: files_tags (Индексатор тегов для быстрого поиска)&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Позволяет привязывать к одному файлу бесконечное количество поисковых меток (например, к одной фотографии можно добавить теги: «2026», «Отпуск», «Мурманск»). Связана с главной таблицей отношением «один ко многим».
&lt;/p&gt;
&lt;div class=&quot;table sectionedit6&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;Имя поля (Column)&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Тип данных&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;Флаги (Constraints)&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Описание поля и его логическая роль в коде&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;id&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;INTEGER&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;PRIMARY KEY AUTOINCREMENT&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Уникальный номер тега.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;file_id&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;INTEGER&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;NOT NULL&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Связующий ключ. Указывает, к какому конкретно файлу из &lt;code&gt;files_catalog&lt;/code&gt; привязан этот тег.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;tag_name&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;TEXT&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;NOT NULL&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Сам текст тега в нижнем регистре для удобства поиска (например, отпуск).&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;5680-6245&amp;quot;} --&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Правило каскадного удаления:&lt;/strong&gt; Для поля file_id прописывается связь FOREIGN KEY(file_id) REFERENCES files_catalog(id) ON DELETE CASCADE. Это значит, что если Игорь окончательно очистит файл из Корзины, ядро SQLite &lt;strong&gt;автоматически и молча сотрет все теги&lt;/strong&gt;, привязанные к этому файлу, предотвращая появление мусора в базе.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\ud83c\udff7\ufe0f \u0422\u0430\u0431\u043b\u0438\u0446\u0430 2: files_tags (\u0418\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440 \u0442\u0435\u0433\u043e\u0432 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\ud83c\udff7\ufe0f_\u0442\u0430\u0431\u043b\u0438\u0446\u0430_2files_tags_\u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440_\u0442\u0435\u0433\u043e\u0432_\u0434\u043b\u044f_\u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e_\u043f\u043e\u0438\u0441\u043a\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;5173-6767&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;👥_таблица_3files_shares_точечный_доступ_для_конкретных_людей&quot;&gt;👥 Таблица 3: files_shares (Точечный доступ для конкретных людей)&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Нужна для расширения логики приватности. Если уровень доступа файла равен private, но Игорь хочет показать этот конкретный файл только Алисе (не открывая его для всей группы или интернета), эта таблица зафиксирует исключение.
&lt;/p&gt;
&lt;div class=&quot;table sectionedit8&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;Имя поля (Column)&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Тип данных&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;Флаги (Constraints)&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Описание поля и его логическая роль в коде&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;id&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;INTEGER&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;PRIMARY KEY AUTOINCREMENT&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;Уникальный номер записи.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;file_id&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;INTEGER&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;NOT NULL&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;ID файла из таблицы files_catalog, к которому дается доступ.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;shared_with_id&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;INTEGER&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;NOT NULL&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt;ID пользователя из глобальной базы ядра (core_users), которому разрешено скачать этот приватный файл.&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table2&amp;quot;,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;7292-7858&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\ud83d\udc65 \u0422\u0430\u0431\u043b\u0438\u0446\u0430 3: files_shares (\u0422\u043e\u0447\u0435\u0447\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043b\u044e\u0434\u0435\u0439)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\ud83d\udc65_\u0442\u0430\u0431\u043b\u0438\u0446\u0430_3files_shares_\u0442\u043e\u0447\u0435\u0447\u043d\u044b\u0439_\u0434\u043e\u0441\u0442\u0443\u043f_\u0434\u043b\u044f_\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445_\u043b\u044e\u0434\u0435\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;6768-7859&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;💻_готовый_sql-код_для_инсталлятора_модуля_для_вашего_руководства&quot;&gt;💻 Готовый SQL-код для инсталлятора модуля (Для вашего руководства)&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Когда Суперадмин будет впервые активировать модуль файлового менеджера, его &lt;code&gt;controller.php&lt;/code&gt; выполнит этот чистый SQL-запрос для создания структуры:
&lt;/p&gt;
&lt;pre class=&quot;code sql&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;SQL&lt;/span&gt;&lt;span class=&quot;co1&quot;&gt;-- 1. Создаем таблицу каталога файлов&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;IF&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;EXISTS&lt;/span&gt; files_catalog &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    id &lt;span class=&quot;kw1&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;PRIMARY&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;KEY&lt;/span&gt; AUTOINCREMENT&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    user_id &lt;span class=&quot;kw1&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    orig_name TEXT &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    server_name TEXT &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    file_type TEXT &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    file_size &lt;span class=&quot;kw1&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    file_hash TEXT &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    virtual_folder TEXT &lt;span class=&quot;kw1&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;/&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    access_level TEXT &lt;span class=&quot;kw1&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;private&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    download_count &lt;span class=&quot;kw1&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    is_deleted &lt;span class=&quot;kw1&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    created_at DATETIME &lt;span class=&quot;kw1&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;CURRENT_TIMESTAMP&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 2. Создаем таблицу тегов с автоматической очисткой&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;IF&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;EXISTS&lt;/span&gt; files_tags &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    id &lt;span class=&quot;kw1&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;PRIMARY&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;KEY&lt;/span&gt; AUTOINCREMENT&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    file_id &lt;span class=&quot;kw1&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    tag_name TEXT &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;FOREIGN&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;KEY&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;file_id&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;REFERENCES&lt;/span&gt; files_catalog&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;id&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;DELETE&lt;/span&gt; CASCADE
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 3. Создаем таблицу точечных доступов&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;IF&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;EXISTS&lt;/span&gt; files_shares &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    id &lt;span class=&quot;kw1&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;PRIMARY&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;KEY&lt;/span&gt; AUTOINCREMENT&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    file_id &lt;span class=&quot;kw1&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    shared_with_id &lt;span class=&quot;kw1&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;FOREIGN&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;KEY&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;file_id&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;REFERENCES&lt;/span&gt; files_catalog&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;id&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;DELETE&lt;/span&gt; CASCADE
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 4. Создаем системные индексы для ультрабыстрого поиска (чтобы флешка не тормозила)&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;INDEX&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;IF&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;EXISTS&lt;/span&gt; idx_files_user &lt;span class=&quot;kw1&quot;&gt;ON&lt;/span&gt; files_catalog&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;user_id&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;INDEX&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;IF&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;EXISTS&lt;/span&gt; idx_files_hash &lt;span class=&quot;kw1&quot;&gt;ON&lt;/span&gt; files_catalog&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;file_hash&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;kw1&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;INDEX&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;IF&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;EXISTS&lt;/span&gt; idx_tags_file &lt;span class=&quot;kw1&quot;&gt;ON&lt;/span&gt; files_tags&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;file_id&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\ud83d\udcbb \u0413\u043e\u0442\u043e\u0432\u044b\u0439 SQL-\u043a\u043e\u0434 \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0442\u043e\u0440\u0430 \u043c\u043e\u0434\u0443\u043b\u044f (\u0414\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\ud83d\udcbb_\u0433\u043e\u0442\u043e\u0432\u044b\u0439_sql-\u043a\u043e\u0434_\u0434\u043b\u044f_\u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0442\u043e\u0440\u0430_\u043c\u043e\u0434\u0443\u043b\u044f_\u0434\u043b\u044f_\u0432\u0430\u0448\u0435\u0433\u043e_\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;7860-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 12 Jul 2026 19:10:04 +0000</pubDate>
        </item>
    </channel>
</rss>
