HTML.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. class HTML {
  3. public static function escape($str) {
  4. return htmlspecialchars($str);
  5. }
  6. public static function stripTags($str) {
  7. return strip_tags($str);
  8. }
  9. public static function avatar_addr($user, $size) {
  10. $qid = $user['qq'];
  11. if ($qid == 0 && substr($user['email'], -7) == '@qq.com')
  12. $qid = strval(substr($user['email'], 0, -7));
  13. return 'https://q.qlogo.cn/g?b=qq&nk=' . $qid . '&s=100';
  14. }
  15. public static function tablist($tabs_info, $cur, $type = 'nav-tabs') {
  16. $html = '<ul class="nav '.$type.'" role="tablist">';
  17. foreach ($tabs_info as $id => $tab) {
  18. $html .= '<li class="nav-item"><a class="nav-link'.($cur == $id ? ' active' : '').'" href="'.$tab['url'].'" role="tab">'.$tab['name'].'</a></li>';
  19. }
  20. $html .= '</ul>';
  21. return $html;
  22. }
  23. public static function hiddenToken() {
  24. return '<input type="hidden" name="_token" value="'.crsf_token().'" />';
  25. }
  26. public static function div_vinput($name, $type, $label_text, $default_value) {
  27. return '<div id="'."div-$name".'">'
  28. . '<label for="'."input-$name".'" class="control-label">'.$label_text.'</label>'
  29. . '<input type="'.$type.'" class="form-control" name="'.$name.'" id="'."input-$name".'" value="'.HTML::escape($default_value).'" />'
  30. . '<span class="help-block" id="'."help-$name".'"></span>'
  31. . '</div>';
  32. }
  33. public static function div_vtextarea($name, $label_text, $default_value) {
  34. return '<div id="'."div-$name".'">'
  35. . '<label for="'."input-$name".'" class="control-label">'.$label_text.'</label>'
  36. . '<textarea class="form-control" name="'.$name.'" id="'."input-$name".'">'.HTML::escape($default_value).'</textarea>'
  37. . '<span class="help-block" id="'."help-$name".'"></span>'
  38. . '</div>';
  39. }
  40. public static function checkbox($name, $default_value) {
  41. $status = $default_value ? 'checked="checked" ' : '';
  42. return '<input type="checkbox" id="'."input-$name".'" name="'.$name.'" '.$status.'/>';
  43. }
  44. public static function blog_url($username, $uri) {
  45. switch (UOJConfig::$data['switch']['blog-domain-mode']) {
  46. case 1:
  47. $port = ((UOJConfig::$data['web']['blog']['protocol'] === "http" && UOJConfig::$data['web']['blog']['port'] == 80) || (UOJConfig::$data['web']['blog']['protocol'] === "https" && UOJConfig::$data['web']['blog']['port'] == 443)) ? '' : (':'.UOJConfig::$data['web']['blog']['port']);
  48. $url = UOJConfig::$data['web']['blog']['protocol'].'://'.blog_name_encode($username).'.'.UOJConfig::$data['web']['main']['host'].$port;
  49. break;
  50. case 2:
  51. $port = ((UOJConfig::$data['web']['blog']['protocol'] === "http" && UOJConfig::$data['web']['blog']['port'] == 80) || (UOJConfig::$data['web']['blog']['protocol'] === "https" && UOJConfig::$data['web']['blog']['port'] == 443)) ? '' : (':'.UOJConfig::$data['web']['blog']['port']);
  52. $url = UOJConfig::$data['web']['blog']['protocol'].'://'.UOJConfig::$data['web']['blog']['host'].$port.'/'.blog_name_encode($username);
  53. break;
  54. case 3:
  55. $port = ((UOJConfig::$data['web']['main']['protocol'] === "http" && UOJConfig::$data['web']['main']['port'] == 80) || (UOJConfig::$data['web']['main']['protocol'] === "https" && UOJConfig::$data['web']['main']['port'] == 443)) ? '' : (':'.UOJConfig::$data['web']['main']['port']);
  56. $url = UOJConfig::$data['web']['main']['protocol'].'://'.UOJConfig::$data['web']['main']['host'].$port.'/blog/'.blog_name_encode($username);
  57. break;
  58. }
  59. $url .= $uri;
  60. $url = rtrim($url, '/');
  61. return HTML::escape($url);
  62. }
  63. public static function blog_list_url() {
  64. switch (UOJConfig::$data['switch']['blog-domain-mode']) {
  65. case 1:
  66. case 2:
  67. $port = ((UOJConfig::$data['web']['blog']['protocol'] === "http" && UOJConfig::$data['web']['blog']['port'] == 80) || (UOJConfig::$data['web']['blog']['protocol'] === "https" && UOJConfig::$data['web']['blog']['port'] == 443)) ? '' : (':'.UOJConfig::$data['web']['blog']['port']);
  68. $url = UOJConfig::$data['web']['blog']['protocol'].'://'.UOJConfig::$data['web']['blog']['host'].$port;
  69. break;
  70. case 3:
  71. $port = ((UOJConfig::$data['web']['main']['protocol'] === "http" && UOJConfig::$data['web']['main']['port'] == 80) || (UOJConfig::$data['web']['main']['protocol'] === "https" && UOJConfig::$data['web']['main']['port'] == 443)) ? '' : (':'.UOJConfig::$data['web']['main']['port']);
  72. $url = UOJConfig::$data['web']['main']['protocol'].'://'.UOJConfig::$data['web']['main']['host'].$port.'/blogs';
  73. break;
  74. }
  75. return HTML::escape(rtrim($url, '/'));
  76. }
  77. public static function url($uri, $config = array()) {
  78. $config = array_merge(array(
  79. 'location' => 'main',
  80. 'params' => null
  81. ), $config);
  82. $path = strtok($uri, '?');
  83. $qs = strtok('?');
  84. parse_str($qs, $param);
  85. if ($config['params'] != null) {
  86. $param = array_merge($param, $config['params']);
  87. }
  88. $url = UOJConfig::$data['web'][$config['location']]['protocol'].'://'.UOJConfig::$data['web'][$config['location']]['host'];
  89. if ((UOJConfig::$data['web'][$config['location']]['protocol'] === "http" && UOJConfig::$data['web'][$config['location']]['port'] == 80) || (UOJConfig::$data['web'][$config['location']]['protocol'] === "https" && UOJConfig::$data['web'][$config['location']]['port'] == 443)) {
  90. } else {
  91. $url .= ':'.UOJConfig::$data['web'][$config['location']]['port'];
  92. }
  93. if ($param) {
  94. $url .= $path.'?'.HTML::query_string_encode($param);
  95. } else {
  96. $url .= rtrim($path, '/');
  97. }
  98. return HTML::escape($url);
  99. }
  100. public static function timeanddate_url($time, $config = array()) {
  101. $url = UOJConfig::$data['web']['blog']['protocol'].'://';
  102. $url .= 'www.timeanddate.com/worldclock/fixedtime.html';
  103. $url .= '?'.'iso='.$time->format('Ymd\THi');
  104. $url .= '&'.'p1=33';
  105. if (isset($config['duration']) && $config['duration'] < 3600) {
  106. $url .= '&'.'ah='.floor($config['duration'] / 60);
  107. if ($config['duration'] % 60 != 0) {
  108. $url .= '&'.'am='.($config['duration'] % 60);
  109. }
  110. }
  111. $url = HTML::escape($url);
  112. return $url;
  113. }
  114. public static function js_src($uri, $config = array('location' => 'main')) {
  115. return '<script src="'.HTML::url($uri, $config).'"></script>';
  116. }
  117. public static function css_link($uri, $config = array('location' => 'main')) {
  118. return '<link type="text/css" rel="stylesheet" href="'.HTML::url($uri, $config).'" />';
  119. }
  120. public static function query_string_encode($q, $array_name = null) {
  121. if (!is_array($q)) {
  122. return false;
  123. }
  124. $r = array();
  125. foreach ((array)$q as $k => $v) {
  126. if ($array_name !== null) {
  127. if (is_numeric($k)) {
  128. $k = $array_name."[]";
  129. } else {
  130. $k = $array_name."[$k]";
  131. }
  132. }
  133. if (is_array($v) || is_object($v)) {
  134. $r[] = self::query_string_encode($v, $k);
  135. } else {
  136. $r[] = urlencode($k)."=".urlencode($v);
  137. }
  138. }
  139. return implode("&", $r);
  140. }
  141. public static function pruifier() {
  142. include_once $_SERVER['DOCUMENT_ROOT'] . '/app/vendor/htmlpurifier/HTMLPurifier.auto.php';
  143. $config = HTMLPurifier_Config::createDefault();
  144. //$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
  145. $config->set('Cache.DefinitionImpl', null);
  146. $def = $config->getHTMLDefinition(true);
  147. $def->addAttribute('span', 'data-rating', 'Number');
  148. $def->addElement('section', 'Block', 'Flow', 'Common');
  149. $def->addElement('nav', 'Block', 'Flow', 'Common');
  150. $def->addElement('article', 'Block', 'Flow', 'Common');
  151. $def->addElement('aside', 'Block', 'Flow', 'Common');
  152. $def->addElement('header', 'Block', 'Flow', 'Common');
  153. $def->addElement('footer', 'Block', 'Flow', 'Common');
  154. return new HTMLPurifier($config);
  155. }
  156. }