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

Тогда было принято решение отказаться от проверенного временем файлового менеджера tinymce и найти какой-нибудь другой, более современный файловый менеджер с поддержкой html5, блэкджэком и прочими прелестями. Выбор пал на замечательный редактор elFinder.
Немного его потестировав я понял что это именно то что мне нужно. На хабре я нашел замечательную статью с уже готовым примером рабочей связки elFinder и markitup.
Немного разобравшись с редактором было принято решение его немного доработать напильником (рашпилем). Стояли следующие цели:
— Возможность загрузки файлов пользователям
— Ограничение количества загружаемых файлов
— Ограниченный режим файлового менеджера для пользователей
— Расширенный режим файлового менеджера для администраторов
Покопавшись пару дней и бессоных ночей в исходном коде все планируемые изменения были внесены, чем и спешу с Вами поделиться. Скажу сразу, что кое-где в коде есть места где кодеру хочеться вырвать себе глаза, к примеру использование глобальных переменных GLOBAS и SESSION, но скажу сразу таких мест не очень много, просто нужно было сделать поскорее да и код пишу в свободное от основной работы время.
Придется вносить изменения в код Ливстрита, плагины к сожелению не научился писать, нет времени разбираться с механизмом их создания, если кто хочет оформите это в виде плагина.
Для начала потребуется передать id пользователя, логин пользователя и тип пользователя в elFinder, самое простое что пришло мне в голову — это рередать эти заначения через глобальную переменную SESSION
classes/modules/user/User.class.php внести следующие изменения:
в функцию public function Init() после строки
Добавить строки
в функцию public function Authorization()
после
Добавить эти же строки
Теперь id пользователя, логин пользователя и тип пользователя в глобальной переменной SESSION и с ними можно работать в elFinder (если Вы знаете более изящные решения пожалуйста напишите в комментариях).
В файл конфигурации config/config.local.php добавить строки, до строки return $config;
Как Вы догадались это строки конфигурации для файлового менеджера. Надеюсь что все настройки там описаны понятно.
Теперь нужно скопировать файлы из этого архива (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
Надеюсь кому-нибудь пригодиться, т.к. в поиске на эту тему ни чего не нашел. Кому что не понятно пишите в комментарии, постараюсь ответить.
Стукнуло мне в голову сделать файловый менеджер для своего сайта. Раньше пользовался редактором tinymce, под него у меня был хороший файловый менеджер (тот что от конторы tinymce), но вот я перешел на редактор markitup, и он как то легче и быстрее, короче от tinymce было решено отказаться. Попытки скрестить markitup и файловый менеджер tinymce не увенчались успехом, не хватило документации по tinymce, да и как-то через попу получилось бы всё. (Кому нужен файловый менеджер для tinymce стучите в личку)

Тогда было принято решение отказаться от проверенного временем файлового менеджера 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 комментария