Skip to content

Commit

Permalink
MDL-72757 reportbuilder: Events for CRUD operations on report models
Browse files Browse the repository at this point in the history
  • Loading branch information
dravek committed Jan 5, 2022
1 parent 541d999 commit 39b9020
Show file tree
Hide file tree
Showing 17 changed files with 1,294 additions and 0 deletions.
4 changes: 4 additions & 0 deletions lang/en/reportbuilder.php
Expand Up @@ -43,11 +43,14 @@
$string['apply'] = 'Apply';
$string['audience'] = 'Audience';
$string['audienceadded'] = 'Added audience \'{$a}\'';
$string['audiencecreated'] = 'Audience created';
$string['audiencedeleted'] = 'Deleted audience \'{$a}\'';
$string['audiencedeletedevent'] = 'Audience deleted';
$string['audiencelabel'] = '{$a->name}: {$a->description}';
$string['audiencemultiselectpostfix'] = '{$a->elements} plus {$a->morecount} more';
$string['audiencenotsaved'] = 'Audience not saved';
$string['audiencesaved'] = 'Audience saved';
$string['audienceupdated'] = 'Audience updated';
$string['cardview'] = 'Card view';
$string['cardview_help'] = 'Card view allows you to define the layout of your report when viewed on narrow devices. Columns will collapse beyond the limit set here, with a toggle to expand the card to view all report data.';
$string['cardviewfirstcolumntitle'] = 'First column title';
Expand Down Expand Up @@ -197,6 +200,7 @@
$string['reportsource'] = 'Report source';
$string['reportsource_help'] = 'The report source defines where the data for the report will come from.';
$string['reportupdated'] = 'Report updated';
$string['reportviewed'] = 'Report viewed';
$string['resetall'] = 'Reset all';
$string['resetconditions'] = 'Reset conditions';
$string['resetconditionsconfirm'] = 'Are you sure you want to reset all conditions for this report?';
Expand Down
111 changes: 111 additions & 0 deletions reportbuilder/classes/event/audience_created.php
@@ -0,0 +1,111 @@
<?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/>.

declare(strict_types=1);

namespace core_reportbuilder\event;

use coding_exception;
use core\event\base;
use core_reportbuilder\local\models\audience;
use moodle_url;

/**
* Report builder custom report audience created event class.
*
* @package core_reportbuilder
* @copyright 2021 David Matamoros <davidmc@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*
* @property-read array $other {
* Extra information about the event.
*
* - int reportid: The id of the report
* }
*/
class audience_created extends base {

/**
* Initialise the event data.
*/
protected function init() {
$this->data['objecttable'] = audience::TABLE;
$this->data['crud'] = 'c';
$this->data['edulevel'] = self::LEVEL_OTHER;
}

/**
* Creates an instance from a report audience object
*
* @param audience $audience
* @return self
*/
public static function create_from_object(audience $audience): self {
$eventparams = [
'context' => $audience->get_report()->get_context(),
'objectid' => $audience->get('id'),
'other' => [
'reportid' => $audience->get('reportid'),
]
];
$event = self::create($eventparams);
$event->add_record_snapshot($event->objecttable, $audience->to_record());
return $event;
}

/**
* Returns localised general event name.
*
* @return string
*/
public static function get_name() {
return get_string('audiencecreated', 'core_reportbuilder');
}

/**
* Returns non-localised description of what happened.
*
* @return string
*/
public function get_description() {
$reportid = $this->other['reportid'];
return "The user with id '$this->userid' created an audience in the custom report with id '$reportid'.";
}

/**
* Custom validations.
*
* @throws coding_exception
*/
protected function validate_data(): void {
parent::validate_data();
if (!isset($this->objectid)) {
throw new coding_exception('The \'objectid\' must be set.');
}
if (!isset($this->other['reportid'])) {
throw new coding_exception('The \'reportid\' must be set in other.');
}
}

/**
* Returns relevant URL.
*
* @return moodle_url
*/
public function get_url(): moodle_url {
return new moodle_url('/reportbuilder/edit.php', ['id' => $this->other['reportid']], 'audience');
}
}
112 changes: 112 additions & 0 deletions reportbuilder/classes/event/audience_deleted.php
@@ -0,0 +1,112 @@
<?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/>.

declare(strict_types=1);

namespace core_reportbuilder\event;

use coding_exception;
use core\event\base;
use core_reportbuilder\local\models\audience;
use moodle_url;

