plugins/admin/CacheManager.php
changeset 613 c08670a77871
parent 605 d2d4e40ecd29
child 685 17ebe24cdf85
equal deleted inserted replaced
612:3e73e4996d64 613:c08670a77871
    16 
    16 
    17 function page_Admin_CacheManager()
    17 function page_Admin_CacheManager()
    18 {
    18 {
    19   global $db, $session, $paths, $template, $plugins; // Common objects
    19   global $db, $session, $paths, $template, $plugins; // Common objects
    20   global $lang;
    20   global $lang;
       
    21   global $cache;
    21   if ( $session->auth_level < USER_LEVEL_ADMIN || $session->user_level < USER_LEVEL_ADMIN )
    22   if ( $session->auth_level < USER_LEVEL_ADMIN || $session->user_level < USER_LEVEL_ADMIN )
    22   {
    23   {
    23     $login_link = makeUrlNS('Special', 'Login/' . $paths->nslist['Special'] . 'Administration', 'level=' . USER_LEVEL_ADMIN, true);
    24     $login_link = makeUrlNS('Special', 'Login/' . $paths->nslist['Special'] . 'Administration', 'level=' . USER_LEVEL_ADMIN, true);
    24     echo '<h3>' . $lang->get('adm_err_not_auth_title') . '</h3>';
    25     echo '<h3>' . $lang->get('adm_err_not_auth_title') . '</h3>';
    25     echo '<p>' . $lang->get('adm_err_not_auth_body', array( 'login_link' => $login_link )) . '</p>';
    26     echo '<p>' . $lang->get('adm_err_not_auth_body', array( 'login_link' => $login_link )) . '</p>';
    26     return;
    27     return;
    27   }
    28   }
    28   
    29   
       
    30   // validation/actions
       
    31   if ( isset($_POST['refresh']) || isset($_POST['clear']) )
       
    32   {
       
    33     $success = false;
       
    34     
       
    35     $target = ( isset($_POST['refresh']) ) ? $_POST['refresh'] : $_POST['clear'];
       
    36     $do_refresh = isset($_POST['refresh']);
       
    37     switch ( $target )
       
    38     {
       
    39       case 'page':
       
    40         $success = $cache->purge('page_meta');
       
    41         if ( $do_refresh && $success )
       
    42           $success = $paths->update_metadata_cache();
       
    43         break;
       
    44       case 'ranks':
       
    45         $success = $cache->purge('ranks');
       
    46         if ( $do_refresh && $success )
       
    47           $success = generate_cache_userranks();
       
    48         break;
       
    49       case 'sidebar':
       
    50         $success = $cache->purge('anon_sidebar');
       
    51         break;
       
    52       case 'plugins':
       
    53         $success = $cache->purge('plugins');
       
    54         if ( $do_refresh && $success )
       
    55           $success = $plugins->generate_plugins_cache();
       
    56         break;
       
    57       case 'template':
       
    58         if ( $dh = opendir(ENANO_ROOT . '/cache') )
       
    59         {
       
    60           while ( $file = @readdir($dh) )
       
    61           {
       
    62             $fullpath = ENANO_ROOT . "/cache/$file";
       
    63             // we don't want to mess with directories
       
    64             if ( !is_file($fullpath) )
       
    65               continue;
       
    66             
       
    67             if ( preg_match('/\.(?:tpl|css)\.php$/', $file) )
       
    68             {
       
    69               unlink($fullpath);
       
    70             }
       
    71           }
       
    72           $success = true;
       
    73         }
       
    74         break;
       
    75       case 'aes':
       
    76         $success = @unlink(ENANO_ROOT . '/cache/aes_decrypt.php');
       
    77         break;
       
    78       case 'lang':
       
    79         if ( $dh = opendir(ENANO_ROOT . '/cache') )
       
    80         {
       
    81           while ( $file = @readdir($dh) )
       
    82           {
       
    83             $fullpath = ENANO_ROOT . "/cache/$file";
       
    84             // we don't want to mess with directories
       
    85             if ( !is_file($fullpath) )
       
    86               continue;
       
    87             
       
    88             if ( preg_match('/^lang_json_(?:[a-f0-9]+?)\.php$/', $file) || preg_match('/^(?:cache_)?lang_(?:[0-9]+?)\.php$/', $file) )
       
    89               unlink($fullpath);
       
    90           }
       
    91           $success = true;
       
    92         }
       
    93         if ( $do_refresh && $success )
       
    94         {
       
    95           // for each language in the database, call regen_caches()
       
    96           $q = $db->sql_query('SELECT lang_id FROM ' . table_prefix . 'language;');
       
    97           if ( !$q )
       
    98             $db->_die();
       
    99           while ( $row = $db->fetchrow($q) )
       
   100           {
       
   101             $lang_local = ( $row['lang_id'] == $lang->lang_id ) ? $lang : new Language($row['lang_id']);
       
   102             $success = $lang_local->regen_caches();
       
   103             if ( !$success )
       
   104               break 2;
       
   105           }
       
   106         }
       
   107         break;
       
   108       case 'js':
       
   109         if ( $dh = opendir(ENANO_ROOT . '/cache') )
       
   110         {
       
   111           while ( $file = @readdir($dh) )
       
   112           {
       
   113             $fullpath = ENANO_ROOT . "/cache/$file";
       
   114             // we don't want to mess with directories
       
   115             if ( !is_file($fullpath) )
       
   116               continue;
       
   117             
       
   118             // compressed javascript
       
   119             if ( preg_match('/^jsres_(?:[A-z0-9_-]+)\.js\.json$/', $file) )
       
   120               unlink($fullpath);
       
   121             // tinymce stuff
       
   122             else if ( preg_match('/^tiny_mce_(?:[a-f0-9]+)\.gz$/', $file) )
       
   123               unlink($fullpath);
       
   124           }
       
   125           $success = true;
       
   126         }
       
   127         break;
       
   128       case 'thumbs':
       
   129         if ( $dh = opendir(ENANO_ROOT . '/cache') )
       
   130         {
       
   131           while ( $file = @readdir($dh) )
       
   132           {
       
   133             $fullpath = ENANO_ROOT . "/cache/$file";
       
   134             // we don't want to mess with directories
       
   135             if ( !is_file($fullpath) )
       
   136               continue;
       
   137             
       
   138             if ( preg_match('/^(?:[a-z0-9\._,-]+)-(?:[0-9]{10})-[0-9]+x[0-9]+\.([a-z0-9_-]+)$/i', $file) )
       
   139               unlink($fullpath);
       
   140           }
       
   141           $success = true;
       
   142         }
       
   143         break;
       
   144       case 'all':
       
   145         $success = purge_all_caches();
       
   146         if ( $do_refresh )
       
   147         {
       
   148           //
       
   149           // refresh all static (non-incremental) caches
       
   150           //
       
   151           
       
   152           // pages
       
   153           $success = $paths->update_metadata_cache();
       
   154           if ( !$success )
       
   155             break;
       
   156           
       
   157           // user ranks
       
   158           $success = generate_cache_userranks();
       
   159           if ( !$success )
       
   160             break;
       
   161           
       
   162           // plugins
       
   163           $success = $plugins->generate_plugins_cache();
       
   164           if ( !$success )
       
   165             break;
       
   166           
       
   167           // languages
       
   168           $q = $db->sql_query('SELECT lang_id FROM ' . table_prefix . 'language;');
       
   169           if ( !$q )
       
   170             $db->_die();
       
   171           while ( $row = $db->fetchrow($q) )
       
   172           {
       
   173             $lang_local = ( $row['lang_id'] == $lang->lang_id ) ? $lang : new Language($row['lang_id']);
       
   174             $success = $lang_local->regen_caches();
       
   175             if ( !$success )
       
   176               break 2;
       
   177           }
       
   178         }
       
   179         break;
       
   180       default:
       
   181         $code = $plugins->setHook('acp_cache_manager_action');
       
   182         foreach ( $code as $cmd )
       
   183         {
       
   184           eval($cmd);
       
   185         }
       
   186         break;
       
   187     }
       
   188     if ( $success )
       
   189     {
       
   190       echo '<div class="info-box">' . $lang->get('acpcm_msg_action_success') . '</div>';
       
   191     }
       
   192     else
       
   193     {
       
   194       echo '<div class="error-box">' . $lang->get('acpcm_err_action_failed') . '</div>';
       
   195     }
       
   196   }
       
   197   else if ( isset($_POST['save']) )
       
   198   {
       
   199     $config_value = ( isset($_POST['cache_thumbs']) ) ? '1' : '0';
       
   200     setConfig('cache_thumbs', $config_value);
       
   201     echo '<div class="info-box">' . $lang->get('acpcm_msg_action_success') . '</div>';
       
   202   }
       
   203   
    29   echo '<h3><img alt=" " src="' . scriptPath . '/images/icons/applets/cachemanager.png" />&nbsp;&nbsp;&nbsp;' . $lang->get('acpcm_heading_main') . '</h3>';
   204   echo '<h3><img alt=" " src="' . scriptPath . '/images/icons/applets/cachemanager.png" />&nbsp;&nbsp;&nbsp;' . $lang->get('acpcm_heading_main') . '</h3>';
    30   echo '<p>' . $lang->get('acpcm_intro') . '</p>';
   205   echo '<p>' . $lang->get('acpcm_intro') . '</p>';
       
   206   
       
   207   echo '<div class="warning-box">' . $lang->get('acpcm_msg_refresh_warning') . '</div>';
    31   
   208   
    32   acp_start_form();
   209   acp_start_form();
    33   ?>
   210   ?>
    34   <div class="tblholder">
   211   <div class="tblholder">
    35     <table border="0" cellspacing="1" cellpadding="4">
   212     <table border="0" cellspacing="1" cellpadding="4">
    54         </td>
   231         </td>
    55       </tr>
   232       </tr>
    56       
   233       
    57       <!-- CLEAR ALL -->
   234       <!-- CLEAR ALL -->
    58       <tr>
   235       <tr>
    59         <td class="row2">
   236       <td class="row2" style="width: 120px; text-align: center;">
    60           <input type="submit" name="clear_all" value="<?php echo $lang->get('acpcm_btn_clear_all'); ?>" />
   237           <button name="clear" value="all"><?php echo $lang->get('acpcm_btn_clear_all'); ?></button>
    61         </td>
   238         </td>
    62         <td class="row2">
   239         <td class="row2">
    63           <?php echo $lang->get('acpcm_hint_clear_all'); ?>
   240           <?php echo $lang->get('acpcm_hint_clear_all'); ?>
    64         </td>
   241         </td>
    65       </tr>
   242       </tr>
    66       
   243       
       
   244       <?php
       
   245       // if caching is disabled, might as well break off here
       
   246       if ( getConfig('cache_thumbs') == '1' ):
       
   247       ?>
       
   248       
    67       <!-- REFRESH ALL -->
   249       <!-- REFRESH ALL -->
    68       <tr>
   250       <tr>
    69         <td class="row1">
   251         <td class="row1" style="text-align: center;">
    70           <input type="submit" name="refresh_all" value="<?php echo $lang->get('acpcm_btn_refresh_all'); ?>" />
   252           <button name="refresh" value="all"><?php echo $lang->get('acpcm_btn_refresh_all'); ?></button>
    71         </td>
   253         </td>
    72         <td class="row1">
   254         <td class="row1">
    73           <?php echo $lang->get('acpcm_hint_refresh_all'); ?>
   255           <?php echo $lang->get('acpcm_hint_refresh_all'); ?>
    74         </td>
   256         </td>
    75       </tr>
   257       </tr>
       
   258       
       
   259       <!-- INDIVIDUAL CACHES -->
       
   260       <tr>
       
   261         <th class="subhead" colspan="2">
       
   262           <?php echo $lang->get('acpcm_th_individual_caches'); ?>
       
   263         </th>
       
   264       </tr>
       
   265       
       
   266       <?php
       
   267       $class = 'row2';
       
   268       $cache_list = array('page', 'ranks', 'sidebar', 'plugins', 'template', 'aes', 'lang', 'js', 'thumbs');
       
   269       $code = $plugins->setHook('acp_cache_manager_list_caches');
       
   270       foreach ( $code as $cmd )
       
   271       {
       
   272         eval($cmd);
       
   273       }
       
   274       foreach ( $cache_list as $target )
       
   275       {
       
   276         $class = ( $class == 'row1' ) ? 'row2' : 'row1';
       
   277         ?><tr>
       
   278         <td class="<?php echo $class; ?>" style="text-align: center;">
       
   279           <button name="refresh" value="<?php echo $target; ?>"<?php if ( in_array($target, array('template', 'sidebar', 'aes', 'js', 'thumbs')) ) echo ' disabled="disabled"'; ?>>
       
   280             <?php echo $lang->get('acpcm_btn_refresh'); ?>
       
   281           </button>
       
   282           <button name="clear" value="<?php echo $target; ?>">
       
   283             <?php echo $lang->get('acpcm_btn_clear'); ?>
       
   284           </button>
       
   285         </td>
       
   286         <td class="<?php echo $class; ?>">
       
   287           <b><?php echo $lang->get("acpcm_cache_{$target}_desc_title"); ?></b> &ndash;
       
   288           <?php echo $lang->get("acpcm_cache_{$target}_desc_body"); ?>
       
   289         </td>
       
   290         </tr>
       
   291       <?php
       
   292       }
       
   293       
       
   294       // getConfig('cache_thumbs') == '1'
       
   295       endif;
       
   296       ?>
    76       
   297       
    77       <!-- SAVE CHANGES -->
   298       <!-- SAVE CHANGES -->
    78       <tr>
   299       <tr>
    79         <th colspan="2" class="subhead">
   300         <th colspan="2" class="subhead">
    80           <input type="submit" name="save" value="<?php echo $lang->get('etc_save_changes'); ?>" style="font-weight: bold;" />
   301           <input type="submit" name="save" value="<?php echo $lang->get('etc_save_changes'); ?>" style="font-weight: bold;" />