[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/includes/acp/ -> acp_icons.php (source)

   1  <?php
   2  /**
   3  *
   4  * @package acp
   5  * @version $Id$
   6  * @copyright (c) 2005 phpBB Group
   7  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
   8  *
   9  */
  10  
  11  /**
  12  * @ignore
  13  */
  14  if (!defined('IN_PHPBB'))
  15  {
  16      exit;
  17  }
  18  
  19  /**
  20  * @todo [smilies] check regular expressions for special char replacements (stored specialchared in db)
  21  * @package acp
  22  */
  23  class acp_icons
  24  {
  25      var $u_action;
  26  
  27  	function main($id, $mode)
  28      {
  29          global $db, $user, $auth, $template, $cache;
  30          global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
  31  
  32          $user->add_lang('acp/posting');
  33  
  34          // Set up general vars
  35          $action = request_var('action', '');
  36          $action = (isset($_POST['add'])) ? 'add' : $action;
  37          $action = (isset($_POST['edit'])) ? 'edit' : $action;
  38          $action = (isset($_POST['import'])) ? 'import' : $action;
  39          $icon_id = request_var('id', 0);
  40  
  41          $mode = ($mode == 'smilies') ? 'smilies' : 'icons';
  42  
  43          $this->tpl_name = 'acp_icons';
  44  
  45          // What are we working on?
  46          switch ($mode)
  47          {
  48              case 'smilies':
  49                  $table = SMILIES_TABLE;
  50                  $lang = 'SMILIES';
  51                  $fields = 'smiley';
  52                  $img_path = $config['smilies_path'];
  53              break;
  54  
  55              case 'icons':
  56                  $table = ICONS_TABLE;
  57                  $lang = 'ICONS';
  58                  $fields = 'icons';
  59                  $img_path = $config['icons_path'];
  60              break;
  61          }
  62  
  63          $this->page_title = 'ACP_' . $lang;
  64  
  65          // Clear some arrays
  66          $_images = $_paks = array();
  67          $notice = '';
  68  
  69          // Grab file list of paks and images
  70          if ($action == 'edit' || $action == 'add' || $action == 'import')
  71          {
  72              $imglist = filelist($phpbb_root_path . $img_path, '');
  73  
  74              foreach ($imglist as $path => $img_ary)
  75              {
  76                  if (empty($img_ary))
  77                  {
  78                      continue;
  79                  }
  80  
  81                  asort($img_ary, SORT_STRING);
  82  
  83                  foreach ($img_ary as $img)
  84                  {
  85                      $img_size = getimagesize($phpbb_root_path . $img_path . '/' . $path . $img);
  86  
  87                      if (!$img_size[0] || !$img_size[1] || strlen($img) > 255)
  88                      {
  89                          continue;
  90                      }
  91  
  92                      // adjust the width and height to be lower than 128px while perserving the aspect ratio (for icons)
  93                      if ($mode == 'icons')
  94                      {
  95                          if ($img_size[0] > 127 && $img_size[0] > $img_size[1])
  96                          {
  97                              $img_size[1] = (int) ($img_size[1] * (127 / $img_size[0]));
  98                              $img_size[0] = 127;
  99                          }
 100                          else if ($img_size[1] > 127)
 101                          {
 102                              $img_size[0] = (int) ($img_size[0] * (127 / $img_size[1]));
 103                              $img_size[1] = 127;
 104                          }
 105                      }
 106  
 107                      $_images[$path . $img]['file'] = $path . $img;
 108                      $_images[$path . $img]['width'] = $img_size[0];
 109                      $_images[$path . $img]['height'] = $img_size[1];
 110                  }
 111              }
 112              unset($imglist);
 113  
 114              if ($dir = @opendir($phpbb_root_path . $img_path))
 115              {
 116                  while (($file = readdir($dir)) !== false)
 117                  {
 118                      if (is_file($phpbb_root_path . $img_path . '/' . $file) && preg_match('#\.pak$#i', $file))
 119                      {
 120                          $_paks[] = $file;
 121                      }
 122                  }
 123                  closedir($dir);
 124  
 125                  if (!empty($_paks))
 126                  {
 127                      asort($_paks, SORT_STRING);
 128                  }
 129              }
 130          }
 131  
 132          // What shall we do today? Oops, I believe that's trademarked ...
 133          switch ($action)
 134          {
 135              case 'edit':
 136                  unset($_images);
 137                  $_images = array();
 138  
 139              // no break;
 140  
 141              case 'add':
 142  
 143                  $smilies = $default_row = array();
 144                  $smiley_options = $order_list = $add_order_list = '';
 145  
 146                  if ($action == 'add' && $mode == 'smilies')
 147                  {
 148                      $sql = 'SELECT *
 149                          FROM ' . SMILIES_TABLE . '
 150                          ORDER BY smiley_order';
 151                      $result = $db->sql_query($sql);
 152  
 153                      while ($row = $db->sql_fetchrow($result))
 154                      {
 155                          if (empty($smilies[$row['smiley_url']]))
 156                          {
 157                              $smilies[$row['smiley_url']] = $row;
 158                          }
 159                      }
 160                      $db->sql_freeresult($result);
 161  
 162                      if (sizeof($smilies))
 163                      {
 164                          foreach ($smilies as $row)
 165                          {
 166                              $selected = false;
 167  
 168                              if (!$smiley_options)
 169                              {
 170                                  $selected = true;
 171                                  $default_row = $row;
 172                              }
 173                              $smiley_options .= '<option value="' . $row['smiley_url'] . '"' . (($selected) ? ' selected="selected"' : '') . '>' . $row['smiley_url'] . '</option>';
 174  
 175                              $template->assign_block_vars('smile', array(
 176                                  'SMILEY_URL'    => addslashes($row['smiley_url']),
 177                                  'CODE'            => addslashes($row['code']),
 178                                  'EMOTION'        => addslashes($row['emotion']),
 179                                  'WIDTH'            => $row['smiley_width'],
 180                                  'HEIGHT'        => $row['smiley_height'],
 181                                  'ORDER'            => $row['smiley_order'] + 1,
 182                              ));
 183                          }
 184                      }
 185                  }
 186  
 187                  $sql = "SELECT *
 188                      FROM $table
 189                      ORDER BY {$fields}_order " . (($icon_id || $action == 'add') ? 'DESC' : 'ASC');
 190                  $result = $db->sql_query($sql);
 191  
 192                  $data = array();
 193                  $after = false;
 194                  $display = 0;
 195                  $order_lists = array('', '');
 196                  $add_order_lists = array('', '');
 197                  $display_count = 0;
 198  
 199                  while ($row = $db->sql_fetchrow($result))
 200                  {
 201                      if ($action == 'add')
 202                      {
 203                          unset($_images[$row[$fields . '_url']]);
 204                      }
 205  
 206  
 207                      if ($row[$fields . '_id'] == $icon_id)
 208                      {
 209                          $after = true;
 210                          $display = $row['display_on_posting'];
 211                          $data[$row[$fields . '_url']] = $row;
 212                      }
 213                      else
 214                      {
 215                          if ($action == 'edit' && !$icon_id)
 216                          {
 217                              $data[$row[$fields . '_url']] = $row;
 218                          }
 219  
 220                          $selected = '';
 221                          if (!empty($after))
 222                          {
 223                              $selected = ' selected="selected"';
 224                              $after = false;
 225                          }
 226                          if ($row['display_on_posting'])
 227                          {
 228                              $display_count++;
 229                          }
 230                          $after_txt = ($mode == 'smilies') ? $row['code'] : $row['icons_url'];
 231                          $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']];
 232  
 233                          if (!empty($default_row))
 234                          {
 235                              $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']];
 236                          }
 237                      }
 238                  }
 239                  $db->sql_freeresult($result);
 240  
 241                  $order_list = '<option value="1"' . ((!isset($after)) ? ' selected="selected"' : '') . '>' . $user->lang['FIRST'] . '</option>';
 242                  $add_order_list = '<option value="1">' . $user->lang['FIRST'] . '</option>';
 243  
 244                  if ($action == 'add')
 245                  {
 246                      $data = $_images;
 247                  }
 248  
 249                  $colspan = (($mode == 'smilies') ? 7 : 5);
 250                  $colspan += ($icon_id) ? 1 : 0;
 251                  $colspan += ($action == 'add') ? 2 : 0;
 252  
 253                  $template->assign_vars(array(
 254                      'S_EDIT'        => true,
 255                      'S_SMILIES'        => ($mode == 'smilies') ? true : false,
 256                      'S_ADD'            => ($action == 'add') ? true : false,
 257  
 258                      'S_ORDER_LIST_DISPLAY'        => $order_list . $order_lists[1],
 259                      'S_ORDER_LIST_UNDISPLAY'    => $order_list . $order_lists[0],
 260                      'S_ORDER_LIST_DISPLAY_COUNT'    => $display_count + 1,
 261  
 262                      'L_TITLE'        => $user->lang['ACP_' . $lang],
 263                      'L_EXPLAIN'        => $user->lang['ACP_' . $lang . '_EXPLAIN'],
 264                      'L_CONFIG'        => $user->lang[$lang . '_CONFIG'],
 265                      'L_URL'            => $user->lang[$lang . '_URL'],
 266                      'L_LOCATION'    => $user->lang[$lang . '_LOCATION'],
 267                      'L_WIDTH'        => $user->lang[$lang . '_WIDTH'],
 268                      'L_HEIGHT'        => $user->lang[$lang . '_HEIGHT'],
 269                      'L_ORDER'        => $user->lang[$lang . '_ORDER'],
 270                      'L_NO_ICONS'    => $user->lang['NO_' . $lang . '_' . strtoupper($action)],
 271  
 272                      'COLSPAN'        => $colspan,
 273                      'ID'            => $icon_id,
 274  
 275                      'U_BACK'        => $this->u_action,
 276                      'U_ACTION'        => $this->u_action . '&amp;action=' . (($action == 'add') ? 'create' : 'modify'),
 277                  ));
 278  
 279                  foreach ($data as $img => $img_row)
 280                  {
 281                      $template->assign_block_vars('items', array(
 282                          'IMG'        => $img,
 283                          'A_IMG'        => addslashes($img),
 284                          'IMG_SRC'    => $phpbb_root_path . $img_path . '/' . $img,
 285  
 286                          'CODE'        => ($mode == 'smilies' && isset($img_row['code'])) ? $img_row['code'] : '',
 287                          'EMOTION'    => ($mode == 'smilies' && isset($img_row['emotion'])) ? $img_row['emotion'] : '',
 288  
 289                          'S_ID'                => (isset($img_row[$fields . '_id'])) ? true : false,
 290                          'ID'                => (isset($img_row[$fields . '_id'])) ? $img_row[$fields . '_id'] : 0,
 291                          'WIDTH'                => (!empty($img_row[$fields .'_width'])) ? $img_row[$fields .'_width'] : $img_row['width'],
 292                          'HEIGHT'            => (!empty($img_row[$fields .'_height'])) ? $img_row[$fields .'_height'] : $img_row['height'],
 293                          'POSTING_CHECKED'    => (!empty($img_row['display_on_posting']) || $action == 'add') ? ' checked="checked"' : '',
 294                      ));
 295                  }
 296  
 297                  // Ok, another row for adding an addition code for a pre-existing image...
 298                  if ($action == 'add' && $mode == 'smilies' && sizeof($smilies))
 299                  {
 300                      $template->assign_vars(array(
 301                          'S_ADD_CODE'        => true,
 302  
 303                          'S_IMG_OPTIONS'        => $smiley_options,
 304  
 305                          'S_ADD_ORDER_LIST_DISPLAY'        => $add_order_list . $add_order_lists[1],
 306                          'S_ADD_ORDER_LIST_UNDISPLAY'    => $add_order_list . $add_order_lists[0],
 307  
 308                          'IMG_SRC'            => $phpbb_root_path . $img_path . '/' . $default_row['smiley_url'],
 309                          'IMG_PATH'            => $img_path,
 310                          'PHPBB_ROOT_PATH'    => $phpbb_root_path,
 311  
 312                          'CODE'                => $default_row['code'],
 313                          'EMOTION'            => $default_row['emotion'],
 314  
 315                          'WIDTH'                => $default_row['smiley_width'],
 316                          'HEIGHT'            => $default_row['smiley_height'],
 317                      ));
 318                  }
 319  
 320                  return;
 321  
 322              break;
 323  
 324              case 'create':
 325              case 'modify':
 326  
 327                  // Get items to create/modify
 328                  $images = (isset($_POST['image'])) ? array_keys(request_var('image', array('' => 0))) : array();
 329  
 330                  // Now really get the items
 331                  $image_id        = (isset($_POST['id'])) ? request_var('id', array('' => 0)) : array();
 332                  $image_order    = (isset($_POST['order'])) ? request_var('order', array('' => 0)) : array();
 333                  $image_width    = (isset($_POST['width'])) ? request_var('width', array('' => 0)) : array();
 334                  $image_height    = (isset($_POST['height'])) ? request_var('height', array('' => 0)) : array();
 335                  $image_add        = (isset($_POST['add_img'])) ? request_var('add_img', array('' => 0)) : array();
 336                  $image_emotion    = utf8_normalize_nfc(request_var('emotion', array('' => ''), true));
 337                  $image_code        = utf8_normalize_nfc(request_var('code', array('' => ''), true));
 338                  $image_display_on_posting = (isset($_POST['display_on_posting'])) ? request_var('display_on_posting', array('' => 0)) : array();
 339  
 340                  // Ok, add the relevant bits if we are adding new codes to existing emoticons...
 341                  if (!empty($_POST['add_additional_code']))
 342                  {
 343                      $add_image            = request_var('add_image', '');
 344                      $add_code            = utf8_normalize_nfc(request_var('add_code', '', true));
 345                      $add_emotion        = utf8_normalize_nfc(request_var('add_emotion', '', true));
 346  
 347                      if ($add_image && $add_emotion && $add_code)
 348                      {
 349                          $images[] = $add_image;
 350                          $image_add[$add_image] = true;
 351  
 352                          $image_code[$add_image] = $add_code;
 353                          $image_emotion[$add_image] = $add_emotion;
 354                          $image_width[$add_image] = request_var('add_width', 0);
 355                          $image_height[$add_image] = request_var('add_height', 0);
 356  
 357                          if (!empty($_POST['add_display_on_posting']))
 358                          {
 359                              $image_display_on_posting[$add_image] = 1;
 360                          }
 361  
 362                          $image_order[$add_image] = request_var('add_order', 0);
 363                      }
 364                  }
 365  
 366                  if ($mode == 'smilies' && $action == 'create')
 367                  {
 368                      $smiley_count = $this->item_count($table);
 369  
 370                      $addable_smileys_count = sizeof($images);
 371                      foreach ($images as $image)
 372                      {
 373                          if (!isset($image_add[$image]))
 374                          {
 375                              --$addable_smileys_count;
 376                          }
 377                      }
 378  
 379                      if ($smiley_count + $addable_smileys_count > SMILEY_LIMIT)
 380                      {
 381                          trigger_error(sprintf($user->lang['TOO_MANY_SMILIES'], SMILEY_LIMIT) . adm_back_link($this->u_action), E_USER_WARNING);
 382                      }
 383                  }
 384  
 385                  $icons_updated = 0;
 386                  $errors = array();
 387                  foreach ($images as $image)
 388                  {
 389                      if ($mode == 'smilies' && ($image_emotion[$image] == '' || $image_code[$image] == ''))
 390                      {
 391                          $errors[$image] = 'SMILIE_NO_' . (($image_emotion[$image] == '') ? 'EMOTION' : 'CODE');
 392                      }
 393                      else if ($action == 'create' && !isset($image_add[$image]))
 394                      {
 395                          // skip images where add wasn't checked
 396                      }
 397                      else if (!file_exists($phpbb_root_path . $img_path . '/' . $image))
 398                      {
 399                          $errors[$image] = 'SMILIE_NO_FILE';
 400                      }
 401                      else
 402                      {
 403                          if ($image_width[$image] == 0 || $image_height[$image] == 0)
 404                          {
 405                              $img_size = getimagesize($phpbb_root_path . $img_path . '/' . $image);
 406                              $image_width[$image] = $img_size[0];
 407                              $image_height[$image] = $img_size[1];
 408                          }
 409  
 410                          // Adjust image width/height for icons
 411                          if ($mode == 'icons')
 412                          {
 413                              if ($image_width[$image] > 127 && $image_width[$image] > $image_height[$image])
 414                              {
 415                                  $image_height[$image] = (int) ($image_height[$image] * (127 / $image_width[$image]));
 416                                  $image_width[$image] = 127;
 417                              }
 418                              else if ($image_height[$image] > 127)
 419                              {
 420                                  $image_width[$image] = (int) ($image_width[$image] * (127 / $image_height[$image]));
 421                                  $image_height[$image] = 127;
 422                              }
 423                          }
 424  
 425                          $img_sql = array(
 426                              $fields . '_url'        => $image,
 427                              $fields . '_width'        => $image_width[$image],
 428                              $fields . '_height'        => $image_height[$image],
 429                              'display_on_posting'    => (isset($image_display_on_posting[$image])) ? 1 : 0,
 430                          );
 431  
 432                          if ($mode == 'smilies')
 433                          {
 434                              $img_sql = array_merge($img_sql, array(
 435                                  'emotion'    => $image_emotion[$image],
 436                                  'code'        => $image_code[$image])
 437                              );
 438                          }
 439  
 440                          // Image_order holds the 'new' order value
 441                          if (!empty($image_order[$image]))
 442                          {
 443                              $img_sql = array_merge($img_sql, array(
 444                                  $fields . '_order'    =>    $image_order[$image])
 445                              );
 446  
 447                              // Since we always add 'after' an item, we just need to increase all following + the current by one
 448                              $sql = "UPDATE $table
 449                                  SET {$fields}_order = {$fields}_order + 1
 450                                  WHERE {$fields}_order >= {$image_order[$image]}";
 451                              $db->sql_query($sql);
 452  
 453                              // If we adjust the order, we need to adjust all other orders too - they became inaccurate...
 454                              foreach ($image_order as $_image => $_order)
 455                              {
 456                                  if ($_image == $image)
 457                                  {
 458                                      continue;
 459                                  }
 460  
 461                                  if ($_order >= $image_order[$image])
 462                                  {
 463                                      $image_order[$_image]++;
 464                                  }
 465                              }
 466                          }
 467  
 468                          if ($action == 'modify'  && !empty($image_id[$image]))
 469                          {
 470                              $sql = "UPDATE $table
 471                                  SET " . $db->sql_build_array('UPDATE', $img_sql) . "
 472                                  WHERE {$fields}_id = " . $image_id[$image];
 473                              $db->sql_query($sql);
 474                              $icons_updated++;
 475                          }
 476                          else if ($action !== 'modify')
 477                          {
 478                              $sql = "INSERT INTO $table " . $db->sql_build_array('INSERT', $img_sql);
 479                              $db->sql_query($sql);
 480                              $icons_updated++;
 481                          }
 482  
 483                       }
 484                  }
 485  
 486                  $cache->destroy('_icons');
 487                  $cache->destroy('sql', $table);
 488  
 489                  $level = E_USER_NOTICE;
 490                  switch ($icons_updated)
 491                  {
 492                      case 0:
 493                          $suc_lang = "{$lang}_NONE";
 494                          $level = E_USER_WARNING;
 495                          break;
 496  
 497                      case 1:
 498                          $suc_lang = "{$lang}_ONE";
 499                          break;
 500  
 501                      default:
 502                          $suc_lang = $lang;
 503                  }
 504                  $errormsgs = '';
 505                  foreach ($errors as $img => $error)
 506                  {
 507                      $errormsgs .= '<br />' . sprintf($user->lang[$error], $img);
 508                  }
 509                  if ($action == 'modify')
 510                  {
 511                      trigger_error($user->lang[$suc_lang . '_EDITED'] . $errormsgs . adm_back_link($this->u_action), $level);
 512                  }
 513                  else
 514                  {
 515                      trigger_error($user->lang[$suc_lang . '_ADDED'] . $errormsgs . adm_back_link($this->u_action), $level);
 516                  }
 517  
 518              break;
 519  
 520              case 'import':
 521  
 522                  $pak = request_var('pak', '');
 523                  $current = request_var('current', '');
 524  
 525                  if ($pak != '')
 526                  {
 527                      $order = 0;
 528  
 529                      if (!($pak_ary = @file($phpbb_root_path . $img_path . '/' . $pak)))
 530                      {
 531                          trigger_error($user->lang['PAK_FILE_NOT_READABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
 532                      }
 533  
 534                      // Make sure the pak_ary is valid
 535                      foreach ($pak_ary as $pak_entry)
 536                      {
 537                          if (preg_match_all("#'(.*?)', ?#", $pak_entry, $data))
 538                          {
 539                              if ((sizeof($data[1]) != 4 && $mode == 'icons') ||
 540                                  ((sizeof($data[1]) != 6 || (empty($data[1][4]) || empty($data[1][5]))) && $mode == 'smilies' ))
 541                              {
 542                                  trigger_error($user->lang['WRONG_PAK_TYPE'] . adm_back_link($this->u_action), E_USER_WARNING);
 543                              }
 544                          }
 545                          else
 546                          {
 547                              trigger_error($user->lang['WRONG_PAK_TYPE'] . adm_back_link($this->u_action), E_USER_WARNING);
 548                          }
 549                      }
 550  
 551                      // The user has already selected a smilies_pak file
 552                      if ($current == 'delete')
 553                      {
 554                          switch ($db->sql_layer)
 555                          {
 556                              case 'sqlite':
 557                              case 'firebird':
 558                                  $db->sql_query('DELETE FROM ' . $table);
 559                              break;
 560  
 561                              default:
 562                                  $db->sql_query('TRUNCATE TABLE ' . $table);
 563                              break;
 564                          }
 565  
 566                          switch ($mode)
 567                          {
 568                              case 'smilies':
 569                              break;
 570  
 571                              case 'icons':
 572                                  // Reset all icon_ids
 573                                  $db->sql_query('UPDATE ' . TOPICS_TABLE . ' SET icon_id = 0');
 574                                  $db->sql_query('UPDATE ' . POSTS_TABLE . ' SET icon_id = 0');
 575                              break;
 576                          }
 577                      }
 578                      else
 579                      {
 580                          $cur_img = array();
 581  
 582                          $field_sql = ($mode == 'smilies') ? 'code' : 'icons_url';
 583  
 584                          $sql = "SELECT $field_sql
 585                              FROM $table";
 586                          $result = $db->sql_query($sql);
 587  
 588                          while ($row = $db->sql_fetchrow($result))
 589                          {
 590                              ++$order;
 591                              $cur_img[$row[$field_sql]] = 1;
 592                          }
 593                          $db->sql_freeresult($result);
 594                      }
 595  
 596                      if ($mode == 'smilies')
 597                      {
 598                          $smiley_count = $this->item_count($table);
 599                          if ($smiley_count + sizeof($pak_ary) > SMILEY_LIMIT)
 600                          {
 601                              trigger_error(sprintf($user->lang['TOO_MANY_SMILIES'], SMILEY_LIMIT) . adm_back_link($this->u_action), E_USER_WARNING);
 602                          }
 603                      }
 604  
 605                      foreach ($pak_ary as $pak_entry)
 606                      {
 607                          $data = array();
 608                          if (preg_match_all("#'(.*?)', ?#", $pak_entry, $data))
 609                          {
 610                              if ((sizeof($data[1]) != 4 && $mode == 'icons') ||
 611                                  (sizeof($data[1]) != 6 && $mode == 'smilies'))
 612                              {
 613                                  trigger_error($user->lang['WRONG_PAK_TYPE'] . adm_back_link($this->u_action), E_USER_WARNING);
 614                              }
 615  
 616                              // Stripslash here because it got addslashed before... (on export)
 617                              $img = stripslashes($data[1][0]);
 618                              $width = stripslashes($data[1][1]);
 619                              $height = stripslashes($data[1][2]);
 620                              $display_on_posting = stripslashes($data[1][3]);
 621  
 622                              if (isset($data[1][4]) && isset($data[1][5]))
 623                              {
 624                                  $emotion = stripslashes($data[1][4]);
 625                                  $code = stripslashes($data[1][5]);
 626                              }
 627  
 628                              if ($current == 'replace' &&
 629                                  (($mode == 'smilies' && !empty($cur_img[$code])) ||
 630                                  ($mode == 'icons' && !empty($cur_img[$img]))))
 631                              {
 632                                  $replace_sql = ($mode == 'smilies') ? $code : $img;
 633                                  $sql = array(
 634                                      $fields . '_url'        => $img,
 635                                      $fields . '_height'        => (int) $height,
 636                                      $fields . '_width'        => (int) $width,
 637                                      'display_on_posting'    => (int) $display_on_posting,
 638                                  );
 639  
 640                                  if ($mode == 'smilies')
 641                                  {
 642                                      $sql = array_merge($sql, array(
 643                                          'emotion'                => $emotion,
 644                                      ));
 645                                  }
 646  
 647                                  $sql = "UPDATE $table SET " . $db->sql_build_array('UPDATE', $sql) . "
 648                                      WHERE $field_sql = '" . $db->sql_escape($replace_sql) . "'";
 649                                  $db->sql_query($sql);
 650                              }
 651                              else
 652                              {
 653                                  ++$order;
 654  
 655                                  $sql = array(
 656                                      $fields . '_url'    => $img,
 657                                      $fields . '_height'    => (int) $height,
 658                                      $fields . '_width'    => (int) $width,
 659                                      $fields . '_order'    => (int) $order,
 660                                      'display_on_posting'=> (int) $display_on_posting,
 661                                  );
 662  
 663                                  if ($mode == 'smilies')
 664                                  {
 665                                      $sql = array_merge($sql, array(
 666                                          'code'                => $code,
 667                                          'emotion'            => $emotion,
 668                                      ));
 669                                  }
 670                                  $db->sql_query("INSERT INTO $table " . $db->sql_build_array('INSERT', $sql));
 671                              }
 672                          }
 673                      }
 674  
 675                      $cache->destroy('_icons');
 676                      $cache->destroy('sql', $table);
 677  
 678                      trigger_error($user->lang[$lang . '_IMPORT_SUCCESS'] . adm_back_link($this->u_action));
 679                  }
 680                  else
 681                  {
 682                      $pak_options = '';
 683  
 684                      foreach ($_paks as $pak)
 685                      {
 686                          $pak_options .= '<option value="' . $pak . '">' . htmlspecialchars($pak) . '</option>';
 687                      }
 688  
 689                      $template->assign_vars(array(
 690                          'S_CHOOSE_PAK'        => true,
 691                          'S_PAK_OPTIONS'        => $pak_options,
 692  
 693                          'L_TITLE'            => $user->lang['ACP_' . $lang],
 694                          'L_EXPLAIN'            => $user->lang['ACP_' . $lang . '_EXPLAIN'],
 695                          'L_NO_PAK_OPTIONS'    => $user->lang['NO_' . $lang . '_PAK'],
 696                          'L_CURRENT'            => $user->lang['CURRENT_' . $lang],
 697                          'L_CURRENT_EXPLAIN'    => $user->lang['CURRENT_' . $lang . '_EXPLAIN'],
 698                          'L_IMPORT_SUBMIT'    => $user->lang['IMPORT_' . $lang],
 699  
 700                          'U_BACK'        => $this->u_action,
 701                          'U_ACTION'        => $this->u_action . '&amp;action=import',
 702                          )
 703                      );
 704                  }
 705              break;
 706  
 707              case 'export':
 708  
 709                  $this->page_title = 'EXPORT_' . $lang;
 710                  $this->tpl_name = 'message_body';
 711  
 712                  $template->assign_vars(array(
 713                      'MESSAGE_TITLE'        => $user->lang['EXPORT_' . $lang],
 714                      'MESSAGE_TEXT'        => sprintf($user->lang['EXPORT_' . $lang . '_EXPLAIN'], '<a href="' . $this->u_action . '&amp;action=send">', '</a>'),
 715  
 716                      'S_USER_NOTICE'        => true,
 717                      )
 718                  );
 719  
 720                  return;
 721  
 722              break;
 723  
 724              case 'send':
 725  
 726                  $sql = "SELECT *
 727                      FROM $table
 728                      ORDER BY {$fields}_order";
 729                  $result = $db->sql_query($sql);
 730  
 731                  $pak = '';
 732                  while ($row = $db->sql_fetchrow($result))
 733                  {
 734                      $pak .= "'" . addslashes($row[$fields . '_url']) . "', ";
 735                      $pak .= "'" . addslashes($row[$fields . '_width']) . "', ";
 736                      $pak .= "'" . addslashes($row[$fields . '_height']) . "', ";
 737                      $pak .= "'" . addslashes($row['display_on_posting']) . "', ";
 738  
 739                      if ($mode == 'smilies')
 740                      {
 741                          $pak .= "'" . addslashes($row['emotion']) . "', ";
 742                          $pak .= "'" . addslashes($row['code']) . "', ";
 743                      }
 744  
 745                      $pak .= "\n";
 746                  }
 747                  $db->sql_freeresult($result);
 748  
 749                  if ($pak != '')
 750                  {
 751                      garbage_collection();
 752  
 753                      header('Pragma: public');
 754  
 755                      // Send out the Headers
 756                      header('Content-Type: text/x-delimtext; name="' . $mode . '.pak"');
 757                      header('Content-Disposition: inline; filename="' . $mode . '.pak"');
 758                      echo $pak;
 759  
 760                      flush();
 761                      exit;
 762                  }
 763                  else
 764                  {
 765                      trigger_error($user->lang['NO_' . strtoupper($fields) . '_EXPORT'] . adm_back_link($this->u_action), E_USER_WARNING);
 766                  }
 767  
 768              break;
 769  
 770              case 'delete':
 771  
 772                  if (confirm_box(true))
 773                  {
 774                      $sql = "DELETE FROM $table
 775                          WHERE {$fields}_id = $icon_id";
 776                      $db->sql_query($sql);
 777  
 778                      switch ($mode)
 779                      {
 780                          case 'smilies':
 781                          break;
 782  
 783                          case 'icons':
 784                              // Reset appropriate icon_ids
 785                              $db->sql_query('UPDATE ' . TOPICS_TABLE . "
 786                                  SET icon_id = 0
 787                                  WHERE icon_id = $icon_id");
 788  
 789                              $db->sql_query('UPDATE ' . POSTS_TABLE . "
 790                                  SET icon_id = 0
 791                                  WHERE icon_id = $icon_id");
 792                          break;
 793                      }
 794  
 795                      $notice = $user->lang[$lang . '_DELETED'];
 796  
 797                      $cache->destroy('_icons');
 798                      $cache->destroy('sql', $table);
 799                  }
 800                  else
 801                  {
 802                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 803                          'i'            => $id,
 804                          'mode'        => $mode,
 805                          'id'        => $icon_id,
 806                          'action'    => 'delete',
 807                      )));
 808                  }
 809  
 810              break;
 811  
 812              case 'move_up':
 813              case 'move_down':
 814  
 815                  // Get current order id...
 816                  $sql = "SELECT {$fields}_order as current_order
 817                      FROM $table
 818                      WHERE {$fields}_id = $icon_id";
 819                  $result = $db->sql_query($sql);
 820                  $current_order = (int) $db->sql_fetchfield('current_order');
 821                  $db->sql_freeresult($result);
 822  
 823                  if ($current_order == 0 && $action == 'move_up')
 824                  {
 825                      break;
 826                  }
 827  
 828                  // on move_down, switch position with next order_id...
 829                  // on move_up, switch position with previous order_id...
 830                  $switch_order_id = ($action == 'move_down') ? $current_order + 1 : $current_order - 1;
 831  
 832                  //
 833                  $sql = "UPDATE $table
 834                      SET {$fields}_order = $current_order
 835                      WHERE {$fields}_order = $switch_order_id
 836                          AND {$fields}_id <> $icon_id";
 837                  $db->sql_query($sql);
 838  
 839                  // Only update the other entry too if the previous entry got updated
 840                  if ($db->sql_affectedrows())
 841                  {
 842                      $sql = "UPDATE $table
 843                          SET {$fields}_order = $switch_order_id
 844                          WHERE {$fields}_order = $current_order
 845                              AND {$fields}_id = $icon_id";
 846                      $db->sql_query($sql);
 847                  }
 848  
 849                  $cache->destroy('_icons');
 850                  $cache->destroy('sql', $table);
 851  
 852              break;
 853          }
 854  
 855          // By default, check that image_order is valid and fix it if necessary
 856          $sql = "SELECT {$fields}_id AS order_id, {$fields}_order AS fields_order
 857              FROM $table
 858              ORDER BY display_on_posting DESC, {$fields}_order";
 859          $result = $db->sql_query($sql);
 860  
 861          if ($row = $db->sql_fetchrow($result))
 862          {
 863              $order = 0;
 864              do
 865              {
 866                  ++$order;
 867                  if ($row['fields_order'] != $order)
 868                  {
 869                      $db->sql_query("UPDATE $table
 870                          SET {$fields}_order = $order
 871                          WHERE {$fields}_id = " . $row['order_id']);
 872                  }
 873              }
 874              while ($row = $db->sql_fetchrow($result));
 875          }
 876          $db->sql_freeresult($result);
 877  
 878          $template->assign_vars(array(
 879              'L_TITLE'            => $user->lang['ACP_' . $lang],
 880              'L_EXPLAIN'            => $user->lang['ACP_' . $lang . '_EXPLAIN'],
 881              'L_IMPORT'            => $user->lang['IMPORT_' . $lang],
 882              'L_EXPORT'            => $user->lang['EXPORT_' . $lang],
 883              'L_NOT_DISPLAYED'    => $user->lang[$lang . '_NOT_DISPLAYED'],
 884              'L_ICON_ADD'        => $user->lang['ADD_' . $lang],
 885              'L_ICON_EDIT'        => $user->lang['EDIT_' . $lang],
 886  
 887              'NOTICE'            => $notice,
 888              'COLSPAN'            => ($mode == 'smilies') ? 5 : 3,
 889  
 890              'S_SMILIES'            => ($mode == 'smilies') ? true : false,
 891  
 892              'U_ACTION'            => $this->u_action,
 893              'U_IMPORT'            => $this->u_action . '&amp;action=import',
 894              'U_EXPORT'            => $this->u_action . '&amp;action=export',
 895              )
 896          );
 897  
 898          $spacer = false;
 899          $pagination_start = request_var('start', 0);
 900  
 901          $item_count = $this->item_count($table);
 902  
 903          $sql = "SELECT *
 904              FROM $table
 905              ORDER BY {$fields}_order ASC";
 906          $result = $db->sql_query_limit($sql, $config['smilies_per_page'], $pagination_start);
 907  
 908          while ($row = $db->sql_fetchrow($result))
 909          {
 910              $alt_text = ($mode == 'smilies') ? $row['code'] : '';
 911  
 912              $template->assign_block_vars('items', array(
 913                  'S_SPACER'        => (!$spacer && !$row['display_on_posting']) ? true : false,
 914                  'ALT_TEXT'        => $alt_text,
 915                  'IMG_SRC'        => $phpbb_root_path . $img_path . '/' . $row[$fields . '_url'],
 916                  'WIDTH'            => $row[$fields . '_width'],
 917                  'HEIGHT'        => $row[$fields . '_height'],
 918                  'CODE'            => (isset($row['code'])) ? $row['code'] : '',
 919                  'EMOTION'        => (isset($row['emotion'])) ? $row['emotion'] : '',
 920                  'U_EDIT'        => $this->u_action . '&amp;action=edit&amp;id=' . $row[$fields . '_id'],
 921                  'U_DELETE'        => $this->u_action . '&amp;action=delete&amp;id=' . $row[$fields . '_id'],
 922                  'U_MOVE_UP'        => $this->u_action . '&amp;action=move_up&amp;id=' . $row[$fields . '_id'] . '&amp;start=' . $pagination_start,
 923                  'U_MOVE_DOWN'    => $this->u_action . '&amp;action=move_down&amp;id=' . $row[$fields . '_id'] . '&amp;start=' . $pagination_start,
 924              ));
 925  
 926              if (!$spacer && !$row['display_on_posting'])
 927              {
 928                  $spacer = true;
 929              }
 930          }
 931          $db->sql_freeresult($result);
 932  
 933          $template->assign_var('PAGINATION',
 934              generate_pagination($this->u_action, $item_count, $config['smilies_per_page'], $pagination_start, true)
 935          );
 936      }
 937  
 938      /**
 939       * Returns the count of smilies or icons in the database
 940       *
 941       * @param string $table The table of items to count.
 942       * @return int number of items
 943       */
 944      /* private */ function item_count($table)
 945      {
 946          global $db;
 947  
 948          $sql = "SELECT COUNT(*) AS item_count
 949              FROM $table";
 950          $result = $db->sql_query($sql);
 951          $item_count = (int) $db->sql_fetchfield('item_count');
 952          $db->sql_freeresult($result);
 953  
 954          return $item_count;
 955      }
 956  }
 957  
 958  ?>


Generated: Wed Oct 2 15:03:47 2013 Cross-referenced by PHPXref 0.7.1