Changeset 99514 in spip-zone for _plugins_/albums


Ignore:
Timestamp:
Sep 16, 2016, 2:59:16 PM (5 years ago)
Author:
cedric@…
Message:

Retour sur r83594 : on evite de casser gratuitement la compatibilite avec la v2 du plugin
On retablit le critere {contenu} en le notant @deprecated

Location:
_plugins_/albums/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/albums/trunk/albums_fonctions.php

    r86340 r99514  
    4040}
    4141
    42 ?>
     42
     43/**
     44 * critère {contenu}
     45 * sélectionne les albums en fonction de leur contenu (image, audio, file, video)
     46 *      {contenu} -> albums remplis
     47 *      {!contenu} -> albums vides
     48 *      {contenu xxx} -> albums contenant des xxx : medias sous forme de regexp
     49 *      en fonction de la valeur de *contenu* dans l environnement :
     50 *      oui : albums remplis
     51 *      non : albums vides
     52 *      xxx -> albums contenant des xxx : medias sous forme de regexp
     53 *
     54 * @deprecated : utiliser plutot <BOUCLE_album(ALBUMS documents){documents.media=image}>
     55 * @param string $idb
     56 * @param object $boucles
     57 * @param object $crit
     58 */
     59function critere_ALBUMS_contenu_dist($idb, &$boucles, $crit) {
     60
     61        $boucle = &$boucles[$idb];
     62        $cond = $crit->cond;
     63        $not = $crit->not ? "NOT" : "";
     64        // par defaut, parametre adjacent au critere, sinon parametre present dans l environnement
     65        if (isset($crit->param[0]))
     66                $_media = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
     67        else
     68                $_media = $_env = '@$Pile[0]["contenu"]';
     69
     70        $where = "'" .$boucle->id_table.".id_album $not IN ('.albums_calculer_critere_contenu_select($_media).')'";
     71        if ($cond)
     72                $where = "($_env) ? $where : ''";
     73
     74        $boucle->where[]= $where;
     75
     76}
     77
     78
     79/**
     80 * fonction privée pour le calcul du critère {contenu}
     81 * renvoie un sql select en fonction des documents liés au albums
     82 *
     83 * note : la selection des albums vides (avec contenu=non) fait une requete a rallonge... a revoir
     84 *
     85 * @param string $media         types de medias contenus dans les albums, separes par des virgules
     86 * @return string               select
     87 */
     88function albums_calculer_critere_contenu_select($media='') {
     89
     90        // albums contenant un type de media en particulier
     91        if ($media AND preg_match('#image|audio|video|file#', $media)) {
     92                $select = sql_get_select(
     93                        "DISTINCT(id_album)",
     94                        array(
     95                                "spip_albums AS albums",
     96                                "spip_documents AS docs",
     97                                "spip_documents_liens AS liens",
     98                        ),
     99                        array(
     100                                "liens.objet = 'album'",
     101                                "liens.id_objet = albums.id_album",
     102                                "docs.id_document = liens.id_document",
     103                                "docs.media REGEXP " . sql_quote($media)
     104                        )
     105                );
     106        // albums pleins ou vides
     107        } else if (!$media OR in_array($media, array('oui','non'))) {
     108                // albums pleins : contenant au moins un document
     109                $select_pleins = sql_get_select(
     110                        "DISTINCT liens.id_objet AS id_album",
     111                        "spip_documents_liens AS liens",
     112                        "liens.objet = 'album'"
     113                );
     114                if (!$media OR ($media == 'oui')) {
     115                        $select = $select_pleins;
     116                }
     117                // albums vides
     118                if ($media == 'non') {
     119                        $select = sql_get_select(
     120                                "DISTINCT(id_album)",
     121                                "spip_albums AS albums",
     122                                "id_album NOT IN ($select_pleins)"
     123                        );
     124                }
     125        }
     126
     127        return "SELECT * FROM($select) AS subquery";
     128}
  • _plugins_/albums/trunk/paquet.xml

    r98415 r99514  
    22        prefix="albums"
    33        categorie="multimedia"
    4         version="3.3.22"
     4        version="3.3.23"
    55        schema="1.0.0"
    66        etat="stable"
Note: See TracChangeset for help on using the changeset viewer.