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. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
acp_icons.php
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], ' -> ' . $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], ' -> ' . $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 . '&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 . '&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 . '&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 . '&action=import',
811 'U_EXPORT' => $this->u_action . '&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 . '&action=edit&id=' . $row[$fields . '_id'],
835 'U_DELETE' => $this->u_action . '&action=delete&id=' . $row[$fields . '_id'],
836 'U_MOVE_UP' => $this->u_action . '&action=move_up&id=' . $row[$fields . '_id'],
837 'U_MOVE_DOWN' => $this->u_action . '&action=move_down&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 ?>