]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #3253. Merged in Shashank's patch.
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Wed, 27 Apr 2011 19:47:24 +0000 (19:47 +0000)
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Wed, 27 Apr 2011 19:47:24 +0000 (19:47 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@9033 36083f99-b078-4883-b0ff-0f9b5a30f544

mod/logrotate/languages/en.php
mod/logrotate/start.php
mod/logrotate/views/default/settings/logrotate/edit.php

index e60d1b8415db853a06269a150365a5dcf30bf792..c3cf2d8ad8fc24badd752e51f0bd8d779546178d 100644 (file)
@@ -14,6 +14,15 @@ $english = array(
 
        'logrotate:logrotated' => "Log rotated\n",
        'logrotate:lognotrotated' => "Error rotating log\n",
+       
+       'logrotate:date' => 'Delete archived logs older than a',
+
+       'logrotate:week' => 'week',
+       'logrotate:month' => 'month',
+       'logrotate:year' => 'year',
+               
+       'logrotate:logdeleted' => "Log deleted\n",
+       'logrotate:lognotdeleted' => "Error deleting log\n",
 );
 
-add_translation("en", $english);
\ No newline at end of file
+add_translation("en", $english);
index 25c01d45bf05c27d9bc24a026b1831ef85c07397..c05506d834890dd9adcac7ea33127bdac17f2771 100644 (file)
@@ -9,6 +9,7 @@ elgg_register_event_handler('init', 'system', 'logrotate_init');
 
 function logrotate_init() {
        $period = elgg_get_plugin_setting('period', 'logrotate');
+       $time = elgg_get_plugin_setting('time', 'logrotate');
        switch ($period) {
                case 'weekly':
                case 'monthly' :
@@ -18,14 +19,16 @@ function logrotate_init() {
                        $period = 'monthly';
        }
 
-       // Register cron hook
-       elgg_register_plugin_hook_handler('cron', $period, 'logrotate_cron');
+       // Register cron hook for archival of logs
+       elgg_register_plugin_hook_handler('cron', $period, 'logrotate_archive_cron');
+       // Register cron hook for deletion of selected archived logs
+       elgg_register_plugin_hook_handler('cron', $time, 'logrotate_delete_cron');
 }
 
 /**
  * Trigger the log rotation.
  */
-function logrotate_cron($hook, $entity_type, $returnvalue, $params) {
+function logrotate_archive_cron($hook, $entity_type, $returnvalue, $params) {
        $resulttext = elgg_echo("logrotate:logrotated");
 
        $day = 86400;
@@ -51,3 +54,69 @@ function logrotate_cron($hook, $entity_type, $returnvalue, $params) {
 
        return $returnvalue . $resulttext;
 }
+
+/**
+ * Trigger the log deletion.
+ */
+function logrotate_delete_cron($hook, $entity_type, $returnvalue, $params) {
+       $resulttext = elgg_echo("logrotate:logdeleted");
+
+       $day = 86400;
+
+       $offset = 0;
+       $period = elgg_get_plugin_setting('time', 'logrotate');
+       switch ($period) {
+               case 'weekly':
+                       $offset = $day * 7;
+                       break;
+               case 'yearly':
+                       $offset = $day * 365;
+                       break;
+               case 'monthly':
+               default:
+                       // assume 28 days even if a month is longer. Won't cause data loss.
+                       $offset = $day * 28;
+       }
+
+       if (!log_browser_delete_log($offset)) {
+               $resulttext = elgg_echo("logrotate:lognotdeleted");
+       }
+
+       return $returnvalue . $resulttext;
+}
+
+/**
+ * This function deletes archived copies of the system logs that are older than specified.
+ *
+ * @param int $time_of_delete An offset in seconds from now to delete (useful for log deletion)
+ */
+
+function log_browser_delete_log($time_of_delete) {
+       global $CONFIG;
+
+       $offset = (int)$time_of_delete;
+       $now = time();
+
+       $ts = $now - $offset;
+
+       $FLAG = 1;      
+       $result = mysql_query("SHOW TABLES like '{$CONFIG->dbprefix}system_log_%'");
+       while ($showtablerow = mysql_fetch_array($result)) {
+               //To obtain time of archival
+               $log_time = explode("{$CONFIG->dbprefix}system_log_", $showtablerow[0]);
+               if ($log_time < $ts) {
+                       //If the time of archival is before the required offset then delete
+                       if (!mysql_query("DROP TABLE $showtablerow[0]")) {
+                               $FLAG = 0;
+                       }       
+               }
+       }
+
+       //Check if the appropriate tables have been deleted and return true if yes
+       if ($FLAG) {
+               return true;
+       } else {
+               return false;
+       }
+
+}
index c73bec52c68e34a5b3e5bb9f51fd5b5f551870a2..2060517807d89b9a2e9c55d101a0959f76a7d020 100644 (file)
@@ -6,10 +6,14 @@
  */
 
 $period = $vars['entity']->period;
+$time = $vars['entity']->time;
 if (!$period) {
        $period = 'monthly';
 }
-               
+
+if (!$time) {
+       $time = 'monthly';
+}              
 ?>
 <p>
        <?php echo elgg_echo('logrotate:period'); ?>
@@ -25,4 +29,20 @@ if (!$period) {
                        'value' => $period
                ));
        ?>
+
+       <?php echo elgg_echo('<br>'); ?>
+
+       <?php echo elgg_echo('logrotate:date'); ?>
+       
+       <?php
+               echo elgg_view('input/pulldown', array(
+                       'internalname' => 'params[time]',
+                       'options_values' => array(
+                               'weekly' => elgg_echo('logrotate:week'),
+                               'monthly' => elgg_echo('logrotate:month'),
+                               'yearly' => elgg_echo('logrotate:year'),
+                       ),
+                       'value' => $time
+               ));
+       ?>
 </p>