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

/**
 * Event observers used in forum.
 *
 * @package    report
 * @subpackage coursestats
 * @copyright  2017 Paulo Jr.
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
defined('MOODLE_INTERNAL') || die();
require(__DIR__. '/../constants.php');

class report_coursestats_observer {     
    public static function forum_discussion_created(\mod_forum\event\discussion_created $event) {
                global $DB;
                
                // Check if the forum instance is for announcements 
                $result = $DB->get_record(FORUM_TABLE_NAME, array('id'=>$event->other['forumid']));
                if ($result->type === NEWS_FORUM_NAME) {
                        // Get the course, based on its id
                        $course = $DB->get_record(COURSE_TABLE_NAME, array('id'=>$event->courseid));
                        
                        /* 
                         * Check if there is no records for the 'courseid' in the table 'report_coursestats'.
                         * If yes, a record is created with usage type classified as 'forum'. 
                         */
                        if (!$DB->record_exists(PLUGIN_TABLE_NAME, array('courseid'=>$event->courseid))) {
                                $record = new stdClass();
                                $record->courseid = $event->courseid;
                                $record->prev_usage_type = NULL_USAGE_TYPE;
                                $record->curr_usage_type = FORUM_USAGE_TYPE;
                                $record->last_update = time();
                                $DB->insert_record(PLUGIN_TABLE_NAME, $record);
                        }                                       
                }
        }
        
        private static function handle_module($event) {
                global $DB;
        
                /* 
                * If the module name is 'url', 'folder' or 'resource', then the usage type is 'repository'.
                * Otherwise, the usage type is 'activity' 
                */
                $usage_type = '';
                if (in_array($event->other['modulename'], unserialize(REPOSITORY_MODULES))) {
                        $usage_type     = REPOSITORY_USAGE_TYPE;
                } else {
                        $usage_type     = ACTIVITY_USAGE_TYPE;
                }

                // Get the course, based on its id
                $course = $DB->get_record(COURSE_TABLE_NAME, array('id'=>$event->courseid));
                                
                if (!$DB->record_exists(PLUGIN_TABLE_NAME, array('courseid'=>$event->courseid))) {
                        $record = new stdClass();
                        $record->courseid = $event->courseid;
                        $record->prev_usage_type = NULL_USAGE_TYPE;
                        $record->curr_usage_type = $usage_type;                  
                        $record->last_update =  time();
                        $record->categoryid = $course->category;
                        $DB->insert_record(PLUGIN_TABLE_NAME, $record);
                } else {
                        $result = $DB->get_record(PLUGIN_TABLE_NAME, array('courseid'=>$event->courseid));
                        if ($result->curr_usage_type === FORUM_USAGE_TYPE or 
                                ($result->curr_usage_type === REPOSITORY_USAGE_TYPE and $usage_type === ACTIVITY_USAGE_TYPE)) {
                                $result->prev_usage_type = $result->curr_usage_type;
                                $result->curr_usage_type = $usage_type;         
                                $result->categoryid = $course->category;
                                $result->last_update =  time();
                                $DB->update_record(PLUGIN_TABLE_NAME, $result); 
                        }                       
                }
        }

        public static function course_module_created(\core\event\course_module_created $event) {
                self::handle_module($event);
        }

        public static function course_module_updated(\core\event\course_module_updated $event) {
                self::handle_module($event);
        }
}