Example #1
0
 /**
  * Pseudo Constructor
  *
  * @param iCal Entry parsed from ICS file as an array $ice
  * @return n/a
  */
 public static function iCalRRuleFromData($rrule)
 {
     $db = JFactory::getDBO();
     $temp = new iCalRRule($db);
     $temp->data = $rrule;
     $temp->freq = $temp->data['FREQ'];
     // Should really test count
     $temp->processField("count", 999);
     $temp->processField("interval", 1);
     //interval ios a mysql reserved word
     $temp->rinterval = $temp->interval;
     $temp->_interval = $temp->interval;
     unset($temp->interval);
     if ($temp->freq == "none") {
         $temp->processField("until", "");
     } else {
         // cap indefinate repeats if count is blank as well as until
         if (array_key_exists("COUNT", $temp->data)) {
             $temp->processField("until", "");
         } else {
             $cfg = JEVConfig::getInstance();
             $temp->processField("until", JevDate::mktime(23, 59, 59, 12, 12, $cfg->get("com_latestyear", 2020)));
             $temp->processField("count", 9999);
         }
     }
     $temp->processField("untilraw", "");
     $temp->processField("bysecond", "");
     $temp->processField("byminute", "");
     $temp->processField("byhour", "");
     $temp->processField("byday", "");
     $temp->processField("bymonthday", "");
     $temp->processField("byyearday", "");
     $temp->processField("byweekno", "");
     $temp->processField("bymonth", "");
     $temp->processField("bysetpos", "");
     $temp->processField("irregulardates", "");
     $temp->irregulardates = json_encode($temp->irregulardates);
     $temp->processField("wkst", "");
     return $temp;
 }
Example #2
0
 function _deleteFuture()
 {
     $cid = JRequest::getVar('cid', array(0));
     if (!is_array($cid)) {
         $cid = array(intval($cid));
     }
     JArrayHelper::toInteger($cid);
     $db = JFactory::getDBO();
     foreach ($cid as $id) {
         // I should be able to do this in one operation but that can come later
         $event = $this->queryModel->listEventsById(intval($id), 1, "icaldb");
         if (!JEVHelper::canDeleteEvent($event)) {
             throw new Exception(JText::_('ALERTNOTAUTH'), 403);
             return false;
         }
         $query = "SELECT * FROM #__jevents_repetition WHERE rp_id={$id}";
         $db->setQuery($query);
         $repeatdata = null;
         $repeatdata = $db->loadObject();
         if (is_null($repeatdata)) {
             throw new Exception(JText::_('NO_SUCH_EVENT'), 4777);
             return;
         }
         $query = "SELECT detail_id FROM #__jevents_vevent WHERE ev_id={$repeatdata->eventid}";
         $db->setQuery($query);
         $eventdetailid = $db->loadResult();
         // Find detail ids for future repetitions that don't match the global event detail
         $query = "SELECT eventdetail_id FROM #__jevents_repetition WHERE eventid=" . $repeatdata->eventid . " AND startrepeat>='" . $repeatdata->startrepeat . "' AND eventdetail_id<>" . $eventdetailid;
         $db->setQuery($query);
         $detailids = $db->loadColumn();
         // Find repeat ids future repetitions
         $query = "SELECT rp_id FROM #__jevents_repetition WHERE eventid=" . $repeatdata->eventid . " AND startrepeat>='" . $repeatdata->startrepeat . "'";
         $db->setQuery($query);
         $rp_ids = $db->loadColumn();
         foreach ($rp_ids as $rp_id) {
             // May want to send notification messages etc.
             $dispatcher = JDispatcher::getInstance();
             // just incase we don't have jevents plugins registered yet
             JPluginHelper::importPlugin("jevents");
             $res = $dispatcher->trigger('onDeleteEventRepeat', $rp_id);
         }
         // Change the underlying event repeat rule details  !!
         $query = "SELECT * FROM #__jevents_rrule WHERE eventid={$repeatdata->eventid}";
         $db->setQuery($query);
         $this->rrule = null;
         $this->rrule = $db->loadObject();
         $this->rrule = iCalRRule::iCalRRuleFromDB(get_object_vars($this->rrule));
         if (intval($this->rrule->until) > 0) {
             // Find latest matching repetition
             $query = "SELECT max(startrepeat) FROM #__jevents_repetition WHERE eventid=" . $repeatdata->eventid . " AND startrepeat<'" . $repeatdata->startrepeat . "'";
             $db->setQuery($query);
             $lastrepeat = $db->loadResult();
             $this->rrule->until = JevDate::strtotime($lastrepeat);
         } else {
             // Find latest matching repetition
             $query = "SELECT count(startrepeat) FROM #__jevents_repetition WHERE eventid=" . $repeatdata->eventid . " AND startrepeat<'" . $repeatdata->startrepeat . "'";
             $db->setQuery($query);
             $countrepeat = $db->loadResult();
             $this->rrule->count = $countrepeat;
         }
         $this->rrule->store();
         if (!is_null($detailids) && count($detailids) > 0) {
             $query = "DELETE FROM #__jevents_vevdetail WHERE evdet_id IN (" . implode(",", $detailids) . ")";
             $db->setQuery($query);
             $db->query();
             // I also need to clean out associated custom data
             $dispatcher = JDispatcher::getInstance();
             // just incase we don't have jevents plugins registered yet
             JPluginHelper::importPlugin("jevents");
             $res = $dispatcher->trigger('onDeleteEventDetails', array(implode(",", $detailids)));
         }
         // setup exception data
         foreach ($rp_ids as $rp_id) {
             $query = "SELECT * FROM #__jevents_repetition WHERE rp_id={$rp_id}";
             $db->setQuery($query);
             $data = null;
             $data = $db->loadObject();
             $exception = iCalException::loadByRepeatId($rp_id);
             if (!$exception) {
                 $exception = new iCalException($db);
                 $exception->bind(get_object_vars($data));
             }
             $exception->exception_type = 0;
             // deleted
             $exception->store();
         }
         $query = "DELETE FROM #__jevents_repetition WHERE eventid=" . $repeatdata->eventid . " AND startrepeat>='" . $repeatdata->startrepeat . "'";
         $db->setQuery($query);
         $db->query();
         // Also clear out defunct exceptions
         $query = "DELETE FROM #__jevents_exception WHERE eventid=" . $repeatdata->eventid . " AND startrepeat>='" . $repeatdata->startrepeat . "' and exception_type=1 ";
         $db->setQuery($query);
         $db->query();
     }
 }
 /**
  * Pseudo Constructor
  *
  * @param iCal Event parsed from ICS file as an array $ice
  * @return n/a
  */
 function iCalEventFromDB($icalrowAsArray)
 {
     $db =& JFactory::getDBO();
     $temp = new iCalEvent($db);
     foreach ($icalrowAsArray as $key => $val) {
         $temp->{$key} = $val;
     }
     if ($temp->freq != "") {
         $temp->rrule = iCalRRule::iCalRRuleFromDB($icalrowAsArray);
     }
     $temp->setupEventDetailFromDB($icalrowAsArray);
     return $temp;
 }