getDiscussions(); foreach ($discussions as $key => $discussion) { if (!$contacts = $db->getFromTableWhere('contacts', ['number' => $discussion['number']])) { continue; } $discussions[$key]['contact'] = $contacts[0]['name']; } $this->render('discussions/default', array( 'discussions' => $discussions, )); } /** * Cette fonction permet d'afficher la discussion avec un numero * @param string $number : La numéro de téléphone avec lequel on discute */ public function show ($number) { global $db; $contact = ''; if ($contacts = $db->getFromTableWhere('contacts', ['number' => $number])) { $contact = $contacts[0]['name']; } $this->render('discussions/show', array( 'number' => $number, 'contact' => $contact, )); } /** * Cette fonction récupère l'ensemble des messages pour un numéro, recçus, envoyés, en cours * @param string $number : Le numéro cible * @param string $transactionId : Le numéro unique de la transaction ajax (sert à vérifier si la requete doit être prise en compte) */ function getmessages($number, $transactionId) { global $db; $now = new DateTime(); $now = $now->format('Y-m-d H:i:s'); $sendeds = $db->getFromTableWhere('sendeds', ['target' => $number], 'at'); $receiveds = $db->getFromTableWhere('receiveds', ['send_by' => $number], 'at'); $scheduleds = $db->getScheduledsBeforeDateForNumber($now, $number); $messages = []; foreach ($sendeds as $sended) { $messages[] = array( 'date' => htmlspecialchars($sended['at']), 'text' => htmlspecialchars($sended['content']), 'type' => 'sended', ); } foreach ($receiveds as $received) { $messages[] = array( 'date' => htmlspecialchars($received['at']), 'text' => htmlspecialchars($received['content']), 'type' => 'received', ); } foreach ($scheduleds as $scheduled) { $messages[] = array( 'date' => htmlspecialchars($scheduled['at']), 'text' => htmlspecialchars($scheduled['content']), 'type' => 'inprogress', ); } //On va trier le tableau des messages usort($messages, function($a, $b) { return strtotime($a["date"]) - strtotime($b["date"]); }); //On récupère uniquement les 25 derniers messages sur l'ensemble $messages = array_slice($messages, -25); echo json_encode(['transactionId' => $transactionId, 'messages' => $messages]); return true; } /** * Cette fonction permet d'envoyer facilement un sms à un numéro donné * @param string $csrf : Le jeton csrf * @param string $_POST['content'] : Le contenu du SMS * @param string $_POST['numbers'] : Un tableau avec le numero des gens auxquel envoyer le sms * @return json : Le statut de l'envoi */ function send ($csrf) { global $db; $return = ['success' => true, 'message' => '']; //On vérifie que le jeton csrf est bon if (!internalTools::verifyCSRF($csrf)) { $return['success'] = false; $return['message'] = 'Jeton CSRF invalide'; echo json_encode($return); return false; } $now = new DateTime(); $now = $now->format('Y-m-d H:i:s'); $_POST['date'] = $now; $scheduleds = new scheduleds(); if (!$scheduleds->create('', true, true)) { $return['success'] = false; $return['message'] = 'Impossible de créer le SMS'; echo json_encode($return); return false; } $return['id'] = $_SESSION['discussion_wait_progress'][count($_SESSION['discussion_wait_progress']) - 1]; echo json_encode($return); return true; } /** * Cette fonction retourne les id des sms qui sont envoyés * @return json : Tableau des ids des sms qui sont envoyés */ function checksendeds () { global $db; $_SESSION['discussion_wait_progress'] = isset($_SESSION['discussion_wait_progress']) ? $_SESSION['discussion_wait_progress'] : []; $scheduleds = $db->getScheduledsIn($_SESSION['discussion_wait_progress']); //On va chercher à chaque fois si on a trouvé le sms. Si ce n'est pas le cas c'est qu'il a été envoyé $sendeds = []; foreach ($_SESSION['discussion_wait_progress'] as $key => $id) { $found = false; foreach ($scheduleds as $scheduled) { if ($id == $scheduled['id']) { $found = true; } } if (!$found) { unset($_SESSION['discussion_wait_progress'][$key]); $sendeds[] = $id; } } echo json_encode($sendeds); return true; } /** * Cette fonction retourne les messages reçus pour un numéro après la date $_SESSION['discussion_last_checkreceiveds'] * @param string $number : Le numéro de téléphone pour lequel on veux les messages * @return json : Un tableau avec les messages */ function checkreceiveds ($number) { global $db; $now = new DateTime(); $now = $now->format('Y-m-d H:i'); $_SESSION['discussion_last_checkreceiveds'] = isset($_SESSION['discussion_last_checkreceiveds']) ? $_SESSION['discussion_last_checkreceiveds'] : $now; $receiveds = $db->getReceivedsSinceForNumberOrderByDate($_SESSION['discussion_last_checkreceiveds'], $number); //On va gérer le cas des messages en double en stockant ceux déjà reçus et en eliminant les autres $_SESSION['discussion_already_receiveds'] = isset($_SESSION['discussion_already_receiveds']) ? $_SESSION['discussion_already_receiveds'] : []; foreach ($receiveds as $key => $received) { //Sms jamais recu if (array_search($received['id'], $_SESSION['discussion_already_receiveds']) === false) { $_SESSION['discussion_already_receiveds'][] = $received['id']; continue; } //Sms déjà reçu => on le supprime des resultats unset($receiveds[$key]); } //On met à jour la date de dernière verif $_SESSION['discussion_last_checkreceiveds'] = $now; echo json_encode($receiveds); } }