Changeset 88148 in spip-zone for _plugins_/albums/trunk/inc/albums.php


Ignore:
Timestamp:
Mar 22, 2015, 4:53:51 PM (4 years ago)
Author:
tcharlss@…
Message:

Fonction pour "transvaser" les documents entre un album et le portfolio d'un objet (portfolio = tous les docs liés à l'objet, pas juste le groupe "porfolio". On se comprend.).
Autrement dit, ça permet de "transformer" un portfolio en album et inversement.
Pour l'instant, les boutons d'action correspondant ne sont pas intégrés dans l'interface, le temps de trouver comment faire ça proprement.
Il faut un libellé clair et pas trop long pour ces boutons (albumiser / désalbumiser ? transvaser ?...).
Quand les afficher : pour les admins, les rédacteurs ?
Que de questions.

File:
1 edited

Legend:

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

    r86340 r88148  
    8080        include_spip('inc/autoriser');
    8181        include_spip('action/editer_liens');
     82
    8283        foreach($ids_albums as $id_album) {
    8384                if (
     
    105106
    106107/**
     108 * Transvaser les documents entre un album et un objet éditorial auquel il est associé
     109 *
     110 * @note
     111 * On ne fait que modifier des liens existants au lieu de dissocier puis réassocier
     112 * les documents au moyen des fonctions de Médias (`dissocier_document` et `associer_document`)
     113 *
     114 * @param int|string $id_album
     115 *     Identifiant de l'album
     116 *     0 pour créer un nouvel album vide, dans le cas d'un remplissage
     117 * @param string $objet
     118 *     Type d'objet
     119 * @param int $id_objet
     120 *     Identifiant de l'objet
     121 * @param bool $remplir
     122 *     Définit le sens du transvasement (on remplit l'album ou on le vide)
     123 *     true  : portfolio -> album
     124 *     false : album     -> portfolio
     125 * @param bool $supprimer
     126 *     true : supprimer l'album dans le cas d'un vidage
     127 * @return int|bool
     128 *     nb de liens changés si ok,
     129 *     false en cas d'erreur
     130 */
     131function transvaser_album($id_album, $objet, $id_objet, $remplir=true, $supprimer=false) {
     132
     133        include_spip('inc/autoriser');
     134        include_spip('action/editer_liens');
     135        include_spip('action/editer_objet');
     136
     137        $echec = null;
     138        $nb_maj = 0;
     139
     140        // au besoin, on crée d'abord un album et on l'associe à l'objet
     141        if (
     142                !intval($id_album)
     143                AND $remplir === true
     144        ) {
     145                $id_album = objet_inserer('album');
     146                objet_associer(array('album'=>$id_album),array($objet=>$id_objet));
     147        }
     148
     149        if (autoriser('transvaser','album',$id_album,'',array('objet'=>$objet,'id_objet'=>$id_objet))){
     150
     151                $objet_source = ($remplir === true) ? $objet : 'album';
     152                $id_objet_source = ($remplir === true) ? $id_objet : $id_album;
     153                $objet_destination = ($remplir === true) ? 'album' : $objet;
     154                $id_objet_destination = ($remplir === true) ? $id_album : $id_objet;
     155
     156                // changer les liens existants
     157                // on ne peut pas changer objet et id_objet avec objet_qualifier_liens, donc on fait ça à la main
     158                if (
     159                        $liens_docs = objet_trouver_liens(array('document'=>'*'),array($objet_source=>$id_objet_source))
     160                        AND is_array($liens_docs)
     161                ){
     162                        foreach ($liens_docs as $lien){
     163                                $qualif = array('objet'=>$objet_destination,'id_objet'=>$id_objet_destination);
     164                                $where = 'id_document='.intval($lien['id_document']).' AND objet='.sql_quote($objet_source).' AND id_objet='.intval($id_objet_source);
     165                                $res = sql_updateq('spip_documents_liens',$qualif,$where);
     166                                if ($res===false)
     167                                        $echec = true;
     168                                else
     169                                        $nb_maj++;
     170                        }
     171                }
     172                // en cas de vidage, dissocier l'album
     173                // puis éventuellement le supprimer
     174                if (
     175                        $remplir === false
     176                        AND $echec !== false
     177                ){
     178                        objet_dissocier(array('album'=>$id_album),array($objet=>$id_objet));
     179                        if (
     180                                $supprimer === true
     181                                AND autoriser('supprimer','album',$id_album)
     182                        ) {
     183                                supprimer_albums($id_album);
     184                        }
     185                }
     186        } else {
     187                $echec = true;
     188        }
     189        return ($echec?false:$nb_maj);
     190}
     191
     192
     193/**
    107194 * Lister les formulaire yaml des modèles «album» disponibles dans les dossiers modeles/
    108195 *
Note: See TracChangeset for help on using the changeset viewer.