XF 2.2 Функция отправки личных сообщений

zvukoper

Проверенные
Сообщения
33
Реакции
15
Баллы
11,005
Подскажите нубу, пожалуйста. (искал поиском)

У меня есть файл php. Я там вызываю функции, типа $db = \XF::db();
Всё работает. Мне нужно из такого своего файла отправить личку пользователю. Какую функцию вызвать? Или где подсмотреть. Лазил по разным частям кода, не нашёл отправку лички.
 
Спасибо! Когда вызываю из шаблона, всё отлично работает.

Подскажите, пожалуйста, как сделать, чтобы такая же функция срабатывала просто в моём php коде? Вне шаблона.
Можно как-то вызывать их из XF или как-то инклудить или подключить ещё как-то?

Вот моя функция. Но она не срабатывает.

Форум лежит на хостинге в папке /f
А код с моим php и этой функцией лежит на том же уровне, в соседней директории.

Может нужно тут полный путь? Не могу понять. Может такое извне и не вызвать?
$finder = f\src\XF::finder('XF:User');

PHP:
function sendPrivateMessage($sender_id, $receiver_id, $title, $message)
    {
            $finder = \XF::finder('XF:User');
            $starterUser = $finder->where('user_id', $sender_id)->fetchOne();
            $finder = \XF::finder('XF:User');
            $otherUser = $finder->where('user_id', $receiver_id)->fetchOne();
            $recipients = [$otherUser];
            /** @var \XF\Service\Conversation\Creator $creator */
            $creator = \XF::service('XF:Conversation\Creator', $starterUser);
            $creator->setIsAutomated();
            $creator->setOptions([
            'open_invite' => $message->open_invite,
            'conversation_open' => !$message->conversation_locked
            ]);
            $creator->setRecipientsTrusted($recipients);
            $creator->setContent($title, $message);
            
            if ($creator->validate())
            {
                $conversation = $creator->save();
                
                if ($message->conversation_delete != 'no_delete')
                {
                    /** @var \XF\Entity\ConversationRecipient $recipient */
                    $recipient = $conversation->Recipients[$starterUser->user_id];
                    //$recipient->recipient_state = $message->conversation_delete;
                    $recipient->save(false);
                }
            }
            else
            {
                \XF::logError($message);
            }
    }
 
Нашел какой-то пример. Чуть позже попробую, может сработает.
PHP:
  /** @var  $fileDir */
  $fileDir = '/Users/layneheiny/Documents/Sites/xf2';
  require($fileDir . '/src/XF.php');
 
  XF::start($fileDir);
  $app = XF::setupApp('XF\Pub\App');
 
Не разобрался. В итоге всё завелось через API.

PHP:
function sendPrivateMessage($sender_id, $receiver_id, $title, $message)
{
$post = [
'recipient_ids[]' => $receiver_id,
'title' => $title,
'message' => $message,
'conversation_open' => true,
'open_invite' => true
];

$post= http_build_query($post);


$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://domain.com/f/api/conversations/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $post,
CURLOPT_HTTPHEADER => array(
'XF-Api-User: '.$sender_id,
'XF-Api-Key: API_KEY'
),
));

$response = curl_exec($curl);

curl_close($curl);
}
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу