Seditio Source
Root |
./othercms/dotclear-2.22/inc/core/class.dc.store.parser.php
<?php
/**
 * @brief Repository modules XML feed parser
 *
 * Provides an object to parse XML feed of modules from a repository.
 *
 * @package Dotclear
 * @subpackage Core
 *
 * @copyright Olivier Meunier & Association Dotclear
 * @copyright GPL-2.0-only
 *
 * @since 2.6
 */
if (!defined('DC_RC_PATH')) {
    return;
}

class
dcStoreParser
{
   
/** @var    object    XML object of feed contents */
   
protected $xml;
   
/** @var    array    Array of feed contents */
   
protected $items;
   
/** @var    string    XML bloc tag */
   
protected static $bloc = 'http://dotaddict.org/da/';

   
/**
     * Constructor.
     *
     * @param    string    $data        Feed content
     */
   
public function __construct($data)
    {
        if (!
is_string($data)) {
            throw new
Exception(__('Failed to read data feed'));
        }

       
$this->xml   = simplexml_load_string($data);
       
$this->items = [];

        if (
$this->xml === false) {
            throw new
Exception(__('Wrong data feed'));
        }

       
$this->_parse();

        unset(
$data, $this->xml);
    }

   
/**
     * Parse XML into array
     */
   
protected function _parse()
    {
        if (empty(
$this->xml->module)) {
            return;
        }

        foreach (
$this->xml->module as $i) {
           
$attrs = $i->attributes();

           
$item = [];

           
# DC/DA shared markers
           
$item['id']      = (string) $attrs['id'];
           
$item['file']    = (string) $i->file;
           
$item['label']   = (string) $i->name; // deprecated
           
$item['name']    = (string) $i->name;
           
$item['version'] = (string) $i->version;
           
$item['author']  = (string) $i->author;
           
$item['desc']    = (string) $i->desc;

           
# DA specific markers
           
$item['dc_min']  = (string) $i->children(self::$bloc)->dcmin;
           
$item['details'] = (string) $i->children(self::$bloc)->details;
           
$item['section'] = (string) $i->children(self::$bloc)->section;
           
$item['support'] = (string) $i->children(self::$bloc)->support;
           
$item['sshot']   = (string) $i->children(self::$bloc)->sshot;

           
$tags = [];
            foreach (
$i->children(self::$bloc)->tags as $t) {
               
$tags[] = (string) $t->tag;
            }
           
$item['tags'] = implode(', ', $tags);

           
# First filter right now. If DC_DEV is set all modules are parse
           
if (defined('DC_DEV') && DC_DEV === true || dcUtils::versionsCompare(DC_VERSION, $item['dc_min'], '>=', false)) {
               
$this->items[$item['id']] = $item;
            }
        }
    }

   
/**
     * Get modules.
     *
     * @return    array        Modules list
     */
   
public function getModules()
    {
        return
$this->items;
    }
}