Changeset 50166 in spip-zone


Ignore:
Timestamp:
Aug 2, 2011, 10:44:20 AM (10 years ago)
Author:
fil@…
Message:

report de divers travaux faits sur SPIP 3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/iterateurs/iterateur/data.php

    r46988 r50166  
    2929                        'cle' => 'STRING',
    3030                        'valeur' => 'STRING',
    31                         '*' => 'ALL'
     31                        '*' => 'ALL' // Champ joker *
    3232                )
    3333        );
     
    141141         */
    142142        protected function select($command) {
    143                
     143
    144144                // l'iterateur DATA peut etre appele en passant (data:type)
    145145                // le type se retrouve dans la commande 'from'
     
    153153                // sont : {tableau #ARRAY} ; {cle=...} ; {valeur=...}
    154154                // {source format, [URL], [arg2]...}
    155 
     155               
    156156                if (isset($this->command['source'])
    157157                AND isset($this->command['sourcemode'])) {
     
    160160                        # les class indispensables, sinon PHP ne saura pas gerer
    161161                        # l'objet en cache ; cf plugins/icalendar
    162                         if (isset($this->command['sourcemode']))
     162                        # perf : pas de fonction table_to_array ! (table est deja un array)
     163                        if (isset($this->command['sourcemode'])
     164                          AND !in_array($this->command['sourcemode'],array('table', 'array', 'tableau')))
    163165                                charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true);
    164166
     
    198200                                                $this->tableau = $a;
    199201                                }
    200                                 else if (preg_match(',^https?://,', $src)) {
    201                                         include_spip('inc/distant');
    202                                         $u = recuperer_page($src);
    203                                         if (!$u)
    204                                                 throw new Exception("404");
    205                                         if (!isset($ttl)) $ttl = 24*3600;
    206                                 } else if (@is_dir($src)) {
    207                                         $u = $src;
    208                                         if (!isset($ttl)) $ttl = 10;
    209                                 } else if (@is_readable($src) && @is_file($src)) {
    210                                         $u = spip_file_get_contents($src);
    211                                         if (!isset($ttl)) $ttl = 10;
    212                                 } else {
    213                                         $u = $src;
    214                                         if (!isset($ttl)) $ttl = 10;
    215                                 }
    216 
    217                                 if (!$this->err
    218                                 AND $g = charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true)) {
    219                                         $args = $this->command['source'];
    220                                         $args[0] = $u;
    221                                         if (is_array($a = call_user_func_array($g,$args))) {
    222                                                 $this->tableau = $a;
     202                                else {
     203                                        if (preg_match(',^https?://,', $src)) {
     204                                                include_spip('inc/distant');
     205                                                $u = recuperer_page($src);
     206                                                if (!$u)
     207                                                        throw new Exception("404");
     208                                                if (!isset($ttl)) $ttl = 24*3600;
     209                                        } else if (@is_dir($src)) {
     210                                                $u = $src;
     211                                                if (!isset($ttl)) $ttl = 10;
     212                                        } else if (@is_readable($src) && @is_file($src)) {
     213                                                $u = spip_file_get_contents($src);
     214                                                if (!isset($ttl)) $ttl = 10;
     215                                        } else {
     216                                                $u = $src;
     217                                                if (!isset($ttl)) $ttl = 10;
     218                                        }
     219                                        if (!$this->err
     220                                        AND $g = charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true)) {
     221                                                $args = $this->command['source'];
     222                                                $args[0] = $u;
     223                                                if (is_array($a = call_user_func_array($g,$args))) {
     224                                                        $this->tableau = $a;
     225                                                }
    223226                                        }
    224227                                }
     
    251254                // Critere {liste X1, X2, X3}
    252255                if (isset($this->command['liste'])) {
     256                        # s'il n'y a qu'une valeur dans la liste, sans doute une #BALISE
     257                        if (!isset($this->command['liste'][1])) {
     258                                $this->command['liste'] = explode(',', $this->command['liste'][0]);
     259                        }
    253260                        $this->tableau = $this->command['liste'];
    254261                }
     
    560567        $xml_array = array();
    561568        for( $object->rewind(); $object->valid(); $object->next() ) {
    562                 if(!array_key_exists($object->key(), $xml_array)){
    563                         $xml_array[$object->key()] = array();
     569                if(array_key_exists($key = $object->key(), $xml_array)){
     570                        $key .= '-'.uniqid();
    564571                }
    565572                $vars = get_object_vars($object->current());
    566573                if (isset($vars['@attributes']))
    567574                        foreach($vars['@attributes'] as $k => $v)
    568                         $xml_array[$object->key()][$k] = $v;
     575                        $xml_array[$key][$k] = $v;
    569576                if($object->hasChildren()){
    570                         $xml_array[$object->key()][] = ObjectToArray(
     577                        $xml_array[$key][] = ObjectToArray(
    571578                                $object->current());
    572579                }
    573580                else{
    574                         $xml_array[$object->key()][] = strval($object->current());
     581                        $xml_array[$key][] = strval($object->current());
    575582                }
    576583        }
Note: See TracChangeset for help on using the changeset viewer.