Advertisement
matheuslmb

Untitled

Jul 20th, 2017
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.99 KB | None | 0 0
  1. <?PHP
  2. // ###################### CONFIG ########################
  3. //load page config file
  4. $config['site'] = parse_ini_file('config/config.ini');
  5. include('config/config.php');
  6. //check install
  7. if($config['site']['install'] != "no")
  8. {
  9. header("Location: install.php");
  10. exit;
  11. }
  12. //load server config
  13. $config['server'] = parse_ini_file($config['site']['server_path'].'config.lua');
  14. if(isset($config['server']['mysqlHost']))
  15. {
  16. $host = $config['server']['mysqlHost'];
  17. $user = $config['server']['mysqlUser'];
  18. $passwd = $config['server']['mysqlPass'];
  19. $db = $config['server']['mysqlDatabase'];
  20. $lnk = mysql_connect("$host", "$user", "$passwd") or die ('Nao foi possível conectar ao MySql: ' . mysql_error());
  21. mysql_select_db("$db", $lnk) or die ('Nao foi possível ao banco de dados selecionado no MySql: ' . mysql_error());
  22.  
  23. //new (0.2.6+) ots config.lua file
  24. $mysqlhost = $config['server']['mysqlHost'];
  25. $mysqluser = $config['server']['mysqlUser'];
  26. $mysqlpass = $config['server']['mysqlPass'];
  27. $mysqldatabase = $config['server']['mysqlDatabase'];
  28. }
  29. elseif(isset($config['server']['sqlHost']))
  30. {
  31. //old (0.2.4) ots config.lua file
  32. $mysqlhost = $config['server']['sqlHost'];
  33. $mysqluser = $config['server']['sqlUser'];
  34. $mysqlpass = $config['server']['sqlPass'];
  35. $mysqldatabase = $config['server']['sqlDatabase'];
  36. }
  37. $sqlitefile = $config['server']['sqliteDatabase'];
  38. $passwordency = '';
  39. if(strtolower($config['server']['encryptionType']) == 'md5')
  40. $passwordency = 'md5';
  41. if(strtolower($config['server']['encryptionType']) == 'sha1')
  42. $passwordency = 'sha1';
  43. if(strtolower($config['server']['encryptionType']) == 'plain')
  44. $passwordency = 'plaintext';
  45. // loads #####POT mainfile#####
  46. include('pot/OTS.php');
  47. // PDO and POT connects to database
  48. $ots = POT::getInstance();
  49. if(strtolower($config['server']['sqlType']) == "mysql")
  50. {
  51. //connect to MySQL database
  52. try
  53. {
  54. $ots->connect(POT::DB_MYSQL, array('host' => $mysqlhost, 'user' => $mysqluser, 'password' => $mysqlpass, 'database' => $mysqldatabase) );
  55. }
  56. catch(PDOException $error)
  57. {
  58. echo 'Database error - can\'t connect to MySQL database. Possible reasons:<br>1. MySQL server is not running on host.<br>2. MySQL user, password, database or host isn\'t configured in: <b>'.$config['site']['server_path'].'config.lua</b> .<br>3. MySQL user, password, database or host is wrong.';
  59. exit;
  60. }
  61. }
  62. elseif(strtolower($config['server']['sqlType']) == "sqlite")
  63. {
  64. //connect to SQLite database
  65. $link_to_sqlitedatabase = $config['site']['server_path'].$sqlitefile;
  66. try
  67. {
  68. $ots->connect(POT::DB_SQLITE, array('database' => $link_to_sqlitedatabase));
  69. }
  70. catch(PDOException $error)
  71. {
  72. echo 'Database error - can\'t open SQLite database. Possible reasons:<br><b>'.$link_to_sqlitedatabase.'</b> - file isn\'t valid SQLite database.<br><b>'.$link_to_sqlitedatabase.'</b> - doesn\'t exist.<br><font color="red">Wrong PHP configuration. Default PHP does not work with SQLite databases!</font>';
  73. exit;
  74. }
  75. }
  76. else
  77. {
  78. echo 'Database error. Unknown database type in <b>'.$config['site']['server_path'].'config.lua</b> . Must be equal to: "<b>mysql</b>" or "<b>sqlite</b>". Now is: "<b>'.strtolower($config['server']['sqlType']).'"</b>';
  79. exit;
  80. }
  81.  
  82. $SQL = POT::getInstance()->getDBHandle();
  83. $layout_name = "layouts/".$layout_name = $config['site']['layout'];
  84. $layout_ini = parse_ini_file($layout_name.'/layout_config.ini');
  85. foreach($layout_ini as $key => $value)
  86. $config['site'][$key] = $value;
  87. //###################### FUNCTIONS ######################
  88. function isPremium($premdays, $lastday)
  89. {
  90. return ($premdays - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $lastday))) - date("z", $lastday)) > 0);
  91. }
  92. //save config in ini file
  93. function saveconfig_ini($config)
  94. {
  95. $file = fopen("config/config.ini", "w");
  96. foreach($config as $param => $data)
  97. {
  98. $file_data .= $param.' = "'.str_replace('"', '', $data).'"
  99. ';
  100. }
  101. rewind($file);
  102. fwrite($file, $file_data);
  103. fclose($file);
  104. }
  105. //return password to db
  106. function password_ency($password)
  107. {
  108. $ency = $GLOBALS['passwordency'];
  109. if($ency == 'sha1')
  110. return sha1($password);
  111. elseif($ency == 'md5')
  112. return md5($password);
  113. elseif($ency == 'plain')
  114. return $password;
  115. elseif($ency == '')
  116. return $password;
  117. }
  118. //delete player with name
  119. function delete_player($name) {
  120. $SQL = $GLOBALS['SQL'];
  121. $player = new OTS_Player();
  122. $player->find($name);
  123. if($player->isLoaded()) {
  124. try { $SQL->query("DELETE FROM player_skills WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
  125. try { $SQL->query("DELETE FROM guild_invites WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
  126. try { $SQL->query("DELETE FROM player_items WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
  127. try { $SQL->query("DELETE FROM player_depotitems WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
  128. try { $SQL->query("DELETE FROM player_spells WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
  129. try { $SQL->query("DELETE FROM player_storage WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
  130. try { $SQL->query("DELETE FROM player_viplist WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
  131. try { $SQL->query("DELETE FROM player_deaths WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
  132. try { $SQL->query("DELETE FROM player_deaths WHERE killed_by = '".$player->getId()."';"); } catch(PDOException $error) {}
  133. $rank = $player->getRank();
  134. if(!empty($rank)){
  135. $guild = $rank->getGuild();
  136. if($guild->getOwner()->getId() == $player->getId()) {
  137. $rank_list = $guild->getGuildRanksList();
  138. if(count($rank_list) > 0) {
  139. $rank_list->orderBy('level');
  140. foreach($rank_list as $rank_in_guild) {
  141. $players_with_rank = $rank_in_guild->getPlayersList();
  142. $players_with_rank->orderBy('name');
  143. $players_with_rank_number = count($players_with_rank);
  144. if($players_with_rank_number > 0) {
  145. foreach($players_with_rank as $player_in_guild) {
  146. $player_in_guild->setRank();
  147. $player_in_guild->save();
  148. }
  149. }
  150. $rank_in_guild->delete();
  151. }
  152. $guild->delete();
  153. }
  154. }
  155. }
  156. $player->delete();
  157. return TRUE;
  158. }
  159. }
  160.  
  161. //delete guild with id
  162. function delete_guild($id){
  163. $guild = new OTS_Guild();
  164. $guild->load($id);
  165. if($guild->isLoaded()) {
  166. $rank_list = $guild->getGuildRanksList();
  167. if(count($rank_list) > 0) {
  168. $rank_list->orderBy('level');
  169. foreach($rank_list as $rank_in_guild){
  170. $players_with_rank = $rank_in_guild->getPlayersList();
  171. if(count($players_with_rank) > 0) {
  172. foreach($players_with_rank as $player_in_guild) {
  173. $player_in_guild->setRank();
  174. $player_in_guild->save();
  175. }
  176. }
  177. $rank_in_guild->delete();
  178. }
  179. }
  180. $guild->delete();
  181. return TRUE;
  182. }
  183. else
  184. return FALSE;
  185. }
  186.  
  187. //is it valid nick?
  188. function check_name($name)//sprawdza name
  189. {
  190. $temp = strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM- [ ] '");
  191. if ($temp != strlen($name)) {
  192. return false;
  193. }
  194. else
  195. {
  196. $ok = "/[a-zA-Z ']{1,25}/";
  197. return (preg_match($ok, $name))? true: false;
  198. }
  199. }
  200.  
  201. //is it valid nick?
  202. function check_account_name($name)//sprawdza name
  203. {
  204. $temp = strspn("$name", "QWERTYUIOPASDFGHJKLZXCVBNM0123456789");
  205. if ($temp != strlen($name))
  206. return false;
  207. if(strlen($name) > 32)
  208. return false;
  209. else
  210. {
  211. $ok = "/[A-Z0-9]/";
  212. return (preg_match($ok, $name))? true: false;
  213. }
  214. }
  215.  
  216. //is it valid nick for new char?
  217. function check_name_new_char($name){
  218. $name_to_check = strtolower($name);
  219. //first word can't be:
  220. //names blocked:
  221. $names_blocked = array('gm','cm', 'god', 'tutor');
  222. $first_words_blocked = array('gm ','cm ', 'god ','tutor ', "'", '-');
  223. //name can't contain:
  224. $words_blocked = array('gamemaster', 'game master', 'game-master', "game'master", '--', "''","' ", " '", '- ', ' -', "-'", "'-", 'fuck', 'sux', 'suck', 'noob', 'tutor');
  225. foreach($first_words_blocked as $word)
  226. if($word == substr($name_to_check, 0, strlen($word)))
  227. return false;
  228. if(substr($name_to_check, -1) == "'" || substr($name_to_check, -1) == "-")
  229. return false;
  230. if(substr($name_to_check, 1, 1) == ' ')
  231. return false;
  232. if(substr($name_to_check, -2, 1) == " ")
  233. return false;
  234. foreach($names_blocked as $word)
  235. if($word == $name_to_check)
  236. return false;
  237. foreach($GLOBALS['config']['site']['monsters'] as $word)
  238. if($word == $name_to_check)
  239. return false;
  240. foreach($GLOBALS['config']['site']['npc'] as $word)
  241. if($word == $name_to_check)
  242. return false;
  243. for($i = 0; $i < strlen($name_to_check); $i++)
  244. if($name_to_check[$i-1] == ' ' && $name_to_check[$i+1] == ' ')
  245. return false;
  246. foreach($words_blocked as $word)
  247. if (!(strpos($name_to_check, $word) === false))
  248. return false;
  249. for($i = 0; $i < strlen($name_to_check); $i++)
  250. if($name_to_check[$i] == $name_to_check[($i+1)] && $name_to_check[$i] == $name_to_check[($i+2)])
  251. return false;
  252. for($i = 0; $i < strlen($name_to_check); $i++)
  253. if($name_to_check[$i-1] == ' ' && $name_to_check[$i+1] == ' ')
  254. return false;
  255. $temp = strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM- '");
  256. if ($temp != strlen($name))
  257. return false;
  258. else
  259. {
  260. $ok = "/[a-zA-Z ']{1,25}/";
  261. return (preg_match($ok, $name))? true: false;
  262. }
  263. }
  264.  
  265. //is rank name valid?
  266. function check_rank_name($name)//sprawdza name
  267. {
  268. $temp = strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789-[ ] ");
  269. if ($temp != strlen($name)) {
  270. return false;
  271. }
  272. else
  273. {
  274. $ok = "/[a-zA-Z ]{1,60}/";
  275. return (preg_match($ok, $name))? true: false;
  276. }
  277. }
  278. //is guild name valid?
  279. function check_guild_name($name)
  280. {
  281. $temp = strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789- ");
  282. if ($temp != strlen($name)) {
  283. return false;
  284. }
  285. else
  286. {
  287. $ok = "/[a-zA-Z ]{1,60}/";
  288. return (preg_match($ok, $name))? true: false;
  289. }
  290. }
  291. //is it valid password?
  292. function check_password($pass)//sprawdza haslo
  293. {
  294. $temp = strspn("$pass", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890");
  295. if ($temp != strlen($pass)) {
  296. return false;
  297. }
  298. else
  299. {
  300. $ok = "/[a-zA-Z0-9]{1,40}/";
  301. return (preg_match($ok, $pass))? true: false;
  302. }
  303. }
  304. //is it valid e-mail?
  305. function check_mail($email)//sprawdza mail
  306. {
  307. $ok = "/[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,4}/";
  308. return (preg_match($ok, $email))? true: false;
  309. }
  310.  
  311. function items_on_player($characterid, $pid)
  312. {
  313. global $SQL;
  314. $item = $SQL->query("SELECT `itemtype` FROM `player_items` WHERE `pid` = '".$pid."' AND `player_id` = '".$characterid."'")->fetch();
  315. return '<img src="images/items/' . $item['itemtype'] . '.gif" />';
  316. }
  317.  
  318. function showCommentsCount( $date )
  319. {
  320. global $SQL;
  321. $result = $SQL->query("SELECT COUNT(*) as `count` FROM `z_news_comments` WHERE `news_date` = " . (int)$date . ";")->fetch();
  322. return (int)$result['count'];
  323. }
  324.  
  325. function getReason($reasonId)
  326. {
  327. switch($reasonId)
  328. {
  329. case 0:
  330. return "Offensive Name";
  331. case 1:
  332. return "Invalid Name Format";
  333. case 2:
  334. return "Unsuitable Name";
  335. case 3:
  336. return "Name Inciting Rule Violation";
  337. case 4:
  338. return "Offensive Statement";
  339. case 5:
  340. return "Spamming";
  341. case 6:
  342. return "Illegal Advertising";
  343. case 7:
  344. return "Off-Topic Public Statement";
  345. case 8:
  346. return "Non-English Public Statement";
  347. case 9:
  348. return "Inciting Rule Violation";
  349. case 10:
  350. return "Bug Abuse";
  351. case 11:
  352. return "Game Weakness Abuse";
  353. case 12:
  354. return "Using Unofficial Software to Play";
  355. case 13:
  356. return "Hacking";
  357. case 14:
  358. return "Multi-Clienting";
  359. case 15:
  360. return "Account Trading or Sharing";
  361. case 16:
  362. return "Threatening Gamemaster";
  363. case 17:
  364. return "Pretending to Have Influence on Rule Enforcement";
  365. case 18:
  366. return "False Report to Gamemaster";
  367. case 19:
  368. return "Destructive Behaviour";
  369. case 20:
  370. return "Excessive Unjustified Player Killing";
  371. case 21:
  372. return "Invalid Payment";
  373. case 22:
  374. return "Spoiling Auction";
  375. default:
  376. break;
  377. }
  378. return "Unknown Reason";
  379. }
  380.  
  381. //################### DISPLAY FUNCTIONS #####################
  382. //return shorter text (news ticker)
  383. function short_text($text, $chars_limit)
  384. {
  385. if (strlen($text) > $chars_limit)
  386. return substr($text, 0, strrpos(substr($text, 0, $chars_limit), " ")).'...';
  387. else return $text;
  388. }
  389. //return text to news msg
  390. function news_place() {
  391. if($GLOBALS['subtopic'] == "latestnews") {
  392. //add tickers to site - without it tickers will not be showed
  393. //$news .= $GLOBALS['news_content'];
  394. /*
  395. //featured article
  396. $layout_name = $GLOBALS['layout_name'];
  397. $news .= '<div id="featuredarticle" class="Box">
  398. <div class="Corner-tl" style="background-image:url('.$layout_name.'/images/content/corner-tl.gif);"></div>
  399. <div class="Corner-tr" style="background-image:url('.$layout_name.'/images/content/corner-tr.gif);"></div>
  400. <div class="Border_1" style="background-image:url('.$layout_name.'/images/content/border-1.gif);"></div>
  401. <div class="BorderTitleText" style="background-image:url('.$layout_name.'/images/content/title-background-green.gif);"></div>
  402. <img class="Title" src="'.$layout_name.'/images/strings/headline-featuredarticle.gif" alt="Contentbox headline" />
  403. <div class="Border_2">
  404. <div class="Border_3">
  405. <div class="BoxContent" style="background-image:url('.$layout_name.'/images/content/scroll.gif);">
  406. <div id=\'TeaserThumbnail\'><img src="'.$layout_name.'/images/news/features.jpg" width=150 height=100 border=0 alt="" /></div><div id=\'TeaserText\'><div style="position: relative; top: -2px; margin-bottom: 2px;" >
  407. <b>Tutaj wpisz tytul</b></div>
  408. tutaj wpisz tresc newsa<br>
  409. zdjecie laduje sie w <i>tibiacom/images/news/features.jpg</i><br>
  410. skad sie laduje mozesz zmienic linijke ponad komentarzem
  411. </div> </div>
  412. </div>
  413. </div>
  414. <div class="Border_1" style="background-image:url('.$layout_name.'/images/content/border-1.gif);"></div>
  415. <div class="CornerWrapper-b"><div class="Corner-bl" style="background-image:url('.$layout_name.'/images/content/corner-bl.gif);"></div></div>
  416. <div class="CornerWrapper-b"><div class="Corner-br" style="background-image:url('.$layout_name.'/images/content/corner-br.gif);"></div></div>
  417. </div>';
  418. */
  419. }
  420. return $news;
  421. }
  422. //set monster of week
  423. function logo_monster() {
  424. return str_replace(" ", "", trim(mb_strtolower($GLOBALS['layout_ini']['logo_monster'])));
  425. }
  426. $statustimeout = 1;
  427. foreach(explode("*", str_replace(" ", "", $config['server']['statusTimeout'])) as $status_var)
  428. if($status_var > 0)
  429. $statustimeout = $statustimeout * $status_var;
  430. $statustimeout = $statustimeout / 1000;
  431. $config['status'] = parse_ini_file('config/serverstatus');
  432. if($config['status']['serverStatus_lastCheck']+$statustimeout < time())
  433. {
  434. $config['status']['serverStatus_checkInterval'] = $statustimeout+3;
  435. $config['status']['serverStatus_lastCheck'] = time();
  436. $info = chr(6).chr(0).chr(255).chr(255).'info';
  437. $sock = @fsockopen($config['server']['ip'], $config['server']['statusPort'], $errno, $errstr, 1);
  438. if ($sock)
  439. {
  440. fwrite($sock, $info);
  441. $data='';
  442. while (!feof($sock))
  443. $data .= fgets($sock, 1024);
  444. fclose($sock);
  445. preg_match('/players online="(\d+)" max="(\d+)"/', $data, $matches);
  446. $config['status']['serverStatus_online'] = 1;
  447. $config['status']['serverStatus_players'] = $matches[1];
  448. $config['status']['serverStatus_playersMax'] = $matches[2];
  449. preg_match('/uptime="(\d+)"/', $data, $matches);
  450. $h = floor($matches[1] / 3600);
  451. $m = floor(($matches[1] - $h*3600) / 60);
  452. $config['status']['serverStatus_uptime'] = $h.'h '.$m.'m';
  453. preg_match('/monsters total="(\d+)"/', $data, $matches);
  454. $config['status']['serverStatus_monsters'] = $matches[1];
  455. }
  456. else
  457. {
  458. $config['status']['serverStatus_online'] = 0;
  459. $config['status']['serverStatus_players'] = 0;
  460. $config['status']['serverStatus_playersMax'] = 0;
  461. }
  462. $file = fopen("config/serverstatus", "w");
  463. foreach($config['status'] as $param => $data)
  464. {
  465. $file_data .= $param.' = "'.str_replace('"', '', $data).'"
  466. ';
  467. }
  468. rewind($file);
  469. fwrite($file, $file_data);
  470. fclose($file);
  471. }
  472.  
  473. //PAGE VIEWS COUNTER :)
  474. $views_counter = "usercounter.dat";
  475. // checking if the file exists
  476. if (file_exists($views_counter)) {
  477. // het bestand bestaat, waarde + 1
  478. $actie = fopen($views_counter, "r+");
  479. $page_views = fgets($actie, 9);
  480. $page_views++;
  481. rewind($actie);
  482. fputs($actie, $page_views, 9);
  483. fclose($actie);
  484. }
  485. else
  486. {
  487. // the file doesn't exist, creating a new one with value 1
  488. $actie = fopen($views_counter, "w");
  489. $page_views = 1;
  490. fputs($actie, $page_views, 9);
  491. fclose($actie);
  492. }
  493.  
  494. function makeOrder($arr, $order, $default) {
  495. // Function by Colandus!
  496. $type = 'asc';
  497. if(isset($_GET['order'])) {
  498. $v = explode('_', strrev($_GET['order']), 2);
  499. if(count($v) == 2)
  500. if($orderBy = $arr[strrev($v[1])])
  501. $default = $orderBy;
  502. $type = (strrev($v[0]) == 'asc' ? 'desc' : 'asc');
  503. }
  504. {
  505. return 'ORDER BY ' . $default . ' ' . $type;
  506. }
  507. {
  508. function getOrder($arr, $order, $this)
  509.  
  510. // Function by Colandus!
  511.  
  512. {$type = 'asc';
  513. if($orderBy = $arr[$this])
  514. if(isset($_GET[$order])) {
  515. $v = explode('_', strrev($_GET[$order]), 2);
  516. if(strrev($v[1]) == $this)
  517. $type = (strrev($v[0]) == 'asc' ? 'desc' : 'asc');
  518. }
  519.  
  520. return $this . '_' . $type;
  521. }
  522. // Parse smiley bbcode into HTML images
  523. function parsesmileys($message)
  524. {
  525. foreach(array(
  526. "/\:\)/si" => "<img src='images/smiley/smile.gif' title='Smile'>",
  527. "/\;\)/si" => "<img src='images/smiley/wink.gif' title='Wink'>",
  528. "/\:\(/si" => "<img src='images/smiley/sad.gif' title='Sad'>",
  529. "/\:\|/si" => "<img src='images/smiley/frown.gif' title='Frown'>",
  530. "/\:o/si" => "<img src='images/smiley/shock.gif' title='Shock'>",
  531. "/\:p/si" => "<img src='images/smiley/pfft.gif' title='Pfft!'>",
  532. "/b\)/si" => "<img src='images/smiley/cool.gif' title='Cool...'>",
  533. "/\:d/si" => "<img src='images/smiley/grin.gif' title='Grin'>",
  534. "/\:@/si" => "<img src='images/smiley/angry.gif' title='Angry'>",
  535. "/\:rol:/si" => "<img title='Rolleyes...' src='images/smiley/roll.gif'>",
  536. "/\:uhoh:/si" => "<img title='Uh-Oh!' src='images/smiley/uhoh.gif'>",
  537. "/\:no:/si" => "<img title='Nope' src='images/smiley/no.gif'>",
  538. "/\:shy:/si" => "<img title='Shy' src='images/smiley/shy.gif'>",
  539. "/\:lol:/si" => "<img title='Laugh' src='images/smiley/laugh.gif'>",
  540. "/\:rip:/si" => "<img title='Dead...' src='images/smiley/dead.gif'>",
  541. "/\:yes:/si" => "<img title='Yeah' src='images/smiley/yes.gif'>",
  542. "/\:mad:/si" => "<img title='Mad' src='images/smiley/mad.gif'>",
  543. "/\:bigeek:/si" => "<img title='Big eek!' src='images/smiley/bigeek.gif'>",
  544. "/\:bigrazz:/si" => "<img title='Big razz' src='images/smiley/bigrazz.gif'>",
  545. "/\:smilewinkgrin:/si" => "<img title='Smile-Wink-Grin' src='images/smiley/smilewinkgrin.gif'>",
  546. "/\:sourgrapes:/si" => "<img title='Sour Grapes' src='images/smiley/sourgrapes.gif'>",
  547. "/\:confused:/si" => "<img title='Confused?' src='images/smiley/confused.gif'>",
  548. "/\:upset:/si" => "<img title='Upset' src='images/smiley/upset.gif'>",
  549. "/\:sleep:/si" => "<img title='Sleep' src='images/smiley/sleep.gif'>",
  550. "/\:yupi:/si" => "<img title='Yupi!' src='images/smiley/jupi.gif'>"
  551. ) as $key => $img)
  552. $message = preg_replace($key, $img, $message);
  553.  
  554. return $message;
  555. }
  556.  
  557. // Parse bbcode into HTML code
  558. function parseubb($text)
  559. {
  560. global $account_logged;
  561. $text = preg_replace('#\[b\](.*?)\[/b\]#si', '<b>\1</b>', $text);
  562.  
  563. $text = preg_replace('#\[i\](.*?)\[/i\]#si', '<i>\1</i>', $text);
  564. $text = preg_replace('#\[u\](.*?)\[/u\]#si', '<u>\1</u>', $text);
  565. $text = preg_replace('#\[s\](.*?)\[/s\]#si', '<s>\1</s>', $text);
  566. $text = preg_replace('#\[center\](.*?)\[/center\]#si', '<center>\1</center>', $text);
  567.  
  568. $text = preg_replace('#\[url\]([\r\n\s]*)(http://|ftp://|https://|ftps://)([^\s\'\"\+\(\)]*?)([\r\n\s]*)\[/url\]#sie', "'<a href=\''.str_replace('<br>', '', '\\2\\3').'\' target=\'_blank\' title=\''.str_replace('<br>', '', '\\2\\3').'\'>\\2\\3</a>'", $text);
  569. $text = preg_replace('#\[url\] ([\r\n]*)([^\s\'\"\+\(\)]*?)([\r\n]*) \[/url\]#sie', "'<a href=\'http://'.str_replace('<br>', '', '\\2').'\' target=\'_blank\' title=\''.str_replace('<br>', '', '\\2').'\'>\\2</a>'", $text);
  570. $text = preg_replace('#\[url=([\r\n]*)(http://|ftp://|https://|ftps://)([^\s\'\"\+\(\)]*?)\](.*?)([\r\n]*)\[/url\]#sie', "'<a href=\''.str_replace('<br>', '', '\\2\\3').'\' target=\'_blank\' title=\''.str_replace('<br>', '', '\\2\\3').'\'>\\4</a>'", $text);
  571. $text = preg_replace('#\[url=([\r\n]*)([^\s\'\"\+\(\)]*?)\](.*?)([\r\n]*)\[/url\]#sie', "'<a href=\'http://'.str_replace('<br>', '', '\\2').'\' target=\'_blank\' title=\''.str_replace('<br>', '', '\\2').'\'>\\3</a>'", $text);
  572.  
  573. $text = preg_replace('#\[mail\]([\r\n]*)([^\s\'\";:\+]*?)([\r\n]*)\[/mail\]#si', '<a href=\'mailto:\2\'>\2</a>', $text);
  574. $text = preg_replace('#\[mail=([\r\n]*)([^\s\'\";:\+]*?)\](.*?)([\r\n]*)\[/mail\]#si', '<a href=\'mailto:\2\'>\2</a>', $text);
  575.  
  576. $text = preg_replace('#\[small\](.*?)\[/small\]#si', '<small>\1</small>', $text);
  577. $text = preg_replace('#\[color=(black|blue|brown|cyan|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|violet|white|yellow)\](.*?)\[/color\]#si', '<span style=\'color:\1\'>\2</span>', $text);
  578.  
  579. if($account_logged)
  580. $text = preg_replace('#\[hide\](.*?)\[/hide\]#si', '\1', $text);
  581.  
  582. $text = preg_replace('#\[size=(8|10|12|14|16|18|20)\](.*?)\[/size\]#si', '<span style=\'font-size: \1;\'>\2</span>', $text);
  583. $text = preg_replace('#\[marquee\](.*?)\[/marquee\]#si', '<marquee>\1</marquee>', $text);
  584. $text = preg_replace('#\[marquee=(left|down|up|right)\](.*?)\[/marquee\]#si', '<marquee direction=\'\1\'>\2</marquee>', $text);
  585. $text = preg_replace('#\[marquee=(left|down|up|right):(scroll|slide|alternate)\](.*?)\[/marquee\]#si', '<marquee direction=\'\1\' behavior=\'\2\'>\3</marquee>', $text);
  586.  
  587. $text = preg_replace('#\[flash width=([0-9]*?) height=([0-9]*?)\]([^\s\'\";:\+]*?)(\.swf)\[/flash\]#si', '<object classid=\'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\' codebase=\'http://active.macromedia.com/flash6/cabs/swflash.cab#version=6,0,0,0\' id=\'\3\4\' width=\'\1\' height=\'\2\'><param name=movie value=\'\3\4\'><param name=\'quality\' value=\'high\'><param name=\'bgcolor\' value=\'#ffffff\'><embed src=\'\3\4\' quality=\'high\' bgcolor=\'#ffffff\' width=\'\1\' height=\'\2\' type=\'application/x-shockwave-flash\' pluginspage=\'http://www.macromedia.com/go/getflashplayer\'></embed></object>', $text);
  588. $text = preg_replace("#\[img\]((http|ftp|https|ftps)://)(.*?)(\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/img\]#sie","'<img src=\'\\1'.str_replace(array('.php','?','&','='),'','\\3').'\\4\' style=\'border:0px\' alt=\'\'>'",$text);
  589.  
  590. $qcount = substr_count($text, "[quote]");
  591. for($i=0;$i<$qcount;$i++)
  592. $text = preg_replace('#\[quote\](.*?)\[/quote\]#si', '<div class=\'quote\'>\1</div>', $text);
  593.  
  594. $ccount = substr_count($text, "[code]");
  595. for($i=0;$i<$ccount;$i++)
  596. $text = preg_replace('#\[code\](.*?)\[/code\]#si', '<div class=\'quote\' style=\'width:400px;white-space:nowrap;overflow:auto\'><code style=\'white-space:nowrap\'>\1<br><br><br></code></div>', $text);
  597.  
  598. return descript($text, false);
  599. }
  600.  
  601. function descript($text, $striptags = true)
  602. {
  603. // Convert problematic ascii characters to their true values
  604. $search = array("40","41","58","65","66","67","68","69","70",
  605. "71","72","73","74","75","76","77","78","79","80","81",
  606. "82","83","84","85","86","87","88","89","90","97","98",
  607. "99","100","101","102","103","104","105","106","107",
  608. "108","109","110","111","112","113","114","115","116",
  609. "117","118","119","120","121","122"
  610. );
  611. $replace = array("(",")",":","a","b","c","d","e","f","g","h",
  612. "i","j","k","l","m","n","o","p","q","r","s","t","u",
  613. "v","w","x","y","z","a","b","c","d","e","f","g","h",
  614. "i","j","k","l","m","n","o","p","q","r","s","t","u",
  615. "v","w","x","y","z"
  616. );
  617.  
  618. $entities = count($search);
  619. for($i=0;$i<$entities;$i++)
  620. $text = preg_replace("#(&\#)(0*".$search[$i]."+);*#si", $replace[$i], $text);
  621.  
  622. // kill hexadecimal characters completely
  623. $text = preg_replace('#(&\#x)([0-9A-F]+);*#si', "", $text);
  624. // remove any attribute starting with "on" or xmlns
  625. $text = preg_replace('#(<[^>]+[\\"\'\s])(onmouseover|onmousedown|onmouseup|onmouseout|onmousemove|onclick|ondblclick|onload|xmlns)[^>]*>#iU', ">", $text);
  626. // remove javascript: and vbscript: protocol
  627. $text = preg_replace('#([a-z]*)=([\`\'\"]*)script:#iU', '$1=$2nojscript...', $text);
  628. $text = preg_replace('#([a-z]*)=([\`\'\"]*)javascript:#iU', '$1=$2nojavascript...', $text);
  629. $text = preg_replace('#([a-z]*)=([\'\"]*)vbscript:#iU', '$1=$2novbscript...', $text);
  630. //<span style="width: expression(alert('Ping!'));"></span> (only affects ie...)
  631. $text = preg_replace('#(<[^>]+)style=([\`\'\"]*).*expression\([^>]*>#iU', "$1>", $text);
  632. $text = preg_replace('#(<[^>]+)style=([\`\'\"]*).*behaviour\([^>]*>#iU', "$1>", $text);
  633. if(!$striptags)
  634. return $text;
  635.  
  636. do
  637. {
  638. $tmp = $text;
  639. $text = preg_replace('#</*(applet|meta|xml|blink|link|style|script|embed|object|iframe|frame|frameset|ilayer|layer|bgsound|title|base)[^>]*>#i', "", $text);
  640. } while($tmp != $text);
  641. return $text;
  642. }
  643.  
  644. function verifyimage($file)
  645. {
  646. $txt = file_get_contents($file);
  647. if(preg_match("#([a-z]*)=([\`\'\"]*)script:#iU", $txt)) return false;
  648. if(preg_match("#([a-z]*)=([\`\'\"]*)javascript:#iU", $txt)) return false;
  649. if(preg_match("#([a-z]*)=([\'\"]*)vbscript:#iU", $txt)) return false;
  650. if(preg_match("#(<[^>]+)style=([\`\'\"]*).*expression\([^>]*>#iU", $txt)) return false;
  651. if(preg_match("#(<[^>]+)style=([\`\'\"]*).*behaviour\([^>]*>#iU", $txt)) return false;
  652. if(preg_match("#</*(applet|body|head|html|link|style|script|iframe|frame|frameset)[^>]*>#i", $txt)) return false;
  653. return true;
  654. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement