helper_makehtml.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: helper_makehtml.php 34675 2014-07-01 05:58:13Z laoguozhang $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class helper_makehtml {
  12. public static $callback;
  13. public static $callbackdata;
  14. public static $htmlfilename;
  15. public static $returndata = array();
  16. public static $viewurl;
  17. public static function make_html() {
  18. global $_G;
  19. if(self::$htmlfilename) {
  20. $filepath = DISCUZ_ROOT.'/'.self::$htmlfilename.'.'.$_G['setting']['makehtml']['extendname'];
  21. dmkdir(dirname($filepath));
  22. $cend = '</body></html>';
  23. $code = ob_get_clean().$cend;
  24. $code = preg_replace('/language\s*=[\s|\'|\"]*php/is', '_', $code);
  25. $code = str_replace(array('<?', '?>'), array('&lt;?', '?&gt;'), $code);
  26. if(file_put_contents($filepath, $code) !== false) {
  27. $_G['gzipcompress'] ? ob_start('ob_gzhandler') : ob_start();
  28. if(self::$callback && is_callable(self::$callback)) {
  29. call_user_func(self::$callback);
  30. self::$callback = self::$callbackdata = null;
  31. }
  32. self::$returndata['status'] = 'html_ok';
  33. if(isset(self::$viewurl)) {
  34. self::$returndata['path'] = self::$viewurl;
  35. } else {
  36. self::$returndata['path'] = self::$htmlfilename.'.'.$_G['setting']['makehtml']['extendname'];
  37. }
  38. showmessage('do_success', null, self::$returndata);
  39. }
  40. }
  41. }
  42. public static function portal_index() {
  43. global $_G;
  44. if(!empty($_G['setting']['makehtml']['flag'])) {
  45. $_G['dynamicurl'] = 'portal.php';
  46. self::$htmlfilename = $_G['setting']['makehtml']['indexname'] ? $_G['setting']['makehtml']['indexname'] : 'index';
  47. }
  48. }
  49. public static function portal_list($cat) {
  50. global $_G;
  51. if(!empty($_G['setting']['makehtml']['flag']) && $cat['fullfoldername']) {
  52. $_G['dynamicurl'] = 'portal.php?mod=list&catid='.$cat['catid'];
  53. self::$htmlfilename = $cat['fullfoldername'].'/index';
  54. } else if(!empty($_G['setting']['makehtml']['flag']) && !$cat['fullfoldername']) {
  55. showmessage('portal_category_has_no_folder_name');
  56. }
  57. }
  58. public static function portal_article($cat, $article, $page) {
  59. global $_G;
  60. if(!empty($_G['setting']['makehtml']['flag']) && $cat['fullfoldername']) {
  61. $_G['dynamicurl'] = 'portal.php?mod=view&aid='.$article['aid'];
  62. self::$callbackdata['data'] = array();
  63. if(!$article['htmlmade']) {
  64. self::$callbackdata['data']['htmlmade'] = 1;
  65. }
  66. if(!$article['htmlname']) {
  67. self::$callbackdata['data']['htmlname'] = $article['htmlname'] = str_pad($article['aid'], 8, '0', STR_PAD_LEFT);
  68. }
  69. $htmldir = self::fetch_dir($cat['fullfoldername'], $article['timestamp']);
  70. if($article['htmldir'] != $htmldir) {
  71. self::$callbackdata['data']['htmldir'] = $htmldir;
  72. }
  73. if($article['contents'] > 1 && $page > 1) {
  74. $article['htmlname'] = $article['htmlname'].$page;
  75. }
  76. if($article['contents'] > $page) {
  77. self::$returndata['nexturl'] = "portal.php?mod=view&aid={$article[aid]}&page=".(++$page);//'url'
  78. self::$returndata['current'] = $page;//'cur'
  79. self::$returndata['count'] = $article['contents'];//'count'
  80. }
  81. if(!empty($cat['topid'])) {
  82. $caturl = $_G['cache']['portalcategory'][$cat['topid']]['domain'] ? $_G['cache']['portalcategory'][$cat['topid']]['caturl'] : '';
  83. self::$viewurl = $caturl.$article['htmldir'].$article['htmlname'].'.'.$_G['setting']['makehtml']['extendname'];
  84. }
  85. self::$htmlfilename = $htmldir.$article['htmlname'];
  86. if(self::$callbackdata['data']) {
  87. self::$callback = array(self, 'portal_article_success');
  88. self::$callbackdata['id'] = $article['aid'];
  89. }
  90. if($article['allowcomment']) {
  91. $_G['htmlcheckupdate'] = '1';
  92. }
  93. } else if(!empty($_G['setting']['makehtml']['flag']) && !$cat['fullfoldername']) {
  94. showmessage('portal_category_has_no_folder_name');
  95. }
  96. }
  97. public static function fetch_dir($folder, $time) {
  98. global $_G;
  99. $formatarr = array('/Ym/', '/Ym/d/', '/Y/m/', '/Y/m/d/');
  100. $htmldirformat = isset($formatarr[$_G['setting']['makehtml']['htmldirformat']]) ? $formatarr[$_G['setting']['makehtml']['htmldirformat']] : $formatarr[0];
  101. $htmldir = $folder.dgmdate($time, $htmldirformat);
  102. if(!empty($_G['setting']['makehtml']['articlehtmldir'])) {
  103. $htmldir = $_G['setting']['makehtml']['articlehtmldir'].'/'.$htmldir;
  104. }
  105. return $htmldir;
  106. }
  107. public static function portal_article_success(){
  108. if(!empty(self::$callbackdata['data'])) {
  109. C::t('portal_article_title')->update(self::$callbackdata['id'], self::$callbackdata['data']);
  110. }
  111. }
  112. public static function portal_topic($topic) {
  113. global $_G;
  114. if(!empty($_G['setting']['makehtml']['flag']) && !empty($_G['setting']['makehtml']['topichtmldir']) && $topic['name']) {
  115. $_G['dynamicurl'] = 'portal.php?mod=topic&topicid='.$topic['topicid'];
  116. self::$callbackdata['data'] = array();
  117. if(!$topic['htmlmade']) {
  118. self::$callbackdata['data']['htmlmade'] = 1;
  119. }
  120. if($topic['htmldir'] != $_G['setting']['makehtml']['topichtmldir']) {
  121. self::$callbackdata['data']['htmldir'] = $_G['setting']['makehtml']['topichtmldir'];
  122. }
  123. self::$htmlfilename = $_G['setting']['makehtml']['topichtmldir'].'/'.$topic['name'];
  124. if(self::$callbackdata['data']) {
  125. self::$callback = array(self, 'portal_topic_success');
  126. self::$callbackdata['id'] = $topic['topicid'];
  127. }
  128. if($topic['allowcomment']) {
  129. $_G['htmlcheckupdate'] = '1';
  130. }
  131. }
  132. }
  133. public static function portal_topic_success(){
  134. if(!empty(self::$callbackdata['data'])) {
  135. C::t('portal_topic')->update(self::$callbackdata['id'], self::$callbackdata['data']);
  136. }
  137. }
  138. }
  139. ?>