AutorÃa | Ultima modificación | Ver Log |
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
defined('MOODLE_INTERNAL') || die();
use core_sms\message_status;
require_once($CFG->dirroot . '/message/output/lib.php');
require_once($CFG->libdir . '/moodlelib.php');
/**
* Message processor for SMS.
*
* @package message_sms
* @copyright 2024 Safat Shahin <safat.shahin@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class message_output_sms extends message_output {
#[\Override]
public function send_message($message): bool {
$userdata = is_object($message->userto) ? $message->userto : get_complete_user_data('id', $message->userto);
if (empty($userdata) || !$this->is_user_configured($userdata) || !$this->should_send_sms($message)) {
return false;
}
$manager = \core\di::get(\core_sms\manager::class);
$result = $manager->send(
recipientnumber: $userdata->phone2,
content: $message->fullmessagesms,
component: $message->component,
messagetype: $message->name,
recipientuserid: $userdata->id,
);
if ($result->status === message_status::GATEWAY_QUEUED ||
$result->status === message_status::GATEWAY_SENT
) {
return true;
}
debugging($result->status->description());
return false;
}
#[\Override]
public function is_user_configured($user = null): bool {
if (empty($user)) {
return false;
}
// Skip any SMS if user doesn't have a mobile number.
if (empty($user->phone2)) {
mtrace('No mobile number found for userid: ' . $user->id);
return false;
}
// Skip any messaging of suspended and deleted users.
if (
$user->auth === 'nologin' ||
$user->suspended ||
$user->deleted
) {
mtrace('The user with userid: ' . $user->id . ' is either deleted or suspended. Can not send SMS.');
return false;
}
return true;
}
/**
* Check whether the SMS message data fulfills the requirements.
*
* @param stdclass $messagedata The message data
* @return bool
*/
public function should_send_sms(stdclass $messagedata): bool {
// Don't send SMS if it's not a production site and the following config is set.
if (!empty($CFG->nosmsever)) {
mtrace('Can not send SMS while nosmsever is enabled.');
return false;
}
// We don't have a fallback for SMS text. It has to be included.
if (!isset($messagedata->fullmessagesms)) {
mtrace('No SMS string found for the message');
return false;
}
// Check support for SMS from the component.
if (!core_message\helper::supports_sms_notifications($messagedata)) {
return false;
}
return true;
}
#[\Override]
public function load_data(&$preferences, $userid) {
return;
}
#[\Override]
public function config_form($preferences) {
return;
}
#[\Override]
public function process_form($form, &$preferences) {
return;
}
#[\Override]
public function get_default_messaging_settings() {
return MESSAGE_DISALLOWED;
}
#[\Override]
public function can_send_to_any_users() {
return true;
}
}