1*a768ba62Swikidesign<?php 2*a768ba62Swikidesignif(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); 3*a768ba62Swikidesignif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 4*a768ba62Swikidesignrequire_once(DOKU_PLUGIN.'admin.php'); 5*a768ba62Swikidesign 6*a768ba62Swikidesign/** 7*a768ba62Swikidesign * All DokuWiki plugins to extend the admin function 8*a768ba62Swikidesign * need to inherit from this class 9*a768ba62Swikidesign */ 10*a768ba62Swikidesignclass admin_plugin_discussion extends DokuWiki_Admin_Plugin { 11*a768ba62Swikidesign 12*a768ba62Swikidesign /** 13*a768ba62Swikidesign * return some info 14*a768ba62Swikidesign */ 15*a768ba62Swikidesign function getInfo(){ 16*a768ba62Swikidesign return array( 17*a768ba62Swikidesign 'author' => 'iDo', 18*a768ba62Swikidesign 'email' => 'iDo@woow-fr.com', 19*a768ba62Swikidesign 'date' => '2006-12-30', 20*a768ba62Swikidesign 'name' => 'See all discussion', 21*a768ba62Swikidesign 'desc' => '', 22*a768ba62Swikidesign 'url' => '', 23*a768ba62Swikidesign ); 24*a768ba62Swikidesign } 25*a768ba62Swikidesign 26*a768ba62Swikidesign /** 27*a768ba62Swikidesign * return sort order for position in admin menu 28*a768ba62Swikidesign */ 29*a768ba62Swikidesign function getMenuSort() { 30*a768ba62Swikidesign return 200; 31*a768ba62Swikidesign } 32*a768ba62Swikidesign 33*a768ba62Swikidesign /** 34*a768ba62Swikidesign * handle user request 35*a768ba62Swikidesign */ 36*a768ba62Swikidesign function handle() { 37*a768ba62Swikidesign } 38*a768ba62Swikidesign 39*a768ba62Swikidesign /** 40*a768ba62Swikidesign * output appropriate html 41*a768ba62Swikidesign */ 42*a768ba62Swikidesign function html() { 43*a768ba62Swikidesign global $conf; 44*a768ba62Swikidesign $chem=DOKU_INC.$conf['savedir']."/meta/"; 45*a768ba62Swikidesign $arr=$this->globr($chem,"*.comments"); 46*a768ba62Swikidesign $com =array(); 47*a768ba62Swikidesign foreach ($arr as $v) { 48*a768ba62Swikidesign $ap=unserialize(io_readFile($v, false)); 49*a768ba62Swikidesign //si ya des commentaire 50*a768ba62Swikidesign if (isset($ap['comments'])) { 51*a768ba62Swikidesign //pour chaque commentaire 52*a768ba62Swikidesign foreach ($ap['comments'] as $vv) { 53*a768ba62Swikidesign $page=str_replace(array($chem,".comments"),array("",""),$v); 54*a768ba62Swikidesign $com[$page][$vv['date']]=array("name"=>$vv['name'],"com"=>$vv['xhtml']); 55*a768ba62Swikidesign //old method 56*a768ba62Swikidesign //$com[$vv['date']]=array("name"=>$vv['name'],"com"=>$vv['xhtml'],"page"=>wl($page,'')); 57*a768ba62Swikidesign } 58*a768ba62Swikidesign } 59*a768ba62Swikidesign } 60*a768ba62Swikidesign 61*a768ba62Swikidesign if (count($com > 1)) { 62*a768ba62Swikidesign //sort discussion for all page 63*a768ba62Swikidesign foreach ($com as $k => $v) 64*a768ba62Swikidesign krsort($com[$k],SORT_NUMERIC); 65*a768ba62Swikidesign 66*a768ba62Swikidesign 67*a768ba62Swikidesign //for all page with discussion thread 68*a768ba62Swikidesign echo "<ul>"; 69*a768ba62Swikidesign foreach ($com as $page => $thread) { 70*a768ba62Swikidesign echo "<li>"; 71*a768ba62Swikidesign echo '<div class="cPage"><a href="'.wl($page,'').'">'.str_replace("/doku.php//","",wl($page,'')).'</a></div><div class="cComBlock">'; 72*a768ba62Swikidesign 73*a768ba62Swikidesign foreach ($thread as $dte => $coments) { 74*a768ba62Swikidesign echo '<div class="cComSolo">'; 75*a768ba62Swikidesign echo '<div class="cDate">'.date("d/m/Y H:i:s",$dte).'</div>'; 76*a768ba62Swikidesign echo '<span class="cName">'.$coments['name'].'</span>'; 77*a768ba62Swikidesign echo '<span class="cCom">'.$coments['com'].'</span>'; 78*a768ba62Swikidesign echo "</div>"; 79*a768ba62Swikidesign } 80*a768ba62Swikidesign echo "</div></li>"; 81*a768ba62Swikidesign } 82*a768ba62Swikidesign echo "</ul>"; 83*a768ba62Swikidesign } 84*a768ba62Swikidesign } 85*a768ba62Swikidesign 86*a768ba62Swikidesign /** 87*a768ba62Swikidesign * Recursive version of glob 88*a768ba62Swikidesign * 89*a768ba62Swikidesign * @return array containing all pattern-matched files. 90*a768ba62Swikidesign * 91*a768ba62Swikidesign * @param string $sDir Directory to start with. 92*a768ba62Swikidesign * @param string $sPattern Pattern to glob for. 93*a768ba62Swikidesign * @param int $nFlags Flags sent to glob. 94*a768ba62Swikidesign */ 95*a768ba62Swikidesign function globr($sDir, $sPattern, $nFlags = NULL) { 96*a768ba62Swikidesign $sDir = escapeshellcmd($sDir); 97*a768ba62Swikidesign // Get the list of all matching files currently in the 98*a768ba62Swikidesign // directory. 99*a768ba62Swikidesign $aFiles = glob("$sDir/$sPattern", $nFlags); 100*a768ba62Swikidesign // Then get a list of all directories in this directory, and 101*a768ba62Swikidesign // run ourselves on the resulting array. This is the 102*a768ba62Swikidesign // recursion step, which will not execute if there are no 103*a768ba62Swikidesign // directories. 104*a768ba62Swikidesign foreach (glob("$sDir/*", GLOB_ONLYDIR) as $sSubDir) { 105*a768ba62Swikidesign $aSubFiles = $this->globr($sSubDir, $sPattern, $nFlags); 106*a768ba62Swikidesign $aFiles = array_merge($aFiles, $aSubFiles); 107*a768ba62Swikidesign } 108*a768ba62Swikidesign // The array we return contains the files we found, and the 109*a768ba62Swikidesign // files all of our children found. 110*a768ba62Swikidesign return $aFiles; 111*a768ba62Swikidesign } 112*a768ba62Swikidesign 113*a768ba62Swikidesign 114*a768ba62Swikidesign} 115*a768ba62Swikidesign?> 116