/** * 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(); } }