From aa1045dea2682473fd03198f633374da4518fbc1 Mon Sep 17 00:00:00 2001 From: "Paul S. Owen" Date: Tue, 28 Jan 2003 18:15:18 +0000 Subject: [PATCH] phew, lucky I remembered I just changed the name and enabled icon admin functions ... git-svn-id: file:///svn/phpbb/trunk@3380 89ea8834-ac86-4346-8a33-228a782c2dd0 --- phpBB/admin/admin_icons.php | 670 ++++++++++++++++++++++++++++++++++++ 1 file changed, 670 insertions(+) create mode 100644 phpBB/admin/admin_icons.php diff --git a/phpBB/admin/admin_icons.php b/phpBB/admin/admin_icons.php new file mode 100644 index 0000000000..f365d03ce7 --- /dev/null +++ b/phpBB/admin/admin_icons.php @@ -0,0 +1,670 @@ +acl_get('a_icons')) + { + return; + } + + $filename = basename(__FILE__); + $module['POST']['SMILE'] = $filename . $SID . '&mode=emoticons'; + $module['POST']['ICONS'] = $filename . $SID . '&mode=icons'; + + return; +} + +define('IN_PHPBB', 1); +// Include files +$phpbb_root_path = '../'; +require($phpbb_root_path . 'extension.inc'); +require('pagestart.' . $phpEx); + +// Do we have general permissions? +if (!$auth->acl_get('a_icons')) +{ + message_die(MESSAGE, $user->lang['No_admin']); +} + +// Grab some basic parameters +$mode = (!empty($_REQUEST['mode'])) ? $_REQUEST['mode'] : ''; +$action = (!empty($_REQUEST['action'])) ? $_REQUEST['action'] : ((isset($_POST['add'])) ? 'add' : ''); +$id = (isset($_GET['id'])) ? intval($_GET['id']) : false; + +// What are we working on? +switch ($mode) +{ + case 'emoticons': + $table = SMILIES_TABLE; + $lang = 'SMILE'; + $fields = 'smile'; + $img_path = $config['smilies_path']; + break; + + case 'icons': + $table = ICONS_TABLE; + $lang = 'ICONS'; + $fields = 'icons'; + $img_path = $config['icons_path']; + break; +} + +// Clear some arrays +$_images = $_paks = array(); + +// Grab file list of paks and images +if ($action == 'edit' || $action == 'add' || $action == 'import') +{ + $dir = @opendir($phpbb_root_path . $img_path); + while ($file = @readdir($dir)) + { + if (is_file($phpbb_root_path . $img_path . '/' . $file)) + { + $img_size = @getimagesize($phpbb_root_path . $img_path . '/' . $file); + + if (preg_match('#\.(gif|png|jpg)$#i', $file) || (!empty($img_size[0]) && !empty($img_size[1]))) + { + $_images[] = $file; + } + elseif (preg_match('#\.pak$#i', $file)) + { + $_paks[] = $file; + } + } + } + @closedir($dir); +} + + +// What shall we do today? Oops, I believe that's trademarked ... +switch ($action) +{ + case 'delete': + $db->sql_query('DELETE FROM ' . $table . ' + WHERE ' . $fields . '_id = ' . intval($_GET['id'])); + trigger_error($user->lang[$lang . '_DELETED']); + break; + + case 'edit': + case 'add': + $order_list = ''; + $result = $db->sql_query('SELECT * + FROM ' . $table . ' + ORDER BY ' . $fields . '_order DESC'); + if ($row = $db->sql_fetchrow($result)) + { + do + { + if ($row[$fields . '_id'] == $id) + { + $after = TRUE; + $data = $row; + } + else + { + $selected = ''; + if (!empty($after)) + { + $selected = ' selected="selected"'; + $after = FALSE; + } + + $after_txt = ($mode == 'emoticons') ? $row['code'] : $row['icons_url']; + $order_list = '' . $order_list; + } + } + while ($row = $db->sql_fetchrow($result)); + } + $db->sql_freeresult($result); + + $order_list = '' . $order_list; + + $filename_list = ''; + foreach ($_images as $img) + { + if ((isset($data) && $img == $data[$fields . '_url']) || + (!isset($data) && !isset($edit_img))) + { + $selected = ' selected="selected"'; + $edit_img = $img; + } + else + { + $selected = ''; + } + + $filename_list .= ''; + } + + page_header($user->lang[$lang]); + +?> + +

lang[$lang]; ?>

+ +

lang[$lang .'_EXPLAIN']; ?>

