« Syncing code between two repositories | Main | Caching the date info for MSM Single Calendar Events »
June 26, 2009
Calendar date functions in MSM
In /mysource_matrix/packages/calendar/calendar_event/calendar_event.inc
/** * Cache the calendar data's stuff * * The return value indicates the success * * @param boolean $updating are we updating (TRUE) or inserting a new record * (FALSE - set only in create() call) * * @return boolean * @access public */ function cacheCalendarData($updating=TRUE) { $GLOBALS['SQ_SYSTEM']->changeDatabaseConnection('db2'); $db = MatrixDal::getDb(); $date_values = Array(); foreach (Array('start_date', 'end_date') as $date_comp) { $iso = $this->attr($date_comp); if (iso8601_time_component($iso) === FALSE) { if (($date_comp == 'end_date') && (iso8601_date_component($iso) !== FALSE)) { $iso = substr($iso, 0, 10).' 24:00:00'; } } else { // we know the seconds aren't going to be there, so zero them so we can // use the getDate() niceness $iso = substr($iso, 0, 16).':00'; } // we have the best, now get the rest $date_values += Calendar_Common::getDateComponents($iso, $date_comp.'_'); } // frequency field => blank for standard events, overridden in recurring $date_values['frequency'] = ''; $GLOBALS['SQ_SYSTEM']->doTransaction('BEGIN'); if (!$updating) { // set the asset ids $date_values['assetid'] = $this->id; for (reset($date_values); NULL !== ($key = key($date_values)); next($date_values)) { if (is_null($date_values[$key])) $date_values[$key] = 'NULL'; else $date_values[$key] = MatrixDAL::quote($date_values[$key]); } $val_string = implode(',', $date_values); $sql = 'INSERT INTO sq_cal_date_val ( '.implode(',', array_keys($date_values)).' ) VALUES ( '.$val_string.' )'; try { $query = MatrixDAL::preparePdoQuery($sql); MatrixDAL::execPdoQuery($query); } catch (Exception $e) { throw new Exception($e->getMessage()); } } else { // asset id becomes a where condition $sql = 'UPDATE sq_cal_date_val SET '; $set_array = Array(); foreach ($date_values as $key => $value) { $set_array[] = $key.' = '.((is_null($value)) ? 'null' : MatrixDAL::quote($value)); } $sql .= implode(',', $set_array); $sql .=' WHERE assetid = :assetid'; try { $query = MatrixDAL::preparePdoQuery($sql); MatrixDAL::bindValueToPdo($query, 'assetid', $this->id); MatrixDAL::execPdoQuery($query); } catch (Exception $e) { throw new Exception($e->getMessage()); } } $GLOBALS['SQ_SYSTEM']->doTransaction('COMMIT'); $GLOBALS['SQ_SYSTEM']->restoreDatabaseConnection(); return TRUE; }//end cacheCalendarData()
Posted by pj at June 26, 2009 10:53 PM