Files
GEOVizor_PHP/monitoring/messages.php
2023-11-07 19:51:49 +06:00

197 lines
6.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
//Вернуть в JSON кол-во необработанных сообщений (не присвоенных ни одному пользователю)
//И всё другое связаное с оброботкой сообщений для пользователя
@session_start();
require_once("./config.php");
$db=connectToDB();
$db->exec('SET NAMES utf8');
$db->exec("SET time_zone = '+00:00'");
$fn=0;
if(isset($_GET['fn'])) { $fn=$_GET['fn']; }
if($fn=='1') //Вернуть кол-во не присвоеных пользователю сообщений
{
$m_all_count=0; //Количество не присвоенных никому сообщений.
$m_user_count=0; //Количество не обработаны сообщений для текущего пользователя.
$sql = 'SELECT count(*) FROM messages m join companies c on m.company_id=c.id WHERE m.del=false and m.id NOT IN (SELECT mu.message_id FROM messagesusers mu WHERE del=false) and c.description=\'TRANSIT\';';
try {
$res = $db->query($sql);
} catch (Exception $e) {
echo $e->getMessage();
$res = null;
}
while ($row = $res->fetch(PDO::FETCH_NUM))
{
$m_all_count = $row[0];
}
if($_SESSION['USER_ID']!='')
{
$sql = "SELECT COUNT(*) FROM monitoring.messagesusers WHERE user_id=".$_SESSION['USER_ID']." AND del=FALSE and date_read IS null";
try {
$res = $db->query($sql);
} catch (Exception $e) {
echo $e->getMessage();
$res = null;
}
while ($row = $res->fetch(PDO::FETCH_NUM))
{
$m_user_count = $row[0];
}
}
$json ='';
header('Content-Type: application/json');
$json .='{';
$json .='"count":'.$m_all_count.",\n";
$json .='"user":'.$m_user_count."\n";
$json .='}';
echo $json;
exit;
}if($fn=='2') //Присвоить последнее сообщение пользователю и вернуть его ID
{
$id='';
$errorCode='0';
$errorMessage='';
$sql = 'SELECT m.id FROM messages m join companies c on m.company_id=c.id WHERE m.del=false and m.id NOT IN (SELECT mu.message_id FROM messagesusers mu WHERE del=false) and c.description=\'TRANSIT\' ORDER BY m.priority desc, m.date_create LIMIT 1';
try {
$res = $db->query($sql);
} catch (Exception $e) {
$errorCode='1';
$errorMessage = $e->getMessage();
$res = null;
}
if($res != null)
{
if ($row = $res->fetch(PDO::FETCH_NUM))
{
//Присваиваю текущему пользователю
$sql="insert into messagesusers(message_id,user_id,date_create)values(".$row[0].",".$_SESSION['USER_ID'].",now())";
try {
$res = $db->query($sql);
} catch (Exception $e) {
$errorCode='1';
$errorMessage = $e->getMessage();
$res = null;
}
$id=$row[0];
}
}
header('Content-Type: application/json');
echo '{"errorCode":'.$errorCode.',"errorMessage":"'.$errorMessage.'","id":"'.$id.'"}';
exit;
}if($fn=='3') //Вернуть данные пользователю в соответствии со значением фильтра
{
$status='';
if(isset($_GET['status'])) { $status=$_GET['status']; }
if($status=='0'){ //Не отработанные
$sql='SELECT mu.id,m.subject,m.text,m.date_create FROM messagesusers mu JOIN messages m ON m.id=mu.message_id WHERE mu.del=FALSE AND m.del=FALSE and mu.user_id='.$_SESSION['USER_ID'].' AND mu.date_read IS null';
}
if($status=='1'){ //Отработанные
$sql='SELECT mu.id,m.subject,m.text,m.date_create FROM messagesusers mu JOIN messages m ON m.id=mu.message_id WHERE mu.del=FALSE AND m.del=FALSE and mu.user_id='.$_SESSION['USER_ID'].' AND mu.date_read > NOW() - INTERVAL 30 DAY';
}
try {
$res = $db->query($sql);
} catch (Exception $e) {
//echo $e->getMessage();
$res = null;
}
$json ='';
$json .='[';
if($res != null)
{
while ($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$json .='{';
$json .='"id":'.$row['id'].',';
$json .='"subject":"'.str_replace("\n"," ",addslashes($row['subject'])).'",';
$json .='"text":"'.str_replace("\n"," ",addslashes($row['text'])).'"';
$json .="},";
}
if($json[strlen($json)-1]==','){
$json = substr($json, 0, -1);
}
}
$json .=']';
header('Content-Type: application/json');
echo $json;
exit;
}if($fn=='4') //Одна запись для подтверждения
{
//$status='';
//if(isset($_GET['status'])) { $status=$_GET['status']; }
$sql='SELECT mu.id,m.subject,m.text,m.date_create FROM messagesusers mu JOIN messages m ON m.id=mu.message_id WHERE mu.del=FALSE AND m.del=FALSE and mu.user_id='.$_SESSION['USER_ID'].' AND mu.date_read IS null';
try {
$res = $db->query($sql);
} catch (Exception $e) {
//echo $e->getMessage();
$res = null;
}
$json ='';
$json .='{';
if($res != null)
{
if($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$json .='"id":'.$row['id'].',';
$json .='"subject":"'.str_replace("\n"," ",addslashes($row['subject'])).'",';
$json .='"text":"'.str_replace("\n"," ",addslashes($row['text'])).'"';
}
//$json = substr($json, 0, -2);
}
$json .='}';
header('Content-Type: application/json');
echo $json;
exit;
}if($fn=='5') //Отмечаем сообщение как обработанное
{
$errorCode='0';
$errorMessage='';
if(!isset($HTTP_RAW_POST_DATA))
{ $HTTP_RAW_POST_DATA = file_get_contents("php://input");
}
$object = json_decode($HTTP_RAW_POST_DATA);
//Сохраняю текст и присваиваю время чтения
$sql="update messagesusers set date_read=now(), description = :description where id = ".$object->id;
$stmt = $db->prepare($sql);
$stmt->bindParam(':description', $object->description, PDO::PARAM_STR);
try
{
$res = $stmt->execute();
} catch (Exception $e)
{
$errorCode='1';
$errorMessage = $e->getMessage();
}
header('Content-Type: application/json');
echo '{"errorCode":'.$errorCode.',"errorMessage":"'.$errorMessage.'"}';
exit;
}else
{
header('Content-Type: application/json');
echo '{"error":1}';
}