CoolFace
Apppublic

kenken999/php

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
chat_functions.php868 linesDownload Raw Back to public
1<?php2function isGroupTarget($id){3	if(substr($id,0,1) == "G")4		return true;5	else6		return false;7}8function getGroupID($id){9	return substr($id,1);10}11function getGroupIDs($targetid){12	if(substr($targetid,0,1) == "G"){13		$gid = str_replace("G","",$targetid);14		$res = DB::DBLookup(DB::PrepareSQL("select ".AddFieldWrappers("ownerid")." from ".AddTableWrappers("chat_groups")." where ".AddFieldWrappers("id")."=:1",$gid));15		if(!$res)16			return 0;17		$res = $res.",".DB::DBLookup(DB::PrepareSQL("select ".AddFieldWrappers("targetid")." from ".AddTableWrappers("chat_groups")." where ".AddFieldWrappers("id")."=:1",$gid));18		return $res;19	}20	else21		return $targetid;22	23}24function getGroupIDsIn($targetid){25	global $loginKeyFields, $cLoginTable;26	$res = array();27	if(substr($targetid,0,1) == "G"){28		$gid = str_replace("G","",$targetid);29		$res[] = DB::DBLookup(DB::PrepareSQL("select ".AddFieldWrappers("ownerid")." from ".AddTableWrappers("chat_groups")." where ".AddFieldWrappers("id")."=:1",$gid));30		if(!count($res))31			return 0;32		$arr = explode(",",DB::DBLookup(DB::PrepareSQL("select ".AddFieldWrappers("targetid")." from ".AddTableWrappers("chat_groups")." where ".AddFieldWrappers("id")."=:1",$gid)));33		$res = array_merge($res,$arr);34		35		/*$pSet = new ProjectSettings( $cLoginTable );36		$ftype = $pSet->getFieldType( $loginKeyFields[0] );37		if(NeedQuotes($ftype))38			$out = "'".implode("','",$res)."'";39		else40			$out = implode(",",$res);*/41		return $res;42	}43	else44		return array($targetid);45	46}47 48function getGroupMenu(){49	global $loginKeyFields;50	$userdata = Security::currentUserData();51	$countGroups = 0;52	$groups = "";53	$rs = DB::Select("chat_groups","");54	while($data = $rs->fetchAssoc()){55		$targetArr = explode(",",$data["targetid"]);56		if($data["ownerid"] == $userdata[$loginKeyFields[0]]){57			if($groups)58				$groups.=",";59			$groups.= $data["id"];60		}61		if(in_array($userdata[$loginKeyFields[0]],$targetArr)){62			if($groups)63				$groups.=",";64			$groups.= $data["id"];65		}66		67		$countGroups++;68	}69	$_SESSION["countGroups"] = $countGroups;70	71	$menu = "";72	// create group menu73	if($groups){74		$menu.= "<table width=100% >";75		$rs = DB::Select("chat_groups",AddFieldWrappers("id")." in (".$groups.")");76		while($data = $rs->fetchAssoc()){77				$author = $data["groupname"];78				if(!$author)79					$author = "Group chat";80				$isType = 0;81				$cnt_messages = 0;82				$sql = DB::PrepareSQL("select * from ".AddTableWrappers("chat_history")." where ".AddFieldWrappers("ownerid")."<>':1' and ".AddFieldWrappers("targetid")."=':2'",$userdata[$loginKeyFields[0]],"G".$data["id"]);83				$rs2 = DB::Query($sql);84				while($data2 = $rs2->fetchAssoc()){85					$arr = explode(",",$data2["isread"]);86					if(!in_array($userdata[$loginKeyFields[0]],$arr))87						$cnt_messages++;88				}89				if($cnt_messages>0)90					$cnt_messages = "<div class='indicator'>".$cnt_messages."</div>";91				else92					$cnt_messages = "";93				$avatar = "<span class='menu_typing isTypingG".$data["id"]."' id='searching-ellipsis' style='display:none;'><span>.</span><span>.</span><span>.</span></span>";94				$display_author = $author;95				if(strlen($display_author)>27)96					$display_author = substr($display_author,0,24)."...";97				$s = "";98				if($_SESSION["targetid"] == "G".$data["id"])99					$s = " td_users_selected";100				$type_popup = "user";101				if($data["ownerid"] == $userdata[$loginKeyFields[0]])102					$type_popup = "admin";103				104				$menu.= "<tr><td class='td_groups".$s."' userid='G".$data["id"]."'>".$avatar."<div style='display:inline-table' id='menuusernameG".$data["id"]."'>".$display_author."</div>".$cnt_messages;105 106				107				if($data["ownerid"] == $userdata[$loginKeyFields[0]]){108					$menu.= "<span class='caret_down_grchat_".$data["id"]."' rid='".$data["id"]."' owner='".$type_popup."'><svg xmlns='http://www.w3.org/2000/svg' width='11' height='11' fill='currentColor' class='bi bi-caret-down-fill' viewBox='0 0 16 16'>109				  <path class='_bi-caret' d='M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z'/>110				</svg></span>";111					$menu.= "<span class='caret_up_grchat_".$data["id"]."' rid='".$data["id"]."' owner='".$type_popup."'><svg xmlns='http://www.w3.org/2000/svg' width='11' height='11' fill='currentColor' class='bi bi-caret-right-fill' viewBox='0 0 16 16'>112					  <path class='_bi-caret' d='m12.14 8.753-5.482 4.796c-.646.566-1.658.106-1.658-.753V3.204a1 1 0 0 1 1.659-.753l5.48 4.796a1 1 0 0 1 0 1.506z'/>113					</svg></span></td><td>".$typing."</td></tr>";114				}115				else{116					$menu.= "<span class='caret_down_grchat_".$data["id"]."' rid='".$data["id"]."' owner='".$type_popup."'><svg width='1em' height='1em' viewBox='0 0 12 12' class='bi bi-x' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>117					  <path class='_bi-caret' fill-rule='evenodd' d='M11.854 4.146a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708-.708l7-7a.5.5 0 0 1 .708 0z'/>118					  <path class='_bi-caret' fill-rule='evenodd' d='M4.146 4.146a.5.5 0 0 0 0 .708l7 7a.5.5 0 0 0 .708-.708l-7-7a.5.5 0 0 0-.708 0z'/>119					</svg></span>";120					$menu.= "<span class='caret_up_grchat_".$data["id"]."' rid='".$data["id"]."' owner='".$type_popup."'><svg width='1em' height='1em' viewBox='0 0 12 12' class='bi bi-x' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>121					  <path class='_bi-caret' fill-rule='evenodd' d='M11.854 4.146a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708-.708l7-7a.5.5 0 0 1 .708 0z'/>122					  <path class='_bi-caret' fill-rule='evenodd' d='M4.146 4.146a.5.5 0 0 0 0 .708l7 7a.5.5 0 0 0 .708-.708l-7-7a.5.5 0 0 0-.708 0z'/>123					</svg></span></td><td>".$typing."</td></tr>";124				}125				if(!$_SESSION["targetid"])126					$_SESSION["targetid"] = "G".$data["id"];127		}128		$menu.= "</table>";129		$menu = "<div class='div_users'>".$menu."</div>";130	}131	132	return $menu;133}134 135 136function getMenu(){137	global $loginKeyFields, $cLoginTable,$cDisplayNameField, $cUserpicField, $cUserNameField;138	if(!$cDisplayNameField)139		$cDisplayNameField = $cUserNameField;140	$userdata = Security::currentUserData();141	$users = array();142	if(!isGroupTarget($_SESSION["targetid"]) && $_SESSION["targetid"])143		$users[] = $_SESSION["targetid"];144	$sql = DB::PrepareSQL("select ".AddFieldWrappers("ownerid")." from ".AddTableWrappers("chat_history")." where ".AddFieldWrappers("targetid")."=':1' group by ".AddFieldWrappers("ownerid"),$userdata[$loginKeyFields[0]]);145	$rs = DB::Query($sql);146	$countUsers = 0;147	while($data = $rs->fetchAssoc()){148		if(!isGroupTarget($data["ownerid"])){149			$users[] = $data["ownerid"];150			$countUsers++;151		}152	}153	$sql = DB::PrepareSQL("select ".AddFieldWrappers("targetid")." from ".AddTableWrappers("chat_history")." where ".AddFieldWrappers("ownerid")."=':1' group by ".AddFieldWrappers("targetid"),$userdata[$loginKeyFields[0]]);154	$rs = DB::Query($sql);155	while($data = $rs->fetchAssoc()){156		if(!isGroupTarget($data["targetid"])){157			$users[] = $data["targetid"];158			$countUsers++;159		}160	}161	$_SESSION["countUsers"] = $countUsers;162	$menu = "";163	164	165	$menu = "<div class='div_users'>";166	167	// create menu168	if(count($users)){169		$menu.= "<table width=100% >";170		$dc = new DsCommand();171		$conditions = array();172		$conditions[] = DataCondition::FieldIs( $loginKeyFields[0], dsopIN, $users );173		$dc->filter = DataCondition::_And( $conditions );174		$datasource = getLoginDataSource();175		$rs = $datasource->getList( $dc );176		while($data = $rs->fetchAssoc()){177				$author = $data[$cDisplayNameField];178				if(!$author)179					$author = $data[$cUserNameField];180				$rs2 = DB::Select("chat_users",array("userid"=>$data[$loginKeyFields[0]]));181				$isType = 0;182				if($data2 = $rs2->fetchAssoc()){183					if(strtotime(date("Y-m-d H:i:s")) - strtotime($data2["lastaccess"]) > $_SESSION["loginTime"])184						$cl = "offline";185					else186						$cl = "online";187					$isType = $data2["isTyping"];188				}189				else190					$cl = "offline";191				$cnt_messages = "";192				$sql = DB::PrepareSQL("select count(".AddFieldWrappers("id").") as cnt from ".AddTableWrappers("chat_history")." where ".AddFieldWrappers("isread")."='0' and ".AddFieldWrappers("ownerid")."=':1' and ".AddFieldWrappers("targetid")."=':2'",$data[$loginKeyFields[0]],$userdata[$loginKeyFields[0]]);193				$rs2 = DB::Query($sql);194				$data2 = $rs2->fetchAssoc();195				if($data2["cnt"]>0)196					$cnt_messages = "<div class='indicator'>".$data2["cnt"]."</div>";197				$onoffline = "<div id='userIsOnline_".$data[$loginKeyFields[0]]."' class='".$cl." ind_state' align=center></div>";198				$avatar = getAvatar($data,"",false)."<span class='menu_typing isTyping".$data[$loginKeyFields[0]]."' id='searching-ellipsis' style='display:none;'><span>.</span><span>.</span><span>.</span></span>";199				$display_author = $author;200				if(strlen($display_author)>27)201					$display_author = substr($display_author,0,24)."...";202				$s = "";203				if($_SESSION["targetid"] == $data[$loginKeyFields[0]])204					$s = " td_users_selected";205				$menu.= "<tr><td class='td_users".$s."' userid='".$data[$loginKeyFields[0]]."'>".$onoffline.$avatar."<div style='display:inline-table' id='menuusername".$data[$loginKeyFields[0]]."'>".$display_author."</div>".$cnt_messages."</td><td>".$typing."</td></tr>";206				if(!$_SESSION["targetid"])207					$_SESSION["targetid"] = $data[$loginKeyFields[0]];208		}209			210		$menu.= "</table></div>";211	}212	return $menu;213}214 215function getAjaxMenu(){216	$userdata = Security::currentUserData();217	global $loginKeyFields, $cLoginTable,$cDisplayNameField, $cUserpicField, $cUserNameField;218	if(!$cDisplayNameField)219		$cDisplayNameField = $cUserNameField;220 221	$users = array();222	if(!isGroupTarget($_SESSION["targetid"]) && $_SESSION["targetid"])223		$users[] = $_SESSION["targetid"];224	$sql = DB::PrepareSQL("select ".AddFieldWrappers("ownerid")." from ".AddTableWrappers("chat_history")." where ".AddFieldWrappers("targetid")."=':1' group by ".AddFieldWrappers("ownerid"),$userdata[$loginKeyFields[0]]);225	$rs = DB::Query($sql);226	$countUsers = 0;227	while($data = $rs->fetchAssoc()){228		if(!isGroupTarget($data["ownerid"])){229			$users[] = $data["ownerid"];230			$countUsers++;231		}232	}233	$sql = DB::PrepareSQL("select ".AddFieldWrappers("targetid")." from ".AddTableWrappers("chat_history")." where ".AddFieldWrappers("ownerid")."=':1' group by ".AddFieldWrappers("targetid"),$userdata[$loginKeyFields[0]]);234	$rs = DB::Query($sql);235	while($data = $rs->fetchAssoc()){236		if(!isGroupTarget($data["targetid"])){237			$users[] = $data["targetid"];238			$countUsers++;239		}240	}241	if($_SESSION["countUsers"] == $countUsers){242		$arrMenu = array();243		if(count($users)){244			$dc = new DsCommand();245			$conditions = array();246			$conditions[] = DataCondition::FieldIs( $loginKeyFields[0], dsopIN, $users );247			$dc->filter = DataCondition::_And( $conditions );248			$datasource = getLoginDataSource();249			$rs = $datasource->getList( $dc );250			while($data = $rs->fetchAssoc()){251				$elemMenu = array();252				$rs2 = DB::Select("chat_users", array("userid"=>$data[$loginKeyFields[0]]));253				$isType = 0;254				if($data2 = $rs2->fetchAssoc()){255					if(strtotime(date("Y-m-d H:i:s")) - strtotime($data2["lastaccess"]) > $_SESSION["loginTime"])256						$cl = "offline";257					else{258						$cl = "online";259						if(!isGroupTarget($data2["isTyping"]))260							$isType = $data2["isTyping"];261					}262				}263				else264					$cl = "offline";265				266				//$isType = $data2["isTyping"];267				268				269				$cnt_messages = "";270				$sql = DB::PrepareSQL("select count(".AddFieldWrappers("id").") as cnt from ".AddTableWrappers("chat_history")." where ".AddFieldWrappers("isread")."='0' and ".AddFieldWrappers("ownerid")."=':1' and ".AddFieldWrappers("targetid")."=':2'",$data[$loginKeyFields[0]],$userdata[$loginKeyFields[0]]);271				$rs2 = DB::Query($sql);272				$data2 = $rs2->fetchAssoc();273				if($data2["cnt"]>0)274					$cnt_messages = $data2["cnt"];275				$elemMenu["notify"] = $cnt_messages;276				$elemMenu["status"] = $cl;277				$elemMenu["typing"] = $isType;278				$elemMenu["username"] = $data[$cUserNameField];279				$arrMenu[$data[$loginKeyFields[0]]] = $elemMenu;280				281				if(!$_SESSION["targetid"])282					$_SESSION["targetid"] = $data[$loginKeyFields[0]];283 284			}285		}286	}287	else{288		$arrMenu["menu"] = getMenu();289		$_SESSION["countUsers"] = $countUsers;290	}291	return $arrMenu;292}293 294function getGroupAjaxMenu(){295	global $loginKeyFields;296	$userdata = Security::currentUserData();297	$countGroups = 0;298	$groups = "";299	$rs = DB::Select("chat_groups","");300	while($data = $rs->fetchAssoc()){301		if($data["ownerid"] == $userdata[$loginKeyFields[0]]){302			if($groups)303				$groups.=",";304			$groups.= $data["id"];305			$countGroups++;306		}307		$targetArr = explode(",",$data["targetid"]);308		if(in_array($userdata[$loginKeyFields[0]],$targetArr) && $data["ownerid"] != $userdata[$loginKeyFields[0]]){309			if($groups)310				$groups.=",";311			$groups.= $data["id"];312			$countGroups++;313		}314	}315	$arrMenu = array();316	//$arrMenu["tmp"] = $_SESSION["countGroups"]."---".$countGroups;317	if($_SESSION["countGroups"] == $countGroups){318	// create group menu319		if($groups){320			$countGroups = 0;321			$rs = DB::Select("chat_groups",AddFieldWrappers("id")." in (".$groups.")");322			while($data = $rs->fetchAssoc()){323				$elemMenu = array();324				$isType = 0;325				$rs2 = DB::Select("chat_users", array("isTyping"=>"G".$data["id"]));326				$isType = 0;327				if($data2 = $rs2->fetchAssoc()){328					if(isGroupTarget($data2["isTyping"]) && $data2["userid"]!=$userdata[$loginKeyFields[0]])329							$isType = $data2["isTyping"];330				}331				$cnt_messages = 0;332				$sql = DB::PrepareSQL("select * from ".AddTableWrappers("chat_history")." where ".AddFieldWrappers("ownerid")."<>':1' and ".AddFieldWrappers("targetid")."=':2'",$userdata[$loginKeyFields[0]],"G".$data["id"]);333				$rs2 = DB::Query($sql);334				while($data2 = $rs2->fetchAssoc()){335					$arr = explode(",",$data2["isread"]);336					if(!in_array($userdata[$loginKeyFields[0]],$arr))337						$cnt_messages++;338				}339				$elemMenu["notify"] = $cnt_messages;340				$elemMenu["typing"] = $isType;341				$elemMenu["name"] = $data["groupname"];342				$arrMenu["G".$data["id"]] = $elemMenu;343				$countGroups++;344			}345			if($_SESSION["countGroups"] != $countGroups){346				$arrMenu["menu"] = getGroupMenu();347				$_SESSION["countGroups"] = $countGroups;348			}349		}350	}351	else{352		$arrMenu["menu"] = getGroupMenu();353		$_SESSION["countGroups"] = $countGroups;354	}355	356	return $arrMenu;357}358 359 360function getUserStatus($targetid){361	362	$rs2 = DB::Select("chat_users", array("userid"=>$targetid));363	if($data2 = $rs2->fetchAssoc()){364		if(strtotime(date("Y-m-d H:i:s")) - strtotime($data2["lastaccess"]) > $_SESSION["loginTime"]){365			$cl = "offline_header";366		}367		else{368			$cl = "online";369		}370	}371	else372		$cl = "offline_header";373	return $cl;374}375 376function getUserStatusHeader($targetid){377	$resArray = array();378	if(isGroupTarget($targetid)){379		$ids = getGroupIDs($targetid);380		$usersArray = explode(",",$ids);381		foreach($usersArray as $tid)382			$resArray[] = getStatusUser($tid);383	}384	else{385		$resArray[] = getStatusUser($targetid);386	}387	return $resArray;388}389 390function getStatusUser($targetid){391	$rs2 = DB::Select("chat_users", array("userid"=>$targetid));392	if($data2 = $rs2->fetchAssoc()){393		if(strtotime(date("Y-m-d H:i:s")) - strtotime($data2["lastaccess"]) > $_SESSION["loginTime"]){394			$resArray = array( $targetid => "offline_header");395		}396		else{397			$resArray = array( $targetid => "online");398		}399	}400	else401		$resArray = array( $targetid => "offline_header");402	return $resArray;403}404 405function getHeader(){406	global $loginKeyFields, $cLoginTable,$cDisplayNameField,$cUserNameField;407	if(!$cDisplayNameField)408		$cDisplayNameField = $cUserNameField;409	if(!$_SESSION["targetid"])410		$_SESSION["targetid"]=0;411	$hiddenInput  = "<input type='hidden' id=search_input value=''><input type='hidden' id=save_anchor value='".$_SESSION["anchor"]."'><input type='hidden' id=searchanchor value=''>";412	$userdata = Security::currentUserData();413	if(isGroupTarget($_SESSION["targetid"])){	414		$currentUserName.= "<div class='currUserNameDiv'>";415		$rs = DB::Select("chat_groups", array("id" => getGroupID($_SESSION["targetid"])));416		$data = $rs->fetchAssoc();417		$currentUserName.= "<div class='header_groupname'>".$data["groupname"]."</div>";418		$type_popup = "user";419		if($data["ownerid"] == $userdata[$loginKeyFields[0]])420			$type_popup = "admin";421		$currentUserName.= "<div class='header_groupname_edit' rid='".$data["id"]."' owner='".$type_popup."'><svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-pencil-square' viewBox='0 0 16 16'>422  <path d='M15.502 1.94a.5.5 0 0 1 0 .706L14.459 3.69l-2-2L13.502.646a.5.5 0 0 1 .707 0l1.293 1.293zm-1.75 2.456-2-2L4.939 9.21a.5.5 0 0 0-.121.196l-.805 2.414a.25.25 0 0 0 .316.316l2.414-.805a.5.5 0 0 0 .196-.12l6.813-6.814z'/>423  <path fill-rule='evenodd' d='M1 13.5A1.5 1.5 0 0 0 2.5 15h11a1.5 1.5 0 0 0 1.5-1.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5v-11a.5.5 0 0 1 .5-.5H9a.5.5 0 0 0 0-1H2.5A1.5 1.5 0 0 0 1 2.5v11z'/>424</svg></div>";425		$usersArray = explode(",",$data["targetid"]);426		$usersArray[] = $data["ownerid"];427		sort($usersArray);428		foreach($usersArray as $users){429			if($userdata[$loginKeyFields[0]] != $users){430				DB::SetConnection(DB::ConnectionByTable($cLoginTable));431				$rs2 = DB::Select( $cLoginTable, array( $loginKeyFields[0] => $users ) );432				DB::SetConnection(DB::DefaultConnection());433				if($data2 = $rs2->fetchAssoc()){434					$avatar = getAvatar($data2,"",true);435					$cl = getUserStatus($data2[$loginKeyFields[0]]);436					$onoffline = "<div class='".$cl." ind_state_header_group' align=center id='headerstatus".$data2[$loginKeyFields[0]]."'></div>";437					$uname = $data2[$cDisplayNameField];438					if(!$uname)439						$uname = $data2[$cUserNameField];440					$currentUserName.= "<div style='padding-right:1px;padding-top:0px'>".$onoffline.$avatar." <span class='header_group'>".$uname."</span></div>";441				}442			}443		}444		$currentUserName.= "</div>";445		/*$userdata = Security::currentUserData();446		if($userdata[$loginKeyFields[0]] == $data["ownerid"])447			$currentUserName.= "<div class='close_chat'><button id='delete_chat' class='btn btn-primary btn-xs'>".getCustomLabel("delete_chat")."</button></div>";448		else449			$currentUserName.= "<div class='close_chat'><a id='leave_chat' href='javascript:void(0);'>".getCustomLabel("leave_chat")."</a></div>";*/450	}451	else{452		$currentUserName = "";453		DB::SetConnection(DB::ConnectionByTable($cLoginTable));454		$rs = DB::Select( $cLoginTable, array( $loginKeyFields[0] => $_SESSION["targetid"] ) );455		DB::SetConnection(DB::DefaultConnection());456		if($data = $rs->fetchAssoc()){457			$avatar = getAvatar($data, "_message", false);458			$cl = getUserStatus($data[$loginKeyFields[0]]);459			$uname = $data[$cDisplayNameField];460			if(!$uname)461				$uname = $data[$cUserNameField];462			$onoffline = "<div class='".$cl." ind_state_header' align=center id='headerstatus".$data[$loginKeyFields[0]]."'></div>";463			$currentUserName = $onoffline.$avatar." <span class='header_name'>".$uname."</span>";464		}465	}466	return $currentUserName.$hiddenInput;467}468 469function getMessageRecordSet(){470	$userdata = Security::currentUserData();471	global $loginKeyFields, $cLoginTable,$cDisplayNameField, $cUserpicField, $cUserNameField;472	$dc = new DsCommand();473	$conditions1 = array();474	$conditions2 = array();475	if(!isGroupTarget($_SESSION["targetid"])){476		if(!$_SESSION["searchValue"]){477			//$sqlGlobal = "select * from chat_history where targetid='".$userdata[$loginKeyFields[0]]."' and ownerid='".$_SESSION["targetid"]."' or targetid='".$_SESSION["targetid"]."' and ownerid='".$userdata[$loginKeyFields[0]]."' order by id";	478			$conditions1[] = DataCondition::FieldIs( "targetid", dsopEQUAL, $userdata[$loginKeyFields[0]] );479			$conditions1[] = DataCondition::FieldIs( "ownerid", dsopEQUAL, $_SESSION["targetid"] );480			$conditions2[] = DataCondition::FieldIs( "targetid", dsopEQUAL, $_SESSION["targetid"] );481			$conditions2[] = DataCondition::FieldIs( "ownerid", dsopEQUAL, $userdata[$loginKeyFields[0]] );482			$dc->filter = DataCondition::_Or( array(483				DataCondition::_And( $conditions1 ),484				DataCondition::_And( $conditions2 ),485			));486		}487		else{488			489			//$sqlGlobal = "select * from chat_history where targetid='".$userdata[$loginKeyFields[0]]."'".$_SESSION["searchSQLValue"]." or ownerid='".$userdata[$loginKeyFields[0]]."'".$_SESSION["searchSQLValue"]." order by id";	490			$conditions1[] = DataCondition::FieldIs( "targetid", dsopEQUAL, $userdata[$loginKeyFields[0]] );491			$conditions1[] = DataCondition::FieldIs( "messages", dsopCONTAIN, $_SESSION["searchValue"] );492			$conditions2[] = DataCondition::FieldIs( "ownerid", dsopEQUAL,  $userdata[$loginKeyFields[0]] );493			$conditions2[] = DataCondition::FieldIs( "messages", dsopCONTAIN, $_SESSION["searchValue"] );494			$dc->filter = DataCondition::_Or( array(495				DataCondition::_And( $conditions1 ),496				DataCondition::_And( $conditions2 ),497			));498		}499	}500	else{501		if(!$_SESSION["searchValue"]){502			//$sqlGlobal = "select * from chat_history where targetid='".$_SESSION["targetid"]."' and ownerid in (".getGroupIDsIn($_SESSION["targetid"]).") order by id";	503			$conditions1[] = DataCondition::FieldIs( "targetid", dsopEQUAL, $_SESSION["targetid"] );504			$conditions1[] = DataCondition::FieldIs( "ownerid", dsopIN, getGroupIDsIn($_SESSION["targetid"]) );505			$dc->filter = DataCondition::_And( $conditions1 );506		}507		else{508			//$sqlGlobal = "select * from chat_history where ownerid in (".getGroupIDsIn($_SESSION["targetid"]).")".$_SESSION["searchSQLValue"]." order by id";	509			$conditions1[] = DataCondition::FieldIs( "messages", dsopCONTAIN, $_SESSION["searchValue"] );510			$conditions1[] = DataCondition::FieldIs( "ownerid", dsopIN, getGroupIDsIn($_SESSION["targetid"]) );511			$dc->filter = DataCondition::_And( $conditions1 );512		}513	}514	$dc->order = array(array( "column" => "id", "dir" => "ASC" ));515	$datasource = getDataSource("chat_history");516	$rs = $datasource->getList( $dc ); 517	return $rs;518}519 520function getMessage($isStart){521	$scrollStep = 14;522	$userdata = Security::currentUserData();523	global $loginKeyFields, $cLoginTable,$cDisplayNameField, $cUserpicField, $cUserNameField;524	if(!$cDisplayNameField)525		$cDisplayNameField = $cUserNameField;526	$period = DB::DBLookup("select ".addFieldWrappers("timeperiod")." from ".addTableWrappers("chat_settings"));527	$res_msg = "";528	$rs = getMessageRecordSet();529	$totalMessages = 0;530	while($data = $rs->fetchAssoc()){531		if(isAddMessage($data,$period,$isStart) && $data["status"]!="delete")532			$totalMessages++;533	}534	$rs = getMessageRecordSet();535	$counter = 0;536	$counterTrue = 0;537	$res_msg = array();538	$firstID = "";539	while($data = $rs->fetchAssoc()){540		if(isAddMessage($data,$period,$isStart) && $data["status"]!="delete" && !$data["isVideo"]){541			if(isCounter($counter,$totalMessages,$scrollStep,$data)){542				DB::SetConnection(DB::ConnectionByTable($cLoginTable));543				$rs2 = DB::Select($cLoginTable, array($loginKeyFields[0]=>$data["ownerid"]));544				DB::SetConnection(DB::DefaultConnection());545				$data2 = $rs2->fetchAssoc();546				$avatar = getAvatar($data2,"_message", false);547				$author = $data2[$cDisplayNameField];548				if(!$author)549					$author = $data2[$cUserNameField];550				$timeArray = array();551				$arrtmp = explode(" ",$data["created"]);552				$arrtmp1 = explode("-",$arrtmp[0]);553				$arrtmp2 = explode(":",$arrtmp[1]);554				$timeArray[0] = $arrtmp1[0];555				$timeArray[1] = $arrtmp1[1];556				$timeArray[2] = $arrtmp1[2];557				$timeArray[3] = $arrtmp2[0];558				$timeArray[4] = $arrtmp2[1];559				$timeArray[5] = "00";560				$not_read = "";561				if(!$firstID)562					$firstID = $data["id"];563				if($data["ownerid"]==$userdata[$loginKeyFields[0]]){   //// || isGroupTarget($_SESSION["targetid"])564					if(!$data["isread"] || $data["isread"] == $data["ownerid"])565						$not_read = '<span class="not_read'.$data["id"].'"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 18" width="14" height="18"><path fill="currentColor" d="M12.502 5.035l-.57-.444a.434.434 0 0 0-.609.076l-6.39 8.198a.38.38 0 0 1-.577.039l-2.614-2.556a.435.435 0 0 0-.614.007l-.505.516a.435.435 0 0 0 .007.614l3.887 3.8a.38.38 0 0 0 .577-.039l7.483-9.602a.435.435 0 0 0-.075-.609z"></path></svg></span>';566					else{567						if(!isGroupTarget($_SESSION["targetid"]))568							$not_read = '<span class="not_read'.$data["id"].'" style="color:#48D1CC"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 18" width="14" height="18"><path fill="currentColor" d="M12.502 5.035l-.57-.444a.434.434 0 0 0-.609.076l-6.39 8.198a.38.38 0 0 1-.577.039l-2.614-2.556a.435.435 0 0 0-.614.007l-.505.516a.435.435 0 0 0 .007.614l3.887 3.8a.38.38 0 0 0 .577-.039l7.483-9.602a.435.435 0 0 0-.075-.609z"></path></svg></span>';						else{569							$ids = getGroupIDs($_SESSION["targetid"]);570							$arrayIDs = explode(",",$ids);571							sort($arrayIDs);572							$arrayRead = explode(",",$data["isread"]);573							sort($arrayRead);574							if($arrayIDs == $arrayRead)575								$not_read = '<span class="not_read'.$data["id"].'" style="color:#48D1CC"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" width="18" height="18"><path fill="currentColor" d="M17.394 5.035l-.57-.444a.434.434 0 0 0-.609.076l-6.39 8.198a.38.38 0 0 1-.577.039l-.427-.388a.381.381 0 0 0-.578.038l-.451.576a.497.497 0 0 0 .043.645l1.575 1.51a.38.38 0 0 0 .577-.039l7.483-9.602a.436.436 0 0 0-.076-.609zm-4.892 0l-.57-.444a.434.434 0 0 0-.609.076l-6.39 8.198a.38.38 0 0 1-.577.039l-2.614-2.556a.435.435 0 0 0-.614.007l-.505.516a.435.435 0 0 0 .007.614l3.887 3.8a.38.38 0 0 0 .577-.039l7.483-9.602a.435.435 0 0 0-.075-.609z"></path></svg></span>';576							else577								$not_read = '<span class="not_read'.$data["id"].'" style="color:#48D1CC"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 18" width="14" height="18"><path fill="currentColor" d="M12.502 5.035l-.57-.444a.434.434 0 0 0-.609.076l-6.39 8.198a.38.38 0 0 1-.577.039l-2.614-2.556a.435.435 0 0 0-.614.007l-.505.516a.435.435 0 0 0 .007.614l3.887 3.8a.38.38 0 0 0 .577-.039l7.483-9.602a.435.435 0 0 0-.075-.609z"></path></svg></span>';578						}579					}580				}581				if(date("Y-m-d",strtotime($data["created"])) == date("Y-m-d"))582					$current_date = str_format_time($timeArray);583				else584					$current_date = str_format_datetime($timeArray);585				$current_date = str_replace(":00 "," ",$current_date);586				$message_block_search = "";587				if($_SESSION["searchValue"])588					$message_box_search = " message_block_search";589				$actpoint = "";590				if($data["ownerid"] == $userdata[$loginKeyFields[0]])591					$actpoint = " addpoint";592				$search_class="";593				if(postvalue("searchanchor") == $data["id"])594					$search_class=" select_search_result";595				596				$res_msg[$data["id"]] = "<div class='message_block".$message_box_search.$actpoint.$search_class."' anchor=".$data["id"]."><div>";597				if($_SESSION["searchValue"]){598					$targetid = $data["targetid"];599					if($targetid == $userdata[$loginKeyFields[0]])600						$targetid = $data["ownerid"];601 602					if(!isGroupTarget($targetid)){603						DB::SetConnection(DB::ConnectionByTable($cLoginTable));604						$rslog = DB::Select($cLoginTable, array($loginKeyFields[0]=>$targetid));605						DB::SetConnection(DB::DefaultConnection());606						$datalog = $rslog->fetchAssoc();607						$channel = $datalog[$cDisplayNameField];608						if(!$channel)609							$channel = $datalog[$cUserNameField];610					}611					else{612						$id = getGroupID($targetid);613						$rslog = DB::Select("chat_groups", array("id"=>$id));614						$datalog = $rslog->fetchAssoc();615						$channel = $datalog["groupname"];616					}617					$res_msg[$data["id"]].="<div class='message_search'>".$channel." - ".date("M dS,Y",strtotime($data["created"]));618					if($_SESSION["searchValue"])619						$res_msg[$data["id"]].="<a class='a_channel' href='#' onclick='clickAnchor(".$data["id"].",\"".$targetid."\");return false;'>".GetCustomLabel("view_in_channel")."</a>";620					$res_msg[$data["id"]].="</div>";621				}622				$res_msg[$data["id"]].="<div class='message_avatar'>".$avatar."</div>";623				$res_msg[$data["id"]].="<div class='message_header'><table><tr><td><b>".$author."</b> <span class='message_date'>".$current_date.$not_read."</span></td>";624				625				$res_msg[$data["id"]].="</tr></table></div>";626				$text = str_replace("\n","<br>",$data["messages"]);627				if($_SESSION["searchValue"]){628					$text = str_replace(postvalue("search"),"<span style='background:rgba(242,199,68,.4);'>".runner_htmlspecialchars(postvalue("search"))."</span>",$text);629				}630				if($data["soundRecord"]){631					$arr = my_json_decode($data["soundRecord"]);632					foreach($arr as $src)633						$text.= "<div><audio class='' controls='controls' autobuffer='autobuffer'><source src='".$src."'></audio></div>";634				}635				$res_msg[$data["id"]].= "<div class='message_author'>".$text."</div>";636				$strfiles = getAttachment($data);637				if($strfiles)638					$res_msg[$data["id"]].= "<div class='message_author'>".$strfiles."</div>";639				$res_msg[$data["id"]].= "</div>";640				$res_msg[$data["id"]].= "<div apid='".$data["id"]."' class='action_point'></div></div>";641				$counterTrue++;642			}643			$counter++;			644		}645		646	}647	if($firstID)648		$_SESSION["firstMessID"] = $firstID;649	if(postvalue("searchanchor")){650		$_SESSION["scroll_step"] = floor($counterTrue/$scrollStep);651	}652	if($counter == 0 && $isStart=="true")653		$res_msg[0] = "<span class='nomessage'>".GetCustomLabel("nomessage_id")."</span>";654 655	return $res_msg;656}657function getAttachment($data){658	global $loginKeyFields, $cLoginTable,$cDisplayNameField, $cUserpicField, $cUserNameField;659	if(!$cDisplayNameField)660		$cDisplayNameField = $cUserNameField;661	$rs2 = DB::Select("chat_files", array("messageid"=>$data["id"]));662	$strfiles = "";663	$data2 = $rs2->fetchAssoc();664	$filesArray = my_json_decode($data2["files"]);665	foreach($filesArray as $ind=>$val){666		if($strfiles)667			$strfiles.="&nbsp;&nbsp;&nbsp;";668		$fileType = getContentTypeByExtension(substr($val["usrName"], strrpos($val["usrName"], '.')));669		$icon = "<img src='images/icons/".getIconByFileType($fileType, $val["usrName"])."' />";670		$p = strrpos($val["usrName"],".");671		$ext = CheckImageExtension($val["usrName"]);672		if( $ext ){673			$strfiles.= "<div style='display:inline-block;vertical-align:top;padding-right:10px;' class='fname_preview'>".$val["usrName"]."</div>";674			$file = file_get_contents(getabspath($val["name"]));675			$src = "data:image/png;base64,".base64_encode($file);676			$strfiles.= "<div style='display:none1'><a class='message_files' dir='LTR' href='javascript:void(0)' onclick='showPictureInPopup(\"".$val["usrName"]."\",".$data2["id"].");'><img width=200px src='".$src."'></a></div>";677		}678		else{679			$fsize = $val["size"];680			if($val["size"]<1000)681				$fsize = $val["size"]." B";682			else683				$fsize = round($val["size"]/1000)." kB";684			$fname = "<table><tr><td rowspan=2>".$icon."&nbsp;</td><td><b>".$val["usrName"]."</b></td></tr><tr><td>".$fsize."</td></tr></table>";685			$strfiles.= "<div style='display:inline-block;vertical-align:top;padding-right:10px;' class='fname_preview'>".$val["usrName"]."</div>";686			$strfiles.= "<div style='display:none1'><a class='message_files' href='mfhandler.php?file=".$val["usrName"]."&table=chat_files&field=files&pageType=list&page=list&key1=".$data2["id"]."'>";687			$strfiles.= "<div class='files_border'>".$fname."</div>";688			$strfiles.= "</a></div>";689		}690	}691	return $strfiles;692}693 694function getAvatar($data, $cl = "", $needLetter = false){695	global $loginKeyFields, $cLoginTable,$cDisplayNameField, $cUserpicField, $cUserNameField;696	if(!$cDisplayNameField)697		$cDisplayNameField = $cUserNameField;698	if($data[$cUserpicField]){699		DB::SetConnection(DB::ConnectionByTable($cLoginTable));700		$rs2 = DB::Select($cLoginTable, array($loginKeyFields[0]=>$data[$loginKeyFields[0]]));701		DB::SetConnection(DB::DefaultConnection());702		$data2 = $rs2->fetchAssoc();703		$src = "data:image/png;base64,".base64_encode($data2[$cUserpicField]);704		$avatar = "<img id='menuAvatar".$data[$loginKeyFields[0]]."' class='menu_avatar".$cl."' src='".$src."' />";705	}706	else{707		$letter = "";708		if($needLetter){709			if($data[$cDisplayNameField])710				$letter = substr($data[$cDisplayNameField],0,1);711			else712				$letter = substr($data[$cUserNameField],0,1);713			$letter = "<span class='user_letter usernamepopup'>".strtoupper($letter)."</span>";714		}715		$avatar = "<img class='menu_avatar".$cl." usernamepopup' src='images/no_avatar.jpg' />".$letter;716	}717	return $avatar;718}719 720function isAddMessage($data,$period,$isStart){721	$t = explode(" ",this_microtime());722	$now = date("Y-m-d H:i:s",$t[1]).substr((string)$t[0],1,4)."000";723	if(strtotime($data["created"])>strtotime($now)-$period || $isStart=="true")724		return true;725	else726		return false;727	728}729 730function isCounter($counter,$totalMessages,$scrollStep,$data){731	if(postvalue("searchanchor")){732		if($data["id"] >= postvalue("searchanchor"))733			return true;734		else735			return false;736	}737	else{738		if($counter>=$totalMessages-$scrollStep-$_SESSION["scroll_step"]*$scrollStep)739			return true;740		else741			return false;742	}743}744 745function getDeleteMessage(){746	$res = array();747	$period = DB::DBLookup("select ".AddFieldWrappers("timeperiod")." from ".AddTableWrappers("chat_settings"));	748	$rs = DB::Select("chat_history", array("status"=>"delete"));749	while($data = $rs->fetchAssoc()){750		$res[] = $data["id"];751		if(strtotime(date("Y-m-d H:i:s")) - strtotime($data["status_created"])>=$period*2)752			DB::Delete("chat_history", array("id"=>$data["id"]));753	}754	return $res;755}756function getEditMessage(){757	$res = array();758	$period = DB::DBLookup("select ".AddFieldWrappers("timeperiod")." from ".AddTableWrappers("chat_settings"));	759	$rs = DB::Select("chat_history", array("status"=>"edit"));760	while($data = $rs->fetchAssoc()){761		$res[] = $data["id"];762		if(strtotime(date("Y-m-d H:i:s")) - strtotime($data["status_created"])>=$period*2)763			DB::Delete("chat_history", array("id"=>$data["id"]));764	}765	return $res;766}767function updateIsRead(){768	global $loginKeyFields, $cLoginTable;769	$userdata = Security::currentUserData();770		if($_SESSION["targetid"]){771		if(strpos(postvalue("url"),"chat_history_add")>0 || strpos(postvalue("url"),"chat_history/add")>0){772			if(!isGroupTarget($_SESSION["targetid"])){773				DB::Update("chat_history",array("isread"=>$userdata[$loginKeyFields[0]]),array("ownerid"=>$_SESSION["targetid"],"targetid"=>$userdata[$loginKeyFields[0]]));774			}775			else{776				$targetIDs = getGroupIDsIn($_SESSION["targetid"]);777				/*$pSet = new ProjectSettings( $cLoginTable );778				$ftype = $pSet->getFieldType( $loginKeyFields[0] );779				$val = $userdata[$loginKeyFields[0]];780				if(NeedQuotes($ftype))781					$val = "'".$userdata[$loginKeyFields[0]]."'";782				$rs2 = DB::Query("select * from chat_history where status<>'delete' and targetid='".$_SESSION["targetid"]."' and ".$val." in (".$targetIDs.")");*/783				784				$dc = new DsCommand();785				$conditions = array();786				$conditions[] = DataCondition::FieldIs( "targetid", dsopEQUAL, $_SESSION["targetid"] );787				//$conditions[] = DataCondition::FieldIs( $userdata[$loginKeyFields[0]], dsopIN, $targetIDs );788				$conditions[] = DataCondition::_Not( DataCondition::FieldIs( "status", dsopEQUAL, 'delete' ) );789				$dc->filter = DataCondition::_And( $conditions );790				$datasource = getDataSource("chat_history");791				$rs2 = $datasource->getList( $dc );792 793				while($data2 = $rs2->fetchAssoc()){794					if(in_array($userdata[$loginKeyFields[0]],$targetIDs)){795						$arrayRead = array();796						$arrayRead = explode(",",$data2["isread"]);797						$key = array_search(0, $arrayRead);798						if (false !== $key && $arrayRead[0]=="0")799							unset($arrayRead[$key]);800						if(!in_array($userdata[$loginKeyFields[0]],$arrayRead)){801							$arrayRead[] = $userdata[$loginKeyFields[0]];802							$isRead = implode(",",$arrayRead);803							DB::Update("chat_history",array("isread"=>$isRead),"id=".$data2["id"]);804						}805					}806				}807			}808		}809	}810}811 812function getIsReadStatus(){813	global $loginKeyFields;814	$userdata = Security::currentUserData();815	$isRead = array();816	$rs = DB::Select("chat_history",array("targetid"=>$_SESSION["targetid"],"ownerid"=>$userdata[$loginKeyFields[0]]));817	while($data = $rs->fetchAssoc()){818		if($data["isread"] && $data["isread"] != $data["ownerid"] && $data["id"]>=$_SESSION["firstMessID"]){819			if(!isGroupTarget($_SESSION["targetid"]))820				$isRead[$data["id"]] = 2;821			else{822				$ids = getGroupIDs($_SESSION["targetid"]);823				$arrayIDs = explode(",",$ids);824				if(!in_array($userdata[$loginKeyFields[0]],$arrayIDs))825					$arrayIDs[] = $userdata[$loginKeyFields[0]];826				sort($arrayIDs);827				$arrayRead = explode(",",$data["isread"]);828				sort($arrayRead);829				if($arrayIDs == $arrayRead)830					$isRead[$data["id"]] = 3;831				else832					$isRead[$data["id"]] = 2;833			}834		}835	}836	return $isRead;837}838 839function getVideoCallData(){840	global $loginKeyFields, $cLoginTable, $cUserpicField, $cUserNameField;841	$userdata = Security::currentUserData();842	$userid = $userdata[$loginKeyFields[0]];843	$sql = DB::PrepareSQL("select * from ".AddTableWrappers("chat_history")." where ".AddFieldWrappers("targetid")."=:1 and ".AddFieldWrappers("isVideo").">0",$userid);844	$rs = DB::Query($sql);845	if($data = $rs->fetchAssoc()){846		$_SESSION["targetid"] = $data["ownerid"];847		DB::SetConnection(DB::ConnectionByTable($cLoginTable));848		$rs2 = DB::Select( $cLoginTable, array( $loginKeyFields[0] => $data["ownerid"]) );849		DB::SetConnection(DB::DefaultConnection());850		$data2 = $rs2->fetchAssoc();851		852		DB::Delete("chat_history", array("targetid"=>$userid, "isVideo"=>1));		853		854		if($data2[$cUserpicField])855			$src = "data:image/png;base64,".base64_encode($data2[$cUserpicField]);856		else857			$src = "images/no_avatar.jpg";858		859		return array("msg"=>$data["messages"],"avatar"=>$src, "name"=>$data2[$cUserNameField], "isVideo"=>$data["isVideo"]);860	}861	else862		return array();863}864 865function this_microtime(){866	return microtime();867}868?>