Verzeichnisstruktur phpBB-3.0.0


Veröffentlicht
12.12.2007

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

acp_icons.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 23.77 KiB


 001  <?php
 002  /**
 003  *
 004  * @package acp
 005  * @version $Id$
 006  * @copyright (c) 2005 phpBB Group
 007  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 008  *
 009  */
 010   
 011  /**
 012  * @ignore
 013  */
 014  if (!defined('IN_PHPBB'))
 015  {
 016      exit;
 017  }
 018   
 019  /**
 020  * @todo [smilies] check regular expressions for special char replacements (stored specialchared in db)
 021  * @package acp
 022  */
 023  class acp_icons
 024  {
 025      var $u_action;
 026   
 027      function main($id, $mode)
 028      {
 029          global $db, $user, $auth, $template, $cache;
 030          global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
 031   
 032          $user->add_lang('acp/posting');
 033   
 034          // Set up general vars
 035          $action = request_var('action', '');
 036          $action = (isset($_POST['add'])) ? 'add' : $action;
 037          $action = (isset($_POST['edit'])) ? 'edit' : $action;
 038          $action = (isset($_POST['import'])) ? 'import' : $action;
 039          $icon_id = request_var('id', 0);
 040   
 041          $mode = ($mode == 'smilies') ? 'smilies' : 'icons';
 042   
 043          $this->tpl_name = 'acp_icons';
 044   
 045          // What are we working on?
 046          switch ($mode)
 047          {
 048              case 'smilies':
 049                  $table = SMILIES_TABLE;
 050                  $lang = 'SMILIES';
 051                  $fields = 'smiley';
 052                  $img_path = $config['smilies_path'];
 053              break;
 054   
 055              case 'icons':
 056                  $table = ICONS_TABLE;
 057                  $lang = 'ICONS';
 058                  $fields = 'icons';
 059                  $img_path = $config['icons_path'];
 060              break;
 061          }
 062   
 063          $this->page_title = 'ACP_' . $lang;
 064   
 065          // Clear some arrays
 066          $_images = $_paks = array();
 067          $notice = '';
 068   
 069          // Grab file list of paks and images
 070          if ($action == 'edit' || $action == 'add' || $action == 'import')
 071          {
 072              $imglist = filelist($phpbb_root_path . $img_path, '');
 073   
 074              foreach ($imglist as $path => $img_ary)
 075              {
 076                  foreach ($img_ary as $img)
 077                  {
 078                      $img_size = getimagesize($phpbb_root_path . $img_path . '/' . $path . $img);
 079   
 080                      if (!$img_size[0] || !$img_size[1] || strlen($img) > 255)
 081                      {
 082                          continue;
 083                      }
 084   
 085                      $_images[$path . $img]['file'] = $path . $img;
 086                      $_images[$path . $img]['width'] = $img_size[0];
 087                      $_images[$path . $img]['height'] = $img_size[1];
 088                  }
 089              }
 090              unset($imglist);
 091   
 092              if ($dir = @opendir($phpbb_root_path . $img_path))
 093              {
 094                  while (($file = readdir($dir)) !== false)
 095                  {
 096                      if (is_file($phpbb_root_path . $img_path . '/' . $file) && preg_match('#\.pak$#i', $file))
 097                      {
 098                          $_paks[] = $file;
 099                      }
 100                  }
 101                  closedir($dir);
 102              }
 103          }
 104   
 105          // What shall we do today? Oops, I believe that's trademarked ...
 106          switch ($action)
 107          {
 108              case 'edit':
 109                  unset($_images);
 110                  $_images = array();
 111   
 112              // no break;
 113   
 114              case 'add':
 115   
 116                  $smilies = $default_row = array();
 117                  $smiley_options = $order_list = $add_order_list = '';
 118   
 119                  if ($action == 'add' && $mode == 'smilies')
 120                  {
 121                      $sql = 'SELECT *
 122                          FROM ' . SMILIES_TABLE . '
 123                          ORDER BY smiley_order';
 124                      $result = $db->sql_query($sql);
 125   
 126                      while ($row = $db->sql_fetchrow($result))
 127                      {
 128                          if (empty($smilies[$row['smiley_url']]))
 129                          {
 130                              $smilies[$row['smiley_url']] = $row;
 131                          }
 132                      }
 133                      $db->sql_freeresult($result);
 134   
 135                      if (sizeof($smilies))
 136                      {
 137                          foreach ($smilies as $row)
 138                          {
 139                              $selected = false;
 140   
 141                              if (!$smiley_options)
 142                              {
 143                                  $selected = true;
 144                                  $default_row = $row;
 145                              }
 146                              $smiley_options .= '<option value="' . $row['smiley_url'] . '"' . (($selected) ? ' selected="selected"' : '') . '>' . $row['smiley_url'] . '</option>';
 147   
 148                              $template->assign_block_vars('smile', array(
 149                                  'SMILEY_URL'    => addslashes($row['smiley_url']),
 150                                  'CODE'            => addslashes($row['code']),
 151                                  'EMOTION'        => addslashes($row['emotion']),
 152                                  'WIDTH'            => $row['smiley_width'],
 153                                  'HEIGHT'        => $row['smiley_height'],
 154                                  'ORDER'            => $row['smiley_order'] + 1,
 155                              ));
 156                          }
 157                      }
 158                  }
 159                  
 160                  $sql = "SELECT *
 161                      FROM $table
 162                      ORDER BY {$fields}_order " . (($icon_id || $action == 'add') ? 'DESC' : 'ASC');
 163                  $result = $db->sql_query($sql);
 164                  
 165                  $data = array();
 166                  $after = false;
 167                  $display = 0;
 168                  $order_lists = array('', '');
 169                  $add_order_lists = array('', '');
 170                  $display_count = 0;
 171                  
 172                  while ($row = $db->sql_fetchrow($result))
 173                  {
 174                      if ($action == 'add')
 175                      {
 176                          unset($_images[$row[$fields . '_url']]);
 177                      }
 178   
 179   
 180                      if ($row[$fields . '_id'] == $icon_id)
 181                      {
 182                          $after = true;
 183                          $display = $row['display_on_posting'];
 184                          $data[$row[$fields . '_url']] = $row;
 185                      }
 186                      else
 187                      {
 188                          if ($action == 'edit' && !$icon_id)
 189                          {
 190                              $data[$row[$fields . '_url']] = $row;
 191                          }
 192   
 193                          $selected = '';
 194                          if (!empty($after))
 195                          {
 196                              $selected = ' selected="selected"';
 197                              $after = false;
 198                          }
 199                          if ($row['display_on_posting'])
 200                          {
 201                              $display_count++;
 202                          }
 203                          $after_txt = ($mode == 'smilies') ? $row['code'] : $row['icons_url'];
 204                          $order_lists[$row['display_on_posting']] = '<option value="' . ($row[$fields . '_order'] + 1) . '"' . $selected . '>' . sprintf($user->lang['AFTER_' . $lang], ' -&gt; ' . $after_txt) . '</option>' . $order_lists[$row['display_on_posting']];
 205   
 206                          if (!empty($default_row))
 207                          {
 208                              $add_order_lists[$row['display_on_posting']] = '<option value="' . ($row[$fields . '_order'] + 1) . '"' . (($row[$fields . '_id'] == $default_row['smiley_id']) ? ' selected="selected"' : '') . '>' . sprintf($user->lang['AFTER_' . $lang], ' -&gt; ' . $after_txt) . '</option>' . $add_order_lists[$row['display_on_posting']];
 209                          }
 210                      }
 211                  }
 212                  $db->sql_freeresult($result);
 213   
 214                  $order_list = '<option value="1"' . ((!isset($after)) ? ' selected="selected"' : '') . '>' . $user->lang['FIRST'] . '</option>';
 215                  $add_order_list = '<option value="1">' . $user->lang['FIRST'] . '</option>';
 216   
 217                  if ($action == 'add')
 218                  {
 219                      $data = $_images;
 220                  }
 221   
 222                  $colspan = (($mode == 'smilies') ? '7' : '5');
 223                  $colspan += ($icon_id) ? 1 : 0;
 224                  $colspan += ($action == 'add') ? 2 : 0;
 225                  
 226                  $template->assign_vars(array(
 227                      'S_EDIT'        => true,
 228                      'S_SMILIES'        => ($mode == 'smilies') ? true : false,
 229                      'S_ADD'            => ($action == 'add') ? true : false,
 230                      
 231                      'S_ORDER_LIST_DISPLAY'        => $order_list . $order_lists[1],
 232                      'S_ORDER_LIST_UNDISPLAY'    => $order_list . $order_lists[0],
 233                      'S_ORDER_LIST_DISPLAY_COUNT'    => $display_count + 1,
 234   
 235                      'L_TITLE'        => $user->lang['ACP_' . $lang],
 236                      'L_EXPLAIN'        => $user->lang['ACP_' . $lang . '_EXPLAIN'],
 237                      'L_CONFIG'        => $user->lang[$lang . '_CONFIG'],
 238                      'L_URL'            => $user->lang[$lang . '_URL'],
 239                      'L_LOCATION'    => $user->lang[$lang . '_LOCATION'],
 240                      'L_WIDTH'        => $user->lang[$lang . '_WIDTH'],
 241                      'L_HEIGHT'        => $user->lang[$lang . '_HEIGHT'],
 242                      'L_ORDER'        => $user->lang[$lang . '_ORDER'],
 243                      'L_NO_ICONS'    => $user->lang['NO_' . $lang . '_' . strtoupper($action)],
 244   
 245                      'COLSPAN'        => $colspan,
 246                      'ID'            => $icon_id,
 247   
 248                      'U_BACK'        => $this->u_action,
 249                      'U_ACTION'        => $this->u_action . '&amp;action=' . (($action == 'add') ? 'create' : 'modify'),
 250                  ));
 251   
 252                  foreach ($data as $img => $img_row)
 253                  {
 254                      $template->assign_block_vars('items', array(
 255                          'IMG'        => $img,
 256                          'A_IMG'        => addslashes($img),
 257                          'IMG_SRC'    => $phpbb_root_path . $img_path . '/' . $img,
 258   
 259                          'CODE'        => ($mode == 'smilies' && isset($img_row['code'])) ? $img_row['code'] : '',
 260                          'EMOTION'    => ($mode == 'smilies' && isset($img_row['emotion'])) ? $img_row['emotion'] : '',
 261   
 262                          'S_ID'                => (isset($img_row[$fields . '_id'])) ? true : false,
 263                          'ID'                => (isset($img_row[$fields . '_id'])) ? $img_row[$fields . '_id'] : 0,
 264                          'WIDTH'                => (!empty($img_row[$fields .'_width'])) ? $img_row[$fields .'_width'] : $img_row['width'],
 265                          'HEIGHT'            => (!empty($img_row[$fields .'_height'])) ? $img_row[$fields .'_height'] : $img_row['height'],
 266                          'POSTING_CHECKED'    => (!empty($img_row['display_on_posting']) || $action == 'add') ? ' checked="checked"' : '',
 267                      ));
 268                  }
 269   
 270                  // Ok, another row for adding an addition code for a pre-existing image...
 271                  if ($action == 'add' && $mode == 'smilies' && sizeof($smilies))
 272                  {
 273                      $template->assign_vars(array(
 274                          'S_ADD_CODE'        => true,
 275   
 276                          'S_IMG_OPTIONS'        => $smiley_options,
 277                          
 278                          'S_ADD_ORDER_LIST_DISPLAY'        => $add_order_list . $add_order_lists[1],
 279                          'S_ADD_ORDER_LIST_UNDISPLAY'    => $add_order_list . $add_order_lists[0],
 280                          
 281                          'IMG_SRC'            => $phpbb_root_path . $img_path . '/' . $default_row['smiley_url'],
 282                          'IMG_PATH'            => $img_path,
 283                          'PHPBB_ROOT_PATH'    => $phpbb_root_path,
 284   
 285                          'CODE'                => $default_row['code'],
 286                          'EMOTION'            => $default_row['emotion'],
 287   
 288                          'WIDTH'                => $default_row['smiley_width'],
 289                          'HEIGHT'            => $default_row['smiley_height'],
 290                      ));
 291                  }
 292   
 293                  return;
 294      
 295              break;
 296   
 297              case 'create':
 298              case 'modify':
 299   
 300                  // Get items to create/modify
 301                  $images = (isset($_POST['image'])) ? array_keys(request_var('image', array('' => 0))) : array();
 302                  
 303                  // Now really get the items
 304                  $image_id        = (isset($_POST['id'])) ? request_var('id', array('' => 0)) : array();
 305                  $image_order    = (isset($_POST['order'])) ? request_var('order', array('' => 0)) : array();
 306                  $image_width    = (isset($_POST['width'])) ? request_var('width', array('' => 0)) : array();
 307                  $image_height    = (isset($_POST['height'])) ? request_var('height', array('' => 0)) : array();
 308                  $image_add        = (isset($_POST['add_img'])) ? request_var('add_img', array('' => 0)) : array();
 309                  $image_emotion    = utf8_normalize_nfc(request_var('emotion', array('' => ''), true));
 310                  $image_code        = utf8_normalize_nfc(request_var('code', array('' => ''), true));
 311                  $image_display_on_posting = (isset($_POST['display_on_posting'])) ? request_var('display_on_posting', array('' => 0)) : array();
 312   
 313                  // Ok, add the relevant bits if we are adding new codes to existing emoticons...
 314                  if (!empty($_POST['add_additional_code']))
 315                  {
 316                      $add_image            = request_var('add_image', '');
 317                      $add_code            = utf8_normalize_nfc(request_var('add_code', '', true));
 318                      $add_emotion        = utf8_normalize_nfc(request_var('add_emotion', '', true));
 319   
 320                      if ($add_image && $add_emotion && $add_code)
 321                      {
 322                          $images[] = $add_image;
 323                          $image_add[$add_image] = true;
 324   
 325                          $image_code[$add_image] = $add_code;
 326                          $image_emotion[$add_image] = $add_emotion;
 327                          $image_width[$add_image] = request_var('add_width', 0);
 328                          $image_height[$add_image] = request_var('add_height', 0);
 329   
 330                          if (!empty($_POST['add_display_on_posting']))
 331                          {
 332                              $image_display_on_posting[$add_image] = 1;
 333                          }
 334   
 335                          $image_order[$add_image] = request_var('add_order', 0);
 336                      }
 337                  }
 338   
 339                  $icons_updated = 0;
 340                  foreach ($images as $image)
 341                  {
 342                      if (($mode == 'smilies' && ($image_emotion[$image] == '' || $image_code[$image] == '')) ||
 343                          ($action == 'create' && !isset($image_add[$image])))
 344                      {
 345                      }
 346                      else
 347                      {
 348                          if ($image_width[$image] == 0 || $image_height[$image] == 0)
 349                          {
 350                              $img_size = getimagesize($phpbb_root_path . $img_path . '/' . $image);
 351                              $image_width[$image] = $img_size[0];
 352                              $image_height[$image] = $img_size[1];
 353                          }
 354   
 355                          $img_sql = array(
 356                              $fields . '_url'        => $image,
 357                              $fields . '_width'        => $image_width[$image],
 358                              $fields . '_height'        => $image_height[$image],
 359                              'display_on_posting'    => (isset($image_display_on_posting[$image])) ? 1 : 0,
 360                          );
 361   
 362                          if ($mode == 'smilies')
 363                          {
 364                              $img_sql = array_merge($img_sql, array(
 365                                  'emotion'    => $image_emotion[$image],
 366                                  'code'        => $image_code[$image])
 367                              );
 368                          }
 369   
 370                          // Image_order holds the 'new' order value
 371                          if (!empty($image_order[$image]))
 372                          {
 373                              $img_sql = array_merge($img_sql, array(
 374                                  $fields . '_order'    =>    $image_order[$image])
 375                              );
 376   
 377                              // Since we always add 'after' an item, we just need to increase all following + the current by one
 378                              $sql = "UPDATE $table
 379                                  SET {$fields}_order = {$fields}_order + 1
 380                                  WHERE {$fields}_order >= {$image_order[$image]}";
 381                              $db->sql_query($sql);
 382   
 383                              // If we adjust the order, we need to adjust all other orders too - they became inaccurate...
 384                              foreach ($image_order as $_image => $_order)
 385                              {
 386                                  if ($_image == $image)
 387                                  {
 388                                      continue;
 389                                  }
 390   
 391                                  if ($_order >= $image_order[$image])
 392                                  {
 393                                      $image_order[$_image]++;
 394                                  }
 395                              }
 396                          }
 397   
 398                          if ($action == 'modify'  && !empty($image_id[$image]))
 399                          {
 400                              $sql = "UPDATE $table
 401                                  SET " . $db->sql_build_array('UPDATE', $img_sql) . "
 402                                  WHERE {$fields}_id = " . $image_id[$image];
 403                              $db->sql_query($sql);
 404                              $icons_updated++;
 405                          }
 406                          else if ($action !== 'modify')
 407                          {
 408                              $sql = "INSERT INTO $table " . $db->sql_build_array('INSERT', $img_sql);
 409                              $db->sql_query($sql);
 410                              $icons_updated++;
 411                          }
 412                          
 413                       }
 414                  }
 415                  
 416                  $cache->destroy('_icons');
 417                  $cache->destroy('sql', $table);
 418                  
 419                  $level = E_USER_NOTICE;
 420                  switch ($icons_updated)
 421                  {
 422                      case 0:
 423                          $suc_lang = "{$lang}_NONE";
 424                          $level = E_USER_WARNING;
 425                          break;
 426                          
 427                      case 1:
 428                          $suc_lang = "{$lang}_ONE";
 429                          break;
 430                          
 431                      default:
 432                          $suc_lang = $lang;
 433                  }
 434                  if ($action == 'modify')
 435                  {
 436                      trigger_error($user->lang[$suc_lang . '_EDITED'] . adm_back_link($this->u_action), $level);
 437                  }
 438                  else
 439                  {
 440                      trigger_error($user->lang[$suc_lang . '_ADDED'] . adm_back_link($this->u_action), $level);
 441                  }
 442   
 443              break;
 444   
 445              case 'import':
 446   
 447                  $pak = request_var('pak', '');
 448                  $current = request_var('current', '');
 449   
 450                  if ($pak != '')
 451                  {
 452                      $order = 0;
 453   
 454                      if (!($pak_ary = @file($phpbb_root_path . $img_path . '/' . $pak)))
 455                      {
 456                          trigger_error($user->lang['PAK_FILE_NOT_READABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
 457                      }
 458   
 459                      // Make sure the pak_ary is valid
 460                      foreach ($pak_ary as $pak_entry)
 461                      {
 462                          if (preg_match_all("#'(.*?)', ?#", $pak_entry, $data))
 463                          {
 464                              if ((sizeof($data[1]) != 4 && $mode == 'icons') ||
 465                                  (sizeof($data[1]) != 6 && $mode == 'smilies'))
 466                              {
 467                                  trigger_error($user->lang['WRONG_PAK_TYPE'] . adm_back_link($this->u_action), E_USER_WARNING);
 468                              }
 469                          }
 470                          else
 471                          {
 472                              trigger_error($user->lang['WRONG_PAK_TYPE'] . adm_back_link($this->u_action), E_USER_WARNING);
 473                          }
 474                      }
 475   
 476   
 477                      // The user has already selected a smilies_pak file
 478                      if ($current == 'delete')
 479                      {
 480                          switch ($db->sql_layer)
 481                          {
 482                              case 'sqlite':
 483                              case 'firebird':
 484                                  $db->sql_query('DELETE FROM ' . $table);
 485                              break;
 486   
 487                              default:
 488                                  $db->sql_query('TRUNCATE TABLE ' . $table);
 489                              break;
 490                          }
 491   
 492                          switch ($mode)
 493                          {
 494                              case 'smilies':
 495                              break;
 496   
 497                              case 'icons':
 498                                  // Reset all icon_ids
 499                                  $db->sql_query('UPDATE ' . TOPICS_TABLE . ' SET icon_id = 0');
 500                                  $db->sql_query('UPDATE ' . POSTS_TABLE . ' SET icon_id = 0');
 501                              break;
 502                          }
 503                      }
 504                      else
 505                      {
 506                          $cur_img = array();
 507   
 508                          $field_sql = ($mode == 'smilies') ? 'code' : 'icons_url';
 509   
 510                          $sql = "SELECT $field_sql
 511                              FROM $table";
 512                          $result = $db->sql_query($sql);
 513   
 514                          while ($row = $db->sql_fetchrow($result))
 515                          {
 516                              ++$order;
 517                              $cur_img[$row[$field_sql]] = 1;
 518                          }
 519                          $db->sql_freeresult($result);
 520                      }
 521   
 522                      foreach ($pak_ary as $pak_entry)
 523                      {
 524                          $data = array();
 525                          if (preg_match_all("#'(.*?)', ?#", $pak_entry, $data))
 526                          {
 527                              if ((sizeof($data[1]) != 4 && $mode == 'icons') ||
 528                                  (sizeof($data[1]) != 6 && $mode == 'smilies'))
 529                              {
 530                                  trigger_error($user->lang['WRONG_PAK_TYPE'] . adm_back_link($this->u_action), E_USER_WARNING);
 531                              }
 532   
 533                              // Stripslash here because it got addslashed before... (on export)
 534                              $img = stripslashes($data[1][0]);
 535                              $width = stripslashes($data[1][1]);
 536                              $height = stripslashes($data[1][2]);
 537                              $display_on_posting = stripslashes($data[1][3]);
 538   
 539                              if (isset($data[1][4]) && isset($data[1][5]))
 540                              {
 541                                  $emotion = stripslashes($data[1][4]);
 542                                  $code = stripslashes($data[1][5]);
 543                              }
 544   
 545                              if ($current == 'replace' &&
 546                                  (($mode == 'smilies' && !empty($cur_img[$code])) ||
 547                                  ($mode == 'icons' && !empty($cur_img[$img]))))
 548                              {
 549                                  $replace_sql = ($mode == 'smilies') ? $code : $img;
 550                                  $sql = array(
 551                                      $fields . '_url'        => $img,
 552                                      $fields . '_height'        => (int) $height,
 553                                      $fields . '_width'        => (int) $width,
 554                                      'display_on_posting'    => (int) $display_on_posting,
 555                                  );
 556   
 557                                  if ($mode == 'smilies')
 558                                  {
 559                                      $sql = array_merge($sql, array(
 560                                          'emotion'                => $emotion,
 561                                      ));
 562                                  }
 563   
 564                                  $sql = "UPDATE $table SET " . $db->sql_build_array('UPDATE', $sql) . "
 565                                      WHERE $field_sql = '" . $db->sql_escape($replace_sql) . "'";
 566                                  $db->sql_query($sql);
 567                              }
 568                              else
 569                              {
 570                                  ++$order;
 571   
 572                                  $sql = array(
 573                                      $fields . '_url'    => $img,
 574                                      $fields . '_height'    => (int) $height,
 575                                      $fields . '_width'    => (int) $width,
 576                                      $fields . '_order'    => (int) $order,
 577                                      'display_on_posting'=> (int) $display_on_posting,
 578                                  );
 579   
 580                                  if ($mode == 'smilies')
 581                                  {
 582                                      $sql = array_merge($sql, array(
 583                                          'code'                => $code,
 584                                          'emotion'            => $emotion,
 585                                      ));
 586                                  }
 587                                  $db->sql_query("INSERT INTO $table " . $db->sql_build_array('INSERT', $sql));
 588                              }
 589                          }
 590                      }
 591   
 592                      $cache->destroy('_icons');
 593                      $cache->destroy('sql', $table);
 594   
 595                      trigger_error($user->lang[$lang . '_IMPORT_SUCCESS'] . adm_back_link($this->u_action));
 596                  }
 597                  else
 598                  {
 599                      $pak_options = '';
 600   
 601                      foreach ($_paks as $pak)
 602                      {
 603                          $pak_options .= '<option value="' . $pak . '">' . htmlspecialchars($pak) . '</option>';
 604                      }
 605   
 606                      $template->assign_vars(array(
 607                          'S_CHOOSE_PAK'        => true,
 608                          'S_PAK_OPTIONS'        => $pak_options,
 609   
 610                          'L_TITLE'            => $user->lang['ACP_' . $lang],
 611                          'L_EXPLAIN'            => $user->lang['ACP_' . $lang . '_EXPLAIN'],
 612                          'L_NO_PAK_OPTIONS'    => $user->lang['NO_' . $lang . '_PAK'],
 613                          'L_CURRENT'            => $user->lang['CURRENT_' . $lang],
 614                          'L_CURRENT_EXPLAIN'    => $user->lang['CURRENT_' . $lang . '_EXPLAIN'],
 615                          'L_IMPORT_SUBMIT'    => $user->lang['IMPORT_' . $lang],
 616   
 617                          'U_BACK'        => $this->u_action,
 618                          'U_ACTION'        => $this->u_action . '&amp;action=import',
 619                          )
 620                      );
 621                  }
 622              break;
 623   
 624              case 'export':
 625   
 626                  $this->page_title = 'EXPORT_' . $lang;
 627                  $this->tpl_name = 'message_body';
 628   
 629                  $template->assign_vars(array(
 630                      'MESSAGE_TITLE'        => $user->lang['EXPORT_' . $lang],
 631                      'MESSAGE_TEXT'        => sprintf($user->lang['EXPORT_' . $lang . '_EXPLAIN'], '<a href="' . $this->u_action . '&amp;action=send">', '</a>'),
 632   
 633                      'S_USER_NOTICE'        => true,
 634                      )
 635                  );
 636   
 637                  return;
 638   
 639              break;
 640   
 641              case 'send':
 642   
 643                  $sql = "SELECT *
 644                      FROM $table
 645                      ORDER BY {$fields}_order";
 646                  $result = $db->sql_query($sql);
 647   
 648                  $pak = '';
 649                  while ($row = $db->sql_fetchrow($result))
 650                  {
 651                      $pak .= "'" . addslashes($row[$fields . '_url']) . "', ";
 652                      $pak .= "'" . addslashes($row[$fields . '_width']) . "', ";
 653                      $pak .= "'" . addslashes($row[$fields . '_height']) . "', ";
 654                      $pak .= "'" . addslashes($row['display_on_posting']) . "', ";
 655   
 656                      if ($mode == 'smilies')
 657                      {
 658                          $pak .= "'" . addslashes($row['emotion']) . "', ";
 659                          $pak .= "'" . addslashes($row['code']) . "', ";
 660                      }
 661   
 662                      $pak .= "\n";
 663                  }
 664                  $db->sql_freeresult($result);
 665   
 666                  if ($pak != '')
 667                  {
 668                      garbage_collection();
 669   
 670                      header('Pragma: public');
 671   
 672                      // Send out the Headers
 673                      header('Content-Type: text/x-delimtext; name="' . $mode . '.pak"');
 674                      header('Content-Disposition: inline; filename="' . $mode . '.pak"');
 675                      echo $pak;
 676   
 677                      flush();
 678                      exit;
 679                  }
 680                  else
 681                  {
 682                      trigger_error($user->lang['NO_' . strtoupper($fields) . '_EXPORT'] . adm_back_link($this->u_action), E_USER_WARNING);
 683                  }
 684   
 685              break;
 686   
 687              case 'delete':
 688   
 689                  if (confirm_box(true))
 690                  {
 691                      $sql = "DELETE FROM $table
 692                          WHERE {$fields}_id = $icon_id";
 693                      $db->sql_query($sql);
 694   
 695                      switch ($mode)
 696                      {
 697                          case 'smilies':
 698                          break;
 699   
 700                          case 'icons':
 701                              // Reset appropriate icon_ids
 702                              $db->sql_query('UPDATE ' . TOPICS_TABLE . "
 703                                  SET icon_id = 0
 704                                  WHERE icon_id = $icon_id");
 705   
 706                              $db->sql_query('UPDATE ' . POSTS_TABLE . "
 707                                  SET icon_id = 0
 708                                  WHERE icon_id = $icon_id");
 709                          break;
 710                      }
 711   
 712                      $notice = $user->lang[$lang . '_DELETED'];
 713   
 714                      $cache->destroy('_icons');
 715                      $cache->destroy('sql', $table);
 716                  }
 717                  else
 718                  {
 719                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 720                          'i'            => $id,
 721                          'mode'        => $mode,
 722                          'id'        => $icon_id,
 723                          'action'    => 'delete',
 724                      )));
 725                  }
 726   
 727              break;
 728   
 729              case 'move_up':
 730              case 'move_down':
 731   
 732                  // Get current order id...
 733                  $sql = "SELECT {$fields}_order as current_order
 734                      FROM $table
 735                      WHERE {$fields}_id = $icon_id";
 736                  $result = $db->sql_query($sql);
 737                  $current_order = (int) $db->sql_fetchfield('current_order');
 738                  $db->sql_freeresult($result);
 739   
 740                  if ($current_order == 0 && $action == 'move_up')
 741                  {
 742                      break;
 743                  }
 744   
 745                  // on move_down, switch position with next order_id...
 746                  // on move_up, switch position with previous order_id...
 747                  $switch_order_id = ($action == 'move_down') ? $current_order + 1 : $current_order - 1;
 748   
 749                  //
 750                  $sql = "UPDATE $table
 751                      SET {$fields}_order = $current_order
 752                      WHERE {$fields}_order = $switch_order_id
 753                          AND {$fields}_id <> $icon_id";
 754                  $db->sql_query($sql);
 755   
 756                  // Only update the other entry too if the previous entry got updated
 757                  if ($db->sql_affectedrows())
 758                  {
 759                      $sql = "UPDATE $table
 760                          SET {$fields}_order = $switch_order_id
 761                          WHERE {$fields}_order = $current_order
 762                              AND {$fields}_id = $icon_id";
 763                      $db->sql_query($sql);
 764                  }
 765   
 766                  $cache->destroy('_icons');
 767                  $cache->destroy('sql', $table);
 768   
 769              break;
 770          }
 771   
 772          // By default, check that image_order is valid and fix it if necessary
 773          $sql = "SELECT {$fields}_id AS order_id, {$fields}_order AS fields_order
 774              FROM $table
 775              ORDER BY display_on_posting DESC, {$fields}_order";
 776          $result = $db->sql_query($sql);
 777   
 778          if ($row = $db->sql_fetchrow($result))
 779          {
 780              $order = 0;
 781              do
 782              {
 783                  ++$order;
 784                  if ($row['fields_order'] != $order)
 785                  {
 786                      $db->sql_query("UPDATE $table
 787                          SET {$fields}_order = $order
 788                          WHERE {$fields}_id = " . $row['order_id']);
 789                  }
 790              }
 791              while ($row = $db->sql_fetchrow($result));
 792          }
 793          $db->sql_freeresult($result);
 794   
 795          $template->assign_vars(array(
 796              'L_TITLE'            => $user->lang['ACP_' . $lang],
 797              'L_EXPLAIN'            => $user->lang['ACP_' . $lang . '_EXPLAIN'],
 798              'L_IMPORT'            => $user->lang['IMPORT_' . $lang],
 799              'L_EXPORT'            => $user->lang['EXPORT_' . $lang],
 800              'L_NOT_DISPLAYED'    => $user->lang[$lang . '_NOT_DISPLAYED'],
 801              'L_ICON_ADD'        => $user->lang['ADD_' . $lang],
 802              'L_ICON_EDIT'        => $user->lang['EDIT_' . $lang],
 803   
 804              'NOTICE'            => $notice,
 805              'COLSPAN'            => ($mode == 'smilies') ? 5 : 3,
 806   
 807              'S_SMILIES'            => ($mode == 'smilies') ? true : false,
 808   
 809              'U_ACTION'            => $this->u_action,
 810              'U_IMPORT'            => $this->u_action . '&amp;action=import',
 811              'U_EXPORT'            => $this->u_action . '&amp;action=export',
 812              )
 813          );
 814   
 815          $spacer = false;
 816   
 817          $sql = "SELECT *
 818              FROM $table
 819              ORDER BY {$fields}_order ASC";
 820          $result = $db->sql_query($sql);
 821   
 822          while ($row = $db->sql_fetchrow($result))
 823          {
 824              $alt_text = ($mode == 'smilies') ? $row['code'] : '';
 825   
 826              $template->assign_block_vars('items', array(
 827                  'S_SPACER'        => (!$spacer && !$row['display_on_posting']) ? true : false,
 828                  'ALT_TEXT'        => $alt_text,
 829                  'IMG_SRC'        => $phpbb_root_path . $img_path . '/' . $row[$fields . '_url'],
 830                  'WIDTH'            => $row[$fields . '_width'],
 831                  'HEIGHT'        => $row[$fields . '_height'],
 832                  'CODE'            => (isset($row['code'])) ? $row['code'] : '',
 833                  'EMOTION'        => (isset($row['emotion'])) ? $row['emotion'] : '',
 834                  'U_EDIT'        => $this->u_action . '&amp;action=edit&amp;id=' . $row[$fields . '_id'],
 835                  'U_DELETE'        => $this->u_action . '&amp;action=delete&amp;id=' . $row[$fields . '_id'],
 836                  'U_MOVE_UP'        => $this->u_action . '&amp;action=move_up&amp;id=' . $row[$fields . '_id'],
 837                  'U_MOVE_DOWN'    => $this->u_action . '&amp;action=move_down&amp;id=' . $row[$fields . '_id'])
 838              );
 839   
 840              if (!$spacer && !$row['display_on_posting'])
 841              {
 842                  $spacer = true;
 843              }
 844          }
 845          $db->sql_freeresult($result);
 846      }
 847  }
 848   
 849  ?>