| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 | 
							- <?php
 
- /**
 
-  * @file
 
-  * Extends the update parser to work with releases
 
-  *
 
-  * The update parser uses version tag to index releases. We will use 'language' and 'tag'
 
-  *
 
-  * @todo Parse languages too
 
-  *
 
-  * @todo Update the server side and get rid of this
 
-  */
 
- module_load_include('inc', 'l10n_update');
 
- /**
 
-  * Get server information
 
-  */
 
- function l10n_update_get_server($server) {
 
-   // Fetch up to date information if available
 
-   if (!empty($server['server_url']) && ($fetch = l10n_update_fetch_server($server['server_url']))) {
 
-     $server = array_merge($server, $fetch);
 
-   }
 
-   // If we have an update url this is ok, otherwise we return none
 
-   if (!empty($server['update_url'])) {
 
-     return $server;
 
-   }
 
-   else {
 
-     return FALSE;
 
-   }
 
- }
 
- /**
 
-  * Fetch remote server metadata from a server URL
 
-  *
 
-  * @param unknown_type $server_url
 
-  * @return unknown_type
 
-  */
 
- function l10n_update_fetch_server($url) {
 
-   $xml = l10n_update_http_request($url);
 
-   if (isset($xml->data)) {
 
-     $data[] = $xml->data;
 
-     $parser = new l10n_update_xml_parser;
 
-     return $parser->parse($xml->data);
 
-   }
 
-   else {
 
-     return FALSE;
 
-   }
 
- }
 
- /**
 
-  * Parser for server metadata
 
-  */
 
- class l10n_update_xml_parser {
 
-   var $current_language;
 
-   var $current_server;
 
-   var $current_languages;
 
-   var $servers;
 
-   /**
 
-    * Parse an XML data file.
 
-    *
 
-    * It can contain information for one or more l10n_servers
 
-    *
 
-    * Example data, http://ftp.drupal.org/files/translations/l10n_server.xml
 
-    */
 
-   function parse($data) {
 
-     $parser = xml_parser_create();
 
-     xml_set_object($parser, $this);
 
-     xml_set_element_handler($parser, 'start', 'end');
 
-     xml_set_character_data_handler($parser, "data");
 
-     xml_parse($parser, $data);
 
-     xml_parser_free($parser);
 
-     //return $this->servers;
 
-     return $this->current_server;
 
-   }
 
-   function start($parser, $name, $attr) {
 
-     $this->current_tag = $name;
 
-     switch ($name) {
 
-       case 'L10N_SERVER':
 
-         unset($this->current_object);
 
-         $this->current_server = array();
 
-         $this->current_object = &$this->current_server;
 
-         break;
 
-       case 'LANGUAGES':
 
-         unset($this->current_object);
 
-         $this->current_languages = array();
 
-         $this->current_object = &$this->current_languages;
 
-         //$this->current_object = &$this->current_release;
 
-         break;
 
-       case 'LANGUAGE':
 
-         unset($this->current_object);
 
-         $this->current_language = array();
 
-         $this->current_object = &$this->current_language;
 
-         break;
 
-     }
 
-   }
 
-   function end($parser, $name) {
 
-     switch ($name) {
 
-       case 'L10N_SERVER':
 
-         unset($this->current_object);
 
-         $this->servers[$this->current_server['name']] = $this->current_server;
 
-         //$this->current_server = array();
 
-         break;
 
-       case 'LANGUAGE':
 
-         unset($this->current_object);
 
-         $this->current_languages[$this->current_language['code']] = $this->current_language;
 
-         $this->current_language = array();
 
-         break;
 
-       case 'LANGUAGES':
 
-         $this->current_server['languages'] = $this->current_languages;
 
-         break;
 
-       default:
 
-         $this->current_object[strtolower($this->current_tag)] = trim($this->current_object[strtolower($this->current_tag)]);
 
-         $this->current_tag = '';
 
-     }
 
-   }
 
-   function data($parser, $data) {
 
-     if ($this->current_tag && !in_array($this->current_tag, array('L10N_SERVER', 'LANGUAGES', 'LANGUAGE'))) {
 
-       $tag = strtolower($this->current_tag);
 
-       if (isset($this->current_object[$tag])) {
 
-         $this->current_object[$tag] .= $data;
 
-       }
 
-       else {
 
-         $this->current_object[$tag] = $data;
 
-       }
 
-     }
 
-   }
 
- }
 
 
  |