Столкнулся со следующей проблемой в PhocaGallery.
Нельзя загрузить файлы с русскими именами. И приходится сразу грузить с латиницей, а затем уже переименовывать. ЧТо крайне неудобно в том случае, если имя совпадает с названием фото.
Ниже изложен один из приёмов, как починить это.
Проблема 1. Корявое отображение файлов c кирилицей в PhocaGallery, которые уже хранятся на сервере. Решение:
1) Находим файл filefolderlist.php (administrator\components\com_phocagallery\libraries\phocagallery\file\)
2) Находим в районе 80 сроки:
$tmp = new JObject();
$tmp->name = $fileThumb['name'];
$tmp->nameno = $fileThumb['name_no'];
$tmp->linkthumbnailpath= $fileThumb['thumb_name_m_no_rel'];
$tmp->linkthumbnailpathabs= $fileThumb['thumb_name_m_no_abs'];меняем на:
$tmp = new JObject();
$tmp->name = $fileThumb['name'];
$tmp->name = iconv("cp1251", "UTF-8", $tmp->name);// +++++
$tmp->nameno = $fileThumb['name_no'];
$tmp->nameno = iconv("cp1251", "UTF-8", $tmp->nameno);// +++++
$tmp->linkthumbnailpath= $fileThumb['thumb_name_m_no_rel'];
$tmp->linkthumbnailpath = iconv("cp1251", "UTF-8", $tmp->linkthumbnailpath);// +++++
$tmp->linkthumbnailpathabs= $fileThumb['thumb_name_m_no_abs'];
$tmp->linkthumbnailpathabs = iconv("cp1251", "UTF-8", $tmp->linkthumbnailpathabs);// +++++3) находим в районе 100й строки:
$tmp = new JObject();
$tmp->name = basename($folder);
$tmp->path_with_name = str_replace(DS, '/', JPath::clean($origPath . DS . $folder));
$tmp->path_without_name_relative= $path->image_abs . str_replace($origPathServer, '', $tmp->path_with_name);
$tmp->path_with_name_relative_no= str_replace($origPathServer, '', $tmp->path_with_name);
$folders[] = $tmp;меняем:
$tmp = new JObject();
$tmp->name = basename($folder);
$tmp->name = iconv("cp1251", "UTF-8", $tmp->name);// +++++
$tmp->path_with_name = str_replace(DS, '/', JPath::clean($origPath . DS . $folder));
$tmp->path_with_name = iconv("cp1251", "UTF-8", $tmp->path_with_name);//+++++
$tmp->path_without_name_relative= $path->image_abs . str_replace($origPathServer, '', $tmp->path_with_name);
$tmp->path_without_name_relative = iconv("cp1251", "UTF-8", $tmp->path_without_name_relative);// +++++
$tmp->path_with_name_relative_no= str_replace($origPathServer, '', $tmp->path_with_name);
$tmp->path_with_name_relative_no = iconv("cp1251", "UTF-8", $tmp->path_with_name_relative_no);// +++++
$folders[] = $tmp;Проблема 2. Нельзя загрузить файлы с русскими именами. 1) Находим файлphocagalleryu.php (\administrator\components\com_phocagallery\controllers\)
A) Комментируем строки 157-160:
// Make the filename safe
//if (isset($file['name'])) {
// $file['name'] = JFile::makeSafe($file['name']);
//}После них вставляем строку:
$file['name'] = iconv("UTF-8", "cp1251", $file['name']);// +++++Б) Комментируем строку 213 $file['name'] = JFile::makeSafe($file['name']); (примерно +-5 строк) в блоке:
if (isset($file['name'])) {
//$file['name'] = JFile::makeSafe($file['name']);
}Сразу после блока добавляем строку:
$file['name'] = iconv("UTF-8", "cp1251", $file['name']);// +++++2) Находим файл fileupload.php (\administrator\components\com_phocagallery\libraries\phocagallery\file\)
Комментируем строки 34-37:
//if ($file['name'] !== JFile::makesafe($file['name'])) {
// $errUploadMsg = 'WARNFILENAME';
// return false;
//}
Комментируем строки 43-47:
//if (!in_array($format, $allowable)) {
// $errUploadMsg = 'WARNFILETYPE';
// return false;
//}
Все.. Должно работатьP.S.
Надеюсь, что я просто не нашел полноценной реализации этого на форуме и она есть. Т.к. данная реализация хоть и решает проблему, однако, не совсем корректно. Т.к.
а) Она снимает некоторые ограничения при загрузке файла, что может повлиять на безопасность
б) Она отключает функцию makeSafe в некоторых местах. Я не знаю зачем она нужна, но возможно, её отключение, также, не желательно.
в) Код писался "как быстрее", а не "как правильнее". Поэтому не судите строго.
Надеюсь, это кому-либо пригодиться. Все редактируемые файлы находятся в аттаче.
Аттач :
http://depositfiles.com/files/azj3gbxiw (как здесь прикрепить не нашел. Если кто умеет - перекрепите. )