X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Finc%2Fdocumenter.php;fp=www%2Fecrire%2Finc%2Fdocumenter.php;h=4f1b0f92ff40b5ffbfe45b5c98c5eabebc95b889;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/ecrire/inc/documenter.php b/www/ecrire/inc/documenter.php new file mode 100644 index 0000000..4f1b0f9 --- /dev/null +++ b/www/ecrire/inc/documenter.php @@ -0,0 +1,175 @@ + Nouveau : au lieu de les ignorer, on affiche desormais avec un fond gris +// les documents et images inclus dans le texte. + +// http://doc.spip.org/@inc_documenter_dist +function inc_documenter_dist( + $doc, # tableau des documents ou numero de l'objet attachant + $type = "article", # article ou rubrique ? + $ancre = 'portfolio', # album d'images ou de documents ? + $ignore_flag = false, # IGNORE, remplace par autoriser(modifier,document) + $couleur='', # IGNORE couleur des cases du tableau + $appelant ='' # pour le rappel (cf plugin) +) { + if (is_numeric($doc)) { + $prim = 'id_' . $type; + $img = ($ancre == 'portfolio') ? '' : " NOT"; + $select = "D.id_document, D.id_vignette, D.extension, D.titre, D.date, D.descriptif, D.fichier, D.taille, D.largeur, D.hauteur, D.mode, D.distant, L.vu, L.id_objet, L.id_objet as $prim"; + $from = "spip_documents AS D LEFT JOIN spip_documents_liens AS L ON L.id_document=D.id_document"; + $where = "L.id_objet=$doc AND L.objet='$type' AND D.mode='document' AND D.extension $img IN ('gif', 'jpg', 'png')"; + $order = "0+D.titre, D.date"; + $docs = sql_allfetsel($select, $from, $where, '', $order); + $opt = array('objet'=>$type, 'id_objet' => $doc); + } else { + $docs = $doc; + $opt = array(); + } + + if (!$docs) return ''; + + // On passe &$tous dans la boucle pour verifier si on a bien + // le droit de supprimer tous les documents + $tous = (count($docs) > 3); + $s = ($ancre =='documents' ? '': '-'); + if (preg_match('/_edit$/', _request('script'))) { + $res = " "; + } else { + $res = documenter_boucle($docs, $type, $ancre, $tous, $appelant, $opt); + if (is_int($doc)) + $res = documenter_bloc($doc, $res, $s, $appelant, $ancre, $tous, $type); + } + return ajax_action_greffe("documenter", "$s$doc", $res); +} + +// http://doc.spip.org/@documenter_bloc +function documenter_bloc($id, $res, $s, $script, $ancre, $tous, $type) +{ + // seulement s'il y a au moins un document dedans + if (!$res) return ""; + + if ($tous) { + $tous = "
" + . ajax_action_auteur('documenter', "$s$id/$type", $appelant ? $appelant : _request('exec'), "id_$type=$id&s=$s&type=$type",array(_T('lien_tout_supprimer'))) + . "
\n"; + } else $tous = ''; + + $bouton = bouton_block_depliable(majuscules(_T("info_$ancre")),true,"portfolio_$ancre"); + + return debut_cadre("$ancre","","",$bouton) + . debut_block_depliable(true,"portfolio_$ancre") + . $tous + . $res + . fin_block() + . fin_cadre(); +} + +// http://doc.spip.org/@documenter_boucle +function documenter_boucle($documents, $type, $ancre, &$tous_autorises, $appelant, $opt=array()) +{ + // la derniere case d'une rangee + $bord_droit = ($ancre == 'portfolio' ? 2 : 1); + $case = 0; + $res = ''; + + $tourner = charger_fonction('tourner', 'inc'); + $legender = charger_fonction('legender', 'inc'); + + // Pour les doublons d'article et en mode ajax, il faut faire propre() + /*if ($type=='article' + AND !isset($GLOBALS['doublons_documents_inclus']) + AND is_int($doc)) { + $r = sql_fetsel("chapo,texte", "spip_articles", "id_article=".sql_quote($doc)); + propre(join(" ",$r)); + }*/ + + $show_docs = explode(',', _request('show_docs')); + + foreach ($documents as $document) { + $id_document = $document['id_document']; + + // $opt : options pour l'autorisation (type d'objet parent, et id de l'objet parent) + if (!autoriser('voir', 'document', $id_document, null, $opt)) + continue; + + if (isset($document['script'])) + $script = $document['script']; # pour plugin Cedric + else + // ref a $exec inutilise en standard + $script = $appelant ? $appelant : $GLOBALS['exec']; + + if (!$case) + $res .= ""; + + $flag = autoriser('modifier', 'document', $id_document); + $tous_autorises &= $flag; + $vu = ($document['vu']=='oui') ? ' vu':''; + + $vue_document = $tourner($id_document, $document, $script, $flag, $type); + + $editer_document = (!$flag ? '' : + $legender($id_document, $document, $script, $type, $document["id_$type"], $ancre, in_array($id_document, $show_docs))) + . (!isset($document['info']) ? '' : + ("
".$document['info']."
")); + + // Prevoir le passage de la vue et de l'edition sous forme de squelettes separes + // Ces pipelines seront alors inutiles, car integres dans l'appel des squelettes + $vue_document = pipeline('afficher_contenu_objet', + array( + 'args' => array( + 'type'=> 'case_document', + 'id'=>$id_document + ), + 'data'=> $vue_document + ) + ); + + $editer_document = pipeline('editer_contenu_objet', + array( + 'args' => array( + 'type'=> 'case_document', + 'id'=>$id_document + ), + 'data'=> $editer_document + ) + ); + + $res .= "\n" + . $vue_document + . $editer_document + . "\n"; + + $case++; + if ($case > $bord_droit) { + $case = 0; + $res .= "\n"; + } + } + + // fermer la derniere ligne + if ($case) { + $res .= ""; + $res .= ""; + } + + // pas de contenu, pas de tableau + if (!$res) return ""; + + return "\n" + . $res + . "
"; +} +?>