editer_mot.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2014 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined("_ECRIRE_INC_VERSION")) return;
  12. include_spip('inc/filtres');
  13. // Editer (modification) d'un mot-cle
  14. // http://code.spip.net/@action_editer_mot_dist
  15. function action_editer_mot_dist($arg=null)
  16. {
  17. if (is_null($arg)){
  18. $securiser_action = charger_fonction('securiser_action', 'inc');
  19. $arg = $securiser_action();
  20. }
  21. $id_mot = intval($arg);
  22. $id_groupe = intval(_request('id_groupe'));
  23. if (!$id_mot AND $id_groupe) {
  24. $id_mot = mot_inserer($id_groupe);
  25. }
  26. // Enregistre l'envoi dans la BD
  27. if ($id_mot > 0) $err = mot_modifier($id_mot);
  28. return array($id_mot,$err);
  29. }
  30. /**
  31. * Insertion d'un mot dans un groupe
  32. * @param int $id_groupe
  33. * @return int
  34. */
  35. function mot_inserer($id_groupe) {
  36. $champs = array();
  37. $row = sql_fetsel("titre", "spip_groupes_mots", "id_groupe=".intval($id_groupe));
  38. if ($row) {
  39. $champs['id_groupe'] = $id_groupe;
  40. $champs['type'] = $row['titre'];
  41. }
  42. else
  43. return false;
  44. // Envoyer aux plugins
  45. $champs = pipeline('pre_insertion',
  46. array(
  47. 'args' => array(
  48. 'table' => 'spip_mots',
  49. ),
  50. 'data' => $champs
  51. )
  52. );
  53. $id_mot = sql_insertq("spip_mots", $champs);
  54. pipeline('post_insertion',
  55. array(
  56. 'args' => array(
  57. 'table' => 'spip_mots',
  58. 'id_objet' => $id_mot
  59. ),
  60. 'data' => $champs
  61. )
  62. );
  63. return $id_mot;
  64. }
  65. /**
  66. * Modifier un mot
  67. * @param int $id_mot
  68. * @param array $set
  69. * @return string
  70. */
  71. function mot_modifier($id_mot, $set=null) {
  72. include_spip('inc/modifier');
  73. $c = collecter_requests(
  74. // white list
  75. array(
  76. 'titre', 'descriptif', 'texte', 'id_groupe'
  77. ),
  78. // black list
  79. array('id_groupe'),
  80. // donnees eventuellement fournies
  81. $set
  82. );
  83. if ($err = objet_modifier_champs('mot', $id_mot,
  84. array(
  85. 'nonvide' => array('titre' => _T('info_sans_titre'))
  86. ),
  87. $c))
  88. return $err;
  89. $c = collecter_requests(array('id_groupe', 'type'),array(),$set);
  90. $err = mot_instituer($id_mot, $c);
  91. return $err;
  92. }
  93. /**
  94. * Modifier le groupe parent d'un mot
  95. * @param $id_mot
  96. * @param $c
  97. * @return void
  98. */
  99. function mot_instituer($id_mot, $c){
  100. $champs = array();
  101. // regler le groupe
  102. if (isset($c['id_groupe']) OR isset($c['type'])) {
  103. $row = sql_fetsel("titre", "spip_groupes_mots", "id_groupe=".intval($c['id_groupe']));
  104. if ($row) {
  105. $champs['id_groupe'] = $c['id_groupe'];
  106. $champs['type'] = $row['titre'];
  107. }
  108. }
  109. // Envoyer aux plugins
  110. $champs = pipeline('pre_edition',
  111. array(
  112. 'args' => array(
  113. 'table' => 'spip_mots',
  114. 'id_objet' => $id_mot,
  115. 'action'=>'instituer',
  116. ),
  117. 'data' => $champs
  118. )
  119. );
  120. if (!$champs) return;
  121. sql_updateq('spip_mots', $champs, "id_mot=".intval($id_mot));
  122. //
  123. // Post-modifications
  124. //
  125. // Invalider les caches
  126. include_spip('inc/invalideur');
  127. suivre_invalideur("id='mot/$id_mot'");
  128. // Pipeline
  129. pipeline('post_edition',
  130. array(
  131. 'args' => array(
  132. 'table' => 'spip_mots',
  133. 'id_objet' => $id_mot,
  134. 'action'=>'instituer',
  135. ),
  136. 'data' => $champs
  137. )
  138. );
  139. // Notifications
  140. if ($notifications = charger_fonction('notifications', 'inc')) {
  141. $notifications('instituermot', $id_mot,
  142. array('id_groupe' => $champs['id_groupe'])
  143. );
  144. }
  145. return ''; // pas d'erreur
  146. }
  147. /**
  148. * Supprimer un mot
  149. * @param int $id_mot
  150. * @return void
  151. */
  152. function mot_supprimer($id_mot) {
  153. sql_delete("spip_mots", "id_mot=".intval($id_mot));
  154. mot_dissocier($id_mot, '*');
  155. pipeline('trig_supprimer_objets_lies',
  156. array(
  157. array('type'=>'mot','id'=>$id_mot)
  158. )
  159. );
  160. }
  161. /**
  162. * Associer un mot a des objets listes sous forme
  163. * array($objet=>$id_objets,...)
  164. * $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type
  165. *
  166. * on peut passer optionnellement une qualification du (des) lien(s) qui sera
  167. * alors appliquee dans la foulee.
  168. * En cas de lot de liens, c'est la meme qualification qui est appliquee a tous
  169. *
  170. * Exemples:
  171. * mot_associer(3, array('auteur'=>2));
  172. * mot_associer(3, array('auteur'=>2), array('vu'=>'oui)); // ne fonctionnera pas ici car pas de champ 'vu' sur spip_mots_liens
  173. *
  174. * @param int $id_mot
  175. * @param array $objets
  176. * @param array $qualif
  177. * @return string
  178. */
  179. function mot_associer($id_mot,$objets, $qualif = null){
  180. include_spip('action/editer_liens');
  181. // si il s'agit d'un groupe avec 'unseul', alors supprimer d'abord les autres
  182. // mots de ce groupe associe a ces objets
  183. $id_groupe = sql_getfetsel('id_groupe','spip_mots','id_mot='.intval($id_mot));
  184. if (un_seul_mot_dans_groupe($id_groupe)) {
  185. $mots_groupe = sql_allfetsel("id_mot", "spip_mots", "id_groupe=".intval($id_groupe));
  186. $mots_groupe = array_map('reset',$mots_groupe);
  187. objet_dissocier(array('mot'=>$mots_groupe), $objets);
  188. }
  189. return objet_associer(array('mot'=>$id_mot), $objets, $qualif);
  190. }
  191. /**
  192. * Dossocier un mot des objets listes sous forme
  193. * array($objet=>$id_objets,...)
  194. * $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type
  195. *
  196. * un * pour $id_mot,$objet,$id_objet permet de traiter par lot
  197. *
  198. * @param int $id_mot
  199. * @param array $objets
  200. * @return string
  201. */
  202. function mot_dissocier($id_mot,$objets){
  203. include_spip('action/editer_liens');
  204. return objet_dissocier(array('mot'=>$id_mot), $objets);
  205. }
  206. /**
  207. * Qualifier le lien d'un mot avec les objets listes
  208. * array($objet=>$id_objets,...)
  209. * $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type
  210. * exemple :
  211. * $c = array('vu'=>'oui');
  212. * un * pour $id_auteur,$objet,$id_objet permet de traiter par lot
  213. *
  214. * @param int $id_mot
  215. * @param array $objets
  216. * @param array $qualif
  217. */
  218. function mot_qualifier($id_mot,$objets,$qualif){
  219. include_spip('action/editer_liens');
  220. return objet_qualifier(array('mot'=>$id_mot), $objets, $qualif);
  221. }
  222. /**
  223. * Renvoyer true si le groupe de mot ne doit etre associe qu'une fois aux objet
  224. * (maximum un seul mot de ce groupe associe a chaque objet)
  225. *
  226. * @param int $id_groupe
  227. * @return bool
  228. */
  229. function un_seul_mot_dans_groupe($id_groupe)
  230. {
  231. return sql_countsel('spip_groupes_mots', "id_groupe=$id_groupe AND unseul='oui'");
  232. }
  233. function insert_mot($id_groupe) {
  234. return mot_inserer($id_groupe);
  235. }
  236. function mots_set($id_mot, $set=null) {
  237. return mot_modifier($id_mot, $set);
  238. }
  239. function revision_mot($id_mot, $c=false) {
  240. return mot_modifier($id_mot, $c);
  241. }
  242. ?>