分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

【discuzX2】/source/function/function_forum.php论坛模块通用函数集合分析

发布时间:2023-09-06 01:09责任编辑:胡小海关键词:暂无标签
  1. <?php
  2. /**
  3. *[Discuz!](C)2001-2099ComsenzInc.
  4. *ThisisNOTafreeware,useissubjecttolicenseterms
  5. *论坛模块通用函数集合
  6. *$Id:function_forum.php247232011-10-0912:50:14Zyangli$
  7. */
  8. if(!defined(‘IN_DISCUZ‘)){
  9. exit(‘AccessDenied‘);
  10. }
  11. /**
  12. *
  13. *@param$uid-用户ID
  14. *@param$size-头像大小small/middle/big
  15. *@param$returnsrc-是否返回头像地址
  16. */
  17. functiondiscuz_uc_avatar($uid,$size=‘‘,$returnsrc=FALSE){
  18. global$_G;
  19. returnavatar($uid,$size,$returnsrc,FALSE,$_G[‘setting‘][‘avatarmethod‘],$_G[‘setting‘][‘ucenterurl‘]);
  20. }
  21. /**
  22. *论坛附件删除
  23. *@param$attach-单一附件数据
  24. */
  25. functiondunlink($attach){
  26. global$_G;
  27. $filename=$attach[‘attachment‘];
  28. $havethumb=$attach[‘thumb‘];
  29. $remote=$attach[‘remote‘];
  30. if($remote){
  31. ftpcmd(‘delete‘,$_G[‘setting‘][‘ftp‘][‘attachdir‘].‘/forum/‘.$filename);
  32. $havethumb&&ftpcmd(‘delete‘,$_G[‘setting‘][‘ftp‘][‘attachdir‘].‘/forum/‘.getimgthumbname($filename));
  33. }else{
  34. @unlink($_G[‘setting‘][‘attachdir‘].‘/forum/‘.$filename);
  35. $havethumb&&@unlink($_G[‘setting‘][‘attachdir‘].‘/forum/‘.getimgthumbname($filename));
  36. }
  37. if($attach[‘aid‘]){
  38. @unlink($_G[‘setting‘][‘attachdir‘].‘image/‘.$attach[‘aid‘].‘_140_140.jpg‘);
  39. }
  40. }
  41. /**
  42. 权限表达式
  43. *@param$formula-权限表达式
  44. */
  45. functionformulaperm($formula){
  46. global$_G;
  47. $formula=unserialize($formula);
  48. $medalperm=$formula[‘medal‘];
  49. $permusers=$formula[‘users‘];
  50. $permmessage=$formula[‘message‘];
  51. if($_G[‘setting‘][‘medalstatus‘]&&$medalperm){
  52. $exists=1;
  53. $_G[‘forum_formulamessage‘]=‘‘;
  54. $medalpermc=$medalperm;
  55. if($_G[‘uid‘]){
  56. $medals=explode("\t",DB::result_first("SELECTmedalsFROM".DB::table(‘common_member_field_forum‘)."WHEREuid=‘$_G[uid]‘"));
  57. foreach($medalpermas$k=>$medal){
  58. foreach($medalsas$r){
  59. list($medalid)=explode("|",$r);
  60. if($medalid==$medal){
  61. $exists=0;
  62. unset($medalpermc[$k]);
  63. }
  64. }
  65. }
  66. }else{
  67. $exists=0;
  68. }
  69. if($medalpermc){
  70. loadcache(‘medals‘);
  71. foreach($medalpermcas$medal){
  72. if($_G[‘cache‘][‘medals‘][$medal]){
  73. $_G[‘forum_formulamessage‘].=‘<imgsrc="‘.STATICURL.‘image/common/‘.$_G[‘cache‘][‘medals‘][$medal][‘image‘].‘"style="vertical-align:middle;"/>‘.$_G[‘cache‘][‘medals‘][$medal][‘name‘].‘‘;
  74. }
  75. }
  76. showmessage(‘forum_permforum_nomedal‘,NULL,array(‘forum_permforum_nomedal‘=>$_G[‘forum_formulamessage‘]),array(‘login‘=>1));
  77. }
  78. }
  79. $formulatext=$formula[0];
  80. $formula=$formula[1];
  81. if($_G[‘adminid‘]==1||$_G[‘forum‘][‘ismoderator‘]||in_array($_G[‘groupid‘],explode("\t",$_G[‘forum‘][‘spviewperm‘]))){
  82. returnFALSE;
  83. }
  84. if($permusers){
  85. $permusers=str_replace(array("\r\n","\r"),array("\n","\n"),$permusers);
  86. $permusers=explode("\n",trim($permusers));
  87. if(!in_array($_G[‘member‘][‘username‘],$permusers)){
  88. showmessage(‘forum_permforum_disallow‘,NULL,array(),array(‘login‘=>1));
  89. }
  90. }
  91. if(!$formula){
  92. returnFALSE;
  93. }
  94. if(strexists($formula,‘$memberformula[‘)){
  95. preg_match_all("/\\\$memberformula
    ′(\w+?)′
    /",$formula,$a);
  96. $fields=$profilefields=array();
  97. $mfadd=array();
  98. foreach($a[1]as$field){
  99. switch($field){
  100. case‘regdate‘:
  101. $formula=preg_replace("/\{(\d{4})\-(\d{1,2})\-(\d{1,2})\}/e","‘\‘\\1-‘.sprintf(‘%02d‘,‘\\2‘).‘-‘.sprintf(‘%02d‘,‘\\3‘).‘\‘‘",$formula);
  102. case‘regday‘:
  103. $fields[]=‘m.regdate‘;break;
  104. case‘regip‘:
  105. case‘lastip‘:
  106. $formula=preg_replace("/\{([\d\.]+?)\}/","‘\\1‘",$formula);
  107. $formula=preg_replace(‘/(\$memberformula
    \‘(regip|lastip)\‘
    )\s*=+\s*\‘([\d\.]+?)\‘/‘,"strpos(\\1,‘\\3‘)===0",$formula);
  108. case‘buyercredit‘:
  109. case‘sellercredit‘:
  110. $mfadd[‘ms‘]="LEFTJOIN".DB::table(‘common_member_status‘)."msONm.uid=ms.uid";
  111. $fields[]=‘ms.‘.$field;break;
  112. casesubstr($field,0,5)==‘field‘:
  113. $mfadd[‘mp‘]="LEFTJOIN".DB::table(‘common_member_profile‘)."mpONm.uid=mp.uid";
  114. $fields[]=‘mp.field‘.intval(substr($field,5));
  115. $profilefields[]=$field;break;
  116. }
  117. }
  118. $memberformula=array();
  119. if($_G[‘uid‘]){
  120. $memberformula=DB::fetch_first("SELECT".implode(‘,‘,$fields)."FROM".DB::table(‘common_member‘)."m".implode(‘‘,$mfadd)."WHEREm.uid=‘$_G[uid]‘");
  121. if(in_array(‘regday‘,$a[1])){
  122. $memberformula[‘regday‘]=intval((TIMESTAMP-$memberformula[‘regdate‘])/86400);
  123. }
  124. if(in_array(‘regdate‘,$a[1])){
  125. $memberformula[‘regdate‘]=date(‘Y-m-d‘,$memberformula[‘regdate‘]);
  126. }
  127. $memberformula[‘lastip‘]=$memberformula[‘lastip‘]?$memberformula[‘lastip‘]:$_G[‘clientip‘];
  128. }else{
  129. if(isset($memberformula[‘regip‘])){
  130. $memberformula[‘regip‘]=$_G[‘clientip‘];
  131. }
  132. if(isset($memberformula[‘lastip‘])){
  133. $memberformula[‘lastip‘]=$_G[‘clientip‘];
  134. }
  135. }
  136. }
  137. @eval("\$formulaperm=($formula)?TRUE:FALSE;");
  138. if(!$formulaperm){
  139. if(!$permmessage){
  140. $language=lang(‘forum/misc‘);
  141. $search=array(‘regdate‘,‘regday‘,‘regip‘,‘lastip‘,‘buyercredit‘,‘sellercredit‘,‘digestposts‘,‘posts‘,‘threads‘,‘oltime‘);
  142. $replace=array($language[‘formulaperm_regdate‘],$language[‘formulaperm_regday‘],$language[‘formulaperm_regip‘],$language[‘formulaperm_lastip‘],$language[‘formulaperm_buyercredit‘],$language[‘formulaperm_sellercredit‘],$language[‘formulaperm_digestposts‘],$language[‘formulaperm_posts‘],$language[‘formulaperm_threads‘],$language[‘formulaperm_oltime‘]);
  143. for($i=1;$i<=8;$i++){
  144. $search[]=‘extcredits‘.$i;
  145. $replace[]=$_G[‘setting‘][‘extcredits‘][$i][‘title‘]?$_G[‘setting‘][‘extcredits‘][$i][‘title‘]:$language[‘formulaperm_extcredits‘].$i;
  146. }
  147. if($profilefields){
  148. loadcache(array(‘fields_required‘,‘fields_optional‘));
  149. foreach($profilefieldsas$profilefield){
  150. $search[]=$profilefield;
  151. $replace[]=!empty($_G[‘cache‘][‘fields_optional‘][‘field_‘.$profilefield])?$_G[‘cache‘][‘fields_optional‘][‘field_‘.$profilefield][‘title‘]:$_G[‘cache‘][‘fields_required‘][‘field_‘.$profilefield][‘title‘];
  152. }
  153. }
  154. $i=0;$_G[‘forum_usermsg‘]=‘‘;
  155. foreach($searchas$s){
  156. if(in_array($s,array(‘digestposts‘,‘posts‘,‘threads‘,‘oltime‘,‘extcredits1‘,‘extcredits2‘,‘extcredits3‘,‘extcredits4‘,‘extcredits5‘,‘extcredits6‘,‘extcredits7‘,‘extcredits8‘))){
  157. $_G[‘forum_usermsg‘].=strexists($formulatext,$s)?‘<br/>‘.$replace[$i].‘:‘.(@eval(‘returnintval(getuserprofile(\‘‘.$s.‘\‘));‘)):‘‘;
  158. }elseif(in_array($s,array(‘regdate‘,‘regip‘))){
  159. $_G[‘forum_usermsg‘].=strexists($formulatext,$s)?‘<br/>‘.$replace[$i].‘:‘.(@eval(‘return$memberformula[\‘‘.$s.‘\‘];‘)):‘‘;
  160. }
  161. $i++;
  162. }
  163. $search=array_merge($search,array(‘and‘,‘or‘,‘>=‘,‘<=‘,‘==‘));
  164. $replace=array_merge($replace,array(‘<b>‘.$language[‘formulaperm_and‘].‘</b>‘,‘<b>‘.$language[‘formulaperm_or‘].‘</b>‘,‘≥‘,‘≤‘,‘=‘));
  165. $_G[‘forum_formulamessage‘]=str_replace($search,$replace,$formulatext);
  166. }else{
  167. $_G[‘forum_formulamessage‘]=$permmessage;
  168. }
  169. if(!$permmessage){
  170. showmessage(‘forum_permforum_nopermission‘,NULL,array(‘formulamessage‘=>$_G[‘forum_formulamessage‘],‘usermsg‘=>$_G[‘forum_usermsg‘]),array(‘login‘=>1));
  171. }else{
  172. showmessage(‘forum_permforum_nopermission_custommsg‘,NULL,array(‘formulamessage‘=>$_G[‘forum_formulamessage‘]),array(‘login‘=>1));
  173. }
  174. }
  175. returnTRUE;
  176. }
  177. /**
  178. 勋章权限表达式
  179. *@param$formula-勋章权限表达式
  180. *@param$type-1权限验证2勋章字串
  181. */
  182. functionmedalformulaperm($formula,$type){
  183. global$_G;
  184. $formula=unserialize($formula);
  185. $permmessage=$formula[‘message‘];
  186. $formula=$formula[‘medal‘];
  187. if(!empty($formula[‘usergroupallow‘])&&is_array($formula[‘usergroups‘])&&!in_array($_G[‘groupid‘],$formula[‘usergroups‘])){
  188. loadcache(‘usergroups‘);
  189. $message=array();
  190. foreach($formula[‘usergroups‘]as$groupid){
  191. $message[]=$_G[‘cache‘][‘usergroups‘][$groupid][‘grouptitle‘].‘‘;
  192. }
  193. $_G[‘forum_formulamessage‘]=implode(‘,‘,$message);
  194. $_G[‘forum_usermsg‘]=$_G[‘cache‘][‘usergroups‘][$_G[‘groupid‘]][‘grouptitle‘];
  195. returnFALSE;
  196. }
  197. $formulatext=$formula[0];
  198. $formula=$formula[1];
  199. if(!$formula){
  200. returnFALSE;
  201. }
  202. if(strexists($formula,‘$memberformula[‘)){
  203. preg_match_all("/\\\$memberformula
    ′(\w+?)′
    /",$formula,$a);
  204. $fields=$profilefields=array();
  205. $mfadd=array();
  206. foreach($a[1]as$field){
  207. switch($field){
  208. case‘regdate‘:
  209. $formula=preg_replace("/\{(\d{4})\-(\d{1,2})\-(\d{1,2})\}/e","‘\‘\\1-‘.sprintf(‘%02d‘,‘\\2‘).‘-‘.sprintf(‘%02d‘,‘\\3‘).‘\‘‘",$formula);
  210. case‘regday‘:
  211. $fields[]=‘m.regdate‘;break;
  212. case‘regip‘:
  213. case‘lastip‘:
  214. $formula=preg_replace("/\{([\d\.]+?)\}/","‘\\1‘",$formula);
  215. $formula=preg_replace(‘/(\$memberformula
    \‘(regip|lastip)\‘
    )\s*=+\s*\‘([\d\.]+?)\‘/‘,"strpos(\\1,‘\\3‘)===0",$formula);
  216. case‘buyercredit‘:
  217. case‘sellercredit‘:
  218. $mfadd[‘ms‘]="LEFTJOIN".DB::table(‘common_member_status‘)."msONm.uid=ms.uid";
  219. $fields[]=‘ms.‘.$field;break;
  220. casesubstr($field,0,5)==‘field‘:
  221. $mfadd[‘mp‘]="LEFTJOIN".DB::table(‘common_member_profile‘)."mpONm.uid=mp.uid";
  222. $fields[]=‘mp.field‘.intval(substr($field,5));
  223. $profilefields[]=$field;break;
  224. }
  225. }
  226. $memberformula=array();
  227. if($_G[‘uid‘]){
  228. $memberformula=DB::fetch_first("SELECT".implode(‘,‘,$fields)."FROM".DB::table(‘common_member‘)."m".implode(‘‘,$mfadd)."WHEREm.uid=‘$_G[uid]‘");
  229. if(in_array(‘regday‘,$a[1])){
  230. $memberformula[‘regday‘]=intval((TIMESTAMP-$memberformula[‘regdate‘])/86400);
  231. }
  232. if(in_array(‘regdate‘,$a[1])){
  233. $memberformula[‘regdate‘]=date(‘Y-m-d‘,$memberformula[‘regdate‘]);
  234. }
  235. $memberformula[‘lastip‘]=$memberformula[‘lastip‘]?$memberformula[‘lastip‘]:$_G[‘clientip‘];
  236. }else{
  237. if(isset($memberformula[‘regip‘])){
  238. $memberformula[‘regip‘]=$_G[‘clientip‘];
  239. }
  240. &nbs

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved