1<?php
2// This file is part of Moodle - http://moodle.org/
3//
4// Moodle is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// Moodle is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16
17/**
18 * Defines classes used for plugin info.
19 *
20 * @package    core
21 * @copyright  2011 David Mudrak <david@moodle.com>
22 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23 */
24namespace core\plugininfo;
25
26use moodle_url, part_of_admin_tree, admin_settingpage;
27
28defined('MOODLE_INTERNAL') || die();
29
30/**
31 * Class for messaging processors
32 */
33class message extends base {
34    /**
35     * Finds all enabled plugins, the result may include missing plugins.
36     * @return array|null of enabled plugins $pluginname=>$pluginname, null means unknown
37     */
38    public static function get_enabled_plugins() {
39        global $DB;
40        return $DB->get_records_menu('message_processors', array('enabled'=>1), 'name ASC', 'name, name AS val');
41    }
42
43    public function get_settings_section_name() {
44        return 'messagesetting' . $this->name;
45    }
46
47    public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) {
48        global $CFG, $USER, $DB, $OUTPUT, $PAGE; // In case settings.php wants to refer to them.
49        $ADMIN = $adminroot; // May be used in settings.php.
50        $plugininfo = $this; // Also can be used inside settings.php.
51
52        if (!$this->is_installed_and_upgraded()) {
53            return;
54        }
55
56        if (!$hassiteconfig) {
57            return;
58        }
59        $section = $this->get_settings_section_name();
60
61        $settings = null;
62        $processors = get_message_processors();
63        if (isset($processors[$this->name])) {
64            $processor = $processors[$this->name];
65            if ($processor->available && $processor->hassettings) {
66                $settings = new admin_settingpage($section, $this->displayname,
67                    'moodle/site:config', $this->is_enabled() === false);
68                include($this->full_path('settings.php')); // This may also set $settings to null.
69            }
70        }
71        if ($settings) {
72            $ADMIN->add($parentnodename, $settings);
73        }
74    }
75
76    /**
77     * Return URL used for management of plugins of this type.
78     * @return moodle_url
79     */
80    public static function get_manage_url() {
81        return new moodle_url('/admin/message.php');
82    }
83
84    public function is_uninstall_allowed() {
85        return true;
86    }
87
88    /**
89     * Pre-uninstall hook.
90     *
91     * This is intended for disabling of plugin, some DB table purging, etc.
92     *
93     * NOTE: to be called from uninstall_plugin() only.
94     * @private
95     */
96    public function uninstall_cleanup() {
97        global $CFG;
98
99        require_once($CFG->libdir.'/messagelib.php');
100        message_processor_uninstall($this->name);
101
102        parent::uninstall_cleanup();
103    }
104}
105