ok, this one is rather large... the most important change:

re-introduce append_sid: old style continues to work, not a performance hog as it was in 2.0.x -> structure is different

apart from this, code cleanage, bug fixing, etc.


git-svn-id: file:///svn/phpbb/trunk@6015 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
Meik Sievertsen 2006-06-06 20:53:46 +00:00
parent 2c8afb820e
commit dd9ad539fd
148 changed files with 5142 additions and 3975 deletions

View file

@ -16,9 +16,9 @@ define('NEED_SID', true);
// Include files // Include files
$phpbb_root_path = './../'; $phpbb_root_path = './../';
$phpEx = substr(strrchr(__FILE__, '.'), 1); $phpEx = substr(strrchr(__FILE__, '.'), 1);
require($phpbb_root_path . 'common.'.$phpEx); require($phpbb_root_path . 'common.' . $phpEx);
require($phpbb_root_path . 'includes/functions_admin.'.$phpEx); require($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
require($phpbb_root_path . 'includes/functions_module.'.$phpEx); require($phpbb_root_path . 'includes/functions_module.' . $phpEx);
// Start session management // Start session management
$user->session_begin(); $user->session_begin();
@ -58,6 +58,7 @@ $mode = request_var('mode', '');
// Set custom template for admin area // Set custom template for admin area
$template->set_custom_template($phpbb_admin_path . 'style', 'admin'); $template->set_custom_template($phpbb_admin_path . 'style', 'admin');
$template->assign_var('T_TEMPLATE_PATH', $phpbb_admin_path . 'style'); $template->assign_var('T_TEMPLATE_PATH', $phpbb_admin_path . 'style');
// the acp template is never stored in the database // the acp template is never stored in the database
$user->theme['template_storedb'] = false; $user->theme['template_storedb'] = false;
@ -75,7 +76,7 @@ $module->set_active($module_id, $mode);
// Assign data to the template engine for the list of modules // Assign data to the template engine for the list of modules
// We do this before loading the active module for correct menu display in trigger_error // We do this before loading the active module for correct menu display in trigger_error
$module->assign_tpl_vars("{$phpbb_admin_path}index.$phpEx$SID"); $module->assign_tpl_vars(append_sid("{$phpbb_admin_path}index.$phpEx"));
// Load and execute the relevant module // Load and execute the relevant module
$module->load_active(); $module->load_active();
@ -89,19 +90,19 @@ $template->set_filenames(array(
adm_page_footer(); adm_page_footer();
// --------- /**
// FUNCTIONS * Header for acp pages
// */
function adm_page_header($page_title) function adm_page_header($page_title)
{ {
global $config, $db, $user, $template; global $config, $db, $user, $template;
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $SID; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $SID, $_SID;
if (defined('HEADER_INC')) if (defined('HEADER_INC'))
{ {
return; return;
} }
define('HEADER_INC', true); define('HEADER_INC', true);
// gzip_compression // gzip_compression
@ -116,17 +117,20 @@ function adm_page_header($page_title)
$template->assign_vars(array( $template->assign_vars(array(
'PAGE_TITLE' => $page_title, 'PAGE_TITLE' => $page_title,
'USERNAME' => $user->data['username'], 'USERNAME' => $user->data['username'],
'SID' => $SID,
'_SID' => $_SID,
'SESSION_ID' => $user->session_id,
'ROOT_PATH' => $phpbb_admin_path, 'ROOT_PATH' => $phpbb_admin_path,
'U_LOGOUT' => "{$phpbb_root_path}ucp.$phpEx$SID&mode=logout", 'U_LOGOUT' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=logout'),
'U_ADM_INDEX' => "{$phpbb_admin_path}index.$phpEx$SID", 'U_ADM_INDEX' => append_sid("{$phpbb_admin_path}index.$phpEx"),
'U_INDEX' => "{$phpbb_root_path}index.$phpEx$SID", 'U_INDEX' => append_sid("{$phpbb_root_path}index.$phpEx"),
'S_CONTENT_DIRECTION' => $user->lang['DIRECTION'], 'S_CONTENT_DIRECTION' => $user->lang['DIRECTION'],
'S_CONTENT_ENCODING' => $user->lang['ENCODING'], 'S_CONTENT_ENCODING' => $user->lang['ENCODING'],
'S_CONTENT_DIR_LEFT' => $user->lang['LEFT'], 'S_CONTENT_DIR_LEFT' => $user->lang['LEFT'],
'S_CONTENT_DIR_RIGHT' => $user->lang['RIGHT'], 'S_CONTENT_DIR_RIGHT' => $user->lang['RIGHT'])
)
); );
if (!empty($config['send_encoding'])) if (!empty($config['send_encoding']))
@ -140,10 +144,13 @@ function adm_page_header($page_title)
return; return;
} }
/**
* Page footer for acp pages
*/
function adm_page_footer($copyright_html = true) function adm_page_footer($copyright_html = true)
{ {
global $db, $config, $template, $user, $auth, $cache; global $db, $config, $template, $user, $auth, $cache;
global $SID, $starttime, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $starttime, $phpbb_root_path, $phpbb_admin_path, $phpEx;
// Output page creation time // Output page creation time
if (defined('DEBUG')) if (defined('DEBUG'))
@ -179,8 +186,7 @@ function adm_page_footer($copyright_html = true)
$template->assign_vars(array( $template->assign_vars(array(
'DEBUG_OUTPUT' => (defined('DEBUG')) ? $debug_output : '', 'DEBUG_OUTPUT' => (defined('DEBUG')) ? $debug_output : '',
'S_COPYRIGHT_HTML' => $copyright_html, 'S_COPYRIGHT_HTML' => $copyright_html,
'VERSION' => $config['version'] 'VERSION' => $config['version'])
)
); );
$template->display('body'); $template->display('body');
@ -197,12 +203,18 @@ function adm_page_footer($copyright_html = true)
exit; exit;
} }
/**
* Generate back link for acp pages
*/
function adm_back_link($u_action) function adm_back_link($u_action)
{ {
global $user; global $user;
return '<br /><br /><a href="' . $u_action . '">&laquo; ' . $user->lang['BACK_TO_PREV'] . '</a>'; return '<br /><br /><a href="' . $u_action . '">&laquo; ' . $user->lang['BACK_TO_PREV'] . '</a>';
} }
/**
* Build select field options in acp pages
*/
function build_select($option_ary, $option_default = false) function build_select($option_ary, $option_default = false)
{ {
global $user; global $user;
@ -217,6 +229,9 @@ function build_select($option_ary, $option_default = false)
return $html; return $html;
} }
/**
* Build radio fields in acp pages
*/
function h_radio($name, &$input_ary, $input_default = false, $id = false, $key = false) function h_radio($name, &$input_ary, $input_default = false, $id = false, $key = false)
{ {
global $user; global $user;
@ -234,6 +249,9 @@ function h_radio($name, &$input_ary, $input_default = false, $id = false, $key =
return $html; return $html;
} }
/**
* Build configuration template for acp configuration pages
*/
function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars) function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars)
{ {
global $user, $module; global $user, $module;
@ -249,21 +267,21 @@ function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars)
$maxlength = (int) $tpl_type[2]; $maxlength = (int) $tpl_type[2];
$tpl = '<input id="' . $key . '" type="' . $tpl_type[0] . '"' . (($size) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength) ? $maxlength : 255) . '" name="' . $name . '" value="' . $new[$config_key] . '" />'; $tpl = '<input id="' . $key . '" type="' . $tpl_type[0] . '"' . (($size) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength) ? $maxlength : 255) . '" name="' . $name . '" value="' . $new[$config_key] . '" />';
break; break;
case 'dimension': case 'dimension':
$size = (int) $tpl_type[1]; $size = (int) $tpl_type[1];
$maxlength = (int) $tpl_type[2]; $maxlength = (int) $tpl_type[2];
$tpl = '<input id="' . $key . '" type="text"' . (($size) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength) ? $maxlength : 255) . '" name="config[' . $config_key . '_height]" value="' . $new[$config_key . '_height'] . '" /> x <input type="text"' . (($size) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength) ? $maxlength : 255) . '" name="config[' . $config_key . '_width]" value="' . $new[$config_key . '_width'] . '" />'; $tpl = '<input id="' . $key . '" type="text"' . (($size) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength) ? $maxlength : 255) . '" name="config[' . $config_key . '_height]" value="' . $new[$config_key . '_height'] . '" /> x <input type="text"' . (($size) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength) ? $maxlength : 255) . '" name="config[' . $config_key . '_width]" value="' . $new[$config_key . '_width'] . '" />';
break; break;
case 'textarea': case 'textarea':
$rows = (int) $tpl_type[1]; $rows = (int) $tpl_type[1];
$cols = (int) $tpl_type[2]; $cols = (int) $tpl_type[2];
$tpl = '<textarea id="' . $key . '" name="' . $name . '" rows="' . $rows . '" cols="' . $cols . '">' . $new[$config_key] . '</textarea>'; $tpl = '<textarea id="' . $key . '" name="' . $name . '" rows="' . $rows . '" cols="' . $cols . '">' . $new[$config_key] . '</textarea>';
break; break;
case 'radio': case 'radio':
$key_yes = ($new[$config_key]) ? ' checked="checked"' : ''; $key_yes = ($new[$config_key]) ? ' checked="checked"' : '';
@ -276,7 +294,7 @@ function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars)
$tpl_yes = '<input type="radio" id="' . $key . '" name="' . $name . '" value="1"' . $key_yes . ' class="radio" />&nbsp;' . (($type_no) ? $user->lang['YES'] : $user->lang['ENABLED']); $tpl_yes = '<input type="radio" id="' . $key . '" name="' . $name . '" value="1"' . $key_yes . ' class="radio" />&nbsp;' . (($type_no) ? $user->lang['YES'] : $user->lang['ENABLED']);
$tpl = ($tpl_type_cond[0] == 'yes' || $tpl_type_cond[0] == 'enabled') ? $tpl_yes . '&nbsp;&nbsp;' . $tpl_no : $tpl_no . '&nbsp;&nbsp;' . $tpl_yes; $tpl = ($tpl_type_cond[0] == 'yes' || $tpl_type_cond[0] == 'enabled') ? $tpl_yes . '&nbsp;&nbsp;' . $tpl_no : $tpl_no . '&nbsp;&nbsp;' . $tpl_yes;
break; break;
case 'select': case 'select':
case 'custom': case 'custom':
@ -295,7 +313,7 @@ function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars)
{ {
break; break;
} }
if (isset($vars['params'])) if (isset($vars['params']))
{ {
$args = array(); $args = array();
@ -331,17 +349,17 @@ function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars)
$tpl = $return; $tpl = $return;
} }
break; break;
default: default:
break; break;
} }
if (isset($vars['append'])) if (isset($vars['append']))
{ {
$tpl .= $vars['append']; $tpl .= $vars['append'];
} }
return $tpl; return $tpl;
} }

View file

@ -64,22 +64,22 @@
</fieldset> </fieldset>
<!-- IF not S_SECURE_DOWNLOADS --> <!-- IF not S_SECURE_DOWNLOADS -->
<div class="errorbox"> <div class="errorbox">
<p>{L_SECURE_DOWNLOAD_NOTICE}</p> <p>{L_SECURE_DOWNLOAD_NOTICE}</p>
</div> </div>
<!-- ENDIF --> <!-- ENDIF -->
<fieldset> <fieldset>
<legend>{L_SECURE_TITLE}</legend> <legend>{L_SECURE_TITLE}</legend>
<p>{L_DOWNLOAD_ADD_IPS_EXPLAIN}</p> <p>{L_DOWNLOAD_ADD_IPS_EXPLAIN}</p>
<dl> <dl>
<dt><label for="ip_hostname">{L_IP_HOSTNAME}:</label></dt> <dt><label for="ip_hostname">{L_IP_HOSTNAME}:</label></dt>
<dd><textarea id="ip_hostname" cols="40" rows="3" name="ips"></textarea></dd> <dd><textarea id="ip_hostname" cols="40" rows="3" name="ips"></textarea></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="exclude">{L_IP_EXCLUDE}:</label><br /><span>{L_EXCLUDE_ENTERED_IP}</span></dt> <dt><label for="exclude">{L_IP_EXCLUDE}:</label><br /><span>{L_EXCLUDE_ENTERED_IP}</span></dt>
<dd><input type="radio" id="exclude" name="ipexclude" value="1" class="radio" /> {L_YES} &nbsp; <input type="radio" name="ipexclude" value="0" checked="checked" class="radio" /> {L_NO}</dd> <dd><input type="radio" id="exclude" name="ipexclude" value="1" class="radio" /> {L_YES} &nbsp; <input type="radio" name="ipexclude" value="0" checked="checked" class="radio" /> {L_NO}</dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="quick"> <fieldset class="quick">
@ -89,16 +89,16 @@
<fieldset> <fieldset>
<legend>{L_REMOVE_IPS}</legend> <legend>{L_REMOVE_IPS}</legend>
<!-- IF S_DEFINED_IPS --> <!-- IF S_DEFINED_IPS -->
<p>{L_DOWNLOAD_REMOVE_IPS_EXPLAIN}</p> <p>{L_DOWNLOAD_REMOVE_IPS_EXPLAIN}</p>
<dl> <dl>
<dt><label for="remove_ip_hostname">{L_IP_HOSTNAME}:</label></dt> <dt><label for="remove_ip_hostname">{L_IP_HOSTNAME}:</label></dt>
<dd><select name="unip[]" id="remove_ip_hostname" multiple="multiple" size="10">{DEFINED_IPS}</select></dd> <dd><select name="unip[]" id="remove_ip_hostname" multiple="multiple" size="10">{DEFINED_IPS}</select></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="quick"> <fieldset class="quick">
<input class="button1" type="submit" id="unsecuresubmit" name="unsecuresubmit" value="{L_SUBMIT}" /> <input class="button1" type="submit" id="unsecuresubmit" name="unsecuresubmit" value="{L_SUBMIT}" />
</fieldset> </fieldset>
<!-- ELSE --> <!-- ELSE -->
<p>{L_NO_IPS_DEFINED}</p> <p>{L_NO_IPS_DEFINED}</p>
@ -166,47 +166,47 @@
<input type="hidden" name="g" value="{GROUP_ID}" /> <input type="hidden" name="g" value="{GROUP_ID}" />
<legend>{L_LEGEND}</legend> <legend>{L_LEGEND}</legend>
<dl> <dl>
<dt><label for="group_name">{L_GROUP_NAME}:</label></dt> <dt><label for="group_name">{L_GROUP_NAME}:</label></dt>
<dd><input type="text" id="group_name" size="20" maxlength="100" name="group_name" value="{GROUP_NAME}" /></dd> <dd><input type="text" id="group_name" size="20" maxlength="100" name="group_name" value="{GROUP_NAME}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="category">{L_SPECIAL_CATEGORY}:</label><br /><span>{L_SPECIAL_CATEGORY_EXPLAIN}</span></dt> <dt><label for="category">{L_SPECIAL_CATEGORY}:</label><br /><span>{L_SPECIAL_CATEGORY_EXPLAIN}</span></dt>
<dd>{S_CATEGORY_SELECT}</dd> <dd>{S_CATEGORY_SELECT}</dd>
</dl> </dl>
<dl> <dl>
<dt><label for="allowed">{L_ALLOWED}:</label></dt> <dt><label for="allowed">{L_ALLOWED}:</label></dt>
<dd><input type="checkbox" id="allowed" name="allow_group" value="1"<!-- IF ALLOW_GROUP --> checked="checked"<!-- ENDIF --> /></dd> <dd><input type="checkbox" id="allowed" name="allow_group" value="1"<!-- IF ALLOW_GROUP --> checked="checked"<!-- ENDIF --> /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="allow_in_pm">{L_ALLOW_IN_PM}:</label></dt> <dt><label for="allow_in_pm">{L_ALLOW_IN_PM}:</label></dt>
<dd><input type="checkbox" id="allow_in_pm" name="allow_in_pm" value="1"<!-- IF ALLOW_IN_PM --> checked="checked"<!-- ENDIF --> /></dd> <dd><input type="checkbox" id="allow_in_pm" name="allow_in_pm" value="1"<!-- IF ALLOW_IN_PM --> checked="checked"<!-- ENDIF --> /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="download_mode">{L_DOWNLOAD_MODE}:</label><br /><span>{L_DOWNLOAD_MODE_EXPLAIN}</span></dt> <dt><label for="download_mode">{L_DOWNLOAD_MODE}:</label><br /><span>{L_DOWNLOAD_MODE_EXPLAIN}</span></dt>
<dd>{S_DOWNLOAD_SELECT}</dd> <dd>{S_DOWNLOAD_SELECT}</dd>
</dl> </dl>
<dl> <dl>
<dt><label for="upload_icon">{L_UPLOAD_ICON}:</label></dt> <dt><label for="upload_icon">{L_UPLOAD_ICON}:</label></dt>
<dd><select name="upload_icon" id="upload_icon" onchange="update_image(this.options[selectedIndex].value);"> <dd><select name="upload_icon" id="upload_icon" onchange="update_image(this.options[selectedIndex].value);">
<option value="no_image"<!-- IF S_NO_IMAGE --> selected="selected"<!-- ENDIF -->>{L_NO_IMAGE}</option>{S_FILENAME_LIST} <option value="no_image"<!-- IF S_NO_IMAGE --> selected="selected"<!-- ENDIF -->>{L_NO_IMAGE}</option>{S_FILENAME_LIST}
</select></dd> </select></dd>
<dd>&nbsp;<img <!-- IF S_NO_IMAGE -->src="{PHPBB_ROOT_PATH}images/spacer.gif"<!-- ELSE -->src="{UPLOAD_ICON_SRC}"<!-- ENDIF --> name="image_upload_icon" alt="" title="" />&nbsp;</dd> <dd>&nbsp;<img <!-- IF S_NO_IMAGE -->src="{PHPBB_ROOT_PATH}images/spacer.gif"<!-- ELSE -->src="{UPLOAD_ICON_SRC}"<!-- ENDIF --> name="image_upload_icon" alt="" title="" />&nbsp;</dd>
</dl> </dl>
<dl> <dl>
<dt><label for="extgroup_filesize">{L_MAX_EXTGROUP_FILESIZE}:</label></dt> <dt><label for="extgroup_filesize">{L_MAX_EXTGROUP_FILESIZE}:</label></dt>
<dd><input type="text" id="extgroup_filesize" size="3" maxlength="15" name="max_filesize" value="{EXTGROUP_FILESIZE}" /> <select name="size_select">{S_EXT_GROUP_SIZE_OPTIONS}</select></dd> <dd><input type="text" id="extgroup_filesize" size="3" maxlength="15" name="max_filesize" value="{EXTGROUP_FILESIZE}" /> <select name="size_select">{S_EXT_GROUP_SIZE_OPTIONS}</select></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="assigned_extensions">{L_ASSIGNED_EXTENSIONS}:</label></dt> <dt><label for="assigned_extensions">{L_ASSIGNED_EXTENSIONS}:</label></dt>
<dd><div id="ext">{ASSIGNED_EXTENSIONS}</div> <span>[<a href="{U_EXTENSIONS}">{L_GO_TO_EXTENSIONS}</a> ]</span></dd> <dd><div id="ext">{ASSIGNED_EXTENSIONS}</div> <span>[<a href="{U_EXTENSIONS}">{L_GO_TO_EXTENSIONS}</a> ]</span></dd>
<dd><select name="extensions[]" id="assigned_extensions" class="narrow" onchange="show_extensions(this);" multiple="multiple" size="8">{S_EXTENSION_OPTIONS}</select></dd> <dd><select name="extensions[]" id="assigned_extensions" class="narrow" onchange="show_extensions(this);" multiple="multiple" size="8">{S_EXTENSION_OPTIONS}</select></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="allowed_forums">{L_ALLOWED_FORUMS}:</label><br /><span>{L_ALLOWED_FORUMS_EXPLAIN}</span></dt> <dt><label for="allowed_forums">{L_ALLOWED_FORUMS}:</label><br /><span>{L_ALLOWED_FORUMS_EXPLAIN}</span></dt>
<dd><input type="radio" id="allowed_forums" class="radio" name="forum_select" value="0"<!-- IF not S_FORUM_IDS --> checked="checked"<!-- ENDIF --> />&nbsp;{L_ALLOW_ALL_FORUMS}&nbsp;&nbsp;<input type="radio" class="radio" name="forum_select" value="1"<!-- IF S_FORUM_IDS --> checked="checked"<!-- ENDIF --> />&nbsp;{L_ALLOW_SELECTED_FORUMS}</dd> <dd><input type="radio" id="allowed_forums" class="radio" name="forum_select" value="0"<!-- IF not S_FORUM_IDS --> checked="checked"<!-- ENDIF --> />&nbsp;{L_ALLOW_ALL_FORUMS}&nbsp;&nbsp;<input type="radio" class="radio" name="forum_select" value="1"<!-- IF S_FORUM_IDS --> checked="checked"<!-- ENDIF --> />&nbsp;{L_ALLOW_SELECTED_FORUMS}</dd>
<dd><select name="allowed_forums[]" multiple="multiple" size="8">{S_FORUM_ID_OPTIONS}</select></dd> <dd><select name="allowed_forums[]" multiple="multiple" size="8">{S_FORUM_ID_OPTIONS}</select></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="submit-buttons"> <fieldset class="submit-buttons">
@ -258,14 +258,14 @@
<form id="add_ext" method="post" action="{U_ACTION}"> <form id="add_ext" method="post" action="{U_ACTION}">
<fieldset> <fieldset>
<legend>{L_ADD_EXTENSION}</legend> <legend>{L_ADD_EXTENSION}</legend>
<dl> <dl>
<dt><label for="add_extension">{L_EXTENSION}</label></dt> <dt><label for="add_extension">{L_EXTENSION}</label></dt>
<dd><input type="text" id="add_extension" size="20" maxlength="100" name="add_extension" value="{ADD_EXTENSION}" /></dd> <dd><input type="text" id="add_extension" size="20" maxlength="100" name="add_extension" value="{ADD_EXTENSION}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="extension_group">{L_EXTENSION_GROUP}</label></dt> <dt><label for="extension_group">{L_EXTENSION_GROUP}</label></dt>
<dd>{GROUP_SELECT_OPTIONS}</dd> <dd>{GROUP_SELECT_OPTIONS}</dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="quick"> <fieldset class="quick">

View file

@ -43,28 +43,28 @@
<fieldset> <fieldset>
<legend>{L_TITLE}</legend> <legend>{L_TITLE}</legend>
<dl> <dl>
<dt><label for="ban">{L_BAN_CELL}:</label></dt> <dt><label for="ban">{L_BAN_CELL}:</label></dt>
<dd><textarea name="ban" cols="40" rows="3" id="ban"></textarea></dd> <dd><textarea name="ban" cols="40" rows="3" id="ban"></textarea></dd>
<!-- IF S_USERNAME_BAN --><dd>[ <a href="#" onclick="window.open('{U_FIND_USER}', '_phpbbsearch', 'height=500, resizable=yes, scrollbars=yes, width=740'); return false;">{L_FIND_USERNAME}</a> ]</dd><!-- ENDIF --> <!-- IF S_USERNAME_BAN --><dd>[ <a href="#" onclick="window.open('{U_FIND_USER}', '_phpbbsearch', 'height=500, resizable=yes, scrollbars=yes, width=740'); return false;">{L_FIND_USERNAME}</a> ]</dd><!-- ENDIF -->
</dl> </dl>
<dl> <dl>
<dt><label for="banlength">{L_BAN_LENGTH}:</label></dt> <dt><label for="banlength">{L_BAN_LENGTH}:</label></dt>
<dd><select name="banlength" id="banlength">{S_BAN_END_OPTIONS}</select></dd> <dd><select name="banlength" id="banlength">{S_BAN_END_OPTIONS}</select></dd>
<dd><input type="text" name="banlengthother" /> (YYYY-MM-DD)</dd> <dd><input type="text" name="banlengthother" /> (YYYY-MM-DD)</dd>
</dl> </dl>
<dl> <dl>
<dt><label for="banexclude">{L_BAN_EXCLUDE}:</label><br /><span>{L_BAN_EXCLUDE_EXPLAIN}</span></dt> <dt><label for="banexclude">{L_BAN_EXCLUDE}:</label><br /><span>{L_BAN_EXCLUDE_EXPLAIN}</span></dt>
<dd><input type="radio" name="banexclude" value="1" class="radio" /> {L_YES} &nbsp; <input type="radio" name="banexclude" id="banexclude" value="0" checked="checked" class="radio" /> {L_NO}</dd> <dd><input type="radio" name="banexclude" value="1" class="radio" /> {L_YES} &nbsp; <input type="radio" name="banexclude" id="banexclude" value="0" checked="checked" class="radio" /> {L_NO}</dd>
</dl> </dl>
<dl> <dl>
<dt><label for="banreason">{L_BAN_REASON}:</label></dt> <dt><label for="banreason">{L_BAN_REASON}:</label></dt>
<dd><input name="banreason" type="text" id="banreason" class="medium" /></dd> <dd><input name="banreason" type="text" id="banreason" class="medium" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="bangivereason">{L_BAN_GIVE_REASON}:</label></dt> <dt><label for="bangivereason">{L_BAN_GIVE_REASON}:</label></dt>
<dd><input name="bangivereason" type="text" id="bangivereason" class="medium" /></dd> <dd><input name="bangivereason" type="text" id="bangivereason" class="medium" /></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="submit-buttons"> <fieldset class="submit-buttons">
@ -98,17 +98,18 @@
<dt><label for="unbangivereason">{L_BAN_GIVE_REASON}:</label></dt> <dt><label for="unbangivereason">{L_BAN_GIVE_REASON}:</label></dt>
<dd><input style="border: 0px;" type="text" name="unbangivereason" id="unbangivereason" class="full" disabled="disabled" /></dd> <dd><input style="border: 0px;" type="text" name="unbangivereason" id="unbangivereason" class="full" disabled="disabled" /></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="submit-buttons"> <fieldset class="submit-buttons">
<input class="button1" type="submit" id="unbansubmit" name="unbansubmit" value="{L_SUBMIT}" />&nbsp; <input class="button1" type="submit" id="unbansubmit" name="unbansubmit" value="{L_SUBMIT}" />&nbsp;
<input class="button2" type="reset" id="unbanreset" name="unbanreset" value="{L_RESET}" /> <input class="button2" type="reset" id="unbanreset" name="unbanreset" value="{L_RESET}" />
</fieldset> </fieldset>
<!-- ELSE --> <!-- ELSE -->
<p>{L_NO_BAN_CELL}</p> <p>{L_NO_BAN_CELL}</p>
</fieldset> </fieldset>
<!-- ENDIF --> <!-- ENDIF -->
</form> </form>

View file

@ -15,27 +15,27 @@
<fieldset> <fieldset>
<legend>{L_BBCODE_USAGE}</legend> <legend>{L_BBCODE_USAGE}</legend>
<p>{L_BBCODE_USAGE_EXPLAIN}</p> <p>{L_BBCODE_USAGE_EXPLAIN}</p>
<dl> <dl>
<dt><label for="bbcode_match">{L_EXAMPLES}</label><br /><br /><span>{L_BBCODE_USAGE_EXAMPLE}</span></dt> <dt><label for="bbcode_match">{L_EXAMPLES}</label><br /><br /><span>{L_BBCODE_USAGE_EXAMPLE}</span></dt>
<dd><textarea id="bbcode_match" name="bbcode_match" cols="60" rows="5">{BBCODE_MATCH}</textarea></dd> <dd><textarea id="bbcode_match" name="bbcode_match" cols="60" rows="5">{BBCODE_MATCH}</textarea></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>{L_HTML_REPLACEMENT}</legend> <legend>{L_HTML_REPLACEMENT}</legend>
<p>{L_HTML_REPLACEMENT_EXPLAIN}</p> <p>{L_HTML_REPLACEMENT_EXPLAIN}</p>
<dl> <dl>
<dt><label for="bbcode_tpl">{L_EXAMPLES}</label><br /><br /><span>{L_HTML_REPLACEMENT_EXAMPLE}</span></dt> <dt><label for="bbcode_tpl">{L_EXAMPLES}</label><br /><br /><span>{L_HTML_REPLACEMENT_EXAMPLE}</span></dt>
<dd><textarea id="bbcode_tpl" name="bbcode_tpl" cols="60" rows="8">{BBCODE_TPL}</textarea></dd> <dd><textarea id="bbcode_tpl" name="bbcode_tpl" cols="60" rows="8">{BBCODE_TPL}</textarea></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>{L_SETTINGS}</legend> <legend>{L_SETTINGS}</legend>
<dl> <dl>
<dt><label for="display_on_posting">{L_DISPLAY_ON_POSTING}</label></dt> <dt><label for="display_on_posting">{L_DISPLAY_ON_POSTING}</label></dt>
<dd><input type="checkbox" name="display_on_posting" id="display_on_posting" value="1"<!-- IF DISPLAY_ON_POSTING --> checked="checked"<!-- ENDIF --> /></dd> <dd><input type="checkbox" name="display_on_posting" id="display_on_posting" value="1"<!-- IF DISPLAY_ON_POSTING --> checked="checked"<!-- ENDIF --> /></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="submit-buttons"> <fieldset class="submit-buttons">
@ -44,6 +44,7 @@
</fieldset> </fieldset>
<br /> <br />
<table cellspacing="1"> <table cellspacing="1">
<thead> <thead>
<tr> <tr>
@ -77,10 +78,10 @@
<table cellspacing="1"> <table cellspacing="1">
<thead> <thead>
<tr> <tr>
<th>{L_BBCODE_TAG}</th> <th>{L_BBCODE_TAG}</th>
<th>{L_ACTION}</th> <th>{L_ACTION}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<!-- BEGIN bbcodes --> <!-- BEGIN bbcodes -->

View file

@ -24,6 +24,7 @@
<!-- ENDIF --> <!-- ENDIF -->
<!-- END options --> <!-- END options -->
<!-- IF S_AUTH --> <!-- IF S_AUTH -->
<!-- BEGIN auth_tpl --> <!-- BEGIN auth_tpl -->
{auth_tpl.TPL} {auth_tpl.TPL}

View file

@ -21,30 +21,30 @@
<fieldset> <fieldset>
<legend>{L_TITLE}</legend> <legend>{L_TITLE}</legend>
<dl> <dl>
<dt><label for="bot_name">{L_BOT_NAME}:</label><br /><span>{L_BOT_NAME_EXPLAIN}</span></dt> <dt><label for="bot_name">{L_BOT_NAME}:</label><br /><span>{L_BOT_NAME_EXPLAIN}</span></dt>
<dd><input name="bot_name" type="text" id="bot_name" value="{BOT_NAME}" /></dd> <dd><input name="bot_name" type="text" id="bot_name" value="{BOT_NAME}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="bot_style">{L_BOT_STYLE}:</label><br /><span>{L_BOT_STYLE_EXPLAIN}</span></dt> <dt><label for="bot_style">{L_BOT_STYLE}:</label><br /><span>{L_BOT_STYLE_EXPLAIN}</span></dt>
<dd><select id="bot_style" name="bot_style">{S_STYLE_OPTIONS}</select></dd> <dd><select id="bot_style" name="bot_style">{S_STYLE_OPTIONS}</select></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="bot_lang">{L_BOT_LANG}:</label><br /><span>{L_BOT_LANG_EXPLAIN}</span></dt> <dt><label for="bot_lang">{L_BOT_LANG}:</label><br /><span>{L_BOT_LANG_EXPLAIN}</span></dt>
<dd><select id="bot_lang" name="bot_lang">{S_LANG_OPTIONS}</select></dd> <dd><select id="bot_lang" name="bot_lang">{S_LANG_OPTIONS}</select></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="bot_active">{L_BOT_ACTIVE}:</label></dt> <dt><label for="bot_active">{L_BOT_ACTIVE}:</label></dt>
<dd><select id="bot_active" name="bot_active">{S_ACTIVE_OPTIONS}</select></dd> <dd><select id="bot_active" name="bot_active">{S_ACTIVE_OPTIONS}</select></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="bot_agent">{L_BOT_AGENT}:</label><br /><span>{L_BOT_AGENT_EXPLAIN}</span></dt> <dt><label for="bot_agent">{L_BOT_AGENT}:</label><br /><span>{L_BOT_AGENT_EXPLAIN}</span></dt>
<dd><input name="bot_agent" type="text" id="bot_agent" value="{BOT_AGENT}" /></dd> <dd><input name="bot_agent" type="text" id="bot_agent" value="{BOT_AGENT}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="bot_ip">{L_BOT_IP}:</label><br /><span>{L_BOT_IP_EXPLAIN}</span></dt> <dt><label for="bot_ip">{L_BOT_IP}:</label><br /><span>{L_BOT_IP_EXPLAIN}</span></dt>
<dd><input name="bot_ip" type="text" id="bot_ip" value="{BOT_IP}" /></dd> <dd><input name="bot_ip" type="text" id="bot_ip" value="{BOT_IP}" /></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="submit-buttons"> <fieldset class="submit-buttons">
@ -64,12 +64,12 @@
<table cellspacing="1"> <table cellspacing="1">
<thead> <thead>
<tr> <tr>
<th>{L_BOT_NAME}</th> <th>{L_BOT_NAME}</th>
<th>{L_BOT_LAST_VISIT}</th> <th>{L_BOT_LAST_VISIT}</th>
<th colspan="3">{L_OPTIONS}</th> <th colspan="3">{L_OPTIONS}</th>
<th>{L_MARK}</th> <th>{L_MARK}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<!-- BEGIN bots --> <!-- BEGIN bots -->

View file

@ -1,51 +1,57 @@
<!-- INCLUDE overall_header.html --> <!-- INCLUDE overall_header.html -->
<a name="maincontent"></a> <a name="maincontent"></a>
<!-- IF MODE eq 'restore' --> <!-- IF MODE eq 'restore' -->
<h1>{L_ACP_RESTORE}</h1> <h1>{L_ACP_RESTORE}</h1>
<p>{L_ACP_RESTORE_EXPLAIN}</p> <p>{L_ACP_RESTORE_EXPLAIN}</p>
<form id="acp_backup" method="post" action="{U_ACTION}"> <form id="acp_backup" method="post" action="{U_ACTION}">
<fieldset>
<legend>{L_RESTORE_OPTIONS}</legend> <fieldset>
<legend>{L_RESTORE_OPTIONS}</legend>
<dl> <dl>
<dt><label for="user">{L_SELECT_FILE}:</label></dt> <dt><label for="user">{L_SELECT_FILE}:</label></dt>
<dd><select id="file" name="file" size="10"><!-- BEGIN files --><option value="{files.FILE}"<!-- IF files.S_LAST_ROW --> selected="selected"<!-- ENDIF -->>{files.NAME}</option><!-- END files --></select></dd> <dd><select id="file" name="file" size="10"><!-- BEGIN files --><option value="{files.FILE}"<!-- IF files.S_LAST_ROW --> selected="selected"<!-- ENDIF -->>{files.NAME}</option><!-- END files --></select></dd>
</dl> </dl>
</fieldset> </fieldset>
<!-- IF EXISTS -->
<fieldset class="submit-buttons"> <!-- IF EXISTS -->
<input class="button1" type="submit" id="submit" name="submit" value="{L_START_RESTORE}" />&nbsp; <fieldset class="submit-buttons">
<input class="button2" type="submit" id="delete" name="delete" value="{L_DELETE_BACKUP}" />&nbsp; <input class="button1" type="submit" id="submit" name="submit" value="{L_START_RESTORE}" />&nbsp;
<input class="button2" type="submit" id="download" name="download" value="{L_DOWNLOAD_BACKUP}" /> <input class="button2" type="submit" id="delete" name="delete" value="{L_DELETE_BACKUP}" />&nbsp;
</fieldset> <input class="button2" type="submit" id="download" name="download" value="{L_DOWNLOAD_BACKUP}" />
<!-- ENDIF --> </fieldset>
</form> <!-- ENDIF -->
</form>
<!-- ELSE --> <!-- ELSE -->
<h1>{L_ACP_BACKUP}</h1> <h1>{L_ACP_BACKUP}</h1>
<p>{L_ACP_BACKUP_EXPLAIN}</p> <p>{L_ACP_BACKUP_EXPLAIN}</p>
<script type="text/javascript"> <script type="text/javascript">
<!-- <!--
function selector(bool) function selector(bool)
{
var table = document.getElementById('table');
for (var i = 0; i < table.options.length; i++)
{ {
table.options[i].selected = bool; var table = document.getElementById('table');
for (var i = 0; i < table.options.length; i++)
{
table.options[i].selected = bool;
}
} }
}
//--> //-->
</script> </script>
<form id="acp_backup" method="post" action="{U_ACTION}"> <form id="acp_backup" method="post" action="{U_ACTION}">
<fieldset>
<legend>{L_BACKUP_OPTIONS}</legend> <fieldset>
<legend>{L_BACKUP_OPTIONS}</legend>
<dl> <dl>
<dt><label for="user">{L_BACKUP_TYPE}:</label></dt> <dt><label for="user">{L_BACKUP_TYPE}:</label></dt>
<dd><input type="radio" name="type" value="full" id="type" checked="checked" />&nbsp;{L_FULL_BACKUP}&nbsp;&nbsp;<input type="radio" name="type" value="structure" id="type" />&nbsp;{L_STRUCTURE_ONLY}&nbsp;&nbsp;<input type="radio" name="type" value="data" id="type" />&nbsp;{L_DATA_ONLY}</dd> <dd><input type="radio" name="type" value="full" id="type" checked="checked" />&nbsp;{L_FULL_BACKUP}&nbsp;&nbsp;<input type="radio" name="type" value="structure" id="type" />&nbsp;{L_STRUCTURE_ONLY}&nbsp;&nbsp;<input type="radio" name="type" value="data" id="type" />&nbsp;{L_DATA_ONLY}</dd>
@ -68,11 +74,15 @@
<!-- END tables --> <!-- END tables -->
</select><br /><br /><div align="right"><a href="#" onclick="selector(true)">{L_SELECT_ALL}</a><br /><a href="#" onclick="selector(false)">{L_DESELECT_ALL}</a></div></dd> </select><br /><br /><div align="right"><a href="#" onclick="selector(true)">{L_SELECT_ALL}</a><br /><a href="#" onclick="selector(false)">{L_DESELECT_ALL}</a></div></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="submit-buttons">
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />&nbsp; <fieldset class="submit-buttons">
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" /> <input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />&nbsp;
</fieldset> <input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
</form> </fieldset>
</form>
<!-- ENDIF --> <!-- ENDIF -->
<!-- INCLUDE overall_footer.html --> <!-- INCLUDE overall_footer.html -->

View file

@ -10,10 +10,10 @@
<fieldset> <fieldset>
<legend>{L_ADD_DISALLOW_TITLE}</legend> <legend>{L_ADD_DISALLOW_TITLE}</legend>
<dl> <dl>
<dt><label for="user">{L_USERNAME}:</label><br /><span>{L_ADD_DISALLOW_EXPLAIN}</span></dt> <dt><label for="user">{L_USERNAME}:</label><br /><span>{L_ADD_DISALLOW_EXPLAIN}</span></dt>
<dd><input id="user" type="text" name="disallowed_user" class="medium" /></dd> <dd><input id="user" type="text" name="disallowed_user" class="medium" /></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="quick"> <fieldset class="quick">
@ -31,16 +31,14 @@
<dt><label for="disallowed">{L_USERNAME}:</label></dt> <dt><label for="disallowed">{L_USERNAME}:</label></dt>
<dd><select name="disallowed_id" id="disallowed">{S_DISALLOWED_NAMES}</select></dd> <dd><select name="disallowed_id" id="disallowed">{S_DISALLOWED_NAMES}</select></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="quick">
<input class="button1" type="submit" name="allow" value="{L_SUBMIT}" />
</fieldset>
<fieldset class="quick">
<input class="button1" type="submit" name="allow" value="{L_SUBMIT}" />
<!-- ELSE --> <!-- ELSE -->
<p>{L_NO_DISALLOWED}</p> <p>{L_NO_DISALLOWED}</p>
</fieldset>
<!-- ENDIF --> <!-- ENDIF -->
</fieldset>
</form> </form>

View file

@ -53,10 +53,10 @@
<p>{L_FORUM_EDIT_EXPLAIN}</p> <p>{L_FORUM_EDIT_EXPLAIN}</p>
<!-- IF S_ERROR --> <!-- IF S_ERROR -->
<div class="errorbox"> <div class="errorbox">
<h3>{L_WARNING}</h3> <h3>{L_WARNING}</h3>
<p>{ERROR_MSG}</p> <p>{ERROR_MSG}</p>
</div> </div>
<!-- ENDIF --> <!-- ENDIF -->
<form id="forumedit" method="post" action="{U_EDIT_ACTION}"> <form id="forumedit" method="post" action="{U_EDIT_ACTION}">
@ -69,11 +69,11 @@
</dl> </dl>
<!-- IF not S_ADD_ACTION and S_FORUM_ORIG_POST --> <!-- IF not S_ADD_ACTION and S_FORUM_ORIG_POST -->
<div id="type_actions"<!-- IF S_FORUM_POST --> style="display: none;"<!-- ENDIF -->> <div id="type_actions"<!-- IF S_FORUM_POST --> style="display: none;"<!-- ENDIF -->>
<dl> <dl>
<dt><label for="type_action">{L_DECIDE_MOVE_DELETE_CONTENT}:</label></dt> <dt><label for="type_action">{L_DECIDE_MOVE_DELETE_CONTENT}:</label></dt>
<dd><input type="radio" class="radio" id="type_action" name="type_action" value="delete" checked="checked" /> {L_DELETE_ALL_POSTS}</dd> <dd><input type="radio" class="radio" id="type_action" name="type_action" value="delete" checked="checked" /> {L_DELETE_ALL_POSTS}</dd>
<!-- IF S_MOVE_FORUM_OPTIONS --><dd><input type="radio" class="radio" name="type_action" value="move" /> {L_MOVE_POSTS_TO} <select name="to_forum_id">{S_MOVE_FORUM_OPTIONS}</select></dd><!-- ENDIF --> <!-- IF S_MOVE_FORUM_OPTIONS --><dd><input type="radio" class="radio" name="type_action" value="move" /> {L_MOVE_POSTS_TO} <select name="to_forum_id">{S_MOVE_FORUM_OPTIONS}</select></dd><!-- ENDIF -->
</dl> </dl>
</div> </div>
<!-- ENDIF --> <!-- ENDIF -->
<dl> <dl>
@ -101,10 +101,10 @@
<dd><select id="forum_style" name="forum_style"><option value="0">{L_DEFAULT_STYLE}</option>{S_STYLES_OPTIONS}</select></dd> <dd><select id="forum_style" name="forum_style"><option value="0">{L_DEFAULT_STYLE}</option>{S_STYLES_OPTIONS}</select></dd>
</dl> </dl>
<!-- IF S_ADD_ACTION --> <!-- IF S_ADD_ACTION -->
<dl> <dl>
<dt><label for="forum_perm_from">{L_COPY_PERMISSIONS}:</label><br /><span>{L_COPY_PERMISSIONS_EXPLAIN}</span></dt> <dt><label for="forum_perm_from">{L_COPY_PERMISSIONS}:</label><br /><span>{L_COPY_PERMISSIONS_EXPLAIN}</span></dt>
<dd><select id="forum_perm_from" name="forum_perm_from"><option value="0">{L_NO_PERMISSIONS}</option>{S_FORUM_OPTIONS}</select></dd> <dd><select id="forum_perm_from" name="forum_perm_from"><option value="0">{L_NO_PERMISSIONS}</option>{S_FORUM_OPTIONS}</select></dd>
</dl> </dl>
<!-- ENDIF --> <!-- ENDIF -->
</fieldset> </fieldset>
@ -241,10 +241,10 @@
<p>{L_FORUM_DELETE_EXPLAIN}</p> <p>{L_FORUM_DELETE_EXPLAIN}</p>
<!-- IF S_ERROR --> <!-- IF S_ERROR -->
<div class="errorbox"> <div class="errorbox">
<h3>{L_WARNING}</h3> <h3>{L_WARNING}</h3>
<p>{ERROR_MSG}</p> <p>{ERROR_MSG}</p>
</div> </div>
<!-- ENDIF --> <!-- ENDIF -->
<form id="acp_forum" method="post" action="{U_ACTION}"> <form id="acp_forum" method="post" action="{U_ACTION}">
@ -288,10 +288,10 @@
<p>{L_FORUM_ADMIN_EXPLAIN}</p> <p>{L_FORUM_ADMIN_EXPLAIN}</p>
<!-- IF ERROR_MSG --> <!-- IF ERROR_MSG -->
<div class="errorbox"> <div class="errorbox">
<h3>{L_WARNING}</h3> <h3>{L_WARNING}</h3>
<p>{ERROR_MSG}</p> <p>{ERROR_MSG}</p>
</div> </div>
<!-- ENDIF --> <!-- ENDIF -->
<!-- IF S_RESYNCED --> <!-- IF S_RESYNCED -->
@ -303,30 +303,30 @@
<p><strong>{NAVIGATION}<!-- IF S_NO_FORUMS --> [<a href="{U_EDIT}">{L_EDIT}</a> | <a href="{U_DELETE}">{L_DELETE}</a><!-- IF not S_LINK --> | <a href="{U_SYNC}">{L_RESYNC}</a><!-- ENDIF --->]<!-- ENDIF --></strong></p> <p><strong>{NAVIGATION}<!-- IF S_NO_FORUMS --> [<a href="{U_EDIT}">{L_EDIT}</a> | <a href="{U_DELETE}">{L_DELETE}</a><!-- IF not S_LINK --> | <a href="{U_SYNC}">{L_RESYNC}</a><!-- ENDIF --->]<!-- ENDIF --></strong></p>
<!-- IF forums --> <!-- IF .forums -->
<table cellspacing="1"> <table cellspacing="1">
<col class="row1" /><col class="row1" /><col class="row2" /> <col class="row1" /><col class="row1" /><col class="row2" />
<tbody> <tbody>
<!-- BEGIN forums --> <!-- BEGIN forums -->
<tr> <tr>
<td style="width: 5%;">{forums.FOLDER_IMAGE}</td> <td style="width: 5%;">{forums.FOLDER_IMAGE}</td>
<td> <td>
<strong><!-- IF forums.S_LINK -->{forums.FORUM_NAME}<!-- ELSE --><a href="{forums.U_FORUM}">{forums.FORUM_NAME}</a><!-- ENDIF --></strong> <strong><!-- IF forums.S_LINK -->{forums.FORUM_NAME}<!-- ELSE --><a href="{forums.U_FORUM}">{forums.FORUM_NAME}</a><!-- ENDIF --></strong>
<!-- IF forums.FORUM_DESCRIPTION --><br /><span>{forums.FORUM_DESCRIPTION}</span><!-- ENDIF --> <!-- IF forums.FORUM_DESCRIPTION --><br /><span>{forums.FORUM_DESCRIPTION}</span><!-- ENDIF -->
<!-- IF forums.S_FORUM_POST --><br /><br /><span>{L_TOPICS}: <b>{forums.FORUM_TOPICS}</b> / {L_POSTS}: <b>{forums.FORUM_POSTS}</b></span><!-- ENDIF --> <!-- IF forums.S_FORUM_POST --><br /><br /><span>{L_TOPICS}: <b>{forums.FORUM_TOPICS}</b> / {L_POSTS}: <b>{forums.FORUM_POSTS}</b></span><!-- ENDIF -->
</td> </td>
<td style="width: 15%; text-align: right; white-space: nowrap;"> <td style="width: 15%; text-align: right; white-space: nowrap;">
<!-- IF not forums.S_FIRST_ROW --><a href="{forums.U_MOVE_UP}"><img src="images/icon_up.gif" alt="{L_MOVE_UP}" title="{L_MOVE_UP}" width="16" height="16" /></a> <!-- ENDIF --> <!-- IF not forums.S_FIRST_ROW --><a href="{forums.U_MOVE_UP}"><img src="images/icon_up.gif" alt="{L_MOVE_UP}" title="{L_MOVE_UP}" width="16" height="16" /></a> <!-- ENDIF -->
<!-- IF not forums.S_LAST_ROW --><a href="{forums.U_MOVE_DOWN}"><img src="images/icon_down.gif" alt="{L_MOVE_DOWN}" title="{L_MOVE_DOWN}" width="16" height="16" /></a> <!-- ENDIF --> <!-- IF not forums.S_LAST_ROW --><a href="{forums.U_MOVE_DOWN}"><img src="images/icon_down.gif" alt="{L_MOVE_DOWN}" title="{L_MOVE_DOWN}" width="16" height="16" /></a> <!-- ENDIF -->
<a href="{forums.U_EDIT}"><img src="images/icon_edit.gif" alt="{L_EDIT}" title="{L_EDIT}" width="16" height="16" /></a> <a href="{forums.U_EDIT}"><img src="images/icon_edit.gif" alt="{L_EDIT}" title="{L_EDIT}" width="16" height="16" /></a>
<!-- IF not forums.S_LINK --><a href="{forums.U_SYNC}"><img src="images/icon_sync.gif" alt="{L_RESYNC}" title="{L_RESYNC}" width="16" height="16" /></a> <!-- ENDIF --> <!-- IF not forums.S_LINK --><a href="{forums.U_SYNC}"><img src="images/icon_sync.gif" alt="{L_RESYNC}" title="{L_RESYNC}" width="16" height="16" /></a> <!-- ENDIF -->
<a href="{forums.U_DELETE}"><img src="images/icon_delete.gif" alt="{L_DELETE}" title="{L_DELETE}" width="16" height="16" /></a> <a href="{forums.U_DELETE}"><img src="images/icon_delete.gif" alt="{L_DELETE}" title="{L_DELETE}" width="16" height="16" /></a>
</td> </td>
</tr> </tr>
<!-- END forums --> <!-- END forums -->
</tbody> </tbody>
</table> </table>
<!-- ENDIF --> <!-- ENDIF -->
<form id="fselect" method="post" action="{U_SEL_ACTION}"> <form id="fselect" method="post" action="{U_SEL_ACTION}">

View file

@ -21,15 +21,15 @@
<fieldset> <fieldset>
<legend>{L_GROUP_DETAILS}</legend> <legend>{L_GROUP_DETAILS}</legend>
<dl> <dl>
<dt><label<!-- IF not S_SPECIAL_GROUP --> for="group_name"<!-- ENDIF -->>{L_GROUP_NAME}:</label></dt> <dt><label<!-- IF not S_SPECIAL_GROUP --> for="group_name"<!-- ENDIF -->>{L_GROUP_NAME}:</label></dt>
<dd><!-- IF S_SPECIAL_GROUP --><b>{GROUP_NAME}</b><!-- ENDIF --><input name="group_name" type="<!-- IF S_SPECIAL_GROUP -->hidden<!-- ELSE -->text<!-- ENDIF -->" id="group_name" value="{GROUP_INTERNAL_NAME}" /></dd> <dd><!-- IF S_SPECIAL_GROUP --><b>{GROUP_NAME}</b><!-- ENDIF --><input name="group_name" type="<!-- IF S_SPECIAL_GROUP -->hidden<!-- ELSE -->text<!-- ENDIF -->" id="group_name" value="{GROUP_INTERNAL_NAME}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="group_desc">{L_GROUP_DESC}:</label></dt> <dt><label for="group_desc">{L_GROUP_DESC}:</label></dt>
<dd><textarea id="group_desc" name="group_desc" rows="5" cols="45">{GROUP_DESC}</textarea></dd> <dd><textarea id="group_desc" name="group_desc" rows="5" cols="45">{GROUP_DESC}</textarea></dd>
<dd><input type="checkbox" name="desc_parse_bbcode"<!-- IF S_DESC_BBCODE_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_PARSE_BBCODE} &nbsp; <input type="checkbox" name="desc_parse_smilies"<!-- IF S_DESC_SMILIES_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_PARSE_SMILIES} &nbsp; <input type="checkbox" name="desc_parse_urls"<!-- IF S_DESC_URLS_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_PARSE_URLS}</dd> <dd><input type="checkbox" name="desc_parse_bbcode"<!-- IF S_DESC_BBCODE_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_PARSE_BBCODE} &nbsp; <input type="checkbox" name="desc_parse_smilies"<!-- IF S_DESC_SMILIES_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_PARSE_SMILIES} &nbsp; <input type="checkbox" name="desc_parse_urls"<!-- IF S_DESC_URLS_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_PARSE_URLS}</dd>
</dl> </dl>
<!-- IF not S_SPECIAL_GROUP --> <!-- IF not S_SPECIAL_GROUP -->
<dl> <dl>
<dt><label for="group_type">{L_GROUP_TYPE}:</label><br /><span>{L_GROUP_TYPE_EXPLAIN}</span></dt> <dt><label for="group_type">{L_GROUP_TYPE}:</label><br /><span>{L_GROUP_TYPE_EXPLAIN}</span></dt>
@ -45,44 +45,44 @@
<!-- ENDIF --> <!-- ENDIF -->
<!-- IF S_ADD_GROUP --> <!-- IF S_ADD_GROUP -->
<dl> <dl>
<dt><label for="group_perm_from">{L_COPY_PERMISSIONS}:</label><br /><span>{L_COPY_PERMISSIONS_EXPLAIN}</span></dt> <dt><label for="group_perm_from">{L_COPY_PERMISSIONS}:</label><br /><span>{L_COPY_PERMISSIONS_EXPLAIN}</span></dt>
<dd><select id="group_perm_from" name="group_perm_from"><option value="0">{L_NO_PERMISSIONS}</option>{S_GROUP_OPTIONS}</select></dd> <dd><select id="group_perm_from" name="group_perm_from"><option value="0">{L_NO_PERMISSIONS}</option>{S_GROUP_OPTIONS}</select></dd>
</dl> </dl>
<!-- ENDIF --> <!-- ENDIF -->
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>{L_GROUP_SETTINGS_SAVE}</legend> <legend>{L_GROUP_SETTINGS_SAVE}</legend>
<dl> <dl>
<dt><label for="group_legend">{L_GROUP_LEGEND}:</label></dt> <dt><label for="group_legend">{L_GROUP_LEGEND}:</label></dt>
<dd><input name="group_legend" type="checkbox" id="group_legend"{GROUP_LEGEND} /></dd> <dd><input name="group_legend" type="checkbox" id="group_legend"{GROUP_LEGEND} /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="group_receive_pm">{L_GROUP_RECEIVE_PM}:</label></dt> <dt><label for="group_receive_pm">{L_GROUP_RECEIVE_PM}:</label></dt>
<dd><input name="group_receive_pm" type="checkbox" id="group_receive_pm"{GROUP_RECEIVE_PM} /></dd> <dd><input name="group_receive_pm" type="checkbox" id="group_receive_pm"{GROUP_RECEIVE_PM} /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="group_message_limit">{L_GROUP_MESSAGE_LIMIT}:</label><br /><span>{L_GROUP_MESSAGE_LIMIT_EXPLAIN}</span></dt> <dt><label for="group_message_limit">{L_GROUP_MESSAGE_LIMIT}:</label><br /><span>{L_GROUP_MESSAGE_LIMIT_EXPLAIN}</span></dt>
<dd><input name="group_message_limit" type="text" id="group_message_limit" maxlength="4" size="4" value="{GROUP_MESSAGE_LIMIT}" /></dd> <dd><input name="group_message_limit" type="text" id="group_message_limit" maxlength="4" size="4" value="{GROUP_MESSAGE_LIMIT}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="group_colour">{L_GROUP_COLOR}:</label><br /><span>{L_GROUP_COLOR_EXPLAIN}</span></dt> <dt><label for="group_colour">{L_GROUP_COLOR}:</label><br /><span>{L_GROUP_COLOR_EXPLAIN}</span></dt>
<dd><input name="group_colour" type="text" id="group_colour" value="{GROUP_COLOUR}" size="6" maxlength="6" />&nbsp;&nbsp;<span>[ <a href="#" onclick="swatch(); return false">{L_COLOUR_SWATCH}</a> ]</span></dd> <dd><input name="group_colour" type="text" id="group_colour" value="{GROUP_COLOUR}" size="6" maxlength="6" />&nbsp;&nbsp;<span>[ <a href="#" onclick="swatch(); return false">{L_COLOUR_SWATCH}</a> ]</span></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="group_rank">{L_GROUP_RANK}:</label></dt> <dt><label for="group_rank">{L_GROUP_RANK}:</label></dt>
<dd><select name="group_rank" id="group_rank">{S_RANK_OPTIONS}</select></dd> <dd><select name="group_rank" id="group_rank">{S_RANK_OPTIONS}</select></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>{L_GROUP_AVATAR}</legend> <legend>{L_GROUP_AVATAR}</legend>
<dl> <dl>
<dt><label>{L_CURRENT_IMAGE}:</label><br /><span>{L_AVATAR_EXPLAIN}</span></dt> <dt><label>{L_CURRENT_IMAGE}:</label><br /><span>{L_AVATAR_EXPLAIN}</span></dt>
<dd>{AVATAR_IMAGE}</dd> <dd>{AVATAR_IMAGE}</dd>
<dd><input type="checkbox" name="delete" />&nbsp;<span>{L_DELETE_AVATAR}</span></dd> <dd><input type="checkbox" name="delete" />&nbsp;<span>{L_DELETE_AVATAR}</span></dd>
</dl> </dl>
<!-- IF not S_IN_AVATAR_GALLERY --> <!-- IF not S_IN_AVATAR_GALLERY -->
<!-- IF S_CAN_UPLOAD --> <!-- IF S_CAN_UPLOAD -->
<dl> <dl>
@ -94,14 +94,14 @@
<dd><input name="uploadurl" type="text" id="uploadurl" value="" /></dd> <dd><input name="uploadurl" type="text" id="uploadurl" value="" /></dd>
</dl> </dl>
<!-- ENDIF --> <!-- ENDIF -->
<dl> <dl>
<dt><label for="remotelink">{L_LINK_REMOTE_AVATAR}:</label><br /><span>{L_LINK_REMOTE_AVATAR_EXPLAIN}</span></dt> <dt><label for="remotelink">{L_LINK_REMOTE_AVATAR}:</label><br /><span>{L_LINK_REMOTE_AVATAR_EXPLAIN}</span></dt>
<dd><input name="remotelink" type="text" id="remotelink" value="" /></dd> <dd><input name="remotelink" type="text" id="remotelink" value="" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="width">{L_LINK_REMOTE_SIZE}:</label><br /><span>{L_LINK_REMOTE_SIZE_EXPLAIN}</span></dt> <dt><label for="width">{L_LINK_REMOTE_SIZE}:</label><br /><span>{L_LINK_REMOTE_SIZE_EXPLAIN}</span></dt>
<dd><input name="width" type="text" id="width" size="3" value="{GROUP_AVATAR_WIDTH}" /> <span>px X </span> <input type="text" name="height" size="3" value="{GROUP_AVATAR_HEIGHT}" /> <span>px</span></dd> <dd><input name="width" type="text" id="width" size="3" value="{GROUP_AVATAR_WIDTH}" /> <span>px X </span> <input type="text" name="height" size="3" value="{GROUP_AVATAR_HEIGHT}" /> <span>px</span></dd>
</dl> </dl>
<!-- IF S_DISPLAY_GALLERY --> <!-- IF S_DISPLAY_GALLERY -->
<dl> <dl>
<dt><label>{L_AVATAR_GALLERY}:</label></dt> <dt><label>{L_AVATAR_GALLERY}:</label></dt>
@ -113,26 +113,26 @@
<fieldset> <fieldset>
<legend>{L_AVATAR_GALLERY}</legend> <legend>{L_AVATAR_GALLERY}</legend>
<dl> <dl>
<dt><label for="category">{L_AVATAR_CATEGORY}:</label></dt> <dt><label for="category">{L_AVATAR_CATEGORY}:</label></dt>
<dd><select name="category" id="category">{S_CAT_OPTIONS}</select>&nbsp;<input class="button2" type="submit" value="{L_GO}" name="display_gallery" /></dd> <dd><select name="category" id="category">{S_CAT_OPTIONS}</select>&nbsp;<input class="button2" type="submit" value="{L_GO}" name="display_gallery" /></dd>
</dl> </dl>
<dl> <dl>
<table cellspacing="1"> <table cellspacing="1">
<!-- BEGIN avatar_row --> <!-- BEGIN avatar_row -->
<tr> <tr>
<!-- BEGIN avatar_column --> <!-- BEGIN avatar_column -->
<td class="row1" style="text-align: center;"><img src="{avatar_row.avatar_column.AVATAR_IMAGE}" alt="{avatar_row.avatar_column.AVATAR_NAME}" title="{avatar_row.avatar_column.AVATAR_NAME}" /></td> <td class="row1" style="text-align: center;"><img src="{avatar_row.avatar_column.AVATAR_IMAGE}" alt="{avatar_row.avatar_column.AVATAR_NAME}" title="{avatar_row.avatar_column.AVATAR_NAME}" /></td>
<!-- END avatar_column --> <!-- END avatar_column -->
</tr> </tr>
<tr> <tr>
<!-- BEGIN avatar_option_column --> <!-- BEGIN avatar_option_column -->
<td class="row2" style="text-align: center;"><input type="radio" class="radio" name="avatar_select" value="{avatar_row.avatar_option_column.S_OPTIONS_AVATAR}" /></td> <td class="row2" style="text-align: center;"><input type="radio" class="radio" name="avatar_select" value="{avatar_row.avatar_option_column.S_OPTIONS_AVATAR}" /></td>
<!-- END avatar_option_column --> <!-- END avatar_option_column -->
</tr> </tr>
<!-- END avatar_row --> <!-- END avatar_row -->
</table> </table>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="quick" style="margin-top: -15px;"> <fieldset class="quick" style="margin-top: -15px;">

View file

@ -17,34 +17,34 @@
<fieldset> <fieldset>
<legend>{L_ACP_JABBER_SETTINGS}</legend> <legend>{L_ACP_JABBER_SETTINGS}</legend>
<dl> <dl>
<dt><label for="jab_enable">{L_JAB_ENABLE}:</label><br /><span>{L_JAB_ENABLE_EXPLAIN}</span></dt> <dt><label for="jab_enable">{L_JAB_ENABLE}:</label><br /><span>{L_JAB_ENABLE_EXPLAIN}</span></dt>
<dd><input type="radio" class="radio" id="jab_enable" name="jab_enable" value="1"<!-- IF JAB_ENABLE --> checked="checked"<!-- ENDIF --> />&nbsp;{L_ENABLED}&nbsp; &nbsp;<input type="radio" class="radio" name="jab_enable" value="0"<!-- IF not JAB_ENABLE --> checked="checked"<!-- ENDIF --> />&nbsp;{L_DISABLED}</dd> <dd><input type="radio" class="radio" id="jab_enable" name="jab_enable" value="1"<!-- IF JAB_ENABLE --> checked="checked"<!-- ENDIF --> />&nbsp;{L_ENABLED}&nbsp; &nbsp;<input type="radio" class="radio" name="jab_enable" value="0"<!-- IF not JAB_ENABLE --> checked="checked"<!-- ENDIF --> />&nbsp;{L_DISABLED}</dd>
</dl> </dl>
<dl> <dl>
<dt><label for="jab_host">{L_JAB_SERVER}:</label><br /><span>{L_JAB_SERVER_EXPLAIN}</span></dt> <dt><label for="jab_host">{L_JAB_SERVER}:</label><br /><span>{L_JAB_SERVER_EXPLAIN}</span></dt>
<dd><input type="text" id="jab_host" name="jab_host" value="{JAB_HOST}" /></dd> <dd><input type="text" id="jab_host" name="jab_host" value="{JAB_HOST}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="jab_port">{L_JAB_PORT}:</label><br /><span>{L_JAB_PORT_EXPLAIN}</span></dt> <dt><label for="jab_port">{L_JAB_PORT}:</label><br /><span>{L_JAB_PORT_EXPLAIN}</span></dt>
<dd><input type="text" id="jab_port" name="jab_port" value="{JAB_PORT}" /></dd> <dd><input type="text" id="jab_port" name="jab_port" value="{JAB_PORT}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="jab_username">{L_JAB_USERNAME}:</label><br /><span>{L_JAB_USERNAME_EXPLAIN}</span></dt> <dt><label for="jab_username">{L_JAB_USERNAME}:</label><br /><span>{L_JAB_USERNAME_EXPLAIN}</span></dt>
<dd><input type="text" id="jab_username" name="jab_username" value="{JAB_USERNAME}" /></dd> <dd><input type="text" id="jab_username" name="jab_username" value="{JAB_USERNAME}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="jab_password">{L_JAB_PASSWORD}:</label></dt> <dt><label for="jab_password">{L_JAB_PASSWORD}:</label></dt>
<dd><input type="text" id="jab_password" name="jab_password" value="{JAB_PASSWORD}" /></dd> <dd><input type="text" id="jab_password" name="jab_password" value="{JAB_PASSWORD}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="jab_resource">{L_JAB_RESOURCE}:</label><br /><span>{L_JAB_RESOURCE_EXPLAIN}</span></dt> <dt><label for="jab_resource">{L_JAB_RESOURCE}:</label><br /><span>{L_JAB_RESOURCE_EXPLAIN}</span></dt>
<dd><input type="text" id="jab_resource" name="jab_resource" value="{JAB_RESOURCE}" /></dd> <dd><input type="text" id="jab_resource" name="jab_resource" value="{JAB_RESOURCE}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="jab_package_size">{L_JAB_PACKAGE_SIZE}:</label><br /><span>{L_JAB_PACKAGE_SIZE_EXPLAIN}</span></dt> <dt><label for="jab_package_size">{L_JAB_PACKAGE_SIZE}:</label><br /><span>{L_JAB_PACKAGE_SIZE_EXPLAIN}</span></dt>
<dd><input type="text" id="jab_package_size" name="jab_package_size" value="{JAB_PACKAGE_SIZE}" /></dd> <dd><input type="text" id="jab_package_size" name="jab_package_size" value="{JAB_PACKAGE_SIZE}" /></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="submit-buttons"> <fieldset class="submit-buttons">

View file

@ -150,7 +150,9 @@
</table> </table>
</form> </form>
<!-- ELSEIF S_UPLOAD --> <!-- ELSEIF S_UPLOAD -->
<a href="{U_BACK}" style="float: right">&laquo; {L_BACK}</a> <a href="{U_BACK}" style="float: right">&laquo; {L_BACK}</a>
<h1>{L_UPLOAD_SETTINGS}</h1> <h1>{L_UPLOAD_SETTINGS}</h1>
@ -188,6 +190,7 @@
</fieldset> </fieldset>
</form> </form>
<!-- ELSE --> <!-- ELSE -->
<h1>{L_ACP_LANGUAGE_PACKS}</h1> <h1>{L_ACP_LANGUAGE_PACKS}</h1>

View file

@ -24,45 +24,48 @@
</div> </div>
<!-- IF .log --> <!-- IF .log -->
<table cellspacing="1"> <table cellspacing="1">
<thead> <thead>
<tr> <tr>
<th>{L_USERNAME}</th> <th>{L_USERNAME}</th>
<th>{L_IP}</th> <th>{L_IP}</th>
<th>{L_TIME}</th> <th>{L_TIME}</th>
<th>{L_ACTION}</th> <th>{L_ACTION}</th>
<th>{L_MARK}</th> <th>{L_MARK}</th>
</tr>
</thead>
<tbody>
<!-- BEGIN log -->
<!-- IF log.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->
<td>
{log.USERNAME}
<!-- IF log.REPORTEE_USERNAME -->
<br />&raquo; {log.REPORTEE_USERNAME}
<!-- ENDIF -->
</td>
<td style="text-align: center;">{log.IP}</td>
<td style="text-align: center;">{log.DATE}</td>
<td>{log.ACTION}<!-- IF log.DATA --><br />{log.DATA}</span><!-- ENDIF --></td>
<td style="text-align: center;"><input type="checkbox" name="mark[]" value="{log.ID}" /></td>
</tr> </tr>
<!-- END log --> </thead>
</tbody> <tbody>
</table> <!-- BEGIN log -->
<!-- IF log.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->
<td>
{log.USERNAME}
<!-- IF log.REPORTEE_USERNAME -->
<br />&raquo; {log.REPORTEE_USERNAME}
<!-- ENDIF -->
</td>
<td style="text-align: center;">{log.IP}</td>
<td style="text-align: center;">{log.DATE}</td>
<td>{log.ACTION}<!-- IF log.DATA --><br />{log.DATA}</span><!-- ENDIF --></td>
<td style="text-align: center;"><input type="checkbox" name="mark[]" value="{log.ID}" /></td>
</tr>
<!-- END log -->
</tbody>
</table>
<!-- ELSE --> <!-- ELSE -->
<div class="errorbox"> <div class="errorbox">
<p>{L_NO_ENTRIES}</p> <p>{L_NO_ENTRIES}</p>
</div> </div>
<!-- ENDIF --> <!-- ENDIF -->
<!-- IF S_SHOW_FORUMS --> <!-- IF S_SHOW_FORUMS -->
<fieldset class="quick" style="float: left;"> <fieldset class="quick" style="float: left;">
{L_SELECT_FORUM}: <select name="f" onchange="if(this.options[this.selectedIndex].value != -1){ this.form.submit(); }">{S_FORUM_BOX}</select> {L_SELECT_FORUM}: <select name="f" onchange="if(this.options[this.selectedIndex].value != -1){ this.form.submit(); }">{S_FORUM_BOX}</select>
<input class="button2" type="submit" value="{L_GO}" /> <input class="button2" type="submit" value="{L_GO}" />
</fieldset> </fieldset>
<!-- ENDIF --> <!-- ENDIF -->
<!-- IF S_CLEARLOGS --> <!-- IF S_CLEARLOGS -->

View file

@ -14,58 +14,58 @@
<table cellspacing="1"> <table cellspacing="1">
<caption>{L_FORUM_STATS}</caption> <caption>{L_FORUM_STATS}</caption>
<col class="col1" /><col class="col2" /><col class="col1" /><col class="col2" /> <col class="col1" /><col class="col2" /><col class="col1" /><col class="col2" />
<thead> <thead>
<tr> <tr>
<th>{L_STATISTIC}</th> <th>{L_STATISTIC}</th>
<th>{L_VALUE}</th> <th>{L_VALUE}</th>
<th>{L_STATISTIC}</th> <th>{L_STATISTIC}</th>
<th>{L_VALUE}</th> <th>{L_VALUE}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>{L_NUMBER_POSTS}: </td> <td>{L_NUMBER_POSTS}: </td>
<td><b>{TOTAL_POSTS}</b></td> <td><b>{TOTAL_POSTS}</b></td>
<td>{L_POSTS_PER_DAY}: </td> <td>{L_POSTS_PER_DAY}: </td>
<td><b>{POSTS_PER_DAY}</b></td> <td><b>{POSTS_PER_DAY}</b></td>
</tr> </tr>
<tr> <tr>
<td>{L_NUMBER_TOPICS}: </td> <td>{L_NUMBER_TOPICS}: </td>
<td><b>{TOTAL_TOPICS}</b></td> <td><b>{TOTAL_TOPICS}</b></td>
<td>{L_TOPICS_PER_DAY}: </td> <td>{L_TOPICS_PER_DAY}: </td>
<td><b>{TOPICS_PER_DAY}</b></td> <td><b>{TOPICS_PER_DAY}</b></td>
</tr> </tr>
<tr> <tr>
<td>{L_NUMBER_USERS}: </td> <td>{L_NUMBER_USERS}: </td>
<td><b>{TOTAL_USERS}</b></td> <td><b>{TOTAL_USERS}</b></td>
<td>{L_USERS_PER_DAY}: </td> <td>{L_USERS_PER_DAY}: </td>
<td><b>{USERS_PER_DAY}</b></td> <td><b>{USERS_PER_DAY}</b></td>
</tr> </tr>
<tr> <tr>
<td>{L_NUMBER_FILES}: </td> <td>{L_NUMBER_FILES}: </td>
<td><b>{TOTAL_FILES}</b></td> <td><b>{TOTAL_FILES}</b></td>
<td>{L_FILES_PER_DAY}: </td> <td>{L_FILES_PER_DAY}: </td>
<td><b>{FILES_PER_DAY}</b></td> <td><b>{FILES_PER_DAY}</b></td>
</tr> </tr>
<tr> <tr>
<td>{L_BOARD_STARTED}: </td> <td>{L_BOARD_STARTED}: </td>
<td><b>{START_DATE}</b></td> <td><b>{START_DATE}</b></td>
<td>{L_AVATAR_DIR_SIZE}: </td> <td>{L_AVATAR_DIR_SIZE}: </td>
<td><b>{AVATAR_DIR_SIZE}</b></td> <td><b>{AVATAR_DIR_SIZE}</b></td>
</tr> </tr>
<tr> <tr>
<td>{L_DATABASE_SIZE}: </td> <td>{L_DATABASE_SIZE}: </td>
<td><b>{DBSIZE}</b></td> <td><b>{DBSIZE}</b></td>
<td>{L_UPLOAD_DIR_SIZE}: </td> <td>{L_UPLOAD_DIR_SIZE}: </td>
<td><b>{UPLOAD_DIR_SIZE}</b></td> <td><b>{UPLOAD_DIR_SIZE}</b></td>
</tr> </tr>
<tr> <tr>
<td>{L_GZIP_COMPRESSION}: </td> <td>{L_GZIP_COMPRESSION}: </td>
<td><b>{GZIP_COMPRESSION}</b></td> <td><b>{GZIP_COMPRESSION}</b></td>
<td>&nbsp;</td> <td>&nbsp;</td>
<td>&nbsp;</td> <td>&nbsp;</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<!-- IF S_ACTION_OPTIONS --> <!-- IF S_ACTION_OPTIONS -->
@ -115,11 +115,11 @@
<table cellspacing="1"> <table cellspacing="1">
<thead> <thead>
<tr> <tr>
<th>{L_USERNAME}</th> <th>{L_USERNAME}</th>
<th>{L_JOINED}</th> <th>{L_JOINED}</th>
<th>{L_MARK}</th> <th>{L_MARK}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<!-- BEGIN inactive --> <!-- BEGIN inactive -->

View file

@ -57,36 +57,36 @@
<p>{L_EDIT_MODULE_EXPLAIN}</p> <p>{L_EDIT_MODULE_EXPLAIN}</p>
<!-- IF S_ERROR --> <!-- IF S_ERROR -->
<div class="errorbox"> <div class="errorbox">
<h3>{L_WARNING}</h3> <h3>{L_WARNING}</h3>
<p>{ERROR_MSG}</p> <p>{ERROR_MSG}</p>
</div> </div>
<!-- ENDIF --> <!-- ENDIF -->
<form id="moduleedit" method="post" action="{U_EDIT_ACTION}"> <form id="moduleedit" method="post" action="{U_EDIT_ACTION}">
<fieldset> <fieldset>
<legend>{L_GENERAL_OPTIONS}</legend> <legend>{L_GENERAL_OPTIONS}</legend>
<dl> <dl>
<dt><label for="module_langname">{L_MODULE_LANGNAME}:</label><br /> <dt><label for="module_langname">{L_MODULE_LANGNAME}:</label><br />
<span>{L_MODULE_LANGNAME_EXPLAIN}</span></dt> <span>{L_MODULE_LANGNAME_EXPLAIN}</span></dt>
<dd><input name="module_langname" type="text" id="module_langname" value="{MODULE_LANGNAME}" class="medium" /></dd> <dd><input name="module_langname" type="text" id="module_langname" value="{MODULE_LANGNAME}" class="medium" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="module_type">{L_MODULE_TYPE}:</label></dt> <dt><label for="module_type">{L_MODULE_TYPE}:</label></dt>
<dd><select name="module_type" id="module_type" onchange="display_options(this.value);"><option value="category"<!-- IF S_IS_CAT --> selected="selected"<!-- ENDIF -->>{L_CATEGORY}</option><option value="module"<!-- IF not S_IS_CAT --> selected="selected"<!-- ENDIF -->>{L_MODULE}</option></select></dd> <dd><select name="module_type" id="module_type" onchange="display_options(this.value);"><option value="category"<!-- IF S_IS_CAT --> selected="selected"<!-- ENDIF -->>{L_CATEGORY}</option><option value="module"<!-- IF not S_IS_CAT --> selected="selected"<!-- ENDIF -->>{L_MODULE}</option></select></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="parent_id">{L_PARENT}:</label></dt> <dt><label for="parent_id">{L_PARENT}:</label></dt>
<dd><select name="module_parent_id" id="parent_id">{S_CAT_OPTIONS}</select></dd> <dd><select name="module_parent_id" id="parent_id">{S_CAT_OPTIONS}</select></dd>
</dl> </dl>
<hr /> <hr />
<dl> <dl>
<dt><label for="module_enabled">{L_MODULE_ENABLED}:</label></dt> <dt><label for="module_enabled">{L_MODULE_ENABLED}:</label></dt>
<dd><label><input class="radio" type="radio" name="module_enabled" id="module_enabled" value="1"<!-- IF MODULE_ENABLED --> checked="checked"<!-- ENDIF --> /> {L_YES}</label> <dd><label><input class="radio" type="radio" name="module_enabled" id="module_enabled" value="1"<!-- IF MODULE_ENABLED --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
<label><input class="radio" type="radio" name="module_enabled" value="0"<!-- IF not MODULE_ENABLED --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd> <label><input class="radio" type="radio" name="module_enabled" value="0"<!-- IF not MODULE_ENABLED --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
</dl> </dl>
<div id="modoptions"<!-- IF S_IS_CAT --> style="display: none;"<!-- ENDIF -->> <div id="modoptions"<!-- IF S_IS_CAT --> style="display: none;"<!-- ENDIF -->>
<dl> <dl>
<dt><label for="module_display">{L_MODULE_DISPLAYED}:</label><br /><span>{L_MODULE_DISPLAYED_EXPLAIN}</span></dt> <dt><label for="module_display">{L_MODULE_DISPLAYED}:</label><br /><span>{L_MODULE_DISPLAYED_EXPLAIN}</span></dt>
<dd><label><input class="radio" type="radio" name="module_display" id="module_display" value="1"<!-- IF MODULE_DISPLAY --> checked="checked"<!-- ENDIF --> /> {L_YES}</label> <dd><label><input class="radio" type="radio" name="module_display" id="module_display" value="1"<!-- IF MODULE_DISPLAY --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
@ -102,7 +102,7 @@
<span>{L_CHOOSE_MODE_EXPLAIN}</span></dt> <span>{L_CHOOSE_MODE_EXPLAIN}</span></dt>
<dd><select name="module_mode" id="module_mode">{S_MODULE_MODES}</select></dd> <dd><select name="module_mode" id="module_mode">{S_MODULE_MODES}</select></dd>
</dl> </dl>
</div> </div>
</fieldset> </fieldset>
<fieldset class="submit-buttons"> <fieldset class="submit-buttons">
@ -122,10 +122,10 @@
<p>{L_ACP_MODULE_MANAGEMENT_EXPLAIN}</p> <p>{L_ACP_MODULE_MANAGEMENT_EXPLAIN}</p>
<!-- IF S_ERROR --> <!-- IF S_ERROR -->
<div class="errorbox"> <div class="errorbox">
<h3>{L_WARNING}</h3> <h3>{L_WARNING}</h3>
<p>{ERROR_MSG}</p> <p>{ERROR_MSG}</p>
</div> </div>
<!-- ENDIF --> <!-- ENDIF -->
<table cellspacing="1"> <table cellspacing="1">
@ -136,24 +136,24 @@
</tbody> </tbody>
</table> </table>
<!-- IF .modules --> <!-- IF .modules -->
<table cellspacing="1"> <table cellspacing="1">
<col class="row1" /><col class="row1" /><col class="row2" /><col class="row2" /> <col class="row1" /><col class="row1" /><col class="row2" /><col class="row2" />
<tbody> <tbody>
<!-- BEGIN modules --> <!-- BEGIN modules -->
<tr> <tr>
<td style="width: 5%;">{modules.MODULE_IMAGE}</td> <td style="width: 5%;">{modules.MODULE_IMAGE}</td>
<td style="width: 50%;"><a href="{modules.U_MODULE}">{modules.MODULE_TITLE}</a><!-- IF not modules.MODULE_DISPLAYED --> <span class="small">[{L_HIDDEN_MODULE}]</span><!-- ENDIF --></td> <td style="width: 50%;"><a href="{modules.U_MODULE}">{modules.MODULE_TITLE}</a><!-- IF not modules.MODULE_DISPLAYED --> <span class="small">[{L_HIDDEN_MODULE}]</span><!-- ENDIF --></td>
<td style="width: 15%; white-space: nowrap; text-align: center; vertical-align: middle;"><a href="{modules.U_MOVE_UP}">{L_MOVE_UP}</a><br /><a href="{modules.U_MOVE_DOWN}">{L_MOVE_DOWN}</a></td> <td style="width: 15%; white-space: nowrap; text-align: center; vertical-align: middle;"><a href="{modules.U_MOVE_UP}">{L_MOVE_UP}</a><br /><a href="{modules.U_MOVE_DOWN}">{L_MOVE_DOWN}</a></td>
<td style="width: 20%; white-space: nowrap; text-align: center; vertical-align: middle;">&nbsp; <td style="width: 20%; white-space: nowrap; text-align: center; vertical-align: middle;">&nbsp;
<a href="{modules.U_EDIT}">{L_EDIT}</a> | <a href="{modules.U_DELETE}">{L_DELETE}</a> | <a href="{modules.U_EDIT}">{L_EDIT}</a> | <a href="{modules.U_DELETE}">{L_DELETE}</a> |
<!-- IF modules.MODULE_ENABLED --><a href="{modules.U_DISABLE}">{L_DISABLE}</a><!-- ELSE --><a href="{modules.U_ENABLE}">{L_ENABLE}</a><!-- ENDIF --> <!-- IF modules.MODULE_ENABLED --><a href="{modules.U_DISABLE}">{L_DISABLE}</a><!-- ELSE --><a href="{modules.U_ENABLE}">{L_ENABLE}</a><!-- ENDIF -->
&nbsp;</td> &nbsp;</td>
</tr> </tr>
<!-- END modules --> <!-- END modules -->
</tbody> </tbody>
</table> </table>
<!-- ENDIF --> <!-- ENDIF -->
<form id="module" method="post" action="{U_ACTION}"> <form id="module" method="post" action="{U_ACTION}">

View file

@ -8,8 +8,10 @@
<!-- <!--
var active_option = 'options0'; var active_option = 'options0';
// Show/hide option panels /**
// value = suffix for ID to show * Show/hide option panels
* value = suffix for ID to show
*/
function swap_options(id) function swap_options(id)
{ {
if (id == active_option) if (id == active_option)
@ -24,8 +26,10 @@
active_option = id; active_option = id;
} }
// Mark all radio buttons in one panel /**
// id = table ID container, s = status ['y'/'u'/'n'] * Mark all radio buttons in one panel
* id = table ID container, s = status ['y'/'u'/'n']
*/
function mark_options(id, s) function mark_options(id, s)
{ {
var t = document.getElementById(id); var t = document.getElementById(id);
@ -62,14 +66,14 @@
<fieldset> <fieldset>
<legend>{L_ROLE_DETAILS}</legend> <legend>{L_ROLE_DETAILS}</legend>
<dl> <dl>
<dt><label for="role_name">{L_ROLE_NAME}:</label></dt> <dt><label for="role_name">{L_ROLE_NAME}:</label></dt>
<dd><input name="role_name" type="text" id="role_name" value="{ROLE_NAME}" /></dd> <dd><input name="role_name" type="text" id="role_name" value="{ROLE_NAME}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="role_description">{L_ROLE_DESCRIPTION}:</label><br /><span>{L_ROLE_DESCRIPTION_EXPLAIN}</span></dt> <dt><label for="role_description">{L_ROLE_DESCRIPTION}:</label><br /><span>{L_ROLE_DESCRIPTION_EXPLAIN}</span></dt>
<dd><textarea id="role_description" name="role_description" rows="3" cols="45">{ROLE_DESCRIPTION}</textarea></dd> <dd><textarea id="role_description" name="role_description" rows="3" cols="45">{ROLE_DESCRIPTION}</textarea></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="quick"> <fieldset class="quick">

View file

@ -7,6 +7,7 @@
<p>{L_ACP_PHP_INFO_EXPLAIN}</p> <p>{L_ACP_PHP_INFO_EXPLAIN}</p>
<div style="overflow: auto; width: 99%;"> <div style="overflow: auto; width: 99%;">
{PHPINFO} {PHPINFO}
</div> </div>
<!-- INCLUDE overall_footer.html --> <!-- INCLUDE overall_footer.html -->

View file

@ -11,10 +11,10 @@
<p>{L_EXPLAIN}</p> <p>{L_EXPLAIN}</p>
<!-- IF ERROR_MSG --> <!-- IF ERROR_MSG -->
<div class="errorbox"> <div class="errorbox">
<h3>{L_WARNING}</h3> <h3>{L_WARNING}</h3>
<p>{ERROR_MSG}</p> <p>{ERROR_MSG}</p>
</div> </div>
<!-- ENDIF --> <!-- ENDIF -->
<form id="add_profile_field" method="post" action="{U_ACTION}"> <form id="add_profile_field" method="post" action="{U_ACTION}">
@ -23,38 +23,38 @@
<fieldset> <fieldset>
<legend>{L_TITLE}</legend> <legend>{L_TITLE}</legend>
<dl> <dl>
<dt><label>{L_FIELD_TYPE}:</label><br /><span>{L_FIELD_TYPE_EXPLAIN}</span></dt> <dt><label>{L_FIELD_TYPE}:</label><br /><span>{L_FIELD_TYPE_EXPLAIN}</span></dt>
<dd><b>{FIELD_TYPE}</b></dd> <dd><b>{FIELD_TYPE}</b></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="field_ident">{L_FIELD_IDENT}:</label><br /><span>{L_FIELD_IDENT_EXPLAIN}</span></dt> <dt><label for="field_ident">{L_FIELD_IDENT}:</label><br /><span>{L_FIELD_IDENT_EXPLAIN}</span></dt>
<dd><input class="medium" type="text" id="field_ident" name="field_ident" value="{FIELD_IDENT}" /></dd> <dd><input class="medium" type="text" id="field_ident" name="field_ident" value="{FIELD_IDENT}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="field_no_view">{L_DISPLAY_PROFILE_FIELD}:</label><br /><span>{L_DISPLAY_PROFILE_FIELD_EXPLAIN}</span></dt> <dt><label for="field_no_view">{L_DISPLAY_PROFILE_FIELD}:</label><br /><span>{L_DISPLAY_PROFILE_FIELD_EXPLAIN}</span></dt>
<dd><input type="radio" id="field_no_view" name="field_no_view" value="0"<!-- IF not S_FIELD_NO_VIEW --> checked="checked"<!-- ENDIF --> /> {L_YES} <input type="radio" name="field_no_view" value="1"<!-- IF S_FIELD_NO_VIEW --> checked="checked"<!-- ENDIF --> /> {L_NO}</dd> <dd><input type="radio" id="field_no_view" name="field_no_view" value="0"<!-- IF not S_FIELD_NO_VIEW --> checked="checked"<!-- ENDIF --> /> {L_YES} <input type="radio" name="field_no_view" value="1"<!-- IF S_FIELD_NO_VIEW --> checked="checked"<!-- ENDIF --> /> {L_NO}</dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>{L_VISIBILITY_OPTION}</legend> <legend>{L_VISIBILITY_OPTION}</legend>
<dl> <dl>
<dt><label for="field_option_none">{L_DISPLAY_AT_PROFILE}:</label></dt> <dt><label for="field_option_none">{L_DISPLAY_AT_PROFILE}:</label></dt>
<dd><input type="radio" id="field_option_none" name="field_option" value="none"<!-- IF not S_SHOW_ON_REG and not S_FIELD_REQUIRED and not S_FIELD_HIDE --> checked="checked"<!-- ENDIF --> /></dd> <dd><input type="radio" id="field_option_none" name="field_option" value="none"<!-- IF not S_SHOW_ON_REG and not S_FIELD_REQUIRED and not S_FIELD_HIDE --> checked="checked"<!-- ENDIF --> /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="field_show_on_reg">{L_DISPLAY_AT_REGISTER}:</label><br /><span>{L_DISPLAY_AT_REGISTER_EXPLAIN}</span></dt> <dt><label for="field_show_on_reg">{L_DISPLAY_AT_REGISTER}:</label><br /><span>{L_DISPLAY_AT_REGISTER_EXPLAIN}</span></dt>
<dd><input type="radio" id="field_show_on_reg" name="field_option" value="field_show_on_reg"<!-- IF S_SHOW_ON_REG --> checked="checked"<!-- ENDIF --> /></dd> <dd><input type="radio" id="field_show_on_reg" name="field_option" value="field_show_on_reg"<!-- IF S_SHOW_ON_REG --> checked="checked"<!-- ENDIF --> /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="field_required">{L_REQUIRED_FIELD}:</label><br /><span>{L_REQUIRED_FIELD_EXPLAIN}</span></dt> <dt><label for="field_required">{L_REQUIRED_FIELD}:</label><br /><span>{L_REQUIRED_FIELD_EXPLAIN}</span></dt>
<dd><input type="radio" id="field_required" name="field_option" value="field_required"<!-- IF S_FIELD_REQUIRED --> checked="checked"<!-- ENDIF --> /></dd> <dd><input type="radio" id="field_required" name="field_option" value="field_required"<!-- IF S_FIELD_REQUIRED --> checked="checked"<!-- ENDIF --> /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="field_hide">{L_HIDE_PROFILE_FIELD}:</label><br /><span>{L_HIDE_PROFILE_FIELD_EXPLAIN}</span></dt> <dt><label for="field_hide">{L_HIDE_PROFILE_FIELD}:</label><br /><span>{L_HIDE_PROFILE_FIELD_EXPLAIN}</span></dt>
<dd><input type="radio" id="field_hide" name="field_option" value="field_hide"<!-- IF S_FIELD_HIDE --> checked="checked"<!-- ENDIF --> /></dd> <dd><input type="radio" id="field_hide" name="field_option" value="field_hide"<!-- IF S_FIELD_HIDE --> checked="checked"<!-- ENDIF --> /></dd>
</dl> </dl>
</fieldset> </fieldset>
<!-- IF S_EDIT_MODE --> <!-- IF S_EDIT_MODE -->
@ -65,31 +65,31 @@
<fieldset> <fieldset>
<legend>{L_LANG_SPECIFIC}</legend> <legend>{L_LANG_SPECIFIC}</legend>
<dl>
<dt><label for="lang_name">{L_USER_FIELD_NAME}:</label></dt>
<dd><input class="medium" type="text" id="lang_name" name="lang_name" value="{LANG_NAME}" /></dd>
</dl>
<dl>
<dt><label for="lang_explain">{L_FIELD_DESCRIPTION}:</label><br /><span>{L_FIELD_DESCRIPTION_EXPLAIN}</span></dt>
<dd><textarea id="lang_explain" name="lang_explain" rows="3" cols="80">{LANG_EXPLAIN}</textarea></dd>
</dl>
<!-- IF S_TEXT or S_STRING -->
<dl> <dl>
<dt><label for="lang_name">{L_USER_FIELD_NAME}:</label></dt> <dt><label for="lang_default_value">{L_DEFAULT_VALUE}:</label><br /><span>{L_DEFAULT_VALUE_EXPLAIN}</span></dt>
<dd><input class="medium" type="text" id="lang_name" name="lang_name" value="{LANG_NAME}" /></dd> <dd><!-- IF S_STRING --><input class="medium" type="text" id="lang_default_value" name="lang_default_value" value="{LANG_DEFAULT_VALUE}" /><!-- ELSE --><textarea id="lang_default_value" name="lang_default_value" rows="5" cols="80">{LANG_DEFAULT_VALUE}</textarea><!-- ENDIF --></dd>
</dl> </dl>
<!-- ENDIF -->
<!-- IF S_BOOL or S_DROPDOWN -->
<dl> <dl>
<dt><label for="lang_explain">{L_FIELD_DESCRIPTION}:</label><br /><span>{L_FIELD_DESCRIPTION_EXPLAIN}</span></dt> <dt><label for="lang_options">{L_ENTRIES}:</label><br /><span>{L_LANG_OPTIONS_EXPLAIN}</span></dt>
<dd><textarea id="lang_explain" name="lang_explain" rows="3" cols="80">{LANG_EXPLAIN}</textarea></dd> <!-- IF S_DROPDOWN -->
<dd><textarea id="lang_options" name="lang_options" rows="5" cols="80">{LANG_OPTIONS}</textarea></dd>
<!-- ELSE -->
<dd><input class="medium" id="lang_options" name="lang_options[0]" value="{FIRST_LANG_OPTION}" /> {L_FIRST_OPTION}</dd>
<dd><input class="medium" name="lang_options[1]" value="{SECOND_LANG_OPTION}" /> {L_SECOND_OPTION}</dd>
<!-- ENDIF -->
</dl> </dl>
<!-- IF S_TEXT or S_STRING --> <!-- ENDIF -->
<dl>
<dt><label for="lang_default_value">{L_DEFAULT_VALUE}:</label><br /><span>{L_DEFAULT_VALUE_EXPLAIN}</span></dt>
<dd><!-- IF S_STRING --><input class="medium" type="text" id="lang_default_value" name="lang_default_value" value="{LANG_DEFAULT_VALUE}" /><!-- ELSE --><textarea id="lang_default_value" name="lang_default_value" rows="5" cols="80">{LANG_DEFAULT_VALUE}</textarea><!-- ENDIF --></dd>
</dl>
<!-- ENDIF -->
<!-- IF S_BOOL or S_DROPDOWN -->
<dl>
<dt><label for="lang_options">{L_ENTRIES}:</label><br /><span>{L_LANG_OPTIONS_EXPLAIN}</span></dt>
<!-- IF S_DROPDOWN -->
<dd><textarea id="lang_options" name="lang_options" rows="5" cols="80">{LANG_OPTIONS}</textarea></dd>
<!-- ELSE -->
<dd><input class="medium" id="lang_options" name="lang_options[0]" value="{FIRST_LANG_OPTION}" /> {L_FIRST_OPTION}</dd>
<dd><input class="medium" name="lang_options[1]" value="{SECOND_LANG_OPTION}" /> {L_SECOND_OPTION}</dd>
<!-- ENDIF -->
</dl>
<!-- ENDIF -->
</fieldset> </fieldset>
<fieldset class="quick"> <fieldset class="quick">

View file

@ -8,7 +8,6 @@
<script type="text/javascript"> <script type="text/javascript">
<!-- <!--
function update_image(newimage) function update_image(newimage)
{ {
document.getElementById('image').src = (newimage) ? "{RANKS_PATH}/" + newimage : "./images/spacer.gif"; document.getElementById('image').src = (newimage) ? "{RANKS_PATH}/" + newimage : "./images/spacer.gif";

View file

@ -22,14 +22,14 @@
<fieldset> <fieldset>
<legend>{L_TITLE}</legend> <legend>{L_TITLE}</legend>
<p><!-- IF S_TRANSLATED -->{L_IS_TRANSLATED}<!-- ELSE -->{L_IS_NOT_TRANSLATED}<!-- ENDIF --></p> <p><!-- IF S_TRANSLATED -->{L_IS_TRANSLATED}<!-- ELSE -->{L_IS_NOT_TRANSLATED}<!-- ENDIF --></p>
<dl> <dl>
<dt><label for="reason_title">{L_REASON_TITLE}:</label></dt> <dt><label for="reason_title">{L_REASON_TITLE}:</label></dt>
<dd><input name="reason_title" type="text" id="reason_title" value="{REASON_TITLE}" /></dd> <dd><input name="reason_title" type="text" id="reason_title" value="{REASON_TITLE}" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="reason_description">{L_REASON_DESCRIPTION}:</label></dt> <dt><label for="reason_description">{L_REASON_DESCRIPTION}:</label></dt>
<dd><textarea name="reason_description" id="reason_description" rows="8">{REASON_DESCRIPTION}</textarea></dd> <dd><textarea name="reason_description" id="reason_description" rows="8">{REASON_DESCRIPTION}</textarea></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="submit-buttons"> <fieldset class="submit-buttons">
@ -45,36 +45,37 @@
<p>{L_ACP_REASONS_EXPLAIN}</p> <p>{L_ACP_REASONS_EXPLAIN}</p>
<!-- IF reasons --> <!-- IF .reasons -->
<table cellspacing="1"> <table cellspacing="1">
<col class="row1" /><col class="row1" /><col class="row2" /> <col class="row1" /><col class="row1" /><col class="row2" />
<thead> <thead>
<tr>
<th>{L_REASON}</th>
<th>{L_USED_IN_REPORTS}</th>
<th>{L_OPTIONS}</th>
</tr>
</thead>
<tbody>
<!-- BEGIN reasons -->
<tr> <tr>
<td> <th>{L_REASON}</th>
<i style="float: right; font-size: .9em;"><!-- IF reasons.S_TRANSLATED -->{L_IS_TRANSLATED}<!-- ELSE -->{L_IS_NOT_TRANSLATED}<!-- ENDIF --></i> <th>{L_USED_IN_REPORTS}</th>
<strong>{reasons.REASON_TITLE}<!-- IF reasons.S_OTHER_REASON --> *<!-- ENDIF --></strong> <th>{L_OPTIONS}</th>
<br /><span>{reasons.REASON_DESCRIPTION}</span>
</td>
<td style="width: 100px;">{reasons.REASON_COUNT}</td>
<td style="width: 15%; text-align: right; white-space: nowrap;">
<!-- IF not reasons.S_FIRST_ROW --><a href="{reasons.U_MOVE_UP}"><img src="images/icon_up.gif" alt="{L_MOVE_UP}" title="{L_MOVE_UP}" width="16" height="16" /></a> <!-- ENDIF -->
<!-- IF not reasons.S_LAST_ROW --><a href="{reasons.U_MOVE_DOWN}"><img src="images/icon_down.gif" alt="{L_MOVE_DOWN}" title="{L_MOVE_DOWN}" width="16" height="16" /></a> <!-- ENDIF -->
<a href="{reasons.U_EDIT}"><img src="images/icon_edit.gif" alt="{L_EDIT}" title="{L_EDIT}" width="16" height="16" /></a>
<!-- IF reasons.U_DELETE --><a href="{reasons.U_DELETE}"><img src="images/icon_delete.gif" alt="{L_DELETE}" title="{L_DELETE}" width="16" height="16" /></a><!-- ENDIF -->
</td>
</tr> </tr>
<!-- END reasons --> </thead>
</tbody> <tbody>
</table> <!-- BEGIN reasons -->
<!-- ENDIF --> <tr>
<td>
<i style="float: right; font-size: .9em;"><!-- IF reasons.S_TRANSLATED -->{L_IS_TRANSLATED}<!-- ELSE -->{L_IS_NOT_TRANSLATED}<!-- ENDIF --></i>
<strong>{reasons.REASON_TITLE}<!-- IF reasons.S_OTHER_REASON --> *<!-- ENDIF --></strong>
<br /><span>{reasons.REASON_DESCRIPTION}</span>
</td>
<td style="width: 100px;">{reasons.REASON_COUNT}</td>
<td style="width: 15%; text-align: right; white-space: nowrap;">
<!-- IF not reasons.S_FIRST_ROW --><a href="{reasons.U_MOVE_UP}"><img src="images/icon_up.gif" alt="{L_MOVE_UP}" title="{L_MOVE_UP}" width="16" height="16" /></a> <!-- ENDIF -->
<!-- IF not reasons.S_LAST_ROW --><a href="{reasons.U_MOVE_DOWN}"><img src="images/icon_down.gif" alt="{L_MOVE_DOWN}" title="{L_MOVE_DOWN}" width="16" height="16" /></a> <!-- ENDIF -->
<a href="{reasons.U_EDIT}"><img src="images/icon_edit.gif" alt="{L_EDIT}" title="{L_EDIT}" width="16" height="16" /></a>
<!-- IF reasons.U_DELETE --><a href="{reasons.U_DELETE}"><img src="images/icon_delete.gif" alt="{L_DELETE}" title="{L_DELETE}" width="16" height="16" /></a><!-- ENDIF -->
</td>
</tr>
<!-- END reasons -->
</tbody>
</table>
<!-- ENDIF -->
<form id="reasons" method="post" action="{U_ACTION}"> <form id="reasons" method="post" action="{U_ACTION}">

View file

@ -3,14 +3,14 @@
<a name="maincontent"></a> <a name="maincontent"></a>
<!-- IF S_SETTINGS --> <!-- IF S_SETTINGS -->
<h1>{L_ACP_SEARCH_SETTINGS}</h1> <h1>{L_ACP_SEARCH_SETTINGS}</h1>
<p>{L_ACP_SEARCH_SETTINGS_EXPLAIN}</p> <p>{L_ACP_SEARCH_SETTINGS_EXPLAIN}</p>
<form id="acp_search" method="post" action="{U_ACTION}"> <form id="acp_search" method="post" action="{U_ACTION}">
<fieldset>
<legend>{L_GENERAL_SEARCH_SETTINGS}</legend>
<fieldset>
<legend>{L_GENERAL_SEARCH_SETTINGS}</legend>
<dl> <dl>
<dt><label for="load_search">{L_YES_SEARCH}:</label><br /><span>{L_YES_SEARCH_EXPLAIN}</span></dt> <dt><label for="load_search">{L_YES_SEARCH}:</label><br /><span>{L_YES_SEARCH_EXPLAIN}</span></dt>
<dd><input type="radio" id="load_search" name="config[load_search]" value="1"<!-- IF S_YES_SEARCH --> checked="checked"<!-- ENDIF --> class="radio" />&nbsp;{L_YES}&nbsp;&nbsp;<input type="radio" name="config[load_search]" value="0"<!-- IF not S_YES_SEARCH --> checked="checked"<!-- ENDIF --> class="radio" />&nbsp;{L_NO}</dd> <dd><input type="radio" id="load_search" name="config[load_search]" value="1"<!-- IF S_YES_SEARCH --> checked="checked"<!-- ENDIF --> class="radio" />&nbsp;{L_YES}&nbsp;&nbsp;<input type="radio" name="config[load_search]" value="0"<!-- IF not S_YES_SEARCH --> checked="checked"<!-- ENDIF --> class="radio" />&nbsp;{L_NO}</dd>
@ -35,89 +35,103 @@
<dt><label for="search_store_results">{L_SEARCH_STORE_RESULTS}:</label><br /><span>{L_SEARCH_STORE_RESULTS_EXPLAIN}</span></dt> <dt><label for="search_store_results">{L_SEARCH_STORE_RESULTS}:</label><br /><span>{L_SEARCH_STORE_RESULTS_EXPLAIN}</span></dt>
<dd><input id="search_store_results" type="text" size="4" maxlength="6" name="config[search_store_results]" value="{SEARCH_STORE_RESULTS}" /></dd> <dd><input id="search_store_results" type="text" size="4" maxlength="6" name="config[search_store_results]" value="{SEARCH_STORE_RESULTS}" /></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset>
<legend>{L_SEARCH_TYPE}</legend>
<fieldset>
<legend>{L_SEARCH_TYPE}</legend>
<dl> <dl>
<dt><label for="search_type">{L_SEARCH_TYPE}:</label><br /><span>{L_SEARCH_TYPE_EXPLAIN}</span></dt> <dt><label for="search_type">{L_SEARCH_TYPE}:</label><br /><span>{L_SEARCH_TYPE_EXPLAIN}</span></dt>
<dd><select id="search_type" name="config[search_type]">{S_SEARCH_TYPES}</select></dd> <dd><select id="search_type" name="config[search_type]">{S_SEARCH_TYPES}</select></dd>
</dl> </dl>
</fieldset> </fieldset>
<!-- BEGIN backend --> <!-- BEGIN backend -->
<fieldset>
<legend>{backend.NAME}</legend>
{backend.SETTINGS} <fieldset>
</fieldset> <legend>{backend.NAME}</legend>
<!-- END backend --> {backend.SETTINGS}
</fieldset>
<fieldset class="submit-buttons"> <!-- END backend -->
<input class="button1" type="submit" id="submit" name="submit" value="Submit" />&nbsp;
<input class="button2" type="reset" id="reset" name="reset" value="Reset" />
</fieldset>
</form> <fieldset class="submit-buttons">
<input class="button1" type="submit" id="submit" name="submit" value="Submit" />&nbsp;
<input class="button2" type="reset" id="reset" name="reset" value="Reset" />
</fieldset>
</form>
<!-- ELSEIF S_INDEX --> <!-- ELSEIF S_INDEX -->
<script language="javascript" type="text/javascript">
<!--
function popup_progress_bar(progress_type)
{
close_waitscreen = 0;
window.open('{UA_PROGRESS_BAR}&type=' + progress_type, '_index', 'HEIGHT=240,resizable=yes,scrollbars=no,WIDTH=400');
}
//-->
</script>
<h1>{L_ACP_SEARCH_INDEX}</h1> <script type="text/javascript">
<!--
<p>{L_ACP_SEARCH_INDEX_EXPLAIN}</p> /**
* Popup search progress bar
*/
function popup_progress_bar(progress_type)
{
close_waitscreen = 0;
window.open('{UA_PROGRESS_BAR}&type=' + progress_type, '_index', 'HEIGHT=240,resizable=yes,scrollbars=no,WIDTH=400');
}
//-->
</script>
<!-- IF S_CONTINUE_INDEXING --> <h1>{L_ACP_SEARCH_INDEX}</h1>
<a href="{U_CONTINUE_INDEXING}" onclick="javascript:popup_progress_bar('{S_CONTINUE_INDEXING}');">{L_CONTINUE}</a>
<p>{L_ACP_SEARCH_INDEX_EXPLAIN}</p>
<!-- IF S_CONTINUE_INDEXING -->
<a href="{U_CONTINUE_INDEXING}" onclick="javascript:popup_progress_bar('{S_CONTINUE_INDEXING}');">{L_CONTINUE}</a>
<p>{L_CONTINUE_EXPLAIN}</p>
<!-- ELSE -->
<!-- BEGIN backend -->
<!-- IF backend.S_STATS -->
<table cellspacing="1">
<caption>&raquo; {L_INDEX_STATS}: {backend.L_NAME} <!-- IF backend.S_ACTIVE -->({L_ACTIVE}) <!-- ENDIF --></caption>
<col class="col1" /><col class="col2" /><col class="col1" /><col class="col2" />
<thead>
<tr>
<th>{L_STATISTIC}</th>
<th>{L_VALUE}</th>
<th>{L_STATISTIC}</th>
<th>{L_VALUE}</th>
</tr>
</thead>
<tbody>
<!-- BEGIN data -->
<tr>
<td>{backend.data.STATISTIC_1}:</td>
<td>{backend.data.VALUE_1}</td>
<td>{backend.data.STATISTIC_2}<!-- IF backend.data.STATISTIC_2 -->:<!-- ENDIF --></td>
<td>{backend.data.VALUE_2}</td>
</tr>
<!-- END data -->
</tbody>
</table>
<!-- ENDIF -->
<form id="acp_search_index_{backend.NAME}" method="post" action="{U_ACTION}">
{backend.S_HIDDEN_FIELDS}
<fieldset class="quick">
<!-- IF backend.S_INDEXED -->
<input class="button2" type="submit" name="action[delete]" value="{L_DELETE_INDEX}" onclick="javascript:popup_progress_bar('delete')" />
<!-- ELSE -->
<input class="button2" type="submit" name="action[create]" value="{L_CREATE_INDEX}" onclick="javascript:popup_progress_bar('create')" />
<!-- ENDIF -->
</fieldset>
</form>
<!-- END backend -->
<!-- ENDIF -->
<p>{L_CONTINUE_EXPLAIN}</p>
<!-- ELSE -->
<!-- BEGIN backend -->
<!-- IF backend.S_STATS -->
<table cellspacing="1">
<caption>&raquo; {L_INDEX_STATS}: {backend.L_NAME} <!-- IF backend.S_ACTIVE -->({L_ACTIVE}) <!-- ENDIF --></caption>
<col class="col1" /><col class="col2" /><col class="col1" /><col class="col2" />
<thead>
<tr>
<th>{L_STATISTIC}</th>
<th>{L_VALUE}</th>
<th>{L_STATISTIC}</th>
<th>{L_VALUE}</th>
</tr>
</thead>
<tbody>
<!-- BEGIN data -->
<tr>
<td>{backend.data.STATISTIC_1}:</td>
<td>{backend.data.VALUE_1}</td>
<td>{backend.data.STATISTIC_2}<!-- IF backend.data.STATISTIC_2 -->:<!-- ENDIF --></td>
<td>{backend.data.VALUE_2}</td>
</tr>
<!-- END data -->
</tbody>
</table>
<!-- ENDIF -->
<form id="acp_search_index_{backend.NAME}" method="post" action="{U_ACTION}">
{backend.S_HIDDEN_FIELDS}
<fieldset class="quick">
<!-- IF backend.S_INDEXED -->
<input class="button2" type="submit" name="action[delete]" value="{L_DELETE_INDEX}" onclick="javascript:popup_progress_bar('delete')" />
<!-- ELSE -->
<input class="button2" type="submit" name="action[create]" value="{L_CREATE_INDEX}" onclick="javascript:popup_progress_bar('create')" />
<!-- ENDIF -->
</fieldset>
</form>
<!-- END backend -->
<!-- ENDIF -->
<!-- ENDIF --> <!-- ENDIF -->
<!-- INCLUDE overall_footer.html --> <!-- INCLUDE overall_footer.html -->

View file

@ -39,352 +39,367 @@
<p>{L_EXPLAIN}</p> <p>{L_EXPLAIN}</p>
<script language="javascript" type="text/javascript" defer="defer"> <script language="javascript" type="text/javascript" defer="defer">
<!-- <!--
function update_image(newimage)
function update_image(newimage) {
{ document.newimg.src = (newimage) ? "../styles/{NAME}/imageset/" + newimage : "images/no_image.png";
document.newimg.src = (newimage) ? "../styles/{NAME}/imageset/" + newimage : "images/no_image.png"; }
}
//--> //-->
</script> </script>
<form method="post" action="{U_ACTION}"><table width="95%" cellspacing="1" cellpadding="1" border="0" align="center"> <form method="post" action="{U_ACTION}">
<tr>
<td align="right">{L_SELECT_IMAGE}: <select name="imgname" onchange="this.form.submit(); "> <table width="95%" cellspacing="1" cellpadding="1" border="0" align="center">
<!-- BEGIN category --> <tr>
<td align="right">{L_SELECT_IMAGE}: <select name="imgname" onchange="this.form.submit(); ">
<!-- BEGIN category -->
<option class="sep" value="">{category.NAME}</option> <option class="sep" value="">{category.NAME}</option>
<!-- BEGIN images --><option value="{category.images.VALUE}"<!-- IF category.images.SELECTED--> selected="selected"<!-- ENDIF -->>{category.images.TEXT}</option> <!-- BEGIN images --><option value="{category.images.VALUE}"<!-- IF category.images.SELECTED--> selected="selected"<!-- ENDIF -->>{category.images.TEXT}</option>
<!-- END images --> <!-- END images -->
<!-- END category --> <!-- END category -->
</select>&nbsp; <input class="btnlite" type="submit" value="{L_SELECT}" tabindex="100" /></td> </select>&nbsp; <input class="btnlite" type="submit" value="{L_SELECT}" tabindex="100" />
</tr> </td>
<tr> </tr>
<td><table class="bg" width="100%" cellspacing="1" cellpadding="4" border="0" align="center"> <tr>
<tr> <td>
<th colspan="2">{L_EDIT_IMAGESET}</th> <table class="bg" width="100%" cellspacing="1" cellpadding="4" border="0" align="center">
</tr> <tr>
<!-- IF SUCCESS --> <th colspan="2">{L_EDIT_IMAGESET}</th>
<tr> </tr>
<td class="row1" colspan="2" align="center"><span style="color: green">{L_IMAGESET_UPDATED}</span><br /></td> <!-- IF SUCCESS -->
</tr> <tr>
<!-- ENDIF --> <td class="row1" colspan="2" align="center"><span style="color: green">{L_IMAGESET_UPDATED}</span><br /></td>
<!-- IF ERROR --> </tr>
<tr> <!-- ENDIF -->
<td class="row1" colspan="2" align="center"><span style="color: red">{L_NO_IMAGE}</span><br /></td> <!-- IF ERROR -->
</tr> <tr>
<!-- ENDIF --> <td class="row1" colspan="2" align="center"><span style="color: red">{L_NO_IMAGE}</span><br /></td>
<tr> </tr>
<td class="row1" colspan="2" align="center"><table width="100%" cellspacing="2" cellpadding="2" border="0"> <!-- ENDIF -->
<tr> <tr>
<td width="50%" align="center"><img src="<!-- IF IMAGE_REQUEST neq '' -->{IMAGE_REQUEST}<!-- ELSE -->images/no_image.png<!-- ENDIF -->"/></td> <td class="row1" colspan="2" align="center">
<td width="50%" align="center"><img src="images/no_image.png" name="newimg" /></td> <table width="100%" cellspacing="2" cellpadding="2" border="0">
</tr> <tr>
<tr> <td width="50%" align="center"><img src="<!-- IF IMAGE_REQUEST neq '' -->{IMAGE_REQUEST}<!-- ELSE -->images/no_image.png<!-- ENDIF -->"/></td>
<td class="gensmall" align="center">{L_CURRENT_IMAGE}</td> <td width="50%" align="center"><img src="images/no_image.png" name="newimg" /></td>
<td class="gensmall" align="center">{L_SELECTED_IMAGE}</td> </tr>
</tr> <tr>
</table></td> <td class="gensmall" align="center">{L_CURRENT_IMAGE}</td>
</tr> <td class="gensmall" align="center">{L_SELECTED_IMAGE}</td>
<tr> </tr>
<th width="40%">{L_IMAGE_PARAMETER}</th> </table>
<th>{L_IMAGE_VALUE}</th> </td>
</tr> </tr>
<tr> <tr>
<td class="row1" width="40%"><b>{L_IMAGE}: </b></td> <th width="40%">{L_IMAGE_PARAMETER}</th>
<td class="row2"><select name="imgpath" onchange="update_image(this.options[selectedIndex].value);"><option value=""<!-- IF not IMAGE_SELECT--> selected="selected"<!-- ENDIF -->>{L_NONE}</option> <th>{L_IMAGE_VALUE}</th>
</tr>
<tr>
<td class="row1" width="40%"><b>{L_IMAGE}: </b></td>
<td class="row2"><select name="imgpath" onchange="update_image(this.options[selectedIndex].value);"><option value=""<!-- IF not IMAGE_SELECT--> selected="selected"<!-- ENDIF -->>{L_NONE}</option>
<!-- BEGIN imagesetlist --> <!-- BEGIN imagesetlist -->
<option class="sep" value=""><!-- IF imagesetlist.TYPE -->{L_LOCALISED_IMAGES}<!-- ELSE -->{L_GLOBAL_IMAGES}<!-- ENDIF --></option> <option class="sep" value=""><!-- IF imagesetlist.TYPE -->{L_LOCALISED_IMAGES}<!-- ELSE -->{L_GLOBAL_IMAGES}<!-- ENDIF --></option>
<!-- BEGIN images --> <!-- BEGIN images -->
<option value="{imagesetlist.images.VALUE}"<!-- IF imagesetlist.images.SELECTED--> selected="selected"<!-- ENDIF -->>{imagesetlist.images.TEXT}</option> <option value="{imagesetlist.images.VALUE}"<!-- IF imagesetlist.images.SELECTED--> selected="selected"<!-- ENDIF -->>{imagesetlist.images.TEXT}</option>
<!-- END images --> <!-- END images -->
<!-- END imagesetlist --> <!-- END imagesetlist -->
</select></td> </select>
</tr> </td>
<tr> </tr>
<td class="row1" width="40%"><b>{L_INCLUDE_DIMENSIONS}: </b><br /><span class="gensmall">{L_DIMENSIONS_EXPLAIN}</span></td> <tr>
<td class="row2"><input type="radio" name="imgsize" value="1"<!-- IF IMAGE_SIZE --> checked="checked"<!-- ENDIF --> /> {L_YES}&nbsp;&nbsp;<input type="radio" name="imgsize" value="0"<!-- IF not IMAGE_SIZE --> checked="checked"<!-- ENDIF --> /> {L_NO}</td> <td class="row1" width="40%"><b>{L_INCLUDE_DIMENSIONS}: </b><br /><span class="gensmall">{L_DIMENSIONS_EXPLAIN}</span></td>
</tr> <td class="row2"><input type="radio" name="imgsize" value="1"<!-- IF IMAGE_SIZE --> checked="checked"<!-- ENDIF --> /> {L_YES}&nbsp;&nbsp;<input type="radio" name="imgsize" value="0"<!-- IF not IMAGE_SIZE --> checked="checked"<!-- ENDIF --> /> {L_NO}</td>
<tr> </tr>
<td class="cat" colspan="2" align="center"><input class="btnmain" type="submit" name="update" value="{L_SUBMIT}" />&nbsp;&nbsp;<input class="btnmain" type="reset" value="{L_RESET}" /></td> <tr>
</tr> <td class="cat" colspan="2" align="center"><input class="btnmain" type="submit" name="update" value="{L_SUBMIT}" />&nbsp;&nbsp;<input class="btnmain" type="reset" value="{L_RESET}" /></td>
</table></td> </tr>
</tr> </table>
</table></form> </td>
</tr>
</table>
</form>
<!-- ELSEIF S_EDIT_TEMPLATE or S_EDIT_THEME --> <!-- ELSEIF S_EDIT_TEMPLATE or S_EDIT_THEME -->
<script language="javascript" type="text/javascript" defer="defer"> <script language="javascript" type="text/javascript" defer="defer">
<!-- <!--
function append_text_rows(form_name, value)
function append_text_rows(form_name, value)
{
url = document.getElementById(form_name).action;
var_start = url.indexOf('&text_rows=');
if (var_start == -1)
{ {
document.getElementById(form_name).action = url + "&text_rows=" + value; url = document.getElementById(form_name).action;
} var_start = url.indexOf('&text_rows=');
else if (var_start == -1)
{
url_start = url.substring(0, var_start + 1);
var_end = url.substring(var_start + 1).indexOf('&');
if (var_end == -1)
{ {
document.getElementById(form_name).action = url_start + "text_rows=" + value; document.getElementById(form_name).action = url + "&text_rows=" + value;
} }
else else
{ {
document.getElementById(form_name).action = url_start + url.substring(var_end + var_start + 2) + "&text_rows=" + value; url_start = url.substring(0, var_start + 1);
var_end = url.substring(var_start + 1).indexOf('&');
if (var_end == -1)
{
document.getElementById(form_name).action = url_start + "text_rows=" + value;
}
else
{
document.getElementById(form_name).action = url_start + url.substring(var_end + var_start + 2) + "&text_rows=" + value;
}
} }
} }
}
//--> //-->
</script> </script>
<!-- IF S_EDIT_TEMPLATE -->
<a href="{U_BACK}" style="float: right">&laquo; {L_BACK}</a> <!-- IF S_EDIT_TEMPLATE -->
<h1>{L_EDIT_TEMPLATE}</h1> <a href="{U_BACK}" style="float: right">&laquo; {L_BACK}</a>
<p>{L_EDIT_TEMPLATE_EXPLAIN}</p> <h1>{L_EDIT_TEMPLATE}</h1>
<p>{L_SELECTED_TEMPLATE}: <b>{SELECTED_TEMPLATE}</b></p> <p>{L_EDIT_TEMPLATE_EXPLAIN}</p>
<form id="acp_styles" method="post" action="{U_ACTION}"> <p>{L_SELECTED_TEMPLATE}: <b>{SELECTED_TEMPLATE}</b></p>
<fieldset> <form id="acp_styles" method="post" action="{U_ACTION}">
<legend>{L_SELECT_TEMPLATE}</legend>
<fieldset>
<legend>{L_SELECT_TEMPLATE}</legend>
<dl> <dl>
<dt><label for="template_file">{L_TEMPLATE_FILE}:</label></dt> <dt><label for="template_file">{L_TEMPLATE_FILE}:</label></dt>
<dd><select id="template_file" name="template_file" onchange="if (this.options[this.selectedIndex].value != '') this.form.submit();">{S_TEMPLATES}</select> <input class="btnlite" type="submit" value="{L_SELECT}" /></dd> <dd><select id="template_file" name="template_file" onchange="if (this.options[this.selectedIndex].value != '') this.form.submit();">{S_TEMPLATES}</select> <input class="btnlite" type="submit" value="{L_SELECT}" /></dd>
</dl> </dl>
</fieldset> </fieldset>
</form> </form>
<!-- IF TEMPLATE_FILE --> <!-- IF TEMPLATE_FILE -->
<script language="javascript" type="text/javascript" defer="defer"> <script language="javascript" type="text/javascript" defer="defer">
<!-- <!--
function change_editor_height(height) function change_editor_height(height)
{ {
editor = document.getElementById('template_data'); editor = document.getElementById('template_data');
editor.rows = Math.max(5, Math.min(height, 999)); editor.rows = Math.max(5, Math.min(height, 999));
append_text_rows('acp_styles', height); append_text_rows('acp_styles', height);
append_text_rows('acp_template', height); append_text_rows('acp_template', height);
} }
function append_text_rows(form_name, value) function append_text_rows(form_name, value)
{ {
url = document.getElementById(form_name).action; url = document.getElementById(form_name).action;
var_start = url.indexOf('&text_rows='); var_start = url.indexOf('&text_rows=');
if (var_start == -1) if (var_start == -1)
{ {
document.getElementById(form_name).action = url + "&text_rows=" + value; document.getElementById(form_name).action = url + "&text_rows=" + value;
} }
else else
{ {
url_start = url.substring(0, var_start + 1); url_start = url.substring(0, var_start + 1);
var_end = url.substring(var_start + 1).indexOf('&'); var_end = url.substring(var_start + 1).indexOf('&');
if (var_end == -1) if (var_end == -1)
{
document.getElementById(form_name).action = url_start + "text_rows=" + value;
}
else
{
document.getElementById(form_name).action = url_start + url.substring(var_end + var_start + 2) + "&text_rows=" + value;
}
}
}
//-->
</script>
<form id="acp_template" method="post" action="{U_ACTION}">
<fieldset>
<legend>{L_TEMPLATE_EDITOR}</legend>
<dl>
<dt><label>{L_SELECTED_TEMPLATE_FILE}:</label></dt>
<dd>{TEMPLATE_FILE}</dd>
</dl>
<dl>
<dt><label for="text_rows">{L_TEMPLATE_EDITOR_HEIGHT}:</label></dt>
<dd><input id="text_rows" type="text" maxlength="3" value="{TEXT_ROWS}" /> <input class="btnlite" type="button" name="update" onclick="change_editor_height(this.form.text_rows.value);" value="{L_UPDATE}" /></dd>
</dl>
<textarea id="template_data" name="template_data" style="font-family:'Courier New', monospace;font-size:9pt;line-height:125%;width:100%;" cols="80" rows="{TEXT_ROWS}">{TEMPLATE_DATA}</textarea>
</fieldset>
<fieldset class="submit-buttons">
{S_HIDDEN_FIELDS}
<input class="button1" id="save" type="submit" name="save" value="{L_SUBMIT}" />
</fieldset>
</form>
<!-- ENDIF -->
<!-- ELSEIF S_EDIT_THEME -->
<script language="javascript" type="text/javascript">
<!--
function swatch(field)
{ {
document.getElementById(form_name).action = url_start + "text_rows=" + value; window.open('{UA_SWATCH}' + field, '_swatch', 'HEIGHT=115,resizable=yes,scrollbars=no,WIDTH=636');
return false;
} }
else
function change_editor_height(height)
{ {
document.getElementById(form_name).action = url_start + url.substring(var_end + var_start + 2) + "&text_rows=" + value; editor = document.getElementById('css_data');
editor.rows = Math.max(5, Math.min(height, 999));
append_text_rows('acp_styles', height);
append_text_rows('acp_theme', height);
append_text_rows('acp_custom_class', height);
} }
}
}
//-->
</script>
<form id="acp_template" method="post" action="{U_ACTION}"> //-->
</script>
<fieldset> <a href="{U_BACK}" style="float: right">&laquo; {L_BACK}</a>
<legend>{L_TEMPLATE_EDITOR}</legend>
<dl>
<dt><label>{L_SELECTED_TEMPLATE_FILE}:</label></dt>
<dd>{TEMPLATE_FILE}</dd>
</dl>
<dl>
<dt><label for="text_rows">{L_TEMPLATE_EDITOR_HEIGHT}:</label></dt>
<dd><input id="text_rows" type="text" maxlength="3" value="{TEXT_ROWS}" /> <input class="btnlite" type="button" name="update" onclick="change_editor_height(this.form.text_rows.value);" value="{L_UPDATE}" /></dd>
</dl>
<textarea id="template_data" name="template_data" style="font-family:'Courier New', monospace;font-size:9pt;line-height:125%;width:100%;" cols="80" rows="{TEXT_ROWS}">{TEMPLATE_DATA}</textarea>
</fieldset>
<fieldset class="submit-buttons"> <h1>{L_EDIT_THEME}</h1>
{S_HIDDEN_FIELDS}
<input class="button1" id="save" type="submit" name="save" value="{L_SUBMIT}" />
</fieldset>
<p>{L_EDIT_THEME_EXPLAIN}</p>
</form> <p>{L_SELECTED_THEME}: <b>{SELECTED_THEME}</b></p>
<!-- ENDIF -->
<!-- ELSEIF S_EDIT_THEME --> <!-- IF S_SHOWCSS -->
<h3>{L_SHOW_CSS_NOTE}</h3>
<p>{L_SHOW_CSS_EXPLAIN}</p>
<!-- ENDIF -->
<script language="javascript" type="text/javascript"> <form id="acp_styles" method="post" action="{U_ACTION}">
<!--
function swatch(field) <fieldset>
{ <legend>{L_SELECT_CLASS}</legend>
window.open('{UA_SWATCH}' + field, '_swatch', 'HEIGHT=115,resizable=yes,scrollbars=no,WIDTH=636');
return false;
}
function change_editor_height(height)
{
editor = document.getElementById('css_data');
editor.rows = Math.max(5, Math.min(height, 999));
append_text_rows('acp_styles', height);
append_text_rows('acp_theme', height);
append_text_rows('acp_custom_class', height);
}
//-->
</script>
<a href="{U_BACK}" style="float: right">&laquo; {L_BACK}</a>
<h1>{L_EDIT_THEME}</h1>
<p>{L_EDIT_THEME_EXPLAIN}</p>
<p>{L_SELECTED_THEME}: <b>{SELECTED_THEME}</b></p>
<!-- IF S_SHOWCSS -->
<h3>{L_SHOW_CSS_NOTE}</h3>
<p>{L_SHOW_CSS_EXPLAIN}</p>
<!-- ENDIF -->
<form id="acp_styles" method="post" action="{U_ACTION}">
<fieldset>
<legend>{L_SELECT_CLASS}</legend>
<dl> <dl>
<dt><label for="css_class">{L_SELECT_CLASS}:</label></dt> <dt><label for="css_class">{L_SELECT_CLASS}:</label></dt>
<dd><select id="css_class" name="css_class" onchange="if (this.options[this.selectedIndex].value != '') this.form.submit();">{S_CLASSES}</select> <input class="btnlite" type="submit" id="select_class" name="select_class" value="{L_SELECT}" /></dd> <dd><select id="css_class" name="css_class" onchange="if (this.options[this.selectedIndex].value != '') this.form.submit();">{S_CLASSES}</select> <input class="btnlite" type="submit" id="select_class" name="select_class" value="{L_SELECT}" /></dd>
</dl> </dl>
<!-- IF S_CLASS --> <!-- IF S_CLASS -->
<dl> <dl>
<dt><label>{L_SELECTED_CLASS}:</label></dt> <dt><label>{L_SELECTED_CLASS}:</label></dt>
<dd>{S_CLASS}</dd> <dd>{S_CLASS}</dd>
</dl> </dl>
<!-- ENDIF --> <!-- ENDIF -->
</fieldset> </fieldset>
</form>
</form>
<!-- IF S_CLASS --> <!-- IF S_CLASS -->
<form id="acp_theme" method="post" action="{U_ACTION}"> <form id="acp_theme" method="post" action="{U_ACTION}">
<!-- IF S_SHOWCSS --> <!-- IF S_SHOWCSS -->
<fieldset> <fieldset>
<legend>{L_THEME_EDITOR}</legend> <legend>{L_THEME_EDITOR}</legend>
<dl> <dl>
<dt><label for="text_rows">{L_THEME_EDITOR_HEIGHT}:</label></dt> <dt><label for="text_rows">{L_THEME_EDITOR_HEIGHT}:</label></dt>
<dd><input id="text_rows" type="text" maxlength="3" value="{TEXT_ROWS}" /> <input class="btnlite" type="button" name="update" onclick="change_editor_height(this.form.text_rows.value);" value="{L_UPDATE}" /></dd> <dd><input id="text_rows" type="text" maxlength="3" value="{TEXT_ROWS}" /> <input class="btnlite" type="button" name="update" onclick="change_editor_height(this.form.text_rows.value);" value="{L_UPDATE}" /></dd>
</dl> </dl>
<textarea id="css_data" name="css_data" style="font-family:'Courier New', monospace;font-size:9pt;line-height:125%;width:100%;" cols="80" rows="{TEXT_ROWS}">{CSS_DATA}</textarea> <textarea id="css_data" name="css_data" style="font-family:'Courier New', monospace;font-size:9pt;line-height:125%;width:100%;" cols="80" rows="{TEXT_ROWS}">{CSS_DATA}</textarea>
</fieldset> </fieldset>
<!-- ELSE --> <!-- ELSE -->
<fieldset> <fieldset>
<legend>{L_BACKGROUND}</legend> <legend>{L_BACKGROUND}</legend>
<dl> <dl>
<dt><label for="background_color">{L_BACKGROUND_COLOUR}:</label><br /><span>{L_CSS_COLOUR_EXPLAIN}</span></dt> <dt><label for="background_color">{L_BACKGROUND_COLOUR}:</label><br /><span>{L_CSS_COLOUR_EXPLAIN}</span></dt>
<dd><input id="background_color" name="background_color" type="text" value="{BACKGROUND_COLOR}" size="6" />&nbsp;&nbsp;<span>[ <a href="#" onclick="swatch('background_color'); return false">{L_COLOUR_SWATCH}</a> ]</span></dd> <dd><input id="background_color" name="background_color" type="text" value="{BACKGROUND_COLOR}" size="6" />&nbsp;&nbsp;<span>[ <a href="#" onclick="swatch('background_color'); return false">{L_COLOUR_SWATCH}</a> ]</span></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="backround_image">{L_BACKGROUND_IMAGE}:</label></td> <dt><label for="backround_image">{L_BACKGROUND_IMAGE}:</label></td>
<dd><select id="background_image" name="background_image">{S_BACKGROUND_IMAGE}</select></dd> <dd><select id="background_image" name="background_image">{S_BACKGROUND_IMAGE}</select></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="background_repeat">{L_BACKGROUND_REPEAT}:</label></dt> <dt><label for="background_repeat">{L_BACKGROUND_REPEAT}:</label></dt>
<dd><select id="background_repeat" name="background_repeat">{S_BACKGROUND_REPEAT}</select></dd> <dd><select id="background_repeat" name="background_repeat">{S_BACKGROUND_REPEAT}</select></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>{L_FOREGROUND}</legend> <legend>{L_FOREGROUND}</legend>
<dl> <dl>
<dt><label for="color">{L_FONT_COLOUR}:</label><br /><span>{L_CSS_COLOUR_EXPLAIN}</span></dt> <dt><label for="color">{L_FONT_COLOUR}:</label><br /><span>{L_CSS_COLOUR_EXPLAIN}</span></dt>
<dd><input id="color" name="color" type="text" value="{COLOR}" size="6" />&nbsp;&nbsp;<span>[ <a href="#" onclick="swatch('color'); return false">{L_COLOUR_SWATCH}</a> ]</span></dd> <dd><input id="color" name="color" type="text" value="{COLOR}" size="6" />&nbsp;&nbsp;<span>[ <a href="#" onclick="swatch('color'); return false">{L_COLOUR_SWATCH}</a> ]</span></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="font_family">{L_FONT_FACE}:</label><br /><span>{L_FONT_FACE_EXPLAIN}</span></dt> <dt><label for="font_family">{L_FONT_FACE}:</label><br /><span>{L_FONT_FACE_EXPLAIN}</span></dt>
<dd><input id="font_family" name="font_family" type="text" value="{FONT_FAMILY}" size="40" maxlength="255" /></dd> <dd><input id="font_family" name="font_family" type="text" value="{FONT_FAMILY}" size="40" maxlength="255" /></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="font_size">{L_FONT_SIZE}:</label></dt> <dt><label for="font_size">{L_FONT_SIZE}:</label></dt>
<dd><input id="font_size" name="font_size" type="text" value="{FONT_SIZE}" size="3" maxlength="3" /> <select id="font_size_unit" name="font_size_unit">{S_FONT_SIZE_UNITS}</select></dd> <dd><input id="font_size" name="font_size" type="text" value="{FONT_SIZE}" size="3" maxlength="3" /> <select id="font_size_unit" name="font_size_unit">{S_FONT_SIZE_UNITS}</select></dd>
</dl> </dl>
<dl> <dl>
<dt><label for="font_weight">{L_BOLD}:</label></dt> <dt><label for="font_weight">{L_BOLD}:</label></dt>
<dd><input id="font_weight" type="radio" name="font_weight" value="bold"<!-- IF FONT_WEIGHT eq "bold" --> checked="checked"<!-- ENDIF --> /> {L_YES} &nbsp; <input type="radio" name="font_weight" value="normal"<!-- IF FONT_WEIGHT eq "normal" --> checked="checked"<!-- ENDIF --> /> {L_NO} &nbsp; <input type="radio" name="font_weight" value=""<!-- IF not FONT_WEIGHT --> checked="checked"<!-- ENDIF --> /> {L_UNSET}</dd> <dd><input id="font_weight" type="radio" name="font_weight" value="bold"<!-- IF FONT_WEIGHT eq "bold" --> checked="checked"<!-- ENDIF --> /> {L_YES} &nbsp; <input type="radio" name="font_weight" value="normal"<!-- IF FONT_WEIGHT eq "normal" --> checked="checked"<!-- ENDIF --> /> {L_NO} &nbsp; <input type="radio" name="font_weight" value=""<!-- IF not FONT_WEIGHT --> checked="checked"<!-- ENDIF --> /> {L_UNSET}</dd>
</dl> </dl>
<dl> <dl>
<dt><label for="font_style">{L_ITALIC}:</label></dt> <dt><label for="font_style">{L_ITALIC}:</label></dt>
<dd><input id="font_style" type="radio" name="font_style" value="italic"<!-- IF FONT_STYLE eq "italic" --> checked="checked"<!-- ENDIF --> /> {L_YES} &nbsp; <input type="radio" name="font_style" value="normal"<!-- IF FONT_STYLE eq "normal" --> checked="checked"<!-- ENDIF --> /> {L_NO} &nbsp; <input type="radio" name="font_style" value=""<!-- IF not FONT_STYLE --> checked="checked"<!-- ENDIF --> /> {L_UNSET}</dd> <dd><input id="font_style" type="radio" name="font_style" value="italic"<!-- IF FONT_STYLE eq "italic" --> checked="checked"<!-- ENDIF --> /> {L_YES} &nbsp; <input type="radio" name="font_style" value="normal"<!-- IF FONT_STYLE eq "normal" --> checked="checked"<!-- ENDIF --> /> {L_NO} &nbsp; <input type="radio" name="font_style" value=""<!-- IF not FONT_STYLE --> checked="checked"<!-- ENDIF --> /> {L_UNSET}</dd>
</dl> </dl>
<dl> <dl>
<dt><label for="text_decoration">{L_UNDERLINE}:</label></dt> <dt><label for="text_decoration">{L_UNDERLINE}:</label></dt>
<dd><input id="text_decoration" type="radio" name="text_decoration" value="underline"<!-- IF TEXT_DECORATION eq "underline" --> checked="checked"<!-- ENDIF --> /> {L_YES} &nbsp; <input type="radio" name="text_decoration" value="normal"<!-- IF TEXT_DECORATION eq "normal" --> checked="checked"<!-- ENDIF --> /> {L_NO} &nbsp; <input type="radio" name="text_decoration" value=""<!-- IF not TEXT_DECORATION --> checked="checked"<!-- ENDIF --> /> {L_UNSET}</dd> <dd><input id="text_decoration" type="radio" name="text_decoration" value="underline"<!-- IF TEXT_DECORATION eq "underline" --> checked="checked"<!-- ENDIF --> /> {L_YES} &nbsp; <input type="radio" name="text_decoration" value="normal"<!-- IF TEXT_DECORATION eq "normal" --> checked="checked"<!-- ENDIF --> /> {L_NO} &nbsp; <input type="radio" name="text_decoration" value=""<!-- IF not TEXT_DECORATION --> checked="checked"<!-- ENDIF --> /> {L_UNSET}</dd>
</dl> </dl>
<dl> <dl>
<dt><label for="line_height">{L_LINE_SPACING}</label></dt> <dt><label for="line_height">{L_LINE_SPACING}</label></dt>
<dd><input id="line_height" name="line_height" type="text" value="{LINE_HEIGHT}" size="3" maxlength="3" /> <select id="line_height_unit" name="line_height_unit">{S_LINE_HEIGHT_UNITS}</select></dd> <dd><input id="line_height" name="line_height" type="text" value="{LINE_HEIGHT}" size="3" maxlength="3" /> <select id="line_height_unit" name="line_height_unit">{S_LINE_HEIGHT_UNITS}</select></dd>
</dl> </dl>
</fieldset> </fieldset>
<!-- ENDIF --> <!-- ENDIF -->
<fieldset class="submit-buttons">
{S_HIDDEN_FIELDS}
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />&nbsp;
<!-- IF S_SHOWCSS -->
<input class="button2" type="submit" id="hidecss" name="hidecss" value="{L_HIDE_CSS}" />&nbsp;
<!-- ELSE -->
<input class="button2" type="submit" id="showcss" name="showcss" value="{L_SHOW_CSS}" />&nbsp;
<!-- ENDIF -->
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
</fieldset>
</form>
<fieldset class="submit-buttons">
{S_HIDDEN_FIELDS}
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />&nbsp;
<!-- IF S_SHOWCSS -->
<input class="button2" type="submit" id="hidecss" name="hidecss" value="{L_HIDE_CSS}" />&nbsp;
<!-- ELSE -->
<input class="button2" type="submit" id="showcss" name="showcss" value="{L_SHOW_CSS}" />&nbsp;
<!-- ENDIF --> <!-- ENDIF -->
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
</fieldset>
</form> <br />
<h1>{L_CUSTOM_CLASS}</h1>
<!-- ENDIF --> <p>{L_CUSTOM_CLASS_EXPLAIN}</p>
<br /> <form id="acp_custom_class" method="post" action="{U_ACTION}">
<h1>{L_CUSTOM_CLASS}</h1>
<p>{L_CUSTOM_CLASS_EXPLAIN}</p> <fieldset>
<legend>{L_CUSTOM_CLASS}</legend>
<form id="acp_custom_class" method="post" action="{U_ACTION}">
<fieldset>
<legend>{L_CUSTOM_CLASS}</legend>
<dl> <dl>
<dt><label for="custom_class">{L_CSS_CLASS_NAME}:</label></dt></dt> <dt><label for="custom_class">{L_CSS_CLASS_NAME}:</label></dt></dt>
<dd><input id="custom_class" name="custom_class" type="text" value="" maxlength="40" size="40" /></dd> <dd><input id="custom_class" name="custom_class" type="text" value="" maxlength="40" size="40" /></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="quick"> <fieldset class="quick">
<input class="button1" type="submit" id="add_custom" name="add_custom" value="{L_SUBMIT}" /> <input class="button1" type="submit" id="add_custom" name="add_custom" value="{L_SUBMIT}" />
</fieldset> </fieldset>
</form>
<!-- ENDIF -->
</form>
<!-- ENDIF -->
<!-- ELSEIF S_CACHE --> <!-- ELSEIF S_CACHE -->
<script language="Javascript" type="text/javascript"> <script language="Javascript" type="text/javascript">
<!-- <!--
function viewsource(url) function viewsource(url)
{ {
window.open(url, '_source', 'HEIGHT=550,resizable=yes,scrollbars=yes,WIDTH=750'); window.open(url, '_source', 'HEIGHT=550,resizable=yes,scrollbars=yes,WIDTH=750');
return false; return false;
} }
//--> //-->
</script> </script>
@ -398,17 +413,17 @@
<form name="acp_styles" method="post" action="{U_ACTION}"> <form name="acp_styles" method="post" action="{U_ACTION}">
<table cellspacing="1"> <table cellspacing="1">
<thead> <thead>
<tr> <tr>
<th>{L_CACHE_FILENAME}</th> <th>{L_CACHE_FILENAME}</th>
<th>{L_CACHE_FILESIZE}</th> <th>{L_CACHE_FILESIZE}</th>
<th>{L_CACHE_CACHED}</th> <th>{L_CACHE_CACHED}</th>
<th>{L_CACHE_MODIFIED}</th> <th>{L_CACHE_MODIFIED}</th>
<th>{L_MARK}</th> <th>{L_MARK}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<!-- BEGIN file --> <!-- BEGIN file -->
<!-- IF file.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF --> <!-- IF file.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->
<td><a href="{file.U_VIEWSOURCE}" onclick="viewsource('{file.UA_VIEWSOURCE}');return false">{file.FILENAME}</a></td> <td><a href="{file.U_VIEWSOURCE}" onclick="viewsource('{file.UA_VIEWSOURCE}');return false">{file.FILENAME}</a></td>
<td>{file.FILESIZE}</td> <td>{file.FILESIZE}</td>
@ -416,11 +431,12 @@
<td>{file.MODIFIED}</td> <td>{file.MODIFIED}</td>
<td><input type="checkbox" name="delete[]" value="{file.FILENAME}" /></td> <td><input type="checkbox" name="delete[]" value="{file.FILENAME}" /></td>
</tr> </tr>
<!-- BEGINELSE --> <!-- BEGINELSE -->
<tr class="row1"> <tr class="row1">
<td colspan="5">{L_TEMPLATE_CACHE_EMPTY}</td> <td colspan="5">{L_TEMPLATE_CACHE_EMPTY}</td>
</tr> </tr>
<!-- END file --> <!-- END file -->
</tbody>
</table> </table>
<fieldset class="quick"> <fieldset class="quick">
@ -428,7 +444,9 @@
<input class="button1" type="submit" id="submit" name="submit" value="{L_DELETE_MARKED}" /> <input class="button1" type="submit" id="submit" name="submit" value="{L_DELETE_MARKED}" />
</fieldset> </fieldset>
</form> </form>
<!-- ELSEIF S_EXPORT --> <!-- ELSEIF S_EXPORT -->
<a href="{U_BACK}" style="float: right">&laquo; {L_BACK}</a> <a href="{U_BACK}" style="float: right">&laquo; {L_BACK}</a>
@ -438,10 +456,10 @@
<p>{L_EXPLAIN}</p> <p>{L_EXPLAIN}</p>
<!-- IF S_ERROR_MSG --> <!-- IF S_ERROR_MSG -->
<div class="errorbox"> <div class="errorbox">
<h3>{L_WARNING}</h3> <h3>{L_WARNING}</h3>
<p>{ERROR_MSG}</p> <p>{ERROR_MSG}</p>
</div> </div>
<!-- ENDIF --> <!-- ENDIF -->
<form id="acp_styles" method="post" action="{U_ACTION}"> <form id="acp_styles" method="post" action="{U_ACTION}">
@ -453,18 +471,18 @@
<dd><b>{NAME}</b></dd> <dd><b>{NAME}</b></dd>
</dl> </dl>
<!-- IF S_STYLE --> <!-- IF S_STYLE -->
<dl> <dl>
<dt><label for="inc_template">{L_INCLUDE_TEMPLATE}:</label></dt> <dt><label for="inc_template">{L_INCLUDE_TEMPLATE}:</label></dt>
<dd><input type="radio" class="radio" id="inc_template" name="inc_template" value="1" checked="checked" />&nbsp; {L_YES} &nbsp;<input type="radio" class="radio" name="inc_template" value="0" />&nbsp; {L_NO}</dd> <dd><input type="radio" class="radio" id="inc_template" name="inc_template" value="1" checked="checked" />&nbsp; {L_YES} &nbsp;<input type="radio" class="radio" name="inc_template" value="0" />&nbsp; {L_NO}</dd>
</dl> </dl>
<dl> <dl>
<dt><label for="inc_theme">{L_INCLUDE_THEME}:</label></dt> <dt><label for="inc_theme">{L_INCLUDE_THEME}:</label></dt>
<dd><input type="radio" class="radio" id="inc_theme" name="inc_theme" value="1" checked="checked" />&nbsp; {L_YES} &nbsp;<input type="radio" class="radio" name="inc_theme" value="0" />&nbsp; {L_NO}</dd> <dd><input type="radio" class="radio" id="inc_theme" name="inc_theme" value="1" checked="checked" />&nbsp; {L_YES} &nbsp;<input type="radio" class="radio" name="inc_theme" value="0" />&nbsp; {L_NO}</dd>
</dl> </dl>
<dl> <dl>
<dt><label for="inc_imageset">{L_INCLUDE_IMAGESET}:</label></dt> <dt><label for="inc_imageset">{L_INCLUDE_IMAGESET}:</label></dt>
<dd><input type="radio" class="radio" id="inc_imageset" name="inc_imageset" value="1" checked="checked" />&nbsp; {L_YES} &nbsp;<input type="radio" class="radio" name="inc_imageset" value="0" />&nbsp; {L_NO}</dd> <dd><input type="radio" class="radio" id="inc_imageset" name="inc_imageset" value="1" checked="checked" />&nbsp; {L_YES} &nbsp;<input type="radio" class="radio" name="inc_imageset" value="0" />&nbsp; {L_NO}</dd>
</dl> </dl>
<!-- ENDIF --> <!-- ENDIF -->
<dl> <dl>
<dt><label for="store">{L_DOWNLOAD_STORE}:</label><br /><span>{L_DOWNLOAD_STORE_EXPLAIN}</span></dt> <dt><label for="store">{L_DOWNLOAD_STORE}:</label><br /><span>{L_DOWNLOAD_STORE_EXPLAIN}</span></dt>
@ -523,27 +541,27 @@
<td class="row3" colspan="{$COLSPAN}"><b>{L_UNINSTALLED}</b></td> <td class="row3" colspan="{$COLSPAN}"><b>{L_UNINSTALLED}</b></td>
</tr> </tr>
<!-- IF not .uninstalled --> <!-- IF not .uninstalled -->
<tr> <tr>
<td class="row1" colspan="{$COLSPAN}" style="text-align: center;">{L_NO_UNINSTALLED}</td> <td class="row1" colspan="{$COLSPAN}" style="text-align: center;">{L_NO_UNINSTALLED}</td>
</tr> </tr>
<!-- ENDIF --> <!-- ENDIF -->
<!-- BEGIN uninstalled --> <!-- BEGIN uninstalled -->
<tr> <tr>
<td<!-- IF S_STYLE --> colspan="2"<!-- ENDIF -->><b>{uninstalled.NAME}</b><br /><span>{L_COPYRIGHT}: {uninstalled.COPYRIGHT}</span></td> <td<!-- IF S_STYLE --> colspan="2"<!-- ENDIF -->><b>{uninstalled.NAME}</b><br /><span>{L_COPYRIGHT}: {uninstalled.COPYRIGHT}</span></td>
<td style="text-align: center;"><a href="{uninstalled.U_INSTALL}">{L_INSTALL}</a></td> <td style="text-align: center;"><a href="{uninstalled.U_INSTALL}">{L_INSTALL}</a></td>
</tr> </tr>
<!-- END uninstalled --> <!-- END uninstalled -->
</tbody> </tbody>
</table> </table>
<!-- IF S_STYLE --> <!-- IF S_STYLE -->
<form id="acp_styles" method="post" action="{U_ACTION}"> <form id="acp_styles" method="post" action="{U_ACTION}">
<fieldset class="quick"> <fieldset class="quick">
{L_CREATE}: <input type="text" name="name" value="" /> {L_FROM} <select name="basis">{S_BASIS_OPTIONS}</select> <input class="button2" type="submit" name="add" value="{L_SUBMIT}" /> {L_CREATE}: <input type="text" name="name" value="" /> {L_FROM} <select name="basis">{S_BASIS_OPTIONS}</select> <input class="button2" type="submit" name="add" value="{L_SUBMIT}" />
</fieldset> </fieldset>
</form> </form>
<!-- ENDIF --> <!-- ENDIF -->
<!-- ELSEIF S_DETAILS --> <!-- ELSEIF S_DETAILS -->
@ -555,10 +573,10 @@
<p>{L_EXPLAIN}</p> <p>{L_EXPLAIN}</p>
<!-- IF S_ERROR_MSG --> <!-- IF S_ERROR_MSG -->
<div class="errorbox"> <div class="errorbox">
<h3>{L_WARNING}</h3> <h3>{L_WARNING}</h3>
<p>{ERROR_MSG}</p> <p>{ERROR_MSG}</p>
</div> </div>
<!-- ENDIF --> <!-- ENDIF -->
<form id="acp_styles" method="post" action="{U_ACTION}"> <form id="acp_styles" method="post" action="{U_ACTION}">

View file

@ -437,11 +437,11 @@
<fieldset> <fieldset>
<legend>{L_ACP_USER_AVATAR}</legend> <legend>{L_ACP_USER_AVATAR}</legend>
<dl> <dl>
<dt><label>{L_CURRENT_IMAGE}:</label><br /><span>{L_AVATAR_EXPLAIN}</span></dt> <dt><label>{L_CURRENT_IMAGE}:</label><br /><span>{L_AVATAR_EXPLAIN}</span></dt>
<dd>{AVATAR_IMAGE}</dd> <dd>{AVATAR_IMAGE}</dd>
<dd><input type="checkbox" name="delete" />&nbsp;<span>{L_DELETE_AVATAR}</span></dd> <dd><input type="checkbox" name="delete" />&nbsp;<span>{L_DELETE_AVATAR}</span></dd>
</dl> </dl>
<!-- IF not S_IN_AVATAR_GALLERY --> <!-- IF not S_IN_AVATAR_GALLERY -->
<!-- IF S_CAN_UPLOAD --> <!-- IF S_CAN_UPLOAD -->
<dl> <dl>
@ -474,26 +474,26 @@
<fieldset> <fieldset>
<legend>{L_AVATAR_GALLERY}</legend> <legend>{L_AVATAR_GALLERY}</legend>
<dl> <dl>
<dt><label for="category">{L_AVATAR_CATEGORY}:</label></dt> <dt><label for="category">{L_AVATAR_CATEGORY}:</label></dt>
<dd><select name="category" id="category">{S_CAT_OPTIONS}</select>&nbsp;<input class="button2" type="submit" value="{L_GO}" name="display_gallery" /></dd> <dd><select name="category" id="category">{S_CAT_OPTIONS}</select>&nbsp;<input class="button2" type="submit" value="{L_GO}" name="display_gallery" /></dd>
</dl> </dl>
<dl> <dl>
<table cellspacing="1"> <table cellspacing="1">
<!-- BEGIN avatar_row --> <!-- BEGIN avatar_row -->
<tr> <tr>
<!-- BEGIN avatar_column --> <!-- BEGIN avatar_column -->
<td class="row1" style="text-align: center;"><img src="{avatar_row.avatar_column.AVATAR_IMAGE}" alt="{avatar_row.avatar_column.AVATAR_NAME}" title="{avatar_row.avatar_column.AVATAR_NAME}" /></td> <td class="row1" style="text-align: center;"><img src="{avatar_row.avatar_column.AVATAR_IMAGE}" alt="{avatar_row.avatar_column.AVATAR_NAME}" title="{avatar_row.avatar_column.AVATAR_NAME}" /></td>
<!-- END avatar_column --> <!-- END avatar_column -->
</tr> </tr>
<tr> <tr>
<!-- BEGIN avatar_option_column --> <!-- BEGIN avatar_option_column -->
<td class="row2" style="text-align: center;"><input type="radio" class="radio" name="avatar_select" value="{avatar_row.avatar_option_column.S_OPTIONS_AVATAR}" /></td> <td class="row2" style="text-align: center;"><input type="radio" class="radio" name="avatar_select" value="{avatar_row.avatar_option_column.S_OPTIONS_AVATAR}" /></td>
<!-- END avatar_option_column --> <!-- END avatar_option_column -->
</tr> </tr>
<!-- END avatar_row --> <!-- END avatar_row -->
</table> </table>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="quick" style="margin-top: -15px;"> <fieldset class="quick" style="margin-top: -15px;">
@ -515,10 +515,10 @@
<fieldset> <fieldset>
<legend>{L_ACP_USER_RANK}</legend> <legend>{L_ACP_USER_RANK}</legend>
<dl> <dl>
<dt><label for="user_rank">{L_USER_RANK}:</label></dt> <dt><label for="user_rank">{L_USER_RANK}:</label></dt>
<dd><select name="user_rank" id="user_rank">{S_RANK_OPTIONS}</select></dd> <dd><select name="user_rank" id="user_rank">{S_RANK_OPTIONS}</select></dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="quick"> <fieldset class="quick">
@ -562,10 +562,10 @@
<form id="user_signature" method="post" action="{U_ACTION}"> <form id="user_signature" method="post" action="{U_ACTION}">
<!-- IF SIGNATURE_PREVIEW --> <!-- IF SIGNATURE_PREVIEW -->
<fieldset> <fieldset>
<legend>{L_ADMIN_SIG_PREVIEW}</legend> <legend>{L_ADMIN_SIG_PREVIEW}</legend>
<p>{SIGNATURE_PREVIEW}</p> <p>{SIGNATURE_PREVIEW}</p>
</fieldset> </fieldset>
<!-- ENDIF --> <!-- ENDIF -->
<fieldset> <fieldset>
@ -591,19 +591,19 @@
<a href="javascript:bbstyle(-1)" onmouseover="helpline('a')">{L_CLOSE_TAGS}</a> <a href="javascript:bbstyle(-1)" onmouseover="helpline('a')">{L_CLOSE_TAGS}</a>
</div> </div>
<p><input type="text" name="helpbox" value="{L_STYLES_TIP}" class="full" style="border: 0; background: none;" /></p> <p><input type="text" name="helpbox" value="{L_STYLES_TIP}" class="full" style="border: 0; background: none;" /></p>
<dl> <dl>
<dt style="width: 110px;"><script type="text/javascript"><!-- <dt style="width: 110px;"><script type="text/javascript"><!--
colorPalette('v', 17, 5); colorPalette('v', 17, 5);
//--></script> //--></script>
</dt> </dt>
<dd style="text-align: left; margin-left: 110px;"><textarea name="signature" rows="10" cols="60" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);">{SIGNATURE}</textarea></dd> <dd style="text-align: left; margin-left: 110px;"><textarea name="signature" rows="10" cols="60" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);">{SIGNATURE}</textarea></dd>
<dd style="text-align: left; margin-left: 110px;"> <dd style="text-align: left; margin-left: 110px;">
<!-- IF S_BBCODE_ALLOWED --><input type="checkbox" name="disable_bbcode"{S_BBCODE_CHECKED} />&nbsp; {L_DISABLE_BBCODE} &nbsp;<!-- ENDIF --> <!-- IF S_BBCODE_ALLOWED --><input type="checkbox" name="disable_bbcode"{S_BBCODE_CHECKED} />&nbsp; {L_DISABLE_BBCODE} &nbsp;<!-- ENDIF -->
<!-- IF S_SMILIES_ALLOWED --><input type="checkbox" name="disable_smilies"{S_SMILIES_CHECKED} />&nbsp; {L_DISABLE_SMILIES} &nbsp;<!-- ENDIF --> <!-- IF S_SMILIES_ALLOWED --><input type="checkbox" name="disable_smilies"{S_SMILIES_CHECKED} />&nbsp; {L_DISABLE_SMILIES} &nbsp;<!-- ENDIF -->
<input type="checkbox" name="disable_magic_url"{S_MAGIC_URL_CHECKED} />&nbsp; {L_DISABLE_MAGIC_URL} &nbsp; <input type="checkbox" name="disable_magic_url"{S_MAGIC_URL_CHECKED} />&nbsp; {L_DISABLE_MAGIC_URL} &nbsp;
<br /><br /><strong>{L_OPTIONS}: </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {FLASH_STATUS} :: {SMILIES_STATUS} <br /><br /><strong>{L_OPTIONS}: </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {FLASH_STATUS} :: {SMILIES_STATUS}
</dd> </dd>
</dl> </dl>
</fieldset> </fieldset>
<fieldset class="quick"> <fieldset class="quick">

View file

@ -40,11 +40,11 @@
<table cellspacing="1"> <table cellspacing="1">
<thead> <thead>
<tr> <tr>
<th>{L_WORD}</th> <th>{L_WORD}</th>
<th>{L_REPLACEMENT}</th> <th>{L_REPLACEMENT}</th>
<th colspan="2">{L_ACTION}</th> <th colspan="2">{L_ACTION}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<!-- BEGIN words --> <!-- BEGIN words -->

View file

@ -1,8 +1,6 @@
/* phpBB 3.0 Admin Style Sheet /* phpBB 3.0 Admin Style Sheet
------------------------------------------------------------------------ ------------------------------------------------------------------------
Original author: subBlue ( http://www.subBlue.com/ ) Original author: subBlue ( http://www.subBlue.com/ )
Official update: $Id$
Copyright 2006 phpBB Group ( http://www.phpbb.com/ ) Copyright 2006 phpBB Group ( http://www.phpbb.com/ )
------------------------------------------------------------------------ ------------------------------------------------------------------------
*/ */
@ -14,12 +12,14 @@
/* Reset browsers default margin, padding and font sizes */ /* Reset browsers default margin, padding and font sizes */
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
html { html {
font-size: 100%; font-size: 100%;
height: 100%; height: 100%;
margin-bottom: 1px; margin-bottom: 1px;
} }
body { body {
/* Text-Sizing with ems: http://www.clagnut.com/blog/348/ */ /* Text-Sizing with ems: http://www.clagnut.com/blog/348/ */
font-family: Verdana, Helvetica, Arial, sans-serif; font-family: Verdana, Helvetica, Arial, sans-serif;
@ -27,48 +27,55 @@ body {
background: #E4EDF0 url("../images/bg_header.gif") 0 0 repeat-x; background: #E4EDF0 url("../images/bg_header.gif") 0 0 repeat-x;
font-size: 62.5%; /* This sets the default font size to be equivalent to 10px */ font-size: 62.5%; /* This sets the default font size to be equivalent to 10px */
margin: 0; margin: 0;
} }
img { img {
border: 0; border: 0;
} }
h1 { h1 {
font: bold 1.8em 'Trebuchet MS', Verdana, sans-serif; font: bold 1.8em 'Trebuchet MS', Verdana, sans-serif;
text-decoration: none; text-decoration: none;
color: #333333; color: #333333;
} }
h2, caption { h2, caption {
font: bold 1.2em Arial, Helvetica, sans-serif; font: bold 1.2em Arial, Helvetica, sans-serif;
text-decoration: none; text-decoration: none;
line-height: 120%; line-height: 120%;
text-align: left; text-align: left;
margin-top: 25px; margin-top: 25px;
} }
p { p {
margin-bottom: 0.7em; margin-bottom: 0.7em;
line-height: 1.4em; line-height: 1.4em;
font-size: 1.1em; font-size: 1.1em;
} }
hr { hr {
border: 0 none; border: 0 none;
border-top: 1px solid #999999; border-top: 1px solid #999999;
margin-bottom: 5px; margin-bottom: 5px;
padding-bottom: 5px; padding-bottom: 5px;
height: 1px; height: 1px;
} }
.small { .small {
font-size: 1em; font-size: 1em;
} }
/* General links */ /* General links */
a:link, a:active, a:visited { a:link, a:active, a:visited {
color: #006699; color: #006699;
text-decoration: none; text-decoration: none;
} }
a:hover { a:hover {
color: #DD6900; color: #DD6900;
text-decoration: underline; text-decoration: underline;
} }
/* Main blocks /* Main blocks
@ -76,45 +83,54 @@ a:hover {
#wrap { #wrap {
padding: 0 20px 15px 20px; padding: 0 20px 15px 20px;
min-width: 615px; min-width: 615px;
} }
#page-header { #page-header {
text-align: right; text-align: right;
background: url("../images/phpbb_logo.gif") 0 0 no-repeat; background: url("../images/phpbb_logo.gif") 0 0 no-repeat;
height: 84px; height: 84px;
} }
#page-header h1 { #page-header h1 {
font-family: Verdana, Arial, Helvetica, sans-serif; font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 1.5em; font-size: 1.5em;
font-weight: normal; font-weight: normal;
padding-top: 15px; padding-top: 15px;
} }
#page-header p { #page-header p {
font-size: 1.1em; font-size: 1.1em;
} }
#page-body { #page-body {
clear: both; clear: both;
} }
#page-footer { #page-footer {
clear: both; clear: both;
font-size: 1em; font-size: 1em;
text-align: center; text-align: center;
} }
#content { #content {
padding: 30px 10px 10px 10px; padding: 30px 10px 10px 10px;
} }
#content h1 { #content h1 {
line-height: 1.2em; line-height: 1.2em;
margin-bottom: 0px; margin-bottom: 0px;
} }
#main { #main {
float:left; float:left;
width: 76%; width: 76%;
margin-left: 3%; margin-left: 3%;
min-height: 350px; min-height: 350px;
} }
* html #main { * html #main {
height: 350px; height: 350px;
} }
/* Tabbed menu /* Tabbed menu
@ -124,19 +140,22 @@ a:hover {
line-height: normal; line-height: normal;
margin: 0 0 -6px 7px; margin: 0 0 -6px 7px;
min-width: 570px; min-width: 570px;
} }
#tabs ul { #tabs ul {
margin:0; margin:0;
padding: 0; padding: 0;
list-style: none; list-style: none;
} }
#tabs li { #tabs li {
display: inline; display: inline;
margin: 0; margin: 0;
padding: 0; padding: 0;
font-size: 1em; font-size: 1em;
font-weight: bold; font-weight: bold;
} }
#tabs a { #tabs a {
float:left; float:left;
background:url("../images/bg_tabs1.gif") no-repeat 0% -35px; background:url("../images/bg_tabs1.gif") no-repeat 0% -35px;
@ -144,7 +163,8 @@ a:hover {
padding: 0 0 0 6px; padding: 0 0 0 6px;
text-decoration: none; text-decoration: none;
position: relative; position: relative;
} }
#tabs a span { #tabs a span {
float: left; float: left;
display: block; display: block;
@ -153,32 +173,38 @@ a:hover {
color: #536482; color: #536482;
white-space: nowrap; white-space: nowrap;
text-transform: uppercase; text-transform: uppercase;
} }
/* Commented Backslash Hack hides rule from IE5-Mac \*/ /* Commented Backslash Hack hides rule from IE5-Mac \*/
#tabs a span { float:none; } #tabs a span { float:none; }
/* End hack */ /* End hack */
#tabs a:hover span { #tabs a:hover span {
color: #DD6900; color: #DD6900;
} }
#tabs #activetab a { #tabs #activetab a {
background-position: 0 0px; background-position: 0 0px;
border-bottom: 1px solid #FFFFFF; border-bottom: 1px solid #FFFFFF;
} }
#tabs #activetab a span { #tabs #activetab a span {
background-position: 100% 0px; background-position: 100% 0px;
padding-bottom: 7px; padding-bottom: 7px;
color: #333333; color: #333333;
} }
#tabs a:hover { #tabs a:hover {
background-position: 0 -70px; background-position: 0 -70px;
} }
#tabs a:hover span { #tabs a:hover span {
background-position:100% -70px; background-position:100% -70px;
} }
#tabs #activetab a:hover span { #tabs #activetab a:hover span {
color: #333333; color: #333333;
} }
/* Main Panel /* Main Panel
@ -187,11 +213,12 @@ a:hover {
margin: 4px 0; margin: 4px 0;
background-color: #FFFFFF; background-color: #FFFFFF;
border: solid 1px #A9B8C2; border: solid 1px #A9B8C2;
} }
span.corners-top, span.corners-bottom, span.corners-top, span.corners-bottom,
span.corners-top span, span.corners-bottom span { span.corners-top span, span.corners-bottom span {
display: none; display: none;
} }
/* Sub-navigation Menu /* Sub-navigation Menu
@ -201,20 +228,22 @@ span.corners-top span, span.corners-bottom span {
width: 20%; width: 20%;
font-size: 100%; font-size: 100%;
padding: 0; padding: 0;
} }
#menu p { #menu p {
font-size: 1em; font-size: 1em;
} }
#menu ul { #menu ul {
list-style: none; list-style: none;
} }
/* Default list state */ /* Default list state */
#menu li { #menu li {
font-size: 1em; font-size: 1em;
font-weight: bold; font-weight: bold;
display: inline; display: inline;
} }
/* Link styles for the sub-section links */ /* Link styles for the sub-section links */
#menu li span { #menu li span {
@ -226,17 +255,20 @@ span.corners-top span, span.corners-bottom span {
font-weight: bold; font-weight: bold;
background-color: #ECECEC; background-color: #ECECEC;
border-top: 1px solid #FFFFFF; border-top: 1px solid #FFFFFF;
} }
#menu li a:hover span, #menu li#activemenu span { #menu li a:hover span, #menu li#activemenu span {
text-decoration: none; text-decoration: none;
background-color: #FFA34F; background-color: #FFA34F;
color: #FFFFFF; color: #FFFFFF;
} }
#menu li span.completed { #menu li span.completed {
text-decoration: none; text-decoration: none;
background-color: #B9DBB3; background-color: #B9DBB3;
color: #006699; color: #006699;
} }
#menu li.header { #menu li.header {
display: block; display: block;
padding: 5px; padding: 5px;
@ -247,17 +279,19 @@ span.corners-top span, span.corners-bottom span {
background: #006699 url("../images/cellpic3.gif") 0 0 repeat-x; background: #006699 url("../images/cellpic3.gif") 0 0 repeat-x;
margin-top: 5px; margin-top: 5px;
text-transform: uppercase; text-transform: uppercase;
} }
#menu li#activemenu a span { #menu li#activemenu a span {
text-decoration: none; text-decoration: none;
font-weight: bold; font-weight: bold;
color: #000; color: #000;
background-color: #DADFE4; background-color: #DADFE4;
} }
#menu li#activemenu a:hover span { #menu li#activemenu a:hover span {
text-decoration: none; text-decoration: none;
color: #000; color: #000;
} }
/* Table styles /* Table styles
@ -266,22 +300,25 @@ span.corners-top span, span.corners-bottom span {
table { table {
width: 100%; width: 100%;
/*background-color: #ACBBC6;*/ /*background-color: #ACBBC6;*/
} }
th, td { th, td {
font-family: Verdana, Arial, Helvetica, sans-serif; font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 1.1em; font-size: 1.1em;
text-align: left; text-align: left;
} }
th {
th {
padding: 6px 4px; padding: 6px 4px;
color: #FFA34F; color: #FFA34F;
font-weight: bold; font-weight: bold;
background: #006699 url("../images/cellpic3.gif") 0 0 repeat-x; background: #006699 url("../images/cellpic3.gif") 0 0 repeat-x;
} }
td { td {
padding: 4px; padding: 4px;
line-height: 1.2em; line-height: 1.2em;
} }
.row1 { background-color: #EFEFEF; } .row1 { background-color: #EFEFEF; }
.row2 { background-color: #DEE3E7; } .row2 { background-color: #DEE3E7; }
@ -294,24 +331,26 @@ td {
background-color: #D1D7DC; background-color: #D1D7DC;
height: 1px; height: 1px;
line-height: 1px; line-height: 1px;
} }
table.type2 { table.type2 {
border: none; border: none;
background: none; background: none;
padding: 0; padding: 0;
width: 0; width: 0;
} }
table.type2 th { table.type2 th {
background: none; background: none;
border-top: none; border-top: none;
text-align: center; text-align: center;
color: #FFA34F; color: #FFA34F;
padding: 2px 0; padding: 2px 0;
} }
table.type2 td { table.type2 td {
padding: 0; padding: 0;
} }
/* General form styles /* General form styles
@ -325,13 +364,16 @@ fieldset {
border-top: 1px solid #D5D5C8; border-top: 1px solid #D5D5C8;
background-color: #ECECEC; background-color: #ECECEC;
position: relative; position: relative;
} }
* html fieldset { * html fieldset {
padding: 0 10px 5px 10px; padding: 0 10px 5px 10px;
} }
fieldset p { fieldset p {
font-size: 1.1em; font-size: 1.1em;
} }
legend { legend {
padding: 1px 0; padding: 1px 0;
font-family: arial,Verdana,Sans-serif; font-family: arial,Verdana,Sans-serif;
@ -343,12 +385,13 @@ legend {
line-height: 100%; line-height: 100%;
top: 0em; top: 0em;
vertical-align:middle; vertical-align:middle;
} }
* html legend { * html legend {
margin-bottom: -10px; margin-bottom: -10px;
margin-left: -7px; margin-left: -7px;
top: -1.2em; top: -1.2em;
} }
input { input {
font-family: Verdana, Helvetica, Arial, sans-serif; font-family: Verdana, Helvetica, Arial, sans-serif;
@ -363,7 +406,8 @@ input {
padding: 2px; padding: 2px;
cursor: text; cursor: text;
vertical-align: middle; vertical-align: middle;
} }
select { select {
font-family: Verdana, Helvetica, Arial, sans-serif; font-family: Verdana, Helvetica, Arial, sans-serif;
font-size: 100%; font-size: 100%;
@ -375,17 +419,21 @@ select {
border: 1px solid #666666; border: 1px solid #666666;
padding: 1px; padding: 1px;
background-color: #FAFAFA; background-color: #FAFAFA;
} }
optgroup { optgroup {
font-weight: bold; font-weight: bold;
} }
option { option {
padding-right: 1em; padding-right: 1em;
} }
.sep { .sep {
color: black; color: black;
background-color: #FFA34F; background-color: #FFA34F;
} }
textarea { textarea {
font-family: Verdana, Helvetica, Arial, sans-serif; font-family: Verdana, Helvetica, Arial, sans-serif;
font-size: 100%; font-size: 100%;
@ -397,19 +445,22 @@ textarea {
border-right: 1px solid #D5D5C8; border-right: 1px solid #D5D5C8;
border-bottom: 1px solid #D5D5C8; border-bottom: 1px solid #D5D5C8;
cursor: text; cursor: text;
} }
label { label {
cursor:pointer; cursor:pointer;
font-size: 1.1em; font-size: 1.1em;
padding-right: 5px; padding-right: 5px;
} }
label input { label input {
font-size: 100%; font-size: 100%;
vertical-align: middle; vertical-align: middle;
} }
label img { label img {
vertical-align: middle; vertical-align: middle;
} }
fieldset.quick { fieldset.quick {
margin: 0 0 5px 0; margin: 0 0 5px 0;
@ -418,14 +469,16 @@ fieldset.quick {
background-color: transparent; background-color: transparent;
text-align: right; text-align: right;
font-size: 1.1em; font-size: 1.1em;
} }
fieldset.nobg { fieldset.nobg {
margin: 15px 0 0 0; margin: 15px 0 0 0;
padding: 0; padding: 0;
border: none; border: none;
background-color: transparent; background-color: transparent;
font-size: 1.1em; font-size: 1.1em;
} }
fieldset.display-options { fieldset.display-options {
margin: 15px 0 2px 0; margin: 15px 0 2px 0;
padding: 0 0 4px 0; padding: 0 0 4px 0;
@ -433,21 +486,23 @@ fieldset.display-options {
background-color: transparent; background-color: transparent;
text-align: center; text-align: center;
font-size: 1.1em; font-size: 1.1em;
} }
fieldset.display-options select, fieldset.display-options input, fieldset.display-options label { fieldset.display-options select, fieldset.display-options input, fieldset.display-options label {
font-size: 100%; font-size: 100%;
vertical-align: middle; vertical-align: middle;
} }
select option.disabled { select option.disabled {
background-color: #bbb; background-color: #bbb;
color: #fff; color: #fff;
} }
/* Special case inputs */ /* Special case inputs */
select#board_timezone, select#board_timezone,
select#full_folder_action { select#full_folder_action {
width: 95%; width: 95%;
} }
/* Definition list layout for forms /* Definition list layout for forms
@ -455,11 +510,12 @@ select#full_folder_action {
---------------------------------------- */ ---------------------------------------- */
dl { dl {
font-family: Verdana, Helvetica, Arial, sans-serif; font-family: Verdana, Helvetica, Arial, sans-serif;
} }
dt { dt {
float: left; float: left;
width: auto; width: auto;
} }
dd { color: #000; } dd { color: #000; }
dd + dd { padding-top: 5px; } dd + dd { padding-top: 5px; }
@ -471,46 +527,55 @@ dt label {
font-size: 100%; font-size: 100%;
text-align: left; text-align: left;
font-weight: bold; font-weight: bold;
} }
dd label { dd label {
white-space: nowrap; white-space: nowrap;
margin-right: 10px; margin-right: 10px;
} }
html>body dd label input { vertical-align: text-bottom; } /* Tweak for Moz to align checkboxes/radio buttons nicely */ html>body dd label input { vertical-align: text-bottom; } /* Tweak for Moz to align checkboxes/radio buttons nicely */
dd input, dd input,
dd select { dd select {
max-width: 100%; max-width: 100%;
} }
dd textarea { dd textarea {
width: 100%; width: 100%;
} }
input.radio { input.radio {
width: auto !important; width: auto !important;
background-color: transparent; background-color: transparent;
border: none; border: none;
cursor: default; cursor: default;
} }
dd select { dd select {
width: auto; width: auto;
font-size: 100%; font-size: 100%;
} }
fieldset dl { fieldset dl {
margin-bottom: 10px; margin-bottom: 10px;
font-size: 1.1em; font-size: 1.1em;
} }
fieldset dt { fieldset dt {
width: 45%; width: 45%;
text-align: left; text-align: left;
border-right: 1px solid #CCC; border-right: 1px solid #CCC;
padding-top: 3px; padding-top: 3px;
} }
fieldset dd { fieldset dd {
margin-left: 45%; margin-left: 45%;
padding-left: 5px; padding-left: 5px;
border-left: 1px solid #CCC; border-left: 1px solid #CCC;
vertical-align: top; vertical-align: top;
} }
dd.full { dd.full {
margin-left: 0; margin-left: 0;
border: 0; border: 0;
@ -518,15 +583,16 @@ dd.full {
padding-top: 3px; padding-top: 3px;
text-align: center; text-align: center;
width: 95%; width: 95%;
} }
/* Hover highlights for form rows */ /* Hover highlights for form rows */
fieldset dl:hover dt label { fieldset dl:hover dt label {
color: #000000; color: #000000;
} }
input:focus, textarea:focus { input:focus, textarea:focus {
color: #000000; color: #000000;
} }
/* Submit button fieldset /* Submit button fieldset
@ -537,10 +603,11 @@ fieldset.submit-buttons {
margin: 0; margin: 0;
padding: 4px; padding: 4px;
margin-top: -1px; margin-top: -1px;
} }
fieldset.submit-buttons input { fieldset.submit-buttons input {
padding: 3px 2px; padding: 3px 2px;
} }
/* Input field styles /* Input field styles
@ -556,29 +623,33 @@ fieldset.submit-buttons input {
padding:2px; padding:2px;
cursor: text; cursor: text;
width: 75%; width: 75%;
} }
select.inputbox { select.inputbox {
cursor: pointer; cursor: pointer;
padding: 0; padding: 0;
width: auto; width: auto;
} }
.inputbox:hover { .inputbox:hover {
border-left: 1px solid #AFAEAA; border-left: 1px solid #AFAEAA;
border-top: 1px solid #AFAEAA; border-top: 1px solid #AFAEAA;
border-right: 1px solid #AFAEAA; border-right: 1px solid #AFAEAA;
border-bottom: 1px solid #AFAEAA; border-bottom: 1px solid #AFAEAA;
background-color: #E9E9E2; background-color: #E9E9E2;
} }
.inputbox:focus { .inputbox:focus {
border: 1px solid #BC2A4D; border: 1px solid #BC2A4D;
background-color: #E9E9E2; background-color: #E9E9E2;
color: #BC2A4D; color: #BC2A4D;
} }
input.full, input.full,
textarea.full { textarea.full {
width: 99%; width: 99%;
} }
* html input.full, * html textarea.full { width: 95%; } * html input.full, * html textarea.full { width: 95%; }
input.medium { width: 50%; } input.medium { width: 50%; }
input.narrow { width: 25%; } input.narrow { width: 25%; }
@ -596,11 +667,13 @@ input.autowidth { width: auto !important; }
margin-top: 5px; margin-top: 5px;
font-size: 1em; font-size: 1em;
padding-bottom: 2px; padding-bottom: 2px;
} }
.pagination strong, .pagination strong,
.pagination b { .pagination b {
font-weight: normal; font-weight: normal;
} }
.pagination span strong { .pagination span strong {
padding: 0 2px; padding: 0 2px;
margin: 0 2px; margin: 0 2px;
@ -608,7 +681,8 @@ input.autowidth { width: auto !important; }
color: #FFFFFF; color: #FFFFFF;
background: #069; background: #069;
border: 1px solid #069; border: 1px solid #069;
} }
.pagination span a, .pagination span a:link, .pagination span a:visited, .pagination span a:active { .pagination span a, .pagination span a:link, .pagination span a:visited, .pagination span a:active {
font-weight: normal; font-weight: normal;
text-decoration: none; text-decoration: none;
@ -617,16 +691,18 @@ input.autowidth { width: auto !important; }
padding: 0 2px; padding: 0 2px;
background: #ECEDEE; background: #ECEDEE;
border: 1px solid #B4BAC0; border: 1px solid #B4BAC0;
} }
.pagination span a:hover { .pagination span a:hover {
border-color: #069; border-color: #069;
background: #069; background: #069;
color: #FFF; color: #FFF;
text-decoration: none; text-decoration: none;
} }
.pagination img { .pagination img {
vertical-align: middle; vertical-align: middle;
} }
/* Form button styles /* Form button styles
@ -639,14 +715,16 @@ a.button2, input.button2 {
color: #000; color: #000;
background-color: #EFEFEF; background-color: #EFEFEF;
cursor: pointer; cursor: pointer;
} }
a.button1, input.button1 { a.button1, input.button1 {
font-weight: bold; font-weight: bold;
border: 1px solid #666666; border: 1px solid #666666;
} }
a.button2, input.button2 { a.button2, input.button2 {
border: 1px solid #666666; border: 1px solid #666666;
} }
/* <a> button in the style of the form buttons */ /* <a> button in the style of the form buttons */
a.button1, a.button1:link, a.button1:visited, a.button1:active, a.button1, a.button1:link, a.button1:visited, a.button1:active,
@ -654,7 +732,7 @@ a.button2, a.button2:link, a.button2:visited, a.button2:active {
text-decoration: none; text-decoration: none;
color: #000000; color: #000000;
padding: 4px 8px; padding: 4px 8px;
} }
/* Permission related /* Permission related
---------------------------------------- */ ---------------------------------------- */
@ -823,55 +901,65 @@ table.pmask td.name {
---------------------------------------- */ ---------------------------------------- */
.success { .success {
color: #282 !important; color: #282 !important;
} }
.error { .error {
color: #BC2A4D !important; color: #BC2A4D !important;
} }
.successbox, .errorbox { .successbox, .errorbox {
padding: 10px; padding: 10px;
margin: 20px 0; margin: 20px 0;
color: #1F5B13; color: #1F5B13;
text-align: center; text-align: center;
} }
.successbox { .successbox {
background-color: #B9DBB3; background-color: #B9DBB3;
} }
.errorbox { .errorbox {
background-color: #ECECEC; background-color: #ECECEC;
} }
.successbox h3, .errorbox h3 { .successbox h3, .errorbox h3 {
font-weight: bold; font-weight: bold;
font-size: 1.4em; font-size: 1.4em;
margin-bottom: 0.5em; margin-bottom: 0.5em;
} }
.successbox p, .errorbox p { .successbox p, .errorbox p {
font-size: 1.1em; font-size: 1.1em;
margin-bottom: 0; margin-bottom: 0;
} }
.successbox a, .errorbox a { .successbox a, .errorbox a {
font-weight: bold; font-weight: bold;
text-decoration: none; text-decoration: none;
} }
/* Special cases for the error page */ /* Special cases for the error page */
#errorpage #page-header a { #errorpage #page-header a {
font-weight: bold; font-weight: bold;
line-height: 6em; line-height: 6em;
} }
#errorpage #content { #errorpage #content {
padding-top: 10px; padding-top: 10px;
} }
#errorpage #content h1 { #errorpage #content h1 {
color: #DF075C; color: #DF075C;
} }
#errorpage #content h2 { #errorpage #content h2 {
margin-top: 20px; margin-top: 20px;
margin-bottom: 5px; margin-bottom: 5px;
border-bottom: 1px solid #CCCCCC; border-bottom: 1px solid #CCCCCC;
padding-bottom: 5px; padding-bottom: 5px;
color: #333333; color: #333333;
} }
/* Tooltip for permission roles */ /* Tooltip for permission roles */
.tooltip { .tooltip {
@ -896,10 +984,11 @@ table.pmask td.name {
*/ */
#format-buttons { #format-buttons {
margin: 15px 0 2px 0; margin: 15px 0 2px 0;
} }
#format-buttons input, #format-buttons select { #format-buttons input, #format-buttons select {
vertical-align: middle; vertical-align: middle;
} }
/* Nice method for clearing floated blocks without having to insert any extra markup /* Nice method for clearing floated blocks without having to insert any extra markup
From http://www.positioniseverything.net/easyclearing.html */ From http://www.positioniseverything.net/easyclearing.html */
@ -910,6 +999,7 @@ table.pmask td.name {
clear: both; clear: both;
visibility: hidden; visibility: hidden;
} }
/* Hide from Mac IE, Windows IE uses this as it doesn't support the :after method above \*/ /* Hide from Mac IE, Windows IE uses this as it doesn't support the :after method above \*/
.clearfix, #tabs, .row, #content, fieldset dl, #page-body { .clearfix, #tabs, .row, #content, fieldset dl, #page-body {
height: 1%; height: 1%;
@ -927,27 +1017,34 @@ table.pmask td.name {
text-align: right; text-align: right;
padding: 0px; padding: 0px;
} }
.source { .source {
font-family: 'Courier New', monospace; font-family: 'Courier New', monospace;
font-size: 125%; font-size: 125%;
line-height: 120%; line-height: 120%;
padding: 0px; padding: 0px;
} }
.syntaxbg { .syntaxbg {
color: #FFFFFF; color: #FFFFFF;
} }
.syntaxcomment { .syntaxcomment {
color: #FF8000; color: #FF8000;
} }
.syntaxdefault { .syntaxdefault {
color: #0000BB; color: #0000BB;
} }
.syntaxhtml { .syntaxhtml {
color: #000000; color: #000000;
} }
.syntaxkeyword { .syntaxkeyword {
color: #007700; color: #007700;
} }
.syntaxstring { .syntaxstring {
color: #DD0000; color: #DD0000;
} }

View file

@ -1,5 +1,7 @@
// bbCode control by subBlue design [ www.subBlue.com ] /**
// Includes unixsafe colour palette selector by SHS` * bbCode control by subBlue design [ www.subBlue.com ]
* Includes unixsafe colour palette selector by SHS`
*/
// Startup variables // Startup variables
var imageTag = false; var imageTag = false;
@ -10,51 +12,74 @@ var theSelection = false;
var clientPC = navigator.userAgent.toLowerCase(); // Get client info var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var clientVer = parseInt(navigator.appVersion); // Get browser version var clientVer = parseInt(navigator.appVersion); // Get browser version
var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1)); var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1));
var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1) var is_nav = ((clientPC.indexOf('mozilla') != -1) && (clientPC.indexOf('spoofer') == -1) && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera') == -1) && (clientPC.indexOf('webtv') == -1) && (clientPC.indexOf('hotjava') == -1));
&& (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
&& (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1)); var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1));
var is_mac = (clientPC.indexOf("mac")!=-1); var is_mac = (clientPC.indexOf('mac') != -1);
// Shows the help messages in the helpline window /**
function helpline(help) { * Shows the help messages in the helpline window
document.forms[form_name].helpbox.value = eval(help + "_help"); */
function helpline(help)
{
document.forms[form_name].helpbox.value = eval(help + '_help');
} }
// Replacement for arrayname.length property /**
function getarraysize(thearray) { * Replacement for arrayname.length property
for (i = 0; i < thearray.length; i++) { */
if ((thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null)) function getarraysize(thearray)
{
for (i = 0; i < thearray.length; i++)
{
if (thearray[i] == 'undefined' || thearray[i] == '' || thearray[i] == null)
{
return i; return i;
} }
}
return thearray.length; return thearray.length;
} }
// Replacement for arrayname.push(value) not implemented in IE until version 5.5 /**
// Appends element to the array * Replacement for arrayname.push(value) not implemented in IE until version 5.5
function arraypush(thearray,value) { * Appends element to the array
thearray[ getarraysize(thearray) ] = value; */
function arraypush(thearray,value)
{
thearray[getarraysize(thearray)] = value;
} }
// Replacement for arrayname.pop() not implemented in IE until version 5.5 /**
// Removes and returns the last element of an array * Replacement for arrayname.pop() not implemented in IE until version 5.5
function arraypop(thearray) { * Removes and returns the last element of an array
*/
function arraypop(thearray)
{
thearraysize = getarraysize(thearray); thearraysize = getarraysize(thearray);
retval = thearray[thearraysize - 1]; retval = thearray[thearraysize - 1];
delete thearray[thearraysize - 1]; delete thearray[thearraysize - 1];
return retval; return retval;
} }
function smiley(text) { /**
* Insert emoticon
*/
function smiley(text)
{
text = ' ' + text + ' '; text = ' ' + text + ' ';
if (document.forms[form_name].elements[text_name].createTextRange && document.forms[form_name].elements[text_name].caretPos) {
if (document.forms[form_name].elements[text_name].createTextRange && document.forms[form_name].elements[text_name].caretPos)
{
var caretPos = document.forms[form_name].elements[text_name].caretPos; var caretPos = document.forms[form_name].elements[text_name].caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text; caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
document.forms[form_name].elements[text_name].focus(); document.forms[form_name].elements[text_name].focus();
} else { }
else
{
var selStart = document.forms[form_name].elements[text_name].selectionStart; var selStart = document.forms[form_name].elements[text_name].selectionStart;
var selEnd = document.forms[form_name].elements[text_name].selectionEnd; var selEnd = document.forms[form_name].elements[text_name].selectionEnd;
@ -65,75 +90,23 @@ function smiley(text) {
} }
} }
function bbfontstyle(bbopen, bbclose) { /**
if ((clientVer >= 4) && is_ie && is_win) { * Apply bbcodes
theSelection = document.selection.createRange().text; */
if (!theSelection) { function bbfontstyle(bbopen, bbclose)
insert_text(bbopen + bbclose); {
document.forms[form_name].elements[text_name].focus();
return;
}
document.selection.createRange().text = bbopen + theSelection + bbclose;
document.forms[form_name].elements[text_name].focus();
return;
} else {
insert_text(bbopen + bbclose);
document.forms[form_name].elements[text_name].focus();
return;
}
storeCaret(document.forms[form_name].elements[text_name]);
}
function insert_text(text) {
if (document.forms[form_name].elements[text_name].createTextRange && document.forms[form_name].elements[text_name].caretPos) {
var caretPos = document.forms[form_name].elements[text_name].caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
} else {
var selStart = document.forms[form_name].elements[text_name].selectionStart;
var selEnd = document.forms[form_name].elements[text_name].selectionEnd;
mozWrap(document.forms[form_name].elements[text_name], text, '')
document.forms[form_name].elements[text_name].selectionStart = selStart + text.length;
document.forms[form_name].elements[text_name].selectionEnd = selEnd + text.length;
}
}
function attach_inline() {
insert_text('[attachment=' + document.forms[form_name].elements['attachments'].value + ']' + document.forms[form_name].elements['attachments'].options[document.forms[form_name].elements['attachments'].selectedIndex].text + '[/attachment]');
}
function bbstyle(bbnumber) {
donotinsert = false;
theSelection = false; theSelection = false;
bblast = 0;
document.forms[form_name].elements[text_name].focus(); document.forms[form_name].elements[text_name].focus();
if (bbnumber == -1) { // Close all open tags & default button names
while (bbcode[0]) {
butnumber = arraypop(bbcode) - 1;
document.forms[form_name].elements[text_name].value += bbtags[butnumber + 1];
buttext = eval('document.forms[form_name].addbbcode' + butnumber + '.value');
if (buttext != "[*]")
{
eval('document.forms[form_name].addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
}
}
document.forms[form_name].addbbcode10.value = "List";
bbtags[10] = "[list]";
document.forms[form_name].addbbcode12.value = "List=";
bbtags[12] = "[list=]";
imageTag = false; // All tags are closed including image tags :D
document.forms[form_name].elements[text_name].focus();
return;
}
if ((clientVer >= 4) && is_ie && is_win) if ((clientVer >= 4) && is_ie && is_win)
{ {
theSelection = document.selection.createRange().text; // Get text selection // Get text selection
if (theSelection) { theSelection = document.selection.createRange().text;
if (theSelection)
{
// Add tags around selection // Add tags around selection
document.selection.createRange().text = bbtags[bbnumber] + theSelection + bbtags[bbnumber+1]; document.selection.createRange().text = bbopen + theSelection + bbclose;
document.forms[form_name].elements[text_name].focus(); document.forms[form_name].elements[text_name].focus();
theSelection = ''; theSelection = '';
return; return;
@ -141,99 +114,296 @@ function bbstyle(bbnumber) {
} }
else if (document.forms[form_name].elements[text_name].selectionEnd && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0)) else if (document.forms[form_name].elements[text_name].selectionEnd && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0))
{ {
mozWrap(document.forms[form_name].elements[text_name], bbtags[bbnumber], bbtags[bbnumber+1]); mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose);
document.forms[form_name].elements[text_name].focus();
theSelection = '';
return;
}
// Close image tag before adding
if (imageTag)
{
insert_text(bbtags[15]);
// Remove the close image tag from the list
lastValue = arraypop(bbcode) - 1;
// Return button back to normal state
document.forms[form_name].addbbcode14.value = 'Img';
imageTag = false;
}
// Open tag
insert_text(bbopen + bbclose);
document.forms[form_name].elements[text_name].focus();
storeCaret(document.forms[form_name].elements[text_name]);
return;
}
/**
* Insert text at position
*/
function insert_text(text)
{
if (document.forms[form_name].elements[text_name].createTextRange && document.forms[form_name].elements[text_name].caretPos)
{
var caretPos = document.forms[form_name].elements[text_name].caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
}
else if (document.forms[form_name].elements[text_name].selectionStart)
{
var selStart = document.forms[form_name].elements[text_name].selectionStart;
var selEnd = document.forms[form_name].elements[text_name].selectionEnd;
mozWrap(document.forms[form_name].elements[text_name], text, '')
document.forms[form_name].elements[text_name].selectionStart = selStart + text.length;
document.forms[form_name].elements[text_name].selectionEnd = selEnd + text.length;
}
else
{
document.forms[form_name].elements[text_name].value = document.forms[form_name].elements[text_name].value + text;
}
}
/**
* Add inline attachment at position
*/
function attach_inline()
{
insert_text('[attachment=' + document.forms[form_name].elements['attachments'].value + ']' + document.forms[form_name].elements['attachments'].options[document.forms[form_name].elements['attachments'].selectedIndex].text + '[/attachment]');
document.forms[form_name].elements[text_name].focus();
}
/**
* Add quote text to message
*/
function addquote(post_id, username)
{
var message_name = 'message_' + post_id;
var theSelection = '';
var divarea = false;
if (document.all)
{
eval('divarea = document.all.' + message_name + ';');
}
else
{
eval("divarea = document.getElementById('" + message_name + "');");
}
// Get text selection - not only the post content :(
if (window.getSelection)
{
theSelection = window.getSelection().toString();
}
else if (document.getSelection)
{
theSelection = document.getSelection();
}
else if (document.selection)
{
theSelection = document.selection.createRange().text;
}
if (theSelection == '')
{
if (document.all)
{
theSelection = divarea.innerText;
}
else if (divarea.textContent)
{
theSelection = divarea.textContent;
}
else if (divarea.firstChild.nodeValue)
{
theSelection = divarea.firstChild.nodeValue;
}
}
if (theSelection)
{
insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
}
return;
}
/**
* bbstyle
*/
function bbstyle(bbnumber)
{
donotinsert = false;
theSelection = false;
bblast = 0;
document.forms[form_name].elements[text_name].focus();
// Close all open tags & default button names
if (bbnumber == -1)
{
while (bbcode[0])
{
butnumber = arraypop(bbcode) - 1;
document.forms[form_name].elements[text_name].value += bbtags[butnumber + 1];
buttext = eval('document.forms[form_name].addbbcode' + butnumber + '.value');
if (buttext != '[*]')
{
eval('document.forms[form_name].addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
}
}
document.forms[form_name].addbbcode10.value = 'List';
bbtags[10] = '[list]';
document.forms[form_name].addbbcode12.value = 'List=';
bbtags[12] = '[list=]';
// All tags are closed including image tags :D
imageTag = false;
document.forms[form_name].elements[text_name].focus();
return;
}
// [*] doesn't have an end tag
noEndTag = (bbtags[bbnumber] == '[*]')
if ((clientVer >= 4) && is_ie && is_win)
{
// Get text selection
theSelection = document.selection.createRange().text;
if (theSelection)
{
// Add tags around selection
document.selection.createRange().text = bbtags[bbnumber] + theSelection + ((!noEndTag) ? bbtags[bbnumber+1] : '');
document.forms[form_name].elements[text_name].focus();
theSelection = '';
return;
}
}
else if (document.forms[form_name].elements[text_name].selectionEnd && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0))
{
mozWrap(document.forms[form_name].elements[text_name], bbtags[bbnumber], ((!noEndTag) ? bbtags[bbnumber+1] : ''));
document.forms[form_name].elements[text_name].focus(); document.forms[form_name].elements[text_name].focus();
theSelection = ''; theSelection = '';
return; return;
} }
// Find last occurance of an open tag the same as the one just clicked // Find last occurance of an open tag the same as the one just clicked
for (i = 0; i < bbcode.length; i++) { for (i = 0; i < bbcode.length; i++)
if (bbcode[i] == bbnumber+1) { {
if (bbcode[i] == bbnumber+1)
{
bblast = i; bblast = i;
donotinsert = true; donotinsert = true;
} }
} }
if ((bbnumber == 10) && (bbtags[10] != "[*]")) if (bbnumber == 10 && bbtags[10] != '[*]')
{ {
if (donotinsert) if (donotinsert)
{ {
document.forms[form_name].addbbcode12.value = "List="; document.forms[form_name].addbbcode12.value = 'List=';
tmp_help = o_help; tmp_help = o_help;
o_help = e_help; o_help = e_help;
e_help = tmp_help; e_help = tmp_help;
bbtags[12] = "[list=]"; bbtags[12] = '[list=]';
} }
else else
{ {
document.forms[form_name].addbbcode12.value = "[*]"; document.forms[form_name].addbbcode12.value = '[*]';
tmp_help = o_help; tmp_help = o_help;
o_help = e_help; o_help = e_help;
e_help = tmp_help; e_help = tmp_help;
bbtags[12] = "[*]"; bbtags[12] = '[*]';
} }
} }
if ((bbnumber == 12) && (bbtags[12] != "[*]")) if (bbnumber == 12 && bbtags[12] != '[*]')
{ {
if (donotinsert) if (donotinsert)
{ {
document.forms[form_name].addbbcode10.value = "List"; document.forms[form_name].addbbcode10.value = 'List';
tmp_help = l_help; tmp_help = l_help;
l_help = e_help; l_help = e_help;
e_help = tmp_help; e_help = tmp_help;
bbtags[10] = "[list]"; bbtags[10] = '[list]';
} }
else else
{ {
document.forms[form_name].addbbcode10.value = "[*]"; document.forms[form_name].addbbcode10.value = '[*]';
tmp_help = l_help; tmp_help = l_help;
l_help = e_help; l_help = e_help;
e_help = tmp_help; e_help = tmp_help;
bbtags[10] = "[*]"; bbtags[10] = '[*]';
} }
} }
if (donotinsert) { // Close all open tags up to the one just clicked & default button names // Close all open tags up to the one just clicked & default button names
while (bbcode[bblast]) { if (donotinsert)
butnumber = arraypop(bbcode) - 1; {
if (bbtags[butnumber] != "[*]") while (bbcode[bblast])
{ {
insert_text(bbtags[butnumber + 1]); butnumber = arraypop(bbcode) - 1;
}
else if (bbtags[butnumber] != '[*]')
{ {
insert_text(bbtags[butnumber]); insert_text(bbtags[butnumber + 1]);
} }
buttext = eval('document.forms[form_name].addbbcode' + butnumber + '.value'); else
if (bbtags[butnumber] != "[*]") {
{ insert_text(bbtags[butnumber]);
eval('document.forms[form_name].addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
}
imageTag = false;
} }
document.forms[form_name].elements[text_name].focus();
return;
} else { // Open tags
if (imageTag && (bbnumber != 14)) { // Close image tag before adding another buttext = eval('document.forms[form_name].addbbcode' + butnumber + '.value');
if (bbtags[butnumber] != '[*]')
{
eval('document.forms[form_name].addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
}
imageTag = false;
}
document.forms[form_name].elements[text_name].focus();
return;
}
else
{
// Open tags
// Close image tag before adding another
if (imageTag && (bbnumber != 14))
{
insert_text(bbtags[15]); insert_text(bbtags[15]);
lastValue = arraypop(bbcode) - 1; // Remove the close image tag from the list // Remove the close image tag from the list
document.forms[form_name].addbbcode14.value = "Img"; // Return button back to normal state lastValue = arraypop(bbcode) - 1;
// Return button back to normal state
document.forms[form_name].addbbcode14.value = 'Img';
imageTag = false; imageTag = false;
} }
// Open tag // Open tag
insert_text(bbtags[bbnumber]); insert_text(bbtags[bbnumber]);
if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag // Check to stop additional tags after an unclosed image tag
if (bbtags[bbnumber] != "[*]") if (bbnumber == 14 && imageTag == false)
{ {
arraypush(bbcode,bbnumber+1); imageTag = 1;
}
if (bbtags[bbnumber] != '[*]')
{
arraypush(bbcode, bbnumber + 1);
eval('document.forms[form_name].addbbcode'+bbnumber+'.value += "*"'); eval('document.forms[form_name].addbbcode'+bbnumber+'.value += "*"');
} }
document.forms[form_name].elements[text_name].focus(); document.forms[form_name].elements[text_name].focus();
return; return;
} }
@ -241,66 +411,94 @@ function bbstyle(bbnumber) {
storeCaret(document.forms[form_name].elements[text_name]); storeCaret(document.forms[form_name].elements[text_name]);
} }
// From http://www.massless.org/mozedit/ /**
* From http://www.massless.org/mozedit/
*/
function mozWrap(txtarea, open, close) function mozWrap(txtarea, open, close)
{ {
var selLength = txtarea.textLength; var selLength = txtarea.textLength;
var selStart = txtarea.selectionStart; var selStart = txtarea.selectionStart;
var selEnd = txtarea.selectionEnd; var selEnd = txtarea.selectionEnd;
var scrollTop = txtarea.scrollTop;
if (selEnd == 1 || selEnd == 2) if (selEnd == 1 || selEnd == 2)
{
selEnd = selLength; selEnd = selLength;
}
var s1 = (txtarea.value).substring(0,selStart); var s1 = (txtarea.value).substring(0,selStart);
var s2 = (txtarea.value).substring(selStart, selEnd) var s2 = (txtarea.value).substring(selStart, selEnd)
var s3 = (txtarea.value).substring(selEnd, selLength); var s3 = (txtarea.value).substring(selEnd, selLength);
txtarea.value = s1 + open + s2 + close + s3; txtarea.value = s1 + open + s2 + close + s3;
txtarea.selectionStart = selEnd + open.length + close.length;
txtarea.selectionEnd = txtarea.selectionStart;
txtarea.focus();
txtarea.scrollTop = scrollTop;
return; return;
} }
// Insert at Claret position. Code from /**
// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130 * Insert at Claret position. Code from
function storeCaret(textEl) { * http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
if (textEl.createTextRange) { textEl.caretPos = document.selection.createRange().duplicate(); } */
function storeCaret(textEl)
{
if (textEl.createTextRange)
{
textEl.caretPos = document.selection.createRange().duplicate();
}
} }
/**
* Color pallette
*/
function colorPalette(dir, width, height) function colorPalette(dir, width, height)
{ {
var r = 0, g = 0, b = 0; var r = 0, g = 0, b = 0;
var numberList = new Array(6); var numberList = new Array(6);
numberList[0] = "00";
numberList[1] = "40"; numberList[0] = '00';
numberList[2] = "80"; numberList[1] = '40';
numberList[3] = "BF"; numberList[2] = '80';
numberList[4] = "FF"; numberList[3] = 'BF';
document.writeln('<table class="type2">'); numberList[4] = 'FF';
for(r = 0; r < 5; r++)
document.writeln('<table cellspacing="1" cellpadding="0" border="0">');
for (r = 0; r < 5; r++)
{ {
if (dir == 'h') if (dir == 'h')
{ {
document.writeln('<tr>'); document.writeln('<tr>');
} }
for(g = 0; g < 5; g++)
for (g = 0; g < 5; g++)
{ {
if (dir == 'v') if (dir == 'v')
{ {
document.writeln('<tr>'); document.writeln('<tr>');
} }
for(b = 0; b < 5; b++)
for (b = 0; b < 5; b++)
{ {
color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
document.write('<td bgcolor="#' + color + '">'); document.write('<td bgcolor="#' + color + '">');
document.write('<a href="javascript:bbfontstyle(\'[color=#' + color + ']\', \'[/color]\');" onmouseover="helpline(\'s\');"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>'); document.write('<a href="javascript:bbfontstyle(\'[color=#' + color + ']\', \'[/color]\');" onmouseover="helpline(\'s\');"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" border="0" alt="#' + color + '" title="#' + color + '" /></a>');
document.writeln('</td>'); document.writeln('</td>');
} }
if (dir == 'v') if (dir == 'v')
{ {
document.writeln('</tr>'); document.writeln('</tr>');
} }
} }
if (dir == 'h') if (dir == 'h')
{ {
document.writeln('</tr>'); document.writeln('</tr>');
} }
} }
document.writeln('</table>'); document.writeln('</table>');
} }

View file

@ -6,16 +6,16 @@
{BODY} {BODY}
<!-- IF S_LIST --> <!-- IF S_LIST -->
<table cellspacing="1"> <table cellspacing="1">
<caption>{L_AVAILABLE_CONVERTORS}</caption> <caption>{L_AVAILABLE_CONVERTORS}</caption>
<col class="col1" /><col class="col2" /><col class="col1" /><col class="col2" /> <col class="col1" /><col class="col2" /><col class="col1" /><col class="col2" />
<thead> <thead>
<tr> <tr>
<th>{L_SOFTWARE}</th> <th>{L_SOFTWARE}</th>
<th>{L_VERSION}</th> <th>{L_VERSION}</th>
<th>{L_AUTHOR}</th> <th>{L_AUTHOR}</th>
<th>{L_OPTIONS}</th> <th>{L_OPTIONS}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<!-- IF .convertors --> <!-- IF .convertors -->
@ -36,7 +36,7 @@
</tr> </tr>
<!-- ENDIF --> <!-- ENDIF -->
</tbody> </tbody>
</table> </table>
<!-- ENDIF --> <!-- ENDIF -->
<!-- IF .checks --> <!-- IF .checks -->
@ -88,13 +88,13 @@
<!-- ENDIF --> <!-- ENDIF -->
<!-- IF L_SUBMIT --> <!-- IF L_SUBMIT -->
<fieldset class="submit-buttons"> <fieldset class="submit-buttons">
<!-- IF L_MESSAGE --><p>{L_MESSAGE}</p><!-- ENDIF --> <!-- IF L_MESSAGE --><p>{L_MESSAGE}</p><!-- ENDIF -->
{S_HIDDEN} {S_HIDDEN}
<!-- IF L_SUBMIT --><input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" /><!-- ENDIF --> <!-- IF L_SUBMIT --><input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" /><!-- ENDIF -->
</fieldset> </fieldset>
<!-- ENDIF --> <!-- ENDIF -->
</form> </form>
<!-- INCLUDE install_footer.html --> <!-- INCLUDE install_footer.html -->

View file

@ -1,4 +1,4 @@
</div> </div>
</div> </div>
<span class="corners-bottom"><span></span></span> <span class="corners-bottom"><span></span></span>

View file

@ -54,22 +54,24 @@
<!-- ENDIF --> <!-- ENDIF -->
<!-- IF S_SHOW_DOWNLOAD --> <!-- IF S_SHOW_DOWNLOAD -->
<fieldset> <fieldset>
<legend>{L_DL_CONFIG}</legend> <legend>{L_DL_CONFIG}</legend>
<p>{L_DL_CONFIG_EXPLAIN}</p> <p>{L_DL_CONFIG_EXPLAIN}</p>
</fieldset> </fieldset>
<fieldset class="submit-buttons">
{S_HIDDEN} <fieldset class="submit-buttons">
<input class="button1" type="submit" id="dlconfig" name="dlconfig" value="{L_DL_DOWNLOAD}" />&nbsp;<input class="button1" type="submit" id="dldone" name="dldone" value="{L_DL_DONE}" /> {S_HIDDEN}
</fieldset> <input class="button1" type="submit" id="dlconfig" name="dlconfig" value="{L_DL_DOWNLOAD}" />&nbsp;<input class="button1" type="submit" id="dldone" name="dldone" value="{L_DL_DONE}" />
</fieldset>
<!-- ENDIF --> <!-- ENDIF -->
<!-- IF L_SUBMIT --> <!-- IF L_SUBMIT -->
<fieldset class="submit-buttons"> <fieldset class="submit-buttons">
{S_HIDDEN} {S_HIDDEN}
<!-- IF L_SUBMIT --><input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" /><!-- ENDIF --> <!-- IF L_SUBMIT --><input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" /><!-- ENDIF -->
</fieldset> </fieldset>
<!-- ENDIF --> <!-- ENDIF -->
</form> </form>
<!-- INCLUDE install_footer.html --> <!-- INCLUDE install_footer.html -->

View file

@ -1,5 +1,6 @@
<!-- INCLUDE install_header.html --> <!-- INCLUDE install_header.html -->
<h2>{TITLE}</h2> <h2>{TITLE}</h2>
{BODY} {BODY}
<!-- INCLUDE install_footer.html --> <!-- INCLUDE install_footer.html -->

View file

@ -1,4 +1,4 @@
</div> </div>
</div> </div>
<span class="corners-bottom"><span></span></span> <span class="corners-bottom"><span></span></span>
@ -13,7 +13,7 @@
"phpBB" linked to www.phpbb.com. If you refuse to include even this then support on our "phpBB" linked to www.phpbb.com. If you refuse to include even this then support on our
forums may be affected. forums may be affected.
The phpBB Group : 2004 The phpBB Group : 2006
// --> // -->
<div id="page-footer"> <div id="page-footer">

View file

@ -17,7 +17,9 @@ var on_page = '{ON_PAGE}';
var per_page = '{PER_PAGE}'; var per_page = '{PER_PAGE}';
var base_url = '{BASE_URL}'; var base_url = '{BASE_URL}';
// Jump to page /**
* Jump to page
*/
function jumpto() function jumpto()
{ {
var page = prompt(jump_page, on_page); var page = prompt(jump_page, on_page);
@ -28,8 +30,10 @@ function jumpto()
} }
} }
// Set display of page element /**
// s[-1,0,1] = hide,toggle display,show * Set display of page element
* s[-1,0,1] = hide,toggle display,show
*/
function dE(n, s, type) function dE(n, s, type)
{ {
if (!type) if (!type)
@ -45,8 +49,10 @@ function dE(n, s, type)
e.style.display = (s == 1) ? type : 'none'; e.style.display = (s == 1) ? type : 'none';
} }
// Mark/unmark checkboxes /**
// id = ID of parent container, name = name prefix, state = state [true/false] * Mark/unmark checkboxes
* id = ID of parent container, name = name prefix, state = state [true/false]
*/
function marklist(id, name, state) function marklist(id, name, state)
{ {
var parent = document.getElementById(id); var parent = document.getElementById(id);
@ -71,6 +77,9 @@ function marklist(id, name, state)
} }
} }
/**
* Open trace popup
*/
function trace(link) function trace(link)
{ {
window.open(link, '_trace', 'height=515, resizable=yes, scrollbars=yes, width=680'); window.open(link, '_trace', 'height=515, resizable=yes, scrollbars=yes, width=680');
@ -78,6 +87,9 @@ function trace(link)
} }
<!-- IF S_INCLUDE_SWATCH --> <!-- IF S_INCLUDE_SWATCH -->
/**
* Color swatch
*/
function swatch() function swatch()
{ {
window.open('{UA_SWATCH}', '_swatch', 'height=150, resizable=yes, scrollbars=no, width=636'); window.open('{UA_SWATCH}', '_swatch', 'height=150, resizable=yes, scrollbars=no, width=636');

View file

@ -11,8 +11,10 @@
{S_ROLE_JS_ARRAY} {S_ROLE_JS_ARRAY}
<!-- ENDIF --> <!-- ENDIF -->
// Show/hide option panels /**
// value = suffix for ID to show * Show/hide option panels
* value = suffix for ID to show
*/
function swap_options(pmask, fmask, cat) function swap_options(pmask, fmask, cat)
{ {
id = pmask + fmask + cat; id = pmask + fmask + cat;
@ -38,19 +40,21 @@
active_cat = cat; active_cat = cat;
} }
// Mark all radio buttons in one panel /**
// id = table ID container, s = status ['y'/'u'/'n'] * Mark all radio buttons in one panel
* id = table ID container, s = status ['y'/'u'/'n']
*/
function mark_options(id, s) function mark_options(id, s)
{ {
var t = document.getElementById(id); var t = document.getElementById(id);
if (!t) if (!t)
{ {
return; return;
} }
var rb = t.getElementsByTagName('input'); var rb = t.getElementsByTagName('input');
for (var r = 0; r < rb.length; r++ ) for (var r = 0; r < rb.length; r++ )
{ {
if (rb[r].id.substr(rb[r].id.length-1) == s) if (rb[r].id.substr(rb[r].id.length-1) == s)
@ -60,19 +64,21 @@
} }
} }
// Mark one radio button in one panel /**
// id = table ID container, field_name = the auth option, s = status ['y'/'u'/'n'] * Mark one radio button in one panel
* id = table ID container, field_name = the auth option, s = status ['y'/'u'/'n']
*/
function mark_one_option(id, field_name, s) function mark_one_option(id, field_name, s)
{ {
var t = document.getElementById(id); var t = document.getElementById(id);
if (!t) if (!t)
{ {
return; return;
} }
var rb = t.getElementsByTagName('input'); var rb = t.getElementsByTagName('input');
for (var r = 0; r < rb.length; r++ ) for (var r = 0; r < rb.length; r++ )
{ {
if (rb[r].id.substr(rb[r].id.length-field_name.length-3, field_name.length) == field_name && rb[r].id.substr(rb[r].id.length-1) == s) if (rb[r].id.substr(rb[r].id.length-field_name.length-3, field_name.length) == field_name && rb[r].id.substr(rb[r].id.length-1) == s)
@ -82,7 +88,9 @@
} }
} }
// Reset role dropdown field to Select role... if an option gets changed /**
* Reset role dropdown field to Select role... if an option gets changed
*/
function reset_role(id) function reset_role(id)
{ {
var t = document.getElementById(id); var t = document.getElementById(id);
@ -95,7 +103,9 @@
t.options[0].selected = true; t.options[0].selected = true;
} }
// Load role and set options accordingly /**
* Load role and set options accordingly
*/
function set_role_settings(role_id, target_id) function set_role_settings(role_id, target_id)
{ {
settings = role_options[role_id]; settings = role_options[role_id];

View file

@ -42,9 +42,9 @@
</tr> </tr>
<!-- END trace --> <!-- END trace -->
</tbody> </tbody>
</table> </table>
<br /> <br />
<!-- INCLUDE simple_footer.html --> <!-- INCLUDE simple_footer.html -->

View file

@ -1,7 +1,10 @@
<!-- INCLUDE simple_header.html --> <!-- INCLUDE simple_header.html -->
<script language="javascript" type="text/javascript"> <script type="text/javascript">
<!-- <!--
/**
* Close previously opened popup
*/
function close_popup() function close_popup()
{ {
if (opener != null) if (opener != null)
@ -22,14 +25,13 @@
//--> //-->
</script> </script>
<div class="successbox"> <div class="successbox">
<h3>{L_PROGRESS}</h3> <h3>{L_PROGRESS}</h3>
<img src="images/progress_bar.gif" alt="{L_PROGRESS}" /> <img src="images/progress_bar.gif" alt="{L_PROGRESS}" />
<p>{L_PROGRESS_EXPLAIN}</p> <p>{L_PROGRESS_EXPLAIN}</p>
</div> </div>
<script language="javascript" type="text/javascript"> <script type="text/javascript">
<!-- <!--
close_popup(); close_popup();
//--> //-->

View file

@ -10,13 +10,13 @@
"phpBB" linked to www.phpbb.com. If you refuse to include even this then support on our "phpBB" linked to www.phpbb.com. If you refuse to include even this then support on our
forums may be affected. forums may be affected.
The phpBB Group : 2004 The phpBB Group : 2006
// --> // -->
<div id="page-footer"> <div id="page-footer">
<!-- IF S_COPYRIGHT_HTML --> <!-- IF S_COPYRIGHT_HTML -->
<br />Powered by phpBB {VERSION} &copy; 2005 <a href="http://www.phpbb.com/">phpBB Group</a> <br />Powered by phpBB {VERSION} &copy; 2006 <a href="http://www.phpbb.com/">phpBB Group</a>
<!-- ENDIF --> <!-- ENDIF -->
<!-- IF DEBUG_OUTPUT --> <!-- IF DEBUG_OUTPUT -->

View file

@ -17,7 +17,9 @@ var on_page = '{ON_PAGE}';
var per_page = '{PER_PAGE}'; var per_page = '{PER_PAGE}';
var base_url = '{BASE_URL}'; var base_url = '{BASE_URL}';
// Jump to page /**
* Jump to page
*/
function jumpto() function jumpto()
{ {
var page = prompt(jump_page, on_page); var page = prompt(jump_page, on_page);
@ -28,8 +30,10 @@ function jumpto()
} }
} }
// Set display of page element /**
// s[-1,0,1] = hide,toggle display,show * Set display of page element
* s[-1,0,1] = hide,toggle display,show
*/
function dE(n, s, type) function dE(n, s, type)
{ {
if (!type) if (!type)
@ -45,8 +49,10 @@ function dE(n, s, type)
e.style.display = (s == 1) ? type : 'none'; e.style.display = (s == 1) ? type : 'none';
} }
// Mark/unmark checkboxes /**
// id = ID of parent container, name = name prefix, state = state [true/false] * Mark/unmark checkboxes
* id = ID of parent container, name = name prefix, state = state [true/false]
*/
function marklist(id, name, state) function marklist(id, name, state)
{ {
var parent = document.getElementById(id); var parent = document.getElementById(id);
@ -67,6 +73,9 @@ function marklist(id, name, state)
} }
<!-- IF S_INCLUDE_SWATCH --> <!-- IF S_INCLUDE_SWATCH -->
/**
* Color swatch
*/
function swatch() function swatch()
{ {
window.open('{UA_SWATCH}', '_swatch', 'height=115, resizable=yes, scrollbars=no, width=636'); window.open('{UA_SWATCH}', '_swatch', 'height=115, resizable=yes, scrollbars=no, width=636');

View file

@ -60,6 +60,9 @@ function enable_tooltips_link(id, headline, sub_id)
tooltip_mode = 'link'; tooltip_mode = 'link';
} }
/**
* Enable tooltip replacements for selects
*/
function enable_tooltips_select(id, headline, sub_id) function enable_tooltips_select(id, headline, sub_id)
{ {
var links, i, hold; var links, i, hold;
@ -105,6 +108,9 @@ function enable_tooltips_select(id, headline, sub_id)
tooltip_mode = 'select'; tooltip_mode = 'select';
} }
/**
* Prepare elements to replace
*/
function prepare(element) function prepare(element)
{ {
var tooltip, text, desc, title; var tooltip, text, desc, title;
@ -132,14 +138,25 @@ function prepare(element)
element.tooltip = tooltip; element.tooltip = tooltip;
element.onmouseover = show_tooltip; element.onmouseover = show_tooltip;
element.onmouseout = hide_tooltip; element.onmouseout = hide_tooltip;
if (tooltip_mode == 'link')
{
element.onmousemove = locate;
}
} }
/**
* Show tooltip
*/
function show_tooltip(e) function show_tooltip(e)
{ {
document.getElementById('_tooltip_container').appendChild(this.tooltip); document.getElementById('_tooltip_container').appendChild(this.tooltip);
locate(this); locate(this);
} }
/**
* Hide tooltip
*/
function hide_tooltip(e) function hide_tooltip(e)
{ {
var d = document.getElementById('_tooltip_container'); var d = document.getElementById('_tooltip_container');
@ -149,6 +166,9 @@ function hide_tooltip(e)
} }
} }
/**
* Set opacity on tooltip element
*/
function set_opacity(element) function set_opacity(element)
{ {
element.style.filter = 'alpha(opacity:95)'; element.style.filter = 'alpha(opacity:95)';
@ -157,6 +177,9 @@ function set_opacity(element)
element.style.opacity = '0.95'; element.style.opacity = '0.95';
} }
/**
* Create new element
*/
function create_element(tag, c) function create_element(tag, c)
{ {
var x = document.createElement(tag); var x = document.createElement(tag);
@ -165,59 +188,64 @@ function create_element(tag, c)
return x; return x;
} }
/**
* Correct positioning of tooltip container
*/
function locate(e) function locate(e)
{ {
var posx = 0; var posx = 0;
var posy = 0; var posy = 0;
e = e.parentNode;
if (e.offsetParent)
{
for (var posx = 0, posy = 0; e.offsetParent; e = e.offsetParent)
{
posx += e.offsetLeft;
posy += e.offsetTop;
}
}
else
{
posx = e.offsetLeft;
posy = e.offsetTop;
}
if (tooltip_mode == 'link') if (tooltip_mode == 'link')
{ {
if (e == null) document.getElementById('_tooltip_container').style.top=(posy+20) + 'px';
{
e = window.event;
}
if (e.pageX || e.pageY)
{
posx = e.pageX;
posy = e.pageY;
}
else if (e.clientX || e.clientY)
{
if (document.documentElement.scrollTop)
{
posx = e.clientX+document.documentElement.scrollLeft;
posy = e.clientY+document.documentElement.scrollTop;
}
else
{
posx = e.clientX+document.body.scrollLeft;
posy = e.clientY+document.body.scrollTop;
}
}
document.getElementById('_tooltip_container').style.top=(posy+10) + 'px';
document.getElementById('_tooltip_container').style.left=(posx-20) + 'px'; document.getElementById('_tooltip_container').style.left=(posx-20) + 'px';
} }
else else
{ {
e = e.parentNode;
if (e.offsetParent)
{
for (var posx = 0, posy = 0; e.offsetParent; e = e.offsetParent)
{
posx += e.offsetLeft;
posy += e.offsetTop;
}
}
else
{
posx = e.offsetLeft;
posy = e.offsetTop;
}
document.getElementById('_tooltip_container').style.top=(posy+30) + 'px'; document.getElementById('_tooltip_container').style.top=(posy+30) + 'px';
document.getElementById('_tooltip_container').style.left=(posx-205) + 'px'; document.getElementById('_tooltip_container').style.left=(posx-205) + 'px';
} }
/*
if (e == null)
{
e = window.event;
}
if (e.pageX || e.pageY)
{
posx = e.pageX;
posy = e.pageY;
}
else if (e.clientX || e.clientY)
{
if (document.documentElement.scrollTop)
{
posx = e.clientX+document.documentElement.scrollLeft;
posy = e.clientY+document.documentElement.scrollTop;
}
else
{
posx = e.clientX+document.body.scrollLeft;
posy = e.clientY+document.body.scrollTop;
}
}
*/
} }

View file

@ -1,19 +1,20 @@
<!-- INCLUDE simple_header.html --> <!-- INCLUDE simple_header.html -->
<div class="panel" style="padding:10px"> <div class="panel" style="padding: 10px;">
<h1>{FILENAME}</h1> <h1>{FILENAME}</h1>
<table> <table>
<tbody> <tbody>
<!-- BEGIN source --> <!-- BEGIN source -->
<tr valign="top"> <tr valign="top">
<td class="sourcenum">{source.LINENUM}&nbsp;&nbsp;</td> <td class="sourcenum">{source.LINENUM}&nbsp;&nbsp;</td>
<td class="source">{source.LINE}</td> <td class="source">{source.LINE}</td>
</tr> </tr>
<!-- END source --> <!-- END source -->
</tbody> </tbody>
</table> </table>
</div> </div>
<!-- INCLUDE simple_footer.html --> <!-- INCLUDE simple_footer.html -->

View file

@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="imagetoolbar" content="no" /> <meta http-equiv="imagetoolbar" content="no" />
<title>phpBB3 Color Swatch</title> <title>Color Swatch</title>
<style type="text/css"> <style type="text/css">
<!-- <!--

View file

@ -33,17 +33,17 @@ error_reporting(E_ALL ^ E_NOTICE);
function deregister_globals() function deregister_globals()
{ {
$not_unset = array( $not_unset = array(
'GLOBALS' => true, 'GLOBALS' => true,
'_GET' => true, '_GET' => true,
'_POST' => true, '_POST' => true,
'_COOKIE' => true, '_COOKIE' => true,
'_REQUEST' => true, '_REQUEST' => true,
'_SERVER' => true, '_SERVER' => true,
'_SESSION' => true, '_SESSION' => true,
'_ENV' => true, '_ENV' => true,
'_FILES' => true, '_FILES' => true,
'phpEx' => true, 'phpEx' => true,
'phpbb_root_path' => true 'phpbb_root_path' => true
); );
// Not only will array_merge and array_keys give a warning if // Not only will array_merge and array_keys give a warning if
@ -54,8 +54,7 @@ function deregister_globals()
$_SESSION = array(); $_SESSION = array();
} }
// Merge all into one extremely huge array; unset // Merge all into one extremely huge array; unset this later
// this later
$input = array_merge( $input = array_merge(
array_keys($_GET), array_keys($_GET),
array_keys($_POST), array_keys($_POST),
@ -107,11 +106,11 @@ if (defined('IN_CRON'))
$phpbb_root_path = getcwd() . '/'; $phpbb_root_path = getcwd() . '/';
} }
require($phpbb_root_path . 'config.'.$phpEx); require($phpbb_root_path . 'config.' . $phpEx);
if (!defined('PHPBB_INSTALLED')) if (!defined('PHPBB_INSTALLED'))
{ {
header('Location: install/index.'.$phpEx); redirect($phpbb_root_path . 'install/index.' . $phpEx);
exit; exit;
} }

View file

@ -78,7 +78,7 @@ $f_permissions = array(
'f_print' => array(1, 0), 'f_print' => array(1, 0),
'f_ignoreflood' => array(1, 0), 'f_ignoreflood' => array(1, 0),
'f_postcount' => array(1, 0), 'f_postcount' => array(1, 0),
'f_moderate'=> array(1, 0), 'f_noapprove'=> array(1, 0),
'f_report' => array(1, 0), 'f_report' => array(1, 0),
'f_subscribe' => array(1, 0), 'f_subscribe' => array(1, 0),
); );

View file

@ -14,7 +14,7 @@
define('IN_PHPBB', true); define('IN_PHPBB', true);
$phpbb_root_path = './'; $phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1); $phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.'.$phpEx); include($phpbb_root_path . 'common.' . $phpEx);
$download_id = request_var('id', 0); $download_id = request_var('id', 0);
@ -65,7 +65,7 @@ if (!$attachment['in_message'])
$row = $db->sql_fetchrow($result); $row = $db->sql_fetchrow($result);
$db->sql_freeresult($result); $db->sql_freeresult($result);
if ($auth->acl_gets('f_download', 'u_download', $row['forum_id'])) if ($auth->acl_get('u_download') && $auth->acl_get('f_download', $row['forum_id']))
{ {
if ($row['forum_password']) if ($row['forum_password'])
{ {
@ -138,7 +138,7 @@ if ($download_mode == PHYSICAL_LINK)
trigger_error($user->lang['PHYSICAL_DOWNLOAD_NOT_POSSIBLE']); trigger_error($user->lang['PHYSICAL_DOWNLOAD_NOT_POSSIBLE']);
} }
redirect($config['upload_path'] . '/' . $attachment['physical_filename']); redirect($phpbb_root_path . $config['upload_path'] . '/' . $attachment['physical_filename']);
exit; exit;
} }
else else
@ -234,10 +234,10 @@ function send_file_to_browser($attachment, $upload_dir, $category)
// PHP track_errors setting On? // PHP track_errors setting On?
if (!empty($php_errormsg)) if (!empty($php_errormsg))
{ {
trigger_error('Unable to deliver file.<br />Error was: ' . $php_errormsg, E_USER_WARNING); trigger_error('Unable to deliver file.<br />Error was: ' . $php_errormsg, E_USER_ERROR);
} }
trigger_error('Unable to deliver file.', E_USER_WARNING); trigger_error('Unable to deliver file.', E_USER_ERROR);
} }
flush(); flush();
@ -342,7 +342,6 @@ function download_allowed()
} }
} }
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
} }

View file

@ -14,7 +14,7 @@
define('IN_PHPBB', true); define('IN_PHPBB', true);
$phpbb_root_path = './'; $phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1); $phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.'.$phpEx); include($phpbb_root_path . 'common.' . $phpEx);
// Start session management // Start session management
$user->session_begin(); $user->session_begin();
@ -29,85 +29,45 @@ switch ($mode)
case 'bbcode': case 'bbcode':
$l_title = $user->lang['BBCODE_GUIDE']; $l_title = $user->lang['BBCODE_GUIDE'];
$user->add_lang('bbcode', false, true); $user->add_lang('bbcode', false, true);
break; break;
default: default:
$l_title = $user->lang['FAQ']; $l_title = $user->lang['FAQ'];
$user->add_lang('faq', false, true); $user->add_lang('faq', false, true);
break; break;
} }
// Pull the array data from the lang pack // Pull the array data from the lang pack
$j = 0; $help_blocks = array();
$counter = 0;
$counter_2 = 0;
$help_block = array();
$help_block_titles = array();
foreach ($user->help as $help_ary) foreach ($user->help as $help_ary)
{ {
if ($help_ary[0] != '--') if ($help_ary[0] == '--')
{ {
$help_block[$j][$counter]['id'] = $counter_2; $template->assign_block_vars('faq_block', array(
$help_block[$j][$counter]['question'] = $help_ary[0]; 'BLOCK_TITLE' => $help_ary[1])
$help_block[$j][$counter]['answer'] = $help_ary[1]; );
$counter++; continue;
$counter_2++;
} }
else
{
$j = ($counter != 0) ? $j + 1 : 0;
$help_block_titles[$j] = $help_ary[1]; $template->assign_block_vars('faq_block.faq_row', array(
'FAQ_QUESTION' => $help_ary[0],
$counter = 0; 'FAQ_ANSWER' => $help_ary[1])
} );
} }
//
// Lets build a page ... // Lets build a page ...
$template->assign_vars(array( $template->assign_vars(array(
'L_FAQ_TITLE' => $l_title, 'L_FAQ_TITLE' => $l_title,
'L_BACK_TO_TOP' => $user->lang['BACK_TO_TOP']) 'L_BACK_TO_TOP' => $user->lang['BACK_TO_TOP'])
); );
for ($i = 0, $size = sizeof($help_block); $i < $size; $i++)
{
if (sizeof($help_block[$i]))
{
$template->assign_block_vars('faq_block', array(
'BLOCK_TITLE' => $help_block_titles[$i])
);
$template->assign_block_vars('faq_block_link', array(
'BLOCK_TITLE' => $help_block_titles[$i])
);
for ($j = 0, $_size = sizeof($help_block[$i]); $j < $_size; $j++)
{
$template->assign_block_vars('faq_block.faq_row', array(
'FAQ_QUESTION' => $help_block[$i][$j]['question'],
'FAQ_ANSWER' => $help_block[$i][$j]['answer'],
'U_FAQ_ID' => 'f'.$help_block[$i][$j]['id'])
);
$template->assign_block_vars('faq_block_link.faq_row_link', array(
'FAQ_LINK' => $help_block[$i][$j]['question'],
'U_FAQ_LINK' => '#f' . $help_block[$i][$j]['id'])
);
}
}
}
page_header($l_title); page_header($l_title);
$template->set_filenames(array( $template->set_filenames(array(
'body' => 'faq_body.html') 'body' => 'faq_body.html')
); );
make_jumpbox('viewforum.'.$phpEx); make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
page_footer(); page_footer();

View file

@ -19,7 +19,7 @@ class acp_attachments
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_admin_path, $phpbb_root_path, $phpEx; global $config, $phpbb_admin_path, $phpbb_root_path, $phpEx;
$user->add_lang(array('posting', 'viewtopic', 'acp/attachments')); $user->add_lang(array('posting', 'viewtopic', 'acp/attachments'));
@ -684,7 +684,7 @@ class acp_attachments
'S_NO_IMAGE' => $no_image_select, 'S_NO_IMAGE' => $no_image_select,
'S_FORUM_IDS' => (sizeof($forum_ids)) ? true : false, 'S_FORUM_IDS' => (sizeof($forum_ids)) ? true : false,
'U_EXTENSIONS' => $phpbb_admin_path . "index.$phpEx$SID&amp;i=$id&amp;mode=extensions", 'U_EXTENSIONS' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&amp;mode=extensions"),
'L_LEGEND' => $user->lang[strtoupper($action) . '_EXTENSION_GROUP'], 'L_LEGEND' => $user->lang[strtoupper($action) . '_EXTENSION_GROUP'],
) )
@ -1108,7 +1108,7 @@ class acp_attachments
// Submit Attachment // Submit Attachment
$attach_sql = $message_parser->attachment_data; $attach_sql = $message_parser->attachment_data;
$db->sql_transaction(); $db->sql_transaction('begin');
$sql = 'INSERT INTO ' . ATTACHMENTS_TABLE . ' ' . $db->sql_build_array('INSERT', $attach_sql); $sql = 'INSERT INTO ' . ATTACHMENTS_TABLE . ' ' . $db->sql_build_array('INSERT', $attach_sql);
$db->sql_query($sql); $db->sql_query($sql);

View file

@ -18,7 +18,7 @@ class acp_ban
function main($id, $mode) function main($id, $mode)
{ {
global $config, $db, $user, $auth, $template, $cache; global $config, $db, $user, $auth, $template, $cache;
global $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
include($phpbb_root_path . 'includes/functions_user.' . $phpEx); include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
@ -91,7 +91,7 @@ class acp_ban
'S_USERNAME_BAN' => ($mode == 'user') ? true : false, 'S_USERNAME_BAN' => ($mode == 'user') ? true : false,
'U_ACTION' => $this->u_action, 'U_ACTION' => $this->u_action,
'U_FIND_USER' => $phpbb_root_path . "memberlist.$phpEx$SID&amp;mode=searchuser&amp;form=acp_ban&amp;field=ban", 'U_FIND_USER' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=acp_ban&amp;field=ban'),
) )
); );
} }

View file

@ -18,7 +18,7 @@ class acp_bbcodes
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$user->add_lang('acp/posting'); $user->add_lang('acp/posting');

View file

@ -20,7 +20,7 @@ class acp_board
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template; global $db, $user, $auth, $template;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$user->add_lang('acp/board'); $user->add_lang('acp/board');
@ -61,6 +61,7 @@ class acp_board
'allow_forum_notify' => array('lang' => 'ALLOW_FORUM_NOTIFY', 'type' => 'radio:yes_no', 'explain' => false), 'allow_forum_notify' => array('lang' => 'ALLOW_FORUM_NOTIFY', 'type' => 'radio:yes_no', 'explain' => false),
'allow_namechange' => array('lang' => 'ALLOW_NAME_CHANGE', 'type' => 'radio:yes_no', 'explain' => false), 'allow_namechange' => array('lang' => 'ALLOW_NAME_CHANGE', 'type' => 'radio:yes_no', 'explain' => false),
'allow_attachments' => array('lang' => 'ALLOW_ATTACHMENTS', 'type' => 'radio:yes_no', 'explain' => false), 'allow_attachments' => array('lang' => 'ALLOW_ATTACHMENTS', 'type' => 'radio:yes_no', 'explain' => false),
'allow_pm_attach' => array('lang' => 'ALLOW_PM_ATTACHMENTS', 'type' => 'radio:yes_no', 'explain' => false),
'allow_bbcode' => array('lang' => 'ALLOW_BBCODE', 'type' => 'radio:yes_no', 'explain' => false), 'allow_bbcode' => array('lang' => 'ALLOW_BBCODE', 'type' => 'radio:yes_no', 'explain' => false),
'allow_smilies' => array('lang' => 'ALLOW_SMILIES', 'type' => 'radio:yes_no', 'explain' => false), 'allow_smilies' => array('lang' => 'ALLOW_SMILIES', 'type' => 'radio:yes_no', 'explain' => false),
'allow_sig' => array('lang' => 'ALLOW_SIG', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig' => array('lang' => 'ALLOW_SIG', 'type' => 'radio:yes_no', 'explain' => false),
@ -112,9 +113,7 @@ class acp_board
'allow_pm_attach' => array('lang' => 'ALLOW_PM_ATTACHMENTS', 'type' => 'radio:yes_no', 'explain' => false), 'allow_pm_attach' => array('lang' => 'ALLOW_PM_ATTACHMENTS', 'type' => 'radio:yes_no', 'explain' => false),
'auth_download_pm' => array('lang' => 'ALLOW_DOWNLOAD_PM', 'type' => 'radio:yes_no', 'explain' => false), 'auth_download_pm' => array('lang' => 'ALLOW_DOWNLOAD_PM', 'type' => 'radio:yes_no', 'explain' => false),
'allow_sig_pm' => array('lang' => 'ALLOW_SIG_PM', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_pm' => array('lang' => 'ALLOW_SIG_PM', 'type' => 'radio:yes_no', 'explain' => false),
// 'auth_quote_pm' => array('lang' => 'ALLOW_QUOTE_PM', 'type' => 'radio:yes_no', 'explain' => false),
'print_pm' => array('lang' => 'ALLOW_PRINT_PM', 'type' => 'radio:yes_no', 'explain' => false), 'print_pm' => array('lang' => 'ALLOW_PRINT_PM', 'type' => 'radio:yes_no', 'explain' => false),
// 'email_pm' => array('lang' => 'ALLOW_EMAIL_PM', 'type' => 'radio:yes_no', 'explain' => false),
'forward_pm' => array('lang' => 'ALLOW_FORWARD_PM', 'type' => 'radio:yes_no', 'explain' => false), 'forward_pm' => array('lang' => 'ALLOW_FORWARD_PM', 'type' => 'radio:yes_no', 'explain' => false),
'auth_img_pm' => array('lang' => 'ALLOW_IMG_PM', 'type' => 'radio:yes_no', 'explain' => false), 'auth_img_pm' => array('lang' => 'ALLOW_IMG_PM', 'type' => 'radio:yes_no', 'explain' => false),
'auth_flash_pm' => array('lang' => 'ALLOW_FLASH_PM', 'type' => 'radio:yes_no', 'explain' => false), 'auth_flash_pm' => array('lang' => 'ALLOW_FLASH_PM', 'type' => 'radio:yes_no', 'explain' => false),
@ -263,6 +262,7 @@ class acp_board
'load_db_track' => array('lang' => 'YES_POST_MARKING', 'type' => 'radio:yes_no', 'explain' => true), 'load_db_track' => array('lang' => 'YES_POST_MARKING', 'type' => 'radio:yes_no', 'explain' => true),
'load_db_lastread' => array('lang' => 'YES_READ_MARKING', 'type' => 'radio:yes_no', 'explain' => true), 'load_db_lastread' => array('lang' => 'YES_READ_MARKING', 'type' => 'radio:yes_no', 'explain' => true),
'load_online' => array('lang' => 'YES_ONLINE', 'type' => 'radio:yes_no', 'explain' => true), 'load_online' => array('lang' => 'YES_ONLINE', 'type' => 'radio:yes_no', 'explain' => true),
'load_online_guests' => array('lang' => 'YES_ONLINE_GUESTS', 'type' => 'radio:yes_no', 'explain' => true),
'load_onlinetrack' => array('lang' => 'YES_ONLINE_TRACK', 'type' => 'radio:yes_no', 'explain' => true), 'load_onlinetrack' => array('lang' => 'YES_ONLINE_TRACK', 'type' => 'radio:yes_no', 'explain' => true),
'load_birthdays' => array('lang' => 'YES_BIRTHDAYS', 'type' => 'radio:yes_no', 'explain' => false), 'load_birthdays' => array('lang' => 'YES_BIRTHDAYS', 'type' => 'radio:yes_no', 'explain' => false),
'load_moderators' => array('lang' => 'YES_MODERATORS', 'type' => 'radio:yes_no', 'explain' => false), 'load_moderators' => array('lang' => 'YES_MODERATORS', 'type' => 'radio:yes_no', 'explain' => false),
@ -323,6 +323,7 @@ class acp_board
'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true), 'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true),
'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'type' => 'text:3:3', 'explain' => true), 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'type' => 'text:3:3', 'explain' => true),
'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS','type' => 'text:3:3', 'explain' => true), 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS','type' => 'text:3:3', 'explain' => true),
'tpl_allow_php' => array('lang' => 'TPL_ALLOW_PHP', 'type' => 'radio:yes_no', 'explain' => true),
) )
); );
break; break;
@ -339,7 +340,8 @@ class acp_board
'board_contact' => array('lang' => 'CONTACT_EMAIL', 'type' => 'text:25:100', 'explain' => true), 'board_contact' => array('lang' => 'CONTACT_EMAIL', 'type' => 'text:25:100', 'explain' => true),
'board_email' => array('lang' => 'ADMIN_EMAIL', 'type' => 'text:25:100', 'explain' => true), 'board_email' => array('lang' => 'ADMIN_EMAIL', 'type' => 'text:25:100', 'explain' => true),
'board_email_sig' => array('lang' => 'EMAIL_SIG', 'type' => 'textarea:5:30', 'explain' => true), 'board_email_sig' => array('lang' => 'EMAIL_SIG', 'type' => 'textarea:5:30', 'explain' => true),
'board_hide_emails' => array('lang' => 'BOARD_HIDE_EMAILS', 'type' => 'radio:yes_no', 'explain' => true),
'legend2' => 'SMTP_SETTINGS', 'legend2' => 'SMTP_SETTINGS',
'smtp_delivery' => array('lang' => 'USE_SMTP', 'type' => 'radio:yes_no', 'explain' => true), 'smtp_delivery' => array('lang' => 'USE_SMTP', 'type' => 'radio:yes_no', 'explain' => true),
'smtp_host' => array('lang' => 'SMTP_SERVER', 'type' => 'text:25:50', 'explain' => false), 'smtp_host' => array('lang' => 'SMTP_SERVER', 'type' => 'text:25:50', 'explain' => false),

View file

@ -18,7 +18,7 @@ class acp_bots
function main($id, $mode) function main($id, $mode)
{ {
global $config, $db, $user, $auth, $template, $cache; global $config, $db, $user, $auth, $template, $cache;
global $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
$action = request_var('action', ''); $action = request_var('action', '');
$submit = (isset($_POST['submit'])) ? true : false; $submit = (isset($_POST['submit'])) ? true : false;
@ -86,7 +86,7 @@ class acp_bots
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
$db->sql_transaction(); $db->sql_transaction('begin');
$sql = 'DELETE FROM ' . BOTS_TABLE . " $sql = 'DELETE FROM ' . BOTS_TABLE . "
WHERE bot_id $sql_id"; WHERE bot_id $sql_id";
@ -142,7 +142,7 @@ class acp_bots
if (!sizeof($error)) if (!sizeof($error))
{ {
$db->sql_transaction(); $db->sql_transaction('begin');
// New bot? Create a new user and group entry // New bot? Create a new user and group entry
if ($action == 'add') if ($action == 'add')

View file

@ -18,7 +18,7 @@ class acp_database
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $table_prefix; global $db, $user, $auth, $template, $table_prefix;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$user->add_lang('acp/database'); $user->add_lang('acp/database');

View file

@ -18,7 +18,7 @@ class acp_disallow
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
include($phpbb_root_path . 'includes/functions_user.' . $phpEx); include($phpbb_root_path . 'includes/functions_user.' . $phpEx);

View file

@ -18,7 +18,7 @@ class acp_email
function main($id, $mode) function main($id, $mode)
{ {
global $config, $db, $user, $auth, $template, $cache; global $config, $db, $user, $auth, $template, $cache;
global $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
$user->add_lang('acp/email'); $user->add_lang('acp/email');
$this->tpl_name = 'acp_email'; $this->tpl_name = 'acp_email';
@ -188,7 +188,7 @@ class acp_email
} }
else else
{ {
$message = sprintf($user->lang['EMAIL_SEND_ERROR'], '<a href="' . $phpbb_admin_path . "index.$phpEx$SID&amp;i=logs&amp;mode=critical" . '">', '</a>'); $message = sprintf($user->lang['EMAIL_SEND_ERROR'], '<a href="' . append_sid("{$phpbb_admin_path}index.$phpEx", 'i=logs&amp;mode=critical') . '">', '</a>');
} }
trigger_error($message . adm_back_link($this->u_action)); trigger_error($message . adm_back_link($this->u_action));
} }
@ -215,7 +215,7 @@ class acp_email
'U_ACTION' => $this->u_action, 'U_ACTION' => $this->u_action,
'S_GROUP_OPTIONS' => $select_list, 'S_GROUP_OPTIONS' => $select_list,
'USERNAMES' => $usernames, 'USERNAMES' => $usernames,
'U_FIND_USERNAME' => $phpbb_root_path . "memberlist.$phpEx$SID&amp;mode=searchuser&amp;form=acp_email&amp;field=usernames", 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=acp_email&amp;field=usernames'),
'SUBJECT' => $subject, 'SUBJECT' => $subject,
'MESSAGE' => $message, 'MESSAGE' => $message,
'S_PRIORITY_OPTIONS' => $s_priority_options) 'S_PRIORITY_OPTIONS' => $s_priority_options)

View file

@ -15,11 +15,11 @@ class acp_forums
{ {
var $u_action; var $u_action;
var $parent_id = 0; var $parent_id = 0;
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $phpbb_admin_path, $phpbb_root_path, $phpEx, $SID; global $config, $phpbb_admin_path, $phpbb_root_path, $phpEx;
$user->add_lang('acp/forums'); $user->add_lang('acp/forums');
$this->tpl_name = 'acp_forums'; $this->tpl_name = 'acp_forums';
@ -136,7 +136,7 @@ class acp_forums
} }
$errors = $this->update_forum_data($forum_data); $errors = $this->update_forum_data($forum_data);
if (!sizeof($errors)) if (!sizeof($errors))
{ {
$forum_perm_from = request_var('forum_perm_from', 0); $forum_perm_from = request_var('forum_perm_from', 0);
@ -147,7 +147,6 @@ class acp_forums
// From the mysql documentation: // From the mysql documentation:
// Prior to MySQL 4.0.14, the target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query. This limitation is lifted in 4.0.14. // Prior to MySQL 4.0.14, the target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query. This limitation is lifted in 4.0.14.
// Due to this we stay on the safe side if we do the insertion "the manual way" // Due to this we stay on the safe side if we do the insertion "the manual way"
// Copy permisisons from/to the acl users table (only forum_id gets changed) // Copy permisisons from/to the acl users table (only forum_id gets changed)
$sql = 'SELECT user_id, auth_option_id, auth_role_id, auth_setting $sql = 'SELECT user_id, auth_option_id, auth_role_id, auth_setting
@ -225,12 +224,12 @@ class acp_forums
// Redirect to permissions // Redirect to permissions
$message = ($action == 'add') ? $user->lang['FORUM_CREATED'] : $user->lang['FORUM_UPDATED']; $message = ($action == 'add') ? $user->lang['FORUM_CREATED'] : $user->lang['FORUM_UPDATED'];
$message .= '<br /><br />' . sprintf($user->lang['REDIRECT_ACL'], '<a href="' . $phpbb_admin_path . "index.$phpEx$SID&amp;i=permissions" . $acl_url . '">', '</a>'); $message .= '<br /><br />' . sprintf($user->lang['REDIRECT_ACL'], '<a href="' . append_sid("{$phpbb_admin_path}index.$phpEx", 'i=permissions' . $acl_url) . '">', '</a>');
// redirect directly to permission settings screen // redirect directly to permission settings screen
if ($action == 'add' && !$forum_perm_from) if ($action == 'add' && !$forum_perm_from)
{ {
meta_refresh(4, $phpbb_admin_path . "index.$phpEx$SID&amp;i=permissions" . $acl_url); meta_refresh(4, append_sid("{$phpbb_admin_path}index.$phpEx", 'i=permissions' . $acl_url));
} }
trigger_error($message . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id)); trigger_error($message . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id));
@ -244,12 +243,12 @@ class acp_forums
{ {
case 'move_up': case 'move_up':
case 'move_down': case 'move_down':
if (!$forum_id) if (!$forum_id)
{ {
trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id)); trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id));
} }
$sql = 'SELECT parent_id, left_id, right_id $sql = 'SELECT parent_id, left_id, right_id
FROM ' . FORUMS_TABLE . " FROM ' . FORUMS_TABLE . "
WHERE forum_id = $forum_id"; WHERE forum_id = $forum_id";
@ -519,7 +518,7 @@ class acp_forums
$db->sql_freeresult($result); $db->sql_freeresult($result);
$s_show_display_on_index = false; $s_show_display_on_index = false;
if ($forum_data['parent_id'] > 0) if ($forum_data['parent_id'] > 0)
{ {
// if this forum is a subforum put the "display on index" checkbox // if this forum is a subforum put the "display on index" checkbox
@ -603,7 +602,7 @@ class acp_forums
{ {
trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id)); trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id));
} }
$forum_data = $this->get_forum_info($forum_id); $forum_data = $this->get_forum_info($forum_id);
$subforums_id = array(); $subforums_id = array();
@ -706,12 +705,13 @@ class acp_forums
default: default:
$folder_image = ($row['left_id'] + 1 != $row['right_id']) ? '<img src="images/icon_subfolder.gif" width="46" height="25" alt="' . $user->lang['SUBFORUM'] . '" />' : '<img src="images/icon_folder.gif" width="46" height="25" alt="' . $user->lang['FOLDER'] . '" />'; $folder_image = ($row['left_id'] + 1 != $row['right_id']) ? '<img src="images/icon_subfolder.gif" width="46" height="25" alt="' . $user->lang['SUBFORUM'] . '" />' : '<img src="images/icon_folder.gif" width="46" height="25" alt="' . $user->lang['FOLDER'] . '" />';
break;
} }
} }
$url = $this->u_action . "&amp;parent_id=$this->parent_id&amp;f={$row['forum_id']}"; $url = $this->u_action . "&amp;parent_id=$this->parent_id&amp;f={$row['forum_id']}";
$forum_title = ($forum_type != FORUM_LINK) ? "<a href=\"admin_forums.$phpEx$SID&amp;parent_id=" . $row['forum_id'] . '">' : ''; $forum_title = ($forum_type != FORUM_LINK) ? '<a href="' . $this->u_action . '&amp;parent_id=' . $row['forum_id'] . '">' : '';
$forum_title .= $row['forum_name']; $forum_title .= $row['forum_name'];
$forum_title .= ($forum_type != FORUM_LINK) ? '</a>' : ''; $forum_title .= ($forum_type != FORUM_LINK) ? '</a>' : '';
@ -721,17 +721,16 @@ class acp_forums
'FORUM_DESCRIPTION' => generate_text_for_display($row['forum_desc'], $row['forum_desc_uid'], $row['forum_desc_bitfield']), 'FORUM_DESCRIPTION' => generate_text_for_display($row['forum_desc'], $row['forum_desc_uid'], $row['forum_desc_bitfield']),
'FORUM_TOPICS' => $row['forum_topics'], 'FORUM_TOPICS' => $row['forum_topics'],
'FORUM_POSTS' => $row['forum_posts'], 'FORUM_POSTS' => $row['forum_posts'],
'S_FORUM_LINK' => ($forum_type == FORUM_LINK) ? true : false, 'S_FORUM_LINK' => ($forum_type == FORUM_LINK) ? true : false,
'S_FORUM_POST' => ($forum_type == FORUM_POST) ? true : false, 'S_FORUM_POST' => ($forum_type == FORUM_POST) ? true : false,
'U_FORUM' => $this->u_action . '&amp;parent_id=' . $row['forum_id'], 'U_FORUM' => $this->u_action . '&amp;parent_id=' . $row['forum_id'],
'U_MOVE_UP' => $url . '&amp;action=move_up', 'U_MOVE_UP' => $url . '&amp;action=move_up',
'U_MOVE_DOWN' => $url . '&amp;action=move_down', 'U_MOVE_DOWN' => $url . '&amp;action=move_down',
'U_EDIT' => $url . '&amp;action=edit', 'U_EDIT' => $url . '&amp;action=edit',
'U_DELETE' => $url . '&amp;action=delete', 'U_DELETE' => $url . '&amp;action=delete',
'U_SYNC' => $url . '&amp;action=sync', 'U_SYNC' => $url . '&amp;action=sync')
)
); );
} }
while ($row = $db->sql_fetchrow($result)); while ($row = $db->sql_fetchrow($result));
@ -759,7 +758,6 @@ class acp_forums
'U_SEL_ACTION' => $this->u_action, 'U_SEL_ACTION' => $this->u_action,
'U_ACTION' => $this->u_action . '&amp;parent_id=' . $this->parent_id) 'U_ACTION' => $this->u_action . '&amp;parent_id=' . $this->parent_id)
); );
} }
/** /**
@ -778,7 +776,7 @@ class acp_forums
if (!$row) if (!$row)
{ {
trigger_error("Forum #$forum_id does not exist"); trigger_error("Forum #$forum_id does not exist", E_USER_ERROR);
} }
return $row; return $row;
@ -792,7 +790,7 @@ class acp_forums
global $db, $user; global $db, $user;
$errors = array(); $errors = array();
if (!$forum_data['forum_name']) if (!$forum_data['forum_name'])
{ {
$errors[] = $user->lang['FORUM_NAME_EMPTY']; $errors[] = $user->lang['FORUM_NAME_EMPTY'];
@ -853,12 +851,13 @@ class acp_forums
FROM ' . FORUMS_TABLE . ' FROM ' . FORUMS_TABLE . '
WHERE forum_id = ' . $forum_data['parent_id']; WHERE forum_id = ' . $forum_data['parent_id'];
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$row = $db->sql_fetchrow($result)) if (!$row)
{ {
trigger_error($user->lang['PARENT_NOT_EXIST'] . adm_back_link($this->u_action . '&amp;' . $this->parent_id)); trigger_error($user->lang['PARENT_NOT_EXIST'] . adm_back_link($this->u_action . '&amp;' . $this->parent_id));
} }
$db->sql_freeresult($result);
$sql = 'UPDATE ' . FORUMS_TABLE . ' $sql = 'UPDATE ' . FORUMS_TABLE . '
SET left_id = left_id + 2, right_id = right_id + 2 SET left_id = left_id + 2, right_id = right_id + 2
@ -878,7 +877,6 @@ class acp_forums
$sql = 'SELECT MAX(right_id) AS right_id $sql = 'SELECT MAX(right_id) AS right_id
FROM ' . FORUMS_TABLE; FROM ' . FORUMS_TABLE;
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result); $row = $db->sql_fetchrow($result);
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -890,7 +888,7 @@ class acp_forums
$db->sql_query($sql); $db->sql_query($sql);
$forum_data['forum_id'] = $db->sql_nextid(); $forum_data['forum_id'] = $db->sql_nextid();
add_log('admin', 'LOG_FORUM_ADD', $forum_data['forum_name']); add_log('admin', 'LOG_FORUM_ADD', $forum_data['forum_name']);
} }
else else
@ -929,19 +927,19 @@ class acp_forums
{ {
return $errors; return $errors;
} }
if ($row['parent_id'] != $forum_data['parent_id']) if ($row['parent_id'] != $forum_data['parent_id'])
{ {
$errors = $this->move_forum($forum_data['forum_id'], $forum_data['parent_id']); $errors = $this->move_forum($forum_data['forum_id'], $forum_data['parent_id']);
} }
if (sizeof($errors)) if (sizeof($errors))
{ {
return $errors; return $errors;
} }
unset($forum_data['type_action']); unset($forum_data['type_action']);
if ($row['forum_name'] != $forum_data['forum_name']) if ($row['forum_name'] != $forum_data['forum_name'])
{ {
// the forum name has changed, clear the parents list of child forums // the forum name has changed, clear the parents list of child forums
@ -1020,7 +1018,7 @@ class acp_forums
// Resync moved branch // Resync moved branch
$to_data['right_id'] += $diff; $to_data['right_id'] += $diff;
if ($to_data['right_id'] > $from_data['right_id']) if ($to_data['right_id'] > $from_data['right_id'])
{ {
$diff = '+ ' . ($to_data['right_id'] - $from_data['right_id'] - 1); $diff = '+ ' . ($to_data['right_id'] - $from_data['right_id'] - 1);
@ -1036,7 +1034,6 @@ class acp_forums
FROM ' . FORUMS_TABLE . ' FROM ' . FORUMS_TABLE . '
WHERE forum_id NOT IN (' . implode(', ', $moved_ids) . ')'; WHERE forum_id NOT IN (' . implode(', ', $moved_ids) . ')';
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result); $row = $db->sql_fetchrow($result);
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -1057,7 +1054,7 @@ class acp_forums
global $db; global $db;
$table_ary = array(LOG_TABLE, POSTS_TABLE, TOPICS_TABLE, DRAFTS_TABLE, TOPICS_TRACK_TABLE); $table_ary = array(LOG_TABLE, POSTS_TABLE, TOPICS_TABLE, DRAFTS_TABLE, TOPICS_TRACK_TABLE);
foreach ($table_ary as $table) foreach ($table_ary as $table)
{ {
$sql = "UPDATE $table $sql = "UPDATE $table
@ -1078,8 +1075,7 @@ class acp_forums
if ($sync) if ($sync)
{ {
// Delete ghost topics that link back to the same forum // Delete ghost topics that link back to the same forum then resync counters
// then resync counters
sync('topic_moved'); sync('topic_moved');
sync('forum', 'forum_id', $to_id); sync('forum', 'forum_id', $to_id);
} }
@ -1118,16 +1114,17 @@ class acp_forums
FROM ' . FORUMS_TABLE . ' FROM ' . FORUMS_TABLE . '
WHERE forum_id = ' . $posts_to_id; WHERE forum_id = ' . $posts_to_id;
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$row = $db->sql_fetchrow($result)) if (!$row)
{ {
$errors[] = $user->lang['NO_FORUM']; $errors[] = $user->lang['NO_FORUM'];
} }
else else
{ {
$posts_to_name = $row['forum_name']; $posts_to_name = $row['forum_name'];
$errors = array_merge($errors, $this->move_forum_content($forum_id, $posts_to_id));
$errors = array_merge($errors, $this->move_forum_content($forum_id, $subforums_to_id));
} }
} }
} }
@ -1175,8 +1172,10 @@ class acp_forums
FROM ' . FORUMS_TABLE . ' FROM ' . FORUMS_TABLE . '
WHERE forum_id = ' . $subforums_to_id; WHERE forum_id = ' . $subforums_to_id;
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$row = $db->sql_fetchrow($result)) if (!$row)
{ {
$errors[] = $user->lang['NO_FORUM']; $errors[] = $user->lang['NO_FORUM'];
} }
@ -1238,12 +1237,16 @@ class acp_forums
// Delete forum ids from extension groups table // Delete forum ids from extension groups table
$sql = 'SELECT group_id, allowed_forums $sql = 'SELECT group_id, allowed_forums
FROM ' . EXTENSION_GROUPS_TABLE . " FROM ' . EXTENSION_GROUPS_TABLE;
WHERE allowed_forums <> ''";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
if (!$row['allowed_forums'])
{
continue;
}
$allowed_forums = unserialize(trim($row['allowed_forums'])); $allowed_forums = unserialize(trim($row['allowed_forums']));
$allowed_forums = array_diff($allowed_forums, $forum_ids); $allowed_forums = array_diff($allowed_forums, $forum_ids);
@ -1252,6 +1255,8 @@ class acp_forums
WHERE group_id = {$row['group_id']}"; WHERE group_id = {$row['group_id']}";
$db->sql_query($sql); $db->sql_query($sql);
} }
$db->sql_freeresult($result);
$cache->destroy('_extensions'); $cache->destroy('_extensions');
$log_action = implode('_', array($log_action_posts, $log_action_forums)); $log_action = implode('_', array($log_action_posts, $log_action_forums));
@ -1261,19 +1266,19 @@ class acp_forums
case 'MOVE_POSTS_MOVE_FORUMS': case 'MOVE_POSTS_MOVE_FORUMS':
add_log('admin', 'LOG_FORUM_DEL_MOVE_POSTS_MOVE_FORUMS', $posts_to_name, $subforums_to_name, $forum_data['forum_name']); add_log('admin', 'LOG_FORUM_DEL_MOVE_POSTS_MOVE_FORUMS', $posts_to_name, $subforums_to_name, $forum_data['forum_name']);
break; break;
case 'MOVE_POSTS_FORUMS': case 'MOVE_POSTS_FORUMS':
add_log('admin', 'LOG_FORUM_DEL_MOVE_POSTS_FORUMS', $posts_to_name, $forum_data['forum_name']); add_log('admin', 'LOG_FORUM_DEL_MOVE_POSTS_FORUMS', $posts_to_name, $forum_data['forum_name']);
break; break;
case 'POSTS_MOVE_FORUMS': case 'POSTS_MOVE_FORUMS':
add_log('admin', 'LOG_FORUM_DEL_POSTS_MOVE_FORUMS', $subforums_to_name, $forum_data['forum_name']); add_log('admin', 'LOG_FORUM_DEL_POSTS_MOVE_FORUMS', $subforums_to_name, $forum_data['forum_name']);
break; break;
case '_MOVE_FORUMS': case '_MOVE_FORUMS':
add_log('admin', 'LOG_FORUM_DEL_MOVE_FORUMS', $subforums_to_name, $forum_data['forum_name']); add_log('admin', 'LOG_FORUM_DEL_MOVE_FORUMS', $subforums_to_name, $forum_data['forum_name']);
break; break;
case 'MOVE_POSTS_': case 'MOVE_POSTS_':
add_log('admin', 'LOG_FORUM_DEL_MOVE_POSTS', $posts_to_name, $forum_data['forum_name']); add_log('admin', 'LOG_FORUM_DEL_MOVE_POSTS', $posts_to_name, $forum_data['forum_name']);
break; break;
@ -1281,11 +1286,11 @@ class acp_forums
case 'POSTS_FORUMS': case 'POSTS_FORUMS':
add_log('admin', 'LOG_FORUM_DEL_POSTS_FORUMS', $forum_data['forum_name']); add_log('admin', 'LOG_FORUM_DEL_POSTS_FORUMS', $forum_data['forum_name']);
break; break;
case '_FORUMS': case '_FORUMS':
add_log('admin', 'LOG_FORUM_DEL_FORUMS', $forum_data['forum_name']); add_log('admin', 'LOG_FORUM_DEL_FORUMS', $forum_data['forum_name']);
break; break;
case 'POSTS_': case 'POSTS_':
add_log('admin', 'LOG_FORUM_DEL_POSTS', $forum_data['forum_name']); add_log('admin', 'LOG_FORUM_DEL_POSTS', $forum_data['forum_name']);
break; break;
@ -1316,14 +1321,14 @@ class acp_forums
AND a.in_message = 0 AND a.in_message = 0
AND a.topic_id = p.topic_id"; AND a.topic_id = p.topic_id";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$topic_ids = array(); $topic_ids = array();
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$topic_ids[] = $row['topic_id']; $topic_ids[] = $row['topic_id'];
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
delete_attachments('topic', $topic_ids, false); delete_attachments('topic', $topic_ids, false);
switch (SQL_LAYER) switch (SQL_LAYER)
@ -1367,7 +1372,7 @@ class acp_forums
REPORTS_TABLE, REPORTS_TABLE,
WARNINGS_TABLE, WARNINGS_TABLE,
), ),
'topic_id' => array( 'topic_id' => array(
BOOKMARKS_TABLE, BOOKMARKS_TABLE,
TOPICS_WATCH_TABLE, TOPICS_WATCH_TABLE,
@ -1380,7 +1385,7 @@ class acp_forums
foreach ($tables_ary as $field => $tables) foreach ($tables_ary as $field => $tables)
{ {
$start = 0; $start = 0;
do do
{ {
$sql = "SELECT $field $sql = "SELECT $field

View file

@ -18,7 +18,7 @@ class acp_groups
function main($id, $mode) function main($id, $mode)
{ {
global $config, $db, $user, $auth, $template, $cache; global $config, $db, $user, $auth, $template, $cache;
global $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads;
$user->add_lang('acp/groups'); $user->add_lang('acp/groups');
$this->tpl_name = 'acp_groups'; $this->tpl_name = 'acp_groups';
@ -473,7 +473,7 @@ class acp_groups
switch ($back_link) switch ($back_link)
{ {
case 'acp_users_groups': case 'acp_users_groups':
$u_back = $phpbb_admin_path . "index.$phpEx$SID&amp;i=users&amp;mode=groups&amp;u=" . request_var('u', 0); $u_back = append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&amp;mode=groups&amp;u=' . request_var('u', 0));
break; break;
default: default:
@ -523,8 +523,8 @@ class acp_groups
'GROUP_HIDDEN' => $type_hidden, 'GROUP_HIDDEN' => $type_hidden,
'U_BACK' => $u_back, 'U_BACK' => $u_back,
'U_SWATCH' => "{$phpbb_admin_path}swatch.$phpEx$SID&amp;form=settings&amp;name=group_colour", 'U_SWATCH' => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&amp;name=group_colour'),
'UA_SWATCH' => "{$phpbb_admin_path}swatch.$phpEx$SID&form=settings&name=group_colour", 'UA_SWATCH' => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&name=group_colour', false),
'U_ACTION' => "{$this->u_action}&amp;action=$action&amp;g=$group_id", 'U_ACTION' => "{$this->u_action}&amp;action=$action&amp;g=$group_id",
'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)), 'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)),
) )
@ -607,13 +607,13 @@ class acp_groups
'U_ACTION' => $this->u_action . "&amp;g=$group_id", 'U_ACTION' => $this->u_action . "&amp;g=$group_id",
'U_BACK' => $this->u_action, 'U_BACK' => $this->u_action,
'U_FIND_USERNAME' => $phpbb_root_path . "memberlist.$phpEx$SID&amp;mode=searchuser&amp;form=list&amp;field=usernames") 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=list&amp;field=usernames'))
); );
foreach ($group_data['leader'] as $row) foreach ($group_data['leader'] as $row)
{ {
$template->assign_block_vars('leader', array( $template->assign_block_vars('leader', array(
'U_USER_EDIT' => $phpbb_admin_path . "index.$phpEx$SID&amp;i=users&amp;action=edit&amp;u={$row['user_id']}", 'U_USER_EDIT' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
'USERNAME' => $row['username'], 'USERNAME' => $row['username'],
'S_GROUP_DEFAULT' => ($row['group_id'] == $group_id) ? true : false, 'S_GROUP_DEFAULT' => ($row['group_id'] == $group_id) ? true : false,
@ -637,7 +637,7 @@ class acp_groups
} }
$template->assign_block_vars('member', array( $template->assign_block_vars('member', array(
'U_USER_EDIT' => $phpbb_admin_path . "index.$phpEx$SID&amp;i=users&amp;action=edit&amp;u={$row['user_id']}", 'U_USER_EDIT' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
'USERNAME' => $row['username'], 'USERNAME' => $row['username'],
'S_GROUP_DEFAULT' => ($row['group_id'] == $group_id) ? true : false, 'S_GROUP_DEFAULT' => ($row['group_id'] == $group_id) ? true : false,

View file

@ -19,7 +19,7 @@ class acp_icons
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$user->add_lang('acp/posting'); $user->add_lang('acp/posting');
@ -374,6 +374,7 @@ class acp_icons
trigger_error($user->lang['WRONG_PAK_TYPE'] . adm_back_link($this->u_action)); trigger_error($user->lang['WRONG_PAK_TYPE'] . adm_back_link($this->u_action));
} }
// Stripslash here because it got addslashed before... (on export)
$img = stripslashes($data[1][0]); $img = stripslashes($data[1][0]);
$width = stripslashes($data[1][1]); $width = stripslashes($data[1][1]);
$height = stripslashes($data[1][2]); $height = stripslashes($data[1][2]);

View file

@ -19,7 +19,7 @@ class acp_jabber
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template; global $db, $user, $auth, $template;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$user->add_lang('acp/board'); $user->add_lang('acp/board');

View file

@ -24,7 +24,7 @@ class acp_language
function main($id, $mode) function main($id, $mode)
{ {
global $config, $db, $user, $auth, $template, $cache; global $config, $db, $user, $auth, $template, $cache;
global $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
global $safe_mode, $file_uploads; global $safe_mode, $file_uploads;
include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx); include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
@ -702,9 +702,9 @@ class acp_language
$lang_pack = array( $lang_pack = array(
'iso' => $lang_iso, 'iso' => $lang_iso,
'name' => trim(htmlspecialchars(stripslashes($file[0]))), 'name' => trim(htmlspecialchars($file[0])),
'local_name'=> trim(htmlspecialchars(stripslashes($file[1]))), 'local_name'=> trim(htmlspecialchars($file[1])),
'author' => trim(htmlspecialchars(stripslashes($file[2]))) 'author' => trim(htmlspecialchars($file[2]))
); );
unset($file); unset($file);

View file

@ -18,7 +18,7 @@ class acp_logs
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$user->add_lang('mcp'); $user->add_lang('mcp');

View file

@ -18,7 +18,7 @@ class acp_main
function main($id, $mode) function main($id, $mode)
{ {
global $config, $db, $user, $auth, $template; global $config, $db, $user, $auth, $template;
global $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
$action = request_var('action', ''); $action = request_var('action', '');
$mark = (isset($_REQUEST['mark'])) ? implode(', ', request_var('mark', array(0))) : ''; $mark = (isset($_REQUEST['mark'])) ? implode(', ', request_var('mark', array(0))) : '';
@ -49,7 +49,7 @@ class acp_main
if ($action == 'activate') if ($action == 'activate')
{ {
include($phpbb_root_path . 'includes/functions_user.php'); include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
$mark_ary = explode(', ', $mark); $mark_ary = explode(', ', $mark);
foreach ($mark_ary as $user_id) foreach ($mark_ary as $user_id)
@ -424,7 +424,7 @@ class acp_main
'UPLOAD_DIR_SIZE' => $upload_dir_size, 'UPLOAD_DIR_SIZE' => $upload_dir_size,
'GZIP_COMPRESSION' => ($config['gzip_compress']) ? $user->lang['ON'] : $user->lang['OFF'], 'GZIP_COMPRESSION' => ($config['gzip_compress']) ? $user->lang['ON'] : $user->lang['OFF'],
'U_ACTION' => "{$phpbb_admin_path}index.$phpEx$SID", 'U_ACTION' => append_sid("{$phpbb_admin_path}index.$phpEx"),
'S_ACTION_OPTIONS' => ($auth->acl_get('a_board')) ? $s_action_options : '', 'S_ACTION_OPTIONS' => ($auth->acl_get('a_board')) ? $s_action_options : '',
) )
@ -462,7 +462,7 @@ class acp_main
'DATE' => $user->format_date($row['user_regdate']), 'DATE' => $user->format_date($row['user_regdate']),
'USER_ID' => $row['user_id'], 'USER_ID' => $row['user_id'],
'USERNAME' => $row['username'], 'USERNAME' => $row['username'],
'U_USER_ADMIN' => "{$phpbb_admin_path}index.$phpEx$SID&amp;i=users&amp;mode=overview&amp;u={$row['user_id']}") 'U_USER_ADMIN' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;mode=overview&amp;u={$row['user_id']}"))
); );
} }

View file

@ -29,7 +29,7 @@ class acp_modules
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template; global $db, $user, $auth, $template;
global $config, $phpbb_admin_path, $phpbb_root_path, $phpEx, $SID; global $config, $phpbb_admin_path, $phpbb_root_path, $phpEx;
// Set a global define for modules we might include (the author is able to prevent executing of code with this) // Set a global define for modules we might include (the author is able to prevent executing of code with this)
define('MODULE_INCLUDE', true); define('MODULE_INCLUDE', true);

View file

@ -18,7 +18,7 @@ class acp_permission_roles
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx); include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
include_once($phpbb_root_path . 'includes/acp/auth.' . $phpEx); include_once($phpbb_root_path . 'includes/acp/auth.' . $phpEx);

View file

@ -19,7 +19,7 @@ class acp_permissions
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx); include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
include_once($phpbb_root_path . 'includes/acp/auth.' . $phpEx); include_once($phpbb_root_path . 'includes/acp/auth.' . $phpEx);
@ -304,7 +304,7 @@ class acp_permissions
$template->assign_vars(array( $template->assign_vars(array(
'S_SELECT_USER' => true, 'S_SELECT_USER' => true,
'U_FIND_USERNAME' => $phpbb_root_path . "memberlist.$phpEx$SID&amp;mode=searchuser&amp;form=select_victim&amp;field=username") 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=select_victim&amp;field=username'))
); );
break; break;
@ -435,7 +435,7 @@ class acp_permissions
'S_DEFINED_USER_OPTIONS' => $s_defined_user_options, 'S_DEFINED_USER_OPTIONS' => $s_defined_user_options,
'S_DEFINED_GROUP_OPTIONS' => $s_defined_group_options, 'S_DEFINED_GROUP_OPTIONS' => $s_defined_group_options,
'S_ADD_GROUP_OPTIONS' => group_select_options(false, $defined_group_ids), 'S_ADD_GROUP_OPTIONS' => group_select_options(false, $defined_group_ids),
'U_FIND_USERNAME' => $phpbb_root_path . "memberlist.$phpEx$SID&amp;mode=searchuser&amp;form=add_user&amp;field=username") 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=add_user&amp;field=username'))
); );
break; break;

View file

@ -18,7 +18,7 @@ class acp_php_info
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template; global $db, $user, $auth, $template;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
if ($mode != 'info') if ($mode != 'info')
{ {

View file

@ -18,7 +18,7 @@ class acp_profile
function main($id, $mode) function main($id, $mode)
{ {
global $config, $db, $user, $auth, $template, $cache; global $config, $db, $user, $auth, $template, $cache;
global $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx); include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
include($phpbb_root_path . 'includes/functions_user.' . $phpEx); include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
@ -1386,7 +1386,7 @@ class acp_profile
} }
} }
$db->sql_transaction(); $db->sql_transaction('begin');
if ($action == 'create') if ($action == 'create')
{ {

View file

@ -17,7 +17,7 @@ class acp_prune
function main($id, $mode) function main($id, $mode)
{ {
global $user, $phpEx, $SID, $phpbb_admin_path, $phpbb_root_path; global $user, $phpEx, $phpbb_admin_path, $phpbb_root_path;
$user->add_lang('acp/prune'); $user->add_lang('acp/prune');
include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx); include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
@ -44,7 +44,7 @@ class acp_prune
function prune_forums($id, $mode) function prune_forums($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$forum_id = request_var('f', array(0)); $forum_id = request_var('f', array(0));
$submit = (isset($_POST['submit'])) ? true : false; $submit = (isset($_POST['submit'])) ? true : false;
@ -186,7 +186,7 @@ class acp_prune
function prune_users($id, $mode) function prune_users($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$user->add_lang('memberlist'); $user->add_lang('memberlist');
@ -359,7 +359,7 @@ class acp_prune
'S_JOINED_OPTIONS' => $s_find_join_time, 'S_JOINED_OPTIONS' => $s_find_join_time,
'S_ACTIVE_OPTIONS' => $s_find_active_time, 'S_ACTIVE_OPTIONS' => $s_find_active_time,
'S_COUNT_OPTIONS' => $s_find_count, 'S_COUNT_OPTIONS' => $s_find_count,
'U_FIND_USER' => $phpbb_root_path . "memberlist.$phpEx$SID&amp;mode=searchuser&amp;form=acp_prune&amp;field=users") 'U_FIND_USER' => append_sid($phpbb_root_path . "memberlist.$phpEx", 'mode=searchuser&amp;form=acp_prune&amp;field=users'))
); );
} }

View file

@ -18,7 +18,7 @@ class acp_ranks
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$user->add_lang('acp/posting'); $user->add_lang('acp/posting');

View file

@ -18,7 +18,7 @@ class acp_reasons
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$user->add_lang(array('mcp', 'acp/posting')); $user->add_lang(array('mcp', 'acp/posting'));

View file

@ -40,7 +40,7 @@ class acp_search
function settings($id, $mode) function settings($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$submit = (isset($_POST['submit'])) ? true : false; $submit = (isset($_POST['submit'])) ? true : false;
@ -148,7 +148,7 @@ class acp_search
{ {
add_log('admin', 'LOG_CONFIG_SEARCH'); add_log('admin', 'LOG_CONFIG_SEARCH');
} }
$extra_message = '<br />' . $user->lang['SWITCHED_SEARCH_BACKEND'] . "<br /><a href=\"{$phpbb_admin_path}index.$phpEx$SID&amp;i=search&amp;mode=index\">&raquo; " . $user->lang['GO_TO_SEARCH_INDEX'] . '</a>'; $extra_message = '<br />' . $user->lang['SWITCHED_SEARCH_BACKEND'] . '<br /><a href="' . append_sid("{$phpbb_admin_path}index.$phpEx", 'i=search&amp;mode=index') . '">&raquo; ' . $user->lang['GO_TO_SEARCH_INDEX'] . '</a>';
} }
else else
{ {
@ -197,7 +197,7 @@ class acp_search
function index($id, $mode) function index($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
if (isset($_REQUEST['action']) && is_array($_REQUEST['action'])) if (isset($_REQUEST['action']) && is_array($_REQUEST['action']))
{ {
@ -258,7 +258,7 @@ class acp_search
if (method_exists($this->search, 'delete_index')) if (method_exists($this->search, 'delete_index'))
{ {
// pass a reference to myself so the $search object can make use of save_state() and attributes // pass a reference to myself so the $search object can make use of save_state() and attributes
if ($error = $this->search->delete_index($this, $phpbb_admin_path . "index.$phpEx$SID&i=$id&mode=$mode&action=delete")) if ($error = $this->search->delete_index($this, append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=delete", false)))
{ {
$this->state = array(''); $this->state = array('');
$this->save_state(); $this->save_state();
@ -293,7 +293,7 @@ class acp_search
if ($post_counter <= $this->max_post_id) if ($post_counter <= $this->max_post_id)
{ {
redirect($phpbb_admin_path . "index.$phpEx$SID&i=$id&mode=$mode&action=delete", 3); redirect($this->u_action . '&amp;action=delete', 3);
} }
} }
@ -309,7 +309,7 @@ class acp_search
if (method_exists($this->search, 'create_index')) if (method_exists($this->search, 'create_index'))
{ {
// pass a reference to myself so the $search object can make use of save_state() and attributes // pass a reference to myself so the $search object can make use of save_state() and attributes
if ($error = $this->search->create_index($this, $phpbb_admin_path . "index.$phpEx$SID&i=$id&mode=$mode&action=create")) if ($error = $this->search->create_index($this, append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=create", false)))
{ {
$this->state = array(''); $this->state = array('');
$this->save_state(); $this->save_state();
@ -337,7 +337,7 @@ class acp_search
if ($post_counter <= $this->max_post_id) if ($post_counter <= $this->max_post_id)
{ {
redirect($phpbb_admin_path . "index.$phpEx$SID&i=$id&mode=$mode&action=create", 3); redirect($this->u_action . '&amp;action=create', 3);
} }
} }
@ -415,15 +415,15 @@ class acp_search
$template->assign_vars(array( $template->assign_vars(array(
'S_INDEX' => true, 'S_INDEX' => true,
'U_ACTION' => $this->u_action, 'U_ACTION' => $this->u_action,
'U_PROGRESS_BAR' => $phpbb_admin_path . "index.$phpEx$SID&amp;i=$id&amp;mode=$mode&amp;action=progress_bar", 'U_PROGRESS_BAR' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&amp;mode=$mode&amp;action=progress_bar"),
'UA_PROGRESS_BAR' => $phpbb_admin_path . "index.$phpEx$SID&i=$id&mode=$mode&action=progress_bar") 'UA_PROGRESS_BAR' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&mode=$mode&action=progress_bar", false))
); );
if (isset($this->state[1])) if (isset($this->state[1]))
{ {
$template->assign_vars(array( $template->assign_vars(array(
'S_CONTINUE_INDEXING' => $this->state[1], 'S_CONTINUE_INDEXING' => $this->state[1],
'U_CONTINUE_INDEXING' => $phpbb_admin_path . "index.$phpEx$SID&amp;i=$id&amp;mode=$mode&amp;action=" . $this->state[1], 'U_CONTINUE_INDEXING' => $this->u_action . '&amp;action=' . $this->state[1],
'L_CONTINUE' => ($this->state[1] == 'create') ? $user->lang['CONTINUE_INDEXING'] : $user->lang['CONTINUE_INDEX_DELETING'], 'L_CONTINUE' => ($this->state[1] == 'create') ? $user->lang['CONTINUE_INDEXING'] : $user->lang['CONTINUE_INDEX_DELETING'],
'L_CONTINUE_EXPLAIN' => ($this->state[1] == 'create') ? $user->lang['CONTINUE_INDEXING_EXPLAIN'] : $user->lang['CONTINUE_INDEX_DELETING_EXPLAIN']) 'L_CONTINUE_EXPLAIN' => ($this->state[1] == 'create') ? $user->lang['CONTINUE_INDEXING_EXPLAIN'] : $user->lang['CONTINUE_INDEX_DELETING_EXPLAIN'])
); );

View file

@ -24,7 +24,7 @@ class acp_styles
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
// Hardcoded template bitfield to add for new templates // Hardcoded template bitfield to add for new templates
define('TEMPLATE_BITFIELD', 6921); define('TEMPLATE_BITFIELD', 6921);
@ -332,7 +332,7 @@ pagination_sep = \'{PAGINATION_SEP}\'
*/ */
function frontend($mode, $options) function frontend($mode, $options)
{ {
global $user, $template, $db, $config, $phpbb_root_path, $phpEx, $SID; global $user, $template, $db, $config, $phpbb_root_path, $phpEx;
$sql_from = ''; $sql_from = '';
$style_count = array(); $style_count = array();
@ -414,7 +414,7 @@ pagination_sep = \'{PAGINATION_SEP}\'
'U_STYLE_ACT_DEACT' => $this->u_action . '&amp;action=' . $stylevis . '&amp;id=' . $row[$mode . '_id'], 'U_STYLE_ACT_DEACT' => $this->u_action . '&amp;action=' . $stylevis . '&amp;id=' . $row[$mode . '_id'],
'L_STYLE_ACT_DEACT' => $user->lang['STYLE_' . strtoupper($stylevis)], 'L_STYLE_ACT_DEACT' => $user->lang['STYLE_' . strtoupper($stylevis)],
'S_OPTIONS' => implode(' | ', $s_options), 'S_OPTIONS' => implode(' | ', $s_options),
'U_PREVIEW' => ($mode == 'style') ? "{$phpbb_root_path}index.$phpEx$SID&amp;$mode=" . $row[$mode . '_id'] : '', 'U_PREVIEW' => ($mode == 'style') ? append_sid("{$phpbb_root_path}index.$phpEx", "$mode=" . $row[$mode . '_id']) : '',
'NAME' => $row[$mode . '_name'], 'NAME' => $row[$mode . '_name'],
'STYLE_COUNT' => ($mode == 'style' && isset($style_count[$row['style_id']])) ? $style_count[$row['style_id']] : 0, 'STYLE_COUNT' => ($mode == 'style' && isset($style_count[$row['style_id']])) ? $style_count[$row['style_id']] : 0,
@ -477,7 +477,7 @@ pagination_sep = \'{PAGINATION_SEP}\'
*/ */
function edit_template($template_id) function edit_template($template_id)
{ {
global $phpbb_root_path, $phpEx, $SID, $config, $db, $cache, $user, $template, $safe_mode; global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template, $safe_mode;
$this->page_title = 'EDIT_TEMPLATE'; $this->page_title = 'EDIT_TEMPLATE';
@ -687,7 +687,7 @@ pagination_sep = \'{PAGINATION_SEP}\'
*/ */
function template_cache($template_id) function template_cache($template_id)
{ {
global $phpbb_root_path, $phpEx, $SID, $config, $db, $cache, $user, $template; global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template;
$source = str_replace('/', '.', request_var('source', '')); $source = str_replace('/', '.', request_var('source', ''));
$file_ary = array_diff(request_var('delete', array('')), array('')); $file_ary = array_diff(request_var('delete', array('')), array(''));
@ -811,7 +811,7 @@ pagination_sep = \'{PAGINATION_SEP}\'
*/ */
function edit_theme($theme_id) function edit_theme($theme_id)
{ {
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $SID, $config, $db, $cache, $user, $template, $safe_mode; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $config, $db, $cache, $user, $template, $safe_mode;
$this->page_title = 'EDIT_THEME'; $this->page_title = 'EDIT_THEME';
@ -1214,8 +1214,8 @@ pagination_sep = \'{PAGINATION_SEP}\'
$template->assign_vars(array( $template->assign_vars(array(
'S_HIDDEN_FIELDS' => build_hidden_fields($s_hidden_fields), 'S_HIDDEN_FIELDS' => build_hidden_fields($s_hidden_fields),
'U_SWATCH' => "{$phpbb_admin_path}swatch.$phpEx$SID&amp;form=acp_theme&amp;name=", 'U_SWATCH' => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=acp_theme') . '&amp;name=',
'UA_SWATCH' => "{$phpbb_admin_path}swatch.$phpEx$SID&form=acp_theme&name=", 'UA_SWATCH' => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=acp_theme', false) . '&name=',
'CSS_DATA' => htmlspecialchars($css_data)) 'CSS_DATA' => htmlspecialchars($css_data))
); );
@ -2350,7 +2350,7 @@ pagination_sep = \'{PAGINATION_SEP}\'
*/ */
function install($mode) function install($mode)
{ {
global $phpbb_root_path, $phpEx, $SID, $config, $db, $cache, $user, $template; global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template;
$l_type = strtoupper($mode); $l_type = strtoupper($mode);
@ -2498,7 +2498,7 @@ pagination_sep = \'{PAGINATION_SEP}\'
*/ */
function add($mode) function add($mode)
{ {
global $phpbb_root_path, $phpEx, $SID, $config, $db, $cache, $user, $template; global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template;
$l_type = strtoupper($mode); $l_type = strtoupper($mode);
$element_ary = array('template' => STYLES_TPL_TABLE, 'theme' => STYLES_CSS_TABLE, 'imageset' => STYLES_IMAGE_TABLE); $element_ary = array('template' => STYLES_TPL_TABLE, 'theme' => STYLES_CSS_TABLE, 'imageset' => STYLES_IMAGE_TABLE);

View file

@ -18,7 +18,7 @@ class acp_users
function main($id, $mode) function main($id, $mode)
{ {
global $config, $db, $user, $auth, $template, $cache; global $config, $db, $user, $auth, $template, $cache;
global $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads;
$user->add_lang(array('posting', 'ucp', 'acp/users')); $user->add_lang(array('posting', 'ucp', 'acp/users'));
$this->tpl_name = 'acp_users'; $this->tpl_name = 'acp_users';
@ -68,7 +68,7 @@ class acp_users
'ANONYMOUS_USER_ID' => ANONYMOUS, 'ANONYMOUS_USER_ID' => ANONYMOUS,
'S_SELECT_USER' => true, 'S_SELECT_USER' => true,
'U_FIND_USERNAME' => $phpbb_root_path . "memberlist.$phpEx$SID&amp;mode=searchuser&amp;form=select_user&amp;field=username", 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=select_user&amp;field=username'),
) )
); );
@ -125,7 +125,7 @@ class acp_users
$template->assign_vars(array( $template->assign_vars(array(
'U_BACK' => $this->u_action, 'U_BACK' => $this->u_action,
'U_MODE_SELECT' => "{$phpbb_admin_path}index.$phpEx$SID&amp;i=$id&amp;u=$user_id", 'U_MODE_SELECT' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&amp;u=$user_id"),
'U_ACTION' => $this->u_action . '&amp;u=' . $user_id, 'U_ACTION' => $this->u_action . '&amp;u=' . $user_id,
'S_FORM_OPTIONS' => $s_form_options) 'S_FORM_OPTIONS' => $s_form_options)
); );
@ -729,7 +729,7 @@ class acp_users
'U_SHOW_IP' => $this->u_action . "&amp;u=$user_id&amp;ip=" . (($ip == 'ip') ? 'hostname' : 'ip'), 'U_SHOW_IP' => $this->u_action . "&amp;u=$user_id&amp;ip=" . (($ip == 'ip') ? 'hostname' : 'ip'),
'U_WHOIS' => $this->u_action . "&amp;action=whois&amp;user_ip={$user_row['user_ip']}", 'U_WHOIS' => $this->u_action . "&amp;action=whois&amp;user_ip={$user_row['user_ip']}",
'U_SWITCH_PERMISSIONS' => ($auth->acl_get('a_switchperm') && $user->data['user_id'] != $user_row['user_id']) ? "{$phpbb_root_path}ucp.$phpEx$SID&amp;mode=switch_perm&amp;u={$user_row['user_id']}" : '', 'U_SWITCH_PERMISSIONS' => ($auth->acl_get('a_switchperm') && $user->data['user_id'] != $user_row['user_id']) ? append_sid("{$phpbb_root_path}ucp.$phpEx", "mode=switch_perm&amp;u={$user_row['user_id']}") : '',
'USER' => $user_row['username'], 'USER' => $user_row['username'],
'USER_REGISTERED' => $user->format_date($user_row['user_regdate']), 'USER_REGISTERED' => $user->format_date($user_row['user_regdate']),
@ -1494,7 +1494,7 @@ class acp_users
'S_SMILIES_CHECKED' => (!$enable_smilies) ? 'checked="checked"' : '', 'S_SMILIES_CHECKED' => (!$enable_smilies) ? 'checked="checked"' : '',
'S_MAGIC_URL_CHECKED' => (!$enable_urls) ? 'checked="checked"' : '', 'S_MAGIC_URL_CHECKED' => (!$enable_urls) ? 'checked="checked"' : '',
'BBCODE_STATUS' => ($config['allow_sig_bbcode']) ? sprintf($user->lang['BBCODE_IS_ON'], '<a href="' . $phpbb_root_path . "faq.$phpEx$SID&amp;mode=bbcode" . '" onclick="target=\'_phpbbcode\';">', '</a>') : sprintf($user->lang['BBCODE_IS_OFF'], '<a href="' . "{$phpbb_root_path}faq.$phpEx$SID&amp;mode=bbcode" . '" onclick="target=\'_phpbbcode\';">', '</a>'), 'BBCODE_STATUS' => ($config['allow_sig_bbcode']) ? sprintf($user->lang['BBCODE_IS_ON'], '<a href="' . append_sid("{$phpbb_root_path}faq.$phpEx", 'mode=bbcode') . '" onclick="target=\'_phpbbcode\';">', '</a>') : sprintf($user->lang['BBCODE_IS_OFF'], '<a href="' . append_sid("{$phpbb_root_path}faq.$phpEx", 'mode=bbcode') . '" onclick="target=\'_phpbbcode\';">', '</a>'),
'SMILIES_STATUS' => ($config['allow_sig_smilies']) ? $user->lang['SMILIES_ARE_ON'] : $user->lang['SMILIES_ARE_OFF'], 'SMILIES_STATUS' => ($config['allow_sig_smilies']) ? $user->lang['SMILIES_ARE_ON'] : $user->lang['SMILIES_ARE_OFF'],
'IMG_STATUS' => ($config['allow_sig_img']) ? $user->lang['IMAGES_ARE_ON'] : $user->lang['IMAGES_ARE_OFF'], 'IMG_STATUS' => ($config['allow_sig_img']) ? $user->lang['IMAGES_ARE_ON'] : $user->lang['IMAGES_ARE_OFF'],
'FLASH_STATUS' => ($config['allow_sig_flash']) ? $user->lang['FLASH_IS_ON'] : $user->lang['FLASH_IS_OFF'], 'FLASH_STATUS' => ($config['allow_sig_flash']) ? $user->lang['FLASH_IS_ON'] : $user->lang['FLASH_IS_OFF'],
@ -1596,11 +1596,11 @@ class acp_users
{ {
if ($row['in_message']) if ($row['in_message'])
{ {
$view_topic = "{$phpbb_root_path}ucp.$phpEx$SID&amp;i=pm&amp;p={$row['post_msg_id']}"; $view_topic = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&amp;p={$row['post_msg_id']}");
} }
else else
{ {
$view_topic = "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;t={$row['topic_id']}&amp;p={$row['post_msg_id']}#{$row['post_msg_id']}"; $view_topic = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "t={$row['topic_id']}&amp;p={$row['post_msg_id']}#{$row['post_msg_id']}");
} }
$template->assign_block_vars('attach', array( $template->assign_block_vars('attach', array(
@ -1618,7 +1618,7 @@ class acp_users
'S_IN_MESSAGE' => $row['in_message'], 'S_IN_MESSAGE' => $row['in_message'],
'U_DOWNLOAD' => $phpbb_root_path . 'download.' . $phpEx . $SID . '&amp;id=' . $row['attach_id'], 'U_DOWNLOAD' => append_sid("{$phpbb_root_path}download.$phpEx", 'id=' . $row['attach_id']),
'U_VIEW_TOPIC' => $view_topic) 'U_VIEW_TOPIC' => $view_topic)
); );
} }
@ -1757,7 +1757,7 @@ class acp_users
foreach ($data_ary as $data) foreach ($data_ary as $data)
{ {
$template->assign_block_vars('group', array( $template->assign_block_vars('group', array(
'U_EDIT_GROUP' => "{$phpbb_admin_path}index.$phpEx$SID&amp;i=groups&amp;mode=manage&amp;action=edit&amp;u=$user_id&amp;g=" . $data['group_id'] . '&amp;back_link=acp_users_groups', 'U_EDIT_GROUP' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=groups&amp;mode=manage&amp;action=edit&amp;u=$user_id&amp;g={$data['group_id']}&amp;back_link=acp_users_groups"),
'U_DEFAULT' => $this->u_action . "&amp;action=default&amp;u=$user_id&amp;g=" . $data['group_id'], 'U_DEFAULT' => $this->u_action . "&amp;action=default&amp;u=$user_id&amp;g=" . $data['group_id'],
'U_DEMOTE_PROMOTE' => $this->u_action . '&amp;action=' . (($data['group_leader']) ? 'demote' : 'promote') . "&amp;u=$user_id&amp;g=" . $data['group_id'], 'U_DEMOTE_PROMOTE' => $this->u_action . '&amp;action=' . (($data['group_leader']) ? 'demote' : 'promote') . "&amp;u=$user_id&amp;g=" . $data['group_id'],
'U_DELETE' => $this->u_action . "&amp;action=delete&amp;u=$user_id&amp;g=" . $data['group_id'], 'U_DELETE' => $this->u_action . "&amp;action=delete&amp;u=$user_id&amp;g=" . $data['group_id'],
@ -1819,8 +1819,8 @@ class acp_users
$template->assign_vars(array( $template->assign_vars(array(
'S_PERMISSIONS' => true, 'S_PERMISSIONS' => true,
'U_USER_PERMISSIONS' => $phpbb_admin_path . 'index.' . $phpEx . $SID . '&amp;i=permissions&amp;mode=setting_user_global&amp;user_id[]=' . $user_id, 'U_USER_PERMISSIONS' => append_sid("{$phpbb_admin_path}index.$phpEx" ,'i=permissions&amp;mode=setting_user_global&amp;user_id[]=' . $user_id),
'U_USER_FORUM_PERMISSIONS' => $phpbb_admin_path . 'index.' . $phpEx . $SID . '&amp;i=permissions&amp;mode=setting_user_local&amp;user_id[]=' . $user_id) 'U_USER_FORUM_PERMISSIONS' => append_sid("{$phpbb_admin_path}index.$phpEx", 'i=permissions&amp;mode=setting_user_local&amp;user_id[]=' . $user_id))
); );
break; break;

View file

@ -19,7 +19,7 @@ class acp_words
function main($id, $mode) function main($id, $mode)
{ {
global $db, $user, $auth, $template, $cache; global $db, $user, $auth, $template, $cache;
global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$user->add_lang('acp/posting'); $user->add_lang('acp/posting');

View file

@ -271,7 +271,7 @@ class auth_admin extends auth
*/ */
function display_mask($mode, $permission_type, &$hold_ary, $user_mode = 'user', $local = false, $group_display = true) function display_mask($mode, $permission_type, &$hold_ary, $user_mode = 'user', $local = false, $group_display = true)
{ {
global $template, $user, $db, $phpbb_root_path, $phpEx, $SID; global $template, $user, $db, $phpbb_root_path, $phpEx;
// Define names for template loops, might be able to be set // Define names for template loops, might be able to be set
$tpl_pmask = 'p_mask'; $tpl_pmask = 'p_mask';
@ -570,7 +570,7 @@ class auth_admin extends auth
*/ */
function display_role_mask(&$hold_ary) function display_role_mask(&$hold_ary)
{ {
global $db, $template, $user, $phpbb_root_path, $phpbb_admin_path, $phpEx, $SID; global $db, $template, $user, $phpbb_root_path, $phpbb_admin_path, $phpEx;
if (!sizeof($hold_ary)) if (!sizeof($hold_ary))
{ {
@ -610,7 +610,7 @@ class auth_admin extends auth
$template->assign_block_vars('role_mask.users', array( $template->assign_block_vars('role_mask.users', array(
'USER_ID' => $row['user_id'], 'USER_ID' => $row['user_id'],
'USERNAME' => $row['username'], 'USERNAME' => $row['username'],
'U_PROFILE' => "{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=viewprofile&amp;u={$row['user_id']}") 'U_PROFILE' => append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=viewprofile&amp;u={$row['user_id']}"))
); );
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -629,7 +629,7 @@ class auth_admin extends auth
$template->assign_block_vars('role_mask.groups', array( $template->assign_block_vars('role_mask.groups', array(
'GROUP_ID' => $row['group_id'], 'GROUP_ID' => $row['group_id'],
'GROUP_NAME' => ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'], 'GROUP_NAME' => ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'],
'U_PROFILE' => $phpbb_root_path . "memberlist.$phpEx$SID&amp;mode=group&amp;g={$row['group_id']}") 'U_PROFILE' => append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=group&amp;g={$row['group_id']}"))
); );
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -1083,7 +1083,7 @@ class auth_admin extends auth
*/ */
function assign_cat_array(&$category_array, $tpl_cat, $tpl_mask, $ug_id, $forum_id, $show_trace = false) function assign_cat_array(&$category_array, $tpl_cat, $tpl_mask, $ug_id, $forum_id, $show_trace = false)
{ {
global $template, $user, $phpbb_admin_path, $phpEx, $SID; global $template, $user, $phpbb_admin_path, $phpEx;
foreach ($category_array as $cat => $cat_array) foreach ($category_array as $cat => $cat_array)
{ {
@ -1107,7 +1107,7 @@ class auth_admin extends auth
'FIELD_NAME' => $permission, 'FIELD_NAME' => $permission,
'S_FIELD_NAME' => 'setting[' . $ug_id . '][' . $forum_id . '][' . $permission . ']', 'S_FIELD_NAME' => 'setting[' . $ug_id . '][' . $forum_id . '][' . $permission . ']',
'U_TRACE' => ($show_trace) ? "{$phpbb_admin_path}index.$phpEx$SID&amp;i=permissions&amp;mode=trace&amp;u=$ug_id&amp;f=$forum_id&amp;auth=$permission" : '', 'U_TRACE' => ($show_trace) ? append_sid("{$phpbb_admin_path}index.$phpEx", "i=permissions&amp;mode=trace&amp;u=$ug_id&amp;f=$forum_id&amp;auth=$permission") : '',
'PERMISSION' => $user->lang['acl_' . $permission]['lang']) 'PERMISSION' => $user->lang['acl_' . $permission]['lang'])
); );

View file

@ -310,17 +310,17 @@ class auth
function acl_cache(&$userdata) function acl_cache(&$userdata)
{ {
global $db; global $db;
// Empty user_permissions // Empty user_permissions
$userdata['user_permissions'] = ''; $userdata['user_permissions'] = '';
$hold_ary = $this->acl_raw_data($userdata['user_id'], false, false); $hold_ary = $this->acl_raw_data($userdata['user_id'], false, false);
if (isset($hold_ary[$userdata['user_id']])) if (isset($hold_ary[$userdata['user_id']]))
{ {
$hold_ary = $hold_ary[$userdata['user_id']]; $hold_ary = $hold_ary[$userdata['user_id']];
} }
// Key 0 in $hold_ary are global options, all others are forum_ids // Key 0 in $hold_ary are global options, all others are forum_ids
// If this user is founder we're going to force fill the admin options ... // If this user is founder we're going to force fill the admin options ...
@ -508,9 +508,9 @@ class auth
), ),
'WHERE' => '(ao.auth_option_id = a.auth_option_id OR ao.auth_option_id = r.auth_option_id) 'WHERE' => '(ao.auth_option_id = a.auth_option_id OR ao.auth_option_id = r.auth_option_id)
' . (($sql_user) ? 'AND a.' . $sql_user : '') . " ' . (($sql_user) ? 'AND a.' . $sql_user : '') . "
$sql_forum $sql_forum
$sql_opts", $sql_opts",
'ORDER_BY' => 'a.forum_id, ao.auth_option' 'ORDER_BY' => 'a.forum_id, ao.auth_option'
)); ));
@ -541,10 +541,10 @@ class auth
), ),
'WHERE' => '(ao.auth_option_id = a.auth_option_id OR ao.auth_option_id = r.auth_option_id) 'WHERE' => '(ao.auth_option_id = a.auth_option_id OR ao.auth_option_id = r.auth_option_id)
AND a.group_id = ug.group_id AND a.group_id = ug.group_id
' . (($sql_user) ? 'AND ug.' . $sql_user : '') . " ' . (($sql_user) ? 'AND ug.' . $sql_user : '') . "
$sql_forum $sql_forum
$sql_opts", $sql_opts",
'ORDER_BY' => 'a.forum_id, ao.auth_option' 'ORDER_BY' => 'a.forum_id, ao.auth_option'
)); ));
@ -561,7 +561,7 @@ class auth
if ($setting == ACL_NO) if ($setting == ACL_NO)
{ {
$flag = substr($row['auth_option'], 0, strpos($row['auth_option'], '_') + 1); $flag = substr($row['auth_option'], 0, strpos($row['auth_option'], '_') + 1);
if (isset($hold_ary[$row['user_id']][$row['forum_id']][$flag]) && $hold_ary[$row['user_id']][$row['forum_id']][$flag] == ACL_YES) if (isset($hold_ary[$row['user_id']][$row['forum_id']][$flag]) && $hold_ary[$row['user_id']][$row['forum_id']][$flag] == ACL_YES)
{ {
unset($hold_ary[$row['user_id']][$row['forum_id']][$flag]); unset($hold_ary[$row['user_id']][$row['forum_id']][$flag]);
@ -622,9 +622,9 @@ class auth
), ),
'WHERE' => '(ao.auth_option_id = a.auth_option_id OR ao.auth_option_id = r.auth_option_id) 'WHERE' => '(ao.auth_option_id = a.auth_option_id OR ao.auth_option_id = r.auth_option_id)
' . (($sql_user) ? 'AND a.' . $sql_user : '') . " ' . (($sql_user) ? 'AND a.' . $sql_user : '') . "
$sql_forum $sql_forum
$sql_opts", $sql_opts",
'ORDER_BY' => 'a.forum_id, ao.auth_option' 'ORDER_BY' => 'a.forum_id, ao.auth_option'
)); ));
@ -667,12 +667,12 @@ class auth
// Grab group settings... // Grab group settings...
$sql = $db->sql_build_query('SELECT', array( $sql = $db->sql_build_query('SELECT', array(
'SELECT' => 'a.group_id, ao.auth_option, a.forum_id, a.auth_setting, a.auth_role_id, r.auth_setting as role_auth_setting', 'SELECT' => 'a.group_id, ao.auth_option, a.forum_id, a.auth_setting, a.auth_role_id, r.auth_setting as role_auth_setting',
'FROM' => array( 'FROM' => array(
ACL_OPTIONS_TABLE => 'ao', ACL_OPTIONS_TABLE => 'ao',
ACL_GROUPS_TABLE => 'a' ACL_GROUPS_TABLE => 'a'
), ),
'LEFT_JOIN' => array( 'LEFT_JOIN' => array(
array( array(
'FROM' => array(ACL_ROLES_DATA_TABLE => 'r'), 'FROM' => array(ACL_ROLES_DATA_TABLE => 'r'),
@ -681,9 +681,9 @@ class auth
), ),
'WHERE' => '(ao.auth_option_id = a.auth_option_id OR ao.auth_option_id = r.auth_option_id) 'WHERE' => '(ao.auth_option_id = a.auth_option_id OR ao.auth_option_id = r.auth_option_id)
' . (($sql_group) ? 'AND a.' . $sql_group : '') . " ' . (($sql_group) ? 'AND a.' . $sql_group : '') . "
$sql_forum $sql_forum
$sql_opts", $sql_opts",
'ORDER_BY' => 'a.forum_id, ao.auth_option' 'ORDER_BY' => 'a.forum_id, ao.auth_option'
)); ));
@ -701,13 +701,12 @@ class auth
/** /**
* Authentication plug-ins is largely down to Sergey Kanareykin, our thanks to him. * Authentication plug-ins is largely down to Sergey Kanareykin, our thanks to him.
* @todo replace this with a new system
*/ */
function login($username, $password, $autologin = false, $viewonline = 1, $admin = 0) function login($username, $password, $autologin = false, $viewonline = 1, $admin = 0)
{ {
global $config, $db, $user, $phpbb_root_path, $phpEx; global $config, $db, $user, $phpbb_root_path, $phpEx;
$method = trim($config['auth_method']); $method = trim(basename($config['auth_method']));
if (file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx)) if (file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx))
{ {

View file

@ -120,6 +120,48 @@ class dbal
return false; return false;
} }
/**
* SQL Transaction
* @private
*/
function sql_transaction($status = 'begin')
{
switch ($status)
{
case 'begin':
// Commit previously opened transaction before opening another transaction
if ($this->transaction)
{
$this->_sql_transaction('commit');
}
$result = $this->_sql_transaction('begin');
$this->transaction = true;
break;
case 'commit':
$result = $this->_sql_transaction('commit');
$this->transaction = false;
if (!$result)
{
$this->_sql_transaction('rollback');
}
break;
case 'rollback':
$result = $this->_sql_transaction('rollback');
$this->transaction = false;
break;
default:
$result = $this->_sql_transaction($status);
break;
}
return $result;
}
/** /**
* Build sql statement from array for insert/update/select statements * Build sql statement from array for insert/update/select statements
* *
@ -328,7 +370,7 @@ class dbal
*/ */
function sql_report($mode, $query = '') function sql_report($mode, $query = '')
{ {
global $cache, $starttime, $phpbb_root_path, $user, $SID; global $cache, $starttime, $phpbb_root_path, $user;
if (empty($_GET['explain'])) if (empty($_GET['explain']))
{ {

View file

@ -49,37 +49,27 @@ class dbal_firebird extends dbal
} }
/** /**
* sql transaction * SQL Transaction
* @private
*/ */
function sql_transaction($status = 'begin') function _sql_transaction($status = 'begin')
{ {
switch ($status) switch ($status)
{ {
case 'begin': case 'begin':
$result = true; return true;
$this->transaction = true;
break; break;
case 'commit': case 'commit':
$result = @ibase_commit(); return @ibase_commit();
$this->transaction = false;
if (!$result)
{
@ibase_rollback();
}
break; break;
case 'rollback': case 'rollback':
$result = @ibase_rollback(); return @ibase_rollback();
$this->transaction = false;
break; break;
default:
$result = true;
} }
return $result; return true;
} }
/** /**

View file

@ -56,37 +56,27 @@ class dbal_mssql extends dbal
} }
/** /**
* sql transaction * SQL Transaction
* @private
*/ */
function sql_transaction($status = 'begin') function _sql_transaction($status = 'begin')
{ {
switch ($status) switch ($status)
{ {
case 'begin': case 'begin':
$result = @mssql_query('BEGIN TRANSACTION', $this->db_connect_id); return @mssql_query('BEGIN TRANSACTION', $this->db_connect_id);
$this->transaction = true;
break; break;
case 'commit': case 'commit':
$result = @mssql_query('commit', $this->db_connect_id); return @mssql_query('commit', $this->db_connect_id);
$this->transaction = false;
if (!$result)
{
@mssql_query('ROLLBACK', $this->db_connect_id);
}
break; break;
case 'rollback': case 'rollback':
$result = @mssql_query('ROLLBACK', $this->db_connect_id); return @mssql_query('ROLLBACK', $this->db_connect_id);
$this->transaction = false;
break; break;
default:
$result = true;
} }
return $result; return true;
} }
/** /**

View file

@ -50,40 +50,31 @@ class dbal_mssql_odbc extends dbal
} }
/** /**
* sql transaction * SQL Transaction
* @private
*/ */
function sql_transaction($status = 'begin') function _sql_transaction($status = 'begin')
{ {
switch ($status) switch ($status)
{ {
case 'begin': case 'begin':
$result = @odbc_autocommit($this->db_connect_id, false); return @odbc_autocommit($this->db_connect_id, false);
$this->transaction = true;
break; break;
case 'commit': case 'commit':
$result = @odbc_commit($this->db_connect_id); $result = @odbc_commit($this->db_connect_id);
@odbc_autocommit($this->db_connect_id, true); @odbc_autocommit($this->db_connect_id, true);
$this->transaction = false; return $result;
if (!$result)
{
@odbc_rollback($this->db_connect_id);
@odbc_autocommit($this->db_connect_id, true);
}
break; break;
case 'rollback': case 'rollback':
$result = @odbc_rollback($this->db_connect_id); $result = @odbc_rollback($this->db_connect_id);
@odbc_autocommit($this->db_connect_id, true); @odbc_autocommit($this->db_connect_id, true);
$this->transaction = false; return $result;
break; break;
default:
$result = true;
} }
return $result; return true;
} }
/** /**

View file

@ -56,37 +56,27 @@ class dbal_mysql extends dbal
} }
/** /**
* sql transaction * SQL Transaction
* @private
*/ */
function sql_transaction($status = 'begin') function _sql_transaction($status = 'begin')
{ {
switch ($status) switch ($status)
{ {
case 'begin': case 'begin':
$result = @mysql_query('BEGIN', $this->db_connect_id); return @mysql_query('BEGIN', $this->db_connect_id);
$this->transaction = true;
break; break;
case 'commit': case 'commit':
$result = @mysql_query('COMMIT', $this->db_connect_id); return @mysql_query('COMMIT', $this->db_connect_id);
$this->transaction = false;
if (!$result)
{
@mysql_query('ROLLBACK', $this->db_connect_id);
}
break; break;
case 'rollback': case 'rollback':
$result = @mysql_query('ROLLBACK', $this->db_connect_id); return @mysql_query('ROLLBACK', $this->db_connect_id);
$this->transaction = false;
break; break;
default:
$result = true;
} }
return $result; return true;
} }
/** /**

View file

@ -58,37 +58,27 @@ class dbal_mysql4 extends dbal
} }
/** /**
* sql transaction * SQL Transaction
* @private
*/ */
function sql_transaction($status = 'begin') function _sql_transaction($status = 'begin')
{ {
switch ($status) switch ($status)
{ {
case 'begin': case 'begin':
$result = @mysql_query('BEGIN', $this->db_connect_id); return @mysql_query('BEGIN', $this->db_connect_id);
$this->transaction = true;
break; break;
case 'commit': case 'commit':
$result = @mysql_query('COMMIT', $this->db_connect_id); return @mysql_query('COMMIT', $this->db_connect_id);
$this->transaction = false;
if (!$result)
{
@mysql_query('ROLLBACK', $this->db_connect_id);
}
break; break;
case 'rollback': case 'rollback':
$result = @mysql_query('ROLLBACK', $this->db_connect_id); return @mysql_query('ROLLBACK', $this->db_connect_id);
$this->transaction = false;
break; break;
default:
$result = true;
} }
return $result; return true;
} }
/** /**

View file

@ -58,40 +58,31 @@ class dbal_mysqli extends dbal
} }
/** /**
* sql transaction * SQL Transaction
* @private
*/ */
function sql_transaction($status = 'begin') function _sql_transaction($status = 'begin')
{ {
switch ($status) switch ($status)
{ {
case 'begin': case 'begin':
$result = @mysqli_autocommit($this->db_connect_id, false); return @mysqli_autocommit($this->db_connect_id, false);
$this->transaction = true;
break; break;
case 'commit': case 'commit':
$result = @mysqli_commit($this->db_connect_id); $result = @mysqli_commit($this->db_connect_id);
@mysqli_autocommit($this->db_connect_id, true); @mysqli_autocommit($this->db_connect_id, true);
$this->transaction = false; return $result;
if (!$result)
{
@mysqli_rollback($this->db_connect_id);
@mysqli_autocommit($this->db_connect_id, true);
}
break; break;
case 'rollback': case 'rollback':
$result = @mysqli_rollback($this->db_connect_id); $result = @mysqli_rollback($this->db_connect_id);
@mysqli_autocommit($this->db_connect_id, true); @mysqli_autocommit($this->db_connect_id, true);
$this->transaction = false; return $result;
break; break;
default:
$result = true;
} }
return $result; return true;
} }
/** /**

View file

@ -48,37 +48,27 @@ class dbal_oracle extends dbal
} }
/** /**
* sql transaction * SQL Transaction
* @private
*/ */
function sql_transaction($status = 'begin') function _sql_transaction($status = 'begin')
{ {
switch ($status) switch ($status)
{ {
case 'begin': case 'begin':
$result = true; return true;
$this->transaction = true;
break; break;
case 'commit': case 'commit':
$result = @ocicommit($this->db_connect_id); return @ocicommit($this->db_connect_id);
$this->transaction = false;
if (!$result)
{
@ocirollback($this->db_connect_id);
}
break; break;
case 'rollback': case 'rollback':
$result = @ocirollback($this->db_connect_id); return @ocirollback($this->db_connect_id);
$this->transaction = false;
break; break;
default:
$result = true;
} }
return $result; return true;
} }
/** /**
@ -355,7 +345,7 @@ class dbal_oracle extends dbal
*/ */
function sql_escape($msg) function sql_escape($msg)
{ {
return str_replace("'", "''", str_replace('\\', '\\\\', $msg)); return str_replace("'", "''", $msg);
} }
function _sql_custom_build($stage, $data) function _sql_custom_build($stage, $data)

View file

@ -85,37 +85,27 @@ class dbal_postgres extends dbal
} }
/** /**
* sql transaction * SQL Transaction
* @private
*/ */
function sql_transaction($status = 'begin') function _sql_transaction($status = 'begin')
{ {
switch ($status) switch ($status)
{ {
case 'begin': case 'begin':
$result = @pg_query($this->db_connect_id, 'BEGIN'); return @pg_query($this->db_connect_id, 'BEGIN');
$this->transaction = true;
break; break;
case 'commit': case 'commit':
$result = @pg_query($this->db_connect_id, 'COMMIT'); return @pg_query($this->db_connect_id, 'COMMIT');
$this->transaction = false;
if (!$result)
{
@pg_query($this->db_connect_id, 'ROLLBACK');
}
break; break;
case 'rollback': case 'rollback':
$result = @pg_query($this->db_connect_id, 'ROLLBACK'); return @pg_query($this->db_connect_id, 'ROLLBACK');
$this->transaction = false;
break; break;
default:
$result = true;
} }
return $result; return true;
} }
/** /**

View file

@ -52,37 +52,27 @@ class dbal_sqlite extends dbal
} }
/** /**
* sql transaction * SQL Transaction
* @private
*/ */
function sql_transaction($status = 'begin') function _sql_transaction($status = 'begin')
{ {
switch ($status) switch ($status)
{ {
case 'begin': case 'begin':
$result = @sqlite_query('BEGIN', $this->db_connect_id); return @sqlite_query('BEGIN', $this->db_connect_id);
$this->transaction = true;
break; break;
case 'commit': case 'commit':
$result = @sqlite_query('COMMIT', $this->db_connect_id); return @sqlite_query('COMMIT', $this->db_connect_id);
$this->transaction = false;
if (!$result)
{
@sqlite_query('ROLLBACK', $this->db_connect_id);
}
break; break;
case 'rollback': case 'rollback':
$result = @sqlite_query('ROLLBACK', $this->db_connect_id); return @sqlite_query('ROLLBACK', $this->db_connect_id);
$this->transaction = false;
break; break;
default:
$result = true;
} }
return $result; return true;
} }
/** /**

View file

@ -86,7 +86,7 @@ function request_var($var_name, $default, $multibyte = false)
{ {
set_var($var, $var, $type, $multibyte); set_var($var, $var, $type, $multibyte);
} }
return $var; return $var;
} }
@ -195,7 +195,7 @@ function gen_sort_selects(&$limit_days, &$sort_by_text, &$sort_days, &$sort_key,
*/ */
function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list = false) function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list = false)
{ {
global $config, $auth, $template, $user, $db, $phpEx, $SID; global $config, $auth, $template, $user, $db, $phpEx;
if (!$config['load_jumpbox']) if (!$config['load_jumpbox'])
{ {
@ -364,7 +364,7 @@ function language_select($default = '')
$sql = 'SELECT lang_iso, lang_local_name $sql = 'SELECT lang_iso, lang_local_name
FROM ' . LANG_TABLE . ' FROM ' . LANG_TABLE . '
ORDER BY lang_english_name'; ORDER BY lang_english_name';
$result = $db->sql_query($sql); $result = $db->sql_query($sql, 600);
$lang_options = ''; $lang_options = '';
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
@ -433,7 +433,7 @@ function tz_select($default = '')
function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $user_id = 0) function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $user_id = 0)
{ {
global $db, $user, $config; global $db, $user, $config;
if ($mode == 'all') if ($mode == 'all')
{ {
if ($forum_id === false || !sizeof($forum_id)) if ($forum_id === false || !sizeof($forum_id))
@ -447,15 +447,16 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
} }
else else
{ {
$tracking = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? unserialize(stripslashes($_COOKIE[$config['cookie_name'] . '_track'])) : array(); $tracking_topics = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? ((STRIP) ? stripslashes($_COOKIE[$config['cookie_name'] . '_track']) : $_COOKIE[$config['cookie_name'] . '_track']) : '';
$tracking_topics = ($tracking_topics) ? unserialize($tracking_topics) : array();
unset($tracking['tf']); unset($tracking_topics['tf']);
unset($tracking['t']); unset($tracking_topics['t']);
unset($tracking['f']); unset($tracking_topics['f']);
$tracking['l'] = base_convert(time() - $config['board_startdate'], 10, 36); $tracking_topics['l'] = base_convert(time() - $config['board_startdate'], 10, 36);
$user->set_cookie('track', serialize($tracking), time() + 31536000); $user->set_cookie('track', serialize($tracking_topics), time() + 31536000);
unset($tracking); unset($tracking_topics);
if ($user->data['is_registered']) if ($user->data['is_registered'])
{ {
@ -463,7 +464,7 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
} }
} }
} }
return; return;
} }
else if ($mode == 'topics') else if ($mode == 'topics')
@ -479,9 +480,10 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
if ($config['load_db_lastread'] && $user->data['is_registered']) if ($config['load_db_lastread'] && $user->data['is_registered'])
{ {
$db->sql_query('DELETE FROM ' . TOPICS_TRACK_TABLE . " $sql = 'DELETE FROM ' . TOPICS_TRACK_TABLE . "
WHERE user_id = {$user->data['user_id']} WHERE user_id = {$user->data['user_id']}
AND forum_id IN (" . implode(', ', $forum_id) . ")"); AND forum_id IN (" . implode(', ', $forum_id) . ")";
$db->sql_query($sql);
$sql = 'SELECT forum_id $sql = 'SELECT forum_id
FROM ' . FORUMS_TRACK_TABLE . " FROM ' . FORUMS_TRACK_TABLE . "
@ -539,7 +541,8 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
} }
else else
{ {
$tracking = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? unserialize(stripslashes($_COOKIE[$config['cookie_name'] . '_track'])) : array(); $tracking = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? ((STRIP) ? stripslashes($_COOKIE[$config['cookie_name'] . '_track']) : $_COOKIE[$config['cookie_name'] . '_track']) : '';
$tracking = ($tracking) ? unserialize($tracking) : array();
foreach ($forum_id as $f_id) foreach ($forum_id as $f_id)
{ {
@ -554,7 +557,7 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
{ {
unset($tracking['t'][$topic_id36]); unset($tracking['t'][$topic_id36]);
} }
if (isset($tracking['f'][$f_id])) if (isset($tracking['f'][$f_id]))
{ {
unset($tracking['f'][$f_id]); unset($tracking['f'][$f_id]);
@ -603,7 +606,8 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
} }
else else
{ {
$tracking = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? unserialize(stripslashes($_COOKIE[$config['cookie_name'] . '_track'])) : array(); $tracking = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? ((STRIP) ? stripslashes($_COOKIE[$config['cookie_name'] . '_track']) : $_COOKIE[$config['cookie_name'] . '_track']) : '';
$tracking = ($tracking) ? unserialize($tracking) : array();
$topic_id36 = base_convert($topic_id, 10, 36); $topic_id36 = base_convert($topic_id, 10, 36);
@ -611,7 +615,7 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
{ {
$tracking['tf'][$forum_id][$topic_id36] = true; $tracking['tf'][$forum_id][$topic_id36] = true;
} }
$post_time = ($post_time) ? $post_time : time(); $post_time = ($post_time) ? $post_time : time();
$tracking['t'][$topic_id36] = base_convert($post_time - $config['board_startdate'], 10, 36); $tracking['t'][$topic_id36] = base_convert($post_time - $config['board_startdate'], 10, 36);
@ -653,7 +657,6 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
{ {
$tracking['l'] = max($time_keys); $tracking['l'] = max($time_keys);
} }
} }
$user->set_cookie('track', serialize($tracking), time() + 31536000); $user->set_cookie('track', serialize($tracking), time() + 31536000);
@ -681,7 +684,7 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
); );
$db->sql_query('INSERT INTO ' . TOPICS_POSTED_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary)); $db->sql_query('INSERT INTO ' . TOPICS_POSTED_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
$db->sql_return_on_error(false); $db->sql_return_on_error(false);
} }
@ -775,7 +778,7 @@ function get_topic_tracking($forum_id, $topic_ids, &$rowset, $forum_mark_time, $
function get_complete_topic_tracking($forum_id, $topic_ids, $global_announce_list = false) function get_complete_topic_tracking($forum_id, $topic_ids, $global_announce_list = false)
{ {
global $config, $user; global $config, $user;
$last_read = array(); $last_read = array();
if (!is_array($topic_ids)) if (!is_array($topic_ids))
@ -807,7 +810,7 @@ function get_complete_topic_tracking($forum_id, $topic_ids, $global_announce_lis
FROM ' . FORUMS_TRACK_TABLE . " FROM ' . FORUMS_TRACK_TABLE . "
WHERE user_id = {$user->data['user_id']} WHERE user_id = {$user->data['user_id']}
AND forum_id " . AND forum_id " .
(($global_announce_list && sizeof($global_announce_list)) ? "IN (0, $forum_id)" : "= $forum_id"); (($global_announce_list && sizeof($global_announce_list)) ? "IN (0, $forum_id)" : "= $forum_id");
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$mark_time = array(); $mark_time = array();
@ -838,7 +841,8 @@ function get_complete_topic_tracking($forum_id, $topic_ids, $global_announce_lis
if (!isset($tracking_topics) || !sizeof($tracking_topics)) if (!isset($tracking_topics) || !sizeof($tracking_topics))
{ {
$tracking_topics = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? unserialize(stripslashes($_COOKIE[$config['cookie_name'] . '_track'])) : array(); $tracking_topics = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? ((STRIP) ? stripslashes($_COOKIE[$config['cookie_name'] . '_track']) : $_COOKIE[$config['cookie_name'] . '_track']) : '';
$tracking_topics = ($tracking_topics) ? unserialize($tracking_topics) : array();
} }
if (!$user->data['is_registered']) if (!$user->data['is_registered'])
@ -908,7 +912,6 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add
global $template, $user; global $template, $user;
$seperator = $user->theme['pagination_sep']; $seperator = $user->theme['pagination_sep'];
$total_pages = ceil($num_items/$per_page); $total_pages = ceil($num_items/$per_page);
if ($total_pages == 1 || !$num_items) if ($total_pages == 1 || !$num_items)
@ -917,7 +920,6 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add
} }
$on_page = floor($start_item / $per_page) + 1; $on_page = floor($start_item / $per_page) + 1;
$page_string = ($on_page == 1) ? '<strong>1</strong>' : '<a href="' . $base_url . '">1</a>'; $page_string = ($on_page == 1) ? '<strong>1</strong>' : '<a href="' . $base_url . '">1</a>';
if ($total_pages > 5) if ($total_pages > 5)
@ -927,7 +929,7 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add
$page_string .= ($start_cnt > 1) ? ' ... ' : $seperator; $page_string .= ($start_cnt > 1) ? ' ... ' : $seperator;
for($i = $start_cnt + 1; $i < $end_cnt; $i++) for ($i = $start_cnt + 1; $i < $end_cnt; $i++)
{ {
$page_string .= ($i == $on_page) ? '<strong>' . $i . '</strong>' : '<a href="' . $base_url . "&amp;start=" . (($i - 1) * $per_page) . '">' . $i . '</a>'; $page_string .= ($i == $on_page) ? '<strong>' . $i . '</strong>' : '<a href="' . $base_url . "&amp;start=" . (($i - 1) * $per_page) . '">' . $i . '</a>';
if ($i < $end_cnt - 1) if ($i < $end_cnt - 1)
@ -942,7 +944,7 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add
{ {
$page_string .= $seperator; $page_string .= $seperator;
for($i = 2; $i < $total_pages; $i++) for ($i = 2; $i < $total_pages; $i++)
{ {
$page_string .= ($i == $on_page) ? '<strong>' . $i . '</strong>' : '<a href="' . $base_url . "&amp;start=" . (($i - 1) * $per_page) . '">' . $i . '</a>'; $page_string .= ($i == $on_page) ? '<strong>' . $i . '</strong>' : '<a href="' . $base_url . "&amp;start=" . (($i - 1) * $per_page) . '">' . $i . '</a>';
if ($i < $total_pages) if ($i < $total_pages)
@ -972,7 +974,7 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add
$tpl_prefix . 'PER_PAGE' => $per_page, $tpl_prefix . 'PER_PAGE' => $per_page,
$tpl_prefix . 'PREVIOUS_PAGE' => ($on_page == 1) ? '' : $base_url . '&amp;start=' . (($on_page - 2) * $per_page), $tpl_prefix . 'PREVIOUS_PAGE' => ($on_page == 1) ? '' : $base_url . '&amp;start=' . (($on_page - 2) * $per_page),
$tpl_prefix . 'NEXT_PAGE' => ($on_page == $total_pages) ? '' : $base_url . '&amp;start=' . ($on_page * $per_page)) $tpl_prefix . 'NEXT_PAGE' => ($on_page == $total_pages) ? '' : $base_url . '&amp;start=' . ($on_page * $per_page))
); );
return $page_string; return $page_string;
@ -996,6 +998,68 @@ function on_page($num_items, $per_page, $start)
// Server functions (building urls, redirecting...) // Server functions (building urls, redirecting...)
/**
* Append session id to url
*
* @param string $url The url the session id needs to be appended to (can have params)
* @param mixed $params String or array of additional url parameters
* @param bool $is_amp Is url using &amp; (true) or & (false)
* @param string $session_id Possibility to use a custom session id instead of the global one
*
* Examples:
* <code>
* append_sid("{$phpbb_root_path}viewtopic.$phpEx?t=1&amp;f=2");
* append_sid("{$phpbb_root_path}viewtopic.$phpEx", 't=1&amp;f=2');
* append_sid("{$phpbb_root_path}viewtopic.$phpEx", 't=1&f=2', false);
* append_sid("{$phpbb_root_path}viewtopic.$phpEx", array('t' => 1, 'f' => 2));
* </code>
*/
function append_sid($url, $params = false, $is_amp = true, $session_id = false)
{
global $_SID, $_EXTRA_URL;
// Assign sid if session id is not specified
if ($session_id === false)
{
$session_id = $_SID;
}
$amp_delim = ($is_amp) ? '&amp;' : '&';
$url_delim = (strpos($url, '?') === false) ? '?' : $amp_delim;
// Appending custom url parameter?
$append_url = (!empty($_EXTRA_URL)) ? implode($amp_delim, $_EXTRA_URL) : '';
// Use the short variant if possible ;)
if ($params === false)
{
// Append session id
return (!$session_id) ? $url . (($append_url) ? $url_delim . $append_url : '') : $url . (($append_url) ? $url_delim . $append_url . $amp_delim : $url_delim) . 'sid=' . $session_id;
}
// Build string if parameters are specified as array
if (is_array($params))
{
$output = array();
foreach ($params as $key => $item)
{
if ($item === NULL)
{
continue;
}
$output[] = $key . '=' . $item;
}
$params = implode($amp_delim, $output);
}
// Append session id and parameters (even if they are empty)
// If parameters are empty, the developer can still append his/her parameters without caring about the delimiter
return $url . (($append_url) ? $url_delim . $append_url . $amp_delim : $url_delim) . $params . ((!$session_id) ? '' : $amp_delim . 'sid=' . $session_id);
}
/** /**
* Generate board url (example: http://www.foo.bar/phpBB) * Generate board url (example: http://www.foo.bar/phpBB)
* @param bool $without_script_path if set to true the script path gets not appended (example: http://www.foo.bar) * @param bool $without_script_path if set to true the script path gets not appended (example: http://www.foo.bar)
@ -1029,7 +1093,8 @@ function generate_board_url($without_script_path = false)
return $url; return $url;
} }
return $url . $user->page['root_script_path']; // Strip / from the end
return $url . substr($user->page['root_script_path'], 0, -1);
} }
/** /**
@ -1094,20 +1159,23 @@ function redirect($url)
} }
else else
{ {
$url = str_replace($pathinfo['dirname'] . '/', '', $url); // Get the realpath of dirname
$root_dirs = explode('/', str_replace('\\', '/', realpath('./')));
$page_dirs = explode('/', str_replace('\\', '/', realpath($pathinfo['dirname'])));
$intersection = array_intersect_assoc($root_dirs, $page_dirs);
// Make sure we point to the correct directory, we transform the relative uri to an absolute uri... $root_dirs = array_diff_assoc($root_dirs, $intersection);
$substract_path = str_replace(realpath($pathinfo['dirname']), '', realpath('./')); $page_dirs = array_diff_assoc($page_dirs, $intersection);
$dir = str_replace($substract_path, '', $user->page['script_path']);
if (!$dir) $dir = str_repeat('../', sizeof($root_dirs)) . implode('/', $page_dirs);
if ($dir && substr($dir, -1, 1) == '/')
{ {
$url = '/' . $url; $dir = substr($dir, 0, -1);
}
else
{
$url = (strpos($dir, '/') !== 0) ? '/' . $dir . '/' . $url : $dir . '/' . $url;
} }
$url = $dir . '/' . str_replace($pathinfo['dirname'] . '/', '', $url);
$url = generate_board_url() . '/' . $url;
} }
} }
@ -1126,24 +1194,36 @@ function redirect($url)
} }
/** /**
* Re-Apply $SID after page reloads * Re-Apply session id after page reloads
*/ */
function reapply_sid($url) function reapply_sid($url)
{ {
global $SID, $phpEx; global $phpEx, $phpbb_root_path;
if ($url === "index.$phpEx") if ($url === "index.$phpEx")
{ {
return "index.$phpEx$SID"; return append_sid("index.$phpEx");
}
else if ($url === "{$phpbb_root_path}index.$phpEx")
{
return append_sid("{$phpbb_root_path}index.$phpEx");
} }
// Remove previously added sid // Remove previously added sid
if (strpos($url, '?sid=')) if (strpos($url, '?sid=') !== false)
{ {
$url = preg_replace('/\?sid=[a-z0-9]+(&amp;|&)?/', $SID . '\1', $url); $url = preg_replace('/(\?)sid=[a-z0-9]+(&amp;|&)?/', '\1', $url);
}
else if (strpos($url, '&sid=') !== false)
{
$url = preg_replace('/&sid=[a-z0-9]+(&)?/', '\1', $url);
}
else if (strpos($url, '&amp;sid=') !== false)
{
$url = preg_replace('/&amp;sid=[a-z0-9]+(&amp;)?/', '\1', $url);
} }
return (strpos($url, '?') === false) ? $url . $SID : $url . str_replace('?', '&amp;', $SID); return append_sid($url);
} }
/** /**
@ -1151,10 +1231,11 @@ function reapply_sid($url)
*/ */
function build_url($strip_vars = false) function build_url($strip_vars = false)
{ {
global $user, $phpbb_root_path, $SID; global $user, $phpbb_root_path;
// Append SID // Append SID
$redirect = (($user->page['page_dir']) ? $user->page['page_dir'] . '/' : '') . $user->page['page_name'] . $SID . (($user->page['query_string']) ? "&{$user->page['query_string']}" : ''); $redirect = (($user->page['page_dir']) ? $user->page['page_dir'] . '/' : '') . $user->page['page_name'] . (($user->page['query_string']) ? "?{$user->page['query_string']}" : '');
$redirect = append_sid($redirect, false, false);
// Strip vars... // Strip vars...
if ($strip_vars !== false && strpos($redirect, '?') !== false) if ($strip_vars !== false && strpos($redirect, '?') !== false)
@ -1218,7 +1299,7 @@ function meta_refresh($time, $url)
function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_body.html', $u_action = '') function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_body.html', $u_action = '')
{ {
global $user, $template, $db; global $user, $template, $db;
global $SID, $phpEx, $phpbb_root_path; global $phpEx, $phpbb_root_path;
if (isset($_POST['cancel'])) if (isset($_POST['cancel']))
{ {
@ -1287,9 +1368,9 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
return false; return false;
} }
// re-add $SID / transform & to &amp; for user->page (user->page is always using &) // re-add sid / transform & to &amp; for user->page (user->page is always using &)
$use_page = ($u_action) ? $phpbb_root_path . $u_action : $phpbb_root_path . str_replace('&', '&amp;', $user->page['page']); $use_page = ($u_action) ? $phpbb_root_path . $u_action : $phpbb_root_path . str_replace('&', '&amp;', $user->page['page']);
$u_action = (strpos($use_page, 'sid=') === false) ? ((strpos($use_page, '?') !== false) ? str_replace('?', $SID . '&amp;', $use_page) : $use_page . '?' . str_replace('?', '', $SID)) : $use_page; $u_action = reapply_sid($use_page);
$u_action .= ((strpos($u_action, '?') === false) ? '?' : '&amp;') . 'confirm_key=' . $confirm_key; $u_action .= ((strpos($u_action, '?') === false) ? '?' : '&amp;') . 'confirm_key=' . $confirm_key;
$template->assign_vars(array( $template->assign_vars(array(
@ -1320,7 +1401,7 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
*/ */
function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = false, $s_display = true) function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = false, $s_display = true)
{ {
global $SID, $db, $user, $template, $auth, $phpEx, $phpbb_root_path, $config; global $db, $user, $template, $auth, $phpEx, $phpbb_root_path, $config;
$err = ''; $err = '';
@ -1353,13 +1434,12 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
add_log('admin', 'LOG_ADMIN_AUTH_FAIL'); add_log('admin', 'LOG_ADMIN_AUTH_FAIL');
trigger_error('NO_AUTH_ADMIN_USER_DIFFER'); trigger_error('NO_AUTH_ADMIN_USER_DIFFER');
} }
// If authentication is successful we redirect user to previous page // If authentication is successful we redirect user to previous page
$result = $auth->login($username, $password, $autologin, $viewonline, $admin); $result = $auth->login($username, $password, $autologin, $viewonline, $admin);
// If admin authentication and login, we will log if it was a success or not... // If admin authentication and login, we will log if it was a success or not...
// We also break the operation on the first non-success login - it could be argued that the user already // We also break the operation on the first non-success login - it could be argued that the user already knows
// knows
if ($admin) if ($admin)
{ {
if ($result['status'] == LOGIN_SUCCESS) if ($result['status'] == LOGIN_SUCCESS)
@ -1375,9 +1455,9 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
// The result parameter is always an array, holding the relevant informations... // The result parameter is always an array, holding the relevant informations...
if ($result['status'] == LOGIN_SUCCESS) if ($result['status'] == LOGIN_SUCCESS)
{ {
$redirect = request_var('redirect', "index.$phpEx"); $redirect = request_var('redirect', "{$phpbb_root_path}index.$phpEx");
$message = ($l_success) ? $l_success : $user->lang['LOGIN_REDIRECT']; $message = ($l_success) ? $l_success : $user->lang['LOGIN_REDIRECT'];
$l_redirect = ($admin) ? $user->lang['PROCEED_TO_ACP'] : (($redirect === "index.$phpEx") ? $user->lang['RETURN_INDEX'] : $user->lang['RETURN_PAGE']); $l_redirect = ($admin) ? $user->lang['PROCEED_TO_ACP'] : (($redirect === "{$phpbb_root_path}index.$phpEx") ? $user->lang['RETURN_INDEX'] : $user->lang['RETURN_PAGE']);
// append/replace SID (may change during the session for AOL users) // append/replace SID (may change during the session for AOL users)
$redirect = reapply_sid($redirect); $redirect = reapply_sid($redirect);
@ -1408,7 +1488,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
WHERE session_id = '" . $db->sql_escape($user->session_id) . "' WHERE session_id = '" . $db->sql_escape($user->session_id) . "'
AND confirm_type = " . CONFIRM_LOGIN; AND confirm_type = " . CONFIRM_LOGIN;
$db->sql_query($sql); $db->sql_query($sql);
// Generate code // Generate code
$code = gen_rand_string(mt_rand(5, 8)); $code = gen_rand_string(mt_rand(5, 8));
$confirm_id = md5(unique_id($user->ip)); $confirm_id = md5(unique_id($user->ip));
@ -1424,7 +1504,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
$template->assign_vars(array( $template->assign_vars(array(
'S_CONFIRM_CODE' => true, 'S_CONFIRM_CODE' => true,
'CONFIRM_ID' => $confirm_id, 'CONFIRM_ID' => $confirm_id,
'CONFIRM_IMAGE' => '<img src="' . $phpbb_root_path . 'ucp.' . $phpEx . $SID . '&amp;mode=confirm&amp;id=' . $confirm_id . '&amp;type=' . CONFIRM_LOGIN . '" alt="" title="" />', 'CONFIRM_IMAGE' => '<img src="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=confirm&amp;id=' . $confirm_id . '&amp;type=' . CONFIRM_LOGIN) . '" alt="" title="" />',
'L_LOGIN_CONFIRM_EXPLAIN' => sprintf($user->lang['LOGIN_CONFIRM_EXPLAIN'], '<a href="mailto:' . htmlentities($config['board_contact']) . '">', '</a>'), 'L_LOGIN_CONFIRM_EXPLAIN' => sprintf($user->lang['LOGIN_CONFIRM_EXPLAIN'], '<a href="mailto:' . htmlentities($config['board_contact']) . '">', '</a>'),
)); ));
@ -1457,13 +1537,13 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
'LOGIN_ERROR' => $err, 'LOGIN_ERROR' => $err,
'LOGIN_EXPLAIN' => $l_explain, 'LOGIN_EXPLAIN' => $l_explain,
'U_SEND_PASSWORD' => ($config['email_enable']) ? "{$phpbb_root_path}ucp.$phpEx$SID&amp;mode=sendpassword" : '', 'U_SEND_PASSWORD' => ($config['email_enable']) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=sendpassword') : '',
'U_RESEND_ACTIVATION' => ($config['require_activation'] != USER_ACTIVATION_NONE && $config['email_enable']) ? "{$phpbb_root_path}ucp.$phpEx$SID&amp;mode=resend_act" : '', 'U_RESEND_ACTIVATION' => ($config['require_activation'] != USER_ACTIVATION_NONE && $config['email_enable']) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=resend_act') : '',
'U_TERMS_USE' => "{$phpbb_root_path}ucp.$phpEx$SID&amp;mode=terms", 'U_TERMS_USE' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=terms'),
'U_PRIVACY' => "{$phpbb_root_path}ucp.$phpEx$SID&amp;mode=privacy", 'U_PRIVACY' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=privacy'),
'S_DISPLAY_FULL_LOGIN' => ($s_display) ? true : false, 'S_DISPLAY_FULL_LOGIN' => ($s_display) ? true : false,
'S_LOGIN_ACTION' => (!$admin) ? "{$phpbb_root_path}ucp.$phpEx$SID&amp;mode=login" : "index.$phpEx$SID", 'S_LOGIN_ACTION' => (!$admin) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=login') : append_sid("index.$phpEx"), // Needs to stay index.$phpEx because we are within the admin directory
'S_HIDDEN_FIELDS' => $s_hidden_fields, 'S_HIDDEN_FIELDS' => $s_hidden_fields,
'S_ADMIN_AUTH' => $admin, 'S_ADMIN_AUTH' => $admin,
@ -1475,7 +1555,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
$template->set_filenames(array( $template->set_filenames(array(
'body' => 'login_body.html') 'body' => 'login_body.html')
); );
make_jumpbox("{$phpbb_root_path}viewforum.$phpEx"); make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
page_footer(); page_footer();
} }
@ -2228,7 +2308,7 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
*/ */
function page_header($page_title = '') function page_header($page_title = '')
{ {
global $db, $config, $template, $SID, $user, $auth, $phpEx, $phpbb_root_path; global $db, $config, $template, $SID, $_SID, $user, $auth, $phpEx, $phpbb_root_path;
if (defined('HEADER_INC')) if (defined('HEADER_INC'))
{ {
@ -2249,12 +2329,12 @@ function page_header($page_title = '')
// Generate logged in/logged out status // Generate logged in/logged out status
if ($user->data['user_id'] != ANONYMOUS) if ($user->data['user_id'] != ANONYMOUS)
{ {
$u_login_logout = "{$phpbb_root_path}ucp.$phpEx$SID&amp;mode=logout"; $u_login_logout = append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=logout');
$l_login_logout = sprintf($user->lang['LOGOUT_USER'], $user->data['username']); $l_login_logout = sprintf($user->lang['LOGOUT_USER'], $user->data['username']);
} }
else else
{ {
$u_login_logout = "{$phpbb_root_path}ucp.$phpEx$SID&amp;mode=login"; $u_login_logout = append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=login');
$l_login_logout = $user->lang['LOGIN']; $l_login_logout = $user->lang['LOGIN'];
} }
@ -2279,10 +2359,11 @@ function page_header($page_title = '')
// Get number of online guests // Get number of online guests
if (!$config['load_online_guests']) if (!$config['load_online_guests'])
{ {
$sql = 'SELECT COUNT(DISTINCT s.session_ip) as num_guests FROM ' . SESSIONS_TABLE . ' s $sql = 'SELECT COUNT(DISTINCT s.session_ip) as num_guests
FROM ' . SESSIONS_TABLE . ' s
WHERE s.session_user_id = ' . ANONYMOUS . ' WHERE s.session_user_id = ' . ANONYMOUS . '
AND s.session_time >= ' . (time() - ($config['load_online_time'] * 60)) . AND s.session_time >= ' . (time() - ($config['load_online_time'] * 60)) .
$reading_sql; $reading_sql;
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$guests_online = (int) $db->sql_fetchfield('num_guests'); $guests_online = (int) $db->sql_fetchfield('num_guests');
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -2323,7 +2404,7 @@ function page_header($page_title = '')
if (($row['user_allow_viewonline'] && $row['session_viewonline']) || $auth->acl_get('u_viewonline')) if (($row['user_allow_viewonline'] && $row['session_viewonline']) || $auth->acl_get('u_viewonline'))
{ {
$user_online_link = ($row['user_type'] <> USER_IGNORE) ? "<a href=\"{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=viewprofile&amp;u=" . $row['user_id'] . '">' . $user_online_link . '</a>' : $user_online_link; $user_online_link = ($row['user_type'] <> USER_IGNORE) ? '<a href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $row['user_id']) . '">' . $user_online_link . '</a>' : $user_online_link;
$online_userlist .= ($online_userlist != '') ? ', ' . $user_online_link : $user_online_link; $online_userlist .= ($online_userlist != '') ? ', ' . $user_online_link : $user_online_link;
} }
} }
@ -2368,10 +2449,10 @@ function page_header($page_title = '')
// Build online listing // Build online listing
$vars_online = array( $vars_online = array(
'ONLINE'=> array('total_online_users', 'l_t_user_s'), 'ONLINE' => array('total_online_users', 'l_t_user_s'),
'REG' => array('logged_visible_online', 'l_r_user_s'), 'REG' => array('logged_visible_online', 'l_r_user_s'),
'HIDDEN'=> array('logged_hidden_online', 'l_h_user_s'), 'HIDDEN' => array('logged_hidden_online', 'l_h_user_s'),
'GUEST' => array('guests_online', 'l_g_user_s') 'GUEST' => array('guests_online', 'l_g_user_s')
); );
foreach ($vars_online as $l_prefix => $var_ary) foreach ($vars_online as $l_prefix => $var_ary)
@ -2380,15 +2461,15 @@ function page_header($page_title = '')
{ {
case 0: case 0:
${$var_ary[1]} = $user->lang[$l_prefix . '_USERS_ZERO_TOTAL']; ${$var_ary[1]} = $user->lang[$l_prefix . '_USERS_ZERO_TOTAL'];
break; break;
case 1: case 1:
${$var_ary[1]} = $user->lang[$l_prefix . '_USER_TOTAL']; ${$var_ary[1]} = $user->lang[$l_prefix . '_USER_TOTAL'];
break; break;
default: default:
${$var_ary[1]} = $user->lang[$l_prefix . '_USERS_TOTAL']; ${$var_ary[1]} = $user->lang[$l_prefix . '_USERS_TOTAL'];
break; break;
} }
} }
unset($vars_online); unset($vars_online);
@ -2451,59 +2532,62 @@ function page_header($page_title = '')
// Which timezone? // Which timezone?
$tz = ($user->data['user_id'] != ANONYMOUS) ? strval(doubleval($user->data['user_timezone'])) : strval(doubleval($config['board_timezone'])); $tz = ($user->data['user_id'] != ANONYMOUS) ? strval(doubleval($user->data['user_timezone'])) : strval(doubleval($config['board_timezone']));
// The following assigns all _common_ variables that may be used at any point // The following assigns all _common_ variables that may be used at any point in a template.
// in a template.
$template->assign_vars(array( $template->assign_vars(array(
'SITENAME' => $config['sitename'], 'SITENAME' => $config['sitename'],
'SITE_DESCRIPTION' => $config['site_desc'], 'SITE_DESCRIPTION' => $config['site_desc'],
'PAGE_TITLE' => $page_title, 'PAGE_TITLE' => $page_title,
'SCRIPT_NAME' => str_replace('.' . $phpEx, '', $user->page['page_name']), 'SCRIPT_NAME' => str_replace('.' . $phpEx, '', $user->page['page_name']),
'LAST_VISIT_DATE' => sprintf($user->lang['YOU_LAST_VISIT'], $s_last_visit), 'LAST_VISIT_DATE' => sprintf($user->lang['YOU_LAST_VISIT'], $s_last_visit),
'CURRENT_TIME' => sprintf($user->lang['CURRENT_TIME'], $user->format_date(time(), false, true)), 'CURRENT_TIME' => sprintf($user->lang['CURRENT_TIME'], $user->format_date(time(), false, true)),
'TOTAL_USERS_ONLINE' => $l_online_users, 'TOTAL_USERS_ONLINE' => $l_online_users,
'LOGGED_IN_USER_LIST' => $online_userlist, 'LOGGED_IN_USER_LIST' => $online_userlist,
'RECORD_USERS' => $l_online_record, 'RECORD_USERS' => $l_online_record,
'PRIVATE_MESSAGE_INFO' => $l_privmsgs_text, 'PRIVATE_MESSAGE_INFO' => $l_privmsgs_text,
'PRIVATE_MESSAGE_INFO_UNREAD' => $l_privmsgs_text_unread, 'PRIVATE_MESSAGE_INFO_UNREAD' => $l_privmsgs_text_unread,
'SID' => $SID,
'L_LOGIN_LOGOUT' => $l_login_logout, 'SID' => $SID,
'L_INDEX' => $user->lang['FORUM_INDEX'], '_SID' => $_SID,
'SESSION_ID' => $user->session_id,
'ROOT_PATH' => $phpbb_root_path,
'L_LOGIN_LOGOUT' => $l_login_logout,
'L_INDEX' => $user->lang['FORUM_INDEX'],
'L_ONLINE_EXPLAIN' => $l_online_time, 'L_ONLINE_EXPLAIN' => $l_online_time,
'U_PRIVATEMSGS' => "{$phpbb_root_path}ucp.$phpEx$SID&amp;i=pm&amp;folder=inbox", 'U_PRIVATEMSGS' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=inbox'),
'U_RETURN_INBOX' => "{$phpbb_root_path}ucp.$phpEx$SID&amp;i=pm&amp;folder=inbox", 'U_RETURN_INBOX' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=inbox'),
'UA_RETURN_INBOX' => "{$phpbb_root_path}ucp.$phpEx$SID&i=pm&folder=inbox", 'UA_RETURN_INBOX' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox', false),
'U_POPUP_PM' => "{$phpbb_root_path}ucp.$phpEx$SID&amp;i=pm&amp;mode=popup", 'U_POPUP_PM' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;mode=popup'),
'UA_POPUP_PM' => "{$phpbb_root_path}ucp.$phpEx$SID&i=pm&mode=popup", 'UA_POPUP_PM' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=popup', false),
'U_MEMBERLIST' => "{$phpbb_root_path}memberlist.$phpEx$SID", 'U_MEMBERLIST' => append_sid("{$phpbb_root_path}memberlist.$phpEx"),
'U_MEMBERSLIST' => "{$phpbb_root_path}memberlist.$phpEx$SID", 'U_MEMBERSLIST' => append_sid("{$phpbb_root_path}memberlist.$phpEx"),
'U_VIEWONLINE' => "{$phpbb_root_path}viewonline.$phpEx$SID", 'U_VIEWONLINE' => append_sid("{$phpbb_root_path}viewonline.$phpEx"),
'U_LOGIN_LOGOUT' => $u_login_logout, 'U_LOGIN_LOGOUT' => $u_login_logout,
'U_INDEX' => "{$phpbb_root_path}index.$phpEx$SID", 'U_INDEX' => append_sid("{$phpbb_root_path}index.$phpEx"),
'U_SEARCH' => "{$phpbb_root_path}search.$phpEx$SID", 'U_SEARCH' => append_sid("{$phpbb_root_path}search.$phpEx"),
'U_REGISTER' => "{$phpbb_root_path}ucp.$phpEx$SID&amp;mode=register", 'U_REGISTER' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register'),
'U_PROFILE' => "{$phpbb_root_path}ucp.$phpEx$SID", 'U_PROFILE' => append_sid("{$phpbb_root_path}ucp.$phpEx"),
'U_MODCP' => "{$phpbb_root_path}mcp.$phpEx$SID", 'U_MODCP' => append_sid("{$phpbb_root_path}mcp.$phpEx", false, true, $user->session_id),
'U_FAQ' => "{$phpbb_root_path}faq.$phpEx$SID", 'U_FAQ' => append_sid("{$phpbb_root_path}faq.$phpEx"),
'U_SEARCH_SELF' => "{$phpbb_root_path}search.$phpEx$SID&amp;search_id=egosearch", 'U_SEARCH_SELF' => append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=egosearch'),
'U_SEARCH_NEW' => "{$phpbb_root_path}search.$phpEx$SID&amp;search_id=newposts", 'U_SEARCH_NEW' => append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=newposts'),
'U_SEARCH_UNANSWERED' => "{$phpbb_root_path}search.$phpEx$SID&amp;search_id=unanswered", 'U_SEARCH_UNANSWERED' => append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=unanswered'),
'U_SEARCH_ACTIVE_TOPICS'=> "{$phpbb_root_path}search.$phpEx$SID&amp;search_id=active_topics", 'U_SEARCH_ACTIVE_TOPICS'=> append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=active_topics'),
'U_DELETE_COOKIES' => "{$phpbb_root_path}ucp.$phpEx$SID&amp;mode=delete_cookies", 'U_DELETE_COOKIES' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=delete_cookies'),
'U_TEAM' => "{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=leaders", 'U_TEAM' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=leaders'),
'U_RESTORE_PERMISSIONS' => ($user->data['user_perm_from'] && $auth->acl_get('a_switchperm')) ? "{$phpbb_root_path}ucp.$phpEx$SID&amp;mode=restore_perm" : '', 'U_RESTORE_PERMISSIONS' => ($user->data['user_perm_from'] && $auth->acl_get('a_switchperm')) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=restore_perm') : '',
'S_USER_LOGGED_IN' => ($user->data['user_id'] != ANONYMOUS) ? true : false, 'S_USER_LOGGED_IN' => ($user->data['user_id'] != ANONYMOUS) ? true : false,
'S_REGISTERED_USER' => $user->data['is_registered'], 'S_REGISTERED_USER' => $user->data['is_registered'],
'S_USER_PM_POPUP' => $user->optionget('popuppm'), 'S_USER_PM_POPUP' => $user->optionget('popuppm'),
'S_USER_LANG' => $user->data['user_lang'], 'S_USER_LANG' => $user->data['user_lang'],
'S_USER_BROWSER' => (isset($user->data['session_browser'])) ? $user->data['session_browser'] : $user->lang['UNKNOWN_BROWSER'], 'S_USER_BROWSER' => (isset($user->data['session_browser'])) ? $user->data['session_browser'] : $user->lang['UNKNOWN_BROWSER'],
'S_CONTENT_DIRECTION' => $user->lang['DIRECTION'], 'S_CONTENT_DIRECTION' => $user->lang['DIRECTION'],
'S_CONTENT_ENCODING' => $user->lang['ENCODING'], 'S_CONTENT_ENCODING' => $user->lang['ENCODING'],
'S_CONTENT_DIR_LEFT' => $user->lang['LEFT'], 'S_CONTENT_DIR_LEFT' => $user->lang['LEFT'],
'S_CONTENT_DIR_RIGHT' => $user->lang['RIGHT'], 'S_CONTENT_DIR_RIGHT' => $user->lang['RIGHT'],
'S_TIMEZONE' => ($user->data['user_dst'] || ($user->data['user_id'] == ANONYMOUS && $config['board_dst'])) ? sprintf($user->lang['ALL_TIMES'], $user->lang['tz'][$tz], $user->lang['tz']['dst']) : sprintf($user->lang['ALL_TIMES'], $user->lang['tz'][$tz], ''), 'S_TIMEZONE' => ($user->data['user_dst'] || ($user->data['user_id'] == ANONYMOUS && $config['board_dst'])) ? sprintf($user->lang['ALL_TIMES'], $user->lang['tz'][$tz], $user->lang['tz']['dst']) : sprintf($user->lang['ALL_TIMES'], $user->lang['tz'][$tz], ''),
'S_DISPLAY_ONLINE_LIST' => ($config['load_online']) ? 1 : 0, 'S_DISPLAY_ONLINE_LIST' => ($config['load_online']) ? 1 : 0,
'S_DISPLAY_SEARCH' => ($config['load_search']) ? 1 : 0, 'S_DISPLAY_SEARCH' => ($config['load_search']) ? 1 : 0,
'S_DISPLAY_PM' => ($config['allow_privmsg'] && $user->data['is_registered']) ? 1 : 0, 'S_DISPLAY_PM' => ($config['allow_privmsg'] && $user->data['is_registered']) ? 1 : 0,
@ -2543,7 +2627,7 @@ function page_header($page_title = '')
*/ */
function page_footer() function page_footer()
{ {
global $db, $config, $template, $SID, $user, $auth, $cache, $messenger, $starttime, $phpbb_root_path, $phpEx; global $db, $config, $template, $user, $auth, $cache, $messenger, $starttime, $phpbb_root_path, $phpEx;
// Output page creation time // Output page creation time
if (defined('DEBUG')) if (defined('DEBUG'))

View file

@ -89,7 +89,6 @@ function recalc_btree($sql_id, $sql_table, $module_class = '')
FROM $sql_table FROM $sql_table
$sql_where"; $sql_where";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result); $row = $db->sql_fetchrow($result);
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -185,7 +184,7 @@ function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl =
} }
/** /**
* Generate size select form * Generate size select options
*/ */
function size_select_options($size_compare) function size_select_options($size_compare)
{ {
@ -195,13 +194,13 @@ function size_select_options($size_compare)
$size_types = array('b', 'kb', 'mb'); $size_types = array('b', 'kb', 'mb');
$s_size_options = ''; $s_size_options = '';
for ($i = 0, $size = sizeof($size_types_text); $i < $size; $i++) for ($i = 0, $size = sizeof($size_types_text); $i < $size; $i++)
{ {
$selected = ($size_compare == $size_types[$i]) ? ' selected="selected"' : ''; $selected = ($size_compare == $size_types[$i]) ? ' selected="selected"' : '';
$s_size_options .= '<option value="' . $size_types[$i] . '"' . $selected . '>' . $size_types_text[$i] . '</option>'; $s_size_options .= '<option value="' . $size_types[$i] . '"' . $selected . '>' . $size_types_text[$i] . '</option>';
} }
return $s_size_options; return $s_size_options;
} }
@ -229,7 +228,7 @@ function group_select_options($group_id, $exclude_ids = false)
$s_group_options .= '<option' . (($row['group_type'] == GROUP_SPECIAL) ? ' class="sep"' : '') . ' value="' . $row['group_id'] . '"' . $selected . '>' . (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '</option>'; $s_group_options .= '<option' . (($row['group_type'] == GROUP_SPECIAL) ? ' class="sep"' : '') . ' value="' . $row['group_id'] . '"' . $selected . '>' . (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '</option>';
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
return $s_group_options; return $s_group_options;
} }
@ -245,6 +244,7 @@ function get_forum_list($acl_list = 'f_list', $id_only = true, $postable_only =
{ {
// This query is identical to the jumpbox one // This query is identical to the jumpbox one
$expire_time = ($no_cache) ? 0 : 120; $expire_time = ($no_cache) ? 0 : 120;
$sql = 'SELECT forum_id, parent_id, forum_name, forum_type, left_id, right_id $sql = 'SELECT forum_id, parent_id, forum_name, forum_type, left_id, right_id
FROM ' . FORUMS_TABLE . ' FROM ' . FORUMS_TABLE . '
ORDER BY left_id ASC'; ORDER BY left_id ASC';
@ -285,14 +285,15 @@ function get_forum_branch($forum_id, $type = 'all', $order = 'descending', $incl
{ {
case 'parents': case 'parents':
$condition = 'f1.left_id BETWEEN f2.left_id AND f2.right_id'; $condition = 'f1.left_id BETWEEN f2.left_id AND f2.right_id';
break; break;
case 'children': case 'children':
$condition = 'f2.left_id BETWEEN f1.left_id AND f1.right_id'; $condition = 'f2.left_id BETWEEN f1.left_id AND f1.right_id';
break; break;
default: default:
$condition = 'f2.left_id BETWEEN f1.left_id AND f1.right_id OR f1.left_id BETWEEN f2.left_id AND f2.right_id'; $condition = 'f2.left_id BETWEEN f1.left_id AND f1.right_id OR f1.left_id BETWEEN f2.left_id AND f2.right_id';
break;
} }
$rows = array(); $rows = array();
@ -327,12 +328,12 @@ function filelist($rootdir, $dir = '', $type = 'gif|jpg|jpeg|png')
// Remove initial / if present // Remove initial / if present
$rootdir = (substr($rootdir, 0, 1) == '/') ? substr($rootdir, 1) : $rootdir; $rootdir = (substr($rootdir, 0, 1) == '/') ? substr($rootdir, 1) : $rootdir;
// Add closing / if present // Add closing / if not present
$rootdir = ($rootdir && substr($rootdir, -1) != '/') ? $rootdir . '/' : $rootdir; $rootdir = ($rootdir && substr($rootdir, -1) != '/') ? $rootdir . '/' : $rootdir;
// Remove initial / if present // Remove initial / if present
$dir = (substr($dir, 0, 1) == '/') ? substr($dir, 1) : $dir; $dir = (substr($dir, 0, 1) == '/') ? substr($dir, 1) : $dir;
// Add closing / if present // Add closing / if not present
$dir = ($dir && substr($dir, -1) != '/') ? $dir . '/' : $dir; $dir = ($dir && substr($dir, -1) != '/') ? $dir . '/' : $dir;
if (!is_dir($rootdir . $dir)) if (!is_dir($rootdir . $dir))
@ -373,7 +374,7 @@ function move_topics($topic_ids, $forum_id, $auto_sync = true)
} }
$forum_ids = array($forum_id); $forum_ids = array($forum_id);
if (!is_array($topic_ids)) if (!is_array($topic_ids))
{ {
$topic_ids = array($topic_ids); $topic_ids = array($topic_ids);
@ -398,9 +399,6 @@ function move_topics($topic_ids, $forum_id, $auto_sync = true)
$db->sql_freeresult($result); $db->sql_freeresult($result);
} }
/**
* @todo watch for undesired results on marked topics for moving topics, maybe handle it seperatly to cover cookie tracking
*/
$table_ary = array(TOPICS_TABLE, POSTS_TABLE, LOG_TABLE, DRAFTS_TABLE, TOPICS_TRACK_TABLE); $table_ary = array(TOPICS_TABLE, POSTS_TABLE, LOG_TABLE, DRAFTS_TABLE, TOPICS_TRACK_TABLE);
foreach ($table_ary as $table) foreach ($table_ary as $table)
{ {
@ -486,6 +484,7 @@ function move_posts($post_ids, $topic_id, $auto_sync = true)
function delete_topics($where_type, $where_ids, $auto_sync = true) function delete_topics($where_type, $where_ids, $auto_sync = true)
{ {
global $db; global $db;
$forum_ids = $topic_ids = array(); $forum_ids = $topic_ids = array();
if (is_array($where_ids)) if (is_array($where_ids))
@ -521,8 +520,6 @@ function delete_topics($where_type, $where_ids, $auto_sync = true)
return $return; return $return;
} }
// TODO: probably some other stuff too
$sql_where = ' IN (' . implode(', ', $topic_ids) . ')'; $sql_where = ' IN (' . implode(', ', $topic_ids) . ')';
$db->sql_transaction('begin'); $db->sql_transaction('begin');
@ -563,15 +560,17 @@ function delete_posts($where_type, $where_ids, $auto_sync = true, $posted_sync =
{ {
$where_ids = array_unique($where_ids); $where_ids = array_unique($where_ids);
} }
if (empty($where_ids)) if (empty($where_ids))
{ {
return false; return false;
} }
$post_ids = $topic_ids = $forum_ids = array(); $post_ids = $topic_ids = $forum_ids = array();
$sql = 'SELECT post_id, poster_id, topic_id, forum_id $sql = 'SELECT post_id, poster_id, topic_id, forum_id
FROM ' . POSTS_TABLE . " FROM ' . POSTS_TABLE . "
WHERE $where_type " . ((!is_array($where_ids)) ? "= $where_ids" : 'IN (' . implode(', ', $where_ids) . ')'); WHERE $where_type " . ((!is_array($where_ids)) ? '= ' . (int) $where_ids : 'IN (' . implode(', ', array_map('intval', $where_ids)) . ')');
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
@ -581,6 +580,7 @@ function delete_posts($where_type, $where_ids, $auto_sync = true, $posted_sync =
$topic_ids[] = $row['topic_id']; $topic_ids[] = $row['topic_id'];
$forum_ids[] = $row['forum_id']; $forum_ids[] = $row['forum_id'];
} }
$db->sql_freeresult($result);
if (!sizeof($post_ids)) if (!sizeof($post_ids))
{ {
@ -602,7 +602,7 @@ function delete_posts($where_type, $where_ids, $auto_sync = true, $posted_sync =
unset($table_ary); unset($table_ary);
// Remove the message from the search index // Remove the message from the search index
$search_type = $config['search_type']; $search_type = basename($config['search_type']);
if (!file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx)) if (!file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx))
{ {
@ -643,9 +643,10 @@ function delete_posts($where_type, $where_ids, $auto_sync = true, $posted_sync =
/** /**
* Delete Attachments * Delete Attachments
* mode => (post, topic, attach, user) *
* ids => (post_ids, topic_ids, attach_ids, user_ids) * @param string $mode can be: post|topic|attach|user
* resync => set this to false if you are deleting posts or topics... * @param mixed $ids can be: post_ids, topic_ids, attach_ids, user_ids
* @param bool $resync set this to false if you are deleting posts or topics
*/ */
function delete_attachments($mode, $ids, $resync = true) function delete_attachments($mode, $ids, $resync = true)
{ {
@ -654,8 +655,13 @@ function delete_attachments($mode, $ids, $resync = true)
if (is_array($ids)) if (is_array($ids))
{ {
$ids = array_unique($ids); $ids = array_unique($ids);
$ids = array_map('intval', $ids);
} }
else
{
$ids = array((int) $ids);
}
if (!sizeof($ids)) if (!sizeof($ids))
{ {
return false; return false;
@ -672,7 +678,7 @@ function delete_attachments($mode, $ids, $resync = true)
FROM ' . ATTACHMENTS_TABLE . ' FROM ' . ATTACHMENTS_TABLE . '
WHERE ' . $sql_id . ' IN (' . implode(', ', $ids) . ')'; WHERE ' . $sql_id . ' IN (' . implode(', ', $ids) . ')';
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$post_ids[] = $row['post_id']; $post_ids[] = $row['post_id'];
@ -689,7 +695,7 @@ function delete_attachments($mode, $ids, $resync = true)
WHERE post_msg_id IN (' . implode(', ', $ids) . ') WHERE post_msg_id IN (' . implode(', ', $ids) . ')
AND in_message = 0'; AND in_message = 0';
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$topic_ids[] = $row['topic_id']; $topic_ids[] = $row['topic_id'];
@ -699,14 +705,16 @@ function delete_attachments($mode, $ids, $resync = true)
} }
// Delete attachments // Delete attachments
$db->sql_query('DELETE FROM ' . ATTACHMENTS_TABLE . ' WHERE ' . $sql_id . ' IN (' . implode(', ', $ids) . ')'); $sql = 'DELETE FROM ' . ATTACHMENTS_TABLE . '
WHERE ' . $sql_id . ' IN (' . implode(', ', $ids) . ')';
$db->sql_query($sql);
$num_deleted = $db->sql_affectedrows(); $num_deleted = $db->sql_affectedrows();
if (!$num_deleted) if (!$num_deleted)
{ {
return 0; return 0;
} }
// Delete attachments from filesystem // Delete attachments from filesystem
$space_removed = $files_removed = 0; $space_removed = $files_removed = 0;
foreach ($physical as $file_ary) foreach ($physical as $file_ary)
@ -744,9 +752,10 @@ function delete_attachments($mode, $ids, $resync = true)
{ {
if ($mode == 'post' || $mode == 'topic') if ($mode == 'post' || $mode == 'topic')
{ {
$db->sql_query('UPDATE ' . POSTS_TABLE . ' $sql = 'UPDATE ' . POSTS_TABLE . '
SET post_attachment = 0 SET post_attachment = 0
WHERE post_id IN (' . implode(', ', $post_ids) . ')'); WHERE post_id IN (' . implode(', ', $post_ids) . ')';
$db->sql_query($sql);
} }
if ($mode == 'user' || $mode == 'attach') if ($mode == 'user' || $mode == 'attach')
@ -754,11 +763,11 @@ function delete_attachments($mode, $ids, $resync = true)
$remaining = array(); $remaining = array();
$sql = 'SELECT post_msg_id $sql = 'SELECT post_msg_id
FROM ' . ATTACHMENTS_TABLE . ' FROM ' . ATTACHMENTS_TABLE . '
WHERE post_msg_id IN (' . implode(', ', $post_ids) . ') WHERE post_msg_id IN (' . implode(', ', $post_ids) . ')
AND in_message = 0'; AND in_message = 0';
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$remaining[] = $row['post_msg_id']; $remaining[] = $row['post_msg_id'];
@ -766,21 +775,23 @@ function delete_attachments($mode, $ids, $resync = true)
$db->sql_freeresult($result); $db->sql_freeresult($result);
$unset_ids = array_diff($post_ids, $remaining); $unset_ids = array_diff($post_ids, $remaining);
if (sizeof($unset_ids)) if (sizeof($unset_ids))
{ {
$db->sql_query('UPDATE ' . POSTS_TABLE . ' $sql = 'UPDATE ' . POSTS_TABLE . '
SET post_attachment = 0 SET post_attachment = 0
WHERE post_id IN (' . implode(', ', $unset_ids) . ')'); WHERE post_id IN (' . implode(', ', $unset_ids) . ')';
$db->sql_query($sql);
} }
$remaining = array(); $remaining = array();
$sql = 'SELECT post_msg_id $sql = 'SELECT post_msg_id
FROM ' . ATTACHMENTS_TABLE . ' FROM ' . ATTACHMENTS_TABLE . '
WHERE post_msg_id IN (' . implode(', ', $post_ids) . ') WHERE post_msg_id IN (' . implode(', ', $post_ids) . ')
AND in_message = 1'; AND in_message = 1';
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$remaining[] = $row['post_msg_id']; $remaining[] = $row['post_msg_id'];
@ -788,11 +799,13 @@ function delete_attachments($mode, $ids, $resync = true)
$db->sql_freeresult($result); $db->sql_freeresult($result);
$unset_ids = array_diff($post_ids, $remaining); $unset_ids = array_diff($post_ids, $remaining);
if (sizeof($unset_ids)) if (sizeof($unset_ids))
{ {
$db->sql_query('UPDATE ' . PRIVMSGS_TABLE . ' $sql = 'UPDATE ' . PRIVMSGS_TABLE . '
SET message_attachment = 0 SET message_attachment = 0
WHERE msg_id IN (' . implode(', ', $unset_ids) . ')'); WHERE msg_id IN (' . implode(', ', $unset_ids) . ')';
$db->sql_query($sql);
} }
} }
} }
@ -802,9 +815,10 @@ function delete_attachments($mode, $ids, $resync = true)
// Update topic indicator // Update topic indicator
if ($mode == 'topic') if ($mode == 'topic')
{ {
$db->sql_query('UPDATE ' . TOPICS_TABLE . ' $sql = 'UPDATE ' . TOPICS_TABLE . '
SET topic_attachment = 0 SET topic_attachment = 0
WHERE topic_id IN (' . implode(', ', $topic_ids) . ')'); WHERE topic_id IN (' . implode(', ', $topic_ids) . ')';
$db->sql_query($sql);
} }
if ($mode == 'post' || $mode == 'user' || $mode == 'attach') if ($mode == 'post' || $mode == 'user' || $mode == 'attach')
@ -812,8 +826,8 @@ function delete_attachments($mode, $ids, $resync = true)
$remaining = array(); $remaining = array();
$sql = 'SELECT topic_id $sql = 'SELECT topic_id
FROM ' . ATTACHMENTS_TABLE . ' FROM ' . ATTACHMENTS_TABLE . '
WHERE topic_id IN (' . implode(', ', $topic_ids) . ')'; WHERE topic_id IN (' . implode(', ', $topic_ids) . ')';
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
@ -823,11 +837,13 @@ function delete_attachments($mode, $ids, $resync = true)
$db->sql_freeresult($result); $db->sql_freeresult($result);
$unset_ids = array_diff($topic_ids, $remaining); $unset_ids = array_diff($topic_ids, $remaining);
if (sizeof($unset_ids)) if (sizeof($unset_ids))
{ {
$db->sql_query('UPDATE ' . TOPICS_TABLE . ' $sql = 'UPDATE ' . TOPICS_TABLE . '
SET topic_attachment = 0 SET topic_attachment = 0
WHERE topic_id IN (' . implode(', ', $unset_ids) . ')'); WHERE topic_id IN (' . implode(', ', $unset_ids) . ')';
$db->sql_query($sql);
} }
} }
} }
@ -840,7 +856,7 @@ function delete_attachments($mode, $ids, $resync = true)
*/ */
function delete_topic_shadows($max_age, $forum_id = '', $auto_sync = true) function delete_topic_shadows($max_age, $forum_id = '', $auto_sync = true)
{ {
$where = (is_array($forum_id)) ? 'AND t.forum_id IN (' . implode(', ', $forum_id) . ')' : (($forum_id) ? "AND t.forum_id = $forum_id" : ''); $where = (is_array($forum_id)) ? 'AND t.forum_id IN (' . implode(', ', array_map('intval', $forum_id)) . ')' : (($forum_id) ? 'AND t.forum_id = ' . (int) $forum_id : '');
switch (SQL_LAYER) switch (SQL_LAYER)
{ {
@ -861,12 +877,13 @@ function delete_topic_shadows($max_age, $forum_id = '', $auto_sync = true)
AND t.topic_time < ' . (time() - $max_age) AND t.topic_time < ' . (time() - $max_age)
. $where; . $where;
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$topic_ids = array(); $topic_ids = array();
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$topic_ids[] = $row['topic_id']; $topic_ids[] = $row['topic_id'];
} }
$db->sql_freeresult($result);
if (sizeof($topic_ids)) if (sizeof($topic_ids))
{ {
@ -874,6 +891,7 @@ function delete_topic_shadows($max_age, $forum_id = '', $auto_sync = true)
WHERE topic_id IN (' . implode(',', $topic_ids) . ')'; WHERE topic_id IN (' . implode(',', $topic_ids) . ')';
$db->sql_query($sql); $db->sql_query($sql);
} }
break;
} }
if ($auto_sync) if ($auto_sync)
@ -965,19 +983,23 @@ function phpbb_unlink($filename, $mode = 'file')
/** /**
* All-encompasing sync function * All-encompasing sync function
* *
* Usage: * Exaples:
* sync('topic', 'topic_id', 123); <= resync topic #123 * <code>
* sync('topic', 'forum_id', array(2, 3)); <= resync topics from forum #2 and #3 * sync('topic', 'topic_id', 123); // resync topic #123
* sync('topic'); <= resync all topics * sync('topic', 'forum_id', array(2, 3)); // resync topics from forum #2 and #3
* sync('topic', 'range', 'topic_id BETWEEN 1 AND 60'); <= resync a range of topics/forums (only available for 'topic' and 'forum' modes) * sync('topic'); // resync all topics
* sync('topic', 'range', 'topic_id BETWEEN 1 AND 60'); // resync a range of topics/forums (only available for 'topic' and 'forum' modes)
* </code>
* *
* Modes: * Modes:
* - topic_moved Removes topic shadows that would be in the same forum as the topic they link to * - forum Resync complete forum
* - topic Resync topics
* - topic_moved Removes topic shadows that would be in the same forum as the topic they link to
* - topic_approved Resyncs the topic_approved flag according to the status of the first post * - topic_approved Resyncs the topic_approved flag according to the status of the first post
* - post_reported Resyncs the post_reported flag, relying on actual reports * - post_reported Resyncs the post_reported flag, relying on actual reports
* - topic_reported Resyncs the topic_reported flag, relying on post_reported flags * - topic_reported Resyncs the topic_reported flag, relying on post_reported flags
* - post_attachement Same as post_reported, thanks to a quick Search/Replace * - post_attachement Same as post_reported, but with attachment flags
* - topic_attachement Same as topic_reported, thanks to a quick Search/Replace * - topic_attachement Same as topic_reported, but with attachment flags
*/ */
function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false, $sync_extra = false) function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false, $sync_extra = false)
{ {
@ -986,10 +1008,11 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
if (is_array($where_ids)) if (is_array($where_ids))
{ {
$where_ids = array_unique($where_ids); $where_ids = array_unique($where_ids);
$where_ids = array_map('intval', $where_ids);
} }
else if ($where_type != 'range') else if ($where_type != 'range')
{ {
$where_ids = ($where_ids) ? array($where_ids) : array(); $where_ids = ($where_ids) ? array((int) $where_ids) : array();
} }
if ($mode == 'forum' || $mode == 'topic') if ($mode == 'forum' || $mode == 'topic')
@ -1028,7 +1051,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
{ {
return; return;
} }
// $where_type contains the field for the where clause (forum_id, topic_id) // $where_type contains the field for the where clause (forum_id, topic_id)
$where_sql = 'WHERE ' . $mode{0} . ".$where_type IN (" . implode(', ', $where_ids) . ')'; $where_sql = 'WHERE ' . $mode{0} . ".$where_type IN (" . implode(', ', $where_ids) . ')';
$where_sql_and = $where_sql . "\n\tAND"; $where_sql_and = $where_sql . "\n\tAND";
@ -1055,23 +1078,25 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
AND t1.forum_id = t2.forum_id"; AND t1.forum_id = t2.forum_id";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result)) $topic_id_ary = array();
while ($row = $db->sql_fetchrow($result))
{ {
$topic_id_ary = array(); $topic_id_ary[] = $row['topic_id'];
do
{
$topic_id_ary[] = $row['topic_id'];
}
while ($row = $db->sql_fetchrow($result));
$sql = 'DELETE FROM ' . TOPICS_TABLE . '
WHERE topic_id IN (' . implode(', ', $topic_id_ary) . ')';
$db->sql_query($sql);
unset($topic_id_ary);
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
if (!sizeof($topic_id_ary))
{
return;
}
$sql = 'DELETE FROM ' . TOPICS_TABLE . '
WHERE topic_id IN (' . implode(', ', $topic_id_ary) . ')';
$db->sql_query($sql);
break;
} }
break; break;
case 'topic_approved': case 'topic_approved':
switch (SQL_LAYER) switch (SQL_LAYER)
@ -1107,8 +1132,9 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
SET topic_approved = 1 - topic_approved SET topic_approved = 1 - topic_approved
WHERE topic_id IN (' . implode(', ', $topic_ids) . ')'; WHERE topic_id IN (' . implode(', ', $topic_ids) . ')';
$db->sql_query($sql); $db->sql_query($sql);
break;
} }
break; break;
case 'post_reported': case 'post_reported':
$post_ids = $post_reported = array(); $post_ids = $post_reported = array();
@ -1118,6 +1144,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
$where_sql $where_sql
GROUP BY p.post_id, p.post_reported"; GROUP BY p.post_id, p.post_reported";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$post_ids[$row['post_id']] = $row['post_id']; $post_ids[$row['post_id']] = $row['post_id'];
@ -1126,6 +1153,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
$post_reported[$row['post_id']] = 1; $post_reported[$row['post_id']] = 1;
} }
} }
$db->sql_freeresult($result);
$sql = 'SELECT DISTINCT(post_id) $sql = 'SELECT DISTINCT(post_id)
FROM ' . REPORTS_TABLE . ' FROM ' . REPORTS_TABLE . '
@ -1144,6 +1172,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
unset($post_reported[$row['post_id']]); unset($post_reported[$row['post_id']]);
} }
} }
$db->sql_freeresult($result);
// $post_reported should be empty by now, if it's not it contains // $post_reported should be empty by now, if it's not it contains
// posts that are falsely flagged as reported // posts that are falsely flagged as reported
@ -1159,7 +1188,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
WHERE post_id IN (' . implode(', ', $post_ids) . ')'; WHERE post_id IN (' . implode(', ', $post_ids) . ')';
$db->sql_query($sql); $db->sql_query($sql);
} }
break; break;
case 'topic_reported': case 'topic_reported':
if ($sync_extra) if ($sync_extra)
@ -1173,15 +1202,18 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
FROM ' . POSTS_TABLE . " t FROM ' . POSTS_TABLE . " t
$where_sql_and t.post_reported = 1"; $where_sql_and t.post_reported = 1";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$topic_reported[$row['topic_id']] = 1; $topic_reported[$row['topic_id']] = 1;
} }
$db->sql_freeresult($result);
$sql = 'SELECT t.topic_id, t.topic_reported $sql = 'SELECT t.topic_id, t.topic_reported
FROM ' . TOPICS_TABLE . " t FROM ' . TOPICS_TABLE . " t
$where_sql"; $where_sql";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
if ($row['topic_reported'] ^ isset($topic_reported[$row['topic_id']])) if ($row['topic_reported'] ^ isset($topic_reported[$row['topic_id']]))
@ -1189,6 +1221,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
$topic_ids[] = $row['topic_id']; $topic_ids[] = $row['topic_id'];
} }
} }
$db->sql_freeresult($result);
if (sizeof($topic_ids)) if (sizeof($topic_ids))
{ {
@ -1197,7 +1230,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
WHERE topic_id IN (' . implode(', ', $topic_ids) . ')'; WHERE topic_id IN (' . implode(', ', $topic_ids) . ')';
$db->sql_query($sql); $db->sql_query($sql);
} }
break; break;
case 'post_attachment': case 'post_attachment':
$post_ids = $post_attachment = array(); $post_ids = $post_attachment = array();
@ -1207,6 +1240,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
$where_sql $where_sql
GROUP BY p.post_id, p.post_attachment"; GROUP BY p.post_id, p.post_attachment";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$post_ids[$row['post_id']] = $row['post_id']; $post_ids[$row['post_id']] = $row['post_id'];
@ -1215,14 +1249,15 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
$post_attachment[$row['post_id']] = 1; $post_attachment[$row['post_id']] = 1;
} }
} }
$db->sql_freeresult($result);
$sql = 'SELECT DISTINCT(post_msg_id) $sql = 'SELECT DISTINCT(post_msg_id)
FROM ' . ATTACHMENTS_TABLE . ' FROM ' . ATTACHMENTS_TABLE . '
WHERE post_msg_id IN (' . implode(', ', $post_ids) . ') WHERE post_msg_id IN (' . implode(', ', $post_ids) . ')
AND in_message = 0'; AND in_message = 0';
$result = $db->sql_query($sql);
$post_ids = array(); $post_ids = array();
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
if (!isset($post_attachment[$row['post_id']])) if (!isset($post_attachment[$row['post_id']]))
@ -1234,6 +1269,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
unset($post_attachment[$row['post_id']]); unset($post_attachment[$row['post_id']]);
} }
} }
$db->sql_freeresult($result);
// $post_attachment should be empty by now, if it's not it contains // $post_attachment should be empty by now, if it's not it contains
// posts that are falsely flagged as having attachments // posts that are falsely flagged as having attachments
@ -1249,7 +1285,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
WHERE post_id IN (' . implode(', ', $post_ids) . ')'; WHERE post_id IN (' . implode(', ', $post_ids) . ')';
$db->sql_query($sql); $db->sql_query($sql);
} }
break; break;
case 'topic_attachment': case 'topic_attachment':
if ($sync_extra) if ($sync_extra)
@ -1263,15 +1299,18 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
FROM ' . POSTS_TABLE . " t FROM ' . POSTS_TABLE . " t
$where_sql_and t.post_attachment = 1"; $where_sql_and t.post_attachment = 1";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$topic_attachment[$row['topic_id']] = 1; $topic_attachment[$row['topic_id']] = 1;
} }
$db->sql_freeresult($result);
$sql = 'SELECT t.topic_id, t.topic_attachment $sql = 'SELECT t.topic_id, t.topic_attachment
FROM ' . TOPICS_TABLE . " t FROM ' . TOPICS_TABLE . " t
$where_sql"; $where_sql";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
if ($row['topic_attachment'] ^ isset($topic_attachment[$row['topic_id']])) if ($row['topic_attachment'] ^ isset($topic_attachment[$row['topic_id']]))
@ -1279,6 +1318,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
$topic_ids[] = $row['topic_id']; $topic_ids[] = $row['topic_id'];
} }
} }
$db->sql_freeresult($result);
if (sizeof($topic_ids)) if (sizeof($topic_ids))
{ {
@ -1287,9 +1327,10 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
WHERE topic_id IN (' . implode(', ', $topic_ids) . ')'; WHERE topic_id IN (' . implode(', ', $topic_ids) . ')';
$db->sql_query($sql); $db->sql_query($sql);
} }
break; break;
case 'forum': case 'forum':
// 1: Get the list of all forums // 1: Get the list of all forums
$sql = 'SELECT f.* $sql = 'SELECT f.*
FROM ' . FORUMS_TABLE . " f FROM ' . FORUMS_TABLE . " f
@ -1316,6 +1357,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
$forum_data[$forum_id]['last_poster_id'] = 0; $forum_data[$forum_id]['last_poster_id'] = 0;
$forum_data[$forum_id]['last_poster_name'] = ''; $forum_data[$forum_id]['last_poster_name'] = '';
} }
$db->sql_freeresult($result);
// 2: Get topic counts for each forum // 2: Get topic counts for each forum
$sql = 'SELECT forum_id, topic_approved, COUNT(topic_id) AS forum_topics $sql = 'SELECT forum_id, topic_approved, COUNT(topic_id) AS forum_topics
@ -1323,6 +1365,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
WHERE forum_id IN (' . implode(', ', $forum_ids) . ') WHERE forum_id IN (' . implode(', ', $forum_ids) . ')
GROUP BY forum_id, topic_approved'; GROUP BY forum_id, topic_approved';
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$forum_id = (int) $row['forum_id']; $forum_id = (int) $row['forum_id'];
@ -1333,6 +1376,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
$forum_data[$forum_id]['topics'] = $row['forum_topics']; $forum_data[$forum_id]['topics'] = $row['forum_topics'];
} }
} }
$db->sql_freeresult($result);
// 3: Get post count and last_post_id for each forum // 3: Get post count and last_post_id for each forum
$sql = 'SELECT forum_id, COUNT(post_id) AS forum_posts, MAX(post_id) AS last_post_id $sql = 'SELECT forum_id, COUNT(post_id) AS forum_posts, MAX(post_id) AS last_post_id
@ -1341,15 +1385,17 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
AND post_approved = 1 AND post_approved = 1
GROUP BY forum_id'; GROUP BY forum_id';
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$forum_id = (int) $row['forum_id']; $forum_id = (int) $row['forum_id'];
$forum_data[$forum_id]['posts'] = intval($row['forum_posts']); $forum_data[$forum_id]['posts'] = (int) $row['forum_posts'];
$forum_data[$forum_id]['last_post_id'] = intval($row['last_post_id']); $forum_data[$forum_id]['last_post_id'] = (int) $row['last_post_id'];
$post_ids[] = $row['last_post_id']; $post_ids[] = $row['last_post_id'];
} }
$db->sql_freeresult($result);
// 4: Retrieve last_post infos // 4: Retrieve last_post infos
if (sizeof($post_ids)) if (sizeof($post_ids))
@ -1359,9 +1405,10 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
WHERE p.post_id IN (' . implode(', ', $post_ids) . ') WHERE p.post_id IN (' . implode(', ', $post_ids) . ')
AND p.poster_id = u.user_id'; AND p.poster_id = u.user_id';
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$post_info[intval($row['post_id'])] = $row; $post_info[$row['post_id']] = $row;
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -1393,7 +1440,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
foreach ($forum_data as $forum_id => $row) foreach ($forum_data as $forum_id => $row)
{ {
$sql = array(); $sql_ary = array();
foreach ($fieldnames as $fieldname) foreach ($fieldnames as $fieldname)
{ {
@ -1401,24 +1448,24 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
{ {
if (preg_match('#name$#', $fieldname)) if (preg_match('#name$#', $fieldname))
{ {
$sql['forum_' . $fieldname] = (string) $row[$fieldname]; $sql_ary['forum_' . $fieldname] = (string) $row[$fieldname];
} }
else else
{ {
$sql['forum_' . $fieldname] = (int) $row[$fieldname]; $sql_ary['forum_' . $fieldname] = (int) $row[$fieldname];
} }
} }
} }
if (sizeof($sql)) if (sizeof($sql_ary))
{ {
$sql = 'UPDATE ' . FORUMS_TABLE . ' $sql = 'UPDATE ' . FORUMS_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $sql) . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
WHERE forum_id = ' . $forum_id; WHERE forum_id = ' . $forum_id;
$db->sql_query($sql); $db->sql_query($sql);
} }
} }
break; break;
case 'topic': case 'topic':
$topic_data = $post_ids = $approved_unapproved_ids = $resync_forums = $delete_topics = $delete_posts = array(); $topic_data = $post_ids = $approved_unapproved_ids = $resync_forums = $delete_topics = $delete_posts = array();
@ -1519,6 +1566,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
delete_topics($where_type, $where_ids, true); delete_topics($where_type, $where_ids, true);
return; return;
} }
if (sizeof($delete_topics)) if (sizeof($delete_topics))
{ {
$delete_topic_ids = array(); $delete_topic_ids = array();
@ -1553,6 +1601,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
$topic_data[$topic_id]['poster'] = $row['poster_id']; $topic_data[$topic_id]['poster'] = $row['poster_id'];
$topic_data[$topic_id]['first_poster_name'] = ($row['poster_id'] == ANONYMOUS) ? $row['post_username'] : $row['username']; $topic_data[$topic_id]['first_poster_name'] = ($row['poster_id'] == ANONYMOUS) ? $row['post_username'] : $row['username'];
} }
if ($row['post_id'] == $topic_data[$topic_id]['last_post_id']) if ($row['post_id'] == $topic_data[$topic_id]['last_post_id'])
{ {
$topic_data[$topic_id]['last_poster_id'] = $row['poster_id']; $topic_data[$topic_id]['last_poster_id'] = $row['poster_id'];
@ -1612,20 +1661,20 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
foreach ($topic_data as $topic_id => $row) foreach ($topic_data as $topic_id => $row)
{ {
$sql = array(); $sql_ary = array();
foreach ($fieldnames as $fieldname) foreach ($fieldnames as $fieldname)
{ {
if ($row['topic_' . $fieldname] != $row[$fieldname]) if ($row['topic_' . $fieldname] != $row[$fieldname])
{ {
$sql['topic_' . $fieldname] = $row[$fieldname]; $sql_ary['topic_' . $fieldname] = $row[$fieldname];
} }
} }
if (sizeof($sql)) if (sizeof($sql_ary))
{ {
$sql = 'UPDATE ' . TOPICS_TABLE . ' $sql = 'UPDATE ' . TOPICS_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $sql) . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
WHERE topic_id = ' . $topic_id; WHERE topic_id = ' . $topic_id;
$db->sql_query($sql); $db->sql_query($sql);
@ -1641,8 +1690,10 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
{ {
sync('forum', 'forum_id', $resync_forums, true); sync('forum', 'forum_id', $resync_forums, true);
} }
break; break;
} }
return;
} }
/** /**
@ -1652,7 +1703,7 @@ function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync
{ {
global $db; global $db;
$sql_forum = (is_array($forum_id)) ? ' IN (' . implode(',', $forum_id) . ')' : " = $forum_id"; $sql_forum = (is_array($forum_id)) ? ' IN (' . implode(', ', array_map('intval', $forum_id)) . ')' : ' = ' . (int) $forum_id;
$sql_and = ''; $sql_and = '';
if (!($prune_flags & 4)) if (!($prune_flags & 4))
@ -1722,8 +1773,10 @@ function auto_prune($forum_id, $prune_mode, $prune_flags, $prune_days, $prune_fr
FROM ' . FORUMS_TABLE . " FROM ' . FORUMS_TABLE . "
WHERE forum_id = $forum_id"; WHERE forum_id = $forum_id";
$result = $db->sql_query($sql, 3600); $result = $db->sql_query($sql, 3600);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if ($row = $db->sql_fetchrow($result)) if ($row)
{ {
$prune_date = time() - ($prune_days * 86400); $prune_date = time() - ($prune_days * 86400);
$next_prune = time() + ($prune_freq * 86400); $next_prune = time() + ($prune_freq * 86400);
@ -1737,7 +1790,6 @@ function auto_prune($forum_id, $prune_mode, $prune_flags, $prune_days, $prune_fr
add_log('admin', 'LOG_AUTO_PRUNE', $row['forum_name']); add_log('admin', 'LOG_AUTO_PRUNE', $row['forum_name']);
} }
$db->sql_freeresult($result);
return; return;
} }
@ -1806,6 +1858,7 @@ function split_sql_file($sql, $delimiter)
{ {
unset($data[key($data)]); unset($data[key($data)]);
} }
return $data; return $data;
} }
@ -1852,11 +1905,11 @@ function cache_moderators()
), ),
'WHERE' => '(o.auth_option_id = a.auth_option_id OR o.auth_option_id = r.auth_option_id) 'WHERE' => '(o.auth_option_id = a.auth_option_id OR o.auth_option_id = r.auth_option_id)
AND ((a.auth_setting = ' . ACL_NO . ' AND r.auth_setting IS NULL) AND ((a.auth_setting = ' . ACL_NO . ' AND r.auth_setting IS NULL)
OR r.auth_setting = ' . ACL_NO . ') OR r.auth_setting = ' . ACL_NO . ')
AND a.group_id = ug.group_id AND a.group_id = ug.group_id
AND ug.user_id IN (' . implode(', ', $ug_id_ary) . ") AND ug.user_id IN (' . implode(', ', $ug_id_ary) . ")
AND o.auth_option LIKE 'm\_%'", AND o.auth_option LIKE 'm\_%'",
)); ));
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
@ -1980,11 +2033,11 @@ function cache_moderators()
*/ */
function view_log($mode, &$log, &$log_count, $limit = 0, $offset = 0, $forum_id = 0, $topic_id = 0, $user_id = 0, $limit_days = 0, $sort_by = 'l.log_time DESC') function view_log($mode, &$log, &$log_count, $limit = 0, $offset = 0, $forum_id = 0, $topic_id = 0, $user_id = 0, $limit_days = 0, $sort_by = 'l.log_time DESC')
{ {
global $db, $user, $auth, $phpEx, $SID, $phpbb_root_path, $phpbb_admin_path; global $db, $user, $auth, $phpEx, $phpbb_root_path, $phpbb_admin_path;
$topic_id_list = $reportee_id_list = $is_auth = $is_mod = array(); $topic_id_list = $reportee_id_list = $is_auth = $is_mod = array();
$profile_url = (defined('IN_ADMIN')) ? "{$phpbb_admin_path}index.$phpEx$SID&amp;i=users&amp;mode=overview" : "{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=viewprofile"; $profile_url = (defined('IN_ADMIN')) ? append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&amp;mode=overview') : append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile');
switch ($mode) switch ($mode)
{ {
@ -1992,7 +2045,7 @@ function view_log($mode, &$log, &$log_count, $limit = 0, $offset = 0, $forum_id
$log_type = LOG_ADMIN; $log_type = LOG_ADMIN;
$sql_forum = ''; $sql_forum = '';
break; break;
case 'mod': case 'mod':
$log_type = LOG_MOD; $log_type = LOG_MOD;
@ -2053,25 +2106,23 @@ function view_log($mode, &$log, &$log_count, $limit = 0, $offset = 0, $forum_id
} }
$log[$i] = array( $log[$i] = array(
'id' => $row['log_id'], 'id' => $row['log_id'],
'reportee_id' => $row['reportee_id'], 'reportee_id' => $row['reportee_id'],
'reportee_username' => '', 'reportee_username' => '',
'user_id' => $row['user_id'], 'user_id' => $row['user_id'],
'username' => '<a href="' . $profile_url . '&amp;u=' . $row['user_id'] . '">' . $row['username'] . '</a>', 'username' => '<a href="' . $profile_url . '&amp;u=' . $row['user_id'] . '">' . $row['username'] . '</a>',
'ip' => $row['log_ip'], 'ip' => $row['log_ip'],
'time' => $row['log_time'], 'time' => $row['log_time'],
'forum_id' => $row['forum_id'], 'forum_id' => $row['forum_id'],
'topic_id' => $row['topic_id'], 'topic_id' => $row['topic_id'],
'viewforum' => ($row['forum_id'] && $auth->acl_get('f_read', $row['forum_id'])) ? "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=" . $row['forum_id'] : '', 'viewforum' => ($row['forum_id'] && $auth->acl_get('f_read', $row['forum_id'])) ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']) : '',
'action' => (isset($user->lang[$row['log_operation']])) ? $user->lang[$row['log_operation']] : '{' . ucfirst(str_replace('_', ' ', $row['log_operation'])) . '}', 'action' => (isset($user->lang[$row['log_operation']])) ? $user->lang[$row['log_operation']] : '{' . ucfirst(str_replace('_', ' ', $row['log_operation'])) . '}',
); );
if (!empty($row['log_data'])) if (!empty($row['log_data']))
{ {
$log_data_ary = unserialize(stripslashes($row['log_data'])); $log_data_ary = unserialize($row['log_data']);
if (isset($user->lang[$row['log_operation']])) if (isset($user->lang[$row['log_operation']]))
{ {
@ -2097,19 +2148,39 @@ function view_log($mode, &$log, &$log_count, $limit = 0, $offset = 0, $forum_id
$topic_id_list = array_unique($topic_id_list); $topic_id_list = array_unique($topic_id_list);
// This query is not really needed if move_topics() updates the forum_id field, // This query is not really needed if move_topics() updates the forum_id field,
// altough it's also used to determine if the topic still exists in the database // although it's also used to determine if the topic still exists in the database
$sql = 'SELECT topic_id, forum_id $sql = 'SELECT topic_id, forum_id
FROM ' . TOPICS_TABLE . ' FROM ' . TOPICS_TABLE . '
WHERE topic_id IN (' . implode(', ', array_map('intval', $topic_id_list)) . ')'; WHERE topic_id IN (' . implode(', ', array_map('intval', $topic_id_list)) . ')';
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$default_forum_id = 0;
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
if ($auth->acl_get('f_read', $row['forum_id'])) if (!$row['forum_id'])
{ {
// DEBUG!! - global topic if ($auth->acl_getf_global('f_read'))
$config['default_forum_id'] = 2; {
$is_auth[$row['topic_id']] = ($row['forum_id']) ? $row['forum_id'] : $config['default_forum_id']; if (!$default_forum_id)
{
$sql = 'SELECT forum_id
FROM ' . FORUMS_TABLE . '
WHERE forum_type = ' . FORUM_POST;
$f_result = $db->sql_query_limit($sql, 1);
$default_forum_id = (int) $db->sql_fetchfield('forum_id', false, $f_result);
$db->sql_freeresult($f_result);
}
$is_auth[$row['topic_id']] = $default_forum_id;
}
}
else
{
if ($auth->acl_get('f_read', $row['forum_id']))
{
$is_auth[$row['topic_id']] = $row['forum_id'];
}
} }
if ($auth->acl_gets('a_', 'm_', $row['forum_id'])) if ($auth->acl_gets('a_', 'm_', $row['forum_id']))
@ -2117,11 +2188,12 @@ function view_log($mode, &$log, &$log_count, $limit = 0, $offset = 0, $forum_id
$is_mod[$row['topic_id']] = $row['forum_id']; $is_mod[$row['topic_id']] = $row['forum_id'];
} }
} }
$db->sql_freeresult($result);
foreach ($log as $key => $row) foreach ($log as $key => $row)
{ {
$log[$key]['viewtopic'] = (isset($is_auth[$row['topic_id']])) ? "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f=" . $is_auth[$row['topic_id']] . '&amp;t=' . $row['topic_id'] : ''; $log[$key]['viewtopic'] = (isset($is_auth[$row['topic_id']])) ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $is_auth[$row['topic_id']] . '&amp;t=' . $row['topic_id']) : '';
$log[$key]['viewlogs'] = (isset($is_mod[$row['topic_id']])) ? "{$phpbb_root_path}mcp.$phpEx$SID&amp;i=logs&amp;mode=topic_logs&amp;t=" . $row['topic_id'] : ''; $log[$key]['viewlogs'] = (isset($is_mod[$row['topic_id']])) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=logs&amp;mode=topic_logs&amp;t=' . $row['topic_id'], true, $user->session_id) : '';
} }
} }
@ -2149,12 +2221,9 @@ function view_log($mode, &$log, &$log_count, $limit = 0, $offset = 0, $forum_id
AND l.log_time >= $limit_days AND l.log_time >= $limit_days
$sql_forum"; $sql_forum";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$log_count = (int) $db->sql_fetchfield('total_entries');
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result); $db->sql_freeresult($result);
$log_count = $row['total_entries'];
return; return;
} }
@ -2171,7 +2240,6 @@ function view_warned_users(&$users, &$user_count, $limit = 0, $offset = 0, $limi
' . (($limit_days) ? "AND user_last_warning >= $limit_days" : '') . " ' . (($limit_days) ? "AND user_last_warning >= $limit_days" : '') . "
ORDER BY $sort_by"; ORDER BY $sort_by";
$result = $db->sql_query_limit($sql, $limit, $offset); $result = $db->sql_query_limit($sql, $limit, $offset);
$users = $db->sql_fetchrowset($result); $users = $db->sql_fetchrowset($result);
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -2179,14 +2247,10 @@ function view_warned_users(&$users, &$user_count, $limit = 0, $offset = 0, $limi
FROM ' . USERS_TABLE . ' FROM ' . USERS_TABLE . '
WHERE user_warnings > 0 WHERE user_warnings > 0
' . (($limit_days) ? "AND user_last_warning >= $limit_days" : ''); ' . (($limit_days) ? "AND user_last_warning >= $limit_days" : '');
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$user_count = (int) $db->sql_fetchfield('user_count');
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result); $db->sql_freeresult($result);
$user_count = $row['user_count'];
return; return;
} }
@ -2198,13 +2262,15 @@ function get_database_size()
{ {
global $db, $user, $table_prefix; global $db, $user, $table_prefix;
// This code is heavily influenced by a similar routine // This code is heavily influenced by a similar routine in phpMyAdmin 2.2.0
// in phpMyAdmin 2.2.0
if (preg_match('#^mysql#', SQL_LAYER)) if (preg_match('#^mysql#', SQL_LAYER))
{ {
$result = $db->sql_query('SELECT VERSION() AS mysql_version'); $sql = 'SELECT VERSION() AS mysql_version';
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if ($row = $db->sql_fetchrow($result)) if ($row)
{ {
$version = $row['mysql_version']; $version = $row['mysql_version'];
@ -2251,7 +2317,6 @@ function get_database_size()
$sql = 'SELECT ((SUM(size) * 8.0) * 1024.0) as dbsize $sql = 'SELECT ((SUM(size) * 8.0) * 1024.0) as dbsize
FROM sysfiles'; FROM sysfiles';
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$dbsize = ($row = $db->sql_fetchrow($result)) ? intval($row['dbsize']) : $user->lang['NOT_AVAILABLE']; $dbsize = ($row = $db->sql_fetchrow($result)) ? intval($row['dbsize']) : $user->lang['NOT_AVAILABLE'];
$db->sql_freeresult($result); $db->sql_freeresult($result);
} }

View file

@ -16,6 +16,9 @@ class compress
{ {
var $fp = 0; var $fp = 0;
/**
* Add file to archive
*/
function add_file($src, $src_rm_prefix = '', $src_add_prefix = '', $skip_files = '') function add_file($src, $src_rm_prefix = '', $src_add_prefix = '', $skip_files = '')
{ {
global $phpbb_root_path; global $phpbb_root_path;
@ -68,17 +71,23 @@ class compress
$this->data("$src_path$path$file", file_get_contents("$phpbb_root_path$src$path$file"), false, stat("$phpbb_root_path$src$path$file")); $this->data("$src_path$path$file", file_get_contents("$phpbb_root_path$src$path$file"), false, stat("$phpbb_root_path$src$path$file"));
} }
} }
} }
return true; return true;
} }
/**
* Add custom file (the filepath will not be adjusted)
*/
function add_custom_file($src, $filename) function add_custom_file($src, $filename)
{ {
$this->data($filename, file_get_contents($src), false, stat($src)); $this->data($filename, file_get_contents($src), false, stat($src));
return true; return true;
} }
/**
* Add file data
*/
function add_data($src, $name) function add_data($src, $name)
{ {
$stat = array(); $stat = array();
@ -90,6 +99,9 @@ class compress
return true; return true;
} }
/**
* Return available methods
*/
function methods() function methods()
{ {
$methods = array('.tar'); $methods = array('.tar');
@ -111,7 +123,7 @@ class compress
/** /**
* @package phpBB3 * @package phpBB3
* *
* Zip creation class from phpMyAdmin 2.3.0 © Tobias Ratschiller, Olivier Müller, Loïc Chapeaux, * Zip creation class from phpMyAdmin 2.3.0 (c) Tobias Ratschiller, Olivier Müller, Loïc Chapeaux,
* Marc Delisle, http://www.phpmyadmin.net/ * Marc Delisle, http://www.phpmyadmin.net/
* *
* Zip extraction function by Alexandre Tedeschi, alexandrebr at gmail dot com * Zip extraction function by Alexandre Tedeschi, alexandrebr at gmail dot com
@ -130,11 +142,17 @@ class compress_zip extends compress
var $old_offset = 0; var $old_offset = 0;
var $datasec_len = 0; var $datasec_len = 0;
/**
* Constructor
*/
function compress_zip($mode, $file) function compress_zip($mode, $file)
{ {
return $this->fp = @fopen($file, $mode . 'b'); return $this->fp = @fopen($file, $mode . 'b');
} }
/**
* Convert unix to dos time
*/
function unix_to_dos_time($time) function unix_to_dos_time($time)
{ {
$timearray = (!$time) ? getdate() : getdate($time); $timearray = (!$time) ? getdate() : getdate($time);
@ -149,6 +167,9 @@ class compress_zip extends compress
return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
} }
/**
* Extract archive
*/
function extract($dst) function extract($dst)
{ {
// Loop the file, looking for files and folders // Loop the file, looking for files and folders
@ -276,10 +297,14 @@ class compress_zip extends compress
trigger_error("Unexpected header, ending loop"); trigger_error("Unexpected header, ending loop");
break 2; break 2;
} }
$dd_try = false; $dd_try = false;
} }
} }
/**
* Close archive
*/
function close() function close()
{ {
// Write out central file directory and footer ... if it exists // Write out central file directory and footer ... if it exists
@ -290,7 +315,9 @@ class compress_zip extends compress
fclose($this->fp); fclose($this->fp);
} }
// Create the structures ... note we assume version made by is MSDOS /**
* Create the structures ... note we assume version made by is MSDOS
*/
function data($name, $data, $is_dir = false, $stat) function data($name, $data, $is_dir = false, $stat)
{ {
$name = str_replace('\\', '/', $name); $name = str_replace('\\', '/', $name);
@ -327,6 +354,7 @@ class compress_zip extends compress
// Are we a file or a directory? Set archive for file // Are we a file or a directory? Set archive for file
$attrib = ($is_dir) ? 16 : 32; $attrib = ($is_dir) ? 16 : 32;
// File Record Header // File Record Header
$fr = "\x50\x4b\x03\x04"; // Local file header 4bytes $fr = "\x50\x4b\x03\x04"; // Local file header 4bytes
$fr .= pack('v', $var_ext); // ver needed to extract 2bytes $fr .= pack('v', $var_ext); // ver needed to extract 2bytes
@ -351,21 +379,21 @@ class compress_zip extends compress
// Central Directory Header // Central Directory Header
$cdrec = "\x50\x4b\x01\x02"; // header 4bytes $cdrec = "\x50\x4b\x01\x02"; // header 4bytes
$cdrec .= "\x00\x00"; // version made by $cdrec .= "\x00\x00"; // version made by
$cdrec .= pack('v', $var_ext); // version needed to extract $cdrec .= pack('v', $var_ext); // version needed to extract
$cdrec .= "\x00\x00"; // gen purpose bit flag $cdrec .= "\x00\x00"; // gen purpose bit flag
$cdrec .= $c_method; // compression method $cdrec .= $c_method; // compression method
$cdrec .= $hexdtime; // last mod time & date $cdrec .= $hexdtime; // last mod time & date
$cdrec .= pack('V', $crc); // crc32 $cdrec .= pack('V', $crc); // crc32
$cdrec .= pack('V', $c_len); // compressed filesize $cdrec .= pack('V', $c_len); // compressed filesize
$cdrec .= pack('V', $unc_len); // uncompressed filesize $cdrec .= pack('V', $unc_len); // uncompressed filesize
$cdrec .= pack('v', strlen($name)); // length of filename $cdrec .= pack('v', strlen($name)); // length of filename
$cdrec .= pack('v', 0); // extra field length $cdrec .= pack('v', 0); // extra field length
$cdrec .= pack('v', 0); // file comment length $cdrec .= pack('v', 0); // file comment length
$cdrec .= pack('v', 0); // disk number start $cdrec .= pack('v', 0); // disk number start
$cdrec .= pack('v', 0); // internal file attributes $cdrec .= pack('v', 0); // internal file attributes
$cdrec .= pack('V', $attrib); // external file attributes $cdrec .= pack('V', $attrib); // external file attributes
$cdrec .= pack('V', $this->old_offset); // relative offset of local header $cdrec .= pack('V', $this->old_offset); // relative offset of local header
$cdrec .= $name; $cdrec .= $name;
// Save to central directory // Save to central directory
@ -374,6 +402,9 @@ class compress_zip extends compress
$this->old_offset = $this->datasec_len; $this->old_offset = $this->datasec_len;
} }
/**
* file
*/
function file() function file()
{ {
$ctrldir = implode('', $this->ctrl_dir); $ctrldir = implode('', $this->ctrl_dir);
@ -386,6 +417,9 @@ class compress_zip extends compress
"\x00\x00"; // .zip file comment length "\x00\x00"; // .zip file comment length
} }
/**
* Download archive
*/
function download($filename) function download($filename)
{ {
global $phpbb_root_path; global $phpbb_root_path;
@ -409,7 +443,7 @@ class compress_zip extends compress
* @package phpBB3 * @package phpBB3
* *
* Tar/tar.gz compression routine * Tar/tar.gz compression routine
* Header/checksum creation derived from tarfile.pl, © Tom Horsley, 1994 * Header/checksum creation derived from tarfile.pl, (c) Tom Horsley, 1994
*/ */
class compress_tar extends compress class compress_tar extends compress
{ {
@ -420,6 +454,9 @@ class compress_tar extends compress
var $type = ''; var $type = '';
var $wrote = false; var $wrote = false;
/**
* Constructor
*/
function compress_tar($mode, $file, $type = '') function compress_tar($mode, $file, $type = '')
{ {
$type = (!$type) ? $file : $type; $type = (!$type) ? $file : $type;
@ -432,6 +469,9 @@ class compress_tar extends compress
$this->open(); $this->open();
} }
/**
* Extract archive
*/
function extract($dst) function extract($dst)
{ {
$fzread = ($this->isbz && function_exists('bzread')) ? 'bzread' : (($this->isgz && extension_loaded('zlib')) ? 'gzread' : 'fread'); $fzread = ($this->isbz && function_exists('bzread')) ? 'bzread' : (($this->isgz && extension_loaded('zlib')) ? 'gzread' : 'fread');
@ -491,6 +531,9 @@ class compress_tar extends compress
} }
} }
/**
* Close archive
*/
function close() function close()
{ {
$fzclose = ($this->isbz && function_exists('bzclose')) ? 'bzclose' : (($this->isgz && extension_loaded('zlib')) ? 'gzclose' : 'fclose'); $fzclose = ($this->isbz && function_exists('bzclose')) ? 'bzclose' : (($this->isgz && extension_loaded('zlib')) ? 'gzclose' : 'fclose');
@ -498,12 +541,17 @@ class compress_tar extends compress
if ($this->wrote) if ($this->wrote)
{ {
$fzwrite = ($this->isbz && function_exists('bzwrite')) ? 'bzwrite' : (($this->isgz && extension_loaded('zlib')) ? 'gzwrite' : 'fwrite'); $fzwrite = ($this->isbz && function_exists('bzwrite')) ? 'bzwrite' : (($this->isgz && extension_loaded('zlib')) ? 'gzwrite' : 'fwrite');
$fzwrite($this->fp, pack("a512", "")); // Symbolizes that there are no more files
// Symbolizes that there are no more files
$fzwrite($this->fp, pack("a512", ""));
} }
$fzclose($this->fp); $fzclose($this->fp);
} }
/**
* Create the structures
*/
function data($name, $data, $is_dir = false, $stat) function data($name, $data, $is_dir = false, $stat)
{ {
$this->wrote = true; $this->wrote = true;
@ -513,12 +561,12 @@ class compress_tar extends compress
// This is the header data, it contains all the info we know about the file or folder that we are about to archive // This is the header data, it contains all the info we know about the file or folder that we are about to archive
$header = ''; $header = '';
$header .= pack("a100", $name); // file name $header .= pack("a100", $name); // file name
$header .= pack("a8", sprintf("%07o", $stat[2])); // file mode $header .= pack("a8", sprintf("%07o", $stat[2])); // file mode
$header .= pack("a8", sprintf("%07o", $stat[4])); // owner id $header .= pack("a8", sprintf("%07o", $stat[4])); // owner id
$header .= pack("a8", sprintf("%07o", $stat[5])); // group id $header .= pack("a8", sprintf("%07o", $stat[5])); // group id
$header .= pack("a12", sprintf("%011o", $stat[7])); // file size $header .= pack("a12", sprintf("%011o", $stat[7])); // file size
$header .= pack("a12", sprintf("%011o", $stat[9])); // last mod time $header .= pack("a12", sprintf("%011o", $stat[9])); // last mod time
// Checksum // Checksum
$checksum = 0; $checksum = 0;
@ -530,23 +578,26 @@ class compress_tar extends compress
// We precompute the rest of the hash, this saves us time in the loop and allows us to insert our hash without resorting to string functions // We precompute the rest of the hash, this saves us time in the loop and allows us to insert our hash without resorting to string functions
$checksum += 2415 + (($is_dir) ? 53 : 0); $checksum += 2415 + (($is_dir) ? 53 : 0);
$header .= pack("a8", sprintf("%07o", $checksum)); // checksum $header .= pack("a8", sprintf("%07o", $checksum)); // checksum
$header .= pack("a1", $typeflag); // link indicator $header .= pack("a1", $typeflag); // link indicator
$header .= pack("a100", ''); // name of linked file $header .= pack("a100", ''); // name of linked file
$header .= pack("a6", 'ustar'); // ustar indicator $header .= pack("a6", 'ustar'); // ustar indicator
$header .= pack("a2", '00'); // ustar version $header .= pack("a2", '00'); // ustar version
$header .= pack("a32", 'Unknown'); // owner name $header .= pack("a32", 'Unknown'); // owner name
$header .= pack("a32", 'Unknown'); // group name $header .= pack("a32", 'Unknown'); // group name
$header .= pack("a8", ''); // device major number $header .= pack("a8", ''); // device major number
$header .= pack("a8", ''); // device minor number $header .= pack("a8", ''); // device minor number
$header .= pack("a155", ''); // filename prefix $header .= pack("a155", ''); // filename prefix
$header .= pack("a12", ''); // end $header .= pack("a12", ''); // end
// This writes the entire file in one shot. Header, followed by data and then null padded to a multiple of 512 // This writes the entire file in one shot. Header, followed by data and then null padded to a multiple of 512
$fzwrite($this->fp, $header . (($stat[7] !== 0 && !$is_dir) ? $data . (($stat[7] % 512 > 0) ? str_repeat("\0", 512 - $stat[7] % 512) : '') : '')); $fzwrite($this->fp, $header . (($stat[7] !== 0 && !$is_dir) ? $data . (($stat[7] % 512 > 0) ? str_repeat("\0", 512 - $stat[7] % 512) : '') : ''));
unset($data); unset($data);
} }
/**
* Open archive
*/
function open() function open()
{ {
$fzopen = ($this->isbz && function_exists('bzopen')) ? 'bzopen' : (($this->isgz && extension_loaded('zlib')) ? 'gzopen' : 'fopen'); $fzopen = ($this->isbz && function_exists('bzopen')) ? 'bzopen' : (($this->isgz && extension_loaded('zlib')) ? 'gzopen' : 'fopen');
@ -558,6 +609,9 @@ class compress_tar extends compress
} }
} }
/**
* Download archive
*/
function download($filename) function download($filename)
{ {
global $phpbb_root_path; global $phpbb_root_path;

View file

@ -14,7 +14,7 @@
function display_forums($root_data = '', $display_moderators = true, $return_moderators = false) function display_forums($root_data = '', $display_moderators = true, $return_moderators = false)
{ {
global $db, $auth, $user, $template; global $db, $auth, $user, $template;
global $phpbb_root_path, $phpEx, $SID, $config; global $phpbb_root_path, $phpEx, $config;
$forum_rows = $subforums = $forum_ids = $forum_ids_moderator = $forum_moderators = $active_forum_ary = array(); $forum_rows = $subforums = $forum_ids = $forum_ids_moderator = $forum_moderators = $active_forum_ary = array();
$parent_id = $visible_forums = 0; $parent_id = $visible_forums = 0;
@ -56,11 +56,12 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
$sql_from = FORUMS_TABLE . ' f '; $sql_from = FORUMS_TABLE . ' f ';
$lastread_select = $sql_lastread = ''; $lastread_select = $sql_lastread = '';
$tracking_topics = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? unserialize(stripslashes($_COOKIE[$config['cookie_name'] . '_track'])) : array(); $tracking_topics = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? ((STRIP) ? stripslashes($_COOKIE[$config['cookie_name'] . '_track']) : $_COOKIE[$config['cookie_name'] . '_track']) : '';
$tracking_topics = ($tracking_topics) ? unserialize($tracking_topics) : array();
if (!$user->data['is_registered']) if (!$user->data['is_registered'])
{ {
$user->data['user_lastmark'] = (isset($tracking_topics['l'])) ? base_convert($tracking_topics['l'], 36, 10) + $config['board_startdate'] : 0; $user->data['user_lastmark'] = (isset($tracking_topics['l'])) ? (int) (base_convert($tracking_topics['l'], 36, 10) + $config['board_startdate']) : 0;
} }
} }
@ -108,7 +109,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
$right_id = $row['right_id']; $right_id = $row['right_id'];
continue; continue;
} }
$forum_ids[] = $forum_id; $forum_ids[] = $forum_id;
if ($config['load_db_lastread'] && $user->data['is_registered']) if ($config['load_db_lastread'] && $user->data['is_registered'])
@ -119,9 +120,9 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
{ {
if (!$user->data['is_registered']) if (!$user->data['is_registered'])
{ {
$user->data['user_lastmark'] = (isset($tracking_topics['l'])) ? base_convert($tracking_topics['l'], 36, 10) + $config['board_startdate'] : 0; $user->data['user_lastmark'] = (isset($tracking_topics['l'])) ? (int) (base_convert($tracking_topics['l'], 36, 10) + $config['board_startdate']) : 0;
} }
$forum_tracking_info[$forum_id] = (isset($tracking_topics['f'][$forum_id])) ? base_convert($tracking_topics['f'][$forum_id], 36, 10) + $config['board_startdate'] : $user->data['user_lastmark']; $forum_tracking_info[$forum_id] = (isset($tracking_topics['f'][$forum_id])) ? (int) (base_convert($tracking_topics['f'][$forum_id], 36, 10) + $config['board_startdate']) : $user->data['user_lastmark'];
} }
// Display active topics from this forum? // Display active topics from this forum?
@ -138,7 +139,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
} }
$active_forum_ary['forum_id'][] = $forum_id; $active_forum_ary['forum_id'][] = $forum_id;
$active_forum_ary['enable_icons'][] = $row['enable_icons']; $active_forum_ary['enable_icons'][] = $row['enable_icons'];
$active_forum_ary['forum_topics'] += ($auth->acl_get('m_approve', $forum_id)) ? $row['forum_topics_real'] : $row['forum_topics']; $active_forum_ary['forum_topics'] += ($auth->acl_get('m_approve', $forum_id)) ? $row['forum_topics_real'] : $row['forum_topics'];
$active_forum_ary['forum_posts'] += $row['forum_posts']; $active_forum_ary['forum_posts'] += $row['forum_posts'];
} }
@ -162,7 +163,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
$subforums[$parent_id][$forum_id]['display'] = ($row['display_on_index']) ? true : false; $subforums[$parent_id][$forum_id]['display'] = ($row['display_on_index']) ? true : false;
$subforums[$parent_id][$forum_id]['name'] = $row['forum_name']; $subforums[$parent_id][$forum_id]['name'] = $row['forum_name'];
$subforums[$parent_id][$forum_id]['orig_forum_last_post_time'] = $row['forum_last_post_time']; $subforums[$parent_id][$forum_id]['orig_forum_last_post_time'] = $row['forum_last_post_time'];
$forum_rows[$parent_id]['forum_topics'] += ($auth->acl_get('m_approve', $forum_id)) ? $row['forum_topics_real'] : $row['forum_topics']; $forum_rows[$parent_id]['forum_topics'] += ($auth->acl_get('m_approve', $forum_id)) ? $row['forum_topics_real'] : $row['forum_topics'];
// Do not list redirects in LINK Forums as Posts. // Do not list redirects in LINK Forums as Posts.
@ -186,7 +187,6 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
} }
$forum_ids_moderator[$parent_id] = $forum_rows[$parent_id]['forum_id_last_post']; $forum_ids_moderator[$parent_id] = $forum_rows[$parent_id]['forum_id_last_post'];
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -207,11 +207,9 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
$message = sprintf($user->lang['RETURN_FORUM'], '<a href="' . $redirect . '">', '</a>'); $message = sprintf($user->lang['RETURN_FORUM'], '<a href="' . $redirect . '">', '</a>');
} }
meta_refresh(3, $redirect); meta_refresh(3, $redirect);
trigger_error($user->lang['FORUMS_MARKED'] . '<br /><br />' . $message);
$message = $user->lang['FORUMS_MARKED'] . '<br /><br />' . $message;
trigger_error($message);
} }
// Grab moderators ... if necessary // Grab moderators ... if necessary
@ -230,13 +228,13 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
if (!$row['parent_id'] && $row['forum_type'] == FORUM_CAT) if (!$row['parent_id'] && $row['forum_type'] == FORUM_CAT)
{ {
$template->assign_block_vars('forumrow', array( $template->assign_block_vars('forumrow', array(
'S_IS_CAT' => true, 'S_IS_CAT' => true,
'FORUM_ID' => $row['forum_id'], 'FORUM_ID' => $row['forum_id'],
'FORUM_NAME' => $row['forum_name'], 'FORUM_NAME' => $row['forum_name'],
'FORUM_DESC' => generate_text_for_display($row['forum_desc'], $row['forum_desc_uid'], $row['forum_desc_bitfield']), 'FORUM_DESC' => generate_text_for_display($row['forum_desc'], $row['forum_desc_uid'], $row['forum_desc_bitfield']),
'FORUM_FOLDER_IMG' => ($row['forum_image']) ? '<img src="' . $phpbb_root_path . $row['forum_image'] . '" alt="' . $user->lang['FORUM_CAT'] . '" />' : '', 'FORUM_FOLDER_IMG' => ($row['forum_image']) ? '<img src="' . $phpbb_root_path . $row['forum_image'] . '" alt="' . $user->lang['FORUM_CAT'] . '" />' : '',
'FORUM_FOLDER_IMG_SRC' => ($row['forum_image']) ? $phpbb_root_path . $row['forum_image'] : '', 'FORUM_FOLDER_IMG_SRC' => ($row['forum_image']) ? $phpbb_root_path . $row['forum_image'] : '',
'U_VIEWFORUM' => "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=" . $row['forum_id']) 'U_VIEWFORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']))
); );
continue; continue;
@ -263,14 +261,14 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
if ($subforum_row['display'] && $subforum_row['name']) if ($subforum_row['display'] && $subforum_row['name'])
{ {
$subforums_list .= ($subforums_list == '') ? '' : ', '; $subforums_list .= ($subforums_list == '') ? '' : ', ';
$subforums_list .= '<a href="' . $phpbb_root_path . "viewforum.$phpEx$SID&amp;f=$subforum_id\">{$subforum_row['name']}</a>"; $subforums_list .= '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $subforum_id) . '">' . $subforum_row['name'] . '</a>';
} }
else else
{ {
unset($subforums[$forum_id][$subforum_id]); unset($subforums[$forum_id][$subforum_id]);
} }
} }
$l_subforums = (sizeof($subforums[$forum_id]) == 1) ? $user->lang['SUBFORUM'] . ': ' : $user->lang['SUBFORUMS'] . ': '; $l_subforums = (sizeof($subforums[$forum_id]) == 1) ? $user->lang['SUBFORUM'] . ': ' : $user->lang['SUBFORUMS'] . ': ';
$folder_image = ($forum_unread) ? 'sub_forum_new' : 'sub_forum'; $folder_image = ($forum_unread) ? 'sub_forum_new' : 'sub_forum';
} }
@ -305,9 +303,9 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
$last_post_time = $user->format_date($row['forum_last_post_time']); $last_post_time = $user->format_date($row['forum_last_post_time']);
$last_poster = ($row['forum_last_poster_name'] != '') ? $row['forum_last_poster_name'] : $user->lang['GUEST']; $last_poster = ($row['forum_last_poster_name'] != '') ? $row['forum_last_poster_name'] : $user->lang['GUEST'];
$last_poster_url = ($row['forum_last_poster_id'] == ANONYMOUS) ? '' : "{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=viewprofile&amp;u={$row['forum_last_poster_id']}"; $last_poster_url = ($row['forum_last_poster_id'] == ANONYMOUS) ? '' : append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $row['forum_last_poster_id']);
$last_post_url = "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f=" . $row['forum_id_last_post'] . '&amp;p=' . $row['forum_last_post_id'] . '#p' . $row['forum_last_post_id']; $last_post_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $row['forum_id_last_post'] . '&amp;p=' . $row['forum_last_post_id']) . '#p' . $row['forum_last_post_id'];
} }
else else
{ {
@ -328,6 +326,8 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
$template->assign_block_vars('forumrow', array( $template->assign_block_vars('forumrow', array(
'S_IS_CAT' => false, 'S_IS_CAT' => false,
'S_IS_LINK' => ($row['forum_type'] == FORUM_LINK) ? true : false, 'S_IS_LINK' => ($row['forum_type'] == FORUM_LINK) ? true : false,
'S_UNREAD_FORUM' => $forum_unread,
'S_LOCKED_FORUM' => ($row['forum_status'] == ITEM_LOCKED) ? true : false,
'FORUM_ID' => $row['forum_id'], 'FORUM_ID' => $row['forum_id'],
'FORUM_NAME' => $row['forum_name'], 'FORUM_NAME' => $row['forum_name'],
@ -341,23 +341,21 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod
'LAST_POSTER' => $last_poster, 'LAST_POSTER' => $last_poster,
'MODERATORS' => $moderators_list, 'MODERATORS' => $moderators_list,
'L_SUBFORUM_STR' => $l_subforums, 'L_SUBFORUM_STR' => $l_subforums,
'L_FORUM_FOLDER_ALT'=> $folder_alt, 'L_FORUM_FOLDER_ALT' => $folder_alt,
'L_MODERATOR_STR' => $l_moderator, 'L_MODERATOR_STR' => $l_moderator,
'U_VIEWFORUM' => ($row['forum_type'] != FORUM_LINK || $row['forum_flags'] & 1) ? "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f={$row['forum_id']}" : $row['forum_link'], 'U_VIEWFORUM' => ($row['forum_type'] != FORUM_LINK || $row['forum_flags'] & 1) ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']) : $row['forum_link'],
'U_LAST_POSTER' => $last_poster_url, 'U_LAST_POSTER' => $last_poster_url,
'U_LAST_POST' => $last_post_url, 'U_LAST_POST' => $last_post_url)
)
); );
} }
$template->assign_vars(array( $template->assign_vars(array(
'U_MARK_FORUMS' => "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=" . $root_data['forum_id'] . '&amp;mark=forums', 'U_MARK_FORUMS' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $root_data['forum_id'] . '&amp;mark=forums'),
'S_HAS_SUBFORUM' => ($visible_forums) ? true : false, 'S_HAS_SUBFORUM' => ($visible_forums) ? true : false,
'L_SUBFORUM' => ($visible_forums == 1) ? $user->lang['SUBFORUM'] : $user->lang['SUBFORUMS'], 'L_SUBFORUM' => ($visible_forums == 1) ? $user->lang['SUBFORUM'] : $user->lang['SUBFORUMS'],
'LAST_POST_IMG' => $user->img('icon_post_latest', 'VIEW_LATEST_POST'), 'LAST_POST_IMG' => $user->img('icon_post_latest', 'VIEW_LATEST_POST'))
)
); );
if ($return_moderators) if ($return_moderators)
@ -399,7 +397,7 @@ function generate_forum_rules(&$forum_data)
function generate_forum_nav(&$forum_data) function generate_forum_nav(&$forum_data)
{ {
global $db, $user, $template, $auth; global $db, $user, $template, $auth;
global $phpEx, $SID, $phpbb_root_path; global $phpEx, $phpbb_root_path;
if (!$auth->acl_get('f_list', $forum_data['forum_id'])) if (!$auth->acl_get('f_list', $forum_data['forum_id']))
{ {
@ -426,7 +424,7 @@ function generate_forum_nav(&$forum_data)
'S_IS_POST' => ($parent_type == FORUM_POST) ? true : false, 'S_IS_POST' => ($parent_type == FORUM_POST) ? true : false,
'FORUM_NAME' => $parent_name, 'FORUM_NAME' => $parent_name,
'FORUM_ID' => $parent_forum_id, 'FORUM_ID' => $parent_forum_id,
'U_VIEW_FORUM' => "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=$parent_forum_id") 'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $parent_forum_id))
); );
} }
@ -436,7 +434,7 @@ function generate_forum_nav(&$forum_data)
'S_IS_POST' => ($forum_data['forum_type'] == FORUM_POST) ? true : false, 'S_IS_POST' => ($forum_data['forum_type'] == FORUM_POST) ? true : false,
'FORUM_NAME' => $forum_data['forum_name'], 'FORUM_NAME' => $forum_data['forum_name'],
'FORUM_ID' => $forum_data['forum_id'], 'FORUM_ID' => $forum_data['forum_id'],
'U_VIEW_FORUM' => "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=" . $forum_data['forum_id']) 'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_data['forum_id']))
); );
$template->assign_vars(array( $template->assign_vars(array(
@ -495,9 +493,9 @@ function get_forum_parents(&$forum_data)
*/ */
function topic_topic_author(&$topic_row) function topic_topic_author(&$topic_row)
{ {
global $phpEx, $SID, $phpbb_root_path, $user; global $phpEx, $phpbb_root_path, $user;
$topic_author = ($topic_row['topic_poster'] != ANONYMOUS) ? "<a href=\"{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=viewprofile&amp;u=" . $topic_row['topic_poster'] . '">' : ''; $topic_author = ($topic_row['topic_poster'] != ANONYMOUS) ? '<a href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $topic_row['topic_poster']) . '">' : '';
$topic_author .= ($topic_row['topic_poster'] != ANONYMOUS) ? $topic_row['topic_first_poster_name'] : (($topic_row['topic_first_poster_name'] != '') ? $topic_row['topic_first_poster_name'] : $user->lang['GUEST']); $topic_author .= ($topic_row['topic_poster'] != ANONYMOUS) ? $topic_row['topic_first_poster_name'] : (($topic_row['topic_first_poster_name'] != '') ? $topic_row['topic_first_poster_name'] : $user->lang['GUEST']);
$topic_author .= ($topic_row['topic_poster'] != ANONYMOUS) ? '</a>' : ''; $topic_author .= ($topic_row['topic_poster'] != ANONYMOUS) ? '</a>' : '';
@ -519,7 +517,7 @@ function topic_generate_pagination($replies, $url)
$times = 1; $times = 1;
for ($j = 0; $j < $replies + 1; $j += $config['posts_per_page']) for ($j = 0; $j < $replies + 1; $j += $config['posts_per_page'])
{ {
$pagination .= "<a href=\"$url&amp;start=$j\">$times</a>"; $pagination .= '<a href="' . $url . '&amp;start=' . $j . '">' . $times . '</a>';
if ($times == 1 && $total_pages > 4) if ($times == 1 && $total_pages > 4)
{ {
$pagination .= ' ... '; $pagination .= ' ... ';
@ -546,7 +544,7 @@ function topic_generate_pagination($replies, $url)
*/ */
function get_moderators(&$forum_moderators, $forum_id = false) function get_moderators(&$forum_moderators, $forum_id = false)
{ {
global $config, $template, $db, $phpbb_root_path, $phpEx, $SID; global $config, $template, $db, $phpbb_root_path, $phpEx;
// Have we disabled the display of moderators? If so, then return // Have we disabled the display of moderators? If so, then return
// from whence we came ... // from whence we came ...
@ -577,7 +575,7 @@ function get_moderators(&$forum_moderators, $forum_id = false)
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$forum_moderators[$row['forum_id']][] = (!empty($row['user_id'])) ? '<a href="' . $phpbb_root_path . "memberlist.$phpEx$SID&amp;mode=viewprofile&amp;u=" . $row['user_id'] . '">' . $row['username'] . '</a>' : '<a href="' . $phpbb_root_path . "memberlist.$phpEx$SID&amp;mode=group&amp;g=" . $row['group_id'] . '">' . $row['group_name'] . '</a>'; $forum_moderators[$row['forum_id']][] = (!empty($row['user_id'])) ? '<a href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $row['user_id']) . '">' . $row['username'] . '</a>' : '<a href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $row['group_id']) . '">' . $row['group_name'] . '</a>';
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -589,7 +587,7 @@ function get_moderators(&$forum_moderators, $forum_id = false)
*/ */
function gen_forum_auth_level($mode, $forum_id, $forum_status) function gen_forum_auth_level($mode, $forum_id, $forum_status)
{ {
global $SID, $template, $auth, $user, $config; global $template, $auth, $user, $config;
$locked = ($forum_status == ITEM_LOCKED && !$auth->acl_get('m_edit', $forum_id)) ? true : false; $locked = ($forum_status == ITEM_LOCKED && !$auth->acl_get('m_edit', $forum_id)) ? true : false;
@ -637,13 +635,13 @@ function topic_status(&$topic_row, $replies, $unread_topic, &$folder_img, &$fold
$topic_type = $user->lang['VIEW_TOPIC_ANNOUNCEMENT']; $topic_type = $user->lang['VIEW_TOPIC_ANNOUNCEMENT'];
$folder = 'folder_announce'; $folder = 'folder_announce';
$folder_new = 'folder_announce_new'; $folder_new = 'folder_announce_new';
break; break;
case POST_STICKY: case POST_STICKY:
$topic_type = $user->lang['VIEW_TOPIC_STICKY']; $topic_type = $user->lang['VIEW_TOPIC_STICKY'];
$folder = 'folder_sticky'; $folder = 'folder_sticky';
$folder_new = 'folder_sticky_new'; $folder_new = 'folder_sticky_new';
break; break;
default: default:
if ($replies >= $config['hot_threshold']) if ($replies >= $config['hot_threshold'])
@ -656,7 +654,7 @@ function topic_status(&$topic_row, $replies, $unread_topic, &$folder_img, &$fold
$folder = 'folder'; $folder = 'folder';
$folder_new = 'folder_new'; $folder_new = 'folder_new';
} }
break; break;
} }
if ($topic_row['topic_status'] == ITEM_LOCKED) if ($topic_row['topic_status'] == ITEM_LOCKED)
@ -688,7 +686,7 @@ function topic_status(&$topic_row, $replies, $unread_topic, &$folder_img, &$fold
function display_attachments($forum_id, $blockname, &$attachment_data, &$update_count, $force_physical = false, $return = false) function display_attachments($forum_id, $blockname, &$attachment_data, &$update_count, $force_physical = false, $return = false)
{ {
global $template, $cache, $user; global $template, $cache, $user;
global $extensions, $config, $phpbb_root_path, $phpEx, $SID; global $extensions, $config, $phpbb_root_path, $phpEx;
$return_tpl = array(); $return_tpl = array();
@ -715,13 +713,17 @@ function display_attachments($forum_id, $blockname, &$attachment_data, &$update_
$thumbnail_filename = $phpbb_root_path . $config['upload_path'] . '/thumb_' . basename($attachment['physical_filename']); $thumbnail_filename = $phpbb_root_path . $config['upload_path'] . '/thumb_' . basename($attachment['physical_filename']);
$upload_icon = ''; $upload_icon = '';
if ($user->img('icon_attach', '') && !$extensions[$attachment['extension']]['upload_icon'])
if (isset($extensions[$attachment['extension']]))
{ {
$upload_icon = $user->img('icon_attach', ''); if ($user->img('icon_attach', '') && !$extensions[$attachment['extension']]['upload_icon'])
} {
else if ($extensions[$attachment['extension']]['upload_icon']) $upload_icon = $user->img('icon_attach', '');
{ }
$upload_icon = '<img src="' . $phpbb_root_path . $config['upload_icons_path'] . '/' . trim($extensions[$attachment['extension']]['upload_icon']) . '" alt="" />'; else if ($extensions[$attachment['extension']]['upload_icon'])
{
$upload_icon = '<img src="' . $phpbb_root_path . $config['upload_icons_path'] . '/' . trim($extensions[$attachment['extension']]['upload_icon']) . '" alt="" />';
}
} }
$filesize = $attachment['filesize']; $filesize = $attachment['filesize'];
@ -796,7 +798,7 @@ function display_attachments($forum_id, $blockname, &$attachment_data, &$update_
// Images, but display Thumbnail // Images, but display Thumbnail
case ATTACHMENT_CATEGORY_THUMB: case ATTACHMENT_CATEGORY_THUMB:
$l_downloaded_viewed = $user->lang['VIEWED']; $l_downloaded_viewed = $user->lang['VIEWED'];
$download_link = (!$force_physical && $attachment['attach_id']) ? $phpbb_root_path . "download.$phpEx$SID&amp;id=" . $attachment['attach_id'] : $filename; $download_link = (!$force_physical && $attachment['attach_id']) ? append_sid("{$phpbb_root_path}download.$phpEx", 'id=' . $attachment['attach_id']) : $filename;
$block_array += array( $block_array += array(
'S_THUMBNAIL' => true, 'S_THUMBNAIL' => true,
@ -830,7 +832,7 @@ function display_attachments($forum_id, $blockname, &$attachment_data, &$update_
// Viewed/Heared File ... update the download count (download.php is not called here) // Viewed/Heared File ... update the download count (download.php is not called here)
$update_count[] = $attachment['attach_id']; $update_count[] = $attachment['attach_id'];
break; break;
/* // Macromedia Flash Files /* // Macromedia Flash Files
case SWF_CAT: case SWF_CAT:
@ -851,7 +853,7 @@ function display_attachments($forum_id, $blockname, &$attachment_data, &$update_
*/ */
default: default:
$l_downloaded_viewed = $user->lang['DOWNLOADED']; $l_downloaded_viewed = $user->lang['DOWNLOADED'];
$download_link = (!$force_physical && $attachment['attach_id']) ? $phpbb_root_path . "download.$phpEx$SID&amp;id=" . $attachment['attach_id'] : $filename; $download_link = (!$force_physical && $attachment['attach_id']) ? append_sid("{$phpbb_root_path}download.$phpEx", 'id=' . $attachment['attach_id']) : $filename;
$block_array += array( $block_array += array(
'S_FILE' => true, 'S_FILE' => true,
@ -924,7 +926,7 @@ function display_reasons($reason_id = 0)
function display_user_activity(&$userdata) function display_user_activity(&$userdata)
{ {
global $auth, $template, $db, $user; global $auth, $template, $db, $user;
global $phpbb_root_path, $SID, $phpEx; global $phpbb_root_path, $phpEx;
// Init new auth class if user is different // Init new auth class if user is different
if ($user->data['user_id'] != $userdata['user_id']) if ($user->data['user_id'] != $userdata['user_id'])
@ -976,7 +978,7 @@ function display_user_activity(&$userdata)
$post_count_sql $post_count_sql
GROUP BY f.forum_id GROUP BY f.forum_id
ORDER BY COUNT(p.post_id) DESC"; ORDER BY COUNT(p.post_id) DESC";
break; break;
default: default:
$sql = 'SELECT f.forum_id, COUNT(p.post_id) AS num_posts $sql = 'SELECT f.forum_id, COUNT(p.post_id) AS num_posts
@ -1072,8 +1074,8 @@ function display_user_activity(&$userdata)
'ACTIVE_TOPIC' => censor_text($active_t_name), 'ACTIVE_TOPIC' => censor_text($active_t_name),
'ACTIVE_TOPIC_POSTS' => ($active_t_count == 1) ? sprintf($user->lang['USER_POST'], 1) : sprintf($user->lang['USER_POSTS'], $active_t_count), 'ACTIVE_TOPIC_POSTS' => ($active_t_count == 1) ? sprintf($user->lang['USER_POST'], 1) : sprintf($user->lang['USER_POSTS'], $active_t_count),
'ACTIVE_TOPIC_PCT' => sprintf($user->lang['POST_PCT'], $active_t_pct), 'ACTIVE_TOPIC_PCT' => sprintf($user->lang['POST_PCT'], $active_t_pct),
'U_ACTIVE_FORUM' => "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=$active_f_id", 'U_ACTIVE_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $active_f_id),
'U_ACTIVE_TOPIC' => "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;t=$active_t_id") 'U_ACTIVE_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 't=' . $active_t_id))
); );
} }
@ -1082,7 +1084,7 @@ function display_user_activity(&$userdata)
*/ */
function watch_topic_forum($mode, &$s_watching, &$s_watching_img, $user_id, $forum_id, $topic_id, $notify_status = 'unset', $start = 0) function watch_topic_forum($mode, &$s_watching, &$s_watching_img, $user_id, $forum_id, $topic_id, $notify_status = 'unset', $start = 0)
{ {
global $template, $db, $user, $phpEx, $SID, $start, $phpbb_root_path; global $template, $db, $user, $phpEx, $start, $phpbb_root_path;
$table_sql = ($mode == 'forum') ? FORUMS_WATCH_TABLE : TOPICS_WATCH_TABLE; $table_sql = ($mode == 'forum') ? FORUMS_WATCH_TABLE : TOPICS_WATCH_TABLE;
$where_sql = ($mode == 'forum') ? 'forum_id' : 'topic_id'; $where_sql = ($mode == 'forum') ? 'forum_id' : 'topic_id';
@ -1121,9 +1123,11 @@ function watch_topic_forum($mode, &$s_watching, &$s_watching_img, $user_id, $for
$db->sql_query($sql); $db->sql_query($sql);
} }
meta_refresh(3, "view$mode.$phpEx$SID&amp;$u_url=$match_id&amp;start=$start"); $redirect_url = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&amp;start=$start");
$message = $user->lang['NOT_WATCHING_' . strtoupper($mode)] . '<br /><br />' . sprintf($user->lang['RETURN_' . strtoupper($mode)], '<a href="' . "view$mode.$phpEx$SID&amp;" . $u_url . "=$match_id&amp;start=$start" . '">', '</a>'); meta_refresh(3, $redirect_url);
$message = $user->lang['NOT_WATCHING_' . strtoupper($mode)] . '<br /><br />' . sprintf($user->lang['RETURN_' . strtoupper($mode)], '<a href="' . $redirect_url . '">', '</a>');
trigger_error($message); trigger_error($message);
} }
else else
@ -1153,9 +1157,10 @@ function watch_topic_forum($mode, &$s_watching, &$s_watching_img, $user_id, $for
$db->sql_query($sql); $db->sql_query($sql);
} }
meta_refresh(3, "view$mode.$phpEx$SID&amp;$u_url=$match_id&amp;start=$start"); $redirect_url = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&amp;start=$start");
meta_refresh(3, $redirect_url);
$message = $user->lang['ARE_WATCHING_' . strtoupper($mode)] . '<br /><br />' . sprintf($user->lang['RETURN_' . strtoupper($mode)], '<a href="' . "view$mode.$phpEx$SID&amp;" . $u_url . "=$match_id&amp;start=$start" . '">', '</a>'); $message = $user->lang['ARE_WATCHING_' . strtoupper($mode)] . '<br /><br />' . sprintf($user->lang['RETURN_' . strtoupper($mode)], '<a href="' . $redirect_url . '">', '</a>');
trigger_error($message); trigger_error($message);
} }
else else
@ -1179,7 +1184,7 @@ function watch_topic_forum($mode, &$s_watching, &$s_watching_img, $user_id, $for
if ($can_watch) if ($can_watch)
{ {
$s_watching['link'] = "{$phpbb_root_path}view$mode.$phpEx$SID&amp;$u_url=$match_id&amp;" . (($is_watching) ? 'unwatch' : 'watch') . "=$mode&amp;start=$start"; $s_watching['link'] = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&amp;" . (($is_watching) ? 'unwatch' : 'watch') . "=$mode&amp;start=$start");
$s_watching['title'] = $user->lang[(($is_watching) ? 'STOP' : 'START') . '_WATCHING_' . strtoupper($mode)]; $s_watching['title'] = $user->lang[(($is_watching) ? 'STOP' : 'START') . '_WATCHING_' . strtoupper($mode)];
} }

View file

@ -59,6 +59,9 @@ class jabber
var $connector; var $connector;
/**
* Constructor
*/
function jabber() function jabber()
{ {
$this->port = '5222'; $this->port = '5222';
@ -93,6 +96,9 @@ class jabber
); );
} }
/**
* Connect
*/
function connect() function connect()
{ {
$this->connector = new cjp_standard_connector; $this->connector = new cjp_standard_connector;
@ -120,6 +126,9 @@ class jabber
} }
} }
/**
* Disconnect
*/
function disconnect() function disconnect()
{ {
if (is_int($this->delay_disconnect)) if (is_int($this->delay_disconnect))
@ -131,6 +140,9 @@ class jabber
$this->connector->close_socket(); $this->connector->close_socket();
} }
/**
* Cruise Control
*/
function cruise_control($seconds = -1) function cruise_control($seconds = -1)
{ {
$count = 0; $count = 0;
@ -147,13 +159,12 @@ class jabber
{ {
$this->call_handler($packet); $this->call_handler($packet);
} }
} }
while (sizeof($this->packet_queue) > 1); while (sizeof($this->packet_queue) > 1);
$count += 0.25; $count += 0.25;
usleep(250000); usleep(250000);
if ($this->last_ping_time != date('H:i')) if ($this->last_ping_time != date('H:i'))
{ {
// Modified by Nathan Fritz // Modified by Nathan Fritz
@ -173,6 +184,9 @@ class jabber
return true; return true;
} }
/**
* Send authentication request
*/
function send_auth() function send_auth()
{ {
$this->auth_id = 'auth_' . md5(time() . $_SERVER['REMOTE_ADDR']); $this->auth_id = 'auth_' . md5(time() . $_SERVER['REMOTE_ADDR']);
@ -208,13 +222,17 @@ class jabber
} }
} }
/**
* Register account
*/
function account_registration($reg_email = NULL, $reg_name = NULL) function account_registration($reg_email = NULL, $reg_name = NULL)
{ {
$packet = $this->send_iq($this->server, 'get', 'reg_01', 'jabber:iq:register'); $packet = $this->send_iq($this->server, 'get', 'reg_01', 'jabber:iq:register');
if ($packet) if ($packet)
{ {
$key = $this->get_info_from_iq_key($packet); // just in case a key was passed back from the server // just in case a key was passed back from the server
$key = $this->get_info_from_iq_key($packet);
unset($packet); unset($packet);
$payload = "<username>{$this->username}</username> $payload = "<username>{$this->username}</username>
@ -252,13 +270,17 @@ class jabber
} }
} }
/**
* Change password
*/
function change_password($new_password) function change_password($new_password)
{ {
$packet = $this->send_iq($this->server, 'get', 'A0', 'jabber:iq:register'); $packet = $this->send_iq($this->server, 'get', 'A0', 'jabber:iq:register');
if ($packet) if ($packet)
{ {
$key = $this->get_info_from_iq_key($packet); // just in case a key was passed back from the server // just in case a key was passed back from the server
$key = $this->get_info_from_iq_key($packet);
unset($packet); unset($packet);
$payload = "<username>{$this->username}</username> $payload = "<username>{$this->username}</username>
@ -292,6 +314,9 @@ class jabber
} }
} }
/**
* Send packet
*/
function send_packet($xml) function send_packet($xml)
{ {
$xml = trim($xml); $xml = trim($xml);
@ -299,8 +324,10 @@ class jabber
return ($this->connector->write_to_socket($xml)) ? true : false; return ($this->connector->write_to_socket($xml)) ? true : false;
} }
// get the transport registration fields /**
// method written by Steve Blinch, http://www.blitzaffe.com * get the transport registration fields
* method written by Steve Blinch, http://www.blitzaffe.com
*/
function transport_registration_details($transport) function transport_registration_details($transport)
{ {
$this->txnid++; $this->txnid++;
@ -326,8 +353,10 @@ class jabber
} }
} }
// register with the transport /**
// method written by Steve Blinch, http://www.blitzaffe.com * register with the transport
* method written by Steve Blinch, http://www.blitzaffe.com
*/
function transport_registration($transport, $details) function transport_registration($transport, $details)
{ {
$this->txnid++; $this->txnid++;
@ -335,17 +364,18 @@ class jabber
if ($packet) if ($packet)
{ {
$key = $this->get_info_from_iq_key($packet); // just in case a key was passed back from the server // just in case a key was passed back from the server
$key = $this->get_info_from_iq_key($packet);
unset($packet); unset($packet);
$payload = ($key) ? "<key>$key</key>\n" : ''; $payload = ($key) ? "<key>$key</key>\n" : '';
foreach ($details as $element => $value) foreach ($details as $element => $value)
{ {
$payload .= "<$element>$value</$element>\n"; $payload .= "<$element>$value</$element>\n";
} }
$packet = $this->send_iq($transport, 'set', "reg_{$this->txnid}", "jabber:iq:register", $payload); $packet = $this->send_iq($transport, 'set', "reg_{$this->txnid}", "jabber:iq:register", $payload);
if ($this->get_info_from_iq_type($packet) == 'result') if ($this->get_info_from_iq_type($packet) == 'result')
{ {
if (isset($packet['iq']['#']['query'][0]['#']['registered'][0]['#'])) if (isset($packet['iq']['#']['query'][0]['#']['registered'][0]['#']))
@ -374,6 +404,9 @@ class jabber
} }
} }
/**
* Listen to socket
*/
function listen() function listen()
{ {
$incoming = ''; $incoming = '';
@ -398,12 +431,18 @@ class jabber
return true; return true;
} }
/**
* Strip jid
*/
function strip_jid($jid = NULL) function strip_jid($jid = NULL)
{ {
preg_match('#(.*)\/(.*)#Ui', $jid, $temp); preg_match('#(.*)\/(.*)#Ui', $jid, $temp);
return ($temp[1] != '') ? $temp[1] : $jid; return ($temp[1] != '') ? $temp[1] : $jid;
} }
/**
* Send a message
*/
function send_message($to, $type = 'normal', $id = NULL, $content = NULL, $payload = NULL) function send_message($to, $type = 'normal', $id = NULL, $content = NULL, $payload = NULL)
{ {
if ($to && is_array($content)) if ($to && is_array($content))
@ -431,14 +470,7 @@ class jabber
$xml .= $payload; $xml .= $payload;
$xml .= "</message>\n"; $xml .= "</message>\n";
if ($this->send_packet($xml)) return ($this->send_packet($xml)) ? true : false;
{
return true;
}
else
{
return false;
}
} }
else else
{ {
@ -446,6 +478,9 @@ class jabber
} }
} }
/**
* Send presence
*/
function send_presence($type = NULL, $to = NULL, $status = NULL, $show = NULL, $priority = NULL) function send_presence($type = NULL, $to = NULL, $status = NULL, $show = NULL, $priority = NULL)
{ {
$xml = '<presence'; $xml = '<presence';
@ -462,6 +497,9 @@ class jabber
return ($this->send_packet($xml)) ? true : false; return ($this->send_packet($xml)) ? true : false;
} }
/**
* Send error
*/
function send_error($to, $id = NULL, $error_number, $error_message = NULL) function send_error($to, $id = NULL, $error_number, $error_message = NULL)
{ {
$xml = "<iq type='error' to='$to'"; $xml = "<iq type='error' to='$to'";
@ -475,11 +513,17 @@ class jabber
$this->send_packet($xml); $this->send_packet($xml);
} }
/**
* Get first from queue
*/
function get_first_from_queue() function get_first_from_queue()
{ {
return array_shift($this->packet_queue); return array_shift($this->packet_queue);
} }
/**
* Get from queue by id
*/
function get_from_queue_by_id($packet_type, $id) function get_from_queue_by_id($packet_type, $id)
{ {
$found_message = false; $found_message = false;
@ -498,6 +542,9 @@ class jabber
return (is_array($found_message)) ? $found_message : false; return (is_array($found_message)) ? $found_message : false;
} }
/**
* Call handler
*/
function call_handler($packet = NULL) function call_handler($packet = NULL)
{ {
$packet_type = $this->_get_packet_type($packet); $packet_type = $this->_get_packet_type($packet);
@ -538,6 +585,9 @@ class jabber
} }
} }
/**
* Send iq
*/
function send_iq($to = NULL, $type = 'get', $id = NULL, $xmlns = NULL, $payload = NULL, $from = NULL) function send_iq($to = NULL, $type = 'get', $id = NULL, $xmlns = NULL, $payload = NULL, $from = NULL)
{ {
if (!preg_match('#^(get|set|result|error)$#', $type)) if (!preg_match('#^(get|set|result|error)$#', $type))
@ -569,11 +619,14 @@ class jabber
} }
} }
// ====================================================================== // ======================================================================
// private methods // private methods
// ====================================================================== // ======================================================================
/**
* Send auth
* @private
*/
function _sendauth_ok($zerok_token, $zerok_sequence) function _sendauth_ok($zerok_token, $zerok_sequence)
{ {
// initial hash of password // initial hash of password
@ -598,6 +651,10 @@ class jabber
return ($this->get_info_from_iq_type($packet) == 'result' && $this->get_info_from_iq_id($packet) == $this->auth_id) ? true : false; return ($this->get_info_from_iq_type($packet) == 'result' && $this->get_info_from_iq_id($packet) == $this->auth_id) ? true : false;
} }
/**
* Send auth digest
* @private
*/
function _sendauth_digest() function _sendauth_digest()
{ {
$payload = "<username>{$this->username}</username> $payload = "<username>{$this->username}</username>
@ -610,6 +667,10 @@ class jabber
return ($this->get_info_from_iq_type($packet) == 'result' && $this->get_info_from_iq_id($packet) == $this->auth_id) ? true : false; return ($this->get_info_from_iq_type($packet) == 'result' && $this->get_info_from_iq_id($packet) == $this->auth_id) ? true : false;
} }
/**
* Send auth plain
* @private
*/
function _sendauth_plaintext() function _sendauth_plaintext()
{ {
$payload = "<username>{$this->username}</username> $payload = "<username>{$this->username}</username>
@ -622,6 +683,10 @@ class jabber
return ($this->get_info_from_iq_type($packet) == 'result' && $this->get_info_from_iq_id($packet) == $this->auth_id) ? true : false; return ($this->get_info_from_iq_type($packet) == 'result' && $this->get_info_from_iq_id($packet) == $this->auth_id) ? true : false;
} }
/**
* Listen on socket
* @private
*/
function _listen_incoming() function _listen_incoming()
{ {
$incoming = ''; $incoming = '';
@ -635,6 +700,10 @@ class jabber
return $this->xmlize($incoming); return $this->xmlize($incoming);
} }
/**
* Check if connected
* @private
*/
function _check_connected() function _check_connected()
{ {
$incoming_array = $this->_listen_incoming(); $incoming_array = $this->_listen_incoming();
@ -660,6 +729,10 @@ class jabber
} }
} }
/**
* Split incoming packet
* @private
*/
function _split_incoming($incoming) function _split_incoming($incoming)
{ {
$temp = preg_split('#<(message|iq|presence|stream)#', $incoming, -1, PREG_SPLIT_DELIM_CAPTURE); $temp = preg_split('#<(message|iq|presence|stream)#', $incoming, -1, PREG_SPLIT_DELIM_CAPTURE);
@ -673,6 +746,10 @@ class jabber
return $array; return $array;
} }
/**
* Get packet type
* @private
*/
function _get_packet_type($packet = NULL) function _get_packet_type($packet = NULL)
{ {
if (is_array($packet)) if (is_array($packet))
@ -684,8 +761,10 @@ class jabber
return ($packet_type) ? $packet_type : false; return ($packet_type) ? $packet_type : false;
} }
// _array_htmlspecialchars() /**
// applies htmlspecialchars() to all values in an array * _array_htmlspecialchars()
* applies htmlspecialchars() to all values in an array
*/
function _array_htmlspecialchars(&$array) function _array_htmlspecialchars(&$array)
{ {
if (is_array($array)) if (is_array($array))
@ -703,36 +782,57 @@ class jabber
// <message/> parsers // <message/> parsers
// ====================================================================== // ======================================================================
/**
* Get info from message (from)
*/
function get_info_from_message_from($packet = NULL) function get_info_from_message_from($packet = NULL)
{ {
return (is_array($packet)) ? $packet['message']['@']['from'] : false; return (is_array($packet)) ? $packet['message']['@']['from'] : false;
} }
/**
* Get info from message (type)
*/
function get_info_from_message_type($packet = NULL) function get_info_from_message_type($packet = NULL)
{ {
return (is_array($packet)) ? $packet['message']['@']['type'] : false; return (is_array($packet)) ? $packet['message']['@']['type'] : false;
} }
/**
* Get info from message (id)
*/
function get_info_from_message_id($packet = NULL) function get_info_from_message_id($packet = NULL)
{ {
return (is_array($packet)) ? $packet['message']['@']['id'] : false; return (is_array($packet)) ? $packet['message']['@']['id'] : false;
} }
/**
* Get info from message (thread)
*/
function get_info_from_message_thread($packet = NULL) function get_info_from_message_thread($packet = NULL)
{ {
return (is_array($packet)) ? $packet['message']['#']['thread'][0]['#'] : false; return (is_array($packet)) ? $packet['message']['#']['thread'][0]['#'] : false;
} }
/**
* Get info from message (subject)
*/
function get_info_from_message_subject($packet = NULL) function get_info_from_message_subject($packet = NULL)
{ {
return (is_array($packet)) ? $packet['message']['#']['subject'][0]['#'] : false; return (is_array($packet)) ? $packet['message']['#']['subject'][0]['#'] : false;
} }
/**
* Get info from message (body)
*/
function get_info_from_message_body($packet = NULL) function get_info_from_message_body($packet = NULL)
{ {
return (is_array($packet)) ? $packet['message']['#']['body'][0]['#'] : false; return (is_array($packet)) ? $packet['message']['#']['body'][0]['#'] : false;
} }
/**
* Get info from message (error)
*/
function get_info_from_message_error($packet = NULL) function get_info_from_message_error($packet = NULL)
{ {
$error = preg_replace('#^\/$#', '', ($packet['message']['#']['error'][0]['@']['code'] . '/' . $packet['message']['#']['error'][0]['#'])); $error = preg_replace('#^\/$#', '', ($packet['message']['#']['error'][0]['@']['code'] . '/' . $packet['message']['#']['error'][0]['#']));
@ -743,26 +843,41 @@ class jabber
// <iq/> parsers // <iq/> parsers
// ====================================================================== // ======================================================================
/**
* Get info from iq (from)
*/
function get_info_from_iq_from($packet = NULL) function get_info_from_iq_from($packet = NULL)
{ {
return (is_array($packet)) ? $packet['iq']['@']['from'] : false; return (is_array($packet)) ? $packet['iq']['@']['from'] : false;
} }
/**
* Get info from iq (type)
*/
function get_info_from_iq_type($packet = NULL) function get_info_from_iq_type($packet = NULL)
{ {
return (is_array($packet)) ? $packet['iq']['@']['type'] : false; return (is_array($packet)) ? $packet['iq']['@']['type'] : false;
} }
/**
* Get info from iq (id)
*/
function get_info_from_iq_id($packet = NULL) function get_info_from_iq_id($packet = NULL)
{ {
return (is_array($packet)) ? $packet['iq']['@']['id'] : false; return (is_array($packet)) ? $packet['iq']['@']['id'] : false;
} }
/**
* Get info from iq (key)
*/
function get_info_from_iq_key($packet = NULL) function get_info_from_iq_key($packet = NULL)
{ {
return (is_array($packet) && isset($packet['iq']['#']['query'][0]['#']['key'][0]['#'])) ? $packet['iq']['#']['query'][0]['#']['key'][0]['#'] : false; return (is_array($packet) && isset($packet['iq']['#']['query'][0]['#']['key'][0]['#'])) ? $packet['iq']['#']['query'][0]['#']['key'][0]['#'] : false;
} }
/**
* Get info from iq (error)
*/
function get_info_from_iq_error($packet = NULL) function get_info_from_iq_error($packet = NULL)
{ {
$error = preg_replace('#^\/$#', '', ($packet['iq']['#']['error'][0]['@']['code'] . '/' . $packet['iq']['#']['error'][0]['#'])); $error = preg_replace('#^\/$#', '', ($packet['iq']['#']['error'][0]['@']['code'] . '/' . $packet['iq']['#']['error'][0]['#']));
@ -773,11 +888,17 @@ class jabber
// <message/> handlers // <message/> handlers
// ====================================================================== // ======================================================================
/**
* return message (from)
*/
function handler_message_normal($packet) function handler_message_normal($packet)
{ {
$from = $packet['message']['@']['from']; $from = $packet['message']['@']['from'];
} }
/**
* return error (from)
*/
function handler_message_error($packet) function handler_message_error($packet)
{ {
$from = $packet['message']['@']['from']; $from = $packet['message']['@']['from'];
@ -787,7 +908,9 @@ class jabber
// <iq/> handlers // <iq/> handlers
// ====================================================================== // ======================================================================
// simple client authentication /**
* simple client authentication
*/
function handler_iq_jabber_iq_auth($packet) function handler_iq_jabber_iq_auth($packet)
{ {
$from = $this->get_info_from_iq_from($packet); $from = $this->get_info_from_iq_from($packet);
@ -796,7 +919,9 @@ class jabber
$this->send_error($from, $id, 501); $this->send_error($from, $id, 501);
} }
// method for interactive registration /**
* method for interactive registration
*/
function handler_iq_jabber_iq_register($packet) function handler_iq_jabber_iq_register($packet)
{ {
$from = $this->get_info_from_iq_from($packet); $from = $this->get_info_from_iq_from($packet);
@ -805,7 +930,9 @@ class jabber
$this->send_error($from, $id, 501); $this->send_error($from, $id, 501);
} }
// keepalive method, added by Nathan Fritz /**
* keepalive method, added by Nathan Fritz
*/
function handler_iq_($packet) function handler_iq_($packet)
{ {
if ($this->keep_alive_id == $this->get_info_from_iq_id($packet)) if ($this->keep_alive_id == $this->get_info_from_iq_id($packet))
@ -818,7 +945,9 @@ class jabber
// Generic handlers // Generic handlers
// ====================================================================== // ======================================================================
// Generic handler for unsupported requests /**
* Generic handler for unsupported requests
*/
function handler_not_implemented($packet) function handler_not_implemented($packet)
{ {
$packet_type = $this->_get_packet_type($packet); $packet_type = $this->_get_packet_type($packet);
@ -831,8 +960,10 @@ class jabber
// Third party code // Third party code
// m@d pr0ps to the coders ;) // m@d pr0ps to the coders ;)
// xmlize() /**
// (c) Hans Anderson / http://www.hansanderson.com/php/xml/ * xmlize()
* (c) Hans Anderson / http://www.hansanderson.com/php/xml/
*/
function xmlize($data) function xmlize($data)
{ {
$vals = $index = $array = array(); $vals = $index = $array = array();
@ -851,8 +982,10 @@ class jabber
return $array; return $array;
} }
// _xml_depth() /**
// (c) Hans Anderson / http://www.hansanderson.com/php/xml/ * _xml_depth()
* (c) Hans Anderson / http://www.hansanderson.com/php/xml/
*/
function _xml_depth($vals, &$i) function _xml_depth($vals, &$i)
{ {
$children = array(); $children = array();
@ -868,7 +1001,7 @@ class jabber
{ {
case 'cdata': case 'cdata':
array_push($children, trim($vals[$i]['value'])); array_push($children, trim($vals[$i]['value']));
break; break;
case 'complete': case 'complete':
$tagname = $vals[$i]['tag']; $tagname = $vals[$i]['tag'];
@ -878,7 +1011,7 @@ class jabber
{ {
$children[$tagname][$size]['@'] = $vals[$i]['attributes']; $children[$tagname][$size]['@'] = $vals[$i]['attributes'];
} }
break; break;
case 'open': case 'open':
$tagname = $vals[$i]['tag']; $tagname = $vals[$i]['tag'];
@ -892,19 +1025,21 @@ class jabber
{ {
$children[$tagname][$size]['#'] = $this->_xml_depth($vals, $i); $children[$tagname][$size]['#'] = $this->_xml_depth($vals, $i);
} }
break; break;
case 'close': case 'close':
return $children; return $children;
break; break;
} }
} }
return $children; return $children;
} }
// traverse_xmlize() /**
// (c) acebone@f2s.com, a HUGE help! * traverse_xmlize()
* (c) acebone@f2s.com, a HUGE help!
*/
function traverse_xmlize($array, $arr_name = 'array', $level = 0) function traverse_xmlize($array, $arr_name = 'array', $level = 0)
{ {
if ($level == 0) if ($level == 0)
@ -935,7 +1070,6 @@ class jabber
* @package phpBB3 * @package phpBB3
* make_xml * make_xml
* Currently not in use * Currently not in use
*/
class make_xml extends jabber class make_xml extends jabber
{ {
var $nodes; var $nodes;
@ -1036,6 +1170,7 @@ class make_xml extends jabber
return (is_array($newarray)) ? $newarray : false; return (is_array($newarray)) ? $newarray : false;
} }
} }
*/
/** /**
* @package phpBB3 * @package phpBB3
@ -1045,6 +1180,9 @@ class cjp_standard_connector
{ {
var $active_socket; var $active_socket;
/**
* Open socket
*/
function open_socket($server, $port) function open_socket($server, $port)
{ {
if ($this->active_socket = @fsockopen($server, $port, $err, $err2, 5)) if ($this->active_socket = @fsockopen($server, $port, $err, $err2, 5))
@ -1060,19 +1198,30 @@ class cjp_standard_connector
} }
} }
/**
* Close socket
*/
function close_socket() function close_socket()
{ {
return @fclose($this->active_socket); return @fclose($this->active_socket);
} }
/**
* Write to socket
*/
function write_to_socket($data) function write_to_socket($data)
{ {
return @fwrite($this->active_socket, $data); return @fwrite($this->active_socket, $data);
} }
/**
* Read from socket
*/
function read_from_socket($chunksize) function read_from_socket($chunksize)
{ {
$buffer = stripslashes(@fread($this->active_socket, $chunksize)); $buffer = @fread($this->active_socket, $chunksize);
//$buffer = (STRIP) ? stripslashes($buffer) : $buffer;
//@set_magic_quotes_runtime(get_magic_quotes_gpc()); //@set_magic_quotes_runtime(get_magic_quotes_gpc());
return $buffer; return $buffer;

View file

@ -21,6 +21,9 @@ class messenger
var $use_queue = true; var $use_queue = true;
var $tpl_msg = array(); var $tpl_msg = array();
/**
* Constructor
*/
function messenger($use_queue = true) function messenger($use_queue = true)
{ {
global $config; global $config;
@ -36,7 +39,9 @@ class messenger
$this->subject = ''; $this->subject = '';
} }
// Resets all the data (address, template file, etc etc) to default /**
* Resets all the data (address, template file, etc etc) to default
*/
function reset() function reset()
{ {
$this->addresses = array(); $this->addresses = array();
@ -44,7 +49,9 @@ class messenger
$this->mail_priority = MAIL_NORMAL_PRIORITY; $this->mail_priority = MAIL_NORMAL_PRIORITY;
} }
// Sets an email address to send to /**
* Sets an email address to send to
*/
function to($address, $realname = '') function to($address, $realname = '')
{ {
$pos = isset($this->addresses['to']) ? sizeof($this->addresses['to']) : 0; $pos = isset($this->addresses['to']) ? sizeof($this->addresses['to']) : 0;
@ -52,6 +59,9 @@ class messenger
$this->addresses['to'][$pos]['name'] = trim($realname); $this->addresses['to'][$pos]['name'] = trim($realname);
} }
/**
* Sets an cc address to send to
*/
function cc($address, $realname = '') function cc($address, $realname = '')
{ {
$pos = isset($this->addresses['cc']) ? sizeof($this->addresses['cc']) : 0; $pos = isset($this->addresses['cc']) ? sizeof($this->addresses['cc']) : 0;
@ -59,6 +69,9 @@ class messenger
$this->addresses['cc'][$pos]['name'] = trim($realname); $this->addresses['cc'][$pos]['name'] = trim($realname);
} }
/**
* Sets an bcc address to send to
*/
function bcc($address, $realname = '') function bcc($address, $realname = '')
{ {
$pos = isset($this->addresses['bcc']) ? sizeof($this->addresses['bcc']) : 0; $pos = isset($this->addresses['bcc']) ? sizeof($this->addresses['bcc']) : 0;
@ -66,6 +79,9 @@ class messenger
$this->addresses['bcc'][$pos]['name'] = trim($realname); $this->addresses['bcc'][$pos]['name'] = trim($realname);
} }
/**
* Sets a im contact to send to
*/
function im($address, $realname = '') function im($address, $realname = '')
{ {
$pos = isset($this->addresses['im']) ? sizeof($this->addresses['im']) : 0; $pos = isset($this->addresses['im']) ? sizeof($this->addresses['im']) : 0;
@ -73,33 +89,49 @@ class messenger
$this->addresses['im'][$pos]['name'] = trim($realname); $this->addresses['im'][$pos]['name'] = trim($realname);
} }
/**
* Set the reply to address
*/
function replyto($address) function replyto($address)
{ {
$this->replyto = trim($address); $this->replyto = trim($address);
} }
/**
* Set the from address
*/
function from($address) function from($address)
{ {
$this->from = trim($address); $this->from = trim($address);
} }
// set up subject for mail /**
* set up subject for mail
*/
function subject($subject = '') function subject($subject = '')
{ {
$this->subject = trim($subject); $this->subject = trim($subject);
} }
// set up extra mail headers /**
* set up extra mail headers
*/
function headers($headers) function headers($headers)
{ {
$this->extra_headers .= trim($headers) . "\n"; $this->extra_headers .= trim($headers) . "\n";
} }
/**
* Set the email priority
*/
function set_mail_priority($priority = MAIL_NORMAL_PRIORITY) function set_mail_priority($priority = MAIL_NORMAL_PRIORITY)
{ {
$this->mail_priority = $priority; $this->mail_priority = $priority;
} }
/**
* Set email template to use
*/
function template($template_file, $template_lang = '') function template($template_file, $template_lang = '')
{ {
global $config, $phpbb_root_path; global $config, $phpbb_root_path;
@ -111,7 +143,7 @@ class messenger
if (!trim($template_lang)) if (!trim($template_lang))
{ {
$template_lang = $config['default_lang']; $template_lang = basename($config['default_lang']);
} }
if (empty($this->tpl_msg[$template_lang . $template_file])) if (empty($this->tpl_msg[$template_lang . $template_file]))
@ -142,13 +174,17 @@ class messenger
return true; return true;
} }
// assign variables /**
* assign variables to email template
*/
function assign_vars($vars) function assign_vars($vars)
{ {
$this->vars = (empty($this->vars)) ? $vars : $this->vars + $vars; $this->vars = (empty($this->vars)) ? $vars : $this->vars + $vars;
} }
// Send the mail out to the recipients set previously in var $this->address /**
* Send the mail out to the recipients set previously in var $this->addresses
*/
function send($method = NOTIFY_EMAIL, $break = false) function send($method = NOTIFY_EMAIL, $break = false)
{ {
global $config, $user; global $config, $user;
@ -214,7 +250,7 @@ class messenger
case NOTIFY_IM: case NOTIFY_IM:
$result = $this->msg_jabber(); $result = $this->msg_jabber();
break; break;
case NOTIFY_BOTH: case NOTIFY_BOTH:
$result = $this->msg_email(); $result = $this->msg_email();
$this->msg_jabber(); $this->msg_jabber();
@ -225,6 +261,9 @@ class messenger
return $result; return $result;
} }
/**
* Add error message to log
*/
function error($type, $msg) function error($type, $msg)
{ {
global $user, $phpEx, $phpbb_root_path; global $user, $phpEx, $phpbb_root_path;
@ -235,9 +274,9 @@ class messenger
add_log('critical', 'LOG_ERROR_' . $type, $msg); add_log('critical', 'LOG_ERROR_' . $type, $msg);
} }
// /**
// Messenger methods * Save to queue
// */
function save_queue() function save_queue()
{ {
global $config; global $config;
@ -248,6 +287,9 @@ class messenger
} }
} }
/**
* Send out emails
*/
function msg_email() function msg_email()
{ {
global $config, $user; global $config, $user;
@ -343,6 +385,9 @@ class messenger
return true; return true;
} }
/**
* Send jabber message out
*/
function msg_jabber() function msg_jabber()
{ {
global $config, $db, $user, $phpbb_root_path, $phpEx; global $config, $db, $user, $phpbb_root_path, $phpEx;
@ -406,8 +451,8 @@ class messenger
{ {
$this->queue->put('jabber', array( $this->queue->put('jabber', array(
'addresses' => $addresses, 'addresses' => $addresses,
'subject' => htmlentities($this->subject), 'subject' => $this->subject,
'msg' => htmlentities($this->msg)) 'msg' => $this->msg)
); );
} }
unset($addresses); unset($addresses);
@ -417,8 +462,7 @@ class messenger
/** /**
* @package phpBB3 * @package phpBB3
* Queue * handling email and jabber queue
* At the moment it is only handling the email queue
*/ */
class queue class queue
{ {
@ -427,6 +471,9 @@ class queue
var $package_size = 0; var $package_size = 0;
var $cache_file = ''; var $cache_file = '';
/**
* constructor
*/
function queue() function queue()
{ {
global $phpEx, $phpbb_root_path; global $phpEx, $phpbb_root_path;
@ -434,7 +481,10 @@ class queue
$this->data = array(); $this->data = array();
$this->cache_file = "{$phpbb_root_path}cache/queue.$phpEx"; $this->cache_file = "{$phpbb_root_path}cache/queue.$phpEx";
} }
/**
* Init a queue object
*/
function init($object, $package_size) function init($object, $package_size)
{ {
$this->data[$object] = array(); $this->data[$object] = array();
@ -442,12 +492,18 @@ class queue
$this->data[$object]['data'] = array(); $this->data[$object]['data'] = array();
} }
/**
* Put object in queue
*/
function put($object, $scope) function put($object, $scope)
{ {
$this->data[$object]['data'][] = $scope; $this->data[$object]['data'][] = $scope;
} }
// Using lock file... /**
* Process queue
* Using lock file
*/
function process() function process()
{ {
global $db, $config, $phpEx, $phpbb_root_path; global $db, $config, $phpEx, $phpbb_root_path;
@ -599,6 +655,9 @@ class queue
@unlink($this->cache_file . '.lock'); @unlink($this->cache_file . '.lock');
} }
/**
* Save queue
*/
function save() function save()
{ {
if (!sizeof($this->data)) if (!sizeof($this->data))
@ -634,6 +693,10 @@ class queue
} }
} }
/**
* Format array
* @private
*/
function format_array($array) function format_array($array)
{ {
$lines = array(); $lines = array();
@ -703,13 +766,13 @@ function smtpmail($addresses, $subject, $message, &$err_msg, $encoding, $headers
if (trim($subject) == '') if (trim($subject) == '')
{ {
$err_msg = 'No email Subject specified'; $err_msg = (isset($user->lang['NO_EMAIL_SUBJECT'])) ? $user->lang['NO_EMAIL_SUBJECT'] : 'No email subject specified';
return false; return false;
} }
if (trim($message) == '') if (trim($message) == '')
{ {
$err_msg = 'Email message was blank'; $err_msg = (isset($user->lang['NO_EMAIL_MESSAGE'])) ? $user->lang['NO_EMAIL_MESSAGE'] : 'Email message was blank';
return false; return false;
} }
@ -741,11 +804,10 @@ function smtpmail($addresses, $subject, $message, &$err_msg, $encoding, $headers
$smtp = new smtp_class; $smtp = new smtp_class;
// Ok we have error checked as much as we can to this point let's get on // Ok we have error checked as much as we can to this point let's get on it already.
// it already.
if (!$smtp->socket = fsockopen($config['smtp_host'], $config['smtp_port'], $errno, $errstr, 20)) if (!$smtp->socket = fsockopen($config['smtp_host'], $config['smtp_port'], $errno, $errstr, 20))
{ {
$err_msg = "Could not connect to smtp host : $errno : $errstr"; $err_msg = (isset($user->lang['NO_CONNECT_TO_SMTP_HOST'])) ? sprintf($user->lang['NO_CONNECT_TO_SMTP_HOST'], $errno, $errstr) : "Could not connect to smtp host : $errno : $errstr";
return false; return false;
} }
@ -807,7 +869,8 @@ function smtpmail($addresses, $subject, $message, &$err_msg, $encoding, $headers
if (!$rcpt) if (!$rcpt)
{ {
$user->session_begin(); $user->session_begin();
$err_msg .= '<br /><br />' . sprintf($user->lang['INVALID_EMAIL_LOG'], htmlspecialchars($mail_to_address)); $err_msg .= '<br /><br />';
$err_msg .= (isset($user->lang['INVALID_EMAIL_LOG'])) ? sprintf($user->lang['INVALID_EMAIL_LOG'], htmlspecialchars($mail_to_address)) : '<strong>' . htmlspecialchars($mail_to_address) . '</strong> possibly an invalid email address?';
$smtp->close_session(); $smtp->close_session();
return false; return false;
} }
@ -870,7 +933,9 @@ class smtp_class
var $commands = array(); var $commands = array();
var $numeric_response_code = 0; var $numeric_response_code = 0;
// Send command to smtp server /**
* Send command to smtp server
*/
function server_send($command) function server_send($command)
{ {
fputs($this->socket, $command . "\r\n"); fputs($this->socket, $command . "\r\n");
@ -878,9 +943,13 @@ class smtp_class
// We could put additional code here // We could put additional code here
} }
// We use the line to give the support people an indication at which command the error occurred /**
* We use the line to give the support people an indication at which command the error occurred
*/
function server_parse($response, $line) function server_parse($response, $line)
{ {
global $user;
$this->server_response = ''; $this->server_response = '';
$this->responses = array(); $this->responses = array();
$this->numeric_response_code = 0; $this->numeric_response_code = 0;
@ -889,7 +958,7 @@ class smtp_class
{ {
if (!($this->server_response = fgets($this->socket, 256))) if (!($this->server_response = fgets($this->socket, 256)))
{ {
return 'Could not get mail server response codes'; return (isset($user->lang['NO_EMAIL_RESPONSE_CODE'])) ? $user->lang['NO_EMAIL_RESPONSE_CODE'] : 'Could not get mail server response codes';
} }
$this->responses[] = substr(rtrim($this->server_response), 4); $this->responses[] = substr(rtrim($this->server_response), 4);
$this->numeric_response_code = (int) substr($this->server_response, 0, 3); $this->numeric_response_code = (int) substr($this->server_response, 0, 3);
@ -898,18 +967,23 @@ class smtp_class
if (!(substr($this->server_response, 0, 3) == $response)) if (!(substr($this->server_response, 0, 3) == $response))
{ {
$this->numeric_response_code = (int) substr($this->server_response, 0, 3); $this->numeric_response_code = (int) substr($this->server_response, 0, 3);
return "Ran into problems sending Mail at <b>Line $line</b>. Response: $this->server_response"; return (isset($user->lang['EMAIL_SMTP_ERROR_RESPONSE'])) ? sprintf($user->lang['EMAIL_SMTP_ERROR_RESPONSE'], $line, $this->server_response) : "Ran into problems sending Mail at <strong>Line $line</strong>. Response: $this->server_response";
} }
return 0; return 0;
} }
/**
* Close session
*/
function close_session() function close_session()
{ {
fclose($this->socket); fclose($this->socket);
} }
// Log into server and get possible auth codes if neccessary /**
* Log into server and get possible auth codes if neccessary
*/
function log_into_server($hostname, $username, $password, $default_auth_method) function log_into_server($hostname, $username, $password, $default_auth_method)
{ {
global $user; global $user;
@ -960,7 +1034,7 @@ class smtp_class
if (!isset($this->commands['AUTH'])) if (!isset($this->commands['AUTH']))
{ {
return 'SMTP server does not support authentication'; return (isset($user->lang['SMTP_NO_AUTH_SUPPORT'])) ? $user->lang['SMTP_NO_AUTH_SUPPORT'] : 'SMTP server does not support authentication';
} }
// Get best authentication method // Get best authentication method
@ -988,23 +1062,28 @@ class smtp_class
if (!$method) if (!$method)
{ {
return 'No supported authentication methods'; return (isset($user->lang['NO_SUPPORTED_AUTH_METHODS'])) ? $user->lang['NO_SUPPORTED_AUTH_METHODS'] : 'No supported authentication methods';
} }
$method = strtolower(str_replace('-', '_', $method)); $method = strtolower(str_replace('-', '_', $method));
return $this->$method($username, $password); return $this->$method($username, $password);
} }
/**
* Pop before smtp authentication
*/
function pop_before_smtp($hostname, $username, $password) function pop_before_smtp($hostname, $username, $password)
{ {
global $user;
$old_socket = $this->socket; $old_socket = $this->socket;
if (!$this->socket = fsockopen($hostname, 110, $errno, $errstr, 20)) if (!$this->socket = fsockopen($hostname, 110, $errno, $errstr, 20))
{ {
$this->socket = $old_socket; $this->socket = $old_socket;
return "Could not connect to smtp host : $errno : $errstr"; return (isset($user->lang['NO_CONNECT_TO_SMTP_HOST'])) ? sprintf($user->lang['NO_CONNECT_TO_SMTP_HOST'], $errno, $errstr) : "Could not connect to smtp host : $errno : $errstr";
} }
$this->server_parse('0', __LINE__); $this->server_parse('0', __LINE__);
if (substr($this->server_response, 0, 3) == '+OK') if (substr($this->server_response, 0, 3) == '+OK')
{ {
@ -1025,7 +1104,10 @@ class smtp_class
return false; return false;
} }
/**
* Plain authentication method
*/
function plain($username, $password) function plain($username, $password)
{ {
$this->server_send('AUTH PLAIN'); $this->server_send('AUTH PLAIN');
@ -1044,6 +1126,9 @@ class smtp_class
return false; return false;
} }
/**
* Login authentication method
*/
function login($username, $password) function login($username, $password)
{ {
$this->server_send('AUTH LOGIN'); $this->server_send('AUTH LOGIN');
@ -1067,7 +1152,9 @@ class smtp_class
return false; return false;
} }
// The last two authentication mechanisms are a little bit tricky... /**
* cram_md5 authentication method
*/
function cram_md5($username, $password) function cram_md5($username, $password)
{ {
$this->server_send('AUTH CRAM-MD5'); $this->server_send('AUTH CRAM-MD5');
@ -1091,10 +1178,13 @@ class smtp_class
return false; return false;
} }
// A real pain in the *** /**
* digest_md5 authentication method
* A real pain in the ***
*/
function digest_md5($username, $password) function digest_md5($username, $password)
{ {
global $config; global $config, $user;
$this->server_send('AUTH DIGEST-MD5'); $this->server_send('AUTH DIGEST-MD5');
if ($err_msg = $this->server_parse('334', __LINE__)) if ($err_msg = $this->server_parse('334', __LINE__))
@ -1179,9 +1269,9 @@ class smtp_class
} }
else else
{ {
return 'Invalid digest challenge'; return (isset($user->lang['INVALID_DIGEST_CHALLENGE'])) ? $user->lang['INVALID_DIGEST_CHALLENGE'] : 'Invalid digest challenge';
} }
$base64_method_digest_md5 = base64_encode($input_string); $base64_method_digest_md5 = base64_encode($input_string);
$this->server_send($base64_method_digest_md5); $this->server_send($base64_method_digest_md5);
if ($err_msg = $this->server_parse('334', __LINE__)) if ($err_msg = $this->server_parse('334', __LINE__))
@ -1194,7 +1284,7 @@ class smtp_class
{ {
return $err_msg; return $err_msg;
} }
return false; return false;
} }
} }

View file

@ -14,23 +14,15 @@
*/ */
class p_master class p_master
{ {
/**#@+
* @access private
*/
var $p_id; var $p_id;
var $p_class; var $p_class;
var $p_name; var $p_name;
var $p_mode; var $p_mode;
var $p_parent; var $p_parent;
var $acl_forup_id = false; var $acl_forum_id = false;
/**#@-*/
/**#@+
* This array holds information on the list of modules
*/
var $module_ary = array(); var $module_ary = array();
/**#@-*/
/** /**
* List modules * List modules
@ -40,8 +32,6 @@ class p_master
* $this->module_y_ary is created with indentation information for * $this->module_y_ary is created with indentation information for
* displaying the module list appropriately. Only modules for which * displaying the module list appropriately. Only modules for which
* the user has access rights are included in these lists. * the user has access rights are included in these lists.
*
* @final
*/ */
function list_modules($p_class) function list_modules($p_class)
{ {
@ -238,7 +228,7 @@ class p_master
} }
$is_auth = false; $is_auth = false;
eval('$is_auth = (int) (' . preg_replace(array('#acl_([a-z_]+)(,\$id)?#', '#\$id#', '#aclf_([a-z_]+)#', '#cfg_([a-z_]+)#'), array('(int) $auth->acl_get("\\1"\\2)', '(int) $this->acl_forup_id', '(int) $auth->acl_getf_global("\\1")', '(int) $config["\\1"]'), $module_auth) . ');'); eval('$is_auth = (int) (' . preg_replace(array('#acl_([a-z_]+)(,\$id)?#', '#\$id#', '#aclf_([a-z_]+)#', '#cfg_([a-z_]+)#'), array('(int) $auth->acl_get("\\1"\\2)', '(int) $this->acl_forum_id', '(int) $auth->acl_getf_global("\\1")', '(int) $config["\\1"]'), $module_auth) . ');');
return $is_auth; return $is_auth;
} }
@ -300,12 +290,10 @@ class p_master
* Loads currently active module * Loads currently active module
* *
* This method loads a given module, passing it the relevant id and mode. * This method loads a given module, passing it the relevant id and mode.
*
* @final
*/ */
function load_active($mode = false, $module_url = false, $execute_module = true) function load_active($mode = false, $module_url = false, $execute_module = true)
{ {
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $SID, $user; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $user;
$module_path = $phpbb_root_path . 'includes/' . $this->p_class; $module_path = $phpbb_root_path . 'includes/' . $this->p_class;
$icat = request_var('icat', ''); $icat = request_var('icat', '');
@ -339,7 +327,7 @@ class p_master
if (defined('IN_ADMIN')) if (defined('IN_ADMIN'))
{ {
// Not being able to overwrite ;) // Not being able to overwrite ;)
$this->module->u_action = "{$phpbb_admin_path}index.$phpEx$SID" . (($icat) ? '&amp;icat=' . $icat : '') . "&amp;i={$this->p_id}&amp;mode={$this->p_mode}"; $this->module->u_action = append_sid("{$phpbb_admin_path}index.$phpEx", "i={$this->p_id}") . (($icat) ? '&amp;icat=' . $icat : '') . "&amp;mode={$this->p_mode}";
} }
else else
{ {
@ -350,10 +338,10 @@ class p_master
} }
else else
{ {
$this->module->u_action = "{$user->page['script_path']}/{$user->page['page_name']}"; $this->module->u_action = $phpbb_root_path . (($user->page['page_dir']) ? $user->page['page_dir'] . '/' : '') . $user->page['page_name'];
} }
$this->module->u_action .= $SID . (($icat) ? '&amp;icat=' . $icat : '') . "&amp;i={$this->p_id}&amp;mode={$this->p_mode}"; $this->module->u_action = append_sid($this->module->u_action, "i={$this->p_id}") . (($icat) ? '&amp;icat=' . $icat : '') . "&amp;mode={$this->p_mode}";
} }
// Assign the module path for re-usage // Assign the module path for re-usage
@ -414,7 +402,7 @@ class p_master
} }
break; break;
} }
return $branch; return $branch;
} }
@ -434,7 +422,7 @@ class p_master
{ {
// Go through the tree to find our branch // Go through the tree to find our branch
$parent_tree = $parents[$row['module_id']]; $parent_tree = $parents[$row['module_id']];
foreach ($parent_tree as $id => $value) foreach ($parent_tree as $id => $value)
{ {
if (!isset($branch[$id]) && isset($branch['child'])) if (!isset($branch[$id]) && isset($branch['child']))
@ -452,7 +440,7 @@ class p_master
$branch[$row['module_id']]['child'] = array(); $branch[$row['module_id']]['child'] = array();
} }
} }
return $tree; return $tree;
} }

View file

@ -13,7 +13,7 @@
*/ */
function generate_smilies($mode, $forum_id) function generate_smilies($mode, $forum_id)
{ {
global $SID, $auth, $db, $user, $config, $template; global $auth, $db, $user, $config, $template;
global $phpEx, $phpbb_root_path; global $phpEx, $phpbb_root_path;
if ($mode == 'window') if ($mode == 'window')
@ -85,7 +85,7 @@ function generate_smilies($mode, $forum_id)
{ {
$template->assign_vars(array( $template->assign_vars(array(
'S_SHOW_SMILEY_LINK' => true, 'S_SHOW_SMILEY_LINK' => true,
'U_MORE_SMILIES' => $phpbb_root_path . "posting.$phpEx$SID&amp;mode=smilies&amp;f=$forum_id") 'U_MORE_SMILIES' => append_sid("{$phpbb_root_path}posting.$phpEx", 'mode=smilies&amp;f=' . $forum_id))
); );
} }
@ -197,7 +197,7 @@ function posting_gen_topic_icons($mode, $icon_id)
{ {
$template->assign_var('S_NO_ICON_CHECKED', ' checked="checked"'); $template->assign_var('S_NO_ICON_CHECKED', ' checked="checked"');
} }
if (sizeof($icons)) if (sizeof($icons))
{ {
foreach ($icons as $id => $data) foreach ($icons as $id => $data)
@ -208,7 +208,7 @@ function posting_gen_topic_icons($mode, $icon_id)
'ICON_ID' => $id, 'ICON_ID' => $id,
'ICON_IMG' => $phpbb_root_path . $config['icons_path'] . '/' . $data['img'], 'ICON_IMG' => $phpbb_root_path . $config['icons_path'] . '/' . $data['img'],
'ICON_WIDTH' => $data['width'], 'ICON_WIDTH' => $data['width'],
'ICON_HEIGHT' => $data['height'], 'ICON_HEIGHT' => $data['height'],
'S_CHECKED' => ($id == $icon_id) ? true : false, 'S_CHECKED' => ($id == $icon_id) ? true : false,
'S_ICON_CHECKED' => ($id == $icon_id) ? ' checked="checked"' : '') 'S_ICON_CHECKED' => ($id == $icon_id) ? ' checked="checked"' : '')
@ -236,9 +236,9 @@ function posting_gen_topic_types($forum_id, $cur_topic_type = POST_NORMAL)
'announce' => array('const' => POST_ANNOUNCE, 'lang' => 'POST_ANNOUNCEMENT'), 'announce' => array('const' => POST_ANNOUNCE, 'lang' => 'POST_ANNOUNCEMENT'),
'global' => array('const' => POST_GLOBAL, 'lang' => 'POST_GLOBAL') 'global' => array('const' => POST_GLOBAL, 'lang' => 'POST_GLOBAL')
); );
$topic_type_array = array(); $topic_type_array = array();
foreach ($topic_types as $auth_key => $topic_value) foreach ($topic_types as $auth_key => $topic_value)
{ {
// We do not have a special post global announcement permission // We do not have a special post global announcement permission
@ -262,7 +262,7 @@ function posting_gen_topic_types($forum_id, $cur_topic_type = POST_NORMAL)
'VALUE' => POST_NORMAL, 'VALUE' => POST_NORMAL,
'S_CHECKED' => ($topic_type == POST_NORMAL) ? ' checked="checked"' : '', 'S_CHECKED' => ($topic_type == POST_NORMAL) ? ' checked="checked"' : '',
'L_TOPIC_TYPE' => $user->lang['POST_NORMAL'])), 'L_TOPIC_TYPE' => $user->lang['POST_NORMAL'])),
$topic_type_array $topic_type_array
); );
@ -291,15 +291,15 @@ function posting_gen_topic_types($forum_id, $cur_topic_type = POST_NORMAL)
function upload_attachment($form_name, $forum_id, $local = false, $local_storage = '', $is_message = false) function upload_attachment($form_name, $forum_id, $local = false, $local_storage = '', $is_message = false)
{ {
global $auth, $user, $config, $db, $cache; global $auth, $user, $config, $db, $cache;
global $phpbb_root_path; global $phpbb_root_path, $phpEx;
$filedata = array( $filedata = array(
'error' => array() 'error' => array()
); );
include_once($phpbb_root_path . 'includes/functions_upload.php'); include_once($phpbb_root_path . 'includes/functions_upload.' . $phpEx);
$upload = new fileupload(); $upload = new fileupload();
if (!$local) if (!$local)
{ {
$filedata['post_attach'] = ($upload->is_valid($form_name)) ? true : false; $filedata['post_attach'] = ($upload->is_valid($form_name)) ? true : false;
@ -344,10 +344,10 @@ function upload_attachment($form_name, $forum_id, $local = false, $local_storage
$allowed_filesize = ($extensions[$file->get('extension')]['max_filesize'] != 0) ? $extensions[$file->get('extension')]['max_filesize'] : (($is_message) ? $config['max_filesize_pm'] : $config['max_filesize']); $allowed_filesize = ($extensions[$file->get('extension')]['max_filesize'] != 0) ? $extensions[$file->get('extension')]['max_filesize'] : (($is_message) ? $config['max_filesize_pm'] : $config['max_filesize']);
$file->upload->set_max_filesize($allowed_filesize); $file->upload->set_max_filesize($allowed_filesize);
} }
$file->clean_filename('unique', $user->data['user_id'] . '_'); $file->clean_filename('unique', $user->data['user_id'] . '_');
$file->move_file($config['upload_path']); $file->move_file($config['upload_path']);
if (sizeof($file->error)) if (sizeof($file->error))
{ {
$file->remove(); $file->remove();
@ -387,7 +387,7 @@ function upload_attachment($form_name, $forum_id, $local = false, $local_storage
$filedata['post_attach'] = false; $filedata['post_attach'] = false;
$file->remove(); $file->remove();
return $filedata; return $filedata;
} }
} }
@ -421,8 +421,8 @@ function get_img_size_format($width, $height)
round($width * ($max_width / $width)), round($width * ($max_width / $width)),
round($height * ($max_width / $width)) round($height * ($max_width / $width))
); );
} }
else else
{ {
return array( return array(
round($width * ($max_width / $height)), round($width * ($max_width / $height)),
@ -456,11 +456,11 @@ function get_supported_image_types($type = false)
case 12: case 12:
$new_type = ($format & IMG_JPG) ? IMG_JPG : 0; $new_type = ($format & IMG_JPG) ? IMG_JPG : 0;
break; break;
case 3: case 3:
$new_type = ($format & IMG_PNG) ? IMG_PNG : 0; $new_type = ($format & IMG_PNG) ? IMG_PNG : 0;
break; break;
case 6: case 6:
case 15: case 15:
$new_type = ($format & IMG_WBMP) ? IMG_WBMP : 0; $new_type = ($format & IMG_WBMP) ? IMG_WBMP : 0;
@ -480,7 +480,7 @@ function get_supported_image_types($type = false)
} }
} }
} }
return array( return array(
'gd' => ($new_type) ? true : false, 'gd' => ($new_type) ? true : false,
'format' => $new_type, 'format' => $new_type,
@ -541,11 +541,11 @@ function create_thumbnail($source, $destination, $mimetype)
case IMG_JPG: case IMG_JPG:
$image = imagecreatefromjpeg($source); $image = imagecreatefromjpeg($source);
break; break;
case IMG_PNG: case IMG_PNG:
$image = imagecreatefrompng($source); $image = imagecreatefrompng($source);
break; break;
case IMG_WBMP: case IMG_WBMP:
$image = imagecreatefromwbmp($source); $image = imagecreatefromwbmp($source);
break; break;
@ -561,21 +561,21 @@ function create_thumbnail($source, $destination, $mimetype)
$new_image = imagecreatetruecolor($new_width, $new_height); $new_image = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
} }
switch ($type['format']) switch ($type['format'])
{ {
case IMG_GIF: case IMG_GIF:
imagegif($new_image, $destination); imagegif($new_image, $destination);
break; break;
case IMG_JPG: case IMG_JPG:
imagejpeg($new_image, $destination, 90); imagejpeg($new_image, $destination, 90);
break; break;
case IMG_PNG: case IMG_PNG:
imagepng($new_image, $destination); imagepng($new_image, $destination);
break; break;
case IMG_WBMP: case IMG_WBMP:
imagewbmp($new_image, $destination); imagewbmp($new_image, $destination);
break; break;
@ -605,7 +605,7 @@ function posting_gen_inline_attachments(&$attachment_data)
if (sizeof($attachment_data)) if (sizeof($attachment_data))
{ {
$s_inline_attachment_options = ''; $s_inline_attachment_options = '';
foreach ($attachment_data as $i => $attachment) foreach ($attachment_data as $i => $attachment)
{ {
$s_inline_attachment_options .= '<option value="' . $i . '">' . $attachment['real_filename'] . '</option>'; $s_inline_attachment_options .= '<option value="' . $i . '">' . $attachment['real_filename'] . '</option>';
@ -624,8 +624,8 @@ function posting_gen_inline_attachments(&$attachment_data)
*/ */
function posting_gen_attachment_entry(&$attachment_data, &$filename_data) function posting_gen_attachment_entry(&$attachment_data, &$filename_data)
{ {
global $template, $config, $phpbb_root_path, $SID, $phpEx; global $template, $config, $phpbb_root_path, $phpEx;
$template->assign_vars(array( $template->assign_vars(array(
'S_SHOW_ATTACH_BOX' => true) 'S_SHOW_ATTACH_BOX' => true)
); );
@ -635,20 +635,20 @@ function posting_gen_attachment_entry(&$attachment_data, &$filename_data)
$template->assign_vars(array( $template->assign_vars(array(
'S_HAS_ATTACHMENTS' => true) 'S_HAS_ATTACHMENTS' => true)
); );
$count = 0; $count = 0;
foreach ($attachment_data as $attach_row) foreach ($attachment_data as $attach_row)
{ {
$hidden = ''; $hidden = '';
$attach_row['real_filename'] = stripslashes(basename($attach_row['real_filename'])); $attach_row['real_filename'] = basename($attach_row['real_filename']);
foreach ($attach_row as $key => $value) foreach ($attach_row as $key => $value)
{ {
$hidden .= '<input type="hidden" name="attachment_data[' . $count . '][' . $key . ']" value="' . $value . '" />'; $hidden .= '<input type="hidden" name="attachment_data[' . $count . '][' . $key . ']" value="' . $value . '" />';
} }
$download_link = (!$attach_row['attach_id']) ? $phpbb_root_path . $config['upload_path'] . '/' . basename($attach_row['physical_filename']) : $phpbb_root_path . "download.$phpEx$SID&id=" . intval($attach_row['attach_id']); $download_link = (!$attach_row['attach_id']) ? $phpbb_root_path . $config['upload_path'] . '/' . basename($attach_row['physical_filename']) : append_sid("{$phpbb_root_path}download.$phpEx", 'id=' . (int) $attach_row['attach_id']);
$template->assign_block_vars('attach_row', array( $template->assign_block_vars('attach_row', array(
'FILENAME' => basename($attach_row['real_filename']), 'FILENAME' => basename($attach_row['real_filename']),
'ATTACH_FILENAME' => basename($attach_row['physical_filename']), 'ATTACH_FILENAME' => basename($attach_row['physical_filename']),
@ -682,7 +682,7 @@ function posting_gen_attachment_entry(&$attachment_data, &$filename_data)
function load_drafts($topic_id = 0, $forum_id = 0, $id = 0) function load_drafts($topic_id = 0, $forum_id = 0, $id = 0)
{ {
global $user, $db, $template, $auth; global $user, $db, $template, $auth;
global $phpbb_root_path, $phpEx, $SID; global $phpbb_root_path, $phpEx;
$topic_ids = $forum_ids = $draft_rows = array(); $topic_ids = $forum_ids = $draft_rows = array();
@ -695,8 +695,8 @@ function load_drafts($topic_id = 0, $forum_id = 0, $id = 0)
else else
{ {
$sql_and = ''; $sql_and = '';
$sql_and .= ($forum_id) ? ' AND d.forum_id = ' . $forum_id : ''; $sql_and .= ($forum_id) ? ' AND d.forum_id = ' . (int) $forum_id : '';
$sql_and .= ($topic_id) ? ' AND d.topic_id = ' . $topic_id : ''; $sql_and .= ($topic_id) ? ' AND d.topic_id = ' . (int) $topic_id : '';
} }
$sql = 'SELECT d.*, f.forum_id, f.forum_name $sql = 'SELECT d.*, f.forum_id, f.forum_name
@ -748,24 +748,24 @@ function load_drafts($topic_id = 0, $forum_id = 0, $id = 0)
if (isset($topic_rows[$draft['topic_id']]) && $auth->acl_get('f_read', $topic_rows[$draft['topic_id']]['forum_id'])) if (isset($topic_rows[$draft['topic_id']]) && $auth->acl_get('f_read', $topic_rows[$draft['topic_id']]['forum_id']))
{ {
$link_topic = true; $link_topic = true;
$view_url = "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f=" . $topic_rows[$draft['topic_id']]['forum_id'] . "&amp;t=" . $draft['topic_id']; $view_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $topic_rows[$draft['topic_id']]['forum_id'] . '&amp;t=' . $draft['topic_id']);
$title = $topic_rows[$draft['topic_id']]['topic_title']; $title = $topic_rows[$draft['topic_id']]['topic_title'];
$insert_url = "{$phpbb_root_path}posting.$phpEx$SID&amp;f=" . $topic_rows[$draft['topic_id']]['forum_id'] . '&amp;t=' . $draft['topic_id'] . '&amp;mode=reply&amp;d=' . $draft['draft_id']; $insert_url = append_sid("{$phpbb_root_path}posting.$phpEx", 'f=' . $topic_rows[$draft['topic_id']]['forum_id'] . '&amp;t=' . $draft['topic_id'] . '&amp;mode=reply&amp;d=' . $draft['draft_id']);
} }
else if ($draft['forum_id'] && $auth->acl_get('f_read', $draft['forum_id'])) else if ($draft['forum_id'] && $auth->acl_get('f_read', $draft['forum_id']))
{ {
$link_forum = true; $link_forum = true;
$view_url = "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=" . $draft['forum_id']; $view_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $draft['forum_id']);
$title = $draft['forum_name']; $title = $draft['forum_name'];
$insert_url = "{$phpbb_root_path}posting.$phpEx$SID&amp;f=" . $draft['forum_id'] . '&amp;mode=post&amp;d=' . $draft['draft_id']; $insert_url = append_sid("{$phpbb_root_path}posting.$phpEx", 'f=' . $draft['forum_id'] . '&amp;mode=post&amp;d=' . $draft['draft_id']);
} }
else else
{ {
// Either display as PM draft if forum_id and topic_id are empty or if access to the forums has been denied afterwards... // Either display as PM draft if forum_id and topic_id are empty or if access to the forums has been denied afterwards...
$link_pm = true; $link_pm = true;
$insert_url = "{$phpbb_root_path}ucp.$phpEx$SID&amp;i=$id&amp;mode=compose&amp;d=" . $draft['draft_id']; $insert_url = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=$id&amp;mode=compose&amp;d={$draft['draft_id']}");
} }
$template->assign_block_vars('draftrow', array( $template->assign_block_vars('draftrow', array(
@ -790,7 +790,7 @@ function load_drafts($topic_id = 0, $forum_id = 0, $id = 0)
function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id = 0, $show_quote_button = true) function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id = 0, $show_quote_button = true)
{ {
global $user, $auth, $db, $template, $bbcode; global $user, $auth, $db, $template, $bbcode;
global $config, $phpbb_root_path, $phpEx, $SID; global $config, $phpbb_root_path, $phpEx;
// Go ahead and pull all data for this topic // Go ahead and pull all data for this topic
$sql = 'SELECT u.username, u.user_id, p.* $sql = 'SELECT u.username, u.user_id, p.*
@ -820,7 +820,7 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
// Instantiate BBCode class // Instantiate BBCode class
if (!isset($bbcode) && $bbcode_bitfield) if (!isset($bbcode) && $bbcode_bitfield)
{ {
include_once($phpbb_root_path . 'includes/bbcode.'.$phpEx); include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx);
$bbcode = new bbcode($bbcode_bitfield); $bbcode = new bbcode($bbcode_bitfield);
} }
@ -857,8 +857,8 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
'MESSAGE' => str_replace("\n", '<br />', $message), 'MESSAGE' => str_replace("\n", '<br />', $message),
'U_POST_ID' => $row['post_id'], 'U_POST_ID' => $row['post_id'],
'U_MINI_POST' => "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;p=" . $row['post_id'] . '#p' . $row['post_id'], 'U_MINI_POST' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'p=' . $row['post_id']) . '#p' . $row['post_id'],
'U_MCP_DETAILS' => ($auth->acl_get('m_info', $forum_id)) ? "{$phpbb_root_path}mcp.$phpEx$SID&amp;i=main&amp;mode=post_details&amp;p=" . $row['post_id'] : '', 'U_MCP_DETAILS' => ($auth->acl_get('m_info', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=main&amp;mode=post_details&amp;p=' . $row['post_id'], true, $user->session_id) : '',
'U_QUOTE' => ($show_quote_button && $auth->acl_get('f_reply', $forum_id)) ? 'javascript:addquote(' . $row['post_id'] . ", '" . addslashes($poster) . "')" : '') 'U_QUOTE' => ($show_quote_button && $auth->acl_get('f_reply', $forum_id)) ? 'javascript:addquote(' . $row['post_id'] . ", '" . addslashes($poster) . "')" : '')
); );
unset($rowset[$i]); unset($rowset[$i]);
@ -937,7 +937,7 @@ function user_notification($mode, $subject, $topic_title, $forum_name, $forum_id
); );
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
// forum notification is sent to those not already receiving topic notifications // forum notification is sent to those not already receiving topic notifications
if ($topic_notification) if ($topic_notification)
{ {
@ -1047,8 +1047,8 @@ function user_notification($mode, $subject, $topic_title, $forum_name, $forum_id
'U_FORUM' => generate_board_url() . "/viewforum.$phpEx?f=$forum_id&e=0", 'U_FORUM' => generate_board_url() . "/viewforum.$phpEx?f=$forum_id&e=0",
'U_TOPIC' => generate_board_url() . "/viewtopic.$phpEx?f=$forum_id&t=$topic_id&e=0", 'U_TOPIC' => generate_board_url() . "/viewtopic.$phpEx?f=$forum_id&t=$topic_id&e=0",
'U_NEWEST_POST' => generate_board_url() . "/viewtopic.$phpEx?f=$forum_id&t=$topic_id&p=$post_id&e=$post_id", 'U_NEWEST_POST' => generate_board_url() . "/viewtopic.$phpEx?f=$forum_id&t=$topic_id&p=$post_id&e=$post_id",
'U_STOP_WATCHING_TOPIC' => generate_board_url() . "/viewtopic.$phpEx?f=$forum_id&t=$topic_id&unwatch=topic", 'U_STOP_WATCHING_TOPIC' => generate_board_url() . "/viewtopic.$phpEx?f=$forum_id&t=$topic_id&unwatch=topic",
'U_STOP_WATCHING_FORUM' => generate_board_url() . "/viewforum.$phpEx?f=$forum_id&unwatch=forum", 'U_STOP_WATCHING_FORUM' => generate_board_url() . "/viewforum.$phpEx?f=$forum_id&unwatch=forum",
)); ));
$messenger->send($addr['method']); $messenger->send($addr['method']);
@ -1061,37 +1061,41 @@ function user_notification($mode, $subject, $topic_title, $forum_name, $forum_id
} }
// Handle the DB updates // Handle the DB updates
$db->sql_transaction(); $db->sql_transaction('begin');
if (!empty($update_notification['topic'])) if (!empty($update_notification['topic']))
{ {
$db->sql_query('UPDATE ' . TOPICS_WATCH_TABLE . " $sql = 'UPDATE ' . TOPICS_WATCH_TABLE . "
SET notify_status = 1 SET notify_status = 1
WHERE topic_id = $topic_id WHERE topic_id = $topic_id
AND user_id IN (" . implode(', ', $update_notification['topic']) . ")"); AND user_id IN (" . implode(', ', $update_notification['topic']) . ")";
$db->sql_query($sql);
} }
if (!empty($update_notification['forum'])) if (!empty($update_notification['forum']))
{ {
$db->sql_query('UPDATE ' . FORUMS_WATCH_TABLE . " $sql = 'UPDATE ' . FORUMS_WATCH_TABLE . "
SET notify_status = 1 SET notify_status = 1
WHERE forum_id = $forum_id WHERE forum_id = $forum_id
AND user_id IN (" . implode(', ', $update_notification['forum']) . ")"); AND user_id IN (" . implode(', ', $update_notification['forum']) . ")";
$db->sql_query($sql);
} }
// Now delete the user_ids not authorized to receive notifications on this topic/forum // Now delete the user_ids not authorized to receive notifications on this topic/forum
if (!empty($delete_ids['topic'])) if (!empty($delete_ids['topic']))
{ {
$db->sql_query('DELETE FROM ' . TOPICS_WATCH_TABLE . " $sql = 'DELETE FROM ' . TOPICS_WATCH_TABLE . "
WHERE topic_id = $topic_id WHERE topic_id = $topic_id
AND user_id IN (" . implode(', ', $delete_ids['topic']) . ")"); AND user_id IN (" . implode(', ', $delete_ids['topic']) . ")";
$db->sql_query($sql);
} }
if (!empty($delete_ids['forum'])) if (!empty($delete_ids['forum']))
{ {
$db->sql_query('DELETE FROM ' . FORUMS_WATCH_TABLE . " $sql = 'DELETE FROM ' . FORUMS_WATCH_TABLE . "
WHERE forum_id = $forum_id WHERE forum_id = $forum_id
AND user_id IN (" . implode(', ', $delete_ids['forum']) . ")"); AND user_id IN (" . implode(', ', $delete_ids['forum']) . ")";
$db->sql_query($sql);
} }
$db->sql_transaction('commit'); $db->sql_transaction('commit');
@ -1107,7 +1111,7 @@ function user_notification($mode, $subject, $topic_title, $forum_name, $forum_id
function delete_post($forum_id, $topic_id, $post_id, &$data) function delete_post($forum_id, $topic_id, $post_id, &$data)
{ {
global $db, $user, $auth; global $db, $user, $auth;
global $config, $phpEx, $SID, $phpbb_root_path; global $config, $phpEx, $phpbb_root_path;
// Specify our post mode // Specify our post mode
$post_mode = ($data['topic_first_post_id'] == $data['topic_last_post_id']) ? 'delete_topic' : (($data['topic_first_post_id'] == $post_id) ? 'delete_first_post' : (($data['topic_last_post_id'] == $post_id) ? 'delete_last_post' : 'delete')); $post_mode = ($data['topic_first_post_id'] == $data['topic_last_post_id']) ? 'delete_topic' : (($data['topic_first_post_id'] == $post_id) ? 'delete_first_post' : (($data['topic_last_post_id'] == $post_id) ? 'delete_last_post' : 'delete'));
@ -1116,7 +1120,7 @@ function delete_post($forum_id, $topic_id, $post_id, &$data)
include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx); include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
$db->sql_transaction(); $db->sql_transaction('begin');
if (!delete_posts('post_id', array($post_id), false, false)) if (!delete_posts('post_id', array($post_id), false, false))
{ {
@ -1150,7 +1154,7 @@ function delete_post($forum_id, $topic_id, $post_id, &$data)
$sql_data[FORUMS_TABLE] .= ($sql_data[FORUMS_TABLE]) ? ', ' : ''; $sql_data[FORUMS_TABLE] .= ($sql_data[FORUMS_TABLE]) ? ', ' : '';
$sql_data[FORUMS_TABLE] .= implode(', ', $update_sql[$forum_id]); $sql_data[FORUMS_TABLE] .= implode(', ', $update_sql[$forum_id]);
} }
$sql_data[TOPICS_TABLE] = 'topic_replies_real = topic_replies_real - 1' . (($data['post_approved']) ? ', topic_replies = topic_replies - 1' : ''); $sql_data[TOPICS_TABLE] = 'topic_replies_real = topic_replies_real - 1' . (($data['post_approved']) ? ', topic_replies = topic_replies - 1' : '');
break; break;
@ -1187,7 +1191,7 @@ function delete_post($forum_id, $topic_id, $post_id, &$data)
$sql_data[FORUMS_TABLE] .= ($sql_data[FORUMS_TABLE]) ? ', ' : ''; $sql_data[FORUMS_TABLE] .= ($sql_data[FORUMS_TABLE]) ? ', ' : '';
$sql_data[FORUMS_TABLE] .= implode(', ', $update_sql[$forum_id]); $sql_data[FORUMS_TABLE] .= implode(', ', $update_sql[$forum_id]);
} }
$sql_data[TOPICS_TABLE] = 'topic_bumped = 0, topic_bumper = 0, topic_replies_real = topic_replies_real - 1' . (($data['post_approved']) ? ', topic_replies = topic_replies - 1' : ''); $sql_data[TOPICS_TABLE] = 'topic_bumped = 0, topic_bumper = 0, topic_replies_real = topic_replies_real - 1' . (($data['post_approved']) ? ', topic_replies = topic_replies - 1' : '');
$update_sql = update_post_information('topic', $topic_id, true); $update_sql = update_post_information('topic', $topic_id, true);
@ -1234,7 +1238,7 @@ function delete_post($forum_id, $topic_id, $post_id, &$data)
$sql_data[USERS_TABLE] = ($auth->acl_get('f_postcount', $forum_id)) ? 'user_posts = user_posts - 1' : ''; $sql_data[USERS_TABLE] = ($auth->acl_get('f_postcount', $forum_id)) ? 'user_posts = user_posts - 1' : '';
set_config('num_posts', $config['num_posts'] - 1, true); set_config('num_posts', $config['num_posts'] - 1, true);
$db->sql_transaction(); $db->sql_transaction('begin');
$where_sql = array( $where_sql = array(
FORUMS_TABLE => "forum_id = $forum_id", FORUMS_TABLE => "forum_id = $forum_id",
@ -1281,7 +1285,7 @@ function delete_post($forum_id, $topic_id, $post_id, &$data)
*/ */
function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $update_message = true) function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $update_message = true)
{ {
global $db, $auth, $user, $config, $phpEx, $SID, $template, $phpbb_root_path; global $db, $auth, $user, $config, $phpEx, $template, $phpbb_root_path;
// We do not handle erasing posts here // We do not handle erasing posts here
if ($mode == 'delete') if ($mode == 'delete')
@ -1316,19 +1320,19 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
case 'post': case 'post':
case 'reply': case 'reply':
$sql_data[POSTS_TABLE]['sql'] = array( $sql_data[POSTS_TABLE]['sql'] = array(
'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'], 'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'],
'poster_id' => (int) $user->data['user_id'], 'poster_id' => (int) $user->data['user_id'],
'icon_id' => $data['icon_id'], 'icon_id' => $data['icon_id'],
'poster_ip' => $user->ip, 'poster_ip' => $user->ip,
'post_time' => $current_time, 'post_time' => $current_time,
'post_approved' => ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? 0 : 1, 'post_approved' => (!$auth->acl_get('f_noapprove', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? 0 : 1,
'enable_bbcode' => $data['enable_bbcode'], 'enable_bbcode' => $data['enable_bbcode'],
'enable_smilies' => $data['enable_smilies'], 'enable_smilies' => $data['enable_smilies'],
'enable_magic_url' => $data['enable_urls'], 'enable_magic_url' => $data['enable_urls'],
'enable_sig' => $data['enable_sig'], 'enable_sig' => $data['enable_sig'],
'post_username' => (!$user->data['is_registered']) ? $username : '', 'post_username' => (!$user->data['is_registered']) ? $username : '',
'post_subject' => $subject, 'post_subject' => $subject,
'post_text' => $data['message'], 'post_text' => $data['message'],
'post_checksum' => $data['message_md5'], 'post_checksum' => $data['message_md5'],
'post_encoding' => $user->lang['ENCODING'], 'post_encoding' => $user->lang['ENCODING'],
'post_attachment' => (isset($data['filename_data']['physical_filename']) && sizeof($data['filename_data'])) ? 1 : 0, 'post_attachment' => (isset($data['filename_data']['physical_filename']) && sizeof($data['filename_data'])) ? 1 : 0,
@ -1340,7 +1344,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
case 'edit_first_post': case 'edit_first_post':
case 'edit': case 'edit':
if (!$auth->acl_gets('m_', 'a_') || $data['post_edit_reason']) if (!$auth->acl_gets('m_', 'a_') || $data['post_edit_reason'])
{ {
$sql_data[POSTS_TABLE]['sql'] = array( $sql_data[POSTS_TABLE]['sql'] = array(
@ -1370,14 +1374,14 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
} }
$sql_data[POSTS_TABLE]['sql'] = array_merge($sql_data[POSTS_TABLE]['sql'], array( $sql_data[POSTS_TABLE]['sql'] = array_merge($sql_data[POSTS_TABLE]['sql'], array(
'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'], 'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'],
'poster_id' => $data['poster_id'], 'poster_id' => $data['poster_id'],
'icon_id' => $data['icon_id'], 'icon_id' => $data['icon_id'],
'post_approved' => ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? 0 : 1, 'post_approved' => (!$auth->acl_get('f_noapprove', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? 0 : 1,
'enable_bbcode' => $data['enable_bbcode'], 'enable_bbcode' => $data['enable_bbcode'],
'enable_smilies' => $data['enable_smilies'], 'enable_smilies' => $data['enable_smilies'],
'enable_magic_url' => $data['enable_urls'], 'enable_magic_url' => $data['enable_urls'],
'enable_sig' => $data['enable_sig'], 'enable_sig' => $data['enable_sig'],
'post_username' => ($username && $data['poster_id'] == ANONYMOUS) ? $username : '', 'post_username' => ($username && $data['poster_id'] == ANONYMOUS) ? $username : '',
'post_subject' => $subject, 'post_subject' => $subject,
'post_edit_reason' => $data['post_edit_reason'], 'post_edit_reason' => $data['post_edit_reason'],
@ -1405,10 +1409,10 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
$sql_data[TOPICS_TABLE]['sql'] = array( $sql_data[TOPICS_TABLE]['sql'] = array(
'topic_poster' => (int) $user->data['user_id'], 'topic_poster' => (int) $user->data['user_id'],
'topic_time' => $current_time, 'topic_time' => $current_time,
'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'], 'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'],
'icon_id' => $data['icon_id'], 'icon_id' => $data['icon_id'],
'topic_approved' => ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? 0 : 1, 'topic_approved' => (!$auth->acl_get('f_noapprove', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? 0 : 1,
'topic_title' => $subject, 'topic_title' => $subject,
'topic_first_poster_name' => (!$user->data['is_registered'] && $username) ? $username : (($user->data['user_id'] != ANONYMOUS) ? $user->data['username'] : ''), 'topic_first_poster_name' => (!$user->data['is_registered'] && $username) ? $username : (($user->data['user_id'] != ANONYMOUS) ? $user->data['username'] : ''),
'topic_type' => $topic_type, 'topic_type' => $topic_type,
'topic_time_limit' => ($topic_type == POST_STICKY || $topic_type == POST_ANNOUNCE) ? ($data['topic_time_limit'] * 86400) : 0, 'topic_time_limit' => ($topic_type == POST_STICKY || $topic_type == POST_ANNOUNCE) ? ($data['topic_time_limit'] * 86400) : 0,
@ -1430,19 +1434,19 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
if ($topic_type != POST_GLOBAL) if ($topic_type != POST_GLOBAL)
{ {
if (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) if ($auth->acl_get('f_noapprove', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id']))
{ {
$sql_data[FORUMS_TABLE]['stat'][] = 'forum_posts = forum_posts + 1'; $sql_data[FORUMS_TABLE]['stat'][] = 'forum_posts = forum_posts + 1';
} }
$sql_data[FORUMS_TABLE]['stat'][] = 'forum_topics_real = forum_topics_real + 1' . ((!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? ', forum_topics = forum_topics + 1' : ''); $sql_data[FORUMS_TABLE]['stat'][] = 'forum_topics_real = forum_topics_real + 1' . (($auth->acl_get('f_noapprove', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? ', forum_topics = forum_topics + 1' : '');
} }
break; break;
case 'reply': case 'reply':
$sql_data[TOPICS_TABLE]['stat'][] = 'topic_replies_real = topic_replies_real + 1, topic_bumped = 0, topic_bumper = 0' . ((!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? ', topic_replies = topic_replies + 1' : ''); $sql_data[TOPICS_TABLE]['stat'][] = 'topic_replies_real = topic_replies_real + 1, topic_bumped = 0, topic_bumper = 0' . (($auth->acl_get('f_noapprove', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? ', topic_replies = topic_replies + 1' : '');
$sql_data[USERS_TABLE]['stat'][] = "user_lastpost_time = $current_time" . (($auth->acl_get('f_postcount', $data['forum_id'])) ? ', user_posts = user_posts + 1' : ''); $sql_data[USERS_TABLE]['stat'][] = "user_lastpost_time = $current_time" . (($auth->acl_get('f_postcount', $data['forum_id'])) ? ', user_posts = user_posts + 1' : '');
if ((!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) && $topic_type != POST_GLOBAL) if (($auth->acl_get('f_noapprove', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) && $topic_type != POST_GLOBAL)
{ {
$sql_data[FORUMS_TABLE]['stat'][] = 'forum_posts = forum_posts + 1'; $sql_data[FORUMS_TABLE]['stat'][] = 'forum_posts = forum_posts + 1';
} }
@ -1452,10 +1456,10 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
case 'edit_first_post': case 'edit_first_post':
$sql_data[TOPICS_TABLE]['sql'] = array( $sql_data[TOPICS_TABLE]['sql'] = array(
'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'], 'forum_id' => ($topic_type == POST_GLOBAL) ? 0 : $data['forum_id'],
'icon_id' => $data['icon_id'], 'icon_id' => $data['icon_id'],
'topic_approved' => ($auth->acl_get('f_moderate', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? 0 : 1, 'topic_approved' => (!$auth->acl_get('f_noapprove', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? 0 : 1,
'topic_title' => $subject, 'topic_title' => $subject,
'topic_first_poster_name' => $username, 'topic_first_poster_name' => $username,
'topic_type' => $topic_type, 'topic_type' => $topic_type,
'topic_time_limit' => ($topic_type == POST_STICKY || $topic_type == POST_ANNOUNCE) ? ($data['topic_time_limit'] * 86400) : 0, 'topic_time_limit' => ($topic_type == POST_STICKY || $topic_type == POST_ANNOUNCE) ? ($data['topic_time_limit'] * 86400) : 0,
@ -1470,7 +1474,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
break; break;
} }
$db->sql_transaction(); $db->sql_transaction('begin');
// Submit new topic // Submit new topic
if ($post_mode == 'post') if ($post_mode == 'post')
@ -1565,17 +1569,19 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
// Update the topics table // Update the topics table
if (isset($sql_data[TOPICS_TABLE]['sql'])) if (isset($sql_data[TOPICS_TABLE]['sql']))
{ {
$db->sql_query('UPDATE ' . TOPICS_TABLE . ' $sql = 'UPDATE ' . TOPICS_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $sql_data[TOPICS_TABLE]['sql']) . ' SET ' . $db->sql_build_array('UPDATE', $sql_data[TOPICS_TABLE]['sql']) . '
WHERE topic_id = ' . $data['topic_id']); WHERE topic_id = ' . $data['topic_id'];
$db->sql_query($sql);
} }
// Update the posts table // Update the posts table
if (isset($sql_data[POSTS_TABLE]['sql'])) if (isset($sql_data[POSTS_TABLE]['sql']))
{ {
$db->sql_query('UPDATE ' . POSTS_TABLE . ' $sql = 'UPDATE ' . POSTS_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $sql_data[POSTS_TABLE]['sql']) . ' SET ' . $db->sql_build_array('UPDATE', $sql_data[POSTS_TABLE]['sql']) . '
WHERE post_id = ' . $data['post_id']); WHERE post_id = ' . $data['post_id'];
$db->sql_query($sql);
} }
// Update Poll Tables // Update Poll Tables
@ -1672,7 +1678,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
{ {
continue; continue;
} }
$attach_sql = array( $attach_sql = array(
'post_msg_id' => $data['post_id'], 'post_msg_id' => $data['post_id'],
'topic_id' => $data['topic_id'], 'topic_id' => $data['topic_id'],
@ -1753,7 +1759,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
} }
// Update total post count, do not consider moderated posts/topics // Update total post count, do not consider moderated posts/topics
if (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) if ($auth->acl_get('f_noapprove', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id']))
{ {
if ($post_mode == 'post') if ($post_mode == 'post')
{ {
@ -1768,7 +1774,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
} }
// Update forum stats // Update forum stats
$db->sql_transaction(); $db->sql_transaction('begin');
$where_sql = array(POSTS_TABLE => 'post_id = ' . $data['post_id'], TOPICS_TABLE => 'topic_id = ' . $data['topic_id'], FORUMS_TABLE => 'forum_id = ' . $data['forum_id'], USERS_TABLE => 'user_id = ' . $user->data['user_id']); $where_sql = array(POSTS_TABLE => 'post_id = ' . $data['post_id'], TOPICS_TABLE => 'topic_id = ' . $data['topic_id'], FORUMS_TABLE => 'forum_id = ' . $data['forum_id'], USERS_TABLE => 'user_id = ' . $user->data['user_id']);
@ -1783,26 +1789,27 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
// Delete topic shadows (if any exist). We do not need a shadow topic for an global announcement // Delete topic shadows (if any exist). We do not need a shadow topic for an global announcement
if ($make_global) if ($make_global)
{ {
$db->sql_query('DELETE FROM ' . TOPICS_TABLE . ' $sql = 'DELETE FROM ' . TOPICS_TABLE . '
WHERE topic_moved_id = ' . $data['topic_id']); WHERE topic_moved_id = ' . $data['topic_id'];
$db->sql_query($sql);
} }
// Index message contents // Index message contents
if ($update_message && $data['enable_indexing']) if ($update_message && $data['enable_indexing'])
{ {
// Select the search method and do some additional checks to ensure it can actually be utilised // Select the search method and do some additional checks to ensure it can actually be utilised
$search_type = $config['search_type']; $search_type = basename($config['search_type']);
if (!file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx)) if (!file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx))
{ {
trigger_error('NO_SUCH_SEARCH_MODULE'); trigger_error('NO_SUCH_SEARCH_MODULE');
} }
require("{$phpbb_root_path}includes/search/$search_type.$phpEx"); require("{$phpbb_root_path}includes/search/$search_type.$phpEx");
$error = false; $error = false;
$search = new $search_type($error); $search = new $search_type($error);
if ($error) if ($error)
{ {
trigger_error($error); trigger_error($error);
@ -1817,7 +1824,10 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
$draft_id = request_var('draft_loaded', 0); $draft_id = request_var('draft_loaded', 0);
if ($draft_id) if ($draft_id)
{ {
$db->sql_query('DELETE FROM ' . DRAFTS_TABLE . " WHERE draft_id = $draft_id AND user_id = " . $user->data['user_id']); $sql = 'DELETE FROM ' . DRAFTS_TABLE . "
WHERE draft_id = $draft_id
AND user_id = {$user->data['user_id']}";
$db->sql_query($sql);
} }
// Topic Notification, do not change if moderator is changing other users posts... // Topic Notification, do not change if moderator is changing other users posts...
@ -1849,18 +1859,18 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
markread('topic', $data['forum_id'], $data['topic_id'], time()); markread('topic', $data['forum_id'], $data['topic_id'], time());
// Send Notifications // Send Notifications
if ($mode != 'edit' && $mode != 'delete' && (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id']))) if ($mode != 'edit' && $mode != 'delete' && ($auth->acl_get('f_noapprove', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])))
{ {
user_notification($mode, $subject, $data['topic_title'], $data['forum_name'], $data['forum_id'], $data['topic_id'], $data['post_id']); user_notification($mode, $subject, $data['topic_title'], $data['forum_name'], $data['forum_id'], $data['topic_id'], $data['post_id']);
} }
if ($mode == 'post') if ($mode == 'post')
{ {
$url = (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f=" . $data['forum_id'] . '&amp;t=' . $data['topic_id'] : "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=" . $data['forum_id']; $url = ($auth->acl_get('f_noapprove', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $data['forum_id'] . '&amp;t=' . $data['topic_id']) : append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $data['forum_id']);
} }
else else
{ {
$url = (!$auth->acl_get('f_moderate', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f={$data['forum_id']}&amp;t={$data['topic_id']}&amp;p={$data['post_id']}#p{$data['post_id']}" : "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f={$data['forum_id']}&amp;t={$data['topic_id']}"; $url = ($auth->acl_get('f_noapprove', $data['forum_id']) || $auth->acl_get('m_approve', $data['forum_id'])) ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f={$data['forum_id']}&amp;t={$data['topic_id']}&amp;p={$data['post_id']}") . "#p{$data['post_id']}" : append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f={$data['forum_id']}&amp;t={$data['topic_id']}");
} }
return $url; return $url;

View file

@ -20,25 +20,25 @@ if (!defined('IN_PHPBB'))
1) Add an appropiate constant 1) Add an appropiate constant
2) Add a new check array to the global_privmsgs_rules variable and the condition array (if one is required) 2) Add a new check array to the global_privmsgs_rules variable and the condition array (if one is required)
3) Add a new language variable to ucp.php 3) Add a new language variable to ucp.php
The user is then able to select the new rule. It will be checked against and handled as specified. The user is then able to select the new rule. It will be checked against and handled as specified.
To add new actions (yes, checks can be added here too) to the rule management, the core code has to be modified. To add new actions (yes, checks can be added here too) to the rule management, the core code has to be modified.
*/ */
define('RULE_IS_LIKE', 1); // Is Like define('RULE_IS_LIKE', 1); // Is Like
define('RULE_IS_NOT_LIKE', 2); // Is Not Like define('RULE_IS_NOT_LIKE', 2); // Is Not Like
define('RULE_IS', 3); // Is define('RULE_IS', 3); // Is
define('RULE_IS_NOT', 4); // Is Not define('RULE_IS_NOT', 4); // Is Not
define('RULE_BEGINS_WITH', 5); // Begins with define('RULE_BEGINS_WITH', 5); // Begins with
define('RULE_ENDS_WITH', 6); // Ends with define('RULE_ENDS_WITH', 6); // Ends with
define('RULE_IS_FRIEND', 7); // Is Friend define('RULE_IS_FRIEND', 7); // Is Friend
define('RULE_IS_FOE', 8); // Is Foe define('RULE_IS_FOE', 8); // Is Foe
define('RULE_IS_USER', 9); // Is User define('RULE_IS_USER', 9); // Is User
define('RULE_IS_GROUP', 10); // Is In Usergroup define('RULE_IS_GROUP', 10); // Is In Usergroup
define('RULE_ANSWERED', 11); // Answered define('RULE_ANSWERED', 11); // Answered
define('RULE_FORWARDED', 12); // Forwarded define('RULE_FORWARDED', 12); // Forwarded
define('RULE_TO_GROUP', 14); // Usergroup define('RULE_TO_GROUP', 14); // Usergroup
define('RULE_TO_ME', 15); // Me define('RULE_TO_ME', 15); // Me
define('ACTION_PLACE_INTO_FOLDER', 1); define('ACTION_PLACE_INTO_FOLDER', 1);
define('ACTION_MARK_AS_READ', 2); define('ACTION_MARK_AS_READ', 2);
@ -51,6 +51,10 @@ define('CHECK_MESSAGE', 3);
define('CHECK_STATUS', 4); define('CHECK_STATUS', 4);
define('CHECK_TO', 5); define('CHECK_TO', 5);
/**
* Global private message rules
* These rules define what to do if a rule is hit
*/
$global_privmsgs_rules = array( $global_privmsgs_rules = array(
CHECK_SUBJECT => array( CHECK_SUBJECT => array(
RULE_IS_LIKE => array('check0' => 'message_subject', 'function' => 'preg_match("/" . preg_quote({STRING}, "/") . "/i", {CHECK0})'), RULE_IS_LIKE => array('check0' => 'message_subject', 'function' => 'preg_match("/" . preg_quote({STRING}, "/") . "/i", {CHECK0})'),
@ -71,23 +75,25 @@ $global_privmsgs_rules = array(
RULE_IS_FOE => array('check0' => 'foe', 'function' => '{CHECK0} == 1'), RULE_IS_FOE => array('check0' => 'foe', 'function' => '{CHECK0} == 1'),
RULE_IS_USER => array('check0' => 'author_id', 'function' => '{CHECK0} == {USER_ID}'), RULE_IS_USER => array('check0' => 'author_id', 'function' => '{CHECK0} == {USER_ID}'),
RULE_IS_GROUP => array('check0' => 'author_in_group', 'function' => 'in_array({GROUP_ID}, {CHECK0})')), RULE_IS_GROUP => array('check0' => 'author_in_group', 'function' => 'in_array({GROUP_ID}, {CHECK0})')),
CHECK_MESSAGE => array( CHECK_MESSAGE => array(
RULE_IS_LIKE => array('check0' => 'message_text', 'function' => 'preg_match("/" . preg_quote({STRING}, "/") . "/i", {CHECK0})'), RULE_IS_LIKE => array('check0' => 'message_text', 'function' => 'preg_match("/" . preg_quote({STRING}, "/") . "/i", {CHECK0})'),
RULE_IS_NOT_LIKE => array('check0' => 'message_text', 'function' => '!(preg_match("/" . preg_quote({STRING}, "/") . "/i", {CHECK0}))'), RULE_IS_NOT_LIKE => array('check0' => 'message_text', 'function' => '!(preg_match("/" . preg_quote({STRING}, "/") . "/i", {CHECK0}))'),
RULE_IS => array('check0' => 'message_text', 'function' => '{CHECK0} == {STRING}'), RULE_IS => array('check0' => 'message_text', 'function' => '{CHECK0} == {STRING}'),
RULE_IS_NOT => array('check0' => 'message_text', 'function' => '{CHECK0} != {STRING}')), RULE_IS_NOT => array('check0' => 'message_text', 'function' => '{CHECK0} != {STRING}')),
CHECK_STATUS => array( CHECK_STATUS => array(
RULE_ANSWERED => array('check0' => 'replied', 'function' => '{CHECK0} == 1'), RULE_ANSWERED => array('check0' => 'replied', 'function' => '{CHECK0} == 1'),
RULE_FORWARDED => array('check0' => 'forwarded', 'function' => '{CHECK0} == 1')), RULE_FORWARDED => array('check0' => 'forwarded', 'function' => '{CHECK0} == 1')),
CHECK_TO => array( CHECK_TO => array(
RULE_TO_GROUP => array('check0' => 'to', 'check1' => 'bcc', 'check2' => 'user_in_group', 'function' => 'in_array("g_" . {CHECK2}, {CHECK0}) || in_array("g_" . {CHECK2}, {CHECK1})'), RULE_TO_GROUP => array('check0' => 'to', 'check1' => 'bcc', 'check2' => 'user_in_group', 'function' => 'in_array("g_" . {CHECK2}, {CHECK0}) || in_array("g_" . {CHECK2}, {CHECK1})'),
RULE_TO_ME => array('check0' => 'to', 'check1' => 'bcc', 'function' => 'in_array("u_" . $user_id, {CHECK0}) || in_array("u_" . $user_id, {CHECK1})')) RULE_TO_ME => array('check0' => 'to', 'check1' => 'bcc', 'function' => 'in_array("u_" . $user_id, {CHECK0}) || in_array("u_" . $user_id, {CHECK1})'))
); );
// This is for defining which condition fields to show for which Rule /**
* This is for defining which condition fields to show for which Rule
*/
$global_rule_conditions = array( $global_rule_conditions = array(
RULE_IS_LIKE => 'text', RULE_IS_LIKE => 'text',
RULE_IS_NOT_LIKE => 'text', RULE_IS_NOT_LIKE => 'text',
@ -105,7 +111,7 @@ $global_rule_conditions = array(
function get_folder($user_id, $folder_id = false) function get_folder($user_id, $folder_id = false)
{ {
global $db, $user, $template; global $db, $user, $template;
global $phpbb_root_path, $phpEx, $SID; global $phpbb_root_path, $phpEx;
$folder = array(); $folder = array();
@ -143,23 +149,40 @@ function get_folder($user_id, $folder_id = false)
// Adjust unread status for outbox // Adjust unread status for outbox
$num_unread[PRIVMSGS_OUTBOX] = $num_messages[PRIVMSGS_OUTBOX]; $num_unread[PRIVMSGS_OUTBOX] = $num_messages[PRIVMSGS_OUTBOX];
$folder[PRIVMSGS_INBOX] = array('folder_name' => $user->lang['PM_INBOX'], 'num_messages' => $num_messages[PRIVMSGS_INBOX], 'unread_messages' => $num_unread[PRIVMSGS_INBOX]); $folder[PRIVMSGS_INBOX] = array(
'folder_name' => $user->lang['PM_INBOX'],
'num_messages' => $num_messages[PRIVMSGS_INBOX],
'unread_messages' => $num_unread[PRIVMSGS_INBOX]
);
// Custom Folder // Custom Folder
$sql = 'SELECT folder_id, folder_name, pm_count $sql = 'SELECT folder_id, folder_name, pm_count
FROM ' . PRIVMSGS_FOLDER_TABLE . " FROM ' . PRIVMSGS_FOLDER_TABLE . "
WHERE user_id = $user_id"; WHERE user_id = $user_id";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
$folder[$row['folder_id']] = array('folder_name' => $row['folder_name'], 'num_messages' => $row['pm_count'], 'unread_messages' => ((isset($num_unread[$row['folder_id']])) ? $num_unread[$row['folder_id']] : 0)); $folder[$row['folder_id']] = array(
'folder_name' => $row['folder_name'],
'num_messages' => $row['pm_count'],
'unread_messages' => ((isset($num_unread[$row['folder_id']])) ? $num_unread[$row['folder_id']] : 0)
);
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
$folder[PRIVMSGS_OUTBOX] = array('folder_name' => $user->lang['PM_OUTBOX'], 'num_messages' => $num_messages[PRIVMSGS_OUTBOX], 'unread_messages' => $num_unread[PRIVMSGS_OUTBOX]); $folder[PRIVMSGS_OUTBOX] = array(
$folder[PRIVMSGS_SENTBOX] = array('folder_name' => $user->lang['PM_SENTBOX'], 'num_messages' => $num_messages[PRIVMSGS_SENTBOX], 'unread_messages' => $num_unread[PRIVMSGS_SENTBOX]); 'folder_name' => $user->lang['PM_OUTBOX'],
'num_messages' => $num_messages[PRIVMSGS_OUTBOX],
'unread_messages' => $num_unread[PRIVMSGS_OUTBOX]
);
$folder[PRIVMSGS_SENTBOX] = array(
'folder_name' => $user->lang['PM_SENTBOX'],
'num_messages' => $num_messages[PRIVMSGS_SENTBOX],
'unread_messages' => $num_unread[PRIVMSGS_SENTBOX]
);
// Define Folder Array for template designers (and for making custom folders usable by the template too) // Define Folder Array for template designers (and for making custom folders usable by the template too)
foreach ($folder as $f_id => $folder_ary) foreach ($folder as $f_id => $folder_ary)
@ -172,7 +195,7 @@ function get_folder($user_id, $folder_id = false)
'NUM_MESSAGES' => $folder_ary['num_messages'], 'NUM_MESSAGES' => $folder_ary['num_messages'],
'UNREAD_MESSAGES' => $folder_ary['unread_messages'], 'UNREAD_MESSAGES' => $folder_ary['unread_messages'],
'U_FOLDER' => ($f_id > 0) ? "{$phpbb_root_path}ucp.$phpEx$SID&amp;i=pm&amp;folder={$f_id}" : "{$phpbb_root_path}ucp.$phpEx$SID&amp;i=pm&amp;folder={$folder_id_name}", 'U_FOLDER' => ($f_id > 0) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=' . $f_id) : append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=' . $folder_id_name),
'S_CUR_FOLDER' => ($f_id === $folder_id) ? true : false, 'S_CUR_FOLDER' => ($f_id === $folder_id) ? true : false,
'S_UNREAD_MESSAGES' => ($folder_ary['unread_messages']) ? true : false, 'S_UNREAD_MESSAGES' => ($folder_ary['unread_messages']) ? true : false,
@ -184,13 +207,14 @@ function get_folder($user_id, $folder_id = false)
} }
/** /**
* Delete Messages From Sentbox - we are doing this here because this saves us a bunch of checks and queries * Delete Messages From Sentbox
* we are doing this here because this saves us a bunch of checks and queries
*/ */
function clean_sentbox($num_sentbox_messages) function clean_sentbox($num_sentbox_messages)
{ {
global $db, $user, $config; global $db, $user, $config;
// Check Message Limit - // Check Message Limit
if ($user->data['message_limit'] && $num_sentbox_messages > $user->data['message_limit']) if ($user->data['message_limit'] && $num_sentbox_messages > $user->data['message_limit'])
{ {
// Delete old messages // Delete old messages
@ -236,7 +260,7 @@ function check_rule(&$rules, &$rule_row, &$message_row, $user_id)
// Eval Statement // Eval Statement
$result = false; $result = false;
eval('$result = (' . $evaluate . ') ? true : false;'); eval('$result = (' . $evaluate . ') ? true : false;');
if (!$result) if (!$result)
{ {
return false; return false;
@ -284,7 +308,6 @@ function place_pm_into_folder(&$global_privmsgs_rules, $release = false)
FROM ' . PRIVMSGS_RULES_TABLE . " FROM ' . PRIVMSGS_RULES_TABLE . "
WHERE user_id = $user_id"; WHERE user_id = $user_id";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$user_rules = $db->sql_fetchrowset($result); $user_rules = $db->sql_fetchrowset($result);
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -313,7 +336,7 @@ function place_pm_into_folder(&$global_privmsgs_rules, $release = false)
} }
// Get those messages not yet placed into any box // Get those messages not yet placed into any box
// NOTE: Expand Group Information to all groups the user/author is in? // @todo question: expand group information to all groups the user/author is in on private message folder?? (user_in_group)
$sql = 'SELECT t.*, p.*, u.username, u.group_id as author_in_group $sql = 'SELECT t.*, p.*, u.username, u.group_id as author_in_group
FROM ' . PRIVMSGS_TO_TABLE . ' t, ' . PRIVMSGS_TABLE . ' p, ' . USERS_TABLE . " u FROM ' . PRIVMSGS_TO_TABLE . ' t, ' . PRIVMSGS_TABLE . ' p, ' . USERS_TABLE . " u
WHERE t.user_id = $user_id WHERE t.user_id = $user_id
@ -373,7 +396,7 @@ function place_pm_into_folder(&$global_privmsgs_rules, $release = false)
$_folder_id = (int) $rule_ary['folder_id']; $_folder_id = (int) $rule_ary['folder_id'];
$move_into_folder[$_folder_id][] = $msg_id; $move_into_folder[$_folder_id][] = $msg_id;
$num_new++; $num_new++;
break; break;
case ACTION_MARK_AS_READ: case ACTION_MARK_AS_READ:
if ($rule_ary['unread']) if ($rule_ary['unread'])
@ -381,11 +404,11 @@ function place_pm_into_folder(&$global_privmsgs_rules, $release = false)
$unread_ids[] = $msg_id; $unread_ids[] = $msg_id;
} }
$move_into_folder[PRIVMSGS_INBOX][] = $msg_id; $move_into_folder[PRIVMSGS_INBOX][] = $msg_id;
break; break;
case ACTION_DELETE_MESSAGE: case ACTION_DELETE_MESSAGE:
$delete_ids[] = $msg_id; $delete_ids[] = $msg_id;
break; break;
case ACTION_MARK_AS_IMPORTANT: case ACTION_MARK_AS_IMPORTANT:
if (!$rule_ary['important']) if (!$rule_ary['important'])
@ -393,9 +416,7 @@ function place_pm_into_folder(&$global_privmsgs_rules, $release = false)
$important_ids[] = $msg_id; $important_ids[] = $msg_id;
} }
$move_into_folder[PRIVMSGS_INBOX][] = $msg_id; $move_into_folder[PRIVMSGS_INBOX][] = $msg_id;
break; break;
default:
} }
} }
} }
@ -585,7 +606,7 @@ function place_pm_into_folder(&$global_privmsgs_rules, $release = false)
function move_pm($user_id, $message_limit, $move_msg_ids, $dest_folder, $cur_folder_id) function move_pm($user_id, $message_limit, $move_msg_ids, $dest_folder, $cur_folder_id)
{ {
global $db, $user; global $db, $user;
global $phpbb_root_path, $phpEx, $SID; global $phpbb_root_path, $phpEx;
$num_moved = 0; $num_moved = 0;
@ -605,17 +626,18 @@ function move_pm($user_id, $message_limit, $move_msg_ids, $dest_folder, $cur_fol
WHERE folder_id = $dest_folder WHERE folder_id = $dest_folder
AND user_id = $user_id"; AND user_id = $user_id";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!($row = $db->sql_fetchrow($result))) if (!$row)
{ {
trigger_error('NOT_AUTHORIZED'); trigger_error('NOT_AUTHORIZED');
} }
$db->sql_freeresult($result);
if ($row['pm_count'] + sizeof($move_msg_ids) > $message_limit) if ($row['pm_count'] + sizeof($move_msg_ids) > $message_limit)
{ {
$message = sprintf($user->lang['NOT_ENOUGH_SPACE_FOLDER'], $row['folder_name']) . '<br /><br />'; $message = sprintf($user->lang['NOT_ENOUGH_SPACE_FOLDER'], $row['folder_name']) . '<br /><br />';
$message .= sprintf($user->lang['CLICK_RETURN_FOLDER'], "<a href=\"{$phpbb_root_path}ucp.$phpEx$SID&amp;i=pm&amp;folder={$row['folder_id']}\">", '</a>', $row['folder_name']); $message .= sprintf($user->lang['CLICK_RETURN_FOLDER'], '<a href="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=' . $row['folder_id']) . '">', '</a>', $row['folder_name']);
trigger_error($message); trigger_error($message);
} }
} }
@ -632,7 +654,7 @@ function move_pm($user_id, $message_limit, $move_msg_ids, $dest_folder, $cur_fol
if ($num_messages + sizeof($move_msg_ids) > $message_limit) if ($num_messages + sizeof($move_msg_ids) > $message_limit)
{ {
$message = sprintf($user->lang['NOT_ENOUGH_SPACE_FOLDER'], $user->lang['PM_INBOX']) . '<br /><br />'; $message = sprintf($user->lang['NOT_ENOUGH_SPACE_FOLDER'], $user->lang['PM_INBOX']) . '<br /><br />';
$message .= sprintf($user->lang['CLICK_RETURN_FOLDER'], "<a href=\"{$phpbb_root_path}ucp.$phpEx$SID&amp;i=pm&amp;folder=inbox\">", '</a>', $user->lang['PM_INBOX']); $message .= sprintf($user->lang['CLICK_RETURN_FOLDER'], '<a href="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=inbox') . '">', '</a>', $user->lang['PM_INBOX']);
trigger_error($message); trigger_error($message);
} }
} }
@ -701,7 +723,7 @@ function update_unread_status($unread, $msg_id, $user_id, $folder_id)
*/ */
function handle_mark_actions($user_id, $mark_action) function handle_mark_actions($user_id, $mark_action)
{ {
global $db, $user, $_POST, $phpbb_root_path, $SID, $phpEx; global $db, $user, $_POST, $phpbb_root_path, $phpEx;
$msg_ids = (isset($_POST['marked_msg_id'])) ? array_map('intval', $_POST['marked_msg_id']) : array(); $msg_ids = (isset($_POST['marked_msg_id'])) ? array_map('intval', $_POST['marked_msg_id']) : array();
$cur_folder_id = request_var('cur_folder_id', PRIVMSGS_NO_BOX); $cur_folder_id = request_var('cur_folder_id', PRIVMSGS_NO_BOX);
@ -732,7 +754,7 @@ function handle_mark_actions($user_id, $mark_action)
delete_pm($user_id, $msg_ids, $cur_folder_id); delete_pm($user_id, $msg_ids, $cur_folder_id);
$success_msg = (sizeof($msg_ids) == 1) ? 'MESSAGE_DELETED' : 'MESSAGES_DELETED'; $success_msg = (sizeof($msg_ids) == 1) ? 'MESSAGE_DELETED' : 'MESSAGES_DELETED';
$redirect = "{$phpbb_root_path}ucp.$phpEx$SID&amp;i=pm&amp;folder=$cur_folder_id"; $redirect = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=' . $cur_folder_id);
meta_refresh(3, $redirect); meta_refresh(3, $redirect);
trigger_error($user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_FOLDER'], '<a href="' . $redirect . '">', '</a>')); trigger_error($user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_FOLDER'], '<a href="' . $redirect . '">', '</a>'));
@ -865,7 +887,7 @@ function delete_pm($user_id, $msg_ids, $folder_id)
$set_sql .= ($set_sql != '') ? ', ' : ''; $set_sql .= ($set_sql != '') ? ', ' : '';
$set_sql .= 'user_new_privmsg = user_new_privmsg - ' . $num_new; $set_sql .= 'user_new_privmsg = user_new_privmsg - ' . $num_new;
} }
$db->sql_query('UPDATE ' . USERS_TABLE . " SET $set_sql WHERE user_id = $user_id"); $db->sql_query('UPDATE ' . USERS_TABLE . " SET $set_sql WHERE user_id = $user_id");
} }
@ -912,7 +934,7 @@ function rebuild_header($check_ary)
{ {
${$type}[] = (int) $match[2][$id]; ${$type}[] = (int) $match[2][$id];
} }
$_types = array('u', 'g'); $_types = array('u', 'g');
foreach ($_types as $type) foreach ($_types as $type)
{ {
@ -930,14 +952,14 @@ function rebuild_header($check_ary)
} }
/** /**
* Print out/Assign recipient informations * Print out/assign recipient informations
*/ */
function write_pm_addresses($check_ary, $author_id, $plaintext = false) function write_pm_addresses($check_ary, $author_id, $plaintext = false)
{ {
global $db, $user, $template, $phpbb_root_path, $SID, $phpEx; global $db, $user, $template, $phpbb_root_path, $phpEx;
$addresses = array(); $addresses = array();
foreach ($check_ary as $check_type => $address_field) foreach ($check_ary as $check_type => $address_field)
{ {
if (!is_array($address_field)) if (!is_array($address_field))
@ -1020,7 +1042,7 @@ function write_pm_addresses($check_ary, $author_id, $plaintext = false)
$address['group'][$row['group_id']] = array('name' => $row['group_name'], 'colour' => $row['group_colour']); $address['group'][$row['group_id']] = array('name' => $row['group_name'], 'colour' => $row['group_colour']);
} }
} }
if (isset($address['user'][$row['user_id']])) if (isset($address['user'][$row['user_id']]))
{ {
$address['user'][$row['user_id']]['in_group'] = $row['group_id']; $address['user'][$row['user_id']]['in_group'] = $row['group_id'];
@ -1044,7 +1066,7 @@ function write_pm_addresses($check_ary, $author_id, $plaintext = false)
'IS_USER' => ($type == 'user'), 'IS_USER' => ($type == 'user'),
'COLOUR' => ($row['colour']) ? $row['colour'] : '', 'COLOUR' => ($row['colour']) ? $row['colour'] : '',
'UG_ID' => $id, 'UG_ID' => $id,
'U_VIEW' => ($type == 'user') ? "{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=viewprofile&amp;u=" . $id : "{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=group&amp;g=" . $id, 'U_VIEW' => ($type == 'user') ? append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $id) : append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $id),
'TYPE' => $type) 'TYPE' => $type)
); );
} }
@ -1072,17 +1094,16 @@ function get_folder_status($folder_id, $folder)
{ {
return false; return false;
} }
$return = array();
$return = array( $return = array(
'folder_name' => $folder['folder_name'], 'folder_name' => $folder['folder_name'],
'cur' => $folder['num_messages'], 'cur' => $folder['num_messages'],
'remaining' => $user->data['message_limit'] - $folder['num_messages'], 'remaining' => $user->data['message_limit'] - $folder['num_messages'],
'max' => $user->data['message_limit'], 'max' => $user->data['message_limit'],
'percent' => ($user->data['message_limit'] > 0) ? round(($folder['num_messages'] / $user->data['message_limit']) * 100) : 100 'percent' => ($user->data['message_limit'] > 0) ? round(($folder['num_messages'] / $user->data['message_limit']) * 100) : 100,
);
$return['message'] = sprintf($user->lang['FOLDER_STATUS_MSG'], $return['percent'], $return['cur'], $return['max']); 'message' => sprintf($user->lang['FOLDER_STATUS_MSG'], $return['percent'], $return['cur'], $return['max']),
);
return $return; return $return;
} }
@ -1096,9 +1117,9 @@ function get_folder_status($folder_id, $folder)
*/ */
function submit_pm($mode, $subject, &$data, $update_message, $put_in_outbox = true) function submit_pm($mode, $subject, &$data, $update_message, $put_in_outbox = true)
{ {
global $db, $auth, $config, $phpEx, $SID, $template, $user; global $db, $auth, $config, $phpEx, $template, $user;
// We do not handle erasing posts here // We do not handle erasing pms here
if ($mode == 'delete') if ($mode == 'delete')
{ {
return false; return false;
@ -1165,7 +1186,7 @@ function submit_pm($mode, $subject, &$data, $update_message, $put_in_outbox = tr
} }
$sql = ''; $sql = '';
switch ($mode) switch ($mode)
{ {
case 'reply': case 'reply':
@ -1178,6 +1199,8 @@ function submit_pm($mode, $subject, &$data, $update_message, $put_in_outbox = tr
WHERE user_id = ' . $data['from_user_id'] . ' WHERE user_id = ' . $data['from_user_id'] . '
AND msg_id = ' . $data['reply_from_msg_id']; AND msg_id = ' . $data['reply_from_msg_id'];
// no break
case 'forward': case 'forward':
case 'post': case 'post':
case 'quotepost': case 'quotepost':
@ -1185,14 +1208,14 @@ function submit_pm($mode, $subject, &$data, $update_message, $put_in_outbox = tr
'root_level' => $root_level, 'root_level' => $root_level,
'author_id' => $data['from_user_id'], 'author_id' => $data['from_user_id'],
'icon_id' => $data['icon_id'], 'icon_id' => $data['icon_id'],
'author_ip' => $data['from_user_ip'], 'author_ip' => $data['from_user_ip'],
'message_time' => $current_time, 'message_time' => $current_time,
'enable_bbcode' => $data['enable_bbcode'], 'enable_bbcode' => $data['enable_bbcode'],
'enable_smilies' => $data['enable_smilies'], 'enable_smilies' => $data['enable_smilies'],
'enable_magic_url' => $data['enable_urls'], 'enable_magic_url' => $data['enable_urls'],
'enable_sig' => $data['enable_sig'], 'enable_sig' => $data['enable_sig'],
'message_subject' => $subject, 'message_subject' => $subject,
'message_text' => $data['message'], 'message_text' => $data['message'],
'message_encoding' => $user->lang['ENCODING'], 'message_encoding' => $user->lang['ENCODING'],
'message_attachment'=> (isset($data['filename_data']['physical_filename']) && sizeof($data['filename_data'])) ? 1 : 0, 'message_attachment'=> (isset($data['filename_data']['physical_filename']) && sizeof($data['filename_data'])) ? 1 : 0,
'bbcode_bitfield' => $data['bbcode_bitfield'], 'bbcode_bitfield' => $data['bbcode_bitfield'],
@ -1200,24 +1223,24 @@ function submit_pm($mode, $subject, &$data, $update_message, $put_in_outbox = tr
'to_address' => implode(':', $to), 'to_address' => implode(':', $to),
'bcc_address' => implode(':', $bcc) 'bcc_address' => implode(':', $bcc)
); );
break; break;
case 'edit': case 'edit':
$sql_data = array( $sql_data = array(
'icon_id' => $data['icon_id'], 'icon_id' => $data['icon_id'],
'message_edit_time' => $current_time, 'message_edit_time' => $current_time,
'enable_bbcode' => $data['enable_bbcode'], 'enable_bbcode' => $data['enable_bbcode'],
'enable_smilies' => $data['enable_smilies'], 'enable_smilies' => $data['enable_smilies'],
'enable_magic_url' => $data['enable_urls'], 'enable_magic_url' => $data['enable_urls'],
'enable_sig' => $data['enable_sig'], 'enable_sig' => $data['enable_sig'],
'message_subject' => $subject, 'message_subject' => $subject,
'message_text' => $data['message'], 'message_text' => $data['message'],
'message_encoding' => $user->lang['ENCODING'], 'message_encoding' => $user->lang['ENCODING'],
'message_attachment'=> (isset($data['filename_data']['physical_filename']) && sizeof($data['filename_data'])) ? 1 : 0, 'message_attachment'=> (isset($data['filename_data']['physical_filename']) && sizeof($data['filename_data'])) ? 1 : 0,
'bbcode_bitfield' => $data['bbcode_bitfield'], 'bbcode_bitfield' => $data['bbcode_bitfield'],
'bbcode_uid' => $data['bbcode_uid'] 'bbcode_uid' => $data['bbcode_uid']
); );
break; break;
} }
if (sizeof($sql_data)) if (sizeof($sql_data))
@ -1235,11 +1258,11 @@ function submit_pm($mode, $subject, &$data, $update_message, $put_in_outbox = tr
$db->sql_query($sql); $db->sql_query($sql);
} }
} }
if ($mode != 'edit') if ($mode != 'edit')
{ {
$db->sql_transaction(); $db->sql_transaction('begin');
if ($sql) if ($sql)
{ {
$db->sql_query($sql); $db->sql_query($sql);
@ -1310,7 +1333,7 @@ function submit_pm($mode, $subject, &$data, $update_message, $put_in_outbox = tr
$db->sql_query($sql); $db->sql_query($sql);
} }
$db->sql_transaction(); $db->sql_transaction('begin');
// Submit Attachments // Submit Attachments
if (!empty($data['attachment_data']) && $data['msg_id'] && in_array($mode, array('post', 'reply', 'quote', 'quotepost', 'edit', 'forward'))) if (!empty($data['attachment_data']) && $data['msg_id'] && in_array($mode, array('post', 'reply', 'quote', 'quotepost', 'edit', 'forward')))
@ -1353,7 +1376,7 @@ function submit_pm($mode, $subject, &$data, $update_message, $put_in_outbox = tr
$files_added++; $files_added++;
} }
} }
if (sizeof($data['attachment_data'])) if (sizeof($data['attachment_data']))
{ {
$sql = 'UPDATE ' . PRIVMSGS_TABLE . ' $sql = 'UPDATE ' . PRIVMSGS_TABLE . '
@ -1398,7 +1421,7 @@ function pm_notification($mode, $author, $recipients, $subject, $message)
global $db, $user, $config, $phpbb_root_path, $phpEx, $auth; global $db, $user, $config, $phpbb_root_path, $phpEx, $auth;
$subject = censor_text($subject); $subject = censor_text($subject);
// Get banned User ID's // Get banned User ID's
$sql = 'SELECT ban_userid $sql = 'SELECT ban_userid
FROM ' . BANLIST_TABLE; FROM ' . BANLIST_TABLE;
@ -1442,13 +1465,13 @@ function pm_notification($mode, $author, $recipients, $subject, $message)
} }
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
if (!sizeof($msg_list_ary)) if (!sizeof($msg_list_ary))
{ {
return; return;
} }
include_once($phpbb_root_path . 'includes/functions_messenger.'.$phpEx); include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
$messenger = new messenger(); $messenger = new messenger();
$email_sig = str_replace('<br />', "\n", "-- \n" . $config['board_email_sig']); $email_sig = str_replace('<br />', "\n", "-- \n" . $config['board_email_sig']);

View file

@ -20,10 +20,8 @@ if (!defined('IN_PHPBB'))
* *
* Extension of template class - Functions needed for compiling templates only. * Extension of template class - Functions needed for compiling templates only.
* *
* psoTFX - Completion of file caching, decompilation routines and implementation of * psoTFX, phpBB Development Team - Completion of file caching, decompilation
* conditionals/keywords and associated changes * routines and implementation of conditionals/keywords and associated changes
*
* phpBB Development Team - further additions and fixes
* *
* The interface was inspired by PHPLib templates, and the template file (formats are * The interface was inspired by PHPLib templates, and the template file (formats are
* quite similar) * quite similar)
@ -106,7 +104,7 @@ class template_compile
preg_match_all('#<!-- ([^<].*?) (.*?)?[ ]?-->#', $code, $blocks); preg_match_all('#<!-- ([^<].*?) (.*?)?[ ]?-->#', $code, $blocks);
$text_blocks = preg_split('#<!-- ([^<].*?) (.*?)?[ ]?-->#', $code); $text_blocks = preg_split('#<!-- ([^<].*?) (.*?)?[ ]?-->#', $code);
for ($i = 0, $j = sizeof($text_blocks); $i < $j; $i++) for ($i = 0, $j = sizeof($text_blocks); $i < $j; $i++)
{ {
$this->compile_var_tags($text_blocks[$i]); $this->compile_var_tags($text_blocks[$i]);
@ -168,11 +166,11 @@ class template_compile
break; break;
case 'INCLUDEPHP': case 'INCLUDEPHP':
$compile_blocks[] = ($config['tpl_php']) ? '<?php ' . $this->compile_tag_include_php(array_shift($includephp_blocks)) . ' ?>' : ''; $compile_blocks[] = ($config['tpl_allow_php']) ? '<?php ' . $this->compile_tag_include_php(array_shift($includephp_blocks)) . ' ?>' : '';
break; break;
case 'PHP': case 'PHP':
$compile_blocks[] = ($config['tpl_php']) ? '<?php ' . array_shift($php_blocks) . ' ?>' : ''; $compile_blocks[] = ($config['tpl_allow_php']) ? '<?php ' . array_shift($php_blocks) . ' ?>' : '';
break; break;
default: default:
@ -221,11 +219,17 @@ class template_compile
// This will handle the remaining root-level varrefs // This will handle the remaining root-level varrefs
// transform vars prefixed by L_ into their language variable pendant if nothing is set within the tpldata array // transform vars prefixed by L_ into their language variable pendant if nothing is set within the tpldata array
$text_blocks = preg_replace('#\{L_([a-z0-9\-_]*)\}#is', "<?php echo ((isset(\$this->_tpldata['.'][0]['L_\\1'])) ? \$this->_tpldata['.'][0]['L_\\1'] : ((isset(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '{ ' . ucfirst(strtolower(str_replace('_', ' ', '\\1'))) . ' }')); ?>", $text_blocks); if (strpos($text_blocks, '{L_') !== false)
{
$text_blocks = preg_replace('#\{L_([a-z0-9\-_]*)\}#is', "<?php echo ((isset(\$this->_tpldata['.'][0]['L_\\1'])) ? \$this->_tpldata['.'][0]['L_\\1'] : ((isset(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '{ ' . ucfirst(strtolower(str_replace('_', ' ', '\\1'))) . ' }')); ?>", $text_blocks);
}
// Handle addslashed language variables prefixed with LA_ // Handle addslashed language variables prefixed with LA_
// If a template variable already exist, it will be used in favor of it... // If a template variable already exist, it will be used in favor of it...
$text_blocks = preg_replace('#\{LA_([a-z0-9\-_]*)\}#is', "<?php echo ((isset(\$this->_tpldata['.'][0]['LA_\\1'])) ? \$this->_tpldata['.'][0]['LA_\\1'] : ((isset(\$this->_tpldata['.'][0]['L_\\1'])) ? addslashes(\$this->_tpldata['.'][0]['L_\\1']) : ((isset(\$user->lang['\\1'])) ? addslashes(\$user->lang['\\1']) : '{ ' . ucfirst(strtolower(str_replace('_', ' ', '\\1'))) . ' }'))); ?>", $text_blocks); if (strpos($text_blocks, '{LA_') !== false)
{
$text_blocks = preg_replace('#\{LA_([a-z0-9\-_]*)\}#is', "<?php echo ((isset(\$this->_tpldata['.'][0]['LA_\\1'])) ? \$this->_tpldata['.'][0]['LA_\\1'] : ((isset(\$this->_tpldata['.'][0]['L_\\1'])) ? addslashes(\$this->_tpldata['.'][0]['L_\\1']) : ((isset(\$user->lang['\\1'])) ? addslashes(\$user->lang['\\1']) : '{ ' . ucfirst(strtolower(str_replace('_', ' ', '\\1'))) . ' }'))); ?>", $text_blocks);
}
// Handle remaining varrefs // Handle remaining varrefs
$text_blocks = preg_replace('#\{([a-z0-9\-_]*)\}#is', "<?php echo (isset(\$this->_tpldata['.'][0]['\\1'])) ? \$this->_tpldata['.'][0]['\\1'] : ''; ?>", $text_blocks); $text_blocks = preg_replace('#\{([a-z0-9\-_]*)\}#is', "<?php echo (isset(\$this->_tpldata['.'][0]['\\1'])) ? \$this->_tpldata['.'][0]['\\1'] : ''; ?>", $text_blocks);
@ -258,7 +262,7 @@ class template_compile
if (preg_match('#^([^()]*)\(([\-\d]+)(?:,([\-\d]+))?\)$#', $tag_args, $match)) if (preg_match('#^([^()]*)\(([\-\d]+)(?:,([\-\d]+))?\)$#', $tag_args, $match))
{ {
$tag_args = $match[1]; $tag_args = $match[1];
if ($match[2] < 0) if ($match[2] < 0)
{ {
$loop_start = '($_' . $tag_args . '_count ' . $match[2] . ' < 0 ? 0 : $_' . $tag_args . '_count ' . $match[2] . ')'; $loop_start = '($_' . $tag_args . '_count ' . $match[2] . ' < 0 ? 0 : $_' . $tag_args . '_count ' . $match[2] . ')';
@ -333,10 +337,10 @@ class template_compile
{ {
// Tokenize args for 'if' tag. // Tokenize args for 'if' tag.
preg_match_all('/(?: preg_match_all('/(?:
"[^"\\\\]*(?:\\\\.[^"\\\\]*)*" | "[^"\\\\]*(?:\\\\.[^"\\\\]*)*" |
\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\' | \'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\' |
[(),] | [(),] |
[^\s(),]+)/x', $tag_args, $match); [^\s(),]+)/x', $tag_args, $match);
$tokens = $match[0]; $tokens = $match[0];
$is_arg_stack = array(); $is_arg_stack = array();
@ -491,11 +495,11 @@ class template_compile
case 'false': case 'false':
$match[4] = strtoupper($match[4]); $match[4] = strtoupper($match[4]);
break; break;
case '.': case '.':
$match[4] = doubleval($match[4]); $match[4] = doubleval($match[4]);
break; break;
default: default:
$match[4] = intval($match[4]); $match[4] = intval($match[4]);
break; break;
@ -579,9 +583,6 @@ class template_compile
$expr = "!($is_arg % $expr_arg)"; $expr = "!($is_arg % $expr_arg)";
} }
break; break;
default:
break;
} }
if ($negate_expr) if ($negate_expr)

View file

@ -47,7 +47,7 @@ class transfer
{ {
global $phpbb_root_path; global $phpbb_root_path;
$destination_file = $this->root_path . '/' . str_replace($phpbb_root_path, '', $destination_file); $destination_file = $this->root_path . str_replace($phpbb_root_path, '', $destination_file);
// need to create a temp file and then move that temp file. // need to create a temp file and then move that temp file.
// ftp functions can only move files around and can't create. // ftp functions can only move files around and can't create.
@ -121,7 +121,7 @@ class transfer
$this->_chmod($dir[$i], $this->dir_perms); $this->_chmod($dir[$i], $this->dir_perms);
} }
$this->_chdir($this->root_path . '/' . $dirs . $dir[$i]); $this->_chdir($this->root_path . $dirs . $dir[$i]);
$dirs .= $cur_dir; $dirs .= $cur_dir;
} }
@ -141,7 +141,7 @@ class transfer
global $phpbb_root_path; global $phpbb_root_path;
$from_loc = ((strpos($from_loc, $phpbb_root_path) !== 0) ? $phpbb_root_path : '') . $from_loc; $from_loc = ((strpos($from_loc, $phpbb_root_path) !== 0) ? $phpbb_root_path : '') . $from_loc;
$to_loc = $this->root_path . '/' . str_replace($phpbb_root_path, '', $to_loc); $to_loc = $this->root_path . str_replace($phpbb_root_path, '', $to_loc);
if (!file_exists($from_loc)) if (!file_exists($from_loc))
{ {
@ -160,7 +160,7 @@ class transfer
{ {
global $phpbb_root_path; global $phpbb_root_path;
$file = $this->root_path . '/' . str_replace($phpbb_root_path, '', $file); $file = $this->root_path . str_replace($phpbb_root_path, '', $file);
return $this->_delete($file); return $this->_delete($file);
} }
@ -173,7 +173,7 @@ class transfer
{ {
global $phpbb_root_path; global $phpbb_root_path;
$dir = $this->root_path . '/' . str_replace($phpbb_root_path, '', $dir); $dir = $this->root_path . str_replace($phpbb_root_path, '', $dir);
return $this->_rmdir($dir); return $this->_rmdir($dir);
} }
@ -185,7 +185,7 @@ class transfer
{ {
global $phpbb_root_path; global $phpbb_root_path;
$old_handle = $this->root_path . '/' . str_replace($phpbb_root_path, '', $old_handle); $old_handle = $this->root_path . str_replace($phpbb_root_path, '', $old_handle);
return $this->_rename($old_handle, $new_handle); return $this->_rename($old_handle, $new_handle);
} }
@ -245,9 +245,9 @@ class ftp extends transfer
$this->password = $password; $this->password = $password;
$this->timeout = $timeout; $this->timeout = $timeout;
// Make sure $this->root_path is layed out the same way as the $user->page['root_script_path'] value (prefixed with / and no / at the end) // Make sure $this->root_path is layed out the same way as the $user->page['root_script_path'] value (/ at the end)
$this->root_path = str_replace('\\', '/', $this->root_path); $this->root_path = str_replace('\\', '/', $this->root_path);
$this->root_path = (($root_path{0} != '/' ) ? '/' : '') . ((substr($root_path, -1, 1) == '/') ? substr($root_path, 0, -1) : $root_path); $this->root_path = (($root_path{0} != '/' ) ? '/' : '') . ((substr($root_path, -1, 1) == '/') ? '' : '/') . $root_path;
// Init some needed values // Init some needed values
transfer::transfer(); transfer::transfer();
@ -447,7 +447,7 @@ class ftp_fsock extends transfer
// Make sure $this->root_path is layed out the same way as the $user->page['root_script_path'] value (prefixed with / and no / at the end) // Make sure $this->root_path is layed out the same way as the $user->page['root_script_path'] value (prefixed with / and no / at the end)
$this->root_path = str_replace('\\', '/', $this->root_path); $this->root_path = str_replace('\\', '/', $this->root_path);
$this->root_path = (($root_path{0} != '/' ) ? '/' : '') . ((substr($root_path, -1, 1) == '/') ? substr($root_path, 0, -1) : $root_path); $this->root_path = (($root_path{0} != '/' ) ? '/' : '') . ((substr($root_path, -1, 1) == '/') ? '' : '/') . $root_path;
// Init some needed values // Init some needed values
transfer::transfer(); transfer::transfer();

View file

@ -46,6 +46,7 @@ function user_get_id_name(&$user_id_ary, &$username_ary)
if (!($row = $db->sql_fetchrow($result))) if (!($row = $db->sql_fetchrow($result)))
{ {
$db->sql_freeresult($result);
return 'NO_USERS'; return 'NO_USERS';
} }
@ -63,6 +64,9 @@ function user_get_id_name(&$user_id_ary, &$username_ary)
/** /**
* Updates a username across all relevant tables/fields * Updates a username across all relevant tables/fields
*
* @param string $old_name the old/current username
* @param string $new_name the new username
*/ */
function user_update_name($old_name, $new_name) function user_update_name($old_name, $new_name)
{ {
@ -99,7 +103,7 @@ function user_delete($mode, $user_id, $post_username = false)
{ {
global $config, $db, $user, $auth; global $config, $db, $user, $auth;
$db->sql_transaction(); $db->sql_transaction('begin');
switch ($mode) switch ($mode)
{ {
@ -130,7 +134,7 @@ function user_delete($mode, $user_id, $post_username = false)
if (!function_exists('delete_posts')) if (!function_exists('delete_posts'))
{ {
global $phpbb_root_path, $phpEx; global $phpbb_root_path, $phpEx;
include_once($phpbb_root_path . 'includes/functions_admin.'.$phpEx); include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
} }
$sql = 'SELECT topic_id, COUNT(post_id) AS total_posts $sql = 'SELECT topic_id, COUNT(post_id) AS total_posts
@ -174,7 +178,7 @@ function user_delete($mode, $user_id, $post_username = false)
// Delete posts, attachments, etc. // Delete posts, attachments, etc.
delete_posts('poster_id', $user_id); delete_posts('poster_id', $user_id);
break; break;
} }
$table_ary = array(USERS_TABLE, USER_GROUP_TABLE, TOPICS_WATCH_TABLE, FORUMS_WATCH_TABLE, ACL_USERS_TABLE, TOPICS_TRACK_TABLE, TOPICS_POSTED_TABLE, FORUMS_TRACK_TABLE); $table_ary = array(USERS_TABLE, USER_GROUP_TABLE, TOPICS_WATCH_TABLE, FORUMS_WATCH_TABLE, ACL_USERS_TABLE, TOPICS_TRACK_TABLE, TOPICS_POSTED_TABLE, FORUMS_TRACK_TABLE);
@ -295,16 +299,16 @@ function user_active_flip($user_id, $user_type, $user_actkey = false, $username
} }
/** /**
* Add a ban or ban exclusion to the banlist. Bans either a user, an IP or an email address * Add a ban or ban exclusion to the banlist. Bans either a user, an IP or an email address
* *
* @param string $mode Type of ban. One of the following: user, ip, email * @param string $mode Type of ban. One of the following: user, ip, email
* @param mixed $ban Banned entity. Either string or array with usernames, ips or email addresses * @param mixed $ban Banned entity. Either string or array with usernames, ips or email addresses
* @param int $ban_len Ban length in minutes * @param int $ban_len Ban length in minutes
* @param string $ban_len_other Ban length as a date (YYYY-MM-DD) * @param string $ban_len_other Ban length as a date (YYYY-MM-DD)
* @param boolean $ban_exclude Exclude these entities from banning? * @param boolean $ban_exclude Exclude these entities from banning?
* @param string $ban_reason String describing the reason for this ban * @param string $ban_reason String describing the reason for this ban
* @return boolean * @return boolean
*/ */
function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reason, $ban_give_reason = '') function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reason, $ban_give_reason = '')
{ {
global $db, $user, $auth; global $db, $user, $auth;
@ -538,7 +542,6 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas
// We have some entities to ban // We have some entities to ban
if (sizeof($banlist_ary)) if (sizeof($banlist_ary))
{ {
$sql = '';
$sql_ary = array(); $sql_ary = array();
foreach ($banlist_ary as $ban_entry) foreach ($banlist_ary as $ban_entry)
@ -605,7 +608,6 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$sql_in = array(); $sql_in = array();
$sql = '';
if ($row = $db->sql_fetchrow($result)) if ($row = $db->sql_fetchrow($result))
{ {
@ -656,7 +658,7 @@ function user_unban($mode, $ban)
{ {
$ban = array($ban); $ban = array($ban);
} }
$unban_sql = implode(', ', array_map('intval', $ban)); $unban_sql = implode(', ', array_map('intval', $ban));
if ($unban_sql) if ($unban_sql)
@ -748,8 +750,7 @@ function user_ipwhois($ip)
} }
/** /**
* Data validation ... used primarily but not exclusively by * Data validation ... used primarily but not exclusively by ucp modules
* ucp modules
* *
* "Master" function for validating a range of data types * "Master" function for validating a range of data types
*/ */
@ -837,6 +838,7 @@ function validate_match($string, $optional = false, $match)
{ {
return 'WRONG_DATA'; return 'WRONG_DATA';
} }
return false; return false;
} }
@ -863,23 +865,25 @@ function validate_username($username)
FROM ' . USERS_TABLE . " FROM ' . USERS_TABLE . "
WHERE LOWER(username) = '" . strtolower($db->sql_escape($username)) . "'"; WHERE LOWER(username) = '" . strtolower($db->sql_escape($username)) . "'";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if ($row = $db->sql_fetchrow($result)) if ($row)
{ {
return 'USERNAME_TAKEN'; return 'USERNAME_TAKEN';
} }
$db->sql_freeresult($result);
$sql = 'SELECT group_name $sql = 'SELECT group_name
FROM ' . GROUPS_TABLE . " FROM ' . GROUPS_TABLE . "
WHERE LOWER(group_name) = '" . strtolower($db->sql_escape($username)) . "'"; WHERE LOWER(group_name) = '" . strtolower($db->sql_escape($username)) . "'";
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if ($row = $db->sql_fetchrow($result)) if ($row)
{ {
return 'USERNAME_TAKEN'; return 'USERNAME_TAKEN';
} }
$db->sql_freeresult($result);
$sql = 'SELECT disallow_username $sql = 'SELECT disallow_username
FROM ' . DISALLOW_TABLE; FROM ' . DISALLOW_TABLE;
@ -889,6 +893,7 @@ function validate_username($username)
{ {
if (preg_match('#^' . str_replace('%', '.*?', preg_quote($row['disallow_username'], '$#')) . '#i', $username)) if (preg_match('#^' . str_replace('%', '.*?', preg_quote($row['disallow_username'], '$#')) . '#i', $username))
{ {
$db->sql_freeresult($result);
return 'USERNAME_DISALLOWED'; return 'USERNAME_DISALLOWED';
} }
} }
@ -902,6 +907,7 @@ function validate_username($username)
{ {
if (preg_match('#(' . str_replace('\*', '.*?', preg_quote($row['word'], '#')) . ')#i', $username)) if (preg_match('#(' . str_replace('\*', '.*?', preg_quote($row['word'], '#')) . ')#i', $username))
{ {
$db->sql_freeresult($result);
return 'USERNAME_DISALLOWED'; return 'USERNAME_DISALLOWED';
} }
} }
@ -938,12 +944,13 @@ function validate_email($email)
FROM ' . USERS_TABLE . " FROM ' . USERS_TABLE . "
WHERE user_email_hash = " . crc32(strtolower($email)) . strlen($email); WHERE user_email_hash = " . crc32(strtolower($email)) . strlen($email);
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if ($row = $db->sql_fetchrow($result)) if ($row)
{ {
return 'EMAIL_TAKEN'; return 'EMAIL_TAKEN';
} }
$db->sql_freeresult($result);
} }
return false; return false;
@ -1024,10 +1031,10 @@ function avatar_remote($data, &$error)
*/ */
function avatar_upload($data, &$error) function avatar_upload($data, &$error)
{ {
global $phpbb_root_path, $config, $db, $user; global $phpbb_root_path, $config, $db, $user, $phpEx;
// Init upload class // Init upload class
include_once($phpbb_root_path . 'includes/functions_upload.php'); include_once($phpbb_root_path . 'includes/functions_upload.' . $phpEx);
$upload = new fileupload('AVATAR_', array('jpg', 'jpeg', 'gif', 'png'), $config['avatar_filesize'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height']); $upload = new fileupload('AVATAR_', array('jpg', 'jpeg', 'gif', 'png'), $config['avatar_filesize'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height']);
if (!empty($_FILES['uploadfile']['name'])) if (!empty($_FILES['uploadfile']['name']))
@ -1262,6 +1269,23 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow
if (sizeof($sql_ary)) if (sizeof($sql_ary))
{ {
// Before we update the user attributes, we will make a list of those having now the group avatar assigned
if (in_array('user_avatar', array_keys($sql_ary)))
{
// Ok, get the original avatar data from users having an uploaded one (we need to remove these from the filesystem)
$sql = 'SELECT user_id, user_avatar
FROM ' . USERS_TABLE . '
WHERE group_id = ' . $group_id . '
AND user_avatar_type = ' . AVATAR_UPLOAD;
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
avatar_delete($row['user_avatar']);
}
$db->sql_freeresult($result);
}
$sql = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . " $sql = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
WHERE group_id = $group_id"; WHERE group_id = $group_id";
$db->sql_query($sql); $db->sql_query($sql);
@ -1358,18 +1382,14 @@ function group_user_add($group_id, $user_id_ary = false, $username_ary = false,
$result = $db->sql_query($sql); $result = $db->sql_query($sql);
$add_id_ary = $update_id_ary = array(); $add_id_ary = $update_id_ary = array();
if ($row = $db->sql_fetchrow($result)) while ($row = $db->sql_fetchrow($result))
{ {
do $add_id_ary[] = $row['user_id'];
{
$add_id_ary[] = $row['user_id'];
if ($leader && !$row['group_leader']) if ($leader && !$row['group_leader'])
{ {
$update_id_ary[] = $row['user_id']; $update_id_ary[] = $row['user_id'];
}
} }
while ($row = $db->sql_fetchrow($result));
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -1396,7 +1416,7 @@ function group_user_add($group_id, $user_id_ary = false, $username_ary = false,
$sql = 'INSERT INTO ' . USER_GROUP_TABLE . " (user_id, group_id, group_leader, user_pending) $sql = 'INSERT INTO ' . USER_GROUP_TABLE . " (user_id, group_id, group_leader, user_pending)
VALUES " . implode(', ', preg_replace('#^([0-9]+)$#', "(\\1, $group_id, $leader, $pending)", $add_id_ary)); VALUES " . implode(', ', preg_replace('#^([0-9]+)$#', "(\\1, $group_id, $leader, $pending)", $add_id_ary));
$db->sql_query($sql); $db->sql_query($sql);
break; break;
default: default:
foreach ($add_id_ary as $user_id) foreach ($add_id_ary as $user_id)
@ -1405,7 +1425,7 @@ function group_user_add($group_id, $user_id_ary = false, $username_ary = false,
VALUES ($user_id, $group_id, $leader, $pending)"; VALUES ($user_id, $group_id, $leader, $pending)";
$db->sql_query($sql); $db->sql_query($sql);
} }
break; break;
} }
} }
@ -1468,13 +1488,20 @@ function group_user_del($group_id, $user_id_ary = false, $username_ary = false,
$group_order_id[$row['group_name']] = $row['group_id']; $group_order_id[$row['group_name']] = $row['group_id'];
$special_group_data[$row['group_id']] = array( $special_group_data[$row['group_id']] = array(
'user_colour' => $row['group_colour'], 'user_colour' => $row['group_colour'],
'user_rank' => $row['group_rank'], 'user_rank' => $row['group_rank'],
'user_avatar' => $row['group_avatar'],
'user_avatar_type' => $row['group_avatar_type'],
'user_avatar_width' => $row['group_avatar_width'],
'user_avatar_height'=> $row['group_avatar_height'],
); );
// Only set the group avatar if one is defined...
if ($row['group_avatar'])
{
$special_group_data[$row['group_id']] = array_merge($special_group_data[$row['group_id']], array(
'user_avatar' => $row['group_avatar'],
'user_avatar_type' => $row['group_avatar_type'],
'user_avatar_width' => $row['group_avatar_width'],
'user_avatar_height' => $row['group_avatar_height'])
);
}
} }
$db->sql_freeresult($result); $db->sql_freeresult($result);
@ -1524,6 +1551,23 @@ function group_user_del($group_id, $user_id_ary = false, $username_ary = false,
{ {
$special_group_data[$gid]['group_id'] = $gid; $special_group_data[$gid]['group_id'] = $gid;
// Before we update the user attributes, we will make a list of those having now the group avatar assigned
if (in_array('user_avatar', array_keys($special_group_data[$gid])))
{
// Ok, get the original avatar data from users having an uploaded one (we need to remove these from the filesystem)
$sql = 'SELECT user_id, user_avatar
FROM ' . USERS_TABLE . '
WHERE user_id IN (' . implode(', ', $sql_where_ary[$gid]) . ')
AND user_avatar_type = ' . AVATAR_UPLOAD;
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
avatar_delete($row['user_avatar']);
}
$db->sql_freeresult($result);
}
$sql = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $special_group_data[$gid]) . ' $sql = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $special_group_data[$gid]) . '
WHERE user_id IN (' . implode(', ', $sql_where_ary[$gid]) . ')'; WHERE user_id IN (' . implode(', ', $sql_where_ary[$gid]) . ')';
$db->sql_query($sql); $db->sql_query($sql);
@ -1556,7 +1600,7 @@ function group_user_del($group_id, $user_id_ary = false, $username_ary = false,
*/ */
function group_user_attributes($action, $group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $group_attributes = false) function group_user_attributes($action, $group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $group_attributes = false)
{ {
global $db, $auth; global $db, $auth, $phpbb_root_path, $phpEx, $config;
// We need both username and user_id info // We need both username and user_id info
user_get_id_name($user_id_ary, $username_ary); user_get_id_name($user_id_ary, $username_ary);
@ -1566,6 +1610,11 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna
return false; return false;
} }
if (!$group_name)
{
$group_name = get_group_name($group_id);
}
switch ($action) switch ($action)
{ {
case 'demote': case 'demote':
@ -1580,29 +1629,75 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna
break; break;
case 'approve': case 'approve':
// Make sure we only approve those which are pending ;)
$sql = 'SELECT u.user_id, u.user_email, u.username, u.user_notify_type, u.user_jabber, u.user_lang
FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . ' ug
WHERE ug.group_id = ' . $group_id . '
AND ug.user_pending = 1
AND ug.user_id = u.user_id
AND ug.user_id IN (' . implode(', ', $user_id_ary) . ')';
$result = $db->sql_query($sql);
$user_id_ary = $email_users = array();
while ($row = $db->sql_fetchrow($result))
{
$user_id_ary[] = $row['user_id'];
$email_users[] = $row;
}
$db->sql_freeresult($result);
if (!sizeof($user_id_ary))
{
return false;
}
$sql = 'UPDATE ' . USER_GROUP_TABLE . " $sql = 'UPDATE ' . USER_GROUP_TABLE . "
SET user_pending = 0 SET user_pending = 0
WHERE group_id = $group_id WHERE group_id = $group_id
AND user_id IN (" . implode(', ', $user_id_ary) . ')'; AND user_id IN (" . implode(', ', $user_id_ary) . ')';
$db->sql_query($sql); $db->sql_query($sql);
$log = 'LOG_GROUP_APPROVE'; // Send approved email to users...
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
$messenger = new messenger();
$email_sig = str_replace('<br />', "\n", "-- \n" . $config['board_email_sig']);
foreach ($email_users as $row)
{
$messenger->template('group_approved', $row['user_lang']);
$messenger->replyto($config['board_email']);
$messenger->to($row['user_email'], $row['username']);
$messenger->im($row['user_jabber'], $row['username']);
$messenger->assign_vars(array(
'EMAIL_SIG' => $email_sig,
'SITENAME' => $config['sitename'],
'USERNAME' => html_entity_decode($row['username']),
'GROUP_NAME' => html_entity_decode($group_name),
'U_GROUP' => generate_board_url() . "/ucp.$phpEx?i=groups&mode=membership")
);
$messenger->send($row['user_notify_type']);
$messenger->reset();
}
$messenger->save_queue();
$log = 'LOG_USERS_APPROVED';
break; break;
case 'default': case 'default':
group_set_user_default($group_id, $user_id_ary, $group_attributes); group_set_user_default($group_id, $user_id_ary, $group_attributes);
$log = 'LOG_GROUP_DEFAULTS'; $log = 'LOG_GROUP_DEFAULTS';
break; break;
} }
// Clear permissions cache of relevant users // Clear permissions cache of relevant users
$auth->acl_clear_prefetch($user_id_ary); $auth->acl_clear_prefetch($user_id_ary);
if (!$group_name)
{
$group_name = get_group_name($group_id);
}
add_log('admin', $log, $group_name, implode(', ', $username_ary)); add_log('admin', $log, $group_name, implode(', ', $username_ary));
return true; return true;
@ -1659,6 +1754,23 @@ function group_set_user_default($group_id, $user_id_ary, $group_attributes = fal
} }
} }
// Before we update the user attributes, we will make a list of those having now the group avatar assigned
if (in_array('user_avatar', array_keys($sql_ary)))
{
// Ok, get the original avatar data from users having an uploaded one (we need to remove these from the filesystem)
$sql = 'SELECT user_id, user_avatar
FROM ' . USERS_TABLE . '
WHERE user_id IN (' . implode(', ', $user_id_ary) . ')
AND user_avatar_type = ' . AVATAR_UPLOAD;
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
avatar_delete($row['user_avatar']);
}
$db->sql_freeresult($result);
}
$sql = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' $sql = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
WHERE user_id IN (' . implode(', ', $user_id_ary) . ')'; WHERE user_id IN (' . implode(', ', $user_id_ary) . ')';
$db->sql_query($sql); $db->sql_query($sql);

View file

@ -18,7 +18,7 @@ class mcp_ban
function main($id, $mode) function main($id, $mode)
{ {
global $config, $db, $user, $auth, $template, $cache; global $config, $db, $user, $auth, $template, $cache;
global $SID, $phpbb_root_path, $phpEx; global $phpbb_root_path, $phpEx;
include($phpbb_root_path . 'includes/functions_user.' . $phpEx); include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
@ -103,7 +103,7 @@ class mcp_ban
'S_USERNAME_BAN' => ($mode == 'user') ? true : false, 'S_USERNAME_BAN' => ($mode == 'user') ? true : false,
'U_ACTION' => $this->u_action, 'U_ACTION' => $this->u_action,
'U_FIND_USER' => $phpbb_root_path . "memberlist.$phpEx$SID&amp;mode=searchuser&amp;form=mcp_ban&amp;field=ban", 'U_FIND_USER' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=mcp_ban&amp;field=ban'),
) )
); );
} }

View file

@ -14,9 +14,9 @@
function mcp_forum_view($id, $mode, $action, $forum_info) function mcp_forum_view($id, $mode, $action, $forum_info)
{ {
global $template, $db, $user, $auth, $cache; global $template, $db, $user, $auth, $cache;
global $SID, $phpEx, $phpbb_root_path, $config; global $phpEx, $phpbb_root_path, $config;
$url = "{$phpbb_root_path}mcp.$phpEx$SID" . extra_url(); $url = append_sid("{$phpbb_root_path}mcp.$phpEx?" . extra_url());
if ($action == 'merge_select') if ($action == 'merge_select')
{ {
@ -73,8 +73,8 @@ function mcp_forum_view($id, $mode, $action, $forum_info)
'S_CAN_SYNC' => $auth->acl_get('m_', $forum_id), 'S_CAN_SYNC' => $auth->acl_get('m_', $forum_id),
'S_CAN_APPROVE' => $auth->acl_get('m_approve', $forum_id), 'S_CAN_APPROVE' => $auth->acl_get('m_approve', $forum_id),
'U_VIEW_FORUM' => "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=" . $forum_id, 'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id),
'U_VIEW_FORUM_LOGS' => ($auth->acl_gets('a_', 'm_', $forum_id)) ? "{$phpbb_root_path}mcp.$phpEx$SID&amp;i=logs&amp;mode=forum_logs&amp;f=" . $forum_id : '', 'U_VIEW_FORUM_LOGS' => ($auth->acl_gets('a_', 'm_', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=logs&amp;mode=forum_logs&amp;f=' . $forum_id) : '',
'S_MCP_ACTION' => $url . "&amp;i=$id&amp;action=$action&amp;mode=$mode&amp;start=$start" . (($action == 'merge_select') ? $selected_ids : ''), 'S_MCP_ACTION' => $url . "&amp;i=$id&amp;action=$action&amp;mode=$mode&amp;start=$start" . (($action == 'merge_select') ? $selected_ids : ''),
@ -165,12 +165,12 @@ function mcp_forum_view($id, $mode, $action, $forum_info)
$u_mcp_queue = ($topic_unapproved || $posts_unapproved) ? $url . '&amp;i=queue&amp;mode=' . (($topic_unapproved) ? 'approve_details' : 'unapproved_posts') . '&amp;t=' . $row['topic_id'] : ''; $u_mcp_queue = ($topic_unapproved || $posts_unapproved) ? $url . '&amp;i=queue&amp;mode=' . (($topic_unapproved) ? 'approve_details' : 'unapproved_posts') . '&amp;t=' . $row['topic_id'] : '';
$template->assign_block_vars('topicrow', array( $template->assign_block_vars('topicrow', array(
'U_VIEW_TOPIC' => "{$phpbb_root_path}mcp.$phpEx$SID&amp;i=$id&amp;f=$forum_id&amp;t={$row['topic_id']}&amp;mode=topic_view", 'U_VIEW_TOPIC' => append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&amp;f=$forum_id&amp;t={$row['topic_id']}&amp;mode=topic_view"),
'S_SELECT_TOPIC' => ($action == 'merge_select' && $row['topic_id'] != $topic_id) ? true : false, 'S_SELECT_TOPIC' => ($action == 'merge_select' && $row['topic_id'] != $topic_id) ? true : false,
'U_SELECT_TOPIC' => $url . "&amp;i=$id&amp;mode=topic_view&amp;action=merge&amp;to_topic_id=" . $row['topic_id'] . $selected_ids, 'U_SELECT_TOPIC' => $url . "&amp;i=$id&amp;mode=topic_view&amp;action=merge&amp;to_topic_id=" . $row['topic_id'] . $selected_ids,
'U_MCP_QUEUE' => $u_mcp_queue, 'U_MCP_QUEUE' => $u_mcp_queue,
'U_MCP_REPORT' => "{$phpbb_root_path}mcp.$phpEx$SID&amp;i=main&amp;mode=topic_view&amp;t={$row['topic_id']}&amp;action=reports", 'U_MCP_REPORT' => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=main&amp;mode=topic_view&amp;t=' . $row['topic_id'] . '&amp;action=reports'),
'ATTACH_ICON_IMG' => ($auth->acl_gets('f_download', 'u_download', $row['forum_id']) && $row['topic_attachment']) ? $user->img('icon_attach', $user->lang['TOTAL_ATTACHMENTS']) : '', 'ATTACH_ICON_IMG' => ($auth->acl_gets('f_download', 'u_download', $row['forum_id']) && $row['topic_attachment']) ? $user->img('icon_attach', $user->lang['TOTAL_ATTACHMENTS']) : '',
'TOPIC_FOLDER_IMG' => $user->img($folder_img, $folder_alt), 'TOPIC_FOLDER_IMG' => $user->img($folder_img, $folder_alt),
@ -200,7 +200,7 @@ function mcp_forum_view($id, $mode, $action, $forum_info)
*/ */
function mcp_resync_topics($topic_ids) function mcp_resync_topics($topic_ids)
{ {
global $auth, $db, $template, $phpEx, $user, $SID, $phpbb_root_path; global $auth, $db, $template, $phpEx, $user, $phpbb_root_path;
if (!($forum_id = check_ids($topic_ids, TOPICS_TABLE, 'topic_id', 'm_'))) if (!($forum_id = check_ids($topic_ids, TOPICS_TABLE, 'topic_id', 'm_')))
{ {

View file

@ -13,10 +13,10 @@
*/ */
function mcp_front_view($id, $mode, $action) function mcp_front_view($id, $mode, $action)
{ {
global $SID, $phpEx, $phpbb_root_path, $config; global $phpEx, $phpbb_root_path, $config;
global $template, $db, $user, $auth; global $template, $db, $user, $auth;
$url = "{$phpbb_root_path}mcp.$phpEx$SID" . extra_url(); $url = append_sid("{$phpbb_root_path}mcp.$phpEx?" . extra_url());
// Latest 5 unapproved // Latest 5 unapproved
$forum_list = get_forum_list('m_approve'); $forum_list = get_forum_list('m_approve');
@ -76,9 +76,9 @@ function mcp_front_view($id, $mode, $action)
'U_POST_DETAILS'=> $url . '&amp;i=main&amp;mode=post_details&amp;p=' . $row['post_id'], 'U_POST_DETAILS'=> $url . '&amp;i=main&amp;mode=post_details&amp;p=' . $row['post_id'],
'U_MCP_FORUM' => ($row['forum_id']) ? $url . '&amp;i=main&amp;mode=forum_view&amp;f=' . $row['forum_id'] : '', 'U_MCP_FORUM' => ($row['forum_id']) ? $url . '&amp;i=main&amp;mode=forum_view&amp;f=' . $row['forum_id'] : '',
'U_MCP_TOPIC' => $url . '&amp;i=main&amp;mode=topic_view&amp;t=' . $row['topic_id'], 'U_MCP_TOPIC' => $url . '&amp;i=main&amp;mode=topic_view&amp;t=' . $row['topic_id'],
'U_FORUM' => ($row['forum_id']) ? "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=" . $row['forum_id'] : '', 'U_FORUM' => ($row['forum_id']) ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']) : '',
'U_TOPIC' => $phpbb_root_path . "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f=" . (($row['forum_id']) ? $row['forum_id'] : $forum_id) . '&amp;t=' . $row['topic_id'], 'U_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . (($row['forum_id']) ? $row['forum_id'] : $forum_id) . '&amp;t=' . $row['topic_id']),
'U_AUTHOR' => ($row['poster_id'] == ANONYMOUS) ? '' : "{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=viewprofile&amp;u=" . $row['poster_id'], 'U_AUTHOR' => ($row['poster_id'] == ANONYMOUS) ? '' : append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $row['poster_id']),
'FORUM_NAME' => ($row['forum_id']) ? $forum_names[$row['forum_id']] : $user->lang['GLOBAL_ANNOUNCEMENT'], 'FORUM_NAME' => ($row['forum_id']) ? $forum_names[$row['forum_id']] : $user->lang['GLOBAL_ANNOUNCEMENT'],
'TOPIC_TITLE' => $row['topic_title'], 'TOPIC_TITLE' => $row['topic_title'],
@ -159,9 +159,9 @@ function mcp_front_view($id, $mode, $action)
'U_POST_DETAILS'=> $url . '&amp;p=' . $row['post_id'] . "&amp;i=reports&amp;mode=report_details", 'U_POST_DETAILS'=> $url . '&amp;p=' . $row['post_id'] . "&amp;i=reports&amp;mode=report_details",
'U_MCP_FORUM' => ($row['forum_id']) ? $url . '&amp;f=' . $row['forum_id'] . "&amp;i=$id&amp;mode=forum_view" : '', 'U_MCP_FORUM' => ($row['forum_id']) ? $url . '&amp;f=' . $row['forum_id'] . "&amp;i=$id&amp;mode=forum_view" : '',
'U_MCP_TOPIC' => $url . '&amp;t=' . $row['topic_id'] . "&amp;i=$id&amp;mode=topic_view", 'U_MCP_TOPIC' => $url . '&amp;t=' . $row['topic_id'] . "&amp;i=$id&amp;mode=topic_view",
'U_FORUM' => ($row['forum_id']) ? "{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=" . $row['forum_id'] : '', 'U_FORUM' => ($row['forum_id']) ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']) : '',
'U_TOPIC' => "{$phpbb_root_path}viewtopic.$phpEx$SID&amp;f=" . $row['forum_id'] . '&amp;t=' . $row['topic_id'], 'U_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $row['forum_id'] . '&amp;t=' . $row['topic_id']),
'U_REPORTER' => ($row['user_id'] == ANONYMOUS) ? '' : "{$phpbb_root_path}memberlist.$phpEx$SID&amp;mode=viewprofile&amp;u=" . $row['user_id'], 'U_REPORTER' => ($row['user_id'] == ANONYMOUS) ? '' : append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $row['user_id']),
'FORUM_NAME' => ($row['forum_id']) ? $row['forum_name'] : $user->lang['POST_GLOBAL'], 'FORUM_NAME' => ($row['forum_id']) ? $row['forum_name'] : $user->lang['POST_GLOBAL'],
'TOPIC_TITLE' => $row['topic_title'], 'TOPIC_TITLE' => $row['topic_title'],

View file

@ -26,7 +26,7 @@ class mcp_logs
function main($id, $mode) function main($id, $mode)
{ {
global $auth, $db, $user, $template; global $auth, $db, $user, $template;
global $config, $phpbb_root_path, $phpEx, $SID; global $config, $phpbb_root_path, $phpEx;
$user->add_lang('acp/common'); $user->add_lang('acp/common');

View file

@ -15,8 +15,8 @@
*/ */
class mcp_main class mcp_main
{ {
var $p_master; var $p_master;
var $u_action;
function mcp_main(&$p_master) function mcp_main(&$p_master)
{ {
@ -26,7 +26,7 @@ class mcp_main
function main($id, $mode) function main($id, $mode)
{ {
global $auth, $db, $user, $template, $action; global $auth, $db, $user, $template, $action;
global $config, $phpbb_root_path, $phpEx, $SID; global $config, $phpbb_root_path, $phpEx;
$quickmod = ($mode == 'quickmod') ? true : false; $quickmod = ($mode == 'quickmod') ? true : false;
@ -175,14 +175,7 @@ class mcp_main
mcp_post_details($id, $mode, $action); mcp_post_details($id, $mode, $action);
if ($action == 'whois') $this->tpl_name = ($action == 'whois') ? 'mcp_whois' : 'mcp_post';
{
$this->tpl_name = 'mcp_whois';
}
else
{
$this->tpl_name = 'mcp_post';
}
$this->page_title = 'MCP_MAIN_POST_DETAILS'; $this->page_title = 'MCP_MAIN_POST_DETAILS';
break; break;
@ -197,7 +190,7 @@ class mcp_main
*/ */
function lock_unlock($action, $ids) function lock_unlock($action, $ids)
{ {
global $auth, $user, $db, $SID, $phpEx, $phpbb_root_path; global $auth, $user, $db, $phpEx, $phpbb_root_path;
if ($action == 'lock' || $action == 'unlock') if ($action == 'lock' || $action == 'unlock')
{ {
@ -268,7 +261,7 @@ function lock_unlock($action, $ids)
*/ */
function change_topic_type($action, $topic_ids) function change_topic_type($action, $topic_ids)
{ {
global $auth, $user, $db, $SID, $phpEx, $phpbb_root_path; global $auth, $user, $db, $phpEx, $phpbb_root_path;
if (!($forum_id = check_ids($topic_ids, TOPICS_TABLE, 'topic_id', array('f_announce', 'f_sticky', 'm_')))) if (!($forum_id = check_ids($topic_ids, TOPICS_TABLE, 'topic_id', array('f_announce', 'f_sticky', 'm_'))))
{ {
@ -374,7 +367,7 @@ function change_topic_type($action, $topic_ids)
function mcp_move_topic($topic_ids) function mcp_move_topic($topic_ids)
{ {
global $auth, $user, $db, $template; global $auth, $user, $db, $template;
global $SID, $phpEx, $phpbb_root_path; global $phpEx, $phpbb_root_path;
if (!($forum_id = check_ids($topic_ids, TOPICS_TABLE, 'topic_id', 'm_move'))) if (!($forum_id = check_ids($topic_ids, TOPICS_TABLE, 'topic_id', 'm_move')))
{ {
@ -508,8 +501,8 @@ function mcp_move_topic($topic_ids)
$message = $user->lang[$success_msg]; $message = $user->lang[$success_msg];
$message .= '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>'); $message .= '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $redirect . '">', '</a>');
$message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], "<a href=\"{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=$forum_id\">", '</a>'); $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id") . '">', '</a>');
$message .= '<br /><br />' . sprintf($user->lang['RETURN_NEW_FORUM'], "<a href=\"{$phpbb_root_path}viewforum.$phpEx$SID&amp;f=$to_forum_id\">", '</a>'); $message .= '<br /><br />' . sprintf($user->lang['RETURN_NEW_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$to_forum_id") . '">', '</a>');
trigger_error($message); trigger_error($message);
} }
@ -520,7 +513,7 @@ function mcp_move_topic($topic_ids)
*/ */
function mcp_delete_topic($topic_ids) function mcp_delete_topic($topic_ids)
{ {
global $auth, $user, $db, $SID, $phpEx, $phpbb_root_path; global $auth, $user, $db, $phpEx, $phpbb_root_path;
if (!($forum_id = check_ids($topic_ids, TOPICS_TABLE, 'topic_id', 'm_delete'))) if (!($forum_id = check_ids($topic_ids, TOPICS_TABLE, 'topic_id', 'm_delete')))
{ {
@ -566,8 +559,9 @@ function mcp_delete_topic($topic_ids)
} }
else else
{ {
meta_refresh(3, "viewforum.$phpEx$SID&amp;f=$forum_id"); $redirect_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id);
trigger_error($user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="viewforum.' . $phpEx . $SID . '&amp;f=' . $forum_id . '">', '</a>')); meta_refresh(3, $redirect_url);
trigger_error($user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . $redirect_url . '">', '</a>'));
} }
} }
@ -576,7 +570,7 @@ function mcp_delete_topic($topic_ids)
*/ */
function mcp_delete_post($post_ids) function mcp_delete_post($post_ids)
{ {
global $auth, $user, $db, $SID, $phpEx, $phpbb_root_path; global $auth, $user, $db, $phpEx, $phpbb_root_path;
if (!($forum_id = check_ids($post_ids, POSTS_TABLE, 'post_id', 'm_delete'))) if (!($forum_id = check_ids($post_ids, POSTS_TABLE, 'post_id', 'm_delete')))
{ {
@ -641,9 +635,9 @@ function mcp_delete_post($post_ids)
$return_link = array(); $return_link = array();
if ($affected_topics == 1 && !$deleted_topics && $topic_id) if ($affected_topics == 1 && !$deleted_topics && $topic_id)
{ {
$return_link[] = sprintf($user->lang['RETURN_TOPIC'], "<a href=\"viewtopic.$phpEx$SID&amp;f=$forum_id&amp;t=$topic_id\">", '</a>'); $return_link[] = sprintf($user->lang['RETURN_TOPIC'], '<a href="' . append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id") . '">', '</a>');
} }
$return_link[] = sprintf($user->lang['RETURN_FORUM'], "<a href=\"viewforum.$phpEx$SID&amp;f=$forum_id\">", '</a>'); $return_link[] = sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
if (sizeof($post_ids) == 1) if (sizeof($post_ids) == 1)
{ {
@ -696,7 +690,7 @@ function mcp_delete_post($post_ids)
function mcp_fork_topic($topic_ids) function mcp_fork_topic($topic_ids)
{ {
global $auth, $user, $db, $template, $config; global $auth, $user, $db, $template, $config;
global $SID, $phpEx, $phpbb_root_path; global $phpEx, $phpbb_root_path;
if (!($forum_id = check_ids($topic_ids, TOPICS_TABLE, 'topic_id', 'm_'))) if (!($forum_id = check_ids($topic_ids, TOPICS_TABLE, 'topic_id', 'm_')))
{ {
@ -927,12 +921,13 @@ function mcp_fork_topic($topic_ids)
} }
else else
{ {
meta_refresh(3, "viewforum.$phpEx$SID&amp;f=$forum_id"); $redirect_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id);
$return_link = sprintf($user->lang['RETURN_FORUM'], '<a href="viewforum.' . $phpEx . $SID . '&amp;f=' . $forum_id . '">', '</a>'); meta_refresh(3, $redirect_url);
$return_link = sprintf($user->lang['RETURN_FORUM'], '<a href="' . $redirect_url . '">', '</a>');
if ($forum_id != $to_forum_id) if ($forum_id != $to_forum_id)
{ {
$return_link .= '<br /><br />' . sprintf($user->lang['RETURN_NEW_FORUM'], '<a href="viewforum.' . $phpEx . $SID . '&amp;f=' . $to_forum_id . '">', '</a>'); $return_link .= '<br /><br />' . sprintf($user->lang['RETURN_NEW_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $to_forum_id) . '">', '</a>');
} }
trigger_error($user->lang[$success_msg] . '<br /><br />' . $return_link); trigger_error($user->lang[$success_msg] . '<br /><br />' . $return_link);

Some files were not shown because too many files have changed in this diff Show more