Skip to content

Instantly share code, notes, and snippets.

@Asmitta-01
Last active April 3, 2023 10:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Asmitta-01/dd263ec92856cb6ab91fc47159f8eaf2 to your computer and use it in GitHub Desktop.
Save Asmitta-01/dd263ec92856cb6ab91fc47159f8eaf2 to your computer and use it in GitHub Desktop.
[livechat] script php
<?php
// Fonction excutee lors de l'acces a l'url .../charger-messages
function send_all_messages()
{
date_default_timezone_set("Europe/Paris");
header('Cache-Control: no-cache');
header('Content-type: text/event-stream');
while (true) {
$user = wp_get_current_user();
require_once('includes/repositories/repository-discussion.php');
require_once('includes/repositories/repository-message.php');
$discussionRepo = new DiscussionRepository();
$discussions = $discussionRepo->getAllForUser($user);
if ($discussions !== null) {
$messageRepo = new MessageRepository();
$messages = array_map(function (Discussion $discussion) use ($messageRepo) {
return $messageRepo->getAllForDiscussion($discussion->id);
}, $discussions);
$messagesToArray = array_map(function ($messages) {
return array_map(function (Message $message) {
return $message->toArray(true);
}, $messages);
}, $messages);
echo "event: updated\n";
echo 'data: {"messages_pack": ' . json_encode($messagesToArray) . ', "user_id": ' . $user->ID . '}';
echo "\n\n";
}
ob_end_flush();
flush();
if (connection_aborted())
break;
sleep(2);
}
}
// Fonction executee lors de l'acces a admin-ajax.php avec pour "action" = 'send_message'
add_action('wp_ajax_send_message', 'send_message');
function send_message()
{
if (is_user_logged_in()) {
$discussion_id = $_POST['discussion_id'] ?? 0;
require_once('includes/repositories/repository-discussion.php');
$discussionRepo = new DiscussionRepository();
if ($discussion_id == 0) {
require_once('includes/class-discussion.php');
$discussion = new Discussion();
$discussion->member_1 = wp_get_current_user();
$discussion->member_2 = get_user_by('ID', $_POST['user_id']);
$discussion_id = $discussionRepo->insert($discussion);
if (!$discussion_id) {
wp_send_json_error(['created_discussion' => false]);
} else {
$discussion->id = $discussion_id;
}
} else {
$discussion = $discussionRepo->get($discussion_id);
}
require_once('includes/repositories/repository-message.php');
require_once('includes/class-message.php');
$message = new Message();
$message->content = $_POST['message_content'] ?? '';
$message->attachement = '';
$message->sender = wp_get_current_user();
$message->setDiscussion($discussion);
$messageRepo = new MessageRepository();
if (is_int($messageRepo->insert($message))) {
wp_send_json_success([
'created_message' => true,
'messages' => array_map(function (Message $message) {
return $message->toArray(true);
}, $messageRepo->getAllForDiscussion($discussion_id))
]);
}
}
wp_send_json_error([
'created_message' => false
]);
}
add_action('wp_ajax_mark_messages_as_read', 'mark_messages_as_read');
function mark_messages_as_read()
{;
ob_start();
$discussion_id = $_POST['discussion_id'] ?? 0;
require_once('includes/repositories/repository-discussion.php');
$discussionRepo = new DiscussionRepository();
if ($discussionRepo->get($discussion_id) != null) {
require_once('includes/repositories/repository-message.php');
$messageRepo = new MessageRepository();
if ($messageRepo->markAllAsReadForUser($discussion_id, wp_get_current_user()->ID)) {
wp_send_json_success([
'mark_messages_as_read' => true
]);
}
}
error_log(ob_get_clean(), 3, DEBUG_LOGS_FILE);
wp_send_json_error([
'mark_messages_as_read' => false
]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment