Модуль «Files»

Применение модуля и вопросы по использованию
Быстрый переход:
Липницки Андрей

Липницки Андрей

Member
#61   01 декабря 2017 01:27

Alex подскажи такой момент плиз - при загрузке jpg в дропбокс для картинок менее 10мБ исходного веса появляется красивое превью - canvas. Для картинок более 10Мб - нет.

<span class="preview"><canvas width="144" height="256"></canvas></span>

<span class="preview"></span>

Вот как тут на скрине

 

Как то так. Рыл и не нарыл как сделать хотя бы для 20Мб картинок. 

 

Файл files/lib/upload/js/jquery.fileupload-image.js

 

Добавлено 20 минут спустя:

И еще вопрос - изредка случается ситуация когда файлы добавлены, но сама страница не публикуется - у нее то есть нет ID и пользователь просто вышел. При этом залитые файлы физически попадают в папку путь/datas/files/page/0.

Насколько я понял - Уборка мусора должна их удалять? Удалять файлы без ID. Но не удаляет.

В Page нормально все работает, это в модулях биржи не удаляет с папки 0. Буду искать где дописать функцию/

 

UPD вдруг кому пригодится - дел на пять минут 

    public function cleanupAction(){
        global $db_forum_posts, $db_files, $db_pages, $db_folio;

        if (cot_module_active('folio')){
            // Remove unused folio attachments
            require_once cot_incfile('folio', 'module');

            $condition = "LEFT JOIN $db_folio ON $db_files.file_item = $db_folio.item_id
		                  WHERE $db_files.file_source = 'folio' AND $db_folio.item_id IS NULL";

            $res = cot::$db->query("SELECT file_id FROM $db_files $condition")->fetchAll(PDO::FETCH_COLUMN);
            if($res){
                $files = files_model_File::find(array(array('file_id', $res)));
                if($files){
                    foreach($files as $fileRow){
                        $count++;
                        $fileRow->delete();
                    }
                }
            }
        }

Ну и так далее для остальных модулей биржи. Ниже уборку миниатюр тоже сделать не забудьте.

Добавлено 1 месяц спустя:

Бамп!

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

Отредактировано: Kopusha (27.01.2018 13:09, 2 недели назад)
Алексей

Алексей

Administrator
#62   09 февраля 2018 18:47

Все модели, унаследованые от ActiveRecord имеют методы beforeInsert(), beforeUpdate(), beforeSave(), beforeDelete(), afterInsert(), afterUpdate(), afterSave(), afterDelete(), которые вызываются соответсвенно до и после наступления соотвествующего события.
Эти методы генерируют соответсвующие собятия и имеют хуки.

Имя хука получается так:
 

model::class.'.'.model::EVENT_AFTER_SAVE

см. \Som_Model_ActiveRecord::afterSave() (lib/Som/Model/ActiveRecord.php line:782)

В Вашем случае, наверное лучше использовать afterSave() у модели файла, чтобы перехватывать как добавление новых, так и обновление существующих картинок.

Хук:

files_model_File.afterSave

Сделайте ему обработчик, который будет проверять:
поле 'file_source' для страниц всегда равно 'page'
поле 'file_item'   это id страницы которой принадлежит этот файл

Далее все просто, если текущий пользователь не имеет права на автоутверждеие страниц, то страницу с этим ID отправить на модерацию.

Быстрота и надежность... Ну и красота тоже, конечно

Липницки Андрей

Липницки Андрей

Member
#63   12 февраля 2018 21:34

Спасибо за обратную связь. 

Отредактировано: Kopusha (12.02.2018 23:18, 9 часов назад)