GithubHelp home page GithubHelp logo

alex300 / files Goto Github PK

View Code? Open in Web Editor NEW
6.0 4.0 4.0 1.38 MB

Files module for Cotonti CMF

Home Page: https://www.cotonti.com/extensions/files-media/files-module

License: BSD 3-Clause "New" or "Revised" License

PHP 49.32% HTML 0.77% JavaScript 36.11% CSS 3.71% Smarty 10.09%
cotonti

files's People

Contributors

alex300 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

files's Issues

Too many folders in datas/files/page

On a big project we can generate too many folders in datas/files/page, on 1 project using mavatars few years ago i get more than 10000+ folders and it was impossible to manage this folder even by ftp.

На одном из проектов когда то я получил более 10к папок с картинками в папке с маватарами и по ftp зайдя в папку тупо подвисала система. Есть предложение сделать что то вида
datas/files/folio/тут текущий месяц и год создания страницы/id
то есть datas/files/page/0420017/id или что то на подобии этого. И лить все по этому пути и дергать файл так же по этому пути. Можно опционально в конфиге модуля сделать.

Да, в папке _thumbs у меня уже на стадии разработки ад адов - 200 папок, при нагрузке 1000 активных пользователей (сейчас 4 коллеги бета-тестят сайт) прикинул что за год будет около 100к+ папок там.

Convert to jpg bug

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

Соответственно есть ряд мыслей

Вар 1
//смотрим какое было расширение файла

//если установлено обязательная конвертация в jpg

//переконвертим файл в то расширение которое было?

Вар 2

//либо смотрим какое расширение сейчас - и $file->file_name меняем расширение

Вар 3

//либо при записи файла поле в БД file_name сразу делать jpg а не то которое было

Создание не нужных папок при загрузке файла в pfs

Смысл в том, что если пользователь с id = 1 и он создает папку для файлов и потом загружает в неё файл то создается не нужная папка там где по идее создается папки с id пользователей.
http://prntscr.com/81ww2z
Она является дубликатом под папки для хранения файлов.
Лечение:
files.upload.php стр: 481
$upload_dir = $this->get_upload_path($source, $item);
меняем на:
$upload_dir = $this->get_upload_path($source, $file->item);

Warning: count(): Parameter must be an array php 7.2

On the version of php 7.2, when you call PFS on the link javascript: files_pfs ('1', 'pageform', 'rpageurl', ''), a warning appears:

на версии php 7.2 при вызове PFS по ссылке javascript:files_pfs('1','pageform','rpageurl','') появляется предупреждение:

Warning: count(): Parameter must be an array or an object that implements Countable in */modules/files/inc/files.pfs.php on line 71

Водяной знак!

Полезная штука. Правда не понятно почему делается только на миниатюру.
Было бы лучше в админке сделать настройку - накладывать водяной знак и что бы при загрузке - на оригинальное изображение был наложен водяной знак.

Расширение файла недоступно в files.templates.tpl

Нет видимости расширения файла {%=file.ext%} в files.templates.tpl, при том что url, id и другие доступны, например в file.php : 'EXT' => htmlspecialchars($item->file_ext).

Предлагаю добавить в files.upload.php по аналогии.

Удаление аватара

  • Пользователь должен иметь возможность удалить свою аватару при редактировании профиля. Тоже и для администратора при редактировании любого пользователя.

  • Добавить настройку в модуль отвечающую за то, должен ли удаляться файл изображения при удалении аватара или нет. Часто не нужно удалять фотографию пользователя, если она больше не является аватаром.

Не работает limit

{PHP|cot_files_filebox('modname', 0, 'files', 'all', '3')}
Указываю ограничение на 3 файла, но добавляется сколько угодно.

Сохранять порядок файлов при паралельной загрузке на сервер.

https://lily-software.com/forums?m=posts&q=307&d=4#post_10432
https://lily-software.com/forums/10432?m=posts

