Skip to content
Snippets Groups Projects
Select Git revision
  • 414b0ca55d5e31cf3ce68b95e055a78979231515
  • master default protected
  • hsh_v4.5
  • hsh_v4-4
  • hsh_v4.4
  • hsh_v4.3
  • hsh_v4.1.x
  • hsh_v4.2
  • hsh_v4.1
  • hsh_v3.11
  • hsh_3.10
  • v3.11-r2-hsh
  • v3.11-r2
  • v3.11-r1
  • v3.10-r1
  • v3.9-r1
  • v3.8-r2
  • v3.8-r1
  • v3.7-r1
19 results

delayedcourses.php

Blame
  • delayedcourses.php 5.55 KiB
    <?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/>.
    
    /**
     * Display the delays of courses
     *
     * @package tool_lifecycle
     * @copyright  2019 Justus Dieckmann WWU
     * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
     */
    
    use tool_lifecycle\local\form\form_delays_filter;
    use tool_lifecycle\local\table\delayed_courses_table;
    
    require_once(__DIR__ . '/../../../config.php');
    require_once($CFG->libdir . '/adminlib.php');
    
    $PAGE->set_context(context_system::instance());
    require_login();
    require_capability('moodle/site:config', context_system::instance());
    
    admin_externalpage_setup('tool_lifecycle_delayed_courses');
    
    // Action handling (delete, bulk-delete).
    $action = optional_param('action', null, PARAM_ALPHANUMEXT);
    if ($action) {
        global $DB;
        require_sesskey();
        if ($action == 'delete') {
            $cid = required_param('cid', PARAM_INT);
            $workflow = optional_param('workflow', null, PARAM_ALPHANUM);
            if ($workflow) {
                if (is_number($workflow)) {
                    $DB->delete_records('tool_lifecycle_delayed_workf', array('courseid' => $cid, 'workflowid' => $workflow));
                } else if ($workflow == 'global') {
                    $DB->delete_records('tool_lifecycle_delayed', array('courseid' => $cid));
                } else {
                    throw new \coding_exception('workflow has to be "global" or a int value');
                }
            } else {
                $DB->delete_records('tool_lifecycle_delayed', array('courseid' => $cid));
                $DB->delete_records('tool_lifecycle_delayed_workf', array('courseid' => $cid));
            }
        } else if ($action == 'bulk-delete') {
            $workflow = optional_param('workflow', null, PARAM_ALPHANUM);
            $deleteglobal = true;
            $deleteseperate = true;
            $workflowfilterid = null;
            if ($workflow) {
                if ($workflow == 'global') {
                    $deleteseperate = false;
                } else if (is_number($workflow)) {
                    $deleteglobal = false;
                    $workflowfilterid = $workflow;
                } else {
                    throw new \coding_exception('workflow has to be "global" or a int value');
                }
            }
    
            $coursename = optional_param('coursename', null, PARAM_TEXT);
            $categoryid = optional_param('catid', null, PARAM_INT);
    
            $params = [];
            $whereforcourse = [];
    
            if ($coursename) {
                $whereforcourse[] = 'c.fullname LIKE :cname';
                $params['cname'] = '%' . $DB->sql_like_escape($coursename) . '%';
            }
            if ($categoryid) {
                $whereforcourse[] = 'cat.id = :catid';
                $params['catid'] = $categoryid;
            }
    
            $whereforcourse = implode(' AND ', $whereforcourse);
            if ($deleteglobal) {
                $sql = 'DELETE FROM {tool_lifecycle_delayed} d ';
                if ($whereforcourse) {
                    $sql .= 'WHERE d.courseid IN ( ' .
                                'SELECT c.id FROM {course} c ' .
                                'JOIN {course_categories} cat ON c.category = cat.id ' .
                                'WHERE ' . $whereforcourse .
                            ')';
                }
                $DB->execute($sql, $params);
            }
    
            if ($deleteseperate) {
                $sql = 'DELETE FROM {tool_lifecycle_delayed_workf} dw ' .
                        'WHERE TRUE ';
                if ($whereforcourse) {
                    $sql .= 'AND dw.courseid IN ( ' .
                                'SELECT c.id FROM {course} c ' .
                                'JOIN {course_categories} cat ON c.category = cat.id ' .
                                'WHERE ' . $whereforcourse .
                            ')';
                }
                if ($workflowfilterid) {
                    $sql .= 'AND dw.workflowid = :workflowid';
                    $params['workflowid'] = $workflowfilterid;
                }
                $DB->execute($sql, $params);
            }
        }
        redirect($PAGE->url);
    }
    
    $PAGE->set_url(new \moodle_url('/admin/tool/lifecycle/delayedcourses.php'));
    
    $PAGE->set_title(get_string('delayed_courses_header', 'tool_lifecycle'));
    $PAGE->set_heading(get_string('delayed_courses_header', 'tool_lifecycle'));
    
    $mform = new form_delays_filter($PAGE->url);
    
    // Cache handling.
    $cache = cache::make('tool_lifecycle', 'mformdata');
    if ($mform->is_cancelled()) {
        $cache->delete('delays_filter');
        redirect($PAGE->url);
    } else if ($data = $mform->get_data()) {
        $cache->set('delays_filter', $data);
    } else {
        $data = $cache->get('delays_filter');
        if ($data) {
            $mform->set_data($data);
        }
    }
    
    $table = new delayed_courses_table($data);
    $table->define_baseurl($PAGE->url);
    
    echo $OUTPUT->header();
    $mform->display();
    $table->out(100, false);
    
    $params = ['sesskey' => sesskey(), 'action' => 'bulk-delete'];
    if ($data) {
        $params = array_merge($params, (array) $data);
    }
    
    $button = new single_button(new moodle_url($PAGE->url, $params),
            get_string('delete_all_delays', 'tool_lifecycle'));
    
    echo "<br>";
    echo $OUTPUT->render($button);
    echo $OUTPUT->footer();