Proyectos de Subversion Moodle

Rev

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/>.

/**
 * Mailing Class
 *
 * @package    mod_custommailing
 * @author     olivier@cblue.be
 * @copyright  2021 CBlue SPRL
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

namespace mod_custommailing;

use dml_exception;
use stdClass;

defined('MOODLE_INTERNAL') || die();

global $CFG;

require_once $CFG->dirroot . '/mod/custommailing/lib.php';

/**
 * Class Mailing
 * @package mod_custommailing
 *
 * @property int id
 * @property int custommailingid
 * @property string mailingname
 * @property string mailinglang
 * @property string mailingsubject
 * @property string mailingcontent
 * @property int mailingcontentformat
 * @property int mailingmodle
 * @property int mailingdelay
 * @property int mailingstatus
 * @property int targetmoduleid
 * @property int customcertmoduleid
 * @property int starttime
 * @property int timecreated
 * @property int timemodified
 */
class Mailing {

    /**
     * @param stdClass $record
     * @return bool|int
     * @throws dml_exception
     */
    public static function create(stdClass $record) {
        global $DB;

        $record->timecreated = $record->timemodified = time();

        return $DB->insert_record('custommailing_mailing', $record);
    }

    /**
     * @param int $id
     * @return stdClass
     * @throws dml_exception
     */
    public static function get(int $id) {
        global $DB;

        $record = $DB->get_record('custommailing_mailing', ['id' => $id], '*', MUST_EXIST);
        $record = Mailing::format($record);


        return $record;
    }

    /**
     * @param int $id
     * @return stdClass
     * @throws dml_exception
     */
    public static function getWithCourse(int $id) {
        global $DB;

        $sql = "SELECT cm.*, c.course as courseid
                FROM {custommailing_mailing} cm
                JOIN {custommailing} c ON c.id = cm.custommailingid
                ";
        $record = $DB->get_record_sql($sql, ['id' => $id]);
        $record = Mailing::format($record);

        return $record;
    }


    /**
     * @param int $custommailing_id
     * @return stdClass[]
     * @throws dml_exception
     */
    public static function getAll(int $custommailing_id) {
        global $DB;

        $records = [];
        $rs = $DB->get_recordset('custommailing_mailing', ['custommailingid' => $custommailing_id], 'id ASC');
        foreach ($rs as $record) {
            $record = Mailing::format($record);
            $records[$record->id] = $record;
        }
        $rs->close();

        return $records;
    }

    /**
     * @param stdClass $record
     * @return bool
     * @throws dml_exception
     */
    public static function update(stdClass $record) {
        global $DB;

        $record->timemodified = time();

        return $DB->update_record('custommailing_mailing', $record);
    }

    /**
     * @param int $id
     * @throws dml_exception
     */
    public static function delete(int $id) {
        global $DB;

        $DB->delete_records('custommailing_logs', ['custommailingmailingid' => $id]);
        $DB->delete_records('custommailing_mailing', ['id' => $id]);
    }

    /**
     * @param int $custommailing_id
     * @throws dml_exception
     */
    public static function deleteAll(int $custommailing_id) {
        foreach (Mailing::getAll($custommailing_id) as $mailing) {
            Mailing::delete($mailing->id);
        }
    }

    /**
     * @return array
     * @throws dml_exception
     */
    public static function getAllToSend() {
        global $DB;

        $records = [];
        $sql = "SELECT cm.*, c.course as courseid
                FROM {custommailing_mailing} cm
                JOIN {custommailing} c ON c.id = cm.custommailingid
                ";
        $rs = $DB->get_recordset_sql($sql, ['mailingstatus' => MAILING_STATUS_ENABLED]);
        foreach ($rs as $record) {
            $record = Mailing::format($record);
            $records[$record->id] = $record;
        }
        $rs->close();

        return $records;
    }

    /**
     * @param stdClass $record
     * @return stdClass
     */
    protected static function format(stdClass $record) {
        $record->id = (int) $record->id;
        $record->custommailingid = (int) $record->custommailingid;
        $record->mailingcontentformat = (int) $record->mailingcontentformat;
        $record->mailingmode = (int) $record->mailingmode;
        $record->mailingdelay = (int) $record->mailingdelay;
        $record->mailingstatus = (bool) $record->mailingstatus;
        $record->retroactive = (bool) $record->retroactive;
        $record->targetmoduleid = (int) $record->targetmoduleid;
        $record->targetmodulestatus = (int) $record->targetmodulestatus;
        $record->customcertmoduleid = empty($record->customcertmoduleid) ? null : (int) $record->customcertmoduleid;
        $record->starttime = (int) $record->starttime;
        $record->timecreated = (int) $record->timecreated;
        $record->timemodified = (int) $record->timemodified;

        return $record;
    }
}