Changeset 88148 in spip-zone for _plugins_/albums


Ignore:
Timestamp:
Mar 22, 2015, 4:53:51 PM (3 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.

Location:
_plugins_/albums/trunk
Files:
2 edited

Legend:

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

    r86553 r88148  
    324324 * Autorisation à supprimer définitivement un album.
    325325 *
    326  * Il faut qu'il soit vide et inutilisé, + non publié si on est pas admin complet
     326 * Il faut qu'il soit vide et inutilisé, et avoir le droit de le modifier ou être admin complet
    327327 *
    328328 * @param  string $faire Action demandée
     
    414414 * @param  array  $opts  Options de cette autorisation
    415415 *                       Doit contenir les clés `objet` et `id_objet`
    416  *                       pour rensigner le type et l'identifiant de l'objet
     416 *                       pour renseigner le type et l'identifiant de l'objet
    417417 * @return bool          true s'il a le droit, false sinon
    418418 */
     
    505505**/
    506506function autoriser_album_vider_dist($faire, $type, $id, $qui, $opts) {
     507
    507508        include_spip('action/editer_liens');
    508509        $rempli = count(objet_trouver_liens(array('document'=>'*'),array('album'=>$id)))>0;
    509510        $admin = $qui['statut']=='0minirezo' AND !$qui['restreint'];
    510511        $autoriser = ($admin AND $rempli) ? true : false;
     512
     513        return $autoriser;
     514}
     515
     516
     517/**
     518 * Autorisation de transvaser les documents d'un album
     519 *
     520 * Il faut que l'album soit lié à l'objet et
     521 * avoir le droit de modifier l'album et d'ajouter des documents ou être admin complet.
     522 *
     523 * @param  string $faire Action demandée
     524 * @param  string $type  Type d'objet sur lequel appliquer l'action
     525 * @param  int    $id    Identifiant de l'objet
     526 * @param  array  $qui   Description de l'auteur demandant l'autorisation
     527 * @param  array  $opts  Options de cette autorisation
     528 *                       Doit contenir les clés `objet` et `id_objet`
     529 *                       pour renseigner le type et l'identifiant de l'objet
     530 * @return bool          true s'il a le droit, false sinon
     531**/
     532function autoriser_album_transvaser_dist($faire, $type, $id, $qui, $opts) {
     533
     534        include_spip('action/editer_liens');
     535        $objet = $opts['objet'];
     536        $id_objet = $opts['id_objet'];
     537        $liaison = (count(objet_trouver_liens(array('album'=>$id),array($objet=>$id_objet)))>0) ? true : false;
     538        $autoriser_modifier = autoriser('modifier','album',$id);
     539        $autoriser_joindredocument = autoriser('joindredocument',$objet,$id_objet);
     540        $admin = $qui['statut']=='0minirezo' AND !$qui['restreint'];
     541
     542        $autoriser = (
     543                $liaison
     544                AND
     545                (
     546                        (
     547                        $autoriser_modifier
     548                        AND $autoriser_joindredocument
     549                        )
     550                        OR
     551                        $admin
     552                )
     553        ) ? true : false;
     554
    511555        return $autoriser;
    512556}
  • _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.