$modx->error->addField('repeattype', $modx->lexicon('mxcalendars.err_event_req_repeattype')); } else { if (empty($scriptProperties['repeaton'])) { $modx->error->addField('repeaton', $modx->lexicon('mxcalendars.err_event_req_repeaton')); } } if (empty($scriptProperties['repeatfrequency'])) { $modx->error->addField('repeatfrequency', $modx->lexicon('mxcalendars.err_event_req_repeatfrequency')); } if (empty($scriptProperties['repeatenddate'])) { $modx->error->addField('repeatenddate', $modx->lexicon('mxcalendars.err_event_req_repeatenddate')); } } //-- Check if we have all the data to create the repeating field information if ($scriptProperties['repeating'] == 1 && isset($scriptProperties['repeattype']) && isset($scriptProperties['repeatfrequency']) && !empty($scriptProperties['repeatenddate'])) { $repeatDates = _getRepeatDates($scriptProperties['repeattype'], $scriptProperties['repeatfrequency'], 365, $scriptProperties['startdate'], $scriptProperties['repeatenddate'], explode(',', substr($scriptProperties['repeaton'], 1))); $scriptProperties['repeatdates'] = $repeatDates; $scriptProperties['repeatenddate'] = end(explode(',', $repeatDates)); } else { //-- return $modx->error->failure("Repeat criteria not meet .<br>".$scriptProperties['repeattype']); } //-- Category check for required by submission and settings if (empty($scriptProperties['categoryid'])) { $default_cat = $modx->getObject('mxCalendarCategories', array('isdefault' => 1)); if ($default_cat->get('id')) { $scriptProperties['categoryid'] = $default_cat->get('id'); } else { //-- Get the first published category $default_cat = $modx->getObject('mxCalendarCategories', array('active' => 1)); if ($default_cat->get('id')) { $scriptProperties['categoryid'] = $default_cat->get('id');
$modx->error->addField('repeattype', $modx->lexicon('mxcalendars.err_event_req_repeattype')); } else { if (empty($_DATA['repeaton'])) { $modx->error->addField('repeaton', $modx->lexicon('mxcalendars.err_event_req_repeaton')); } } if (empty($_DATA['repeatfrequency'])) { $modx->error->addField('repeatfrequency', $modx->lexicon('mxcalendars.err_event_req_repeatfrequency')); } if (empty($_DATA['repeatenddate'])) { $modx->error->addField('repeatenddate', $modx->lexicon('mxcalendars.err_event_req_repeatenddate')); } } //-- Check if we have all the data to create the repeating field information if ($_DATA['repeating'] == 1 && isset($_DATA['repeattype']) && isset($_DATA['repeatfrequency']) && !empty($_DATA['repeatenddate'])) { $repeatDates = _getRepeatDates($_DATA['repeattype'], $_DATA['repeatfrequency'], 365, $_DATA['startdate'], $_DATA['repeatenddate'], explode(',', substr($_DATA['repeaton'], 1))); $_DATA['repeatdates'] = $repeatDates; $_DATA['repeatenddate'] = end(explode(',', $repeatDates)); } else { //-- return $modx->error->failure("Repeat criteria not meet .<br>".$_DATA['repeattype']); } //-- Category check for required by submission and settings if (empty($_DATA['categoryid'])) { $default_cat = $modx->getObject('mxCalendarCategories', array('isdefault' => 1)); if (is_object($default_cat)) { $_DATA['categoryid'] = $default_cat->get('id'); } else { //-- Get the first published category $default_cat = $modx->getObject('mxCalendarCategories', array('active' => 1)); if ($default_cat->getOne('id')) { $_DATA['categoryid'] = $default_cat->get('id');
public function beforeSet() { $thisid = $this->getProperty('id'); $catArr = is_array($this->getProperty('cat')) ? $this->getProperty('cat') : explode(',', $this->getProperty('cat')); $rcats = array('catsid:NOT IN' => $catArr, 'AND:evid:=' => $thisid); $this->modx->removeCollection('GcCalendarCatsConnect', $rcats); foreach ($catArr as $cat) { $cats['evid'] = $thisid; $cats['catsid'] = $cat; $check = $this->modx->newQuery('GcCalendarCatsConnect'); $check->where(array('catsid:=' => $cats['catsid'], 'AND:evid:=' => $cats['evid'])); $chk_it = $this->modx->getCollection('GcCalendarCatsConnect', $check); if (empty($chk_it)) { $catsConnect = $this->modx->newObject('GcCalendarCatsConnect'); $catsConnect->fromArray($cats); $catsConnect->save(); } } $cidArr = is_array($this->getProperty('cid')) ? $this->getProperty('cid') : explode(',', $this->getProperty('cid')); $cancidArr = $this->getCals(); $rcals = array('calid:NOT IN' => $cidArr, 'calid:IN' => $cancidArr, 'AND:evid:=' => $thisid); $this->modx->removeCollection('GcCalendarCalsConnect', $rcals); foreach ($cidArr as $cal) { $cals['evid'] = $thisid; $cals['calid'] = $cal; $check = $this->modx->newQuery('GcCalendarCalsConnect'); $check->where(array('calid:=' => $cals['calid'], 'AND:evid:=' => $cals['evid'])); $chk_it = $this->modx->getCollection('GcCalendarCalsConnect', $check); if (empty($chk_it)) { $calsConnect = $this->modx->newObject('GcCalendarCalsConnect'); $calsConnect->fromArray($cals); $calsConnect->save(); } } $og = $this->modx->getObject('GcCalendarEvents', $thisid); $ogstart = $og->get('start'); $ogstarthis = date('g:i A', $ogstart); $ogstartymd = date('Y-m-d', $ogstart); $ogend = $og->get('end'); $ogad = $og->get('ad'); $ogendhis = date('g:i A', $ogend); $ogendymd = date('Y-m-d', $ogend); $ogad = $ogad == 1 ? 'true' : 'false'; $startymd = $this->getProperty('startymd'); $startymd = empty($startymd) ? $ogstartymd : $startymd; $starthis = $this->getProperty('starthis'); $starthis = empty($starthis) ? $ogstarthis : $starthis; $endymd = $this->getProperty('endymd'); $endymd = empty($endymd) ? $ogendhis : $endymd; $endhis = $this->getProperty('endhis'); $endhis = empty($endhis) ? $ogendymd : $endhis; $ad = $this->getProperty('ad'); $ad = empty($ad) ? $ogad : $ad; if (!empty($startymd) && !empty($starthis) && !empty($ad)) { if (strpos($startymd, 'T') !== false) { $start = substr($startymd, 0, strpos($startymd, 'T')); } else { $start = $startymd; } $start .= ' '; $start .= $ad == 'true' || $ad == '1' ? '12:00 AM' : $starthis; $this->setProperty('start', strtotime($start)); } if (!empty($endymd) && !empty($endhis) && !empty($ad)) { if (strpos($endymd, 'T') !== false) { $end = substr($endymd, 0, strpos($endymd, 'T')); } else { $end = $endymd; } $end .= ' '; $end .= $ad == 'true' || $ad == '1' ? '12:00 AM' : $endhis; $this->setProperty('end', strtotime($end)); } if (!empty($cidArr)) { $this->setProperty('cid', implode(',', $cidArr)); } if (!empty($catArr)) { $this->setProperty('cat', implode(',', $catArr)); } if (!empty($ad)) { $this->setProperty('ad', $this->getProperty('ad') == true ? 1 : 0); } $timediff = strtotime($end) - strtotime($start); //*repeating Events*// $ogrepeatenddate = $og->get('repeatenddate'); $ogrepeaton = $og->get('repeaton'); $ogrepeatonmo = $og->get('repeatonmo'); $ogrepeatonmo = explode(',', $ogrepeatonmo); $ogrepeatonmoArr = array(); $ogrepeatonmoArr['type'] = !empty($ogrepeatonmo) ? $ogrepeatonmo[0] : null; $ogrepeatonmoArr['week'] = count($ogrepeatonmo) > 1 ? $ogrepeatonmo[1] : null; $ogrepeating = $og->get('repeating'); $ogrepeattype = $og->get('repeattype'); $ogrepeatfrequency = $og->get('repeatfrequency'); $repeatenddate = $this->getProperty('repeatenddate'); $repeatenddate = empty($repeatenddate) ? date('Y-m-d', $ogrepeatenddate) : $repeatenddate; $repeatenddate = !empty($repeatenddate) ? strtotime($this->getProperty('repeatenddate') . ' ' . $endhis) : null; //$this->setProperty('repeatenddate',$repeatenddate); //-- Check if we have all the data to create the repeating field information $repeating = $this->getProperty('repeating'); $repeating = empty($repeating) ? $ogrepeating : $repeating; $repeating = $repeating == 'true' || $repeating == 1 ? 1 : 0; $repeattype = $this->getProperty('repeattype'); $repeattype = empty($repeattype) ? $ogrepeattype : $repeattype; $repeatfrequency = $this->getProperty('repeatfrequency'); $repeatfrequency = empty($repeatfrequency) ? $ogrepeatfrequency : $repeatfrequency; $prtQ = $this->modx->newQuery('GcCalendarDates'); $prtQ->where(array('evid:=' => $thisid, 'AND:pr:=' => 1)); $prtime = $this->modx->getObject('GcCalendarDates', $prtQ); $prArr = array('start' => strtotime($start), 'end' => strtotime($end), 'evid' => $thisid, 'pr' => 1); if (empty($prtime)) { $prConnect = $this->modx->newObject('GcCalendarDates'); $prConnect->fromArray($prArr); $prConnect->save(); } else { $prtime->fromArray($prArr); $prtime->save(); } $repeaton = $this->getProperty('repeaton'); $repeaton = empty($repeaton) ? $ogrepeaton : $repeaton; $repeaton = $repeattype == 1 ? $repeaton : ''; $repeatonmo = $this->getProperty('repeatonmo'); $repeatonmo = empty($repeatonmo) ? $ogrepeatonmoArr : $repeatonmo; $repeatonmo = empty($repeatonmo) ? array("type" => "dom") : $repeatonmo; $repeatonmo = $repeattype == 2 ? $repeatonmo : ''; $oldrep = array('ov:!=' => 1, 'AND:pr:!=' => 1, 'AND:evid:=' => $thisid); $this->modx->removeCollection('GcCalendarDates', $oldrep); if ($repeating == 1 && $repeattype !== null && $repeatfrequency !== null && $repeatenddate !== null && $start !== null) { $repeatDates = _getRepeatDates($repeattype, $repeatfrequency, 365, strtotime($start), $repeatenddate, explode(',', $this->getProperty('repeaton')), 'UNIX', json_encode($repeatonmo)); //$this->setProperty('locationaddr',$repeatenddate.' '.$start); if (!empty($repeatDates)) { $repeatonmovals = array(); if (!empty($repeatonmo)) { foreach ($repeatonmo as $k => $repmo) { $repeatonmovals[] = $repmo; } } $this->setProperty('repeaton', $repeaton); $this->setProperty('repeatonmo', implode(',', $repeatonmovals)); $this->setProperty('repeating', $repeating); $this->setProperty('repeatdates', null); $repeatDatesArr = explode(',', $repeatDates); foreach ($repeatDatesArr as $rd) { $rend = $rd + $timediff; if ($rd != $start && $rend != $end) { $rArr = array('start' => $rd, 'end' => $rend, 'rep' => 1, 'evid' => $thisid); $rdConnect = $this->modx->newObject('GcCalendarDates'); $rdConnect->fromArray($rArr); $rdConnect->save(); } } } else { $this->setProperty('repeating', 0); $this->setProperty('repeaton', null); $this->setProperty('repeattype', null); $this->setProperty('repeatdates', null); $this->setProperty('repeatfrequency', null); } } else { $this->setProperty('repeating', 0); $this->setProperty('repeaton', null); $this->setProperty('repeattype', null); $this->setProperty('repeatdates', null); $this->setProperty('repeatfrequency', null); } $this->setProperty('repeatenddate', null); $fedate = $this->modx->newQuery('GcCalendarDates'); $fedate->where(array('evid' => $thisid)); $fedate->limit(1); $fedate->sortby('end', 'DESC'); $feItt = $this->modx->getIterator('GcCalendarDates', $fedate); if (!empty($feItt)) { foreach ($feItt as $fI) { $this->setProperty('repeatenddate', $fI->get('end')); } } return parent::beforeSet(); }
public function beforeSet() { $this->setProperty('cid', implode(',', $this->getProperty('cid'))); $this->setProperty('cat', implode(',', $this->getProperty('cat'))); $startymd = $this->getProperty('startymd'); $starthis = $this->getProperty('starthis'); $endymd = $this->getProperty('endymd'); $endhis = $this->getProperty('endhis'); $ad = $this->getProperty('ad'); if (strpos($startymd, 'T') !== false) { $start = substr($startymd, 0, strpos($startymd, 'T')); } else { $start = $startymd; } $start .= ' '; $start .= $ad == 'true' || $ad == '1' ? '12:15 AM' : $starthis; $this->setProperty('start', strtotime($start)); if (strpos($endymd, 'T') !== false) { $end = substr($endymd, 0, strpos($endymd, 'T')); } else { $end = $endymd; } $end .= ' '; $end .= $ad == 'true' || $ad == '1' ? '11:45 AM' : $endhis; $this->setProperty('end', strtotime($end)); //account for browser checkbox behaviour if (!empty($ad)) { $this->setProperty('ad', $this->getProperty('ad') == true || $this->getProperty('ad') == 1 || $this->getProperty('ad') == 'on' || $this->getProperty('ad') == 'true' ? 1 : 0); } $repeatenddate = $this->getProperty('repeatenddate'); $repeatenddate = !empty($repeatenddate) ? strtotime($this->getProperty('repeatenddate') . ' ' . $endhis) : null; //$this->setProperty('repeatenddate',$repeatenddate); //-- Check if we have all the data to create the repeating field information $repeating = $this->getProperty('repeating'); $repeating = $repeating == 'true' || $repeating == 1 ? 1 : 0; $repeattype = $this->getProperty('repeattype'); $repeatfrequency = $this->getProperty('repeatfrequency'); $repeaton = $this->getProperty('repeaton'); $repeaton = $repeattype == 1 ? $repeaton : ''; if ($repeating == 1 && $repeattype !== null && $repeatfrequency !== null && $repeatenddate !== null && $start !== null) { $repeatDates = _getRepeatDates($repeattype, $repeatfrequency, 365, strtotime($start), $repeatenddate, explode(',', $this->getProperty('repeaton'))); //$this->setProperty('locationaddr',$repeatenddate.' '.$start); if (!empty($repeatDates)) { $this->setProperty('repeaton', $repeaton); $this->setProperty('repeating', $repeating); $this->setProperty('repeatdates', $repeatDates); $this->setProperty('repeatenddate', end(explode(',', $repeatDates))); } else { $this->setProperty('repeating', 0); $this->setProperty('repeaton', null); $this->setProperty('repeattype', null); $this->setProperty('repeatdates', null); $this->setProperty('repeatfrequency', null); $this->setProperty('repeatenddate', null); } } else { $this->setProperty('repeating', 0); $this->setProperty('repeaton', null); $this->setProperty('repeattype', null); $this->setProperty('repeatdates', null); $this->setProperty('repeatfrequency', null); $this->setProperty('repeatenddate', null); } return parent::beforeSet(); }
$mxcalendar->set('link', $hook->getProperty('fld13')); // Set the new event to inactive so an Administrator can review and approve prior to listing $mxcalendar->set('active', 0); //-- Set a fixed (default) category for submissions [Main Calendar] if ($hook->getProperty('fld18')) { $mxcalendar->set('categoryid', $hook->getProperty('fld18')); } //-- Set a static value of source to indicate it was user generated $mxcalendar->set('source', 'user submission'); //-- Just some additional record house keeping for repeating if ($hook->getProperty('fld15') !== null && $hook->getProperty('fld16') !== null) { $frequencymode = $hook->getProperty('fld15'); // Daily, weekly, monthly, yearly $onDayOfWeek = array(); $onDayOfWeek[] = strftime('%u', strtotime($hook->getProperty('fld2'))); $repeatDates = _getRepeatDates($frequencymode, 1, 1, strtotime($hook->getProperty('fld2')), strtotime($hook->getProperty('fld16')), $onDayOfWeek); $mxcalendar->set('repeaton', ',' . implode(',', $onDayOfWeek) . ','); //** this one is required or the backend manager will fail to allow updating do to JS error $mxcalendar->set('repeating', 1); $mxcalendar->set('repeattype', $frequencymode); $mxcalendar->set('repeatdates', !empty($repeatDates) ? $repeatDates : ''); $mxcalendar->set('repeatenddate', strtotime($hook->getProperty('fld16'))); $mxcalendar->set('repeatfrequency', 1); // Add to log report if debug is set if ($hook->getProperty('debug') == '1') { $modx->log(modX::LOG_LEVEL_ERROR, '[mxFormBuilder] <h2>mxFormBuilder</h2> _getRpeatDate:<br />' . $repeatDates . ' by passing ' . print_r(array($frequencymode, 1, 1, $hook->getProperty('fld2'), $hook->getProperty('fld16'), $onDayOfWeek), true)); } } else { // No repeat $mxcalendar->set('repeaton', ''); //** this one is required or the backend manager will fail to allow updating do to JS error