/**
* Report builder custom report audience deleted event class.
*
* @package core_reportbuilder
* @copyright 2021 David Matamoros <davidmc@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*
* @property-read array $other {
* Extra information about the event.
*
* - int reportid: The id of the report
* }
*/
class audience_deleted extends base {

/**
* Initialise the event data.
*/
protected function init() {
$this->data['objecttable'] = audience::TABLE;
$this->data['crud'] = 'd';
$this->data['edulevel'] = self::LEVEL_OTHER;
}

/**
* Creates an instance from a report audience object
*
* @param audience $audience
* @return self
*/
public static function create_from_object(audience $audience): self {
$eventparams = [
'context' => $audience->get_report()->get_context(),
'objectid' => $audience->get('id'),
'other' => [
'reportid' => $audience->get('reportid'),
]
];
$event = self::create($eventparams);
$event->add_record_snapshot($event->objecttable, $audience->to_record());
return $event;
}

/**
* Returns localised general event name.
*
* @return string
*/
public static function get_name() {
return get_string('audiencedeletedevent', 'core_reportbuilder');
}

/**
* Returns non-localised description of what happened.
*
* @return string
*/
public function get_description() {
$reportid = $this->other['reportid'];
return "The user with id '$this->userid' deleted the audience with id '$this->objectid' in the custom report" .
" with id '$reportid'.";
}

/**
* Custom validations.
*
* @throws coding_exception
*/
protected function validate_data(): void {
parent::validate_data();
if (!isset($this->objectid)) {
throw new coding_exception('The \'objectid\' must be set.');
}
if (!isset($this->other['reportid'])) {
throw new coding_exception('The \'reportid\' must be set in other.');
}
}

/**
* Returns relevant URL.
*
* @return moodle_url
*/
public function get_url(): moodle_url {
return new moodle_url('/reportbuilder/edit.php', ['id' => $this->other['reportid']], 'audience');
}
}
112 changes: 112 additions & 0 deletions reportbuilder/classes/event/audience_updated.php
@@ -0,0 +1,112 @@
<?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/>.

declare(strict_types=1);

namespace core_reportbuilder\event;

use coding_exception;
use core\event\base;
use core_reportbuilder\local\models\audience;
use moodle_url;

/**
* Report builder custom report audience created event class.
*
* @package core_reportbuilder
* @copyright 2021 David Matamoros <davidmc@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*
* @property-read array $other {
* Extra information about the event.
*
* - int reportid: The id of the report
* }
*/
class audience_updated extends base {

/**
* Initialise the event data.
*/
protected function init() {
$this->data['objecttable'] = audience::TABLE;
$this->data['crud'] = 'u';
$this->data['edulevel'] = self::LEVEL_OTHER;
}

/**
* Creates an instance from a report audience object
*
* @param audience $audience
* @return self
*/
public static function create_from_object(audience $audience): self {
$eventparams = [
'context' => $audience->get_report()->get_context(),
'objectid' => $audience->get('id'),
'other' => [
'reportid' => $audience->get('reportid'),
]
];
$event = self::create($eventparams);
$event->add_record_snapshot($event->objecttable, $audience->to_record());
return $event;
}

/**
* Returns localised general event name.
*
* @return string
*/
public static function get_name() {
return get_string('audienceupdated', 'core_reportbuilder');
}

/**
* Returns non-localised description of what happened.
*
* @return string
*/
public function get_description() {
$reportid = $this->other['reportid'];
return "The user with id '$this->userid' updated the audience with id '$this->objectid' in the custom report" .
" with id '$reportid'.";
}

/**
* Custom validations.
*
* @throws coding_exception
*/
protected function validate_data(): void {
parent::validate_data();
if (!isset($this->objectid)) {
throw new coding_exception('The \'objectid\' must be set.');
}
if (!isset($this->other['reportid'])) {
throw new coding_exception('The \'reportid\' must be set in other.');
}
}

/**
* Returns relevant URL.
*
* @return moodle_url
*/
public function get_url(): moodle_url {
return new moodle_url('/reportbuilder/edit.php', ['id' => $this->other['reportid']], 'audience');
}
}
13 changes: 13 additions & 0 deletions reportbuilder/classes/event/report_created.php
Expand Up @@ -18,6 +18,7 @@

namespace core_reportbuilder\event;

use coding_exception;
use core\event\base;
use core_reportbuilder\local\models\report;
use moodle_url;
Expand Down Expand Up @@ -85,6 +86,18 @@ public function get_description() {
return "The user with id '$this->userid' created the custom report with id '$this->objectid'.";
}

/**
* Custom validations.
*
* @throws coding_exception
*/
protected function validate_data(): void {
parent::validate_data();
if (!isset($this->objectid)) {
throw new coding_exception('The \'objectid\' must be set.');
}
}

/**
* Returns relevant URL.
*
Expand Down

0 comments on commit 39b9020

Please sign in to comment.