Проблема:
При параллельной закачке у меня на сайт попадут снимки (в зависимости от веса они в таком порядке закачаются) и получат в БД file_order именно такой. А если это цикл снимков с определенной логикой в порядке отображения (которая обычно отображена в номерции файлов - к примеру если бы в примере были номера 1.jpg 2.jpg и тд это все равно бы ничего не дало - все по весу отсортируется ввтоматом) то вся логика будет убита и после закачки надо открывать и пересортировывать.

Что нужно:
Чтобы файлы загружались в том же порядке, в каком они размещены в форме загрузки да начала отправки на сервер.

Возможное решение:
Вместе с файлом слать на сервер параметр с порядковым номером файла, который и использовать для этих целей.

Дополнительно:
При загрузке файлов к объекту у которого уже есть файлы их можно догружать в конец списка или в начало. Можно сделать опцию в настройках

Косяк или недочет

{PHP|cot_files_filebox('modname', 0, 'files', 'all', '3')}
Загружаю 3 изображения, но не публикую объект ухожу со страницы.
Возвращаюсь на туже страницу загруженных файлов не видно ( ну и ладно ). Но нет возможности загрузить файлы, т.к. вылазит сообщение что лимит исчерпан и это в не зависимости от пользователя.
То есть если 1 пользователь исчерпает лимит, то не только он не сможет загрузить его, но и другие пользователи.
В аттаче такого не было + загруженные файлы появлялись если пользователь загрузил, но объект так и не был создан. То есть если браузер вдруг выбьет, то загруженные файлы появятся.

Загрузка изображений и файлов для вставки в ckeditor

При редактировании страницы нужно иметь возможность вставлять файлы в текущую позицию курсора в Ckeditor.
Исключительно PFS для этих целей использовать не вполне логично. Лучше загружать файлы с привязкой к данной странице.

Рассмотреть 2 варианта:

  • добавить в CKeditor файл браузер для загрузки и добавления файлов в текст страницы
  • всплывающее окно по аналогии с PFS.

Рассмотреть возможность вставки плейсхолдера, который во время парсинга будет заменяться на изображение.

Strange fontsize

File: modules\files\lib\upload\css\jquery.fileupload.css
Line 17

.fileinput-button input {
  position: absolute;
  top: 0;
  right: 0;
  margin: 0;
  opacity: 0;
  -ms-filter: 'alpha(opacity=0)';
  font-size: 200px;
  direction: ltr;
  cursor: pointer;
}

See font-size.

so I get elements overlapped:
image

Не удаляется предыдущий аватар

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

Implement files download with X-SendFile and X-Accel-Redirect

Реализовать скачивание файлов средствами web сервера, не привлекая php если это возможно.

  1. Для Apache2 использовать модуль X-SendFile, если установлен. Требуется проверка доступности этого модуля. Это невозможно, если php не загружен как модуль Apache, например как CGI.

  2. Для Nginx использовать X-Accel-Redirect.

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

См. https://habrahabr.ru/post/151795/

автоматически прятать кнопки "заменить файл"

@Alex300 еще предложу автоматически прятать кнопки "заменить файл" при создании новой записи, так как все равно ничего полезного (кроме удаления ранее набранного текста и добавленных фото) они не несут. По крайней мере у меня при добавлении нового и замене в этом 1 файла - просто сносит все ранее набранное.

Проблемы с HEADER_BASEHREF на IOS устройствах

ТОЛЬКО на IOS устройствах при добавлении файла картинки из pfs в поле cke редактора (нажав Мои файлы / Файловый архив сайта) и выбрав файл, при переходе на следующую страницу мы теряем HEADER_BASEHREF. То есть браузеры любые на ipad/iphone считают что их "атакуют." На стандартном Сафари в компе - все норм.
2017-04-06 19 16 35

Подробнее про это http://stackoverflow.com/questions/17016960/chromiums-xss-auditor-refused-to-execute-a-script

И лечиться это (через опу конечно) добавлением в htaccess Header set X-XSS-Protection 0

Хотелось бы вылечить правильно но не хватило ума.

После обновления ошибка библиотеки

