Файловый менеджер для markitup

Привет друзья!

Стукнуло мне в голову сделать файловый менеджер для своего сайта. Раньше пользовался редактором tinymce, под него у меня был хороший файловый менеджер (тот что от конторы tinymce), но вот я перешел на редактор markitup, и он как то легче и быстрее, короче от tinymce было решено отказаться. Попытки скрестить markitup и файловый менеджер tinymce не увенчались успехом, не хватило документации по tinymce, да и как-то через попу получилось бы всё. (Кому нужен файловый менеджер для tinymce стучите в личку)

Файловый менеджер LiveStreet


Тогда было принято решение отказаться от проверенного временем файлового менеджера tinymce и найти какой-нибудь другой, более современный файловый менеджер с поддержкой html5, блэкджэком и прочими прелестями. Выбор пал на замечательный редактор elFinder.

Немного его потестировав я понял что это именно то что мне нужно. На хабре я нашел замечательную статью с уже готовым примером рабочей связки elFinder и markitup.

Немного разобравшись с редактором было принято решение его немного доработать напильником (рашпилем). Стояли следующие цели:
— Возможность загрузки файлов пользователям
— Ограничение количества загружаемых файлов
— Ограниченный режим файлового менеджера для пользователей
— Расширенный режим файлового менеджера для администраторов

Покопавшись пару дней и бессоных ночей в исходном коде все планируемые изменения были внесены, чем и спешу с Вами поделиться. Скажу сразу, что кое-где в коде есть места где кодеру хочеться вырвать себе глаза, к примеру использование глобальных переменных GLOBAS и SESSION, но скажу сразу таких мест не очень много, просто нужно было сделать поскорее да и код пишу в свободное от основной работы время.

Придется вносить изменения в код Ливстрита, плагины к сожелению не научился писать, нет времени разбираться с механизмом их создания, если кто хочет оформите это в виде плагина.

Для начала потребуется передать id пользователя, логин пользователя и тип пользователя в elFinder, самое простое что пришло мне в голову — это рередать эти заначения через глобальную переменную SESSION

classes/modules/user/User.class.php внести следующие изменения:
в функцию public function Init() после строки
/**
 * Сюда можно вставить условие на проверку айпишника сессии
 */
$this->oUserCurrent = $oUser;

Добавить строки
$_SESSION['LivestreetUserId'] = $oUser->getId();
$_SESSION['LivestreetUserNickname'] = $oUser->getLogin();
$_SESSION['LivestreetUserIsAdministrator'] = $oUser->isAdministrator();


в функцию public function Authorization()
после
/**
 * Ставим куку
 */
if ($bRemember) {
	$this->Session_SetCookie($this->GetKeyName(), $sSessionKey, Config::Get('sys.cookie.time'));
}

Добавить эти же строки
$_SESSION['LivestreetUserId'] = $oUser->getId();
$_SESSION['LivestreetUserNickname'] = $oUser->getLogin();
$_SESSION['LivestreetUserIsAdministrator'] = $oUser->isAdministrator();


Теперь id пользователя, логин пользователя и тип пользователя в глобальной переменной SESSION и с ними можно работать в elFinder (если Вы знаете более изящные решения пожалуйста напишите в комментариях).

В файл конфигурации config/config.local.php добавить строки, до строки return $config;
#Файловый менеджер
// Включить файловый менеджер
$config['module']['filemanager']['enable'] = true;
// Файловый менеджер только для администратора
$config['module']['filemanager']['admin_only'] = true;
// Включить расширенный режим файлового менеджера для администратора
$config['module']['filemanager']['admin_advanced'] = true;
// Максимальный размер файла для администратора "10m", "500k", "1g"
$config['module']['filemanager']['max_admin_filesize'] = '5g';
// Максимальный размер файла для пользователя "10m", "500k", "1g"
$config['module']['filemanager']['max_user_filesize'] = '50m';
// Максимальное количество файлов для администратора
$config['module']['filemanager']['admin_limit_file'] = 10000;
// Максимальное количество файлов для пользователя
$config['module']['filemanager']['user_limit_file'] = 100;


Как Вы догадались это строки конфигурации для файлового менеджера. Надеюсь что все настройки там описаны понятно.

Теперь нужно скопировать файлы из этого архива (filemanager.zip, 605 КБ) в корень сайта, на всякий случай сохраните резервные копии заменяемых файлов. Заменяться только файлы скина synio и файлик engine/lib/internal/template/js/settings.js, можете впринципе произвести изменения вручную.

Файлы скина в архиве для скина synio т.к. он идет по умолчанию с движком.

Ну вот и всё, всё должно работать, перед тем как скинуть сюда эту инструкция я скачал чистый livestreet_1.0.3 и испытал на нём, всё работает нормально. Загрузка файлов будет доступна:
— Создание топика
— Создание блога
— Комментарий
— Личное сообщение



Q&A:
— По умолчанию файлы загружаются в uploads/files/ИМЯ_ПОЛЬЗОВАТЕЛЯ, изменить путь по умолчанию можно в файле fm.php
— Допустимые типы файлов храняться в файле engine/lib/external/jquery/elfinder/php/elFinder.class.php (нужно прописывать сразу в 3-х местах)
— Не забудьте изменить максимальный размер загружаемого файла в конфиге php
— Будьте бдительны в выборе файлов для загрузки, не разрешайте загрузку файлов которые могут исполнить код, к примеру файлы .php

Надеюсь кому-нибудь пригодиться, т.к. в поиске на эту тему ни чего не нашел. Кому что не понятно пишите в комментарии, постараюсь ответить.

2 комментария

avatar
А плагином возможно?
avatar
Конечно.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.