PageRenderTime 52ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins-dist/forum/inc/forum_insert.php

https://bitbucket.org/re_al_/real.test.spip
PHP | 193 lines | 153 code | 16 blank | 24 comment | 6 complexity | 83853253c4dcc3211766f36cd661cf88 MD5 | raw file
Possible License(s): LGPL-2.1, MIT
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2016 *
  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")) {
  12. return;
  13. }
  14. include_spip('inc/forum');
  15. include_spip('inc/filtres');
  16. include_spip('inc/actions');
  17. // Ce fichier est inclus par dist/formulaires/forum.php
  18. // https://code.spip.net/@mots_du_forum
  19. function mots_du_forum($ajouter_mot, $id_message) {
  20. include_spip('action/editer_mot');
  21. mot_associer($ajouter_mot, array('forum' => $id_message));
  22. }
  23. // https://code.spip.net/@tracer_erreur_forum
  24. function tracer_erreur_forum($type = '') {
  25. spip_log("erreur forum ($type): " . print_r($_POST, true));
  26. define('_TRACER_ERREUR_FORUM', false);
  27. if (_TRACER_ERREUR_FORUM) {
  28. $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
  29. $envoyer_mail($GLOBALS['meta']['email_webmaster'], "erreur forum ($type)",
  30. "erreur sur le forum ($type) :\n\n" .
  31. '$_POST = ' . print_r($_POST, true) . "\n\n" .
  32. '$_SERVER = ' . print_r($_SERVER, true));
  33. }
  34. }
  35. /**
  36. * Un parametre permet de forcer le statut (exemple: plugin antispam)
  37. *
  38. * https://code.spip.net/@inc_forum_insert_dist
  39. *
  40. * @param $objet
  41. * @param $id_objet
  42. * @param $id_forum
  43. * en reponse a
  44. * @param null $force_statut
  45. * @return bool
  46. */
  47. function inc_forum_insert_dist($objet, $id_objet, $id_forum, $force_statut = null) {
  48. if (!in_array($force_statut, array('privrac', 'privadm'))) {
  49. if (!strlen($objet)
  50. or !intval($id_objet)
  51. ) {
  52. spip_log("Erreur insertion forum sur objet='$objet', id_objet=$id_objet", 'forum.' . _LOG_ERREUR);
  53. return 0;
  54. }
  55. }
  56. spip_log("insertion de forum $force_statut sur $objet $id_objet (+$id_forum)", 'forum');
  57. include_spip('inc/filtres');
  58. include_spip('inc/modifier');
  59. include_spip('inc/session');
  60. $champs = objet_info('forum', 'champs_editables');
  61. $c = collecter_requests($champs, array());
  62. $c['statut'] = 'off';
  63. $c['objet'] = $objet;
  64. $c['id_objet'] = $id_objet;
  65. $c['auteur'] = sinon(session_get('nom'), session_get('session_nom'));
  66. $c['email_auteur'] = sinon(session_get('email'), session_get('session_email'));
  67. $c = pipeline('pre_edition', array(
  68. 'args' => array(
  69. 'table' => 'spip_forum',
  70. 'id_objet' => $id_forum,
  71. 'action' => 'instituer'
  72. ),
  73. 'data' => forum_insert_statut($c, $force_statut)
  74. ));
  75. $id_reponse = forum_insert_base($c, $id_forum, $objet, $id_objet, $c['statut'], _request('ajouter_mot'));
  76. if (!$id_reponse) {
  77. spip_log("Echec insertion forum sur $objet $id_objet (+$id_forum)", 'forum.' . _LOG_ERREUR);
  78. } else {
  79. spip_log("forum insere' $id_reponse sur $objet $id_objet (+$id_forum)", 'forum');
  80. }
  81. return $id_reponse;
  82. }
  83. // https://code.spip.net/@forum_insert_base
  84. function forum_insert_base($c, $id_forum, $objet, $id_objet, $statut, $ajouter_mot = false) {
  85. if (!in_array($statut, array('privrac', 'privadm'))) {
  86. // si le statut est vide, c'est qu'on ne veut pas de ce presume spam !
  87. if (!$statut or !$objet or !$id_objet) {
  88. $args = func_get_args();
  89. spip_log("Erreur sur forum_insert_base " . var_export($args, 1), 'forum.' . _LOG_ERREUR);
  90. return false;
  91. }
  92. }
  93. // Entrer le message dans la base
  94. $id_reponse = sql_insertq('spip_forum', array(
  95. 'date_heure' => date('Y-m-d H:i:s'),
  96. 'ip' => $GLOBALS['ip'],
  97. 'id_auteur' => $GLOBALS['visiteur_session']['id_auteur']
  98. ));
  99. if ($id_reponse) {
  100. if ($id_forum > 0) {
  101. $id_thread = sql_getfetsel("id_thread", "spip_forum", "id_forum =" . intval($id_forum));
  102. } else {
  103. $id_thread = $id_reponse;
  104. } # id_thread oblige INSERT puis UPDATE.
  105. // Entrer les cles
  106. sql_updateq('spip_forum', array(
  107. 'id_parent' => $id_forum,
  108. 'objet' => $objet,
  109. 'id_objet' => $id_objet,
  110. 'id_thread' => $id_thread,
  111. 'statut' => $statut
  112. ), "id_forum=" . intval($id_reponse));
  113. // Entrer les mots-cles associes
  114. if ($ajouter_mot) {
  115. mots_du_forum($ajouter_mot, $id_reponse);
  116. }
  117. //
  118. // Entree du contenu et invalidation des caches
  119. //
  120. include_spip('action/editer_forum');
  121. revision_forum($id_reponse, $c);
  122. // Ajouter un document
  123. if (isset($_FILES['ajouter_document'])
  124. and $_FILES['ajouter_document']['tmp_name']
  125. ) {
  126. $files[] = array(
  127. 'tmp_name' => $_FILES['ajouter_document']['tmp_name'],
  128. 'name' => $_FILES['ajouter_document']['name']
  129. );
  130. $ajouter_documents = charger_fonction('ajouter_documents', 'action');
  131. $ajouter_documents(
  132. 'new',
  133. $files,
  134. 'forum',
  135. $id_reponse,
  136. 'document');
  137. // supprimer le temporaire et ses meta donnees
  138. spip_unlink($_FILES['ajouter_document']['tmp_name']);
  139. spip_unlink(preg_replace(',\.bin$,',
  140. '.txt', $_FILES['ajouter_document']['tmp_name']));
  141. }
  142. // Notification
  143. $quoi = (strncmp($statut, 'priv', 4) == 0 ? 'forumprive' : 'forumposte');
  144. if ($notifications = charger_fonction('notifications', 'inc')) {
  145. $notifications($quoi, $id_reponse);
  146. }
  147. }
  148. return $id_reponse;
  149. }
  150. // https://code.spip.net/@forum_insert_statut
  151. function forum_insert_statut($champs, $forcer_statut = null) {
  152. include_spip('inc/forum');
  153. $statut = controler_forum($champs['objet'], $champs['id_objet']);
  154. if ($forcer_statut !== null) {
  155. $champs['statut'] = $forcer_statut;
  156. } else {
  157. $champs['statut'] = ($statut == 'non') ? 'off' : (($statut == 'pri') ? 'prop' : 'publie');
  158. }
  159. return $champs;
  160. }