tools.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?php
  2. function get_base_url($url)
  3. {
  4. $split_url = explode("/", $url);
  5. $base_url = $split_url[0] . "//" . $split_url[2] . "/";
  6. return $base_url;
  7. }
  8. function get_root_domain($url)
  9. {
  10. $split_url = explode("/", $url);
  11. $base_url = $split_url[2];
  12. $base_url_main_split = explode(".", strrev($base_url));
  13. $root_domain = strrev($base_url_main_split[1]) . "." . strrev($base_url_main_split[0]);
  14. return $root_domain;
  15. }
  16. function try_replace_with_frontend($url, $frontend, $original)
  17. {
  18. global $config;
  19. $frontends = $config->frontends;
  20. if (isset($_COOKIE[$frontend]) || !empty($frontends[$frontend]["instance_url"]))
  21. {
  22. if (isset($_COOKIE[$frontend]))
  23. $frontend = $_COOKIE[$frontend];
  24. else if (!empty($frontends[$frontend]["instance_url"]))
  25. $frontend = $frontends[$frontend]["instance_url"];
  26. if (empty(trim($frontend)))
  27. return $url;
  28. if (strpos($url, "wikipedia.org") !== false)
  29. {
  30. $wiki_split = explode(".", $url);
  31. if (count($wiki_split) > 1)
  32. {
  33. $lang = explode("://", $wiki_split[0])[1];
  34. $url = $frontend . explode($original, $url)[1] . (strpos($url, "?") !== false ? "&" : "?") . "lang=" . $lang;
  35. }
  36. }
  37. else if (strpos($url, "fandom.com") !== false)
  38. {
  39. $fandom_split = explode(".", $url);
  40. if (count($fandom_split) > 1)
  41. {
  42. $wiki_name = explode("://", $fandom_split[0])[1];
  43. $url = $frontend . "/" . $wiki_name . explode($original, $url)[1];
  44. }
  45. }
  46. else
  47. {
  48. $url = $frontend . explode($original, $url)[1];
  49. }
  50. return $url;
  51. }
  52. return $url;
  53. }
  54. function check_for_privacy_frontend($url)
  55. {
  56. global $config;
  57. if (isset($_COOKIE["disable_frontends"]))
  58. return $url;
  59. foreach($config->frontends as $frontend => $data)
  60. {
  61. $original = $data["original_url"];
  62. if (strpos($url, $original))
  63. {
  64. $url = try_replace_with_frontend($url, $frontend, $original);
  65. break;
  66. }
  67. }
  68. return $url;
  69. }
  70. function check_ddg_bang($query)
  71. {
  72. $bangs_json = file_get_contents("static/misc/ddg_bang.json");
  73. $bangs = json_decode($bangs_json, true);
  74. if (substr($query, 0, 1) == "!")
  75. $search_word = substr(explode(" ", $query)[0], 1);
  76. else
  77. $search_word = substr(end(explode(" ", $query)), 1);
  78. $bang_url = null;
  79. foreach($bangs as $bang)
  80. {
  81. if ($bang["t"] == $search_word)
  82. {
  83. $bang_url = $bang["u"];
  84. break;
  85. }
  86. }
  87. if ($bang_url)
  88. {
  89. $bang_query_array = explode("!" . $search_word, $query);
  90. $bang_query = trim(implode("", $bang_query_array));
  91. $request_url = str_replace("{{{s}}}", $bang_query, $bang_url);
  92. $request_url = check_for_privacy_frontend($request_url);
  93. header("Location: " . $request_url);
  94. die();
  95. }
  96. }
  97. function check_for_special_search($query)
  98. {
  99. if (isset($_COOKIE["disable_special"]))
  100. return 0;
  101. $query_lower = strtolower($query);
  102. $split_query = explode(" ", $query);
  103. if (strpos($query_lower, "to") && count($split_query) >= 4) // currency
  104. {
  105. $amount_to_convert = floatval($split_query[0]);
  106. if ($amount_to_convert != 0)
  107. return 1;
  108. }
  109. else if (strpos($query_lower, "mean") && count($split_query) >= 2) // definition
  110. {
  111. return 2;
  112. }
  113. else if (strpos($query_lower, "my") !== false)
  114. {
  115. if (strpos($query_lower, "ip"))
  116. {
  117. return 3;
  118. }
  119. else if (strpos($query_lower, "user agent") || strpos($query_lower, "ua"))
  120. {
  121. return 4;
  122. }
  123. }
  124. else if (strpos($query_lower, "weather") !== false)
  125. {
  126. return 5;
  127. }
  128. else if ($query_lower == "tor")
  129. {
  130. return 6;
  131. }
  132. else if (3 > count(explode(" ", $query))) // wikipedia
  133. {
  134. return 7;
  135. }
  136. return 0;
  137. }
  138. function get_xpath($response)
  139. {
  140. $htmlDom = new DOMDocument;
  141. @$htmlDom->loadHTML($response);
  142. $xpath = new DOMXPath($htmlDom);
  143. return $xpath;
  144. }
  145. function request($url)
  146. {
  147. global $config;
  148. $ch = curl_init($url);
  149. curl_setopt_array($ch, $config->curl_settings);
  150. $response = curl_exec($ch);
  151. return $response;
  152. }
  153. function human_filesize($bytes, $dec = 2)
  154. {
  155. $size = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
  156. $factor = floor((strlen($bytes) - 1) / 3);
  157. return sprintf("%.{$dec}f ", $bytes / pow(1024, $factor)) . @$size[$factor];
  158. }
  159. function remove_special($string)
  160. {
  161. $string = preg_replace("/[\r\n]+/", "\n", $string);
  162. return trim(preg_replace("/\s+/", ' ', $string));
  163. }
  164. function print_elapsed_time($start_time)
  165. {
  166. $end_time = number_format(microtime(true) - $start_time, 2, '.', '');
  167. echo "<p id=\"time\">Fetched the results in $end_time seconds</p>";
  168. }
  169. function print_next_page_button($text, $page, $query, $type)
  170. {
  171. echo "<form class=\"page\" action=\"search.php\" target=\"_top\" method=\"get\" autocomplete=\"off\">";
  172. echo "<input type=\"hidden\" name=\"p\" value=\"" . $page . "\" />";
  173. echo "<input type=\"hidden\" name=\"q\" value=\"$query\" />";
  174. echo "<input type=\"hidden\" name=\"t\" value=\"$type\" />";
  175. echo "<button type=\"submit\">$text</button>";
  176. echo "</form>";
  177. }
  178. ?>