PageRenderTime 36ms CodeModel.GetById 7ms RepoModel.GetById 1ms app.codeStats 0ms

/xoops_trust_path/modules/d3forum/include/main_functions.php

http://xoopscube-modules.googlecode.com/
PHP | 379 lines | 277 code | 78 blank | 24 comment | 56 complexity | 4dd98a29e040bfa2ca52620020ea11ed MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, AGPL-1.0
  1. <?php
  2. // this file can be included only from main or admin (not from blocks)
  3. // add fields for tree structure into $posts or $categories
  4. function d3forum_make_treeinformations( $data )
  5. {
  6. $previous_depth = -1 ;
  7. $path_to_i = array() ;
  8. for( $i = 0 ; $i < sizeof( $data ) ; $i ++ ) {
  9. $unique_path = $data[$i]['unique_path'] ;
  10. $path_to_i[ $unique_path ] = $i ;
  11. $parent_path = substr( $unique_path , 0 , strrpos( $unique_path , '.' ) ) ;
  12. if( $parent_path && isset( $path_to_i[ $parent_path ] ) ) {
  13. $data[ $path_to_i[ $parent_path ] ]['f1s'][ $data[$i]['id'] ] = strrchr( $data[$i]['unique_path'] , '.' ) ;
  14. }
  15. $depth_diff = $data[$i]['depth_in_tree'] - @$previous_depth ;
  16. $previous_depth = $data[$i]['depth_in_tree'] ;
  17. $data[$i]['ul_in'] = '' ;
  18. $data[$i]['ul_out'] = '' ;
  19. if( $depth_diff > 0 ) {
  20. if( $i > 0 ) {
  21. $data[$i-1]['first_child_id'] = $data[$i]['id'] ;
  22. }
  23. for( $j = 0 ; $j < $depth_diff ; $j ++ ) {
  24. $data[$i]['ul_in'] .= '<ul><li>' ;
  25. }
  26. } else if( $depth_diff < 0 ) {
  27. for( $j = 0 ; $j < - $depth_diff ; $j ++ ) {
  28. $data[$i-1]['ul_out'] .= '</li></ul>' ;
  29. }
  30. $data[$i-1]['ul_out'] .= '</li>' ;
  31. $data[$i]['ul_in'] = '<li>' ;
  32. } else {
  33. $data[$i-1]['ul_out'] .= '</li>' ;
  34. $data[$i]['ul_in'] = '<li>' ;
  35. }
  36. if( $i > 0 ) {
  37. $data[$i-1]['next_id'] = $data[$i]['id'] ;
  38. $data[$i]['prev_id'] = $data[$i-1]['id'] ;
  39. }
  40. }
  41. $data[ sizeof( $data ) - 1 ]['ul_out'] = str_repeat( '</li></ul>' , $previous_depth + 1 ) ;
  42. return $data ;
  43. }
  44. // check done
  45. function d3forum_get_forum_permissions_of_current_user( $mydirname )
  46. {
  47. global $xoopsUser ;
  48. $db =& Database::getInstance() ;
  49. if( is_object( $xoopsUser ) ) {
  50. $uid = intval( $xoopsUser->getVar('uid') ) ;
  51. $groups = $xoopsUser->getGroups() ;
  52. if( ! empty( $groups ) ) $whr = "`uid`=$uid || `groupid` IN (".implode(",",$groups).")" ;
  53. else $whr = "`uid`=$uid" ;
  54. } else {
  55. $whr = "`groupid`=".intval(XOOPS_GROUP_ANONYMOUS) ;
  56. }
  57. $sql = "SELECT forum_id,SUM(can_post) AS can_post,SUM(can_edit) AS can_edit,SUM(can_delete) AS can_delete,SUM(post_auto_approved) AS post_auto_approved,SUM(is_moderator) AS is_moderator FROM ".$db->prefix($mydirname."_forum_access")." WHERE ($whr) GROUP BY forum_id" ;
  58. $result = $db->query( $sql ) ;
  59. if( $result ) while( $row = $db->fetchArray( $result ) ) {
  60. $ret[ $row['forum_id'] ] = $row ;
  61. }
  62. if( empty( $ret ) ) return array( 0 => array() ) ;
  63. else return $ret ;
  64. }
  65. // check done
  66. function d3forum_get_category_permissions_of_current_user( $mydirname )
  67. {
  68. global $xoopsUser ;
  69. $db =& Database::getInstance() ;
  70. if( is_object( $xoopsUser ) ) {
  71. $uid = intval( $xoopsUser->getVar('uid') ) ;
  72. $groups = $xoopsUser->getGroups() ;
  73. if( ! empty( $groups ) ) $whr = "`uid`=$uid || `groupid` IN (".implode(",",$groups).")" ;
  74. else $whr = "`uid`=$uid" ;
  75. } else {
  76. $whr = "`groupid`=".intval(XOOPS_GROUP_ANONYMOUS) ;
  77. }
  78. $sql = "SELECT cat_id,SUM(can_makeforum) AS can_makeforum,SUM(is_moderator) AS is_moderator FROM ".$db->prefix($mydirname."_category_access")." WHERE ($whr) GROUP BY cat_id" ;
  79. $result = $db->query( $sql ) ;
  80. if( $result ) while( $row = $db->fetchArray( $result ) ) {
  81. $ret[ $row['cat_id'] ] = $row ;
  82. }
  83. if( empty( $ret ) ) return array( 0 => array() ) ;
  84. else return $ret ;
  85. }
  86. // check done
  87. function d3forum_get_users_can_read_forum( $mydirname , $forum_id , $cat_id = null )
  88. {
  89. $db =& Database::getInstance() ;
  90. $forum_id = intval( $forum_id ) ;
  91. $forum_uids = array() ;
  92. $cat_uids = array() ;
  93. if( is_null( $cat_id ) ) {
  94. // get $cat_id from $forum_id
  95. list( $cat_id ) = $db->fetchRow( $db->query( "SELECT `cat_id` FROM ".$db->prefix($mydirname."_forums")." WHERE `forum_id`=$forum_id" ) ) ;
  96. }
  97. $sql = "SELECT `uid` FROM ".$db->prefix($mydirname."_category_access")." WHERE `cat_id`=$cat_id AND `uid` IS NOT NULL" ;
  98. $result = $db->query( $sql ) ;
  99. while( list( $uid ) = $db->fetchRow( $result ) ) {
  100. $cat_uids[] = $uid ;
  101. }
  102. $sql = "SELECT distinct g.uid FROM ".$db->prefix($mydirname."_category_access")." x , ".$db->prefix("groups_users_link")." g WHERE x.groupid=g.groupid AND x.`cat_id`=$cat_id AND x.`groupid` IS NOT NULL" ;
  103. $result = $db->query( $sql ) ;
  104. while( list( $uid ) = $db->fetchRow( $result ) ) {
  105. $cat_uids[] = $uid ;
  106. }
  107. $cat_uids = array_unique( $cat_uids ) ;
  108. $sql = "SELECT `uid` FROM ".$db->prefix($mydirname."_forum_access")." WHERE `forum_id`=$forum_id AND `uid` IS NOT NULL" ;
  109. $result = $db->query( $sql ) ;
  110. while( list( $uid ) = $db->fetchRow( $result ) ) {
  111. $forum_uids[] = $uid ;
  112. }
  113. $sql = "SELECT distinct g.uid FROM ".$db->prefix($mydirname."_forum_access")." x , ".$db->prefix("groups_users_link")." g WHERE x.groupid=g.groupid AND x.`forum_id`=$forum_id AND x.`groupid` IS NOT NULL" ;
  114. $result = $db->query( $sql ) ;
  115. while( list( $uid ) = $db->fetchRow( $result ) ) {
  116. $forum_uids[] = $uid ;
  117. }
  118. $forum_uids = array_unique( $forum_uids ) ;
  119. return array_intersect( $forum_uids , $cat_uids ) ;
  120. }
  121. // check done
  122. function d3forum_get_forum_moderate_groups4show( $mydirname , $forum_id )
  123. {
  124. $db =& Database::getInstance() ;
  125. $forum_id = intval( $forum_id ) ;
  126. $ret = array() ;
  127. $sql = 'SELECT g.groupid, g.name FROM '.$db->prefix($mydirname.'_forum_access').' fa LEFT JOIN '.$db->prefix('groups').' g ON fa.groupid=g.groupid WHERE fa.groupid IS NOT NULL AND fa.is_moderator AND forum_id='.$forum_id ;
  128. $mrs = $db->query( $sql ) ;
  129. while( list( $mod_gid , $mod_gname ) = $db->fetchRow( $mrs ) ) {
  130. $ret[] = array(
  131. 'gid' => $mod_gid ,
  132. 'gname' => htmlspecialchars( $mod_gname , ENT_QUOTES ) ,
  133. ) ;
  134. }
  135. return $ret ;
  136. }
  137. // check done
  138. function d3forum_get_forum_moderate_users4show( $mydirname , $forum_id )
  139. {
  140. global $xoopsUser, $xoopsModuleConfig ; // naao edited
  141. $db =& Database::getInstance() ;
  142. $forum_id = intval( $forum_id ) ;
  143. $ret = array() ;
  144. $sql = 'SELECT u.uid, u.uname, u.name FROM '.$db->prefix($mydirname.'_forum_access').' fa LEFT JOIN '.$db->prefix('users').' u ON fa.uid=u.uid WHERE fa.uid IS NOT NULL AND fa.is_moderator AND forum_id='.$forum_id ;
  145. $mrs = $db->query( $sql ) ;
  146. // naao from
  147. while( list( $mod_uid , $mod_uname , $mod_name) = $db->fetchRow( $mrs ) ) {
  148. if ($xoopsModuleConfig['use_name'] == 1 && $mod_name ) {
  149. $mod_uname = $mod_name ;
  150. }
  151. // naao to
  152. $ret[] = array(
  153. 'uid' => $mod_uid ,
  154. 'uname' => htmlspecialchars( $mod_uname , ENT_QUOTES ) ,
  155. ) ;
  156. }
  157. return $ret ;
  158. }
  159. // check done
  160. function d3forum_get_category_moderate_groups4show( $mydirname , $cat_id )
  161. {
  162. $db =& Database::getInstance() ;
  163. $cat_id = intval( $cat_id ) ;
  164. $ret = array() ;
  165. $sql = 'SELECT g.groupid, g.name FROM '.$db->prefix($mydirname.'_category_access').' ca LEFT JOIN '.$db->prefix('groups').' g ON ca.groupid=g.groupid WHERE ca.groupid IS NOT NULL AND ca.is_moderator AND cat_id='.$cat_id ;
  166. $mrs = $db->query( $sql ) ;
  167. while( list( $mod_gid , $mod_gname ) = $db->fetchRow( $mrs ) ) {
  168. $ret[] = array(
  169. 'gid' => $mod_gid ,
  170. 'gname' => htmlspecialchars( $mod_gname , ENT_QUOTES ) ,
  171. ) ;
  172. }
  173. return $ret ;
  174. }
  175. // check done
  176. function d3forum_get_category_moderate_users4show( $mydirname , $cat_id )
  177. {
  178. global $xoopsUser, $xoopsModuleConfig ; // naao edited
  179. $db =& Database::getInstance() ;
  180. $cat_id = intval( $cat_id ) ;
  181. $ret = array() ;
  182. $sql = 'SELECT u.uid, u.uname, u.name FROM '.$db->prefix($mydirname.'_category_access').' ca LEFT JOIN '.$db->prefix('users').' u ON ca.uid=u.uid WHERE ca.uid IS NOT NULL AND ca.is_moderator AND cat_id='.$cat_id ;
  183. $mrs = $db->query( $sql ) ;
  184. // naao from
  185. while( list( $mod_uid , $mod_uname , $mod_name) = $db->fetchRow( $mrs ) ) {
  186. if ($xoopsModuleConfig['use_name'] == 1 && $mod_name ) {
  187. $mod_uname = $mod_name ;
  188. }
  189. // naao to
  190. $ret[] = array(
  191. 'uid' => $mod_uid ,
  192. 'uname' => htmlspecialchars( $mod_uname , ENT_QUOTES ) ,
  193. ) ;
  194. }
  195. return $ret ;
  196. }
  197. // select box for jumping into a specified forum
  198. function d3forum_make_jumpbox_options( $mydirname , $whr4cat , $whr4forum , $forum_selected = 0 )
  199. {
  200. global $myts ;
  201. $db =& Database::getInstance() ;
  202. $ret = "" ;
  203. $sql = "SELECT c.cat_id, c.cat_title, c.cat_depth_in_tree, f.forum_id, f.forum_title FROM ".$db->prefix($mydirname."_categories")." c LEFT JOIN ".$db->prefix($mydirname."_forums")." f ON f.cat_id=c.cat_id WHERE ($whr4cat) AND ($whr4forum) ORDER BY c.cat_order_in_tree, f.forum_weight" ;
  204. if( $result = $db->query( $sql ) ) {
  205. while( list( $cat_id , $cat_title , $cat_depth , $forum_id , $forum_title ) = $db->fetchRow( $result ) ) {
  206. $selected = $forum_id == $forum_selected ? 'selected="selected"' : '' ;
  207. $ret .= "<option value='$forum_id' $selected>".str_repeat('--',$cat_depth).$myts->makeTboxData4Show($cat_title)." - ".$myts->makeTboxData4Show($forum_title)."</option>\n" ;
  208. }
  209. } else {
  210. $ret = "<option value=\"-1\">ERROR</option>\n";
  211. }
  212. return $ret ;
  213. }
  214. // select box for jumping into a specified category
  215. function d3forum_make_cat_jumpbox_options( $mydirname , $whr4cat , $cat_selected = 0 )
  216. {
  217. global $myts ;
  218. $db =& Database::getInstance() ;
  219. $ret = "" ;
  220. $sql = "SELECT c.cat_id, c.cat_title, c.cat_depth_in_tree FROM ".$db->prefix($mydirname."_categories")." c WHERE ($whr4cat) ORDER BY c.cat_order_in_tree" ;
  221. if( $result = $db->query( $sql ) ) {
  222. while( list( $cat_id , $cat_title , $cat_depth ) = $db->fetchRow( $result ) ) {
  223. $selected = $cat_id == $cat_selected ? 'selected="selected"' : '' ;
  224. $ret .= "<option value='$cat_id' $selected>".str_repeat('--',$cat_depth).$myts->makeTboxData4Show($cat_title)."</option>\n" ;
  225. }
  226. } else {
  227. $ret = "<option value=\"-1\">ERROR</option>\n";
  228. }
  229. return $ret ;
  230. }
  231. function d3forum_trigger_event( $mydirname , $category , $item_id , $event , $extra_tags=array() , $user_list=array() , $omit_user_id=null )
  232. {
  233. require_once XOOPS_TRUST_PATH.'/libs/altsys/class/D3NotificationHandler.class.php' ;
  234. $not_handler =& D3NotificationHandler::getInstance() ;
  235. $not_handler->triggerEvent( $mydirname , 'd3forum' , $category , $item_id , $event , $extra_tags , $user_list , $omit_user_id ) ;
  236. }
  237. // started from {XOOPS_URL} for conventional modules
  238. function d3forum_get_comment_link( $external_link_format , $external_link_id )
  239. {
  240. if( substr( $external_link_format , 0 , 11 ) != '{XOOPS_URL}' ) return '' ;
  241. $format = str_replace( '{XOOPS_URL}' , XOOPS_URL , $external_link_format ) ;
  242. return sprintf( $format , urlencode( $external_link_id ) ) ;
  243. }
  244. // started from class:: for native d3comment modules
  245. function d3forum_get_comment_description( $mydirname , $external_link_format , $external_link_id )
  246. {
  247. $d3com =& d3forum_main_get_comment_object( $mydirname , $external_link_format ) ;
  248. if( ! is_object( $d3com ) ) return '' ;
  249. $description = $d3com->fetchDescription( $external_link_id ) ;
  250. if( $description ) return $description ;
  251. else return $d3com->fetchSummary( $external_link_id ) ;
  252. }
  253. // get object for comment integration // naao modified
  254. function &d3forum_main_get_comment_object( $forum_dirname, $external_link_format )
  255. {
  256. require_once dirname(dirname(__FILE__)).'/class/D3commentObj.class.php' ;
  257. $params['forum_dirname'] = $forum_dirname ;
  258. @list( $params['external_dirname'] , $params['classname'] , $params['external_trustdirname'] )
  259. = explode( '::' , $external_link_format ) ;
  260. $obj =& D3commentObj::getInstance ( $params ) ;
  261. return $obj->d3comObj;
  262. }
  263. // get samples of category options
  264. function d3forum_main_get_categoryoptions4edit( $d3forum_configs_can_be_override )
  265. {
  266. global $xoopsModuleConfig ;
  267. $lines = array() ;
  268. foreach( $d3forum_configs_can_be_override as $key => $type ) {
  269. if( isset( $xoopsModuleConfig[ $key ] ) ) {
  270. $val = $xoopsModuleConfig[ $key ] ;
  271. if( $type == 'int' || $type == 'bool' ) {
  272. $val = intval( $val ) ;
  273. }
  274. $lines[] = htmlspecialchars( $key . ':' . $val , ENT_QUOTES ) ;
  275. }
  276. }
  277. return implode( '<br />' , $lines ) ;
  278. }
  279. // hook topic_id/external_link_id into $_POST['mode'] = 'reply' , $_POST['post_id']
  280. function d3forum_main_posthook_sametopic( $mydirname )
  281. {
  282. $db =& Database::getInstance() ;
  283. if( ! empty( $_POST['external_link_id'] ) ) {
  284. // search the first post of the latest topic with the external_link_id
  285. $external_link_id4sql = addslashes( @$_POST['external_link_id'] ) ;
  286. $forum_id = intval( @$_POST['forum_id'] ) ;
  287. $result = $db->query( "SELECT topic_first_post_id,topic_locked FROM ".$db->prefix($mydirname."_topics")." WHERE topic_external_link_id='$external_link_id4sql' AND forum_id=$forum_id AND ! topic_invisible ORDER BY topic_last_post_time DESC LIMIT 1" ) ;
  288. } else if( ! empty( $_POST['topic_id'] ) ) {
  289. // search the first post of the topic with the topic_id
  290. $topic_id = intval( @$_POST['topic_id'] ) ;
  291. $result = $db->query( "SELECT topic_first_post_id,topic_locked FROM ".$db->prefix($mydirname."_topics")." WHERE topic_id=$topic_id AND ! topic_invisible" ) ;
  292. }
  293. if( empty( $result ) ) return ;
  294. list( $pid , $topic_locked ) = $db->fetchRow( $result ) ;
  295. if( $pid > 0 && ! $topic_locked ) {
  296. // hook to reply
  297. $_POST['mode'] = 'reply' ;
  298. $_POST['pid'] = $pid ;
  299. }
  300. }
  301. ?>