kenken999/php
0
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.=" ";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." </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?>