Добрый день,
после обновления модуля до версии 1.0.3 (была 1.0.1) и библиотеки cotontilib до 2.0 перестали работать все функции. Пробовал на тестовом локально, потом пробовал на чистой версии на сервере, ошибка происходит в момент вызова функции, как при добавлении/редактировании, так и на странице вызова.

Parse error: syntax error, unexpected '[', expecting ')' in **************\lib\Component.php on line 280

files_item_cache

In files.parser.php $files_item_cache is not implemented yet in files_model_File?

cot_files_thumb() crushes when source image is not found.

cot_files_thumb() пытается создать миниатюру изображения при помощи функции cot_files_thumbnail().
Но если исходного файла не существует. Например случайно удален с диска, а запись в БД осталась, или возникла ошибка и файл не записался. То после вызова этой функции, вызывается

list($th_width, $th_height) = getimagesize($thumb_path);

Которая выдает

<b>Warning</b>:  getimagesize(datas/files/_thumbs/2819/file_2819-160x160-crop.jpg): failed to open stream

: No such file or directory in <b>/path_to_site/modules/files/inc
/files.functions.php</b> on line <b>573</b><br />

Особенно это мешает при загрузке миниатюр через Ajax

Второй момент, когда из-за нехватки ресурсов может прерваться переименование файла и останется файл и с оригинальным именем и с новым. Нужно удалять ненужное.

Удаление страницы в корзину

  1. https://github.com/Alex300/files/blob/master/files/inc/files.admin.main.php#L196
    удаляем page в корзину, клинап экшн и файлы от этой пейдж отвалятся

  2. При удалении страницы в корзину и последующем удалении из корзины файлы могут не удалиться.
    Приходится использовать уборку мусора.

Это актуально для форумов и для страниц

Можно использовать что то вроде этого:
https://onlinephp.io/c/99a81

P.S. Что самое интересное, модуль вообще не поддерживает корзину. А мне сообщают об ошибках :)

При наложении водяного знака игнорируются настройки минимальных размеров

Ошибка в файле files.functions.php в строке 575 - отсутствие сравнения высоты изображения, в результате чего водяной знак накладывается в любом случае:

if($th_width >= cot::$cfg['files']['thumb_wm_widht'] || cot::$cfg['files']['thumb_wm_height']){

Для исправления достаточно добавить значение из конфига:

if($th_width >= cot::$cfg['files']['thumb_wm_widht'] || $th_height >= cot::$cfg['files']['thumb_wm_height']){

Image size reducing should not cause script fall with 500 error

If the image size reduction after loading ends with error, for example due to lack of memory, the script should not "fall" with the 500 error.
It is needed to use try/catch and in 'catch' roll back all changes, delete unneeded entry in the database, delete unneded uploaded file and show the error message to the user.


Если уменьшение размеров изображения при загрузке заканчивается ошибкой, например из-за нехватки памяти, скрипт не должен "падать" с 500-ой ошибкой. Нужно использовать try/catch, откатить все изменения, удалить лишнюю запись в БД, удалить не нужный более загруженный файл и показать сообщение об ошибке пользователю.

Украсить "заменить файл"

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

<input type="file" name="replacement" class="files-replace-file inputfile inputfile-3" data-id="{%=file.id%}" id="files-file{%=file.id%}"> <label for="files-file{%=file.id%}"><i class="fa fa-refresh fa-border _margin-right-10" aria-hidden="true"></i><span>{PHP.L.files_replace}…</span></label>
.inputfile { width: 0.1px; height: 0.1px; opacity: 0; overflow: hidden; position: absolute; z-index: -1; } .inputfile + label { max-width: 80%; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; display: inline-block; overflow: hidden; } .inputfile-3 + label { color: #0275d8; }

Вставка в редактор большой миниатюры вместо оригинального изображения

В редактор вставлять большую миниатюру вместо оригинального изображения. Предельные размеры можно брать из настроек модуля.
Это нужно для наложения водяного знака на все выводимые изображения.

Попробовать использовать placeholders (shortcodes).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.