[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / medias / action / editer_document.php
index 8b7d572..9d75ace 100644 (file)
@@ -10,7 +10,9 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-if (!defined("_ECRIRE_INC_VERSION")) return;
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
 
 /**
@@ -19,9 +21,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
  * @param int $arg
  * @return array
  */
-function action_editer_document_dist($arg=null) {
+function action_editer_document_dist($arg = null) {
 
-       if (is_null($arg)){
+       if (is_null($arg)) {
                $securiser_action = charger_fonction('securiser_action', 'inc');
                $arg = $securiser_action();
        }
@@ -31,28 +33,37 @@ function action_editer_document_dist($arg=null) {
                $id_document = document_inserer();
        }
 
-       if (!$id_document)
-               return array(0,''); // erreur
+       if (!$id_document) {
+               return array(0, '');
+       } // erreur
 
        $err = document_modifier($id_document);
 
-       return array($id_document,$err);
+       return array($id_document, $err);
 }
 
 /**
  * Creer un nouveau document
  *
+ * @param int $id_parent
+ *     inutilise, pas de parent pour les documents
+ * @param array|null $set
  * @return int
  */
-function document_inserer() {
+function document_inserer($id_parent = null, $set = null) {
 
        $champs = array(
                'statut' => 'prop',
                'date' => 'NOW()',
        );
 
+       if ($set) {
+               $champs = array_merge($champs, $set);
+       }
+
        // Envoyer aux plugins
-       $champs = pipeline('pre_insertion',
+       $champs = pipeline(
+               'pre_insertion',
                array(
                        'args' => array(
                                'table' => 'spip_documents',
@@ -60,8 +71,9 @@ function document_inserer() {
                        'data' => $champs
                )
        );
-       $id_document = sql_insertq("spip_documents", $champs);
-       pipeline('post_insertion',
+       $id_document = sql_insertq('spip_documents', $champs);
+       pipeline(
+               'post_insertion',
                array(
                        'args' => array(
                                'table' => 'spip_documents',
@@ -80,17 +92,18 @@ function document_inserer() {
  * $set est un contenu (par defaut on prend le contenu via _request())
  *
  * @param int $id_document
- * @param array|bool $set
+ * @param array|null $set
+ * @return string|null
  */
-function document_modifier($id_document, $set=false) {
+function document_modifier($id_document, $set = null) {
 
        include_spip('inc/modifier');
        include_spip('inc/filtres');
-       
+
        // champs normaux
        $champs = collecter_requests(
                // white list
-               objet_info('document','champs_editables'),
+               objet_info('document', 'champs_editables'),
                // black list
                array('parents', 'ajout_parents'),
                // donnees eventuellement fournies
@@ -98,52 +111,58 @@ function document_modifier($id_document, $set=false) {
        );
 
 
-       $invalideur = "";
+       $invalideur = '';
        $indexation = false;
 
        // Si le document est publie, invalider les caches et demander sa reindexation
-       $t = sql_getfetsel("statut", "spip_documents", 'id_document='.intval($id_document));
+       $t = sql_getfetsel('statut', 'spip_documents', 'id_document=' . intval($id_document));
        if ($t == 'publie') {
                $invalideur = "id='id_document/$id_document'";
                $indexation = true;
        }
-       
-       $ancien_fichier = "";
+
+       $ancien_fichier = '';
        // si le fichier est modifie, noter le nom de l'ancien pour faire le menage
-       if (isset($champs['fichier'])){
-               $ancien_fichier = sql_getfetsel('fichier','spip_documents','id_document='.intval($id_document));
+       if (isset($champs['fichier'])) {
+               $ancien_fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($id_document));
        }
 
-       if ($err = objet_modifier_champs('document', $id_document,
+       if ($err = objet_modifier_champs(
+               'document',
+               $id_document,
                array(
+                       'data' => $set,
                        'invalideur' => $invalideur,
                        'indexation' => $indexation
                ),
-               $champs))
+               $champs
+       )) {
                return $err;
+       }
 
        // nettoyer l'ancien fichier si necessaire
-       if ($champs['fichier'] // un plugin a pu interdire la modif du fichier en virant le champ
-        AND $ancien_fichier // on avait bien note le nom du fichier avant la modif
-        AND $ancien_fichier!==$champs['fichier'] // et il a ete modifie
-        AND !tester_url_absolue($ancien_fichier)
-        AND @file_exists($f = get_spip_doc($ancien_fichier)))
-               spip_unlink($f);
+       if (isset($champs['fichier']) // un plugin a pu interdire la modif du fichier en virant le champ
+               and $champs['fichier']
+               and $ancien_fichier // on avait bien note le nom du fichier avant la modif
+               and $ancien_fichier !== $champs['fichier'] // et il a ete modifie
+               and !tester_url_absolue($ancien_fichier)
+               and @file_exists($f = get_spip_doc($ancien_fichier))
+       ) {
+               spip_unlink($f);
+       }
 
        // Changer le statut du document ?
        // le statut n'est jamais fixe manuellement mais decoule de celui des objets lies
-       $champs = collecter_requests(array('parents','ajouts_parents'),array(),$set);
-       if(document_instituer($id_document,$champs)) {
-
+       $champs = collecter_requests(array('parents', 'ajouts_parents'), array(), $set);
+       if (document_instituer($id_document, $champs)) {
                //
                // Post-modifications
                //
-       
+
                // Invalider les caches
                include_spip('inc/invalideur');
-               suivre_invalideur("id='id_document/$id_document'");     
+               suivre_invalideur("id='id_document/$id_document'");
        }
-
 }
 
 
@@ -155,60 +174,83 @@ function document_modifier($id_document, $set=false) {
  * @param array $champs
  * @return bool
  */
-function document_instituer($id_document,$champs=array()){
-       
-       $statut=isset($champs['statut'])?$champs['statut']:null;
-       $date_publication = isset($champs['date_publication'])?$champs['date_publication']:null;
-       if (isset($champs['parents']))
-               medias_revision_document_parents($id_document,$champs['parents']);
-       if (isset($champs['ajout_parents']))
-               medias_revision_document_parents($id_document,$champs['ajout_parents'],true);
-       
-       $row = sql_fetsel("statut,date_publication", "spip_documents", "id_document=$id_document");
+function document_instituer($id_document, $champs = array()) {
+
+       $statut = isset($champs['statut']) ? $champs['statut'] : null;
+       $date_publication = isset($champs['date_publication']) ? $champs['date_publication'] : null;
+       if (isset($champs['parents'])) {
+               medias_revision_document_parents($id_document, $champs['parents']);
+       }
+       if (isset($champs['ajout_parents'])) {
+               medias_revision_document_parents($id_document, $champs['ajout_parents'], true);
+       }
+
+       $row = sql_fetsel('statut,date_publication', 'spip_documents', 'id_document='.intval($id_document));
        $statut_ancien = $row['statut'];
        $date_publication_ancienne = $row['date_publication'];
 
        /* Autodetermination du statut si non fourni */
-       if (is_null($statut)){
+       if (is_null($statut)) {
                $statut = 'prepa';
 
-               $trouver_table = charger_fonction('trouver_table','base');
-               $res = sql_select('id_objet,objet','spip_documents_liens',"objet!='document' AND id_document=".intval($id_document));
+               $trouver_table = charger_fonction('trouver_table', 'base');
+               $res = sql_select(
+                       'id_objet,objet',
+                       'spip_documents_liens',
+                       "objet!='document' AND id_document=" . intval($id_document)
+               );
                // On aura 19 jours 3h14 et 7 secondes pour corriger en 2038 (limitation de la représentation POSIX du temps sur les 32 bits)
                $date_publication = strtotime('2038-01-01 00:00:00');
                include_spip('base/objets');
-               while($row = sql_fetch($res)){
+               while ($row = sql_fetch($res)) {
                        if (
                                // cas particulier des rubriques qui sont publiees des qu'elles contiennent un document !
-                         $row['objet']=='rubrique'
+                               $row['objet'] == 'rubrique'
                                // ou si objet publie selon sa declaration
-                         OR objet_test_si_publie($row['objet'],$row['id_objet'])){
+                               or objet_test_si_publie($row['objet'], $row['id_objet'])
+                       ) {
                                $statut = 'publie';
-                               $date_publication=0;
+                               $date_publication = 0;
                                continue;
-                       }
-                       // si pas publie, et article, il faut checker la date de post-publi eventuelle
-                       elseif ($row['objet']=='article'
-                         AND $row2 = sql_fetsel('date','spip_articles','id_article='.intval($row['id_objet'])." AND statut='publie'")){
+                       } // si pas publie, et article, il faut checker la date de post-publi eventuelle
+                       elseif ($row['objet'] == 'article'
+                               and $row2 = sql_fetsel(
+                                       'date',
+                                       'spip_articles',
+                                       'id_article=' . intval($row['id_objet']) . " AND statut='publie'"
+                               )
+                       ) {
                                $statut = 'publie';
-                               $date_publication = min($date_publication,strtotime($row2['date']));
+                               $date_publication = min($date_publication, strtotime($row2['date']));
                        }
                }
-               $date_publication = date('Y-m-d H:i:s',$date_publication);
-               if ($statut=='publie' AND $statut_ancien=='publie' AND $date_publication==$date_publication_ancienne)
+               $date_publication = date('Y-m-d H:i:s', $date_publication);
+               if ($statut == 'publie' and $statut_ancien == 'publie' and $date_publication == $date_publication_ancienne) {
                        return false;
-               if ($statut!='publie' AND $statut_ancien!='publie' AND $statut_ancien!='0')
+               }
+               if ($statut != 'publie' and $statut_ancien != 'publie' and $statut_ancien != '0') {
                        return false;
+               }
        }
-       if ($statut!==$statut_ancien
-         OR $date_publication!=$date_publication_ancienne){
-               sql_updateq('spip_documents',array('statut'=>$statut,'date_publication'=>$date_publication),'id_document='.intval($id_document));
-               if ($statut!==$statut_ancien){
-                       $publier_rubriques = sql_allfetsel('id_objet','spip_documents_liens',"objet='rubrique' AND id_document=".intval($id_document));
-                       if (count($publier_rubriques)){
+       if ($statut !== $statut_ancien
+               or $date_publication != $date_publication_ancienne
+       ) {
+               sql_updateq(
+                       'spip_documents',
+                       array('statut' => $statut, 'date_publication' => $date_publication),
+                       'id_document=' . intval($id_document)
+               );
+               if ($statut !== $statut_ancien) {
+                       $publier_rubriques = sql_allfetsel(
+                               'id_objet',
+                               'spip_documents_liens',
+                               "objet='rubrique' AND id_document=" . intval($id_document)
+                       );
+                       if (count($publier_rubriques)) {
                                include_spip('inc/rubriques');
-                               foreach($publier_rubriques as $r)
-                                       calculer_rubriques_if($r['id_objet'],array('statut'=>$statut),$statut_ancien,false);
+                               foreach ($publier_rubriques as $r) {
+                                       calculer_rubriques_if($r['id_objet'], array('statut' => $statut), $statut_ancien, false);
+                               }
                        }
                }
                return true;
@@ -225,36 +267,42 @@ function document_instituer($id_document,$champs=array()){
  * @param array $parents
  * @param bool $ajout
  */
-function medias_revision_document_parents($id_document, $parents=null, $ajout=false){
-       if (!is_array($parents))
+function medias_revision_document_parents($id_document, $parents = null, $ajout = false) {
+       include_spip('inc/autoriser');
+
+       if (!is_array($parents)) {
                return;
-       
+       }
+
        $insertions = array();
        $objets_parents = array(); // array('article'=>array(12,23))
-       
+
        // au format objet|id_objet
-       foreach($parents as $p){
-               $p = explode('|',$p);
-               if (preg_match('/^[a-z0-9_]+$/i', $objet=$p[0])
-                 AND $p[1]=intval($p[1])){ // securite
+       foreach ($parents as $p) {
+               $p = explode('|', $p);
+               if (preg_match('/^[a-z0-9_]+$/i', $objet = $p[0])
+                       and $p[1] = intval($p[1])
+               ) { // securite
                        $objets_parents[$p[0]][] = $p[1];
                }
        }
-       
+
        include_spip('action/editer_liens');
        // les liens actuels
-       $liens = objet_trouver_liens(array('document'=>$id_document),'*');
+       $liens = objet_trouver_liens(array('document' => $id_document), '*');
        $deja_parents = array();
        // si ce n'est pas un ajout, il faut supprimer les liens actuels qui ne sont pas dans $objets_parents
-       if (!$ajout){
-               foreach($liens as $k=>$lien)
-                       if (!isset($objets_parents[$lien['objet']]) OR !in_array($lien['id_objet'],$objets_parents[$lien['objet']])) {
-                               if (autoriser('dissocierdocuments',$lien['objet'],$lien['id_objet'])){
-                                       objet_dissocier(array('document'=>$id_document),array($lien['objet']=>$lien['id_objet']));
+       if (!$ajout) {
+               foreach ($liens as $k => $lien) {
+                       if (!isset($objets_parents[$lien['objet']]) or !in_array($lien['id_objet'], $objets_parents[$lien['objet']])) {
+                               if (autoriser('dissocierdocuments', $lien['objet'], $lien['id_objet'])) {
+                                       objet_dissocier(array('document' => $id_document), array($lien['objet'] => $lien['id_objet']));
                                }
                                unset($liens[$k]);
+                       } else {
+                               $deja_parents[$lien['objet']][] = $lien['id_objet'];
                        }
-                       else $deja_parents[$lien['objet']][] = $lien['id_objet'];
+               }
        }
 
        // trier les objets à traiter : ne pas prendre en compte ceux qui sont déjà associés ou qu'on n'a pas le droit d'associer
@@ -270,23 +318,56 @@ function medias_revision_document_parents($id_document, $parents=null, $ajout=fa
                        }
                }
        }
-       objet_associer(array('document'=>$id_document),$objets_parents);
-
+       objet_associer(array('document' => $id_document), $objets_parents);
 }
 
 
-// obsoletes
+// Fonctions Dépréciées
+// --------------------
+
+/**
+ * Insertion d'un document
+ *
+ * @deprecated Utiliser document_inserer()
+ * @see document_inserer()
+ * @return int Identifiant du nouveau document
+ */
 function insert_document() {
        return document_inserer();
 }
-function document_set($id_document, $set=false) {
+
+/**
+ * Modification d'un document
+ *
+ * @deprecated Utiliser document_modifier()
+ * @see document_modifier()
+ * @param int $id_document Identifiant du document
+ * @param array|bool $set
+ */
+function document_set($id_document, $set = false) {
        return document_modifier($id_document, $set);
 }
-function instituer_document($id_document,$champs=array()){
-       return document_instituer($id_document,$champs);
-}
-function revision_document($id_document, $c=false) {
-       return document_modifier($id_document,$c);
+
+/**
+ * Insituer un document
+ *
+ * @deprecated Utiliser document_instituer()
+ * @see document_instituer()
+ * @param int $id_document Identifiant du document
+ * @param array $champs
+ */
+function instituer_document($id_document, $champs = array()) {
+       return document_instituer($id_document, $champs);
 }
 
-?>
+/**
+ * Réviser un document
+ *
+ * @deprecated Utiliser document_modifier()
+ * @see document_modifier()
+ * @param int $id_document Identifiant du document
+ * @param array $c
+ */
+function revision_document($id_document, $c = false) {
+       return document_modifier($id_document, $c);
+}