Esempio n. 1
0
 private function doSave(&$msg)
 {
     if (!JEVHelper::isEventCreator()) {
         throw new Exception(JText::_('ALERTNOTAUTH'), 403);
         return false;
     }
     // clean out the cache
     $cache = JFactory::getCache('com_jevents');
     $cache->clean(JEV_COM_COMPONENT);
     $option = JEV_COM_COMPONENT;
     $rp_id = intval(JRequest::getVar("rp_id", "0"));
     $cid = JRequest::getVar("cid", array());
     if (count($cid) > 0 && $rp_id == 0) {
         $rp_id = intval($cid[0]);
     }
     if ($rp_id == 0) {
         $this->setRedirect('index.php?option=' . $option . '&task=icalrepeat.list&cid[]=' . $rp_id, "1Cal rpt NOT SAVED");
         $this->redirect();
     }
     // I should be able to do this in one operation but that can come later
     $event = $this->queryModel->listEventsById(intval($rp_id), 1, "icaldb");
     if (!JEVHelper::canEditEvent($event)) {
         throw new Exception(JText::_('ALERTNOTAUTH'), 403);
         return false;
     }
     $db = JFactory::getDBO();
     $rpt = new iCalRepetition($db);
     $rpt->load($rp_id);
     $query = "SELECT detail_id FROM #__jevents_vevent WHERE ev_id={$rpt->eventid}";
     $db->setQuery($query);
     $eventdetailid = $db->loadResult();
     $data["UID"] = JRequest::getVar("uid", md5(uniqid(rand(), true)));
     $data["X-EXTRAINFO"] = JRequest::getVar("extra_info", "");
     $data["LOCATION"] = JRequest::getVar("location", "");
     $data["allDayEvent"] = JRequest::getVar("allDayEvent", "off");
     $data["CONTACT"] = JRequest::getVar("contact_info", "");
     // allow raw HTML (mask =2)
     $data["DESCRIPTION"] = JRequest::getVar("jevcontent", "", 'request', 'html', 2);
     $data["publish_down"] = JRequest::getVar("publish_down", "2006-12-12");
     $data["publish_up"] = JRequest::getVar("publish_up", "2006-12-12");
     // Alternative date format handling
     if (JRequest::getVar("publish_up2", false)) {
         $data["publish_up"] = JRequest::getVar("publish_up2", $data["publish_up"]);
     }
     if (JRequest::getVar("publish_down2", false)) {
         $data["publish_down"] = JRequest::getVar("publish_down2", $data["publish_down"]);
     }
     $interval = JRequest::getVar("rinterval", 1);
     $data["SUMMARY"] = JRequest::getVar("title", "");
     $data["MULTIDAY"] = JRequest::getInt("multiday", "1");
     $data["NOENDTIME"] = JRequest::getInt("noendtime", 0);
     $ics_id = JRequest::getVar("ics_id", 0);
     if ($data["allDayEvent"] == "on") {
         $start_time = "00:00";
     } else {
         $start_time = JRequest::getVar("start_time", "08:00");
     }
     $publishstart = $data["publish_up"] . ' ' . $start_time . ':00';
     $data["DTSTART"] = JevDate::strtotime($publishstart);
     if ($data["allDayEvent"] == "on") {
         $end_time = "23:59";
         $publishend = $data["publish_down"] . ' ' . $end_time . ':59';
     } else {
         $end_time = JRequest::getVar("end_time", "15:00");
         $publishend = $data["publish_down"] . ' ' . $end_time . ':00';
     }
     $data["DTEND"] = JevDate::strtotime($publishend);
     // iCal for whole day uses 00:00:00 on the next day JEvents uses 23:59:59 on the same day
     list($h, $m, $s) = explode(":", $end_time . ':00');
     if ($h + $m + $s == 0 && $data["allDayEvent"] == "on" && $data["DTEND"] > $data["DTSTART"]) {
         $publishend = JevDate::strftime('%Y-%m-%d 23:59:59', $data["DTEND"] - 86400);
         $data["DTEND"] = JevDate::strtotime($publishend);
     }
     $data["X-COLOR"] = JRequest::getVar("color", "");
     // Add any custom fields into $data array - allowing HTML (which can be cleaned up later by plugins)
     $array = JRequest::get("post", 2);
     foreach ($array as $key => $value) {
         if (strpos($key, "custom_") === 0) {
             $data[$key] = $value;
         }
         // convert jform data to data format used before
         if (strpos($key, "jform") === 0 && is_array($value)) {
             foreach ($value as $cfkey => $cfvalue) {
                 $data["custom_" . $cfkey] = $cfvalue;
             }
         }
     }
     $detail = iCalEventDetail::iCalEventDetailFromData($data);
     // if we already havea unique event detail then edit this one!
     if ($eventdetailid != $rpt->eventdetail_id) {
         $detail->evdet_id = $rpt->eventdetail_id;
     }
     $detail->priority = intval(JArrayHelper::getValue($array, "priority", 0));
     $detail->store();
     // KEEP THE ORIGINAL START REPEAT FOR THE EXCEPTION HANDLING
     $original_start = $rpt->startrepeat;
     // populate rpt with data
     //$start = JevDate::strtotime($data["publish_up"] . ' ' . $start_time . ':00');
     //$end = JevDate::strtotime($data["publish_down"] . ' ' . $end_time . ':00');
     $start = $data["DTSTART"];
     $end = $data["DTEND"];
     $rpt->startrepeat = JevDate::strftime('%Y-%m-%d %H:%M:%S', $start);
     $rpt->endrepeat = JevDate::strftime('%Y-%m-%d %H:%M:%S', $end);
     $rpt->duplicatecheck = md5($rpt->eventid . $start);
     $rpt->eventdetail_id = $detail->evdet_id;
     $rpt->rp_id = $rp_id;
     $rpt->store();
     // I may also need to process repeat changes
     $dispatcher = JDispatcher::getInstance();
     // just incase we don't have jevents plugins registered yet
     JPluginHelper::importPlugin("jevents");
     $res = $dispatcher->trigger('onStoreCustomRepeat', array(&$rpt));
     $exception = iCalException::loadByRepeatId($rp_id);
     if (!$exception) {
         $exception = new iCalException($db);
         $exception->bind(get_object_vars($rpt));
         // ONLY set the old start repeat when first creating the exception
         $exception->oldstartrepeat = $original_start;
     }
     $exception->exception_type = 1;
     // modified
     $exception->store();
     return $rpt;
 }