function displayXmlEvents($query, $size = 10) {
$events = my_xml2array('http://calendar.uwaterloo.ca/xml?'.$query);
$r .= '
';
foreach($events as $event) {
$size--;
$r .= '
';
//$r .= '
'.$event['id'].'';
$r .= '
'.$event['title'].'
';
if($event['description']) $r .= '
'.$event['description'].'
';
$r .= '
'.date("l, F j", $event['start_date']).' from '.date("h:ia", $event['start_date']).' to '.date("h:ia", $event['end_date']).'
';
$r .= '
';
$r .= '
';
$r .= '
Where: '.$event['location'].'
';
//$r .= '
Hosted By: '.$event['host'].'
';
//$r .= '
'.$event['url'].'';
$r .= '
';
if(!$size) break;
}
$r .= "
";
return $r;
}
function my_xml2array($__url)
{
$cache_dir = './temp';
$cache_time = 60*60*12;
$cache_file = $cache_dir . '/rsscache_' . md5($rss_url);
$timedif = @(time() - filemtime($cache_file));
if ($timedif < $cache_time && file_exists($cache_file)) {
$contents = unserialize(join('', file($cache_file)));
} else {
$contents = file_get_contents($__url);
$serialized = serialize($contents);
if ($f = @fopen($cache_file, 'w')) {
fwrite ($f, $serialized, strlen($serialized));
fclose($f);
}
}
$xml_values = array();
$parser = xml_parser_create('');
if(!$parser)
return false;
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, trim($contents), $xml_values);
xml_parser_free($parser);
if (!$xml_values)
return array();
$xml_array = array();
$last_tag_ar =& $xml_array;
$parents = array();
$last_counter_in_tag = array(1=>0);
foreach ($xml_values as $data)
{
switch($data['type'])
{
case 'open':
$last_counter_in_tag[$data['level']+1] = 0;
$new_tag = array('name' => $data['tag']);
if(isset($data['attributes']))
$new_tag['attributes'] = $data['attributes'];
if(isset($data['value']) && trim($data['value']))
$new_tag['value'] = trim($data['value']);
$last_tag_ar[$last_counter_in_tag[$data['level']]] = $new_tag;
$parents[$data['level']] =& $last_tag_ar;
$last_tag_ar =& $last_tag_ar[$last_counter_in_tag[$data['level']]++];
break;
case 'complete':
$new_tag = array('name' => $data['tag']);
if(isset($data['attributes']))
$new_tag['attributes'] = $data['attributes'];
if(isset($data['value']) && trim($data['value']))
$new_tag['value'] = trim($data['value']);
$last_count = count($last_tag_ar)-1;
$last_tag_ar[$last_counter_in_tag[$data['level']]++] = $new_tag;
break;
case 'close':
$last_tag_ar =& $parents[$data['level']];
break;
default:
break;
};
}
$events = array();
foreach($xml_array[0] as $key => $value) {
if(is_int($key)) {
$event = array();
foreach($value as $k => $v) {
if(is_int($k)) {
$event[$v['name']] = $v['value'];
}
}
$events[] = $event;
}
}
return $events;
}
?>