$id_rubrique,
'statut' => 'prop',
'date_heure' => date('Y-m-d H:i:s'),
'lang' => $lang,
'langue_choisie' => 'non');
// Envoyer aux plugins
$champs = pipeline('pre_insertion',
array(
'args' => array(
'table' => 'spip_breves',
),
'data' => $champs
)
);
$id_breve = sql_insertq("spip_breves", $champs);
pipeline('post_insertion',
array(
'args' => array(
'table' => 'spip_breves',
'id_objet' => $id_breve
),
'data' => $champs
)
);
return $id_breve;
}
// Enregistre une revision de breve
// $c est un contenu (par defaut on prend le contenu via _request())
// http://doc.spip.org/@revisions_breves
function revisions_breves ($id_breve, $c=false) {
// champs normaux
if ($c === false) {
$c = array();
foreach (array(
'titre', 'texte', 'lien_titre', 'lien_url',
'id_parent', 'statut'
) as $champ)
if (($a = _request($champ)) !== null)
$c[$champ] = $a;
}
// Si la breve est publiee, invalider les caches et demander sa reindexation
$t = sql_getfetsel("statut", "spip_breves", "id_breve=$id_breve");
if ($t == 'publie') {
$invalideur = "id='id_breve/$id_breve'";
$indexation = true;
}
include_spip('inc/modifier');
modifier_contenu('breve', $id_breve,
array(
'nonvide' => array('titre' => _T('info_sans_titre')),
'invalideur' => $invalideur,
'indexation' => $indexation
),
$c);
// Changer le statut de la breve ?
$row = sql_fetsel("statut, id_rubrique,lang, langue_choisie", "spip_breves", "id_breve=$id_breve");
$id_rubrique = $row['id_rubrique'];
$statut_ancien = $statut = $row['statut'];
$langue_old = $row['lang'];
$langue_choisie_old = $row['langue_choisie'];
if (_request('statut', $c)
AND _request('statut', $c) != $statut
AND autoriser('publierdans', 'rubrique', $id_rubrique)) {
$statut = $champs['statut'] = _request('statut', $c);
}
// Changer de rubrique ?
// Verifier que la rubrique demandee est a la racine et differente
// de la rubrique actuelle
if ($id_parent = intval(_request('id_parent', $c))
AND $id_parent != $id_rubrique
AND (NULL !== ($lang=sql_getfetsel('lang', 'spip_rubriques', "id_parent=0 AND id_rubrique=$id_parent")))) {
$champs['id_rubrique'] = $id_parent;
// - changer sa langue (si heritee)
if ($langue_choisie_old != "oui") {
if ($lang != $langue_old)
$champs['lang'] = $lang;
}
// si la breve est publiee
// et que le demandeur n'est pas admin de la rubrique
// repasser la breve en statut 'prop'.
if ($statut == 'publie') {
if (!autoriser('publierdans','rubrique',$id_parent))
$champs['statut'] = $statut = 'prop';
}
}
if (!$champs) return;
sql_updateq('spip_breves', $champs, "id_breve=$id_breve");
//
// Post-modifications
//
// Invalider les caches
include_spip('inc/invalideur');
suivre_invalideur("id='id_breve/$id_breve'");
// Au besoin, changer le statut des rubriques concernees
include_spip('inc/rubriques');
calculer_rubriques_if($id_rubrique, $champs, $statut_ancien);
// Notifications
if ($notifications = charger_fonction('notifications', 'inc')) {
$notifications('instituerbreve', $id_breve,
array('statut' => $statut, 'statut_ancien' => $statut_ancien)
);
}
}
// http://doc.spip.org/@revisions_breves_langue
function revisions_breves_langue($id_breve, $id_rubrique, $changer_lang)
{
if ($changer_lang == "herit") {
$row = sql_fetsel("lang", "spip_rubriques", "id_rubrique=$id_rubrique");
$langue_parent = $row['lang'];
sql_updateq('spip_breves', array('lang'=>$langue_parent, 'langue_choisie'=>'non'), "id_breve=$id_breve");
} else {
sql_updateq('spip_breves', array('lang'=>$changer_lang, 'langue_choisie'=>'oui'), "id_breve=$id_breve");
include_spip('inc/rubriques');
$langues = calculer_langues_utilisees();
ecrire_meta('langues_utilisees', $langues);
}
}
?>