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

278 lines
9.7 KiB
PHP
Raw Permalink 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("../../monitoring/config.php");
require_once("../tools.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 main.messages m join main.companies c on m.company_id=c.id WHERE m.del=false and m.id NOT IN (SELECT mu.message_id FROM main.messages_users mu WHERE del=false) and m.company_id=(select company_id from main._users where id='.$_SESSION['USER_ID'].')';
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 main.messages_users 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 main.messages m join main.companies c on m.company_id=c.id WHERE m.del=false and m.id NOT IN (SELECT mu.message_id FROM main.messages_users mu WHERE del=false) and m.company_id=(select company_id from main._users where id='.$_SESSION['USER_ID'].') 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 main.messages_users(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":'.json_encode($errorMessage,JSON_UNESCAPED_UNICODE).',"id":"'.$id.'"}';
exit;
}if($fn=='3') //Вернуть данные пользователю в соответствии со значением фильтра
{
$status='';
if(isset($_GET['status'])) { $status=$_GET['status']; }
if($status=='0'){ //Не отработанные
$sql='
SELECT
mu.id,
main."_"('.$_SESSION['USER_ID'].',m.subject) as subject,
main."_"('.$_SESSION['USER_ID'].',m.text) as text,
m.text_settings,
m.date_create
FROM
main.messages_users mu
JOIN main.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 main.messages_users mu JOIN main.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';
$sql='
SELECT
mu.id,
main."_"('.$_SESSION['USER_ID'].',m.subject) as subject,
main."_"('.$_SESSION['USER_ID'].',m.text) as text,
m.text_settings,
m.date_create
FROM
main.messages_users mu
JOIN main.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 not null';
}
try {
$res = $db->query($sql);
} catch (Exception $e) {
$json = '{"errorMessage":'.json_encode($e->getMessage(),JSON_UNESCAPED_UNICODE).'}';
header('Content-Type: application/json');
echo $json;
exit;
}
$json ='';
$json .='[';
if($res != null)
{
while ($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$json .='{';
$json .='"id":'.$row['id'].',';
$json .='"subject":'.json_encode($row['subject'],JSON_UNESCAPED_UNICODE).',';
$text=$row['text'];
$text_settings=$row['text_settings'];
$obj=json_decode($text_settings);
if($obj) //Перебираю параметры и пытаюсь подставить в строку
{
foreach ($obj as $name => $value) {
$text = str_replace('${'.$name.'}', trt($value), $text);
}
}
$json .='"text":'.json_encode($text,JSON_UNESCAPED_UNICODE).'';
$json .="},";
}
if($json[strlen($json)-1]==','){
$json = substr($json, 0, -1);
}
}
$json .=']';
header('Content-Type: application/json');
echo $json;
exit;
}if($fn=='4') //Одна запись для подтверждения
{
if(!isset($HTTP_RAW_POST_DATA))
{ $HTTP_RAW_POST_DATA = file_get_contents("php://input");
}
$object = json_decode($HTTP_RAW_POST_DATA);
if(!property_exists($object,'id') or $object->id=='') $object->id='null'; //id компании
$sql='
SELECT
mu.id,
main."_"('.$_SESSION['USER_ID'].',m.subject) as subject,
main."_"('.$_SESSION['USER_ID'].',m.text) as text,
m.text_settings,
m.date_create,
m.action_name,
m.action_settings
FROM
main.messages_users mu
JOIN main.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.id='.$object->id;
try {
$res = $db->query($sql);
} catch (Exception $e) {
$json = '{"errorMessage":'.json_encode($e->getMessage(),JSON_UNESCAPED_UNICODE).'}';
header('Content-Type: application/json');
echo $json;
exit;
}
$json ='';
$json .='{';
if($res != null)
{
if($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
{
$json .='"id":'.$row['id'].',';
$json .='"subject":'.json_encode($row['subject'],JSON_UNESCAPED_UNICODE).',';
$text=$row['text'];
$text_settings=$row['text_settings'];
$obj=json_decode($text_settings);
if($obj) //Перебираю параметры и пытаюсь подставить в строку
{
foreach ($obj as $name => $value) {
$text = str_replace('${'.$name.'}', trt($value), $text);
}
}
$json .='"text":'.json_encode($text,JSON_UNESCAPED_UNICODE).',';
$json .='"action_name":'.json_encode($row['action_name'],JSON_UNESCAPED_UNICODE).',';
if($row['action_settings']!='')
{
$json .='"action_settings":'.$row['action_settings'];
}else
{
$json .='"action_settings":{}';
}
}
}
$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 main.messages_users 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 '{"errorCode":1,"errorMessage":"Неизвестная функция!"}';
}