Verzeichnisstruktur phpBB-2.0.0


Veröffentlicht
03.04.2002

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

admin_styles.php

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


 001  <?php
 002  /***************************************************************************
 003   *                              admin_styles.php
 004   *                            -------------------
 005   *   begin                : Thursday, Jul 12, 2001
 006   *   copyright            : (C) 2001 The phpBB Group
 007   *   email                : support@phpbb.com
 008   *
 009   *   $Id$
 010   *
 011   *
 012   ***************************************************************************/
 013   
 014  /***************************************************************************
 015   *
 016   *   This program is free software; you can redistribute it and/or modify
 017   *   it under the terms of the GNU General Public License as published by
 018   *   the Free Software Foundation; either version 2 of the License, or
 019   *   (at your option) any later version.
 020   *
 021   ***************************************************************************/
 022   
 023  define('IN_PHPBB', 1);
 024   
 025  if( !empty($setmodules) )
 026  {
 027      $file = basename(__FILE__);
 028      $module['Styles']['Add_new'] = "$file?mode=addnew";
 029      $module['Styles']['Create_new'] = "$file?mode=create";
 030      $module['Styles']['Manage'] = $file;
 031      $module['Styles']['Export'] = "$file?mode=export";
 032      return;
 033  }
 034   
 035  //
 036  // Load default header
 037  //
 038  //
 039  // Check if the user has cancled a confirmation message.
 040  //
 041  $phpbb_root_path = "./../";
 042  require($phpbb_root_path . 'extension.inc');
 043   
 044  $confirm = (isset($HTTP_POST_VARS['confirm']) || isset($_POST['confirm'])) ? TRUE : FALSE;
 045  $cancel = (isset($HTTP_POST_VARS['cancel']) || isset($_POST['cancel'])) ? TRUE : FALSE;
 046   
 047  $no_page_header = (!empty($HTTP_POST_VARS['send_file']) || !empty($_POST['send_file']) || $cancel) ? TRUE : FALSE;
 048   
 049  require('./pagestart.' . $phpEx);
 050   
 051  $confirm = ( isset($HTTP_POST_VARS['confirm']) ) ? TRUE : FALSE;
 052  $cancel = ( isset($HTTP_POST_VARS['cancel']) ) ? TRUE : FALSE;
 053   
 054  if ($cancel)
 055  {
 056      redirect('admin/' . append_sid("admin_styles.$phpEx", true));
 057  }
 058   
 059  if( isset($HTTP_GET_VARS['mode']) || isset($HTTP_POST_VARS['mode']) )
 060  {
 061      $mode = ( isset($HTTP_GET_VARS['mode']) ) ? $HTTP_GET_VARS['mode'] : $HTTP_POST_VARS['mode'];
 062      $mode = htmlspecialchars($mode);
 063  }
 064  else 
 065  {
 066      $mode = "";
 067  }
 068   
 069  switch( $mode )
 070  {
 071      case "addnew":
 072          $install_to = ( isset($HTTP_GET_VARS['install_to']) ) ? urldecode($HTTP_GET_VARS['install_to']) : $HTTP_POST_VARS['install_to'];
 073          $style_name = ( isset($HTTP_GET_VARS['style']) ) ? urldecode($HTTP_GET_VARS['style']) : $HTTP_POST_VARS['style'];
 074      
 075          if( isset($install_to) )
 076          {
 077   
 078              include($phpbb_root_path. "templates/" . basename($install_to) . "/theme_info.cfg");
 079   
 080              $template_name = $$install_to;
 081              $found = FALSE; 
 082              
 083              for($i = 0; $i < count($template_name) && !$found; $i++)
 084              {
 085                  if( $template_name[$i]['style_name'] == $style_name )
 086                  {
 087                      while(list($key, $val) = each($template_name[$i]))
 088                      {
 089                          $db_fields[] = $key;
 090                          $db_values[] = str_replace("\'", "''" , $val);
 091                      }
 092                  }
 093              }
 094                      
 095              $sql = "INSERT INTO " . THEMES_TABLE . " (";
 096   
 097              for($i = 0; $i < count($db_fields); $i++)
 098              {
 099                  $sql .= $db_fields[$i];
 100                  if($i != (count($db_fields) - 1))
 101                  {
 102                      $sql .= ", ";
 103                  }
 104                  
 105              }
 106   
 107              $sql .= ") VALUES (";
 108   
 109              for($i = 0; $i < count($db_values); $i++)
 110              {
 111                  $sql .= "'" . $db_values[$i] . "'";
 112                  if($i != (count($db_values) - 1))
 113                  {
 114                      $sql .= ", ";
 115                  }
 116              }
 117              $sql .= ")";
 118              
 119              if( !$result = $db->sql_query($sql) )
 120              {
 121                  message_die(GENERAL_ERROR, "Could not insert theme data!", "", __LINE__, __FILE__, $sql);
 122              }
 123              
 124              $message = $lang['Theme_installed'] . "<br /><br />" . sprintf($lang['Click_return_styleadmin'], "<a href=\"" . append_sid("admin_styles.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");
 125   
 126              message_die(GENERAL_MESSAGE, $message);
 127          }
 128          else
 129          {
 130              
 131              $installable_themes = array();
 132              
 133              if( $dir = @opendir($phpbb_root_path. "templates/") )
 134              {
 135                  while( $sub_dir = @readdir($dir) )
 136                  {
 137                      if( !is_file(phpbb_realpath($phpbb_root_path . 'templates/' .$sub_dir)) && !is_link(phpbb_realpath($phpbb_root_path . 'templates/' .$sub_dir)) && $sub_dir != "." && $sub_dir != ".." && $sub_dir != "CVS" )
 138                      {
 139                          if( @file_exists(@phpbb_realpath($phpbb_root_path. "templates/" . $sub_dir . "/theme_info.cfg")) )
 140                          {
 141                              include($phpbb_root_path. "templates/" . $sub_dir . "/theme_info.cfg");
 142                              
 143                              for($i = 0; $i < count($$sub_dir); $i++)
 144                              {
 145                                  $working_data = $$sub_dir;
 146                                  
 147                                  $style_name = $working_data[$i]['style_name'];
 148                                                          
 149                                  $sql = "SELECT themes_id 
 150                                      FROM " . THEMES_TABLE . " 
 151                                      WHERE style_name = '" . str_replace("\'", "''", $style_name) . "'";
 152                                  if(!$result = $db->sql_query($sql))
 153                                  {
 154                                      message_die(GENERAL_ERROR, "Could not query themes table!", "", __LINE__, __FILE__, $sql);
 155                                  }
 156   
 157                                  if(!$db->sql_numrows($result))
 158                                  {
 159                                      $installable_themes[] = $working_data[$i];
 160                                  }
 161                              }
 162                          }
 163                      }
 164                  }
 165                  
 166                  $template->set_filenames(array(
 167                      "body" => "admin/styles_addnew_body.tpl")
 168                  );
 169                  
 170                  $template->assign_vars(array(
 171                      "L_STYLES_TITLE" => $lang['Styles_admin'],
 172                      "L_STYLES_ADD_TEXT" => $lang['Styles_addnew_explain'],
 173                      "L_STYLE" => $lang['Style'],
 174                      "L_TEMPLATE" => $lang['Template'],
 175                      "L_INSTALL" => $lang['Install'],
 176                      "L_ACTION" => $lang['Action'])
 177                  );
 178                      
 179                  for($i = 0; $i < count($installable_themes); $i++)
 180                  {
 181                      $row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
 182                      $row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
 183          
 184                      $template->assign_block_vars("styles", array(
 185                          "ROW_CLASS" => $row_class,
 186                          "ROW_COLOR" => "#" . $row_color,
 187                          "STYLE_NAME" => $installable_themes[$i]['style_name'],
 188                          "TEMPLATE_NAME" => $installable_themes[$i]['template_name'],
 189   
 190                          "U_STYLES_INSTALL" => append_sid("admin_styles.$phpEx?mode=addnew&amp;style=" . urlencode($installable_themes[$i]['style_name']) . "&amp;install_to=" . urlencode($installable_themes[$i]['template_name'])))
 191                      );
 192                  
 193                  }
 194                  $template->pparse("body");
 195                      
 196              }
 197              closedir($dir);
 198          }
 199          break;
 200      
 201      case "create":
 202      case "edit":
 203          $submit = ( isset($HTTP_POST_VARS['submit']) ) ? TRUE : 0;
 204          
 205          if( $submit )
 206          {
 207              //    
 208              // DAMN! Thats alot of data to validate...
 209              //
 210              $updated['style_name'] = $HTTP_POST_VARS['style_name'];
 211              $updated['template_name'] = $HTTP_POST_VARS['template_name'];
 212              $updated['head_stylesheet'] = $HTTP_POST_VARS['head_stylesheet'];
 213              $updated['body_background'] = $HTTP_POST_VARS['body_background'];
 214              $updated['body_bgcolor'] = $HTTP_POST_VARS['body_bgcolor'];
 215              $updated['body_text'] = $HTTP_POST_VARS['body_text'];
 216              $updated['body_link'] = $HTTP_POST_VARS['body_link'];
 217              $updated['body_vlink'] = $HTTP_POST_VARS['body_vlink'];
 218              $updated['body_alink'] = $HTTP_POST_VARS['body_alink'];
 219              $updated['body_hlink'] = $HTTP_POST_VARS['body_hlink'];
 220              $updated['tr_color1'] = $HTTP_POST_VARS['tr_color1'];
 221              $updated_name['tr_color1_name'] =  $HTTP_POST_VARS['tr_color1_name'];
 222              $updated['tr_color2'] = $HTTP_POST_VARS['tr_color2'];
 223              $updated_name['tr_color2_name'] = $HTTP_POST_VARS['tr_color2_name'];
 224              $updated['tr_color3'] = $HTTP_POST_VARS['tr_color3'];
 225              $updated_name['tr_color3_name'] = $HTTP_POST_VARS['tr_color3_name'];
 226              $updated['tr_class1'] = $HTTP_POST_VARS['tr_class1'];
 227              $updated_name['tr_class1_name'] = $HTTP_POST_VARS['tr_class1_name'];
 228              $updated['tr_class2'] = $HTTP_POST_VARS['tr_class2'];
 229              $updated_name['tr_class2_name'] = $HTTP_POST_VARS['tr_class2_name'];
 230              $updated['tr_class3'] = $HTTP_POST_VARS['tr_class3'];
 231              $updated_name['tr_class3_name'] = $HTTP_POST_VARS['tr_class3_name'];
 232              $updated['th_color1'] = $HTTP_POST_VARS['th_color1'];
 233              $updated_name['th_color1_name'] = $HTTP_POST_VARS['th_color1_name'];
 234              $updated['th_color2'] = $HTTP_POST_VARS['th_color2'];
 235              $updated_name['th_color2_name'] = $HTTP_POST_VARS['th_color2_name'];
 236              $updated['th_color3'] = $HTTP_POST_VARS['th_color3'];
 237              $updated_name['th_color3_name'] = $HTTP_POST_VARS['th_color3_name'];
 238              $updated['th_class1'] = $HTTP_POST_VARS['th_class1'];
 239              $updated_name['th_class1_name'] = $HTTP_POST_VARS['th_class1_name'];
 240              $updated['th_class2'] = $HTTP_POST_VARS['th_class2'];
 241              $updated_name['th_class2_name'] = $HTTP_POST_VARS['th_class2_name'];
 242              $updated['th_class3'] = $HTTP_POST_VARS['th_class3'];
 243              $updated_name['th_class3_name'] = $HTTP_POST_VARS['th_class3_name'];
 244              $updated['td_color1'] = $HTTP_POST_VARS['td_color1'];
 245              $updated_name['td_color1_name'] = $HTTP_POST_VARS['td_color1_name'];
 246              $updated['td_color2'] = $HTTP_POST_VARS['td_color2'];
 247              $updated_name['td_color2_name'] = $HTTP_POST_VARS['td_color2_name'];
 248              $updated['td_color3'] = $HTTP_POST_VARS['td_color3'];
 249              $updated_name['td_color3_name'] = $HTTP_POST_VARS['td_color3_name'];
 250              $updated['td_class1'] = $HTTP_POST_VARS['td_class1'];
 251              $updated_name['td_class1_name'] = $HTTP_POST_VARS['td_class1_name'];
 252              $updated['td_class2'] = $HTTP_POST_VARS['td_class2'];
 253              $updated_name['td_class2_name'] = $HTTP_POST_VARS['td_class2_name'];
 254              $updated['td_class3'] = $HTTP_POST_VARS['td_class3'];
 255              $updated_name['td_class3_name'] = $HTTP_POST_VARS['td_class3_name'];
 256              $updated['fontface1'] = $HTTP_POST_VARS['fontface1'];
 257              $updated_name['fontface1_name'] = $HTTP_POST_VARS['fontface1_name'];
 258              $updated['fontface2'] = $HTTP_POST_VARS['fontface2'];
 259              $updated_name['fontface2_name'] = $HTTP_POST_VARS['fontface2_name'];
 260              $updated['fontface3'] = $HTTP_POST_VARS['fontface3'];
 261              $updated_name['fontface3_name'] = $HTTP_POST_VARS['fontface3_name'];
 262              $updated['fontsize1'] = intval($HTTP_POST_VARS['fontsize1']);
 263              $updated_name['fontsize1_name'] = $HTTP_POST_VARS['fontsize1_name'];
 264              $updated['fontsize2'] = intval($HTTP_POST_VARS['fontsize2']);
 265              $updated_name['fontsize2_name'] = $HTTP_POST_VARS['fontsize2_name'];
 266              $updated['fontsize3'] = intval($HTTP_POST_VARS['fontsize3']);
 267              $updated_name['fontsize3_name'] = $HTTP_POST_VARS['fontsize3_name'];
 268              $updated['fontcolor1'] = $HTTP_POST_VARS['fontcolor1'];
 269              $updated_name['fontcolor1_name'] = $HTTP_POST_VARS['fontcolor1_name'];
 270              $updated['fontcolor2'] = $HTTP_POST_VARS['fontcolor2'];
 271              $updated_name['fontcolor2_name'] = $HTTP_POST_VARS['fontcolor2_name'];
 272              $updated['fontcolor3'] = $HTTP_POST_VARS['fontcolor3'];
 273              $updated_name['fontcolor3_name'] = $HTTP_POST_VARS['fontcolor3_name'];
 274              $updated['span_class1'] = $HTTP_POST_VARS['span_class1'];
 275              $updated_name['span_class1_name'] = $HTTP_POST_VARS['span_class1_name'];
 276              $updated['span_class2'] = $HTTP_POST_VARS['span_class2'];
 277              $updated_name['span_class2_name'] = $HTTP_POST_VARS['span_class2_name'];
 278              $updated['span_class3'] = $HTTP_POST_VARS['span_class3'];
 279              $updated_name['span_class3_name'] = $HTTP_POST_VARS['span_class3_name'];
 280              $style_id = intval($HTTP_POST_VARS['style_id']);
 281              //
 282              // Wheeeew! Thank heavens for copy and paste and search and replace :D
 283              //
 284              
 285              if($mode == "edit")
 286              {
 287                  $sql = "UPDATE " . THEMES_TABLE . " SET ";
 288                  $count = 0;
 289   
 290                  while(list($key, $val) = each($updated))
 291                  {
 292                      if($count != 0)
 293                      {
 294                          $sql .= ", ";
 295                      }
 296   
 297                      //
 298                      // I don't like this but it'll keep MSSQL from throwing
 299                      // an error and save me alot of typing
 300                      //
 301                      $sql .= ( stristr($key, "fontsize") ) ? "$key = $val" : "$key = '" . str_replace("\'", "''", $val) . "'";
 302   
 303                      $count++;
 304                  }
 305                  
 306                  $sql .= " WHERE themes_id = $style_id";
 307                  
 308                  if(!$result = $db->sql_query($sql))
 309                  {
 310                      message_die(GENERAL_ERROR, "Could not update themes table!", "", __LINE__, __FILE__, $sql);
 311                  }
 312                  
 313                  //
 314                  // Check if there's a names table entry for this style
 315                  //
 316                  $sql = "SELECT themes_id 
 317                      FROM " . THEMES_NAME_TABLE . " 
 318                      WHERE themes_id = $style_id";
 319                  if(!$result = $db->sql_query($sql))
 320                  {
 321                      message_die(GENERAL_ERROR, "Could not get data from themes_name table", "", __LINE__, __FILE__, $sql);
 322                  }
 323                  
 324                  if($db->sql_numrows($result) > 0)
 325                  {
 326                      $sql = "UPDATE " . THEMES_NAME_TABLE . " 
 327                          SET ";
 328                      $count = 0;
 329                      while(list($key, $val) = each($updated_name))
 330                      {
 331                          if($count != 0)
 332                          {
 333                              $sql .= ", ";
 334                          }
 335              
 336                          $sql .= "$key = '$val'";
 337              
 338                          $count++;
 339                      }
 340                      
 341                      $sql .= " WHERE themes_id = $style_id";
 342                  }
 343                  else
 344                  {
 345                      //
 346                      // Nope, no names entry so we create a new one.
 347                      //
 348                      $sql = "INSERT INTO " . THEMES_NAME_TABLE . " (themes_id, ";
 349                      while(list($key, $val) = each($updated_name))
 350                      {
 351                          $fields[] = $key;
 352                          $vals[] = str_replace("\'", "''", $val);
 353                      }
 354   
 355                      for($i = 0; $i < count($fields); $i++)
 356                      {
 357                          if($i > 0)
 358                          {
 359                              $sql .= ", ";
 360                          }
 361                          $sql .= $fields[$i];
 362                      }
 363                      
 364                      $sql .= ") VALUES ($style_id, ";
 365                      for($i = 0; $i < count($vals); $i++)
 366                      {
 367                          if($i > 0)
 368                          {
 369                              $sql .= ", ";
 370                          }
 371                          $sql .= "'" . $vals[$i] . "'";
 372                      }
 373                      
 374                      $sql .= ")";
 375                  }
 376                                          
 377                  if(!$result = $db->sql_query($sql))
 378                  {
 379                      message_die(GENERAL_ERROR, "Could not update themes name table!", "", __LINE__, __FILE__, $sql);
 380                  }
 381                              
 382                  $message = $lang['Theme_updated'] . "<br /><br />" . sprintf($lang['Click_return_styleadmin'], "<a href=\"" . append_sid("admin_styles.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");
 383   
 384                  message_die(GENERAL_MESSAGE, $message);
 385              }
 386              else
 387              {
 388                  //
 389                  // First, check if we already have a style by this name
 390                  //
 391                  $sql = "SELECT themes_id 
 392                      FROM " . THEMES_TABLE . " 
 393                      WHERE style_name = '" . str_replace("\'", "''", $updated['style_name']) . "'";
 394                  if(!$result = $db->sql_query($sql))
 395                  {
 396                      message_die(GENERAL_ERROR, "Could not query themes table", "", __LINE__, __FILE__, $sql);
 397                  }
 398                  
 399                  if($db->sql_numrows($result))
 400                  {
 401                      message_die(GENERAL_ERROR, $lang['Style_exists'], $lang['Error']);
 402                  }                
 403                  
 404                  while(list($key, $val) = each($updated))
 405                  {
 406                      $field_names[] = $key;
 407   
 408                      if(stristr($key, "fontsize"))
 409                      {
 410                          $values[] = "$val";
 411                      }
 412                      else
 413                      {
 414                          $values[] = "'" . str_replace("\'", "''", $val) . "'";
 415                      }
 416                  }
 417                  
 418                  $sql = "INSERT 
 419                      INTO " . THEMES_TABLE . " (";
 420                  for($i = 0; $i < count($field_names); $i++)
 421                  {
 422                      if($i != 0)
 423                      {
 424                          $sql .= ", ";
 425                      }
 426                      $sql .= $field_names[$i];
 427                  }
 428                  
 429                  $sql .= ") VALUES (";
 430                  for($i = 0; $i < count($values); $i++)
 431                  {
 432                      if($i != 0)
 433                      {
 434                          $sql .= ", ";
 435                      }
 436                      $sql .= $values[$i];
 437                  }
 438                  $sql .= ")";
 439                  
 440                  if(!$result = $db->sql_query($sql))
 441                  {
 442                      message_die(GENERAL_ERROR, "Could not update themes table!", "", __LINE__, __FILE__, $sql);
 443                  }
 444                  
 445                  $style_id = $db->sql_nextid();
 446                  
 447                  // 
 448                  // Insert names data
 449                  //
 450                  $sql = "INSERT INTO " . THEMES_NAME_TABLE . " (themes_id, ";
 451                  while(list($key, $val) = each($updated_name))
 452                  {
 453                      $fields[] = $key;
 454                      $vals[] = $val;
 455                  }
 456   
 457                  for($i = 0; $i < count($fields); $i++)
 458                  {
 459                      if($i > 0)
 460                      {
 461                          $sql .= ", ";
 462                      }
 463                      $sql .= $fields[$i];
 464                  }
 465                  
 466                  $sql .= ") VALUES ($style_id, ";
 467                  for($i = 0; $i < count($vals); $i++)
 468                  {
 469                      if($i > 0)
 470                      {
 471                      $sql .= ", ";
 472                      }
 473                  $sql .= "'" . $vals[$i] . "'";
 474                  }
 475                  
 476                  $sql .= ")";
 477                                          
 478                  if(!$result = $db->sql_query($sql))
 479                  {
 480                      message_die(GENERAL_ERROR, "Could not insert themes name table!", "", __LINE__, __FILE__, $sql);
 481                  }
 482                  
 483                  $message = $lang['Theme_created'] . "<br /><br />" . sprintf($lang['Click_return_styleadmin'], "<a href=\"" . append_sid("admin_styles.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");
 484   
 485                  message_die(GENERAL_MESSAGE, $message);
 486              }
 487          }
 488          else
 489          {
 490              if($mode == "edit")
 491              {
 492                  $themes_title = $lang['Edit_theme'];
 493                  $themes_explain = $lang['Edit_theme_explain'];
 494                  
 495                  $style_id = intval($HTTP_GET_VARS['style_id']);
 496                  
 497                  $selected_names = array();
 498                  $selected_values = array();
 499                  // 
 500                  // Fetch the Theme Info from the db
 501                  //
 502                  $sql = "SELECT * 
 503                      FROM " . THEMES_TABLE . " 
 504                      WHERE themes_id = $style_id";
 505                  if(!$result = $db->sql_query($sql))
 506                  {
 507                      message_die(GENERAL_ERROR, "Could not get data from themes table", "", __LINE__, __FILE__, $sql);
 508                  }
 509                  
 510                  if ( $selected_values = $db->sql_fetchrow($result) )
 511                  {
 512                      while(list($key, $val) = @each($selected_values))
 513                      {
 514                          $selected[$key] = $val;
 515                      }
 516                  }
 517                  
 518                  //
 519                  // Fetch the Themes Name data
 520                  //
 521                  $sql = "SELECT * 
 522                      FROM " . THEMES_NAME_TABLE . " 
 523                      WHERE themes_id = $style_id";
 524                  if(!$result = $db->sql_query($sql))
 525                  {
 526                      message_die(GENERAL_ERROR, "Could not get data from themes name table", "", __LINE__, __FILE__, $sql);
 527                  }
 528                  
 529                  if ( $selected_names = $db->sql_fetchrow($result) )
 530                  {
 531                      while(list($key, $val) = @each($selected_names))
 532                      {
 533                          $selected[$key] = $val;
 534                      }
 535                  }
 536   
 537                  $s_hidden_fields = '<input type="hidden" name="style_id" value="' . $style_id . '" />';
 538              }
 539              else
 540              {
 541                  $themes_title = $lang['Create_theme'];
 542                  $themes_explain = $lang['Create_theme_explain'];
 543              }
 544              
 545              $template->set_filenames(array(
 546                  "body" => "admin/styles_edit_body.tpl")
 547              );
 548              
 549              if( $dir = @opendir($phpbb_root_path . 'templates/') )
 550              {    
 551                  $s_template_select = '<select name="template_name">';
 552                  while( $file = @readdir($dir) )
 553                  {    
 554                      if( !is_file(phpbb_realpath($phpbb_root_path . 'templates/' . $file)) && !is_link(phpbb_realpath($phpbb_root_path . 'templates/' . $file)) && $file != "." && $file != ".." && $file != "CVS" )
 555                      {
 556                          if($file == $selected['template_name'])
 557                          {
 558                              $s_template_select .= '<option value="' . $file . '" selected="selected">' . $file . "</option>\n";
 559                          }
 560                          else
 561                          {
 562                              $s_template_select .= '<option value="' . $file . '">' . $file . "</option>\n";
 563                          }
 564                      }
 565                  }
 566                  $s_template_select .= '</select>';
 567              }
 568              else
 569              {
 570                  message_die(GENERAL_MESSAGE, $lang['No_template_dir']);
 571              }
 572   
 573              $s_hidden_fields .= '<input type="hidden" name="mode" value="' . $mode . '" />';
 574   
 575              $template->assign_vars(array(
 576                  "L_THEMES_TITLE" => $themes_title,
 577                  "L_THEMES_EXPLAIN" => $themes_explain,
 578                  "L_THEME_NAME" => $lang['Theme_name'],
 579                  "L_TEMPLATE" => $lang['Template'],
 580                  "L_THEME_SETTINGS" => $lang['Theme_settings'],
 581                  "L_THEME_ELEMENT" => $lang['Theme_element'],
 582                  "L_SIMPLE_NAME" => $lang['Simple_name'],
 583                  "L_VALUE" => $lang['Value'],
 584                  "L_STYLESHEET" => $lang['Stylesheet'],
 585                  "L_STYLESHEET_EXPLAIN" => $lang['Stylesheet_explain'],
 586                  "L_BACKGROUND_IMAGE" => $lang['Background_image'],
 587                  "L_BACKGROUND_COLOR" => $lang['Background_color'],
 588                  "L_BODY_TEXT_COLOR" => $lang['Text_color'],
 589                  "L_BODY_LINK_COLOR" => $lang['Link_color'],
 590                  "L_BODY_VLINK_COLOR" => $lang['VLink_color'],
 591                  "L_BODY_ALINK_COLOR" => $lang['ALink_color'],
 592                  "L_BODY_HLINK_COLOR" => $lang['HLink_color'],
 593                  "L_TR_COLOR1" => $lang['Tr_color1'],
 594                  "L_TR_COLOR2" => $lang['Tr_color2'],
 595                  "L_TR_COLOR3" => $lang['Tr_color3'],
 596                  "L_TR_CLASS1" => $lang['Tr_class1'],
 597                  "L_TR_CLASS2" => $lang['Tr_class2'],
 598                  "L_TR_CLASS3" => $lang['Tr_class3'],
 599                  "L_TH_COLOR1" => $lang['Th_color1'],
 600                  "L_TH_COLOR2" => $lang['Th_color2'],
 601                  "L_TH_COLOR3" => $lang['Th_color3'],
 602                  "L_TH_CLASS1" => $lang['Th_class1'],
 603                  "L_TH_CLASS2" => $lang['Th_class2'],
 604                  "L_TH_CLASS3" => $lang['Th_class3'],
 605                  "L_TD_COLOR1" => $lang['Td_color1'],
 606                  "L_TD_COLOR2" => $lang['Td_color2'],
 607                  "L_TD_COLOR3" => $lang['Td_color3'],
 608                  "L_TD_CLASS1" => $lang['Td_class1'],
 609                  "L_TD_CLASS2" => $lang['Td_class2'],
 610                  "L_TD_CLASS3" => $lang['Td_class3'],
 611                  "L_FONTFACE_1" => $lang['fontface1'],
 612                  "L_FONTFACE_2" => $lang['fontface2'],
 613                  "L_FONTFACE_3" => $lang['fontface3'],
 614                  "L_FONTSIZE_1" => $lang['fontsize1'],
 615                  "L_FONTSIZE_2" => $lang['fontsize2'],
 616                  "L_FONTSIZE_3" => $lang['fontsize3'],
 617                  "L_FONTCOLOR_1" => $lang['fontcolor1'],
 618                  "L_FONTCOLOR_2" => $lang['fontcolor2'],
 619                  "L_FONTCOLOR_3" => $lang['fontcolor3'],
 620                  "L_SPAN_CLASS_1" => $lang['span_class1'],
 621                  "L_SPAN_CLASS_2" => $lang['span_class2'],
 622                  "L_SPAN_CLASS_3" => $lang['span_class3'],
 623                  "L_SAVE_SETTINGS" => $lang['Save_Settings'], 
 624                  "THEME_NAME" => $selected['style_name'],
 625                  "HEAD_STYLESHEET" => $selected['head_stylesheet'],
 626                  "BODY_BACKGROUND" => $selected['body_background'],
 627                  "BODY_BGCOLOR" => $selected['body_bgcolor'],
 628                  "BODY_TEXT_COLOR" => $selected['body_text'],
 629                  "BODY_LINK_COLOR" => $selected['body_link'],
 630                  "BODY_VLINK_COLOR" => $selected['body_vlink'],
 631                  "BODY_ALINK_COLOR" => $selected['body_alink'],
 632                  "BODY_HLINK_COLOR" => $selected['body_hlink'],
 633                  "TR_COLOR1" => $selected['tr_color1'],
 634                  "TR_COLOR2" => $selected['tr_color2'],
 635                  "TR_COLOR3" => $selected['tr_color3'],
 636                  "TR_CLASS1" => $selected['tr_class1'],
 637                  "TR_CLASS2" => $selected['tr_class2'],
 638                  "TR_CLASS3" => $selected['tr_class3'],
 639                  "TH_COLOR1" => $selected['th_color1'],
 640                  "TH_COLOR2" => $selected['th_color2'],
 641                  "TH_COLOR3" => $selected['th_color3'],
 642                  "TH_CLASS1" => $selected['th_class1'],
 643                  "TH_CLASS2" => $selected['th_class2'],
 644                  "TH_CLASS3" => $selected['th_class3'],
 645                  "TD_COLOR1" => $selected['td_color1'],
 646                  "TD_COLOR2" => $selected['td_color2'],
 647                  "TD_COLOR3" => $selected['td_color3'],
 648                  "TD_CLASS1" => $selected['td_class1'],
 649                  "TD_CLASS2" => $selected['td_class2'],
 650                  "TD_CLASS3" => $selected['td_class3'],
 651                  "FONTFACE1" => $selected['fontface1'],
 652                  "FONTFACE2" => $selected['fontface2'],
 653                  "FONTFACE3" => $selected['fontface3'],
 654                  "FONTSIZE1" => $selected['fontsize1'],
 655                  "FONTSIZE2" => $selected['fontsize2'],
 656                  "FONTSIZE3" => $selected['fontsize3'],
 657                  "FONTCOLOR1" => $selected['fontcolor1'],
 658                  "FONTCOLOR2" => $selected['fontcolor2'],
 659                  "FONTCOLOR3" => $selected['fontcolor3'],
 660                  "SPAN_CLASS1" => $selected['span_class1'],
 661                  "SPAN_CLASS2" => $selected['span_class2'],
 662                  "SPAN_CLASS3" => $selected['span_class3'],
 663   
 664                  "TR_COLOR1_NAME" => $selected['tr_color1_name'],
 665                  "TR_COLOR2_NAME" => $selected['tr_color2_name'],
 666                  "TR_COLOR3_NAME" => $selected['tr_color3_name'],
 667                  "TR_CLASS1_NAME" => $selected['tr_class1_name'],
 668                  "TR_CLASS2_NAME" => $selected['tr_class2_name'],
 669                  "TR_CLASS3_NAME" => $selected['tr_class3_name'],
 670                  "TH_COLOR1_NAME" => $selected['th_color1_name'],
 671                  "TH_COLOR2_NAME" => $selected['th_color2_name'],
 672                  "TH_COLOR3_NAME" => $selected['th_color3_name'],
 673                  "TH_CLASS1_NAME" => $selected['th_class1_name'],
 674                  "TH_CLASS2_NAME" => $selected['th_class2_name'],
 675                  "TH_CLASS3_NAME" => $selected['th_class3_name'],
 676                  "TD_COLOR1_NAME" => $selected['td_color1_name'],
 677                  "TD_COLOR2_NAME" => $selected['td_color2_name'],
 678                  "TD_COLOR3_NAME" => $selected['td_color3_name'],
 679                  "TD_CLASS1_NAME" => $selected['td_class1_name'],
 680                  "TD_CLASS2_NAME" => $selected['td_class2_name'],
 681                  "TD_CLASS3_NAME" => $selected['td_class3_name'],
 682                  "FONTFACE1_NAME" => $selected['fontface1_name'],
 683                  "FONTFACE2_NAME" => $selected['fontface2_name'],
 684                  "FONTFACE3_NAME" => $selected['fontface3_name'],
 685                  "FONTSIZE1_NAME" => $selected['fontsize1_name'],
 686                  "FONTSIZE2_NAME" => $selected['fontsize2_name'],
 687                  "FONTSIZE3_NAME" => $selected['fontsize3_name'],
 688                  "FONTCOLOR1_NAME" => $selected['fontcolor1_name'],
 689                  "FONTCOLOR2_NAME" => $selected['fontcolor2_name'],
 690                  "FONTCOLOR3_NAME" => $selected['fontcolor3_name'],
 691                  "SPAN_CLASS1_NAME" => $selected['span_class1_name'],
 692                  "SPAN_CLASS2_NAME" => $selected['span_class2_name'],
 693                  "SPAN_CLASS3_NAME" => $selected['span_class3_name'],
 694                  
 695                  "S_THEME_ACTION" => append_sid("admin_styles.$phpEx"),
 696                  "S_TEMPLATE_SELECT" => $s_template_select,
 697                  "S_HIDDEN_FIELDS" => $s_hidden_fields)
 698              );
 699              
 700              $template->pparse("body");
 701          }
 702          break;
 703   
 704      case "export";
 705          if($HTTP_POST_VARS['export_template'])
 706          {
 707              $template_name = $HTTP_POST_VARS['export_template'];
 708   
 709              $sql = "SELECT * 
 710                  FROM " . THEMES_TABLE . " 
 711                  WHERE template_name = '" . str_replace("\'", "''", $template_name) . "'";
 712              if(!$result = $db->sql_query($sql))
 713              {
 714                  message_die(GENERAL_ERROR, "Could not get theme data for selected template", "", __LINE__, __FILE__, $sql);
 715              }
 716              
 717              $theme_rowset = $db->sql_fetchrowset($result);
 718              
 719              if( count($theme_rowset) == 0 )
 720              {
 721                  message_die(GENERAL_MESSAGE, $lang['No_themes']);
 722              }
 723              
 724              $theme_data = '<?php'."\n\n";
 725              $theme_data .= "//\n// phpBB 2.x auto-generated theme config file for $template_name\n// Do not change anything in this file!\n//\n\n";
 726   
 727              for($i = 0; $i < count($theme_rowset); $i++)
 728              {
 729                  while(list($key, $val) = each($theme_rowset[$i]))
 730                  {
 731                      if(!intval($key) && $key != "0" && $key != "themes_id")
 732                      {
 733                          $theme_data .= '$' . $template_name . "[$i]['$key'] = \"" . addslashes($val) . "\";\n";
 734                      }
 735                  }
 736                  $theme_data .= "\n";
 737              }
 738              
 739              $theme_data .= '?' . '>'; // Done this to prevent highlighting editors getting confused!
 740              
 741              @umask(0111);
 742   
 743              $fp = @fopen($phpbb_root_path . 'templates/' . basename($template_name) . '/theme_info.cfg', 'w');
 744   
 745              if( !$fp )
 746              {
 747                  //
 748                  // Unable to open the file writeable do something here as an attempt
 749                  // to get around that...
 750                  //
 751                  $s_hidden_fields = '<input type="hidden" name="theme_info" value="' . htmlspecialchars($theme_data) . '" />';
 752                  $s_hidden_fields .= '<input type="hidden" name="send_file" value="1" /><input type="hidden" name="mode" value="export" />';
 753                  
 754                  $download_form = '<form action="' . append_sid("admin_styles.$phpEx") . '" method="post"><input class="mainoption" type="submit" name="submit" value="' . $lang['Download'] . '" />' . $s_hidden_fields;
 755   
 756                  $template->set_filenames(array(
 757                      "body" => "message_body.tpl")
 758                  );
 759   
 760                  $template->assign_vars(array(
 761                      "MESSAGE_TITLE" => $lang['Export_themes'],
 762                      "MESSAGE_TEXT" => $lang['Download_theme_cfg'] . "<br /><br />" . $download_form)
 763                  );
 764   
 765                  $template->pparse('body');
 766                  exit();
 767              }
 768   
 769              $result = @fputs($fp, $theme_data, strlen($theme_data));
 770              fclose($fp);
 771              
 772              $message = $lang['Theme_info_saved'] . "<br /><br />" . sprintf($lang['Click_return_styleadmin'], "<a href=\"" . append_sid("admin_styles.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");
 773   
 774              message_die(GENERAL_MESSAGE, $message);
 775   
 776          }
 777          else if($HTTP_POST_VARS['send_file'])
 778          {
 779              
 780              header("Content-Type: text/x-delimtext; name=\"theme_info.cfg\"");
 781              header("Content-disposition: attachment; filename=theme_info.cfg");
 782   
 783              echo stripslashes($HTTP_POST_VARS['theme_info']);
 784          }
 785          else
 786          {
 787              $template->set_filenames(array(
 788                  "body" => "admin/styles_exporter.tpl")
 789              );
 790              
 791              if( $dir = @opendir($phpbb_root_path . 'templates/') )
 792              {    
 793                  $s_template_select = '<select name="export_template">';
 794                  while( $file = @readdir($dir) )
 795                  {    
 796                      if( !is_file(phpbb_realpath($phpbb_root_path . 'templates/' . $file)) && !is_link(phpbb_realpath($phpbb_root_path . 'templates/' .$file)) && $file != "." && $file != ".." && $file != "CVS" )
 797                      {
 798                          $s_template_select .= '<option value="' . $file . '">' . $file . "</option>\n";
 799                      }
 800                  }
 801                  $s_template_select .= '</select>';
 802              }
 803              else
 804              {
 805                  message_die(GENERAL_MESSAGE, $lang['No_template_dir']);
 806              }
 807              
 808              $template->assign_vars(array(
 809                  "L_STYLE_EXPORTER" => $lang['Export_themes'],
 810                  "L_EXPORTER_EXPLAIN" => $lang['Export_explain'],
 811                  "L_TEMPLATE_SELECT" => $lang['Select_template'],
 812                  "L_SUBMIT" => $lang['Submit'], 
 813   
 814                  "S_EXPORTER_ACTION" => append_sid("admin_styles.$phpEx?mode=export"),
 815                  "S_TEMPLATE_SELECT" => $s_template_select)
 816              );
 817              
 818              $template->pparse("body");
 819              
 820          }
 821          break;
 822   
 823      case "delete":
 824          $style_id = ( isset($HTTP_GET_VARS['style_id']) ) ? intval($HTTP_GET_VARS['style_id']) : intval($HTTP_POST_VARS['style_id']);
 825          
 826          if( !$confirm )
 827          {
 828              if($style_id == $board_config['default_style'])
 829              {
 830                  message_die(GENERAL_MESSAGE, $lang['Cannot_remove_style']);
 831              }
 832              
 833              $hidden_fields = '<input type="hidden" name="mode" value="'.$mode.'" /><input type="hidden" name="style_id" value="'.$style_id.'" />';
 834              
 835              //
 836              // Set template files
 837              //
 838              $template->set_filenames(array(
 839                  "confirm" => "admin/confirm_body.tpl")
 840              );
 841   
 842              $template->assign_vars(array(
 843                  "MESSAGE_TITLE" => $lang['Confirm'],
 844                  "MESSAGE_TEXT" => $lang['Confirm_delete_style'],
 845   
 846                  "L_YES" => $lang['Yes'],
 847                  "L_NO" => $lang['No'],
 848   
 849                  "S_CONFIRM_ACTION" => append_sid("admin_styles.$phpEx"),
 850                  "S_HIDDEN_FIELDS" => $hidden_fields)
 851              );
 852   
 853              $template->pparse("confirm");
 854   
 855          }
 856          else
 857          {
 858              //
 859              // The user has confirmed the delete. Remove the style, the style element
 860              // names and update any users who might be using this style
 861              //
 862              $sql = "DELETE FROM " . THEMES_TABLE . " 
 863                  WHERE themes_id = $style_id";
 864              if(!$result = $db->sql_query($sql, BEGIN_TRANSACTION))
 865              {
 866                  message_die(GENERAL_ERROR, "Could not remove style data!", "", __LINE__, __FILE__, $sql);
 867              }
 868              
 869              //
 870              // There may not be any theme name data so don't throw an error
 871              // if the SQL dosan't work
 872              //
 873              $sql = "DELETE FROM " . THEMES_NAME_TABLE . " 
 874                  WHERE themes_id = $style_id";
 875              $db->sql_query($sql);
 876   
 877              $sql = "UPDATE " . USERS_TABLE . " 
 878                  SET user_style = " . $board_config['default_style'] . " 
 879                  WHERE user_style = $style_id";
 880              if(!$result = $db->sql_query($sql, END_TRANSACTION))
 881              {
 882                  message_die(GENERAL_ERROR, "Could not update user style information", "", __LINE__, __FILE__, $sql);
 883              }
 884              
 885              $message = $lang['Style_removed'] . "<br /><br />" . sprintf($lang['Click_return_styleadmin'], "<a href=\"" . append_sid("admin_styles.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");
 886   
 887              message_die(GENERAL_MESSAGE, $message);
 888          }
 889          break;
 890   
 891      default:
 892          
 893          $sql = "SELECT themes_id, template_name, style_name 
 894              FROM " . THEMES_TABLE . " 
 895              ORDER BY template_name";
 896          if(!$result = $db->sql_query($sql))
 897          {
 898              message_die(GENERAL_ERROR, "Could not get style information!", "", __LINE__, __FILE__, $sql);
 899          }
 900          
 901          $style_rowset = $db->sql_fetchrowset($result);
 902          
 903          $template->set_filenames(array(
 904              "body" => "admin/styles_list_body.tpl")
 905          );
 906   
 907          $template->assign_vars(array(
 908              "L_STYLES_TITLE" => $lang['Styles_admin'],
 909              "L_STYLES_TEXT" => $lang['Styles_explain'],
 910              "L_STYLE" => $lang['Style'],
 911              "L_TEMPLATE" => $lang['Template'],
 912              "L_EDIT" => $lang['Edit'],
 913              "L_DELETE" => $lang['Delete'])
 914          );
 915                      
 916          for($i = 0; $i < count($style_rowset); $i++)
 917          {
 918              $row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
 919              $row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
 920   
 921              $template->assign_block_vars("styles", array(
 922                  "ROW_CLASS" => $row_class,
 923                  "ROW_COLOR" => $row_color,
 924                  "STYLE_NAME" => $style_rowset[$i]['style_name'],
 925                  "TEMPLATE_NAME" => $style_rowset[$i]['template_name'],
 926   
 927                  "U_STYLES_EDIT" => append_sid("admin_styles.$phpEx?mode=edit&amp;style_id=" . $style_rowset[$i]['themes_id']),
 928                  "U_STYLES_DELETE" => append_sid("admin_styles.$phpEx?mode=delete&amp;style_id=" . $style_rowset[$i]['themes_id']))
 929              );
 930          }
 931          
 932          $template->pparse("body");    
 933          break;
 934  }
 935   
 936  if (empty($HTTP_POST_VARS['send_file']))
 937  {
 938      include('./page_footer_admin.'.$phpEx);
 939  }
 940   
 941  ?>