~ubuntu-branches/ubuntu/utopic/moodle/utopic

« back to all changes in this revision

Viewing changes to lib/classes/plugininfo/qtype.php

  • Committer: Package Import Robot
  • Author(s): Thijs Kinkhorst
  • Date: 2014-05-12 16:10:38 UTC
  • mfrom: (36.1.3 sid)
  • Revision ID: package-import@ubuntu.com-20140512161038-puyqf65k4e0s8ytz
Tags: 2.6.3-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 */
 
24
namespace core\plugininfo;
 
25
 
 
26
use moodle_url, part_of_admin_tree, admin_settingpage, core_plugin_manager;
 
27
 
 
28
defined('MOODLE_INTERNAL') || die();
 
29
 
 
30
/**
 
31
 * Class for question types
 
32
 */
 
33
class qtype 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
 
 
41
        $plugins = core_plugin_manager::instance()->get_installed_plugins('qtype');
 
42
        if (!$plugins) {
 
43
            return array();
 
44
        }
 
45
        $installed = array();
 
46
        foreach ($plugins as $plugin => $version) {
 
47
            $installed[] = $plugin.'_disabled';
 
48
        }
 
49
 
 
50
        list($installed, $params) = $DB->get_in_or_equal($installed, SQL_PARAMS_NAMED);
 
51
        $disabled = $DB->get_records_select('config_plugins', "name $installed AND plugin = 'question'", $params, 'plugin ASC');
 
52
        foreach ($disabled as $conf) {
 
53
            if (empty($conf->value)) {
 
54
                continue;
 
55
            }
 
56
            $name = substr($conf->name, 0, -9);
 
57
            unset($plugins[$name]);
 
58
        }
 
59
 
 
60
        $enabled = array();
 
61
        foreach ($plugins as $plugin => $version) {
 
62
            $enabled[$plugin] = $plugin;
 
63
        }
 
64
 
 
65
        return $enabled;
 
66
    }
 
67
 
 
68
    public function is_uninstall_allowed() {
 
69
        global $DB;
 
70
 
 
71
        if ($this->name === 'missingtype') {
 
72
            // qtype_missingtype is used by the system. It cannot be uninstalled.
 
73
            return false;
 
74
        }
 
75
 
 
76
        return !$DB->record_exists('question', array('qtype' => $this->name));
 
77
    }
 
78
 
 
79
    /**
 
80
     * Return URL used for management of plugins of this type.
 
81
     * @return moodle_url
 
82
     */
 
83
    public static function get_manage_url() {
 
84
        return new moodle_url('/admin/qtypes.php');
 
85
    }
 
86
 
 
87
    /**
 
88
     * Pre-uninstall hook.
 
89
     *
 
90
     * This is intended for disabling of plugin, some DB table purging, etc.
 
91
     *
 
92
     * NOTE: to be called from uninstall_plugin() only.
 
93
     * @private
 
94
     */
 
95
    public function uninstall_cleanup() {
 
96
        // Delete any question configuration records mentioning this plugin.
 
97
        unset_config($this->name . '_disabled', 'question');
 
98
        unset_config($this->name . '_sortorder', 'question');
 
99
 
 
100
        parent::uninstall_cleanup();
 
101
    }
 
102
 
 
103
    public function get_settings_section_name() {
 
104
        return 'qtypesetting' . $this->name;
 
105
    }
 
106
 
 
107
    public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) {
 
108
        global $CFG, $USER, $DB, $OUTPUT, $PAGE; // In case settings.php wants to refer to them.
 
109
        $ADMIN = $adminroot; // May be used in settings.php.
 
110
        $plugininfo = $this; // Also can be used inside settings.php.
 
111
        $qtype = $this;      // Also can be used inside settings.php.
 
112
 
 
113
        if (!$this->is_installed_and_upgraded()) {
 
114
            return;
 
115
        }
 
116
 
 
117
        $section = $this->get_settings_section_name();
 
118
 
 
119
        $settings = null;
 
120
        $systemcontext = \context_system::instance();
 
121
        if (($hassiteconfig || has_capability('moodle/question:config', $systemcontext)) &&
 
122
            file_exists($this->full_path('settings.php'))) {
 
123
            $settings = new admin_settingpage($section, $this->displayname,
 
124
                'moodle/question:config', $this->is_enabled() === false);
 
125
            include($this->full_path('settings.php')); // This may also set $settings to null.
 
126
        }
 
127
        if ($settings) {
 
128
            $ADMIN->add($parentnodename, $settings);
 
129
        }
 
130
    }
 
131
}