* @copyright Morphoss Ltd
* @license http://gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once('vComponent.php');
$response = new XMLDocument( array("urn:ietf:params:xml:ns:timezone-service" => "") );
$tzlist = $response->NewXMLElement('timezone-list');
$qry = new AwlQuery('SELECT to_char(max(last_modified),\'YYYY-MM-DD"T"HH24:MI:SS"Z"\') AS dtstamp FROM timezones');
if ( $qry->Exec('tz/list',__LINE__,__FILE__) && $qry->rows() > 0 ) {
$row = $qry->Fetch();
$tzlist->NewElement('dtstamp', $row->dtstamp);
}
else {
$tzlist->NewElement('dtstamp', gmdate('Y-m-d\TH:i:s\Z'));
}
$sql = 'SELECT our_tzno, tzid, active, to_char(last_modified,\'YYYY-MM-DD"T"HH24:MI:SS"Z"\') AS last_modified, olson_name, vtimezone FROM timezones';
$params = array();
$where = '';
if ( $returnall !== true ) {
$where = 'active';
}
if ( !empty($changedsince) ) {
if ( !empty($where) ) $where .= ' AND ';
$where .= 'last_modified > :changedsince';
$params[':changedsince'] = $changedsince;
}
if ( !empty($tzid) ) {
if ( !empty($where) ) $where .= ' AND ';
$where .= '(tzid = :tzid OR our_tzno IN (SELECT our_tzno FROM tz_aliases WHERE tzalias = :tzid))';
$params[':tzid'] = $tzid;
}
if ( !empty($where)) $sql .= ' WHERE '.$where;
if ( !empty($c->strict_result_ordering) && $c->strict_result_ordering ) {
$sql .= ' ORDER BY tzid';
}
/*
2009-10-11T09:32:11Z
America/New_York
2009-09-17T01:39:34Z
US/Eastern
America/New_York
*/
$q2 = new AwlQuery();
$qry = new AwlQuery($sql,$params);
if ( $qry->Exec('tz/list',__LINE__,__FILE__) && $qry->rows() > 0 ) {
while( $tz = $qry->Fetch() ) {
$elements = array(
new XMLElement('tzid', $tz->tzid),
new XMLElement('last-modified', $tz->last_modified)
);
if ( $tz->active != 't' ) {
$elements[] = new XMLElement('inactive' );
}
if ( $tz->tzid != $tz->olson_name ) {
$elements[] = new XMLElement('alias', $tz->olson_name );
}
if ( $q2->QDo('SELECT * FROM tz_aliases WHERE our_tzno = ?', array($tz->our_tzno)) ) {
while( $alias = $q2->Fetch() ) {
$elements[] = new XMLElement('alias', $alias->tzalias );
}
}
if ( !empty($lang) && $q2->QDo('SELECT * FROM tz_localnames WHERE our_tzno = ? AND locale = ?', array($tz->our_tzno, $lang)) && $q2->rows() > 0 ) {
while( $local = $q2->Fetch() ) {
$attr = array( 'lang' => $local->locale );
if ( $local->preferred == 't' ) $attr['preferred'] = 'true';
$elements[] = new XMLElement('local-name', $local->localised_name, $attr );
}
}
else {
$elements[] = new XMLElement('local-name', $tz->tzid, ( empty($lang) ? null : array( 'lang' => $lang ) ) );
}
$tzlist->NewElement('summary', $elements);
}
}
header('Content-Type: application/xml; charset="utf-8"');
echo $response->Render($tzlist);
exit(0);