+ + + +
"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
lang[$lang . '_CONFIG'] ?>
lang[$lang . '_URL'] ?>    
lang[$lang . '_CODE'] ?>
lang[$lang . '_EMOTION'] ?>
lang[$lang . '_WIDTH'] ?>
lang[$lang . '_HEIGHT'] ?>
lang['DISPLAY_ON_POSTING'] ?>/>
lang[$lang . '_ORDER'] ?>
+ $img, + $fields . '_width' => $image_width, + $fields . '_height' => $image_height, + $fields . '_order' => $image_order, + 'display_on_posting'=> (!empty($_POST['display_on_posting'])) ? 1 : 0 + ); + if ($mode == 'emoticons') + { + $img_sql = array_merge($sql, array( + 'emoticon' => stripslashes($_POST['emotion']), + 'code' => htmlspecialchars(stripslashes($_POST['code'])) + )); + } + + if ($action == 'modify') + { + $result = $db->sql_query('SELECT ' . $fields . '_order + FROM ' . $table . ' + WHERE ' . $fields . "_id = $image_id"); + $order_old = $db->sql_fetchfield($fields . '_order', 0, $result); + + if ($order_old == $smile_order) + { + $no_update = TRUE; + } + + if ($order_old > $smile_order) + { + $sign = '+'; + $where = $fields . "_order >= $image_order AND " . $fields . "_order < $order_old"; + } + else + { + $sign = '-'; + $where = $fields . "_order > $order_old AND " . $fields . "_order < $image_order"; + $sql[$fields . '_order'] = $smile_order - 1; + } + } + else + { + $sign = '+'; + $where = $fields . "_order > $image_order"; + } + + if (empty($no_update)) + { + $sql = 'UPDATE ' . $table . ' + SET ' . $fields . '_order = ' . $fields . "_order $sign 1 + WHERE $where"; + $db->sql_query($sql); + } + + if ($action == 'modify') + { + $db->sql_query('UPDATE ' . $table . ' + SET ' . $db->sql_build_array('UPDATE', $img_sql) . " + WHERE " . $fields . "_id = $image_id"); + $cache->destroy('icons'); + $cache->put('icons'); + + trigger_error($user->lang[$lang . '_EDITED']); + } + else + { + $db->sql_query('INSERT INTO ' . $table . ' ' . $db->sql_build_array('INSERT', $img_sql)); + $cache->destroy('icons'); + $cache->put('icons'); + + trigger_error($user->lang[$lang . '_ADDED']); + } + break; + + case 'import': + + if (!empty($_POST['pak'])) + { + $order = 0; + + // The user has already selected a smilies_pak file + if ($_POST['current'] == 'delete') + { + $db->sql_query('TRUNCATE ' . $table); + } + else + { + $cur_img = array(); + + $field_sql = ($mode == 'emoticons') ? 'code' : 'icons_url'; + $result = $db->sql_query('SELECT ' . $field_sql . ' + FROM ' . $table); + if ($row = $db->sql_fetchrow($result)) + { + do + { + ++$order; + $cur_img[$row[$field_sql]] = 1; + } + while ($row = $db->sql_fetchrow($result)); + } + $db->sql_freeresult($result); + } + + if (!($pak_ary = @file($phpbb_root_path . $img_path . '/'. stripslashes($_POST['pak'])))) + { + trigger_error('Could not read smiley pak file', E_USER_ERROR); + } + + foreach ($pak_ary as $pak_entry) + { + $data = array(); + if (preg_match_all("#'(.*?)', #", $pak_entry, $data)) + { + if ((sizeof($data[1]) == 5 && $mode == 'icons') || + (sizeof($data[1]) != 5 && $mode == 'emoticons')) + { + trigger_error($user->lang['WRONG_PAK_TYPE']); + } + + $img = stripslashes($data[1][0]); + $width = stripslashes($data[1][1]); + $height = stripslashes($data[1][2]); + if (isset($data[1][3]) && isset($data[1][4])) + { + $emotion = stripslashes($data[1][3]); + $code = htmlentities(stripslashes($data[1][4])); + } + + if ($_POST['current'] == 'replace' && + (($mode == 'emoticons' && !empty($cur_img[$code])) || + ($mode == 'icons' && !empty($cur_img[$img])))) + { + $replace_sql = ($mode == 'emoticons') ? $code : $img; + $sql = array( + $fields . '_url' => $img, + $fields . '_height' => intval($height), + $fields . '_width' => intval($width), + ); + if ($mode == 'emoticons') + { + $sql = array_merge($sql, array( + 'emoticon' => $emotion + )); + } + + $db->sql_query("UPDATE $table SET " . $db->sql_build_array('UPDATE', $sql) . " + WHERE $field_sql = '" . $db->sql_escape($replace_sql) . "'"); + } + else + { + ++$order; + + $sql = array( + $fields . '_url' => $img, + $fields . '_height' => intval($height), + $fields . '_width' => intval($width), + $fields . '_order' => intval($order), + ); + if ($mode == 'emoticons') + { + $sql = array_merge($sql, array( + 'code' => $code, + 'emoticon' => $emotion + )); + } + $db->sql_query("INSERT INTO $table " . $db->sql_build_array('INSERT', $sql)); + } + + } + } + trigger_error($user->lang[$lang . '_IMPORT_SUCCESS']); + } + else + { + $pak_options = ''; + if (count($_paks)) + { + foreach ($_paks as $pak) + { + $pak_options .= ''; + } + } + + page_header($user->lang[$lang]); + +?> +

lang[$lang] ?>

+ +

lang[$lang .'_EXPLAIN'] ?>

+ +
+ + + + + + + + + + + + + + + + + + + + +
lang[$lang . '_IMPORT'] ?>
lang['NO_' . $lang . '_PAK']; ?>
lang['SELECT_PACKAGE'] ?>
lang['CURRENT_' . $lang] ?>
lang['CURRENT_' . $lang . '_EXPLAIN'] ?>
lang['KEEP_ALL'] ?>    lang['REPLACE_MATCHES'] ?>    lang['DELETE_ALL'] ?> 
+lang['EXPORT_' . $lang]); + trigger_error(sprintf($user->lang['EXPORT_' . $lang . '_EXPLAIN'], '', '')); + break; + + case 'send': + + $result = $db->sql_query('SELECT * + FROM ' . $table); + if ($row = $db->sql_fetchrow($result)) + { + do + { + $pak .= "'" . addslashes($row[$fields . '_url']) . "', "; + $pak .= "'" . addslashes($row[$fields . '_height']) . "', "; + $pak .= "'" . addslashes($row[$fields . '_width']) . "', "; + if ($mode == 'emoticons') + { + $pak .= "'" . addslashes($row['emoticon']) . "', "; + $pak .= "'" . addslashes($row['code']) . "', "; + } + $pak .= "\n"; + } + while ($row = $db->sql_fetchrow($result)); + } + $db->sql_freeresult($result); + + if ($pak != '') + { + $db->sql_close(); + + header('Content-Type: text/x-delimtext; name="' . $fields . '.pak"'); + header('Content-disposition: attachment; filename=' . $fields . '.pak"'); + echo $pak; + exit; + } + else + { + trigger_error($user->lang['NO_' . $fields . '_EXPORT']); + } + break; + + case 'move_up': + case 'move_down': + $image_order = intval($_GET['order']); + $order_total = $image_order * 2 + (($action == 'move_up') ? -1 : 1); + + $sql = 'UPDATE ' . $table . ' + SET ' . $fields . "_order = $order_total - " . $fields . '_order + WHERE ' . $fields . "_order IN ($image_order, " . (($action == 'move_up') ? $image_order - 1 : $image_order + 1) . ')'; + $db->sql_query($sql); + + $cache->destroy('icons'); + + // No break; here, display the smilies admin back + + default: + + // By default, check that smile_order is valid and fix it if necessary + $result = $db->sql_query('SELECT * FROM ' . $table . ' ORDER BY ' . $fields . '_order'); + if ($row = $db->sql_fetchrow($result)) + { + $order = 0; + do + { + ++$order; + if ($row[$fields . '_order'] != $order) + { + $db->sql_query('UPDATE ' . $table . ' + SET ' . $fields . '_order = ' . $order . ' + WHERE ' . $fields . '_id = ' . $row[$fields . '_id']); + } + } + while ($row = $db->sql_fetchrow($result)); + } + $db->sql_freeresult($result); + + // Output the page + page_header($user->lang[$lang]); + +?> + +

lang[$lang]; ?>

+ +

lang[$lang .'_EXPLAIN']; ?>

+ +
+ + + + + + +
   lang['IMPORT_' . $lang]; ?> | lang['EXPORT_' . $lang]; ?>
+ + + + + + + + + +sql_query($sql); + + while ($row = $db->sql_fetchrow($result)) + { + if (!$spacer && !$row['display_on_posting']) + { + $spacer = TRUE; +?> + + + + + + + + + + + + + +sql_freeresult($result); + +?> + + + +
lang[$lang]; ?>lang['CODE']; ?>lang['EMOTION']; ?>lang['ACTION']; ?>lang['REORDER']; ?>
lang[$lang . '_not_displayed'] ?>
<?php echo $alt_text; ?>">lang['EDIT']; ?> | ">lang['DELETE']; ?>">lang['MOVE_UP']; ?>
">lang['MOVE_DOWN']; ?>
+ + \ No newline at end of file