Перейти к контенту

IPB 2.1.7 + Coppermine 1.4.13


Рекомендуемые сообщения

Всем привет! Народ выручайте горю просто! Поставил галерею, замутил интеграцию и все вроде ничего, НО когда выходишь из галереи перекидыват на форум с ошибкой. Причину нашел : в файле интеграции invisionboard20.inc.php прописано

$this->redirect("/index.php?act=Login&CODE=03");

 

а реально ссылка на выход:

/index.php?act=Login&CODE=03&k=83366c3da6d6f5ddf1f5444d91643e3c т.е в конце еще добавляется некий код причем у каждого юзера он разный. В итоге надо в интеграции как-то дописать это и выход заработает. Это первая моя беда. Второе:

 

Если в галереи нажать войти то перекидывает на форум, где я ввожу логин и пароль и кнопку ок. после этого меня не переносит обратно в галерею, а так и оставляет на форуме, т.е все так, как обычно захожу на форум, но ссылка уже вида http://192.168.16.123/forum/index.php?http...8.16.123/album/

т.е получается ссылка от форума и тут же за ней от галереи, а как я понял после ввода логина и пароля на форуме он должен был ввести только ссылку от альбома и перебросить меня туда?!

 

ПОМОГИТЕ ОЧЕНЬ ПРОШУ! Заранее спасибо!

Ссылка на комментарий
Поделиться на других сайтах

От первого спасёт изменение строки к виду

 

$this->redirect("/index.php?act=Login&CODE=03k=".$ipsclass->return_md5_check());

Я не знаю только как в вашей интеграции $ipsclass называется, замените имя на своё.

Ссылка на комментарий
Поделиться на других сайтах

А где посмотреть какой у меня $ipsclass ?

 

Вот код интеграции (заодно может и 2-ую проблемы легче будет решить):

<?php
/*************************
 Coppermine Photo Gallery
 ************************
 Copyright (c) 2003-2007 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.13
 $Source$
 $Revision: 3837 $
 $Author: gaugau $
 $Date: 2007-08-16 18:56:06 +0200 (Do, 16 Aug 2007) $
**********************************************/

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) {
		$this->boardurl = 'http://localhost/ipb';
		require_once('../ipb/conf_global.php');
		$this->use_post_based_groups = 0;
	} else {
		require_once($BRIDGE['relative_path_to_config_file'] . '/conf_global.php');
		$this->boardurl = $INFO['board_url'];
		$this->use_post_based_groups = $BRIDGE['use_post_based_groups'];
	}

	// Database connection settings
	$this->db = array(
		'name' => $INFO['sql_database'],
		'host' => $INFO['sql_host'] ? $INFO['sql_host'] : 'localhost',
		'user' => $INFO['sql_user']	,
		'password' => $INFO['sql_pass'],
		'prefix' =>$INFO['sql_tbl_prefix']
	);

	// Board table names
	$this->table = array(
		'users' => 'members',
		'groups' => 'groups',
		'sessions' => 'sessions'
	);

	// 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' => 'name', // name of 'username' field in users table
		'user_id' => 'id', // name of 'id' field in users table
		'password' => 'member_login_key', // name of 'password' field in users table
		'email' => 'email', // name of 'email' field in users table
		'regdate' => 'joined', // name of 'registered' field in users table
		'location' => "''", // name of 'location' field in users table
		'website' => "''", // name of 'website' field in users table
		'usertbl_group_id' => 'mgroup', // 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' => '/index.php?act=Reg&CODE=00',
		'editusers' => '/admin.php',
		'edituserprofile' => '/index.php?showuser='
	);


	// Group ids - admin and guest only.
	$this->admingroups = array($INFO['admin_group']);
	$this->guestgroup = $this->use_post_based_groups ? $INFO['guest_group']+100 : 3;

	// Connect to db
	$this->connect();
}

// definition of how to extract id, pass from session cookie
function session_extraction()
{
	if (isset($_COOKIE['session_id'])) {
		$session_id = addslashes($_COOKIE['session_id']);

		$sql = "SELECT member_id , member_login_key FROM {$this->sessionstable} AS s INNER JOIN {$this->usertable} AS u ON s.member_id = u.id WHERE s.id = '$session_id'";

		$result = cpg_db_query($sql, $this->link_id);

		if (mysql_num_rows($result)){
			$row = mysql_fetch_array($result);
			return $row;
		}
	} else {
		return false;
	}
}

// definition of how to extract an id and password hash from a cookie
function cookie_extraction()
{
	$id = 0;
	$pass = '';

	if (isset($_COOKIE['member_id']) && isset($_COOKIE['pass_hash'])) {
		$id = (int)$_COOKIE['member_id'];
		$pass = substr(addslashes($_COOKIE['pass_hash']), 0, 32);
	}

	return ($id) ? array($id, $pass) : false;
}

