PageRenderTime 49ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/livehelp/_lib/functions.internal.man.inc.php

https://bitbucket.org/spivovartsev/citrus.ua
PHP | 364 lines | 327 code | 27 blank | 10 comment | 74 complexity | 7b75e7f25d472f8967f59a503af6e08d MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. /****************************************************************************************
  3. * LiveZilla functions.internal.man.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 setAvailability($_available)
  14. {
  15. global $INTERNAL,$RESPONSE;
  16. if($INTERNAL[CALLER_SYSTEM_ID]->Level==USER_LEVEL_ADMIN)
  17. {
  18. if($_available=="1" && file_exists(FILE_SERVER_DISABLED))
  19. @unlink(FILE_SERVER_DISABLED);
  20. else if($_available=="0")
  21. createFile(FILE_SERVER_DISABLED,time(),true);
  22. $RESPONSE->SetStandardResponse(1,"");
  23. }
  24. }
  25. function setIdle($_idle)
  26. {
  27. global $INTERNAL,$RESPONSE;
  28. if($INTERNAL[CALLER_SYSTEM_ID]->Level==USER_LEVEL_ADMIN)
  29. {
  30. if($_idle=="0" && file_exists(FILE_SERVER_IDLE))
  31. @unlink(FILE_SERVER_IDLE);
  32. else if($_idle=="1")
  33. createFile(FILE_SERVER_IDLE,time(),true);
  34. $RESPONSE->SetStandardResponse(1,"");
  35. }
  36. }
  37. function getBannerList($list = "")
  38. {
  39. global $VISITOR,$CONFIG,$RESPONSE;
  40. $banners = getDirectory(PATH_BANNER,".php",true);
  41. sort($banners);
  42. foreach($banners as $banner)
  43. {
  44. if(@is_dir(PATH_BANNER . $banner) || ((strpos($banner,"_0.png") === false && strpos($banner,"_1.png") === false) && (strpos($banner,"_0.gif") === false && strpos($banner,"_1.gif") === false)))
  45. continue;
  46. $list .= "<banner name=\"".base64_encode($banner)."\" hash=\"".base64_encode(hashFile(PATH_BANNER . $banner))."\"/>\r\n";
  47. }
  48. $RESPONSE->SetStandardResponse(1,"<banner_list>".$list."</banner_list>");
  49. }
  50. function getTranslationData($translation = "")
  51. {
  52. global $LZLANG,$RESPONSE;
  53. if(!(isset($_POST[POST_INTERN_DOWNLOAD_TRANSLATION_ISO]) && (strlen($_POST[POST_INTERN_DOWNLOAD_TRANSLATION_ISO])==2||strlen($_POST[POST_INTERN_DOWNLOAD_TRANSLATION_ISO])==5)))
  54. {
  55. $RESPONSE->SetStandardResponse(1,"");
  56. return;
  57. }
  58. include("./_language/lang" . strtolower($_POST[POST_INTERN_DOWNLOAD_TRANSLATION_ISO]) . ".php");
  59. $translation .= "<language key=\"".base64_encode($_POST[POST_INTERN_DOWNLOAD_TRANSLATION_ISO])."\">\r\n";
  60. foreach($LZLANG as $key => $value)
  61. $translation .= "<val key=\"".base64_encode($key)."\">".base64_encode($value)."</val>\r\n";
  62. $translation .= "</language>\r\n";
  63. $RESPONSE->SetStandardResponse(1,$translation);
  64. }
  65. function updatePredefinedMessages($_counter = 0)
  66. {
  67. global $GROUPS,$INTERNAL;
  68. clearPredefinedMessages();
  69. $tpm_types = array("g"=>$GROUPS,"u"=>$INTERNAL);
  70. $pms = array();
  71. foreach($tpm_types as $type => $objectlist)
  72. foreach($objectlist as $id => $object)
  73. {
  74. $pms[$type.$id] = array();
  75. foreach($_POST as $key => $value)
  76. if(strpos($key,"p_db_pm_".$type."_" . $id . "_")===0)
  77. {
  78. $parts = explode("_",$key);
  79. if(!isset($pms[$type.$id][$parts[5]]))
  80. {
  81. $pms[$type.$id][$parts[5]] = new PredefinedMessage();
  82. $pms[$type.$id][$parts[5]]->GroupId = ($type=="g") ? $id : "";
  83. $pms[$type.$id][$parts[5]]->UserId = ($type=="u") ? $id : "";
  84. $pms[$type.$id][$parts[5]]->LangISO = $parts[5];
  85. }
  86. $pms[$type.$id][$parts[5]]->XMLParamAlloc($parts[6],$value);
  87. }
  88. }
  89. foreach($pms as $oid => $messages)
  90. foreach($messages as $iso => $message)
  91. {
  92. $message->Id = $_counter++;
  93. $message->Save();
  94. }
  95. }
  96. function setManagement()
  97. {
  98. global $INTERNAL,$RESPONSE,$GROUPS;
  99. if(!DB_CONNECTION)
  100. {
  101. $res = testDataBase($CONFIG["gl_db_host"],$CONFIG["gl_db_user"],$CONFIG["gl_db_pass"],$CONFIG["gl_db_name"],$CONFIG["gl_db_prefix"]);
  102. if(!empty($res))
  103. $RESPONSE->SetValidationError(LOGIN_REPLY_DB,$res);
  104. return;
  105. }
  106. if($INTERNAL[CALLER_SYSTEM_ID]->Level == USER_LEVEL_ADMIN)
  107. {
  108. createFile(PATH_USERS . "internal.inc.php",base64_decode($_POST[POST_INTERN_FILE_INTERN]),true);
  109. createFile(PATH_GROUPS . "groups.inc.php",base64_decode($_POST[POST_INTERN_FILE_GROUPS]),true);
  110. getData(true,true,true,false);
  111. updatePredefinedMessages();
  112. if(isset($_POST[POST_INTERN_EDIT_USER]))
  113. {
  114. $combos = explode(";",$_POST[POST_INTERN_EDIT_USER]);
  115. for($i=0;$i<count($combos);$i++)
  116. if(strpos($combos[$i],",") !== false)
  117. {
  118. $vals = explode(",",$combos[$i]);
  119. if(strlen($vals[1])>0)
  120. $INTERNAL[$vals[0]]->ChangePassword($vals[1]);
  121. $INTERNAL[$vals[0]]->SetPasswordChangeNeeded(($vals[2] == 1));
  122. }
  123. }
  124. $datafiles = getDirectory(PATH_USERS,".htm",true);
  125. foreach($datafiles as $datafile)
  126. if(strpos($datafile, FILE_EXTENSION_PASSWORD) !== false || strpos($datafile, FILE_EXTENSION_CHANGE_PASSWORD) !== false)
  127. {
  128. $parts = explode(".",$datafile);
  129. if(!isset($INTERNAL[$parts[0]]))
  130. @unlink(PATH_USERS . $datafile);
  131. }
  132. setIdle(0);
  133. $RESPONSE->SetStandardResponse(1,"");
  134. }
  135. }
  136. function setConfig($id = 0)
  137. {
  138. global $INTERNAL,$RESPONSE,$STATS;
  139. if(SERVERSETUP && $INTERNAL[CALLER_SYSTEM_ID]->Level == USER_LEVEL_ADMIN)
  140. {
  141. if(STATS_ACTIVE && isset($_POST[POST_INTERN_RESET_STATS]) && $_POST[POST_INTERN_RESET_STATS]=="1")
  142. $STATS->ResetAll();
  143. $id = createFile(FILE_CONFIG,base64_decode($_POST[POST_INTERN_UPLOAD_VALUE]),true);
  144. if(isset($_POST[POST_INTERN_SERVER_AVAILABILITY]))
  145. setAvailability($_POST[POST_INTERN_SERVER_AVAILABILITY]);
  146. if(isset($_POST[POST_INTERN_FILE_CARRIER_LOGO]) && strlen($_POST[POST_INTERN_FILE_CARRIER_LOGO]) > 0)
  147. base64ToFile(FILE_CARRIERLOGO,$_POST[POST_INTERN_FILE_CARRIER_LOGO]);
  148. else if(isset($_POST[POST_INTERN_FILE_CARRIER_LOGO]) && file_exists(FILE_CARRIERLOGO))
  149. @unlink(FILE_CARRIERLOGO);
  150. if(isset($_POST[POST_INTERN_FILE_CARRIER_HEADER]) && strlen($_POST[POST_INTERN_FILE_CARRIER_HEADER]) > 0)
  151. base64ToFile(FILE_CARRIERHEADER,$_POST[POST_INTERN_FILE_CARRIER_HEADER]);
  152. else if(isset($_POST[POST_INTERN_FILE_CARRIER_HEADER]) && file_exists(FILE_CARRIERHEADER))
  153. @unlink(FILE_CARRIERHEADER);
  154. if(isset($_POST[POST_INTERN_FILE_INVITATION_LOGO]) && strlen($_POST[POST_INTERN_FILE_INVITATION_LOGO]) > 0)
  155. base64ToFile(FILE_INVITATIONLOGO,$_POST[POST_INTERN_FILE_INVITATION_LOGO]);
  156. else if(isset($_POST[POST_INTERN_FILE_INVITATION_LOGO]) && file_exists(FILE_INVITATIONLOGO))
  157. @unlink(FILE_INVITATIONLOGO);
  158. $int = 1;
  159. while(isset($_POST[POST_INTERN_DOWNLOAD_TRANSLATION_ISO . "_" . $int]) && strpos($_POST[POST_INTERN_DOWNLOAD_TRANSLATION_ISO . "_" . $int],"..") === false)
  160. {
  161. if(!isset($_POST[POST_INTERN_DOWNLOAD_TRANSLATION_DELETE . "_" . $int]))
  162. createFile("./_language/lang" . strtolower($_POST[POST_INTERN_DOWNLOAD_TRANSLATION_ISO . "_" . $int]) . ".php", slashesStrip($_POST[POST_INTERN_DOWNLOAD_TRANSLATION_CONTENT . "_" . $int]), true);
  163. else
  164. @unlink("./_language/lang" . strtolower($_POST[POST_INTERN_DOWNLOAD_TRANSLATION_ISO . "_" . $int]) . ".php");
  165. $int++;
  166. }
  167. }
  168. removeSSpanFile(true);
  169. setIdle(0);
  170. $RESPONSE->SetStandardResponse($id,"");
  171. }
  172. function dataBaseTest($id=0)
  173. {
  174. global $RESPONSE;
  175. $res = testDataBase($_POST[POST_INTERN_DATABASE_HOST],$_POST[POST_INTERN_DATABASE_USER],$_POST[POST_INTERN_DATABASE_PASS],$_POST[POST_INTERN_DATABASE_NAME],$_POST[POST_INTERN_DATABASE_PREFIX]);
  176. if(empty($res))
  177. $RESPONSE->SetStandardResponse(1,base64_encode(""));
  178. else
  179. $RESPONSE->SetStandardResponse(2,base64_encode($res));
  180. }
  181. function sendTestMail()
  182. {
  183. global $RESPONSE,$CONFIG;
  184. $return = sendMail($CONFIG["gl_mail_sender"],$CONFIG["gl_mail_sender"],$CONFIG["gl_mail_sender"],"LiveZilla Test Mail","LiveZilla Test Mail");
  185. if(empty($return))
  186. $RESPONSE->SetStandardResponse(1,base64_encode(""));
  187. else
  188. $RESPONSE->SetStandardResponse(2,base64_encode($return));
  189. }
  190. function createTables($id=0)
  191. {
  192. global $RESPONSE,$GROUPS,$INTERNAL;
  193. if($INTERNAL[CALLER_SYSTEM_ID]->Level==USER_LEVEL_ADMIN)
  194. {
  195. $connection = @mysql_connect($_POST[POST_INTERN_DATABASE_HOST],$_POST[POST_INTERN_DATABASE_USER],$_POST[POST_INTERN_DATABASE_PASS]);
  196. //mysql_query("SET NAMES 'utf8'", $connection);
  197. if(!$connection)
  198. {
  199. $error = mysql_error();
  200. $RESPONSE->SetStandardResponse($id,base64_encode("Can't connect to database. Invalid host or login! (" . mysql_errno() . ((!empty($error)) ? ": " . $error : "") . ")"));
  201. }
  202. else
  203. {
  204. mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $connection);
  205. $db_selected = mysql_select_db(@mysql_real_escape_string($_POST[POST_INTERN_DATABASE_NAME]),$connection);
  206. if (!$db_selected)
  207. $RESPONSE->SetStandardResponse($id,base64_encode(mysql_errno() . ": " . mysql_error()));
  208. else
  209. {
  210. $resultv = @mysql_query("SELECT VERSION() as `mysql_version`",$connection);
  211. if(!$resultv)
  212. {
  213. $RESPONSE->SetStandardResponse($id,base64_encode(mysql_errno() . ": " . mysql_error() . "\r\n\r\nSQL: " . $sql));
  214. return;
  215. }
  216. else
  217. {
  218. $mrow = @mysql_fetch_array($resultv, MYSQL_BOTH);
  219. $mversion = explode(".",$mrow["mysql_version"]);
  220. if(count($mversion) > 0 && $mversion[0] < MYSQL_NEEDED_MAJOR)
  221. {
  222. $RESPONSE->SetStandardResponse($id,base64_encode("LiveZilla requires MySQL version ".MYSQL_NEEDED_MAJOR." or greater. The MySQL version installed on your server is " . $mrow["mysql_version"]."."));
  223. return;
  224. }
  225. }
  226. $commands = explode("###",str_replace("<!--prefix-->",$_POST[POST_INTERN_DATABASE_PREFIX],base64_decode($_POST["p_db_sql"])));
  227. foreach($commands as $sql)
  228. {
  229. $result = mysql_query(trim($sql),$connection);
  230. if(!$result && mysql_errno() != 1050 && mysql_errno() != 1005)
  231. {
  232. $RESPONSE->SetStandardResponse($id,base64_encode(mysql_errno() . ": " . mysql_error() . "\r\n\r\nSQL: " . $sql));
  233. return;
  234. }
  235. }
  236. $counter=0;
  237. foreach($GROUPS as $gid => $group)
  238. {
  239. @mysql_query("INSERT INTO `".@mysql_real_escape_string($_POST[POST_INTERN_DATABASE_PREFIX]).DATABASE_PREDEFINED."` (`id` ,`internal_id` ,`group_id` ,`lang_iso` ,`invitation_manual`, `invitation_auto` ,`welcome` ,`website_push_manual`, `website_push_auto` ,`browser_ident` ,`is_default` ,`auto_welcome`)VALUES ('".@mysql_real_escape_string($counter++)."', '','".@mysql_real_escape_string($gid)."', 'EN', 'Hello, my name is %name%. Do you need help? Start Live-Chat now to get assistance.', 'Hello, my name is %name%. Do you need help? Start Live-Chat now to get assistance.','Hello %external_name%, my name is %name%, how may I help you?', 'Website Operator %name% would like to redirect you to this URL:\r\n\r\n%url%', 'Website Operator %name% would like to redirect you to this URL:\r\n\r\n%url%', '1', '1', '1');",$connection);
  240. @mysql_query("INSERT INTO `".@mysql_real_escape_string($_POST[POST_INTERN_DATABASE_PREFIX]).DATABASE_PREDEFINED."` (`id` ,`internal_id` ,`group_id` ,`lang_iso` ,`invitation_manual`, `invitation_auto` ,`welcome` ,`website_push_manual`, `website_push_auto` ,`browser_ident` ,`is_default` ,`auto_welcome`)VALUES ('".@mysql_real_escape_string($counter++)."', '','".@mysql_real_escape_string($gid)."', 'DE', '".utf8_encode("Guten Tag, meine Name ist %name%. Benötigen Sie Hilfe? Gerne berate ich Sie in einem Live Chat.")."', '".utf8_encode("Guten Tag, meine Name ist %name%. Benötigen Sie Hilfe? Gerne berate ich Sie in einem Live Chat.")."','Guten Tag %external_name%, mein Name ist %name% wie kann ich Ihnen helfen?', '".utf8_encode("Ein Betreuer dieser Webseite (%name%) möchte Sie auf einen anderen Bereich weiterleiten:\\r\\n\\r\\n%url%")."','".utf8_encode("Ein Betreuer dieser Webseite (%name%) möchte Sie auf einen anderen Bereich weiterleiten:\\r\\n\\r\\n%url%")."', '1', '0', '1');",$connection);
  241. }
  242. $sql = "INSERT INTO `".@mysql_real_escape_string($_POST[POST_INTERN_DATABASE_PREFIX]).DATABASE_INFO."` (`version`,`chat_id`,`ticket_id`) VALUES ('".VERSION."',11700,11700);";
  243. $result = mysql_query($sql,$connection);
  244. if(!$result && mysql_errno() != 1062)
  245. {
  246. $RESPONSE->SetStandardResponse($id,base64_encode(mysql_errno() . ": " . mysql_error() . "\r\n\r\nSQL: " . $sql));
  247. return;
  248. }
  249. $RESPONSE->SetStandardResponse(1,base64_encode(""));
  250. }
  251. }
  252. }
  253. }
  254. function createTable($_sql,$_connection)
  255. {
  256. $sql = "CREATE TABLE `".@mysql_real_escape_string($_POST[POST_INTERN_DATABASE_PREFIX]).$_sql;
  257. $result = mysql_query($sql,$_connection);
  258. if(!$result && mysql_errno() != 1050)
  259. {
  260. $RESPONSE->SetStandardResponse($id,base64_encode(mysql_errno() . ": " . mysql_error() . "\r\n\r\nSQL: " . $sql));
  261. return false;
  262. }
  263. return true;
  264. }
  265. function testDataBase($_host,$_user,$_pass,$_dbname,$_prefix)
  266. {
  267. if(!function_exists("mysql_connect"))
  268. return "PHP/MySQL extension is missing (php_mysql.dll)";
  269. $connection = @mysql_connect($_host,$_user,$_pass);
  270. @mysql_query("SET NAMES 'utf8'", $connection);
  271. if(!$connection)
  272. {
  273. $error = mysql_error();
  274. return "Can't connect to database. Invalid host or login! (" . mysql_errno() . ((!empty($error)) ? ": " . $error : "") . ")";
  275. }
  276. else
  277. {
  278. $db_selected = @mysql_select_db(@mysql_real_escape_string($_dbname),$connection);
  279. if (!$db_selected)
  280. return mysql_errno() . ": " . mysql_error();
  281. else
  282. {
  283. $resultv = @mysql_query("SELECT VERSION() as `mysql_version`",$connection);
  284. if(!$resultv)
  285. return mysql_errno() . ": " . mysql_error();
  286. else
  287. {
  288. $mrow = @mysql_fetch_array($resultv, MYSQL_BOTH);
  289. $mversion = explode(".",$mrow["mysql_version"]);
  290. if(count($mversion) > 0 && $mversion[0] < MYSQL_NEEDED_MAJOR)
  291. return "LiveZilla requires MySQL version ".MYSQL_NEEDED_MAJOR." or greater. The MySQL version installed on your server is " . $mrow["mysql_version"].".";
  292. }
  293. $tables =
  294. array(
  295. DATABASE_INFO=>array("`version`","`chat_id`","`ticket_id`","`gtspan`"),
  296. DATABASE_RESOURCES=>array("`id`","`owner`","`editor`","`value`","`edited`","`title`","`created`","`type`","`discarded`","`parentid`","`rank`","`size`"),
  297. DATABASE_PREDEFINED=>array("`id`","`internal_id`","`group_id`","`lang_iso`","`invitation_manual`","`invitation_auto`","`welcome`","`website_push_manual`","`website_push_auto`","`browser_ident`","`is_default`","`auto_welcome`","`editable`"),
  298. DATABASE_TICKETS=>array("`id`","`user_id`","`target_group_id`"),
  299. DATABASE_TICKET_MESSAGES=>array("`id`","`time`","`ticket_id`","`text`","`fullname`","`email`","`company`","`ip`"),
  300. DATABASE_TICKET_EDITORS=>array("`ticket_id`","`internal_fullname`","`status`","`time`"),
  301. DATABASE_POSTS=>array("`id`","`chat_id`","`time`","`micro`","`sender`","`receiver`","`receiver_group`","`text`","`translation`","`translation_iso`","`received`","`persistent`"),
  302. DATABASE_EVENT_ACTION_INVITATIONS=>array("`id`","`action_id`","`position`","`speed`","`slide`","`margin_left`","`margin_top`","`margin_right`","`margin_bottom`","`style`","`close_on_click`"),
  303. DATABASE_EVENT_TRIGGERS=>array("`id`","`receiver_user_id`","`receiver_browser_id`","`action_id`","`time`","`triggered`"),
  304. DATABASE_PROFILES=>array("`id`" ,"`edited`" ,"`first_name`" ,"`last_name`" ,"`email`" ,"`company`" ,"`phone`" ,"`fax`" ,"`street`" ,"`zip`" ,"`department`" ,"`city`" ,"`country`" ,"`gender`" ,"`languages`" ,"`comments`" ,"`public`"),
  305. DATABASE_PROFILE_PICTURES=>array("`id`","`internal_id`","`time`","`webcam`","`data`")
  306. );
  307. $result = @mysql_query("SELECT `version` FROM `".@mysql_real_escape_string($_prefix).DATABASE_INFO."`",$connection);
  308. $row = @mysql_fetch_array($result, MYSQL_BOTH);
  309. $version = $row["version"];
  310. if(!$result || empty($version))
  311. return "Cannot read the LiveZilla Database version. Please try to recreate the table structure.";
  312. if($version != VERSION)
  313. {
  314. require_once("./_lib/functions.data.db.update.inc.php");
  315. $upres = updateDatabase($version,$connection,$_prefix);
  316. if($upres !== true)
  317. return "Cannot update database structure from [".$version."] to [".VERSION."]. Please make sure that the user " . $_user . " has the MySQL permission to ALTER tables in " . $_dbname .".\r\n\r\nError: " . $upres;
  318. }
  319. foreach($tables as $tblName => $fieldlist)
  320. {
  321. $result = @mysql_query("SHOW COLUMNS FROM `".@mysql_real_escape_string($_prefix.$tblName)."`",$connection);
  322. if(!$result)
  323. return mysql_errno() . ": " . mysql_error();
  324. else if(@mysql_num_rows($result) != count($fieldlist))
  325. return "Invalid field count for " . $_prefix.$tblName . ". Delete " . $_prefix.$tblName. " manually and try to recreate the tables.";
  326. }
  327. return null;
  328. }
  329. }
  330. }
  331. ?>