Changeset 83594 in spip-zone


Ignore:
Timestamp:
Jul 7, 2014, 11:12:19 AM (7 years ago)
Author:
tcharlss@…
Message:

fonctions : ménage.

  • suppression du critère {contenu}, remplacé avantageusement par une jointure sur les documents et le critère {media}, car du coup on a accès aux autres critère (id_document, fichier, extension...) et on peut utiliser les opérateurs.

ex : <BOUCLE_album(ALBUMS documents){documents.media = image}>

  • suppression des fonctions obsolètes qui étaient utilisées dans certains squelettes (supprimés) de l'espace privé

administrations : phpDoc

Location:
_plugins_/albums/trunk
Files:
2 edited

Legend:

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

    r73694 r83594  
    1010**/
    1111
     12// Sécurité
    1213if (!defined('_ECRIRE_INC_VERSION')) return;
    1314
    1415
    1516/**
    16  * Fonction d'installation du plugin et de mise à jour.
    17 **/
     17 * Fonction d'installation et de mise à jour du plugin.
     18 *
     19 * @param string $nom_meta_base_version
     20 *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
     21 * @param string $version_cible
     22 *     Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
     23 * @return void
     24 */
    1825function albums_upgrade($nom_meta_base_version, $version_cible){
    1926        $maj = array();
     
    2229        include_spip('base/abstract_sql');
    2330
    24         # Premiere installation  creation des tables
     31        # Création des tables + options de configuration
    2532        $maj['create'] = array(
    26                 array('maj_tables', array('spip_albums', 'spip_albums_liens')),
    27                 array('ecrire_config','albums/afficher_champ_descriptif', 'on'),
    28                 array('ecrire_config','albums/objets', array('spip_articles')),
     33                array('maj_tables', array('spip_albums','spip_albums_liens')),
    2934                array('ecrire_config','albums/afficher_champ_descriptif', 'on'),
    3035                array('ecrire_config','albums/vue_icones', array('titre')),
     
    3237        );
    3338
    34         # Version 2.0.2 : meta + suppression colonne categorie
     39        # Suppression de la colonne «categorie»
    3540        $maj['2.0.2'] = array(
    36                 # On supprime la colonne 'categorie'
    3741                array('sql_alter','TABLE spip_albums DROP COLUMN categorie'),
    38                 # Configuration : valeurs par defaut
    39                 array('ecrire_config','albums/afficher_champ_descriptif', 'on'),
    40                 array('ecrire_config','albums/objets', array('spip_articles')),
    41                 array('ecrire_config','albums/afficher_champ_descriptif', 'on'),
    42                 array('ecrire_config','albums/vue_icones', array('titre')),
    43                 array('ecrire_config','albums/vue_liste', array('icone', 'mimetype', 'poids', 'dimensions')),
    4442        );
    4543
    46         # Version 2.0.4 : on utilise le statut prepa au lieu de refuse
     44        # Statut «prepa» au lieu de «refuse»
    4745        $maj['2.0.4'] = array(
    48                 array('sql_updateq', 'spip_albums', array('statut' => 'prepa'), 'statut = '.sql_quote('refuse')),
    49                 #array(sql_updateq('spip_albums', array('statut' => 'prepa'), 'statut = '.sql_quote('refuse'))),
     46                array('sql_updateq', 'spip_albums', array('statut'=>'prepa'), 'statut = '.sql_quote('refuse'))
    5047        );
    5148
    52         # Dans tous les cas on verifie que l'ajout de documents aux albums est active
    53         if (!in_array('spip_albums', $e = explode(',',$GLOBALS['meta']['documents_objets']))){
    54                 $e = array_filter($e);
    55                 $e[] = 'spip_albums';
    56                 ecrire_meta('documents_objets',implode(',',$e));
    57         }
     49        # nettoyer les options de configuration obsolètes
     50        $maj['3.0.0'] = array(
     51                array('effacer_config','albums/afficher_champ_descriptif'),
     52                array('effacer_config','albums/vue_icones'),
     53                array('effacer_config','albums/vue_liste'),
     54        );
    5855
    5956        include_spip('base/upgrade');
     
    6461/**
    6562 * Fonction de désinstallation du plugin.
    66 **/
     63 *
     64 * @param string $nom_meta_base_version
     65 *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
     66 * @return void
     67 */
    6768function albums_vider_tables($nom_meta_base_version) {
    6869
    69         # supression des tables
     70        # Supression des tables
    7071        sql_drop_table("spip_albums");
    7172        sql_drop_table("spip_albums_liens");
    7273
    73         # suppression meta & config
    74         effacer_meta($nom_meta_base_version);
    75         effacer_config('albums');
    76 
    77         # a faire : retirer les albums de la liste des objets pour les documents
    78 
    79         # Suppression des liens des documents lies aux albums
    80         # -> utiliser optimiser_base_disparus a la place ?
    81         sql_delete("spip_documents_liens",      sql_in("objet", array('album')));
     74        # Suppression des liens des documents liés aux albums
     75        sql_delete("spip_documents_liens",    sql_in("objet", array('album')));
    8276
    8377        # Nettoyer les versionnages et forums
    84         sql_delete("spip_versions",             sql_in("objet", array('album')));
    85         sql_delete("spip_versions_fragments",   sql_in("objet", array('album')));
     78        sql_delete("spip_versions",           sql_in("objet", array('album')));
     79        sql_delete("spip_versions_fragments", sql_in("objet", array('album')));
     80        sql_delete("spip_forum",              sql_in("objet", array('album')));
     81
     82        # Suppression meta
     83        effacer_meta($nom_meta_base_version);
     84
     85        # Retirer les albums de la liste des objets où téléverser des documents
     86        if (in_array('spip_albums', $objets=@array_filter(explode(',',$GLOBALS['meta']['documents_objets'])))){
     87                $objets = array_diff($objets,array('spip_albums'));
     88                ecrire_meta('documents_objets',implode(',',$objets));
     89        }
     90
    8691}
    8792
     93
    8894?>
  • _plugins_/albums/trunk/albums_fonctions.php

    r73694 r83594  
    44 *
    55 * @plugin     Albums
    6  * @copyright  2013
     6 * @copyright  2014
    77 * @author     Romy Tetue, Charles Razack
    88 * @licence    GNU/GPL
    99 * @package    SPIP\Albums\Fonctions
    10 **/
     10 */
    1111
     12// Sécurité
    1213if (!defined('_ECRIRE_INC_VERSION')) return;
    1314
    1415/**
    15  * critère {orphelins}
    16  * selectionne les albums sans lien avec un objet editorial
     16 * critère `{orphelins}`
     17 *
     18 * Sélectionne les albums sans lien avec un objet éditorial
     19 *
     20 * @critere
    1721 *
    1822 * @param string $idb
     
    3640}
    3741
    38 
    39 /**
    40  * critère {contenu}
    41  * sélectionne les albums en fonction de leur contenu (image, audio, file, video)
    42  *      {contenu} -> albums remplis
    43  *      {!contenu} -> albums vides
    44  *      {contenu xxx} -> albums contenant des xxx : medias sous forme de regexp
    45  *      en fonction de la valeur de *contenu* dans l environnement :
    46  *      oui : albums remplis
    47  *      non : albums vides
    48  *      xxx -> albums contenant des xxx : medias sous forme de regexp
    49  *
    50  * @param string $idb
    51  * @param object $boucles
    52  * @param object $crit
    53  */
    54 function critere_ALBUMS_contenu_dist($idb, &$boucles, $crit) {
    55 
    56         $boucle = &$boucles[$idb];
    57         $cond = $crit->cond;
    58         $not = $crit->not ? "NOT" : "";
    59         // par defaut, parametre adjacent au critere, sinon parametre present dans l environnement
    60         if (isset($crit->param[0]))
    61                 $_media = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
    62         else
    63                 $_media = $_env = '@$Pile[0]["contenu"]';
    64 
    65         $where = "'" .$boucle->id_table.".id_album $not IN ('.albums_calculer_critere_contenu_select($_media).')'";
    66         if ($cond)
    67                 $where = "($_env) ? $where : ''";
    68 
    69         $boucle->where[]= $where;
    70 
    71 }
    72 
    73 
    74 /**
    75  * fonction privée pour le calcul du critère {contenu}
    76  * renvoie un sql select en fonction des documents liés au albums
    77  *
    78  * note : la selection des albums vides (avec contenu=non) fait une requete a rallonge... a revoir
    79  *
    80  * @param string $media         types de medias contenus dans les albums, separes par des virgules
    81  * @return string               select
    82  */
    83 function albums_calculer_critere_contenu_select ($media='') {
    84 
    85         // albums contenant un type de media en particulier
    86         if ($media AND preg_match('#image|audio|video|file#', $media)) {
    87                 $select = sql_get_select(
    88                         "DISTINCT(id_album)",
    89                         array(
    90                                 "spip_albums AS albums",
    91                                 "spip_documents AS docs",
    92                                 "spip_documents_liens AS liens",
    93                         ),
    94                         array(
    95                                 "liens.objet = 'album'",
    96                                 "liens.id_objet = albums.id_album",
    97                                 "docs.id_document = liens.id_document",
    98                                 "docs.media REGEXP " . sql_quote($media)
    99                         )
    100                 );
    101         // albums pleins ou vides
    102         } else if (!$media OR in_array($media, array('oui','non'))) {
    103                 // albums pleins : contenant au moins un document
    104                 $select_pleins = sql_get_select(
    105                         "DISTINCT liens.id_objet AS id_album",
    106                         "spip_documents_liens AS liens",
    107                         "liens.objet = 'album'"
    108                 );
    109                 if (!$media OR ($media == 'oui')) {
    110                         $select = $select_pleins;
    111                 }
    112                 // albums vides
    113                 if ($media == 'non') {
    114                         $select = sql_get_select(
    115                                 "DISTINCT(id_album)",
    116                                 "spip_albums AS albums",
    117                                 "id_album NOT IN ($select_pleins)"
    118                         );
    119                 }
    120         }
    121 
    122         return $select;
    123 }
    124 
    125 
    126 /**
    127  * Fonction privée generant un tableau qui contient les types de medias présents dans un album, et leur nombre
    128  * exemple: array(file=>5, image=>2, ...)
    129  *
    130  * @param string $id_album      identifiant de l'album
    131  * @param boolean $grouper      grouper les types de media ?
    132  * @return array                tableau des types de medias contenus
    133  *                              array ( media => nombre, ... )
    134  */
    135 function album_determiner_contenu($id_album) {
    136         if (intval($id_album)){
    137 
    138                 // selection des medias (sans doublons) contenus dans les documents lies a l album
    139                 // select from where groupby orderby limit having
    140                 $res_medias = sql_select(
    141                         array(
    142                                 "docs.media AS media",
    143                                 "COUNT(*) AS nombre"
    144                         ),
    145                         array(
    146                                 "spip_documents AS docs",
    147                                 "spip_documents_liens AS lien",
    148                                 "spip_albums AS albums"
    149                         ),
    150                         array(
    151                                 "docs.id_document = lien.id_document",
    152                                 "lien.objet = 'album'",
    153                                 "albums.id_album = lien.id_objet",
    154                                 "albums.id_album = $id_album"
    155                         ),
    156                         "media",
    157                         "media DESC"
    158                 );
    159 
    160                 // tableau
    161                 while ($row = sql_fetch($res_medias)) {
    162                         $medias[$row['media']] = $row['nombre']; // (file => 5, image => 2, ...)
    163                 }
    164         }
    165 
    166         return $medias;
    167 }
    168 
    169 
    170 /**
    171  * filtre |album_contenu
    172  * Renvoie des infos sur les types de medias contenus dans un album (image, audio, video, file).
    173  * Simplifie la vie pour l ecriture des squelettes.
    174  * On peut avoir :
    175  *      true ou false pour savoir si l'album est vide ou pas
    176  *      une liste simple des types de media
    177  *      une liste detaillee (icone + nombre pour chaque type de media)
    178  *      les icones des types de media
    179  *      le nombre total de documents
    180  *      une qualification du contenu pour choisir le fichier du logo (vide, mixte, ou type de media)
    181  *
    182  * @param string $id_album      identifiant de l'album
    183  * @param string $info          '' / liste / liste_detaillee / icones / nombre / logo
    184  * @param string $format        '' / tableau' : format du retour
    185  * @return string/array/boolean
    186  */
    187 function filtre_album_contenu($id_album, $info='', $format='') {
    188         if (intval($id_album)){
    189 
    190                 $medias = array();
    191                 $medias = album_determiner_contenu($id_album); // renvoit array(media=>nb, ...)
    192 
    193                 switch ($info){
    194 
    195                         // qualification de l album en fonction des medias (vide, mixte ou type de media)
    196                         case 'logo';
    197                                 $nb_types = count($medias);
    198                                 echo $medias[0];
    199                                 if ($nb_types == 0)
    200                                         $retour = 'vide';
    201                                 if ($nb_types == 1)
    202                                         $retour = key($medias);
    203                                 /*if ($nb_types > 1)
    204                                         $retour = 'mixte';*/
    205                                 break;
    206 
    207                         // liste des medias
    208                         case 'liste';
    209                                 if (!empty($medias)) {
    210                                         if ($format=='tableau') {
    211                                                 $retour = array_keys($medias);
    212                                         } else {
    213                                                 $retour = '<ul>';
    214                                                 foreach ($medias AS $media=>$nombre) {
    215                                                         $retour .= '<li>'
    216                                                                 . _T('medias:media_'.$media)
    217                                                                 . '</li>';
    218                                                 }
    219                                                 $retour .= '</ul>';
    220                                         }
    221                                 }
    222                                 break;
    223 
    224                         // liste des medias
    225                         case 'liste_detaillee';
    226                                 if (!empty($medias)) {
    227                                         if ($format == 'tableau') {
    228                                                 $retour = $medias;
    229                                         } else {
    230                                                 $balise_img = charger_filtre('balise_img');
    231                                                 include_spip('inc/filtres');
    232                                                 $retour = '<ul>';
    233                                                 foreach ($medias AS $media=>$nombre) {
    234                                                         $retour .= '<li>'
    235                                                                 . $balise_img(chemin_image('media-'. $media . '-16.png'))
    236                                                                 . '&nbsp;'. singulier_ou_pluriel($nombre, 'medias:un_'.$media, 'medias:des_'.$media.'s')
    237                                                                 . '</li>';
    238                                                 }
    239                                                 $retour .= '</ul>';
    240                                         }
    241                                 }
    242                                 break;
    243 
    244                         // nombre des medias
    245                         case 'nombre';
    246                                 if (!empty($medias)) {
    247                                         $nb = '';
    248                                         foreach ($medias AS $media=>$nombre) {
    249                                                 $nb += $nombre;
    250                                         }
    251                                         $retour = $nb;
    252                                 }
    253                                 break;
    254 
    255                         // liste des medias
    256                         case 'icones';
    257                                 if (!empty($medias)) {
    258                                         $balise_img = charger_filtre('balise_img');
    259                                         include_spip('inc/filtres');
    260                                         $retour = '<ul>';
    261                                         foreach ($medias AS $media=>$nombre) {
    262                                                 $retour .= inserer_attribut($balise_img(chemin_image('media-'. $media . '-24.png')),'title', _T('medias:media_'.$media));
    263                                         }
    264                                         $retour .= '</ul>';
    265                                 }
    266                                 break;
    267 
    268                         // vrai ou faux
    269                         default;
    270                                 if (empty($medias))
    271                                         $retour = false;
    272                                 else
    273                                         $retour = true;
    274                                 break;
    275                                
    276 
    277                 }
    278 
    279         }
    280 
    281         return $retour;
    282 }
    283 
    284 
    285 /**
    286  * filtre |album_liaison
    287  * Renvoie des infos sur les objet lies a un album.
    288  * Simplifie la vie pour l ecriture des squelettes.
    289  * On peut avoir :
    290  *      une liste : id-objet, objet (+icone)
    291  *      une liste detaillee: id-objet, objet, titre (+icone)
    292  *      une liste compacte: regroupement par objets (+icone)
    293  *      le nombre total d objets lies
    294  *
    295  * @param string $id_album              identifiant de l'album
    296  * @param string $format                liste / liste_detaillee / liste_compacte / nombre
    297  * @param string $afficher_icone        si 'icone', affiche les icones des objets
    298  * @return string
    299  */
    300 function filtre_album_liaison($id_album, $format='liste', $afficher_icone='') {
    301 
    302         include_spip('action/editer_liens');
    303         $balise_img = charger_filtre('balise_img');
    304 
    305         if ($res= objet_trouver_liens(array('album'=>intval($id_album)),array('*'=>'*'))) {
    306                 while ($row = array_shift($res)) {
    307                         $liste[] = array($row['objet'], $row['id_objet'], $row['vu']);
    308                 }
    309 
    310                 // liste simple
    311                 if ($format == 'liste' OR $format == 'liste_detaillee') {
    312                         $retour = "<ul>";
    313                         foreach ($liste as $k=>$v) {
    314                                 $objet = $v[0];
    315                                 $id_objet = $v[1];
    316                                 $icone = ($afficher_icone == "icone") ? objet_icone($objet, 16) . '&nbsp;' : '';
    317                                 $vu = ($v[2] == 'oui') ? $balise_img(chemin_image('vu-16-10.png')) . '&nbsp;' : '';
    318                                 $titre = ($format == 'liste_detaillee') ? '&nbsp;<span class=\'titre\'>' .generer_info_entite($id_objet,$objet,'titre') . '</span>' : '';
    319                                 $retour .= "<li>"
    320                                         . "<a href='".generer_url_entite($id_objet, $objet)."'>"
    321                                         . $icone
    322                                         . $vu
    323                                         . $objet
    324                                         . "&nbsp;n°"
    325                                         . $id_objet
    326                                         . "</a>"
    327                                         . $titre
    328                                         . "<li>";
    329                         };
    330                         $retour .= "</ul>";
    331                 }
    332                 // liste compacte
    333                 else if ($format == 'liste_compacte') {
    334                         foreach ($liste as $k){
    335                                 $objets[] = $k[0];
    336                         }
    337                         $retour = "<ul>";
    338                         foreach (array_count_values($objets) as $k=>$v) {
    339                                 $icone = ($afficher_icone == "icone") ? objet_icone($k, 16) . '&nbsp;' : '';
    340                                 $retour .= "<li>"
    341                                         . $icone
    342                                         . singulier_ou_pluriel($v, objet_info($k,'info_1_objet'), objet_info($k, 'info_nb_objets'))
    343                                         . "</li>";
    344                         }
    345                         $retour .= "</ul>";
    346                 }
    347                 // nombre
    348                 else if ($format == 'nombre') {
    349                         $retour = count($liste) . " objets";
    350                 }
    351         }
    352 
    353         return $retour;
    354 }
    355 
    356 
    35742?>
Note: See TracChangeset for help on using the changeset viewer.