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

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

Нет прав для скачивания
Совместимость
проверялся на совместимость
Изменения в БД
не требуются
Автор
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_URL, BB_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_ROOT, FULL_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_ROOT, FULL_URL, $imgs_all)).'" class="mrg_4 w90"><br/>
                    <input type="text" onClick="this.select();" readonly value="'.implode(' ', str_replace(BB_ROOT, FULL_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_ROOT, FULL_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, $img, 0, 0, 0, 0, $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_img, 75);
        }
        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_img, 1);
        $img        = array_slice($img, 1);
        $url        = array_merge($url_img[0], $img[0]);

        foreach(array_unique($url) as $imgs_del)
        {
            $path = str_replace(FULL_URL, BB_ROOT, $imgs_del);

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

если установлен мод https://torrentpier.com/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_img, 1);
        $img        = array_slice($img, 1);
        $url_img_th    = array_slice($url_img_th, 1);
        $url        = array_merge($url_img[0], $img[0], $url_img_th[0]);

        foreach(array_unique($url) as $imgs_del)
        {
            $path = str_replace(FULL_URL, BB_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_img, 1);
        $img        = array_slice($img, 1);
        $url        = array_merge($url_img[0], $img[0]);

        foreach(array_unique($url) as $imgs_del)
        {
            $path = str_replace(FULL_URL, BB_ROOT, $imgs_del);

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

если установлен мод https://torrentpier.com/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_img, 1);
        $img        = array_slice($img, 1);
        $url_img_th    = array_slice($url_img_th, 1);
        $url        = array_merge($url_img[0], $img[0], $url_img_th[0]);

        foreach(array_unique($url) as $imgs_del)
        {
            $path = str_replace(FULL_URL, BB_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);
            }
        }
    }
  • 2015-01-18 16-47-51 AlexFilm – Yandex.png
    2015-01-18 16-47-51 AlexFilm – Yandex.png
    791.8 KB · Просмотры: 486
Автор
Zenden
Скачивания
136
Просмотры
243
Первый выпуск
Обновление
Оценка
5.00 звёзд 10 оценок

Другие ресурсы пользователя Zenden

Последние обновления

  1. Обновление 1.2.0

    Обновлено описание ресурса Перепаковка в zip
  2. немного аддонов и фиксов

    Переписан код удаления картинок при удалении поста. Фикс ajax функции удаления картинок (теперь...
  3. поправил интрукцию

    Поправил инструкцию
  4. Добавлена возможность просмотра пользователем загруженных им ранее картинок

    Добавлена возможность просмотра пользователем загруженных им ранее картинок, с возможностью...
  5. Добавлено автоматическое удаление картинок при удалении топика или поста

    Добавлено автоматическое удаление картинок при удалении топика или поста

Последние отзывы

Спасибо.
для локальных сетей самое то, ещеб отображал полноценно все возможные способы вставки
Очень хороший мод!
Отличный мод!
Спасибо!
Классно спасибо большое.
Сверху