plugins/admin/ThemeManager.php
author Dan
Thu, 17 Dec 2009 04:27:50 -0500
changeset 1168 277a9cdead3e
parent 1081 745200a9cc2a
child 1227 bdac73ed481e
permissions -rw-r--r--
Namespace_Default: added a workaround for an inconsistency in SQL. Basically, if you join the same table multiple times under multiple aliases, COUNT() always uses the first instance. Was affecting the comment counter in the "discussion" button.
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
1081
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 976
diff changeset
     5
 * Copyright (C) 2006-2009 Dan Fuhry
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
     6
 *
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
     7
 * 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
     8
 * 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
     9
 *
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    10
 * 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
    11
 * 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
    12
 */
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    13
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
    14
function page_Admin_ThemeManager($force_no_json = false)
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    15
{
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    16
  global $db, $session, $paths, $template, $plugins; // Common objects
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    17
  global $lang;
976
50f8eb4f53e1 Added cache for installed themes
Dan
parents: 801
diff changeset
    18
  global $cache;
50f8eb4f53e1 Added cache for installed themes
Dan
parents: 801
diff changeset
    19
  
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    20
  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
    21
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    22
    $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
    23
    echo '<h3>' . $lang->get('adm_err_not_auth_title') . '</h3>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    24
    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
    25
    return;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    26
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    27
  
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
    28
  $system_themes =& $template->system_themes;
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    29
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    30
  // 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
    31
  $dh = @opendir(ENANO_ROOT . '/themes');
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    32
  if ( !$dh )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    33
    die('Couldn\'t open themes directory');
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    34
  $themes = array();
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    35
  while ( $dr = @readdir($dh) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    36
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    37
    if ( $dr == '.' || $dr == '..' )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    38
      continue;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    39
    if ( !is_dir(ENANO_ROOT . "/themes/$dr") )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    40
      continue;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    41
    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
    42
      continue;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    43
    $cdh = @opendir(ENANO_ROOT . "/themes/$dr/css");
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    44
    if ( !$cdh )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    45
      continue;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    46
    
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    47
    require(ENANO_ROOT . "/themes/$dr/theme.cfg");
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    48
    global $theme;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    49
    
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    50
    $themes[$dr] = array(
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    51
        'css' => array(),
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    52
        'theme_name' => $theme['theme_name']
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    53
      );
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    54
    while ( $cdr = @readdir($cdh) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    55
    {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    56
      if ( $cdr == '.' || $cdr == '..' )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    57
        continue;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    58
      if ( preg_match('/\.css$/i', $cdr) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    59
        $themes[$dr]['css'][] = substr($cdr, 0, -4);
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
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    63
  // Decide which themes are not installed
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    64
  $installable = array_flip(array_keys($themes));
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    65
  // FIXME: sanitize directory names or check with preg_match()
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    66
  $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
    67
  $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
    68
  if ( !$q )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    69
    $db->_die();
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    70
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    71
  while ( $row = $db->fetchrow() )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    72
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    73
    $tid =& $row['theme_id'];
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    74
    unset($installable[$tid]);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    75
    $themes[$tid]['theme_name'] = $row['theme_name'];
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    76
    $themes[$tid]['enabled'] = ( $row['enabled'] == 1 );
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
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    79
  foreach ( $system_themes as $st )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    80
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    81
    unset($installable[$st]);
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
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    84
  $installable = array_flip($installable);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    85
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    86
  // 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
    87
  if ( $paths->getParam(0) === 'action.json' && !$force_no_json )
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    88
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    89
    return ajaxServlet_Admin_ThemeManager($themes);
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
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    92
  // List installed themes
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    93
  ?>
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    94
  <div style="float: right;">
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    95
    <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
    96
  </div>
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    97
  <?php
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    98
  echo '<h3>' . $lang->get('acptm_heading_edit_themes') . '</h3>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
    99
  echo '<div id="theme_list_edit">';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   100
  foreach ( $themes as $theme_id => $theme_data )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   101
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   102
    if ( in_array($theme_id, $installable) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   103
      continue;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   104
    if ( file_exists(ENANO_ROOT . "/themes/$theme_id/preview.png") )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   105
    {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   106
      $preview_path = scriptPath . "/themes/$theme_id/preview.png";
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   107
    }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   108
    else
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   109
    {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   110
      $preview_path = scriptPath . "/images/themepreview.png";
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   111
    }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   112
    $d = ( @$theme_data['enabled'] ) ? '' : ' themebutton_theme_disabled';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   113
    $st = ( in_array($theme_id, $system_themes) ) ? ' themebutton_theme_system' : '';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   114
    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
   115
    if ( in_array($theme_id, $system_themes) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   116
    {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   117
      echo   '<a class="tb-inner" href="#" onclick="return false;">
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   118
                ' . $lang->get('acptm_btn_theme_system') . '
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   119
                <span class="themename">' . htmlspecialchars($theme_data['theme_name']) . '</span>
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   120
              </a>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   121
    }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   122
    else
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   123
    {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   124
      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
   125
                ' . $lang->get('acptm_btn_theme_edit') . '
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   126
                <span class="themename">' . htmlspecialchars($theme_data['theme_name']) . '</span>
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   127
              </a>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   128
    }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   129
    echo '</div>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   130
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   131
  echo '</div>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   132
  echo '<span class="menuclear"></span>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   133
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   134
  if ( count($installable) > 0 )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   135
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   136
    echo '<h3>' . $lang->get('acptm_heading_install_themes') . '</h3>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   137
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   138
    echo '<div id="theme_list_install">';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   139
    foreach ( $installable as $i => $theme_id )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   140
    {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   141
      if ( file_exists(ENANO_ROOT . "/themes/$theme_id/preview.png") )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   142
      {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   143
        $preview_path = scriptPath . "/themes/$theme_id/preview.png";
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   144
      }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   145
      else
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   146
      {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   147
        $preview_path = scriptPath . "/images/themepreview.png";
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   148
      }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   149
      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
   150
      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
   151
                ' . $lang->get('acptm_btn_theme_install') . '
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   152
                <span class="themename">' . htmlspecialchars($themes[$theme_id]['theme_name']) . '</span>
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   153
              </a>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   154
      echo '</div>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   155
    }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   156
    echo '</div>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   157
    echo '<span class="menuclear"></span>';
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
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   161
function ajaxServlet_Admin_ThemeManager(&$themes)
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   162
{
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   163
  global $db, $session, $paths, $template, $plugins; // Common objects
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   164
  global $lang;
976
50f8eb4f53e1 Added cache for installed themes
Dan
parents: 801
diff changeset
   165
  global $cache;
50f8eb4f53e1 Added cache for installed themes
Dan
parents: 801
diff changeset
   166
  
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   167
  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
   168
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   169
    $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
   170
    echo '<h3>' . $lang->get('adm_err_not_auth_title') . '</h3>';
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   171
    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
   172
    return;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   173
  }
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
  if ( !isset($_POST['r']) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   176
    return false;
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   177
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   178
  try
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   179
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   180
    $request = enano_json_decode($_POST['r']);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   181
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   182
  catch ( Exception $e )
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
    die('Exception in JSON parser, probably invalid input.');
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
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   187
  if ( !isset($request['mode']) )
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
    die('No mode specified in JSON request.');
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
  
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   192
  switch ( $request['mode'] )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   193
  {
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   194
    case 'fetch_theme':
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   195
      $theme_id = $db->escape($request['theme_id']);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   196
      if ( empty($theme_id) )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   197
        die('Invalid theme_id');
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   198
      
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   199
      $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
   200
      if ( !$q )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   201
        $db->die_json();
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
      if ( $db->numrows() < 1 )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   204
        die('BUG: no theme with that theme_id installed.');
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   205
      
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   206
      $row = $db->fetchrow();
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   207
      $row['enabled'] = ( $row['enabled'] == 1 );
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   208
      $row['css'] = @$themes[$theme_id]['css'];
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   209
      $row['default_style'] = preg_replace('/\.css$/', '', $row['default_style']);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   210
      $row['is_default'] = ( getConfig('theme_default') === $theme_id );
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   211
      $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
   212
      
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   213
      // Build a list of group names
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   214
      $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
   215
      $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
   216
      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
   217
        $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
   218
      while ( $gr = $db->fetchrow() )
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   219
      {
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
   220
        $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
   221
      }
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
   222
      $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
   223
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   224
      // 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
   225
      $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
   226
      foreach ( $row['group_list'] as $el )
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   227
      {
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
   228
        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
   229
          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
   230
        $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
   231
        $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
   232
        if ( !$q )
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   233
          $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
   234
        if ( $db->numrows() < 1 )
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
          $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
   237
          continue;
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   238
        }
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
   239
        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
   240
        $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
   241
        $db->free_result();
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   242
      }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   243
      
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   244
      echo enano_json_encode($row);
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   245
      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
   246
    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
   247
      $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
   248
      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
   249
      {
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
        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
   251
            '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
   252
            '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
   253
          )));
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
      }
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
      $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
   256
      $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
   257
      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
   258
        $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
   259
      
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
      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
   261
      {
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
        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
   263
            '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
   264
            '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
   265
          )));
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
      }
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
      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
   269
      $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
   270
      
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
      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
   272
          '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
   273
          '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
   274
        ));
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
      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
   276
    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
   277
      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
   278
      {
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
        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
   280
            '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
   281
            '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
   282
          )));
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
      }
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 =& $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
   285
      // 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
   286
      $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
   287
      $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
   288
      $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
   289
      $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
   290
      $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
   291
      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
   292
      {
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
        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
   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
          $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
   296
          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
   297
        }
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
      $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
   300
      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
   301
      {
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
        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
   303
            '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
   304
            '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
   305
          )));
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
      }
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
      
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
      $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
   309
      $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
   310
      $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
   311
                        ' ' . $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
   312
                        ' ';
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   313
      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
   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
        $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
   316
        $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
   317
      }
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
      
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
      // 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
   320
      $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
   321
                               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
   322
                               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
   323
                               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
   324
                               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
   325
                               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
   326
                             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
   327
      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
   328
        $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
   329
      
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
      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
   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
        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
   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
      
