home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 April (DVD) / PCWorld_2008-04_DVD.iso / temadvd / phpbb / phpBB-2.0.22.exe / phpBB2 / admin / admin_styles.php < prev    next >
Encoding:
PHP Script  |  2006-12-19  |  30.9 KB  |  941 lines

  1. <?php
  2. /***************************************************************************
  3.  *                              admin_styles.php
  4.  *                            -------------------
  5.  *   begin                : Thursday, Jul 12, 2001
  6.  *   copyright            : (C) 2001 The phpBB Group
  7.  *   email                : support@phpbb.com
  8.  *
  9.  *   $Id: admin_styles.php,v 1.27.2.17 2006/04/20 13:34:15 grahamje Exp $
  10.  *
  11.  *
  12.  ***************************************************************************/
  13.  
  14. /***************************************************************************
  15.  *
  16.  *   This program is free software; you can redistribute it and/or modify
  17.  *   it under the terms of the GNU General Public License as published by
  18.  *   the Free Software Foundation; either version 2 of the License, or
  19.  *   (at your option) any later version.
  20.  *
  21.  ***************************************************************************/
  22.  
  23. define('IN_PHPBB', 1);
  24.  
  25. if( !empty($setmodules) )
  26. {
  27.     $file = basename(__FILE__);
  28.     $module['Styles']['Add_new'] = "$file?mode=addnew";
  29.     $module['Styles']['Create_new'] = "$file?mode=create";
  30.     $module['Styles']['Manage'] = $file;
  31.     $module['Styles']['Export'] = "$file?mode=export";
  32.     return;
  33. }
  34.  
  35. //
  36. // Load default header
  37. //
  38. //
  39. // Check if the user has cancled a confirmation message.
  40. //
  41. $phpbb_root_path = "./../";
  42. require($phpbb_root_path . 'extension.inc');
  43.  
  44. $confirm = ( isset($HTTP_POST_VARS['confirm']) ) ? TRUE : FALSE;
  45. $cancel = ( isset($HTTP_POST_VARS['cancel']) ) ? TRUE : FALSE;
  46.  
  47. $no_page_header = (!empty($HTTP_POST_VARS['send_file']) || $cancel) ? TRUE : FALSE;
  48.  
  49. require('./pagestart.' . $phpEx);
  50.  
  51. $confirm = ( isset($HTTP_POST_VARS['confirm']) ) ? TRUE : FALSE;
  52. $cancel = ( isset($HTTP_POST_VARS['cancel']) ) ? TRUE : FALSE;
  53.  
  54. if ($cancel)
  55. {
  56.     redirect('admin/' . append_sid("admin_styles.$phpEx", true));
  57. }
  58.  
  59. if( isset($HTTP_GET_VARS['mode']) || isset($HTTP_POST_VARS['mode']) )
  60. {
  61.     $mode = ( isset($HTTP_GET_VARS['mode']) ) ? $HTTP_GET_VARS['mode'] : $HTTP_POST_VARS['mode'];
  62.     $mode = htmlspecialchars($mode);
  63. }
  64. else 
  65. {
  66.     $mode = "";
  67. }
  68.  
  69. switch( $mode )
  70. {
  71.     case "addnew":
  72.         $install_to = ( isset($HTTP_GET_VARS['install_to']) ) ? urldecode($HTTP_GET_VARS['install_to']) : $HTTP_POST_VARS['install_to'];
  73.         $style_name = ( isset($HTTP_GET_VARS['style']) ) ? urldecode($HTTP_GET_VARS['style']) : $HTTP_POST_VARS['style'];
  74.     
  75.         if( isset($install_to) )
  76.         {
  77.  
  78.             include($phpbb_root_path. "templates/" . basename($install_to) . "/theme_info.cfg");
  79.  
  80.             $template_name = $$install_to;
  81.             $found = FALSE; 
  82.             
  83.             for($i = 0; $i < count($template_name) && !$found; $i++)
  84.             {
  85.                 if( $template_name[$i]['style_name'] == $style_name )
  86.                 {
  87.                     while(list($key, $val) = each($template_name[$i]))
  88.                     {
  89.                         $db_fields[] = $key;
  90.                         $db_values[] = str_replace("\'", "''" , $val);
  91.                     }
  92.                 }
  93.             }
  94.                     
  95.             $sql = "INSERT INTO " . THEMES_TABLE . " (";
  96.  
  97.             for($i = 0; $i < count($db_fields); $i++)
  98.             {
  99.                 $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&style=" . urlencode($installable_themes[$i]['style_name']) . "&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&style_id=" . $style_rowset[$i]['themes_id']),
  928.                 "U_STYLES_DELETE" => append_sid("admin_styles.$phpEx?mode=delete&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. ?>