1

Тема: Интеграция с Coppermine Photo Gallery

Последняя версия 1.4.22 от 30.04.2009 официально не поддерживает PunBB 1.3, но все поправимо.
В дирректории bridge создаем файл punbb13.inc.php со следующим содержимом:
<?php
/*************************
  Coppermine Photo Gallery
  ************************
  Copyright (c) 2003-2009 Coppermine Dev Team
  v1.1 originally written by Gregory DEMAR

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License version 3
  as published by the Free Software Foundation.
 
  ********************************************
  Coppermine version: 1.4.22
  $HeadURL: https://coppermine.svn.sourceforge.net/ … 13.inc.php $
  $Revision: 5740 $
  $Author: gaugau $
  $Date: 2009-03-05 08:27:01 +0100 (Thu, 05 Mar 2009) $
**********************************************/

if (!defined('IN_COPPERMINE')) die('Not in Coppermine...');

// Switch that allows overriding the bridge manager with hard-coded values
define('USE_BRIDGEMGR', 1);

require_once 'bridge/udb_base.inc.php';

class cpg_udb extends core_udb {

    function cpg_udb()
    {
        global $BRIDGE;
       
        if (!USE_BRIDGEMGR) { // the vars that are used when bridgemgr is disabled

            // URL of your punbb
            $this->boardurl = 'www.yoursite.com/punbb';

            // local path to your punbb config file
            require_once('../punbb/config.php');

        } else { // the vars from the bridgemgr

            require_once($BRIDGE['relative_path_to_config_file'] . 'config.php');
            $this->use_post_based_groups = $BRIDGE['use_post_based_groups'];
        }

        $this->multigroups = 0;
        $this->group_overrride = 0;
       
        $this->boardurl = $base_url;
       
        // Database connection settings
        $this->db = array(
            'name' => $db_name,
            'host' => $db_host,
            'user' => $db_username,
            'password' => $db_password,
            'prefix' => $db_prefix
        );
       
        // Board table names
        $this->table = array(
            'users' => 'users',
            'groups' => 'groups',
            'sessions' => 'online',
        );

        // Derived full table names
        $this->usertable = '`' . $this->db['name'] . '`.' . $this->db['prefix'] . $this->table['users'];
        $this->groupstable =  '`' . $this->db['name'] . '`.' . $this->db['prefix'] . $this->table['groups'];
        $this->sessionstable =  '`' . $this->db['name'] . '`.' . $this->db['prefix'] . $this->table['sessions'];
       
        // Table field names
        $this->field = array(
            'username' => 'username', // name of 'username' field in users table
            'user_id' => 'id', // name of 'id' field in users table
            'password' => 'password', // name of 'password' field in users table
            'email' => 'email', // name of 'email' field in users table
            'regdate' => 'registered', // name of 'registered' field in users table
            'location' => 'location', // name of 'location' field in users table
            'website' => 'url', // name of 'website' field in users table
            'lastvisit' => 'last_visit', // name of 'location' field in users table
            'usertbl_group_id' => 'group_id', // name of 'group id' field in users table
            'grouptbl_group_id' => 'g_id', // name of 'group id' field in groups table
            'grouptbl_group_name' => 'g_title' // name of 'group name' field in groups table
        );
       
        // Pages to redirect to
        $this->page = array(
            'register' => '/register.php',
            'editusers' => '/userlist.php',
            'edituserprofile' => "/profile.php?id="
        );
       
        // Group ids
        $this->admingroups = array(1);
        $this->guestgroup = 2;
       
        // Cookie settings - used in following functions only
        $this->cookie_name = $cookie_name;
       
        // Connect to db
        $this->connect();
    }

    // definition of how to extract id, name, group from a session cookie
    function session_extraction()
    {
            return false; // unused
    }
   
    // definition of how to extract an id and password hash from a cookie
    function cookie_extraction()
    {
        $id = 0;
        $pass_hash = '';

        if (isset($_COOKIE[$this->cookie_name])) {
            list($id, $pass_hash) = explode('|', base64_decode($_COOKIE[$this->cookie_name]));
        }
       
        return ($id) ? array( (int) $id, $pass_hash) : false;
    }
   
