'*'),array($objet=>0-$id_auteur)); foreach($liens as $lien){ objet_associer(array('document'=>$lien['document']),array($objet=>$id_objet),$lien); } // un simple delete pour supprimer les liens temporaires sql_delete("spip_documents_liens", array("id_objet = ".(0-$id_auteur),"objet=".sql_quote($objet))); } return $flux; } /** * Configuration des contenus * @param array $flux * @return array */ function medias_affiche_milieu($flux){ if ($flux["args"]["exec"] == "configurer_contenu") { $flux["data"] .= recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_documents')); } return $flux; } function medias_configurer_liste_metas($config){ $config['documents_objets'] = 'spip_articles'; $config['documents_date'] = 'non'; return $config; } function medias_post_edition($flux){ // le serveur n'est pas toujours la $serveur = (isset($flux['args']['serveur']) ? $flux['args']['serveur'] : ''); // si on ajoute un document, mettre son statut a jour if($flux['args']['action']=='ajouter_document'){ include_spip('action/editer_document'); // mettre a jour le statut si necessaire document_instituer($flux['args']['id_objet']); } // si on institue un objet, mettre ses documents lies a jour elseif ($flux['args']['table']!=='spip_documents'){ $type = isset($flux['args']['type'])?$flux['args']['type']:objet_type($flux['args']['table']); // verifier d'abord les doublons ! include_spip('inc/autoriser'); if (autoriser('autoassocierdocument',$type,$flux['args']['id_objet'])){ $table_objet = isset($flux['args']['table_objet'])?$flux['args']['table_objet']:table_objet($flux['args']['table'],$serveur); $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc'); $marquer_doublons_doc($flux['data'],$flux['args']['id_objet'],$type,id_table_objet($type, $serveur),$table_objet,$flux['args']['table'], '', $serveur); } if($flux['args']['action']=='instituer' OR isset($flux['data']['statut'])){ include_spip('base/abstract_sql'); $id = $flux['args']['id_objet']; $docs = array_map('reset',sql_allfetsel('id_document','spip_documents_liens','id_objet='.intval($id).' AND objet='.sql_quote($type))); include_spip('action/editer_document'); foreach($docs as $id_document) // mettre a jour le statut si necessaire document_instituer($id_document); } } else { if ($flux['args']['table']!=='spip_documents'){ // verifier les doublons ! $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc'); $marquer_doublons_doc($flux['data'],$flux['args']['id_objet'],$flux['args']['type'],id_table_objet($flux['args']['type'], $serveur),$flux['args']['table_objet'],$flux['args']['spip_table_objet'], '', $serveur); } } return $flux; } /** * Pipeline afficher_complement_objet * afficher le portfolio et ajout de document sur les fiches objet * sur lesquelles les medias ont ete activees * Pour les articles, on ajoute toujours ! * * @param $flux * @return */ function medias_afficher_complement_objet($flux){ if ($type=$flux['args']['type'] AND $id=intval($flux['args']['id']) AND (autoriser('joindredocument',$type,$id))) { $documenter_objet = charger_fonction('documenter_objet','inc'); $flux['data'] .= $documenter_objet($id,$type); } return $flux; } /** * Pipeline affiche_gauche * Affiche le formulaire d'ajout de document sur le formulaire d'edition * d'un objet (lorsque cet objet peut recevoir des documents). * * HACK : Lors d'une premiere creation de l'objet, celui-ci n'ayant pas * encore d'identifiant tant que le formulaire d'edition n'est pas enregistre, * les liaisions entre les documents lies et l'objet a creer sauvegardent * un identifiant d'objet negatif de la valeur de id_auteur (l'auteur * connecte). Ces liaisons seront corrigees apres validation dans * medias_post_insertion() */ function medias_affiche_gauche($flux){ if ($en_cours = trouver_objet_exec($flux['args']['exec']) AND $en_cours['edition']!==false // page edition uniquement AND $type = $en_cours['type'] AND $id_table_objet = $en_cours['id_table_objet'] // id non defini sur les formulaires de nouveaux objets AND (isset($flux['args'][$id_table_objet]) and $id = intval($flux['args'][$id_table_objet]) // et justement dans ce cas, on met un identifiant negatif OR $id = 0-$GLOBALS['visiteur_session']['id_auteur']) AND autoriser('joindredocument',$type,$id)){ $flux['data'] .= recuperer_fond('prive/objets/editer/colonne_document',array('objet'=>$type,'id_objet'=>$id)); } return $flux; } function medias_document_desc_actions($flux){ return $flux; } function medias_editer_document_actions($flux){ return $flux; } function medias_renseigner_document_distant($flux){ return $flux; } /** * Compter les documents dans un objet * * @param array $flux * @return array */ function medias_objet_compte_enfants($flux){ if ($objet = $flux['args']['objet'] AND $id=intval($flux['args']['id_objet'])) { // juste les publies ? if (array_key_exists('statut', $flux['args']) and ($flux['args']['statut'] == 'publie')) { $flux['data']['document'] = sql_countsel('spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document', "L.objet=".sql_quote($objet)."AND L.id_objet=".intval($id)." AND (D.statut='publie')"); } else { $flux['data']['document'] = sql_countsel('spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document', "L.objet=".sql_quote($objet)."AND L.id_objet=".intval($id)." AND (D.statut='publie' OR D.statut='prepa')"); } } return $flux; } /** * Afficher le nombre de documents dans chaque rubrique * * @param array $flux * @return array */ function medias_boite_infos($flux){ if ($flux['args']['type']=='rubrique' AND $id_rubrique = $flux['args']['id']){ if ($nb = sql_countsel('spip_documents_liens',"objet='rubrique' AND id_objet=".intval($id_rubrique))){ $nb = "
". singulier_ou_pluriel($nb, "medias:un_document", "medias:des_documents") . "
"; if ($p = strpos($flux['data'],"")) $flux['data'] = substr_replace($flux['data'],$nb,$p,0); } } return $flux; }