« 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