/Forum/includes/auth.php |
---|
0,0 → 1,328 |
<?php |
/*************************************************************************** |
* auth.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: auth.php,v 1.37.2.7 2006/03/06 17:28:51 grahamje Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
***************************************************************************/ |
/* |
$type's accepted (pre-pend with AUTH_): |
VIEW, READ, POST, REPLY, EDIT, DELETE, STICKY, ANNOUNCE, VOTE, POLLCREATE |
Possible options ($type/forum_id combinations): |
* If you include a type and forum_id then a specific lookup will be done and |
the single result returned |
* If you set type to AUTH_ALL and specify a forum_id an array of all auth types |
will be returned |
* If you provide a forum_id a specific lookup on that forum will be done |
* If you set forum_id to AUTH_LIST_ALL and specify a type an array listing the |
results for all forums will be returned |
* If you set forum_id to AUTH_LIST_ALL and type to AUTH_ALL a multidimensional |
array containing the auth permissions for all types and all forums for that |
user is returned |
All results are returned as associative arrays, even when a single auth type is |
specified. |
If available you can send an array (either one or two dimensional) containing the |
forum auth levels, this will prevent the auth function having to do its own |
lookup |
*/ |
function auth($type, $forum_id, $userdata, $f_access = '') |
{ |
global $db, $lang; |
switch( $type ) |
{ |
case AUTH_ALL: |
$a_sql = 'a.auth_view, a.auth_read, a.auth_post, a.auth_reply, a.auth_edit, a.auth_delete, a.auth_sticky, a.auth_announce, a.auth_vote, a.auth_pollcreate'; |
$auth_fields = array('auth_view', 'auth_read', 'auth_post', 'auth_reply', 'auth_edit', 'auth_delete', 'auth_sticky', 'auth_announce', 'auth_vote', 'auth_pollcreate'); |
break; |
case AUTH_VIEW: |
$a_sql = 'a.auth_view'; |
$auth_fields = array('auth_view'); |
break; |
case AUTH_READ: |
$a_sql = 'a.auth_read'; |
$auth_fields = array('auth_read'); |
break; |
case AUTH_POST: |
$a_sql = 'a.auth_post'; |
$auth_fields = array('auth_post'); |
break; |
case AUTH_REPLY: |
$a_sql = 'a.auth_reply'; |
$auth_fields = array('auth_reply'); |
break; |
case AUTH_EDIT: |
$a_sql = 'a.auth_edit'; |
$auth_fields = array('auth_edit'); |
break; |
case AUTH_DELETE: |
$a_sql = 'a.auth_delete'; |
$auth_fields = array('auth_delete'); |
break; |
case AUTH_ANNOUNCE: |
$a_sql = 'a.auth_announce'; |
$auth_fields = array('auth_announce'); |
break; |
case AUTH_STICKY: |
$a_sql = 'a.auth_sticky'; |
$auth_fields = array('auth_sticky'); |
break; |
case AUTH_POLLCREATE: |
$a_sql = 'a.auth_pollcreate'; |
$auth_fields = array('auth_pollcreate'); |
break; |
case AUTH_VOTE: |
$a_sql = 'a.auth_vote'; |
$auth_fields = array('auth_vote'); |
break; |
case AUTH_ATTACH: |
break; |
default: |
break; |
} |
// |
// If f_access has been passed, or auth is needed to return an array of forums |
// then we need to pull the auth information on the given forum (or all forums) |
// |
if ( empty($f_access) ) |
{ |
$forum_match_sql = ( $forum_id != AUTH_LIST_ALL ) ? "WHERE a.forum_id = $forum_id" : ''; |
$sql = "SELECT a.forum_id, $a_sql |
FROM " . FORUMS_TABLE . " a |
$forum_match_sql"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Failed obtaining forum access control lists', '', __LINE__, __FILE__, $sql); |
} |
$sql_fetchrow = ( $forum_id != AUTH_LIST_ALL ) ? 'sql_fetchrow' : 'sql_fetchrowset'; |
if ( !($f_access = $db->$sql_fetchrow($result)) ) |
{ |
$db->sql_freeresult($result); |
return array(); |
} |
$db->sql_freeresult($result); |
} |
// |
// If the user isn't logged on then all we need do is check if the forum |
// has the type set to ALL, if yes they are good to go, if not then they |
// are denied access |
// |
$u_access = array(); |
if ( $userdata['session_logged_in'] ) |
{ |
$forum_match_sql = ( $forum_id != AUTH_LIST_ALL ) ? "AND a.forum_id = $forum_id" : ''; |
$sql = "SELECT a.forum_id, $a_sql, a.auth_mod |
FROM " . AUTH_ACCESS_TABLE . " a, " . USER_GROUP_TABLE . " ug |
WHERE ug.user_id = ".$userdata['user_id']. " |
AND ug.user_pending = 0 |
AND a.group_id = ug.group_id |
$forum_match_sql"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Failed obtaining forum access control lists', '', __LINE__, __FILE__, $sql); |
} |
if ( $row = $db->sql_fetchrow($result) ) |
{ |
do |
{ |
if ( $forum_id != AUTH_LIST_ALL) |
{ |
$u_access[] = $row; |
} |
else |
{ |
$u_access[$row['forum_id']][] = $row; |
} |
} |
while( $row = $db->sql_fetchrow($result) ); |
} |
$db->sql_freeresult($result); |
} |
$is_admin = ( $userdata['user_level'] == ADMIN && $userdata['session_logged_in'] ) ? TRUE : 0; |
$auth_user = array(); |
for($i = 0; $i < count($auth_fields); $i++) |
{ |
$key = $auth_fields[$i]; |
// |
// If the user is logged on and the forum type is either ALL or REG then the user has access |
// |
// If the type if ACL, MOD or ADMIN then we need to see if the user has specific permissions |
// to do whatever it is they want to do ... to do this we pull relevant information for the |
// user (and any groups they belong to) |
// |
// Now we compare the users access level against the forums. We assume here that a moderator |
// and admin automatically have access to an ACL forum, similarly we assume admins meet an |
// auth requirement of MOD |
// |
if ( $forum_id != AUTH_LIST_ALL ) |
{ |
$value = $f_access[$key]; |
switch( $value ) |
{ |
case AUTH_ALL: |
$auth_user[$key] = TRUE; |
$auth_user[$key . '_type'] = $lang['Auth_Anonymous_Users']; |
break; |
case AUTH_REG: |
$auth_user[$key] = ( $userdata['session_logged_in'] ) ? TRUE : 0; |
$auth_user[$key . '_type'] = $lang['Auth_Registered_Users']; |
break; |
case AUTH_ACL: |
$auth_user[$key] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_ACL, $key, $u_access, $is_admin) : 0; |
$auth_user[$key . '_type'] = $lang['Auth_Users_granted_access']; |
break; |
case AUTH_MOD: |
$auth_user[$key] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_MOD, 'auth_mod', $u_access, $is_admin) : 0; |
$auth_user[$key . '_type'] = $lang['Auth_Moderators']; |
break; |
case AUTH_ADMIN: |
$auth_user[$key] = $is_admin; |
$auth_user[$key . '_type'] = $lang['Auth_Administrators']; |
break; |
default: |
$auth_user[$key] = 0; |
break; |
} |
} |
else |
{ |
for($k = 0; $k < count($f_access); $k++) |
{ |
$value = $f_access[$k][$key]; |
$f_forum_id = $f_access[$k]['forum_id']; |
$u_access[$f_forum_id] = isset($u_access[$f_forum_id]) ? $u_access[$f_forum_id] : array(); |
switch( $value ) |
{ |
case AUTH_ALL: |
$auth_user[$f_forum_id][$key] = TRUE; |
$auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Anonymous_Users']; |
break; |
case AUTH_REG: |
$auth_user[$f_forum_id][$key] = ( $userdata['session_logged_in'] ) ? TRUE : 0; |
$auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Registered_Users']; |
break; |
case AUTH_ACL: |
$auth_user[$f_forum_id][$key] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_ACL, $key, $u_access[$f_forum_id], $is_admin) : 0; |
$auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Users_granted_access']; |
break; |
case AUTH_MOD: |
$auth_user[$f_forum_id][$key] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_MOD, 'auth_mod', $u_access[$f_forum_id], $is_admin) : 0; |
$auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Moderators']; |
break; |
case AUTH_ADMIN: |
$auth_user[$f_forum_id][$key] = $is_admin; |
$auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Administrators']; |
break; |
default: |
$auth_user[$f_forum_id][$key] = 0; |
break; |
} |
} |
} |
} |
// |
// Is user a moderator? |
// |
if ( $forum_id != AUTH_LIST_ALL ) |
{ |
$auth_user['auth_mod'] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_MOD, 'auth_mod', $u_access, $is_admin) : 0; |
} |
else |
{ |
for($k = 0; $k < count($f_access); $k++) |
{ |
$f_forum_id = $f_access[$k]['forum_id']; |
$u_access[$f_forum_id] = isset($u_access[$f_forum_id]) ? $u_access[$f_forum_id] : array(); |
$auth_user[$f_forum_id]['auth_mod'] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_MOD, 'auth_mod', $u_access[$f_forum_id], $is_admin) : 0; |
} |
} |
return $auth_user; |
} |
function auth_check_user($type, $key, $u_access, $is_admin) |
{ |
$auth_user = 0; |
if ( count($u_access) ) |
{ |
for($j = 0; $j < count($u_access); $j++) |
{ |
$result = 0; |
switch($type) |
{ |
case AUTH_ACL: |
$result = $u_access[$j][$key]; |
case AUTH_MOD: |
$result = $result || $u_access[$j]['auth_mod']; |
case AUTH_ADMIN: |
$result = $result || $is_admin; |
break; |
} |
$auth_user = $auth_user || $result; |
} |
} |
else |
{ |
$auth_user = $is_admin; |
} |
return $auth_user; |
} |
?> |
/Forum/includes/bbcode.php |
---|
0,0 → 1,790 |
<?php |
/*************************************************************************** |
* bbcode.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: bbcode.php,v 1.36.2.41 2006/02/26 17:34:50 grahamje Exp $ |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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"); |
} |
define("BBCODE_UID_LEN", 10); |
// global that holds loaded-and-prepared bbcode templates, so we only have to do |
// that stuff once. |
$bbcode_tpl = null; |
/** |
* Loads bbcode templates from the bbcode.tpl file of the current template set. |
* Creates an array, keys are bbcode names like "b_open" or "url", values |
* are the associated template. |
* Probably pukes all over the place if there's something really screwed |
* with the bbcode.tpl file. |
* |
* Nathan Codding, Sept 26 2001. |
*/ |
function load_bbcode_template() |
{ |
global $template; |
$tpl_filename = $template->make_filename('bbcode.tpl'); |
$tpl = fread(fopen($tpl_filename, 'r'), filesize($tpl_filename)); |
// replace \ with \\ and then ' with \'. |
$tpl = str_replace('\\', '\\\\', $tpl); |
$tpl = str_replace('\'', '\\\'', $tpl); |
// strip newlines. |
$tpl = str_replace("\n", '', $tpl); |
// Turn template blocks into PHP assignment statements for the values of $bbcode_tpls.. |
$tpl = preg_replace('#<!-- BEGIN (.*?) -->(.*?)<!-- END (.*?) -->#', "\n" . '$bbcode_tpls[\'\\1\'] = \'\\2\';', $tpl); |
$bbcode_tpls = array(); |
eval($tpl); |
return $bbcode_tpls; |
} |
/** |
* Prepares the loaded bbcode templates for insertion into preg_replace() |
* or str_replace() calls in the bbencode_second_pass functions. This |
* means replacing template placeholders with the appropriate preg backrefs |
* or with language vars. NOTE: If you change how the regexps work in |
* bbencode_second_pass(), you MUST change this function. |
* |
* Nathan Codding, Sept 26 2001 |
* |
*/ |
function prepare_bbcode_template($bbcode_tpl) |
{ |
global $lang; |
$bbcode_tpl['olist_open'] = str_replace('{LIST_TYPE}', '\\1', $bbcode_tpl['olist_open']); |
$bbcode_tpl['color_open'] = str_replace('{COLOR}', '\\1', $bbcode_tpl['color_open']); |
$bbcode_tpl['size_open'] = str_replace('{SIZE}', '\\1', $bbcode_tpl['size_open']); |
$bbcode_tpl['quote_open'] = str_replace('{L_QUOTE}', $lang['Quote'], $bbcode_tpl['quote_open']); |
$bbcode_tpl['quote_username_open'] = str_replace('{L_QUOTE}', $lang['Quote'], $bbcode_tpl['quote_username_open']); |
$bbcode_tpl['quote_username_open'] = str_replace('{L_WROTE}', $lang['wrote'], $bbcode_tpl['quote_username_open']); |
$bbcode_tpl['quote_username_open'] = str_replace('{USERNAME}', '\\1', $bbcode_tpl['quote_username_open']); |
$bbcode_tpl['code_open'] = str_replace('{L_CODE}', $lang['Code'], $bbcode_tpl['code_open']); |
$bbcode_tpl['img'] = str_replace('{URL}', '\\1', $bbcode_tpl['img']); |
// We do URLs in several different ways.. |
$bbcode_tpl['url1'] = str_replace('{URL}', '\\1', $bbcode_tpl['url']); |
$bbcode_tpl['url1'] = str_replace('{DESCRIPTION}', '\\1', $bbcode_tpl['url1']); |
$bbcode_tpl['url2'] = str_replace('{URL}', 'http://\\1', $bbcode_tpl['url']); |
$bbcode_tpl['url2'] = str_replace('{DESCRIPTION}', '\\1', $bbcode_tpl['url2']); |
$bbcode_tpl['url3'] = str_replace('{URL}', '\\1', $bbcode_tpl['url']); |
$bbcode_tpl['url3'] = str_replace('{DESCRIPTION}', '\\2', $bbcode_tpl['url3']); |
$bbcode_tpl['url4'] = str_replace('{URL}', 'http://\\1', $bbcode_tpl['url']); |
$bbcode_tpl['url4'] = str_replace('{DESCRIPTION}', '\\3', $bbcode_tpl['url4']); |
$bbcode_tpl['email'] = str_replace('{EMAIL}', '\\1', $bbcode_tpl['email']); |
define("BBCODE_TPL_READY", true); |
return $bbcode_tpl; |
} |
/** |
* Does second-pass bbencoding. This should be used before displaying the message in |
* a thread. Assumes the message is already first-pass encoded, and we are given the |
* correct UID as used in first-pass encoding. |
*/ |
function bbencode_second_pass($text, $uid) |
{ |
global $lang, $bbcode_tpl; |
$text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $text); |
// pad it with a space so we can distinguish between FALSE and matching the 1st char (index 0). |
// This is important; bbencode_quote(), bbencode_list(), and bbencode_code() all depend on it. |
$text = " " . $text; |
// First: If there isn't a "[" and a "]" in the message, don't bother. |
if (! (strpos($text, "[") && strpos($text, "]")) ) |
{ |
// Remove padding, return. |
$text = substr($text, 1); |
return $text; |
} |
// Only load the templates ONCE.. |
if (!defined("BBCODE_TPL_READY")) |
{ |
// load templates from file into array. |
$bbcode_tpl = load_bbcode_template(); |
// prepare array for use in regexps. |
$bbcode_tpl = prepare_bbcode_template($bbcode_tpl); |
} |
// [CODE] and [/CODE] for posting code (HTML, PHP, C etc etc) in your posts. |
$text = bbencode_second_pass_code($text, $uid, $bbcode_tpl); |
// [QUOTE] and [/QUOTE] for posting replies with quote, or just for quoting stuff. |
$text = str_replace("[quote:$uid]", $bbcode_tpl['quote_open'], $text); |
$text = str_replace("[/quote:$uid]", $bbcode_tpl['quote_close'], $text); |
// New one liner to deal with opening quotes with usernames... |
// replaces the two line version that I had here before.. |
$text = preg_replace("/\[quote:$uid=\"(.*?)\"\]/si", $bbcode_tpl['quote_username_open'], $text); |
// [list] and [list=x] for (un)ordered lists. |
// unordered lists |
$text = str_replace("[list:$uid]", $bbcode_tpl['ulist_open'], $text); |
// li tags |
$text = str_replace("[*:$uid]", $bbcode_tpl['listitem'], $text); |
// ending tags |
$text = str_replace("[/list:u:$uid]", $bbcode_tpl['ulist_close'], $text); |
$text = str_replace("[/list:o:$uid]", $bbcode_tpl['olist_close'], $text); |
// Ordered lists |
$text = preg_replace("/\[list=([a1]):$uid\]/si", $bbcode_tpl['olist_open'], $text); |
// colours |
$text = preg_replace("/\[color=(\#[0-9A-F]{6}|[a-z]+):$uid\]/si", $bbcode_tpl['color_open'], $text); |
$text = str_replace("[/color:$uid]", $bbcode_tpl['color_close'], $text); |
// size |
$text = preg_replace("/\[size=([1-2]?[0-9]):$uid\]/si", $bbcode_tpl['size_open'], $text); |
$text = str_replace("[/size:$uid]", $bbcode_tpl['size_close'], $text); |
// [b] and [/b] for bolding text. |
$text = str_replace("[b:$uid]", $bbcode_tpl['b_open'], $text); |
$text = str_replace("[/b:$uid]", $bbcode_tpl['b_close'], $text); |
// [u] and [/u] for underlining text. |
$text = str_replace("[u:$uid]", $bbcode_tpl['u_open'], $text); |
$text = str_replace("[/u:$uid]", $bbcode_tpl['u_close'], $text); |
// [i] and [/i] for italicizing text. |
$text = str_replace("[i:$uid]", $bbcode_tpl['i_open'], $text); |
$text = str_replace("[/i:$uid]", $bbcode_tpl['i_close'], $text); |
// Patterns and replacements for URL and email tags.. |
$patterns = array(); |
$replacements = array(); |
// [img]image_url_here[/img] code.. |
// This one gets first-passed.. |
$patterns[] = "#\[img:$uid\]([^?](?:[^\[]+|\[(?!url))*?)\[/img:$uid\]#i"; |
$replacements[] = $bbcode_tpl['img']; |
// matches a [url]xxxx://www.phpbb.com[/url] code.. |
$patterns[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is"; |
$replacements[] = $bbcode_tpl['url1']; |
// [url]www.phpbb.com[/url] code.. (no xxxx:// prefix). |
$patterns[] = "#\[url\]((www|ftp)\.([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is"; |
$replacements[] = $bbcode_tpl['url2']; |
// [url=xxxx://www.phpbb.com]phpBB[/url] code.. |
$patterns[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is"; |
$replacements[] = $bbcode_tpl['url3']; |
// [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix). |
$patterns[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is"; |
$replacements[] = $bbcode_tpl['url4']; |
// [email]user@domain.tld[/email] code.. |
$patterns[] = "#\[email\]([a-z0-9&\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+)\[/email\]#si"; |
$replacements[] = $bbcode_tpl['email']; |
$text = preg_replace($patterns, $replacements, $text); |
// Remove our padding from the string.. |
$text = substr($text, 1); |
return $text; |
} // bbencode_second_pass() |
// Need to initialize the random numbers only ONCE |
mt_srand( (double) microtime() * 1000000); |
function make_bbcode_uid() |
{ |
// Unique ID for this message.. |
$uid = dss_rand(); |
$uid = substr($uid, 0, BBCODE_UID_LEN); |
return $uid; |
} |
function bbencode_first_pass($text, $uid) |
{ |
// pad it with a space so we can distinguish between FALSE and matching the 1st char (index 0). |
// This is important; bbencode_quote(), bbencode_list(), and bbencode_code() all depend on it. |
$text = " " . $text; |
// [CODE] and [/CODE] for posting code (HTML, PHP, C etc etc) in your posts. |
$text = bbencode_first_pass_pda($text, $uid, '[code]', '[/code]', '', true, ''); |
// [QUOTE] and [/QUOTE] for posting replies with quote, or just for quoting stuff. |
$text = bbencode_first_pass_pda($text, $uid, '[quote]', '[/quote]', '', false, ''); |
$text = bbencode_first_pass_pda($text, $uid, '/\[quote=\\\\"(.*?)\\\\"\]/is', '[/quote]', '', false, '', "[quote:$uid=\\\"\\1\\\"]"); |
// [list] and [list=x] for (un)ordered lists. |
$open_tag = array(); |
$open_tag[0] = "[list]"; |
// unordered.. |
$text = bbencode_first_pass_pda($text, $uid, $open_tag, "[/list]", "[/list:u]", false, 'replace_listitems'); |
$open_tag[0] = "[list=1]"; |
$open_tag[1] = "[list=a]"; |
// ordered. |
$text = bbencode_first_pass_pda($text, $uid, $open_tag, "[/list]", "[/list:o]", false, 'replace_listitems'); |
// [color] and [/color] for setting text color |
$text = preg_replace("#\[color=(\#[0-9A-F]{6}|[a-z\-]+)\](.*?)\[/color\]#si", "[color=\\1:$uid]\\2[/color:$uid]", $text); |
// [size] and [/size] for setting text size |
$text = preg_replace("#\[size=([1-2]?[0-9])\](.*?)\[/size\]#si", "[size=\\1:$uid]\\2[/size:$uid]", $text); |
// [b] and [/b] for bolding text. |
$text = preg_replace("#\[b\](.*?)\[/b\]#si", "[b:$uid]\\1[/b:$uid]", $text); |
// [u] and [/u] for underlining text. |
$text = preg_replace("#\[u\](.*?)\[/u\]#si", "[u:$uid]\\1[/u:$uid]", $text); |
// [i] and [/i] for italicizing text. |
$text = preg_replace("#\[i\](.*?)\[/i\]#si", "[i:$uid]\\1[/i:$uid]", $text); |
// [img]image_url_here[/img] code.. |
$text = preg_replace("#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#sie", "'[img:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text); |
// Remove our padding from the string.. |
return substr($text, 1);; |
} // bbencode_first_pass() |
/** |
* $text - The text to operate on. |
* $uid - The UID to add to matching tags. |
* $open_tag - The opening tag to match. Can be an array of opening tags. |
* $close_tag - The closing tag to match. |
* $close_tag_new - The closing tag to replace with. |
* $mark_lowest_level - boolean - should we specially mark the tags that occur |
* at the lowest level of nesting? (useful for [code], because |
* we need to match these tags first and transform HTML tags |
* in their contents.. |
* $func - This variable should contain a string that is the name of a function. |
* That function will be called when a match is found, and passed 2 |
* parameters: ($text, $uid). The function should return a string. |
* This is used when some transformation needs to be applied to the |
* text INSIDE a pair of matching tags. If this variable is FALSE or the |
* empty string, it will not be executed. |
* If open_tag is an array, then the pda will try to match pairs consisting of |
* any element of open_tag followed by close_tag. This allows us to match things |
* like [list=A]...[/list] and [list=1]...[/list] in one pass of the PDA. |
* |
* NOTES: - this function assumes the first character of $text is a space. |
* - every opening tag and closing tag must be of the [...] format. |
*/ |
function bbencode_first_pass_pda($text, $uid, $open_tag, $close_tag, $close_tag_new, $mark_lowest_level, $func, $open_regexp_replace = false) |
{ |
$open_tag_count = 0; |
if (!$close_tag_new || ($close_tag_new == '')) |
{ |
$close_tag_new = $close_tag; |
} |
$close_tag_length = strlen($close_tag); |
$close_tag_new_length = strlen($close_tag_new); |
$uid_length = strlen($uid); |
$use_function_pointer = ($func && ($func != '')); |
$stack = array(); |
if (is_array($open_tag)) |
{ |
if (0 == count($open_tag)) |
{ |
// No opening tags to match, so return. |
return $text; |
} |
$open_tag_count = count($open_tag); |
} |
else |
{ |
// only one opening tag. make it into a 1-element array. |
$open_tag_temp = $open_tag; |
$open_tag = array(); |
$open_tag[0] = $open_tag_temp; |
$open_tag_count = 1; |
} |
$open_is_regexp = false; |
if ($open_regexp_replace) |
{ |
$open_is_regexp = true; |
if (!is_array($open_regexp_replace)) |
{ |
$open_regexp_temp = $open_regexp_replace; |
$open_regexp_replace = array(); |
$open_regexp_replace[0] = $open_regexp_temp; |
} |
} |
if ($mark_lowest_level && $open_is_regexp) |
{ |
message_die(GENERAL_ERROR, "Unsupported operation for bbcode_first_pass_pda()."); |
} |
// Start at the 2nd char of the string, looking for opening tags. |
$curr_pos = 1; |
while ($curr_pos && ($curr_pos < strlen($text))) |
{ |
$curr_pos = strpos($text, "[", $curr_pos); |
// If not found, $curr_pos will be 0, and the loop will end. |
if ($curr_pos) |
{ |
// We found a [. It starts at $curr_pos. |
// check if it's a starting or ending tag. |
$found_start = false; |
$which_start_tag = ""; |
$start_tag_index = -1; |
for ($i = 0; $i < $open_tag_count; $i++) |
{ |
// Grab everything until the first "]"... |
$possible_start = substr($text, $curr_pos, strpos($text, ']', $curr_pos + 1) - $curr_pos + 1); |
// |
// We're going to try and catch usernames with "[' characters. |
// |
if( preg_match('#\[quote=\\\"#si', $possible_start, $match) && !preg_match('#\[quote=\\\"(.*?)\\\"\]#si', $possible_start) ) |
{ |
// OK we are in a quote tag that probably contains a ] bracket. |
// Grab a bit more of the string to hopefully get all of it.. |
if ($close_pos = strpos($text, '"]', $curr_pos + 14)) |
{ |
if (strpos(substr($text, $curr_pos + 14, $close_pos - ($curr_pos + 14)), '[quote') === false) |
{ |
$possible_start = substr($text, $curr_pos, $close_pos - $curr_pos + 7); |
} |
} |
} |
// Now compare, either using regexp or not. |
if ($open_is_regexp) |
{ |
$match_result = array(); |
if (preg_match($open_tag[$i], $possible_start, $match_result)) |
{ |
$found_start = true; |
$which_start_tag = $match_result[0]; |
$start_tag_index = $i; |
break; |
} |
} |
else |
{ |
// straightforward string comparison. |
if (0 == strcasecmp($open_tag[$i], $possible_start)) |
{ |
$found_start = true; |
$which_start_tag = $open_tag[$i]; |
$start_tag_index = $i; |
break; |
} |
} |
} |
if ($found_start) |
{ |
// We have an opening tag. |
// Push its position, the text we matched, and its index in the open_tag array on to the stack, and then keep going to the right. |
$match = array("pos" => $curr_pos, "tag" => $which_start_tag, "index" => $start_tag_index); |
array_push($stack, $match); |
// |
// Rather than just increment $curr_pos |
// Set it to the ending of the tag we just found |
// Keeps error in nested tag from breaking out |
// of table structure.. |
// |
$curr_pos += strlen($possible_start); |
} |
else |
{ |
// check for a closing tag.. |
$possible_end = substr($text, $curr_pos, $close_tag_length); |
if (0 == strcasecmp($close_tag, $possible_end)) |
{ |
// We have an ending tag. |
// Check if we've already found a matching starting tag. |
if (sizeof($stack) > 0) |
{ |
// There exists a starting tag. |
$curr_nesting_depth = sizeof($stack); |
// We need to do 2 replacements now. |
$match = array_pop($stack); |
$start_index = $match['pos']; |
$start_tag = $match['tag']; |
$start_length = strlen($start_tag); |
$start_tag_index = $match['index']; |
if ($open_is_regexp) |
{ |
$start_tag = preg_replace($open_tag[$start_tag_index], $open_regexp_replace[$start_tag_index], $start_tag); |
} |
// everything before the opening tag. |
$before_start_tag = substr($text, 0, $start_index); |
// everything after the opening tag, but before the closing tag. |
$between_tags = substr($text, $start_index + $start_length, $curr_pos - $start_index - $start_length); |
// Run the given function on the text between the tags.. |
if ($use_function_pointer) |
{ |
$between_tags = $func($between_tags, $uid); |
} |
// everything after the closing tag. |
$after_end_tag = substr($text, $curr_pos + $close_tag_length); |
// Mark the lowest nesting level if needed. |
if ($mark_lowest_level && ($curr_nesting_depth == 1)) |
{ |
if ($open_tag[0] == '[code]') |
{ |
$code_entities_match = array('#<#', '#>#', '#"#', '#:#', '#\[#', '#\]#', '#\(#', '#\)#', '#\{#', '#\}#'); |
$code_entities_replace = array('<', '>', '"', ':', '[', ']', '(', ')', '{', '}'); |
$between_tags = preg_replace($code_entities_match, $code_entities_replace, $between_tags); |
} |
$text = $before_start_tag . substr($start_tag, 0, $start_length - 1) . ":$curr_nesting_depth:$uid]"; |
$text .= $between_tags . substr($close_tag_new, 0, $close_tag_new_length - 1) . ":$curr_nesting_depth:$uid]"; |
} |
else |
{ |
if ($open_tag[0] == '[code]') |
{ |
$text = $before_start_tag . '[code]'; |
$text .= $between_tags . '[/code]'; |
} |
else |
{ |
if ($open_is_regexp) |
{ |
$text = $before_start_tag . $start_tag; |
} |
else |
{ |
$text = $before_start_tag . substr($start_tag, 0, $start_length - 1) . ":$uid]"; |
} |
$text .= $between_tags . substr($close_tag_new, 0, $close_tag_new_length - 1) . ":$uid]"; |
} |
} |
$text .= $after_end_tag; |
// Now.. we've screwed up the indices by changing the length of the string. |
// So, if there's anything in the stack, we want to resume searching just after it. |
// otherwise, we go back to the start. |
if (sizeof($stack) > 0) |
{ |
$match = array_pop($stack); |
$curr_pos = $match['pos']; |
// bbcode_array_push($stack, $match); |
// ++$curr_pos; |
} |
else |
{ |
$curr_pos = 1; |
} |
} |
else |
{ |
// No matching start tag found. Increment pos, keep going. |
++$curr_pos; |
} |
} |
else |
{ |
// No starting tag or ending tag.. Increment pos, keep looping., |
++$curr_pos; |
} |
} |
} |
} // while |
return $text; |
} // bbencode_first_pass_pda() |
/** |
* Does second-pass bbencoding of the [code] tags. This includes |
* running htmlspecialchars() over the text contained between |
* any pair of [code] tags that are at the first level of |
* nesting. Tags at the first level of nesting are indicated |
* by this format: [code:1:$uid] ... [/code:1:$uid] |
* Other tags are in this format: [code:$uid] ... [/code:$uid] |
*/ |
function bbencode_second_pass_code($text, $uid, $bbcode_tpl) |
{ |
global $lang; |
$code_start_html = $bbcode_tpl['code_open']; |
$code_end_html = $bbcode_tpl['code_close']; |
// First, do all the 1st-level matches. These need an htmlspecialchars() run, |
// so they have to be handled differently. |
$match_count = preg_match_all("#\[code:1:$uid\](.*?)\[/code:1:$uid\]#si", $text, $matches); |
for ($i = 0; $i < $match_count; $i++) |
{ |
$before_replace = $matches[1][$i]; |
$after_replace = $matches[1][$i]; |
// Replace 2 spaces with " " so non-tabbed code indents without making huge long lines. |
$after_replace = str_replace(" ", " ", $after_replace); |
// now Replace 2 spaces with " " to catch odd #s of spaces. |
$after_replace = str_replace(" ", " ", $after_replace); |
// Replace tabs with " " so tabbed code indents sorta right without making huge long lines. |
$after_replace = str_replace("\t", " ", $after_replace); |
// now Replace space occurring at the beginning of a line |
$after_replace = preg_replace("/^ {1}/m", ' ', $after_replace); |
$str_to_match = "[code:1:$uid]" . $before_replace . "[/code:1:$uid]"; |
$replacement = $code_start_html; |
$replacement .= $after_replace; |
$replacement .= $code_end_html; |
$text = str_replace($str_to_match, $replacement, $text); |
} |
// Now, do all the non-first-level matches. These are simple. |
$text = str_replace("[code:$uid]", $code_start_html, $text); |
$text = str_replace("[/code:$uid]", $code_end_html, $text); |
return $text; |
} // bbencode_second_pass_code() |
/** |
* Rewritten by Nathan Codding - Feb 6, 2001. |
* - Goes through the given string, and replaces xxxx://yyyy with an HTML <a> tag linking |
* to that URL |
* - Goes through the given string, and replaces www.xxxx.yyyy[zzzz] with an HTML <a> tag linking |
* to http://www.xxxx.yyyy[/zzzz] |
* - Goes through the given string, and replaces xxxx@yyyy with an HTML mailto: tag linking |
* to that email address |
* - Only matches these 2 patterns either after a space, or at the beginning of a line |
* |
* Notes: the email one might get annoying - it's easy to make it more restrictive, though.. maybe |
* have it require something like xxxx@yyyy.zzzz or such. We'll see. |
*/ |
function make_clickable($text) |
{ |
$text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $text); |
// pad it with a space so we can match things at the start of the 1st line. |
$ret = ' ' . $text; |
// matches an "xxxx://yyyy" URL at the start of a line, or after a space. |
// xxxx can only be alpha characters. |
// yyyy is anything up to the first space, newline, comma, double quote or < |
$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret); |
// matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing |
// Must contain at least 2 dots. xxxx contains either alphanum, or "-" |
// zzzz is optional.. will contain everything up to the first space, newline, |
// comma, double quote or <. |
$ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret); |
// matches an email@domain type address at the start of a line, or after a space. |
// Note: Only the followed chars are valid; alphanums, "-", "_" and or ".". |
$ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret); |
// Remove our padding.. |
$ret = substr($ret, 1); |
return($ret); |
} |
/** |
* Nathan Codding - Feb 6, 2001 |
* Reverses the effects of make_clickable(), for use in editpost. |
* - Does not distinguish between "www.xxxx.yyyy" and "http://aaaa.bbbb" type URLs. |
* |
*/ |
function undo_make_clickable($text) |
{ |
$text = preg_replace("#<!-- BBCode auto-link start --><a href=\"(.*?)\" target=\"_blank\">.*?</a><!-- BBCode auto-link end -->#i", "\\1", $text); |
$text = preg_replace("#<!-- BBcode auto-mailto start --><a href=\"mailto:(.*?)\">.*?</a><!-- BBCode auto-mailto end -->#i", "\\1", $text); |
return $text; |
} |
/** |
* Nathan Codding - August 24, 2000. |
* Takes a string, and does the reverse of the PHP standard function |
* htmlspecialchars(). |
*/ |
function undo_htmlspecialchars($input) |
{ |
$input = preg_replace("/>/i", ">", $input); |
$input = preg_replace("/</i", "<", $input); |
$input = preg_replace("/"/i", "\"", $input); |
$input = preg_replace("/&/i", "&", $input); |
return $input; |
} |
/** |
* This is used to change a [*] tag into a [*:$uid] tag as part |
* of the first-pass bbencoding of [list] tags. It fits the |
* standard required in order to be passed as a variable |
* function into bbencode_first_pass_pda(). |
*/ |
function replace_listitems($text, $uid) |
{ |
$text = str_replace("[*]", "[*:$uid]", $text); |
return $text; |
} |
/** |
* Escapes the "/" character with "\/". This is useful when you need |
* to stick a runtime string into a PREG regexp that is being delimited |
* with slashes. |
*/ |
function escape_slashes($input) |
{ |
$output = str_replace('/', '\/', $input); |
return $output; |
} |
/** |
* This function does exactly what the PHP4 function array_push() does |
* however, to keep phpBB compatable with PHP 3 we had to come up with our own |
* method of doing it. |
* This function was deprecated in phpBB 2.0.18 |
*/ |
function bbcode_array_push(&$stack, $value) |
{ |
$stack[] = $value; |
return(sizeof($stack)); |
} |
/** |
* This function does exactly what the PHP4 function array_pop() does |
* however, to keep phpBB compatable with PHP 3 we had to come up with our own |
* method of doing it. |
* This function was deprecated in phpBB 2.0.18 |
*/ |
function bbcode_array_pop(&$stack) |
{ |
$arrSize = count($stack); |
$x = 1; |
while(list($key, $val) = each($stack)) |
{ |
if($x < count($stack)) |
{ |
$tmpArr[] = $val; |
} |
else |
{ |
$return_val = $val; |
} |
$x++; |
} |
$stack = $tmpArr; |
return($return_val); |
} |
// |
// Smilies code ... would this be better tagged on to the end of bbcode.php? |
// Probably so and I'll move it before B2 |
// |
function smilies_pass($message) |
{ |
static $orig, $repl; |
if (!isset($orig)) |
{ |
global $db, $board_config; |
$orig = $repl = array(); |
$sql = 'SELECT * FROM ' . SMILIES_TABLE; |
if( !$result = $db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, "Couldn't obtain smilies data", "", __LINE__, __FILE__, $sql); |
} |
$smilies = $db->sql_fetchrowset($result); |
if (count($smilies)) |
{ |
usort($smilies, 'smiley_sort'); |
} |
for ($i = 0; $i < count($smilies); $i++) |
{ |
$orig[] = "/(?<=.\W|\W.|^\W)" . preg_quote($smilies[$i]['code'], "/") . "(?=.\W|\W.|\W$)/"; |
$repl[] = '<img src="'. $board_config['smilies_path'] . '/' . $smilies[$i]['smile_url'] . '" alt="' . $smilies[$i]['emoticon'] . '" border="0" />'; |
} |
} |
if (count($orig)) |
{ |
$message = preg_replace($orig, $repl, ' ' . $message . ' '); |
$message = substr($message, 1, -1); |
} |
return $message; |
} |
function smiley_sort($a, $b) |
{ |
if ( strlen($a['code']) == strlen($b['code']) ) |
{ |
return 0; |
} |
return ( strlen($a['code']) > strlen($b['code']) ) ? -1 : 1; |
} |
?> |
/Forum/includes/constants.php |
---|
0,0 → 1,183 |
<?php |
/*************************************************************************** |
* constants.php |
* ------------------- |
* begin : Saturday', Feb 13', 2001 |
* copyright : ('C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: constants.php,v 1.47.2.6 2005/10/30 15:17:14 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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"); |
} |
// Debug Level |
//define('DEBUG', 1); // Debugging on |
define('DEBUG', 1); // Debugging off |
// User Levels <- Do not change the values of USER or ADMIN |
define('DELETED', -1); |
define('ANONYMOUS', -1); |
define('USER', 0); |
define('ADMIN', 1); |
define('MOD', 2); |
// User related |
define('USER_ACTIVATION_NONE', 0); |
define('USER_ACTIVATION_SELF', 1); |
define('USER_ACTIVATION_ADMIN', 2); |
define('USER_AVATAR_NONE', 0); |
define('USER_AVATAR_UPLOAD', 1); |
define('USER_AVATAR_REMOTE', 2); |
define('USER_AVATAR_GALLERY', 3); |
// Group settings |
define('GROUP_OPEN', 0); |
define('GROUP_CLOSED', 1); |
define('GROUP_HIDDEN', 2); |
// Forum state |
define('FORUM_UNLOCKED', 0); |
define('FORUM_LOCKED', 1); |
// Topic status |
define('TOPIC_UNLOCKED', 0); |
define('TOPIC_LOCKED', 1); |
define('TOPIC_MOVED', 2); |
define('TOPIC_WATCH_NOTIFIED', 1); |
define('TOPIC_WATCH_UN_NOTIFIED', 0); |
// Topic types |
define('POST_NORMAL', 0); |
define('POST_STICKY', 1); |
define('POST_ANNOUNCE', 2); |
define('POST_GLOBAL_ANNOUNCE', 3); |
// SQL codes |
define('BEGIN_TRANSACTION', 1); |
define('END_TRANSACTION', 2); |
// Error codes |
define('GENERAL_MESSAGE', 200); |
define('GENERAL_ERROR', 202); |
define('CRITICAL_MESSAGE', 203); |
define('CRITICAL_ERROR', 204); |
// Private messaging |
define('PRIVMSGS_READ_MAIL', 0); |
define('PRIVMSGS_NEW_MAIL', 1); |
define('PRIVMSGS_SENT_MAIL', 2); |
define('PRIVMSGS_SAVED_IN_MAIL', 3); |
define('PRIVMSGS_SAVED_OUT_MAIL', 4); |
define('PRIVMSGS_UNREAD_MAIL', 5); |
// URL PARAMETERS |
define('POST_TOPIC_URL', 't'); |
define('POST_CAT_URL', 'c'); |
define('POST_FORUM_URL', 'f'); |
define('POST_USERS_URL', 'u'); |
define('POST_POST_URL', 'p'); |
define('POST_GROUPS_URL', 'g'); |
// Session parameters |
define('SESSION_METHOD_COOKIE', 100); |
define('SESSION_METHOD_GET', 101); |
// Page numbers for session handling |
define('PAGE_INDEX', 0); |
define('PAGE_LOGIN', -1); |
define('PAGE_SEARCH', -2); |
define('PAGE_REGISTER', -3); |
define('PAGE_PROFILE', -4); |
define('PAGE_VIEWONLINE', -6); |
define('PAGE_VIEWMEMBERS', -7); |
define('PAGE_FAQ', -8); |
define('PAGE_POSTING', -9); |
define('PAGE_PRIVMSGS', -10); |
define('PAGE_GROUPCP', -11); |
define('PAGE_TOPIC_OFFSET', 5000); |
// Auth settings |
define('AUTH_LIST_ALL', 0); |
define('AUTH_ALL', 0); |
define('AUTH_REG', 1); |
define('AUTH_ACL', 2); |
define('AUTH_MOD', 3); |
define('AUTH_ADMIN', 5); |
define('AUTH_VIEW', 1); |
define('AUTH_READ', 2); |
define('AUTH_POST', 3); |
define('AUTH_REPLY', 4); |
define('AUTH_EDIT', 5); |
define('AUTH_DELETE', 6); |
define('AUTH_ANNOUNCE', 7); |
define('AUTH_STICKY', 8); |
define('AUTH_POLLCREATE', 9); |
define('AUTH_VOTE', 10); |
define('AUTH_ATTACH', 11); |
// Table names |
define('CONFIRM_TABLE', $table_prefix.'confirm'); |
define('AUTH_ACCESS_TABLE', $table_prefix.'auth_access'); |
define('BANLIST_TABLE', $table_prefix.'banlist'); |
define('CATEGORIES_TABLE', $table_prefix.'categories'); |
define('CONFIG_TABLE', $table_prefix.'config'); |
define('DISALLOW_TABLE', $table_prefix.'disallow'); |
define('FORUMS_TABLE', $table_prefix.'forums'); |
define('GROUPS_TABLE', $table_prefix.'groups'); |
define('POSTS_TABLE', $table_prefix.'posts'); |
define('POSTS_TEXT_TABLE', $table_prefix.'posts_text'); |
define('PRIVMSGS_TABLE', $table_prefix.'privmsgs'); |
define('PRIVMSGS_TEXT_TABLE', $table_prefix.'privmsgs_text'); |
define('PRIVMSGS_IGNORE_TABLE', $table_prefix.'privmsgs_ignore'); |
define('PRUNE_TABLE', $table_prefix.'forum_prune'); |
define('RANKS_TABLE', $table_prefix.'ranks'); |
define('SEARCH_TABLE', $table_prefix.'search_results'); |
define('SEARCH_WORD_TABLE', $table_prefix.'search_wordlist'); |
define('SEARCH_MATCH_TABLE', $table_prefix.'search_wordmatch'); |
define('SESSIONS_TABLE', $table_prefix.'sessions'); |
define('SESSIONS_KEYS_TABLE', $table_prefix.'sessions_keys'); |
define('SMILIES_TABLE', $table_prefix.'smilies'); |
define('THEMES_TABLE', $table_prefix.'themes'); |
define('THEMES_NAME_TABLE', $table_prefix.'themes_name'); |
define('TOPICS_TABLE', $table_prefix.'topics'); |
define('TOPICS_WATCH_TABLE', $table_prefix.'topics_watch'); |
define('USER_GROUP_TABLE', $table_prefix.'user_group'); |
define('USERS_TABLE', $table_prefix.'users'); |
define('WORDS_TABLE', $table_prefix.'words'); |
define('VOTE_DESC_TABLE', $table_prefix.'vote_desc'); |
define('VOTE_RESULTS_TABLE', $table_prefix.'vote_results'); |
define('VOTE_USERS_TABLE', $table_prefix.'vote_voters'); |
?> |
/Forum/includes/db.php |
---|
0,0 → 1,66 |
<?php |
/*************************************************************************** |
* db.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: db.php,v 1.10.2.3 2005/10/30 15:17:14 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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"); |
} |
switch($dbms) |
{ |
case 'mysql': |
include($phpbb_root_path . 'db/mysql.'.$phpEx); |
break; |
case 'mysql4': |
include($phpbb_root_path . 'db/mysql4.'.$phpEx); |
break; |
case 'postgres': |
include($phpbb_root_path . 'db/postgres7.'.$phpEx); |
break; |
case 'mssql': |
include($phpbb_root_path . 'db/mssql.'.$phpEx); |
break; |
case 'oracle': |
include($phpbb_root_path . 'db/oracle.'.$phpEx); |
break; |
case 'msaccess': |
include($phpbb_root_path . 'db/msaccess.'.$phpEx); |
break; |
case 'mssql-odbc': |
include($phpbb_root_path . 'db/mssql-odbc.'.$phpEx); |
break; |
} |
// Make the database connection. |
$db = new sql_db($dbhost, $dbuser, $dbpasswd, $dbname, false); |
if(!$db->db_connect_id) |
{ |
message_die(CRITICAL_ERROR, "Could not connect to the database"); |
} |
?> |
/Forum/includes/emailer.php |
---|
0,0 → 1,373 |
<?php |
/*************************************************************************** |
emailer.php |
------------------- |
begin : Sunday Aug. 12, 2001 |
copyright : (C) 2001 The phpBB Group |
email : support@phpbb.com |
$Id: emailer.php,v 1.15.2.35 2005/10/05 17:42:04 grahamje Exp $ |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
***************************************************************************/ |
// |
// The emailer class has support for attaching files, that isn't implemented |
// in the 2.0 release but we can probable find some way of using it in a future |
// release |
// |
class emailer |
{ |
var $msg, $subject, $extra_headers; |
var $addresses, $reply_to, $from; |
var $use_smtp; |
var $tpl_msg = array(); |
function emailer($use_smtp) |
{ |
$this->reset(); |
$this->use_smtp = $use_smtp; |
$this->reply_to = $this->from = ''; |
} |
// Resets all the data (address, template file, etc etc to default |
function reset() |
{ |
$this->addresses = array(); |
$this->vars = $this->msg = $this->extra_headers = ''; |
} |
// Sets an email address to send to |
function email_address($address) |
{ |
$this->addresses['to'] = trim($address); |
} |
function cc($address) |
{ |
$this->addresses['cc'][] = trim($address); |
} |
function bcc($address) |
{ |
$this->addresses['bcc'][] = trim($address); |
} |
function replyto($address) |
{ |
$this->reply_to = trim($address); |
} |
function from($address) |
{ |
$this->from = trim($address); |
} |
// set up subject for mail |
function set_subject($subject = '') |
{ |
$this->subject = trim(preg_replace('#[\n\r]+#s', '', $subject)); |
} |
// set up extra mail headers |
function extra_headers($headers) |
{ |
$this->extra_headers .= trim($headers) . "\n"; |
} |
function use_template($template_file, $template_lang = '') |
{ |
global $board_config, $phpbb_root_path; |
if (trim($template_file) == '') |
{ |
message_die(GENERAL_ERROR, 'No template file set', '', __LINE__, __FILE__); |
} |
if (trim($template_lang) == '') |
{ |
$template_lang = $board_config['default_lang']; |
} |
if (empty($this->tpl_msg[$template_lang . $template_file])) |
{ |
$tpl_file = $phpbb_root_path . 'language/lang_' . $template_lang . '/email/' . $template_file . '.tpl'; |
if (!@file_exists(@phpbb_realpath($tpl_file))) |
{ |
$tpl_file = $phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/email/' . $template_file . '.tpl'; |
if (!@file_exists(@phpbb_realpath($tpl_file))) |
{ |
message_die(GENERAL_ERROR, 'Could not find email template file :: ' . $template_file, '', __LINE__, __FILE__); |
} |
} |
if (!($fd = @fopen($tpl_file, 'r'))) |
{ |
message_die(GENERAL_ERROR, 'Failed opening template file :: ' . $tpl_file, '', __LINE__, __FILE__); |
} |
$this->tpl_msg[$template_lang . $template_file] = fread($fd, filesize($tpl_file)); |
fclose($fd); |
} |
$this->msg = $this->tpl_msg[$template_lang . $template_file]; |
return true; |
} |
// assign variables |
function assign_vars($vars) |
{ |
$this->vars = (empty($this->vars)) ? $vars : $this->vars . $vars; |
} |
// Send the mail out to the recipients set previously in var $this->address |
function send() |
{ |
global $board_config, $lang, $phpEx, $phpbb_root_path, $db; |
// Escape all quotes, else the eval will fail. |
$this->msg = str_replace ("'", "\'", $this->msg); |
$this->msg = preg_replace('#\{([a-z0-9\-_]*?)\}#is', "' . $\\1 . '", $this->msg); |
// Set vars |
reset ($this->vars); |
while (list($key, $val) = each($this->vars)) |
{ |
$$key = $val; |
} |
eval("\$this->msg = '$this->msg';"); |
// Clear vars |
reset ($this->vars); |
while (list($key, $val) = each($this->vars)) |
{ |
unset($$key); |
} |
// We now try and pull a subject from the email body ... if it exists, |
// do this here because the subject may contain a variable |
$drop_header = ''; |
$match = array(); |
if (preg_match('#^(Subject:(.*?))$#m', $this->msg, $match)) |
{ |
$this->subject = (trim($match[2]) != '') ? trim($match[2]) : (($this->subject != '') ? $this->subject : 'No Subject'); |
$drop_header .= '[\r\n]*?' . preg_quote($match[1], '#'); |
} |
else |
{ |
$this->subject = (($this->subject != '') ? $this->subject : 'No Subject'); |
} |
if (preg_match('#^(Charset:(.*?))$#m', $this->msg, $match)) |
{ |
$this->encoding = (trim($match[2]) != '') ? trim($match[2]) : trim($lang['ENCODING']); |
$drop_header .= '[\r\n]*?' . preg_quote($match[1], '#'); |
} |
else |
{ |
$this->encoding = trim($lang['ENCODING']); |
} |
if ($drop_header != '') |
{ |
$this->msg = trim(preg_replace('#' . $drop_header . '#s', '', $this->msg)); |
} |
$to = $this->addresses['to']; |
$cc = (count($this->addresses['cc'])) ? implode(', ', $this->addresses['cc']) : ''; |
$bcc = (count($this->addresses['bcc'])) ? implode(', ', $this->addresses['bcc']) : ''; |
// Build header |
$this->extra_headers = (($this->reply_to != '') ? "Reply-to: $this->reply_to\n" : '') . (($this->from != '') ? "From: $this->from\n" : "From: " . $board_config['board_email'] . "\n") . "Return-Path: " . $board_config['board_email'] . "\nMessage-ID: <" . md5(uniqid(time())) . "@" . $board_config['server_name'] . ">\nMIME-Version: 1.0\nContent-type: text/plain; charset=" . $this->encoding . "\nContent-transfer-encoding: 8bit\nDate: " . date('r', time()) . "\nX-Priority: 3\nX-MSMail-Priority: Normal\nX-Mailer: PHP\nX-MimeOLE: Produced By phpBB2\n" . $this->extra_headers . (($cc != '') ? "Cc: $cc\n" : '') . (($bcc != '') ? "Bcc: $bcc\n" : ''); |
// Send message ... removed $this->encode() from subject for time being |
if ( $this->use_smtp ) |
{ |
if ( !defined('SMTP_INCLUDED') ) |
{ |
include($phpbb_root_path . 'includes/smtp.' . $phpEx); |
} |
$result = smtpmail($to, $this->subject, $this->msg, $this->extra_headers); |
} |
else |
{ |
$empty_to_header = ($to == '') ? TRUE : FALSE; |
$to = ($to == '') ? (($board_config['sendmail_fix']) ? ' ' : 'Undisclosed-recipients:;') : $to; |
$result = @mail($to, $this->subject, preg_replace("#(?<!\r)\n#s", "\n", $this->msg), $this->extra_headers); |
if (!$result && !$board_config['sendmail_fix'] && $empty_to_header) |
{ |
$to = ' '; |
$sql = "UPDATE " . CONFIG_TABLE . " |
SET config_value = '1' |
WHERE config_name = 'sendmail_fix'"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Unable to update config table', '', __LINE__, __FILE__, $sql); |
} |
$board_config['sendmail_fix'] = 1; |
$result = @mail($to, $this->subject, preg_replace("#(?<!\r)\n#s", "\n", $this->msg), $this->extra_headers); |
} |
} |
// Did it work? |
if (!$result) |
{ |
message_die(GENERAL_ERROR, 'Failed sending email :: ' . (($this->use_smtp) ? 'SMTP' : 'PHP') . ' :: ' . $result, '', __LINE__, __FILE__); |
} |
return true; |
} |
// Encodes the given string for proper display for this encoding ... nabbed |
// from php.net and modified. There is an alternative encoding method which |
// may produce lesd output but it's questionable as to its worth in this |
// scenario IMO |
function encode($str) |
{ |
if ($this->encoding == '') |
{ |
return $str; |
} |
// define start delimimter, end delimiter and spacer |
$end = "?="; |
$start = "=?$this->encoding?B?"; |
$spacer = "$end\r\n $start"; |
// determine length of encoded text within chunks and ensure length is even |
$length = 75 - strlen($start) - strlen($end); |
$length = floor($length / 2) * 2; |
// encode the string and split it into chunks with spacers after each chunk |
$str = chunk_split(base64_encode($str), $length, $spacer); |
// remove trailing spacer and add start and end delimiters |
$str = preg_replace('#' . preg_quote($spacer, '#') . '$#', '', $str); |
return $start . $str . $end; |
} |
// |
// Attach files via MIME. |
// |
function attachFile($filename, $mimetype = "application/octet-stream", $szFromAddress, $szFilenameToDisplay) |
{ |
global $lang; |
$mime_boundary = "--==================_846811060==_"; |
$this->msg = '--' . $mime_boundary . "\nContent-Type: text/plain;\n\tcharset=\"" . $lang['ENCODING'] . "\"\n\n" . $this->msg; |
if ($mime_filename) |
{ |
$filename = $mime_filename; |
$encoded = $this->encode_file($filename); |
} |
$fd = fopen($filename, "r"); |
$contents = fread($fd, filesize($filename)); |
$this->mimeOut = "--" . $mime_boundary . "\n"; |
$this->mimeOut .= "Content-Type: " . $mimetype . ";\n\tname=\"$szFilenameToDisplay\"\n"; |
$this->mimeOut .= "Content-Transfer-Encoding: quoted-printable\n"; |
$this->mimeOut .= "Content-Disposition: attachment;\n\tfilename=\"$szFilenameToDisplay\"\n\n"; |
if ( $mimetype == "message/rfc822" ) |
{ |
$this->mimeOut .= "From: ".$szFromAddress."\n"; |
$this->mimeOut .= "To: ".$this->emailAddress."\n"; |
$this->mimeOut .= "Date: ".date("D, d M Y H:i:s") . " UT\n"; |
$this->mimeOut .= "Reply-To:".$szFromAddress."\n"; |
$this->mimeOut .= "Subject: ".$this->mailSubject."\n"; |
$this->mimeOut .= "X-Mailer: PHP/".phpversion()."\n"; |
$this->mimeOut .= "MIME-Version: 1.0\n"; |
} |
$this->mimeOut .= $contents."\n"; |
$this->mimeOut .= "--" . $mime_boundary . "--" . "\n"; |
return $out; |
// added -- to notify email client attachment is done |
} |
function getMimeHeaders($filename, $mime_filename="") |
{ |
$mime_boundary = "--==================_846811060==_"; |
if ($mime_filename) |
{ |
$filename = $mime_filename; |
} |
$out = "MIME-Version: 1.0\n"; |
$out .= "Content-Type: multipart/mixed;\n\tboundary=\"$mime_boundary\"\n\n"; |
$out .= "This message is in MIME format. Since your mail reader does not understand\n"; |
$out .= "this format, some or all of this message may not be legible."; |
return $out; |
} |
// |
// Split string by RFC 2045 semantics (76 chars per line, end with \r\n). |
// |
function myChunkSplit($str) |
{ |
$stmp = $str; |
$len = strlen($stmp); |
$out = ""; |
while ($len > 0) |
{ |
if ($len >= 76) |
{ |
$out .= substr($stmp, 0, 76) . "\r\n"; |
$stmp = substr($stmp, 76); |
$len = $len - 76; |
} |
else |
{ |
$out .= $stmp . "\r\n"; |
$stmp = ""; |
$len = 0; |
} |
} |
return $out; |
} |
// |
// Split the specified file up into a string and return it |
// |
function encode_file($sourcefile) |
{ |
if (is_readable(phpbb_realpath($sourcefile))) |
{ |
$fd = fopen($sourcefile, "r"); |
$contents = fread($fd, filesize($sourcefile)); |
$encoded = $this->myChunkSplit(base64_encode($contents)); |
fclose($fd); |
} |
return $encoded; |
} |
} // class emailer |
?> |
/Forum/includes/functions.php |
---|
0,0 → 1,945 |
<?php |
/*************************************************************************** |
* functions.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: functions.php,v 1.133.2.47 2006/06/08 21:11:04 grahamje Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
* |
***************************************************************************/ |
function get_db_stat($mode) |
{ |
global $db; |
switch( $mode ) |
{ |
case 'usercount': |
$sql = "SELECT COUNT(user_id) AS total |
FROM " . USERS_TABLE . " |
WHERE user_id <> " . ANONYMOUS; |
break; |
case 'newestuser': |
$sql = "SELECT user_id, username |
FROM " . USERS_TABLE . " |
WHERE user_id <> " . ANONYMOUS . " |
ORDER BY user_id DESC |
LIMIT 1"; |
break; |
case 'postcount': |
case 'topiccount': |
$sql = "SELECT SUM(forum_topics) AS topic_total, SUM(forum_posts) AS post_total |
FROM " . FORUMS_TABLE; |
break; |
} |
if ( !($result = $db->sql_query($sql)) ) |
{ |
return false; |
} |
$row = $db->sql_fetchrow($result); |
switch ( $mode ) |
{ |
case 'usercount': |
return $row['total']; |
break; |
case 'newestuser': |
return $row; |
break; |
case 'postcount': |
return $row['post_total']; |
break; |
case 'topiccount': |
return $row['topic_total']; |
break; |
} |
return false; |
} |
// added at phpBB 2.0.11 to properly format the username |
function phpbb_clean_username($username) |
{ |
$username = substr(htmlspecialchars(str_replace("\'", "'", trim($username))), 0, 25); |
$username = phpbb_rtrim($username, "\\"); |
$username = str_replace("'", "\'", $username); |
return $username; |
} |
/** |
* This function is a wrapper for ltrim, as charlist is only supported in php >= 4.1.0 |
* Added in phpBB 2.0.18 |
*/ |
function phpbb_ltrim($str, $charlist = false) |
{ |
if ($charlist === false) |
{ |
return ltrim($str); |
} |
$php_version = explode('.', PHP_VERSION); |
// php version < 4.1.0 |
if ((int) $php_version[0] < 4 || ((int) $php_version[0] == 4 && (int) $php_version[1] < 1)) |
{ |
while ($str{0} == $charlist) |
{ |
$str = substr($str, 1); |
} |
} |
else |
{ |
$str = ltrim($str, $charlist); |
} |
return $str; |
} |
// added at phpBB 2.0.12 to fix a bug in PHP 4.3.10 (only supporting charlist in php >= 4.1.0) |
function phpbb_rtrim($str, $charlist = false) |
{ |
if ($charlist === false) |
{ |
return rtrim($str); |
} |
$php_version = explode('.', PHP_VERSION); |
// php version < 4.1.0 |
if ((int) $php_version[0] < 4 || ((int) $php_version[0] == 4 && (int) $php_version[1] < 1)) |
{ |
while ($str{strlen($str)-1} == $charlist) |
{ |
$str = substr($str, 0, strlen($str)-1); |
} |
} |
else |
{ |
$str = rtrim($str, $charlist); |
} |
return $str; |
} |
/** |
* Our own generator of random values |
* This uses a constantly changing value as the base for generating the values |
* The board wide setting is updated once per page if this code is called |
* With thanks to Anthrax101 for the inspiration on this one |
* Added in phpBB 2.0.20 |
*/ |
function dss_rand() |
{ |
global $db, $board_config, $dss_seeded; |
$val = $board_config['rand_seed'] . microtime(); |
$val = md5($val); |
$board_config['rand_seed'] = md5($board_config['rand_seed'] . $val . 'a'); |
if($dss_seeded !== true) |
{ |
$sql = "UPDATE " . CONFIG_TABLE . " SET |
config_value = '" . $board_config['rand_seed'] . "' |
WHERE config_name = 'rand_seed'"; |
if( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, "Unable to reseed PRNG", "", __LINE__, __FILE__, $sql); |
} |
$dss_seeded = true; |
} |
return substr($val, 4, 16); |
} |
// |
// Get Userdata, $user can be username or user_id. If force_str is true, the username will be forced. |
// |
function get_userdata($user, $force_str = false) |
{ |
global $db; |
if (!is_numeric($user) || $force_str) |
{ |
$user = phpbb_clean_username($user); |
} |
else |
{ |
$user = intval($user); |
} |
$sql = "SELECT * |
FROM " . USERS_TABLE . " |
WHERE "; |
$sql .= ( ( is_integer($user) ) ? "user_id = $user" : "username = '" . str_replace("\'", "''", $user) . "'" ) . " AND user_id <> " . ANONYMOUS; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Tried obtaining data for a non-existent user', '', __LINE__, __FILE__, $sql); |
} |
return ( $row = $db->sql_fetchrow($result) ) ? $row : false; |
} |
function make_jumpbox($action, $match_forum_id = 0) |
{ |
global $template, $userdata, $lang, $db, $nav_links, $phpEx, $SID; |
// $is_auth = auth(AUTH_VIEW, AUTH_LIST_ALL, $userdata); |
$sql = "SELECT c.cat_id, c.cat_title, c.cat_order |
FROM " . CATEGORIES_TABLE . " c, " . FORUMS_TABLE . " f |
WHERE f.cat_id = c.cat_id |
GROUP BY c.cat_id, c.cat_title, c.cat_order |
ORDER BY c.cat_order"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, "Couldn't obtain category list.", "", __LINE__, __FILE__, $sql); |
} |
$category_rows = array(); |
while ( $row = $db->sql_fetchrow($result) ) |
{ |
$category_rows[] = $row; |
} |
if ( $total_categories = count($category_rows) ) |
{ |
$sql = "SELECT * |
FROM " . FORUMS_TABLE . " |
ORDER BY cat_id, forum_order"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain forums information', '', __LINE__, __FILE__, $sql); |
} |
$boxstring = '<select name="' . POST_FORUM_URL . '" onchange="if(this.options[this.selectedIndex].value != -1){ forms[\'jumpbox\'].submit() }"><option value="-1">' . $lang['Select_forum'] . '</option>'; |
$forum_rows = array(); |
while ( $row = $db->sql_fetchrow($result) ) |
{ |
$forum_rows[] = $row; |
} |
if ( $total_forums = count($forum_rows) ) |
{ |
for($i = 0; $i < $total_categories; $i++) |
{ |
$boxstring_forums = ''; |
for($j = 0; $j < $total_forums; $j++) |
{ |
if ( $forum_rows[$j]['cat_id'] == $category_rows[$i]['cat_id'] && $forum_rows[$j]['auth_view'] <= AUTH_REG ) |
{ |
// if ( $forum_rows[$j]['cat_id'] == $category_rows[$i]['cat_id'] && $is_auth[$forum_rows[$j]['forum_id']]['auth_view'] ) |
// { |
$selected = ( $forum_rows[$j]['forum_id'] == $match_forum_id ) ? 'selected="selected"' : ''; |
$boxstring_forums .= '<option value="' . $forum_rows[$j]['forum_id'] . '"' . $selected . '>' . $forum_rows[$j]['forum_name'] . '</option>'; |
// |
// Add an array to $nav_links for the Mozilla navigation bar. |
// 'chapter' and 'forum' can create multiple items, therefore we are using a nested array. |
// |
$nav_links['chapter forum'][$forum_rows[$j]['forum_id']] = array ( |
'url' => append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=" . $forum_rows[$j]['forum_id']), |
'title' => $forum_rows[$j]['forum_name'] |
); |
} |
} |
if ( $boxstring_forums != '' ) |
{ |
$boxstring .= '<option value="-1"> </option>'; |
$boxstring .= '<option value="-1">' . $category_rows[$i]['cat_title'] . '</option>'; |
$boxstring .= '<option value="-1">----------------</option>'; |
$boxstring .= $boxstring_forums; |
} |
} |
} |
$boxstring .= '</select>'; |
} |
else |
{ |
$boxstring .= '<select name="' . POST_FORUM_URL . '" onchange="if(this.options[this.selectedIndex].value != -1){ forms[\'jumpbox\'].submit() }"></select>'; |
} |
// Let the jumpbox work again in sites having additional session id checks. |
// if ( !empty($SID) ) |
// { |
$boxstring .= '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" />'; |
// } |
$template->set_filenames(array( |
'jumpbox' => 'jumpbox.tpl') |
); |
$template->assign_vars(array( |
'L_GO' => $lang['Go'], |
'L_JUMP_TO' => $lang['Jump_to'], |
'L_SELECT_FORUM' => $lang['Select_forum'], |
'S_JUMPBOX_SELECT' => $boxstring, |
'S_JUMPBOX_ACTION' => append_sid($action)) |
); |
$template->assign_var_from_handle('JUMPBOX', 'jumpbox'); |
return; |
} |
// |
// Initialise user settings on page load |
function init_userprefs($userdata) |
{ |
global $board_config, $theme, $images; |
global $template, $lang, $phpEx, $phpbb_root_path, $db; |
global $nav_links; |
if ( $userdata['user_id'] != ANONYMOUS ) |
{ |
if ( !empty($userdata['user_lang'])) |
{ |
$default_lang = phpbb_ltrim(basename(phpbb_rtrim($userdata['user_lang'])), "'"); |
} |
if ( !empty($userdata['user_dateformat']) ) |
{ |
$board_config['default_dateformat'] = $userdata['user_dateformat']; |
} |
if ( isset($userdata['user_timezone']) ) |
{ |
$board_config['board_timezone'] = $userdata['user_timezone']; |
} |
} |
else |
{ |
$default_lang = phpbb_ltrim(basename(phpbb_rtrim($board_config['default_lang'])), "'"); |
} |
if ( !file_exists(@phpbb_realpath($phpbb_root_path . 'language/lang_' . $default_lang . '/lang_main.'.$phpEx)) ) |
{ |
if ( $userdata['user_id'] != ANONYMOUS ) |
{ |
// For logged in users, try the board default language next |
$default_lang = phpbb_ltrim(basename(phpbb_rtrim($board_config['default_lang'])), "'"); |
} |
else |
{ |
// For guests it means the default language is not present, try english |
// This is a long shot since it means serious errors in the setup to reach here, |
// but english is part of a new install so it's worth us trying |
$default_lang = 'english'; |
} |
if ( !file_exists(@phpbb_realpath($phpbb_root_path . 'language/lang_' . $default_lang . '/lang_main.'.$phpEx)) ) |
{ |
message_die(CRITICAL_ERROR, 'Could not locate valid language pack'); |
} |
} |
// If we've had to change the value in any way then let's write it back to the database |
// before we go any further since it means there is something wrong with it |
if ( $userdata['user_id'] != ANONYMOUS && $userdata['user_lang'] !== $default_lang ) |
{ |
$sql = 'UPDATE ' . USERS_TABLE . " |
SET user_lang = '" . $default_lang . "' |
WHERE user_lang = '" . $userdata['user_lang'] . "'"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(CRITICAL_ERROR, 'Could not update user language info'); |
} |
$userdata['user_lang'] = $default_lang; |
} |
elseif ( $userdata['user_id'] === ANONYMOUS && $board_config['default_lang'] !== $default_lang ) |
{ |
$sql = 'UPDATE ' . CONFIG_TABLE . " |
SET config_value = '" . $default_lang . "' |
WHERE config_name = 'default_lang'"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(CRITICAL_ERROR, 'Could not update user language info'); |
} |
} |
$board_config['default_lang'] = $default_lang; |
include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_main.' . $phpEx); |
if ( defined('IN_ADMIN') ) |
{ |
if( !file_exists(@phpbb_realpath($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_admin.'.$phpEx)) ) |
{ |
$board_config['default_lang'] = 'english'; |
} |
include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_admin.' . $phpEx); |
} |
// |
// Set up style |
// |
if ( !$board_config['override_user_style'] ) |
{ |
if ( $userdata['user_id'] != ANONYMOUS && $userdata['user_style'] > 0 ) |
{ |
if ( $theme = setup_style($userdata['user_style']) ) |
{ |
return; |
} |
} |
} |
$theme = setup_style($board_config['default_style']); |
// |
// Mozilla navigation bar |
// Default items that should be valid on all pages. |
// Defined here to correctly assign the Language Variables |
// and be able to change the variables within code. |
// |
$nav_links['top'] = array ( |
'url' => append_sid($phpbb_root_path . 'index.' . $phpEx), |
'title' => sprintf($lang['Forum_Index'], $board_config['sitename']) |
); |
$nav_links['search'] = array ( |
'url' => append_sid($phpbb_root_path . 'search.' . $phpEx), |
'title' => $lang['Search'] |
); |
$nav_links['help'] = array ( |
'url' => append_sid($phpbb_root_path . 'faq.' . $phpEx), |
'title' => $lang['FAQ'] |
); |
$nav_links['author'] = array ( |
'url' => append_sid($phpbb_root_path . 'memberlist.' . $phpEx), |
'title' => $lang['Memberlist'] |
); |
return; |
} |
function setup_style($style) |
{ |
global $db, $board_config, $template, $images, $phpbb_root_path; |
$sql = 'SELECT * |
FROM ' . THEMES_TABLE . ' |
WHERE themes_id = ' . (int) $style; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(CRITICAL_ERROR, 'Could not query database for theme info'); |
} |
if ( !($row = $db->sql_fetchrow($result)) ) |
{ |
// We are trying to setup a style which does not exist in the database |
// Try to fallback to the board default (if the user had a custom style) |
// and then any users using this style to the default if it succeeds |
if ( $style != $board_config['default_style']) |
{ |
$sql = 'SELECT * |
FROM ' . THEMES_TABLE . ' |
WHERE themes_id = ' . (int) $board_config['default_style']; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(CRITICAL_ERROR, 'Could not query database for theme info'); |
} |
if ( $row = $db->sql_fetchrow($result) ) |
{ |
$db->sql_freeresult($result); |
$sql = 'UPDATE ' . USERS_TABLE . ' |
SET user_style = ' . (int) $board_config['default_style'] . " |
WHERE user_style = $style"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(CRITICAL_ERROR, 'Could not update user theme info'); |
} |
} |
else |
{ |
message_die(CRITICAL_ERROR, "Could not get theme data for themes_id [$style]"); |
} |
} |
else |
{ |
message_die(CRITICAL_ERROR, "Could not get theme data for themes_id [$style]"); |
} |
} |
$template_path = 'templates/' ; |
$template_name = $row['template_name'] ; |
$template = new Template($phpbb_root_path . $template_path . $template_name); |
if ( $template ) |
{ |
$current_template_path = $template_path . $template_name; |
@include($phpbb_root_path . $template_path . $template_name . '/' . $template_name . '.cfg'); |
if ( !defined('TEMPLATE_CONFIG') ) |
{ |
message_die(CRITICAL_ERROR, "Could not open $template_name template config file", '', __LINE__, __FILE__); |
} |
$img_lang = ( file_exists(@phpbb_realpath($phpbb_root_path . $current_template_path . '/images/lang_' . $board_config['default_lang'])) ) ? $board_config['default_lang'] : 'english'; |
while( list($key, $value) = @each($images) ) |
{ |
if ( !is_array($value) ) |
{ |
$images[$key] = str_replace('{LANG}', 'lang_' . $img_lang, $value); |
} |
} |
} |
return $row; |
} |
function encode_ip($dotquad_ip) |
{ |
$ip_sep = explode('.', $dotquad_ip); |
return sprintf('%02x%02x%02x%02x', $ip_sep[0], $ip_sep[1], $ip_sep[2], $ip_sep[3]); |
} |
function decode_ip($int_ip) |
{ |
$hexipbang = explode('.', chunk_split($int_ip, 2, '.')); |
return hexdec($hexipbang[0]). '.' . hexdec($hexipbang[1]) . '.' . hexdec($hexipbang[2]) . '.' . hexdec($hexipbang[3]); |
} |
// |
// Create date/time from format and timezone |
// |
function create_date($format, $gmepoch, $tz) |
{ |
global $board_config, $lang; |
static $translate; |
if ( empty($translate) && $board_config['default_lang'] != 'english' ) |
{ |
@reset($lang['datetime']); |
while ( list($match, $replace) = @each($lang['datetime']) ) |
{ |
$translate[$match] = $replace; |
} |
} |
return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * $tz)), $translate) : @gmdate($format, $gmepoch + (3600 * $tz)); |
} |
// |
// Pagination routine, generates |
// page number sequence |
// |
function generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = TRUE) |
{ |
global $lang; |
$total_pages = ceil($num_items/$per_page); |
if ( $total_pages == 1 ) |
{ |
return ''; |
} |
$on_page = floor($start_item / $per_page) + 1; |
$page_string = ''; |
if ( $total_pages > 10 ) |
{ |
$init_page_max = ( $total_pages > 3 ) ? 3 : $total_pages; |
for($i = 1; $i < $init_page_max + 1; $i++) |
{ |
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>'; |
if ( $i < $init_page_max ) |
{ |
$page_string .= ", "; |
} |
} |
if ( $total_pages > 3 ) |
{ |
if ( $on_page > 1 && $on_page < $total_pages ) |
{ |
$page_string .= ( $on_page > 5 ) ? ' ... ' : ', '; |
$init_page_min = ( $on_page > 4 ) ? $on_page : 5; |
$init_page_max = ( $on_page < $total_pages - 4 ) ? $on_page : $total_pages - 4; |
for($i = $init_page_min - 1; $i < $init_page_max + 2; $i++) |
{ |
$page_string .= ($i == $on_page) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>'; |
if ( $i < $init_page_max + 1 ) |
{ |
$page_string .= ', '; |
} |
} |
$page_string .= ( $on_page < $total_pages - 4 ) ? ' ... ' : ', '; |
} |
else |
{ |
$page_string .= ' ... '; |
} |
for($i = $total_pages - 2; $i < $total_pages + 1; $i++) |
{ |
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>'; |
if( $i < $total_pages ) |
{ |
$page_string .= ", "; |
} |
} |
} |
} |
else |
{ |
for($i = 1; $i < $total_pages + 1; $i++) |
{ |
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>'; |
if ( $i < $total_pages ) |
{ |
$page_string .= ', '; |
} |
} |
} |
if ( $add_prevnext_text ) |
{ |
if ( $on_page > 1 ) |
{ |
$page_string = ' <a href="' . append_sid($base_url . "&start=" . ( ( $on_page - 2 ) * $per_page ) ) . '">' . $lang['Previous'] . '</a> ' . $page_string; |
} |
if ( $on_page < $total_pages ) |
{ |
$page_string .= ' <a href="' . append_sid($base_url . "&start=" . ( $on_page * $per_page ) ) . '">' . $lang['Next'] . '</a>'; |
} |
} |
$page_string = $lang['Goto_page'] . ' ' . $page_string; |
return $page_string; |
} |
// |
// This does exactly what preg_quote() does in PHP 4-ish |
// If you just need the 1-parameter preg_quote call, then don't bother using this. |
// |
function phpbb_preg_quote($str, $delimiter) |
{ |
$text = preg_quote($str); |
$text = str_replace($delimiter, '\\' . $delimiter, $text); |
return $text; |
} |
// |
// Obtain list of naughty words and build preg style replacement arrays for use by the |
// calling script, note that the vars are passed as references this just makes it easier |
// to return both sets of arrays |
// |
function obtain_word_list(&$orig_word, &$replacement_word) |
{ |
global $db; |
// |
// Define censored word matches |
// |
$sql = "SELECT word, replacement |
FROM " . WORDS_TABLE; |
if( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not get censored words from database', '', __LINE__, __FILE__, $sql); |
} |
if ( $row = $db->sql_fetchrow($result) ) |
{ |
do |
{ |
$orig_word[] = '#\b(' . str_replace('\*', '\w*?', preg_quote($row['word'], '#')) . ')\b#i'; |
$replacement_word[] = $row['replacement']; |
} |
while ( $row = $db->sql_fetchrow($result) ); |
} |
return true; |
} |
// |
// This is general replacement for die(), allows templated |
// output in users (or default) language, etc. |
// |
// $msg_code can be one of these constants: |
// |
// GENERAL_MESSAGE : Use for any simple text message, eg. results |
// of an operation, authorisation failures, etc. |
// |
// GENERAL ERROR : Use for any error which occurs _AFTER_ the |
// common.php include and session code, ie. most errors in |
// pages/functions |
// |
// CRITICAL_MESSAGE : Used when basic config data is available but |
// a session may not exist, eg. banned users |
// |
// CRITICAL_ERROR : Used when config data cannot be obtained, eg |
// no database connection. Should _not_ be used in 99.5% of cases |
// |
function message_die($msg_code, $msg_text = '', $msg_title = '', $err_line = '', $err_file = '', $sql = '') |
{ |
global $db, $template, $board_config, $theme, $lang, $phpEx, $phpbb_root_path, $nav_links, $gen_simple_header, $images; |
global $userdata, $user_ip, $session_length; |
global $starttime; |
if(defined('HAS_DIED')) |
{ |
die("message_die() was called multiple times. This isn't supposed to happen. Was message_die() used in page_tail.php?"); |
} |
define('HAS_DIED', 1); |
$sql_store = $sql; |
// |
// Get SQL error if we are debugging. Do this as soon as possible to prevent |
// subsequent queries from overwriting the status of sql_error() |
// |
if ( DEBUG && ( $msg_code == GENERAL_ERROR || $msg_code == CRITICAL_ERROR ) ) |
{ |
$sql_error = $db->sql_error(); |
$debug_text = ''; |
if ( $sql_error['message'] != '' ) |
{ |
$debug_text .= '<br /><br />SQL Error : ' . $sql_error['code'] . ' ' . $sql_error['message']; |
} |
if ( $sql_store != '' ) |
{ |
$debug_text .= "<br /><br />$sql_store"; |
} |
if ( $err_line != '' && $err_file != '' ) |
{ |
$debug_text .= '<br /><br />Line : ' . $err_line . '<br />File : ' . basename($err_file); |
} |
} |
if( empty($userdata) && ( $msg_code == GENERAL_MESSAGE || $msg_code == GENERAL_ERROR ) ) |
{ |
$userdata = session_pagestart($user_ip, PAGE_INDEX); |
init_userprefs($userdata); |
} |
// |
// If the header hasn't been output then do it |
// |
if ( !defined('HEADER_INC') && $msg_code != CRITICAL_ERROR ) |
{ |
if ( empty($lang) ) |
{ |
if ( !empty($board_config['default_lang']) ) |
{ |
include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_main.'.$phpEx); |
} |
else |
{ |
include($phpbb_root_path . 'language/lang_english/lang_main.'.$phpEx); |
} |
} |
if ( empty($template) || empty($theme) ) |
{ |
$theme = setup_style($board_config['default_style']); |
} |
// |
// Load the Page Header |
// |
if ( !defined('IN_ADMIN') ) |
{ |
include($phpbb_root_path . 'includes/page_header.'.$phpEx); |
} |
else |
{ |
include($phpbb_root_path . 'admin/page_header_admin.'.$phpEx); |
} |
} |
switch($msg_code) |
{ |
case GENERAL_MESSAGE: |
if ( $msg_title == '' ) |
{ |
$msg_title = $lang['Information']; |
} |
break; |
case CRITICAL_MESSAGE: |
if ( $msg_title == '' ) |
{ |
$msg_title = $lang['Critical_Information']; |
} |
break; |
case GENERAL_ERROR: |
if ( $msg_text == '' ) |
{ |
$msg_text = $lang['An_error_occured']; |
} |
if ( $msg_title == '' ) |
{ |
$msg_title = $lang['General_Error']; |
} |
break; |
case CRITICAL_ERROR: |
// |
// Critical errors mean we cannot rely on _ANY_ DB information being |
// available so we're going to dump out a simple echo'd statement |
// |
include($phpbb_root_path . 'language/lang_english/lang_main.'.$phpEx); |
if ( $msg_text == '' ) |
{ |
$msg_text = $lang['A_critical_error']; |
} |
if ( $msg_title == '' ) |
{ |
$msg_title = 'phpBB : <b>' . $lang['Critical_Error'] . '</b>'; |
} |
break; |
} |
// |
// Add on DEBUG info if we've enabled debug mode and this is an error. This |
// prevents debug info being output for general messages should DEBUG be |
// set TRUE by accident (preventing confusion for the end user!) |
// |
if ( DEBUG && ( $msg_code == GENERAL_ERROR || $msg_code == CRITICAL_ERROR ) ) |
{ |
if ( $debug_text != '' ) |
{ |
$msg_text = $msg_text . '<br /><br /><b><u>DEBUG MODE</u></b>' . $debug_text; |
} |
} |
if ( $msg_code != CRITICAL_ERROR ) |
{ |
if ( !empty($lang[$msg_text]) ) |
{ |
$msg_text = $lang[$msg_text]; |
} |
if ( !defined('IN_ADMIN') ) |
{ |
$template->set_filenames(array( |
'message_body' => 'message_body.tpl') |
); |
} |
else |
{ |
$template->set_filenames(array( |
'message_body' => 'admin/admin_message_body.tpl') |
); |
} |
$template->assign_vars(array( |
'MESSAGE_TITLE' => $msg_title, |
'MESSAGE_TEXT' => $msg_text) |
); |
$template->pparse('message_body'); |
if ( !defined('IN_ADMIN') ) |
{ |
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); |
} |
else |
{ |
include($phpbb_root_path . 'admin/page_footer_admin.'.$phpEx); |
} |
} |
else |
{ |
echo "<html>\n<body>\n" . $msg_title . "\n<br /><br />\n" . $msg_text . "</body>\n</html>"; |
} |
exit; |
} |
// |
// This function is for compatibility with PHP 4.x's realpath() |
// function. In later versions of PHP, it needs to be called |
// to do checks with some functions. Older versions of PHP don't |
// seem to need this, so we'll just return the original value. |
// dougk_ff7 <October 5, 2002> |
function phpbb_realpath($path) |
{ |
global $phpbb_root_path, $phpEx; |
return (!@function_exists('realpath') || !@realpath($phpbb_root_path . 'includes/functions.'.$phpEx)) ? $path : @realpath($path); |
} |
function redirect($url) |
{ |
global $db, $board_config; |
if (!empty($db)) |
{ |
$db->sql_close(); |
} |
if (strstr(urldecode($url), "\n") || strstr(urldecode($url), "\r")) |
{ |
message_die(GENERAL_ERROR, 'Tried to redirect to potentially insecure url.'); |
} |
$server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://'; |
$server_name = preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['server_name'])); |
$server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) : ''; |
$script_name = preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['script_path'])); |
$script_name = ($script_name == '') ? $script_name : '/' . $script_name; |
$url = preg_replace('#^\/?(.*?)\/?$#', '/\1', trim($url)); |
// Redirect via an HTML form for PITA webservers |
if (@preg_match('/Microsoft|WebSTAR|Xitami/', getenv('SERVER_SOFTWARE'))) |
{ |
header('Refresh: 0; URL=' . $server_protocol . $server_name . $server_port . $script_name . $url); |
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><meta http-equiv="refresh" content="0; url=' . $server_protocol . $server_name . $server_port . $script_name . $url . '"><title>Redirect</title></head><body><div align="center">If your browser does not support meta redirection please click <a href="' . $server_protocol . $server_name . $server_port . $script_name . $url . '">HERE</a> to be redirected</div></body></html>'; |
exit; |
} |
// Behave as per HTTP/1.1 spec for others |
header('Location: ' . $server_protocol . $server_name . $server_port . $script_name . $url); |
exit; |
} |
?> |
/Forum/includes/functions_admin.php |
---|
0,0 → 1,191 |
<?php |
/*************************************************************************** |
* functions_admin.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: functions_admin.php,v 1.5.2.5 2005/09/14 19:16:21 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
* |
***************************************************************************/ |
// |
// Simple version of jumpbox, just lists authed forums |
// |
function make_forum_select($box_name, $ignore_forum = false, $select_forum = '') |
{ |
global $db, $userdata; |
$is_auth_ary = auth(AUTH_READ, AUTH_LIST_ALL, $userdata); |
$sql = 'SELECT f.forum_id, f.forum_name |
FROM ' . CATEGORIES_TABLE . ' c, ' . FORUMS_TABLE . ' f |
WHERE f.cat_id = c.cat_id |
ORDER BY c.cat_order, f.forum_order'; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Couldn not obtain forums information', '', __LINE__, __FILE__, $sql); |
} |
$forum_list = ''; |
while( $row = $db->sql_fetchrow($result) ) |
{ |
if ( $is_auth_ary[$row['forum_id']]['auth_read'] && $ignore_forum != $row['forum_id'] ) |
{ |
$selected = ( $select_forum == $row['forum_id'] ) ? ' selected="selected"' : ''; |
$forum_list .= '<option value="' . $row['forum_id'] . '"' . $selected .'>' . $row['forum_name'] . '</option>'; |
} |
} |
$forum_list = ( $forum_list == '' ) ? '<option value="-1">-- ! No Forums ! --</option>' : '<select name="' . $box_name . '">' . $forum_list . '</select>'; |
return $forum_list; |
} |
// |
// Synchronise functions for forums/topics |
// |
function sync($type, $id = false) |
{ |
global $db; |
switch($type) |
{ |
case 'all forums': |
$sql = "SELECT forum_id |
FROM " . FORUMS_TABLE; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not get forum IDs', '', __LINE__, __FILE__, $sql); |
} |
while( $row = $db->sql_fetchrow($result) ) |
{ |
sync('forum', $row['forum_id']); |
} |
break; |
case 'all topics': |
$sql = "SELECT topic_id |
FROM " . TOPICS_TABLE; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not get topic ID', '', __LINE__, __FILE__, $sql); |
} |
while( $row = $db->sql_fetchrow($result) ) |
{ |
sync('topic', $row['topic_id']); |
} |
break; |
case 'forum': |
$sql = "SELECT MAX(post_id) AS last_post, COUNT(post_id) AS total |
FROM " . POSTS_TABLE . " |
WHERE forum_id = $id"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not get post ID', '', __LINE__, __FILE__, $sql); |
} |
if ( $row = $db->sql_fetchrow($result) ) |
{ |
$last_post = ( $row['last_post'] ) ? $row['last_post'] : 0; |
$total_posts = ($row['total']) ? $row['total'] : 0; |
} |
else |
{ |
$last_post = 0; |
$total_posts = 0; |
} |
$sql = "SELECT COUNT(topic_id) AS total |
FROM " . TOPICS_TABLE . " |
WHERE forum_id = $id"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not get topic count', '', __LINE__, __FILE__, $sql); |
} |
$total_topics = ( $row = $db->sql_fetchrow($result) ) ? ( ( $row['total'] ) ? $row['total'] : 0 ) : 0; |
$sql = "UPDATE " . FORUMS_TABLE . " |
SET forum_last_post_id = $last_post, forum_posts = $total_posts, forum_topics = $total_topics |
WHERE forum_id = $id"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not update forum', '', __LINE__, __FILE__, $sql); |
} |
break; |
case 'topic': |
$sql = "SELECT MAX(post_id) AS last_post, MIN(post_id) AS first_post, COUNT(post_id) AS total_posts |
FROM " . POSTS_TABLE . " |
WHERE topic_id = $id"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not get post ID', '', __LINE__, __FILE__, $sql); |
} |
if ( $row = $db->sql_fetchrow($result) ) |
{ |
if ($row['total_posts']) |
{ |
// Correct the details of this topic |
$sql = 'UPDATE ' . TOPICS_TABLE . ' |
SET topic_replies = ' . ($row['total_posts'] - 1) . ', topic_first_post_id = ' . $row['first_post'] . ', topic_last_post_id = ' . $row['last_post'] . " |
WHERE topic_id = $id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Could not update topic', '', __LINE__, __FILE__, $sql); |
} |
} |
else |
{ |
// There are no replies to this topic |
// Check if it is a move stub |
$sql = 'SELECT topic_moved_id |
FROM ' . TOPICS_TABLE . " |
WHERE topic_id = $id"; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(GENERAL_ERROR, 'Could not get topic ID', '', __LINE__, __FILE__, $sql); |
} |
if ($row = $db->sql_fetchrow($result)) |
{ |
if (!$row['topic_moved_id']) |
{ |
$sql = 'DELETE FROM ' . TOPICS_TABLE . " WHERE topic_id = $id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Could not remove topic', '', __LINE__, __FILE__, $sql); |
} |
} |
} |
$db->sql_freeresult($result); |
} |
} |
break; |
} |
return true; |
} |
?> |
/Forum/includes/functions_post.php |
---|
0,0 → 1,887 |
<?php |
/*************************************************************************** |
* functions_post.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: functions_post.php,v 1.9.2.52 2006/05/06 13:38:55 grahamje Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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'); |
} |
$html_entities_match = array('#&(?!(\#[0-9]+;))#', '#<#', '#>#', '#"#'); |
$html_entities_replace = array('&', '<', '>', '"'); |
$unhtml_specialchars_match = array('#>#', '#<#', '#"#', '#&#'); |
$unhtml_specialchars_replace = array('>', '<', '"', '&'); |
// |
// This function will prepare a posted message for |
// entry into the database. |
// |
function prepare_message($message, $html_on, $bbcode_on, $smile_on, $bbcode_uid = 0) |
{ |
global $board_config, $html_entities_match, $html_entities_replace; |
// |
// Clean up the message |
// |
$message = trim($message); |
if ($html_on) |
{ |
// If HTML is on, we try to make it safe |
// This approach is quite agressive and anything that does not look like a valid tag |
// is going to get converted to HTML entities |
$message = stripslashes($message); |
$html_match = '#<[^\w<]*(\w+)((?:"[^"]*"|\'[^\']*\'|[^<>\'"])+)?>#'; |
$matches = array(); |
$message_split = preg_split($html_match, $message); |
preg_match_all($html_match, $message, $matches); |
$message = ''; |
foreach ($message_split as $part) |
{ |
$tag = array(array_shift($matches[0]), array_shift($matches[1]), array_shift($matches[2])); |
$message .= preg_replace($html_entities_match, $html_entities_replace, $part) . clean_html($tag); |
} |
$message = addslashes($message); |
$message = str_replace('"', '\"', $message); |
} |
else |
{ |
$message = preg_replace($html_entities_match, $html_entities_replace, $message); |
} |
if($bbcode_on && $bbcode_uid != '') |
{ |
$message = bbencode_first_pass($message, $bbcode_uid); |
} |
return $message; |
} |
function unprepare_message($message) |
{ |
global $unhtml_specialchars_match, $unhtml_specialchars_replace; |
return preg_replace($unhtml_specialchars_match, $unhtml_specialchars_replace, $message); |
} |
// |
// Prepare a message for posting |
// |
function prepare_post(&$mode, &$post_data, &$bbcode_on, &$html_on, &$smilies_on, &$error_msg, &$username, &$bbcode_uid, &$subject, &$message, &$poll_title, &$poll_options, &$poll_length) |
{ |
global $board_config, $userdata, $lang, $phpEx, $phpbb_root_path; |
// Check username |
if (!empty($username)) |
{ |
$username = phpbb_clean_username($username); |
if (!$userdata['session_logged_in'] || ($userdata['session_logged_in'] && $username != $userdata['username'])) |
{ |
include($phpbb_root_path . 'includes/functions_validate.'.$phpEx); |
$result = validate_username($username); |
if ($result['error']) |
{ |
$error_msg .= (!empty($error_msg)) ? '<br />' . $result['error_msg'] : $result['error_msg']; |
} |
} |
else |
{ |
$username = ''; |
} |
} |
// Check subject |
if (!empty($subject)) |
{ |
$subject = htmlspecialchars(trim($subject)); |
} |
else if ($mode == 'newtopic' || ($mode == 'editpost' && $post_data['first_post'])) |
{ |
$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['Empty_subject'] : $lang['Empty_subject']; |
} |
// Check message |
if (!empty($message)) |
{ |
$bbcode_uid = ($bbcode_on) ? make_bbcode_uid() : ''; |
$message = prepare_message(trim($message), $html_on, $bbcode_on, $smilies_on, $bbcode_uid); |
} |
else if ($mode != 'delete' && $mode != 'poll_delete') |
{ |
$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['Empty_message'] : $lang['Empty_message']; |
} |
// |
// Handle poll stuff |
// |
if ($mode == 'newtopic' || ($mode == 'editpost' && $post_data['first_post'])) |
{ |
$poll_length = (isset($poll_length)) ? max(0, intval($poll_length)) : 0; |
if (!empty($poll_title)) |
{ |
$poll_title = htmlspecialchars(trim($poll_title)); |
} |
if(!empty($poll_options)) |
{ |
$temp_option_text = array(); |
while(list($option_id, $option_text) = @each($poll_options)) |
{ |
$option_text = trim($option_text); |
if (!empty($option_text)) |
{ |
$temp_option_text[intval($option_id)] = htmlspecialchars($option_text); |
} |
} |
$option_text = $temp_option_text; |
if (count($poll_options) < 2) |
{ |
$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['To_few_poll_options'] : $lang['To_few_poll_options']; |
} |
else if (count($poll_options) > $board_config['max_poll_options']) |
{ |
$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['To_many_poll_options'] : $lang['To_many_poll_options']; |
} |
else if ($poll_title == '') |
{ |
$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['Empty_poll_title'] : $lang['Empty_poll_title']; |
} |
} |
} |
return; |
} |
// |
// Post a new topic/reply/poll or edit existing post/poll |
// |
function submit_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_id, &$post_id, &$poll_id, &$topic_type, &$bbcode_on, &$html_on, &$smilies_on, &$attach_sig, &$bbcode_uid, $post_username, $post_subject, $post_message, $poll_title, &$poll_options, &$poll_length) |
{ |
global $board_config, $lang, $db, $phpbb_root_path, $phpEx; |
global $userdata, $user_ip; |
include($phpbb_root_path . 'includes/functions_search.'.$phpEx); |
$current_time = time(); |
if ($mode == 'newtopic' || $mode == 'reply' || $mode == 'editpost') |
{ |
// |
// Flood control |
// |
$where_sql = ($userdata['user_id'] == ANONYMOUS) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id']; |
$sql = "SELECT MAX(post_time) AS last_post_time |
FROM " . POSTS_TABLE . " |
WHERE $where_sql"; |
if ($result = $db->sql_query($sql)) |
{ |
if ($row = $db->sql_fetchrow($result)) |
{ |
if (intval($row['last_post_time']) > 0 && ($current_time - intval($row['last_post_time'])) < intval($board_config['flood_interval'])) |
{ |
message_die(GENERAL_MESSAGE, $lang['Flood_Error']); |
} |
} |
} |
} |
if ($mode == 'editpost') |
{ |
remove_search_post($post_id); |
} |
if ($mode == 'newtopic' || ($mode == 'editpost' && $post_data['first_post'])) |
{ |
$topic_vote = (!empty($poll_title) && count($poll_options) >= 2) ? 1 : 0; |
$sql = ($mode != "editpost") ? "INSERT INTO " . TOPICS_TABLE . " (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type, topic_vote) VALUES ('$post_subject', " . $userdata['user_id'] . ", $current_time, $forum_id, " . TOPIC_UNLOCKED . ", $topic_type, $topic_vote)" : "UPDATE " . TOPICS_TABLE . " SET topic_title = '$post_subject', topic_type = $topic_type " . (($post_data['edit_vote'] || !empty($poll_title)) ? ", topic_vote = " . $topic_vote : "") . " WHERE topic_id = $topic_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql); |
} |
if ($mode == 'newtopic') |
{ |
$topic_id = $db->sql_nextid(); |
} |
} |
$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : ""; |
$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig" . $edited_sql . " WHERE post_id = $post_id"; |
if (!$db->sql_query($sql, BEGIN_TRANSACTION)) |
{ |
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql); |
} |
if ($mode != 'editpost') |
{ |
$post_id = $db->sql_nextid(); |
} |
$sql = ($mode != 'editpost') ? "INSERT INTO " . POSTS_TEXT_TABLE . " (post_id, post_subject, bbcode_uid, post_text) VALUES ($post_id, '$post_subject', '$bbcode_uid', '$post_message')" : "UPDATE " . POSTS_TEXT_TABLE . " SET post_text = '$post_message', bbcode_uid = '$bbcode_uid', post_subject = '$post_subject' WHERE post_id = $post_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql); |
} |
add_search_words('single', $post_id, stripslashes($post_message), stripslashes($post_subject)); |
// |
// Add poll |
// |
if (($mode == 'newtopic' || ($mode == 'editpost' && $post_data['edit_poll'])) && !empty($poll_title) && count($poll_options) >= 2) |
{ |
$sql = (!$post_data['has_poll']) ? "INSERT INTO " . VOTE_DESC_TABLE . " (topic_id, vote_text, vote_start, vote_length) VALUES ($topic_id, '$poll_title', $current_time, " . ($poll_length * 86400) . ")" : "UPDATE " . VOTE_DESC_TABLE . " SET vote_text = '$poll_title', vote_length = " . ($poll_length * 86400) . " WHERE topic_id = $topic_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql); |
} |
$delete_option_sql = ''; |
$old_poll_result = array(); |
if ($mode == 'editpost' && $post_data['has_poll']) |
{ |
$sql = "SELECT vote_option_id, vote_result |
FROM " . VOTE_RESULTS_TABLE . " |
WHERE vote_id = $poll_id |
ORDER BY vote_option_id ASC"; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain vote data results for this topic', '', __LINE__, __FILE__, $sql); |
} |
while ($row = $db->sql_fetchrow($result)) |
{ |
$old_poll_result[$row['vote_option_id']] = $row['vote_result']; |
if (!isset($poll_options[$row['vote_option_id']])) |
{ |
$delete_option_sql .= ($delete_option_sql != '') ? ', ' . $row['vote_option_id'] : $row['vote_option_id']; |
} |
} |
} |
else |
{ |
$poll_id = $db->sql_nextid(); |
} |
@reset($poll_options); |
$poll_option_id = 1; |
while (list($option_id, $option_text) = each($poll_options)) |
{ |
if (!empty($option_text)) |
{ |
$option_text = str_replace("\'", "''", htmlspecialchars($option_text)); |
$poll_result = ($mode == "editpost" && isset($old_poll_result[$option_id])) ? $old_poll_result[$option_id] : 0; |
$sql = ($mode != "editpost" || !isset($old_poll_result[$option_id])) ? "INSERT INTO " . VOTE_RESULTS_TABLE . " (vote_id, vote_option_id, vote_option_text, vote_result) VALUES ($poll_id, $poll_option_id, '$option_text', $poll_result)" : "UPDATE " . VOTE_RESULTS_TABLE . " SET vote_option_text = '$option_text', vote_result = $poll_result WHERE vote_option_id = $option_id AND vote_id = $poll_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql); |
} |
$poll_option_id++; |
} |
} |
if ($delete_option_sql != '') |
{ |
$sql = "DELETE FROM " . VOTE_RESULTS_TABLE . " |
WHERE vote_option_id IN ($delete_option_sql) |
AND vote_id = $poll_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error deleting pruned poll options', '', __LINE__, __FILE__, $sql); |
} |
} |
} |
$meta = '<meta http-equiv="refresh" content="3;url=' . append_sid("viewtopic.$phpEx?" . POST_POST_URL . "=" . $post_id) . '#' . $post_id . '">'; |
$message = $lang['Stored'] . '<br /><br />' . sprintf($lang['Click_view_message'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_POST_URL . "=" . $post_id) . '#' . $post_id . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_forum'], '<a href="' . append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id") . '">', '</a>'); |
return false; |
} |
// |
// Update post stats and details |
// |
function update_post_stats(&$mode, &$post_data, &$forum_id, &$topic_id, &$post_id, &$user_id) |
{ |
global $db; |
$sign = ($mode == 'delete') ? '- 1' : '+ 1'; |
$forum_update_sql = "forum_posts = forum_posts $sign"; |
$topic_update_sql = ''; |
if ($mode == 'delete') |
{ |
if ($post_data['last_post']) |
{ |
if ($post_data['first_post']) |
{ |
$forum_update_sql .= ', forum_topics = forum_topics - 1'; |
} |
else |
{ |
$topic_update_sql .= 'topic_replies = topic_replies - 1'; |
$sql = "SELECT MAX(post_id) AS last_post_id |
FROM " . POSTS_TABLE . " |
WHERE topic_id = $topic_id"; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql); |
} |
if ($row = $db->sql_fetchrow($result)) |
{ |
$topic_update_sql .= ', topic_last_post_id = ' . $row['last_post_id']; |
} |
} |
if ($post_data['last_topic']) |
{ |
$sql = "SELECT MAX(post_id) AS last_post_id |
FROM " . POSTS_TABLE . " |
WHERE forum_id = $forum_id"; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql); |
} |
if ($row = $db->sql_fetchrow($result)) |
{ |
$forum_update_sql .= ($row['last_post_id']) ? ', forum_last_post_id = ' . $row['last_post_id'] : ', forum_last_post_id = 0'; |
} |
} |
} |
else if ($post_data['first_post']) |
{ |
$sql = "SELECT MIN(post_id) AS first_post_id |
FROM " . POSTS_TABLE . " |
WHERE topic_id = $topic_id"; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql); |
} |
if ($row = $db->sql_fetchrow($result)) |
{ |
$topic_update_sql .= 'topic_replies = topic_replies - 1, topic_first_post_id = ' . $row['first_post_id']; |
} |
} |
else |
{ |
$topic_update_sql .= 'topic_replies = topic_replies - 1'; |
} |
} |
else if ($mode != 'poll_delete') |
{ |
$forum_update_sql .= ", forum_last_post_id = $post_id" . (($mode == 'newtopic') ? ", forum_topics = forum_topics $sign" : ""); |
$topic_update_sql = "topic_last_post_id = $post_id" . (($mode == 'reply') ? ", topic_replies = topic_replies $sign" : ", topic_first_post_id = $post_id"); |
} |
else |
{ |
$topic_update_sql .= 'topic_vote = 0'; |
} |
if ($mode != 'poll_delete') |
{ |
$sql = "UPDATE " . FORUMS_TABLE . " SET |
$forum_update_sql |
WHERE forum_id = $forum_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql); |
} |
} |
if ($topic_update_sql != '') |
{ |
$sql = "UPDATE " . TOPICS_TABLE . " SET |
$topic_update_sql |
WHERE topic_id = $topic_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql); |
} |
} |
if ($mode != 'poll_delete') |
{ |
$sql = "UPDATE " . USERS_TABLE . " |
SET user_posts = user_posts $sign |
WHERE user_id = $user_id"; |
if (!$db->sql_query($sql, END_TRANSACTION)) |
{ |
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql); |
} |
} |
return; |
} |
// |
// Delete a post/poll |
// |
function delete_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_id, &$post_id, &$poll_id) |
{ |
global $board_config, $lang, $db, $phpbb_root_path, $phpEx; |
global $userdata, $user_ip; |
if ($mode != 'poll_delete') |
{ |
include($phpbb_root_path . 'includes/functions_search.'.$phpEx); |
$sql = "DELETE FROM " . POSTS_TABLE . " |
WHERE post_id = $post_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql); |
} |
$sql = "DELETE FROM " . POSTS_TEXT_TABLE . " |
WHERE post_id = $post_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql); |
} |
if ($post_data['last_post']) |
{ |
if ($post_data['first_post']) |
{ |
$forum_update_sql .= ', forum_topics = forum_topics - 1'; |
$sql = "DELETE FROM " . TOPICS_TABLE . " |
WHERE topic_id = $topic_id |
OR topic_moved_id = $topic_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql); |
} |
$sql = "DELETE FROM " . TOPICS_WATCH_TABLE . " |
WHERE topic_id = $topic_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql); |
} |
} |
} |
remove_search_post($post_id); |
} |
if ($mode == 'poll_delete' || ($mode == 'delete' && $post_data['first_post'] && $post_data['last_post']) && $post_data['has_poll'] && $post_data['edit_poll']) |
{ |
$sql = "DELETE FROM " . VOTE_DESC_TABLE . " |
WHERE topic_id = $topic_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in deleting poll', '', __LINE__, __FILE__, $sql); |
} |
$sql = "DELETE FROM " . VOTE_RESULTS_TABLE . " |
WHERE vote_id = $poll_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in deleting poll', '', __LINE__, __FILE__, $sql); |
} |
$sql = "DELETE FROM " . VOTE_USERS_TABLE . " |
WHERE vote_id = $poll_id"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Error in deleting poll', '', __LINE__, __FILE__, $sql); |
} |
} |
if ($mode == 'delete' && $post_data['first_post'] && $post_data['last_post']) |
{ |
$meta = '<meta http-equiv="refresh" content="3;url=' . append_sid("viewforum.$phpEx?" . POST_FORUM_URL . '=' . $forum_id) . '">'; |
$message = $lang['Deleted']; |
} |
else |
{ |
$meta = '<meta http-equiv="refresh" content="3;url=' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . '=' . $topic_id) . '">'; |
$message = (($mode == 'poll_delete') ? $lang['Poll_delete'] : $lang['Deleted']) . '<br /><br />' . sprintf($lang['Click_return_topic'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") . '">', '</a>'); |
} |
$message .= '<br /><br />' . sprintf($lang['Click_return_forum'], '<a href="' . append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id") . '">', '</a>'); |
return; |
} |
// |
// Handle user notification on new post |
// |
function user_notification($mode, &$post_data, &$topic_title, &$forum_id, &$topic_id, &$post_id, &$notify_user) |
{ |
global $board_config, $lang, $db, $phpbb_root_path, $phpEx; |
global $userdata, $user_ip; |
$current_time = time(); |
if ($mode != 'delete') |
{ |
if ($mode == 'reply') |
{ |
$sql = "SELECT ban_userid |
FROM " . BANLIST_TABLE; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain banlist', '', __LINE__, __FILE__, $sql); |
} |
$user_id_sql = ''; |
while ($row = $db->sql_fetchrow($result)) |
{ |
if (isset($row['ban_userid']) && !empty($row['ban_userid'])) |
{ |
$user_id_sql .= ', ' . $row['ban_userid']; |
} |
} |
$sql = "SELECT u.user_id, u.user_email, u.user_lang |
FROM " . TOPICS_WATCH_TABLE . " tw, " . USERS_TABLE . " u |
WHERE tw.topic_id = $topic_id |
AND tw.user_id NOT IN (" . $userdata['user_id'] . ", " . ANONYMOUS . $user_id_sql . ") |
AND tw.notify_status = " . TOPIC_WATCH_UN_NOTIFIED . " |
AND u.user_id = tw.user_id"; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain list of topic watchers', '', __LINE__, __FILE__, $sql); |
} |
$update_watched_sql = ''; |
$bcc_list_ary = array(); |
if ($row = $db->sql_fetchrow($result)) |
{ |
// Sixty second limit |
@set_time_limit(60); |
do |
{ |
if ($row['user_email'] != '') |
{ |
$bcc_list_ary[$row['user_lang']][] = $row['user_email']; |
} |
$update_watched_sql .= ($update_watched_sql != '') ? ', ' . $row['user_id'] : $row['user_id']; |
} |
while ($row = $db->sql_fetchrow($result)); |
// |
// Let's do some checking to make sure that mass mail functions |
// are working in win32 versions of php. |
// |
if (preg_match('/[c-z]:\\\.*/i', getenv('PATH')) && !$board_config['smtp_delivery']) |
{ |
$ini_val = (@phpversion() >= '4.0.0') ? 'ini_get' : 'get_cfg_var'; |
// We are running on windows, force delivery to use our smtp functions |
// since php's are broken by default |
$board_config['smtp_delivery'] = 1; |
$board_config['smtp_host'] = @$ini_val('SMTP'); |
} |
if (sizeof($bcc_list_ary)) |
{ |
include($phpbb_root_path . 'includes/emailer.'.$phpEx); |
$emailer = new emailer($board_config['smtp_delivery']); |
$script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path'])); |
$script_name = ($script_name != '') ? $script_name . '/viewtopic.'.$phpEx : 'viewtopic.'.$phpEx; |
$server_name = trim($board_config['server_name']); |
$server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://'; |
$server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) . '/' : '/'; |
$orig_word = array(); |
$replacement_word = array(); |
obtain_word_list($orig_word, $replacement_word); |
$emailer->from($board_config['board_email']); |
$emailer->replyto($board_config['board_email']); |
$topic_title = (count($orig_word)) ? preg_replace($orig_word, $replacement_word, unprepare_message($topic_title)) : unprepare_message($topic_title); |
@reset($bcc_list_ary); |
while (list($user_lang, $bcc_list) = each($bcc_list_ary)) |
{ |
$emailer->use_template('topic_notify', $user_lang); |
for ($i = 0; $i < count($bcc_list); $i++) |
{ |
$emailer->bcc($bcc_list[$i]); |
} |
// The Topic_reply_notification lang string below will be used |
// if for some reason the mail template subject cannot be read |
// ... note it will not necessarily be in the posters own language! |
$emailer->set_subject($lang['Topic_reply_notification']); |
// This is a nasty kludge to remove the username var ... till (if?) |
// translators update their templates |
$emailer->msg = preg_replace('#[ ]?{USERNAME}#', '', $emailer->msg); |
$emailer->assign_vars(array( |
'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) : '', |
'SITENAME' => $board_config['sitename'], |
'TOPIC_TITLE' => $topic_title, |
'U_TOPIC' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_POST_URL . "=$post_id#$post_id", |
'U_STOP_WATCHING_TOPIC' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_TOPIC_URL . "=$topic_id&unwatch=topic") |
); |
$emailer->send(); |
$emailer->reset(); |
} |
} |
} |
$db->sql_freeresult($result); |
if ($update_watched_sql != '') |
{ |
$sql = "UPDATE " . TOPICS_WATCH_TABLE . " |
SET notify_status = " . TOPIC_WATCH_NOTIFIED . " |
WHERE topic_id = $topic_id |
AND user_id IN ($update_watched_sql)"; |
$db->sql_query($sql); |
} |
} |
$sql = "SELECT topic_id |
FROM " . TOPICS_WATCH_TABLE . " |
WHERE topic_id = $topic_id |
AND user_id = " . $userdata['user_id']; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain topic watch information', '', __LINE__, __FILE__, $sql); |
} |
$row = $db->sql_fetchrow($result); |
if (!$notify_user && !empty($row['topic_id'])) |
{ |
$sql = "DELETE FROM " . TOPICS_WATCH_TABLE . " |
WHERE topic_id = $topic_id |
AND user_id = " . $userdata['user_id']; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Could not delete topic watch information', '', __LINE__, __FILE__, $sql); |
} |
} |
else if ($notify_user && empty($row['topic_id'])) |
{ |
$sql = "INSERT INTO " . TOPICS_WATCH_TABLE . " (user_id, topic_id, notify_status) |
VALUES (" . $userdata['user_id'] . ", $topic_id, 0)"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Could not insert topic watch information', '', __LINE__, __FILE__, $sql); |
} |
} |
} |
} |
// |
// Fill smiley templates (or just the variables) with smileys |
// Either in a window or inline |
// |
function generate_smilies($mode, $page_id) |
{ |
global $db, $board_config, $template, $lang, $images, $theme, $phpEx, $phpbb_root_path; |
global $user_ip, $session_length, $starttime; |
global $userdata; |
$inline_columns = 4; |
$inline_rows = 5; |
$window_columns = 8; |
if ($mode == 'window') |
{ |
$userdata = session_pagestart($user_ip, $page_id); |
init_userprefs($userdata); |
$gen_simple_header = TRUE; |
$page_title = $lang['Emoticons']; |
include($phpbb_root_path . 'includes/page_header.'.$phpEx); |
$template->set_filenames(array( |
'smiliesbody' => 'posting_smilies.tpl') |
); |
} |
$sql = "SELECT emoticon, code, smile_url |
FROM " . SMILIES_TABLE . " |
ORDER BY smilies_id"; |
if ($result = $db->sql_query($sql)) |
{ |
$num_smilies = 0; |
$rowset = array(); |
while ($row = $db->sql_fetchrow($result)) |
{ |
if (empty($rowset[$row['smile_url']])) |
{ |
$rowset[$row['smile_url']]['code'] = str_replace("'", "\\'", str_replace('\\', '\\\\', $row['code'])); |
$rowset[$row['smile_url']]['emoticon'] = $row['emoticon']; |
$num_smilies++; |
} |
} |
if ($num_smilies) |
{ |
$smilies_count = ($mode == 'inline') ? min(19, $num_smilies) : $num_smilies; |
$smilies_split_row = ($mode == 'inline') ? $inline_columns - 1 : $window_columns - 1; |
$s_colspan = 0; |
$row = 0; |
$col = 0; |
while (list($smile_url, $data) = @each($rowset)) |
{ |
if (!$col) |
{ |
$template->assign_block_vars('smilies_row', array()); |
} |
$template->assign_block_vars('smilies_row.smilies_col', array( |
'SMILEY_CODE' => $data['code'], |
'SMILEY_IMG' => $board_config['smilies_path'] . '/' . $smile_url, |
'SMILEY_DESC' => $data['emoticon']) |
); |
$s_colspan = max($s_colspan, $col + 1); |
if ($col == $smilies_split_row) |
{ |
if ($mode == 'inline' && $row == $inline_rows - 1) |
{ |
break; |
} |
$col = 0; |
$row++; |
} |
else |
{ |
$col++; |
} |
} |
if ($mode == 'inline' && $num_smilies > $inline_rows * $inline_columns) |
{ |
$template->assign_block_vars('switch_smilies_extra', array()); |
$template->assign_vars(array( |
'L_MORE_SMILIES' => $lang['More_emoticons'], |
'U_MORE_SMILIES' => append_sid("posting.$phpEx?mode=smilies")) |
); |
} |
$template->assign_vars(array( |
'L_EMOTICONS' => $lang['Emoticons'], |
'L_CLOSE_WINDOW' => $lang['Close_window'], |
'S_SMILIES_COLSPAN' => $s_colspan) |
); |
} |
} |
if ($mode == 'window') |
{ |
$template->pparse('smiliesbody'); |
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); |
} |
} |
/** |
* Called from within prepare_message to clean included HTML tags if HTML is |
* turned on for that post |
* @param array $tag Matching text from the message to parse |
*/ |
function clean_html($tag) |
{ |
global $board_config; |
if (empty($tag[0])) |
{ |
return ''; |
} |
$allowed_html_tags = preg_split('/, */', strtolower($board_config['allow_html_tags'])); |
$disallowed_attributes = '/^(?:style|on)/i'; |
// Check if this is an end tag |
preg_match('/<[^\w\/]*\/[\W]*(\w+)/', $tag[0], $matches); |
if (sizeof($matches)) |
{ |
if (in_array(strtolower($matches[1]), $allowed_html_tags)) |
{ |
return '</' . $matches[1] . '>'; |
} |
else |
{ |
return htmlspecialchars('</' . $matches[1] . '>'); |
} |
} |
// Check if this is an allowed tag |
if (in_array(strtolower($tag[1]), $allowed_html_tags)) |
{ |
$attributes = ''; |
if (!empty($tag[2])) |
{ |
preg_match_all('/[\W]*?(\w+)[\W]*?=[\W]*?(["\'])((?:(?!\2).)*)\2/', $tag[2], $test); |
for ($i = 0; $i < sizeof($test[0]); $i++) |
{ |
if (preg_match($disallowed_attributes, $test[1][$i])) |
{ |
continue; |
} |
$attributes .= ' ' . $test[1][$i] . '=' . $test[2][$i] . str_replace(array('[', ']'), array('[', ']'), htmlspecialchars($test[3][$i])) . $test[2][$i]; |
} |
} |
if (in_array(strtolower($tag[1]), $allowed_html_tags)) |
{ |
return '<' . $tag[1] . $attributes . '>'; |
} |
else |
{ |
return htmlspecialchars('<' . $tag[1] . $attributes . '>'); |
} |
} |
// Finally, this is not an allowed tag so strip all the attibutes and escape it |
else |
{ |
return htmlspecialchars('<' . $tag[1] . '>'); |
} |
} |
?> |
/Forum/includes/functions_search.php |
---|
0,0 → 1,498 |
<?php |
/*************************************************************************** |
* functions_search.php |
* ------------------- |
* begin : Wed Sep 05 2001 |
* copyright : (C) 2002 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: functions_search.php,v 1.8.2.20 2005/09/14 18:14:30 acydburn Exp $ |
* |
****************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
***************************************************************************/ |
function clean_words($mode, &$entry, &$stopword_list, &$synonym_list) |
{ |
static $drop_char_match = array('^', '$', '&', '(', ')', '<', '>', '`', '\'', '"', '|', ',', '@', '_', '?', '%', '-', '~', '+', '.', '[', ']', '{', '}', ':', '\\', '/', '=', '#', '\'', ';', '!'); |
static $drop_char_replace = array(' ', ' ', ' ', ' ', ' ', ' ', ' ', '', '', ' ', ' ', ' ', ' ', '', ' ', ' ', '', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' , ' ', ' ', ' ', ' ', ' ', ' '); |
$entry = ' ' . strip_tags(strtolower($entry)) . ' '; |
if ( $mode == 'post' ) |
{ |
// Replace line endings by a space |
$entry = preg_replace('/[\n\r]/is', ' ', $entry); |
// HTML entities like |
$entry = preg_replace('/\b&[a-z]+;\b/', ' ', $entry); |
// Remove URL's |
$entry = preg_replace('/\b[a-z0-9]+:\/\/[a-z0-9\.\-]+(\/[a-z0-9\?\.%_\-\+=&\/]+)?/', ' ', $entry); |
// Quickly remove BBcode. |
$entry = preg_replace('/\[img:[a-z0-9]{10,}\].*?\[\/img:[a-z0-9]{10,}\]/', ' ', $entry); |
$entry = preg_replace('/\[\/?url(=.*?)?\]/', ' ', $entry); |
$entry = preg_replace('/\[\/?[a-z\*=\+\-]+(\:?[0-9a-z]+)?:[a-z0-9]{10,}(\:[a-z0-9]+)?=?.*?\]/', ' ', $entry); |
} |
else if ( $mode == 'search' ) |
{ |
$entry = str_replace(' +', ' and ', $entry); |
$entry = str_replace(' -', ' not ', $entry); |
} |
// |
// Filter out strange characters like ^, $, &, change "it's" to "its" |
// |
for($i = 0; $i < count($drop_char_match); $i++) |
{ |
$entry = str_replace($drop_char_match[$i], $drop_char_replace[$i], $entry); |
} |
if ( $mode == 'post' ) |
{ |
$entry = str_replace('*', ' ', $entry); |
// 'words' that consist of <3 or >20 characters are removed. |
$entry = preg_replace('/[ ]([\S]{1,2}|[\S]{21,})[ ]/',' ', $entry); |
} |
if ( !empty($stopword_list) ) |
{ |
for ($j = 0; $j < count($stopword_list); $j++) |
{ |
$stopword = trim($stopword_list[$j]); |
if ( $mode == 'post' || ( $stopword != 'not' && $stopword != 'and' && $stopword != 'or' ) ) |
{ |
$entry = str_replace(' ' . trim($stopword) . ' ', ' ', $entry); |
} |
} |
} |
if ( !empty($synonym_list) ) |
{ |
for ($j = 0; $j < count($synonym_list); $j++) |
{ |
list($replace_synonym, $match_synonym) = split(' ', trim(strtolower($synonym_list[$j]))); |
if ( $mode == 'post' || ( $match_synonym != 'not' && $match_synonym != 'and' && $match_synonym != 'or' ) ) |
{ |
$entry = str_replace(' ' . trim($match_synonym) . ' ', ' ' . trim($replace_synonym) . ' ', $entry); |
} |
} |
} |
return $entry; |
} |
function split_words($entry, $mode = 'post') |
{ |
// If you experience problems with the new method, uncomment this block. |
/* |
$rex = ( $mode == 'post' ) ? "/\b([\w±µ-ÿ][\w±µ-ÿ']*[\w±µ-ÿ]+|[\w±µ-ÿ]+?)\b/" : '/(\*?[a-z0-9±µ-ÿ]+\*?)|\b([a-z0-9±µ-ÿ]+)\b/'; |
preg_match_all($rex, $entry, $split_entries); |
return $split_entries[1]; |
*/ |
// Trim 1+ spaces to one space and split this trimmed string into words. |
return explode(' ', trim(preg_replace('#\s+#', ' ', $entry))); |
} |
function add_search_words($mode, $post_id, $post_text, $post_title = '') |
{ |
global $db, $phpbb_root_path, $board_config, $lang; |
$stopword_array = @file($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . "/search_stopwords.txt"); |
$synonym_array = @file($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . "/search_synonyms.txt"); |
$search_raw_words = array(); |
$search_raw_words['text'] = split_words(clean_words('post', $post_text, $stopword_array, $synonym_array)); |
$search_raw_words['title'] = split_words(clean_words('post', $post_title, $stopword_array, $synonym_array)); |
@set_time_limit(0); |
$word = array(); |
$word_insert_sql = array(); |
while ( list($word_in, $search_matches) = @each($search_raw_words) ) |
{ |
$word_insert_sql[$word_in] = ''; |
if ( !empty($search_matches) ) |
{ |
for ($i = 0; $i < count($search_matches); $i++) |
{ |
$search_matches[$i] = trim($search_matches[$i]); |
if( $search_matches[$i] != '' ) |
{ |
$word[] = $search_matches[$i]; |
if ( !strstr($word_insert_sql[$word_in], "'" . $search_matches[$i] . "'") ) |
{ |
$word_insert_sql[$word_in] .= ( $word_insert_sql[$word_in] != "" ) ? ", '" . $search_matches[$i] . "'" : "'" . $search_matches[$i] . "'"; |
} |
} |
} |
} |
} |
if ( count($word) ) |
{ |
sort($word); |
$prev_word = ''; |
$word_text_sql = ''; |
$temp_word = array(); |
for($i = 0; $i < count($word); $i++) |
{ |
if ( $word[$i] != $prev_word ) |
{ |
$temp_word[] = $word[$i]; |
$word_text_sql .= ( ( $word_text_sql != '' ) ? ', ' : '' ) . "'" . $word[$i] . "'"; |
} |
$prev_word = $word[$i]; |
} |
$word = $temp_word; |
$check_words = array(); |
switch( SQL_LAYER ) |
{ |
case 'postgresql': |
case 'msaccess': |
case 'mssql-odbc': |
case 'oracle': |
case 'db2': |
$sql = "SELECT word_id, word_text |
FROM " . SEARCH_WORD_TABLE . " |
WHERE word_text IN ($word_text_sql)"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not select words', '', __LINE__, __FILE__, $sql); |
} |
while ( $row = $db->sql_fetchrow($result) ) |
{ |
$check_words[$row['word_text']] = $row['word_id']; |
} |
break; |
} |
$value_sql = ''; |
$match_word = array(); |
for ($i = 0; $i < count($word); $i++) |
{ |
$new_match = true; |
if ( isset($check_words[$word[$i]]) ) |
{ |
$new_match = false; |
} |
if ( $new_match ) |
{ |
switch( SQL_LAYER ) |
{ |
case 'mysql': |
case 'mysql4': |
$value_sql .= ( ( $value_sql != '' ) ? ', ' : '' ) . '(\'' . $word[$i] . '\', 0)'; |
break; |
case 'mssql': |
case 'mssql-odbc': |
$value_sql .= ( ( $value_sql != '' ) ? ' UNION ALL ' : '' ) . "SELECT '" . $word[$i] . "', 0"; |
break; |
default: |
$sql = "INSERT INTO " . SEARCH_WORD_TABLE . " (word_text, word_common) |
VALUES ('" . $word[$i] . "', 0)"; |
if( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not insert new word', '', __LINE__, __FILE__, $sql); |
} |
break; |
} |
} |
} |
if ( $value_sql != '' ) |
{ |
switch ( SQL_LAYER ) |
{ |
case 'mysql': |
case 'mysql4': |
$sql = "INSERT IGNORE INTO " . SEARCH_WORD_TABLE . " (word_text, word_common) |
VALUES $value_sql"; |
break; |
case 'mssql': |
case 'mssql-odbc': |
$sql = "INSERT INTO " . SEARCH_WORD_TABLE . " (word_text, word_common) |
$value_sql"; |
break; |
} |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not insert new word', '', __LINE__, __FILE__, $sql); |
} |
} |
} |
while( list($word_in, $match_sql) = @each($word_insert_sql) ) |
{ |
$title_match = ( $word_in == 'title' ) ? 1 : 0; |
if ( $match_sql != '' ) |
{ |
$sql = "INSERT INTO " . SEARCH_MATCH_TABLE . " (post_id, word_id, title_match) |
SELECT $post_id, word_id, $title_match |
FROM " . SEARCH_WORD_TABLE . " |
WHERE word_text IN ($match_sql)"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not insert new word matches', '', __LINE__, __FILE__, $sql); |
} |
} |
} |
if ($mode == 'single') |
{ |
remove_common('single', 4/10, $word); |
} |
return; |
} |
// |
// Check if specified words are too common now |
// |
function remove_common($mode, $fraction, $word_id_list = array()) |
{ |
global $db; |
$sql = "SELECT COUNT(post_id) AS total_posts |
FROM " . POSTS_TABLE; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain post count', '', __LINE__, __FILE__, $sql); |
} |
$row = $db->sql_fetchrow($result); |
if ( $row['total_posts'] >= 100 ) |
{ |
$common_threshold = floor($row['total_posts'] * $fraction); |
if ( $mode == 'single' && count($word_id_list) ) |
{ |
$word_id_sql = ''; |
for($i = 0; $i < count($word_id_list); $i++) |
{ |
$word_id_sql .= ( ( $word_id_sql != '' ) ? ', ' : '' ) . "'" . $word_id_list[$i] . "'"; |
} |
$sql = "SELECT m.word_id |
FROM " . SEARCH_MATCH_TABLE . " m, " . SEARCH_WORD_TABLE . " w |
WHERE w.word_text IN ($word_id_sql) |
AND m.word_id = w.word_id |
GROUP BY m.word_id |
HAVING COUNT(m.word_id) > $common_threshold"; |
} |
else |
{ |
$sql = "SELECT word_id |
FROM " . SEARCH_MATCH_TABLE . " |
GROUP BY word_id |
HAVING COUNT(word_id) > $common_threshold"; |
} |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain common word list', '', __LINE__, __FILE__, $sql); |
} |
$common_word_id = ''; |
while ( $row = $db->sql_fetchrow($result) ) |
{ |
$common_word_id .= ( ( $common_word_id != '' ) ? ', ' : '' ) . $row['word_id']; |
} |
$db->sql_freeresult($result); |
if ( $common_word_id != '' ) |
{ |
$sql = "UPDATE " . SEARCH_WORD_TABLE . " |
SET word_common = " . TRUE . " |
WHERE word_id IN ($common_word_id)"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not delete word list entry', '', __LINE__, __FILE__, $sql); |
} |
$sql = "DELETE FROM " . SEARCH_MATCH_TABLE . " |
WHERE word_id IN ($common_word_id)"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not delete word match entry', '', __LINE__, __FILE__, $sql); |
} |
} |
} |
return; |
} |
function remove_search_post($post_id_sql) |
{ |
global $db; |
$words_removed = false; |
switch ( SQL_LAYER ) |
{ |
case 'mysql': |
case 'mysql4': |
$sql = "SELECT word_id |
FROM " . SEARCH_MATCH_TABLE . " |
WHERE post_id IN ($post_id_sql) |
GROUP BY word_id"; |
if ( $result = $db->sql_query($sql) ) |
{ |
$word_id_sql = ''; |
while ( $row = $db->sql_fetchrow($result) ) |
{ |
$word_id_sql .= ( $word_id_sql != '' ) ? ', ' . $row['word_id'] : $row['word_id']; |
} |
$sql = "SELECT word_id |
FROM " . SEARCH_MATCH_TABLE . " |
WHERE word_id IN ($word_id_sql) |
GROUP BY word_id |
HAVING COUNT(word_id) = 1"; |
if ( $result = $db->sql_query($sql) ) |
{ |
$word_id_sql = ''; |
while ( $row = $db->sql_fetchrow($result) ) |
{ |
$word_id_sql .= ( $word_id_sql != '' ) ? ', ' . $row['word_id'] : $row['word_id']; |
} |
if ( $word_id_sql != '' ) |
{ |
$sql = "DELETE FROM " . SEARCH_WORD_TABLE . " |
WHERE word_id IN ($word_id_sql)"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not delete word list entry', '', __LINE__, __FILE__, $sql); |
} |
$words_removed = $db->sql_affectedrows(); |
} |
} |
} |
break; |
default: |
$sql = "DELETE FROM " . SEARCH_WORD_TABLE . " |
WHERE word_id IN ( |
SELECT word_id |
FROM " . SEARCH_MATCH_TABLE . " |
WHERE word_id IN ( |
SELECT word_id |
FROM " . SEARCH_MATCH_TABLE . " |
WHERE post_id IN ($post_id_sql) |
GROUP BY word_id |
) |
GROUP BY word_id |
HAVING COUNT(word_id) = 1 |
)"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not delete old words from word table', '', __LINE__, __FILE__, $sql); |
} |
$words_removed = $db->sql_affectedrows(); |
break; |
} |
$sql = "DELETE FROM " . SEARCH_MATCH_TABLE . " |
WHERE post_id IN ($post_id_sql)"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql); |
} |
return $words_removed; |
} |
// |
// Username search |
// |
function username_search($search_match) |
{ |
global $db, $board_config, $template, $lang, $images, $theme, $phpEx, $phpbb_root_path; |
global $starttime, $gen_simple_header; |
$gen_simple_header = TRUE; |
$username_list = ''; |
if ( !empty($search_match) ) |
{ |
$username_search = preg_replace('/\*/', '%', phpbb_clean_username($search_match)); |
$sql = "SELECT username |
FROM " . USERS_TABLE . " |
WHERE username LIKE '" . str_replace("\'", "''", $username_search) . "' AND user_id <> " . ANONYMOUS . " |
ORDER BY username"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain search results', '', __LINE__, __FILE__, $sql); |
} |
if ( $row = $db->sql_fetchrow($result) ) |
{ |
do |
{ |
$username_list .= '<option value="' . $row['username'] . '">' . $row['username'] . '</option>'; |
} |
while ( $row = $db->sql_fetchrow($result) ); |
} |
else |
{ |
$username_list .= '<option>' . $lang['No_match']. '</option>'; |
} |
$db->sql_freeresult($result); |
} |
$page_title = $lang['Search']; |
include($phpbb_root_path . 'includes/page_header.'.$phpEx); |
$template->set_filenames(array( |
'search_user_body' => 'search_username.tpl') |
); |
$template->assign_vars(array( |
'USERNAME' => (!empty($search_match)) ? phpbb_clean_username($search_match) : '', |
'L_CLOSE_WINDOW' => $lang['Close_window'], |
'L_SEARCH_USERNAME' => $lang['Find_username'], |
'L_UPDATE_USERNAME' => $lang['Select_username'], |
'L_SELECT' => $lang['Select'], |
'L_SEARCH' => $lang['Search'], |
'L_SEARCH_EXPLAIN' => $lang['Search_author_explain'], |
'L_CLOSE_WINDOW' => $lang['Close_window'], |
'S_USERNAME_OPTIONS' => $username_list, |
'S_SEARCH_ACTION' => append_sid("search.$phpEx?mode=searchuser")) |
); |
if ( $username_list != '' ) |
{ |
$template->assign_block_vars('switch_select_name', array()); |
} |
$template->pparse('search_user_body'); |
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); |
return; |
} |
?> |
/Forum/includes/functions_selects.php |
---|
0,0 → 1,111 |
<?php |
/*************************************************************************** |
* function_selects.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: functions_selects.php,v 1.3.2.5 2005/05/06 20:50:11 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
* |
***************************************************************************/ |
// |
// Pick a language, any language ... |
// |
function language_select($default, $select_name = "language", $dirname="language") |
{ |
global $phpEx, $phpbb_root_path; |
$dir = opendir($phpbb_root_path . $dirname); |
$lang = array(); |
while ( $file = readdir($dir) ) |
{ |
if (preg_match('#^lang_#i', $file) && !is_file(@phpbb_realpath($phpbb_root_path . $dirname . '/' . $file)) && !is_link(@phpbb_realpath($phpbb_root_path . $dirname . '/' . $file))) |
{ |
$filename = trim(str_replace("lang_", "", $file)); |
$displayname = preg_replace("/^(.*?)_(.*)$/", "\\1 [ \\2 ]", $filename); |
$displayname = preg_replace("/\[(.*?)_(.*)\]/", "[ \\1 - \\2 ]", $displayname); |
$lang[$displayname] = $filename; |
} |
} |
closedir($dir); |
@asort($lang); |
@reset($lang); |
$lang_select = '<select name="' . $select_name . '">'; |
while ( list($displayname, $filename) = @each($lang) ) |
{ |
$selected = ( strtolower($default) == strtolower($filename) ) ? ' selected="selected"' : ''; |
$lang_select .= '<option value="' . $filename . '"' . $selected . '>' . ucwords($displayname) . '</option>'; |
} |
$lang_select .= '</select>'; |
return $lang_select; |
} |
// |
// Pick a template/theme combo, |
// |
function style_select($default_style, $select_name = "style", $dirname = "templates") |
{ |
global $db; |
$sql = "SELECT themes_id, style_name |
FROM " . THEMES_TABLE . " |
ORDER BY template_name, themes_id"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, "Couldn't query themes table", "", __LINE__, __FILE__, $sql); |
} |
$style_select = '<select name="' . $select_name . '">'; |
while ( $row = $db->sql_fetchrow($result) ) |
{ |
$selected = ( $row['themes_id'] == $default_style ) ? ' selected="selected"' : ''; |
$style_select .= '<option value="' . $row['themes_id'] . '"' . $selected . '>' . $row['style_name'] . '</option>'; |
} |
$style_select .= "</select>"; |
return $style_select; |
} |
// |
// Pick a timezone |
// |
function tz_select($default, $select_name = 'timezone') |
{ |
global $sys_timezone, $lang; |
if ( !isset($default) ) |
{ |
$default == $sys_timezone; |
} |
$tz_select = '<select name="' . $select_name . '">'; |
while( list($offset, $zone) = @each($lang['tz']) ) |
{ |
$selected = ( $offset == $default ) ? ' selected="selected"' : ''; |
$tz_select .= '<option value="' . $offset . '"' . $selected . '>' . $zone . '</option>'; |
} |
$tz_select .= '</select>'; |
return $tz_select; |
} |
?> |
/Forum/includes/functions_validate.php |
---|
0,0 → 1,205 |
<?php |
/*************************************************************************** |
* functions_validate.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: functions_validate.php,v 1.6.2.15 2005/10/30 15:17:14 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
***************************************************************************/ |
// |
// Check to see if the username has been taken, or if it is disallowed. |
// Also checks if it includes the " character, which we don't allow in usernames. |
// Used for registering, changing names, and posting anonymously with a username |
// |
function validate_username($username) |
{ |
global $db, $lang, $userdata; |
// Remove doubled up spaces |
$username = preg_replace('#\s+#', ' ', trim($username)); |
$username = phpbb_clean_username($username); |
$sql = "SELECT username |
FROM " . USERS_TABLE . " |
WHERE LOWER(username) = '" . strtolower($username) . "'"; |
if ($result = $db->sql_query($sql)) |
{ |
while ($row = $db->sql_fetchrow($result)) |
{ |
if (($userdata['session_logged_in'] && $row['username'] != $userdata['username']) || !$userdata['session_logged_in']) |
{ |
$db->sql_freeresult($result); |
return array('error' => true, 'error_msg' => $lang['Username_taken']); |
} |
} |
} |
$db->sql_freeresult($result); |
$sql = "SELECT group_name |
FROM " . GROUPS_TABLE . " |
WHERE LOWER(group_name) = '" . strtolower($username) . "'"; |
if ($result = $db->sql_query($sql)) |
{ |
if ($row = $db->sql_fetchrow($result)) |
{ |
$db->sql_freeresult($result); |
return array('error' => true, 'error_msg' => $lang['Username_taken']); |
} |
} |
$db->sql_freeresult($result); |
$sql = "SELECT disallow_username |
FROM " . DISALLOW_TABLE; |
if ($result = $db->sql_query($sql)) |
{ |
if ($row = $db->sql_fetchrow($result)) |
{ |
do |
{ |
if (preg_match("#\b(" . str_replace("\*", ".*?", preg_quote($row['disallow_username'], '#')) . ")\b#i", $username)) |
{ |
$db->sql_freeresult($result); |
return array('error' => true, 'error_msg' => $lang['Username_disallowed']); |
} |
} |
while($row = $db->sql_fetchrow($result)); |
} |
} |
$db->sql_freeresult($result); |
$sql = "SELECT word |
FROM " . WORDS_TABLE; |
if ($result = $db->sql_query($sql)) |
{ |
if ($row = $db->sql_fetchrow($result)) |
{ |
do |
{ |
if (preg_match("#\b(" . str_replace("\*", ".*?", preg_quote($row['word'], '#')) . ")\b#i", $username)) |
{ |
$db->sql_freeresult($result); |
return array('error' => true, 'error_msg' => $lang['Username_disallowed']); |
} |
} |
while ($row = $db->sql_fetchrow($result)); |
} |
} |
$db->sql_freeresult($result); |
// Don't allow " and ALT-255 in username. |
if (strstr($username, '"') || strstr($username, '"') || strstr($username, chr(160))) |
{ |
return array('error' => true, 'error_msg' => $lang['Username_invalid']); |
} |
return array('error' => false, 'error_msg' => ''); |
} |
// |
// Check to see if email address is banned |
// or already present in the DB |
// |
function validate_email($email) |
{ |
global $db, $lang; |
if ($email != '') |
{ |
if (preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*?[a-z]+$/is', $email)) |
{ |
$sql = "SELECT ban_email |
FROM " . BANLIST_TABLE; |
if ($result = $db->sql_query($sql)) |
{ |
if ($row = $db->sql_fetchrow($result)) |
{ |
do |
{ |
$match_email = str_replace('*', '.*?', $row['ban_email']); |
if (preg_match('/^' . $match_email . '$/is', $email)) |
{ |
$db->sql_freeresult($result); |
return array('error' => true, 'error_msg' => $lang['Email_banned']); |
} |
} |
while($row = $db->sql_fetchrow($result)); |
} |
} |
$db->sql_freeresult($result); |
$sql = "SELECT user_email |
FROM " . USERS_TABLE . " |
WHERE user_email = '" . str_replace("\'", "''", $email) . "'"; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(GENERAL_ERROR, "Couldn't obtain user email information.", "", __LINE__, __FILE__, $sql); |
} |
if ($row = $db->sql_fetchrow($result)) |
{ |
return array('error' => true, 'error_msg' => $lang['Email_taken']); |
} |
$db->sql_freeresult($result); |
return array('error' => false, 'error_msg' => ''); |
} |
} |
return array('error' => true, 'error_msg' => $lang['Email_invalid']); |
} |
// |
// Does supplementary validation of optional profile fields. This expects common stuff like trim() and strip_tags() |
// to have already been run. Params are passed by-ref, so we can set them to the empty string if they fail. |
// |
function validate_optional_fields(&$icq, &$aim, &$msnm, &$yim, &$website, &$location, &$occupation, &$interests, &$sig) |
{ |
$check_var_length = array('aim', 'msnm', 'yim', 'location', 'occupation', 'interests', 'sig'); |
for($i = 0; $i < count($check_var_length); $i++) |
{ |
if (strlen($$check_var_length[$i]) < 2) |
{ |
$$check_var_length[$i] = ''; |
} |
} |
// ICQ number has to be only numbers. |
if (!preg_match('/^[0-9]+$/', $icq)) |
{ |
$icq = ''; |
} |
// website has to start with http://, followed by something with length at least 3 that |
// contains at least one dot. |
if ($website != "") |
{ |
if (!preg_match('#^http[s]?:\/\/#i', $website)) |
{ |
$website = 'http://' . $website; |
} |
if (!preg_match('#^http[s]?\\:\\/\\/[a-z0-9\-]+\.([a-z0-9\-]+\.)?[a-z]+#i', $website)) |
{ |
$website = ''; |
} |
} |
return; |
} |
?> |
/Forum/includes/index.htm |
---|
0,0 → 1,10 |
<html> |
<head> |
<title></title> |
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> |
</head> |
<body bgcolor="#FFFFFF" text="#000000"> |
</body> |
</html> |
/Forum/includes/page_header.php |
---|
0,0 → 1,490 |
<?php |
/*************************************************************************** |
* page_header.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: page_header.php,v 1.106.2.25 2005/10/30 15:17:14 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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"); |
} |
define('HEADER_INC', TRUE); |
// |
// gzip_compression |
// |
$do_gzip_compress = FALSE; |
if ( $board_config['gzip_compress'] ) |
{ |
$phpver = phpversion(); |
$useragent = (isset($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) ? $HTTP_SERVER_VARS['HTTP_USER_AGENT'] : getenv('HTTP_USER_AGENT'); |
if ( $phpver >= '4.0.4pl1' && ( strstr($useragent,'compatible') || strstr($useragent,'Gecko') ) ) |
{ |
if ( extension_loaded('zlib') ) |
{ |
ob_start('ob_gzhandler'); |
} |
} |
else if ( $phpver > '4.0' ) |
{ |
if ( strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], 'gzip') ) |
{ |
if ( extension_loaded('zlib') ) |
{ |
$do_gzip_compress = TRUE; |
ob_start(); |
ob_implicit_flush(0); |
header('Content-Encoding: gzip'); |
} |
} |
} |
} |
// |
// Parse and show the overall header. |
// |
$template->set_filenames(array( |
'overall_header' => ( empty($gen_simple_header) ) ? 'overall_header.tpl' : 'simple_header.tpl') |
); |
// |
// Generate logged in/logged out status |
// |
if ( $userdata['session_logged_in'] ) |
{ |
$u_login_logout = 'login.'.$phpEx.'?logout=true&sid=' . $userdata['session_id']; |
$l_login_logout = $lang['Logout'] . ' [ ' . $userdata['username'] . ' ]'; |
} |
else |
{ |
$u_login_logout = 'login.'.$phpEx; |
$l_login_logout = $lang['Login']; |
} |
$s_last_visit = ( $userdata['session_logged_in'] ) ? create_date($board_config['default_dateformat'], $userdata['user_lastvisit'], $board_config['board_timezone']) : ''; |
// |
// Get basic (usernames + totals) online |
// situation |
// |
$logged_visible_online = 0; |
$logged_hidden_online = 0; |
$guests_online = 0; |
$online_userlist = ''; |
$l_online_users = ''; |
if (defined('SHOW_ONLINE')) |
{ |
$user_forum_sql = ( !empty($forum_id) ) ? "AND s.session_page = " . intval($forum_id) : ''; |
$sql = "SELECT u.username, u.user_id, u.user_allow_viewonline, u.user_level, s.session_logged_in, s.session_ip |
FROM ".USERS_TABLE." u, ".SESSIONS_TABLE." s |
WHERE u.user_id = s.session_user_id |
AND s.session_time >= ".( time() - 300 ) . " |
$user_forum_sql |
ORDER BY u.username ASC, s.session_ip ASC"; |
if( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain user/online information', '', __LINE__, __FILE__, $sql); |
} |
$userlist_ary = array(); |
$userlist_visible = array(); |
$prev_user_id = 0; |
$prev_user_ip = $prev_session_ip = ''; |
while( $row = $db->sql_fetchrow($result) ) |
{ |
// User is logged in and therefor not a guest |
if ( $row['session_logged_in'] ) |
{ |
// Skip multiple sessions for one user |
if ( $row['user_id'] != $prev_user_id ) |
{ |
$style_color = ''; |
if ( $row['user_level'] == ADMIN ) |
{ |
$row['username'] = '<b>' . $row['username'] . '</b>'; |
$style_color = 'style="color:#' . $theme['fontcolor3'] . '"'; |
} |
else if ( $row['user_level'] == MOD ) |
{ |
$row['username'] = '<b>' . $row['username'] . '</b>'; |
$style_color = 'style="color:#' . $theme['fontcolor2'] . '"'; |
} |
if ( $row['user_allow_viewonline'] ) |
{ |
$user_online_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'>' . $row['username'] . '</a>'; |
$logged_visible_online++; |
} |
else |
{ |
$user_online_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'><i>' . $row['username'] . '</i></a>'; |
$logged_hidden_online++; |
} |
if ( $row['user_allow_viewonline'] || $userdata['user_level'] == ADMIN ) |
{ |
$online_userlist .= ( $online_userlist != '' ) ? ', ' . $user_online_link : $user_online_link; |
} |
} |
$prev_user_id = $row['user_id']; |
} |
else |
{ |
// Skip multiple sessions for one user |
if ( $row['session_ip'] != $prev_session_ip ) |
{ |
$guests_online++; |
} |
} |
$prev_session_ip = $row['session_ip']; |
} |
$db->sql_freeresult($result); |
if ( empty($online_userlist) ) |
{ |
$online_userlist = $lang['None']; |
} |
$online_userlist = ( ( isset($forum_id) ) ? $lang['Browsing_forum'] : $lang['Registered_users'] ) . ' ' . $online_userlist; |
$total_online_users = $logged_visible_online + $logged_hidden_online + $guests_online; |
if ( $total_online_users > $board_config['record_online_users']) |
{ |
$board_config['record_online_users'] = $total_online_users; |
$board_config['record_online_date'] = time(); |
$sql = "UPDATE " . CONFIG_TABLE . " |
SET config_value = '$total_online_users' |
WHERE config_name = 'record_online_users'"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not update online user record (nr of users)', '', __LINE__, __FILE__, $sql); |
} |
$sql = "UPDATE " . CONFIG_TABLE . " |
SET config_value = '" . $board_config['record_online_date'] . "' |
WHERE config_name = 'record_online_date'"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not update online user record (date)', '', __LINE__, __FILE__, $sql); |
} |
} |
if ( $total_online_users == 0 ) |
{ |
$l_t_user_s = $lang['Online_users_zero_total']; |
} |
else if ( $total_online_users == 1 ) |
{ |
$l_t_user_s = $lang['Online_user_total']; |
} |
else |
{ |
$l_t_user_s = $lang['Online_users_total']; |
} |
if ( $logged_visible_online == 0 ) |
{ |
$l_r_user_s = $lang['Reg_users_zero_total']; |
} |
else if ( $logged_visible_online == 1 ) |
{ |
$l_r_user_s = $lang['Reg_user_total']; |
} |
else |
{ |
$l_r_user_s = $lang['Reg_users_total']; |
} |
if ( $logged_hidden_online == 0 ) |
{ |
$l_h_user_s = $lang['Hidden_users_zero_total']; |
} |
else if ( $logged_hidden_online == 1 ) |
{ |
$l_h_user_s = $lang['Hidden_user_total']; |
} |
else |
{ |
$l_h_user_s = $lang['Hidden_users_total']; |
} |
if ( $guests_online == 0 ) |
{ |
$l_g_user_s = $lang['Guest_users_zero_total']; |
} |
else if ( $guests_online == 1 ) |
{ |
$l_g_user_s = $lang['Guest_user_total']; |
} |
else |
{ |
$l_g_user_s = $lang['Guest_users_total']; |
} |
$l_online_users = sprintf($l_t_user_s, $total_online_users); |
$l_online_users .= sprintf($l_r_user_s, $logged_visible_online); |
$l_online_users .= sprintf($l_h_user_s, $logged_hidden_online); |
$l_online_users .= sprintf($l_g_user_s, $guests_online); |
} |
// |
// Obtain number of new private messages |
// if user is logged in |
// |
if ( ($userdata['session_logged_in']) && (empty($gen_simple_header)) ) |
{ |
if ( $userdata['user_new_privmsg'] ) |
{ |
$l_message_new = ( $userdata['user_new_privmsg'] == 1 ) ? $lang['New_pm'] : $lang['New_pms']; |
$l_privmsgs_text = sprintf($l_message_new, $userdata['user_new_privmsg']); |
if ( $userdata['user_last_privmsg'] > $userdata['user_lastvisit'] ) |
{ |
$sql = "UPDATE " . USERS_TABLE . " |
SET user_last_privmsg = " . $userdata['user_lastvisit'] . " |
WHERE user_id = " . $userdata['user_id']; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not update private message new/read time for user', '', __LINE__, __FILE__, $sql); |
} |
$s_privmsg_new = 1; |
$icon_pm = $images['pm_new_msg']; |
} |
else |
{ |
$s_privmsg_new = 0; |
$icon_pm = $images['pm_new_msg']; |
} |
} |
else |
{ |
$l_privmsgs_text = $lang['No_new_pm']; |
$s_privmsg_new = 0; |
$icon_pm = $images['pm_no_new_msg']; |
} |
if ( $userdata['user_unread_privmsg'] ) |
{ |
$l_message_unread = ( $userdata['user_unread_privmsg'] == 1 ) ? $lang['Unread_pm'] : $lang['Unread_pms']; |
$l_privmsgs_text_unread = sprintf($l_message_unread, $userdata['user_unread_privmsg']); |
} |
else |
{ |
$l_privmsgs_text_unread = $lang['No_unread_pm']; |
} |
} |
else |
{ |
$icon_pm = $images['pm_no_new_msg']; |
$l_privmsgs_text = $lang['Login_check_pm']; |
$l_privmsgs_text_unread = ''; |
$s_privmsg_new = 0; |
} |
// |
// Generate HTML required for Mozilla Navigation bar |
// |
if (!isset($nav_links)) |
{ |
$nav_links = array(); |
} |
$nav_links_html = ''; |
$nav_link_proto = '<link rel="%s" href="%s" title="%s" />' . "\n"; |
while( list($nav_item, $nav_array) = @each($nav_links) ) |
{ |
if ( !empty($nav_array['url']) ) |
{ |
$nav_links_html .= sprintf($nav_link_proto, $nav_item, append_sid($nav_array['url']), $nav_array['title']); |
} |
else |
{ |
// We have a nested array, used for items like <link rel='chapter'> that can occur more than once. |
while( list(,$nested_array) = each($nav_array) ) |
{ |
$nav_links_html .= sprintf($nav_link_proto, $nav_item, $nested_array['url'], $nested_array['title']); |
} |
} |
} |
// Format Timezone. We are unable to use array_pop here, because of PHP3 compatibility |
$l_timezone = explode('.', $board_config['board_timezone']); |
$l_timezone = (count($l_timezone) > 1 && $l_timezone[count($l_timezone)-1] != 0) ? $lang[sprintf('%.1f', $board_config['board_timezone'])] : $lang[number_format($board_config['board_timezone'])]; |
// |
// The following assigns all _common_ variables that may be used at any point |
// in a template. |
// |
$template->assign_vars(array( |
'SITENAME' => $board_config['sitename'], |
'SITE_DESCRIPTION' => $board_config['site_desc'], |
'PAGE_TITLE' => $page_title, |
'LAST_VISIT_DATE' => sprintf($lang['You_last_visit'], $s_last_visit), |
'CURRENT_TIME' => sprintf($lang['Current_time'], create_date($board_config['default_dateformat'], time(), $board_config['board_timezone'])), |
'TOTAL_USERS_ONLINE' => $l_online_users, |
'LOGGED_IN_USER_LIST' => $online_userlist, |
'RECORD_USERS' => sprintf($lang['Record_online_users'], $board_config['record_online_users'], create_date($board_config['default_dateformat'], $board_config['record_online_date'], $board_config['board_timezone'])), |
'PRIVATE_MESSAGE_INFO' => $l_privmsgs_text, |
'PRIVATE_MESSAGE_INFO_UNREAD' => $l_privmsgs_text_unread, |
'PRIVATE_MESSAGE_NEW_FLAG' => $s_privmsg_new, |
'PRIVMSG_IMG' => $icon_pm, |
'L_USERNAME' => $lang['Username'], |
'L_PASSWORD' => $lang['Password'], |
'L_LOGIN_LOGOUT' => $l_login_logout, |
'L_LOGIN' => $lang['Login'], |
'L_LOG_ME_IN' => $lang['Log_me_in'], |
'L_AUTO_LOGIN' => $lang['Log_me_in'], |
'L_INDEX' => sprintf($lang['Forum_Index'], $board_config['sitename']), |
'L_REGISTER' => $lang['Register'], |
'L_PROFILE' => $lang['Profile'], |
'L_SEARCH' => $lang['Search'], |
'L_PRIVATEMSGS' => $lang['Private_Messages'], |
'L_WHO_IS_ONLINE' => $lang['Who_is_Online'], |
'L_MEMBERLIST' => $lang['Memberlist'], |
'L_FAQ' => $lang['FAQ'], |
'L_USERGROUPS' => $lang['Usergroups'], |
'L_SEARCH_NEW' => $lang['Search_new'], |
'L_SEARCH_UNANSWERED' => $lang['Search_unanswered'], |
'L_SEARCH_SELF' => $lang['Search_your_posts'], |
'L_WHOSONLINE_ADMIN' => sprintf($lang['Admin_online_color'], '<span style="color:#' . $theme['fontcolor3'] . '">', '</span>'), |
'L_WHOSONLINE_MOD' => sprintf($lang['Mod_online_color'], '<span style="color:#' . $theme['fontcolor2'] . '">', '</span>'), |
'U_SEARCH_UNANSWERED' => append_sid('search.'.$phpEx.'?search_id=unanswered'), |
'U_SEARCH_SELF' => append_sid('search.'.$phpEx.'?search_id=egosearch'), |
'U_SEARCH_NEW' => append_sid('search.'.$phpEx.'?search_id=newposts'), |
'U_INDEX' => append_sid('index.'.$phpEx), |
'U_REGISTER' => append_sid('profile.'.$phpEx.'?mode=register'), |
'U_PROFILE' => append_sid('profile.'.$phpEx.'?mode=editprofile'), |
'U_PRIVATEMSGS' => append_sid('privmsg.'.$phpEx.'?folder=inbox'), |
'U_PRIVATEMSGS_POPUP' => append_sid('privmsg.'.$phpEx.'?mode=newpm'), |
'U_SEARCH' => append_sid('search.'.$phpEx), |
'U_MEMBERLIST' => append_sid('memberlist.'.$phpEx), |
'U_MODCP' => append_sid('modcp.'.$phpEx), |
'U_FAQ' => append_sid('faq.'.$phpEx), |
'U_VIEWONLINE' => append_sid('viewonline.'.$phpEx), |
'U_LOGIN_LOGOUT' => append_sid($u_login_logout), |
'U_GROUP_CP' => append_sid('groupcp.'.$phpEx), |
'S_CONTENT_DIRECTION' => $lang['DIRECTION'], |
'S_CONTENT_ENCODING' => $lang['ENCODING'], |
'S_CONTENT_DIR_LEFT' => $lang['LEFT'], |
'S_CONTENT_DIR_RIGHT' => $lang['RIGHT'], |
'S_TIMEZONE' => sprintf($lang['All_times'], $l_timezone), |
'S_LOGIN_ACTION' => append_sid('login.'.$phpEx), |
'T_HEAD_STYLESHEET' => $theme['head_stylesheet'], |
'T_BODY_BACKGROUND' => $theme['body_background'], |
'T_BODY_BGCOLOR' => '#'.$theme['body_bgcolor'], |
'T_BODY_TEXT' => '#'.$theme['body_text'], |
'T_BODY_LINK' => '#'.$theme['body_link'], |
'T_BODY_VLINK' => '#'.$theme['body_vlink'], |
'T_BODY_ALINK' => '#'.$theme['body_alink'], |
'T_BODY_HLINK' => '#'.$theme['body_hlink'], |
'T_TR_COLOR1' => '#'.$theme['tr_color1'], |
'T_TR_COLOR2' => '#'.$theme['tr_color2'], |
'T_TR_COLOR3' => '#'.$theme['tr_color3'], |
'T_TR_CLASS1' => $theme['tr_class1'], |
'T_TR_CLASS2' => $theme['tr_class2'], |
'T_TR_CLASS3' => $theme['tr_class3'], |
'T_TH_COLOR1' => '#'.$theme['th_color1'], |
'T_TH_COLOR2' => '#'.$theme['th_color2'], |
'T_TH_COLOR3' => '#'.$theme['th_color3'], |
'T_TH_CLASS1' => $theme['th_class1'], |
'T_TH_CLASS2' => $theme['th_class2'], |
'T_TH_CLASS3' => $theme['th_class3'], |
'T_TD_COLOR1' => '#'.$theme['td_color1'], |
'T_TD_COLOR2' => '#'.$theme['td_color2'], |
'T_TD_COLOR3' => '#'.$theme['td_color3'], |
'T_TD_CLASS1' => $theme['td_class1'], |
'T_TD_CLASS2' => $theme['td_class2'], |
'T_TD_CLASS3' => $theme['td_class3'], |
'T_FONTFACE1' => $theme['fontface1'], |
'T_FONTFACE2' => $theme['fontface2'], |
'T_FONTFACE3' => $theme['fontface3'], |
'T_FONTSIZE1' => $theme['fontsize1'], |
'T_FONTSIZE2' => $theme['fontsize2'], |
'T_FONTSIZE3' => $theme['fontsize3'], |
'T_FONTCOLOR1' => '#'.$theme['fontcolor1'], |
'T_FONTCOLOR2' => '#'.$theme['fontcolor2'], |
'T_FONTCOLOR3' => '#'.$theme['fontcolor3'], |
'T_SPAN_CLASS1' => $theme['span_class1'], |
'T_SPAN_CLASS2' => $theme['span_class2'], |
'T_SPAN_CLASS3' => $theme['span_class3'], |
'NAV_LINKS' => $nav_links_html) |
); |
// |
// Login box? |
// |
if ( !$userdata['session_logged_in'] ) |
{ |
$template->assign_block_vars('switch_user_logged_out', array()); |
// |
// Allow autologin? |
// |
if (!isset($board_config['allow_autologin']) || $board_config['allow_autologin'] ) |
{ |
$template->assign_block_vars('switch_allow_autologin', array()); |
$template->assign_block_vars('switch_user_logged_out.switch_allow_autologin', array()); |
} |
} |
else |
{ |
$template->assign_block_vars('switch_user_logged_in', array()); |
if ( !empty($userdata['user_popup_pm']) ) |
{ |
$template->assign_block_vars('switch_enable_pm_popup', array()); |
} |
} |
// Add no-cache control for cookies if they are set |
//$c_no_cache = (isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_sid']) || isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_data'])) ? 'no-cache="set-cookie", ' : ''; |
// Work around for "current" Apache 2 + PHP module which seems to not |
// cope with private cache control setting |
if (!empty($HTTP_SERVER_VARS['SERVER_SOFTWARE']) && strstr($HTTP_SERVER_VARS['SERVER_SOFTWARE'], 'Apache/2')) |
{ |
header ('Cache-Control: no-cache, pre-check=0, post-check=0'); |
} |
else |
{ |
header ('Cache-Control: private, pre-check=0, post-check=0, max-age=0'); |
} |
header ('Expires: 0'); |
header ('Pragma: no-cache'); |
$template->pparse('overall_header'); |
?> |
/Forum/includes/page_tail.php |
---|
0,0 → 1,76 |
<?php |
/*************************************************************************** |
* page_tail.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: page_tail.php,v 1.27.2.4 2005/09/14 18:14:30 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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'); |
} |
global $do_gzip_compress; |
// |
// Show the overall footer. |
// |
$admin_link = ( $userdata['user_level'] == ADMIN ) ? '<a href="admin/index.' . $phpEx . '?sid=' . $userdata['session_id'] . '">' . $lang['Admin_panel'] . '</a><br /><br />' : ''; |
$template->set_filenames(array( |
'overall_footer' => ( empty($gen_simple_header) ) ? 'overall_footer.tpl' : 'simple_footer.tpl') |
); |
$template->assign_vars(array( |
'TRANSLATION_INFO' => (isset($lang['TRANSLATION_INFO'])) ? $lang['TRANSLATION_INFO'] : ((isset($lang['TRANSLATION'])) ? $lang['TRANSLATION'] : ''), |
'ADMIN_LINK' => $admin_link) |
); |
$template->pparse('overall_footer'); |
// |
// Close our DB connection. |
// |
$db->sql_close(); |
// |
// Compress buffered output if required and send to browser |
// |
if ( $do_gzip_compress ) |
{ |
// |
// Borrowed from php.net! |
// |
$gzip_contents = ob_get_contents(); |
ob_end_clean(); |
$gzip_size = strlen($gzip_contents); |
$gzip_crc = crc32($gzip_contents); |
$gzip_contents = gzcompress($gzip_contents, 9); |
$gzip_contents = substr($gzip_contents, 0, strlen($gzip_contents) - 4); |
echo "\x1f\x8b\x08\x00\x00\x00\x00\x00"; |
echo $gzip_contents; |
echo pack('V', $gzip_crc); |
echo pack('V', $gzip_size); |
} |
exit; |
?> |
/Forum/includes/prune.php |
---|
0,0 → 1,175 |
<?php |
/*************************************************************************** |
* prune.php |
* ------------------- |
* begin : Thursday, June 14, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: prune.php,v 1.19.2.7 2006/01/29 17:31:16 grahamje Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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"); |
} |
require($phpbb_root_path . 'includes/functions_search.'.$phpEx); |
function prune($forum_id, $prune_date, $prune_all = false) |
{ |
global $db, $lang; |
// Before pruning, lets try to clean up the invalid topic entries |
$sql = 'SELECT topic_id FROM ' . TOPICS_TABLE . ' |
WHERE topic_last_post_id = 0'; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain lists of topics to sync', '', __LINE__, __FILE__, $sql); |
} |
while( $row = $db->sql_fetchrow($result) ) |
{ |
sync('topic', $row['topic_id']); |
} |
$db->sql_freeresult($result); |
$prune_all = ($prune_all) ? '' : 'AND t.topic_vote = 0 AND t.topic_type <> ' . POST_ANNOUNCE; |
// |
// Those without polls and announcements ... unless told otherwise! |
// |
$sql = "SELECT t.topic_id |
FROM " . POSTS_TABLE . " p, " . TOPICS_TABLE . " t |
WHERE t.forum_id = $forum_id |
$prune_all |
AND p.post_id = t.topic_last_post_id"; |
if ( $prune_date != '' ) |
{ |
$sql .= " AND p.post_time < $prune_date"; |
} |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain lists of topics to prune', '', __LINE__, __FILE__, $sql); |
} |
$sql_topics = ''; |
while( $row = $db->sql_fetchrow($result) ) |
{ |
$sql_topics .= ( ( $sql_topics != '' ) ? ', ' : '' ) . $row['topic_id']; |
} |
$db->sql_freeresult($result); |
if( $sql_topics != '' ) |
{ |
$sql = "SELECT post_id |
FROM " . POSTS_TABLE . " |
WHERE forum_id = $forum_id |
AND topic_id IN ($sql_topics)"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain list of posts to prune', '', __LINE__, __FILE__, $sql); |
} |
$sql_post = ''; |
while ( $row = $db->sql_fetchrow($result) ) |
{ |
$sql_post .= ( ( $sql_post != '' ) ? ', ' : '' ) . $row['post_id']; |
} |
$db->sql_freeresult($result); |
if ( $sql_post != '' ) |
{ |
$sql = "DELETE FROM " . TOPICS_WATCH_TABLE . " |
WHERE topic_id IN ($sql_topics)"; |
if ( !$db->sql_query($sql, BEGIN_TRANSACTION) ) |
{ |
message_die(GENERAL_ERROR, 'Could not delete watched topics during prune', '', __LINE__, __FILE__, $sql); |
} |
$sql = "DELETE FROM " . TOPICS_TABLE . " |
WHERE topic_id IN ($sql_topics)"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not delete topics during prune', '', __LINE__, __FILE__, $sql); |
} |
$pruned_topics = $db->sql_affectedrows(); |
$sql = "DELETE FROM " . POSTS_TABLE . " |
WHERE post_id IN ($sql_post)"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not delete post_text during prune', '', __LINE__, __FILE__, $sql); |
} |
$pruned_posts = $db->sql_affectedrows(); |
$sql = "DELETE FROM " . POSTS_TEXT_TABLE . " |
WHERE post_id IN ($sql_post)"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not delete post during prune', '', __LINE__, __FILE__, $sql); |
} |
remove_search_post($sql_post); |
return array ('topics' => $pruned_topics, 'posts' => $pruned_posts); |
} |
} |
return array('topics' => 0, 'posts' => 0); |
} |
// |
// Function auto_prune(), this function will read the configuration data from |
// the auto_prune table and call the prune function with the necessary info. |
// |
function auto_prune($forum_id = 0) |
{ |
global $db, $lang; |
$sql = "SELECT * |
FROM " . PRUNE_TABLE . " |
WHERE forum_id = $forum_id"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not read auto_prune table', '', __LINE__, __FILE__, $sql); |
} |
if ( $row = $db->sql_fetchrow($result) ) |
{ |
if ( $row['prune_freq'] && $row['prune_days'] ) |
{ |
$prune_date = time() - ( $row['prune_days'] * 86400 ); |
$next_prune = time() + ( $row['prune_freq'] * 86400 ); |
prune($forum_id, $prune_date); |
sync('forum', $forum_id); |
$sql = "UPDATE " . FORUMS_TABLE . " |
SET prune_next = $next_prune |
WHERE forum_id = $forum_id"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not update forum table', '', __LINE__, __FILE__, $sql); |
} |
} |
} |
return; |
} |
?> |
/Forum/includes/sessions.php |
---|
0,0 → 1,578 |
<?php |
/*************************************************************************** |
* sessions.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: sessions.php,v 1.58.2.25 2006/05/18 19:23:07 grahamje Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
***************************************************************************/ |
// |
// Adds/updates a new session to the database for the given userid. |
// Returns the new session ID on success. |
// |
function session_begin($user_id, $user_ip, $page_id, $auto_create = 0, $enable_autologin = 0, $admin = 0) |
{ |
global $db, $board_config; |
global $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $SID; |
$cookiename = $board_config['cookie_name']; |
$cookiepath = $board_config['cookie_path']; |
$cookiedomain = $board_config['cookie_domain']; |
$cookiesecure = $board_config['cookie_secure']; |
if ( isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) || isset($HTTP_COOKIE_VARS[$cookiename . '_data']) ) |
{ |
$session_id = isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) ? $HTTP_COOKIE_VARS[$cookiename . '_sid'] : ''; |
$sessiondata = isset($HTTP_COOKIE_VARS[$cookiename . '_data']) ? unserialize(stripslashes($HTTP_COOKIE_VARS[$cookiename . '_data'])) : array(); |
$sessionmethod = SESSION_METHOD_COOKIE; |
} |
else |
{ |
$sessiondata = array(); |
$session_id = ( isset($HTTP_GET_VARS['sid']) ) ? $HTTP_GET_VARS['sid'] : ''; |
$sessionmethod = SESSION_METHOD_GET; |
} |
// |
if (!preg_match('/^[A-Za-z0-9]*$/', $session_id)) |
{ |
$session_id = ''; |
} |
$page_id = (int) $page_id; |
$last_visit = 0; |
$current_time = time(); |
// |
// Are auto-logins allowed? |
// If allow_autologin is not set or is true then they are |
// (same behaviour as old 2.0.x session code) |
// |
if (isset($board_config['allow_autologin']) && !$board_config['allow_autologin']) |
{ |
$enable_autologin = $sessiondata['autologinid'] = false; |
} |
// |
// First off attempt to join with the autologin value if we have one |
// If not, just use the user_id value |
// |
$userdata = array(); |
if ($user_id != ANONYMOUS) |
{ |
if (isset($sessiondata['autologinid']) && (string) $sessiondata['autologinid'] != '' && $user_id) |
{ |
$sql = 'SELECT u.* |
FROM ' . USERS_TABLE . ' u, ' . SESSIONS_KEYS_TABLE . ' k |
WHERE u.user_id = ' . (int) $user_id . " |
AND u.user_active = 1 |
AND k.user_id = u.user_id |
AND k.key_id = '" . md5($sessiondata['autologinid']) . "'"; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql); |
} |
$userdata = $db->sql_fetchrow($result); |
$db->sql_freeresult($result); |
$enable_autologin = $login = 1; |
} |
else if (!$auto_create) |
{ |
$sessiondata['autologinid'] = ''; |
$sessiondata['userid'] = $user_id; |
$sql = 'SELECT * |
FROM ' . USERS_TABLE . ' |
WHERE user_id = ' . (int) $user_id . ' |
AND user_active = 1'; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql); |
} |
$userdata = $db->sql_fetchrow($result); |
$db->sql_freeresult($result); |
$login = 1; |
} |
} |
// |
// At this point either $userdata should be populated or |
// one of the below is true |
// * Key didn't match one in the DB |
// * User does not exist |
// * User is inactive |
// |
if (!sizeof($userdata) || !is_array($userdata) || !$userdata) |
{ |
$sessiondata['autologinid'] = ''; |
$sessiondata['userid'] = $user_id = ANONYMOUS; |
$enable_autologin = $login = 0; |
$sql = 'SELECT * |
FROM ' . USERS_TABLE . ' |
WHERE user_id = ' . (int) $user_id; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql); |
} |
$userdata = $db->sql_fetchrow($result); |
$db->sql_freeresult($result); |
} |
// |
// Initial ban check against user id, IP and email address |
// |
preg_match('/(..)(..)(..)(..)/', $user_ip, $user_ip_parts); |
$sql = "SELECT ban_ip, ban_userid, ban_email |
FROM " . BANLIST_TABLE . " |
WHERE ban_ip IN ('" . $user_ip_parts[1] . $user_ip_parts[2] . $user_ip_parts[3] . $user_ip_parts[4] . "', '" . $user_ip_parts[1] . $user_ip_parts[2] . $user_ip_parts[3] . "ff', '" . $user_ip_parts[1] . $user_ip_parts[2] . "ffff', '" . $user_ip_parts[1] . "ffffff') |
OR ban_userid = $user_id"; |
if ( $user_id != ANONYMOUS ) |
{ |
$sql .= " OR ban_email LIKE '" . str_replace("\'", "''", $userdata['user_email']) . "' |
OR ban_email LIKE '" . substr(str_replace("\'", "''", $userdata['user_email']), strpos(str_replace("\'", "''", $userdata['user_email']), "@")) . "'"; |
} |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(CRITICAL_ERROR, 'Could not obtain ban information', '', __LINE__, __FILE__, $sql); |
} |
if ( $ban_info = $db->sql_fetchrow($result) ) |
{ |
if ( $ban_info['ban_ip'] || $ban_info['ban_userid'] || $ban_info['ban_email'] ) |
{ |
message_die(CRITICAL_MESSAGE, 'You_been_banned'); |
} |
} |
// |
// Create or update the session |
// |
$sql = "UPDATE " . SESSIONS_TABLE . " |
SET session_user_id = $user_id, session_start = $current_time, session_time = $current_time, session_page = $page_id, session_logged_in = $login, session_admin = $admin |
WHERE session_id = '" . $session_id . "' |
AND session_ip = '$user_ip'"; |
if ( !$db->sql_query($sql) || !$db->sql_affectedrows() ) |
{ |
$session_id = md5(dss_rand()); |
$sql = "INSERT INTO " . SESSIONS_TABLE . " |
(session_id, session_user_id, session_start, session_time, session_ip, session_page, session_logged_in, session_admin) |
VALUES ('$session_id', $user_id, $current_time, $current_time, '$user_ip', $page_id, $login, $admin)"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(CRITICAL_ERROR, 'Error creating new session', '', __LINE__, __FILE__, $sql); |
} |
} |
if ( $user_id != ANONYMOUS ) |
{ |
$last_visit = ( $userdata['user_session_time'] > 0 ) ? $userdata['user_session_time'] : $current_time; |
if (!$admin) |
{ |
$sql = "UPDATE " . USERS_TABLE . " |
SET user_session_time = $current_time, user_session_page = $page_id, user_lastvisit = $last_visit |
WHERE user_id = $user_id"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(CRITICAL_ERROR, 'Error updating last visit time', '', __LINE__, __FILE__, $sql); |
} |
} |
$userdata['user_lastvisit'] = $last_visit; |
// |
// Regenerate the auto-login key |
// |
if ($enable_autologin) |
{ |
$auto_login_key = dss_rand() . dss_rand(); |
if (isset($sessiondata['autologinid']) && (string) $sessiondata['autologinid'] != '') |
{ |
$sql = 'UPDATE ' . SESSIONS_KEYS_TABLE . " |
SET last_ip = '$user_ip', key_id = '" . md5($auto_login_key) . "', last_login = $current_time |
WHERE key_id = '" . md5($sessiondata['autologinid']) . "'"; |
} |
else |
{ |
$sql = 'INSERT INTO ' . SESSIONS_KEYS_TABLE . "(key_id, user_id, last_ip, last_login) |
VALUES ('" . md5($auto_login_key) . "', $user_id, '$user_ip', $current_time)"; |
} |
if ( !$db->sql_query($sql) ) |
{ |
message_die(CRITICAL_ERROR, 'Error updating session key', '', __LINE__, __FILE__, $sql); |
} |
$sessiondata['autologinid'] = $auto_login_key; |
unset($auto_login_key); |
} |
else |
{ |
$sessiondata['autologinid'] = ''; |
} |
// $sessiondata['autologinid'] = (!$admin) ? (( $enable_autologin && $sessionmethod == SESSION_METHOD_COOKIE ) ? $auto_login_key : '') : $sessiondata['autologinid']; |
$sessiondata['userid'] = $user_id; |
} |
$userdata['session_id'] = $session_id; |
$userdata['session_ip'] = $user_ip; |
$userdata['session_user_id'] = $user_id; |
$userdata['session_logged_in'] = $login; |
$userdata['session_page'] = $page_id; |
$userdata['session_start'] = $current_time; |
$userdata['session_time'] = $current_time; |
$userdata['session_admin'] = $admin; |
$userdata['session_key'] = $sessiondata['autologinid']; |
setcookie($cookiename . '_data', serialize($sessiondata), $current_time + 31536000, $cookiepath, $cookiedomain, $cookiesecure); |
setcookie($cookiename . '_sid', $session_id, 0, $cookiepath, $cookiedomain, $cookiesecure); |
$SID = 'sid=' . $session_id; |
return $userdata; |
} |
// |
// Checks for a given user session, tidies session table and updates user |
// sessions at each page refresh |
// |
function session_pagestart($user_ip, $thispage_id) |
{ |
global $db, $lang, $board_config; |
global $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $SID; |
$cookiename = $board_config['cookie_name']; |
$cookiepath = $board_config['cookie_path']; |
$cookiedomain = $board_config['cookie_domain']; |
$cookiesecure = $board_config['cookie_secure']; |
$current_time = time(); |
unset($userdata); |
if ( isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) || isset($HTTP_COOKIE_VARS[$cookiename . '_data']) ) |
{ |
$sessiondata = isset( $HTTP_COOKIE_VARS[$cookiename . '_data'] ) ? unserialize(stripslashes($HTTP_COOKIE_VARS[$cookiename . '_data'])) : array(); |
$session_id = isset( $HTTP_COOKIE_VARS[$cookiename . '_sid'] ) ? $HTTP_COOKIE_VARS[$cookiename . '_sid'] : ''; |
$sessionmethod = SESSION_METHOD_COOKIE; |
} |
else |
{ |
$sessiondata = array(); |
$session_id = ( isset($HTTP_GET_VARS['sid']) ) ? $HTTP_GET_VARS['sid'] : ''; |
$sessionmethod = SESSION_METHOD_GET; |
} |
// |
if (!preg_match('/^[A-Za-z0-9]*$/', $session_id)) |
{ |
$session_id = ''; |
} |
$thispage_id = (int) $thispage_id; |
// |
// Does a session exist? |
// |
if ( !empty($session_id) ) |
{ |
// |
// session_id exists so go ahead and attempt to grab all |
// data in preparation |
// |
$sql = "SELECT u.*, s.* |
FROM " . SESSIONS_TABLE . " s, " . USERS_TABLE . " u |
WHERE s.session_id = '$session_id' |
AND u.user_id = s.session_user_id"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql); |
} |
$userdata = $db->sql_fetchrow($result); |
// |
// Did the session exist in the DB? |
// |
if ( isset($userdata['user_id']) ) |
{ |
// |
// Do not check IP assuming equivalence, if IPv4 we'll check only first 24 |
// bits ... I've been told (by vHiker) this should alleviate problems with |
// load balanced et al proxies while retaining some reliance on IP security. |
// |
$ip_check_s = substr($userdata['session_ip'], 0, 6); |
$ip_check_u = substr($user_ip, 0, 6); |
if ($ip_check_s == $ip_check_u) |
{ |
$SID = ($sessionmethod == SESSION_METHOD_GET || defined('IN_ADMIN')) ? 'sid=' . $session_id : ''; |
// |
// Only update session DB a minute or so after last update |
// |
if ( $current_time - $userdata['session_time'] > 60 ) |
{ |
// A little trick to reset session_admin on session re-usage |
$update_admin = (!defined('IN_ADMIN') && $current_time - $userdata['session_time'] > ($board_config['session_length']+60)) ? ', session_admin = 0' : ''; |
$sql = "UPDATE " . SESSIONS_TABLE . " |
SET session_time = $current_time, session_page = $thispage_id$update_admin |
WHERE session_id = '" . $userdata['session_id'] . "'"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(CRITICAL_ERROR, 'Error updating sessions table', '', __LINE__, __FILE__, $sql); |
} |
if ( $userdata['user_id'] != ANONYMOUS ) |
{ |
$sql = "UPDATE " . USERS_TABLE . " |
SET user_session_time = $current_time, user_session_page = $thispage_id |
WHERE user_id = " . $userdata['user_id']; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(CRITICAL_ERROR, 'Error updating sessions table', '', __LINE__, __FILE__, $sql); |
} |
} |
session_clean($userdata['session_id']); |
setcookie($cookiename . '_data', serialize($sessiondata), $current_time + 31536000, $cookiepath, $cookiedomain, $cookiesecure); |
setcookie($cookiename . '_sid', $session_id, 0, $cookiepath, $cookiedomain, $cookiesecure); |
} |
// Add the session_key to the userdata array if it is set |
if ( isset($sessiondata['autologinid']) && $sessiondata['autologinid'] != '' ) |
{ |
$userdata['session_key'] = $sessiondata['autologinid']; |
} |
return $userdata; |
} |
} |
} |
// |
// If we reach here then no (valid) session exists. So we'll create a new one, |
// using the cookie user_id if available to pull basic user prefs. |
// |
$user_id = ( isset($sessiondata['userid']) ) ? intval($sessiondata['userid']) : ANONYMOUS; |
if ( !($userdata = session_begin($user_id, $user_ip, $thispage_id, TRUE)) ) |
{ |
message_die(CRITICAL_ERROR, 'Error creating user session', '', __LINE__, __FILE__, $sql); |
} |
return $userdata; |
} |
/** |
* Terminates the specified session |
* It will delete the entry in the sessions table for this session, |
* remove the corresponding auto-login key and reset the cookies |
*/ |
function session_end($session_id, $user_id) |
{ |
global $db, $lang, $board_config, $userdata; |
global $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $SID; |
$cookiename = $board_config['cookie_name']; |
$cookiepath = $board_config['cookie_path']; |
$cookiedomain = $board_config['cookie_domain']; |
$cookiesecure = $board_config['cookie_secure']; |
$current_time = time(); |
if (!preg_match('/^[A-Za-z0-9]*$/', $session_id)) |
{ |
return; |
} |
// |
// Delete existing session |
// |
$sql = 'DELETE FROM ' . SESSIONS_TABLE . " |
WHERE session_id = '$session_id' |
AND session_user_id = $user_id"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(CRITICAL_ERROR, 'Error removing user session', '', __LINE__, __FILE__, $sql); |
} |
// |
// Remove this auto-login entry (if applicable) |
// |
if ( isset($userdata['session_key']) && $userdata['session_key'] != '' ) |
{ |
$autologin_key = md5($userdata['session_key']); |
$sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . ' |
WHERE user_id = ' . (int) $user_id . " |
AND key_id = '$autologin_key'"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(CRITICAL_ERROR, 'Error removing auto-login key', '', __LINE__, __FILE__, $sql); |
} |
} |
// |
// We expect that message_die will be called after this function, |
// but just in case it isn't, reset $userdata to the details for a guest |
// |
$sql = 'SELECT * |
FROM ' . USERS_TABLE . ' |
WHERE user_id = ' . ANONYMOUS; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(CRITICAL_ERROR, 'Error obtaining user details', '', __LINE__, __FILE__, $sql); |
} |
if ( !($userdata = $db->sql_fetchrow($result)) ) |
{ |
message_die(CRITICAL_ERROR, 'Error obtaining user details', '', __LINE__, __FILE__, $sql); |
} |
$db->sql_freeresult($result); |
setcookie($cookiename . '_data', '', $current_time - 31536000, $cookiepath, $cookiedomain, $cookiesecure); |
setcookie($cookiename . '_sid', '', $current_time - 31536000, $cookiepath, $cookiedomain, $cookiesecure); |
return true; |
} |
/** |
* Removes expired sessions and auto-login keys from the database |
*/ |
function session_clean($session_id) |
{ |
global $board_config, $db; |
// |
// Delete expired sessions |
// |
$sql = 'DELETE FROM ' . SESSIONS_TABLE . ' |
WHERE session_time < ' . (time() - (int) $board_config['session_length']) . " |
AND session_id <> '$session_id'"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(CRITICAL_ERROR, 'Error clearing sessions table', '', __LINE__, __FILE__, $sql); |
} |
// |
// Delete expired auto-login keys |
// If max_autologin_time is not set then keys will never be deleted |
// (same behaviour as old 2.0.x session code) |
// |
if (!empty($board_config['max_autologin_time']) && $board_config['max_autologin_time'] > 0) |
{ |
$sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . ' |
WHERE last_login < ' . (time() - (86400 * (int) $board_config['max_autologin_time'])); |
$db->sql_query($sql); |
} |
return true; |
} |
/** |
* Reset all login keys for the specified user |
* Called on password changes |
*/ |
function session_reset_keys($user_id, $user_ip) |
{ |
global $db, $userdata, $board_config; |
$key_sql = ($user_id == $userdata['user_id'] && !empty($userdata['session_key'])) ? "AND key_id != '" . md5($userdata['session_key']) . "'" : ''; |
$sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . ' |
WHERE user_id = ' . (int) $user_id . " |
$key_sql"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(CRITICAL_ERROR, 'Error removing auto-login keys', '', __LINE__, __FILE__, $sql); |
} |
$where_sql = 'session_user_id = ' . (int) $user_id; |
$where_sql .= ($user_id == $userdata['user_id']) ? " AND session_id <> '" . $userdata['session_id'] . "'" : ''; |
$sql = 'DELETE FROM ' . SESSIONS_TABLE . " |
WHERE $where_sql"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(CRITICAL_ERROR, 'Error removing user session(s)', '', __LINE__, __FILE__, $sql); |
} |
if ( !empty($key_sql) ) |
{ |
$auto_login_key = dss_rand() . dss_rand(); |
$current_time = time(); |
$sql = 'UPDATE ' . SESSIONS_KEYS_TABLE . " |
SET last_ip = '$user_ip', key_id = '" . md5($auto_login_key) . "', last_login = $current_time |
WHERE key_id = '" . md5($userdata['session_key']) . "'"; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(CRITICAL_ERROR, 'Error updating session key', '', __LINE__, __FILE__, $sql); |
} |
// And now rebuild the cookie |
$sessiondata['userid'] = $user_id; |
$sessiondata['autologinid'] = $auto_login_key; |
$cookiename = $board_config['cookie_name']; |
$cookiepath = $board_config['cookie_path']; |
$cookiedomain = $board_config['cookie_domain']; |
$cookiesecure = $board_config['cookie_secure']; |
setcookie($cookiename . '_data', serialize($sessiondata), $current_time + 31536000, $cookiepath, $cookiedomain, $cookiesecure); |
$userdata['session_key'] = $auto_login_key; |
unset($sessiondata); |
unset($auto_login_key); |
} |
} |
// |
// Append $SID to a url. Borrowed from phplib and modified. This is an |
// extra routine utilised by the session code above and acts as a wrapper |
// around every single URL and form action. If you replace the session |
// code you must include this routine, even if it's empty. |
// |
function append_sid($url, $non_html_amp = false) |
{ |
global $SID; |
if ( !empty($SID) && !preg_match('#sid=#', $url) ) |
{ |
$url .= ( ( strpos($url, '?') !== false ) ? ( ( $non_html_amp ) ? '&' : '&' ) : '?' ) . $SID; |
} |
return $url; |
} |
?> |
/Forum/includes/smtp.php |
---|
0,0 → 1,210 |
<?php |
/*************************************************************************** |
* smtp.php |
* ------------------- |
* begin : Wed May 09 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: smtp.php,v 1.16.2.11 2005/09/27 20:24:35 grahamje Exp $ |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
***************************************************************************/ |
define('SMTP_INCLUDED', 1); |
// |
// This function has been modified as provided |
// by SirSir to allow multiline responses when |
// using SMTP Extensions |
// |
function server_parse($socket, $response, $line = __LINE__) |
{ |
$server_response = ''; |
while (substr($server_response, 3, 1) != ' ') |
{ |
if (!($server_response = fgets($socket, 256))) |
{ |
message_die(GENERAL_ERROR, "Couldn't get mail server response codes", "", $line, __FILE__); |
} |
} |
if (!(substr($server_response, 0, 3) == $response)) |
{ |
message_die(GENERAL_ERROR, "Ran into problems sending Mail. Response: $server_response", "", $line, __FILE__); |
} |
} |
// Replacement or substitute for PHP's mail command |
function smtpmail($mail_to, $subject, $message, $headers = '') |
{ |
global $board_config; |
// Fix any bare linefeeds in the message to make it RFC821 Compliant. |
$message = preg_replace("#(?<!\r)\n#si", "\r\n", $message); |
if ($headers != '') |
{ |
if (is_array($headers)) |
{ |
if (sizeof($headers) > 1) |
{ |
$headers = join("\n", $headers); |
} |
else |
{ |
$headers = $headers[0]; |
} |
} |
$headers = chop($headers); |
// Make sure there are no bare linefeeds in the headers |
$headers = preg_replace('#(?<!\r)\n#si', "\r\n", $headers); |
// Ok this is rather confusing all things considered, |
// but we have to grab bcc and cc headers and treat them differently |
// Something we really didn't take into consideration originally |
$header_array = explode("\r\n", $headers); |
@reset($header_array); |
$headers = ''; |
while(list(, $header) = each($header_array)) |
{ |
if (preg_match('#^cc:#si', $header)) |
{ |
$cc = preg_replace('#^cc:(.*)#si', '\1', $header); |
} |
else if (preg_match('#^bcc:#si', $header)) |
{ |
$bcc = preg_replace('#^bcc:(.*)#si', '\1', $header); |
$header = ''; |
} |
$headers .= ($header != '') ? $header . "\r\n" : ''; |
} |
$headers = chop($headers); |
$cc = explode(', ', $cc); |
$bcc = explode(', ', $bcc); |
} |
if (trim($subject) == '') |
{ |
message_die(GENERAL_ERROR, "No email Subject specified", "", __LINE__, __FILE__); |
} |
if (trim($message) == '') |
{ |
message_die(GENERAL_ERROR, "Email message was blank", "", __LINE__, __FILE__); |
} |
// Ok we have error checked as much as we can to this point let's get on |
// it already. |
if( !$socket = @fsockopen($board_config['smtp_host'], 25, $errno, $errstr, 20) ) |
{ |
message_die(GENERAL_ERROR, "Could not connect to smtp host : $errno : $errstr", "", __LINE__, __FILE__); |
} |
// Wait for reply |
server_parse($socket, "220", __LINE__); |
// Do we want to use AUTH?, send RFC2554 EHLO, else send RFC821 HELO |
// This improved as provided by SirSir to accomodate |
if( !empty($board_config['smtp_username']) && !empty($board_config['smtp_password']) ) |
{ |
fputs($socket, "EHLO " . $board_config['smtp_host'] . "\r\n"); |
server_parse($socket, "250", __LINE__); |
fputs($socket, "AUTH LOGIN\r\n"); |
server_parse($socket, "334", __LINE__); |
fputs($socket, base64_encode($board_config['smtp_username']) . "\r\n"); |
server_parse($socket, "334", __LINE__); |
fputs($socket, base64_encode($board_config['smtp_password']) . "\r\n"); |
server_parse($socket, "235", __LINE__); |
} |
else |
{ |
fputs($socket, "HELO " . $board_config['smtp_host'] . "\r\n"); |
server_parse($socket, "250", __LINE__); |
} |
// From this point onward most server response codes should be 250 |
// Specify who the mail is from.... |
fputs($socket, "MAIL FROM: <" . $board_config['board_email'] . ">\r\n"); |
server_parse($socket, "250", __LINE__); |
// Specify each user to send to and build to header. |
$to_header = ''; |
// Add an additional bit of error checking to the To field. |
$mail_to = (trim($mail_to) == '') ? 'Undisclosed-recipients:;' : trim($mail_to); |
if (preg_match('#[^ ]+\@[^ ]+#', $mail_to)) |
{ |
fputs($socket, "RCPT TO: <$mail_to>\r\n"); |
server_parse($socket, "250", __LINE__); |
} |
// Ok now do the CC and BCC fields... |
@reset($bcc); |
while(list(, $bcc_address) = each($bcc)) |
{ |
// Add an additional bit of error checking to bcc header... |
$bcc_address = trim($bcc_address); |
if (preg_match('#[^ ]+\@[^ ]+#', $bcc_address)) |
{ |
fputs($socket, "RCPT TO: <$bcc_address>\r\n"); |
server_parse($socket, "250", __LINE__); |
} |
} |
@reset($cc); |
while(list(, $cc_address) = each($cc)) |
{ |
// Add an additional bit of error checking to cc header |
$cc_address = trim($cc_address); |
if (preg_match('#[^ ]+\@[^ ]+#', $cc_address)) |
{ |
fputs($socket, "RCPT TO: <$cc_address>\r\n"); |
server_parse($socket, "250", __LINE__); |
} |
} |
// Ok now we tell the server we are ready to start sending data |
fputs($socket, "DATA\r\n"); |
// This is the last response code we look for until the end of the message. |
server_parse($socket, "354", __LINE__); |
// Send the Subject Line... |
fputs($socket, "Subject: $subject\r\n"); |
// Now the To Header. |
fputs($socket, "To: $mail_to\r\n"); |
// Now any custom headers.... |
fputs($socket, "$headers\r\n\r\n"); |
// Ok now we are ready for the message... |
fputs($socket, "$message\r\n"); |
// Ok the all the ingredients are mixed in let's cook this puppy... |
fputs($socket, ".\r\n"); |
server_parse($socket, "250", __LINE__); |
// Now tell the server we are done and close the socket... |
fputs($socket, "QUIT\r\n"); |
fclose($socket); |
return TRUE; |
} |
?> |
/Forum/includes/sql_parse.php |
---|
0,0 → 1,192 |
<?php |
/*************************************************************************** |
* sql_parse.php |
* ------------------- |
* begin : Thu May 31, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: sql_parse.php,v 1.8 2002/03/18 23:53:12 psotfx Exp $ |
* |
****************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* These functions are mainly for use in the db_utilities under the admin |
* however in order to make these functions available elsewhere, specifically |
* in the installation phase of phpBB I have seperated out a couple of |
* functions into this file. JLH |
* |
\***************************************************************************/ |
// |
// remove_comments will strip the sql comment lines out of an uploaded sql file |
// specifically for mssql and postgres type files in the install.... |
// |
function remove_comments(&$output) |
{ |
$lines = explode("\n", $output); |
$output = ""; |
// try to keep mem. use down |
$linecount = count($lines); |
$in_comment = false; |
for($i = 0; $i < $linecount; $i++) |
{ |
if( preg_match("/^\/\*/", preg_quote($lines[$i])) ) |
{ |
$in_comment = true; |
} |
if( !$in_comment ) |
{ |
$output .= $lines[$i] . "\n"; |
} |
if( preg_match("/\*\/$/", preg_quote($lines[$i])) ) |
{ |
$in_comment = false; |
} |
} |
unset($lines); |
return $output; |
} |
// |
// remove_remarks will strip the sql comment lines out of an uploaded sql file |
// |
function remove_remarks($sql) |
{ |
$lines = explode("\n", $sql); |
// try to keep mem. use down |
$sql = ""; |
$linecount = count($lines); |
$output = ""; |
for ($i = 0; $i < $linecount; $i++) |
{ |
if (($i != ($linecount - 1)) || (strlen($lines[$i]) > 0)) |
{ |
if ($lines[$i][0] != "#") |
{ |
$output .= $lines[$i] . "\n"; |
} |
else |
{ |
$output .= "\n"; |
} |
// Trading a bit of speed for lower mem. use here. |
$lines[$i] = ""; |
} |
} |
return $output; |
} |
// |
// split_sql_file will split an uploaded sql file into single sql statements. |
// Note: expects trim() to have already been run on $sql. |
// |
function split_sql_file($sql, $delimiter) |
{ |
// Split up our string into "possible" SQL statements. |
$tokens = explode($delimiter, $sql); |
// try to save mem. |
$sql = ""; |
$output = array(); |
// we don't actually care about the matches preg gives us. |
$matches = array(); |
// this is faster than calling count($oktens) every time thru the loop. |
$token_count = count($tokens); |
for ($i = 0; $i < $token_count; $i++) |
{ |
// Don't wanna add an empty string as the last thing in the array. |
if (($i != ($token_count - 1)) || (strlen($tokens[$i] > 0))) |
{ |
// This is the total number of single quotes in the token. |
$total_quotes = preg_match_all("/'/", $tokens[$i], $matches); |
// Counts single quotes that are preceded by an odd number of backslashes, |
// which means they're escaped quotes. |
$escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$i], $matches); |
$unescaped_quotes = $total_quotes - $escaped_quotes; |
// If the number of unescaped quotes is even, then the delimiter did NOT occur inside a string literal. |
if (($unescaped_quotes % 2) == 0) |
{ |
// It's a complete sql statement. |
$output[] = $tokens[$i]; |
// save memory. |
$tokens[$i] = ""; |
} |
else |
{ |
// incomplete sql statement. keep adding tokens until we have a complete one. |
// $temp will hold what we have so far. |
$temp = $tokens[$i] . $delimiter; |
// save memory.. |
$tokens[$i] = ""; |
// Do we have a complete statement yet? |
$complete_stmt = false; |
for ($j = $i + 1; (!$complete_stmt && ($j < $token_count)); $j++) |
{ |
// This is the total number of single quotes in the token. |
$total_quotes = preg_match_all("/'/", $tokens[$j], $matches); |
// Counts single quotes that are preceded by an odd number of backslashes, |
// which means they're escaped quotes. |
$escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $tokens[$j], $matches); |
$unescaped_quotes = $total_quotes - $escaped_quotes; |
if (($unescaped_quotes % 2) == 1) |
{ |
// odd number of unescaped quotes. In combination with the previous incomplete |
// statement(s), we now have a complete statement. (2 odds always make an even) |
$output[] = $temp . $tokens[$j]; |
// save memory. |
$tokens[$j] = ""; |
$temp = ""; |
// exit the loop. |
$complete_stmt = true; |
// make sure the outer loop continues at the right point. |
$i = $j; |
} |
else |
{ |
// even number of unescaped quotes. We still don't have a complete statement. |
// (1 odd and 1 even always make an odd) |
$temp .= $tokens[$j] . $delimiter; |
// save memory. |
$tokens[$j] = ""; |
} |
} // for.. |
} // else |
} |
} |
return $output; |
} |
?> |
/Forum/includes/template.php |
---|
0,0 → 1,478 |
<?php |
/*************************************************************************** |
* template.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: template.php,v 1.10.2.5 2005/05/06 20:50:11 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
***************************************************************************/ |
/** |
* Template class. By Nathan Codding of the phpBB group. |
* The interface was originally inspired by PHPLib templates, |
* and the template file formats are quite similar. |
* |
*/ |
class Template { |
var $classname = "Template"; |
// variable that holds all the data we'll be substituting into |
// the compiled templates. |
// ... |
// This will end up being a multi-dimensional array like this: |
// $this->_tpldata[block.][iteration#][child.][iteration#][child2.][iteration#][variablename] == value |
// if it's a root-level variable, it'll be like this: |
// $this->_tpldata[.][0][varname] == value |
var $_tpldata = array(); |
// Hash of filenames for each template handle. |
var $files = array(); |
// Root template directory. |
var $root = ""; |
// this will hash handle names to the compiled code for that handle. |
var $compiled_code = array(); |
// This will hold the uncompiled code for that handle. |
var $uncompiled_code = array(); |
/** |
* Constructor. Simply sets the root dir. |
* |
*/ |
function Template($root = ".") |
{ |
$this->set_rootdir($root); |
} |
/** |
* Destroys this template object. Should be called when you're done with it, in order |
* to clear out the template data so you can load/parse a new template set. |
*/ |
function destroy() |
{ |
$this->_tpldata = array(); |
} |
/** |
* Sets the template root directory for this Template object. |
*/ |
function set_rootdir($dir) |
{ |
if (!is_dir($dir)) |
{ |
return false; |
} |
$this->root = $dir; |
return true; |
} |
/** |
* Sets the template filenames for handles. $filename_array |
* should be a hash of handle => filename pairs. |
*/ |
function set_filenames($filename_array) |
{ |
if (!is_array($filename_array)) |
{ |
return false; |
} |
reset($filename_array); |
while(list($handle, $filename) = each($filename_array)) |
{ |
$this->files[$handle] = $this->make_filename($filename); |
} |
return true; |
} |
/** |
* Load the file for the handle, compile the file, |
* and run the compiled code. This will print out |
* the results of executing the template. |
*/ |
function pparse($handle) |
{ |
if (!$this->loadfile($handle)) |
{ |
die("Template->pparse(): Couldn't load template file for handle $handle"); |
} |
// actually compile the template now. |
if (!isset($this->compiled_code[$handle]) || empty($this->compiled_code[$handle])) |
{ |
// Actually compile the code now. |
$this->compiled_code[$handle] = $this->compile($this->uncompiled_code[$handle]); |
} |
// Run the compiled code. |
eval($this->compiled_code[$handle]); |
return true; |
} |
/** |
* Inserts the uncompiled code for $handle as the |
* value of $varname in the root-level. This can be used |
* to effectively include a template in the middle of another |
* template. |
* Note that all desired assignments to the variables in $handle should be done |
* BEFORE calling this function. |
*/ |
function assign_var_from_handle($varname, $handle) |
{ |
if (!$this->loadfile($handle)) |
{ |
die("Template->assign_var_from_handle(): Couldn't load template file for handle $handle"); |
} |
// Compile it, with the "no echo statements" option on. |
$_str = ""; |
$code = $this->compile($this->uncompiled_code[$handle], true, '_str'); |
// evaluate the variable assignment. |
eval($code); |
// assign the value of the generated variable to the given varname. |
$this->assign_var($varname, $_str); |
return true; |
} |
/** |
* Block-level variable assignment. Adds a new block iteration with the given |
* variable assignments. Note that this should only be called once per block |
* iteration. |
*/ |
function assign_block_vars($blockname, $vararray) |
{ |
if (strstr($blockname, '.')) |
{ |
// Nested block. |
$blocks = explode('.', $blockname); |
$blockcount = sizeof($blocks) - 1; |
$str = '$this->_tpldata'; |
for ($i = 0; $i < $blockcount; $i++) |
{ |
$str .= '[\'' . $blocks[$i] . '.\']'; |
eval('$lastiteration = sizeof(' . $str . ') - 1;'); |
$str .= '[' . $lastiteration . ']'; |
} |
// Now we add the block that we're actually assigning to. |
// We're adding a new iteration to this block with the given |
// variable assignments. |
$str .= '[\'' . $blocks[$blockcount] . '.\'][] = $vararray;'; |
// Now we evaluate this assignment we've built up. |
eval($str); |
} |
else |
{ |
// Top-level block. |
// Add a new iteration to this block with the variable assignments |
// we were given. |
$this->_tpldata[$blockname . '.'][] = $vararray; |
} |
return true; |
} |
/** |
* Root-level variable assignment. Adds to current assignments, overriding |
* any existing variable assignment with the same name. |
*/ |
function assign_vars($vararray) |
{ |
reset ($vararray); |
while (list($key, $val) = each($vararray)) |
{ |
$this->_tpldata['.'][0][$key] = $val; |
} |
return true; |
} |
/** |
* Root-level variable assignment. Adds to current assignments, overriding |
* any existing variable assignment with the same name. |
*/ |
function assign_var($varname, $varval) |
{ |
$this->_tpldata['.'][0][$varname] = $varval; |
return true; |
} |
/** |
* Generates a full path+filename for the given filename, which can either |
* be an absolute name, or a name relative to the rootdir for this Template |
* object. |
*/ |
function make_filename($filename) |
{ |
// Check if it's an absolute or relative path. |
if (substr($filename, 0, 1) != '/') |
{ |
$filename = ($rp_filename = phpbb_realpath($this->root . '/' . $filename)) ? $rp_filename : $filename; |
} |
if (!file_exists($filename)) |
{ |
die("Template->make_filename(): Error - file $filename does not exist"); |
} |
return $filename; |
} |
/** |
* If not already done, load the file for the given handle and populate |
* the uncompiled_code[] hash with its code. Do not compile. |
*/ |
function loadfile($handle) |
{ |
// If the file for this handle is already loaded and compiled, do nothing. |
if (isset($this->uncompiled_code[$handle]) && !empty($this->uncompiled_code[$handle])) |
{ |
return true; |
} |
// If we don't have a file assigned to this handle, die. |
if (!isset($this->files[$handle])) |
{ |
die("Template->loadfile(): No file specified for handle $handle"); |
} |
$filename = $this->files[$handle]; |
$str = implode("", @file($filename)); |
if (empty($str)) |
{ |
die("Template->loadfile(): File $filename for handle $handle is empty"); |
} |
$this->uncompiled_code[$handle] = $str; |
return true; |
} |
/** |
* Compiles the given string of code, and returns |
* the result in a string. |
* If "do_not_echo" is true, the returned code will not be directly |
* executable, but can be used as part of a variable assignment |
* for use in assign_code_from_handle(). |
*/ |
function compile($code, $do_not_echo = false, $retvar = '') |
{ |
// replace \ with \\ and then ' with \'. |
$code = str_replace('\\', '\\\\', $code); |
$code = str_replace('\'', '\\\'', $code); |
// change template varrefs into PHP varrefs |
// This one will handle varrefs WITH namespaces |
$varrefs = array(); |
preg_match_all('#\{(([a-z0-9\-_]+?\.)+?)([a-z0-9\-_]+?)\}#is', $code, $varrefs); |
$varcount = sizeof($varrefs[1]); |
for ($i = 0; $i < $varcount; $i++) |
{ |
$namespace = $varrefs[1][$i]; |
$varname = $varrefs[3][$i]; |
$new = $this->generate_block_varref($namespace, $varname); |
$code = str_replace($varrefs[0][$i], $new, $code); |
} |
// This will handle the remaining root-level varrefs |
$code = preg_replace('#\{([a-z0-9\-_]*?)\}#is', '\' . ( ( isset($this->_tpldata[\'.\'][0][\'\1\']) ) ? $this->_tpldata[\'.\'][0][\'\1\'] : \'\' ) . \'', $code); |
// Break it up into lines. |
$code_lines = explode("\n", $code); |
$block_nesting_level = 0; |
$block_names = array(); |
$block_names[0] = "."; |
// Second: prepend echo ', append ' . "\n"; to each line. |
$line_count = sizeof($code_lines); |
for ($i = 0; $i < $line_count; $i++) |
{ |
$code_lines[$i] = chop($code_lines[$i]); |
if (preg_match('#<!-- BEGIN (.*?) -->#', $code_lines[$i], $m)) |
{ |
$n[0] = $m[0]; |
$n[1] = $m[1]; |
// Added: dougk_ff7-Keeps templates from bombing if begin is on the same line as end.. I think. :) |
if ( preg_match('#<!-- END (.*?) -->#', $code_lines[$i], $n) ) |
{ |
$block_nesting_level++; |
$block_names[$block_nesting_level] = $m[1]; |
if ($block_nesting_level < 2) |
{ |
// Block is not nested. |
$code_lines[$i] = '$_' . $n[1] . '_count = ( isset($this->_tpldata[\'' . $n[1] . '.\']) ) ? sizeof($this->_tpldata[\'' . $n[1] . '.\']) : 0;'; |
$code_lines[$i] .= "\n" . 'for ($_' . $n[1] . '_i = 0; $_' . $n[1] . '_i < $_' . $n[1] . '_count; $_' . $n[1] . '_i++)'; |
$code_lines[$i] .= "\n" . '{'; |
} |
else |
{ |
// This block is nested. |
// Generate a namespace string for this block. |
$namespace = implode('.', $block_names); |
// strip leading period from root level.. |
$namespace = substr($namespace, 2); |
// Get a reference to the data array for this block that depends on the |
// current indices of all parent blocks. |
$varref = $this->generate_block_data_ref($namespace, false); |
// Create the for loop code to iterate over this block. |
$code_lines[$i] = '$_' . $n[1] . '_count = ( isset(' . $varref . ') ) ? sizeof(' . $varref . ') : 0;'; |
$code_lines[$i] .= "\n" . 'for ($_' . $n[1] . '_i = 0; $_' . $n[1] . '_i < $_' . $n[1] . '_count; $_' . $n[1] . '_i++)'; |
$code_lines[$i] .= "\n" . '{'; |
} |
// We have the end of a block. |
unset($block_names[$block_nesting_level]); |
$block_nesting_level--; |
$code_lines[$i] .= '} // END ' . $n[1]; |
$m[0] = $n[0]; |
$m[1] = $n[1]; |
} |
else |
{ |
// We have the start of a block. |
$block_nesting_level++; |
$block_names[$block_nesting_level] = $m[1]; |
if ($block_nesting_level < 2) |
{ |
// Block is not nested. |
$code_lines[$i] = '$_' . $m[1] . '_count = ( isset($this->_tpldata[\'' . $m[1] . '.\']) ) ? sizeof($this->_tpldata[\'' . $m[1] . '.\']) : 0;'; |
$code_lines[$i] .= "\n" . 'for ($_' . $m[1] . '_i = 0; $_' . $m[1] . '_i < $_' . $m[1] . '_count; $_' . $m[1] . '_i++)'; |
$code_lines[$i] .= "\n" . '{'; |
} |
else |
{ |
// This block is nested. |
// Generate a namespace string for this block. |
$namespace = implode('.', $block_names); |
// strip leading period from root level.. |
$namespace = substr($namespace, 2); |
// Get a reference to the data array for this block that depends on the |
// current indices of all parent blocks. |
$varref = $this->generate_block_data_ref($namespace, false); |
// Create the for loop code to iterate over this block. |
$code_lines[$i] = '$_' . $m[1] . '_count = ( isset(' . $varref . ') ) ? sizeof(' . $varref . ') : 0;'; |
$code_lines[$i] .= "\n" . 'for ($_' . $m[1] . '_i = 0; $_' . $m[1] . '_i < $_' . $m[1] . '_count; $_' . $m[1] . '_i++)'; |
$code_lines[$i] .= "\n" . '{'; |
} |
} |
} |
else if (preg_match('#<!-- END (.*?) -->#', $code_lines[$i], $m)) |
{ |
// We have the end of a block. |
unset($block_names[$block_nesting_level]); |
$block_nesting_level--; |
$code_lines[$i] = '} // END ' . $m[1]; |
} |
else |
{ |
// We have an ordinary line of code. |
if (!$do_not_echo) |
{ |
$code_lines[$i] = 'echo \'' . $code_lines[$i] . '\' . "\\n";'; |
} |
else |
{ |
$code_lines[$i] = '$' . $retvar . '.= \'' . $code_lines[$i] . '\' . "\\n";'; |
} |
} |
} |
// Bring it back into a single string of lines of code. |
$code = implode("\n", $code_lines); |
return $code ; |
} |
/** |
* Generates a reference to the given variable inside the given (possibly nested) |
* block namespace. This is a string of the form: |
* ' . $this->_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['varname'] . ' |
* It's ready to be inserted into an "echo" line in one of the templates. |
* NOTE: expects a trailing "." on the namespace. |
*/ |
function generate_block_varref($namespace, $varname) |
{ |
// Strip the trailing period. |
$namespace = substr($namespace, 0, strlen($namespace) - 1); |
// Get a reference to the data block for this namespace. |
$varref = $this->generate_block_data_ref($namespace, true); |
// Prepend the necessary code to stick this in an echo line. |
// Append the variable reference. |
$varref .= '[\'' . $varname . '\']'; |
$varref = '\' . ( ( isset(' . $varref . ') ) ? ' . $varref . ' : \'\' ) . \''; |
return $varref; |
} |
/** |
* Generates a reference to the array of data values for the given |
* (possibly nested) block namespace. This is a string of the form: |
* $this->_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['$childN'] |
* |
* If $include_last_iterator is true, then [$_childN_i] will be appended to the form shown above. |
* NOTE: does not expect a trailing "." on the blockname. |
*/ |
function generate_block_data_ref($blockname, $include_last_iterator) |
{ |
// Get an array of the blocks involved. |
$blocks = explode(".", $blockname); |
$blockcount = sizeof($blocks) - 1; |
$varref = '$this->_tpldata'; |
// Build up the string with everything but the last child. |
for ($i = 0; $i < $blockcount; $i++) |
{ |
$varref .= '[\'' . $blocks[$i] . '.\'][$_' . $blocks[$i] . '_i]'; |
} |
// Add the block reference for the last child. |
$varref .= '[\'' . $blocks[$blockcount] . '.\']'; |
// Add the iterator for the last child if requried. |
if ($include_last_iterator) |
{ |
$varref .= '[$_' . $blocks[$blockcount] . '_i]'; |
} |
return $varref; |
} |
} |
?> |
/Forum/includes/topic_review.php |
---|
0,0 → 1,228 |
<?php |
/*************************************************************************** |
* topic_review.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: topic_review.php,v 1.5.2.4 2005/05/06 20:50:12 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
* |
***************************************************************************/ |
function topic_review($topic_id, $is_inline_review) |
{ |
global $db, $board_config, $template, $lang, $images, $theme, $phpEx, $phpbb_root_path; |
global $userdata, $user_ip; |
global $orig_word, $replacement_word; |
global $starttime; |
if ( !$is_inline_review ) |
{ |
if ( !isset($topic_id) || !$topic_id) |
{ |
message_die(GENERAL_MESSAGE, 'Topic_post_not_exist'); |
} |
// |
// Get topic info ... |
// |
$sql = "SELECT t.topic_title, f.forum_id, f.auth_view, f.auth_read, f.auth_post, f.auth_reply, f.auth_edit, f.auth_delete, f.auth_sticky, f.auth_announce, f.auth_pollcreate, f.auth_vote, f.auth_attachments |
FROM " . TOPICS_TABLE . " t, " . FORUMS_TABLE . " f |
WHERE t.topic_id = $topic_id |
AND f.forum_id = t.forum_id"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain topic information', '', __LINE__, __FILE__, $sql); |
} |
if ( !($forum_row = $db->sql_fetchrow($result)) ) |
{ |
message_die(GENERAL_MESSAGE, 'Topic_post_not_exist'); |
} |
$db->sql_freeresult($result); |
$forum_id = $forum_row['forum_id']; |
$topic_title = $forum_row['topic_title']; |
// |
// Start session management |
// |
$userdata = session_pagestart($user_ip, $forum_id); |
init_userprefs($userdata); |
// |
// End session management |
// |
$is_auth = array(); |
$is_auth = auth(AUTH_ALL, $forum_id, $userdata, $forum_row); |
if ( !$is_auth['auth_read'] ) |
{ |
message_die(GENERAL_MESSAGE, sprintf($lang['Sorry_auth_read'], $is_auth['auth_read_type'])); |
} |
} |
// |
// Define censored word matches |
// |
if ( empty($orig_word) && empty($replacement_word) ) |
{ |
$orig_word = array(); |
$replacement_word = array(); |
obtain_word_list($orig_word, $replacement_word); |
} |
// |
// Dump out the page header and load viewtopic body template |
// |
if ( !$is_inline_review ) |
{ |
$gen_simple_header = TRUE; |
$page_title = $lang['Topic_review'] . ' - ' . $topic_title; |
include($phpbb_root_path . 'includes/page_header.'.$phpEx); |
$template->set_filenames(array( |
'reviewbody' => 'posting_topic_review.tpl') |
); |
} |
// |
// Go ahead and pull all data for this topic |
// |
$sql = "SELECT u.username, u.user_id, p.*, pt.post_text, pt.post_subject, pt.bbcode_uid |
FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u, " . POSTS_TEXT_TABLE . " pt |
WHERE p.topic_id = $topic_id |
AND p.poster_id = u.user_id |
AND p.post_id = pt.post_id |
ORDER BY p.post_time DESC |
LIMIT " . $board_config['posts_per_page']; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain post/user information', '', __LINE__, __FILE__, $sql); |
} |
// |
// Okay, let's do the loop, yeah come on baby let's do the loop |
// and it goes like this ... |
// |
if ( $row = $db->sql_fetchrow($result) ) |
{ |
$mini_post_img = $images['icon_minipost']; |
$mini_post_alt = $lang['Post']; |
$i = 0; |
do |
{ |
$poster_id = $row['user_id']; |
$poster = $row['username']; |
$post_date = create_date($board_config['default_dateformat'], $row['post_time'], $board_config['board_timezone']); |
// |
// Handle anon users posting with usernames |
// |
if( $poster_id == ANONYMOUS && $row['post_username'] != '' ) |
{ |
$poster = $row['post_username']; |
$poster_rank = $lang['Guest']; |
} |
elseif ( $poster_id == ANONYMOUS ) |
{ |
$poster = $lang['Guest']; |
$poster_rank = ''; |
} |
$post_subject = ( $row['post_subject'] != '' ) ? $row['post_subject'] : ''; |
$message = $row['post_text']; |
$bbcode_uid = $row['bbcode_uid']; |
// |
// If the board has HTML off but the post has HTML |
// on then we process it, else leave it alone |
// |
if ( !$board_config['allow_html'] && $row['enable_html'] ) |
{ |
$message = preg_replace('#(<)([\/]?.*?)(>)#is', '<\2>', $message); |
} |
if ( $bbcode_uid != "" ) |
{ |
$message = ( $board_config['allow_bbcode'] ) ? bbencode_second_pass($message, $bbcode_uid) : preg_replace('/\:[0-9a-z\:]+\]/si', ']', $message); |
} |
$message = make_clickable($message); |
if ( count($orig_word) ) |
{ |
$post_subject = preg_replace($orig_word, $replacement_word, $post_subject); |
$message = preg_replace($orig_word, $replacement_word, $message); |
} |
if ( $board_config['allow_smilies'] && $row['enable_smilies'] ) |
{ |
$message = smilies_pass($message); |
} |
$message = str_replace("\n", '<br />', $message); |
// |
// Again this will be handled by the templating |
// code at some point |
// |
$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2']; |
$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2']; |
$template->assign_block_vars('postrow', array( |
'ROW_COLOR' => '#' . $row_color, |
'ROW_CLASS' => $row_class, |
'MINI_POST_IMG' => $mini_post_img, |
'POSTER_NAME' => $poster, |
'POST_DATE' => $post_date, |
'POST_SUBJECT' => $post_subject, |
'MESSAGE' => $message, |
'L_MINI_POST_ALT' => $mini_post_alt) |
); |
$i++; |
} |
while ( $row = $db->sql_fetchrow($result) ); |
} |
else |
{ |
message_die(GENERAL_MESSAGE, 'Topic_post_not_exist', '', __LINE__, __FILE__, $sql); |
} |
$db->sql_freeresult($result); |
$template->assign_vars(array( |
'L_AUTHOR' => $lang['Author'], |
'L_MESSAGE' => $lang['Message'], |
'L_POSTED' => $lang['Posted'], |
'L_POST_SUBJECT' => $lang['Post_subject'], |
'L_TOPIC_REVIEW' => $lang['Topic_review']) |
); |
if ( !$is_inline_review ) |
{ |
$template->pparse('reviewbody'); |
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); |
} |
} |
?> |
/Forum/includes/usercp_activate.php |
---|
0,0 → 1,119 |
<?php |
/*************************************************************************** |
* usercp_activate.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: usercp_activate.php,v 1.6.2.9 2005/09/14 18:14:30 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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; |
} |
$sql = "SELECT user_active, user_id, username, user_email, user_newpasswd, user_lang, user_actkey |
FROM " . USERS_TABLE . " |
WHERE user_id = " . intval($HTTP_GET_VARS[POST_USERS_URL]); |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain user information', '', __LINE__, __FILE__, $sql); |
} |
if ( $row = $db->sql_fetchrow($result) ) |
{ |
if ( $row['user_active'] && trim($row['user_actkey']) == '' ) |
{ |
$template->assign_vars(array( |
'META' => '<meta http-equiv="refresh" content="10;url=' . append_sid("index.$phpEx") . '">') |
); |
message_die(GENERAL_MESSAGE, $lang['Already_activated']); |
} |
else if ((trim($row['user_actkey']) == trim($HTTP_GET_VARS['act_key'])) && (trim($row['user_actkey']) != '')) |
{ |
if (intval($board_config['require_activation']) == USER_ACTIVATION_ADMIN && $row['user_newpasswd'] == '') |
{ |
if (!$userdata['session_logged_in']) |
{ |
redirect(append_sid('login.' . $phpEx . '?redirect=profile.' . $phpEx . '&mode=activate&' . POST_USERS_URL . '=' . $row['user_id'] . '&act_key=' . trim($HTTP_GET_VARS['act_key']))); |
} |
else if ($userdata['user_level'] != ADMIN) |
{ |
message_die(GENERAL_MESSAGE, $lang['Not_Authorised']); |
} |
} |
$sql_update_pass = ( $row['user_newpasswd'] != '' ) ? ", user_password = '" . str_replace("\'", "''", $row['user_newpasswd']) . "', user_newpasswd = ''" : ''; |
$sql = "UPDATE " . USERS_TABLE . " |
SET user_active = 1, user_actkey = ''" . $sql_update_pass . " |
WHERE user_id = " . $row['user_id']; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not update users table', '', __LINE__, __FILE__, $sql_update); |
} |
if ( intval($board_config['require_activation']) == USER_ACTIVATION_ADMIN && $sql_update_pass == '' ) |
{ |
include($phpbb_root_path . 'includes/emailer.'.$phpEx); |
$emailer = new emailer($board_config['smtp_delivery']); |
$emailer->from($board_config['board_email']); |
$emailer->replyto($board_config['board_email']); |
$emailer->use_template('admin_welcome_activated', $row['user_lang']); |
$emailer->email_address($row['user_email']); |
$emailer->set_subject($lang['Account_activated_subject']); |
$emailer->assign_vars(array( |
'SITENAME' => $board_config['sitename'], |
'USERNAME' => $row['username'], |
'PASSWORD' => $password_confirm, |
'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) : '') |
); |
$emailer->send(); |
$emailer->reset(); |
$template->assign_vars(array( |
'META' => '<meta http-equiv="refresh" content="10;url=' . append_sid("index.$phpEx") . '">') |
); |
message_die(GENERAL_MESSAGE, $lang['Account_active_admin']); |
} |
else |
{ |
$template->assign_vars(array( |
'META' => '<meta http-equiv="refresh" content="10;url=' . append_sid("index.$phpEx") . '">') |
); |
$message = ( $sql_update_pass == '' ) ? $lang['Account_active'] : $lang['Password_activated']; |
message_die(GENERAL_MESSAGE, $message); |
} |
} |
else |
{ |
message_die(GENERAL_MESSAGE, $lang['Wrong_activation']); |
} |
} |
else |
{ |
message_die(GENERAL_MESSAGE, $lang['No_such_user']); |
} |
?> |
/Forum/includes/usercp_avatar.php |
---|
0,0 → 1,406 |
<?php |
/*************************************************************************** |
* usercp_avatar.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: usercp_avatar.php,v 1.8.2.24 2006/05/23 21:09:27 grahamje Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
* |
***************************************************************************/ |
function check_image_type(&$type, &$error, &$error_msg) |
{ |
global $lang; |
switch( $type ) |
{ |
case 'jpeg': |
case 'pjpeg': |
case 'jpg': |
return '.jpg'; |
break; |
case 'gif': |
return '.gif'; |
break; |
case 'png': |
return '.png'; |
break; |
default: |
$error = true; |
$error_msg = (!empty($error_msg)) ? $error_msg . '<br />' . $lang['Avatar_filetype'] : $lang['Avatar_filetype']; |
break; |
} |
return false; |
} |
function user_avatar_delete($avatar_type, $avatar_file) |
{ |
global $board_config, $userdata; |
$avatar_file = basename($avatar_file); |
if ( $avatar_type == USER_AVATAR_UPLOAD && $avatar_file != '' ) |
{ |
if ( @file_exists(@phpbb_realpath('./' . $board_config['avatar_path'] . '/' . $avatar_file)) ) |
{ |
@unlink('./' . $board_config['avatar_path'] . '/' . $avatar_file); |
} |
} |
return ", user_avatar = '', user_avatar_type = " . USER_AVATAR_NONE; |
} |
function user_avatar_gallery($mode, &$error, &$error_msg, $avatar_filename, $avatar_category) |
{ |
global $board_config; |
$avatar_filename = phpbb_ltrim(basename($avatar_filename), "'"); |
$avatar_category = phpbb_ltrim(basename($avatar_category), "'"); |
if(!preg_match('/(\.gif$|\.png$|\.jpg|\.jpeg)$/is', $avatar_filename)) |
{ |
return ''; |
} |
if ($avatar_filename == "" || $avatar_category == "") |
{ |
return ''; |
} |
if ( file_exists(@phpbb_realpath($board_config['avatar_gallery_path'] . '/' . $avatar_category . '/' . $avatar_filename)) && ($mode == 'editprofile') ) |
{ |
$return = ", user_avatar = '" . str_replace("\'", "''", $avatar_category . '/' . $avatar_filename) . "', user_avatar_type = " . USER_AVATAR_GALLERY; |
} |
else |
{ |
$return = ''; |
} |
return $return; |
} |
function user_avatar_url($mode, &$error, &$error_msg, $avatar_filename) |
{ |
global $lang; |
if ( !preg_match('#^(http)|(ftp):\/\/#i', $avatar_filename) ) |
{ |
$avatar_filename = 'http://' . $avatar_filename; |
} |
$avatar_filename = substr($avatar_filename, 0, 100); |
if ( !preg_match("#^((ht|f)tp://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png))$)#is", $avatar_filename) ) |
{ |
$error = true; |
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $lang['Wrong_remote_avatar_format'] : $lang['Wrong_remote_avatar_format']; |
return; |
} |
return ( $mode == 'editprofile' ) ? ", user_avatar = '" . str_replace("\'", "''", $avatar_filename) . "', user_avatar_type = " . USER_AVATAR_REMOTE : ''; |
} |
function user_avatar_upload($mode, $avatar_mode, &$current_avatar, &$current_type, &$error, &$error_msg, $avatar_filename, $avatar_realname, $avatar_filesize, $avatar_filetype) |
{ |
global $board_config, $db, $lang; |
$ini_val = ( @phpversion() >= '4.0.0' ) ? 'ini_get' : 'get_cfg_var'; |
$width = $height = 0; |
$type = ''; |
if ( $avatar_mode == 'remote' && preg_match('/^(http:\/\/)?([\w\-\.]+)\:?([0-9]*)\/([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))$/', $avatar_filename, $url_ary) ) |
{ |
if ( empty($url_ary[4]) ) |
{ |
$error = true; |
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $lang['Incomplete_URL'] : $lang['Incomplete_URL']; |
return; |
} |
$base_get = '/' . $url_ary[4]; |
$port = ( !empty($url_ary[3]) ) ? $url_ary[3] : 80; |
if ( !($fsock = @fsockopen($url_ary[2], $port, $errno, $errstr)) ) |
{ |
$error = true; |
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $lang['No_connection_URL'] : $lang['No_connection_URL']; |
return; |
} |
@fputs($fsock, "GET $base_get HTTP/1.1\r\n"); |
@fputs($fsock, "HOST: " . $url_ary[2] . "\r\n"); |
@fputs($fsock, "Connection: close\r\n\r\n"); |
unset($avatar_data); |
while( !@feof($fsock) ) |
{ |
$avatar_data .= @fread($fsock, $board_config['avatar_filesize']); |
} |
@fclose($fsock); |
if (!preg_match('#Content-Length\: ([0-9]+)[^ /][\s]+#i', $avatar_data, $file_data1) || !preg_match('#Content-Type\: image/[x\-]*([a-z]+)[\s]+#i', $avatar_data, $file_data2)) |
{ |
$error = true; |
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $lang['File_no_data'] : $lang['File_no_data']; |
return; |
} |
$avatar_filesize = $file_data1[1]; |
$avatar_filetype = $file_data2[1]; |
if ( !$error && $avatar_filesize > 0 && $avatar_filesize < $board_config['avatar_filesize'] ) |
{ |
$avatar_data = substr($avatar_data, strlen($avatar_data) - $avatar_filesize, $avatar_filesize); |
$tmp_path = ( !@$ini_val('safe_mode') ) ? '/tmp' : './' . $board_config['avatar_path'] . '/tmp'; |
$tmp_filename = tempnam($tmp_path, uniqid(rand()) . '-'); |
$fptr = @fopen($tmp_filename, 'wb'); |
$bytes_written = @fwrite($fptr, $avatar_data, $avatar_filesize); |
@fclose($fptr); |
if ( $bytes_written != $avatar_filesize ) |
{ |
@unlink($tmp_filename); |
message_die(GENERAL_ERROR, 'Could not write avatar file to local storage. Please contact the board administrator with this message', '', __LINE__, __FILE__); |
} |
list($width, $height, $type) = @getimagesize($tmp_filename); |
} |
else |
{ |
$l_avatar_size = sprintf($lang['Avatar_filesize'], round($board_config['avatar_filesize'] / 1024)); |
$error = true; |
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $l_avatar_size : $l_avatar_size; |
} |
} |
else if ( ( file_exists(@phpbb_realpath($avatar_filename)) ) && preg_match('/\.(jpg|jpeg|gif|png)$/i', $avatar_realname) ) |
{ |
if ( $avatar_filesize <= $board_config['avatar_filesize'] && $avatar_filesize > 0 ) |
{ |
preg_match('#image\/[x\-]*([a-z]+)#', $avatar_filetype, $avatar_filetype); |
$avatar_filetype = $avatar_filetype[1]; |
} |
else |
{ |
$l_avatar_size = sprintf($lang['Avatar_filesize'], round($board_config['avatar_filesize'] / 1024)); |
$error = true; |
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $l_avatar_size : $l_avatar_size; |
return; |
} |
list($width, $height, $type) = @getimagesize($avatar_filename); |
} |
if ( !($imgtype = check_image_type($avatar_filetype, $error, $error_msg)) ) |
{ |
return; |
} |
switch ($type) |
{ |
// GIF |
case 1: |
if ($imgtype != '.gif') |
{ |
@unlink($tmp_filename); |
message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); |
} |
break; |
// JPG, JPC, JP2, JPX, JB2 |
case 2: |
case 9: |
case 10: |
case 11: |
case 12: |
if ($imgtype != '.jpg' && $imgtype != '.jpeg') |
{ |
@unlink($tmp_filename); |
message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); |
} |
break; |
// PNG |
case 3: |
if ($imgtype != '.png') |
{ |
@unlink($tmp_filename); |
message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); |
} |
break; |
default: |
@unlink($tmp_filename); |
message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); |
} |
if ( $width > 0 && $height > 0 && $width <= $board_config['avatar_max_width'] && $height <= $board_config['avatar_max_height'] ) |
{ |
$new_filename = uniqid(rand()) . $imgtype; |
if ( $mode == 'editprofile' && $current_type == USER_AVATAR_UPLOAD && $current_avatar != '' ) |
{ |
user_avatar_delete($current_type, $current_avatar); |
} |
if( $avatar_mode == 'remote' ) |
{ |
@copy($tmp_filename, './' . $board_config['avatar_path'] . "/$new_filename"); |
@unlink($tmp_filename); |
} |
else |
{ |
if ( @$ini_val('open_basedir') != '' ) |
{ |
if ( @phpversion() < '4.0.3' ) |
{ |
message_die(GENERAL_ERROR, 'open_basedir is set and your PHP version does not allow move_uploaded_file', '', __LINE__, __FILE__); |
} |
$move_file = 'move_uploaded_file'; |
} |
else |
{ |
$move_file = 'copy'; |
} |
if (!is_uploaded_file($avatar_filename)) |
{ |
message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); |
} |
$move_file($avatar_filename, './' . $board_config['avatar_path'] . "/$new_filename"); |
} |
@chmod('./' . $board_config['avatar_path'] . "/$new_filename", 0777); |
$avatar_sql = ( $mode == 'editprofile' ) ? ", user_avatar = '$new_filename', user_avatar_type = " . USER_AVATAR_UPLOAD : "'$new_filename', " . USER_AVATAR_UPLOAD; |
} |
else |
{ |
$l_avatar_size = sprintf($lang['Avatar_imagesize'], $board_config['avatar_max_width'], $board_config['avatar_max_height']); |
$error = true; |
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $l_avatar_size : $l_avatar_size; |
} |
return $avatar_sql; |
} |
function display_avatar_gallery($mode, &$category, &$user_id, &$email, &$current_email, &$coppa, &$username, &$email, &$new_password, &$cur_password, &$password_confirm, &$icq, &$aim, &$msn, &$yim, &$website, &$location, &$occupation, &$interests, &$signature, &$viewemail, &$notifypm, &$popup_pm, &$notifyreply, &$attachsig, &$allowhtml, &$allowbbcode, &$allowsmilies, &$hideonline, &$style, &$language, &$timezone, &$dateformat, &$session_id) |
{ |
global $board_config, $db, $template, $lang, $images, $theme; |
global $phpbb_root_path, $phpEx; |
$dir = @opendir($board_config['avatar_gallery_path']); |
$avatar_images = array(); |
while( $file = @readdir($dir) ) |
{ |
if( $file != '.' && $file != '..' && !is_file($board_config['avatar_gallery_path'] . '/' . $file) && !is_link($board_config['avatar_gallery_path'] . '/' . $file) ) |
{ |
$sub_dir = @opendir($board_config['avatar_gallery_path'] . '/' . $file); |
$avatar_row_count = 0; |
$avatar_col_count = 0; |
while( $sub_file = @readdir($sub_dir) ) |
{ |
if( preg_match('/(\.gif$|\.png$|\.jpg|\.jpeg)$/is', $sub_file) ) |
{ |
$avatar_images[$file][$avatar_row_count][$avatar_col_count] = $sub_file; |
$avatar_name[$file][$avatar_row_count][$avatar_col_count] = ucfirst(str_replace("_", " ", preg_replace('/^(.*)\..*$/', '\1', $sub_file))); |
$avatar_col_count++; |
if( $avatar_col_count == 5 ) |
{ |
$avatar_row_count++; |
$avatar_col_count = 0; |
} |
} |
} |
} |
} |
@closedir($dir); |
@ksort($avatar_images); |
@reset($avatar_images); |
if( empty($category) ) |
{ |
list($category, ) = each($avatar_images); |
} |
@reset($avatar_images); |
$s_categories = '<select name="avatarcategory">'; |
while( list($key) = each($avatar_images) ) |
{ |
$selected = ( $key == $category ) ? ' selected="selected"' : ''; |
if( count($avatar_images[$key]) ) |
{ |
$s_categories .= '<option value="' . $key . '"' . $selected . '>' . ucfirst($key) . '</option>'; |
} |
} |
$s_categories .= '</select>'; |
$s_colspan = 0; |
for($i = 0; $i < count($avatar_images[$category]); $i++) |
{ |
$template->assign_block_vars("avatar_row", array()); |
$s_colspan = max($s_colspan, count($avatar_images[$category][$i])); |
for($j = 0; $j < count($avatar_images[$category][$i]); $j++) |
{ |
$template->assign_block_vars('avatar_row.avatar_column', array( |
"AVATAR_IMAGE" => $board_config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_images[$category][$i][$j], |
"AVATAR_NAME" => $avatar_name[$category][$i][$j]) |
); |
$template->assign_block_vars('avatar_row.avatar_option_column', array( |
"S_OPTIONS_AVATAR" => $avatar_images[$category][$i][$j]) |
); |
} |
} |
$params = array('coppa', 'user_id', 'username', 'email', 'current_email', 'cur_password', 'new_password', 'password_confirm', 'icq', 'aim', 'msn', 'yim', 'website', 'location', 'occupation', 'interests', 'signature', 'viewemail', 'notifypm', 'popup_pm', 'notifyreply', 'attachsig', 'allowhtml', 'allowbbcode', 'allowsmilies', 'hideonline', 'style', 'language', 'timezone', 'dateformat'); |
$s_hidden_vars = '<input type="hidden" name="sid" value="' . $session_id . '" /><input type="hidden" name="agreed" value="true" /><input type="hidden" name="avatarcatname" value="' . $category . '" />'; |
for($i = 0; $i < count($params); $i++) |
{ |
$s_hidden_vars .= '<input type="hidden" name="' . $params[$i] . '" value="' . str_replace('"', '"', $$params[$i]) . '" />'; |
} |
$template->assign_vars(array( |
'L_AVATAR_GALLERY' => $lang['Avatar_gallery'], |
'L_SELECT_AVATAR' => $lang['Select_avatar'], |
'L_RETURN_PROFILE' => $lang['Return_profile'], |
'L_CATEGORY' => $lang['Select_category'], |
'S_CATEGORY_SELECT' => $s_categories, |
'S_COLSPAN' => $s_colspan, |
'S_PROFILE_ACTION' => append_sid("profile.$phpEx?mode=$mode"), |
'S_HIDDEN_FIELDS' => $s_hidden_vars) |
); |
return; |
} |
?> |
/Forum/includes/usercp_confirm.php |
---|
0,0 → 1,460 |
<?php |
/*************************************************************************** |
* usercp_confirm.php |
* ------------------- |
* begin : Saturday, Jan 15, 2003 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: usercp_confirm.php,v 1.1.2.4 2006/05/30 19:29:43 grahamje Exp $ |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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; |
} |
// Note to potential users of this code ... |
// |
// Remember this is released under the _GPL_ and is subject |
// to that licence. Do not incorporate this within software |
// released or distributed in any way under a licence other |
// than the GPL. We will be watching ... ;) |
// Do we have an id? No, then just exit |
if (empty($HTTP_GET_VARS['id'])) |
{ |
exit; |
} |
$confirm_id = htmlspecialchars($HTTP_GET_VARS['id']); |
// Define available charset |
$chars = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9'); |
if (!preg_match('/^[A-Za-z0-9]+$/', $confirm_id)) |
{ |
$confirm_id = ''; |
} |
// Try and grab code for this id and session |
$sql = 'SELECT code |
FROM ' . CONFIRM_TABLE . " |
WHERE session_id = '" . $userdata['session_id'] . "' |
AND confirm_id = '$confirm_id'"; |
$result = $db->sql_query($sql); |
// If we have a row then grab data else create a new id |
if ($row = $db->sql_fetchrow($result)) |
{ |
$db->sql_freeresult($result); |
$code = $row['code']; |
} |
else |
{ |
exit; |
} |
// We can we will generate a single filtered png |
// Thanks to DavidMJ for emulating zlib within the code :) |
$_png = define_filtered_pngs(); |
$total_width = 320; |
$total_height = 50; |
$img_height = 40; |
$img_width = 0; |
$l = 0; |
list($usec, $sec) = explode(' ', microtime()); |
mt_srand($sec * $usec); |
$char_widths = array(); |
for ($i = 0; $i < strlen($code); $i++) |
{ |
$char = $code{$i}; |
$width = mt_rand(0, 4); |
$char_widths[] = $width; |
$img_width += $_png[$char]['width'] - $width; |
} |
$offset_x = mt_rand(0, $total_width - $img_width); |
$offset_y = mt_rand(0, $total_height - $img_height); |
$image = ''; |
$hold_chars = array(); |
for ($i = 0; $i < $total_height; $i++) |
{ |
$image .= chr(0); |
if ($i > $offset_y && $i < $offset_y + $img_height) |
{ |
$j = 0; |
for ($k = 0; $k < $offset_x; $k++) |
{ |
$image .= chr(mt_rand(140, 255)); |
} |
for ($k = 0; $k < strlen($code); $k++) |
{ |
$char = $code{$k}; |
if (empty($hold_chars[$char])) |
{ |
$hold_chars[$char] = explode("\n", chunk_split(base64_decode($_png[$char]['data']), $_png[$char]['width'] + 1, "\n")); |
} |
$image .= randomise(substr($hold_chars[$char][$l], 1), $char_widths[$j]); |
$j++; |
} |
for ($k = $offset_x + $img_width; $k < $total_width; $k++) |
{ |
$image .= chr(mt_rand(140, 255)); |
} |
$l++; |
} |
else |
{ |
for ($k = 0; $k < $total_width; $k++) |
{ |
$image .= chr(mt_rand(140, 255)); |
} |
} |
} |
unset($hold); |
$image = create_png($image, $total_width, $total_height); |
// Output image |
header('Content-Type: image/png'); |
header('Cache-control: no-cache, no-store'); |
echo $image; |
unset($image); |
unset($_png); |
exit; |
// This is designed to randomise the pixels of the image data within |
// certain limits so as to keep it readable. It also varies the image |
// width a little |
function randomise($scanline, $width) |
{ |
$new_line = ''; |
$start = floor($width/2); |
$end = strlen($scanline) - ceil($width/2); |
for ($i = $start; $i < $end; $i++) |
{ |
$pixel = ord($scanline{$i}); |
if ($pixel < 190) |
{ |
$new_line .= chr(mt_rand(0, 205)); |
} |
else if ($pixel > 190) |
{ |
$new_line .= chr(mt_rand(145, 255)); |
} |
else |
{ |
$new_line .= $scanline{$i}; |
} |
} |
return $new_line; |
} |
// This creates a chunk of the given type, with the given data |
// of the given length adding the relevant crc |
function png_chunk($length, $type, $data) |
{ |
$raw = $type; |
$raw .= $data; |
$crc = crc32($raw); |
$raw .= pack('C4', $crc >> 24, $crc >> 16, $crc >> 8, $crc); |
return pack('C4', $length >> 24, $length >> 16, $length >> 8, $length) . $raw; |
} |
// Creates greyscale 8bit png - The PNG spec can be found at |
// http://www.libpng.org/pub/png/spec/PNG-Contents.html we use |
// png because it's a fully recognised open standard and supported |
// by practically all modern browsers and OSs |
function create_png($raw_image, $width, $height) |
{ |
// SIG |
$image = pack('C8', 137, 80, 78, 71, 13, 10, 26, 10); |
// IHDR |
$raw = pack('C4', $width >> 24, $width >> 16, $width >> 8, $width); |
$raw .= pack('C4', $height >> 24, $height >> 16, $height >> 8, $height); |
$raw .= pack('C5', 8, 0, 0, 0, 0); |
$image .= png_chunk(13, 'IHDR', $raw); |
if (@extension_loaded('zlib')) |
{ |
$raw_image = gzcompress($raw_image); |
$length = strlen($raw_image); |
} |
else |
{ |
// The total length of this image, uncompressed, is just a calculation of pixels |
$length = ($width + 1) * $height; |
// Adler-32 hash generation |
// Optimized Adler-32 loop ported from the GNU Classpath project |
$temp_length = $length; |
$s1 = 1; |
$s2 = $index = 0; |
while ($temp_length > 0) |
{ |
// We can defer the modulo operation: |
// s1 maximally grows from 65521 to 65521 + 255 * 3800 |
// s2 maximally grows by 3800 * median(s1) = 2090079800 < 2^31 |
$substract_value = ($temp_length < 3800) ? $temp_length : 3800; |
$temp_length -= $substract_value; |
while (--$substract_value >= 0) |
{ |
$s1 += ord($raw_image[$index]); |
$s2 += $s1; |
$index++; |
} |
$s1 %= 65521; |
$s2 %= 65521; |
} |
$adler_hash = pack('N', ($s2 << 16) | $s1); |
// This is the same thing as gzcompress($raw_image, 0) but does not need zlib |
$raw_image = pack('C3v2', 0x78, 0x01, 0x01, $length, ~$length) . $raw_image . $adler_hash; |
// The Zlib header + Adler hash make us add on 11 |
$length += 11; |
} |
// IDAT |
$image .= png_chunk($length, 'IDAT', $raw_image); |
// IEND |
$image .= png_chunk(0, 'IEND', ''); |
return $image; |
} |
// Each 'data' element is base64_encoded uncompressed IDAT |
// png image data |
function define_filtered_pngs() |
{ |
$_png = array( |
'0' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A///////////////////olFAkBAAAGDyA4P///M31/////////////wD////////////////0dAgAAAAAAAAAAAAEcPipFGHn////////////AP//////////////6DAAAAAAAAAAAAAAAAAALSEAN+T///////////8A//////////////xAAAAAAAAAAAAAAAAAAAAAACPA/////////////wD/////////////oAAAAAAAAAAAAAAAAAAAAAAAev//////////////AP////////////8oAAAAAAAAPNj/zDAAAAAAAABD//////////////8A////////////1AAAAAAAABjw////5BAAAAAAAADo/////////////wD///////////+QAAAAAAAAbP//////QgAAAAAAAKj/////////////AP///////////1wAAAAAAACs/////8AXAAAAAAAAcP////////////8A////////////OAAAAAAAAND////dNwAAAAAAAABI/////////////wD///////////8gAAAAAAAA4P//7koACwAAAAAAACT/////////////AP///////////wgAAAAAAAD///VqAwaPAAAAAAAAEP////////////8A////////////AAAAAAAAAP/8kQYDavUAAAAAAAAA/////////////wD///////////8AAAAAAAAA/6kNAEru/wAAAAAAAAD/////////////AP///////////wAAAAAAAADAIwA33f//AAAAAAAAAP////////////8A////////////FAAAAAAAADYAI8D///8AAAAAAAAQ/////////////wD///////////8kAAAAAAAAAA2p////5AAAAAAAACD/////////////AP///////////0gAAAAAAAAFkfz////UAAAAAAAAQP////////////8A////////////cAAAAAAAAET1/////7AAAAAAAABo/////////////wD///////////+oAAAAAAAAXfX/////sAAAAAAAAGj/////////////AAAAALgAAAAAAAAwAAAAAAAAAAAAAAD////////////oAAAAAAAACOT////oEAAAAAAAAOD/////////////AP////////////8+AAAAAAAAKMz/zDQAAAAAAAA0//////////////8A////////////7jgAAAAAAAAAAAAAAAAAAAAAAKT//////////////wD///////////VqAwIAAAAAAAAAAAAAAAAAAAA8////////////////AP//////////rQcDaVEAAAAAAAAAAAAAAAAAKOj///////////////8A///////////nblnu/IAIAAAAAAAAAAAAAFzw/////////////////wD////////////79////+iITCAAAAAgSITg////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////w==', |
'width' => 40 |
), |
'1' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////8BAAAAAAAP//////////////////AP////////////////////////9sAAAAAAAA//////////////////8A////////////////////////pAAAAAAAAAD//////////////////wD//////////////////////6wEAAAAAAAAAP//////////////////AP////////////////////h4AAAAAAAAAAAA//////////////////8A//////////////////ygJAAAAAAAAAAAAAD//////////////////wD//////////////9x8HAAAAAAAAAAAAAAAAP//////////////////AP//////////////AAAAAAAAAAAAAAAAAAAA//////////////////8A//////////////8AAAAAAAAAAAAAAAAAAAD//////////////////wD//////////////wAAAAAAAAR4AAAAAAAAAP//////////////////AP//////////////AAAAAAA4zP8AAAAAAAAA//////////////////8A//////////////8AAAA4sP///wAAAAAAAAD//////////////////wD//////////////yR80P//////AAAAAAAAAP//////////////////AP////////////////////////8AAAAAAAAA//////////////////8A/////////////////////////wAAAAAAAAD//////////////////wD/////////////////////////AAAAAAAAAP//////////////////AP////////////////////////8AAAAAAAAA//////////////////8A/////////////////////////wAAAAAAAAD//////////////////wD/////////////////////////AAAAAAAAAP//////////////////AP////////////////////////8AAAAAAAAA//////////////////8A/////////////////////////wAAAAAAAAD//////////////////wD/////////////////////////AAAAAAAAAP//////////////////AP////////////////////////8AAAAAAAAA//////////////////8A/////////////////////////wAAAAAAAAD//////////////////wD/////////////////////////AAAAAAAAAP//////////////////AP////////////////////////8AAAAAAAAA//////////////////8A/////////////////////////wAAAAAAAAD//////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'2' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP/////////////////okFAkCAAABCBIfNT///////////////////8A///////////////8hAgAAAAAAAAAAAAAAFTo/////////////////wD//////////////1QAAAAAAAAAAAAAAAAAACjo////////////////AP////////////+MAAAAAAAAAAAAAAAAAAAAADj///////////////8A////////////9BAAAAAAAAAAAAAAAAAAAAAAALD//////////////wD///////////+gAAAAAAAAAHjs+KwMAAAAAAAAVP//////////////AP///////////1gAAAAAAABM/////6QAAAAAAAAU//////////////8A////////////KAAAAAAAALj/////+AAAAAAAAAD//////////////wD///////////+MfGBMOCAI8P/////wAAAAAAAACP//////////////AP///////////////////////////5wAAAAAAAAw//////////////8A///////////////////////////oFAAAAAAAAHz//////////////wD/////////////////////////6CgAAAAAAAAE3P//////////////AP///////////////////////9ggAAAAAAAAAHT///////////////8A//////////////////////+0DAAAAAAAAAA8+P///////////////wD/////////////////////gAAAAAAAAAAAKOj/////////////////AP//////////////////9FAAAAAAAAAAADzw//////////////////8A/////////////////+g4AAAAAAAAAABk/P///////////////////wD////////////////oKAAAAAAAAAAMqP//////////////////////AP//////////////6CgAAAAAAAAAMNz///////////////////////8A//////////////g4AAAAAAAAAFT0/////////////////////////wD/////////////bAAAAAAAAABU/P//////////////////////////AP///////////8wAAAAAAAAAAAAAAAAAAAAAAAAA//////////////8A////////////SAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////wD//////////9wAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////AP//////////hAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////8A//////////9AAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////wD//////////xAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'3' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD////////////////8sGg0FAAAACA4cLz8////////////////////AP//////////////rBgAAAAAAAAAAAAAACTA//////////////////8A/////////////3QAAAAAAAAAAAAAAAAAAASs/////////////////wD///////////+YAAAAAAAAAAAAAAAAAAAAAAjc////////////////AP//////////6AwAAAAAAAAAAAAAAAAAAAAAAGT///////////////8A//////////94AAAAAAAABJDw/8g4AAAAAAAAHP///////////////wD//////////yAAAAAAAACE/////9gAAAAAAAAA////////////////AP///////////NSwiGQ4FOT//////AAAAAAAABD///////////////8A//////////////////////////+YAAAAAAAAVP///////////////wD//////////////////////P/ggAQAAAAAAATM////////////////AP////////////////////9gAAAAAAAAAAAElP////////////////8A/////////////////////0AAAAAAAAAAHLj//////////////////wD/////////////////////OAAAAAAAAAAwkPj/////////////////AP////////////////////8gAAAAAAAAAAAAINj///////////////8A/////////////////////xAAAAAAAAAAAAAAIPD//////////////wD/////////////////////uOz/4HgEAAAAAAAAhP//////////////AP///////////////////////////3wAAAAAAAAw//////////////8A////////////////////////////6AAAAAAAAAj//////////////wD/////////////////////////////AAAAAAAAAP//////////////AP//////////tJh8YEQoDNz//////+AAAAAAAAAY//////////////8A//////////88AAAAAAAAaP//////dAAAAAAAAEz//////////////wD//////////6QAAAAAAAAAdOD/5HQAAAAAAAAApP//////////////AP///////////CgAAAAAAAAAAAAAAAAAAAAAACD4//////////////8A////////////yAQAAAAAAAAAAAAAAAAAAAAEuP///////////////wD/////////////rAQAAAAAAAAAAAAAAAAABJD/////////////////AP//////////////zDQAAAAAAAAAAAAAACTA//////////////////8A/////////////////8BwOCAAAAAUNGi0/P///////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'4' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP//////////////////////////nAAAAAAAAAD///////////////8A/////////////////////////8AEAAAAAAAAAP///////////////wD////////////////////////gGAAAAAAAAAAA////////////////AP//////////////////////9DAAAAAAAAAAAAD///////////////8A//////////////////////9UAAAAAAAAAAAAAP///////////////wD/////////////////////hAAAAAAAAAAAAAAA////////////////AP///////////////////7QAAAAAAAAAAAAAAAD///////////////8A///////////////////UDAAAAAAUAAAAAAAAAP///////////////wD/////////////////7CQAAAAABMAAAAAAAAAA////////////////AP////////////////xEAAAAAACU/wAAAAAAAAD///////////////8A////////////////cAAAAAAAZP//AAAAAAAAAP///////////////wD//////////////6AAAAAAADz8//8AAAAAAAAA////////////////AP/////////////IBAAAAAAc6P///wAAAAAAAAD///////////////8A////////////5BgAAAAADMz/////AAAAAAAAAP///////////////wD///////////g0AAAAAACk//////8AAAAAAAAA////////////////AP//////////XAAAAAAAfP///////wAAAAAAAAD///////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////8A////////////////////////////AAAAAAAAAP///////////////wD///////////////////////////8AAAAAAAAA////////////////AP///////////////////////////wAAAAAAAAD///////////////8A////////////////////////////AAAAAAAAAP///////////////wD///////////////////////////8AAAAAAAAA////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'5' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP//////////////8AAAAAAAAAAAAAAAAAAAAAAA//////////////8A///////////////MAAAAAAAAAAAAAAAAAAAAAAD//////////////wD//////////////6wAAAAAAAAAAAAAAAAAAAAAAP//////////////AP//////////////iAAAAAAAAAAAAAAAAAAAAAAA//////////////8A//////////////9kAAAAAAAAAAAAAAAAAAAAAAD//////////////wD//////////////0QAAAAAAAAAAAAAAAAAAAAAAP//////////////AP//////////////IAAAAAAAYP////////////////////////////8A//////////////wAAAAAAAB8/////////////////////////////wD/////////////3AAAAAAAAIj/////////////////////////////AP////////////+4AAAAAAAAoLRYHAAEKGTE//////////////////8A/////////////5QAAAAAAAAQAAAAAAAAAABY9P///////////////wD/////////////dAAAAAAAAAAAAAAAAAAAAAA89P//////////////AP////////////9QAAAAAAAAAAAAAAAAAAAAAABg//////////////8A/////////////zAAAAAAAAAAAAAAAAAAAAAAAADQ/////////////wD/////////////IAAAAAAAAGjY/+h4BAAAAAAAAGz/////////////AP//////////////9NS0lHSc//////90AAAAAAAALP////////////8A/////////////////////////////9QAAAAAAAAE/////////////wD//////////////////////////////wAAAAAAAAD/////////////AP/////////////////////////////8AAAAAAAAEP////////////8A////////////pIRwWEAgDOD//////8wAAAAAAAA8/////////////wD///////////9EAAAAAAAAaP//////ZAAAAAAAAHz/////////////AP///////////6QAAAAAAAAAaOD/4GQAAAAAAAAE4P////////////8A/////////////CQAAAAAAAAAAAAAAAAAAAAAAGD//////////////wD/////////////yAQAAAAAAAAAAAAAAAAAAAAc7P//////////////AP//////////////rAwAAAAAAAAAAAAAAAAAGNj///////////////8A////////////////0EAAAAAAAAAAAAAAAFTo/////////////////wD//////////////////8h4QCAAAAAcQHzU////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'6' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD///////////////////+0ZCwMAAAUNGjI////////////////////AP/////////////////EMAAAAAAAAAAAAABM6P////////////////8A////////////////lAQAAAAAAAAAAAAAAAAo6P///////////////wD//////////////6wAAAAAAAAAAAAAAAAAAABI////////////////AP/////////////oEAAAAAAAAAAAAAAAAAAAAACw//////////////8A/////////////3AAAAAAAAAoxP/YPAAAAAAAAEj//////////////wD////////////4EAAAAAAACOD////YDCBAVGiAoP//////////////AP///////////7gAAAAAAABY//////////////////////////////8A////////////eAAAAAAAAJT//////////////////////////////wD///////////9MAAAAAAAAvP/IXBgABCx03P//////////////////AP///////////ygAAAAAAADcdAAAAAAAAAAEiP////////////////8A////////////FAAAAAAAAFAAAAAAAAAAAAAAcP///////////////wD///////////8AAAAAAAAAAAAAAAAAAAAAAAAAlP//////////////AP///////////wAAAAAAAAAAAAAAAAAAAAAAAAAQ8P////////////8A////////////AAAAAAAAAABAyP/kZAAAAAAAAACQ/////////////wD///////////8MAAAAAAAALPj/////WAAAAAAAAET/////////////AP///////////yQAAAAAAACY///////MAAAAAAAAFP////////////8A////////////SAAAAAAAAMD///////wAAAAAAAAA/////////////wD///////////9wAAAAAAAAvP///////wAAAAAAAAD/////////////AP///////////7QAAAAAAACI///////UAAAAAAAAJP////////////8A////////////+AwAAAAAACDw/////2wAAAAAAABY/////////////wD/////////////cAAAAAAAADC8/Ox4AAAAAAAAAKj/////////////AP/////////////oEAAAAAAAAAAAAAAAAAAAAAAk/P////////////8A//////////////+oAAAAAAAAAAAAAAAAAAAABLj//////////////wD///////////////+QAAAAAAAAAAAAAAAAAACQ////////////////AP////////////////+0JAAAAAAAAAAAAAAkuP////////////////8A///////////////////8sGg0FAAADCxgqPz//////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'7' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD///////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP///////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD///////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP///////////wAAAAAAAAAAAAAAAAAAAAAAAAAABP////////////8A////////////AAAAAAAAAAAAAAAAAAAAAAAAAAy4/////////////wD//////////////////////////+QUAAAAAAAEuP//////////////AP/////////////////////////8QAAAAAAAAKT///////////////8A/////////////////////////4wAAAAAAAB0/////////////////wD////////////////////////cCAAAAAAANPz/////////////////AP///////////////////////0QAAAAAAATY//////////////////8A//////////////////////+0AAAAAAAAeP///////////////////wD//////////////////////CQAAAAAABTw////////////////////AP////////////////////+gAAAAAAAAkP////////////////////8A/////////////////////ywAAAAAABDw/////////////////////wD///////////////////+4AAAAAAAAbP//////////////////////AP///////////////////1wAAAAAAADQ//////////////////////8A///////////////////4DAAAAAAAMP///////////////////////wD//////////////////7QAAAAAAAB8////////////////////////AP//////////////////aAAAAAAAAMj///////////////////////8A//////////////////8oAAAAAAAM/P///////////////////////wD/////////////////8AAAAAAAAET/////////////////////////AP////////////////+0AAAAAAAAcP////////////////////////8A/////////////////4wAAAAAAACY/////////////////////////wD/////////////////WAAAAAAAAMD/////////////////////////AP////////////////80AAAAAAAA4P////////////////////////8A/////////////////xAAAAAAAAD4/////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'8' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD////////////////////IdDQUAAAEIEiA1P//////////////////AP/////////////////gRAAAAAAAAAAAAAAAROD///////////////8A////////////////0BgAAAAAAAAAAAAAAAAAEMj//////////////wD///////////////AcAAAAAAAAAAAAAAAAAAAAHPD/////////////AP//////////////hAAAAAAAAAAAAAAAAAAAAAAAhP////////////8A//////////////8sAAAAAAAAKMz/zCgAAAAAAAAs/////////////wD//////////////wAAAAAAAADM////zAAAAAAAAAD/////////////AP//////////////BAAAAAAAAP//////AAAAAAAABP////////////8A//////////////8sAAAAAAAAzP///9QAAAAAAAAw/////////////wD//////////////3wAAAAAAAAoyP/YNAAAAAAAAIT/////////////AP//////////////7BgAAAAAAAAAAAAAAAAAAAAc8P////////////8A////////////////xBgAAAAAAAAAAAAAAAAAGNj//////////////wD/////////////////tAQAAAAAAAAAAAAAAACo////////////////AP///////////////HAAAAAAAAAAAAAAAAAAAAB8//////////////8A//////////////9gAAAAAAAAAAAAAAAAAAAAAAB8/////////////wD/////////////wAAAAAAAAABk4P/UWAAAAAAAAATQ////////////AP////////////9UAAAAAAAAaP//////XAAAAAAAAGT///////////8A/////////////xgAAAAAAADg///////cAAAAAAAAJP///////////wD/////////////AAAAAAAAAP////////8AAAAAAAAA////////////AP////////////8AAAAAAAAA4P//////3AAAAAAAAAT///////////8A/////////////ygAAAAAAABg//////9cAAAAAAAALP///////////wD/////////////ZAAAAAAAAABY1P/cXAAAAAAAAABw////////////AP/////////////QAAAAAAAAAAAAAAAAAAAAAAAABNz///////////8A//////////////9gAAAAAAAAAAAAAAAAAAAAAAB0/////////////wD///////////////Q8AAAAAAAAAAAAAAAAAAAAUPz/////////////AP////////////////x4CAAAAAAAAAAAAAAAEIT8//////////////8A///////////////////smFQwGAAAABg0ZKT0/////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'9' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD///////////////////ysYCwMAAAUNGiw/P//////////////////AP////////////////+4JAAAAAAAAAAAAAAkuP////////////////8A////////////////lAQAAAAAAAAAAAAAAAAAkP///////////////wD//////////////8AEAAAAAAAAAAAAAAAAAAAAqP//////////////AP/////////////8JAAAAAAAAAAAAAAAAAAAAAAQ7P////////////8A/////////////6wAAAAAAAAAfOz8vCwAAAAAAABw/////////////wD/////////////WAAAAAAAAHD/////7BgAAAAAAAz4////////////AP////////////8kAAAAAAAA1P//////hAAAAAAAALT///////////8A/////////////wAAAAAAAAD///////+4AAAAAAAAcP///////////wD/////////////AAAAAAAAAPz//////8AAAAAAAABI////////////AP////////////8UAAAAAAAAzP//////lAAAAAAAACT///////////8A/////////////0QAAAAAAABY//////gsAAAAAAAADP///////////wD/////////////kAAAAAAAAABw5P/IPAAAAAAAAAAA////////////AP/////////////wEAAAAAAAAAAAAAAAAAAAAAAAAAD///////////8A//////////////+UAAAAAAAAAAAAAAAAAAAAAAAAAP///////////wD///////////////9wAAAAAAAAAAAAAFAAAAAAAAAU////////////AP////////////////+IBAAAAAAAAABw3AAAAAAAACj///////////8A///////////////////cdCwEABhcxP+8AAAAAAAATP///////////wD//////////////////////////////5AAAAAAAAB4////////////AP//////////////////////////////UAAAAAAAALj///////////8A//////////////+kgGxUQCAM2P///+AIAAAAAAAQ+P///////////wD//////////////0gAAAAAAAA42P/EKAAAAAAAAHD/////////////AP//////////////sAAAAAAAAAAAAAAAAAAAAAAQ6P////////////8A////////////////TAAAAAAAAAAAAAAAAAAAAKz//////////////wD////////////////oKAAAAAAAAAAAAAAAAASU////////////////AP/////////////////sUAAAAAAAAAAAAAAwxP////////////////8A////////////////////yHA0FAAADCxktP///////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'A' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD//////////////////+QAAAAAAAAAAAAAAOT/////////////////AP//////////////////kAAAAAAAAAAAAAAAkP////////////////8A//////////////////88AAAAAAAAAAAAAAA8/////////////////wD/////////////////5AAAAAAAAAAAAAAAAADk////////////////AP////////////////+QAAAAAAAAAAAAAAAAAJD///////////////8A/////////////////zwAAAAAAAAAAAAAAAAAPP///////////////wD////////////////kAAAAAAAAAAgAAAAAAAAA5P//////////////AP///////////////5AAAAAAAAAAgAAAAAAAAACQ//////////////8A////////////////PAAAAAAAAAz8HAAAAAAAADz//////////////wD//////////////+QAAAAAAAAAWP9kAAAAAAAAANz/////////////AP//////////////kAAAAAAAAACk/7wAAAAAAAAAhP////////////8A//////////////88AAAAAAAABOz//BQAAAAAAAAw/////////////wD/////////////4AAAAAAAAAA8////ZAAAAAAAAADc////////////AP////////////+EAAAAAAAAAIj///+8AAAAAAAAAIT///////////8A/////////////zAAAAAAAAAA2P////wQAAAAAAAAMP///////////wD////////////cAAAAAAAAACT//////1wAAAAAAAAA3P//////////AP///////////4QAAAAAAAAAAAAAAAAAAAAAAAAAAACE//////////8A////////////MAAAAAAAAAAAAAAAAAAAAAAAAAAAADD//////////wD//////////9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANz/////////AP//////////hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhP////////8A//////////8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw/////////wD/////////3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc////////AP////////+EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIT///////8A/////////zAAAAAAAAAAhP///////////2QAAAAAAAAAMP///////wD////////cAAAAAAAAAADM////////////vAAAAAAAAAAA3P//////AP///////4QAAAAAAAAAHP/////////////4DAAAAAAAAACE//////8A////////MAAAAAAAAABk//////////////9cAAAAAAAAADD//////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'B' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAEDh83P///////////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAEhP//////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAeP////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAxP///////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAABY////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAABT///////////8A//////////8AAAAAAAAAAP/////4zEwAAAAAAAAAAP///////////wD//////////wAAAAAAAAAA////////7AAAAAAAAAAQ////////////AP//////////AAAAAAAAAAD////////sAAAAAAAAAEj///////////8A//////////8AAAAAAAAAAP/////4zEQAAAAAAAAAtP///////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAFz/////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAiA/P////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAIjPj//////////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAGKz/////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJT///////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAABNz//////////wD//////////wAAAAAAAAAA///////sqCAAAAAAAAAAbP//////////AP//////////AAAAAAAAAAD/////////yAAAAAAAAAAs//////////8A//////////8AAAAAAAAAAP//////////AAAAAAAAAAT//////////wD//////////wAAAAAAAAAA/////////7wAAAAAAAAAAP//////////AP//////////AAAAAAAAAAD//////+ikGAAAAAAAAAAY//////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFT//////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsP//////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAADj///////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAc6P///////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAATOj/////////////AP//////////AAAAAAAAAAAAAAAAAAAEIEBkkNj///////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'C' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP//////////////////5JRULBAAAAgkTIDQ//////////////////8A////////////////1FAAAAAAAAAAAAAAAABAyP///////////////wD//////////////4gEAAAAAAAAAAAAAAAAAAAElP//////////////AP////////////9wAAAAAAAAAAAAAAAAAAAAAAAAlP////////////8A////////////kAAAAAAAAAAAAAAAAAAAAAAAAAAEyP///////////wD//////////9wIAAAAAAAAAAAAAAAAAAAAAAAAAAAw////////////AP//////////WAAAAAAAAAAAWMz/8JwQAAAAAAAAAACw//////////8A/////////+wEAAAAAAAAAID//////9QMAAAAAAAAAET//////////wD/////////nAAAAAAAAAAo/P///////3wAAAAABDBspP//////////AP////////9gAAAAAAAAAIz/////////3BxQjMT0//////////////8A/////////zQAAAAAAAAAzP///////////////////////////////wD/////////GAAAAAAAAADo////////////////////////////////AP////////8AAAAAAAAAAP////////////////////////////////8A/////////wAAAAAAAAAA/////////////////////////////////wD/////////AAAAAAAAAAD/////////////////////////////////AP////////8cAAAAAAAAAOj///////////////////////////////8A/////////zgAAAAAAAAA0P/////////kIGio7P///////////////wD/////////bAAAAAAAAACg/////////5wAAAAAMHS49P//////////AP////////+oAAAAAAAAAEz/////////PAAAAAAAAAAc//////////8A//////////QIAAAAAAAAALz//////6QAAAAAAAAAAGT//////////wD//////////3AAAAAAAAAADIzo/+SEBAAAAAAAAAAAyP//////////AP//////////7BAAAAAAAAAAAAAAAAAAAAAAAAAAAED///////////8A////////////rAAAAAAAAAAAAAAAAAAAAAAAAAAE0P///////////wD/////////////fAAAAAAAAAAAAAAAAAAAAAAAAJz/////////////AP//////////////iAQAAAAAAAAAAAAAAAAAAASY//////////////8A////////////////yEAAAAAAAAAAAAAAAAA8yP///////////////wD//////////////////9yIUCwQAAAAIEB4yP//////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'D' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD///////////8AAAAAAAAAAAAAAAAADChQkOT/////////////////AP///////////wAAAAAAAAAAAAAAAAAAAAAABGjw//////////////8A////////////AAAAAAAAAAAAAAAAAAAAAAAAACDY/////////////wD///////////8AAAAAAAAAAAAAAAAAAAAAAAAAABjk////////////AP///////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAED///////////8A////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKj//////////wD///////////8AAAAAAAAAAP///+isSAAAAAAAAAAANP//////////AP///////////wAAAAAAAAAA////////hAAAAAAAAAAA2P////////8A////////////AAAAAAAAAAD/////////MAAAAAAAAACQ/////////wD///////////8AAAAAAAAAAP////////+MAAAAAAAAAFj/////////AP///////////wAAAAAAAAAA/////////8gAAAAAAAAAMP////////8A////////////AAAAAAAAAAD/////////5AAAAAAAAAAY/////////wD///////////8AAAAAAAAAAP//////////AAAAAAAAAAD/////////AP///////////wAAAAAAAAAA//////////8AAAAAAAAAAP////////8A////////////AAAAAAAAAAD//////////wAAAAAAAAAA/////////wD///////////8AAAAAAAAAAP/////////wAAAAAAAAABD/////////AP///////////wAAAAAAAAAA/////////9QAAAAAAAAAJP////////8A////////////AAAAAAAAAAD/////////qAAAAAAAAABI/////////wD///////////8AAAAAAAAAAP////////9QAAAAAAAAAHj/////////AP///////////wAAAAAAAAAA////////uAAAAAAAAAAAvP////////8A////////////AAAAAAAAAAD////w0HwEAAAAAAAAACT8/////////wD///////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAoP//////////AP///////////wAAAAAAAAAAAAAAAAAAAAAAAAAAADz8//////////8A////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAY6P///////////wD///////////8AAAAAAAAAAAAAAAAAAAAAAAAAKNz/////////////AP///////////wAAAAAAAAAAAAAAAAAAAAAACHT0//////////////8A////////////AAAAAAAAAAAAAAAAABg4bKj0/////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'E' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP//////////AAAAAAAAAAD///////////////////////////////8A//////////8AAAAAAAAAAP///////////////////////////////wD//////////wAAAAAAAAAA////////////////////////////////AP//////////AAAAAAAAAAD///////////////////////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////8A//////////8AAAAAAAAAAP///////////////////////////////wD//////////wAAAAAAAAAA////////////////////////////////AP//////////AAAAAAAAAAD///////////////////////////////8A//////////8AAAAAAAAAAP///////////////////////////////wD//////////wAAAAAAAAAA////////////////////////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'F' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////wAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD/////////////AAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A/////////////wAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD/////////////AAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A/////////////wAAAAAAAAAA/////////////////////////////wD/////////////AAAAAAAAAAD/////////////////////////////AP////////////8AAAAAAAAAAP////////////////////////////8A/////////////wAAAAAAAAAA/////////////////////////////wD/////////////AAAAAAAAAAAAAAAAAAAAAAAA////////////////AP////////////8AAAAAAAAAAAAAAAAAAAAAAAD///////////////8A/////////////wAAAAAAAAAAAAAAAAAAAAAAAP///////////////wD/////////////AAAAAAAAAAAAAAAAAAAAAAAA////////////////AP////////////8AAAAAAAAAAAAAAAAAAAAAAAD///////////////8A/////////////wAAAAAAAAAAAAAAAAAAAAAAAP///////////////wD/////////////AAAAAAAAAAD/////////////////////////////AP////////////8AAAAAAAAAAP////////////////////////////8A/////////////wAAAAAAAAAA/////////////////////////////wD/////////////AAAAAAAAAAD/////////////////////////////AP////////////8AAAAAAAAAAP////////////////////////////8A/////////////wAAAAAAAAAA/////////////////////////////wD/////////////AAAAAAAAAAD/////////////////////////////AP////////////8AAAAAAAAAAP////////////////////////////8A/////////////wAAAAAAAAAA/////////////////////////////wD/////////////AAAAAAAAAAD/////////////////////////////AP////////////8AAAAAAAAAAP////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'G' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD//////////////////MB8TCgQAAAACCA4YJzs////////////////AP///////////////JQcAAAAAAAAAAAAAAAAAAhw8P////////////8A/////////////9gwAAAAAAAAAAAAAAAAAAAAAAAk2P///////////wD////////////EDAAAAAAAAAAAAAAAAAAAAAAAAAAc7P//////////AP//////////2AwAAAAAAAAAAAAAAAAAAAAAAAAAAABY//////////8A//////////wwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ/////////wD/////////kAAAAAAAAAAAEHzQ/P/gmCAAAAAAAAAAAFz/////////AP////////wcAAAAAAAAACjg////////8CwAAAAAAAAgWP////////8A////////vAAAAAAAAAAI2P//////////yBRAcJjI8P///////////wD///////94AAAAAAAAAGD/////////////////////////////////AP///////0AAAAAAAAAAsP////////////////////////////////8A////////IAAAAAAAAADc/////////////////////////////////wD///////8AAAAAAAAAAP///////wAAAAAAAAAAAAAAAAD/////////AP///////wAAAAAAAAAA////////AAAAAAAAAAAAAAAAAP////////8A////////AAAAAAAAAAD///////8AAAAAAAAAAAAAAAAA/////////wD///////8gAAAAAAAAAOD//////wAAAAAAAAAAAAAAAAD/////////AP///////0AAAAAAAAAAtP//////AAAAAAAAAAAAAAAAAP////////8A////////cAAAAAAAAABw//////8AAAAAAAAAAAAAAAAA/////////wD///////+8AAAAAAAAABDs////////////AAAAAAAAAAD/////////AP////////wYAAAAAAAAADz0//////////AAAAAAAAAAAP////////8A/////////5AAAAAAAAAAACCY4P//3KhcCAAAAAAAAAAA/////////wD/////////+CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////AP//////////xAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIP////////8A////////////rAQAAAAAAAAAAAAAAAAAAAAAAAAAAGTw/////////wD/////////////vBQAAAAAAAAAAAAAAAAAAAAAADjI////////////AP//////////////8HAQAAAAAAAAAAAAAAAAAEiw//////////////8A//////////////////iwcEAgBAAABCA4aKDk/////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'H' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////8AAAAAAAAAAP///////////wAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////AAAAAAAAAAD///////////8AAAAAAAAAAP//////////AP////////8AAAAAAAAAAP///////////wAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////AAAAAAAAAAD///////////8AAAAAAAAAAP//////////AP////////8AAAAAAAAAAP///////////wAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////AAAAAAAAAAD///////////8AAAAAAAAAAP//////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8A/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////wD/////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8A/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////wD/////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////AAAAAAAAAAD///////////8AAAAAAAAAAP//////////AP////////8AAAAAAAAAAP///////////wAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////AAAAAAAAAAD///////////8AAAAAAAAAAP//////////AP////////8AAAAAAAAAAP///////////wAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////AAAAAAAAAAD///////////8AAAAAAAAAAP//////////AP////////8AAAAAAAAAAP///////////wAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////AAAAAAAAAAD///////////8AAAAAAAAAAP//////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'I' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////AAAAAAAAAAAAAAAAAAAAAAAA////////////////AP////////////8AAAAAAAAAAAAAAAAAAAAAAAD///////////////8A/////////////wAAAAAAAAAAAAAAAAAAAAAAAP///////////////wD/////////////AAAAAAAAAAAAAAAAAAAAAAAA////////////////AP////////////8AAAAAAAAAAAAAAAAAAAAAAAD///////////////8A/////////////wAAAAAAAAAAAAAAAAAAAAAAAP///////////////wD/////////////AAAAAAAAAAAAAAAAAAAAAAAA////////////////AP///////////////////wAAAAAAAAAA//////////////////////8A////////////////////AAAAAAAAAAD//////////////////////wD///////////////////8AAAAAAAAAAP//////////////////////AP///////////////////wAAAAAAAAAA//////////////////////8A////////////////////AAAAAAAAAAD//////////////////////wD///////////////////8AAAAAAAAAAP//////////////////////AP///////////////////wAAAAAAAAAA//////////////////////8A////////////////////AAAAAAAAAAD//////////////////////wD///////////////////8AAAAAAAAAAP//////////////////////AP///////////////////wAAAAAAAAAA//////////////////////8A////////////////////AAAAAAAAAAD//////////////////////wD///////////////////8AAAAAAAAAAP//////////////////////AP///////////////////wAAAAAAAAAA//////////////////////8A////////////////////AAAAAAAAAAD//////////////////////wD///////////////////8AAAAAAAAAAP//////////////////////AP////////////8AAAAAAAAAAAAAAAAAAAAAAAD///////////////8A/////////////wAAAAAAAAAAAAAAAAAAAAAAAP///////////////wD/////////////AAAAAAAAAAAAAAAAAAAAAAAA////////////////AP////////////8AAAAAAAAAAAAAAAAAAAAAAAD///////////////8A/////////////wAAAAAAAAAAAAAAAAAAAAAAAP///////////////wD/////////////AAAAAAAAAAAAAAAAAAAAAAAA////////////////AP////////////8AAAAAAAAAAAAAAAAAAAAAAAD///////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'J' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP///////////////////////////wAAAAAAAAAA//////////////8A////////////////////////////AAAAAAAAAAD//////////////wD///////////////////////////8AAAAAAAAAAP//////////////AP///////////////////////////wAAAAAAAAAA//////////////8A////////////////////////////AAAAAAAAAAD//////////////wD///////////////////////////8AAAAAAAAAAP//////////////AP///////////////////////////wAAAAAAAAAA//////////////8A////////////////////////////AAAAAAAAAAD//////////////wD///////////////////////////8AAAAAAAAAAP//////////////AP///////////////////////////wAAAAAAAAAA//////////////8A////////////////////////////AAAAAAAAAAD//////////////wD///////////////////////////8AAAAAAAAAAP//////////////AP///////////////////////////wAAAAAAAAAA//////////////8A////////////////////////////AAAAAAAAAAD//////////////wD///////////////////////////8AAAAAAAAAAP//////////////AP///////////////////////////wAAAAAAAAAA//////////////8A////////////////////////////AAAAAAAAAAj//////////////wD//////////+zMrIxwUDAQ//////wAAAAAAAAAIP//////////////AP//////////DAAAAAAAAADo////2AAAAAAAAAA0//////////////8A//////////8wAAAAAAAAAKj///+YAAAAAAAAAFj//////////////wD//////////2gAAAAAAAAAIND/yBgAAAAAAAAAkP//////////////AP//////////vAAAAAAAAAAAAAAAAAAAAAAAAADc//////////////8A////////////MAAAAAAAAAAAAAAAAAAAAAAAUP///////////////wD////////////EBAAAAAAAAAAAAAAAAAAAABjk////////////////AP////////////+sBAAAAAAAAAAAAAAAAAAY2P////////////////8A///////////////EMAAAAAAAAAAAAAAAVOj//////////////////wD/////////////////vHBAIAAAABg8fNT/////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'K' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD///////8AAAAAAAAAAP//////////wAQAAAAAAAAAAABw////////AP///////wAAAAAAAAAA/////////9AMAAAAAAAAAAAAcP////////8A////////AAAAAAAAAAD////////cGAAAAAAAAAAAAHD//////////wD///////8AAAAAAAAAAP//////6CgAAAAAAAAAAABs////////////AP///////wAAAAAAAAAA//////Q0AAAAAAAAAAAAVPz///////////8A////////AAAAAAAAAAD////8RAAAAAAAAAAAAFT8/////////////wD///////8AAAAAAAAAAP///1gAAAAAAAAAAABU/P//////////////AP///////wAAAAAAAAAA//9wAAAAAAAAAAAASPz///////////////8A////////AAAAAAAAAAD/jAAAAAAAAAAAADz0/////////////////wD///////8AAAAAAAAAAKQAAAAAAAAAAAA89P//////////////////AP///////wAAAAAAAAAABAAAAAAAAAAAFPT///////////////////8A////////AAAAAAAAAAAAAAAAAAAAAAAApP///////////////////wD///////8AAAAAAAAAAAAAAAAAAAAAAAAU8P//////////////////AP///////wAAAAAAAAAAAAAAAAAAAAAAAABk//////////////////8A////////AAAAAAAAAAAAAAAAAAAAAAAAAADE/////////////////wD///////8AAAAAAAAAAAAAAAAoEAAAAAAAACz8////////////////AP///////wAAAAAAAAAAAAAAGNiAAAAAAAAAAIj///////////////8A////////AAAAAAAAAAAAABjY//gYAAAAAAAACOD//////////////wD///////8AAAAAAAAAAAAY2P///5wAAAAAAAAASP//////////////AP///////wAAAAAAAAAAGNj//////CgAAAAAAAAAqP////////////8A////////AAAAAAAAAADI////////sAAAAAAAAAAc8P///////////wD///////8AAAAAAAAAAP//////////QAAAAAAAAABs////////////AP///////wAAAAAAAAAA///////////IAAAAAAAAAATI//////////8A////////AAAAAAAAAAD///////////9YAAAAAAAAADD8/////////wD///////8AAAAAAAAAAP///////////9wEAAAAAAAAAJD/////////AP///////wAAAAAAAAAA/////////////3AAAAAAAAAADOT///////8A////////AAAAAAAAAAD/////////////7BAAAAAAAAAAUP///////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'L' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////8AAAAAAAAAAP////////////////////////////8A/////////////wAAAAAAAAAA/////////////////////////////wD/////////////AAAAAAAAAAD/////////////////////////////AP////////////8AAAAAAAAAAP////////////////////////////8A/////////////wAAAAAAAAAA/////////////////////////////wD/////////////AAAAAAAAAAD/////////////////////////////AP////////////8AAAAAAAAAAP////////////////////////////8A/////////////wAAAAAAAAAA/////////////////////////////wD/////////////AAAAAAAAAAD/////////////////////////////AP////////////8AAAAAAAAAAP////////////////////////////8A/////////////wAAAAAAAAAA/////////////////////////////wD/////////////AAAAAAAAAAD/////////////////////////////AP////////////8AAAAAAAAAAP////////////////////////////8A/////////////wAAAAAAAAAA/////////////////////////////wD/////////////AAAAAAAAAAD/////////////////////////////AP////////////8AAAAAAAAAAP////////////////////////////8A/////////////wAAAAAAAAAA/////////////////////////////wD/////////////AAAAAAAAAAD/////////////////////////////AP////////////8AAAAAAAAAAP////////////////////////////8A/////////////wAAAAAAAAAA/////////////////////////////wD/////////////AAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A/////////////wAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD/////////////AAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A/////////////wAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD/////////////AAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'M' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A//////8AAAAAAAAAAAAAAHz//////3wAAAAAAAAAAAAAAP///////wD//////wAAAAAAAAAAAAAATP//////UAAAAAAAAAAAAAAA////////AP//////AAAAAAAAAAAAAAAc//////8cAAAAAAAAAAAAAAD///////8A//////8AAAAAAAAAAAAAAADw////8AAAAAAAAAAAAAAAAP///////wD//////wAAAAAAAAAAAAAAALz////AAAAAAAAAAAAAAAAA////////AP//////AAAAAAAAAAAAAAAAkP///5AAAAAAAAAAAAAAAAD///////8A//////8AAAAAAAAAAAAAAABc////ZAAAAAAAAAAAAAAAAP///////wD//////wAAAAAAAAAoAAAAADD///8wAAAAACQAAAAAAAAA////////AP//////AAAAAAAAAFwAAAAABPz//AgAAAAAXAAAAAAAAAD///////8A//////8AAAAAAAAAkAAAAAAA0P/UAAAAAACQAAAAAAAAAP///////wD//////wAAAAAAAADMAAAAAACg/6gAAAAAAMQAAAAAAAAA////////AP//////AAAAAAAAAPgEAAAAAHD/dAAAAAAE+AAAAAAAAAD///////8A//////8AAAAAAAAA/zQAAAAAQP9IAAAAADD/AAAAAAAAAP///////wD//////wAAAAAAAAD/bAAAAAAQ/xQAAAAAaP8AAAAAAAAA////////AP//////AAAAAAAAAP+gAAAAAADQAAAAAACc/wAAAAAAAAD///////8A//////8AAAAAAAAA/9QAAAAAAGgAAAAAAND/AAAAAAAAAP///////wD//////wAAAAAAAAD//wwAAAAAFAAAAAAM/P8AAAAAAAAA////////AP//////AAAAAAAAAP//RAAAAAAAAAAAADz//wAAAAAAAAD///////8A//////8AAAAAAAAA//94AAAAAAAAAAAAcP//AAAAAAAAAP///////wD//////wAAAAAAAAD//7AAAAAAAAAAAACo//8AAAAAAAAA////////AP//////AAAAAAAAAP//5AAAAAAAAAAAANz//wAAAAAAAAD///////8A//////8AAAAAAAAA////HAAAAAAAAAAQ////AAAAAAAAAP///////wD//////wAAAAAAAAD///9QAAAAAAAAAEz///8AAAAAAAAA////////AP//////AAAAAAAAAP///4gAAAAAAAAAfP///wAAAAAAAAD///////8A//////8AAAAAAAAA////vAAAAAAAAACw////AAAAAAAAAP///////wD//////wAAAAAAAAD////wAAAAAAAAAOz///8AAAAAAAAA////////AP//////AAAAAAAAAP////8sAAAAAAAc/////wAAAAAAAAD///////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'N' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////AAAAAAAAALD/////////////AAAAAAAAAP//////////AP////////8AAAAAAAAAFOj///////////8AAAAAAAAA//////////8A/////////wAAAAAAAAAASP///////////wAAAAAAAAD//////////wD/////////AAAAAAAAAAAAkP//////////AAAAAAAAAP//////////AP////////8AAAAAAAAAAAAI1P////////8AAAAAAAAA//////////8A/////////wAAAAAAAAAAAAAw+P///////wAAAAAAAAD//////////wD/////////AAAAAAAAAAAAAABw////////AAAAAAAAAP//////////AP////////8AAAAAAAAAAAAAAAC8//////8AAAAAAAAA//////////8A/////////wAAAAAAAAAAAAAAABzs/////wAAAAAAAAD//////////wD/////////AAAAAAAAAAAAAAAAAFD/////AAAAAAAAAP//////////AP////////8AAAAAAAAAAAAAAAAAAJz///8AAAAAAAAA//////////8A/////////wAAAAAAAAAUAAAAAAAADNz//wAAAAAAAAD//////////wD/////////AAAAAAAAALQAAAAAAAAANPz/AAAAAAAAAP//////////AP////////8AAAAAAAAA/2wAAAAAAAAAfP8AAAAAAAAA//////////8A/////////wAAAAAAAAD/+CwAAAAAAAAExAAAAAAAAAD//////////wD/////////AAAAAAAAAP//0AQAAAAAAAAgAAAAAAAAAP//////////AP////////8AAAAAAAAA////jAAAAAAAAAAAAAAAAAAA//////////8A/////////wAAAAAAAAD/////RAAAAAAAAAAAAAAAAAD//////////wD/////////AAAAAAAAAP/////kFAAAAAAAAAAAAAAAAP//////////AP////////8AAAAAAAAA//////+sAAAAAAAAAAAAAAAA//////////8A/////////wAAAAAAAAD///////9kAAAAAAAAAAAAAAD//////////wD/////////AAAAAAAAAP////////QkAAAAAAAAAAAAAP//////////AP////////8AAAAAAAAA/////////8wEAAAAAAAAAAAA//////////8A/////////wAAAAAAAAD//////////4QAAAAAAAAAAAD//////////wD/////////AAAAAAAAAP///////////DwAAAAAAAAAAP//////////AP////////8AAAAAAAAA////////////4BAAAAAAAAAA//////////8A/////////wAAAAAAAAD/////////////qAAAAAAAAAD//////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'O' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A///////////////////0qGw4HAAAABw4aKT0/////////////////wD////////////////wcAwAAAAAAAAAAAAAAAho6P//////////////AP//////////////uBQAAAAAAAAAAAAAAAAAAAAMoP////////////8A/////////////6AEAAAAAAAAAAAAAAAAAAAAAAAAkP///////////wD///////////+4BAAAAAAAAAAAAAAAAAAAAAAAAAAAoP//////////AP//////////8BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAM5P////////8A//////////9wAAAAAAAAAAAsrPD/7KQsAAAAAAAAAABg/////////wD/////////+BAAAAAAAAAAUPj///////hQAAAAAAAAAAjs////////AP////////+sAAAAAAAAABDw//////////AYAAAAAAAAAKD///////8A/////////2wAAAAAAAAAdP///////////3wAAAAAAAAAYP///////wD/////////OAAAAAAAAAC4////////////xAAAAAAAAAAw////////AP////////8cAAAAAAAAAOD////////////oAAAAAAAAABT///////8A/////////wAAAAAAAAAA//////////////8AAAAAAAAAAP///////wD/////////AAAAAAAAAAD//////////////wAAAAAAAAAA////////AP////////8AAAAAAAAAAP/////////////8AAAAAAAAAAD///////8A/////////xwAAAAAAAAA5P///////////+AAAAAAAAAAHP///////wD/////////NAAAAAAAAAC8////////////uAAAAAAAAAA4////////AP////////9oAAAAAAAAAHj///////////98AAAAAAAAAGT///////8A/////////6gAAAAAAAAAGPD/////////+BgAAAAAAAAApP///////wD/////////9AwAAAAAAAAAUPz///////xcAAAAAAAAAAjs////////AP//////////cAAAAAAAAAAALKjs//CwOAAAAAAAAAAAYP////////8A///////////wFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzk/////////wD///////////+4BAAAAAAAAAAAAAAAAAAAAAAAAAAAoP//////////AP////////////+QAAAAAAAAAAAAAAAAAAAAAAAAAJD///////////8A//////////////+sEAAAAAAAAAAAAAAAAAAAAAyg/////////////wD////////////////oZAgAAAAAAAAAAAAAAARg4P//////////////AP//////////////////9KhsOCAAAAAUMFyc7P////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'P' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP///////////wAAAAAAAAAAAAAAAAAACCxguP////////////////8A////////////AAAAAAAAAAAAAAAAAAAAAAAAOOD//////////////wD///////////8AAAAAAAAAAAAAAAAAAAAAAAAAGOD/////////////AP///////////wAAAAAAAAAAAAAAAAAAAAAAAAAARP////////////8A////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAxP///////////wD///////////8AAAAAAAAAAAAAAAAAAAAAAAAAAABo////////////AP///////////wAAAAAAAAAA////6JwMAAAAAAAAADD///////////8A////////////AAAAAAAAAAD//////6AAAAAAAAAADP///////////wD///////////8AAAAAAAAAAP//////9AAAAAAAAAAA////////////AP///////////wAAAAAAAAAA///////0AAAAAAAAAAD///////////8A////////////AAAAAAAAAAD//////5gAAAAAAAAAHP///////////wD///////////8AAAAAAAAAAP///9iICAAAAAAAAABI////////////AP///////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAJD///////////8A////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAI6P///////////wD///////////8AAAAAAAAAAAAAAAAAAAAAAAAAAIT/////////////AP///////////wAAAAAAAAAAAAAAAAAAAAAAAABU/P////////////8A////////////AAAAAAAAAAAAAAAAAAAAAAAIhPz//////////////wD///////////8AAAAAAAAAAAAAAAAABCRMkOz/////////////////AP///////////wAAAAAAAAAA//////////////////////////////8A////////////AAAAAAAAAAD//////////////////////////////wD///////////8AAAAAAAAAAP//////////////////////////////AP///////////wAAAAAAAAAA//////////////////////////////8A////////////AAAAAAAAAAD//////////////////////////////wD///////////8AAAAAAAAAAP//////////////////////////////AP///////////wAAAAAAAAAA//////////////////////////////8A////////////AAAAAAAAAAD//////////////////////////////wD///////////8AAAAAAAAAAP//////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'Q' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////SoaDQcAAAAHDhoqPT///////////////////8A//////////////BwDAAAAAAAAAAAAAAACHDo/////////////////wD///////////+4FAAAAAAAAAAAAAAAAAAAABCo////////////////AP//////////nAQAAAAAAAAAAAAAAAAAAAAAAACQ//////////////8A/////////7gEAAAAAAAAAAAAAAAAAAAAAAAAAACg/////////////wD////////wFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzo////////////AP///////3AAAAAAAAAAACyo8P/sqCwAAAAAAAAAAGT///////////8A///////4EAAAAAAAAABM+P///////FQAAAAAAAAACPT//////////wD//////7AAAAAAAAAAFPD/////////9BgAAAAAAAAApP//////////AP//////bAAAAAAAAAB4////////////fAAAAAAAAABk//////////8A//////84AAAAAAAAALz///////////+8AAAAAAAAADT//////////wD//////xwAAAAAAAAA6P///////////+QAAAAAAAAAHP//////////AP//////AAAAAAAAAAD//////////////wAAAAAAAAAA//////////8A//////8AAAAAAAAAAP//////////////AAAAAAAAAAD//////////wD//////wAAAAAAAAAA/P////////////8AAAAAAAAAAP//////////AP//////GAAAAAAAAADg////////////4AAAAAAAAAAc//////////8A//////84AAAAAAAAALT////MJHTo//+8AAAAAAAAADT//////////wD//////2wAAAAAAAAAdP///2AAABCg/3wAAAAAAAAAZP//////////AP//////rAAAAAAAAAAY9P/sCAAAAABMGAAAAAAAAACk//////////8A///////4EAAAAAAAAABU/P+0OAAAAAAAAAAAAAAACPT//////////wD///////94AAAAAAAAAAA4sPD/gAAAAAAAAAAAAABk////////////AP////////AcAAAAAAAAAAAAAAAAAAAAAAAAAAAADOT///////////8A/////////7wEAAAAAAAAAAAAAAAAAAAAAAAAAACQ/////////////wD//////////6wEAAAAAAAAAAAAAAAAAAAAAAAAABSs////////////AP///////////7gUAAAAAAAAAAAAAAAAAAAAAAAAAABAwP////////8A//////////////BwDAAAAAAAAAAAAAAABAgAAAAAAAA8/////////wD////////////////0qGg0GAAAABgwXJjkxBgAAAAAALD/////////AP//////////////////////////////////5DQAAAAk/P////////8A////////////////////////////////////+GwAAJD//////////wD//////////////////////////////////////8A49P//////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'R' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////wAAAAAAAAAAAAAAAAAAAAQgOGSk+P///////////////wD/////////AAAAAAAAAAAAAAAAAAAAAAAAAAAcuP//////////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAEsP////////////8A/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ6P///////////wD/////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8////////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADD///////////8A/////////wAAAAAAAAAA///////svDgAAAAAAAAACP///////////wD/////////AAAAAAAAAAD/////////7AAAAAAAAAAA////////////AP////////8AAAAAAAAAAP/////////cAAAAAAAAABD///////////8A/////////wAAAAAAAAAA//////DQoCQAAAAAAAAAQP///////////wD/////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU////////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIPj///////////8A/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAzU/////////////wD/////////AAAAAAAAAAAAAAAAAAAAAAAAAAA02P//////////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAxctPz///////////////8A/////////wAAAAAAAAAAAAAAAAAAAAAAAEDY/////////////////wD/////////AAAAAAAAAAD/9LAsAAAAAAAAAAzc////////////////AP////////8AAAAAAAAAAP///+wkAAAAAAAAADD8//////////////8A/////////wAAAAAAAAAA/////8QAAAAAAAAAAJD//////////////wD/////////AAAAAAAAAAD//////1QAAAAAAAAAFPD/////////////AP////////8AAAAAAAAAAP//////3AQAAAAAAAAAgP////////////8A/////////wAAAAAAAAAA////////aAAAAAAAAAAM6P///////////wD/////////AAAAAAAAAAD////////oCAAAAAAAAABs////////////AP////////8AAAAAAAAAAP////////+AAAAAAAAAAATc//////////8A/////////wAAAAAAAAAA//////////AUAAAAAAAAAFj//////////wD/////////AAAAAAAAAAD//////////5AAAAAAAAAAAND/////////AP////////8AAAAAAAAAAP//////////+CQAAAAAAAAAQP////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'S' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP/////////////////8vHBEIAgAAAQgQHC8/P////////////////8A////////////////pCQAAAAAAAAAAAAAAAAcoP///////////////wD//////////////FwAAAAAAAAAAAAAAAAAAAAAXP//////////////AP////////////9oAAAAAAAAAAAAAAAAAAAAAAAAhP////////////8A////////////zAAAAAAAAAAAAAAAAAAAAAAAAAAI6P///////////wD///////////9cAAAAAAAAAAAAAAAAAAAAAAAAAACA////////////AP///////////xgAAAAAAAAAUOD/8KwkAAAAAAAAADj///////////8A////////////AAAAAAAAAAD0/////8wABCAgICxASP///////////wD///////////8MAAAAAAAAAMz/////////////////////////////AP///////////0AAAAAAAAAACFiQxPT///////////////////////8A////////////oAAAAAAAAAAAAAAAADBwtPT//////////////////wD////////////8QAAAAAAAAAAAAAAAAAAACFTA////////////////AP/////////////oOAAAAAAAAAAAAAAAAAAAAABM6P////////////8A///////////////4fAgAAAAAAAAAAAAAAAAAAAAY2P///////////wD/////////////////7IwwAAAAAAAAAAAAAAAAAAAo+P//////////AP/////////////////////koGw0BAAAAAAAAAAAAACU//////////8A///////////////////////////4uFgAAAAAAAAAADz//////////wD//////////2BgSEA0IBwA6P///////5QAAAAAAAAADP//////////AP//////////JAAAAAAAAACc/////////AAAAAAAAAAA//////////8A//////////9YAAAAAAAAACDo///////AAAAAAAAAABT//////////wD//////////6QAAAAAAAAAACCk7P/snBQAAAAAAAAAUP//////////AP//////////+BAAAAAAAAAAAAAAAAAAAAAAAAAAAACs//////////8A////////////kAAAAAAAAAAAAAAAAAAAAAAAAAAAOP///////////wD////////////8RAAAAAAAAAAAAAAAAAAAAAAAABjc////////////AP/////////////0PAAAAAAAAAAAAAAAAAAAAAAg2P////////////8A///////////////8hBQAAAAAAAAAAAAAAAAMdPT//////////////wD/////////////////+LRwSCAMAAAAHDhoqPT/////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'T' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////8A/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////wD/////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////8A/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////wD///////////////////8AAAAAAAAAAP//////////////////////AP///////////////////wAAAAAAAAAA//////////////////////8A////////////////////AAAAAAAAAAD//////////////////////wD///////////////////8AAAAAAAAAAP//////////////////////AP///////////////////wAAAAAAAAAA//////////////////////8A////////////////////AAAAAAAAAAD//////////////////////wD///////////////////8AAAAAAAAAAP//////////////////////AP///////////////////wAAAAAAAAAA//////////////////////8A////////////////////AAAAAAAAAAD//////////////////////wD///////////////////8AAAAAAAAAAP//////////////////////AP///////////////////wAAAAAAAAAA//////////////////////8A////////////////////AAAAAAAAAAD//////////////////////wD///////////////////8AAAAAAAAAAP//////////////////////AP///////////////////wAAAAAAAAAA//////////////////////8A////////////////////AAAAAAAAAAD//////////////////////wD///////////////////8AAAAAAAAAAP//////////////////////AP///////////////////wAAAAAAAAAA//////////////////////8A////////////////////AAAAAAAAAAD//////////////////////wD///////////////////8AAAAAAAAAAP//////////////////////AP///////////////////wAAAAAAAAAA//////////////////////8A////////////////////AAAAAAAAAAD//////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'U' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////8AAAAAAAAAAP///////////wAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////AAAAAAAAAAD///////////8AAAAAAAAAAP//////////AP////////8AAAAAAAAAAP///////////wAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////AAAAAAAAAAD///////////8AAAAAAAAAAP//////////AP////////8AAAAAAAAAAP///////////wAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////AAAAAAAAAAD///////////8AAAAAAAAAAP//////////AP////////8AAAAAAAAAAP///////////wAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////AAAAAAAAAAD///////////8AAAAAAAAAAP//////////AP////////8AAAAAAAAAAP///////////wAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////AAAAAAAAAAD///////////8AAAAAAAAAAP//////////AP////////8AAAAAAAAAAP///////////wAAAAAAAAAA//////////8A/////////wAAAAAAAAAA////////////AAAAAAAAAAD//////////wD/////////JAAAAAAAAADk/////////+gAAAAAAAAAHP//////////AP////////9MAAAAAAAAAJz/////////nAAAAAAAAABE//////////8A/////////4gAAAAAAAAAHOj//////+ggAAAAAAAAAHz//////////wD/////////0AAAAAAAAAAAIJzs/+ykIAAAAAAAAAAA0P//////////AP//////////QAAAAAAAAAAAAAAAAAAAAAAAAAAAAED///////////8A///////////IBAAAAAAAAAAAAAAAAAAAAAAAAAAE0P///////////wD///////////+YAAAAAAAAAAAAAAAAAAAAAAAAAJj/////////////AP////////////+UBAAAAAAAAAAAAAAAAAAAAASU//////////////8A///////////////IPAAAAAAAAAAAAAAAAAAwyP///////////////wD/////////////////0IxYOCAIAAAEIEiAyP//////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'V' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD//////zAAAAAAAAAAYP//////////////ZAAAAAAAAAAw////////AP//////kAAAAAAAAAAU/P////////////8UAAAAAAAAAJD///////8A///////oBAAAAAAAAADE////////////xAAAAAAAAAAE7P///////wD///////9MAAAAAAAAAHD///////////94AAAAAAAAAEz/////////AP///////6gAAAAAAAAAJP///////////yQAAAAAAAAArP////////8A////////+BAAAAAAAAAA1P/////////YAAAAAAAAABT4/////////wD/////////aAAAAAAAAACE/////////4QAAAAAAAAAbP//////////AP/////////EAAAAAAAAADT/////////OAAAAAAAAADM//////////8A//////////8kAAAAAAAAAOT//////+QAAAAAAAAAKP///////////wD//////////4QAAAAAAAAAmP//////nAAAAAAAAACI////////////AP//////////5AAAAAAAAABE//////9EAAAAAAAABOT///////////8A////////////QAAAAAAAAAT0////9AgAAAAAAABI/////////////wD///////////+gAAAAAAAAAKT///+kAAAAAAAAAKj/////////////AP////////////QIAAAAAAAAXP///1wAAAAAAAAM+P////////////8A/////////////1wAAAAAAAAM+P/8DAAAAAAAAGT//////////////wD/////////////vAAAAAAAAAC8/7wAAAAAAAAAxP//////////////AP//////////////HAAAAAAAAGj/aAAAAAAAACT///////////////8A//////////////94AAAAAAAAHP8cAAAAAAAAhP///////////////wD//////////////9gAAAAAAAAAkAAAAAAAAADk////////////////AP///////////////zgAAAAAAAAQAAAAAAAAQP////////////////8A////////////////lAAAAAAAAAAAAAAAAACg/////////////////wD////////////////sCAAAAAAAAAAAAAAADPT/////////////////AP////////////////9QAAAAAAAAAAAAAABg//////////////////8A/////////////////7AAAAAAAAAAAAAAAMD//////////////////wD//////////////////BQAAAAAAAAAAAAc////////////////////AP//////////////////cAAAAAAAAAAAAHz///////////////////8A///////////////////MAAAAAAAAAAAA3P///////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'W' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A//8cAAAAAAAAALz/////4AAAAAAAAAAA6P////+8AAAAAAAAABz//wD//1QAAAAAAAAAjP////+gAAAAAAAAAACo/////4wAAAAAAAAAUP//AP//jAAAAAAAAABU/////2AAAAAAAAAAAGj/////VAAAAAAAAACM//8A///EAAAAAAAAACT/////IAAAAAAAAAAAKP////8kAAAAAAAAAMT//wD///gEAAAAAAAAAPD//+AAAAAAAAAAAAAA6P//8AAAAAAAAAAE9P//AP///zAAAAAAAAAAvP//oAAAAAAAAAAAAACo//+8AAAAAAAAADD///8A////bAAAAAAAAACM//9gAAAAAAAAAAAAAGT//4wAAAAAAAAAaP///wD///+kAAAAAAAAAFT//yAAAAAAAAAAAAAAIP//VAAAAAAAAACc////AP///9gAAAAAAAAAJP/gAAAAAAAAAAAAAAAA4P8kAAAAAAAAANT///8A/////xAAAAAAAAAA8KAAAAAAAAAAAAAAAACg8AAAAAAAAAAQ/////wD/////TAAAAAAAAAC8YAAAAAAAAAAAAAAAAGC8AAAAAAAAAET/////AP////+AAAAAAAAAAIwgAAAAAAAAAAAAAAAAIIwAAAAAAAAAfP////8A/////7gAAAAAAAAANAAAAAAAACwwAAAAAAAANAAAAAAAAACw/////wD/////8AAAAAAAAAAAAAAAAAAAdHgAAAAAAAAAAAAAAAAAAOz/////AP//////KAAAAAAAAAAAAAAAAAC4vAAAAAAAAAAAAAAAAAAg//////8A//////9gAAAAAAAAAAAAAAAACPj4CAAAAAAAAAAAAAAAAFj//////wD//////5QAAAAAAAAAAAAAAABE//9IAAAAAAAAAAAAAAAAkP//////AP//////0AAAAAAAAAAAAAAAAIj//4wAAAAAAAAAAAAAAADI//////8A///////8DAAAAAAAAAAAAAAAzP//1AAAAAAAAAAAAAAABPj//////wD///////88AAAAAAAAAAAAABT/////GAAAAAAAAAAAAAA0////////AP///////3QAAAAAAAAAAAAAWP////9gAAAAAAAAAAAAAHD///////8A////////sAAAAAAAAAAAAACg/////6QAAAAAAAAAAAAApP///////wD////////kAAAAAAAAAAAAAOT/////6AAAAAAAAAAAAADc////////AP////////8cAAAAAAAAAAAo////////MAAAAAAAAAAAEP////////8A/////////1QAAAAAAAAAAHD///////94AAAAAAAAAABM/////////wD/////////jAAAAAAAAAAAtP///////7wAAAAAAAAAAID/////////AP/////////EAAAAAAAAAAT0////////+AgAAAAAAAAAuP////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'X' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD///////9UAAAAAAAAAKz///////////+sAAAAAAAAAFD/////////AP///////+QQAAAAAAAAFOT/////////8BwAAAAAAAAM5P////////8A/////////5gAAAAAAAAATP////////9kAAAAAAAAAJD//////////wD//////////0AAAAAAAAAAoP//////wAAAAAAAAAA0/P//////////AP//////////2AgAAAAAAAAQ4P////gkAAAAAAAABMz///////////8A////////////iAAAAAAAAABA////dAAAAAAAAABw/////////////wD////////////8MAAAAAAAAACU/9AEAAAAAAAAHPD/////////////AP/////////////IBAAAAAAAAAzYMAAAAAAAAACs//////////////8A//////////////90AAAAAAAAABAAAAAAAAAATP///////////////wD///////////////QgAAAAAAAAAAAAAAAAAAzg////////////////AP///////////////7wAAAAAAAAAAAAAAAAAjP////////////////8A/////////////////2AAAAAAAAAAAAAAADD8/////////////////wD/////////////////7BQAAAAAAAAAAAAEyP//////////////////AP/////////////////gDAAAAAAAAAAAAAjY//////////////////8A/////////////////0AAAAAAAAAAAAAAADj8/////////////////wD///////////////+UAAAAAAAAAAAAAAAAAJD/////////////////AP//////////////4AwAAAAAAAAAAAAAAAAADOD///////////////8A//////////////9AAAAAAAAAAAAAAAAAAAAAQP///////////////wD/////////////nAAAAAAAAAAAWAAAAAAAAAAAlP//////////////AP///////////+QQAAAAAAAAAGD/YAAAAAAAAAAM4P////////////8A////////////TAAAAAAAAAAs9P/0LAAAAAAAAABM/////////////wD//////////6AAAAAAAAAADNT////UDAAAAAAAAACg////////////AP/////////kEAAAAAAAAACg//////+gAAAAAAAAABDk//////////8A/////////0wAAAAAAAAAYP////////9gAAAAAAAAAEz//////////wD///////+oAAAAAAAAACz0//////////QsAAAAAAAAAKT/////////AP//////7BQAAAAAAAAM1P///////////9QMAAAAAAAAFOz///////8A//////9UAAAAAAAAAKD//////////////6AAAAAAAAAAVP///////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'Y' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP///////1QAAAAAAAAAAGj//////////2gAAAAAAAAAAFT///////8A////////5BAAAAAAAAAAAMT////////EAAAAAAAAAAAQ5P///////wD/////////mAAAAAAAAAAAKPj/////+CgAAAAAAAAAAJj/////////AP//////////PAAAAAAAAAAAgP////+AAAAAAAAAAAA8//////////8A///////////YCAAAAAAAAAAE2P//2AQAAAAAAAAACNj//////////wD///////////+AAAAAAAAAAAA4//84AAAAAAAAAACA////////////AP////////////woAAAAAAAAAACUlAAAAAAAAAAAKPz///////////8A/////////////8gAAAAAAAAAABAQAAAAAAAAAADI/////////////wD//////////////2wAAAAAAAAAAAAAAAAAAAAAbP//////////////AP//////////////8BwAAAAAAAAAAAAAAAAAABzw//////////////8A////////////////tAAAAAAAAAAAAAAAAAAAtP///////////////wD/////////////////VAAAAAAAAAAAAAAAAFT/////////////////AP/////////////////oEAAAAAAAAAAAAAAQ6P////////////////8A//////////////////+cAAAAAAAAAAAAAJz//////////////////wD///////////////////9AAAAAAAAAAABA////////////////////AP///////////////////9gAAAAAAAAAANj///////////////////8A/////////////////////wAAAAAAAAAA/////////////////////wD/////////////////////AAAAAAAAAAD/////////////////////AP////////////////////8AAAAAAAAAAP////////////////////8A/////////////////////wAAAAAAAAAA/////////////////////wD/////////////////////AAAAAAAAAAD/////////////////////AP////////////////////8AAAAAAAAAAP////////////////////8A/////////////////////wAAAAAAAAAA/////////////////////wD/////////////////////AAAAAAAAAAD/////////////////////AP////////////////////8AAAAAAAAAAP////////////////////8A/////////////////////wAAAAAAAAAA/////////////////////wD/////////////////////AAAAAAAAAAD/////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
'Z' => array( |
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAQ//////////////8A/////////////////////////1AAAAAAAAAABLz//////////////wD///////////////////////98AAAAAAAAAACY////////////////AP//////////////////////pAAAAAAAAAAAaP////////////////8A/////////////////////8QIAAAAAAAAAET8/////////////////wD////////////////////gGAAAAAAAAAAo9P//////////////////AP//////////////////9CwAAAAAAAAAFNz///////////////////8A//////////////////xMAAAAAAAAAATA/////////////////////wD/////////////////eAAAAAAAAAAAnP//////////////////////AP///////////////5wAAAAAAAAAAHT///////////////////////8A///////////////ABAAAAAAAAABM/P///////////////////////wD/////////////3BQAAAAAAAAALPT/////////////////////////AP////////////QoAAAAAAAAABjg//////////////////////////8A///////////8SAAAAAAAAAAExP///////////////////////////wD//////////2wAAAAAAAAAAKD/////////////////////////////AP////////+YAAAAAAAAAAB8//////////////////////////////8A/////////wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD/////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD/////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=', |
'width' => 40 |
), |
); |
return $_png; |
} |
// These define base64_encoded raw png image data used |
// when we cannot generate our own single png image |
function define_raw_pngs() |
{ |
$_png = array( |
'0' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QKCNGXKO6AAAAB3RJTUUH0wUOEDQ6EUG1VwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAXNJREFUeNpj/M9AHGAiUt2wVvhyaqAqKyOjpG3jQwaGv+e+IUn9RwJfSjjg4iwFP1aKJD6HyyErfGGAYrquIoP5E2wK/zigu0v5wH9sChdgeKDqP1aFGhBZmxv/z0Dd4IxV4RWIpMQHIPuJAITzAqEQETx7IFQIP5CQNoJwDmALxzMQCuyjg1chnBPYwtECwr8AZN41h0p6YHOjAkTuwf//77wYuCEcFWwKOWA2fM1iZuuHcASwKYQ55c9ENuasrxgRjKlwJS+D17v/hBUeUGYwv/sfn0IRiJQZJIbxuFEFagjvSlDUQNgK2GIGqpC1JRhIfoAqxBYz0DRhn8IMJO+giKEqhMaMJBeI3AHhIKdkRPqG8DlAifqFADyasKRHO6h1Z/6fMYEwTbCmx3cWGCl8CTaFwBhGz+M2/7EpXMvOnBmIok7jBVaFz/Mi3/1pQORrhpgPyOr+M8IL0j9/gKpeLjhy5QEwoDVsYuRR3cE4IktcAJNx8cJaZBeQAAAAAElFTkSuQmCC', |
'1' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QMi//xxVKAAAAB3RJTUUH0wUOEDYLcqnX7wAAAAlwSFlzAAALEgAACxIB0t1+/AAAAHpJREFUeNpj/M9AHGAiUh1WhR8FGUGAsMKaD9iM/I8BlmCVwVS4hoUohT8qcNiFyv2zQIWBCIV3amRwu54RKcDRAgQ1KigIcJYK7CqR3QsCFmf+Y8qgeQakbANMAz6FKjUXECbj8zWa76nm61GFw1UhI10KqVGFNFQIADdK9Zj7PsV9AAAAAElFTkSuQmCC', |
'2' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QMwPUBEjoAAAAB3RJTUUH0wUOEDUqFe2UcgAAAAlwSFlzAAALEgAACxIB0t1+/AAAAQxJREFUeNpj/M9AHGAiUt2owkGrkAWF93LFgStPfjCwyGiYRGijqfyPAH9aOJAkQl78RwbICkNQjdB4gUNhD7qzLLAr/CKA4YENSAoRvl7zAUJXvPmxhgfCXILVMxEQvg+IDVUhgtVqDYjkDhD7B2aQIMIx5cOTN29evLAAsaEKObBajQzmQOQMcIQjHLwQgSisIaDwBdS5LHfwK7yhAHVVyX+8CrdAA5HB5gdehQ3Yoxpd4ZcAmDqbD//xKISEIjhU//zHoxDmXQaeFRhOZ8CmzuDOf3wKf8DsDfnyH6/CHJi6P//xKjyDJethVehBpMI7DPgVwrPCCgb8AK5wDwGFcNMF8EkCASOx1QcAGUxu1untnFIAAAAASUVORK5CYII=', |
'3' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QMxBQugk2AAAAB3RJTUUH0wUOEDU3duv4qwAAAAlwSFlzAAALEgAACxIB0t1+/AAAATdJREFUeNpj/M9AHGAiUt0IVciCzPm7ZceZB28YGBQkLHwcmNFU/keANRJI4ioH/qMAJIUlaHatwaFwBrqrOO5gVfiCB8P9KVgVVkAtnPDh/wkLCFsGq0IFiGQLiH0D06P/GWHJ7O+NOzfuXLlzQRrEhgSawHscwYPurxAcwQMBf/4/aIAYyHIGr8IEeDhO+Y9XoQNUncwOVHGMRPEDSovc+IkzrpGDCQgUbuC1WgBhhsIHfAp3vPn/oIIFKfRxKQSDGohCA4IKX0DTD7YoRAWMUJ9iyQpbn4DBBWUQ5yFEDDnFw622gXAzwBxoYvfB5sYlUI0lD/4/gWWKJdgU/tHAcKjCD6y+PsGCpo4FJbaRgmcNqkqWCThTzxkTJHXo+Ro1HA9uOPHiATDlKJj4eKCVFIzDqWgGAK7GW/haPS+zAAAAAElFTkSuQmCC', |
'4' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QMyqWttCEAAAAB3RJTUUH0wUOEDUxn4hdngAAAAlwSFlzAAALEgAACxIB0t1+/AAAAKBJREFUeNpj/M9AHGAiUh2FCucyQgCK4H9McIAFixwWhQ8kGIhS+MWAgTiFIQzEKWxhIE7hFgbiFF7hASkQIajwjQpInuUAIYV/XMDyU/4TUlgAlk75T0jhArCszR9CCk+AY07mxX8CCp+AY47nzH8CCn+YgOWW/CekMAYsVfMfl0JGmCBq4kNEDp2zAn0UMmItABjRvDykPTO43DgyFQIANP6pTFLWAdoAAAAASUVORK5CYII=', |
'5' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QMzPy3XhEAAAAB3RJTUUH0wUOEDUk8lW5dQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAQpJREFUeNpj/M9AHGAiUt2oQuIVfmREBzgU3iHWxAfEKiTaRFpZnfAfAbAr/AsxUYagiVCbeQgqhPpFYmukLCOrZupRNJUIB02BCAjAZCK+/Ed2LoJZgm6bzRfsCgMw3JWAXaEBpg8uIGSRPPMBQmXc+P+iggXCnoOQZUQK1K8PgEAjGcQs7QGL6FzG5mtkcAUiyYIQYcRRUkDTLEIWR1b4ixamQMPhrKUP3rx48eDNFXmwdyFiOthixgXqaTAnBcKpwRaOS6A6Mx78fwBVx/IAm8I/KsTGzAkWNHUyb7Ar/L8GNSlK3MCRev7/v+CApC7kBUoUoAX4yQ0nHjwAWqpiE6GNFgNDoAwHAKC2Q2lMNcCmAAAAAElFTkSuQmCC', |
'6' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QNAObRd4vAAAAB3RJTUUH0wUOEDUc2lcB6wAAAAlwSFlzAAALEgAACxIB0t1+/AAAATtJREFUeNpj/M9AHGAiUh2Gwq2puryMjKKmmSfRVf5HBkcMEBI+L1CkUBROYUE2QuMFLoVr0CzzwKHwhQC6szZgV1gAtfHI/xs2mEYywsPxp8QHEMVxQ56B4aaJiIKIiIRCPDZf74DwI/5jB4hwPAChbAgG+BWoExlOxkoysuqW3sUV4BoQ/p0SqARLB44AF4HIByDMKMCuEIu7phCrUOADNl/DgMOJ/09SIMwPC7B5hgfC1/kB4kRAOC7YrFaByM0Ac85AOCLYrFaBhSMIQNPlG2wBDg3HP2CSGU/MuEAoiKVXUWxB9cwPiG8UwEGSg5FCMNOjwZ4/byqgpqwgMoWr/MGeZ1agqWPZgSNz/Z+AqnDCf1wK/29B8qbKDhQpRtTE8HfLjjMP3jDwKJh4hKCGJSPNC6lRhTRWCABWpdoxd/bZ4QAAAABJRU5ErkJggg==', |
'7' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QNA18/fMoAAAAB3RJTUUH0wUOEDUVo4u5TwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAM9JREFUeNpj/M9AHGAiUt2oQnorZIGzGLFJIyJ40HqGhUiFPFuQ/YUFPBGBmLcDSQybwj8OEDOW/CegsAeiruQ/AYV3OMDqTP4QUugCceCN/wQUQn1a8Z+Awj8qYHUiHwgpXAAxcMJ/Qgp1wOoEPhBSuANiYM5/QgpjIAovEFL4gweszgAz0NASxZ4vYMqHYDKDBiIWhWhWa0CS1x9CVn+8AaYsmAlZfQRC6RDMChADGTQIKjxDrMI7EEoBi0JGlMJe8AOY+sFOSCEeQHQBAABCZ7xyT9fJhwAAAABJRU5ErkJggg==', |
'8' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QNBeBnwpSAAAAB3RJTUUH0wUOEDUOKe5wowAAAAlwSFlzAAALEgAACxIB0t1+/AAAATVJREFUeNpj/M9AHGAiUt1AKmRB459cc+DBGwYWGQ2LEG1Umf/I4IELkozLA2QpFIUXJFDMEDiBQ+EHGTR3yHzArrAFwwct2BXqQGQ1zvw/owFh6mBXCDXmDJB5BsOrjEhxzfoHIgkiGCGB9xtrgEPtOwvEV6FWY4+ZAAgVc5LhZgKEGYI9wN+gBiPu4Pl/BFWlxA1cMfN/C0rUr8AVhX8K0KyuwaEwASNmarAqPACVTXnw/0oENBFewKYQGhYZYE4MVBM2hVAvQ1LhHQhHBVsUMjIgYhCdhy3PPASTd6GOxBYz0KhOQHajDjY3pkC1Rlz5fweqjqEAm8ILGK5gYLlDZICXYI+ZLzZo6gL+4EgUfyo4kJQJtCCpQ8kKQPB2zZ47L14AU5iMgUMAN7IM43AqHwdQIQAhMPz6Gz5V/wAAAABJRU5ErkJggg==', |
'9' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QNCQ+T2tEAAAAB3RJTUUH0wUOEDUHUDLIBwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAUZJREFUeNpj/M9AHGAiUh26wr9rE3V5GRlFTTM3/kVT+R8Z7FBBSKjsQJFCUTiFBcWMCbgUHmBBs20FdoV/VNDUMQi8wapwDVS65s2fPToQZgFWhRFIkm8kwGyeH9gUQm2+Aua0QDhb4LJI4XgHQmmDSRMIZw+emIEENAeEcwObQhEIdQHiABRbUGPGBSIQAWL/gHqbB5tnJkC1Fjz5f8IGwxwkhR8EsCQarFE4hViF/wsQCgKgHsSu8H8HLFkUQL2rgUPh/zslOiwMEjFH/kND2geXQvQgqMAWhSjgAIRygAswIuXCpXfevHjz4M0ZdQaGhxo/wAnyBTuWmPnvARGxuPH/iAa+9Ph/A7r9Ai+wK/zvg6ZwzX8cCl9oICtjmfIfl8L/bwIQ6gyO/Met8P//EwUmwHTJo5OyBU2CkdaF1KhCWisEAM/sJxmZkdWnAAAAAElFTkSuQmCC', |
'A' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QFwy1U7TfAAAAB3RJTUUH0wUOEC0ZKCZtPQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAO1JREFUeNrt1LERwiAUBuAHZ2GRwsIypQMwQEZwgBQpM4QDZBSLFI7gCA5gQWGRdA5gkTuMSh48eMTUnq96wH98B+QiDCwruTD3D76qF676ueAp0Y9lSBXeSkFWaLAje3T+kkzK4SgpBzZw8pqxJWcdOJuRsyGPbWDk0tS20zw9SXsobdfytJVXdzNsP61i6Zt3K7Ht0UeUgbPdjsrOXMd+2IS2C2qb271HVWi7YANcNXFQsUEVBTXwNdl46jYRxPl52dnwRUZbhkLSDmS8DnxFRWiULxg8UxvobefuRR8ZQYDKtffVVcQWv/RrfgJC4bd0upw4MQAAAABJRU5ErkJggg==', |
'B' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QGAusrz2zAAAAB3RJTUUH0wUOEC01Gv4B3gAAAAlwSFlzAAALEgAACxIB0t1+/AAAANJJREFUeNpj/M9AHGAiUh0tFTKiAUHL2rsoKv9DARZDWFr+IwA+hQwMFcQqZDhCrMIIYhWK4FYIYv8444PuV+wK//9/A+UJwBUSCHAL3OEIsdoFyttCpGdiiAtHjoY/RCnk6PlBbBRKrCE6CqcQq5DlDs5whIT3CgUI788EvOEIBCegXB2YPCNMBSNMISqf5TeUjysK90LpP/itfrFEAhZCMHkWdKMYUbk2MAah7BqD02pUYEFkgMu8IE6hD0IdpmegwSejoKLjoY7syaFU7A0HhQA2e4cJytImvAAAAABJRU5ErkJggg==', |
'C' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QGBbPqVFqAAAAB3RJTUUH0wUOEC4BEGemqAAAAAlwSFlzAAALEgAACxIB0t1+/AAAASlJREFUeNpj/M9AHGAiUt2owkGrkAWV+3TDgRtPPjBwyGiYBOijSv1HAlcCkGUcTiDLISvsQDOeZQp2hQWYDpuCTeEEbD44ganwDgc2vxpgKoyAyUWc+f9hjgCMtwFd4RuYRxog/ueBcl3QFc6BSmj8gfBrwE40yFmCrjABqrAH5mSZgJ4jX7AEjwlU4Zn/OAAsrp9AaRlccc0IzdeMsBilOPWQrBDmtpfEKnwBpZ8qZq58i6IS6vscKHcBcgQYlOz4gh6OK6AKfaB8G5hN6Aq/wBLPHjB3CczCFIzUA0u2PD0v/j9pgaf1ExgK3wgwYAEOWFL4GizqWC5gyzM1mArnEJkLZ2DPhf//n3BAVmeDkq8ZUZPL3TUn7gBLCgYFBYsAcxQZRmKrDwABNsv9SJSDwwAAAABJRU5ErkJggg==', |
'D' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QGC1+orhOAAAAB3RJTUUH0wUOEC4yr7fHvgAAAAlwSFlzAAALEgAACxIB0t1+/AAAAM9JREFUeNpj/M9AHGAiUt1AKmSBsxiRhXlkNBxCpFFU/ocBTDMyPvxHADwKGRgUbhCpkEHiCZEKGRyIVciwArdCIPPFGg8YzwSvQiBogXFvEFD43wDKnQDl44yZGCh9glAU2sCsJqRQBkq/gMUw3G2wuP6PnU/H9PgRSgsQUvgESosQUngFSqsQUrgCSsNiCFcU7oBx9+CL6w8XamB5SeUPkelxAZEJ1+YPcQolXhCXFTTuEJULOUq+IOVrFgasQELBxMaHG1mEcTiVjwOoEADAIkCnGpmJKgAAAABJRU5ErkJggg==', |
'E' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QGDeDwEE0AAAAB3RJTUUH0wUOEC8CkHXGUwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAD5JREFUeNpj/M9AHGAiUt2owkGrkAXGYMQqjUgJQ8EzpPsa05+D140oMYTk4KEQ4MMqZqgUhcM1czESW30AABfqB1XDnLzcAAAAAElFTkSuQmCC', |
'F' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QGQe8AkDZAAAAB3RJTUUH0wUOEC8JB6cf2wAAAAlwSFlzAAALEgAACxIB0t1+/AAAADlJREFUeNpj/M9AHGAiUt3wUsiCYDJikUYE3lDwDDm+xvTp4HUjIoaQXTsUAnxYxcyoQryAcUSWuAAW/gZTg/yEMAAAAABJRU5ErkJggg==', |
'G' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QGRFI1vWIAAAAB3RJTUUH0wUOEC8QY8y3GwAAAAlwSFlzAAALEgAACxIB0t1+/AAAASZJREFUeNpj/M9AHGAiUt0IVciCwvt7ZM+FOy8+MDBwSEho2AQII8v9R4A/U2RQtHEUfEBIIim8YYBhn8oNLAqP8GBxmcwbDIU3sKljYIhAV/jHgAE7uICmcAJMQqDmwp//D2YowPgxqAr/wPyr8QAi8EEHwleIQFW4BxYicG+eEHEomHECET5QhRVQhQn/cQFoFJ6AKgwgFNcPoFwdnAoZIXmGERahKDwkIdqlR1j4PiRW4RVCCmExvQenQrSYEXiDiAoUBfC4loAK23yBSnzArhCRehRmAJPFnRUxHDgU/lDA7zZECj/Cgl2dAkaeWYNVZcoHDIX/94hgKLM4gS27/v9QIICizGMDkiQjSon7c8eBCw+e/GFgkZEwsHCRRpZiHE5FMwCa2YE+WcAOUwAAAABJRU5ErkJggg==', |
'H' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QGRw2Z4k1AAAAB3RJTUUH0wUOEC8agxleBQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAD1JREFUeNpj/M9AHGAiUt2oQvyABUozQml4+KMLDAXPDAWFLGh8RlwKh4JnaB88GOlxELhxVCFewDgEynAAN2sFVHAvevkAAAAASUVORK5CYII=', |
'I' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QGSlg1E0WAAAAB3RJTUUH0wUOEC86uHd+zQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAD5JREFUeNpj/M9AHGAiUt1AKmRBMBkxJJE9OhQ8Q32FjGhxDQsjjCQwFDwzqnCwKkRKZqO5EBMwDqcSl2iFAMMeB0s/kLo2AAAAAElFTkSuQmCC', |
'J' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QGywiiNsbAAAAB3RJTUUH0wUOEDAFw0tdbgAAAAlwSFlzAAALEgAACxIB0t1+/AAAAKdJREFUeNpj/M9AHGAiUh3xClmwijJCaSR3Ud/qUYWjCklTyIHEhifctw8ePHgCxO+B7L9QMQlsChW+QOiX4gwMd6BiItisVoHSB6AYWQwM/kNBBszkC/9PwKyc8B8B4Ar3YPHMHWwK/xtgqAv4j1XhEfScK/EEu8L/a1BVStz4j0Ph/yPItoe8QFH3nxGlkNq75cKDB0DDVBwitNEcwjhwpdmoQrwAAN6ioiFapgUdAAAAAElFTkSuQmCC', |
'K' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHAEoFhGpAAAAB3RJTUUH0wUOEDANzZDVXAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAPZJREFUeNpj/M9AHGAiUt2owgFSyAgFMOGDrDARxkKo0H8wYEDh/b/AAzepACqEVeEdCQx1WBW+0ICry/mPR+EXE7i6kD94FP5xwaYOi8IIrOowFRbA1Xkgq8NQ2ANXZ/PlPx6FS3CpQ1fIAmOIoKn7jxbXf2CMNxvQIxvVRAQQ+YDXaiSQQqxChiOEFGoIQGidP/gVStxogLI68CqUuPH/BzSVcTzAoxCo7v//ObBIxK0QrO7/H1iCXIFT4QkIFxbaMh9wKYQJO0D5OYQUnoDF/QkCCuHJ1+APAYV3YOloAgGF8JTO84SAwjfQiGQIgPAZqV4rAACnKSarzdlc4gAAAABJRU5ErkJggg==', |
'L' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHA64qQw4AAAAB3RJTUUH0wUOEDAXMPIsJgAAAAlwSFlzAAALEgAACxIB0t1+/AAAADlJREFUeNpj/M9AHGAiUt2QUMiCYDJCaezhMBQ8M6pwVCEdFLJgCjEisRH5Zyh4hvoKGUdkQUq0QgARaARRV9jUFQAAAABJRU5ErkJggg==', |
'M' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHBhMfblpAAAAB3RJTUUH0wUOEDAqaJpgNwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAPNJREFUeNrdlK0OgzAUhS8bCQYxMYmcmEAgEAgejQfZQyG2pAIxOYlATkAu691o2tvSYia2iv7lyzn3NG0jhG1tt5H7Aggom7ZuaKPhBFqKV+pFWDGjjcxStEAYXuvBkrKtoVX+gdRiK9i6sxjgeVGUMJzWwZLACaZOTqoAOAronmrlBuvPkQsIgHn8BqnE2AMmhaaYJ57jqTRFMwsDyW249XaJLhAujizm7UFM5XCUXTqiTvBLQYWRc7H3WWt+3NmlyGbOGh9q/45mjQxUb+CA6A2jSqu5MweX0ooQWLJxLYx6fz0GwmBOsww5GP3At/dX4Ayb7qpFI9y5ygAAAABJRU5ErkJggg==', |
'N' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHC6DxyzwAAAAB3RJTUUH0wUOEDAye/b4YQAAAAlwSFlzAAALEgAACxIB0t1+/AAAALRJREFUeNpj/M9AHGAiUt0IV8gIARsRMlAROP8/BEB5Ii/+/0cVgXNRhRk8iFXIMIFYhRxXiFTIYPCDSIUMBcQqZNhDrEKZN0QqZAggViHDHIIKRSAUzx1CCrdAaZM/BBT+z4Eyaggp/KEDYbAcIaDw/wUWCEuBkML/PagBgFvhfxdiFT4RIVLh/zXEKvyfQqzCLypEKvx/hoVIhf9biFX4x4ZIhf8fCBCp8P8KNBHG4VQ0AwDEOyeZhO5p1AAAAABJRU5ErkJggg==', |
'O' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHQExDSDoAAAAB3RJTUUH0wUOEDA4myMRfwAAAAlwSFlzAAALEgAACxIB0t1+/AAAATtJREFUeNpj/M9AHGAiUt3wUsiCyv265ciZJ08YGGRkDGwCuFGk/iOBDwU8SDIcGS+Q5JAV7hBBs45nAVaFC1gwXTYBi8IdWNQxMCzAUPhBBJs6Bp4n6AoLYFI6az78f7NEB8ZNQFP4QwAqEfADwg+A+f0NqsI1UHGBDzCnSKC6EhYzB6B0Cj+UwZ+CKgNTeAZKu8C94QGlL6DGjAyU+wAeXC+gIiIQLiM0KzDC9CFCBlWICsnsL3aFMDc+hcs8QZWBKYSF2g24whvYFZpA6T1whUegNCwyoYGxAmYyLGZ+wOxYghqFX2BpO+APmP8nBspHj2uk1LPizf8PGyxgXPTUQ3x6JDqF//8/AYs6bHkGmCYF0O3FnguBCSaFA0kZS8IDJDlG1IIUVFK8eABMWzI6DgHCyDKMI7LEBQCD5YgI9wbKGgAAAABJRU5ErkJggg==', |
'P' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHQvR2Mn2AAAAB3RJTUUH0wUOEDEDMzPJGgAAAAlwSFlzAAALEgAACxIB0t1+/AAAAKVJREFUeNpj/M9AHGAiUh05ChlRAKdu4k5Ulf9hANMQiwf/EQCfQgaJB0QqZHAhViHDEbg0AV8vwRM8QN0v5vBAOSfw+BrMWQDl8MClGeEKGGEKQcRXHmQemTGD1RMy+N14o4MDyvGAS7NgGMaIzPHAYyIy4HhBZMy0EBmFIX+IUsjRgqQOi2fAgEVBwyVGGEUEQw2O3EbLzDWSFDIOhtJsVCEWAAC/Yt2X+2PYcgAAAABJRU5ErkJggg==', |
'Q' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHRxSC0wxAAAAB3RJTUUH0wUOEDEKSu9xvgAAAAlwSFlzAAALEgAACxIB0t1+/AAAAW1JREFUeNpj/M9AHGAiUt2QUMiCzPm65cCZF08YGGRkDBx8uNFU/oeDDwU8SOIcBS/+IwOEwh0iaEYIrMCqcA4LprsmYFG4A4s6BoYFGAo/iGBTx8DzAl1hAUxKZ8WH/29W6MC4KWgKfwhAJXx+gPl/QmB+/4KqcANUXOQDVPiLBFRkCUwhJGb2wGzihzK4U6CMA6hReAbKc4F7wwFKX0CNGRkoB+HJJ1ARGZgAIziFM8J0IUIGXYjMZPaXkEJYYDyBiz+EuRFVoQKUdwWIz6qWvmRguAMVkUBVaIIUalPu9GgshIefAWrwrIHp//L/DQc4KjFiBi2uQ/7832KB5AX0uP5fAZOx2PDhfwNCIXrq+f9BhgEb4HmCkcL3YE3hSHkBnmfWYFMpsoaYXAgGDgcwFKLlaxYOCG2DqRCYrldkmIACUMIgZsaTI5Cg3IBNISp4AoovlT+EFf7/kYPkb3wK//8/YAGPGcYhUIYDAHBC9Yak1w7iAAAAAElFTkSuQmCC', |
'R' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHSkEuIgSAAAAB3RJTUUH0wUOEDEUsOBM3QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAOZJREFUeNpj/M9AHGAiUh0NFLJAaUY0YRkJHYcQdmSh/xCAzRCZHf8RAJ9CBpYNRCpkEHgBV4jfMx+mEOVGIDDAaTWY82aPBZTLgV8hUCkaH6cbP8B8gxHgyODjgwstMDfiVIgWQyFE+lrhB3EBznOFuJgxuUFMXPPEbPmDpA53FH55osKMIoAe4F826MDMvPMfj9WgWFGBBeIf/Ar/H4FxJhBQ+B8WzCIfCCi8A4uvBgIK/2fA/POCgMIXHFBuDqH02ABLM3cIKPwgAuVHEFD4fwJM4AIBhT9goe4AFWAcAsXesFIIAEvJyZHTCSiTAAAAAElFTkSuQmCC', |
'S' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHTRnvuTLAAAAB3RJTUUH0wUOEDEbIF9RTAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAVZJREFUeNpj/M9AHGAiUt2oQvyABYX398CWK3de/GBgkVEw8HFgRpH7jwSWqCDLyCxAlkNS+CcG3boY7AozMB3Wgk3hGSw+4HgBl0b4egIWhT9mYPGMBFQg4MH/D2tgvrKASzPC0yMjlP7CDSTOmrDIMDDwiHBsxzSRBypw5j9WgFDoAPNAxIQjX/ApXIDsC4OCLV9wKfzjwIACOEIO4IiZFxbooePzAqvC/z9qONBUStzAqvD//zc9BqgqNX5gVwgETxbkmCClvSk4FYLdsCMCptAGI2YSGV78+PLmz5MX4mDu1ByIMM9n9JiBxe4caGChy8MZMMsUIEFyAMoVwVC4BGaEwpI3/9/MEYGlJQyFPwQYsIE1mL7GlnCR0iNSXLtgqpO4gy1mvtigq1NAxCBKgP9pEUFWxlOCnNIYUYrmn3v23Ljx5gsw88sYOPhwI0sxDoEyHAABtSc836a1EQAAAABJRU5ErkJggg==', |
'T' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHgUdTbcyAAAAB3RJTUUH0wUOEDEgkVS4aAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADdJREFUeNpj/M9AHGAiUt0IVcgCpRlxyMODeSh4hmiFjGipB+Z7jEQ1FDwzqnBU4WBSyDicimYAb/AFTaJpyH8AAAAASUVORK5CYII=', |
'U' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHhEHl2NPAAAAB3RJTUUH0wUOEDEon48wWgAAAAlwSFlzAAALEgAACxIB0t1+/AAAAKlJREFUeNpj/M9AHGAiUh3xClmgNCOUhrsEXYD6Vo8qHFVIuUIVKP0USr+E0jLoCjWg9A4ovQVNHJjUIaADZsILMPeFApRfA5X/D1N4AaZRYc6b/2+WwNQxXEBX+N8Bqxcc/mMoPMGCRR3LBUyF/2dgUTjjPxaF/6egm8ky5T9Whf9P2KCoMziBJPefEaWQurjnzIMXL34wsMhoWHiYo2hjHLjSbFQhXgAAKzejCLAOcVMAAAAASUVORK5CYII=', |
'V' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHh/gL05IAAAAB3RJTUUH0wUOEDEuduyVbwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAVNJREFUeNpj/M9AHGAiUt2owoFRaMgIAYlIMqlQMUMo/z8ITIByRP78hwMRqNgECBei8AULVPQIXN0RqAjLGwgfYrW4B1R4DdzmLVDaQxjZ6v8roDwVuIkqMK3/ka3+/0MAKn4FKn4D5uof/5GtZmCPgEpsQHNDBDsDitVwt5tA+RZQ/pn/qFYj3PQEzHsC5WnA3QyPmQQU3+5AE0VYDTfDBcxzgQbik/8YVv93gMp9AbK/cEAD8T+m1TBb/oD8veEHhs0IE2GmxADZMRAmz4//WKxGkv3DA2Gm/MeqcA/Ujj1w1hHsCv/LQKQz/megRzyawgqIvAxMRwsuhbCEAEvGT3AphEUwNCU5IEv9R8lcUH9/wAxE5HAEgjccSBI8X3CbKOyBxAnhxm3i/w1IEgdQZFA98/+PCFydDKo6VKsZmGPQ0wgOq/+fgYvfQTORkeq1AgCIAvD7+THsDgAAAABJRU5ErkJggg==', |
'W' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QFhZRKnzkAAAAB3RJTUUH0wUOEDIR66frkQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAXNJREFUeNrtlK1ywkAUhZdMZsJMKyIqKhAIBAKBiEBEVCDyCJV9iIo+Do9QGRERgUBEVCAqKhAIREVERURnTvfn3t27xSA6g+kOQ/ZkP/aec5NlBHXZSC7k/sE/AhUwoVkDPQ58/2RUQ2IC6B1XpN7MV8tg62/pUdjSDO7OwR2J0pbekpqZYlMG50bNSGwBDQ4pyV5YtCZ7mqZf1mO2IN2Jynba0XRx49pThjQCbEKWFfVRpIlBzlK4PuLdpxEWlTr4LHvYMEDOaTYS3HCW3DAJt8mmaSXYchZbOfEzkyYGZRbrEbX8qe7GMpLqFeyxV9F4fon1pwcxjxbqJpJTBPBJLoyHYSz1I3xq78aOMssepHZZHFjKhbX9/AZd6e9bsdABeyHTQXiE2PLO6PugCwiP/r1QVLYSlpXwKE1Wno7b7jY+hoWj0aegPyA9+jPrzgqwZJ0j8hhMVtElmDoD19FFPAvamc+sOXBm+KdYEzC63p/9D7Tr72kj/8qjAAAAAElFTkSuQmCC', |
'X' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHi/G9n7kAAAAB3RJTUUH0wUOEDIXAsROpAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAT9JREFUeNpj/M9AHGAiUt3IVhjKCAFr4RJroSKBMIH/YPBEAMITeQLh//8gAxHggQlAFf6fAdXnA+WnQPkT/qMp/O8AlVkA5h2A8kz+YCi8wQGREngA5PxQgXBYzvzHUPi/A2qIA5BdAmUX/Mei8I8BVHbK/wssEJbMB2wK/5+ASvPcgGlZ8x+rQriFAmghgKHwiwJKXPA8wKXw/x4UhT3/cSr8n4CkzuAPHoVvRODqWE6gyPxHTT1ffiAUCjCgAhRtDkgSFnisnoJixAScCh/wEBk8DmiucsChcA5MQQSMMQWrQlgiZ0iAByey5QiFPlBZnS//v+hgxjZc4QKYKVeAnCswby3AUAi3eAGKNoEn6Ap94A5EjXUfNIUrEA6EALgzl6AohCUGsAMhAOZMkTfICkMw3I5wZgiEyzicimYAFRFkVwgDfJ0AAAAASUVORK5CYII=', |
'Y' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHjkyIsu1AAAAB3RJTUUH0wUOEDIkvRQvsgAAAAlwSFlzAAALEgAACxIB0t1+/AAAANJJREFUeNrt1L0NgzAQBWAcUVB6AAZgBAoKhmAICoZgCAoKxmAECkbwABSUlBRILwF8duwYhFJEihJ37+6T5T9g8K6N20X3FdDDNjKKOeTIqZLtWcKBU73bCx1lPhgQNTWieY1zRLmGCZFQp1xTSSmBDUUgW754BF+GQLxAPUkMxMb0FlzUsqpKLXhxQPRqo+oIerggCvuMC7jhFJounA4gWhO2OIL6Jp/uzglHrh0fTyAaDRucQaTkUpxDQVBYDWZ/hYze6bsv/A8/DNlP/kgvwzuer4kCMGPZDgAAAABJRU5ErkJggg==', |
'Z' => 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAAAAACpleexAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfTBQ4QHwfqWOdfAAAAB3RJTUUH0wUOEDIrLasyIwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAL5JREFUeNrl1C0OwkAQBWCWQIJEVPQIFT0GAlHBMRBIBKIHqahAIDlERY9R0UOs3ORh5qVLunmp5GfUZvczbzKzDqtltV7ofgtueHCp16h33xBGwn0KYqoTO/J868Csaj418e0cPujOkLDfmTsECcfcXOGhoC/NZQMUDBUDd5DwxiAtJGzprpCw48xVQcIhM1d6KOgLc/kIBcORgXtIeGGQOyRs6Oq0g7P92YbkRE7bRZhcwhh+6nLF5f7yx30B8Z7FgxzMWtEAAAAASUVORK5CYII=', |
); |
return $_png; |
} |
?> |
/Forum/includes/usercp_email.php |
---|
0,0 → 1,210 |
<?php |
/*************************************************************************** |
* usercp_email.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: usercp_email.php,v 1.7.2.13 2003/06/06 18:02:15 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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; |
} |
// Is send through board enabled? No, return to index |
if (!$board_config['board_email_form']) |
{ |
redirect(append_sid("index.$phpEx", true)); |
} |
if ( !empty($HTTP_GET_VARS[POST_USERS_URL]) || !empty($HTTP_POST_VARS[POST_USERS_URL]) ) |
{ |
$user_id = ( !empty($HTTP_GET_VARS[POST_USERS_URL]) ) ? intval($HTTP_GET_VARS[POST_USERS_URL]) : intval($HTTP_POST_VARS[POST_USERS_URL]); |
} |
else |
{ |
message_die(GENERAL_MESSAGE, $lang['No_user_specified']); |
} |
if ( !$userdata['session_logged_in'] ) |
{ |
redirect(append_sid("login.$phpEx?redirect=profile.$phpEx&mode=email&" . POST_USERS_URL . "=$user_id", true)); |
} |
$sql = "SELECT username, user_email, user_viewemail, user_lang |
FROM " . USERS_TABLE . " |
WHERE user_id = $user_id"; |
if ( $result = $db->sql_query($sql) ) |
{ |
$row = $db->sql_fetchrow($result); |
$username = $row['username']; |
$user_email = $row['user_email']; |
$user_lang = $row['user_lang']; |
if ( $row['user_viewemail'] || $userdata['user_level'] == ADMIN ) |
{ |
if ( time() - $userdata['user_emailtime'] < $board_config['flood_interval'] ) |
{ |
message_die(GENERAL_MESSAGE, $lang['Flood_email_limit']); |
} |
if ( isset($HTTP_POST_VARS['submit']) ) |
{ |
$error = FALSE; |
if ( !empty($HTTP_POST_VARS['subject']) ) |
{ |
$subject = trim(stripslashes($HTTP_POST_VARS['subject'])); |
} |
else |
{ |
$error = TRUE; |
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $lang['Empty_subject_email'] : $lang['Empty_subject_email']; |
} |
if ( !empty($HTTP_POST_VARS['message']) ) |
{ |
$message = trim(stripslashes($HTTP_POST_VARS['message'])); |
} |
else |
{ |
$error = TRUE; |
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $lang['Empty_message_email'] : $lang['Empty_message_email']; |
} |
if ( !$error ) |
{ |
$sql = "UPDATE " . USERS_TABLE . " |
SET user_emailtime = " . time() . " |
WHERE user_id = " . $userdata['user_id']; |
if ( $result = $db->sql_query($sql) ) |
{ |
include($phpbb_root_path . 'includes/emailer.'.$phpEx); |
$emailer = new emailer($board_config['smtp_delivery']); |
$emailer->from($userdata['user_email']); |
$emailer->replyto($userdata['user_email']); |
$email_headers = 'X-AntiAbuse: Board servername - ' . $server_name . "\n"; |
$email_headers .= 'X-AntiAbuse: User_id - ' . $userdata['user_id'] . "\n"; |
$email_headers .= 'X-AntiAbuse: Username - ' . $userdata['username'] . "\n"; |
$email_headers .= 'X-AntiAbuse: User IP - ' . decode_ip($user_ip) . "\n"; |
$emailer->use_template('profile_send_email', $user_lang); |
$emailer->email_address($user_email); |
$emailer->set_subject($subject); |
$emailer->extra_headers($email_headers); |
$emailer->assign_vars(array( |
'SITENAME' => $board_config['sitename'], |
'BOARD_EMAIL' => $board_config['board_email'], |
'FROM_USERNAME' => $userdata['username'], |
'TO_USERNAME' => $username, |
'MESSAGE' => $message) |
); |
$emailer->send(); |
$emailer->reset(); |
if ( !empty($HTTP_POST_VARS['cc_email']) ) |
{ |
$emailer->from($userdata['user_email']); |
$emailer->replyto($userdata['user_email']); |
$emailer->use_template('profile_send_email'); |
$emailer->email_address($userdata['user_email']); |
$emailer->set_subject($subject); |
$emailer->assign_vars(array( |
'SITENAME' => $board_config['sitename'], |
'BOARD_EMAIL' => $board_config['board_email'], |
'FROM_USERNAME' => $userdata['username'], |
'TO_USERNAME' => $username, |
'MESSAGE' => $message) |
); |
$emailer->send(); |
$emailer->reset(); |
} |
$template->assign_vars(array( |
'META' => '<meta http-equiv="refresh" content="5;url=' . append_sid("index.$phpEx") . '">') |
); |
$message = $lang['Email_sent'] . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>'); |
message_die(GENERAL_MESSAGE, $message); |
} |
else |
{ |
message_die(GENERAL_ERROR, 'Could not update last email time', '', __LINE__, __FILE__, $sql); |
} |
} |
} |
include($phpbb_root_path . 'includes/page_header.'.$phpEx); |
$template->set_filenames(array( |
'body' => 'profile_send_email.tpl') |
); |
make_jumpbox('viewforum.'.$phpEx); |
if ( $error ) |
{ |
$template->set_filenames(array( |
'reg_header' => 'error_body.tpl') |
); |
$template->assign_vars(array( |
'ERROR_MESSAGE' => $error_msg) |
); |
$template->assign_var_from_handle('ERROR_BOX', 'reg_header'); |
} |
$template->assign_vars(array( |
'USERNAME' => $username, |
'S_HIDDEN_FIELDS' => '', |
'S_POST_ACTION' => append_sid("profile.$phpEx?mode=email&" . POST_USERS_URL . "=$user_id"), |
'L_SEND_EMAIL_MSG' => $lang['Send_email_msg'], |
'L_RECIPIENT' => $lang['Recipient'], |
'L_SUBJECT' => $lang['Subject'], |
'L_MESSAGE_BODY' => $lang['Message_body'], |
'L_MESSAGE_BODY_DESC' => $lang['Email_message_desc'], |
'L_EMPTY_SUBJECT_EMAIL' => $lang['Empty_subject_email'], |
'L_EMPTY_MESSAGE_EMAIL' => $lang['Empty_message_email'], |
'L_OPTIONS' => $lang['Options'], |
'L_CC_EMAIL' => $lang['CC_email'], |
'L_SPELLCHECK' => $lang['Spellcheck'], |
'L_SEND_EMAIL' => $lang['Send_email']) |
); |
$template->pparse('body'); |
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); |
} |
else |
{ |
message_die(GENERAL_MESSAGE, $lang['User_prevent_email']); |
} |
} |
else |
{ |
message_die(GENERAL_MESSAGE, $lang['User_not_exist']); |
} |
?> |
/Forum/includes/usercp_register.php |
---|
0,0 → 1,1171 |
<?php |
/*************************************************************************** |
* usercp_register.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: usercp_register.php,v 1.20.2.76 2006/05/30 19:29:43 grahamje Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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. |
* |
* |
***************************************************************************/ |
/* |
This code has been modified from its original form by psoTFX @ phpbb.com |
Changes introduce the back-ported phpBB 2.2 visual confirmation code. |
NOTE: Anyone using the modified code contained within this script MUST include |
a relevant message such as this in usercp_register.php ... failure to do so |
will affect a breach of Section 2a of the GPL and our copyright |
png visual confirmation system : (c) phpBB Group, 2003 : All Rights Reserved |
*/ |
if ( !defined('IN_PHPBB') ) |
{ |
die("Hacking attempt"); |
exit; |
} |
$unhtml_specialchars_match = array('#>#', '#<#', '#"#', '#&#'); |
$unhtml_specialchars_replace = array('>', '<', '"', '&'); |
// --------------------------------------- |
// Load agreement template since user has not yet |
// agreed to registration conditions/coppa |
// |
function show_coppa() |
{ |
global $userdata, $template, $lang, $phpbb_root_path, $phpEx; |
$template->set_filenames(array( |
'body' => 'agreement.tpl') |
); |
$template->assign_vars(array( |
'REGISTRATION' => $lang['Registration'], |
'AGREEMENT' => $lang['Reg_agreement'], |
"AGREE_OVER_13" => $lang['Agree_over_13'], |
"AGREE_UNDER_13" => $lang['Agree_under_13'], |
'DO_NOT_AGREE' => $lang['Agree_not'], |
"U_AGREE_OVER13" => append_sid("profile.$phpEx?mode=register&agreed=true"), |
"U_AGREE_UNDER13" => append_sid("profile.$phpEx?mode=register&agreed=true&coppa=true")) |
); |
$template->pparse('body'); |
} |
// |
// --------------------------------------- |
$error = FALSE; |
$error_msg = ''; |
$page_title = ( $mode == 'editprofile' ) ? $lang['Edit_profile'] : $lang['Register']; |
if ( $mode == 'register' && !isset($HTTP_POST_VARS['agreed']) && !isset($HTTP_GET_VARS['agreed']) ) |
{ |
include($phpbb_root_path . 'includes/page_header.'.$phpEx); |
show_coppa(); |
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); |
} |
$coppa = ( empty($HTTP_POST_VARS['coppa']) && empty($HTTP_GET_VARS['coppa']) ) ? 0 : TRUE; |
// |
// Check and initialize some variables if needed |
// |
if ( |
isset($HTTP_POST_VARS['submit']) || |
isset($HTTP_POST_VARS['avatargallery']) || |
isset($HTTP_POST_VARS['submitavatar']) || |
isset($HTTP_POST_VARS['cancelavatar']) || |
$mode == 'register' ) |
{ |
include($phpbb_root_path . 'includes/functions_validate.'.$phpEx); |
include($phpbb_root_path . 'includes/bbcode.'.$phpEx); |
include($phpbb_root_path . 'includes/functions_post.'.$phpEx); |
if ( $mode == 'editprofile' ) |
{ |
$user_id = intval($HTTP_POST_VARS['user_id']); |
$current_email = trim(htmlspecialchars($HTTP_POST_VARS['current_email'])); |
} |
$strip_var_list = array('email' => 'email', 'icq' => 'icq', 'aim' => 'aim', 'msn' => 'msn', 'yim' => 'yim', 'website' => 'website', 'location' => 'location', 'occupation' => 'occupation', 'interests' => 'interests', 'confirm_code' => 'confirm_code'); |
// Strip all tags from data ... may p**s some people off, bah, strip_tags is |
// doing the job but can still break HTML output ... have no choice, have |
// to use htmlspecialchars ... be prepared to be moaned at. |
while( list($var, $param) = @each($strip_var_list) ) |
{ |
if ( !empty($HTTP_POST_VARS[$param]) ) |
{ |
$$var = trim(htmlspecialchars($HTTP_POST_VARS[$param])); |
} |
} |
$username = ( !empty($HTTP_POST_VARS['username']) ) ? phpbb_clean_username($HTTP_POST_VARS['username']) : ''; |
$trim_var_list = array('cur_password' => 'cur_password', 'new_password' => 'new_password', 'password_confirm' => 'password_confirm', 'signature' => 'signature'); |
while( list($var, $param) = @each($trim_var_list) ) |
{ |
if ( !empty($HTTP_POST_VARS[$param]) ) |
{ |
$$var = trim($HTTP_POST_VARS[$param]); |
} |
} |
$signature = (isset($signature)) ? str_replace('<br />', "\n", $signature) : ''; |
$signature_bbcode_uid = ''; |
// Run some validation on the optional fields. These are pass-by-ref, so they'll be changed to |
// empty strings if they fail. |
validate_optional_fields($icq, $aim, $msn, $yim, $website, $location, $occupation, $interests, $signature); |
$viewemail = ( isset($HTTP_POST_VARS['viewemail']) ) ? ( ($HTTP_POST_VARS['viewemail']) ? TRUE : 0 ) : 0; |
$allowviewonline = ( isset($HTTP_POST_VARS['hideonline']) ) ? ( ($HTTP_POST_VARS['hideonline']) ? 0 : TRUE ) : TRUE; |
$notifyreply = ( isset($HTTP_POST_VARS['notifyreply']) ) ? ( ($HTTP_POST_VARS['notifyreply']) ? TRUE : 0 ) : 0; |
$notifypm = ( isset($HTTP_POST_VARS['notifypm']) ) ? ( ($HTTP_POST_VARS['notifypm']) ? TRUE : 0 ) : TRUE; |
$popup_pm = ( isset($HTTP_POST_VARS['popup_pm']) ) ? ( ($HTTP_POST_VARS['popup_pm']) ? TRUE : 0 ) : TRUE; |
if ( $mode == 'register' ) |
{ |
$attachsig = ( isset($HTTP_POST_VARS['attachsig']) ) ? ( ($HTTP_POST_VARS['attachsig']) ? TRUE : 0 ) : $board_config['allow_sig']; |
$allowhtml = ( isset($HTTP_POST_VARS['allowhtml']) ) ? ( ($HTTP_POST_VARS['allowhtml']) ? TRUE : 0 ) : $board_config['allow_html']; |
$allowbbcode = ( isset($HTTP_POST_VARS['allowbbcode']) ) ? ( ($HTTP_POST_VARS['allowbbcode']) ? TRUE : 0 ) : $board_config['allow_bbcode']; |
$allowsmilies = ( isset($HTTP_POST_VARS['allowsmilies']) ) ? ( ($HTTP_POST_VARS['allowsmilies']) ? TRUE : 0 ) : $board_config['allow_smilies']; |
} |
else |
{ |
$attachsig = ( isset($HTTP_POST_VARS['attachsig']) ) ? ( ($HTTP_POST_VARS['attachsig']) ? TRUE : 0 ) : $userdata['user_attachsig']; |
$allowhtml = ( isset($HTTP_POST_VARS['allowhtml']) ) ? ( ($HTTP_POST_VARS['allowhtml']) ? TRUE : 0 ) : $userdata['user_allowhtml']; |
$allowbbcode = ( isset($HTTP_POST_VARS['allowbbcode']) ) ? ( ($HTTP_POST_VARS['allowbbcode']) ? TRUE : 0 ) : $userdata['user_allowbbcode']; |
$allowsmilies = ( isset($HTTP_POST_VARS['allowsmilies']) ) ? ( ($HTTP_POST_VARS['allowsmilies']) ? TRUE : 0 ) : $userdata['user_allowsmile']; |
} |
$user_style = ( isset($HTTP_POST_VARS['style']) ) ? intval($HTTP_POST_VARS['style']) : $board_config['default_style']; |
if ( !empty($HTTP_POST_VARS['language']) ) |
{ |
if ( preg_match('/^[a-z_]+$/i', $HTTP_POST_VARS['language']) ) |
{ |
$user_lang = htmlspecialchars($HTTP_POST_VARS['language']); |
} |
else |
{ |
$error = true; |
$error_msg = $lang['Fields_empty']; |
} |
} |
else |
{ |
$user_lang = $board_config['default_lang']; |
} |
$user_timezone = ( isset($HTTP_POST_VARS['timezone']) ) ? doubleval($HTTP_POST_VARS['timezone']) : $board_config['board_timezone']; |
$sql = "SELECT config_value |
FROM " . CONFIG_TABLE . " |
WHERE config_name = 'default_dateformat'"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not select default dateformat', '', __LINE__, __FILE__, $sql); |
} |
$row = $db->sql_fetchrow($result); |
$board_config['default_dateformat'] = $row['config_value']; |
$user_dateformat = ( !empty($HTTP_POST_VARS['dateformat']) ) ? trim(htmlspecialchars($HTTP_POST_VARS['dateformat'])) : $board_config['default_dateformat']; |
$user_avatar_local = ( isset($HTTP_POST_VARS['avatarselect']) && !empty($HTTP_POST_VARS['submitavatar']) && $board_config['allow_avatar_local'] ) ? htmlspecialchars($HTTP_POST_VARS['avatarselect']) : ( ( isset($HTTP_POST_VARS['avatarlocal']) ) ? htmlspecialchars($HTTP_POST_VARS['avatarlocal']) : '' ); |
$user_avatar_category = ( isset($HTTP_POST_VARS['avatarcatname']) && $board_config['allow_avatar_local'] ) ? htmlspecialchars($HTTP_POST_VARS['avatarcatname']) : '' ; |
$user_avatar_remoteurl = ( !empty($HTTP_POST_VARS['avatarremoteurl']) ) ? trim(htmlspecialchars($HTTP_POST_VARS['avatarremoteurl'])) : ''; |
$user_avatar_upload = ( !empty($HTTP_POST_VARS['avatarurl']) ) ? trim($HTTP_POST_VARS['avatarurl']) : ( ( $HTTP_POST_FILES['avatar']['tmp_name'] != "none") ? $HTTP_POST_FILES['avatar']['tmp_name'] : '' ); |
$user_avatar_name = ( !empty($HTTP_POST_FILES['avatar']['name']) ) ? $HTTP_POST_FILES['avatar']['name'] : ''; |
$user_avatar_size = ( !empty($HTTP_POST_FILES['avatar']['size']) ) ? $HTTP_POST_FILES['avatar']['size'] : 0; |
$user_avatar_filetype = ( !empty($HTTP_POST_FILES['avatar']['type']) ) ? $HTTP_POST_FILES['avatar']['type'] : ''; |
$user_avatar = ( empty($user_avatar_local) && $mode == 'editprofile' ) ? $userdata['user_avatar'] : ''; |
$user_avatar_type = ( empty($user_avatar_local) && $mode == 'editprofile' ) ? $userdata['user_avatar_type'] : ''; |
if ( (isset($HTTP_POST_VARS['avatargallery']) || isset($HTTP_POST_VARS['submitavatar']) || isset($HTTP_POST_VARS['cancelavatar'])) && (!isset($HTTP_POST_VARS['submit'])) ) |
{ |
$username = stripslashes($username); |
$email = stripslashes($email); |
$cur_password = htmlspecialchars(stripslashes($cur_password)); |
$new_password = htmlspecialchars(stripslashes($new_password)); |
$password_confirm = htmlspecialchars(stripslashes($password_confirm)); |
$icq = stripslashes($icq); |
$aim = stripslashes($aim); |
$msn = stripslashes($msn); |
$yim = stripslashes($yim); |
$website = stripslashes($website); |
$location = stripslashes($location); |
$occupation = stripslashes($occupation); |
$interests = stripslashes($interests); |
$signature = htmlspecialchars(stripslashes($signature)); |
$user_lang = stripslashes($user_lang); |
$user_dateformat = stripslashes($user_dateformat); |
if ( !isset($HTTP_POST_VARS['cancelavatar'])) |
{ |
$user_avatar = $user_avatar_category . '/' . $user_avatar_local; |
$user_avatar_type = USER_AVATAR_GALLERY; |
} |
} |
} |
// |
// Let's make sure the user isn't logged in while registering, |
// and ensure that they were trying to register a second time |
// (Prevents double registrations) |
// |
if ($mode == 'register' && ($userdata['session_logged_in'] || $username == $userdata['username'])) |
{ |
message_die(GENERAL_MESSAGE, $lang['Username_taken'], '', __LINE__, __FILE__); |
} |
// |
// Did the user submit? In this case build a query to update the users profile in the DB |
// |
if ( isset($HTTP_POST_VARS['submit']) ) |
{ |
include($phpbb_root_path . 'includes/usercp_avatar.'.$phpEx); |
$passwd_sql = ''; |
if ( $mode == 'editprofile' ) |
{ |
if ( $user_id != $userdata['user_id'] ) |
{ |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Wrong_Profile']; |
} |
} |
else if ( $mode == 'register' ) |
{ |
if ( empty($username) || empty($new_password) || empty($password_confirm) || empty($email) ) |
{ |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Fields_empty']; |
} |
} |
if ($board_config['enable_confirm'] && $mode == 'register') |
{ |
if (empty($HTTP_POST_VARS['confirm_id'])) |
{ |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Confirm_code_wrong']; |
} |
else |
{ |
$confirm_id = htmlspecialchars($HTTP_POST_VARS['confirm_id']); |
if (!preg_match('/^[A-Za-z0-9]+$/', $confirm_id)) |
{ |
$confirm_id = ''; |
} |
$sql = 'SELECT code |
FROM ' . CONFIRM_TABLE . " |
WHERE confirm_id = '$confirm_id' |
AND session_id = '" . $userdata['session_id'] . "'"; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain confirmation code', __LINE__, __FILE__, $sql); |
} |
if ($row = $db->sql_fetchrow($result)) |
{ |
if ($row['code'] != $confirm_code) |
{ |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Confirm_code_wrong']; |
} |
else |
{ |
$sql = 'DELETE FROM ' . CONFIRM_TABLE . " |
WHERE confirm_id = '$confirm_id' |
AND session_id = '" . $userdata['session_id'] . "'"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Could not delete confirmation code', __LINE__, __FILE__, $sql); |
} |
} |
} |
else |
{ |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Confirm_code_wrong']; |
} |
$db->sql_freeresult($result); |
} |
} |
$passwd_sql = ''; |
if ( !empty($new_password) && !empty($password_confirm) ) |
{ |
if ( $new_password != $password_confirm ) |
{ |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Password_mismatch']; |
} |
else if ( strlen($new_password) > 32 ) |
{ |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Password_long']; |
} |
else |
{ |
if ( $mode == 'editprofile' ) |
{ |
$sql = "SELECT user_password |
FROM " . USERS_TABLE . " |
WHERE user_id = $user_id"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain user_password information', '', __LINE__, __FILE__, $sql); |
} |
$row = $db->sql_fetchrow($result); |
if ( $row['user_password'] != md5($cur_password) ) |
{ |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Current_password_mismatch']; |
} |
} |
if ( !$error ) |
{ |
$new_password = md5($new_password); |
$passwd_sql = "user_password = '$new_password', "; |
} |
} |
} |
else if ( ( empty($new_password) && !empty($password_confirm) ) || ( !empty($new_password) && empty($password_confirm) ) ) |
{ |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Password_mismatch']; |
} |
// |
// Do a ban check on this email address |
// |
if ( $email != $userdata['user_email'] || $mode == 'register' ) |
{ |
$result = validate_email($email); |
if ( $result['error'] ) |
{ |
$email = $userdata['user_email']; |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $result['error_msg']; |
} |
if ( $mode == 'editprofile' ) |
{ |
$sql = "SELECT user_password |
FROM " . USERS_TABLE . " |
WHERE user_id = $user_id"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain user_password information', '', __LINE__, __FILE__, $sql); |
} |
$row = $db->sql_fetchrow($result); |
if ( $row['user_password'] != md5($cur_password) ) |
{ |
$email = $userdata['user_email']; |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Current_password_mismatch']; |
} |
} |
} |
$username_sql = ''; |
if ( $board_config['allow_namechange'] || $mode == 'register' ) |
{ |
if ( empty($username) ) |
{ |
// Error is already triggered, since one field is empty. |
$error = TRUE; |
} |
else if ( $username != $userdata['username'] || $mode == 'register') |
{ |
if (strtolower($username) != strtolower($userdata['username']) || $mode == 'register') |
{ |
$result = validate_username($username); |
if ( $result['error'] ) |
{ |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $result['error_msg']; |
} |
} |
if (!$error) |
{ |
$username_sql = "username = '" . str_replace("\'", "''", $username) . "', "; |
} |
} |
} |
if ( $signature != '' ) |
{ |
if ( strlen($signature) > $board_config['max_sig_chars'] ) |
{ |
$error = TRUE; |
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Signature_too_long']; |
} |
if ( !isset($signature_bbcode_uid) || $signature_bbcode_uid == '' ) |
{ |
$signature_bbcode_uid = ( $allowbbcode ) ? make_bbcode_uid() : ''; |
} |
$signature = prepare_message($signature, $allowhtml, $allowbbcode, $allowsmilies, $signature_bbcode_uid); |
} |
if ( $website != '' ) |
{ |
rawurlencode($website); |
} |
$avatar_sql = ''; |
if ( isset($HTTP_POST_VARS['avatardel']) && $mode == 'editprofile' ) |
{ |
$avatar_sql = user_avatar_delete($userdata['user_avatar_type'], $userdata['user_avatar']); |
} |
else |
if ( ( !empty($user_avatar_upload) || !empty($user_avatar_name) ) && $board_config['allow_avatar_upload'] ) |
{ |
if ( !empty($user_avatar_upload) ) |
{ |
$avatar_mode = (empty($user_avatar_name)) ? 'remote' : 'local'; |
$avatar_sql = user_avatar_upload($mode, $avatar_mode, $userdata['user_avatar'], $userdata['user_avatar_type'], $error, $error_msg, $user_avatar_upload, $user_avatar_name, $user_avatar_size, $user_avatar_filetype); |
} |
else if ( !empty($user_avatar_name) ) |
{ |
$l_avatar_size = sprintf($lang['Avatar_filesize'], round($board_config['avatar_filesize'] / 1024)); |
$error = true; |
$error_msg .= ( ( !empty($error_msg) ) ? '<br />' : '' ) . $l_avatar_size; |
} |
} |
else if ( $user_avatar_remoteurl != '' && $board_config['allow_avatar_remote'] ) |
{ |
user_avatar_delete($userdata['user_avatar_type'], $userdata['user_avatar']); |
$avatar_sql = user_avatar_url($mode, $error, $error_msg, $user_avatar_remoteurl); |
} |
else if ( $user_avatar_local != '' && $board_config['allow_avatar_local'] ) |
{ |
user_avatar_delete($userdata['user_avatar_type'], $userdata['user_avatar']); |
$avatar_sql = user_avatar_gallery($mode, $error, $error_msg, $user_avatar_local, $user_avatar_category); |
} |
if ( !$error ) |
{ |
if ( $avatar_sql == '' ) |
{ |
$avatar_sql = ( $mode == 'editprofile' ) ? '' : "'', " . USER_AVATAR_NONE; |
} |
if ( $mode == 'editprofile' ) |
{ |
if ( $email != $userdata['user_email'] && $board_config['require_activation'] != USER_ACTIVATION_NONE && $userdata['user_level'] != ADMIN ) |
{ |
$user_active = 0; |
$user_actkey = gen_rand_string(true); |
$key_len = 54 - ( strlen($server_url) ); |
$key_len = ( $key_len > 6 ) ? $key_len : 6; |
$user_actkey = substr($user_actkey, 0, $key_len); |
if ( $userdata['session_logged_in'] ) |
{ |
session_end($userdata['session_id'], $userdata['user_id']); |
} |
} |
else |
{ |
$user_active = 1; |
$user_actkey = ''; |
} |
$sql = "UPDATE " . USERS_TABLE . " |
SET " . $username_sql . $passwd_sql . "user_email = '" . str_replace("\'", "''", $email) ."', user_icq = '" . str_replace("\'", "''", $icq) . "', user_website = '" . str_replace("\'", "''", $website) . "', user_occ = '" . str_replace("\'", "''", $occupation) . "', user_from = '" . str_replace("\'", "''", $location) . "', user_interests = '" . str_replace("\'", "''", $interests) . "', user_sig = '" . str_replace("\'", "''", $signature) . "', user_sig_bbcode_uid = '$signature_bbcode_uid', user_viewemail = $viewemail, user_aim = '" . str_replace("\'", "''", str_replace(' ', '+', $aim)) . "', user_yim = '" . str_replace("\'", "''", $yim) . "', user_msnm = '" . str_replace("\'", "''", $msn) . "', user_attachsig = $attachsig, user_allowsmile = $allowsmilies, user_allowhtml = $allowhtml, user_allowbbcode = $allowbbcode, user_allow_viewonline = $allowviewonline, user_notify = $notifyreply, user_notify_pm = $notifypm, user_popup_pm = $popup_pm, user_timezone = $user_timezone, user_dateformat = '" . str_replace("\'", "''", $user_dateformat) . "', user_lang = '" . str_replace("\'", "''", $user_lang) . "', user_style = $user_style, user_active = $user_active, user_actkey = '" . str_replace("\'", "''", $user_actkey) . "'" . $avatar_sql . " |
WHERE user_id = $user_id"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not update users table', '', __LINE__, __FILE__, $sql); |
} |
// We remove all stored login keys since the password has been updated |
// and change the current one (if applicable) |
if ( !empty($passwd_sql) ) |
{ |
session_reset_keys($user_id, $user_ip); |
} |
if ( !$user_active ) |
{ |
// |
// The users account has been deactivated, send them an email with a new activation key |
// |
include($phpbb_root_path . 'includes/emailer.'.$phpEx); |
$emailer = new emailer($board_config['smtp_delivery']); |
if ( $board_config['require_activation'] != USER_ACTIVATION_ADMIN ) |
{ |
$emailer->from($board_config['board_email']); |
$emailer->replyto($board_config['board_email']); |
$emailer->use_template('user_activate', stripslashes($user_lang)); |
$emailer->email_address($email); |
$emailer->set_subject($lang['Reactivate']); |
$emailer->assign_vars(array( |
'SITENAME' => $board_config['sitename'], |
'USERNAME' => preg_replace($unhtml_specialchars_match, $unhtml_specialchars_replace, substr(str_replace("\'", "'", $username), 0, 25)), |
'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) : '', |
'U_ACTIVATE' => $server_url . '?mode=activate&' . POST_USERS_URL . '=' . $user_id . '&act_key=' . $user_actkey) |
); |
$emailer->send(); |
$emailer->reset(); |
} |
else if ( $board_config['require_activation'] == USER_ACTIVATION_ADMIN ) |
{ |
$sql = 'SELECT user_email, user_lang |
FROM ' . USERS_TABLE . ' |
WHERE user_level = ' . ADMIN; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not select Administrators', '', __LINE__, __FILE__, $sql); |
} |
while ($row = $db->sql_fetchrow($result)) |
{ |
$emailer->from($board_config['board_email']); |
$emailer->replyto($board_config['board_email']); |
$emailer->email_address(trim($row['user_email'])); |
$emailer->use_template("admin_activate", $row['user_lang']); |
$emailer->set_subject($lang['Reactivate']); |
$emailer->assign_vars(array( |
'USERNAME' => preg_replace($unhtml_specialchars_match, $unhtml_specialchars_replace, substr(str_replace("\'", "'", $username), 0, 25)), |
'EMAIL_SIG' => str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']), |
'U_ACTIVATE' => $server_url . '?mode=activate&' . POST_USERS_URL . '=' . $user_id . '&act_key=' . $user_actkey) |
); |
$emailer->send(); |
$emailer->reset(); |
} |
$db->sql_freeresult($result); |
} |
$message = $lang['Profile_updated_inactive'] . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>'); |
} |
else |
{ |
$message = $lang['Profile_updated'] . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>'); |
} |
$template->assign_vars(array( |
"META" => '<meta http-equiv="refresh" content="5;url=' . append_sid("index.$phpEx") . '">') |
); |
message_die(GENERAL_MESSAGE, $message); |
} |
else |
{ |
$sql = "SELECT MAX(user_id) AS total |
FROM " . USERS_TABLE; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain next user_id information', '', __LINE__, __FILE__, $sql); |
} |
if ( !($row = $db->sql_fetchrow($result)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain next user_id information', '', __LINE__, __FILE__, $sql); |
} |
$user_id = $row['total'] + 1; |
// |
// Get current date |
// |
$sql = "INSERT INTO " . USERS_TABLE . " (user_id, username, user_regdate, user_password, user_email, user_icq, user_website, user_occ, user_from, user_interests, user_sig, user_sig_bbcode_uid, user_avatar, user_avatar_type, user_viewemail, user_aim, user_yim, user_msnm, user_attachsig, user_allowsmile, user_allowhtml, user_allowbbcode, user_allow_viewonline, user_notify, user_notify_pm, user_popup_pm, user_timezone, user_dateformat, user_lang, user_style, user_level, user_allow_pm, user_active, user_actkey) |
VALUES ($user_id, '" . str_replace("\'", "''", $username) . "', " . time() . ", '" . str_replace("\'", "''", $new_password) . "', '" . str_replace("\'", "''", $email) . "', '" . str_replace("\'", "''", $icq) . "', '" . str_replace("\'", "''", $website) . "', '" . str_replace("\'", "''", $occupation) . "', '" . str_replace("\'", "''", $location) . "', '" . str_replace("\'", "''", $interests) . "', '" . str_replace("\'", "''", $signature) . "', '$signature_bbcode_uid', $avatar_sql, $viewemail, '" . str_replace("\'", "''", str_replace(' ', '+', $aim)) . "', '" . str_replace("\'", "''", $yim) . "', '" . str_replace("\'", "''", $msn) . "', $attachsig, $allowsmilies, $allowhtml, $allowbbcode, $allowviewonline, $notifyreply, $notifypm, $popup_pm, $user_timezone, '" . str_replace("\'", "''", $user_dateformat) . "', '" . str_replace("\'", "''", $user_lang) . "', $user_style, 0, 1, "; |
if ( $board_config['require_activation'] == USER_ACTIVATION_SELF || $board_config['require_activation'] == USER_ACTIVATION_ADMIN || $coppa ) |
{ |
$user_actkey = gen_rand_string(true); |
$key_len = 54 - (strlen($server_url)); |
$key_len = ( $key_len > 6 ) ? $key_len : 6; |
$user_actkey = substr($user_actkey, 0, $key_len); |
$sql .= "0, '" . str_replace("\'", "''", $user_actkey) . "')"; |
} |
else |
{ |
$sql .= "1, '')"; |
} |
if ( !($result = $db->sql_query($sql, BEGIN_TRANSACTION)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not insert data into users table', '', __LINE__, __FILE__, $sql); |
} |
$sql = "INSERT INTO " . GROUPS_TABLE . " (group_name, group_description, group_single_user, group_moderator) |
VALUES ('', 'Personal User', 1, 0)"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not insert data into groups table', '', __LINE__, __FILE__, $sql); |
} |
$group_id = $db->sql_nextid(); |
$sql = "INSERT INTO " . USER_GROUP_TABLE . " (user_id, group_id, user_pending) |
VALUES ($user_id, $group_id, 0)"; |
if( !($result = $db->sql_query($sql, END_TRANSACTION)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not insert data into user_group table', '', __LINE__, __FILE__, $sql); |
} |
if ( $coppa ) |
{ |
$message = $lang['COPPA']; |
$email_template = 'coppa_welcome_inactive'; |
} |
else if ( $board_config['require_activation'] == USER_ACTIVATION_SELF ) |
{ |
$message = $lang['Account_inactive']; |
$email_template = 'user_welcome_inactive'; |
} |
else if ( $board_config['require_activation'] == USER_ACTIVATION_ADMIN ) |
{ |
$message = $lang['Account_inactive_admin']; |
$email_template = 'admin_welcome_inactive'; |
} |
else |
{ |
$message = $lang['Account_added']; |
$email_template = 'user_welcome'; |
} |
include($phpbb_root_path . 'includes/emailer.'.$phpEx); |
$emailer = new emailer($board_config['smtp_delivery']); |
$emailer->from($board_config['board_email']); |
$emailer->replyto($board_config['board_email']); |
$emailer->use_template($email_template, stripslashes($user_lang)); |
$emailer->email_address($email); |
$emailer->set_subject(sprintf($lang['Welcome_subject'], $board_config['sitename'])); |
if( $coppa ) |
{ |
$emailer->assign_vars(array( |
'SITENAME' => $board_config['sitename'], |
'WELCOME_MSG' => sprintf($lang['Welcome_subject'], $board_config['sitename']), |
'USERNAME' => preg_replace($unhtml_specialchars_match, $unhtml_specialchars_replace, substr(str_replace("\'", "'", $username), 0, 25)), |
'PASSWORD' => $password_confirm, |
'EMAIL_SIG' => str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']), |
'FAX_INFO' => $board_config['coppa_fax'], |
'MAIL_INFO' => $board_config['coppa_mail'], |
'EMAIL_ADDRESS' => $email, |
'ICQ' => $icq, |
'AIM' => $aim, |
'YIM' => $yim, |
'MSN' => $msn, |
'WEB_SITE' => $website, |
'FROM' => $location, |
'OCC' => $occupation, |
'INTERESTS' => $interests, |
'SITENAME' => $board_config['sitename'])); |
} |
else |
{ |
$emailer->assign_vars(array( |
'SITENAME' => $board_config['sitename'], |
'WELCOME_MSG' => sprintf($lang['Welcome_subject'], $board_config['sitename']), |
'USERNAME' => preg_replace($unhtml_specialchars_match, $unhtml_specialchars_replace, substr(str_replace("\'", "'", $username), 0, 25)), |
'PASSWORD' => $password_confirm, |
'EMAIL_SIG' => str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']), |
'U_ACTIVATE' => $server_url . '?mode=activate&' . POST_USERS_URL . '=' . $user_id . '&act_key=' . $user_actkey) |
); |
} |
$emailer->send(); |
$emailer->reset(); |
if ( $board_config['require_activation'] == USER_ACTIVATION_ADMIN ) |
{ |
$sql = "SELECT user_email, user_lang |
FROM " . USERS_TABLE . " |
WHERE user_level = " . ADMIN; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not select Administrators', '', __LINE__, __FILE__, $sql); |
} |
while ($row = $db->sql_fetchrow($result)) |
{ |
$emailer->from($board_config['board_email']); |
$emailer->replyto($board_config['board_email']); |
$emailer->email_address(trim($row['user_email'])); |
$emailer->use_template("admin_activate", $row['user_lang']); |
$emailer->set_subject($lang['New_account_subject']); |
$emailer->assign_vars(array( |
'USERNAME' => preg_replace($unhtml_specialchars_match, $unhtml_specialchars_replace, substr(str_replace("\'", "'", $username), 0, 25)), |
'EMAIL_SIG' => str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']), |
'U_ACTIVATE' => $server_url . '?mode=activate&' . POST_USERS_URL . '=' . $user_id . '&act_key=' . $user_actkey) |
); |
$emailer->send(); |
$emailer->reset(); |
} |
$db->sql_freeresult($result); |
} |
$message = $message . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>'); |
message_die(GENERAL_MESSAGE, $message); |
} // if mode == register |
} |
} // End of submit |
if ( $error ) |
{ |
// |
// If an error occured we need to stripslashes on returned data |
// |
$username = stripslashes($username); |
$email = stripslashes($email); |
$cur_password = ''; |
$new_password = ''; |
$password_confirm = ''; |
$icq = stripslashes($icq); |
$aim = str_replace('+', ' ', stripslashes($aim)); |
$msn = stripslashes($msn); |
$yim = stripslashes($yim); |
$website = stripslashes($website); |
$location = stripslashes($location); |
$occupation = stripslashes($occupation); |
$interests = stripslashes($interests); |
$signature = stripslashes($signature); |
$signature = ($signature_bbcode_uid != '') ? preg_replace("/:(([a-z0-9]+:)?)$signature_bbcode_uid(=|\])/si", '\\3', $signature) : $signature; |
$user_lang = stripslashes($user_lang); |
$user_dateformat = stripslashes($user_dateformat); |
} |
else if ( $mode == 'editprofile' && !isset($HTTP_POST_VARS['avatargallery']) && !isset($HTTP_POST_VARS['submitavatar']) && !isset($HTTP_POST_VARS['cancelavatar']) ) |
{ |
$user_id = $userdata['user_id']; |
$username = $userdata['username']; |
$email = $userdata['user_email']; |
$cur_password = ''; |
$new_password = ''; |
$password_confirm = ''; |
$icq = $userdata['user_icq']; |
$aim = str_replace('+', ' ', $userdata['user_aim']); |
$msn = $userdata['user_msnm']; |
$yim = $userdata['user_yim']; |
$website = $userdata['user_website']; |
$location = $userdata['user_from']; |
$occupation = $userdata['user_occ']; |
$interests = $userdata['user_interests']; |
$signature_bbcode_uid = $userdata['user_sig_bbcode_uid']; |
$signature = ($signature_bbcode_uid != '') ? preg_replace("/:(([a-z0-9]+:)?)$signature_bbcode_uid(=|\])/si", '\\3', $userdata['user_sig']) : $userdata['user_sig']; |
$viewemail = $userdata['user_viewemail']; |
$notifypm = $userdata['user_notify_pm']; |
$popup_pm = $userdata['user_popup_pm']; |
$notifyreply = $userdata['user_notify']; |
$attachsig = $userdata['user_attachsig']; |
$allowhtml = $userdata['user_allowhtml']; |
$allowbbcode = $userdata['user_allowbbcode']; |
$allowsmilies = $userdata['user_allowsmile']; |
$allowviewonline = $userdata['user_allow_viewonline']; |
$user_avatar = ( $userdata['user_allowavatar'] ) ? $userdata['user_avatar'] : ''; |
$user_avatar_type = ( $userdata['user_allowavatar'] ) ? $userdata['user_avatar_type'] : USER_AVATAR_NONE; |
$user_style = $userdata['user_style']; |
$user_lang = $userdata['user_lang']; |
$user_timezone = $userdata['user_timezone']; |
$user_dateformat = $userdata['user_dateformat']; |
} |
// |
// Default pages |
// |
include($phpbb_root_path . 'includes/page_header.'.$phpEx); |
make_jumpbox('viewforum.'.$phpEx); |
if ( $mode == 'editprofile' ) |
{ |
if ( $user_id != $userdata['user_id'] ) |
{ |
$error = TRUE; |
$error_msg = $lang['Wrong_Profile']; |
} |
} |
if( isset($HTTP_POST_VARS['avatargallery']) && !$error ) |
{ |
include($phpbb_root_path . 'includes/usercp_avatar.'.$phpEx); |
$avatar_category = ( !empty($HTTP_POST_VARS['avatarcategory']) ) ? htmlspecialchars($HTTP_POST_VARS['avatarcategory']) : ''; |
$template->set_filenames(array( |
'body' => 'profile_avatar_gallery.tpl') |
); |
$allowviewonline = !$allowviewonline; |
display_avatar_gallery($mode, $avatar_category, $user_id, $email, $current_email, $coppa, $username, $email, $new_password, $cur_password, $password_confirm, $icq, $aim, $msn, $yim, $website, $location, $occupation, $interests, $signature, $viewemail, $notifypm, $popup_pm, $notifyreply, $attachsig, $allowhtml, $allowbbcode, $allowsmilies, $allowviewonline, $user_style, $user_lang, $user_timezone, $user_dateformat, $userdata['session_id']); |
} |
else |
{ |
include($phpbb_root_path . 'includes/functions_selects.'.$phpEx); |
if ( !isset($coppa) ) |
{ |
$coppa = FALSE; |
} |
if ( !isset($user_style) ) |
{ |
$user_style = $board_config['default_style']; |
} |
$avatar_img = ''; |
if ( $user_avatar_type ) |
{ |
switch( $user_avatar_type ) |
{ |
case USER_AVATAR_UPLOAD: |
$avatar_img = ( $board_config['allow_avatar_upload'] ) ? '<img src="' . $board_config['avatar_path'] . '/' . $user_avatar . '" alt="" />' : ''; |
break; |
case USER_AVATAR_REMOTE: |
$avatar_img = ( $board_config['allow_avatar_remote'] ) ? '<img src="' . $user_avatar . '" alt="" />' : ''; |
break; |
case USER_AVATAR_GALLERY: |
$avatar_img = ( $board_config['allow_avatar_local'] ) ? '<img src="' . $board_config['avatar_gallery_path'] . '/' . $user_avatar . '" alt="" />' : ''; |
break; |
} |
} |
$s_hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" /><input type="hidden" name="agreed" value="true" /><input type="hidden" name="coppa" value="' . $coppa . '" />'; |
if( $mode == 'editprofile' ) |
{ |
$s_hidden_fields .= '<input type="hidden" name="user_id" value="' . $userdata['user_id'] . '" />'; |
// |
// Send the users current email address. If they change it, and account activation is turned on |
// the user account will be disabled and the user will have to reactivate their account. |
// |
$s_hidden_fields .= '<input type="hidden" name="current_email" value="' . $userdata['user_email'] . '" />'; |
} |
if ( !empty($user_avatar_local) ) |
{ |
$s_hidden_fields .= '<input type="hidden" name="avatarlocal" value="' . $user_avatar_local . '" /><input type="hidden" name="avatarcatname" value="' . $user_avatar_category . '" />'; |
} |
$html_status = ( $userdata['user_allowhtml'] && $board_config['allow_html'] ) ? $lang['HTML_is_ON'] : $lang['HTML_is_OFF']; |
$bbcode_status = ( $userdata['user_allowbbcode'] && $board_config['allow_bbcode'] ) ? $lang['BBCode_is_ON'] : $lang['BBCode_is_OFF']; |
$smilies_status = ( $userdata['user_allowsmile'] && $board_config['allow_smilies'] ) ? $lang['Smilies_are_ON'] : $lang['Smilies_are_OFF']; |
if ( $error ) |
{ |
$template->set_filenames(array( |
'reg_header' => 'error_body.tpl') |
); |
$template->assign_vars(array( |
'ERROR_MESSAGE' => $error_msg) |
); |
$template->assign_var_from_handle('ERROR_BOX', 'reg_header'); |
} |
$template->set_filenames(array( |
'body' => 'profile_add_body.tpl') |
); |
if ( $mode == 'editprofile' ) |
{ |
$template->assign_block_vars('switch_edit_profile', array()); |
} |
if ( ($mode == 'register') || ($board_config['allow_namechange']) ) |
{ |
$template->assign_block_vars('switch_namechange_allowed', array()); |
} |
else |
{ |
$template->assign_block_vars('switch_namechange_disallowed', array()); |
} |
// Visual Confirmation |
$confirm_image = ''; |
if (!empty($board_config['enable_confirm']) && $mode == 'register') |
{ |
$sql = 'SELECT session_id |
FROM ' . SESSIONS_TABLE; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(GENERAL_ERROR, 'Could not select session data', '', __LINE__, __FILE__, $sql); |
} |
if ($row = $db->sql_fetchrow($result)) |
{ |
$confirm_sql = ''; |
do |
{ |
$confirm_sql .= (($confirm_sql != '') ? ', ' : '') . "'" . $row['session_id'] . "'"; |
} |
while ($row = $db->sql_fetchrow($result)); |
$sql = 'DELETE FROM ' . CONFIRM_TABLE . " |
WHERE session_id NOT IN ($confirm_sql)"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Could not delete stale confirm data', '', __LINE__, __FILE__, $sql); |
} |
} |
$db->sql_freeresult($result); |
$sql = 'SELECT COUNT(session_id) AS attempts |
FROM ' . CONFIRM_TABLE . " |
WHERE session_id = '" . $userdata['session_id'] . "'"; |
if (!($result = $db->sql_query($sql))) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain confirm code count', '', __LINE__, __FILE__, $sql); |
} |
if ($row = $db->sql_fetchrow($result)) |
{ |
if ($row['attempts'] > 3) |
{ |
message_die(GENERAL_MESSAGE, $lang['Too_many_registers']); |
} |
} |
$db->sql_freeresult($result); |
// Generate the required confirmation code |
// NB 0 (zero) could get confused with O (the letter) so we make change it |
$code = dss_rand(); |
$code = substr(str_replace('0', 'Z', strtoupper(base_convert($code, 16, 35))), 2, 6); |
$confirm_id = md5(uniqid($user_ip)); |
$sql = 'INSERT INTO ' . CONFIRM_TABLE . " (confirm_id, session_id, code) |
VALUES ('$confirm_id', '". $userdata['session_id'] . "', '$code')"; |
if (!$db->sql_query($sql)) |
{ |
message_die(GENERAL_ERROR, 'Could not insert new confirm code information', '', __LINE__, __FILE__, $sql); |
} |
unset($code); |
$confirm_image = '<img src="' . append_sid("profile.$phpEx?mode=confirm&id=$confirm_id") . '" alt="" title="" />'; |
$s_hidden_fields .= '<input type="hidden" name="confirm_id" value="' . $confirm_id . '" />'; |
$template->assign_block_vars('switch_confirm', array()); |
} |
// |
// Let's do an overall check for settings/versions which would prevent |
// us from doing file uploads.... |
// |
$ini_val = ( phpversion() >= '4.0.0' ) ? 'ini_get' : 'get_cfg_var'; |
$form_enctype = ( @$ini_val('file_uploads') == '0' || strtolower(@$ini_val('file_uploads') == 'off') || phpversion() == '4.0.4pl1' || !$board_config['allow_avatar_upload'] || ( phpversion() < '4.0.3' && @$ini_val('open_basedir') != '' ) ) ? '' : 'enctype="multipart/form-data"'; |
$template->assign_vars(array( |
'USERNAME' => isset($username) ? $username : '', |
'CUR_PASSWORD' => isset($cur_password) ? $cur_password : '', |
'NEW_PASSWORD' => isset($new_password) ? $new_password : '', |
'PASSWORD_CONFIRM' => isset($password_confirm) ? $password_confirm : '', |
'EMAIL' => isset($email) ? $email : '', |
'CONFIRM_IMG' => $confirm_image, |
'YIM' => $yim, |
'ICQ' => $icq, |
'MSN' => $msn, |
'AIM' => $aim, |
'OCCUPATION' => $occupation, |
'INTERESTS' => $interests, |
'LOCATION' => $location, |
'WEBSITE' => $website, |
'SIGNATURE' => str_replace('<br />', "\n", $signature), |
'VIEW_EMAIL_YES' => ( $viewemail ) ? 'checked="checked"' : '', |
'VIEW_EMAIL_NO' => ( !$viewemail ) ? 'checked="checked"' : '', |
'HIDE_USER_YES' => ( !$allowviewonline ) ? 'checked="checked"' : '', |
'HIDE_USER_NO' => ( $allowviewonline ) ? 'checked="checked"' : '', |
'NOTIFY_PM_YES' => ( $notifypm ) ? 'checked="checked"' : '', |
'NOTIFY_PM_NO' => ( !$notifypm ) ? 'checked="checked"' : '', |
'POPUP_PM_YES' => ( $popup_pm ) ? 'checked="checked"' : '', |
'POPUP_PM_NO' => ( !$popup_pm ) ? 'checked="checked"' : '', |
'ALWAYS_ADD_SIGNATURE_YES' => ( $attachsig ) ? 'checked="checked"' : '', |
'ALWAYS_ADD_SIGNATURE_NO' => ( !$attachsig ) ? 'checked="checked"' : '', |
'NOTIFY_REPLY_YES' => ( $notifyreply ) ? 'checked="checked"' : '', |
'NOTIFY_REPLY_NO' => ( !$notifyreply ) ? 'checked="checked"' : '', |
'ALWAYS_ALLOW_BBCODE_YES' => ( $allowbbcode ) ? 'checked="checked"' : '', |
'ALWAYS_ALLOW_BBCODE_NO' => ( !$allowbbcode ) ? 'checked="checked"' : '', |
'ALWAYS_ALLOW_HTML_YES' => ( $allowhtml ) ? 'checked="checked"' : '', |
'ALWAYS_ALLOW_HTML_NO' => ( !$allowhtml ) ? 'checked="checked"' : '', |
'ALWAYS_ALLOW_SMILIES_YES' => ( $allowsmilies ) ? 'checked="checked"' : '', |
'ALWAYS_ALLOW_SMILIES_NO' => ( !$allowsmilies ) ? 'checked="checked"' : '', |
'ALLOW_AVATAR' => $board_config['allow_avatar_upload'], |
'AVATAR' => $avatar_img, |
'AVATAR_SIZE' => $board_config['avatar_filesize'], |
'LANGUAGE_SELECT' => language_select($user_lang, 'language'), |
'STYLE_SELECT' => style_select($user_style, 'style'), |
'TIMEZONE_SELECT' => tz_select($user_timezone, 'timezone'), |
'DATE_FORMAT' => $user_dateformat, |
'HTML_STATUS' => $html_status, |
'BBCODE_STATUS' => sprintf($bbcode_status, '<a href="' . append_sid("faq.$phpEx?mode=bbcode") . '" target="_phpbbcode">', '</a>'), |
'SMILIES_STATUS' => $smilies_status, |
'L_CURRENT_PASSWORD' => $lang['Current_password'], |
'L_NEW_PASSWORD' => ( $mode == 'register' ) ? $lang['Password'] : $lang['New_password'], |
'L_CONFIRM_PASSWORD' => $lang['Confirm_password'], |
'L_CONFIRM_PASSWORD_EXPLAIN' => ( $mode == 'editprofile' ) ? $lang['Confirm_password_explain'] : '', |
'L_PASSWORD_IF_CHANGED' => ( $mode == 'editprofile' ) ? $lang['password_if_changed'] : '', |
'L_PASSWORD_CONFIRM_IF_CHANGED' => ( $mode == 'editprofile' ) ? $lang['password_confirm_if_changed'] : '', |
'L_SUBMIT' => $lang['Submit'], |
'L_RESET' => $lang['Reset'], |
'L_ICQ_NUMBER' => $lang['ICQ'], |
'L_MESSENGER' => $lang['MSNM'], |
'L_YAHOO' => $lang['YIM'], |
'L_WEBSITE' => $lang['Website'], |
'L_AIM' => $lang['AIM'], |
'L_LOCATION' => $lang['Location'], |
'L_OCCUPATION' => $lang['Occupation'], |
'L_BOARD_LANGUAGE' => $lang['Board_lang'], |
'L_BOARD_STYLE' => $lang['Board_style'], |
'L_TIMEZONE' => $lang['Timezone'], |
'L_DATE_FORMAT' => $lang['Date_format'], |
'L_DATE_FORMAT_EXPLAIN' => $lang['Date_format_explain'], |
'L_YES' => $lang['Yes'], |
'L_NO' => $lang['No'], |
'L_INTERESTS' => $lang['Interests'], |
'L_ALWAYS_ALLOW_SMILIES' => $lang['Always_smile'], |
'L_ALWAYS_ALLOW_BBCODE' => $lang['Always_bbcode'], |
'L_ALWAYS_ALLOW_HTML' => $lang['Always_html'], |
'L_HIDE_USER' => $lang['Hide_user'], |
'L_ALWAYS_ADD_SIGNATURE' => $lang['Always_add_sig'], |
'L_AVATAR_PANEL' => $lang['Avatar_panel'], |
'L_AVATAR_EXPLAIN' => sprintf($lang['Avatar_explain'], $board_config['avatar_max_width'], $board_config['avatar_max_height'], (round($board_config['avatar_filesize'] / 1024))), |
'L_UPLOAD_AVATAR_FILE' => $lang['Upload_Avatar_file'], |
'L_UPLOAD_AVATAR_URL' => $lang['Upload_Avatar_URL'], |
'L_UPLOAD_AVATAR_URL_EXPLAIN' => $lang['Upload_Avatar_URL_explain'], |
'L_AVATAR_GALLERY' => $lang['Select_from_gallery'], |
'L_SHOW_GALLERY' => $lang['View_avatar_gallery'], |
'L_LINK_REMOTE_AVATAR' => $lang['Link_remote_Avatar'], |
'L_LINK_REMOTE_AVATAR_EXPLAIN' => $lang['Link_remote_Avatar_explain'], |
'L_DELETE_AVATAR' => $lang['Delete_Image'], |
'L_CURRENT_IMAGE' => $lang['Current_Image'], |
'L_SIGNATURE' => $lang['Signature'], |
'L_SIGNATURE_EXPLAIN' => sprintf($lang['Signature_explain'], $board_config['max_sig_chars']), |
'L_NOTIFY_ON_REPLY' => $lang['Always_notify'], |
'L_NOTIFY_ON_REPLY_EXPLAIN' => $lang['Always_notify_explain'], |
'L_NOTIFY_ON_PRIVMSG' => $lang['Notify_on_privmsg'], |
'L_POPUP_ON_PRIVMSG' => $lang['Popup_on_privmsg'], |
'L_POPUP_ON_PRIVMSG_EXPLAIN' => $lang['Popup_on_privmsg_explain'], |
'L_PREFERENCES' => $lang['Preferences'], |
'L_PUBLIC_VIEW_EMAIL' => $lang['Public_view_email'], |
'L_ITEMS_REQUIRED' => $lang['Items_required'], |
'L_REGISTRATION_INFO' => $lang['Registration_info'], |
'L_PROFILE_INFO' => $lang['Profile_info'], |
'L_PROFILE_INFO_NOTICE' => $lang['Profile_info_warn'], |
'L_EMAIL_ADDRESS' => $lang['Email_address'], |
'L_CONFIRM_CODE_IMPAIRED' => sprintf($lang['Confirm_code_impaired'], '<a href="mailto:' . $board_config['board_email'] . '">', '</a>'), |
'L_CONFIRM_CODE' => $lang['Confirm_code'], |
'L_CONFIRM_CODE_EXPLAIN' => $lang['Confirm_code_explain'], |
'S_ALLOW_AVATAR_UPLOAD' => $board_config['allow_avatar_upload'], |
'S_ALLOW_AVATAR_LOCAL' => $board_config['allow_avatar_local'], |
'S_ALLOW_AVATAR_REMOTE' => $board_config['allow_avatar_remote'], |
'S_HIDDEN_FIELDS' => $s_hidden_fields, |
'S_FORM_ENCTYPE' => $form_enctype, |
'S_PROFILE_ACTION' => append_sid("profile.$phpEx")) |
); |
// |
// This is another cheat using the block_var capability |
// of the templates to 'fake' an IF...ELSE...ENDIF solution |
// it works well :) |
// |
if ( $mode != 'register' ) |
{ |
if ( $userdata['user_allowavatar'] && ( $board_config['allow_avatar_upload'] || $board_config['allow_avatar_local'] || $board_config['allow_avatar_remote'] ) ) |
{ |
$template->assign_block_vars('switch_avatar_block', array() ); |
if ( $board_config['allow_avatar_upload'] && file_exists(@phpbb_realpath('./' . $board_config['avatar_path'])) ) |
{ |
if ( $form_enctype != '' ) |
{ |
$template->assign_block_vars('switch_avatar_block.switch_avatar_local_upload', array() ); |
} |
$template->assign_block_vars('switch_avatar_block.switch_avatar_remote_upload', array() ); |
} |
if ( $board_config['allow_avatar_remote'] ) |
{ |
$template->assign_block_vars('switch_avatar_block.switch_avatar_remote_link', array() ); |
} |
if ( $board_config['allow_avatar_local'] && file_exists(@phpbb_realpath('./' . $board_config['avatar_gallery_path'])) ) |
{ |
$template->assign_block_vars('switch_avatar_block.switch_avatar_local_gallery', array() ); |
} |
} |
} |
} |
$template->pparse('body'); |
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); |
?> |
/Forum/includes/usercp_sendpasswd.php |
---|
0,0 → 1,138 |
<?php |
/*************************************************************************** |
* usercp_sendpasswd.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: usercp_sendpasswd.php,v 1.6.2.13 2005/09/14 18:14:30 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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 ( isset($HTTP_POST_VARS['submit']) ) |
{ |
$username = ( !empty($HTTP_POST_VARS['username']) ) ? phpbb_clean_username($HTTP_POST_VARS['username']) : ''; |
$email = ( !empty($HTTP_POST_VARS['email']) ) ? trim(strip_tags(htmlspecialchars($HTTP_POST_VARS['email']))) : ''; |
$sql = "SELECT user_id, username, user_email, user_active, user_lang |
FROM " . USERS_TABLE . " |
WHERE user_email = '" . str_replace("\'", "''", $email) . "' |
AND username = '" . str_replace("\'", "''", $username) . "'"; |
if ( $result = $db->sql_query($sql) ) |
{ |
if ( $row = $db->sql_fetchrow($result) ) |
{ |
if ( !$row['user_active'] ) |
{ |
message_die(GENERAL_MESSAGE, $lang['No_send_account_inactive']); |
} |
$username = $row['username']; |
$user_id = $row['user_id']; |
$user_actkey = gen_rand_string(true); |
$key_len = 54 - strlen($server_url); |
$key_len = ($key_len > 6) ? $key_len : 6; |
$user_actkey = substr($user_actkey, 0, $key_len); |
$user_password = gen_rand_string(false); |
$sql = "UPDATE " . USERS_TABLE . " |
SET user_newpasswd = '" . md5($user_password) . "', user_actkey = '$user_actkey' |
WHERE user_id = " . $row['user_id']; |
if ( !$db->sql_query($sql) ) |
{ |
message_die(GENERAL_ERROR, 'Could not update new password information', '', __LINE__, __FILE__, $sql); |
} |
include($phpbb_root_path . 'includes/emailer.'.$phpEx); |
$emailer = new emailer($board_config['smtp_delivery']); |
$emailer->from($board_config['board_email']); |
$emailer->replyto($board_config['board_email']); |
$emailer->use_template('user_activate_passwd', $row['user_lang']); |
$emailer->email_address($row['user_email']); |
$emailer->set_subject($lang['New_password_activation']); |
$emailer->assign_vars(array( |
'SITENAME' => $board_config['sitename'], |
'USERNAME' => $username, |
'PASSWORD' => $user_password, |
'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) : '', |
'U_ACTIVATE' => $server_url . '?mode=activate&' . POST_USERS_URL . '=' . $user_id . '&act_key=' . $user_actkey) |
); |
$emailer->send(); |
$emailer->reset(); |
$template->assign_vars(array( |
'META' => '<meta http-equiv="refresh" content="15;url=' . append_sid("index.$phpEx") . '">') |
); |
$message = $lang['Password_updated'] . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>'); |
message_die(GENERAL_MESSAGE, $message); |
} |
else |
{ |
message_die(GENERAL_MESSAGE, $lang['No_email_match']); |
} |
} |
else |
{ |
message_die(GENERAL_ERROR, 'Could not obtain user information for sendpassword', '', __LINE__, __FILE__, $sql); |
} |
} |
else |
{ |
$username = ''; |
$email = ''; |
} |
// |
// Output basic page |
// |
include($phpbb_root_path . 'includes/page_header.'.$phpEx); |
$template->set_filenames(array( |
'body' => 'profile_send_pass.tpl') |
); |
make_jumpbox('viewforum.'.$phpEx); |
$template->assign_vars(array( |
'USERNAME' => $username, |
'EMAIL' => $email, |
'L_SEND_PASSWORD' => $lang['Send_password'], |
'L_ITEMS_REQUIRED' => $lang['Items_required'], |
'L_EMAIL_ADDRESS' => $lang['Email_address'], |
'L_SUBMIT' => $lang['Submit'], |
'L_RESET' => $lang['Reset'], |
'S_HIDDEN_FIELDS' => '', |
'S_PROFILE_ACTION' => append_sid("profile.$phpEx?mode=sendpassword")) |
); |
$template->pparse('body'); |
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); |
?> |
/Forum/includes/usercp_viewprofile.php |
---|
0,0 → 1,249 |
<?php |
/*************************************************************************** |
* usercp_viewprofile.php |
* ------------------- |
* begin : Saturday, Feb 13, 2001 |
* copyright : (C) 2001 The phpBB Group |
* email : support@phpbb.com |
* |
* $Id: usercp_viewprofile.php,v 1.5.2.6 2005/09/14 18:14:30 acydburn Exp $ |
* |
* |
***************************************************************************/ |
/*************************************************************************** |
* |
* 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($HTTP_GET_VARS[POST_USERS_URL]) || $HTTP_GET_VARS[POST_USERS_URL] == ANONYMOUS ) |
{ |
message_die(GENERAL_MESSAGE, $lang['No_user_id_specified']); |
} |
$profiledata = get_userdata($HTTP_GET_VARS[POST_USERS_URL]); |
if (!$profiledata) |
{ |
message_die(GENERAL_MESSAGE, $lang['No_user_id_specified']); |
} |
$sql = "SELECT * |
FROM " . RANKS_TABLE . " |
ORDER BY rank_special, rank_min"; |
if ( !($result = $db->sql_query($sql)) ) |
{ |
message_die(GENERAL_ERROR, 'Could not obtain ranks information', '', __LINE__, __FILE__, $sql); |
} |
$ranksrow = array(); |
while ( $row = $db->sql_fetchrow($result) ) |
{ |
$ranksrow[] = $row; |
} |
$db->sql_freeresult($result); |
// |
// Output page header and profile_view template |
// |
$template->set_filenames(array( |
'body' => 'profile_view_body.tpl') |
); |
make_jumpbox('viewforum.'.$phpEx); |
// |
// Calculate the number of days this user has been a member ($memberdays) |
// Then calculate their posts per day |
// |
$regdate = $profiledata['user_regdate']; |
$memberdays = max(1, round( ( time() - $regdate ) / 86400 )); |
$posts_per_day = $profiledata['user_posts'] / $memberdays; |
// Get the users percentage of total posts |
if ( $profiledata['user_posts'] != 0 ) |
{ |
$total_posts = get_db_stat('postcount'); |
$percentage = ( $total_posts ) ? min(100, ($profiledata['user_posts'] / $total_posts) * 100) : 0; |
} |
else |
{ |
$percentage = 0; |
} |
$avatar_img = ''; |
if ( $profiledata['user_avatar_type'] && $profiledata['user_allowavatar'] ) |
{ |
switch( $profiledata['user_avatar_type'] ) |
{ |
case USER_AVATAR_UPLOAD: |
$avatar_img = ( $board_config['allow_avatar_upload'] ) ? '<img src="' . $board_config['avatar_path'] . '/' . $profiledata['user_avatar'] . '" alt="" border="0" />' : ''; |
break; |
case USER_AVATAR_REMOTE: |
$avatar_img = ( $board_config['allow_avatar_remote'] ) ? '<img src="' . $profiledata['user_avatar'] . '" alt="" border="0" />' : ''; |
break; |
case USER_AVATAR_GALLERY: |
$avatar_img = ( $board_config['allow_avatar_local'] ) ? '<img src="' . $board_config['avatar_gallery_path'] . '/' . $profiledata['user_avatar'] . '" alt="" border="0" />' : ''; |
break; |
} |
} |
$poster_rank = ''; |
$rank_image = ''; |
if ( $profiledata['user_rank'] ) |
{ |
for($i = 0; $i < count($ranksrow); $i++) |
{ |
if ( $profiledata['user_rank'] == $ranksrow[$i]['rank_id'] && $ranksrow[$i]['rank_special'] ) |
{ |
$poster_rank = $ranksrow[$i]['rank_title']; |
$rank_image = ( $ranksrow[$i]['rank_image'] ) ? '<img src="' . $ranksrow[$i]['rank_image'] . '" alt="' . $poster_rank . '" title="' . $poster_rank . '" border="0" /><br />' : ''; |
} |
} |
} |
else |
{ |
for($i = 0; $i < count($ranksrow); $i++) |
{ |
if ( $profiledata['user_posts'] >= $ranksrow[$i]['rank_min'] && !$ranksrow[$i]['rank_special'] ) |
{ |
$poster_rank = $ranksrow[$i]['rank_title']; |
$rank_image = ( $ranksrow[$i]['rank_image'] ) ? '<img src="' . $ranksrow[$i]['rank_image'] . '" alt="' . $poster_rank . '" title="' . $poster_rank . '" border="0" /><br />' : ''; |
} |
} |
} |
$temp_url = append_sid("privmsg.$phpEx?mode=post&" . POST_USERS_URL . "=" . $profiledata['user_id']); |
$pm_img = '<a href="' . $temp_url . '"><img src="' . $images['icon_pm'] . '" alt="' . $lang['Send_private_message'] . '" title="' . $lang['Send_private_message'] . '" border="0" /></a>'; |
$pm = '<a href="' . $temp_url . '">' . $lang['Send_private_message'] . '</a>'; |
if ( !empty($profiledata['user_viewemail']) || $userdata['user_level'] == ADMIN ) |
{ |
$email_uri = ( $board_config['board_email_form'] ) ? append_sid("profile.$phpEx?mode=email&" . POST_USERS_URL .'=' . $profiledata['user_id']) : 'mailto:' . $profiledata['user_email']; |
$email_img = '<a href="' . $email_uri . '"><img src="' . $images['icon_email'] . '" alt="' . $lang['Send_email'] . '" title="' . $lang['Send_email'] . '" border="0" /></a>'; |
$email = '<a href="' . $email_uri . '">' . $lang['Send_email'] . '</a>'; |
} |
else |
{ |
$email_img = ' '; |
$email = ' '; |
} |
$www_img = ( $profiledata['user_website'] ) ? '<a href="' . $profiledata['user_website'] . '" target="_userwww"><img src="' . $images['icon_www'] . '" alt="' . $lang['Visit_website'] . '" title="' . $lang['Visit_website'] . '" border="0" /></a>' : ' '; |
$www = ( $profiledata['user_website'] ) ? '<a href="' . $profiledata['user_website'] . '" target="_userwww">' . $profiledata['user_website'] . '</a>' : ' '; |
if ( !empty($profiledata['user_icq']) ) |
{ |
$icq_status_img = '<a href="http://wwp.icq.com/' . $profiledata['user_icq'] . '#pager"><img src="http://web.icq.com/whitepages/online?icq=' . $profiledata['user_icq'] . '&img=5" width="18" height="18" border="0" /></a>'; |
$icq_img = '<a href="http://wwp.icq.com/scripts/search.dll?to=' . $profiledata['user_icq'] . '"><img src="' . $images['icon_icq'] . '" alt="' . $lang['ICQ'] . '" title="' . $lang['ICQ'] . '" border="0" /></a>'; |
$icq = '<a href="http://wwp.icq.com/scripts/search.dll?to=' . $profiledata['user_icq'] . '">' . $lang['ICQ'] . '</a>'; |
} |
else |
{ |
$icq_status_img = ' '; |
$icq_img = ' '; |
$icq = ' '; |
} |
$aim_img = ( $profiledata['user_aim'] ) ? '<a href="aim:goim?screenname=' . $profiledata['user_aim'] . '&message=Hello+Are+you+there?"><img src="' . $images['icon_aim'] . '" alt="' . $lang['AIM'] . '" title="' . $lang['AIM'] . '" border="0" /></a>' : ' '; |
$aim = ( $profiledata['user_aim'] ) ? '<a href="aim:goim?screenname=' . $profiledata['user_aim'] . '&message=Hello+Are+you+there?">' . $lang['AIM'] . '</a>' : ' '; |
$msn_img = ( $profiledata['user_msnm'] ) ? $profiledata['user_msnm'] : ' '; |
$msn = $msn_img; |
$yim_img = ( $profiledata['user_yim'] ) ? '<a href="http://edit.yahoo.com/config/send_webmesg?.target=' . $profiledata['user_yim'] . '&.src=pg"><img src="' . $images['icon_yim'] . '" alt="' . $lang['YIM'] . '" title="' . $lang['YIM'] . '" border="0" /></a>' : ''; |
$yim = ( $profiledata['user_yim'] ) ? '<a href="http://edit.yahoo.com/config/send_webmesg?.target=' . $profiledata['user_yim'] . '&.src=pg">' . $lang['YIM'] . '</a>' : ''; |
$temp_url = append_sid("search.$phpEx?search_author=" . urlencode($profiledata['username']) . "&showresults=posts"); |
$search_img = '<a href="' . $temp_url . '"><img src="' . $images['icon_search'] . '" alt="' . sprintf($lang['Search_user_posts'], $profiledata['username']) . '" title="' . sprintf($lang['Search_user_posts'], $profiledata['username']) . '" border="0" /></a>'; |
$search = '<a href="' . $temp_url . '">' . sprintf($lang['Search_user_posts'], $profiledata['username']) . '</a>'; |
// |
// Generate page |
// |
$page_title = $lang['Viewing_profile']; |
include($phpbb_root_path . 'includes/page_header.'.$phpEx); |
if (function_exists('get_html_translation_table')) |
{ |
$u_search_author = urlencode(strtr($profiledata['username'], array_flip(get_html_translation_table(HTML_ENTITIES)))); |
} |
else |
{ |
$u_search_author = urlencode(str_replace(array('&', ''', '"', '<', '>'), array('&', "'", '"', '<', '>'), $profiledata['username'])); |
} |
$template->assign_vars(array( |
'USERNAME' => $profiledata['username'], |
'JOINED' => create_date($lang['DATE_FORMAT'], $profiledata['user_regdate'], $board_config['board_timezone']), |
'POSTER_RANK' => $poster_rank, |
'RANK_IMAGE' => $rank_image, |
'POSTS_PER_DAY' => $posts_per_day, |
'POSTS' => $profiledata['user_posts'], |
'PERCENTAGE' => $percentage . '%', |
'POST_DAY_STATS' => sprintf($lang['User_post_day_stats'], $posts_per_day), |
'POST_PERCENT_STATS' => sprintf($lang['User_post_pct_stats'], $percentage), |
'SEARCH_IMG' => $search_img, |
'SEARCH' => $search, |
'PM_IMG' => $pm_img, |
'PM' => $pm, |
'EMAIL_IMG' => $email_img, |
'EMAIL' => $email, |
'WWW_IMG' => $www_img, |
'WWW' => $www, |
'ICQ_STATUS_IMG' => $icq_status_img, |
'ICQ_IMG' => $icq_img, |
'ICQ' => $icq, |
'AIM_IMG' => $aim_img, |
'AIM' => $aim, |
'MSN_IMG' => $msn_img, |
'MSN' => $msn, |
'YIM_IMG' => $yim_img, |
'YIM' => $yim, |
'LOCATION' => ( $profiledata['user_from'] ) ? $profiledata['user_from'] : ' ', |
'OCCUPATION' => ( $profiledata['user_occ'] ) ? $profiledata['user_occ'] : ' ', |
'INTERESTS' => ( $profiledata['user_interests'] ) ? $profiledata['user_interests'] : ' ', |
'AVATAR_IMG' => $avatar_img, |
'L_VIEWING_PROFILE' => sprintf($lang['Viewing_user_profile'], $profiledata['username']), |
'L_ABOUT_USER' => sprintf($lang['About_user'], $profiledata['username']), |
'L_AVATAR' => $lang['Avatar'], |
'L_POSTER_RANK' => $lang['Poster_rank'], |
'L_JOINED' => $lang['Joined'], |
'L_TOTAL_POSTS' => $lang['Total_posts'], |
'L_SEARCH_USER_POSTS' => sprintf($lang['Search_user_posts'], $profiledata['username']), |
'L_CONTACT' => $lang['Contact'], |
'L_EMAIL_ADDRESS' => $lang['Email_address'], |
'L_EMAIL' => $lang['Email'], |
'L_PM' => $lang['Private_Message'], |
'L_ICQ_NUMBER' => $lang['ICQ'], |
'L_YAHOO' => $lang['YIM'], |
'L_AIM' => $lang['AIM'], |
'L_MESSENGER' => $lang['MSNM'], |
'L_WEBSITE' => $lang['Website'], |
'L_LOCATION' => $lang['Location'], |
'L_OCCUPATION' => $lang['Occupation'], |
'L_INTERESTS' => $lang['Interests'], |
'U_SEARCH_USER' => append_sid("search.$phpEx?search_author=" . $u_search_author), |
'S_PROFILE_ACTION' => append_sid("profile.$phpEx")) |
); |
$template->pparse('body'); |
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); |
?> |