Example #1
0
$systemcontext = context_system::instance();
require_capability('moodle/question:config', $systemcontext);
admin_externalpage_setup('manageqbehaviours');
$thispageurl = new moodle_url('/admin/qbehaviours.php');
$behaviours = get_plugin_list('qbehaviour');
$pluginmanager = plugin_manager::instance();
// Get some data we will need - question counts and which types are needed.
$counts = $DB->get_records_sql_menu("\n        SELECT behaviour, COUNT(1)\n        FROM {question_attempts} GROUP BY behaviour");
$needed = array();
$archetypal = array();
foreach ($behaviours as $behaviour => $notused) {
    if (!array_key_exists($behaviour, $counts)) {
        $counts[$behaviour] = 0;
    }
    $needed[$behaviour] = $counts[$behaviour] > 0 || $pluginmanager->other_plugins_that_require('qbehaviour_' . $behaviour);
    $archetypal[$behaviour] = question_engine::is_behaviour_archetypal($behaviour);
}
foreach ($counts as $behaviour => $count) {
    if (!array_key_exists($behaviour, $behaviours)) {
        $counts['missing'] += $count;
    }
}
$needed['missing'] = true;
// Work of the correct sort order.
$config = get_config('question');
$sortedbehaviours = array();
foreach ($behaviours as $behaviour => $notused) {
    $sortedbehaviours[$behaviour] = question_engine::get_behaviour_name($behaviour);
}
if (!empty($config->behavioursortorder)) {
    $sortedbehaviours = question_engine::sort_behaviours($sortedbehaviours, $config->behavioursortorder, '');
 function action($state)
 {
     $behaviours = get_plugin_list('qbehaviour');
     $pm = plugin_manager::instance();
     $sql = "\n            SELECT\n                behaviour,\n                COUNT(1)\n            FROM \n                {question_attempts}\n            GROUP BY\n                behaviour\n        ";
     $counts = $DB->get_records_sql_menu($sql);
     $needed = array();
     $archetypal = array();
     foreach ($behaviours as $behaviour => $foobar) {
         if (!array_key_exists($behaviour, $counts)) {
             $counts[$behaviour] = 0;
         }
         $needed[$behaviour] = $counts[$behaviour] > 0 || $pm->other_plugins_that_require('qbehaviour_' . $behaviour);
         $archetypal[$behaviour] = question_engine::is_behaviour_archetypal($behaviour);
     }
     $config = get_config('question');
     if (!empty($config->disabledbehaviours)) {
         $disabledbehaviours = explode(',', $config->disabledbehaviours);
     } else {
         $disabledbehaviours = array();
     }
     if (!isset($behaviours[$this->plugin])) {
         return get_string('unknownbehaviour', 'question', $this->plugin);
     }
     switch ($action) {
         case 'enable':
             if (!$archetypal[$this->plugin]) {
                 return get_string('cannotenablebehaviour', 'question', $this->plugin);
             }
             if (($key = array_search($this->plugin, $disabledbehaviours)) !== false) {
                 unset($disabledbehaviours[$key]);
                 set_config('disabledbehaviours', implode(',', $disabledbehaviours), 'question');
             }
             break;
         case 'disable':
             if (array_search($disable, $disabledbehaviours) === false) {
                 $disabledbehaviours[] = $disable;
                 set_config('disabledbehaviours', implode(',', $disabledbehaviours), 'question');
             }
             break;
     }
     return 0;
 }