    // definition of actions required to convert a password from user database form to cookie form
    function udb_hash_db($password)
    {
        return $password;
    }
   
    // Login
    function login_page()
    {       
        $this->redirect('/login.php?action=login');
    }

    // Logout
    function logout_page()
    {
        $sql = "SELECT csrf_token FROM {$this->sessionstable} WHERE user_id = " . USER_ID;
        $result = cpg_db_query($sql, $this->link_id);
       
        if (mysql_num_rows($result)) {
            list($csrf_token) = mysql_fetch_row($result);
            $csrf_token = sha1('logout' . USER_ID . $csrf_token);
        } else {
            $csrf_token = '';
        }
       
        $this->redirect('/login.php?action=out&id=' . USER_ID . '&csrf_token=' . $csrf_token);
    }
   
    function view_users() {}
   
    function view_profile($uid) {}
   
    function get_users($options = array())
    {
        global $CONFIG;
       
        // Copy UDB fields and config variables (just to make it easier to read)
        $f =& $this->field;
        $C =& $CONFIG;
       
        // Sort codes
        $sort_codes = array('name_a' => 'user_name ASC',
                            'name_d' => 'user_name DESC',
                            'group_a' => 'group_name ASC',
                            'group_d' => 'group_name DESC',
                            'reg_a' => 'user_regdate ASC',
                            'reg_d' => 'user_regdate DESC',
                            'pic_a' => 'pic_count ASC',
                            'pic_d' => 'pic_count DESC',
                            'disku_a' => 'disk_usage ASC',
                            'disku_d' => 'disk_usage DESC',
                            'lv_a' => 'user_lastvisit ASC',
                            'lv_d' => 'user_lastvisit DESC',
                           );
       
        if (in_array($options['sort'], array('group_a', 'group_d', 'pic_a', 'pic_d', 'disku_a', 'disku_d'))){
           
            $sort = '';
            list($this->sortfield, $this->sortdir) = explode(' ', $sort_codes[$options['sort']]);
            $this->adv_sort = true;
           
        } else {
           
            $sort = "ORDER BY " . $sort_codes[$options['sort']];
            $this->adv_sort = false;
        }

        // Build WHERE clause, if this is a username search
        if ($options['search']) {
            $options['search'] = 'AND u.'.$f['username'].' LIKE "'.$options['search'].'" ';
        }

        $sql = "SELECT group_id, group_name, group_quota FROM {$C['TABLE_USERGROUPS']}";

        $result = cpg_db_query($sql);
       
        $groups = array();
   
        while ($row = mysql_fetch_assoc($result)) {
            $groups[$row['group_id']] = $row;
        }
       
        $sql ="SELECT {$f['grouptbl_group_id']} FROM {$this->groupstable}";
   
        $result = cpg_db_query($sql, $this->link_id);
        $udb_groups = array();
       
        while ($row = mysql_fetch_assoc($result)) {
            $udb_groups[] = $row['group_id'];
        }


        $sql = "SELECT u.{$f['user_id']} as user_id, u.{$f['usertbl_group_id']} AS user_group, {$f['username']} as user_name, {$f['email']} as user_email, {$f['regdate']} as user_regdate, {$f['lastvisit']} as user_lastvisit, '' as user_active, 0 AS pic_count ".
               "FROM {$this->usertable} AS u ".
               "WHERE u.{$f['user_id']} > 1 " . $options['search']
                . $sort .
               " LIMIT {$options['lower_limit']}, {$options['users_per_page']}";

        $result = cpg_db_query($sql, $this->link_id);
       
        // If no records, return empty value
        if (!mysql_num_rows($result)) {
            return array();
        }

        // Extract user list to an array
        while ($user = mysql_fetch_assoc($result)) {
            if ($this->use_post_based_groups){
                $gid = $user['user_group'] +100;
            } else {
                $gid = $user['user_group'] == $this->admingroups[0] ? 1 : 2;
            }
            $userlist[$user['user_id']] = array_merge($user, $groups[$gid]);
            $users[] = $user['user_id'];
        }
       
        $user_list_string = implode(', ', $users);
       
        $sql = "SELECT owner_id, COUNT(pid) as pic_count, ROUND(SUM(total_filesize)/1024) as disk_usage FROM {$C['TABLE_PICTURES']} WHERE owner_id IN ($user_list_string) GROUP BY owner_id";

        $result = cpg_db_query($sql);


        while ($owner = mysql_fetch_assoc($result)) {
            $userlist[$owner['owner_id']] = array_merge($userlist[$owner['owner_id']], $owner);
        }

        if ($this->adv_sort) usort($userlist, array('cpg_udb', 'adv_sort'));

        return $userlist;
    }
}