// definition of actions required to convert a password from user database form to cookie form
function udb_hash_db($password)
{
	return $password; // unused
}

function login_page()
{
	$this->redirect("/index.php?act=Login&CODE=00");
}

function logout_page()
{
	$this->redirect("/index.php?act=Login&CODE=03");
}
}

// and go !
$cpg_udb = new cpg_udb;

 

Заранее спасибо!

Ссылка на комментарий
Поделиться на других сайтах

Дайте файл с class core_udb, иначе непосвящённому ничего не понятно.
Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

Пожалуйста:

<?php
/*************************
 Coppermine Photo Gallery
 ************************
 Copyright (c) 2003-2007 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.13
 $Source$
 $Revision: 3837 $
 $Author: gaugau $
 $Date: 2007-08-16 18:56:06 +0200 (Do, 16 Aug 2007) $
**********************************************/

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

class core_udb {

	function connect($id = '')
	{
			global $CONFIG;

			// Define wheter we can join tables or not in SQL queries (same host & same db or user)
			$this->can_join_tables = ($this->db['host'] == $CONFIG['dbserver'] && ($this->db['name'] == $CONFIG['dbname'] || $this->db['user'] == $CONFIG['dbuser']));

			if ($id){
					$this->link_id = $id;
			} else {
					// Connect to udb database if necessary
					if (!$this->can_join_tables) {
							$this->link_id = mysql_connect($this->db['host'], $this->db['user'], $this->db['password']);
							if (!$this->link_id) die("<b>Coppermine critical error</b>:<br />Unable to connect to UDB database !<br /><br />MySQL said: <b>" . mysql_error() . "</b>");
							mysql_select_db ($this->db['name'], $this->link_id);
					} else {
							$this->link_id = 0;
					}
			}
	}

	function authenticate()
	{
			global $USER_DATA;

			if (!($auth = $this->session_extraction()) && !($auth = $this->cookie_extraction())) {
					$this->load_guest_data();
			} else {
					list ($id, $cookie_pass) = $auth;
					$f = $this->field;

					if (isset($this->usergroupstable)){
							$sql = "SELECT u.{$f['user_id']} AS id, u.{$f['username']} AS username, u.{$f['password']} AS password, ug.{$f['usertbl_group_id']} AS group_id ".
									   "FROM {$this->usertable} AS u, {$this->usergroupstable} AS ug ".
									   "WHERE u.{$f['user_id']}=ug.{$f['user_id']} AND u.{$f['user_id']}='$id'";
					} else {
							$sql = "SELECT u.{$f['user_id']} AS id, u.{$f['username']} AS username, u.{$f['password']} AS password, u.{$f['usertbl_group_id']}+100 AS group_id ".
									   "FROM {$this->usertable} AS u INNER JOIN {$this->groupstable} AS g ON u.{$f['usertbl_group_id']}=g.{$f['grouptbl_group_id']} ".
									   "WHERE u.{$f['user_id']}='$id'";
					}

					$result = cpg_db_query($sql, $this->link_id);

					if (mysql_num_rows($result)){
							$row = mysql_fetch_assoc($result);
							mysql_free_result($result);

							$db_pass = $this->udb_hash_db($row['password']);
							if ($db_pass === $cookie_pass) {
									$this->load_user_data($row);
							} else {
									$this->load_guest_data();
							}
					} else {
							$this->load_guest_data();
					}
			}

			$user_group_set = '(' . implode(',', $USER_DATA['groups']) . ')';

	$USER_DATA = array_merge($USER_DATA, $this->get_user_data($USER_DATA['groups'][0], $USER_DATA['groups'], $this->guestgroup));

			if ($this->use_post_based_groups){
					$USER_DATA['has_admin_access'] = (in_array($USER_DATA['groups'][0] - 100,$this->admingroups)) ? 1 : 0;
			} else {
					$USER_DATA['has_admin_access'] = ($USER_DATA['groups'][0] == 1) ? 1 : 0;
			}

			$USER_DATA['can_see_all_albums'] = $USER_DATA['has_admin_access'];

			// avoids a template error
			if (!$USER_DATA['user_id']) $USER_DATA['can_create_albums'] = 0;

		// For error checking
			$CONFIG['TABLE_USERS'] = '**ERROR**';

			define('USER_ID', $USER_DATA['user_id']);
	define('USER_NAME', addslashes($USER_DATA['user_name']));
	define('USER_GROUP', $USER_DATA['group_name']);
	define('USER_GROUP_SET', $user_group_set);
	define('USER_IS_ADMIN', $USER_DATA['has_admin_access']);
	define('USER_CAN_SEND_ECARDS', (int)$USER_DATA['can_send_ecards']);
	define('USER_CAN_RATE_PICTURES', (int)$USER_DATA['can_rate_pictures']);
	define('USER_CAN_POST_COMMENTS', (int)$USER_DATA['can_post_comments']);
	define('USER_CAN_UPLOAD_PICTURES', (int)$USER_DATA['can_upload_pictures']);
	define('USER_CAN_CREATE_ALBUMS', (int)$USER_DATA['can_create_albums']);
	define('USER_UPLOAD_FORM', (int)$USER_DATA['upload_form_config']);
	define('CUSTOMIZE_UPLOAD_FORM', (int)$USER_DATA['custom_user_upload']);
	define('NUM_FILE_BOXES', (int)$USER_DATA['num_file_upload']);
	define('NUM_URI_BOXES', (int)$USER_DATA['num_URI_upload']);

			$this->session_update();
	}

