代碼: 選擇全部
<?php
/***************************************************************************
* profilcp_buddy.php
* ------------------
* begin : 08/05/2003
* copyright : Ptirhiik
* email : admin@rpgnet-fr.com
*
* version : 1.1.6 - 22/06/2003
*
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
*
***************************************************************************/
if ( !defined('IN_PHPBB') )
{
die('Hacking attempt');
exit;
}
if( !empty($setmodules) )
{
$sub_modules = array();
$sub_modules['mode'][] = 'friend';
$sub_modules['shortcut'][] = $lang['profilcp_buddy_friend_shortcut'];
$sub_modules['page_title'][] = $lang['profilcp_buddy_friend_pagetitle'];
$sub_modules['mode'][] = 'ignore';
$sub_modules['shortcut'][] = $lang['profilcp_buddy_ignore_shortcut'];
$sub_modules['page_title'][] = $lang['profilcp_buddy_ignore_pagetitle'];
$sub_modules['mode'][] = 'memberlist';
$sub_modules['shortcut'][] = $lang['profilcp_buddy_list_shortcut'];
$sub_modules['page_title'][] = $lang['profilcp_buddy_list_pagetitle'];
$file = basename(__FILE__);
$module['sort'][] = 70;
$module['url'][] = $file;
$module['mode'][] = 'buddy';
$module['shortcut'][] = $lang['profilcp_buddy_shortcut'];
$module['page_title'][] = $lang['profilcp_buddy_pagetitle'];
$module['sub'][] = $sub_modules;
return;
}
// check access
if ( ($userdata['user_id'] != $view_userdata['user_id']) && (!is_admin($userdata) || ($level_prior[get_user_level($userdata)] <= $level_prior[get_user_level($view_userdata)])) ) return;
// list of column
//--------------------------------------------------------------------------------------------------
//
// $max_option : the lenght of the user field user_list_option designed to get the option selected status
// $user_fields array
// key = name of the field,
// leg = legend,
// ind = index in the user_list_option string
// class = nature of the class field
// type = type of the field
//
// fields added :
//
// last field pos = 27
//
//--------------------------------------------------------------------------------------------------
$max_option = 50;
$user_fields = array(
// generic info
'user_my_friend' => array( 'leg' => $lang['Friend'], 'ind' => 0, 'class' => 'special', 'type' => 'TINYINT' ),
'user_online' => array( 'leg' => $lang['Online'], 'ind' => 1, 'class' => 'special', 'type' => 'TINYINT' ),
'username' => array( 'leg' => $lang['Username'], 'ind' => 2, 'class' => 'generic', 'type' => 'VARCHAR' ),
// messangers
'user_pm' => array( 'leg' => $lang['Private_Message'], 'ind' => 3, 'class' => 'special', 'type' => 'TINYINT' ),
'user_email' => array( 'leg' => $lang['Email_address'], 'ind' => 4, 'class' => 'email', 'type' => 'VARCHAR' ),
'user_icq' => array( 'leg' => $lang['ICQ'], 'ind' => 5, 'class' => 'messangers', 'type' => 'VARCHAR' ),
'user_aim' => array( 'leg' => $lang['AIM'], 'ind' => 6, 'class' => 'messangers', 'type' => 'VARCHAR' ),
'user_yim' => array( 'leg' => $lang['YIM'], 'ind' => 7, 'class' => 'messangers', 'type' => 'VARCHAR' ),
'user_msnm' => array( 'leg' => $lang['MSNM'], 'ind' => 8, 'class' => 'messangers', 'type' => 'VARCHAR' ),
// online info
'user_regdate' => array( 'leg' => $lang['Joined'], 'ind' => 9, 'class' => 'viewonline', 'type' => 'MEDIUMINT' ),
'user_lastvisit' => array( 'leg' => $lang['Last_visit'], 'ind' => 10, 'class' => 'viewonline', 'type' => 'MEDIUMINT' ),
'user_posts' => array( 'leg' => $lang['Total_posts'], 'ind' => 11, 'class' => 'viewonline', 'type' => 'MEDIUMINT' ),
// web info
'user_rank_title' => array( 'leg' => $lang['Poster_rank'], 'ind' => 27, 'class' => 'special', 'type' => 'VARCHAR' ),
'user_timezone' => array( 'leg' => $lang['Timezone'], 'ind' => 12, 'class' => 'webdisplay', 'type' => 'MEDIUMINT' ),
'user_lang' => array( 'leg' => $lang['Board_lang'], 'ind' => 13, 'class' => 'webdisplay', 'type' => 'VARCHAR' ),
'user_website' => array( 'leg' => $lang['Website'], 'ind' => 14, 'class' => 'webdisplay', 'type' => 'VARCHAR' ),
// real info
'user_realname' => array( 'leg' => $lang['Realname'], 'ind' => 15, 'class' => 'real', 'type' => 'VARCHAR' ),
'user_gender' => array( 'leg' => $lang['Gender'], 'ind' => 16, 'class' => 'real', 'type' => 'TINYINT' ),
'user_birthday' => array( 'leg' => $lang['Birthday'], 'ind' => 17, 'class' => 'real', 'type' => 'VARCHAR' ),
'user_from' => array( 'leg' => $lang['Location'], 'ind' => 18, 'class' => 'real', 'type' => 'VARCHAR' ),
'user_occ' => array( 'leg' => $lang['Occupation'], 'ind' => 19, 'class' => 'real', 'type' => 'VARCHAR' ),
'user_interests' => array( 'leg' => $lang['Interests'], 'ind' => 20, 'class' => 'real', 'type' => 'VARCHAR' ),
'user_home_phone' => array( 'leg' => $lang['Home_phone'], 'ind' => 21, 'class' => 'real', 'type' => 'VARCHAR' ),
'user_home_fax' => array( 'leg' => $lang['Home_fax'], 'ind' => 22, 'class' => 'real', 'type' => 'VARCHAR' ),
'user_work_phone' => array( 'leg' => $lang['Work_phone'], 'ind' => 23, 'class' => 'real', 'type' => 'VARCHAR' ),
'user_work_fax' => array( 'leg' => $lang['Work_fax'], 'ind' => 24, 'class' => 'real', 'type' => 'VARCHAR' ),
'user_cellular' => array( 'leg' => $lang['Cellular'], 'ind' => 25, 'class' => 'real', 'type' => 'VARCHAR' ),
'user_pager' => array( 'leg' => $lang['Pager'], 'ind' => 26, 'class' => 'real', 'type' => 'VARCHAR' ),
);
$operators = array(
'LE' => $lang['Comp_LE'],
'EQ' => $lang['Comp_EQ'],
'NE' => $lang['Comp_NE'],
'GE' => $lang['Comp_GE'],
'IN' => $lang['Comp_IN'],
'NI' => $lang['Comp_NI'],
);
// buddy id
$buddy_id = -1;
if ( isset($HTTP_POST_VARS['b']) || isset($HTTP_GET_VARS['b']) )
{
$buddy_id = isset($HTTP_POST_VARS['b']) ? intval($HTTP_POST_VARS['b']) : intval($HTTP_GET_VARS['b']);
}
// action
$set = '';
if ( isset($HTTP_POST_VARS['set']) || isset($HTTP_GET_VARS['set']) )
{
$set = isset($HTTP_POST_VARS['set']) ? $HTTP_POST_VARS['set'] : $HTTP_GET_VARS['set'];
}
if ( !in_array($set, array('inv', 'vis', 'add', 'remove')) || ($buddy_id < 0) )
{
$set = '';
$buddy_id = -1;
}
// check buddy_id
if ($buddy_id > 0)
{
$sql = "SELECT * FROM " . USERS_TABLE . " WHERE user_id = $buddy_id";
if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, "Could not get user information", '', __LINE__, __FILE__, $sql);
if ( !($userrow = $db->sql_fetchrow($result)) )
{
$set = '';
$buddy_id = -1;
message_die(GENERAL_ERROR, $lang['No_such_user']);
}
}
// coming from
$from = '';
$l_from = '';
switch ($HTTP_GET_VARS['from'])
{
case 'profil' :
$from = append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$buddy_id");
$l_from = sprintf( $lang['Click_return_profilcp'], '<a href="' . $from . '">', '</a>' );
break;
case 'topic' :
$topic_id = 0;
if ( isset($HTTP_GET_VARS[POST_TOPICS_URL]) )
{
$from = append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=" . intval($HTTP_GET_VARS[POST_TOPICS_URL]));
$l_from = sprintf( $lang['Click_return_topic'], '<a href="' . $from . '">', '</a>' );
}
else if ( isset($HTTP_GET_VARS[POST_POST_URL]) )
{
$from = append_sid("viewtopic.$phpEx?" . POST_POST_URL . "=" . intval($HTTP_GET_VARS[POST_POST_URL]) . "#" . intval($HTTP_GET_VARS[POST_POST_URL]));
$l_from = sprintf( $lang['Click_return_topic'], '<a href="' . $from . '">', '</a>' );
}
break;
case 'privmsg' :
$from = append_sid("privmsg.$phpEx?mode=read&" . POST_POST_URL . "=" . intval($HTTP_GET_VARS[POST_POST_URL]));
$l_from = sprintf( $lang['Click_return_privmsg'], '<a href="' . $from . '">', '</a>' );
break;
default:
$from = '';
$l_from = '';
break;
}
// module mode
$friend_list = ($sub=='friend');
$ignore_list = ($sub=='ignore');
// active/disable the always view option
if ( in_array($set, array('vis', 'inv')) )
{
$buddy_visible = ($set=='vis') ? '1' : '0';
$sql = "UPDATE " . BUDDYS_TABLE . " SET buddy_visible=$buddy_visible WHERE user_id=$view_user_id and buddy_id=$buddy_id";
if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, "Could not update buddy information", '', __LINE__, __FILE__, $sql);
}
if ( ($set == 'add') && ($buddy_id > 0) ) $adduser = true;
if ( ($set == 'remove') && ($buddy_id > 0) ) $remove = true;
// remove from list
if ($remove)
{
$user_ids = ( $set == 'remove' ) ? array($buddy_id) : $HTTP_POST_VARS['user_ids'];
if ( count($user_ids) > 0 )
{
$s_user_ids = implode(', ', $user_ids);
$sql = "DELETE FROM " . BUDDYS_TABLE . " WHERE user_id = " . $view_userdata['user_id'] . " and buddy_id in ($s_user_ids)";
if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, "Could not delete buddy list entries", '', __LINE__, __FILE__, $sql);
}
$error = false;
if ( ($set == 'remove') && ($l_from != '') )
{
$ret_link = $from;
$template->assign_vars(array(
'META' => '<meta http-equiv="refresh" content="3;url=' . $ret_link . '">')
);
$message = $lang['Profile_updated'] . '<br /><br />' . $l_from . '<br /><br />';
message_die(GENERAL_MESSAGE, $message);
}
}
else if ($adduser)
{
if ($set != 'add')
{
$username = ( isset($HTTP_POST_VARS['username']) ) ? $HTTP_POST_VARS['username'] : '';
$sql = "SELECT * FROM " . USERS_TABLE . " WHERE LOWER(username) = '" . strtolower(str_replace("\'", "''", $username)) . "'";
if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, "Could not get user information", '', __LINE__, __FILE__, $sql);
if ( !($userrow = $db->sql_fetchrow($result)) )
{
$error = true;
$error_msg = $lang['Could_not_add_user'];
}
}
if ( !$error && ($userrow['user_id'] == $view_user_id) )
{
$error = true;
$error_msg = $lang['profilcp_buddy_add_yourself'];
}
if ( !$error && ($userrow['user_id'] == ANONYMOUS) )
{
$error = true;
$error_msg = $lang['Could_not_anon_user'];
}
// check if exist
if ( !$error )
{
$sql = "SELECT * FROM " . BUDDYS_TABLE . " WHERE user_id = $view_user_id and buddy_id = " . $userrow['user_id'];
if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, "Could not get buddy information", '', __LINE__, __FILE__, $sql);
if ( $row = $db->sql_fetchrow($result) )
{
$error = true;
$error_msg = $lang['profilcp_buddy_already'];
}
}
// check if the other ignore this one
if (!$error && $friend_list)
{
$sql = "SELECT * FROM " . BUDDYS_TABLE . " WHERE buddy_id = $view_user_id and user_id = " . $userrow['user_id'] . " and buddy_ignore = 1";
if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, "Could not get buddy information", '', __LINE__, __FILE__, $sql);
if ( $row = $db->sql_fetchrow($result) )
{
$error = true;
$error_msg = $lang['profilcp_buddy_ignore'];
}
}
// check users status if ignore list
if (!$error && ($sub == 'ignore'))
{
if ( is_admin($view_userdata) )
{
$error = true;
$error_msg = $lang['profilcp_buddy_you_admin'];
}
if ( is_admin($userrow) )
{
$error = true;
$error_msg = $lang['profilcp_buddy_admin'];
}
}
// add it
if (!$error )
{
$sql = "INSERT INTO " . BUDDYS_TABLE . " (user_id, buddy_id, buddy_ignore) VALUES ( $view_user_id, " . $userrow['user_id'] . ", " . ( $friend_list ? 0 : 1 ) . ")";
if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, "Could not insert buddy information", $lang['Error'], __LINE__, __FILE__, $sql);
}
if ($error) message_die(GENERAL_ERROR, $error_msg);
if ( ($set == 'add') && ($l_from != '') )
{
$ret_link = $from;
$template->assign_vars(array(
'META' => '<meta http-equiv="refresh" content="3;url=' . $ret_link . '">')
);
$message = $lang['Profile_updated'] . '<br /><br />' . $l_from . '<br /><br />';
message_die(GENERAL_MESSAGE, $message);
}
}
else
{
// template file
$template->set_filenames(array(
'body' => 'profilcp/buddy_body.tpl')
);
// get the parms
$fields_choosen = isset($HTTP_POST_VARS['fields_choosen']);
$filter_active = isset($HTTP_POST_VARS['filter_active']);
$start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0;
$order = ( isset($HTTP_GET_VARS['order']) || isset($HTTP_POST_VARS['order']) ) ? ( isset($HTTP_GET_VARS['order']) ? trim(htmlspecialchars($HTTP_GET_VARS['order'])) : trim(htmlspecialchars($HTTP_POST_VARS['order'])) ) : '';
$sort = ( isset($HTTP_GET_VARS['sort'] ) || isset($HTTP_POST_VARS['sort'] ) ) ? ( isset($HTTP_GET_VARS['sort'] ) ? trim(htmlspecialchars($HTTP_GET_VARS['sort'] )) : trim(htmlspecialchars($HTTP_POST_VARS['sort'] )) ) : '';
$filter = ( isset($HTTP_GET_VARS['filter']) || isset($HTTP_POST_VARS['filter']) ) ? ( isset($HTTP_GET_VARS['filter']) ? trim(htmlspecialchars($HTTP_GET_VARS['filter'])) : trim(htmlspecialchars($HTTP_POST_VARS['filter'])) ) : '';
$comp = ( isset($HTTP_GET_VARS['comp'] ) || isset($HTTP_POST_VARS['comp'] ) ) ? ( isset($HTTP_GET_VARS['comp'] ) ? trim(htmlspecialchars($HTTP_GET_VARS['comp'] )) : trim(htmlspecialchars($HTTP_POST_VARS['comp'] )) ) : '';
$fvalue = ( isset($HTTP_GET_VARS['fvalue'] ) || isset($HTTP_POST_VARS['fvalue'] ) ) ? ( isset($HTTP_GET_VARS['fvalue'] ) ? trim(htmlspecialchars($HTTP_GET_VARS['fvalue'] )) : trim(htmlspecialchars($HTTP_POST_VARS['fvalue'] )) ) : '';
if ( !isset($user_fields[$order]) ) $order = 'username';
if ( ($order == '') || !in_array($sort, array('ASC', 'DESC')) ) $sort = '';
if ( ($order != '') && ($sort == '') ) $sort = 'ASC';
if ( !isset($user_fields[$filter]) ) $filter = 'username';
if ( !isset($operators[$comp]) ) $comp = 'IN';
// get the last list of field of the user
$update = false;
if ($view_userdata['user_list_option'] == '') $view_userdata['user_list_option'] = '111000000111000001';
if ($view_userdata['user_list_option'][2] != '1') $view_userdata['user_list_option'][2] = '1'; // force username
if ($fields_choosen)
{
$field_ids = $HTTP_POST_VARS['field_ids'];
$view_userdata['user_list_option'] = '';
for ($i=0; $i < $max_option; $i++) $view_userdata['user_list_option'] .= ( ($i==2) || ( (count($field_ids) > 0) && in_array($i, $field_ids)) ) ? '1' : '0';
$sql = "UPDATE " . USERS_TABLE . " SET user_list_option = '" . $view_userdata['user_list_option'] . "' WHERE user_id = " . $view_userdata['user_id'];
if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, "Could not update user informations", '', __LINE__, __FILE__, $sql);
}
// display the select box
$nb_cell = 5;
$ordfields = array(); // ordered fields (to display)
$indfields = array(); // indiced fields (to store)
while ( list($key, $value) = each($user_fields) )
{
$row['field'] = $key;
$row['leg'] = $value['leg'];
$row['ind'] = $value['ind'];
$ordfields[] = $row;
$indfields[$value['ind']] = $row;
}
$count = count($ordfields) - 1;
$offset = 0;
$class_base = true;
for ($j=0; $j <= intval($count / $nb_cell); $j++)
{
$class_base = !$class_base;
$class_offset = $class_base;
$template->assign_block_vars('userfields_row', array());
for ($i=0; $i < $nb_cell; $i++)
{
$class_offset = !$class_offset;
$class = ($class_offset) ? "row1" : "row2";
if ($offset <= $count)
{
$template->assign_block_vars('userfields_row.userfields_cell', array(
'CLASS' => $class,
'FIELD_ID' => $ordfields[$offset]['ind'],
'FIELDS' => $ordfields[$offset]['leg'],
'CHECKED' => (intval($view_userdata['user_list_option'][$ordfields[$offset]['ind']]) ) ? ' checked="checked"' : '',
)
);
}
else
{
$template->assign_block_vars('userfields_row.userfields_cell_empty', array(
'CLASS' => $class,
)
);
}
$offset++;
}
}
// get a field_id list of the selected field
$field_ids = array();
for ($i=0; $i < $max_option; $i++) if ($view_userdata['user_list_option'][$i]) $field_ids[] = $i;
// call url
$call = "profile.$phpEx?mode=buddy&sub=$sub&filter=$filter&comp=$comp";
if ($fvalue != '') $call .= "&fvalue=$fvalue";
// filter
$s_filter = '<select name="filter">';
// header & sort icons
for ($i=0; $i < count($field_ids); $i++)
{
// sort/order options
$icon_sort = '';
$field_name = $indfields[$field_ids[$i]]['field'];
$user_fields[$field_name]['sortable'] = false;
// unsortable fields
if ( ($field_name != 'user_email') || is_admin($userdata) || !$board_config['board_email_form'] )
{
$user_fields[$field_name]['sortable'] = true;
if ($order != $field_name)
{
$icon_sort = '<a href="' . append_sid($call . "&order=$field_name&sort=ASC") . '"><img src="' . $images['next_arrow'] . '" border="0" alt="' . $lang['Sort_none'] . '"></a>';
}
else switch ($sort)
{
case 'ASC' : $icon_sort = '<a href="' . append_sid($call . "&order=$field_name&sort=DESC") . '"><img src="' . $images['down_arrow'] . '" border="0" alt="' . $lang['Sort_Ascending'] . '"></a>';break;
case 'DESC' : $icon_sort = '<a href="' . append_sid($call) . '"><img src="' . $images['up_arrow'] . '" border="0" alt="' . $lang['Sort_Descending'] . '"></a>';break;
default : $icon_sort = '';break;
}
// filter
$select = ($filter == $indfields[$field_ids[$i]]['field']) ? ' selected="selected"' : '';
$field_leg = $indfields[$field_ids[$i]]['leg'];
// date
if (in_array($field_name, array(
'user_lastvisit',
'user_regdate',
'user_birthday',
) ))
{
$field_leg .= ' (AAAAMMJJ)';
}
// gender
if (in_array($field_name, array(
'user_gender',
) ))
{
$field_leg .= ' (' . UNKNOWN . '=' . $lang['No_gender_specify'] . ', ' . MALE . '=' . $lang['Male'] . ', ' . FEMALE . '=' . $lang['Female'] . ')';
}
$s_filter .= '<option value="' . $field_name . '"' . $select . '>' . $field_leg . '</option>';
}
// fields
$template->assign_block_vars('header_list', array(
'L_FIELD' => $indfields[$field_ids[$i]]['leg'],
'ICON_SORT' => $icon_sort,
)
);
}
$s_filter .= '</select>';
// operand
$s_comp = '<select name="comp">';
while ( list($key, $value) = each($operators) )
{
$select = ($comp == $key) ? ' selected="selected"' : '';
$s_comp .= '<option value="' . $key . '"' . $select . '>' . $value . '</option>';
}
$s_comp .= '</select>';
// read the users
$view_user_id = $view_userdata['user_id'];
$view_is_admin = is_admin($view_userdata);
$floor_time = time()-300;
// get list of field for the group by clause
$sql_group_by_list = '';
// get a list of field of the users table
$sql = "SELECT * FROM " . USERS_TABLE;
if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, "Could not read user informations", '', __LINE__, __FILE__, $sql);
$row = $db->sql_fetchrow($result);
while (list($key, $val) = each($row)) if (!is_numeric($key)) $sql_group_by_list .= (($sql_group_by_list != '') ? ', ' : '') . 'u.' . $key;
// get user relational status
$sql_user_my_friend = "(CASE WHEN i.buddy_ignore = 0 THEN 1 ELSE 0 END)";
$sql_user_my_ignore = "(CASE WHEN i.buddy_ignore = 1 THEN 1 ELSE 0 END)";
$sql_user_my_visible = "(CASE WHEN i.buddy_visible = 1 THEN 1 ELSE 0 END)";
$sql_user_friend = "(CASE WHEN b.buddy_ignore = 0 THEN 1 ELSE 0 END)";
$sql_user_ignore = "(CASE WHEN b.buddy_ignore = 1 THEN 1 ELSE 0 END)";
$sql_user_visible = "(CASE WHEN b.buddy_visible = 1 THEN 1 ELSE 0 END)";
// get the status of each info
$sql_online_display = "(CASE WHEN (u.user_id = $view_user_id) OR ( ($sql_user_my_ignore <> 1) AND ( ($sql_user_visible = 1) OR ( (u.user_allow_viewonline = " . YES . ") OR ( (u.user_allow_viewonline = " . FRIEND_ONLY . ") AND ($sql_user_friend = 1) ) ) ) ) THEN 1 ELSE 0 END)";
$sql_email_display = "(CASE WHEN (u.user_id = $view_user_id) OR ( ($sql_user_my_ignore <> 1) AND ( ('" . $view_userdata['user_allow_email'] . "' = '1') AND (u.user_allow_email = 1) AND ( (u.user_viewemail = " . YES . ") OR ( (u.user_viewemail = " . FRIEND_ONLY . ") AND ($sql_user_friend = 1) ) ) ) ) THEN 1 ELSE 0 END)";
$sql_pm_display = "(CASE WHEN (u.user_id = $view_user_id) OR ( ($sql_user_my_ignore <> 1) AND ( ('" . $view_userdata['user_allow_pm'] . "' = '1') AND (u.user_allow_pm = 1) AND ( (u.user_viewpm = " . YES . ") OR ( (u.user_viewpm = " . FRIEND_ONLY . ") AND ($sql_user_friend = 1) ) ) ) ) THEN 1 ELSE 0 END)";
$sql_www_display = "(CASE WHEN (u.user_id = $view_user_id) OR ( ($sql_user_my_ignore <> 1) AND ( ('" . $view_userdata['user_allow_website'] . "' = '1') AND (u.user_allow_website = 1) AND ( (u.user_viewwebsite = " . YES . ") OR ( (u.user_viewwebsite = " . FRIEND_ONLY . ") AND ($sql_user_friend = 1) ) ) ) ) THEN 1 ELSE 0 END)";
$sql_messanger_display = "(CASE WHEN (u.user_id = $view_user_id) OR ( ($sql_user_my_ignore <> 1) AND ( ('" . $view_userdata['user_allow_messanger'] . "' = '1') AND (u.user_allow_messanger = 1) AND ( (u.user_viewmessanger = " . YES . ") OR ( (u.user_viewmessanger = " . FRIEND_ONLY . ") AND ($sql_user_friend = 1) ) ) ) ) THEN 1 ELSE 0 END)";
$sql_real_display = "(CASE WHEN (u.user_id = $view_user_id) OR ( ($sql_user_my_ignore <> 1) AND ( ('" . $view_userdata['user_allow_real'] . "' = '1') AND (u.user_allow_real = 1) AND ( (u.user_viewreal = " . YES . ") OR ( (u.user_viewreal = " . FRIEND_ONLY . ") AND ($sql_user_friend = 1) ) ) ) ) THEN 1 ELSE 0 END)";
// admin looking
$admin = is_admin($userdata);
if ($admin)
{
$sql_online_display = '1';
$sql_email_display = '1';
$sql_pm_display = '1';
$sql_www_display = '1';
$sql_messanger_display = '1';
$sql_real_display = '1';
}
// online indicator
$sql_user_online = "(CASE WHEN (u.user_session_time >= $floor_time) AND ($sql_online_display = 1) THEN 1 ELSE 0 END)";
$sql_user_pm = $sql_pm_display;
//
// Define appropriate SQL
//
switch(SQL_LAYER)
{
case 'postgresql':
$sql_user_rank_id = "(CASE WHEN u.user_rank = 0 THEN SUBSTRING(MAX( LPAD(nr.rank_min,8,'0') || nr.rank_id), 9) ELSE u.user_rank END)";
$sql_user_rank_title = "(CASE WHEN $sql_www_display = 1 THEN ( COALESCE( sr.rank_title, SUBSTRING(MAX(LPAD(nr.rank_min,8,'0') || nr.rank_title), 9) ) ) ELSE '' END)";
$sql_user_rank_title2 = $sql_user_rank_title;
$sql_user_my_friend2 = $sql_user_my_friend;
$sql_group_by_list .= ', b.buddy_visible, b.buddy_ignore, i.buddy_ignore, i.buddy_visible';
$sql_group_by_list .= ', sr.rank_title';
break;
default:
$sql_user_rank_id = "(CASE WHEN (u.user_rank = 0) AND ($sql_www_display = 1) THEN SUBSTRING(MAX(CONCAT(LPAD(nr.rank_min,8,'0'), nr.rank_id)), 9) ELSE u.user_rank END)";
$sql_user_rank_title = "(CASE WHEN ($sql_www_display = 1) THEN ( COALESCE(sr.rank_title, SUBSTRING(MAX(CONCAT(LPAD(nr.rank_min,8,'0'), nr.rank_title)), 9)) ) ELSE '' END)";
$sql_rank_title2 = '';
$sql_user_my_friend2 = '';
$sql_group_by_list = 'u.user_id';
break;
}
//
// fields added (last first) :
//
$sql_fields = '';
@reset($user_fields);
while ( list($field_name, $field) = each($user_fields) )
{
// default value if not allowed
$def_value = "''";
switch ($field['type'])
{
case 'VARCHAR':
case 'TEXT':
$def_value = "''";
break;
case 'TINYINT':
case 'SMALLINT':
case 'MEDIUMINT':
case 'INT':
case 'BIGINT':
$def_value = "0";
break;
default:
message_die(CRITICAL_ERROR, 'Field type unknown');
break;
}
// switch field name
$class_field = '';
switch ($field['class'])
{
case 'generic': break;
case 'special': break;
case 'viewonline': $class_field = $sql_online_display; break;
case 'email': $class_field = $sql_email_display; break;
case 'pm': $class_field = $sql_pm_display; break;
case 'webdisplay': $class_field = $sql_www_display; break;
case 'messangers': $class_field = $sql_messanger_display; break;
case 'real': $class_field = $sql_real_display;break;
case 'avatar': break;
case 'signature': break;
default:
message_die(CRITICAL_ERROR, 'Field class unknown');
break;
}
// sql field def
if ($class_field != '')
{
$$field_name = "(CASE WHEN " . $class_field . "=1 THEN u." . $field_name . " ELSE $def_value END)";
$sql_fields .= ", " . $$field_name . " as " . $field_name . "_virt";
}
else
{
switch ($field_name)
{
case 'user_pm': $$field_name = "(CASE WHEN " . $sql_pm_display . " = 1 THEN " . $sql_user_pm . " ELSE " . $def_value . " END)"; $sql_fields .= ", " . $$field_name . " as user_pm"; break;
case 'user_my_friend': $$field_name = $sql_user_my_friend; $sql_fields .= ", " . $$field_name . " as user_my_friend"; break;
case 'user_online': $$field_name = $sql_user_online; $sql_fields .= ", " . $$field_name . " as user_online"; break;
case 'user_rank_title': $$field_name = $sql_user_rank_title; $sql_fields .= ", " . $$field_name . " as user_rank_title"; break;
default: break;
}
}
}
\n $sql = "SELECT DISTINCT u.*,
$sql_online_display as user_online_display,
$sql_email_display as user_email_display,
$sql_pm_display as user_pm_display,
$sql_www_display as user_www_display,
$sql_messanger_display as user_messanger_display,
$sql_real_display as user_real_display,
$sql_user_my_friend as user_my_friend,
$sql_user_my_ignore as user_my_ignore,
$sql_user_my_visible as user_my_visible,
$sql_user_friend as user_friend,
$sql_user_ignore as user_ignore,
$sql_user_visible as user_visible
$sql_fields
FROM ((((" . USERS_TABLE . " as u
LEFT JOIN " . BUDDYS_TABLE . " as b ON b.user_id=u.user_id AND b.buddy_id=$view_user_id)
LEFT JOIN " . BUDDYS_TABLE . " as i ON i.user_id=$view_user_id AND i.buddy_id=u.user_id)
LEFT JOIN " . RANKS_TABLE . " as sr ON u.user_rank > 0 AND sr.rank_special = 1 AND u.user_rank = sr.rank_id)
LEFT JOIN " . RANKS_TABLE . " as nr ON u.user_rank = 0 AND nr.rank_special = 0 AND nr.rank_min <= u.user_posts)
WHERE u.user_id <> " . ANONYMOUS;
// friend list
if ($friend_list)
{
$sql .= " AND i.buddy_ignore = 0";
}
// ignore list
if ($ignore_list)
{
$sql .= " AND i.buddy_ignore = 1";
}
// filter
$sql_having = '';
if ($fvalue != '')
{
$val = $fvalue;
$t_comp = $comp;
$t_filter = $filter;
// date format
switch ($filter)
{
// full datetime
case 'user_lastvisit':
case 'user_regdate':
$t_filter = $$t_filter;
$val1 = mktime( 0, 0, 1, intval(substr($val, 4, 2)), intval(substr($val, 6, 2)), intval(substr($val, 0, 4)) );
$val2 = mktime( 23, 59, 59, intval(substr($val, 4, 2)), intval(substr($val, 6, 2)), intval(substr($val, 0, 4)) );
switch($t_comp)
{
case 'EQ':
case 'IN': $t_comp = 'RG'; break;
case 'NE':
case 'NI': $t_comp = 'NR'; break;
case 'LE': $val= $val2;
default: $val=$val1;
}
break;
// date only
case 'user_birthday':
$t_filter = $$t_filter;
$val = intval($val);
break;
// new field
case 'user_pm' :
case 'user_online' :
$t_filter = $$t_filter;
$val = $fvalue;
break;
case 'user_my_friend' :
$t_filter = ($sql_my_friend_2 != '') ? $sql_user_my_friend2 : $t_filter;
$val = $fvalue;
break;
// matched fields
case 'user_rank_title':
$t_filter = ($sql_user_rank_title2 != '') ? $sql_user_rank_title2 : 'user_rank_title';
$val = $fvalue;
break;
default:
if ( !in_array($user_fields[$filter]['class'], array('special', 'generic')) ) $t_filter = $$t_filter;
if ( $user_fields[$filter]['class'] == 'generic' ) $t_filter = 'u.' . $t_filter;
$val = $fvalue;
break;
}
// filter on accessible field
switch ($t_comp)
{
case 'RG': $sql_having = " HAVING $t_filter >= '" . $val1 . "' AND $t_filter <= '" . $val2 . "'"; break;
case 'NR': $sql_having = " HAVING ($t_filter < '" . $val1 . "' OR $t_filter > '" . $val2 . "')"; break;
case 'LE': $sql_having = " HAVING $t_filter <= '" . $val . "'"; break;
case 'EQ': $sql_having = " HAVING $t_filter = '" . $val . "'"; break;
case 'NE': $sql_having = " HAVING $t_filter <> '" . $val . "'"; break;
case 'GE': $sql_having = " HAVING $t_filter >= '" . $val . "'"; break;
case 'IN': $sql_having = " HAVING $t_filter LIKE '%" . $val . "%'"; break;
case 'NI': $sql_having = " HAVING $t_filter NOT LIKE '%" . $val . "%'"; break;
default: $sql_having = " HAVING $t_filter LIKE '%" . $val . "%'"; break;
}
}
// set the group by clause
$sql_group_by = " GROUP BY $sql_group_by_list";
// convert field name to virtual
$real_order = $order;
if ( !in_array($user_fields[$real_order]['class'], array('generic', 'special')) ) $real_order .= '_virt';
if ( $user_fields[$real_order]['class'] == 'generic') $real_order = 'u.' . $real_order;
// get the order
$sql_order .= " ORDER BY " . ( ($user_fields[$order]['sortable']) ? " $real_order $sort," : '' ) . " u.username ASC";
// build the request
$sql .= $sql_group_by . $sql_having . $sql_order;
// read the number of row
if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, "Could not read user informations", '', __LINE__, __FILE__, $sql);
$total_users = $db->sql_numrows($result);
$sql .= " LIMIT $start, " . $board_config['topics_per_page'];
if ( !($result = $db->sql_query($sql)) ) message_die(GENERAL_ERROR, "Could not read user informations", '', __LINE__, __FILE__, $sql);
$users = array();
while ($row = $db->sql_fetchrow($result)) $users[] = $row;
$admin = is_admin($userdata);
for ($i = 0; $i < count($users); $i++)
{
$row = $users[$i];
$txtclass = get_user_level_class( $row['user_level'], 'genmed', $row );
$temp_url = append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']);
$row['username'] = '<a href="' . $temp_url . '" class="' . $txtclass . '">' . $row['username'] . '</a>';
$row['user_lastvisit_virt'] = ($row['user_lastvisit_virt'] != 0) ? create_date($userdata['user_dateformat'], $row['user_lastvisit_virt'], $userdata['user_timezone']) : '';
$row['user_regdate_virt'] = ($row['user_regdate_virt'] != 0) ? create_date($lang['DATE_FORMAT'], $row['user_regdate_virt'], $userdata['user_timezone']) : '';
if (!$row['user_online_display']) $row['user_posts_virt'] = '';
// friend/always visible
if ($row['user_my_friend'])
{
$temp_url = append_sid( "profile.$phpEx?mode=$mode&sub=$sub&b=" . $row['user_id'] . "&set=" . ( ($row['user_my_visible']) ? 'inv' : 'vis') );
$title = ($row['user_my_visible']) ? $lang['Always_visible'] : $lang['Not_always_visible'];
$img = ( $row['user_my_visible'] ) ? $images['icon_visible'] : $images['icon_not_visible'];
$row['user_my_friend'] = '<a href="' . $temp_url . '"><img src="' . $img . '" border="0" alt="' . $title . '"></a>';
}
else $row['user_my_friend'] = '';
// online/offline/hidden
$img = 'offline';
if ($row['user_online_display'] && $row['user_online'])
{
$img = 'hidden';
if ($row['user_allow_viewonline'] == YES) $img = 'online';
}
switch ($img)
{
case 'offline':
$online_img = '<img src="' . $images['icon_offline'] . '" border="0" align="absbottom" alt="' . $lang['Offline'] . '" title="' . $lang['Offline'] . '">';
break;
case 'online':
$online_img = '<img src="' . $images['icon_online'] . '" border="0" align="absbottom" alt="' . $lang['Online'] . '" title="' . $lang['Online'] . '">';
break;
case 'hidden':
$online_img = '<img src="' . $images['icon_hidden'] . '" border="0" align="absbottom" alt="' . $lang['Hidden'] . '" title="' . $lang['Hidden'] . '">';
break;
}
$row['user_online'] = $online_img;
// pm
if ($row['user_pm'])
{
$temp_url = append_sid("privmsg.$phpEx?mode=post&" . POST_USERS_URL . "=" . $row['user_id']);
$row['user_pm'] = '<a href="' . $temp_url . '"><img src="' . $images['icon_pm'] . '" alt="' . $lang['Send_private_message'] . '" title="' . $lang['Send_private_message'] . '" border="0" /></a>';
}
else $row['user_pm'] = '';
// email
if ($row['user_email_virt'])
{
$email_uri = ( $board_config['board_email_form'] ) ? append_sid("profile.$phpEx?mode=email&" . POST_USERS_URL .'=' . $row['user_id']) : 'mailto:' . $row['user_email_virt'];
$row['user_email_virt'] = '<a href="' . $email_uri . '"><img src="' . $images['icon_email'] . '" alt="' . $lang['Send_email'] . '" title="' . $lang['Send_email'] . '" border="0" /></a>' . ( ($board_config['board_email_form'] && !is_admin($userdata)) ? '' : '<span class="gensmall"><br />' . $row['user_email_virt'] . '</span>' );
}
else $row['user_email_virt'] = '';
//
// www
//
// web site
$row['user_website_virt'] = ($row['user_website_virt']) ? '<a href="' . $row['user_website_virt'] . '" target="_userwww"><img src="' . $images['icon_www'] . '" alt="' . $lang['Visit_website'] . '" title="' . $lang['Visit_website'] . '" border="0" /></a><span class="gensmall"><br />' . $row['user_website_virt'] . '</span>' : '';
// timezone lib
if ($row['user_timezone_virt'])
{
$found = false;
@reset($lang['tz']);
while ((list($tz,$lib) = @each($lang['tz'])) && !$found)
{
$found = ($tz == $row['user_timezone_virt']);
if ($found) $row['user_timezone_virt'] = $lib;
}
}
else $row['user_timezone_virt'] = '';
//
// messanger
//
// icq
$row['user_icq_status'] = '';
if ($row['user_icq_virt'])
{
$row['user_icq_status'] = '<a href="http://wwp.icq.com/' . $row['user_icq_virt'] . '#pager"><img src="http://web.icq.com/whitepages/online?icq=' . $row['user_icq_virt'] . '&img=5" width="18" height="18" border="0" /></a>';
$row['user_icq_virt'] = '<a href="http://wwp.icq.com/scripts/search.dll?to=' . $row['user_icq_virt'] . '"><img src="' . $images['icon_icq'] . '" alt="' . $lang['ICQ'] . '" title="' . $lang['ICQ'] . '" border="0" /></a><span class="gensmall"><br />' . $row['user_icq_virt'] . '</span>';
}
// aim
if ($row['user_aim_virt'])
{
$row['user_aim_virt'] = '<a href="aim:goim?screenname=' . $row['user_aim_virt'] . '&message=Hello+Are+you+there?"><img src="' . $images['icon_aim'] . '" alt="' . $lang['AIM'] . '" title="' . $lang['AIM'] . '" border="0" /></a><span class="gensmall"><br />' . $row['user_aim_virt'] . '</span>';
}
// msn
if ($row['user_msnm_virt'])
{
$row['user_msnm_virt'] = '<img src="' . $images['icon_msnm'] . '" alt="' . $row['user_msnm_virt'] . '" title="' . $lang['MSNM'] . '" border="0" /><span class="gensmall"><br />' . $row['user_msnm_virt'] . '</span>';
}
// yim
if ($row['user_yim_virt'])
{
$row['user_yim_virt'] = '<a href="http://edit.yahoo.com/config/send_webmesg?.target=' . $row['user_yim_virt'] . '&.src=pg"><img src="' . $images['icon_yim'] . '" alt="' . $lang['YIM'] . '" title="' . $lang['YIM'] . '" border="0" /></a><span class="gensmall"><br />' . $row['user_yim_virt'] . '</span>';
}
//
// real life informations
//
// birthday
if (intval($row['user_birthday_virt']) != 0)
{
$temp_url = append_sid("privmsg.$phpEx?mode=post&" . POST_USERS_URL . "=" . $row['user_id']);
$row['user_birthday_img'] = ( intval(substr($row['user_birthday_virt'], 4,4)) == date('md', time()) ) ? ( ($row['user_pm']) ? '<a href="' . $temp_url . '">' : '' ) . '<img src="' . $images['icon_birthday'] . '" border="0" alt="' . $lang['Happy_birthday'] . '" title="' . $lang['Happy_birthday'] . '">' . ( ($row['user_pm']) ? '</a>' : '' ) : '';
\n $row['user_birthday_virt'] = ( ($row['user_birthday_img'] != '') ? $row['user_birthday_img'] . "<br />" : '') . create_birthday_date($lang['DATE_FORMAT'], $row['user_birthday_virt'], $userdata['user_timezone']);
}
else
{
$row['user_birthday_img'] = '';
$row['user_birthday_virt'] = '';
}
// rank
if ($row['user_rank_title'])
{
$rank_data = array();
$rank_data = get_user_rank($row);
$row['user_rank_title'] = $rank_data['rank_title'] . ( ($rank_data['rank_image'] != '') ? '<br />' . $rank_data['rank_image'] : '');
}
// gender
switch ($row['user_gender_virt'])
{
case 1 : $row['user_gender_virt'] = $lang['Male']; break;
case 2 : $row['user_gender_virt'] = $lang['Female']; break;
default : $row['user_gender_virt'] = ($row['user_real_display']) ? $lang['No_gender_specify'] : ''; break;
}
$users[$i] = $row;
}
// display the users
$class = false;
for ($i=0; $i < count($users); $i++ )
{
$class = !$class;
$template->assign_block_vars('userrow', array(
'CLASS' => ($class) ? "row1" : "row2",
'NUMBER' => $i+1+$start,
)
);
for ($j=0; $j < count($field_ids); $j++)
{
$field_name = $indfields[$field_ids[$j]]['field'];
if ( !in_array($user_fields[$field_name]['class'], array('generic', 'special')) ) $field_name .= '_virt';
$template->assign_block_vars('userrow.user_list', array(
'FIELD' => $users[$i][$field_name],
)
);
}
if ($friend_list || $ignore_list)
{
$template->assign_block_vars('userrow.select', array(
'USER_ID' => $users[$i]['user_id'],
'CHECKED' => '',
)
);
}
}
// number of col
$col = count($field_ids) + 1;
if ($friend_list || $ignore_list) $col++;
if ($friend_list || $ignore_list)
{
$template->assign_block_vars('select', array());
}
$template->assign_vars(array(
'L_USER_FIELDS' => $lang['User_fields'],
'COLSPAN' => $nb_cell,
'DOWN_ARROW' => $images['down_arrow'],
'UP_ARROW' => $images['up_arrow'],
'L_FILTER_FIELDS' => $lang['Select'],
'S_FILTER_FIELDS' => $s_filter,
'S_COMP' => $s_comp,
'FILTER' => $fvalue,
'ROW_SPAN' => $col,
'L_SUBMIT' => $lang['Submit'],
'L_RESET' => $lang['Reset'],
'L_GO' => $lang['Go'],
'L_SELECT' => $lang['Select'],
'L_ADD_MEMBER' => $lang['Add_member'],
'L_FIND_USERNAME' => $lang['Find_username'],
'L_REMOVE_SELECTED' => $lang['Remove_selected'],
)
);
// call url
$call = "profile.$phpEx?mode=buddy&sub=$sub";
if ($order != '' ) $call .= "&order=$order";
if ($sort != '') $call .= "&sort=$sort";
$call .= "&filter=$filter";
$call .= "&comp=$comp";
if ($fvalue != '') $call .= "&fvalue=$fvalue";
$call = append_sid($call);
$template->assign_vars(array(
'PAGINATION' => generate_pagination($call, $total_users, $board_config['topics_per_page'], $start),
'PAGE_NUMBER' => sprintf($lang['Page_of'], ( floor( $start / $board_config['topics_per_page'] ) + 1 ), ceil( $total_users / $board_config['topics_per_page'] )),
'L_GOTO_PAGE' => $lang['Goto_page'],
'S_HIDDEN_FIELDS' => $s_hidden_fields,
'U_SEARCH_USER' => append_sid("search.$phpEx?mode=searchuser"),
'S_PROFILCP_ACTION' => append_sid("profile.$phpEx"),
)
);
// page
$template->pparse('body');
}
?>