acl_get('a_attach')) ? $filename . $SID . '&mode=manage' : '';
return;
}
define('IN_PHPBB', 1);
// Include files
$phpbb_root_path = '../';
require($phpbb_root_path . 'extension.inc');
require('pagestart.' . $phpEx);
if (!$auth->acl_get('a_attach'))
{
trigger_error($user->lang['NO_ADMIN']);
}
$mode = (isset($_REQUEST['mode'])) ? trim(htmlspecialchars($_REQUEST['mode'])) : '';
$config_sizes = array('max_filesize' => 'size', 'attachment_quota' => 'quota_size', 'max_filesize_pm' => 'pm_size');
foreach ($config_sizes as $cfg_key => $var)
{
$$var = (isset($_REQUEST[$var])) ? trim(htmlspecialchars($_REQUEST[$var])) : '';
}
$submit = (isset($_POST['submit'])) ? TRUE : FALSE;
$search_imagick = (isset($_POST['search_imagick'])) ? TRUE : FALSE;
$error = $notify = false;
$error_msg = $notify_msg = '';
// Pull all config data
$sql = 'SELECT *
FROM ' . CONFIG_TABLE;
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$config_name = $row['config_name'];
$config_value = $row['config_value'];
$default_config[$config_name] = $config_value;
$new[$config_name] = (isset($_POST[$config_name])) ? $_POST[$config_name] : $default_config[$config_name];
foreach ($config_sizes as $cfg_key => $var)
{
if (empty($$var) && !$submit && $config_name == $cfg_key)
{
$$var = (intval($default_config[$config_name]) >= 1048576) ? 'mb' : ((intval($default_config[$config_name]) >= 1024) ? 'kb' : 'b');
}
if (!$submit && $config_name == $cfg_key)
{
if ($new[$config_name] >= 1048576)
{
$new[$config_name] = round($new[$config_name] / 1048576 * 100) / 100;
}
else if($new[$config_name] >= 1024)
{
$new[$config_name] = round($new[$config_name] / 1024 * 100) / 100;
}
}
if ($submit && $mode == 'manage' && $config_name == $cfg_key)
{
$old = $new[$config_name];
$new[$config_name] = ($$var == 'kb') ? round($new[$config_name] * 1024) : (($$var == 'mb') ? round($new[$config_name] * 1048576) : $new[$config_name]);
}
}
if ($submit && ($mode == 'manage' || $mode == 'cats'))
{
// Update Extension Group Filesizes
if ($config_name == 'max_filesize')
{
$old_size = intval($default_config[$config_name]);
$new_size = intval($new[$config_name]);
if ($old_size != $new_size)
{
// See, if we have a similar value of old_size in Extension Groups. If so, update these values.
$sql = 'UPDATE ' . EXTENSION_GROUPS_TABLE . "
SET max_filesize = $new_size
WHERE max_filesize = $old_size";
$db->sql_query($sql);
}
}
set_config($config_name, str_replace('\\\\', '\\', addslashes($new[$config_name])));
if (in_array($config_name, array('max_filesize', 'attachment_quota', 'max_filesize_pm')))
{
$new[$config_name] = $old;
}
}
}
if ($submit && ($mode == 'manage' || $mode == 'cats'))
{
add_log('admin', 'LOG_ATTACH_CONFIG');
$notify = TRUE;
$notify_msg = $user->lang['ATTACH_CONFIG_UPDATED'];
}
// Adjust the Upload Directory
if (!$new['use_ftp_upload'])
{
$upload_dir = ($new['upload_dir'][0] == '/' || ($new['upload_dir'][0] != '/' && $new['upload_dir'][1] == ':')) ? $new['upload_dir'] : $phpbb_root_path . $new['upload_dir'];
}
else
{
$upload_dir = $new['download_path'];
}
switch ($mode)
{
case 'manage':
$l_title = 'ATTACHMENT_CONFIG';
break;
case 'cats':
$l_title = 'MANAGE_CATEGORIES';
break;
case 'extensions':
$l_title = 'MANAGE_EXTENSIONS';
break;
case 'ext_groups':
$l_title = 'EXTENSION_GROUPS_TITLE';
}
// Temporary Language Variables
adm_page_header($user->lang[$l_title]);
// Search Imagick
if ($search_imagick)
{
$imagick = '';
$exe = ((defined('PHP_OS')) && (preg_match('#win#i', PHP_OS))) ? '.exe' : '';
if (empty($_ENV['MAGICK_HOME']))
{
$locations = array('C:/WINDOWS/', 'C:/WINNT/', 'C:/WINDOWS/SYSTEM/', 'C:/WINNT/SYSTEM/', 'C:/WINDOWS/SYSTEM32/', 'C:/WINNT/SYSTEM32/', '/usr/bin/', '/usr/sbin/', '/usr/local/bin/', '/usr/local/sbin/', '/opt/', '/usr/imagemagick/', '/usr/bin/imagemagick/');
foreach ($locations as $location)
{
if (file_exists($location . 'convert' . $exe) && is_executable($location . 'convert' . $exe))
{
$imagick = str_replace('\\', '/', $location);
continue;
}
}
}
else
{
$imagick = str_replace('\\', '/', $_ENV['MAGICK_HOME']);
}
$new['img_imagick'] = $imagick . 'convert' . $exe;
}
// Check Settings
if ($submit && $mode == 'manage')
{
test_upload($error, $error_msg, $upload_dir, $new['ftp_path'], $new['use_ftp_upload'], false);
}
if ($submit && $mode == 'cats')
{
test_upload($error, $error_msg, $upload_dir, $new['ftp_path'] . '/thumbs', $new['use_ftp_upload'], true);
}
if ($submit && $mode == 'extensions')
{
// Change Extensions ?
$extension_change_list = (isset($_POST['extension_change_list'])) ? $_POST['extension_change_list'] : array();
$extension_explain_list = (isset($_POST['extension_explain_list'])) ? $_POST['extension_explain_list'] : array();
$group_select_list = (isset($_POST['group_select'])) ? $_POST['group_select'] : array();
// Generate correct Change List
$extensions = array();
for ($i = 0; $i < count($extension_change_list); $i++)
{
$extensions[$extension_change_list[$i]]['comment'] = stripslashes(htmlspecialchars($extension_explain_list[$i]));
$extensions[$extension_change_list[$i]]['group_id'] = intval($group_select_list[$i]);
}
$sql = 'SELECT *
FROM ' . EXTENSIONS_TABLE . '
ORDER BY extension_id';
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
if ($row['comment'] != $extensions[$row['extension_id']]['comment'] || intval($row['group_id']) != intval($extensions[$row['extension_id']]['group_id']))
{
$sql = "UPDATE " . EXTENSIONS_TABLE . "
SET comment = '" . $extensions[$row['extension_id']]['comment'] . "', group_id = " . $extensions[$row['extension_id']]['group_id'] . "
WHERE extension_id = " . $row['extension_id'];
$db->sql_query($sql);
add_log('admin', 'LOG_ATTACH_EXT_UPDATE', $row['extension']);
}
}
$db->sql_freeresult($result);
// Delete Extension ?
$extension_id_list = (isset($_POST['extension_id_list'])) ? $_POST['extension_id_list'] : array();
$extension_id_sql = implode(', ', $extension_id_list);
if ($extension_id_sql != '')
{
$sql = 'DELETE
FROM ' . EXTENSIONS_TABLE . "
WHERE extension_id IN ($extension_id_sql)";
$db->sql_query($sql);
$sql = 'SELECT extension
FROM ' . EXTENSIONS_TABLE . "
WHERE extension_id IN ($extension_id_sql)";
$result = $db->sql_query($sql);
$extension_list = array();
while ($row = $db->sql_fetchrow($result))
{
$extension_list[] = $row['extension'];
}
$db->sql_freeresult($result);
add_log('admin', 'LOG_ATTACH_EXT_DEL', implode(', ', $extension_list));
}
// Add Extension ?
$add_extension = (isset($_POST['add_extension'])) ? strtolower(trim(strip_tags($_POST['add_extension']))) : '';
$add_extension_explain = (isset($_POST['add_extension_explain'])) ? trim(strip_tags($_POST['add_extension_explain'])) : '';
$add_extension_group = (isset($_POST['add_group_select'])) ? intval($_POST['add_group_select']) : '';
$add = (isset($_POST['add_extension_check'])) ? TRUE : FALSE;
if ($add_extension != '' && $add)
{
if (!$error)
{
// check extension
$sql = 'SELECT extension
FROM ' . EXTENSIONS_TABLE;
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
if ($row['extension'] == $add_extension)
{
$error = TRUE;
if( isset($error_msg) )
{
$error_msg .= '
';
}
$error_msg .= sprintf($user->lang['EXTENSION_EXIST'], $add_extension);
}
}
$db->sql_freeresult($result);
// Extension Forbidden ?
if (!$error)
{
$sql = 'SELECT extension
FROM ' . FORBIDDEN_EXTENSIONS_TABLE;
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
if ($row['extension'] == $add_extension)
{
$error = TRUE;
if( isset($error_msg) )
{
$error_msg .= '
';
}
$error_msg .= sprintf($user->lang['CANNOT_ADD_FORBIDDEN_EXTENSION'], $add_extension);
}
}
}
if (!$error)
{
$sql = 'INSERT INTO ' . EXTENSIONS_TABLE . " (group_id, extension, comment)
VALUES ($add_extension_group, '" . $add_extension . "', '" . trim($add_extension_explain) . "')";
$db->sql_query($sql);
add_log('admin', 'LOG_ATTACH_EXT_ADD', $add_extension);
}
}
}
if (!$error)
{
$notify = true;
$notify_msg = $user->lang['EXTENSIONS_UPDATED'];
}
}
if ($submit && $mode == 'ext_groups')
{
// Change Extension Groups ?
$group_change_list = (isset($_POST['group_change_list'])) ? $_POST['group_change_list'] : array();
$extension_group_list = (isset($_POST['extension_group_list'])) ? $_POST['extension_group_list'] : array();
$group_allowed_list = (isset($_POST['allowed_list'])) ? $_POST['allowed_list'] : array();
$download_mode_list = (isset($_POST['download_mode_list'])) ? $_POST['download_mode_list'] : array();
$category_list = (isset($_POST['category_list'])) ? $_POST['category_list'] : array();
$upload_icon_list = (isset($_POST['upload_icon_list'])) ? $_POST['upload_icon_list'] : array();
$filesize_list = (isset($_POST['max_filesize_list'])) ? $_POST['max_filesize_list'] : array();
$size_select_list = (isset($_POST['size_select_list'])) ? $_POST['size_select_list'] : array();
$allowed_list = array();
for ($i = 0; $i < count($group_allowed_list); $i++)
{
for ($j = 0; $j < count($group_change_list); $j++)
{
if ($group_allowed_list[$i] == $group_change_list[$j])
{
$allowed_list[$j] = '1';
}
}
}
for ($i = 0; $i < count($group_change_list); $i++)
{
$allowed = (isset($allowed_list[$i])) ? 1 : 0;
$filesize_list[$i] = ($size_select_list[$i] == 'kb') ? round($filesize_list[$i] * 1024) : (($size_select_list[$i] == 'mb') ? round($filesize_list[$i] * 1048576) : $filesize_list[$i]);
$group_sql = array(
'group_name' => $extension_group_list[$i],
'cat_id' => $category_list[$i],
'allow_group' => $allowed,
'download_mode' => $download_mode_list[$i],
'upload_icon' => ($upload_icon_list[$i] == 'no_image') ? '' : $upload_icon_list[$i],
'max_filesize' => $filesize_list[$i]
);
$sql = 'UPDATE ' . EXTENSION_GROUPS_TABLE . "
SET " . $db->sql_build_array('UPDATE', $group_sql) . "
WHERE group_id = " . $group_change_list[$i];
$db->sql_query($sql);
}
// Delete Extension Groups
$group_id_list = (isset($_POST['group_id_list'])) ? $_POST['group_id_list'] : array();
if (count($group_id_list))
{
$l_group_list = '';
$sql = 'SELECT group_name
FROM ' . EXTENSION_GROUPS_TABLE . '
WHERE group_id IN (' . implode(', ', $group_id_list) . ')';
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$l_group_list .= (($l_group_list != '') ? ', ' : '') . $row['group_name'];
}
$db->sql_freeresult($result);
$sql = 'DELETE
FROM ' . EXTENSION_GROUPS_TABLE . '
WHERE group_id IN (' . implode(', ', $group_id_list) . ')';
$db->sql_query($sql);
// Set corresponding Extensions to a pending Group
$sql = "UPDATE " . EXTENSIONS_TABLE . "
SET group_id = 0
WHERE group_id IN (" . implode(', ', $group_id_list) . ")";
$db->sql_query($sql);
add_log('admin', 'LOG_ATTACH_EXTGROUP_DEL', $l_group_list);
}
// Add Extensions Group ?
$extension_group = (isset($_POST['add_extension_group'])) ? trim(strip_tags($_POST['add_extension_group'])) : '';
$download_mode = (isset($_POST['add_download_mode'])) ? $_POST['add_download_mode'] : '';
$cat_id = (isset($_POST['add_category'])) ? $_POST['add_category'] : '';
$upload_icon = (isset($_POST['add_upload_icon'])) ? $_POST['add_upload_icon'] : '';
$filesize = (isset($_POST['add_max_filesize'])) ? $_POST['add_max_filesize'] : '';
$size_select = (isset($_POST['add_size_select'])) ? $_POST['add_size_select'] : '';
$is_allowed = (isset($_POST['add_allowed'])) ? 1 : 0;
$add = (isset($_POST['add_extension_group_check'])) ? TRUE : FALSE;
if ($extension_group != '' && $add)
{
// check Extension Group
$sql = 'SELECT group_name
FROM ' . EXTENSION_GROUPS_TABLE;
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
if ($row['group_name'] == $extension_group)
{
$error = TRUE;
if (isset($error_msg))
{
$error_msg .= '
';
}
$error_msg .= sprintf($user->lang['EXTENSION_GROUP_EXIST'], $extension_group);
}
}
$db->sql_freeresult($result);
if (!$error)
{
$filesize = ($size_select == 'kb') ? round($filesize * 1024) : (($size_select == 'mb') ? round($filesize * 1048576) : $filesize);
$group_sql = array(
'group_name' => $extension_group,
'cat_id' => $cat_id,
'allow_group' => $is_allowed,
'download_mode' => $download_mode,
'upload_icon' => ($upload_icon == 'no_image') ? '' : $upload_icon,
'max_filesize' => $filesize
);
$sql = 'INSERT INTO ' . EXTENSION_GROUPS_TABLE . ' ' .
$db->sql_build_array('INSERT', $group_sql);
$db->sql_query($sql);
add_log('admin', 'LOG_ATTACH_EXTGROUP_ADD', $extension_group);
}
}
$sql = 'SELECT e.extension, g.*
FROM ' . EXTENSIONS_TABLE . ' e, ' . EXTENSION_GROUPS_TABLE . ' g
WHERE e.group_id = g.group_id
AND g.allow_group = 1';
$result = $db->sql_query($sql);
$extensions = array();
while ($row = $db->sql_fetchrow($result))
{
$extension = $row['extension'];
$extensions['_allowed_'][] = $extension;
$extensions[$extension]['display_cat'] = intval($row['cat_id']);
$extensions[$extension]['download_mode']= intval($row['download_mode']);
$extensions[$extension]['upload_icon'] = trim($row['upload_icon']);
$extensions[$extension]['max_filesize'] = intval($row['max_filesize']);
}
$db->sql_freeresult($result);
$cache->destroy('extensions');
$cache->put('extensions', $extensions);
if (!$error)
{
$notify = true;
$notify_msg = $user->lang['EXTENSION_GROUPS_UPDATED'];
}
}
?>
lang[$l_title . '_EXPLAIN']; ?>