array( 'surtitre', 'titre', 'soustitre', 'descriptif', 'nom_site', 'url_site', 'chapo', 'texte', 'ps', 'url_propre' ), 'nonvide' => array('titre' => _T('info_sans_titre')), 'invalideur' => $invalideur, 'indexation' => $indexation ), $c); if ($r) { spip_query("UPDATE spip_articles SET date_modif=NOW() WHERE id_article="._q($id_article)); } return ''; // pas d'erreur } // $c est un array ('statut', 'id_rubrique') // // statut et rubrique sont lies, car un admin restreint peut deplacer // un article publie vers une rubrique qu'il n'administre pas // http://doc.spip.org/@instituer_article function instituer_article($id_article, $c, $calcul_rub=true) { include_spip('inc/autoriser'); include_spip('inc/rubriques'); include_spip('inc/modifier'); $s = spip_query("SELECT statut, id_rubrique FROM spip_articles WHERE id_article=$id_article"); $row = spip_fetch_array($s); $id_rubrique = $row['id_rubrique']; $statut_ancien = $statut = $row['statut']; $champs = array(); $s = _request('statut', $c); if ($s AND _request('statut', $c) != $statut) { if (autoriser('publierdans', 'rubrique', $id_rubrique)) $statut = $champs['statut'] = $s; else if (autoriser('modifier', 'article', $id_article) AND $s != 'publie') $statut = $champs['statut'] = $s; else spip_log("editer_article $id_article refus " . join(' ', $c)); // En cas de publication, fixer la date a "maintenant" // sauf si $c commande autre chose if ($champs['statut'] == 'publie') { if ($d = _request('date', $c)) $champs['date'] = $d; else $champs['date'] = date('Y-m-d H:i:s'); } } // Verifier que la rubrique demandee existe et est differente // de la rubrique actuelle if ($id_parent = _request('id_parent', $c) AND $id_parent != $id_rubrique AND (spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_rubrique=$id_parent")))) { $champs['id_rubrique'] = $id_parent; // si l'article etait publie // et que le demandeur n'est pas admin de la rubrique // repasser l'article en statut 'propose'. if ($statut == 'publie') { if ($GLOBALS['auteur_session']['statut'] != '0minirezo') $champs['statut'] = 'prop'; else { include_spip('inc/auth'); $r = auth_rubrique($GLOBALS['auteur_session']['id_auteur'], $GLOBALS['auteur_session']['statut']); if (is_array($r) AND !$r[$champs['id_rubrique']]) $champs['statut'] = 'prop'; } } } // Envoyer aux plugins $champs = pipeline('pre_edition', array( 'args' => array( 'table' => 'spip_articles', 'id_objet' => $id_article ), 'data' => $champs ) ); if (!count($champs)) return; // Creer la requete SQL $update = array(); foreach ($champs as $champ => $val) $update[] = $champ . '=' . _q($val); spip_query("UPDATE spip_articles SET ".join(', ',$update)." WHERE id_article=$id_article"); // Si on a deplace l'article // - propager les secteurs // - changer sa langue (si heritee) if (isset($champs['id_rubrique'])) { propager_les_secteurs(); $row = spip_fetch_array(spip_query("SELECT lang, langue_choisie FROM spip_articles WHERE id_article=$id_article")); $langue_old = $row['lang']; $langue_choisie_old = $row['langue_choisie']; if ($langue_choisie_old != "oui") { $row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique="._q($champs['id_rubrique']))); $langue_new = $row['lang']; if ($langue_new != $langue_old) spip_query("UPDATE spip_articles SET lang='$langue_new' WHERE id_article=$id_article"); } } // Invalider les caches include_spip('inc/invalideur'); suivre_invalideur("id='id_article/$id_article'"); // Recalculer les rubriques (statuts et dates) si l'on deplace // un article publie, ou si on le publie/depublie if (($statut == 'publie' AND isset($champs['id_rubrique'])) OR (isset($champs['statut']) AND ($statut_ancien=='publie' OR $champs['statut']=='publie') AND $calcul_rub ) ) calculer_rubriques(); // Pipeline pipeline('post_edition', array( 'args' => array( 'table' => 'spip_articles', 'id_objet' => $id_article ), 'data' => $champs ) ); // Notifications if ($notifications = charger_fonction('notifications', 'inc')) { $notifications('instituerarticle', $id_article, array('statut' => $statut, 'statut_ancien' => $statut_ancien) ); } return ''; // pas d'erreur } // // Reunit les textes decoupes parce que trop longs // // http://doc.spip.org/@trop_longs_articles function trop_longs_articles() { if (is_array($plus = _request('texte_plus'))) { foreach ($plus as $n=>$t) { $plus[$n] = preg_replace(",[\n\r]*,","", $t); } set_request('texte', join('',$plus) . _request('texte')); } } // Poser un lien de traduction vers un article de reference // http://doc.spip.org/@article_referent function article_referent ($id_article, $c) { if (!$lier_trad = intval(_request('lier_trad', $c))) return; // selectionner l'article cible, qui doit etre different de nous-meme, // et quitter s'il n'existe pas if (!$row = spip_fetch_array( spip_query("SELECT id_trad FROM spip_articles WHERE id_article=$lier_trad AND NOT(id_article=$id_article)"))) { spip_log("echec lien de trad vers article inexistant ($lier_trad)"); return '&trad_err=1'; } // $id_lier est le numero du groupe de traduction $id_lier = $row['id_trad']; // Si l'article vise n'est pas deja traduit, son identifiant devient // le nouvel id_trad de ce nouveau groupe et on l'affecte aux deux // articles if ($id_lier == 0) { spip_query("UPDATE spip_articles SET id_trad = $lier_trad WHERE id_article IN ($lier_trad, $id_article)"); } // sinon on ajouter notre article dans le groupe else { spip_query("UPDATE spip_articles SET id_trad = $id_lier WHERE id_article = $id_article"); } return ''; // pas d'erreur } ?>