PageRenderTime 49ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/class.xmodblog.inc

https://github.com/jcplat/console-seolan
PHP | 948 lines | 800 code | 63 blank | 85 comment | 80 complexity | 6bf57d70f31c3b73fadafdceb3b67eea MD5 | raw file
Possible License(s): LGPL-2.0, LGPL-2.1, GPL-3.0, Apache-2.0, BSD-3-Clause
  1. <?php
  2. // Blog
  3. //
  4. class XModBlog extends XModTable {
  5. /// duree en jours pendant laquelle un event ou un commentaire sont consideres comme recents
  6. var $recentevents=7;
  7. function __construct($ar=NULL) {
  8. parent::__construct($ar);
  9. XLabels::loadLabels('xmodblog');
  10. }
  11. /// suppression du module
  12. function delete($ar=NULL) {
  13. parent::delete($ar);
  14. }
  15. /// corbeille des taches
  16. public function getTasklet(){
  17. // liste des entites en attente de validation
  18. $blogs = array();
  19. // blogs a valider
  20. $query=$this->xset->select_query(array("cond"=>array('PUBLISH'=>array('=',2),
  21. 'dtype'=>array('=','blog'))));
  22. $rs=selectQuery($query);
  23. while($rs && ($ors = $rs->fetch())){
  24. if (!isset($blogs[$ors['KOID']])){
  25. $blogs[$ors['KOID']] = array('publish'=>2,'posts'=>array());
  26. }
  27. }
  28. unset($rs); unset($ors);
  29. // posts a valider
  30. $query=$this->xset->select_query(array("cond"=>array('PUBLISH'=>array('=',2),
  31. 'dtype'=>array('=','post'))));
  32. $rs=selectQuery($query);
  33. while($rs && ($ors = $rs->fetch())){
  34. if (!isset($blogs[$ors['blog']])){
  35. $blogs[$ors['blog']] = array('publish'=>1,'posts'=>array());
  36. }
  37. $blogs[$ors['blog']]['posts'][$ors['KOID']]=array('title'=>$ors['title'], 'publish'=>2, 'comments'=>array());
  38. }
  39. unset($rs); unset($ors);
  40. // comptage du nombre de commentaires a valider
  41. $query=$this->xset->select_query(array("cond"=>array('PUBLISH'=>array('=',2),
  42. 'dtype'=>array('=','comment'))));
  43. $rs=selectQuery($query);
  44. while($rs && ($ors = $rs->fetch())){
  45. if (!isset($blogs[$ors['blog']])){
  46. $blogs[$ors['blog']] = array('publish'=>1, 'posts'=>array());
  47. }
  48. if (!isset($blogs[$ors['blog']]['posts'][$ors['paperup']])){
  49. $blogs[$ors['blog']]['posts'][$ors['paperup']] = array('publish'=>1, 'comments'=>array());
  50. }
  51. $blogs[$ors['blog']]['posts'][$ors['paperup']]['comments'][$ors['KOID']] = array('publish'=>2, 'title'=>$ors['title']);
  52. }
  53. unset($rs); unset($ors);
  54. $t= '';
  55. foreach($blogs as $oidblog=>$blog){
  56. $rdb = $this->xset->rdisplay($oidblog);
  57. $bt = XLabels::getSysLabel('xmodblog', 'modulename').' : '.$rdb['title'];
  58. /*
  59. if ($blog['publish'] == 2 && $this->secure($oidblog, ':rwv')){
  60. $url = $GLOBALS['TZR_SESSION_MANAGER']::complete_self(true, true).'&function=browseBlog&moid='.$this->_moid.'&oid='.$oidblog.'&template=xmodblog/browseblog.html&tplentry=br';
  61. $a1 = '<a href="'.$url.'">';
  62. $a2 = '</a>';
  63. $t .= '<p>'.XLabels::getSysLabel('general','view').' '.$a1.$rdb['title'].$a2.'</p>';
  64. }
  65. */
  66. foreach($blog['posts'] as $oidpost=>$post){
  67. $rdp = $this->xset->rdisplay($oidpost);
  68. $a1=$a2='';
  69. if ($post['publish'] == 2 && $this->secure($oidblog, ':rwv')){
  70. $url = $GLOBALS['TZR_SESSION_MANAGER']::complete_self(true, true).'&function=displayPost&moid='.$this->_moid.'&oid='.$oidblog.'&post='.$oidpost.'&template=xmodblog/displaypost.html&tplentry=br';
  71. $a1 = '<a href="'.$url.'">';
  72. $a2 = '</a>';
  73. $t .= '<p>'.XLabels::getSysLabel('general','view').' '.$a1.$rdp['title'].$a2.' - '.$bt.'</p>';
  74. }
  75. $pt = XLabels::getSysLabel('xmodblog', 'post').' : '.$rdp['title'].', '.$bt;
  76. foreach($post['comments'] as $oidcomment=>$comment){
  77. $b1=$b2='';
  78. if ($comment['publish'] == 2 && $this->secure($oidcomment, ':rwv')){
  79. $url = $GLOBALS['TZR_SESSION_MANAGER']::complete_self(true, true).'&function=displayPost&moid='.$this->_moid.'&oid='.$oidblog.'&post='.$oidpost.'&template=xmodblog/displaypost.html&tplentry=br&comment='.$oidcomment;
  80. $b1 = '<a href="'.$url.'">';
  81. $b2 = '</a>';
  82. $rdc = $this->xset->rdisplay($oidcomment);
  83. $t .= '<p>'.XLabels::getSysLabel('general','view').' '.$b1.$rdc['title'].$b2.' - '.$pt.'</p>';
  84. }
  85. }
  86. }
  87. }
  88. if (!empty($t)){
  89. $t = '<h2>En attente de validation</h2>'.$t;
  90. }
  91. return $t;
  92. }
  93. /// affichage dans la partie page d'accueil de la corbeille de taches
  94. public function getShortTasklet(){
  95. // posts a valider
  96. $urln=$GLOBALS['TZR_SESSION_MANAGER']::complete_self(true, true).'&moid='.$this->_moid.
  97. '&_function=browseBlogs&tplentry=br&template=xmodblog/browseblogs.html';
  98. $url1=$GLOBALS['TZR_SESSION_MANAGER']::complete_self(true, true).'&moid='.$this->_moid.
  99. '&_function=browseBlog&tplentry=br&template=xmodblog/browseblog.html';
  100. $query=$this->xset->select_query(array("cond"=>array('PUBLISH'=>array('=',2),
  101. 'dtype'=>array('=','post'))));
  102. $rs=selectQuery($query);
  103. $posts=0;
  104. $blogsposts=array();
  105. while($rs && ($ors = $rs->fetch())){
  106. if($this->secure($ors['blog'], ':rwv')) {
  107. $posts++;$blogsposts[$ors['blog']]=1;
  108. }
  109. }
  110. $t='';
  111. if($posts>0) {
  112. if(count($blogsposts)>1) $url=$urln;
  113. else {
  114. $tab=array_keys($blogsposts);
  115. $url=$url1.'&oid='.$tab[0];
  116. }
  117. if($posts==1) $t.='<p><a href="'.$url.'">Un</a> article &agrave; valider</p>';
  118. elseif($posts>0) $t.='<p><a href="'.$url.'">'.$posts.'</a> articles &agrave; valider</p>';
  119. }
  120. // posts a valider
  121. $query=$this->xset->select_query(array("cond"=>array('PUBLISH'=>array('=',2),
  122. 'dtype'=>array('=','comment'))));
  123. $rs=selectQuery($query);
  124. $comments=0;
  125. $blogscomments=array();
  126. while($rs && ($ors = $rs->fetch())){
  127. if($this->secure($ors['blog'], ':rwv')) {
  128. $comments++;$blogscomments[$ors['blog']]=1;
  129. }
  130. }
  131. if($comments>0) {
  132. if(count($blogscomments)>1) $url=$urln;
  133. else {
  134. $tab=array_keys($blogscomments);
  135. $url=$url1.'&oid='.$tab[0];
  136. }
  137. if($comments==1) $t.='<p><a href="'.$url.'">Un</a> commentaire &agrave; valider</p>';
  138. elseif($comments>0) $t.='<p><a href="'.$url.'">'.$comments.'</a> commentaires &agrave; valider</p>';
  139. }
  140. return $t;
  141. }
  142. /// liste des articles recents
  143. function &portlet2() {
  144. $urln=$GLOBALS['TZR_SESSION_MANAGER']::complete_self(true, true).'&moid='.$this->_moid.
  145. '&_function=browseBlogs&tplentry=br&template=xmodblog/browseblogs.html';
  146. $url1=$GLOBALS['TZR_SESSION_MANAGER']::complete_self(true, true).'&moid='.$this->_moid.
  147. '&_function=browseBlog&tplentry=br&template=xmodblog/browseblog.html';
  148. $query=$this->xset->select_query(array("cond"=>array('PUBLISH'=>array('=',1),
  149. 'UPD'=>array('>', '=DATE_SUB(NOW(), INTERVAL '.$this->recentevents.' DAY)'),
  150. 'dtype'=>array('=','post'))));
  151. $rs=selectQuery($query);
  152. $posts=0;
  153. $blogsposts=array();
  154. while($rs && ($ors = $rs->fetch())){
  155. if($this->secure($ors['blog'],':ro')) {
  156. $posts++;$blogsposts[$ors['blog']]=1;
  157. }
  158. }
  159. $query=$this->xset->select_query(array("cond"=>array('PUBLISH'=>array('=',1),
  160. 'UPD'=>array('>', '=DATE_SUB(NOW(), INTERVAL '.$this->recentevents.' DAY)'),
  161. 'dtype'=>array('=','comment'))));
  162. $rs=selectQuery($query);
  163. $comments=0;
  164. $blogscomments=array();
  165. while($rs && ($ors = $rs->fetch())){
  166. if($this->secure($ors['blog'],':ro')) {
  167. $comments++;$blogscomments[$ors['blog']]=1;
  168. }
  169. }
  170. if(($comments+$posts)>0) {
  171. $txt ='<h1>'.$this->modulename.'</h1>';
  172. if($posts>0) {
  173. if(count($blogsposts)>1) $url=$urln;
  174. else {
  175. $tab=array_keys($blogsposts);
  176. $url=$url1.'&oid='.$tab[0];
  177. }
  178. if($posts==1) $txt.='<p><a href="'.$url.'">Un</a> nouvel article</p>';
  179. else $txt.='<p><a href="'.$url.'">'.$posts.'</a> nouveaux articles</p>';
  180. }
  181. if($comments>0) {
  182. if(count($blogscomments)>1) $url=$urln;
  183. else {
  184. $tab=array_keys($blogscomments);
  185. $url=$url1.'&oid='.$tab[0];
  186. }
  187. if($comments==1) $txt.='<p><a href="'.$url.'">Un</a> nouveau commentaire</p>';
  188. else $txt.='<p><a href="'.$url.'">'.$comments.'</a> nouveaux commentaires</p>';
  189. }
  190. }
  191. return $txt;
  192. }
  193. /// initialisation des propriétés
  194. public function initOptions() {
  195. parent::initOptions();
  196. $alabel = XLabels::getSysLabel('xmodblog.modulename');
  197. $this->_options->setOpt('Duree en jours de la nouveaut&eacute;', 'recentevents', 'text', NULL,7, $alabel);
  198. }
  199. function display($ar=NULL) {
  200. return $this->goto1($ar);
  201. }
  202. /// recherche des nouveautes pour abonnement
  203. protected function _whatsNew($ts,$user, $group=NULL, $specs=NULL, $timestamp=NULL) {
  204. list($koid)=explode(';',$specs);
  205. if(Kernel::isAKoid($koid)) $query='select * from '.$this->table.' where UPD>="'.$ts.'" and UPD<="'.$timestamp.'" and PUBLISH="1" AND blog="'.$koid.'"';
  206. else $query='select * from '.$this->table.' where UPD>="'.$ts.'" and UPD<="'.$timestamp.'" and PUBLISH="1"';
  207. $r=&$this->xset->browse(array('select'=>$query, 'selected'=>'0', 'pagesize'=>'99', 'tplentry'=>TZR_RETURN_DATA,'selectedfields'=>'all'));
  208. $txt='';
  209. foreach($r['lines_oid'] as $i => $oid) {
  210. $d1=&$this->xset->display(array('_lastupdate'=>true,'tplentry'=>TZR_RETURN_DATA,'oid'=>$oid,'_options'=>array('error'=>'return')));
  211. $url=$GLOBALS['TZR_SESSION_MANAGER']::admin_url(true,false).'&moid='.$this->_moid.'&function=goto1&oid='.$oid.'&tplentry=br&template=xmodtable/view.html&_direct=1';
  212. if(is_array($d1)) {
  213. $when=$d1['oUPD']->html;
  214. $who=$d1['lst_upd']['usernam'];
  215. $txt.='<li><a href="'.$url.'">'.$d1['oblog']->toText().' : '.getTextFromHTML($d1['link']).'</a> ('.$when.', '.$who.')</li>';
  216. }
  217. }
  218. return $txt;
  219. }
  220. function goto1($ar=NULL) {
  221. $p=new XParam($ar,array());
  222. $oid=$p->get('oid');
  223. $moid=$this->_moid;
  224. $right= $this->secure($oid, 'displayPost');
  225. if(!$right) securityWarning('XModBlog::goto1: could not access to objet '.$oid.' in module '.$moid);
  226. $url=$GLOBALS['TZR_SESSION_MANAGER']::admin_url(true,false);
  227. $disp=$this->xset->display(array('tplentry'=>TZR_RETURN_DATA, 'oid'=>$oid));
  228. $oidblog=$disp['oblog']->raw;
  229. $oidpost=$disp['opaperup']->raw;
  230. $oid=$disp['oid'];
  231. if($disp['odtype']->raw=='post')
  232. $durl="{$url}&moid=$moid&template=xmodblog/displaypost.html&oid={$oidblog}&post={$oid}&function=displayPost&tplentry=br&skip=1";
  233. if($disp['odtype']->raw=='comment')
  234. $durl="{$url}&moid=$moid&template=xmodblog/displaypost.html&oid={$oidblog}&post={$oidpost}&function=displayPost&tplentry=br&skip=1#{$oid}";
  235. header("Location: $durl");
  236. exit();
  237. }
  238. /// securite des fonctions accessibles par le web
  239. function secGroups($function, $group=NULL) {
  240. $g=array('addBlog'=>array('rwv','admin'),
  241. 'addComment'=>array('ro','rw','rwv','admin'),
  242. 'addPost'=>array('rw','rwv','admin'),
  243. 'addLink'=>array('rw','rwv','admin'),
  244. 'browseBlog'=>array('none','ro','rw','rwv','admin'),
  245. 'browseBlog2'=>array('none','ro','rw','rwv','admin'),
  246. 'browseBlogs'=>array('none','ro','rw','rwv','admin'),
  247. 'delBlog'=>array('rw','rwv','admin'),
  248. 'delPost'=>array('rw','rwv','admin'),
  249. 'delLink'=>array('rw','rwv','admin'),
  250. 'displayPost'=>array('none','ro','rw','rwv','admin'),
  251. 'displayPost2'=>array('none','ro','rw','rwv','admin'),
  252. 'editBlog'=>array('rwv','admin'),
  253. 'editComment'=>array('rw','rwv','admin'),
  254. 'editPost'=>array('rw','rwv','admin'),
  255. 'procAddBlog'=>array('rwv','admin'),
  256. 'procAddComment'=>array('none','ro','rw','rwv','admin'),
  257. 'procAddPost'=>array('rw','rwv','admin'),
  258. 'procAddLink'=>array('rw','rwv','admin'),
  259. 'procEditBlog'=>array('rwv','admin'),
  260. 'procEditComment'=>array('rw','rwv','admin'),
  261. 'procEditPost'=>array('rw','rwv','admin'),
  262. 'validatePost'=>array('rwv','admin'),
  263. 'validateBlog'=>array('rwv','admin'));
  264. if(isset($g[$function])) {
  265. if(!empty($group)) return in_array($group, $g[$function]);
  266. return $g[$function];
  267. }
  268. return parent::secGroups($function,$group);
  269. }
  270. /// rend vrai si $oid est l'identifiant d'un article/blog/post
  271. private function isA($oid, $dtype) {
  272. return (countSelectQuery('SELECT COUNT(KOID) FROM '.$this->table.' WHERE KOID="'.$oid.'" AND dtype="'.$dtype.'"')>0);
  273. }
  274. /// rend le nombre de blogs
  275. private function countBlogs() {
  276. return countSelectQuery('SELECT COUNT(KOID) FROM '.$this->table.' WHERE dtype="blog"');
  277. }
  278. /// rend l'oid d'un blog
  279. private function oneBlog() {
  280. $rs=selectQuery('SELECT KOID FROM '.$this->table.' WHERE dtype="blog"');
  281. if($rs && ($ors=$rs->fetch())) {
  282. return $ors['KOID'];
  283. }
  284. return NULL;
  285. }
  286. /// recherche de la liste des blogs disponibles
  287. function browseBlogs($ar=NULL) {
  288. $p=new XParam($ar, array('order'=>'title'));
  289. $tplentry=$p->get('tplentry');
  290. $ar['select']=$this->xset->select_query(array('order'=>'title','cond'=>
  291. array('dtype'=>array('=','blog'))));
  292. $ar['pagesize']=1000;
  293. $this->browse($ar);
  294. $br=XShell::from_screen('br');
  295. foreach($br['lines_oid'] as $i=>$oid) {
  296. // comptage du nombre de posts
  297. if ($this->secure($oid, ':rwv'))
  298. $query=$this->xset->select_query(array("cond"=>array('blog'=>array('=',$oid),
  299. 'dtype'=>array('=','post'))));
  300. else
  301. $query=$this->xset->select_query(array("cond"=>array('blog'=>array('=', $oid),
  302. 'PUBLISH'=>array('=', 1),
  303. 'dtype'=>array('=','post'))));
  304. $nbposts=countSelectQuery($query,true);
  305. $br['lines_posts'][$i]=$nbposts;
  306. $br['lines_poststopublish'][$i]=0;
  307. if ($this->secure($oid, ':rwv')){
  308. // comptage du nombre de posts a valider
  309. $query=$this->xset->select_query(array("cond"=>array('blog'=>array('=',$oid),
  310. 'PUBLISH'=>array('=',2),
  311. 'dtype'=>array('=','post'))));
  312. $nbposts=countSelectQuery($query, true);
  313. $br['lines_poststopublish'][$i]=$nbposts;
  314. }
  315. // comptage du nombre de commentaires
  316. if ($this->secure($oid, ':rwv'))
  317. $query=$this->xset->select_query(array("cond"=>array('blog'=>array('=',$oid),
  318. 'dtype'=>array('=','comment'))));
  319. else
  320. $query=$this->xset->select_query(array("cond"=>array('blog'=>array('=',$oid),
  321. 'PUBLISH'=>array('=', 1),
  322. 'dtype'=>array('=','comment'))));
  323. $nbposts=countSelectQuery($query, true);
  324. $br['lines_comments'][$i]=$nbposts;
  325. // comptage du nombre de commentaires a valider
  326. $br['lines_commentstopublish'][$i]=0;
  327. if ($this->secure($oid, ':rwv')){
  328. $query=$this->xset->select_query(array("cond"=>array('blog'=>array('=',$oid),
  329. 'PUBLISH'=>array('=',2),
  330. 'dtype'=>array('=','comment'))));
  331. $nbposts=countSelectQuery($query, true);
  332. $br['lines_commentstopublish'][$i]=$nbposts;
  333. }
  334. // article le plus recent
  335. $query=$this->xset->select_query(array("cond"=>array('blog'=>array('=',$oid),
  336. 'dtype'=>array('=','post'))));
  337. $rs=selectQueryGetOne(str_replace($this->xset->getTable().'.*', 'max(UPD) as maxupd', $query));
  338. $br['lines_lastpostdate'][$i]=$rs['maxupd'];
  339. }
  340. return XShell::toScreen1('br',$br);
  341. }
  342. /// affichage du contenu d'un blog
  343. // gestion des categorie et archive
  344. // affichage par défaut des 5 derniers post + list de categ
  345. // si on passe categ, affichage des post de la categ
  346. // si on passe mois = YYYYmm on affiche les post du mois
  347. function browseBlog2($ar=NULL) {
  348. $p=new XParam($ar, array());
  349. $tplentry=$p->get('tplentry');
  350. $oid=$p->get('oid');
  351. $categ = $p->get('categ');
  352. $mois = $p->get('mois');
  353. $right= $this->secure($oid, 'validatePost');
  354. //info du blog
  355. $r = $this->xset->display(array('tplentry'=>TZR_RETURN_DATA, 'oid'=>$oid));
  356. XShell::toScreen1($tplentry.'blog',$r);
  357. // list des posts
  358. $arsel =array();
  359. //classer par date decroissant
  360. $arsel['order']='datep DESC';
  361. //selection des post du blog voulu dans br_lines_oid
  362. $arsel['cond'] = array();
  363. $arsel['cond']['dtype'] = array('=','post');
  364. $arsel['cond']['blog'] = array('=',$oid);
  365. if(!$right) $arsel['cond']['PUBLISH'] = array('=',1);
  366. if($categ){
  367. $arsel['cond']['categ'] = array('=',$categ);
  368. $ar['pagesize'] = 9999;
  369. }elseif($mois){
  370. $arsel['cond']['datep'] = array('LIKE',"$mois%");
  371. $ar['pagesize'] = 9999;
  372. }else $ar['pagesize'] = 5;
  373. $ar['select']=$this->xset->select_query($arsel);
  374. $ar['selectedfields']='all';
  375. $this->xset->browse($ar);
  376. $br=XShell::from_screen($tplentry);
  377. foreach($br['lines_oid'] as $i=>$oid2) {
  378. if($right)
  379. $query=$this->xset->select_query(array('order'=>'datep ASC',
  380. 'cond'=>array('blog'=>array('=',$oid),
  381. 'paperup'=>array('=',$oid2),
  382. 'dtype'=>array('=','comment'))));
  383. else
  384. $query=$this->xset->select_query(array('order'=>'datep ASC',
  385. 'cond'=>array('blog'=>array('=',$oid),
  386. 'PUBLISH'=>array('=',1),
  387. 'paperup'=>array('=',$oid2),
  388. 'dtype'=>array('=','comment'))));
  389. // ligne un peu inutile a transformer en count pour avoir le nombre de commentaires
  390. $br['lines_comments'][$i]=$this->xset->browse(array('tplentry'=>TZR_RETURN_DATA,'select'=>$query,
  391. 'pagesize'=>100, 'selectedfields'=>'all'));
  392. }
  393. XShell::toScreen1($tplentry,$br);
  394. // commentaires recents
  395. $ar=array();
  396. $ar['select']=$this->xset->select_query(array('order'=>'datep DESC','cond'=>
  397. array('dtype'=>array('=','comment'),
  398. 'blog'=>array('=',$oid))));
  399. $ar['selectedfields']=array('datep','title','blog','paperup');
  400. $ar['pagesize']=10;
  401. $ar['tplentry']=$tplentry.'comments';
  402. $this->xset->browse($ar);
  403. // Liens
  404. $ar=array();
  405. $ar['select']=$this->xset->select_query(array('order'=>'datep DESC','cond'=>
  406. array('dtype'=>array('=','link'),
  407. 'blog'=>array('=',$oid))));
  408. $ar['selectedfields']=array('who','title','txt');
  409. $ar['pagesize']=100;
  410. $ar['tplentry']=$tplentry.'links';
  411. $this->xset->browse($ar);
  412. //liste de tous les posts
  413. $ar=array();
  414. // list des posts
  415. $arsel =array();
  416. //classer par date decroissant
  417. $arsel['order']='datep DESC';
  418. //selection detous les post brpost_lines_oid
  419. $arsel['cond'] = array();
  420. $arsel['cond']['dtype'] = array('=','post');
  421. $arsel['cond']['blog'] = array('=',$oid);
  422. $ar['select']=$this->xset->select_query(array('order'=>'datep DESC','cond'=>
  423. array('dtype'=>array('=','post'),
  424. 'blog'=>array('=',$oid))));
  425. $ar['selectedfields']=array('title','datep','categ');
  426. $ar['pagesize']=9999;
  427. $ar['tplentry']=$tplentry.'posts';
  428. $brpost = $this->xset->browse($ar);
  429. //construction du tableau des categ et archive
  430. $tbcateg = array_unique($brpost['lines_categ']);
  431. sort($tbcateg,SORT_STRING);
  432. $tb['categ'] = $tbcateg;
  433. $tbodatep = $brpost['lines_odatep'];
  434. foreach($tbodatep as $k=>$v){
  435. $tbdatep[$k] = date('Y-m',strtotime($v->raw));
  436. }
  437. $tbdatep = array_unique($tbdatep);
  438. sort($tbdatep);
  439. $tb['datep'] = $tbdatep;
  440. XShell::toScreen1($tplentry."classement",$tb);
  441. }
  442. /// rend les infos fondamentales sur le blog : titre, auteur, etc
  443. private function _getBlogTitle($oid) {
  444. return $this->xset->rDisplay($oid);
  445. }
  446. /// rend les infos fondamentales sur le post : titre, auteur, etc
  447. private function _getPostTitle($oid) {
  448. return $this->xset->rDisplay($oid);
  449. }
  450. /// rend les infos fondamentales sur le commentaire : titre, auteur, etc
  451. private function _getCommentTitle($oid) {
  452. return $this->xset->rDisplay($oid);
  453. }
  454. /// affichage du contenu d'un blog
  455. function browseBlog($ar=NULL) {
  456. $p=new XParam($ar, array());
  457. $tplentry=$p->get('tplentry');
  458. $oid=$p->get('oid');
  459. $right= $this->secure($oid, 'validatePost');
  460. $r = $this->xset->display(array('tplentry'=>TZR_RETURN_DATA, 'oid'=>$oid));
  461. XShell::toScreen1($tplentry.'blog',$r);
  462. if($right)
  463. $ar['select']=$this->xset->select_query(array('order'=>'datep DESC','cond'=>
  464. array('dtype'=>array('=','post'),
  465. 'blog'=>array('=',$oid))));
  466. else
  467. $ar['select']=$this->xset->select_query(array('order'=>'datep DESC','cond'=>
  468. array('dtype'=>array('=','post'),
  469. 'PUBLISH'=>array('=',1),
  470. 'blog'=>array('=',$oid))));
  471. $ar['selectedfields']='all';
  472. $br = $this->xset->browse($ar);
  473. // calcul des droits sur les objets
  474. if($this->object_sec){
  475. $lang_data = XShell::getLangData();
  476. $br['objects_sec']=$GLOBALS['XUSER']->getObjectsAccess($this, $lang_data, $br['lines_oid']);
  477. }
  478. foreach($br['lines_oid'] as $i=>$oid2) {
  479. if($right)
  480. $query=$this->xset->select_query(array('order'=>'datep ASC',
  481. 'cond'=>array('blog'=>array('=',$oid),
  482. 'paperup'=>array('=',$oid2),
  483. 'dtype'=>array('=','comment'))));
  484. else
  485. $query=$this->xset->select_query(array('order'=>'datep ASC',
  486. 'cond'=>array('blog'=>array('=',$oid),
  487. 'PUBLISH'=>array('=',1),
  488. 'paperup'=>array('=',$oid2),
  489. 'dtype'=>array('=','comment'))));
  490. // ligne un peu inutile a transformer en count pour avoir le nombre de commentaires
  491. $br['lines_comments'][$i]=$this->xset->browse(array('tplentry'=>TZR_RETURN_DATA,'select'=>$query,
  492. 'pagesize'=>100, 'selectedfields'=>'all'));
  493. }
  494. XShell::toScreen1($tplentry,$br);
  495. $ar=array();
  496. $ar['select']=$this->xset->select_query(array('order'=>'datep DESC','cond'=>
  497. array('dtype'=>array('=','post'),
  498. 'blog'=>array('=',$oid))));
  499. $ar['selectedfields']=array('datep','title');
  500. $ar['pagesize']=100;
  501. $ar['tplentry']=$tplentry.'posts';
  502. $this->xset->browse($ar);
  503. // commentaires recents
  504. $ar=array();
  505. $ar['select']=$this->xset->select_query(array('order'=>'datep DESC','cond'=>
  506. array('dtype'=>array('=','comment'),
  507. 'blog'=>array('=',$oid))));
  508. $ar['selectedfields']=array('datep','title','blog','paperup');
  509. $ar['pagesize']=100;
  510. $ar['tplentry']=$tplentry.'comments';
  511. $this->xset->browse($ar);
  512. // Liens
  513. $ar=array();
  514. $ar['select']=$this->xset->select_query(array('order'=>'datep DESC','cond'=>
  515. array('dtype'=>array('=','link'),
  516. 'blog'=>array('=',$oid))));
  517. $ar['selectedfields']=array('who','title','txt');
  518. $ar['pagesize']=100;
  519. $ar['tplentry']=$tplentry.'links';
  520. $this->xset->browse($ar);
  521. }
  522. /// affichage d'un article
  523. function displayPost2($ar=NULL) {
  524. $p=new XParam($ar, array());
  525. $tplentry=$p->get('tplentry');
  526. $oid=$p->get('oid');
  527. $post=$p->get('post');
  528. //display du blog
  529. $r = $this->xset->display(array('tplentry'=>TZR_RETURN_DATA, 'oid'=>$oid));
  530. XShell::toScreen1($tplentry.'blog',$r);
  531. //display du post
  532. $r = $this->xset->display(array('tplentry'=>TZR_RETURN_DATA, 'oid'=>$post));
  533. XShell::toScreen1($tplentry.'post',$r);
  534. $right= $this->secure($oid, 'validatePost');
  535. if($right)
  536. $query=$this->xset->select_query(array('order'=>'datep ASC',
  537. 'cond'=>array('blog'=>array('=',$oid),
  538. 'paperup'=>array('=',$post),
  539. 'dtype'=>array('=','comment'))));
  540. else
  541. $query=$this->xset->select_query(array('order'=>'datep ASC',
  542. 'cond'=>array('blog'=>array('=',$oid),
  543. 'paperup'=>array('=',$post),
  544. 'PUBLISH'=>array('=',1),
  545. 'dtype'=>array('=','comment'))));
  546. //commentaire du post
  547. $this->xset->browse(array('tplentry'=>$tplentry.'comment','select'=>$query,
  548. 'pagesize'=>100, 'selectedfields'=>'all'));
  549. $this->addComment(array('tplentry'=>$tplentry.'add'));
  550. // commentaires recents
  551. $ar=array();
  552. $ar['select']=$this->xset->select_query(array('order'=>'datep DESC','cond'=>
  553. array('dtype'=>array('=','comment'),'blog'=>array('=',$oid))));
  554. $ar['selectedfields']=array('datep','title','blog','paperup');
  555. $ar['pagesize']=10;
  556. $ar['tplentry']=$tplentry.'comments';
  557. XModTable::browse($ar);
  558. //liste de tous les posts
  559. $ar=array();
  560. // list des posts
  561. $arsel =array();
  562. //classer par date decroissant
  563. $arsel['order']='datep DESC';
  564. //selection de tous les posts brposts_lines_oid
  565. $arsel['cond'] = array();
  566. $arsel['cond']['dtype'] = array('=','post');
  567. $arsel['cond']['blog'] = array('=',$oid);
  568. $ar['select']=$this->xset->select_query(array('order'=>'datep DESC','cond'=>
  569. array('dtype'=>array('=','post'),
  570. 'blog'=>array('=',$oid))));
  571. $ar['selectedfields']=array('title','datep','categ');
  572. $ar['pagesize']=9999;
  573. $ar['tplentry']=$tplentry.'posts';
  574. $brpost = $this->xset->browse($ar);
  575. //construction du tableau des categ et archive
  576. $tbcateg = array_unique($brpost['lines_categ']);
  577. sort($tbcateg,SORT_STRING);
  578. $tb['categ'] = $tbcateg;
  579. $tbodatep = $brpost['lines_odatep'];
  580. foreach($tbodatep as $k=>$v){
  581. $tbdatep[$k] = date('Y-m',strtotime($v->raw));
  582. }
  583. $tbdatep = array_unique($tbdatep);
  584. sort($tbdatep);
  585. $tb['datep'] = $tbdatep;
  586. XShell::toScreen1($tplentry."classement",$tb);
  587. }
  588. /// affichage d'un article
  589. function displayPost($ar=NULL) {
  590. $p=new XParam($ar, array());
  591. $tplentry=$p->get('tplentry');
  592. $oid=$p->get('oid');
  593. $post=$p->get('post');
  594. $r = $this->xset->display(array('tplentry'=>TZR_RETURN_DATA, 'oid'=>$oid));
  595. XShell::toScreen1($tplentry.'blog',$r);
  596. $r = $this->xset->display(array('tplentry'=>TZR_RETURN_DATA, 'oid'=>$post));
  597. if ($this->object_sec){
  598. $lang_data = XShell::getLangData();
  599. $oids = array($post);
  600. list($r['object_sec']) = $GLOBALS['XUSER']->getObjectsAccess($this, $lang_data, $oids);
  601. }
  602. XShell::toScreen1($tplentry.'post',$r);
  603. $right= $this->secure($oid, 'validatePost');
  604. if($right)
  605. $query=$this->xset->select_query(array('order'=>'datep ASC',
  606. 'cond'=>array('blog'=>array('=',$oid),
  607. 'paperup'=>array('=',$post),
  608. 'dtype'=>array('=','comment'))));
  609. else
  610. $query=$this->xset->select_query(array('order'=>'datep ASC',
  611. 'cond'=>array('blog'=>array('=',$oid),
  612. 'paperup'=>array('=',$post),
  613. 'PUBLISH'=>array('=',1),
  614. 'dtype'=>array('=','comment'))));
  615. $this->xset->browse(array('tplentry'=>$tplentry.'comment','select'=>$query,
  616. 'pagesize'=>100, 'selectedfields'=>'all'));
  617. $this->addComment(array('tplentry'=>$tplentry.'add'));
  618. $ar=array();
  619. $ar['select']=$this->xset->select_query(array('order'=>'datep DESC','cond'=>
  620. array('dtype'=>array('=','post'),
  621. 'blog'=>array('=',$oid))));
  622. $ar['selectedfields']=array('datep','title');
  623. $ar['pagesize']=100;
  624. $ar['tplentry']=$tplentry.'posts';
  625. XModTable::browse($ar);
  626. // commentaires recents
  627. $ar=array();
  628. $ar['select']=$this->xset->select_query(array('order'=>'datep DESC','cond'=>
  629. array('dtype'=>array('=','comment'),'blog'=>array('=',$oid))));
  630. $ar['selectedfields']=array('datep','title','blog','paperup');
  631. $ar['pagesize']=10;
  632. $ar['tplentry']=$tplentry.'comments';
  633. XModTable::browse($ar);
  634. }
  635. /// suppression d'un article et tous les commentaires associes
  636. function delPost($ar=NULL) {
  637. $p=new XParam($ar, array());
  638. $post=$p->get('post');
  639. updateQuery('delete from '.$this->table.' where KOID="'.$post.'" OR paperup="'.$post.'"');
  640. }
  641. /// validation d'un blog
  642. function validateBlog($ar=NULL) {
  643. $p=new XParam($ar, array());
  644. $oid=$p->get('oid');
  645. $this->publish(array('oid'=>$oid));
  646. }
  647. /// validation d'un article ou d'un commentaire
  648. function validatePost($ar=NULL) {
  649. $p=new XParam($ar, array());
  650. $post=$p->get('post');
  651. $this->publish(array('oid'=>$post));
  652. }
  653. function addComment($ar=NULL) {
  654. parent::insert($ar);
  655. }
  656. /// ajout d'un commentaire sur un article.
  657. function procAddComment($ar=NULL) {
  658. $p=new XParam($ar, array());
  659. $ar['dtype']='comment';
  660. $ar['blog']=$p->get('oid');
  661. $ar['paperup']=$p->get('post');
  662. $ar['datep']=date('Y-m-d H:i:s');
  663. if(!XUser::isNobody()) {
  664. $ar['whoa'] = XUser::get_current_user_uid();
  665. }
  666. parent::procInsert($ar);
  667. }
  668. /// ajout d'un blog dans la liste des blogs
  669. function addBlog($ar) {
  670. parent::insert($ar);
  671. }
  672. /// ajout d'un blog dans la liste des blogs
  673. function procAddBlog($ar=NULL) {
  674. $p=new XParam($ar, array());
  675. $ar['dtype']='blog';
  676. $ar['datep']=date('Y-m-d H:i:s');
  677. parent::procInsert($ar);
  678. }
  679. /// generation de l'ecran des proproetes d'un blog
  680. function editBlog($ar) {
  681. parent::edit($ar);
  682. }
  683. /// modifications d'un blog
  684. function procEditBlog($ar=NULL) {
  685. $p=new XParam($ar, array());
  686. parent::procEdit($ar);
  687. }
  688. /// suppression d'un blog
  689. function delBlog($ar=NULL){
  690. $p=new XParam($ar, array());
  691. $oid=$p->get('oid');
  692. $blog=$this->xset->display(array(
  693. 'oid'=>$oid,
  694. 'tplentry'=>TZR_RETURN_DATA
  695. )
  696. );
  697. if($blog['odtype']->raw=='blog'){
  698. updateQuery('delete from '.$this->table.' where KOID="'.$oid.'" OR blog="'.$oid.'"');
  699. }
  700. }
  701. /// gestion des posts
  702. function editPost($ar=NULL) {
  703. $p=new XParam($ar, array());
  704. $ar['oid']=$p->get('post');
  705. $ar['options']['blog']['readonly']=2;
  706. parent::edit($ar);
  707. }
  708. function procEditPost($ar=NULL) {
  709. $p=new XParam($ar, array());
  710. parent::procEdit($ar);
  711. }
  712. function addPost($ar=NULL) {
  713. parent::insert($ar);
  714. }
  715. function procAddPost($ar=NULL) {
  716. $p=new XParam($ar, array());
  717. $ar['dtype']='post';
  718. $ar['blog']=$p->get('oid');
  719. $ar['datep']=date('Y-m-d H:i:s');
  720. $who = $p->get('who');
  721. if (!empty($who['url'])){
  722. $ar['who'] = array('label'=>$who['label'],
  723. 'url'=>'mailto:'.$who['url'],
  724. '_target'=>'_blank');
  725. }
  726. parent::procInsert($ar);
  727. }
  728. // gestion des commentaires
  729. //
  730. function editComment($ar=NULL) {
  731. $p=new XParam($ar, array());
  732. $ar['oid']=$p->get('post');
  733. parent::edit($ar);
  734. }
  735. function procEditComment($ar=NULL) {
  736. $p=new XParam($ar, array());
  737. parent::procEdit($ar);
  738. }
  739. /// gestion des liens
  740. function addLink($ar=NULL) {
  741. parent::insert($ar);
  742. }
  743. function procAddLink($ar=NULL) {
  744. $p=new XParam($ar, array());
  745. $ar['dtype']='link';
  746. $ar['blog']=$p->get('oid');
  747. $ar['datep']=date('Y-m-d H:i:s');
  748. parent::procInsert($ar);
  749. }
  750. function delLink($ar=NULL) {
  751. $p=new XParam($ar,NULL);
  752. $link=$p->get('link');
  753. updateQuery('delete from '.$this->table.' where KOID="'.$link.'" AND dtype="link"');
  754. }
  755. /// Action principale du menu
  756. public function getMainAction(){
  757. return $GLOBALS['TZR_SESSION_MANAGER']::complete_self().'moid='.$this->_moid.'&function=browseBlogs&tplentry=br&template=xmodblog/browseblogs.html';
  758. }
  759. /// cette fonction est appliquee pour afficher l'ensemble des methodes de ce module
  760. protected function _actionlist(&$my=NULL) {
  761. XModule::_actionlist($my);
  762. parent::_clearActionlist($my);
  763. $myclass='xmodblog';
  764. $moid=$this->_moid;
  765. $dir='xmodblog';
  766. $cnt=$this->countBlogs();
  767. $o1=new XModuleAction($this, 'browseBlogs', XLabels::getSysLabel($myclass,'browseblogs','text'),
  768. '&amp;moid='.$moid.
  769. '&amp;_function=browseBlogs&amp;tplentry=br&amp;'.
  770. 'template='.$dir.'/browseblogs.html');
  771. $o1->containerable=$o1->menuable=true;
  772. $o1->setToolbar('general','browse');
  773. $my['browse']=$o1;
  774. $oid=@$_REQUEST['oid'];
  775. $post=@$_REQUEST['post'];
  776. if($this->secure(NULL, ':admin')) {
  777. $o1=new XModuleAction($this, 'administration', XLabels::getSysLabel('general', 'administration', 'text'),
  778. '&moid='.$this->_moid.'&function=adminBrowseFields&template=xmodule/admin/browseFields.html');
  779. $o1->homepageable = false;
  780. $o1->menuable=true;
  781. $o1->quicklinkable=true;
  782. $o1->group='actions';
  783. $o1->setToolBar('general', 'administration');
  784. $my['administration']=$o1;
  785. }
  786. if($this->secure(NULL, 'addBlog')) {
  787. $o1=new XModuleAction($this, 'addblog', XLabels::getSysLabel($myclass,'addblog','text'),
  788. '&amp;moid='.$moid.
  789. '&amp;_function=addBlog&amp;tplentry=br&amp;'.
  790. 'template='.$dir.'/addblog.html');
  791. $o1->homepageable=false;
  792. $o1->menuable=$o1->quicklinkable=true;
  793. $o1->group='edit';
  794. $o1->setToolbar('general','new');
  795. $my['insert']=$o1;
  796. }
  797. if(!empty($oid)) {
  798. $o1=new XModuleAction($this, 'browseBlog', XLabels::getSysLabel($myclass,'browseblog','text'),
  799. '&amp;moid='.$moid.
  800. '&amp;_function=browseBlog&amp;tplentry=br&amp;oid='.$_REQUEST['oid'].'&amp;'.
  801. 'template='.$dir.'/browseblog.html');
  802. $o1->homepageable=$o1->menuable=$o1->quicklinkable=true;
  803. $o1->setToolbar('general','view');
  804. $my['browseblog']=$o1;
  805. $right= $this->secure($oid, 'addPost');
  806. $isablog=$this->isA($oid,'blog');
  807. $isapost=$this->isA($post,'post');
  808. $isacomment=$this->isA($post,'comment');
  809. if($isablog && $right) {
  810. $o1=new XModuleAction($this, 'addpost', XLabels::getSysLabel($myclass,'addpost','text'),
  811. '&amp;moid='.$moid.
  812. '&amp;_function=addPost&amp;tplentry=br&amp;oid='.$oid.'&amp;'.
  813. 'template='.$dir.'/addpost.html');
  814. $o1->homepageable=$o1->menuable=$o1->quicklinkable=true;
  815. $o1->group='edit';
  816. $o1->setToolbar('general','new');
  817. $my['insert']=$o1;
  818. }
  819. $right= $this->secure($oid, 'addComment');
  820. if($isapost){
  821. if($right) {
  822. $o1=new XModuleAction($this, 'addcomment', XLabels::getSysLabel($myclass,'addcomment','text'),
  823. '&amp;moid='.$moid.
  824. '&amp;_function=addComment&amp;tplentry=br&amp;oid='.$oid.'&amp;'.
  825. '&amp;post='.$post.'&amp;template='.$dir.'/addcomment.html');
  826. $o1->homepageable=$o1->menuable=$o1->quicklinkable=true;
  827. $o1->group='edit';
  828. $o1->setToolbar('general','new');
  829. $my['insert']=$o1;
  830. }
  831. $right= $this->secure($oid, 'editPost');
  832. if($right) {
  833. $o1=new XModuleAction($this, 'edit', XLabels::getSysLabel($myclass,'editpost','text'),
  834. '&amp;moid='.$moid.
  835. '&amp;_function=editPost&amp;tplentry=br&amp;oid='.$oid.'&amp;'.
  836. '&amp;post='.$post.'&amp;template='.$dir.'/editpost.html');
  837. $o1->homepageable=$o1->menuable=$o1->quicklinkable=true;
  838. $o1->group='edit';
  839. $o1->setToolbar('general','edit');
  840. $my['edit']=$o1;
  841. }
  842. }
  843. }
  844. unset($my['query']);
  845. if($this->interactive) {
  846. $o1=new XModuleAction($this,'browseBlogs',$this->modulename,
  847. '&moid='.$moid.'&_function=browseBlogs&tplentry=br&template='.$dir.'/browseblogs.html');
  848. $my['stack'][]=$o1;
  849. if(!empty($oid)) {
  850. $blog=$this->_getBlogTitle($oid);
  851. $o1=new XModuleAction($this,'browseBlog',$blog['otitle']->toText(),
  852. '&moid='.$moid.'&_function=browseBlog&tplentry=br&oid='.$oid.'&template='.$dir.'/browseblog.html');
  853. $my['stack'][]=$o1;
  854. if($isapost){
  855. $postd=$this->_getPostTitle($post);
  856. $o1=new XModuleAction($this,'displayPost',$postd['otitle']->toText(),
  857. '&moid='.$moid.'&_function=displayPost&tplentry=br&oid='.$oid.'&post='.$post.
  858. '&template='.$dir.'/displaypost.html');
  859. $my['stack'][]=$o1;
  860. }elseif($isacomment){
  861. $com=$this->_getCommentTitle($post);
  862. $postd=$this->_getPostTitle($com['opaperup']->raw);
  863. $o1=new XModuleAction($this,'displayPost',$postd['otitle']->toText(),
  864. '&moid='.$moid.'&_function=displayPost&tplentry=br&oid='.$oid.'&post='.$postd['oid'].
  865. '&template='.$dir.'/displaypost.html');
  866. $my['stack'][]=$o1;
  867. $o1=new XModuleAction($this,'editComment',$com['otitle']->toText(),
  868. '&moid='.$moid.'&_function=editComment&tplentry=br&oid='.$oid.'&post='.$com['oid'].
  869. '&template='.$dir.'/editcomment.html');
  870. $my['stack'][]=$o1;
  871. }
  872. }
  873. $modsubmoid=XModule::getMoid(XMODSUB_TOID);
  874. if(!empty($modsubmoid)){
  875. $o1=new XModuleAction($this, 'subscribe', XLabels::getSysLabel('xmodsub','subadd','text'),
  876. '&amoid='.$this->_moid.'&class=XModSub&moid='.$modsubmoid.
  877. '&_function=preSubscribe&tplentry=br&template=xmodsub/sub.html&aoid='.$oid);
  878. $o1->menuable=true;
  879. $o1->group='more';
  880. $my['subscribe']=$o1;
  881. }
  882. }
  883. }
  884. }
  885. ?>