plugins/admin/ThemeManager.php
author Dan
Sun, 25 Jan 2009 20:35:06 -0500
changeset 823 4596c40aaa94
parent 801 eb8b23f11744
child 976 50f8eb4f53e1
permissions -rw-r--r--
AJAX core library: possible breaking change, readystatechange functions are now called with the XHR instance as the first parameter, to allow requests to run in parallel. This means much better stability but may break some applets (compatibility hack is included)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
     1
<?php
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
     2
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
     3
/*
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
     4
 * Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
801
eb8b23f11744 Two big commits in one day I know, but redid password storage to use HMAC-SHA1. Consolidated much AES processing to three core methods in session that should handle everything automagically. Installation works; upgrades should. Rebranded as 1.1.6.
Dan
parents: 685
diff changeset
     5
 * Version 1.1.6 (Caoineag beta 1)
536
218a627eb53e Rebrand as 1.1.4 (Caoineag alpha 4)
Dan
parents: 504
diff changeset
     6
 * Copyright (C) 2006-2008 Dan Fuhry
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
     7
 *
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
     8
 * This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
     9
 * as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    10
 *
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    11
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    12
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    13
 */
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    14
465
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
    15
function page_Admin_ThemeManager($force_no_json = false)
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    16
{
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    17
  global $db, $session, $paths, $template, $plugins; // Common objects
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    18
  global $lang;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    19
  if ( $session->auth_level < USER_LEVEL_ADMIN || $session->user_level < USER_LEVEL_ADMIN )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    20
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    21
    $login_link = makeUrlNS('Special', 'Login/' . $paths->nslist['Special'] . 'Administration', 'level=' . USER_LEVEL_ADMIN, true);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    22
    echo '<h3>' . $lang->get('adm_err_not_auth_title') . '</h3>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    23
    echo '<p>' . $lang->get('adm_err_not_auth_body', array( 'login_link' => $login_link )) . '</p>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    24
    return;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    25
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    26
  
471
7906fb190fc1 Implemented all security features on theme disabling and ACLs; added clean_key mode to login API to clean unused encryption keys
Dan
parents: 465
diff changeset
    27
  $system_themes =& $template->system_themes;
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    28
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    29
  // Obtain the list of themes (both available and already installed) and the styles available for each
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    30
  $dh = @opendir(ENANO_ROOT . '/themes');
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    31
  if ( !$dh )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    32
    die('Couldn\'t open themes directory');
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    33
  $themes = array();
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    34
  while ( $dr = @readdir($dh) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    35
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    36
    if ( $dr == '.' || $dr == '..' )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    37
      continue;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    38
    if ( !is_dir(ENANO_ROOT . "/themes/$dr") )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    39
      continue;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    40
    if ( !file_exists(ENANO_ROOT . "/themes/$dr/theme.cfg") || !is_dir(ENANO_ROOT . "/themes/$dr/css") )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    41
      continue;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    42
    $cdh = @opendir(ENANO_ROOT . "/themes/$dr/css");
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    43
    if ( !$cdh )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    44
      continue;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    45
    
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    46
    require(ENANO_ROOT . "/themes/$dr/theme.cfg");
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    47
    global $theme;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    48
    
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    49
    $themes[$dr] = array(
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    50
        'css' => array(),
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    51
        'theme_name' => $theme['theme_name']
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    52
      );
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    53
    while ( $cdr = @readdir($cdh) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    54
    {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    55
      if ( $cdr == '.' || $cdr == '..' )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    56
        continue;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    57
      if ( preg_match('/\.css$/i', $cdr) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    58
        $themes[$dr]['css'][] = substr($cdr, 0, -4);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    59
    }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    60
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    61
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    62
  // Decide which themes are not installed
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    63
  $installable = array_flip(array_keys($themes));
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    64
  // FIXME: sanitize directory names or check with preg_match()
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    65
  $where_clause = 'theme_id = \'' . implode('\' OR theme_id = \'', array_flip($installable)) . '\'';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    66
  $q = $db->sql_query('SELECT theme_id, theme_name, enabled FROM ' . table_prefix . "themes WHERE $where_clause;");
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    67
  if ( !$q )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    68
    $db->_die();
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    69
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    70
  while ( $row = $db->fetchrow() )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    71
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    72
    $tid =& $row['theme_id'];
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    73
    unset($installable[$tid]);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    74
    $themes[$tid]['theme_name'] = $row['theme_name'];
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    75
    $themes[$tid]['enabled'] = ( $row['enabled'] == 1 );
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    76
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    77
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    78
  foreach ( $system_themes as $st )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    79
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    80
    unset($installable[$st]);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    81
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    82
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    83
  $installable = array_flip($installable);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    84
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    85
  // AJAX code
465
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
    86
  if ( $paths->getParam(0) === 'action.json' && !$force_no_json )
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    87
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    88
    return ajaxServlet_Admin_ThemeManager($themes);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    89
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    90
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    91
  // List installed themes
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    92
  ?>
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    93
  <div style="float: right;">
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    94
    <a href="#" id="systheme_toggler" onclick="ajaxToggleSystemThemes(); return false;"><?php echo $lang->get('acptm_btn_system_themes_show'); ?></a>
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    95
  </div>
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    96
  <?php
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    97
  echo '<h3>' . $lang->get('acptm_heading_edit_themes') . '</h3>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    98
  echo '<div id="theme_list_edit">';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    99
  foreach ( $themes as $theme_id => $theme_data )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   100
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   101
    if ( in_array($theme_id, $installable) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   102
      continue;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   103
    if ( file_exists(ENANO_ROOT . "/themes/$theme_id/preview.png") )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   104
    {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   105
      $preview_path = scriptPath . "/themes/$theme_id/preview.png";
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   106
    }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   107
    else
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   108
    {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   109
      $preview_path = scriptPath . "/images/themepreview.png";
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   110
    }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   111
    $d = ( @$theme_data['enabled'] ) ? '' : ' themebutton_theme_disabled';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   112
    $st = ( in_array($theme_id, $system_themes) ) ? ' themebutton_theme_system' : '';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   113
    echo '<div class="themebutton' . $st . '' . $d . '" id="themebtn_edit_' . $theme_id . '" style="background-image: url(' . $preview_path . ');">';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   114
    if ( in_array($theme_id, $system_themes) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   115
    {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   116
      echo   '<a class="tb-inner" href="#" onclick="return false;">
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   117
                ' . $lang->get('acptm_btn_theme_system') . '
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   118
                <span class="themename">' . htmlspecialchars($theme_data['theme_name']) . '</span>
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   119
              </a>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   120
    }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   121
    else
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   122
    {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   123
      echo   '<a class="tb-inner" href="#" onclick="ajaxEditTheme(\'' . $theme_id . '\'); return false;">
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   124
                ' . $lang->get('acptm_btn_theme_edit') . '
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   125
                <span class="themename">' . htmlspecialchars($theme_data['theme_name']) . '</span>
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   126
              </a>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   127
    }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   128
    echo '</div>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   129
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   130
  echo '</div>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   131
  echo '<span class="menuclear"></span>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   132
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   133
  if ( count($installable) > 0 )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   134
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   135
    echo '<h3>' . $lang->get('acptm_heading_install_themes') . '</h3>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   136
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   137
    echo '<div id="theme_list_install">';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   138
    foreach ( $installable as $i => $theme_id )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   139
    {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   140
      if ( file_exists(ENANO_ROOT . "/themes/$theme_id/preview.png") )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   141
      {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   142
        $preview_path = scriptPath . "/themes/$theme_id/preview.png";
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   143
      }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   144
      else
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   145
      {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   146
        $preview_path = scriptPath . "/images/themepreview.png";
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   147
      }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   148
      echo '<div class="themebutton" id="themebtn_install_' . $theme_id . '" enano:themename="' . htmlspecialchars($themes[$theme_id]['theme_name']) . '" style="background-image: url(' . $preview_path . ');">';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   149
      echo   '<a class="tb-inner" href="#" onclick="ajaxInstallTheme(\'' . $theme_id . '\'); return false;">
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   150
                ' . $lang->get('acptm_btn_theme_install') . '
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   151
                <span class="themename">' . htmlspecialchars($themes[$theme_id]['theme_name']) . '</span>
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   152
              </a>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   153
      echo '</div>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   154
    }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   155
    echo '</div>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   156
    echo '<span class="menuclear"></span>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   157
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   158
}
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   159
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   160
function ajaxServlet_Admin_ThemeManager(&$themes)
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   161
{
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   162
  global $db, $session, $paths, $template, $plugins; // Common objects
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   163
  global $lang;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   164
  if ( $session->auth_level < USER_LEVEL_ADMIN || $session->user_level < USER_LEVEL_ADMIN )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   165
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   166
    $login_link = makeUrlNS('Special', 'Login/' . $paths->nslist['Special'] . 'Administration', 'level=' . USER_LEVEL_ADMIN, true);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   167
    echo '<h3>' . $lang->get('adm_err_not_auth_title') . '</h3>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   168
    echo '<p>' . $lang->get('adm_err_not_auth_body', array( 'login_link' => $login_link )) . '</p>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   169
    return;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   170
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   171
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   172
  if ( !isset($_POST['r']) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   173
    return false;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   174
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   175
  try
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   176
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   177
    $request = enano_json_decode($_POST['r']);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   178
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   179
  catch ( Exception $e )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   180
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   181
    die('Exception in JSON parser, probably invalid input.');
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   182
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   183
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   184
  if ( !isset($request['mode']) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   185
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   186
    die('No mode specified in JSON request.');
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   187
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   188
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   189
  switch ( $request['mode'] )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   190
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   191
    case 'fetch_theme':
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   192
      $theme_id = $db->escape($request['theme_id']);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   193
      if ( empty($theme_id) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   194
        die('Invalid theme_id');
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   195
      
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   196
      $q = $db->sql_query("SELECT theme_id, theme_name, default_style, enabled, group_policy, group_list FROM " . table_prefix . "themes WHERE theme_id = '$theme_id';");
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   197
      if ( !$q )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   198
        $db->die_json();
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   199
      
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   200
      if ( $db->numrows() < 1 )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   201
        die('BUG: no theme with that theme_id installed.');
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   202
      
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   203
      $row = $db->fetchrow();
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   204
      $row['enabled'] = ( $row['enabled'] == 1 );
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   205
      $row['css'] = @$themes[$theme_id]['css'];
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   206
      $row['default_style'] = preg_replace('/\.css$/', '', $row['default_style']);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   207
      $row['is_default'] = ( getConfig('theme_default') === $theme_id );
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   208
      $row['group_list'] = ( empty($row['group_list']) ) ? array() : enano_json_decode($row['group_list']);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   209
      
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   210
      // Build a list of group names
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   211
      $row['group_names'] = array();
465
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   212
      $q = $db->sql_query('SELECT group_id, group_name FROM ' . table_prefix . 'groups;');
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   213
      if ( !$q )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   214
        $db->die_json();
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   215
      while ( $gr = $db->fetchrow() )
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   216
      {
465
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   217
        $row['group_names'][ intval($gr['group_id']) ] = $gr['group_name'];
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   218
      }
465
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   219
      $db->free_result();
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   220
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   221
      // Build a list of usernames
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   222
      $row['usernames'] = array();
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   223
      foreach ( $row['group_list'] as $el )
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   224
      {
465
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   225
        if ( !preg_match('/^u:([0-9]+)$/', $el, $match) )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   226
          continue;
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   227
        $uid =& $match[1];
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   228
        $q = $db->sql_query('SELECT username FROM ' . table_prefix . "users WHERE user_id = $uid;");
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   229
        if ( !$q )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   230
          $db->die_json();
465
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   231
        if ( $db->numrows() < 1 )
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   232
        {
465
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   233
          $db->free_result();
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   234
          continue;
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   235
        }
465
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   236
        list($username) = $db->fetchrow_num();
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   237
        $row['usernames'][$uid] = $username;
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   238
        $db->free_result();
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   239
      }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   240
      
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   241
      echo enano_json_encode($row);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   242
      break;
465
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   243
    case 'uid_lookup':
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   244
      $username = @$request['username'];
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   245
      if ( empty($username) )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   246
      {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   247
        die(enano_json_encode(array(
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   248
            'mode' => 'error',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   249
            'error' => $lang->get('acptm_err_invalid_username')
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   250
          )));
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   251
      }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   252
      $username = $db->escape(strtolower($username));
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   253
      $q = $db->sql_query('SELECT user_id, username FROM ' . table_prefix . "users WHERE " . ENANO_SQLFUNC_LOWERCASE . "(username) = '$username';");
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   254
      if ( !$q )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   255
        $db->die_json();
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   256
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   257
      if ( $db->numrows() < 1 )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   258
      {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   259
        die(enano_json_encode(array(
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   260
            'mode' => 'error',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   261
            'error' => $lang->get('acptm_err_username_not_found')
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   262
          )));
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   263
      }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   264
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   265
      list($uid, $username_real) = $db->fetchrow_num();
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   266
      $db->free_result();
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   267
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   268
      echo enano_json_encode(array(
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   269
          'uid' => $uid,
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   270
          'username' => $username_real
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   271
        ));
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   272
      break;
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   273
    case 'save_theme':
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   274
      if ( !isset($request['theme_data']) )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   275
      {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   276
        die(enano_json_encode(array(
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   277
            'mode' => 'error',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   278
            'error' => 'No theme data in request'
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   279
          )));
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   280
      }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   281
      $theme_data =& $request['theme_data'];
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   282
      // Perform integrity check on theme data
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   283
      $chk_theme_exists = isset($themes[@$theme_data['theme_id']]);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   284
      $theme_data['theme_name'] = trim(@$theme_data['theme_name']);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   285
      $chk_name_good = !empty($theme_data['theme_name']);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   286
      $chk_policy_good = in_array(@$theme_data['group_policy'], array('allow_all', 'whitelist', 'blacklist'));
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   287
      $chk_grouplist_good = true;
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   288
      foreach ( $theme_data['group_list'] as $acl_entry )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   289
      {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   290
        if ( !preg_match('/^(u|g):[0-9]+$/', $acl_entry) )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   291
        {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   292
          $chk_grouplist_good = false;
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   293
          break;
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   294
        }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   295
      }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   296
      $chk_style_good = @in_array(@$theme_data['default_style'], @$themes[@$theme_data['theme_id']]['css']);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   297
      if ( !$chk_theme_exists || !$chk_name_good || !$chk_policy_good || !$chk_grouplist_good || !$chk_style_good )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   298
      {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   299
        die(enano_json_encode(array(
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   300
            'mode' => 'error',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   301
            'error' => $lang->get('acptm_err_save_validation_failed')
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   302
          )));
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   303
      }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   304
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   305
      $enable = ( $theme_data['enabled'] ) ? '1' : '0';
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   306
      $theme_default = getConfig('theme_default');
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   307
      $warn_default = ( $theme_default === $theme_data['theme_id'] || $theme_data['make_default'] ) ?
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   308
                        ' ' . $lang->get('acptm_warn_access_with_default') . ' ' :
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   309
                        ' ';
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   310
      if ( $enable == 0 && ( $theme_default === $theme_data['theme_id'] || $theme_data['make_default'] ) )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   311
      {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   312
        $enable = '1';
471
7906fb190fc1 Implemented all security features on theme disabling and ACLs; added clean_key mode to login API to clean unused encryption keys
Dan
parents: 465
diff changeset
   313
        $warn_default .= '<b>' . $lang->get('acptm_warn_cant_disable_default') . '</b>';
465
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   314
      }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   315
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   316
      // We're good. Update the theme...
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   317
      $q = $db->sql_query('UPDATE ' . table_prefix . 'themes SET
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   318
                               theme_name = \'' . $db->escape($theme_data['theme_name']) . '\',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   319
                               default_style = \'' . $db->escape($theme_data['default_style']) . '\',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   320
                               group_list = \'' . $db->escape(enano_json_encode($theme_data['group_list'])) . '\',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   321
                               group_policy = \'' . $db->escape($theme_data['group_policy']) . '\',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   322
                               enabled = ' . $enable . '
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   323
                             WHERE theme_id = \'' . $db->escape($theme_data['theme_id']) . '\';');
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   324
      if ( !$q )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   325
        $db->die_json();
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   326
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   327
      if ( $theme_data['make_default'] )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   328
      {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   329
        setConfig('theme_default', $theme_data['theme_id']);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   330
      }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   331
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   332
      echo '<div class="info-box"><b>' . $lang->get('acptm_msg_save_success') . '</b>' . $warn_default . '</div>';
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   333
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   334
      page_Admin_ThemeManager(true);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   335
      break;
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   336
    case 'install':
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   337
      $theme_id =& $request['theme_id'];
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   338
      if ( !isset($themes[$theme_id]) )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   339
      {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   340
        die(enano_json_encode(array(
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   341
            'mode' => 'error',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   342
            'error' => 'Theme was deleted from themes/ directory or couldn\'t read theme metadata from filesystem'
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   343
          )));
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   344
      }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   345
      if ( !isset($themes[$theme_id]['css'][0]) )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   346
      {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   347
        die(enano_json_encode(array(
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   348
            'mode' => 'error',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   349
            'error' => 'Theme doesn\'t have any files in css/, thus it can\'t be installed. (translators: l10n?)'
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   350
          )));
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   351
      }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   352
      // build dataset
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   353
      $theme_name = $db->escape($themes[$theme_id]['theme_name']);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   354
      $default_style = $db->escape($themes[$theme_id]['css'][0]);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   355
      $theme_id = $db->escape($theme_id);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   356
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   357
      // insert it
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   358
      $q = $db->sql_query('INSERT INTO ' . table_prefix . "themes(theme_id, theme_name, default_style, enabled, group_list, group_policy)\n"
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   359
                        . "  VALUES( '$theme_id', '$theme_name', '$default_style', 1, '[]', 'allow_all' );");
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   360
      if ( !$q )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   361
        $db->die_json();
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   362
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   363
      // The response isn't processed unless it's in JSON.
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   364
      echo 'Roger that, over and out.';
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   365
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   366
      break;
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   367
    case 'uninstall':
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   368
      $theme_id =& $request['theme_id'];
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   369
      $theme_default = getConfig('theme_default');
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   370
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   371
      // Validation
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   372
      if ( !isset($themes[$theme_id]) )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   373
      {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   374
        die(enano_json_encode(array(
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   375
            'mode' => 'error',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   376
            'error' => 'Theme was deleted from themes/ directory or couldn\'t read theme metadata from filesystem'
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   377
          )));
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   378
      }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   379
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   380
      if ( $theme_id == $theme_default )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   381
      {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   382
        die(enano_json_encode(array(
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   383
            'mode' => 'error',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   384
            'error' => $lang->get('acptm_err_uninstalling_default')
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   385
          )));
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   386
      }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   387
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   388
      if ( $theme_id == 'oxygen' )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   389
      {
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   390
        die(enano_json_encode(array(
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   391
            'mode' => 'error',
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   392
            'error' => $lang->get('acptm_err_uninstalling_oxygen')
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   393
          )));
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   394
      }
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   395
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   396
      $theme_id = $db->escape($theme_id);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   397
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   398
      $q = $db->sql_query('DELETE FROM ' . table_prefix . "themes WHERE theme_id = '$theme_id';");
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   399
      if ( !$q )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   400
        $db->die_json();
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   401
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   402
      // Change all the users that were on that theme to the default
477
c4d6e9b3b964 Fixed bad style update during theme uninstall.
Dan
parents: 471
diff changeset
   403
      $default_style = $template->named_theme_list[$theme_default]['default_style'];
465
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   404
      $default_style = preg_replace('/\.css$/', '', $default_style);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   405
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   406
      $theme_default = $db->escape($theme_default);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   407
      $default_style = $db->escape($default_style);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   408
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   409
      $q = $db->sql_query('UPDATE ' . table_prefix . "users SET theme = '$theme_default', style = '$default_style' WHERE theme = '$theme_id';");
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   410
      if ( !$q )
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   411
        $db->die_json();
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   412
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   413
      echo '<div class="info-box">' . $lang->get('acptm_msg_uninstall_success') . '</div>';
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   414
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   415
      page_Admin_ThemeManager(true);
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   416
      break;
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   417
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   418
}
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   419