	function load_guest_data()
	{
			global $USER_DATA;

			$USER_DATA['user_id'] = 0;
	$USER_DATA['user_name'] = 'Guest';
	$USER_DATA['groups'][0] = $this->use_post_based_groups ? ($this->guestgroup) : 3;
	$USER_DATA['group_quota'] = 1;
	$USER_DATA['can_rate_pictures'] = 0;
			$USER_DATA['can_send_ecards'] = 0;
			$USER_DATA['can_post_comments'] = 0;
			$USER_DATA['can_upload_pictures'] = 0;
			$USER_DATA['can_create_albums'] = 0;
			$USER_DATA['pub_upl_need_approval'] = 1;
			$USER_DATA['priv_upl_need_approval'] = 1;
			$USER_DATA['upload_form_config'] = 0;
			$USER_DATA['num_file_upload'] = 0;
			$USER_DATA['num_URI_upload'] = 0;
			$USER_DATA['custom_user_upload'] = 0;
	}

	function load_user_data($row)
	{

			global $USER_DATA;

			$USER_DATA['user_id'] = $row['id'];
	$USER_DATA['user_name'] = $row['username'];

			//changed to "row['group_id']" $group_id = $row[($this->usergroupstable)?$this->field['usertbl_group_id']:$this->field['grouptbl_group_id']];

			if  ($this->multigroups){
					$USER_DATA['groups'] = $this->get_groups($row);
			} else {
					if ($this->use_post_based_groups){
							$USER_DATA['groups'] = array(0 => $row['group_id']);
					} else {
							$USER_DATA['groups'] = array(0 => (in_array($row['group_id'] - 100, $this->admingroups)) ? 1 : 2);
					}
			}
	}

	/*
	 * Prototype function needed for Mambo *maybe others*
	 * Keeps the session alive
	 */
	function session_update() {}

	function get_user_count()
	{
			global $CONFIG;
			static $user_count = 0;

			if (!$user_count) {
		$result = cpg_db_query("SELECT count(*) FROM {$this->usertable} WHERE 1", $this->link_id);
		$nbEnr = mysql_fetch_array($result);
		$user_count = $nbEnr[0];
		mysql_free_result($result);
	}

	return $user_count;
	}

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',
					   );

	// Fix the group id, if bridging is enabled
	if ($CONFIG['bridge_enable']) {
		$f['usertbl_group_id'] .= '+100';
	}

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

			// Build SQL table, should work with all bridges
	$sql = "SELECT {$f['user_id']} as user_id, {$f['username']} as user_name, {$f['email']} as user_email, {$f['regdate']} as user_regdate, {$f['lastvisit']} as user_lastvisit, {$f['active']} as user_active, ".
		   "COUNT(pid) as pic_count, ROUND(SUM(total_filesize)/1024) as disk_usage, group_name, group_quota ".
		   "FROM {$this->usertable} AS u ".
		   "INNER JOIN {$C['TABLE_USERGROUPS']} AS g ON u.{$f['usertbl_group_id']} = g.group_id ".
		   "LEFT JOIN {$C['TABLE_PICTURES']} AS p ON p.owner_id = u.{$f['user_id']} ".
		   $options['search'].
		   "GROUP BY user_id " . "ORDER BY " . $sort_codes[$options['sort']] . " ".
		   "LIMIT {$options['lower_limit']}, {$options['users_per_page']};";

			$result = cpg_db_query($sql, $this->link_id);

			// If no records, return empty value
			if (!$result) {
					return array();
			}

			// Extract user list to an array
			while ($user = mysql_fetch_assoc($result)) {
					$userlist[] = $user;
			}

	return $userlist;
}


