PageRenderTime 66ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/modules/forum/inc/topics.php

http://malleo-cms.googlecode.com/
PHP | 277 lines | 199 code | 23 blank | 55 comment | 62 complexity | aff79971861bcaa7f2e21dd89f7c874e MD5 | raw file
Possible License(s): LGPL-3.0, LGPL-2.1
  1. <?php
  2. /*
  3. |------------------------------------------------------------------------------------------------------------
  4. | Software: Malleo ( CMS )
  5. | Contact: SP - http://www.malleo-cms.com
  6. | Support: http://www.malleo-cms.com?module=forum
  7. | Documentation : Support: http://www.malleo-cms.com?module=wiki
  8. |------------------------------------------------------------------------------------------------------------
  9. | Author: Stephane RAJALU
  10. | Copyright (c) 2008-2009, Stephane RAJALU All Rights Reserved
  11. |------------------------------------------------------------------------------------------------------------
  12. | License: Distributed under the CECILL V2 License
  13. | This program is distributed in the hope that it will be useful - WITHOUT
  14. | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  15. | FITNESS FOR A PARTICULAR PURPOSE.
  16. |
  17. | Please read Licence_CeCILL_V2-en.txt
  18. | SVP lisez Licence_CeCILL_V2-fr.txt
  19. |------------------------------------------------------------------------------------------------------------
  20. */
  21. if ( !defined('PROTECT') )
  22. {
  23. die("Tentative de Hacking");
  24. }
  25. // Parametres d'entree
  26. if(!isset($_GET['id_topic']) && !isset($_GET['id_post']))
  27. {
  28. error404();
  29. exit;
  30. }
  31. $id_post= (isset($_GET['id_post']))? intval($_GET['id_post']):0;
  32. $id_topic= (isset($_GET['id_topic']))? intval($_GET['id_topic']):0;
  33. $start = (isset($_GET['start']))? intval($_GET['start']):0;
  34. include_once($root.'fonctions/fct_profil.php');
  35. $tpl->set_filenames(array('forum'=>$root.'plugins/modules/forum/html/topic.html'));
  36. //
  37. // RECHERCHE du topic et de la page o? se trouve le post demandé
  38. $sql = 'SELECT p.user_id, p.id_post, p.id_topic,
  39. t.id_topic, t.titre_topic, t.reponses_topic, t.lectures_topic, t.status_topic, t.type_topic, t.fin_annonce,
  40. f.titre_forum, f.id_forum, f.status_forum, f.parent_forum,
  41. c.titre_cat, c.id_cat,
  42. tnl.id_topic AS topic_lu,
  43. ts.id_topic AS topic_suivis, ts.prevenu,
  44. tf.id_topic AS topic_favoris
  45. FROM '.TABLE_FORUM_POSTS.' as p
  46. LEFT JOIN '.TABLE_FORUM_TOPICS.' as t
  47. ON (p.id_topic=t.id_topic)
  48. LEFT JOIN '.TABLE_FORUM_TOPICS_NONLUS.' as tnl
  49. ON (t.id_topic=tnl.id_topic AND tnl.user_id='.$user['user_id'].')
  50. LEFT JOIN '.TABLE_FORUM_TOPICS_SUIVIS.' as ts
  51. ON (t.id_topic=ts.id_topic AND ts.user_id='.$user['user_id'].')
  52. LEFT JOIN '.TABLE_FORUM_TOPICS_FAVORIS.' as tf
  53. ON (t.id_topic=tf.id_topic AND tf.user_id='.$user['user_id'].')
  54. LEFT JOIN '.TABLE_FORUM_FORUMS.' as f
  55. ON (t.id_forum=f.id_forum)
  56. LEFT JOIN '.TABLE_FORUM_CATS.' as c
  57. ON (f.id_cat=c.id_cat)
  58. WHERE c.module=\''.$module.'\'
  59. AND p.id_topic = ';
  60. if(isset($_GET['id_post']) && !isset($_GET['id_topic'])){
  61. $sql .= '(SELECT id_topic FROM '.TABLE_FORUM_POSTS.' WHERE id_post='.$id_post.' LIMIT 1)';
  62. }else{
  63. $sql .= $id_topic;
  64. }
  65. $sql .= ' ORDER BY p.date_post ASC';
  66. if (!$resultat = $c->sql_query($sql))message_die(E_ERROR,702,__FILE__,__LINE__,$sql);
  67. if ($c->sql_numrows($resultat)==0){
  68. // topic/post inconnu
  69. error404();
  70. exit;
  71. }
  72. $i=0;
  73. while($row = $c->sql_fetchrow($resultat))
  74. {
  75. if ($i==0){
  76. // SECURITE
  77. if (!$droits->check($module,$row['id_forum'],'voir')) error404(725);
  78. if (!$droits->check($module,$row['id_forum'],'lire')) error404(724);
  79. //SAISIE
  80. if (($droits->check($module,$row['id_forum'],'ecrire') || $user['level']>9) && $row['status_forum']==1) $tpl->assign_block_vars('nouveau', array());
  81. if (($droits->check($module,$row['id_forum'],'repondre') || $user['level']>9) && $row['status_topic']==1) $tpl->assign_block_vars('repondre', array());
  82. // MODERATION
  83. if (($droits->check($module,$row['id_forum'],'moderer') || $user['level']>9) && $row['status_topic']==1) $tpl->assign_block_vars('verrouiller', array());
  84. if (($droits->check($module,$row['id_forum'],'moderer') || $user['level']>9) && $row['status_topic']==0) $tpl->assign_block_vars('deverrouiller', array());
  85. // SUPPRESSION
  86. $jeton = '';
  87. if (($droits->check($module,$row['id_forum'],'supprimer') && ($row['user_id'] == $user['user_id']))
  88. || $droits->check($module,$row['id_forum'],'moderer') || $user['level']>9){
  89. // Creation du jeton de securite
  90. if (!session_id()) @session_start();
  91. $jeton = md5(uniqid(rand(), TRUE));
  92. $_SESSION['jeton'] = $jeton;
  93. $_SESSION['jeton_timestamp'] = $session->time;
  94. $tpl->assign_block_vars('supprimer', array());
  95. }
  96. if ($droits->check($module,$row['id_forum'],'moderer') || $user['level']>9) $tpl->assign_block_vars('deplacer', array());
  97. if ($droits->check($module,$row['id_forum'],'moderer') || $user['level']>9) $tpl->assign_block_vars('diviser', array());
  98. // Abonnements
  99. if ($user['level']>1){
  100. if ($row['topic_suivis'] == $row['id_topic']){
  101. // Suivis donc on propose de resilier
  102. $tpl->assign_block_vars('resilier', array());
  103. }else{
  104. // Pas suivis donc on propose de s'abonner
  105. $tpl->assign_block_vars('suivre', array());
  106. }
  107. if ($row['topic_favoris'] == $row['id_topic']){
  108. // déj? en favoris donc on propose de l'enlever
  109. $tpl->assign_block_vars('favoris_del', array());
  110. }else{
  111. // Pas en favoris on propose de l'ajouter
  112. $tpl->assign_block_vars('favoris_add', array());
  113. }
  114. }
  115. // On verifie que si le sujet est une annonce, que celle-ci ne soit plus obsolete
  116. if ($row['type_topic']==2 && $row['fin_annonce'] < $session->time){
  117. $f->update_topic_fin_annonce($row['id_topic']);
  118. }
  119. // on incremente de 1 pour comptabiliser le premier message
  120. $nbre_posts = ($row['reponses_topic']+1);
  121. $f->id_topic = $row['id_topic'];
  122. $f->id_forum = $row['id_forum'];
  123. // Titres
  124. $tpl->titre_navigateur = $row['titre_topic'].' :: '.$row['titre_cat'].' :: '.$row['titre_forum'];
  125. $tpl->titre_page = $f->formate_titre_sujet($row['titre_topic']);
  126. // Navlinks
  127. $session->make_navlinks(array(
  128. ucfirst($module) => formate_url('',true),
  129. $row['titre_cat'] => formate_url('mode=cat&id_cat='.$row['id_cat'],true)
  130. ));
  131. $f->navlinks_forums($row['id_forum'],$row['titre_forum'],$row['parent_forum']);
  132. $session->make_navlinks(array(
  133. $row['titre_topic'] => formate_url('mode=topic&id_topic='.$f->id_topic,true)
  134. ));
  135. // On marque le topic comme lu
  136. if ($row['topic_lu'] == $row['id_topic']) $f->marquer_lu($f->id_topic);
  137. // On marque ce topic comme lu dans les sujets suivis
  138. if ($row['prevenu'] == true) $f->marquer_suivis_lu($f->id_topic);
  139. }
  140. if ($row['id_post'] == $id_post)
  141. {
  142. $id_topic = $row['id_topic'];
  143. $start = (floor($i/$cf->config['forum_posts_par_topic'])*$cf->config['forum_posts_par_topic']);
  144. break;
  145. }
  146. $i++;
  147. }
  148. // Incrémentation du compteur de lectures
  149. $f->incremente_lecture_topic();
  150. load_lang('utilisateurs');
  151. // récupération de la liste des champs ? afficher
  152. // SINON on affiche seulement les champs obligatoires
  153. if (file_exists(PATH_LISTE_CHAMPS_PROFILE))
  154. {
  155. $chps_o = unserialize(file_get_contents(PATH_LISTE_CHAMPS_PROFILE));
  156. }
  157. require($root.'fonctions/fct_formulaires.php');
  158. // Récupération des champs configurés dans la modélisation
  159. require_once($root.'class/class_modelisation.php');
  160. $md = new Modelisation();
  161. $md->page = 'Utilisateurs'; // Nom du champs page dans la table de modélisation
  162. // Nous ne sommes pas dans la configuration d'une liste de champs comma la config
  163. // donc on déporte toutes les sorties de fonctions
  164. $md->deporter = true;
  165. $md->generer_saisie('DEPORTER'); // Lancement du generateur et Récupération des champs configurés sous la forme champs1, champs2, ...
  166. // Classement alphabetique
  167. asort($chps_o);
  168. //
  169. // LISTING des posts
  170. $sql = 'SELECT '.implode(',',$chps_o).',u.user_id,u.msg,u.rang,u.signature, p.text_post, p.id_post, p.date_post
  171. FROM '.TABLE_FORUM_POSTS.' as p
  172. LEFT JOIN '.TABLE_USERS.' as u
  173. ON (p.user_id=u.user_id)
  174. WHERE p.id_topic='.$f->id_topic.'
  175. ORDER BY date_post ASC
  176. LIMIT '.$start.','.$cf->config['forum_posts_par_topic'];
  177. $i=$start;
  178. if (!$resultat = $c->sql_query($sql)) message_die(E_ERROR,702,__FILE__,__LINE__,$sql);
  179. while($row = $c->sql_fetchrow($resultat))
  180. {
  181. // Meta Description
  182. $tpl->meta_description .= $post->bbcode2html($row['text_post']);
  183. // Url Canonique
  184. if (empty($tpl->url_canonique)) $tpl->url_canonique = formate_url('mode=topic&id_topic='.$f->id_topic.'&id_post='.$row['id_post'],true);
  185. // Infos du post
  186. $tpl->assign_block_vars('liste_topics', array(
  187. 'AUTEUR' => formate_pseudo($row['user_id'],$row['pseudo']),
  188. 'AVATAR' => $row['avatar'],
  189. 'RANG' => formate_rang($row['rang'],$row['msg']),
  190. 'DATE' => formate_date($row['date_post'],'d m Y H i','FORMAT_DATE',$user['fuseau']),
  191. 'TEXTE' => $post->bbcode2html($row['text_post']),
  192. 'SIGNATURE' => $post->bbcode2html($row['signature']),
  193. 'ID_POST' => $row['id_post'],
  194. 'S_POST' => formate_url('mode=topic&id_topic='.$f->id_topic.'&id_post='.$row['id_post'].'#'.$row['id_post'],true),
  195. 'S_EDITER' => formate_url('mode=EditerPost&id_post='.$row['id_post'],true),
  196. 'S_EFFACER' => formate_url('mode=SupprimerPost&id_post='.$row['id_post'].'&jeton='.$jeton,true)
  197. ));
  198. // Infos du user
  199. foreach ($chps_o as $key=>$val)
  200. {
  201. if (!in_array($val,array('pseudo','avatar')))
  202. {
  203. $md->valeur_actuelle = $row[$val];
  204. $rep = $md->formate_affichage($md->liste_champs[$val]['nom_champs'],$md->liste_champs[$val]['type_saisie'],$md->liste_champs[$val]['param']);
  205. // Certains champs beneficient d'un affichage spécifique
  206. $rep = formate_info_user($val,$rep);
  207. if (!empty($rep)){
  208. $tpl->assign_block_vars('liste_topics.infos_user', array(
  209. 'LANG' => $lang[$md->liste_champs[$val]['lang']],
  210. 'INFO' => $rep
  211. ));
  212. }
  213. }
  214. }
  215. if (($droits->check($module,$f->post['id_forum'],'editer') && ($user['user_id'] == $row['user_id'])) || $droits->check($module,$f->post['id_forum'],'moderer') || $user['level'] > 9) $tpl->assign_block_vars('liste_topics.editer_post', array());
  216. if ((($droits->check($module,$f->post['id_forum'],'supprimer') && ($user['user_id'] == $row['user_id'])) || $droits->check($module,$f->post['id_forum'],'moderer') || $user['level'] > 9) && $i>0 ) $tpl->assign_block_vars('liste_topics.effacer_post', array());
  217. $i++;
  218. }
  219. // WYSIWYG
  220. if ($cf->config['wysiwyg_editor']!='') include_once($root.'fonctions/fct_'.$cf->config['wysiwyg_editor'].'.php');
  221. // PAGINATION (preparation)
  222. include($root.'fonctions/fct_affichage.php');
  223. $tpl->assign_vars(array(
  224. 'S_NOUVEAU' => formate_url('mode=NouveauTopic&id_forum='.$f->id_forum,true),
  225. 'S_REPONDRE' => formate_url('mode=NouveauPost&id_topic='.$f->id_topic,true),
  226. 'S_VERROUILLER' => formate_url('mode=VerrouillerTopic&id_topic='.$f->id_topic,true),
  227. 'S_DEVERROUILLER'=> formate_url('mode=DeVerrouillerTopic&id_topic='.$f->id_topic,true),
  228. 'S_SUPPRIMER' => formate_url('mode=SupprimerTopic&id_topic='.$f->id_topic.'&jeton='.$jeton,true),
  229. 'S_DEPLACER' => formate_url('mode=DeplacerTopic&id_topic='.$f->id_topic,true),
  230. 'S_DIVISER' => formate_url('mode=DiviserTopic&id_topic='.$f->id_topic,true),
  231. 'S_SUIVRE' => formate_url('mode=SuivreTopic&id_topic='.$f->id_topic,true),
  232. 'S_RESILIER' => formate_url('mode=ResilierTopic&id_topic='.$f->id_topic,true),
  233. 'S_FAVORIS_ADD' => formate_url('mode=AjouterFavoris&id_topic='.$f->id_topic,true),
  234. 'S_FAVORIS_DEL' => formate_url('mode=SupprimerFavoris&id_topic='.$f->id_topic,true),
  235. 'I_NOUVEAU' => $img['nouveau'],
  236. 'I_REPONDRE' => $img['repondre'],
  237. 'I_REPONSE_RAPIDE'=> $img['reponse_rapide'],
  238. 'I_VERROUILLER' => $img['verrouiller'],
  239. 'I_DEVERROUILLER'=> $img['deverrouiller'],
  240. 'I_SUPPRIMER' => $img['supprimer'],
  241. 'I_DEPLACER' => $img['deplacer'],
  242. 'I_DIVISER' => $img['diviser'],
  243. 'I_EFFACER' => $img['effacer'],
  244. 'I_EDITER' => $img['editer'],
  245. 'I_DETAILS' => $img['forum_sujet_non_abonne'],
  246. 'I_SUIVRE' => $img['suivre'],
  247. 'I_RESILIER' => $img['resilier'],
  248. 'I_FAVORIS_ADD' => $img['forum_sujet_favoris_add'],
  249. 'I_FAVORIS_DEL' => $img['forum_sujet_favoris_del'],
  250. 'MODULE' => $module,
  251. 'ID_TOPIC' => $id_topic,
  252. 'PAGINATION' => create_pagination($start, 'mode=topic&id_topic='.$f->id_topic.'&start=', $nbre_posts, $cf->config['forum_posts_par_topic'],$lang['L_POST'])
  253. ));
  254. ?>