// and go !
$cpg_udb = new cpg_udb;
?>



Далее в  файл bridgemgr.php добавляем следующее:

// status: bridge ok, manager ok
$default_bridge_data['punbb13'] = array(
  'full_name' => 'PunBB v1.3',
  'short_name' => 'punbb13',
  'support_url' => 'http://punbb.informer.com/',
  'full_forum_url_default' => '',
  'full_forum_url_used' => '',
  'relative_path_to_config_file_default' => '../board/',
  'relative_path_to_config_file_used' => 'lookfor,config.php',
  'use_post_based_groups_default' => '0',
  'use_post_based_groups_used' => 'radio,1,0',
);

И интегрируйте на здоровье.


PS Только я столкнулся с одной проблемой - форумные Пользователи с русскими никами  в интегрированной галерее отображаются квадратами. Как с этим справиться пока неразобрался.

Если есть какие идеи пготов эксперементировать )))

Поделиться

2

Re: Интеграция с Coppermine Photo Gallery

Реализуй лучше в виде расширения )

Блог | GitHub

ХХХ: Cлучайно через мозиллу удалил фотки с майл.ру . Как восстановить? Переустановка файрфокса ничего не дала

Сайт KANekT

Поделиться

3 (12.05.2009 00:17 отредактировано Studia)

Re: Интеграция с Coppermine Photo Gallery

Вопрос с русскоязычными никами решен:

В файле coppermine\include\functions.inc.php ищем строку:
$result = @mysql_connect($CONFIG['dbserver'], $CONFIG['dbuser'], $CONFIG['dbpass']);

после нее добавляем или исправляем на
mysql_query("SET NAMES utf8", $result);

Добавлено спустя 13 минут 50 секунд:

KANekT пишет:

Реализуй лучше в виде расширения )

Это внесение изменений в файлы галлереи (по сути сторонней программы) и как сделать это  расширением я честно говоря и не знаю, а вся ее установка, вместе с внесением изменений занимает около 5 минут +1минутка на интеграцию.

Поделиться

4

Re: Интеграция с Coppermine Photo Gallery

Studia пишет:

mysql_query("SET NAMES utf8", $result);

Что то я это добавил и ничего не изменилось(((-как вопросики вместо русских ников были так и остались sad
интеграция прошла на ура 1.4.25 на 1.3х

Поделиться

5 (07.10.2009 09:53 отредактировано Studia)

Re: Интеграция с Coppermine Photo Gallery

Вот кусок кода из этого места:

// Connect to the database

/**
* cpg_db_connect()
*
* Connect to the database
**/

function cpg_db_connect()
{
        global $CONFIG;
        $result = @mysql_connect($CONFIG['dbserver'], $CONFIG['dbuser'], $CONFIG['dbpass']);
    mysql_query("SET NAMES utf8", $result);
   
     if (!$result) {
                return false;
        }
        if (!mysql_select_db($CONFIG['dbname']))
                return false;
        return $result;
}

И в админке галереи (конфиг - язык и настройка кодировки)  нужно тоже поставить UTF-8

Поделиться

6

Re: Интеграция с Coppermine Photo Gallery

Studia, Это можно где-то увидеть? Как все это выглядит? Получается, что такая интеграция полностью решает проблему с картинками на форуме, да и на сайте тоже? А все минусы в дополнительной базе данных и дрожь при каждом обновлении обеих систем?

Сайт ser

Поделиться

7

Re: Интеграция с Coppermine Photo Gallery

Studia пишет:

Вот кусок кода из этого места:

// Connect to the database

/**
* cpg_db_connect()
*
* Connect to the database
**/

function cpg_db_connect()
{
        global $CONFIG;
        $result = @mysql_connect($CONFIG['dbserver'], $CONFIG['dbuser'], $CONFIG['dbpass']);
    mysql_query("SET NAMES utf8", $result);
   
     if (!$result) {
                return false;
        }
        if (!mysql_select_db($CONFIG['dbname']))
                return false;
        return $result;
}

И в админке галереи (конфиг - язык и настройка кодировки)  нужно тоже поставить UTF-8

Вопрос с русскими именами пользователей РЕШИЛСЯ smile
Но возникла другая проблема. Нет возможности оставлять русские коментарии к изображениям!

Поделиться

8

Re: Интеграция с Coppermine Photo Gallery

А я не стал интегрировать, сайт textpattern, форум punbb и галерея coppermine у меня работают сами по себе, вполне нормально, на 3 раздельных базах, с utf-8. Первоначально были глюки с русским языком, которые решились после поиска по форуму галереи forum.coppermine-gallery.net/ind … ,41.0.html Насколько помню там нужно насильно прописать, чтобы галерея вносила данные в базу в кодировке utf-8 и считывала их из базы в той же кодировке utf-8. Это делается в 2 или 3 файлах.

Сайт ser

Поделиться

9

Re: Интеграция с Coppermine Photo Gallery

Установил Copermine 1.5.12
естественно интеграции нет c 1.3 PunBB
помогите!

Поделиться

10

Re: Интеграция с Coppermine Photo Gallery

Тоже интересует интеграция с Coppermine 1.5.12
Готов заплатить денег

Сайт Zevs

Поделиться

11

Re: Интеграция с Coppermine Photo Gallery

Никто не возьмется даже за деньги ?  sad

Сайт Zevs

Поделиться

12

Re: Интеграция с Coppermine Photo Gallery

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

Сайт hcs

Поделиться

13

Re: Интеграция с Coppermine Photo Gallery

Ну , начнем  - 10 у.е.
Может allasc еще добавит

Сайт Zevs

Поделиться

Re: Интеграция с Coppermine Photo Gallery

Я 300 рублей могу добавить... Но у меня CPG и PunBB находятся на одном сервере, но на разных доменах...

Поделиться

15

Re: Интеграция с Coppermine Photo Gallery

Итого: 600 рублей уже есть !  smile  Кто еще ?

Сайт Zevs

Поделиться

16

Re: Интеграция с Coppermine Photo Gallery

Zevs, вы меня извините, что скаредничаю тут, но вот сами вы на что готовы за 300-600 рублей? smile
Это же не тяп ляп и готово. Надо скачать, установить, собраться с мыслями, изучить систему, выработать какое-то решение, спроектировать, запрограммировать, протестировать, исправить, протестировать, исправить. Автоматические тесты врядли кто будет делать, поэтому тестирование будет в ручном режиме, как следствие еще время. Короче, это займет не 2 часа времени, которые можно продать за 600р. Сумму нужно как минимум удвоить, тогда кто-то из профи заинтересуется.

Я готов добавить 100р, но требую чтобы расширение было в общем доступе smile

Сайт hcs

Поделиться

17

Re: Интеграция с Coppermine Photo Gallery

Без техзадания нечего и обсуждать — интеграция есть понятие растяжимое.

Смайл. Дата. Подпись.

Поделиться

18

Re: Интеграция с Coppermine Photo Gallery

Ну вот видите  - уже 700 smile
Про общий доступ лично я не возражаю

По поводу техзадания - меня полностью устраивает аналог интеграции punbb 1.2  с веткой 1.4

Я так понимаю, что надо что-то просто допилить (у меня мозгов на это не хватает)

P.S. А почему мне не приходят уведомления о новых сообщениях ?

Сайт Zevs

Поделиться