X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Faction%2Fediter_breve.php;fp=www%2Fecrire%2Faction%2Fediter_breve.php;h=85b5c243e77320eb1994e6a1e3914a9fee5c6109;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/ecrire/action/editer_breve.php b/www/ecrire/action/editer_breve.php new file mode 100644 index 0000000..85b5c24 --- /dev/null +++ b/www/ecrire/action/editer_breve.php @@ -0,0 +1,214 @@ + $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); + } + +} + +?>