Локальная галерея 1.2.0

Добавляет локальную галерею для загрузки изображений.

  1. Zenden
    Совместимость:
    проверялся на совместимость
    Изменения в БД:
    не требуются
    Автор:
    Zenden
    Общественное достояние:
    нет
    Описание: добавляет локальную галерею для загрузки изображений.

    В связи с появлением в движке функции безопасной загрузки, решил привести галерею к стандарту TorrentPier.
    • мультизагрузка изображений
    • удаление картинки с использованием AJAX
    • индивидуальный вывод готовых ссылок для публикаций
    • комплексный вывод готовых ссылок для публикаций
    • создание миниатюр
    • при удалении топика или поста, удаление "связанных" картинок
    • просмотр пользователем загруженных им ранее картинок
    • размер и дата загрузки изображения
    • вывод количество и размер загруженных пользователем картинок
    Если вам понравился мод, вы можете отблагодарить автора:
    • Яндекс деньги: 410011534461433
    • WMR-кошелёк: R381249575716
    • WMZ-кошелёк: Z159805086668
    • WME-кошелёк: E317694362397
    Инструкция по установке:
    PHP:
    АвторZenden
    icq
    590-700-200
    Описание
    Локальная галерея
    Если вам понравился мод можете отблагодарить автора яндекс деньги 410011534461433

    /////////////////////////////////////////////////
    Открыть config.php
    найти
    // Group avatars
    $bb_cfg['group_avatars'] = array(
        
    'allowed_ext' => array('gif','jpg','jpeg','png'), // разрешенные форматы файлов
        
    'max_size'    => 300*1024,                        // размер аватары в байтах
        
    'max_height'  => 300,                             // высота аватара в px
        
    'max_width'   => 300,                             // ширина аватара в px
        
    'no_avatar'   => 'gallery/noavatar.png',          // дефолтная аватара
        
    'upload_path' => BB_ROOT 'data/avatars/',       // путь к директории с аватарами
        
    'up_allowed'  => true,                            // разрешить загрузку аватар
    );

    после вставить
    // Gallery
    $bb_cfg['imgs'] = array(
        
    'allowed_ext'     => array('gif','jpg','jpeg','png'),    // разрешенные форматы файлов
        
    'max_size'       => 5*1024*1024,                        // размер изображения в байтах
        
    'max_height'     => 3000,                            // высота изображения в px
        
    'max_width'       => 3000,                            // ширина изображения в px
        
    'upload_path'     => 'data/pictures',                    // путь к директории с изображениями
        
    'up_allowed'    => true,                            // разрешить загрузку изображений
        
    'thumb_height'    => 200,                                // высота для миниатюр
        
    'delete_img'    => true,                            // удалять картинку, при удалении топика или поста
        
    'limit_imgs'    => '5',                                // ограничение колличество картинок за одну загрузку
        
    'imgs_page'        => '10',                            // Картинок на страницу
    );

    /////////////////////////////////////////////////
    Открыть main.php (языковые переменные)
    В самом низу вставить

    //Глерея, автор Zenden
    $lang['GALLERY'] = 'Галерея';
    $lang['ALLOWED_EXT'] = 'Разрешенные форматы файлов';
    $lang['MAX_SIZE'] = 'Размер изображения в байтах';
    $lang['MAX_HEIGHT'] = 'Высота изображения в px';
    $lang['MAX_WIDTH'] = 'Ширина изображения в px';
    $lang['SCREENSHOTS'] = 'Скриншоты';
    $lang['DEL_IMGS'] = 'Изображение будет удалено вместе с миниатюрой';
    $lang['CREATE_THUMBNAIL'] = 'Создать миниатюру';
    $lang['UPLOAD_IMAGE'] = 'Загрузить';
    $lang['SELECT_IMGS'] = 'Для загрузки нескольких изображений удерживайте кнопку Ctrl';
    $lang['THUMB_HEIGHT'] = 'Высота для миниатюр';
    $lang['IMGS_LIMIT'] = 'За один раз можно загрузить не более %s картинок';
    $lang['MY_IMGS'] = 'Мои картинки';
    $lang['ALL_UPLOAD'] = 'Всего загружено';
    $lang['DIR_SIZE'] = 'Размер директории';

    /////////////////////////////////////////////////
    Открытьajax.php

    найти
            
    'post_mod_comment'  => array('mod'),

    поле вставить
            
    'del_imgs'            => array('mod'),

    найти
        
    function sitemap()
        {
            require(
    AJAX_DIR .'sitemap.php');
        }
       
    поле вставить
        
    function del_imgs()
        {
            global 
    $lang;

            
    $img        = (string) $this->request['imgs'];
            
    $all_img    = isset($this->request['all_imgs']) ? (string) $this->request['all_imgs'] : false;

            
    $all_img    explode(' '$all_img);
            
    $all_img    str_replace(FULL_URLBB_ROOT$all_img);
            
    $img        explode(', '$img);

            foreach (
    $img as $data)
            {
                if (
    file_exists($data))
                {
                    
    unlink($data);
                }
                
    $imgs[] = $data;
            }

            
    $all_img array_diff($all_img$imgs);

            foreach(
    $all_img as $imgs_del)
            {
                
    $ext substr(strrchr(basename($imgs_del), '.'), 1);
                
    $img_all_imgs str_replace('.'.$ext'_thumb.'.$ext$imgs_del);

                
    $imgs_all[]                = $imgs_del;
                
    $imgs_tags_img[]        = '[img]'.$imgs_del.'[/img]';
                
    $imgs_tags_thumb[]        = '[url='.$imgs_del.'][img]'.$img_all_imgs.'[/img][/url]';
                
    $imgs_tags_spoiler[]    = '[url='.$imgs_del.'][img]'.$img_all_imgs.'[/img][/url]';
            }

            if(!empty(
    $img_all_imgs))
            {
                
    $thumb file_exists($img_all_imgs) ? '<input type="text" onClick="this.select();" readonly value="'.implode(' 'str_replace(BB_ROOTFULL_URL$imgs_tags_thumb)).'" class="mrg_4 w90"><br/>' false;
                
    $html '<div class="tCenter" id="gen_tags">
                        <input type="text" onClick="this.select();" name="all_imgs" id="all_imgs" readonly value="'
    .implode(' 'str_replace(BB_ROOTFULL_URL$imgs_all)).'" class="mrg_4 w90"><br/>
                        <input type="text" onClick="this.select();" readonly value="'
    .implode(' 'str_replace(BB_ROOTFULL_URL$imgs_tags_img)).'" class="mrg_4 w90"><br/>
                        '
    .$thumb.'
                        <input type="text" onClick="this.select();" readonly value=[spoiler="'
    .$lang['SCREENSHOTS'].'"]'.implode(' 'str_replace(BB_ROOTFULL_URL$imgs_tags_spoiler)).'[/spoiler] class="mrg_4 w90">
                    </div>'
    ;
            }
            else
            {
                
    $html false;
            }

            
    $this->response['gen_tags'] = $html;
        }

    /////////////////////////////////////////////////
    Открыть function.php
    найти

    function get_avatar_path ($id$ext_id$base_path null$first_div 10000$sec_div 100)
    {
        global 
    $bb_cfg;
        
    $base_path = isset($base_path) ? $base_path $bb_cfg['avatars']['upload_path'];
        return 
    get_path_from_id($id$ext_id$base_path$first_div$sec_div);
    }

    после вставить
    function get_imgfile_path ($id$ext_id$name$thumb false)
    {
        global 
    $bb_cfg;
        
    $base_path $bb_cfg['imgs']['upload_path'];
        
    $thumb  $thumb '_thumb' '';
        
    $ext = isset($bb_cfg['file_id_ext'][$ext_id]) ? $bb_cfg['file_id_ext'][$ext_id] : '';
        return 
    "$base_path/$id/" md5($name) . $thumb . ($ext ".$ext'');
    }

    /////////////////////////////////////////////////
    Открыть function_upload.php

    найти

            
    else if ($mode == 'attach')
            {
                
    $file_path get_attach_path($params['topic_id']);
                return 
    $this->_move($file_path);
            }

    после вставить
            
    else if ($mode == 'imgfile')
            {
                
    $file_path get_imgfile_path($params['user_id'], $this->file_ext_id$params['user_id'].$this->file['name'].$this->file['size']);
                return 
    $this->_move($file_path);
            }

    В самом низу перед последней фигурной скобкой вставить
        
    function thumb ($path)
        {
            global 
    $bb_cfg$userdata;

            if ((
    $bb_cfg['file_id_ext'][$this->file_ext_id] == 'jpg') OR ($bb_cfg['file_id_ext'][$this->file_ext_id] == 'jpeg'))
            {
                
    $img imagecreatefromjpeg($path);
            }
            elseif (
    $bb_cfg['file_id_ext'][$this->file_ext_id] == 'png')
            {
                
    $img imagecreatefrompng($path);
            }
            elseif (
    $bb_cfg['file_id_ext'][$this->file_ext_id] == 'gif')
            {
                
    $img imagecreatefromgif($path);
            }

            
    $resize        imagesy($img)/imagesx($img);
            
    $new_width    $this->cfg['thumb_height']/$resize;
            
    $out_img    get_imgfile_path($userdata['user_id'], $this->file_ext_id$userdata['user_id'].$this->file['name'].$this->file['size'], true);
            
    $img_create    imagecreatetruecolor($new_width$this->cfg['thumb_height']);

            
    imagecopyresampled($img_create$img0000$new_width$this->cfg['thumb_height'], imagesx($img), imagesy($img));

            if ((
    $bb_cfg['file_id_ext'][$this->file_ext_id] == 'jpg') OR ($bb_cfg['file_id_ext'][$this->file_ext_id] == 'jpeg'))
            {
                
    imagejpeg($img_create$out_img75);
            }
            elseif (
    $bb_cfg['file_id_ext'][$this->file_ext_id] == 'png')
            {
                
    imagepng($img_create$out_img);
            }
            elseif (
    $bb_cfg['file_id_ext'][$this->file_ext_id] == 'gif')
            {
                
    imagegif($img_create$out_img);
            }

            
    imagedestroy($img);
            
    imagedestroy($img_create);
        }

    /////////////////////////////////////////////////
    Открыть function_admin.php

    найти
    function topic_delete ($mode_or_topic_id$forum_id null$prune_time 0$prune_all false)
    {
        global 
    $lang$log_action;

        
    заменить на

    function topic_delete ($mode_or_topic_id$forum_id null$prune_time 0$prune_all false)
    {
        global 
    $bb_cfg$lang$log_action;

    найти
    // Get topics count
        
    $row DB()->fetch_row("SELECT COUNT(*) AS topics_count FROM $tmp_delete_topics");

    ниже вставить
        
    if ($bb_cfg['imgs']['delete_img']) 
        {
            
    $data DB()->fetch_row("
                SELECT ph.post_html
                FROM 
    $tmp_delete_topics tmp
                LEFT JOIN "
    BB_POSTS ." p USING(topic_id)
                LEFT JOIN "
    BB_POSTS_HTML ." ph ON(p.post_id = ph.post_id)
            "
    );   

            
    preg_match_all('#<var.*?title="(.*?)"#'$data['post_html'], $img); 
            
    preg_match_all('#<a href="(.*?)"#'$data['post_html'], $url_img); 

            
    $url_img    array_slice($url_img1);
            
    $img        array_slice($img1);
            
    $url        array_merge($url_img[0], $img[0]);

            foreach(
    array_unique($url) as $imgs_del)
            {
                
    $path str_replace(FULL_URLBB_ROOT$imgs_del);

                if (
    file_exists($path))
                {
                    
    unlink($path);
                }
            }
        }

    если установлен мод https://torrentpier.me/threads/thumbnails.287/
        
    if ($bb_cfg['imgs']['delete_img']) 
        {
            
    $data DB()->fetch_row("
                SELECT ph.post_html
                FROM 
    $tmp_delete_topics tmp
                LEFT JOIN "
    BB_POSTS ." p USING(topic_id)
                LEFT JOIN "
    BB_POSTS_HTML ." ph ON(p.post_id = ph.post_id)
            "
    );   

            
    preg_match_all('#<var.*?title="(.*?)"#'$data['post_html'], $img); //это регулярка
            
    preg_match_all('#<a href="(.*?)"#'$data['post_html'], $url_img); //это тоже
            
    preg_match_all('#<img src="(.*?)".*?class="thumb"#'$data['post_html'], $url_img_th);

            
    $url_img    array_slice($url_img1);
            
    $img        array_slice($img1);
            
    $url_img_th    array_slice($url_img_th1);
            
    $url        array_merge($url_img[0], $img[0], $url_img_th[0]);

            foreach(
    array_unique($url) as $imgs_del)
            {
                
    $path str_replace(FULL_URLBB_ROOT$imgs_del);
                
    $ext substr(strrchr(basename($imgs_del), '.'), 1);
                
    $img_th str_replace('.'.$ext'_thumb.'.$ext$imgs_del);

                if (
    file_exists($path))
                {
                    
    unlink($path);
                }

                if (
    file_exists($img_th))
                {
                    
    unlink($img_th);
                }
            }
        }

    найти
    function post_delete ($mode_or_post_id$user_id null$exclude_first true)
    {
        global 
    $log_action;

    заменить на
    function post_delete ($mode_or_post_id$user_id null$exclude_first true)
    {
        global 
    $log_action$bb_cfg;

    найти
        
    // Deleted posts count
        
    $row DB()->fetch_row("SELECT COUNT(*) AS posts_count FROM $tmp_delete_posts");

    ниже вставить
        
    if ($bb_cfg['imgs']['delete_img']) 
        {
            
    $data DB()->fetch_row("
                SELECT ph.post_html
                FROM 
    $tmp_delete_posts tmp
                LEFT JOIN "
    BB_POSTS_HTML ." ph USING(post_id)
            "
    );   

            
    preg_match_all('#<var.*?title="(.*?)"#'$data['post_html'], $img);
            
    preg_match_all('#<a href="(.*?)"#'$data['post_html'], $url_img);

            
    $url_img    array_slice($url_img1);
            
    $img        array_slice($img1);
            
    $url        array_merge($url_img[0], $img[0]);

            foreach(
    array_unique($url) as $imgs_del)
            {
                
    $path str_replace(FULL_URLBB_ROOT$imgs_del);

                if (
    file_exists($path))
                {
                    
    unlink($path);
                }
            }
        }

    если установлен мод https://torrentpier.me/threads/thumbnails.287/Ё
        
    if ($bb_cfg['imgs']['delete_img']) 
        {
            
    $data DB()->fetch_row("
                SELECT ph.post_html
                FROM 
    $tmp_delete_posts tmp
                LEFT JOIN "
    BB_POSTS_HTML ." ph USING(post_id)
            "
    );   

            
    preg_match_all('#<var.*?title="(.*?)"#'$data['post_html'], $img);
            
    preg_match_all('#<a href="(.*?)"#'$data['post_html'], $url_img);
            
    preg_match_all('#<img src="(.*?)".*?class="thumb"#'$data['post_html'], $url_img_th);

            
    $url_img    array_slice($url_img1);
            
    $img        array_slice($img1);
            
    $url_img_th    array_slice($url_img_th1);
            
    $url        array_merge($url_img[0], $img[0], $url_img_th[0]);

            foreach(
    array_unique($url) as $imgs_del)
            {
                
    $path str_replace(FULL_URLBB_ROOT$imgs_del);
                
    $ext substr(strrchr(basename($imgs_del), '.'), 1);
                
    $img_th str_replace('.'.$ext'_thumb.'.$ext$imgs_del);

                if (
    file_exists($path))
                {
                    
    unlink($path);
                }

                if (
    file_exists($img_th))
                {
                    
    unlink($img_th);
                }
            }
        }

    Изображения

    1. 2015-01-18 16-47-51 AlexFilm – Yandex.png
    Heros.Zero, Bullit, puhpol и 4 другим нравится это.

Пoследние рецензии

  1. Mitriy163
    Mitriy163
    5/5,
    Версия: 1.2.0
    для локальных сетей самое то, ещеб отображал полноценно все возможные способы вставки
  2. Fantom 13
    Fantom 13
    5/5,
    Версия: 1.2.0
    Очень хороший мод!
  3. Bullit
    Bullit
    5/5,
    Версия: 1.1.1
    Отличный мод!
    Спасибо!
  4. Анонимный пользователь
    Анонимный пользователь
    5/5,
    Версия: 1.1
    Классно спасибо большое.
  5. Ress Kent
    Ress Kent
    5/5,
    Версия: 1.1
    Теперь вполне может заменить сторонние хостинги, спасибо!