Кнопка загрузки файлов из панели bbcode в сообщение.Хак.ч.1

+10
2.13K
Всем привет. Данный хак написан для 1.10.7.После загрузки файл сохраняется в папке /upload/users/messages.При удалении сообщения файл тоже удаляется.В базу ничего не пишется.Все файлы хранятся в одной папке, поэтому при отчистки(удалении сразу всех входящих) файлы не удаляются.Что бы это работало файлы нужно хранить в отдельной папке для каждого юзера или писать в базу. Это возможно и если будет интерес к данному хаку можно будет дописать.

Итак приступим.
1.Добавляем кнопку в панель
Дописываем в файл '/templates/_default_/special/bbcode_panel.php'.
Группе, к которой вы принадлежите, запрещено просматривать этот скрытый текст
2.Файл '/includes/bbcode/bbcode.lib.php'. Обрабатываем эту кнопку.
В private $info_about_tags = array( добавляем
  1. 'file' => array(
  2. 'handler' => 'file_2html',
  3. 'is_close' => false,
  4. 'lbr' => 0,
  5. 'rbr' => 0,
  6. 'ends' => array(),
  7. 'permission_top_level' => true,
  8. 'children' => array()
  9. ),
и дописываем ф-цию
  1. // Функция - обработчик тега [file]
  2. function file_2html($elem) {
  3.  
  4. global $_LANG;
  5.  
  6. $href = $this -> get_html($elem['val']);
  7. $name = $this->cleanAttrValue($href);
  8. $name = substr(strrchr($name, "/"), 1);
  9.  
  10. return '<div class="attach">'.$_LANG['ATTACH_FILE'].':<a href="'.$href.'">'.$name.'</a></div>';
  11. }
3.В папку '/includes/bbcode/images' добавляем картинку кнопки, имя file.gif.
4.Файлы компонента users.
'/components/users/frontend.php'.
Дописываем в if ($do=='delmessage'){ после
  1. $msg = $inDB->get_fields('cms_user_msg', "id='$id'", '*');
  1. $mess = $msg['message'];
  2. if (preg_match('|<div.*?>(.*)<a(.*)>(.*)</a></div>|sei', $mess, $arr)) $div = $arr[3];
  3. else $div = '';
  4. $arr = explode('/', $div);
  5. $filename = $arr[(count($arr) - 1) ];
  6. $dirPath = PATH . '/upload/users/messages';
  7.  
  8. if ($handle = opendir($dirPath))
  9. {
  10. while (false !== ($file = readdir($handle)))
  11. {
  12. if ($file != "." && $file != "..")
  13. {
  14. if ($file = $filename)
  15. {
  16. unlink($dirPath . '/' . $file);
  17. }
  18.  
  19. break;
  20. }
  21. }
  22.  
  23. closedir($handle);
  24. }

'/components/users/model.php'. Прописывем конфиг.
  1. ......,
  2. 'f_ext' => 'txt doc zip rar arj png gif jpg jpeg bmp pdf dwg xls docs',
  3. 'f_size' => 1024,
  4. 'f_on' => 1,
  5. 'f_max' => 5,
  6. .........,
  7. // И дописываеи ф-цию
  8. public function addUpdateFileAttachments() {
  9.  
  10. if(!@$_FILES['attach_file']['name'][0]) { return 0; }
  11.  
  12. $success = true;
  13.  
  14. if($_FILES['attach_file']['size'] > $this->config['f_size']*1024) { return false; }
  15.  
  16. $file = $_FILES['attach_file']['name'];
  17.  
  18. $pp = pathinfo($file);
  19. $ext = mb_strtolower($pp['extension']);
  20.  
  21. if(in_array($ext, array('php','htm','html','htaccess'))) { return false;}
  22. if (!mb_stristr($this->config['f_ext'], $ext)){return false;}
  23.  
  24. $file = cmsCore::strToURL(mb_substr($file, 0, mb_strrpos($file, '.'))) . '_' . uniqid() . '.' . $ext;
  25.  
  26. @mkdir(PATH.'/upload/users/messages');
  27. $destination = PATH.'/upload/users/messages/'.$file;
  28.  
  29. // Формируем массив
  30. $result['filesize'] = $this->inDB->escape_string($_FILES['attach_file']['size']);
  31. $result['filename'] = $this->inDB->escape_string($file);
  32.  
  33. if (cmsCore::moveUploadedFile($_FILES['attach_file']['tmp_name'], $destination, $error)) {
  34.  
  35.  
  36.  
  37. return $result;
  38.  
  39.  
  40.  
  41. } else {
  42.  
  43.  
  44. // @rmdir(PATH.'/upload/users/message');
  45. return false;
  46.  
  47. }
  48.  
  49.  
  50. }
  51.  
Аяксовские "штучки" для загрузки файла.
5.Файл core/js/smiles.php.
Добавляем 3 ф-ции.
Группе, к которой вы принадлежите, запрещено просматривать этот скрытый текст

6.Создаём файл core/ajax/fileinsert.php и пишем туда следующий код
Группе, к которой вы принадлежите, запрещено просматривать этот скрытый текст

7.Добавляем языковые переменные.

Файл '/languages/ru/lang.php'.

  1. $_LANG['UPLOAD_FILE'] = 'Загрузить файл';
  2. $_LANG['ATTACH_FILE'] = 'Файл';
  3. в массив
  4. $_LANG['BB_CODE'] = array(
  5. 'IF' => 'Загрузить файл',
  6. )
Файл '/languages/ru/components/user.php'.

  1. $_LANG['CHECK_SIZE_TYPE_FILE'] ='Ошибки при загрузке одного или нескольких файлов. Проверьте правильность размера и типа файла. Количество загружаемых файлов на один пост не должно превышать';
И дописываем в файл /templates/_default_/components/com_users_messages_add.tpl в самый верх
  1. <script type="text/javascript" src="/includes/jquery/upload/ajaxfileupload.js"></script>
Вроде всё. Кому лень писать здесь файлы с изменениями для чистого дефолтового шаблона.
Посмотреть можно здесь vasya,fedor: 123456
0
ytugello ytugello 8 лет назад #
Большое спасибо, отличная работа.
0
ytugello ytugello 8 лет назад #
Большое спасибо, отличная работа.

Еще от автора

Загрузка файлов на яндекс диск
Компонент + поле. Позволяют загружать файлы не на сервер, а на яндекс диск. И затем скачивать его по ссылке.
Компонент розыгрыши
Компонент позволяет организовать на сайте розыгрыши призов для стимулирования повышения активности на сайте и как следствие увеличения уровня монетиза
Уведомления с вашего сайта на телефон
Привет. Собственно сабж). Разработка включает в себя мобильное приложение для андроид и компонент для InstantCMS.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.