PageRenderTime 49ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/livehelp/_lib/functions.global.inc.php

https://bitbucket.org/spivovartsev/citrus.ua
PHP | 1450 lines | 1368 code | 71 blank | 11 comment | 145 complexity | cd89cd59223ece2b331d0e6da7a69a4c MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. /****************************************************************************************
  3. * LiveZilla functions.global.inc.php
  4. *
  5. * Copyright 2011 LiveZilla GmbH
  6. * All rights reserved.
  7. * LiveZilla is a registered trademark.
  8. *
  9. * Improper changes to this file may cause critical errors.
  10. ***************************************************************************************/
  11. if(!defined("IN_LIVEZILLA"))
  12. die();
  13. function defineURL($_file)
  14. {
  15. global $CONFIG;
  16. if(!empty($_SERVER['REQUEST_URI']))
  17. {
  18. $parts = parse_url($_SERVER['REQUEST_URI']);
  19. define("LIVEZILLA_URL",getScheme() . $CONFIG["gl_host"] . str_replace($_file,"",$parts["path"]));
  20. }
  21. else
  22. define("LIVEZILLA_URL",getScheme() . $_SERVER["HTTP_HOST"] . str_replace($_file,"",$_SERVER["PHP_SELF"]));
  23. }
  24. function initStatisticProvider()
  25. {
  26. global $STATS;
  27. require(LIVEZILLA_PATH . "_lib/objects.stats.inc.php");
  28. $STATS = new StatisticProvider();
  29. }
  30. function loadConfig()
  31. {
  32. global $CONFIG;
  33. require(LIVEZILLA_PATH . "_config/config.inc.php");
  34. foreach($CONFIG as $key => $value)
  35. {
  36. if(is_array($value))
  37. {
  38. foreach($value as $skey => $svalue)
  39. $CONFIG[$key][$skey]=base64_decode($svalue);
  40. }
  41. else
  42. $CONFIG[$key]=base64_decode($value);
  43. }
  44. if(empty($CONFIG["gl_host"]))
  45. $CONFIG["gl_host"] = $_SERVER["HTTP_HOST"];
  46. if(!empty($CONFIG["gl_stmo"]) && !(defined("SERVERSETUP") && SERVERSETUP))
  47. {
  48. $CONFIG["poll_frequency_tracking"] = 86400;
  49. $CONFIG["timeout_track"] = 0;
  50. }
  51. if(function_exists("date_default_timezone_set"))
  52. {
  53. if(getSystemTimezone() !== false)
  54. @date_default_timezone_set(getSystemTimezone());
  55. else
  56. @date_default_timezone_set('Europe/Dublin');
  57. }
  58. }
  59. function handleError($_errno, $_errstr, $_errfile, $_errline)
  60. {
  61. if(error_reporting()!=0)
  62. errorLog(date("d.m.y H:i") . " ERR# " . $_errno." ".$_errstr." ".$_errfile." IN LINE ".$_errline."\r");
  63. }
  64. function getAvailability()
  65. {
  66. return (@file_exists(FILE_SERVER_DISABLED)) ? false : true;
  67. }
  68. function slashesStrip($_value)
  69. {
  70. if (@get_magic_quotes_gpc() == 1 || strtolower(@get_magic_quotes_gpc()) == "on")
  71. return stripslashes($_value);
  72. return $_value;
  73. }
  74. function getIdle()
  75. {
  76. if(file_exists(FILE_SERVER_IDLE) && @filemtime(FILE_SERVER_IDLE) < (time()-15))
  77. @unlink(FILE_SERVER_IDLE);
  78. return file_exists(FILE_SERVER_IDLE);
  79. }
  80. function getIP($_dontmask=false,$ip="")
  81. {
  82. global $CONFIG;
  83. $params = array($CONFIG["gl_sipp"]);
  84. foreach($params as $param)
  85. if(!empty($_SERVER[$param]))
  86. {
  87. $ipf = $_SERVER[$param];
  88. if(strpos($ipf,",") !== false)
  89. {
  90. $parts = explode(",",$ipf);
  91. foreach($parts as $part)
  92. if(substr_count($part,".") == 3)
  93. $ip = trim($part);
  94. }
  95. else if(substr_count($ipf,".") == 3)
  96. $ip = trim($ipf);
  97. }
  98. if(empty($ip))
  99. $ip = $_SERVER["REMOTE_ADDR"];
  100. if(!$CONFIG["gl_maskip"] || $_dontmask)
  101. return $ip;
  102. else
  103. {
  104. $parts = explode(".",$ip);
  105. return $parts[0].".".$parts[1].".".$parts[2].".xxx";
  106. }
  107. }
  108. function getHost()
  109. {
  110. global $CONFIG;
  111. $ip = getIP(true);
  112. $host = @utf8_encode(@gethostbyaddr($ip));
  113. if($CONFIG["gl_maskip"])
  114. {
  115. $parts = explode(".",$ip);
  116. return str_replace($parts[3],"xxx",$host);
  117. }
  118. else
  119. return $host;
  120. }
  121. function getTimeDifference($_time)
  122. {
  123. $_time = (time() - $_time);
  124. if(abs($_time) <= 5)
  125. $_time = 0;
  126. return $_time;
  127. }
  128. function parseBool($_value,$_toString=true)
  129. {
  130. if($_toString)
  131. return ($_value) ? "true" : "false";
  132. else
  133. return ($_value) ? "1" : "0";
  134. }
  135. function namebase($_path)
  136. {
  137. $file = basename($_path);
  138. if (strpos($file,'\\') !== false)
  139. {
  140. $tmp = preg_split("[\\\]",$file);
  141. $file = $tmp[count($tmp) - 1];
  142. return $file;
  143. }
  144. else
  145. return $file;
  146. }
  147. function getScheme()
  148. {
  149. $scheme = SCHEME_HTTP;
  150. if(!empty($_SERVER["HTTPS"]) && strtolower($_SERVER["HTTPS"]) == "on")
  151. $scheme = SCHEME_HTTP_SECURE;
  152. if(!empty($_SERVER["HTTP_X_FORWARDED_PROTO"]) && strtolower($_SERVER["HTTP_X_FORWARDED_PROTO"]) == "https")
  153. $scheme = SCHEME_HTTP_SECURE;
  154. else if(!empty($_SERVER["SERVER_PORT"]) && $_SERVER["SERVER_PORT"] == 443)
  155. $scheme = SCHEME_HTTP_SECURE;
  156. return $scheme;
  157. }
  158. function doReplacements($_toReplace)
  159. {
  160. global $CONFIG,$LZLANG;
  161. if(!isset($LZLANG))
  162. languageSelect();
  163. $to_replace_nam = Array("lang","config");
  164. $to_replace_con = Array("lang"=>$LZLANG,"config"=>$CONFIG);
  165. foreach ($to_replace_nam as $nam_e)
  166. foreach($to_replace_con[$nam_e] as $short => $value)
  167. if(!is_array($value))
  168. $_toReplace = str_replace("<!--".$nam_e."_".$short."-->",$value,$_toReplace);
  169. else
  170. foreach($value as $subKey => $subValue)
  171. $_toReplace = str_replace("<!--".$nam_e."_".$subKey."-->",$subValue,$_toReplace);
  172. return str_replace("<!--file_chat-->",FILE_CHAT,$_toReplace);
  173. }
  174. function getGeoURL()
  175. {
  176. global $CONFIG;
  177. if(!empty($CONFIG["gl_pr_ngl"]))
  178. return CONFIG_LIVEZILLA_GEO_PREMIUM;
  179. else
  180. return CONFIG_LIVEZILLA_GEO;
  181. }
  182. function geoReplacements($_toReplace, $jsa = "")
  183. {
  184. global $CONFIG,$LZLANG;
  185. $_toReplace = str_replace("<!--geo_url-->",getGeoURL() . "?aid=" . $CONFIG["wcl_geo_tracking"]."&dbp=".$CONFIG["gl_gtdb"],$_toReplace);
  186. if(!isnull(trim($CONFIG["gl_pr_ngl"])))
  187. {
  188. $jsc = "var chars = new Array(";
  189. $jso = "var order = new Array(";
  190. $chars = str_split(sha1($CONFIG["gl_pr_ngl"] . date("d"),false));
  191. $keys = array_keys($chars);
  192. shuffle($keys);
  193. foreach($keys as $key)
  194. {
  195. $jsc .= "'" . $chars[$key] . "',";
  196. $jso .= $key . ",";
  197. }
  198. $jsa .= $jsc . "0);\r\n";$jsa .= $jso . "0);\r\n";
  199. $jsa .= "while(oak.length < (chars.length-1))for(var f in order)if(order[f] == oak.length)oak += chars[f];\r\n";
  200. }
  201. $_toReplace = str_replace("<!--calcoak-->",$jsa,$_toReplace);
  202. return $_toReplace;
  203. }
  204. function processHeaderValues()
  205. {
  206. if(!empty($_SERVER["HTTP_INTERN_AUTHENTICATION_USERID"]))
  207. {
  208. $_POST[POST_INTERN_AUTHENTICATION_USERID] = base64_decode($_SERVER["HTTP_INTERN_AUTHENTICATION_USERID"]);
  209. $_POST[POST_INTERN_AUTHENTICATION_PASSWORD] = base64_decode($_SERVER["HTTP_INTERN_AUTHENTICATION_PASSWORD"]);
  210. $_POST[POST_INTERN_FILE_TYPE] = $_SERVER["HTTP_INTERN_FILE_TYPE"];
  211. $_POST[POST_SERVER_REQUEST_TYPE] = $_SERVER["HTTP_SERVER_REQUEST_TYPE"];
  212. $_POST[POST_INTERN_SERVER_ACTION] = $_SERVER["HTTP_INTERN_SERVER_ACTION"];
  213. }
  214. if(!empty($_SERVER["HTTP_ADMINISTRATE"]))
  215. $_POST[POST_INTERN_ADMINISTRATE] = $_SERVER["HTTP_ADMINISTRATE"];
  216. }
  217. function getServerAddLink($_scheme)
  218. {
  219. global $CONFIG;
  220. return PROTOCOL . "://" . base64_encode($_scheme . $CONFIG["gl_host"] . "/" . str_replace("index.php","",$_SERVER["PHP_SELF"])) . "|" . base64_encode($CONFIG["gl_site_name"] . " (" . $CONFIG["gl_host"] .")");
  221. }
  222. function getInternalSystemIdByUserId($_userId)
  223. {
  224. global $INTERNAL;
  225. foreach($INTERNAL as $sysId => $intern)
  226. {
  227. if($intern->UserId == $_userId)
  228. return $sysId;
  229. }
  230. return null;
  231. }
  232. function md5file($_file)
  233. {
  234. global $RESPONSE;
  235. $md5file = @md5_file($_file);
  236. if(gettype($md5file) != 'boolean' && $md5file != false)
  237. return $md5file;
  238. }
  239. function getFile($_file,$data="")
  240. {
  241. if(@file_exists($_file) && strpos($_file,"..") === false)
  242. {
  243. $handle = @fopen($_file,"r");
  244. if($handle)
  245. {
  246. $data = @fread($handle,@filesize($_file));
  247. @fclose ($handle);
  248. }
  249. return $data;
  250. }
  251. }
  252. function getParam($_getParam)
  253. {
  254. if(isset($_GET[$_getParam]))
  255. return $_GET[$_getParam];
  256. else
  257. return null;
  258. }
  259. function getParams($_getParams="")
  260. {
  261. foreach($_GET as $key => $value)
  262. if($key != "template")
  263. $_getParams.=((strlen($_getParams) == 0) ? $_getParams : "&") . urlencode($key) ."=" . urlencode($value);
  264. return $_getParams;
  265. }
  266. function getCustomParams($_getParams="",$_fromHistory=null)
  267. {
  268. foreach($_GET as $key => $value)
  269. if(strlen($key) == 3 && substr($key,0,2) == "cf")
  270. $_getParams.= "&" . $key ."=" . htmlentities($value);
  271. if($_getParams=="" && is_array($_fromHistory))
  272. foreach($_fromHistory as $key => $value)
  273. if(!empty($value))
  274. $_getParams.= "&cf" . $key ."=" . base64UrlEncode($value);
  275. return $_getParams;
  276. }
  277. function getJSCustomArray($_getCustomParams="",$_fromHistory=null)
  278. {
  279. for($i=0;$i<=9;$i++)
  280. {
  281. if(!empty($_getCustomParams))
  282. $_getCustomParams .= ",";
  283. if(isset($_GET["cf".$i]) && !empty($_GET["cf".$i]))
  284. {
  285. $_getCustomParams.= "'" . htmlentities($_GET["cf".$i],ENT_QUOTES,"UTF-8") . "'";
  286. }
  287. else if(!isnull(getCookieValue("cf_" . $i)))
  288. {
  289. $_getCustomParams.= "'" . base64UrlEncode(getCookieValue("cf_" . $i)) . "'";
  290. }
  291. else if(is_array($_fromHistory) && isset($_fromHistory[$i]) && !empty($_fromHistory[$i]))
  292. {
  293. $_getCustomParams.= "'" . base64UrlEncode($_fromHistory[$i]) . "'";
  294. }
  295. else
  296. $_getCustomParams.= "''";
  297. }
  298. return $_getCustomParams;
  299. }
  300. function getCustomArray()
  301. {
  302. $_getCustomParams = array('','','','','','','','','','');
  303. for($i=0;$i<=9;$i++)
  304. {
  305. if(isset($_GET["cf" . $i]) && !empty($_GET["cf" . $i]))
  306. {
  307. $_getCustomParams[$i] = base64UrlDecode($_GET["cf" . $i]);
  308. }
  309. else if(isset($_POST["p_cf" . $i]) && !empty($_POST["p_cf" . $i]))
  310. {
  311. $_getCustomParams[$i] = base64UrlDecode($_POST["p_cf" . $i]);
  312. }
  313. else if(isset($_POST["form_" . $i]) && !empty($_POST["form_" . $i]))
  314. {
  315. $_getCustomParams[$i] = $_POST["form_" . $i];
  316. }
  317. else if(!isnull(getCookieValue("cf_" . $i)))
  318. {
  319. $_getCustomParams[$i] = getCookieValue("cf_" . $i);
  320. }
  321. }
  322. return $_getCustomParams;
  323. }
  324. function cfgFileSizeToBytes($_configValue)
  325. {
  326. $_configValue = strtolower(trim($_configValue));
  327. $last = substr($_configValue,strlen($_configValue)-1,1);
  328. switch($last)
  329. {
  330. case 'g':
  331. $_configValue *= 1024;
  332. case 'm':
  333. $_configValue *= 1024;
  334. case 'k':
  335. $_configValue *= 1024;
  336. }
  337. return floor($_configValue);
  338. }
  339. function AJAXDecode($value="")
  340. {
  341. return base64UrlDecode($value);
  342. }
  343. function createFile($_filename,$_content,$_recreate)
  344. {
  345. if(strpos($_filename,"..") === false)
  346. {
  347. if(file_exists($_filename))
  348. {
  349. if($_recreate)
  350. @unlink($_filename);
  351. else
  352. return 0;
  353. }
  354. $handle = @fopen($_filename,"w");
  355. if(strlen($_content)>0)
  356. @fputs($handle,$_content);
  357. @fclose($handle);
  358. return 1;
  359. }
  360. return 0;
  361. }
  362. function b64dcode(&$_a,$_b)
  363. {
  364. $_a = base64_decode($_a);
  365. }
  366. function base64UrlDecode($_input)
  367. {
  368. return base64_decode(str_replace(array('_','-',','),array('=','+','/'),$_input));
  369. }
  370. function base64UrlEncode($_input)
  371. {
  372. return str_replace(array('=','+','/'),array('_','-',','),base64_encode($_input));
  373. }
  374. function cutString($_string,$_maxlength)
  375. {
  376. if(strlen($_string)>$_maxlength)
  377. return substr($_string,0,$_maxlength);
  378. return $_string;
  379. }
  380. function base64ToFile($_filename,$_content)
  381. {
  382. if(@file_exists($_filename))
  383. @unlink($_filename);
  384. $handle = @fopen($_filename,"wb");
  385. @fputs($handle,base64_decode($_content));
  386. @fclose($handle);
  387. }
  388. function fileToBase64($_filename)
  389. {
  390. if(@filesize($_filename) == 0)
  391. return "";
  392. $handle = @fopen($_filename,"rb");
  393. $content = @fread($handle,@filesize($_filename));
  394. @fclose($handle);
  395. return base64_encode($content);
  396. }
  397. function initData($_internal=false,$_groups=false,$_visitors=false,$_filters=false,$_events=false,$_languages=false,$_countries=false)
  398. {
  399. global $INTERNAL,$GROUPS,$LANGUAGES,$COUNTRIES,$FILTERS,$EVENTS,$VISITORS;
  400. if($_internal && empty($INTERNAL))loadInternals();
  401. if($_groups && empty($GROUPS))loadGroups();
  402. if($_languages && empty($LANGUAGES))loadLanguages();
  403. if($_countries && empty($COUNTRIES))loadCountries();
  404. if($_filters && empty($FILTERS))loadFilters();
  405. if($_events && empty($EVENTS))loadEvents();
  406. if($_visitors && empty($VISITORS))loadVisitors();
  407. }
  408. function getData($_internal,$_groups,$_visitors,$_filters,$_events=false)
  409. {
  410. if($_internal)loadInternals();
  411. if($_groups)loadGroups();
  412. if($_visitors)loadVisitors();
  413. if($_filters)loadFilters();
  414. if($_events)loadEvents();
  415. }
  416. function loadLanguages()
  417. {
  418. global $LANGUAGES;
  419. require("./_lib/objects.languages.inc.php");
  420. }
  421. function loadCountries()
  422. {
  423. global $COUNTRIES,$COUNTRY_ALIASES;
  424. require("./_lib/objects.countries.inc.php");
  425. }
  426. function loadFilters()
  427. {
  428. global $FILTERS;
  429. $FILTERS = new FilterList();
  430. }
  431. function loadEvents()
  432. {
  433. global $EVENTS;
  434. $EVENTS = new EventList();
  435. $result = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_EVENTS."` ORDER BY `priority` DESC;");
  436. while($row = @mysql_fetch_array($result, MYSQL_BOTH))
  437. {
  438. $Event = new Event($row);
  439. $result_urls = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_EVENT_URLS."` WHERE `eid`='".@mysql_real_escape_string($Event->Id)."';");
  440. while($row_url = @mysql_fetch_array($result_urls, MYSQL_BOTH))
  441. {
  442. $EventURL = new EventURL($row_url);
  443. $Event->URLs[$EventURL->Id] = $EventURL;
  444. }
  445. $result_funnel_urls = queryDB(true,"SELECT `ind`,`uid` FROM `".DB_PREFIX.DATABASE_EVENT_FUNNELS."` WHERE `eid`='".@mysql_real_escape_string($Event->Id)."';");
  446. while($funnel_url = @mysql_fetch_array($result_funnel_urls, MYSQL_BOTH))
  447. {
  448. $Event->FunnelUrls[$funnel_url["ind"]] = $funnel_url["uid"];
  449. }
  450. $result_actions = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_EVENT_ACTIONS."` WHERE `eid`='".@mysql_real_escape_string($Event->Id)."';");
  451. while($row_action = @mysql_fetch_array($result_actions, MYSQL_BOTH))
  452. {
  453. $EventAction = new EventAction($row_action);
  454. $Event->Actions[$EventAction->Id] = $EventAction;
  455. if($EventAction->Type==2)
  456. {
  457. $result_action_invitations = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_EVENT_ACTION_INVITATIONS."` WHERE `action_id`='".@mysql_real_escape_string($EventAction->Id)."';");
  458. $row_invitation = @mysql_fetch_array($result_action_invitations, MYSQL_BOTH);
  459. $EventAction->Invitation = new Invitation($row_invitation);
  460. $result_senders = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_EVENT_ACTION_SENDERS."` WHERE `pid`='".@mysql_real_escape_string($EventAction->Invitation->Id)."' ORDER BY `priority` DESC;");
  461. while($row_sender = @mysql_fetch_array($result_senders, MYSQL_BOTH))
  462. {
  463. $InvitationSender = new EventActionSender($row_sender);
  464. $EventAction->Invitation->Senders[$InvitationSender->Id] = $InvitationSender;
  465. }
  466. }
  467. else if($EventAction->Type==4)
  468. {
  469. $result_action_website_pushs = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_EVENT_ACTION_WEBSITE_PUSHS."` WHERE `action_id`='".@mysql_real_escape_string($EventAction->Id)."';");
  470. $row_website_push = @mysql_fetch_array($result_action_website_pushs, MYSQL_BOTH);
  471. $EventAction->WebsitePush = new WebsitePush($row_website_push,true);
  472. $result_senders = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_EVENT_ACTION_SENDERS."` WHERE `pid`='".@mysql_real_escape_string($EventAction->WebsitePush->Id)."' ORDER BY `priority` DESC;");
  473. while($row_sender = @mysql_fetch_array($result_senders, MYSQL_BOTH))
  474. {
  475. $WebsitePushSender = new EventActionSender($row_sender);
  476. $EventAction->WebsitePush->Senders[$WebsitePushSender->Id] = $WebsitePushSender;
  477. }
  478. }
  479. else if($EventAction->Type<2)
  480. {
  481. $result_receivers = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_EVENT_ACTION_RECEIVERS."` WHERE `action_id`='".@mysql_real_escape_string($EventAction->Id)."';");
  482. while($row_receiver = @mysql_fetch_array($result_receivers, MYSQL_BOTH))
  483. $EventAction->Receivers[$row_receiver["receiver_id"]] = new EventActionReceiver($row_receiver);
  484. }
  485. }
  486. if(STATS_ACTIVE)
  487. {
  488. $result_goals = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_EVENT_GOALS."` WHERE `event_id`='".@mysql_real_escape_string($Event->Id)."';");
  489. while($row_goals = @mysql_fetch_array($result_goals, MYSQL_BOTH))
  490. $Event->Goals[$row_goals["goal_id"]] = new EventAction($row_goals["goal_id"],5);
  491. }
  492. $EVENTS->Events[$Event->Id] = $Event;
  493. }
  494. }
  495. function loadInternals()
  496. {
  497. global $CONFIG,$INTERNAL;
  498. require(PATH_USERS . "internal.inc.php");
  499. foreach($INTERN as $sysId => $internaluser)
  500. {
  501. $INTERNAL[$sysId] = new Operator($sysId,$internaluser["in_id"]);
  502. $INTERNAL[$sysId]->Email = $internaluser["in_email"];
  503. $INTERNAL[$sysId]->Webspace = $internaluser["in_websp"];
  504. $INTERNAL[$sysId]->Level = $internaluser["in_level"];
  505. $INTERNAL[$sysId]->Description = $internaluser["in_desc"];
  506. $INTERNAL[$sysId]->Fullname = $internaluser["in_name"];
  507. $INTERNAL[$sysId]->Language = $internaluser["in_lang"];
  508. $INTERNAL[$sysId]->Groups = unserialize(base64_decode($internaluser["in_groups"]));
  509. array_walk($INTERNAL[$sysId]->Groups,"b64dcode");
  510. $INTERNAL[$sysId]->GroupsArray = $internaluser["in_groups"];
  511. $INTERNAL[$sysId]->PermissionSet = $internaluser["in_perms"];
  512. $INTERNAL[$sysId]->CanAutoAcceptChats = (isset($internaluser["in_aac"])) ? $internaluser["in_aac"] : 1;
  513. $INTERNAL[$sysId]->LoginIPRange = $internaluser["in_lipr"];
  514. }
  515. }
  516. function loadGroups()
  517. {
  518. global $GROUPS,$CONFIG;
  519. require(PATH_GROUPS . "groups.inc.php");
  520. foreach($GROUPS as $id => $group)
  521. $GROUPS[$id] = new UserGroup($id,$GROUPS[$id],$CONFIG);
  522. }
  523. function loadVisitors($_fullList=false,$_sqlwhere="",$_limit="",$count=0)
  524. {
  525. global $VISITOR,$CONFIG,$COUNTRIES;
  526. $VISITOR = array();
  527. if(!$_fullList)
  528. $_sqlwhere = " WHERE `last_active`>".@mysql_real_escape_string(time()-$CONFIG["timeout_track"]);
  529. $result = queryDB(true,"SELECT *,`t1`.`id` AS `id` FROM `".DB_PREFIX.DATABASE_VISITORS."` AS `t1` INNER JOIN `".DB_PREFIX.DATABASE_VISITOR_DATA_BROWSERS."` AS `t2` ON `t1`.`browser`=`t2`.`id` INNER JOIN `".DB_PREFIX.DATABASE_VISITOR_DATA_CITIES."` AS `t3` ON `t1`.`city`=`t3`.`id` INNER JOIN `".DB_PREFIX.DATABASE_VISITOR_DATA_REGIONS."` AS `t4` ON `t1`.`region`=`t4`.`id` INNER JOIN `".DB_PREFIX.DATABASE_VISITOR_DATA_ISPS."` AS `t5` ON `t1`.`isp`=`t5`.`id` INNER JOIN `".DB_PREFIX.DATABASE_VISITOR_DATA_SYSTEMS."` AS `t6` ON `t1`.`system`=`t6`.`id` INNER JOIN `".DB_PREFIX.DATABASE_VISITOR_DATA_RESOLUTIONS."` AS `t8` ON `t1`.`resolution`=`t8`.`id`".$_sqlwhere." ORDER BY `entrance` ASC".$_limit.";");
  530. if($result)
  531. {
  532. initData(false,false,false,false,false,false,true);
  533. while($row = mysql_fetch_array($result, MYSQL_BOTH))
  534. if(!isset($VISITOR[$row["id"]]))
  535. {
  536. $row["countryname"] = $COUNTRIES[$row["country"]];
  537. if(!isset($vcount[$row["id"]]))
  538. $vcount[$row["id"]]=0;
  539. $vcount[$row["id"]]++;
  540. $row["dcount"] = $vcount[$row["id"]];
  541. $index = ($_fullList) ? $count++ : $row["id"];
  542. $VISITOR[$index] = new Visitor($row["id"]);
  543. $VISITOR[$index]->Load($row);
  544. $VISITOR[$index]->LoadBrowsers($_fullList);
  545. }
  546. $visitors = $VISITOR;
  547. $VISITOR = array();
  548. foreach($visitors as $vid => $visitor)
  549. if(count($visitor->Browsers) > 0 || $_fullList)
  550. $VISITOR[$vid] = $visitor;
  551. }
  552. }
  553. function getTargetParameters()
  554. {
  555. $parameters = array("exclude"=>null,"include_group"=>null,"include_user"=>null);
  556. if(isset($_GET[GET_EXTERN_HIDDEN_GROUPS]))
  557. {
  558. $groups = base64UrlDecode($_GET[GET_EXTERN_HIDDEN_GROUPS]);
  559. if(strlen($groups) > 1)
  560. $parameters["exclude"] = explode("?",$groups);
  561. else if(isset($_GET[GET_EXTERN_GROUP]))
  562. $parameters["include_group"] = array(base64UrlDecode($_GET[GET_EXTERN_GROUP]));
  563. else if(isset($_GET[GET_EXTERN_INTERN_USER_ID]))
  564. $parameters["include_user"] = base64UrlDecode($_GET[GET_EXTERN_INTERN_USER_ID]);
  565. }
  566. return $parameters;
  567. }
  568. function operatorsAvailable($_amount = 0, $_exclude=null, $include_group=null, $include_user=null)
  569. {
  570. global $CONFIG,$INTERNAL,$GROUPS;
  571. if(!DB_CONNECTION)
  572. return 0;
  573. initData(true,true);
  574. if(!empty($include_user))
  575. $include_group = $INTERNAL[getInternalSystemIdByUserId($include_user)]->Groups;
  576. foreach($INTERNAL as $sysId => $internaluser)
  577. if($internaluser->IsExternal($GROUPS, $_exclude, $include_group) && $internaluser->Status < USER_STATUS_OFFLINE)
  578. $_amount++;
  579. return $_amount;
  580. }
  581. function getOperatorList()
  582. {
  583. global $INTERNAL,$GROUPS;
  584. $array = array();
  585. initData(true,true,false,false);
  586. foreach($INTERNAL as $sysId => $internaluser)
  587. if($internaluser->IsExternal($GROUPS))
  588. $array[utf8_decode($internaluser->Fullname)] = $internaluser->Status;
  589. return $array;
  590. }
  591. function getOperators()
  592. {
  593. global $INTERNAL,$GROUPS;
  594. $array = array();
  595. initData(true,true,false,false);
  596. foreach($INTERNAL as $sysId => $internaluser)
  597. {
  598. $internaluser->IsExternal($GROUPS);
  599. $array[$sysId] = $internaluser;
  600. }
  601. return $array;
  602. }
  603. function isValidUploadFile($_filename)
  604. {
  605. global $CONFIG;
  606. $extensions = explode(",",str_replace("*.","",$CONFIG["wcl_upload_blocked_ext"]));
  607. foreach($extensions as $ext)
  608. if(strlen($_filename) > strlen($ext) && substr($_filename,strlen($_filename)-strlen($ext),strlen($ext)) == $ext)
  609. return false;
  610. return true;
  611. }
  612. function languageSelect()
  613. {
  614. global $LZLANG,$CONFIG;
  615. if(!empty($CONFIG["gl_on_def_lang"]) && file_exists(LIVEZILLA_PATH . "_language/lang".$CONFIG["gl_default_language"].".php"))
  616. {
  617. define("DEFAULT_BROWSER_LANGUAGE",$CONFIG["gl_default_language"]);
  618. require(LIVEZILLA_PATH . "_language/lang".$CONFIG["gl_default_language"].".php");
  619. }
  620. else if(empty($_SERVER["HTTP_ACCEPT_LANGUAGE"]) || (!empty($_SERVER["HTTP_ACCEPT_LANGUAGE"]) && strpos($_SERVER["HTTP_ACCEPT_LANGUAGE"],"..") === false))
  621. {
  622. if(!empty($_SERVER["HTTP_ACCEPT_LANGUAGE"]) && strlen($_SERVER["HTTP_ACCEPT_LANGUAGE"]) >= 5 && substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],2,1) == "-" && file_exists(LIVEZILLA_PATH . "_language/lang". strtolower(substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,5)) .".php"))
  623. require(LIVEZILLA_PATH . "_language/lang".($s_browser_language=strtolower(substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,5))).".php");
  624. else if(!empty($_SERVER["HTTP_ACCEPT_LANGUAGE"]) && strlen($_SERVER["HTTP_ACCEPT_LANGUAGE"]) > 1 && file_exists(LIVEZILLA_PATH . "_language/lang".strtolower(substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2)).".php"))
  625. require(LIVEZILLA_PATH . "_language/lang".($s_browser_language=strtolower(substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2))).".php");
  626. else if(file_exists(LIVEZILLA_PATH . "_language/lang".$CONFIG["gl_default_language"].".php"))
  627. require(LIVEZILLA_PATH . "_language/lang".($s_browser_language=$CONFIG["gl_default_language"]).".php");
  628. if(isset($s_browser_language))
  629. define("DEFAULT_BROWSER_LANGUAGE",$s_browser_language);
  630. }
  631. else if(file_exists(LIVEZILLA_PATH . "_language/lang".$CONFIG["gl_default_language"].".php"))
  632. require(LIVEZILLA_PATH . "_language/lang".$CONFIG["gl_default_language"].".php");
  633. if(!defined("DEFAULT_BROWSER_LANGUAGE") && file_exists(LIVEZILLA_PATH . "_language/langen.php"))
  634. {
  635. define("DEFAULT_BROWSER_LANGUAGE","en");
  636. require(LIVEZILLA_PATH . "_language/langen.php");
  637. }
  638. if(!defined("DEFAULT_BROWSER_LANGUAGE") || (defined("DEFAULT_BROWSER_LANGUAGE") && !@file_exists(LIVEZILLA_PATH . "_language/lang".DEFAULT_BROWSER_LANGUAGE.".php")))
  639. exit("Localization error: default language is not available.");
  640. }
  641. function getLongPollRuntime()
  642. {
  643. global $CONFIG;
  644. if(SAFE_MODE)
  645. $value = 10;
  646. else
  647. {
  648. $value = $CONFIG["timeout_clients"] - $CONFIG["poll_frequency_clients"] - 55;
  649. if(!isnull($ini = @ini_get('max_execution_time')) && $ini > $CONFIG["poll_frequency_clients"] && $ini < $value)
  650. $value = $ini-$CONFIG["poll_frequency_clients"];
  651. if($value > 20)
  652. $value = 20;
  653. if($value < 1)
  654. $value = 1;
  655. }
  656. return $value;
  657. }
  658. function checkPhpVersion($_ist,$_ond,$_ird)
  659. {
  660. $array = explode(".",phpversion());
  661. if($array[0] >= $_ist)
  662. {
  663. if($array[1] > $_ond || ($array[1] == $_ond && $array[2] >= $_ird))
  664. return true;
  665. return false;
  666. }
  667. return false;
  668. }
  669. function getAlertTemplate()
  670. {
  671. global $CONFIG;
  672. $html = str_replace("<!--server-->",LIVEZILLA_URL,getFile(TEMPLATE_SCRIPT_ALERT));
  673. $html = str_replace("<!--title-->",$CONFIG["gl_site_name"],$html);
  674. return $html;
  675. }
  676. function formLanguages($_lang)
  677. {
  678. if(strlen($_lang) == 0)
  679. return "";
  680. $array_lang = explode(",",$_lang);
  681. foreach($array_lang as $key => $lang)
  682. if($key == 0)
  683. {
  684. $_lang = strtoupper(substr(trim($lang),0,2));
  685. break;
  686. }
  687. return (strlen($_lang) > 0) ? $_lang : "";
  688. }
  689. function logit($_id,$_file=null)
  690. {
  691. if(empty($_file))
  692. $_file = LIVEZILLA_PATH . "_log/debug.txt";
  693. if(@file_exists($_file) && @filesize($_file) > 5000000)
  694. @unlink($_file);
  695. $handle = @fopen($_file,"a+");
  696. @fputs($handle,$_id."\r\n");
  697. @fclose($handle);
  698. }
  699. function errorLog($_message)
  700. {
  701. global $RESPONSE;
  702. if(defined("FILE_ERROR_LOG"))
  703. {
  704. if(file_exists(FILE_ERROR_LOG) && @filesize(FILE_ERROR_LOG) > 500000)
  705. @unlink(FILE_ERROR_LOG);
  706. $handle = @fopen (FILE_ERROR_LOG,"a+");
  707. if($handle)
  708. {
  709. @fputs($handle,$_message . "\r");
  710. @fclose($handle);
  711. }
  712. if(!empty($RESPONSE))
  713. {
  714. if(!isset($RESPONSE->Exceptions))
  715. $RESPONSE->Exceptions = "";
  716. $RESPONSE->Exceptions .= "<val err=\"".base64_encode(trim($_message))."\" />";
  717. }
  718. }
  719. else
  720. $RESPONSE->Exceptions = "";
  721. }
  722. function getId($_length,$start=0)
  723. {
  724. $id = md5(uniqid(rand(),1));
  725. if($_length != 32)
  726. $start = rand(0,(31-$_length));
  727. $id = substr($id,$start,$_length);
  728. return $id;
  729. }
  730. function createFloodFilter($_ip,$_userId)
  731. {
  732. global $FILTERS;
  733. initData(false,false,false,true);
  734. foreach($FILTERS->Filters as $currentFilter)
  735. if($currentFilter->IP == $_ip && $currentFilter->Activeipaddress == 1 && $currentFilter->Activestate == 1)
  736. return;
  737. $filter = new Filter(md5(uniqid(rand())));
  738. $filter->Creator = "SYSTEM";
  739. $filter->Created = time();
  740. $filter->Editor = "SYSTEM";
  741. $filter->Edited = time();
  742. $filter->IP = $_ip;
  743. $filter->Expiredate = 172800;
  744. $filter->Userid = $_userId;
  745. $filter->Reason = "";
  746. $filter->Filtername = "AUTO FLOOD FILTER";
  747. $filter->Activestate = 1;
  748. $filter->Exertion = 0;
  749. $filter->Languages = "";
  750. $filter->Activeipaddress = 1;
  751. $filter->Activeuserid = 0;
  752. $filter->Activelanguage = 0;
  753. $filter->Save();
  754. }
  755. function isFlood($_ip,$_userId,$_chat=false)
  756. {
  757. global $VISITOR,$FILTERS,$CONFIG;
  758. if(empty($CONFIG["gl_atflt"]))
  759. return false;
  760. $sql = "SELECT * FROM `".DB_PREFIX.DATABASE_VISITORS."` AS `t1` INNER JOIN `".DB_PREFIX.DATABASE_VISITOR_BROWSERS."` AS t2 ON t1.id=t2.visitor_id WHERE t1.`ip`='".@mysql_real_escape_string($_ip)."' AND `t2`.`created`>".(time()-FLOOD_PROTECTION_TIME) . " AND `t1`.`visit_latest`=1";
  761. if($result = queryDB(true,$sql));
  762. if(@mysql_num_rows($result) >= FLOOD_PROTECTION_SESSIONS)
  763. {
  764. createFloodFilter($_ip,$_userId);
  765. return true;
  766. }
  767. return false;
  768. }
  769. function removeSSpanFile($_all)
  770. {
  771. if($_all || (getSpanValue() < time()))
  772. setSpanValue(0);
  773. }
  774. function isSSpanFile()
  775. {
  776. return !isnull(getSpanValue());
  777. }
  778. function getSpanValue()
  779. {
  780. if(DB_CONNECTION && $result = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_INFO."`"))
  781. if($row = mysql_fetch_array($result, MYSQL_BOTH))
  782. return $row["gtspan"];
  783. return time();
  784. }
  785. function setSpanValue($_value)
  786. {
  787. queryDB(true,"UPDATE `".DB_PREFIX.DATABASE_INFO."` SET `gtspan`='".@mysql_real_escape_string($_value)."'");
  788. }
  789. function createSSpanFile($_sspan)
  790. {
  791. global $CONFIG;
  792. if($_sspan >= CONNECTION_ERROR_SPAN && empty($CONFIG["gl_pr_ngl"]))
  793. setSpanValue((time()+$_sspan));
  794. }
  795. function getLocalTimezone($_timezone,$ltz=0)
  796. {
  797. $template = "%s%s%s:%s%s";
  798. if(isset($_timezone) && !empty($_timezone))
  799. {
  800. $ltz = $_timezone;
  801. if($ltz == ceil($ltz))
  802. {
  803. if($ltz >= 0 && $ltz < 10)
  804. $ltz = sprintf($template,"+","0",$ltz,"0","0");
  805. else if($ltz < 0 && $ltz > -10)
  806. $ltz = sprintf($template,"-","0",$ltz*-1,"0","0");
  807. else if($ltz >= 10)
  808. $ltz = sprintf($template,"+",$ltz,"","0","0");
  809. else if($ltz <= -10)
  810. $ltz = sprintf($template,"",$ltz,"","0","0");
  811. }
  812. else
  813. {
  814. $split = explode(".",$ltz);
  815. $split[1] = (60 * $split[1]) / 100;
  816. if($ltz >= 0 && $ltz < 10)
  817. $ltz = sprintf($template,"+","0",$split[0],$split[1],"0");
  818. else if($ltz < 0 && $ltz > -10)
  819. $ltz = sprintf($template,"","0",$split[0],$split[1],"0");
  820. else if($ltz >= 10)
  821. $ltz = sprintf($template,"+",$split[0],"",$split[1],"0");
  822. else if($ltz <= -10)
  823. $ltz = sprintf($template,"",$split[0],"",$split[1],"0");
  824. }
  825. }
  826. return $ltz;
  827. }
  828. function isValidEmail($_email)
  829. {
  830. return preg_match('/^([*+!.&#$¦\'\\%\/0-9a-z^_`{}=?~:-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$/i', $_email);
  831. }
  832. function setCookieValue($_key,$_value)
  833. {
  834. global $CONFIG;
  835. if(!isset($_COOKIE["livezilla"]))
  836. $c_array = Array();
  837. else
  838. $c_array = @unserialize(@base64_decode($_COOKIE["livezilla"]));
  839. if(!isset($c_array[$_key]) || (isset($c_array[$_key]) && $c_array[$_key] != $_value))
  840. {
  841. $c_array[$_key] = $_value;
  842. setcookie("livezilla",($_COOKIE["livezilla"] = base64_encode(serialize($c_array))),time()+($CONFIG["gl_colt"]*86400));
  843. }
  844. }
  845. function getCookieValue($_key)
  846. {
  847. if(isset($_COOKIE["livezilla"]))
  848. $c_array = @unserialize(base64_decode($_COOKIE["livezilla"]));
  849. if(isset($c_array[$_key]))
  850. return $c_array[$_key];
  851. else
  852. return null;
  853. }
  854. function hashFile($_file)
  855. {
  856. $enfile = md5(base64_encode(file_get_contents($_file)));
  857. return $enfile;
  858. }
  859. function mTime()
  860. {
  861. $time = str_replace(".","",microtime());
  862. $time = explode(" " , $time);
  863. return $time[0];
  864. }
  865. function microtimeFloat($_microtime)
  866. {
  867. list($usec, $sec) = explode(" ", $_microtime);
  868. return ((float)$usec + (float)$sec);
  869. }
  870. function testDirectory($_dir)
  871. {
  872. global $LZLANG,$ERRORS;
  873. if(!@is_dir($_dir))
  874. @mkdir($_dir);
  875. if(@is_dir($_dir))
  876. {
  877. $fileid = md5(uniqid(rand()));
  878. $handle = @fopen ($_dir . $fileid ,"a");
  879. @fputs($handle,$_id."\r\n");
  880. @fclose($handle);
  881. if(!file_exists($_dir . $fileid))
  882. return false;
  883. @unlink($_dir . $fileid);
  884. if(file_exists($_dir . $fileid))
  885. return false;
  886. return true;
  887. }
  888. else
  889. return false;
  890. }
  891. function sendMail($_receiver,$_sender,$_replyto,$_text,$_subject="")
  892. {
  893. global $CONFIG;
  894. $return = "";
  895. if(strpos($_receiver,",") === false)
  896. {
  897. $EOL = (!empty($CONFIG["gl_smtpauth"])) ? "\r\n" : "\n";
  898. $message = $_text;
  899. $headers = "From: ".$_sender.$EOL;
  900. $headers .= "Reply-To: ".$_replyto.$EOL;
  901. $headers .= "Date: ".date("r").$EOL;
  902. $headers .= "MIME-Version: 1.0".$EOL;
  903. $headers .= "Content-Type: text/plain; charset=UTF-8; format=flowed".$EOL;
  904. $headers .= "Content-Transfer-Encoding: 8bit".$EOL;
  905. $headers .= "X-Mailer: LiveZilla.net/" . VERSION.$EOL;
  906. if(!empty($CONFIG["gl_smtpauth"]))
  907. $return = authMail($CONFIG["gl_smtphost"], $CONFIG["gl_smtpport"], $_receiver, $_subject, $_text, $headers, $_sender, $CONFIG["gl_smtppass"], $CONFIG["gl_smtpuser"], !empty($CONFIG["gl_smtpssl"]));
  908. else
  909. {
  910. if(@mail($_receiver, $_subject, $_text, $headers))
  911. $return = null;
  912. else
  913. $return = "The email could not be sent using PHP mail(). Please try another Return Email Address or use SMTP.";
  914. }
  915. }
  916. else
  917. {
  918. $emails = explode(",",$_receiver);
  919. foreach($emails as $mail)
  920. if(!empty($mail))
  921. sendMail(trim($mail), $_sender, $_replyto, $_text, $_subject);
  922. }
  923. return $return;
  924. }
  925. function authMail($_server, $_port, $_receiver, $_subject, $_text, $_header, $_from, $_password, $_account, $_secure)
  926. {
  927. $return = "\r\n\r\n";
  928. $break = "\r\n";
  929. $_text = preg_replace("/^\./","..",explode($break,$_text));
  930. $smtp = array(array("EHLO localhost".$break,"220,250"),array("AUTH LOGIN".$break,"334"),array(base64_encode($_account).$break,"334"),array(base64_encode($_password).$break,"235"));
  931. $smtp[] = array("MAIL FROM: <".$_from.">".$break,"250");
  932. $smtp[] = array("RCPT TO: <".$_receiver.">".$break,"250");
  933. $smtp[] = array("DATA".$break,"354");
  934. $smtp[] = array("Subject: ".$_subject.$break,"");
  935. $smtp[] = array("To: ".$_receiver.$break,"");
  936. $_header = explode($break,$_header);
  937. foreach($_header as $value)
  938. $smtp[] = array($value.$break,"");
  939. $smtp[] = array($break,"");
  940. foreach($_text as $line)
  941. $smtp[] = array($line.$break,"");
  942. $smtp[] = array(".".$break,"250");
  943. $smtp[] = array("QUIT".$break,"221");
  944. $secure = ($_secure) ? "ssl://" : "";
  945. $fp = @fsockopen($secure . $_server, $_port);
  946. if($fp)
  947. {
  948. $result = @fgets($fp, 1024);
  949. $return .= $result;
  950. foreach($smtp as $req)
  951. {
  952. @fputs($fp, $req[0]);
  953. if($req[1])
  954. while($result = @fgets($fp, 1024))
  955. {
  956. $return .= $result;
  957. if(substr($result,3,1) == " ")
  958. break;
  959. }
  960. }
  961. @fclose($fp);
  962. if(substr($result,0,1) == "2")
  963. $return = null;
  964. }
  965. else
  966. return "Cannot connect to " . $secure . $_server;
  967. return $return;
  968. }
  969. function setDataProvider()
  970. {
  971. global $CONFIG;
  972. define("DB_PREFIX",$CONFIG["gl_db_prefix"]);
  973. return createDBConnector();
  974. }
  975. function createDBConnector()
  976. {
  977. global $CONFIG,$DB_CONNECTOR;
  978. if(!empty($CONFIG["gl_datprov"]))
  979. {
  980. $DB_CONNECTOR = @mysql_connect($CONFIG["gl_db_host"], $CONFIG["gl_db_user"], $CONFIG["gl_db_pass"]);
  981. if($DB_CONNECTOR)
  982. {
  983. mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $DB_CONNECTOR);
  984. //mysql_set_charset('utf8', $DB_CONNECTOR);
  985. //@mysql_query("SET NAMES 'utf8'", $DB_CONNECTOR);
  986. if(@mysql_select_db($CONFIG["gl_db_name"], $DB_CONNECTOR))
  987. {
  988. define("DB_CONNECTION",true);
  989. return DB_CONNECTION;
  990. }
  991. }
  992. }
  993. define("DB_CONNECTION",false);
  994. return DB_CONNECTION;
  995. }
  996. function queryDB($_log,$_sql)
  997. {
  998. global $CONFIG,$DB_CONNECTOR,$DBA,$QLIST;
  999. if(!DB_CONNECTION)
  1000. return false;
  1001. $DBA++;
  1002. $result = @mysql_query($_sql, $DB_CONNECTOR);
  1003. $ignore = array("1146","1062","1045","2003");
  1004. if($_log && !$result && !in_array(mysql_errno(),$ignore))
  1005. logit(time() . " - " . mysql_errno() . ": " . mysql_error() . "\r\n\r\nSQL: " . $_sql,LIVEZILLA_PATH . "_log/sql.txt");
  1006. return $result;
  1007. }
  1008. function unloadDataProvider()
  1009. {
  1010. global $DB_CONNECTOR;
  1011. if($DB_CONNECTOR)
  1012. @mysql_close($DB_CONNECTOR);
  1013. }
  1014. function runPeriodicJobs()
  1015. {
  1016. global $CONFIG,$VISITOR,$STATS;
  1017. if(rand(0,100) == 1)
  1018. {
  1019. $timeouts = array($CONFIG["poll_frequency_clients"] * 10,86400,86400*7,DATA_LIFETIME);
  1020. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_CHAT_ARCHIVE."` WHERE (`html` = '0' OR `html` = '') AND `time` < " . @mysql_real_escape_string(time()-$timeouts[3]));
  1021. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_POSTS."` WHERE `time` < " . @mysql_real_escape_string(time()-$timeouts[3]));
  1022. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_POSTS."` WHERE `persistent` = '0' AND `time` < " . @mysql_real_escape_string(time()-$timeouts[1]));
  1023. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_OPERATOR_LOGINS."` WHERE `time` < ".@mysql_real_escape_string(time()-$timeouts[1]));
  1024. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_EVENT_ACTION_INTERNALS."` WHERE `created` < " . @mysql_real_escape_string(time()-$timeouts[0]));
  1025. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_PROFILE_PICTURES."` WHERE `webcam`=1 AND `time` < ".@mysql_real_escape_string(time()-$timeouts[0]));
  1026. if(!STATS_ACTIVE)
  1027. {
  1028. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_VISITORS."` WHERE `last_active`<'".@mysql_real_escape_string(time()-$timeouts[1])."';");
  1029. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_OPERATOR_STATUS."` WHERE `".DB_PREFIX.DATABASE_OPERATOR_STATUS."`.`confirmed`<'".@mysql_real_escape_string(time()-$timeouts[1])."';");
  1030. }
  1031. else
  1032. StatisticProvider::DeleteHTMLReports();
  1033. if(!empty($CONFIG["gl_rm_chats"]))
  1034. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_CHAT_ARCHIVE."` WHERE `time` < " . @mysql_real_escape_string(time()-$CONFIG["gl_rm_chats_time"]));
  1035. if(!empty($CONFIG["gl_rm_rt"]))
  1036. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_RATINGS."` WHERE `time` < " . @mysql_real_escape_string(time()-$CONFIG["gl_rm_rt_time"]));
  1037. if(!empty($CONFIG["gl_rm_om"]))
  1038. {
  1039. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_TICKET_EDITORS."` WHERE `time` < " . @mysql_real_escape_string(time()-$CONFIG["gl_rm_om_time"]));
  1040. queryDB(true,"DELETE `".DB_PREFIX.DATABASE_TICKET_MESSAGES."`,`".DB_PREFIX.DATABASE_TICKETS."` FROM `".DB_PREFIX.DATABASE_TICKETS."` INNER JOIN `".DB_PREFIX.DATABASE_TICKET_MESSAGES."` WHERE `".DB_PREFIX.DATABASE_TICKETS."`.`id` = `".DB_PREFIX.DATABASE_TICKET_MESSAGES."`.`ticket_id` AND `".DB_PREFIX.DATABASE_TICKET_MESSAGES."`.`time` < " . @mysql_real_escape_string(time()-$CONFIG["gl_rm_om_time"]));
  1041. }
  1042. if($result = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_RESOURCES."` WHERE `discarded`=1 AND `type` > 2 AND `edited` < " . @mysql_real_escape_string(time()-$timeouts[3])));
  1043. while($row = mysql_fetch_array($result, MYSQL_BOTH))
  1044. {
  1045. $resultb = queryDB(true,"SELECT count(value) as linked FROM `".DB_PREFIX.DATABASE_RESOURCES."` WHERE `value`='". @mysql_real_escape_string($row["value"])."';");
  1046. $rowb = mysql_fetch_array($resultb, MYSQL_BOTH);
  1047. if($rowb["linked"] == 1)
  1048. @unlink(PATH_UPLOADS . $row["value"]);
  1049. }
  1050. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_RESOURCES."` WHERE `discarded`='1' AND `edited` < " . @mysql_real_escape_string(time()-$timeouts[3]));
  1051. }
  1052. else if(rand(0,10) == 1)
  1053. {
  1054. sendChatTranscripts();
  1055. }
  1056. }
  1057. function getSubject($_chatTranscript,$_email,$_username,$_group,$_chatid)
  1058. {
  1059. global $CONFIG;
  1060. if($_chatTranscript)
  1061. $subject = $CONFIG["gl_subjct"];
  1062. else
  1063. $subject = $CONFIG["gl_subjom"];
  1064. $subject = str_replace("%SERVERNAME%",$CONFIG["gl_site_name"],$subject);
  1065. $subject = str_replace("%USERNAME%",$_username,$subject);
  1066. $subject = str_replace("%USEREMAIL%",$_email,$subject);
  1067. $subject = str_replace("%TARGETGROUP%",$_group,$subject);
  1068. $subject = str_replace("%CHATID%",$_chatid,$subject);
  1069. return $subject;
  1070. }
  1071. function sendChatTranscripts()
  1072. {
  1073. global $CONFIG,$INTERNAL,$GROUPS;
  1074. $result = queryDB(true,"SELECT `internal_id`,`plain`,`transcript_receiver`,`email`,`chat_id`,`fullname`,`group_id` FROM `".DB_PREFIX.DATABASE_CHAT_ARCHIVE."` WHERE `endtime`>0 AND `closed`>0 AND `transcript_sent`=0 LIMIT 1;");
  1075. if($result)
  1076. while($row = mysql_fetch_array($result, MYSQL_BOTH))
  1077. {
  1078. queryDB(true,"UPDATE `".DB_PREFIX.DATABASE_CHAT_ARCHIVE."` SET `transcript_sent`=1 WHERE `chat_id`='". @mysql_real_escape_string($row["chat_id"])."' LIMIT 1;");
  1079. $rcvs = $row["plain"];
  1080. $email = (empty($row["transcript_receiver"])) ? $row["email"] : $row["transcript_receiver"];
  1081. $subject = getSubject(true,$email,$row["fullname"],$row["group_id"],$row["chat_id"]);
  1082. if(empty($CONFIG["gl_pr_nbl"]))
  1083. $rcvs .= base64_decode("DQoNCg0KcG93ZXJlZCBieSBMaXZlWmlsbGEgTGl2ZSBTdXBwb3J0IFtodHRwOi8vd3d3LmxpdmV6aWxsYS5uZXRd");
  1084. if(!empty($CONFIG["gl_soct"]) && !empty($row["transcript_receiver"]))
  1085. sendMail($row["transcript_receiver"],$CONFIG["gl_mail_sender"],$CONFIG["gl_mail_sender"],$rcvs,$subject);
  1086. if(!empty($CONFIG["gl_scto"]))
  1087. {
  1088. initData(true);
  1089. sendMail($INTERNAL[$row["internal_id"]]->Email,$CONFIG["gl_mail_sender"],$CONFIG["gl_mail_sender"],$rcvs,$subject);
  1090. }
  1091. if(!empty($CONFIG["gl_sctg"]))
  1092. {
  1093. initData(false,true);
  1094. sendMail($GROUPS[$row["group_id"]]->Email,$CONFIG["gl_mail_sender"],$CONFIG["gl_mail_sender"],$rcvs,$subject);
  1095. }
  1096. if(!empty($CONFIG["gl_scct"]))
  1097. sendMail($CONFIG["gl_scct"],$CONFIG["gl_mail_sender"],$CONFIG["gl_mail_sender"],$rcvs,$subject);
  1098. }
  1099. if(!empty($CONFIG["gl_rm_chats"]) && $CONFIG["gl_rm_chats_time"] == 0)
  1100. queryDB(true,"DELETE FROM `".DB_PREFIX.DATABASE_CHAT_ARCHIVE."` WHERE `transcript_sent` = '1';");
  1101. }
  1102. function getResource($_id)
  1103. {
  1104. if($result = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_RESOURCES."` WHERE `id`='".@mysql_real_escape_string($_id)."' LIMIT 1;"))
  1105. if($row = mysql_fetch_array($result, MYSQL_BOTH))
  1106. return $row;
  1107. return null;
  1108. }
  1109. function markPostReceived($_id)
  1110. {
  1111. queryDB(false,"UPDATE `".DB_PREFIX.DATABASE_POSTS."` SET `received`='1',`persistent`='0' WHERE `id`='".@mysql_real_escape_string($_id)."';");
  1112. }
  1113. function getPosts($_receiver)
  1114. {
  1115. $posts = array();
  1116. if($result = queryDB(true,"SELECT * FROM `".DB_PREFIX.DATABASE_POSTS."` WHERE `receiver`='".@mysql_real_escape_string($_receiver)."' AND `received`='0' ORDER BY `time` ASC, `micro` ASC;"))
  1117. while($row = mysql_fetch_array($result, MYSQL_BOTH))
  1118. $posts[] = $row;
  1119. return $posts;
  1120. }
  1121. function getDirectory($_dir,$_oddout,$_ignoreSource=false)
  1122. {
  1123. $files = array();
  1124. if(!@is_dir($_dir))
  1125. return $files;
  1126. $handle=@opendir($_dir);
  1127. while ($filename = @readdir ($handle))
  1128. if ($filename != "." && $filename != ".." && ($_oddout == false || !stristr($filename,$_oddout)))
  1129. if($_oddout != "." || ($_oddout == "." && @is_dir($_dir . "/" . $filename)))
  1130. $files[]=$filename;
  1131. @closedir($handle);
  1132. return $files;
  1133. }
  1134. function getValueId($_database,$_column,$_value,$_canBeNumeric=true,$_maxlength=null)
  1135. {
  1136. if(!$_canBeNumeric && is_numeric($_value))
  1137. $_value = "";
  1138. if($_maxlength != null && strlen($_value) > $_maxlength)
  1139. $_value = substr($_value,0,$_maxlength);
  1140. queryDB(true,"INSERT INTO `".DB_PREFIX.$_database."` (`id`, `".$_column."`) VALUES (NULL, '".@mysql_real_escape_string($_value)."');");
  1141. $row = mysql_fetch_array(queryDB(true,"SELECT `id` FROM `".DB_PREFIX.$_database."` WHERE `".$_column."`='".@mysql_real_escape_string($_value)."';"), MYSQL_BOTH);
  1142. return $row["id"];
  1143. }
  1144. function getIdValue($_database,$_column,$_id,$_unknown=false)
  1145. {
  1146. $row = mysql_fetch_array(queryDB(true,"SELECT `".$_column."` FROM `".DB_PREFIX.$_database."` WHERE `id`='".@mysql_real_escape_string($_id)."' LIMIT 1;"));
  1147. if($_unknown && empty($row[$_column]))
  1148. return "<!--lang_stats_unknown-->";
  1149. return $row[$_column];
  1150. }
  1151. function compareUrls($_templateUrl,$_comparerUrl)
  1152. {
  1153. $_templateUrl=strtolower($_templateUrl);
  1154. $_comparerUrl=strtolower($_comparerUrl);
  1155. $match=true;
  1156. if(strpos($_templateUrl,"*")===false && $_templateUrl != $_comparerUrl)
  1157. $match = false;
  1158. else
  1159. {
  1160. $parts = explode("*",$_templateUrl);
  1161. $index = 0;
  1162. for($i=0;$i<count($parts);$i++)
  1163. {
  1164. if($parts[$i] == "")
  1165. continue;
  1166. if($i == count($parts)-1 && substr($_comparerUrl,(strlen($_comparerUrl)-strlen($parts[$i])),strlen($parts[$i])) != $parts[$i])
  1167. {
  1168. $match = false;
  1169. break;
  1170. }
  1171. else if(($pos = strpos($_comparerUrl,$parts[$i])) !== false)
  1172. {
  1173. if($pos < $index)
  1174. {
  1175. $match = false;
  1176. break;
  1177. }
  1178. }
  1179. else
  1180. {
  1181. $match = false;
  1182. break;
  1183. }
  1184. }
  1185. }
  1186. return $match;
  1187. }
  1188. function processResource($_userId,$_resId,$_value,$_type,$_title,$_disc,$_parentId,$_rank,$_size=0)
  1189. {
  1190. if($_size == 0)
  1191. $_size = strlen($_title);
  1192. $result = queryDB(true,"SELECT `id` FROM `".DB_PREFIX.DATABASE_RESOURCES."` WHERE `id`='".@mysql_real_escape_string($_resId)."'");
  1193. if(@mysql_num_rows($result) == 0)
  1194. queryDB(true,$result = "INSERT INTO `".DB_PREFIX.DATABASE_RESOURCES."` (`id`,`owner`,`editor`,`value`,`edited`,`title`,`created`,`type`,`discarded`,`parentid`,`rank`,`size`) VALUES ('".@mysql_real_escape_string($_resId)."','".@mysql_real_escape_string($_userId)."','".@mysql_real_escape_string($_userId)."','".@mysql_real_escape_string($_value)."','".@mysql_real_escape_string(time())."','".@mysql_real_escape_string($_title)."','".@mysql_real_escape_string(time())."','".@mysql_real_escape_string($_type)."','0','".@mysql_real_escape_string($_parentId)."','".@mysql_real_escape_string($_rank)."','".@mysql_real_escape_string($_size)."')");
  1195. else
  1196. {
  1197. queryDB(true,$result = "UPDATE `".DB_PREFIX.DATABASE_RESOURCES."` SET `value`='".@mysql_real_escape_string($_value)."',`editor`='".@mysql_real_escape_string($_userId)."',`title`='".@mysql_real_escape_string($_title)."',`edited`='".@mysql_real_escape_string(time())."',`discarded`='".@mysql_real_escape_string(parseBool($_disc,false))."',`parentid`='".@mysql_real_escape_string($_parentId)."',`rank`='".@mysql_real_escape_string($_rank)."',`size`='".@mysql_real_escape_string($_size)."' WHERE id='".@mysql_real_escape_string($_resId)."' LIMIT 1");
  1198. if(!empty($_disc) && ($_type == RESOURCE_TYPE_FILE_INTERNAL || $_type == RESOURCE_TYPE_FILE_EXTERNAL) && @file_exists("./uploads/" . $_value) && strpos($_value,"..")===false)
  1199. @unlink("./uploads/" . $_value);
  1200. }
  1201. }
  1202. function getBrowserLocalization($country = "")
  1203. {
  1204. global $LANGUAGES,$COUNTRIES;
  1205. initData(false,false,false,false,false,true,true);
  1206. $language = str_replace(array(",","_"," "),array(";","-",""),(!empty($_SERVER["HTTP_ACCEPT_LANGUAGE"])) ? strtoupper($_SERVER["HTTP_ACCEPT_LANGUAGE"]) : "");
  1207. if(strlen($language) > 5 || strpos($language,";") !== false)
  1208. {
  1209. $parts = explode(";",$language);
  1210. if(count($parts) > 0)
  1211. $language = $parts[0];
  1212. else
  1213. $language = substr($language,0,5);
  1214. }
  1215. if(strlen($language) >= 2)
  1216. {
  1217. $parts = explode("-",$language);
  1218. if(!isset($LANGUAGES[$language]))
  1219. {
  1220. $language = $parts[0];
  1221. if(!isset($LANGUAGES[$language]))
  1222. {
  1223. if(DEBUG_MODE)
  1224. logit(@$_SERVER["HTTP_ACCEPT_LANGUAGE"] . " - " . $language,LIVEZILLA_PATH . "_log/missing_language.txt");
  1225. $language = "";
  1226. }
  1227. }
  1228. if(count($parts)>1 && isset($COUNTRIES[$parts[1]]))
  1229. $country = $parts[1];
  1230. }
  1231. else if(strlen($language) < 2)
  1232. $language = "";
  1233. return array($language,$country);
  1234. }
  1235. function createFileBaseFolders($_owner,$_internal)
  1236. {
  1237. if($_internal)
  1238. {
  1239. processResource($_owner,3,"%%_Files_%%",0,"%%_Files_%%",0,1,1);
  1240. processResource($_owner,4,"%%_Internal_%%",0,"%%_Internal_%%",0,3,2);
  1241. }
  1242. else
  1243. {
  1244. processResource($_owner,3,"%%_Files_%%",0,"%%_Files_%%",0,1,1);
  1245. processResource($_owner,5,"%%_External_%%",0,"%%_External_%%",0,3,2);
  1246. }
  1247. }
  1248. function getSystemTimezone()
  1249. {
  1250. global $CONFIG;
  1251. if(!empty($CONFIG["gl_tizo"]))
  1252. return $CONFIG["gl_tizo"];
  1253. $iTime = time();
  1254. $arr = @localtime($iTime);
  1255. $arr[5] += 1900;
  1256. $arr[4]++;
  1257. $iTztime = @gmmktime($arr[2], $arr[1], $arr[0], $arr[4], $arr[3], $arr[5], $arr[8]);
  1258. $offset = doubleval(($iTztime-$iTime)/(60*60));
  1259. $zonelist =
  1260. array
  1261. (
  1262. 'Kwajalein' => -12.00,
  1263. 'Pacific/Midway' => -11.00,
  1264. 'Pacific/Honolulu' => -10.00,
  1265. 'America/Anchorage' => -9.00,
  1266. 'America/Los_Angeles' => -8.00,
  1267. 'America/Denver' => -7.00,
  1268. 'America/Tegucigalpa' => -6.00,
  1269. 'America/New_York' => -5.00,
  1270. 'America/Caracas' => -4.30,
  1271. 'America/Halifax' => -4.00,
  1272. 'America/St_Johns' => -3.30,
  1273. 'America/Argentina/Buenos_Aires' => -3.00,
  1274. 'America/Sao_Paulo' => -3.00,
  1275. 'Atlantic/South_Georgia' => -2.00,
  1276. 'Atlantic/Azores' => -1.00,
  1277. 'Europe/Dublin' => 0,
  1278. 'Europe/Belgrade' => 1.00,
  1279. 'Europe/Minsk' => 2.00,
  1280. 'Asia/Kuwait' => 3.00,
  1281. 'Asia/Tehran' => 3.30,
  1282. 'Asia/Muscat' => 4.00,
  1283. 'Asia/Yekaterinburg' => 5.00,
  1284. 'Asia/Kolkata' => 5.30,
  1285. 'Asia/Katmandu' => 5.45,
  1286. 'Asia/Dhaka' => 6.00,
  1287. 'Asia/Rangoon' => 6.30,
  1288. 'Asia/Krasnoyarsk' => 7.00,
  1289. 'Asia/Brunei' => 8.00,
  1290. 'Asia/Seoul' => 9.00,
  1291. 'Australia/Darwin' => 9.30,
  1292. 'Australia/Canberra' => 10.00,
  1293. 'Asia/Magadan' => 11.00,
  1294. 'Pacific/Fiji' => 12.00,
  1295. 'Pacific/Tongatapu' => 13.00
  1296. );
  1297. $index = array_keys($zonelist, $offset);
  1298. if(sizeof($index)!=1)
  1299. return false;
  1300. return $index[0];
  1301. }
  1302. function isnull($_var)
  1303. {
  1304. return empty($_var);
  1305. }
  1306. loadConfig();
  1307. ?>