function get_groups() {}

	// Retrieve the name of a user
	function get_user_name($uid)
	{
			$sql = "SELECT {$this->field['username']} as user_name FROM {$this->usertable} WHERE {$this->field['user_id']} = '$uid'";

			$result = cpg_db_query($sql, $this->link_id);

			if (mysql_num_rows($result)) {
					$row = mysql_fetch_array($result);
					mysql_free_result($result);
					return $row['user_name'];
			} else {
					return '';
			}
	}

	// Retrieve the id of a user
	function get_user_id($username)
	{
			$username = addslashes($username);

			$sql = "SELECT {$this->field['user_id']} AS user_id FROM {$this->usertable} WHERE {$this->field['username']}  = '$username'";

			$result = cpg_db_query($sql, $this->link_id);

			if (mysql_num_rows($result)) {
					$row = mysql_fetch_array($result);
					mysql_free_result($result);
					return $row['user_id'];
			} else {
					return '';
			}
	}

// Perform database queries to calculate user's privileges based on group membership
function get_user_data($pri_group, $groups, $default_group_id = 3)
{

		//Parameters :
		//				$pri_group (scalar) :		 Group ID number of the user's 'main' group. This is the group that will be
		//																						the user's profile display. ($USER_DATA['group_id'])
		//
		//				$groups (array) :						List of group ids of all the groups that the user is a member of. IF this list
		//																						does not include the $pri_group, it will be added.
		//
		//				$default_group_id (scalar) :		 The group used as a fall-back if no valid group ids are specified.
		//																										If this group also does not exist then CPG will abort with a critical
		//																										error.
		//
		// Returns an array containing most of the data to put into in $USER_DATA.

		global $CONFIG;

		foreach ($groups as $key => $val)
				if (!is_numeric($val))
						unset ($groups[$key]);
		if (!in_array($pri_group, $groups)) array_push($groups, $pri_group);

		$result = cpg_db_query("SELECT MAX(group_quota) as disk_max, MIN(group_quota) as disk_min, " .
						"MAX(can_rate_pictures) as can_rate_pictures, MAX(can_send_ecards) as can_send_ecards, " .
						"MAX(upload_form_config) as ufc_max, MIN(upload_form_config) as ufc_min, " .
						"MAX(custom_user_upload) as custom_user_upload, MAX(num_file_upload) as num_file_upload, " .
						"MAX(num_URI_upload) as num_URI_upload, " .
						"MAX(can_post_comments) as can_post_comments, MAX(can_upload_pictures) as can_upload_pictures, " .
						"MAX(can_create_albums) as can_create_albums, " .
						"MAX(has_admin_access) as has_admin_access, " .
						"MIN(pub_upl_need_approval) as pub_upl_need_approval, MIN( priv_upl_need_approval) as  priv_upl_need_approval ".
						"FROM {$CONFIG['TABLE_USERGROUPS']} WHERE group_id in (" .  implode(",", $groups). ")");

		if (mysql_num_rows($result)) {
				$USER_DATA = mysql_fetch_assoc($result);
				$result = cpg_db_query("SELECT group_name FROM  {$CONFIG['TABLE_USERGROUPS']} WHERE group_id= " . $pri_group);
				$temp_arr = mysql_fetch_assoc($result);
				$USER_DATA["group_name"] = $temp_arr["group_name"];
		} else {
				$result = cpg_db_query("SELECT * FROM {$CONFIG['TABLE_USERGROUPS']} WHERE group_id = $default_group_id");
			   if (!mysql_num_rows($result)) die('<b>Coppermine critical error</b>:<br />The group table does not contain the Anonymous group !');
					   $USER_DATA = mysql_fetch_assoc($result);
				}
		mysql_free_result($result);

		if ( $USER_DATA['ufc_max'] == $USER_DATA['ufc_min'] ) {
				$USER_DATA["upload_form_config"] = $USER_DATA['ufc_min'];
		} elseif ($USER_DATA['ufc_min'] == 0) {
				$USER_DATA["upload_form_config"] = $USER_DATA['ufc_max'];
		} elseif ((($USER_DATA['ufc_max'] == 2) or ($USER_DATA['ufc_max'] == 3)) and ($USER_DATA['ufc_min'] == 1)) {
				$USER_DATA["upload_form_config"] = 3;
		} elseif (($USER_DATA['ufc_max'] == 3) and ($USER_DATA['ufc_min'] == 2)) {
				$USER_DATA["upload_form_config"] = 3;
		} else {
				$USER_DATA["upload_form_config"] = 0;
		}
		$USER_DATA["group_quota"] = ($USER_DATA["disk_min"])?$USER_DATA["disk_max"]:0;

		$USER_DATA['can_see_all_albums'] = $USER_DATA['has_admin_access'];

		$USER_DATA["group_id"] = $pri_group;
		$USER_DATA['groups'] = $groups;

		if (get_magic_quotes_gpc() == 0)
						$USER_DATA['group_name'] = mysql_escape_string($USER_DATA['group_name']);

		return($USER_DATA);
}
	// Redirect
	function redirect($target)
	{
			header('Location: '. $this->boardurl . $target);
			exit;
	}

	// Register
	function register_page()
	{
			$this->redirect($this->page['register']);
	}

	// View users
	function view_users()
	{
			$this->redirect($this->page['editusers']);
	}

	// Edit users
	function edit_users()
	{
			$this->redirect($this->page['editusers']);
	}

	// View user profile
	function view_profile($uid)
	{
			$this->redirect($this->page['edituserprofile'].($uid ? $uid : USER_ID));
	}

	// Edit user profile
	function edit_profile($uid)
	{
			$this->redirect($this->page['edituserprofile'].$uid);
	}

	// Get user information
	function get_user_infos($uid)
	{
	global $lang_register_php;

			$sql = "SELECT *, {$this->field['username']} AS user_name,
																			{$this->field['email']} AS user_email,
																			{$this->field['regdate']} AS user_regdate,
																			{$this->field['location']} AS user_location,
																			{$this->field['website']} AS user_website

																			FROM  {$this->usertable} WHERE {$this->field['user_id']} = '$uid'";

			$result = cpg_db_query($sql, $this->link_id);

			if (!mysql_num_rows($result)) cpg_die(ERROR, $lang_register_php['err_unk_user'], __FILE__, __LINE__);

			$user_data = mysql_fetch_array($result);
			if (!isset($user_data['group_name'])) $user_data['group_name'] = '';
			if (!isset($user_data['user_profile1'])) $user_data['user_profile1'] = '';
			if (!isset($user_data['user_profile2'])) $user_data['user_profile2'] = '';
			if (!isset($user_data['user_profile3'])) $user_data['user_profile3'] = '';
			if (!isset($user_data['user_profile4'])) $user_data['user_profile4'] = '';
			if (!isset($user_data['user_profile5'])) $user_data['user_profile5'] = '';
			if (!isset($user_data['user_profile6'])) $user_data['user_profile6'] = '';
			mysql_free_result($result);

			return $user_data;
	}

	// Query used to list users
	function list_users_query(&$user_count)
	{
			global $CONFIG, $FORBIDDEN_SET, $PAGE;

	$f =& $this->field;

			if ($FORBIDDEN_SET != "") {
					$forbidden_with_icon = "AND ($FORBIDDEN_SET or p.galleryicon=p.pid)";
					$forbidden = "AND ($FORBIDDEN_SET)";
			} else {
					$forbidden_with_icon = '';
					$forbidden = '';
			}

			// Get the total number of users with albums
	$sql  = "select null ";
	$sql .= "from {$CONFIG['TABLE_ALBUMS']} as p ";
	$sql .= " INNER JOIN {$CONFIG['TABLE_PICTURES']} AS pics ON pics.aid = p.aid ";
			$sql .= "where ( category>".FIRST_USER_CAT." $forbidden) ";
	$sql .= "group by category;";

	$result = cpg_db_query($sql);
	$user_count = mysql_num_rows($result);

	if ($user_count == 0) {
		return false;
	}

	mysql_free_result($result);

	$users_per_page = $CONFIG['thumbcols'] * $CONFIG['thumbrows'];
	$totalPages = ceil($user_count / $users_per_page);
	if ($PAGE > $totalPages) $PAGE = 1;
	$lower_limit = ($PAGE-1) * $users_per_page;

			if ($this->can_join_tables){

					$sql  = "SELECT {$f['user_id']} as user_id,";
					$sql .= "{$f['username']} as user_name,";
					$sql .= "COUNT(DISTINCT a.aid) as alb_count,";
					$sql .= "COUNT(DISTINCT pid) as pic_count,";
					$sql .= "MAX(pid) as thumb_pid, ";
					$sql .= "MAX(galleryicon) as gallery_pid ";
					$sql .= "FROM {$CONFIG['TABLE_ALBUMS']} AS a ";
					$sql .= "INNER JOIN {$this->usertable} as u on u.{$f['user_id']} = a.category - " . FIRST_USER_CAT . " ";
					$sql .= "INNER JOIN {$CONFIG['TABLE_PICTURES']} AS p ON p.aid = a.aid ";
					$sql .= "WHERE ((isnull(approved) or approved='YES') AND category > " . FIRST_USER_CAT . ") $forbidden_with_icon GROUP BY user_id ";
					$sql .= "ORDER BY category ";
					$sql .= "LIMIT $lower_limit, $users_per_page ";


					$result = cpg_db_query($sql);

					while ($row = mysql_fetch_array($result)) {
							$users[] = $row;
					}
					mysql_free_result($result);

			} else {
					// This is the way we collect the data without a direct join to the forum's user table

					// This query determines which users we need to collect usernames of - ie just those which have albums with pics
					// and are on the page we are looking at
					$sql  = "SELECT category - 10000 as user_id ";
					$sql .= "FROM {$CONFIG['TABLE_ALBUMS']} AS a ";
					$sql .= "INNER JOIN {$CONFIG['TABLE_PICTURES']} AS p ON p.aid = a.aid ";
					$sql .= "WHERE ((isnull(approved) or approved='YES') ";
					$sql .= "AND category > " . FIRST_USER_CAT . ") $forbidden_with_icon GROUP BY category ";
					$sql .= "LIMIT $lower_limit, $users_per_page ";

					$result = cpg_db_query($sql);

					$user_ids = array();

					while ($row = mysql_fetch_array($result)) {
							$user_ids[] = $row['user_id'];
					}
					mysql_free_result($result);

					$userlist = implode(',', $user_ids);

					// This query collects an array of user_id -> username mappings for the user ids collected above
					$result = cpg_db_query("SELECT {$this->field['user_id']} AS user_id, {$this->field['username']} AS user_name FROM {$this->usertable} WHERE {$this->field['user_id']} IN ($userlist)", $this->link_id);

					$userdata = array();

					while ($row = mysql_fetch_array($result)) {
							$userdata[$row['user_id']] = $row['user_name'];
					}

					mysql_free_result($result);

					// This is the main query, similar to the one in the join implementation above but without the join to the user table
					// We use the pic's owner_id field as the user_id instead of using category - 10000 as the user_id
					$sql  = "SELECT owner_id as user_id,";
					//$sql .= "{$f['username']} as user_name,";
					$sql .= "COUNT(DISTINCT a.aid) as alb_count,";
					$sql .= "COUNT(DISTINCT pid) as pic_count,";
					$sql .= "MAX(pid) as thumb_pid, ";
					$sql .= "MAX(galleryicon) as gallery_pid ";
					$sql .= "FROM {$CONFIG['TABLE_ALBUMS']} AS a ";
			   // $sql .= "INNER JOIN {$this->usertable} as u on u.{$f['user_id']}+".FIRST_USER_CAT."=a.category ";
					$sql .= "INNER JOIN {$CONFIG['TABLE_PICTURES']} AS p ON p.aid = a.aid ";
					$sql .= "WHERE ((isnull(approved) or approved='YES') AND category > " . FIRST_USER_CAT . ") $forbidden_with_icon GROUP BY user_id ";
					$sql .= "ORDER BY category ";
					$sql .= "LIMIT $lower_limit, $users_per_page ";

					$result = cpg_db_query($sql);

					// Here we associate the username with the album details.
					while ($row = mysql_fetch_array($result)) {
							$users[] = array_merge($row, array('user_name' => $userdata[$row['user_id']]));
					}

					mysql_free_result($result);
			}
			return $users;
	}


	// Group table synchronisation
	function synchronize_groups()
	{
			global $CONFIG;

			if ($this->use_post_based_groups){
					if ($this->group_overrride){
							$udb_groups = $this->collect_groups();
					} else {
							$sql = "SELECT * FROM {$this->groupstable} WHERE {$this->field['grouptbl_group_name']} <> ''";

							$result = cpg_db_query($sql, $this->link_id);

							$udb_groups = array();

							while ($row = mysql_fetch_assoc($result))
							{
									$udb_groups[$row[$this->field['grouptbl_group_id']]+100] = $row[$this->field['grouptbl_group_name']];
							}
					}
			} else {
					$udb_groups = array(1 =>'Administrators', 2=> 'Registered', 3=>'Guests', 4=> 'Banned');
			}

			$result = cpg_db_query("SELECT group_id, group_name FROM {$CONFIG['TABLE_USERGROUPS']} WHERE 1");

			while ($row = mysql_fetch_array($result)) {
					$cpg_groups[$row['group_id']] = $row['group_name'];
			}

			mysql_free_result($result);

			// Scan Coppermine groups that need to be deleted
			foreach($cpg_groups as $c_group_id => $c_group_name) {
					if ((!isset($udb_groups[$c_group_id]))) {
							cpg_db_query("DELETE FROM {$CONFIG['TABLE_USERGROUPS']} WHERE group_id = '" . $c_group_id . "' LIMIT 1");
							unset($cpg_groups[$c_group_id]);
					}
			}

			// Scan udb groups that need to be created inside Coppermine table
			foreach($udb_groups as $i_group_id => $i_group_name) {
					if ((!isset($cpg_groups[$i_group_id]))) {
							// add admin info
							$admin_access = in_array($i_group_id-100, $this->admingroups) ? '1' : '0';
							cpg_db_query("INSERT INTO {$CONFIG['TABLE_USERGROUPS']} (group_id, group_name, has_admin_access) VALUES ('$i_group_id', '" . addslashes($i_group_name) . "', '$admin_access')");
							$cpg_groups[$i_group_id] = $i_group_name;
					}
			}

			// Update Group names
			foreach($udb_groups as $i_group_id => $i_group_name) {
					if ($cpg_groups[$i_group_id] != $i_group_name) {
							cpg_db_query("UPDATE {$CONFIG['TABLE_USERGROUPS']} SET group_name = '" . addslashes($i_group_name) . "' WHERE group_id = '$i_group_id' LIMIT 1");
					}
			}
			// fix admin grp
			if (!$this->use_post_based_groups) cpg_db_query("UPDATE {$CONFIG['TABLE_USERGROUPS']} SET has_admin_access = '1' WHERE group_id = '1' LIMIT 1");

	}

	// Retrieve the album list used in gallery admin mode
	function get_admin_album_list()
	{
			global $CONFIG;

			if ($this->can_join_tables) {
					$sql = "SELECT aid, CONCAT('(', {$this->field['username']}, ') ', a.title) AS title
													FROM {$CONFIG['TABLE_ALBUMS']} AS a
													INNER JOIN {$this->usertable} AS u
													ON category = (" . FIRST_USER_CAT . " + {$this->field['user_id']})
													ORDER BY title";
			} else {
					$sql = "SELECT aid, IF(category > " . FIRST_USER_CAT . ", CONCAT('* ', title), CONCAT(' ', title)) AS title " . "FROM {$CONFIG['TABLE_ALBUMS']} " . "ORDER BY title";
			}
			return $sql;
	}

	// Retrieve the user album list used in gallery admin mode during batch add process.
	function get_batch_add_album_list()
	{
			global $CONFIG;
			if ($this->can_join_tables) {
					$sql = "SELECT aid, CONCAT('(', {$this->field['username']}, ') ', a.title) AS title
													FROM {$CONFIG['TABLE_ALBUMS']} AS a
													INNER JOIN {$this->usertable} AS u
													ON category = (" . FIRST_USER_CAT . " + ".USER_ID.") AND {$this->field['user_id']} = ".USER_ID." ORDER BY title";
			} else {
					$sql = "SELECT aid, IF(category > " . FIRST_USER_CAT . ", CONCAT('* ', title), CONCAT(' ', title)) AS title " . "FROM {$CONFIG['TABLE_ALBUMS']} WHERE category = ".(FIRST_USER_CAT+USER_ID)." ORDER BY title";
			}
			return $sql;
	}

