Changeset 88126 in spip-zone for _plugins_/collection_json


Ignore:
Timestamp:
Mar 21, 2015, 3:23:34 PM (5 years ago)
Author:
bystrano@…
Message:

Quand il ne s'agit pas de retours d'erreurs, on fait les return en fin de fonction

Ça facilitera la mise en place des pipelines dans le prochain commit,
et fera plaisir à Rastapopoulos ;-)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/collection_json/branches/experimental/http/collectionjson.php

    r88125 r88126  
    130130        $contexte = $requete->query->all();
    131131
    132         // S'il existe une fonction dédiée à ce type de ressource, on
    133         // n'utilise que ça. Cette fonction doit renvoyer un tableau à
    134         // mettre dans la réponse
    135         if ($fonction_collection = charger_fonction('get_collection', "http/$format/$collection/", true)){
    136 
    137                 $retour = $fonction_collection($requete, $reponse);
    138                 return http_collectionjson_reponse(200, $retour, $requete, $reponse);
    139         }
    140 
    141132        // Allons chercher un squelette de base qui génère le JSON de la
    142133        // collection demandée. Le squelette prend en contexte les
     
    144135        if ($json = recuperer_fond("http/$format/$collection", $contexte)){
    145136                // On décode ce qu'on a trouvé
    146                 $json = json_decode($json, true);
    147                 return http_collectionjson_reponse(200, $json, $requete, $reponse);
    148         }
    149 
     137                $retour = json_decode($json, true);
     138        }
     139        // S'il existe une fonction dédiée à ce type de ressource, on
     140        // n'utilise que ça. Cette fonction doit renvoyer un tableau à
     141        // mettre dans la réponse
     142        else if ($fonction_collection = charger_fonction('get_collection', "http/$format/$collection/", true)){
     143
     144                $retour = $fonction_collection($requete, $reponse);
     145        }
    150146        // Sinon on essaie de s'appuyer sur l'API objet
    151         include_spip('base/abstract_sql');
    152         include_spip('base/objets');
    153 
    154         // Si la collection demandée ne correspond pas à une table
    155         // d'objet on arrête tout
    156         if ( ! in_array(table_objet_sql($collection),
    157                                         array_keys(lister_tables_objets_sql()))) {
    158                 // On utilise la fonction d'erreur générique pour
    159                 // renvoyer dans le bon format
    160                 $fonction_erreur = charger_fonction('erreur', "http/$format/");
    161                 return $fonction_erreur(404, $requete, $reponse);
    162         }
    163 
    164         $links = array();
    165 
    166         $pagination = 10;
    167         $offset = $contexte['offset'] ?: 0;
    168         $nb_objets = sql_countsel(table_objet_sql($collection));
    169 
    170         // On ajoute des liens de pagination
    171         if ($offset > 0) {
    172                 $offset_precedant = max(0, $offset-$pagination);
    173                 $links[] = array(
    174                         'rel' => 'prev',
    175                         'prompt' => _T('public:page_precedente'),
    176                         'href' => url_absolue(
    177                                 parametre_url(self(), 'offset', $offset_precedant)),
     147        else {
     148                include_spip('base/abstract_sql');
     149                include_spip('base/objets');
     150
     151                // Si la collection demandée ne correspond pas à une table
     152                // d'objet on arrête tout
     153                if ( ! in_array(table_objet_sql($collection),
     154                                                array_keys(lister_tables_objets_sql()))) {
     155                        // On utilise la fonction d'erreur générique pour
     156                        // renvoyer dans le bon format
     157                        $fonction_erreur = charger_fonction('erreur', "http/$format/");
     158                        return $fonction_erreur(404, $requete, $reponse);
     159                }
     160
     161                $links = array();
     162
     163                $pagination = 10;
     164                $offset = $contexte['offset'] ?: 0;
     165                $nb_objets = sql_countsel(table_objet_sql($collection));
     166
     167                // On ajoute des liens de pagination
     168                if ($offset > 0) {
     169                        $offset_precedant = max(0, $offset-$pagination);
     170                        $links[] = array(
     171                                'rel' => 'prev',
     172                                'prompt' => _T('public:page_precedente'),
     173                                'href' => url_absolue(
     174                                        parametre_url(self(), 'offset', $offset_precedant)),
     175                        );
     176                }
     177                if (($offset + $pagination) < $nb_objets) {
     178                        $offset_suivant = $offset + $pagination;
     179                        $links[] = array(
     180                                'rel' => 'prev',
     181                                'prompt' => _T('public:page_suivante'),
     182                                'href' => url_absolue(
     183                                        parametre_url(self(), 'offset', $offset_suivant)),
     184                        );
     185                }
     186
     187                $table_collection = table_objet_sql($collection);
     188                $description = lister_tables_objets_sql($table_collection);
     189                $objets = sql_allfetsel('*', $table_collection,'','','',"$offset,$pagination");
     190
     191                $items = array();
     192                foreach ($objets as $objet) {
     193                        $data = array();
     194                        foreach ($description['champs_editables'] as $champ){
     195                                $data[] = array(
     196                                        'name' => $champ,
     197                                        'value' => $objet[$champ],
     198                                );
     199                        }
     200
     201                        $items[] = array(
     202                                'href' => url_absolue(parse_url(self(), PHP_URL_PATH) . $objet[id_table_objet($table_collection)]),
     203                                'data' => $data,
     204                        );
     205                }
     206
     207                $retour = array(
     208                        'href' => url_absolue(parse_url(self(), PHP_URL_PATH)),
     209                        'links' => $links,
     210                        'items' => $items,
    178211                );
    179212        }
    180         if (($offset + $pagination) < $nb_objets) {
    181                 $offset_suivant = $offset + $pagination;
    182                 $links[] = array(
    183                         'rel' => 'prev',
    184                         'prompt' => _T('public:page_suivante'),
    185                         'href' => url_absolue(
    186                                 parametre_url(self(), 'offset', $offset_suivant)),
    187                 );
    188         }
    189 
    190         $table_collection = table_objet_sql($collection);
    191         $description = lister_tables_objets_sql($table_collection);
    192         $objets = sql_allfetsel('*', $table_collection,'','','',"$offset,$pagination");
    193 
    194         $items = array();
    195         foreach ($objets as $objet) {
    196                 $data = array();
    197                 foreach ($description['champs_editables'] as $champ){
    198                         $data[] = array(
    199                                 'name' => $champ,
    200                                 'value' => $objet[$champ],
    201                         );
    202                 }
    203 
    204                 $items[] = array(
    205                         'href' => url_absolue(parse_url(self(), PHP_URL_PATH) . $objet[id_table_objet($table_collection)]),
    206                         'data' => $data,
    207                 );
    208         }
    209 
    210         $retour = array(
    211                 'href' => url_absolue(parse_url(self(), PHP_URL_PATH)),
    212                 'links' => $links,
    213                 'items' => $items,
    214         );
    215213
    216214        return http_collectionjson_reponse(200, $retour, $requete, $reponse);
     
    236234
    237235                $retour = $fonction_ressource($requete, $reponse);
    238                 return http_collectionjson_reponse(200, $retour, $requete, $reponse);
    239         }
    240 
    241         include_spip('base/objets');
    242 
     236        }
    243237        // Sinon on essaye de déduire par un échafaudage générique
    244         $table_collection = table_objet_sql($collection);
    245         $objets = lister_tables_objets_sql();
    246         if (isset($objets[$table_collection])) {
    247                 $description = $objets[$table_collection];
    248                 $select = implode(', ', array_map('sql_quote', $description['champs_editables']));
    249                 $where = id_table_objet($table_collection) . "=" . intval($ressource);
    250         }
    251 
    252         // Si la collection fait partie des objets SPIP et qu'on trouve la
    253         // ligne de l'objet en question. Sinon on renvoie une erreur.
    254         if ( ! ($select
    255                         and $objet = sql_fetsel($select, $table_collection, $where))) {
    256 
    257                 // On utilise la fonction d'erreur générique pour
    258                 // renvoyer dans le bon format
    259                 $fonction_erreur = charger_fonction('erreur', "http/$format/");
    260                 return $fonction_erreur(404, $requete, $reponse);
    261         }
    262 
    263         include_spip('inc/filtres');
    264 
    265         // On ne montre par défaut que les champs *éditables*.
    266         foreach ($objet as $champ=>$valeur){
    267                 $data[] = array('name' => $champ, 'value' => $valeur);
    268         }
    269 
    270         $retour = array(
    271                 'href' => url_absolue(self()),
    272                 'items' => array(
    273                         array(
    274                                 'href' => url_absolue(self()),
    275                                 'links' => array(
    276                                         array('rel' => 'edit', 'href' => $GLOBALS['meta']['adresse_site']."/http.api/$format/$collection/$ressource"),
    277                                         array('rel' => 'alternate', 'type' => 'text/html', 'href' => url_absolue(generer_url_entite($ressource, objet_type($collection)))),
     238        else {
     239                include_spip('base/objets');
     240
     241                $table_collection = table_objet_sql($collection);
     242                $objets = lister_tables_objets_sql();
     243                if (isset($objets[$table_collection])) {
     244                        $description = $objets[$table_collection];
     245                        $select = implode(', ', array_map('sql_quote', $description['champs_editables']));
     246                        $where = id_table_objet($table_collection) . "=" . intval($ressource);
     247                }
     248
     249                // Si la collection fait partie des objets SPIP et qu'on trouve la
     250                // ligne de l'objet en question. Sinon on renvoie une erreur.
     251                if ( ! ($select
     252                                and $objet = sql_fetsel($select, $table_collection, $where))) {
     253
     254                        // On utilise la fonction d'erreur générique pour
     255                        // renvoyer dans le bon format
     256                        $fonction_erreur = charger_fonction('erreur', "http/$format/");
     257                        return $fonction_erreur(404, $requete, $reponse);
     258                }
     259
     260                include_spip('inc/filtres');
     261
     262                // On ne montre par défaut que les champs *éditables*.
     263                foreach ($objet as $champ=>$valeur){
     264                        $data[] = array('name' => $champ, 'value' => $valeur);
     265                }
     266
     267                $retour = array(
     268                        'href' => url_absolue(self()),
     269                        'items' => array(
     270                                array(
     271                                        'href' => url_absolue(self()),
     272                                        'links' => array(
     273                                                array('rel' => 'edit', 'href' => $GLOBALS['meta']['adresse_site']."/http.api/$format/$collection/$ressource"),
     274                                                array('rel' => 'alternate', 'type' => 'text/html', 'href' => url_absolue(generer_url_entite($ressource, objet_type($collection)))),
     275                                        ),
     276                                        'data' => $data,
    278277                                ),
    279                                 'data' => $data,
    280                         ),
    281                 )
    282         );
     278                        )
     279                );
     280        }
    283281
    284282        return http_collectionjson_reponse(200, $retour, $requete, $reponse);
Note: See TracChangeset for help on using the changeset viewer.