示例#1
0
 /**
  * Performs dayly scheduled cleanups
  *
  * Currently it archives and removes outdated events
  * and takes care of the recurrence of events
  *
  * @since 0.9
  */
 function cleanup()
 {
     $elsettings =& ELHelper::config();
     $now = time();
     $lastupdate = $elsettings->lastupdate;
     //last update later then 24h?
     //$difference = $now - $lastupdate;
     //if ( $difference > 86400 ) {
     //better: new day since last update?
     $nrdaysnow = floor($now / 86400);
     $nrdaysupdate = floor($lastupdate / 86400);
     if ($nrdaysnow > $nrdaysupdate) {
         $db =& JFactory::getDBO();
         $nulldate = '0000-00-00';
         $query = 'SELECT * FROM #__eventlist_events WHERE DATE_SUB(NOW(), INTERVAL ' . $elsettings->minus . ' DAY) > (IF (enddates <> ' . $nulldate . ', enddates, dates)) AND recurrence_number <> "0" AND recurrence_type <> "0" AND `published` = 1';
         $db->SetQuery($query);
         $recurrence_array = $db->loadAssocList();
         foreach ($recurrence_array as $recurrence_row) {
             $insert_keys = '';
             $insert_values = '';
             $wherequery = '';
             // get the recurrence information
             $recurrence_number = $recurrence_row['recurrence_number'];
             $recurrence_type = $recurrence_row['recurrence_type'];
             $recurrence_row = ELHelper::calculate_recurrence($recurrence_row);
             if ($recurrence_row['dates'] <= $recurrence_row['recurrence_counter'] || $recurrence_row['recurrence_counter'] == "0000-00-00") {
                 // create the INSERT query
                 foreach ($recurrence_row as $key => $result) {
                     if ($key != 'id') {
                         if ($insert_keys != '') {
                             if (ELHelper::where_table_rows($key)) {
                                 $wherequery .= ' AND ';
                             }
                             $insert_keys .= ', ';
                             $insert_values .= ', ';
                         }
                         $insert_keys .= $key;
                         if (($key == "enddates" || $key == "times" || $key == "endtimes") && $result == "") {
                             $insert_values .= "NULL";
                             $wherequery .= '`' . $key . '` IS NULL';
                         } else {
                             $insert_values .= "'" . $result . "'";
                             if (ELHelper::where_table_rows($key)) {
                                 $wherequery .= '`' . $key . '` = "' . $result . '"';
                             }
                         }
                     }
                 }
                 $query = 'SELECT id FROM #__eventlist_events WHERE ' . $wherequery . ';';
                 $db->SetQuery($query);
                 if (count($db->loadAssocList()) == 0) {
                     $query = 'INSERT INTO #__eventlist_events (' . $insert_keys . ') VALUES (' . $insert_values . ');';
                     $db->SetQuery($query);
                     $db->Query();
                 }
             }
         }
         //delete outdated events
         if ($elsettings->oldevent == 1) {
             $query = 'DELETE FROM #__eventlist_events WHERE DATE_SUB(NOW(), INTERVAL ' . $elsettings->minus . ' DAY) > (IF (enddates <> ' . $nulldate . ', enddates, dates))';
             $db->SetQuery($query);
             $db->Query();
         }
         //Set state archived of outdated events
         if ($elsettings->oldevent == 2) {
             $query = 'UPDATE #__eventlist_events SET published = -1 WHERE DATE_SUB(NOW(), INTERVAL ' . $elsettings->minus . ' DAY) > (IF (enddates <> ' . $nulldate . ', enddates, dates))';
             $db->SetQuery($query);
             $db->Query();
         }
         //Set timestamp of last cleanup
         $query = 'UPDATE #__eventlist_settings SET lastupdate = ' . time() . ' WHERE id = 1';
         $db->SetQuery($query);
         $db->Query();
     }
 }