// Used to generate the album selection box in Admin tools (util.php)
	function util_filloptions()
	{
			global $lang_util_php, $CONFIG, $lang_upload_php;

			// Reset counter
			$list_count = 0;

			if ($this->can_join_tables) {

					$user_albums = cpg_db_query("SELECT {$this->field['username']} AS user_name, aid, a.title
																			FROM {$CONFIG['TABLE_ALBUMS']} AS a
																			LEFT JOIN {$this->usertable} AS u
																			ON (category - " . FIRST_USER_CAT . ") = {$this->field['user_id']}
																			WHERE category > " . FIRST_USER_CAT);
					$user_albums_list = cpg_db_fetch_rowset($user_albums);
					mysql_free_result($user_albums);

					// Cycle through the User albums
					foreach($user_albums_list as $album) {

							// Add to multi-dim array for later sorting
							$listArray[$list_count]['cat'] = $lang_upload_php['personal_albums'];
							$listArray[$list_count]['aid'] = $album['aid'];
							$username = is_null($album['user_name']) ? 'Mr. X' : $album['user_name'];
							$listArray[$list_count]['title'] = '(' . $username . ') ' . $album['title'];
							$list_count++;
					}

			} else {

					$user_albums = cpg_db_query("SELECT aid, title, category FROM {$CONFIG['TABLE_ALBUMS']} WHERE category > " . FIRST_USER_CAT);

					$user_albums_list = $user_ids = array();

					if (mysql_num_rows($user_albums)){

							while ($row = cpg_db_fetch_row($user_albums)){
									$user_albums_list[] = $row;
									$user_ids[] = $row['category'] - FIRST_USER_CAT;
							}
							mysql_free_result($user_albums);

							$user_id_list = implode(', ', array_unique($user_ids));

							$user_names = cpg_db_query("SELECT {$this->field['username']} AS user_name, {$this->field['user_id']} AS user_id  FROM {$this->usertable} WHERE {$this->field['user_id']} IN ($user_id_list)", $this->link_id);

							while ($row = cpg_db_fetch_row($user_names)){
									$user_names_list[$row['user_id']] = $row['user_name'];
							}
							mysql_free_result($user_names);

							// Cycle through the User albums
							foreach($user_albums_list as $album) {

									// Add to multi-dim array for later sorting
									$listArray[$list_count]['cat'] = $lang_upload_php['personal_albums'];
									$listArray[$list_count]['aid'] = $album['aid'];
									$username = isset($user_names_list[$album['category'] - FIRST_USER_CAT]) ? $user_names_list[$album['category'] - FIRST_USER_CAT] : 'Mr. X';
									$listArray[$list_count]['title'] = '(' . $username . ') ' . $album['title'];
									$list_count++;
							}
					} else {
							mysql_free_result($user_albums);
					}
			}

			$public_albums = cpg_db_query("SELECT aid, title, name FROM {$CONFIG['TABLE_ALBUMS']} LEFT JOIN {$CONFIG['TABLE_CATEGORIES']} ON cid = category WHERE category < " . FIRST_USER_CAT . " ORDER BY title");
			$public_albums_list = cpg_db_fetch_rowset($public_albums);
			mysql_free_result($public_albums);

			// Cycle through the public albums
			foreach($public_albums_list as $album) {

					// Set $album_id to the actual album ID
					$album_id = $album['aid'];

					// Add to multi-dim array for sorting later
					$vRes['name'] = $album['name'];
					if ($vRes['name']) {
							$listArray[$list_count]['cat'] = $vRes['name'];
					} else {
							$listArray[$list_count]['cat'] = $lang_upload_php['albums_no_category'];
					}
					$listArray[$list_count]['aid'] = $album['aid'];
					$listArray[$list_count]['title'] = $album['title'];
					$list_count++;
			}

			// Sort the pulldown options by category and album name
			$listArray = array_csort($listArray,'cat','title');

			// Finally, print out the nicely sorted and formatted drop down list
			$alb_cat = '';

			echo '    <select size="1" name="albumid" class="listbox"><option value="0">All Albums</option>';

			foreach ($listArray as $val) {
					if ($val['cat'] != $alb_cat) {
							if ($alb_cat) echo "				</optgroup>\n";
							echo '				<optgroup label="' . $val['cat'] . '">' . "\n";
							$alb_cat = $val['cat'];
					}
					echo '				<option value="' . $val['aid'] . '">   ' . $val['title'] . "</option>\n";
			}

			if ($alb_cat) echo "				</optgroup>\n";

			print '</select> (3)';
			print '    <input type="submit" value="'.$lang_util_php['submit_form'].'" class="button" /> (4)';
			print '</form>';
	}

	// Taken from Mambo (com_registration.php)
	function make_password(){
			$makepass="";
			$salt = "abchefghjkmnpqrstuvwxyz0123456789";
			srand((double)microtime()*1000000);
			$i = 0;
			while ($i <= 7) {
					$num = rand() % 33;
					$tmp = substr($salt, $num, 1);
					$makepass = $makepass . $tmp;
					$i++;
			}
			return ($makepass);
	}

	function session_extraction() {
		return false;
	}

	function cookie_extraction() {
	   return false;
	}

	// Simple login by specified username and pass.
	// Used for xp publisher login
	// Needs override for any BBS that is more complex than straight md5(password)
	function login( $username = null, $password = null, $remember = false ) {

			$encpassword = md5($password);

			// Check for user in users table
	$sql =  "SELECT {$this->field['user_id']} AS user_id, {$this->field['username']} AS user_name FROM {$this->usertable} WHERE ";
	$sql .= "{$this->field['username']} = '$username' AND BINARY {$this->field['password']} = '$encpassword'";
			$results = cpg_db_query($sql);

			if (mysql_num_rows($results)) {
					$USER_DATA = mysql_fetch_assoc($results);
					mysql_free_result($results);
					return $USER_DATA;
			} else {
					return false;
			}
	}

// Used for sorting (usort) the userlist by criteria that are not directly in the udb user table, callback function.
function adv_sort($a, $b)
{
	global $cpg_udb;

	if ($cpg_udb->sortdir == 'ASC'){
		return strcmp($a[$cpg_udb->sortfield], $b[$cpg_udb->sortfield]);
	 } else {
		return strcmp($b[$cpg_udb->sortfield], $a[$cpg_udb->sortfield]);
	}
}
}
?>

Ссылка на комментарий
Поделиться на других сайтах

  • 1 год спустя...

Так решили все-таки эту проблему, или нет? Подскажите! У меня проблема очень похожая. Я использую форум myBB 1.4.4. При нажатии кнопки регистрации происходит переход на страницу авторизации форума. Вот дальше происходят вещи неожиданные: при возврате на сайт (после авторизации) на сайте никак не отображается прошедшая регистрация, т.е. я нахожусь в положении гостя. Теперь я никак не могу войти даже в админку. Пробовал закоментить в файле скрипта mybb.inc.php строку с переадресацией логина - теперь логин происходит на самом сайте, но меня не пускает в учетную запись администратора!!!!

 

P.S. Сразу после установки и подключения бриджа работа сайта была нарушена: при загрузке выкидывало сообщение:

Coppermine critical error:
Unable to connect to UDB database !

MySQL said:

Я вручную в файле конфигурации mybb.inc.php прописал правильные пути и установки подключения к базе данных, и сайт заработал. Менял только их.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.