976
50f8eb4f53e1 Added cache for installed themes
Dan
parents: 801
diff changeset
   335
      $cache->purge('themes');
50f8eb4f53e1 Added cache for installed themes
Dan
parents: 801
diff changeset
   336
      
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
   337
      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
   338
      
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
      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
   340
      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
   341
    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
   342
      $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
   343
      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
   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
        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
   346
            '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
   347
            '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
   348
          )));
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
      }
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
      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
   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
        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
   353
            '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
   354
            '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
   355
          )));
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
      // 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
   358
      $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
   359
      $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
   360
      $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
   361
      
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
      // 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
   363
      $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
   364
                        . "  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
   365
      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
   366
        $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
   367
      
976
50f8eb4f53e1 Added cache for installed themes
Dan
parents: 801
diff changeset
   368
      $cache->purge('themes');
50f8eb4f53e1 Added cache for installed themes
Dan
parents: 801
diff changeset
   369
      
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
   370
      // 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
   371
      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
   372
      
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
      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
   374
    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
   375
      $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
   376
      $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
   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
      // 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
   379
      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
   380
      {
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
        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
   382
            '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
   383
            '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
   384
          )));
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
      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
   388
      {
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
        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
   390
            '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
   391
            '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
   392
          )));
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
      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
   396
      {
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
        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
   398
            '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
   399
            '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
   400
          )));
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
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   403
      $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
   404
      
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
      $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
   406
      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
   407
        $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
   408
      
976
50f8eb4f53e1 Added cache for installed themes
Dan
parents: 801
diff changeset
   409
      $cache->purge('themes');
50f8eb4f53e1 Added cache for installed themes
Dan
parents: 801
diff changeset
   410
      
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
   411
      // 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
   412
      $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
   413
      $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
   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
      $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
   416
      $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
   417
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   418
      $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
   419
      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
   420
        $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
   421
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   422
      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
   423
      
fe8b8c9b54e8 Finished theme manager to the point where it's in a working state in Firefox and hopefully IE.
Dan
parents: 433
diff changeset
   424
      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
   425
      break;
433
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   426
  }
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   427
}
c892b2013d3e Can't believe I forgot to add ThemeManager.php.
Dan
parents:
diff changeset
   428