Exemple #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();
     }
 }
Exemple #2
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($forced = 0)
 {
     $elsettings =& ELHelper::config();
     $params =& JComponentHelper::getParams('com_eventlist');
     $weekstart = $params->get('weekdaystart', 0);
     $anticipation = $params->get('recurrence_anticipation', 30);
     $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 || $forced) {
         $db =& JFactory::getDBO();
         // get the last event occurence of each recurring published events, with unlimited repeat, or last date not passed.
         $nulldate = '0000-00-00';
         $query = ' SELECT id, CASE recurrence_first_id WHEN 0 THEN id ELSE recurrence_first_id END AS first_id, ' . ' recurrence_number, recurrence_type, recurrence_limit_date, recurrence_limit, recurrence_byday, ' . ' MAX(dates) as dates, MAX(enddates) as enddates, MAX(recurrence_counter) as counter ' . ' FROM #__eventlist_events ' . ' WHERE recurrence_type <> "0" ' . ' AND CASE recurrence_limit_date WHEN ' . $nulldate . ' THEN 1 ELSE NOW() < recurrence_limit_date END ' . ' AND recurrence_number <> "0" ' . ' AND `published` = 1 ' . ' GROUP BY first_id' . ' ORDER BY dates DESC';
         $db->SetQuery($query);
         $recurrence_array = $db->loadAssocList();
         foreach ($recurrence_array as $recurrence_row) {
             // get the info of reference event for the duplicates
             $ref_event =& JTable::getInstance('eventlist_events', '');
             $ref_event->load($recurrence_row['id']);
             // get the recurrence information
             $recurrence_number = $recurrence_row['recurrence_number'];
             $recurrence_type = $recurrence_row['recurrence_type'];
             // the first day of the week is used for certain rules
             $recurrence_row['weekstart'] = $weekstart;
             // calculate next occurence date
             $recurrence_row = ELHelper::calculate_recurrence($recurrence_row);
             // add events as long as we are under the interval and under the limit, if specified.
             while (($recurrence_row['recurrence_limit_date'] == $nulldate || strtotime($recurrence_row['dates']) <= strtotime($recurrence_row['recurrence_limit_date'])) && strtotime($recurrence_row['dates']) <= time() + 86400 * $anticipation) {
                 $new_event =& JTable::getInstance('eventlist_events', '');
                 $new_event->bind($ref_event, array('id', 'hits', 'dates', 'enddates'));
                 $new_event->recurrence_first_id = $recurrence_row['first_id'];
                 $new_event->recurrence_counter = $recurrence_row['counter'] + 1;
                 $new_event->dates = $recurrence_row['dates'];
                 $new_event->enddates = $recurrence_row['enddates'];
                 if ($new_event->store()) {
                     $recurrence_row['counter']++;
                     //duplicate categories event relationships
                     $query = ' INSERT INTO #__eventlist_cats_event_relations (itemid, catid) ' . ' SELECT ' . $db->Quote($new_event->id) . ', catid FROM #__eventlist_cats_event_relations WHERE itemid = ' . $db->Quote($ref_event->id);
                     $db->setQuery($query);
                     if (!$db->query()) {
                         echo JText::_('Error saving categories for event "' . $ref_event->title . '" new recurrences\\n');
                     }
                 }
                 $recurrence_row = ELHelper::calculate_recurrence($recurrence_row);
             }
         }
         //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)) AND published = 1';
             $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();
     }
 }