diff --git a/admin/tool/log/store/database/classes/log/store.php b/admin/tool/log/store/database/classes/log/store.php index 06513f3d536..cd26e579667 100644 --- a/admin/tool/log/store/database/classes/log/store.php +++ b/admin/tool/log/store/database/classes/log/store.php @@ -38,11 +38,11 @@ class store implements \tool_log\log\writer, \core\log\sql_select_reader { /** @var bool $logguests true if logging guest access */ protected $logguests; - /** @var array $excludelevels An array of education levels to exclude */ - protected $excludelevels = array(); + /** @var array $includelevels An array of education levels to include */ + protected $includelevels = array(); - /** @var array $excludeactions An array of actions types to exclude */ - protected $excludeactions = array(); + /** @var array $includeactions An array of actions types to include */ + protected $includeactions = array(); /** * Construct @@ -53,10 +53,10 @@ class store implements \tool_log\log\writer, \core\log\sql_select_reader { $this->helper_setup($manager); $this->buffersize = $this->get_config('buffersize', 50); $this->logguests = $this->get_config('logguests', 1); - $actions = $this->get_config('excludeactions', ''); - $levels = $this->get_config('excludelevels', ''); - $this->excludeactions = $actions === '' ? array() : explode(',', $actions); - $this->excludelevels = $levels === '' ? array() : explode(',', $levels); + $actions = $this->get_config('includeactions', ''); + $levels = $this->get_config('includelevels', ''); + $this->includeactions = $actions === '' ? array() : explode(',', $actions); + $this->includelevels = $levels === '' ? array() : explode(',', $levels); } /** @@ -113,8 +113,8 @@ class store implements \tool_log\log\writer, \core\log\sql_select_reader { * @return bool */ protected function is_event_ignored(\core\event\base $event) { - if (in_array($event->crud, $this->excludeactions) || - in_array($event->edulevel, $this->excludelevels) + if (!in_array($event->crud, $this->includeactions) && + !in_array($event->edulevel, $this->includelevels) ) { // Ignore event if the store settings do not want to store it. return true; diff --git a/admin/tool/log/store/database/db/upgrade.php b/admin/tool/log/store/database/db/upgrade.php new file mode 100644 index 00000000000..7a447654aac --- /dev/null +++ b/admin/tool/log/store/database/db/upgrade.php @@ -0,0 +1,37 @@ +. + +/** + * Database log store upgrade. + * + * @package logstore_database + * @copyright 2014 onwards Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +function xmldb_logstore_database_upgrade($oldversion) { + + if ($oldversion < 2014041700) { + // Clean up old config. + unset_config('excludelevels', 'logstore_database'); + unset_config('excludeactions', 'logstore_database'); + + // Savepoint reached. + upgrade_plugin_savepoint(true, 2014041700, 'logstore', 'database'); + } + + return true; +} diff --git a/admin/tool/log/store/database/lang/en/logstore_database.php b/admin/tool/log/store/database/lang/en/logstore_database.php index dc775e09219..4e81a4af970 100644 --- a/admin/tool/log/store/database/lang/en/logstore_database.php +++ b/admin/tool/log/store/database/lang/en/logstore_database.php @@ -33,8 +33,8 @@ $string['databaseschema'] = 'Database schema'; $string['databasecollation'] = 'Database collation'; $string['databasetable'] = 'Database table'; $string['databasetable_help'] = 'Name of the table where logs will be stored. This table should have a structure identical to the one used by logstore_standard (mdl_logstore_standard_log).'; -$string['excludeactions'] = 'Exclude actions of these types'; -$string['excludelevels'] = 'Exclude actions with these educational levels'; +$string['includeactions'] = 'Include actions of these types'; +$string['includelevels'] = 'Include actions with these educational levels'; $string['filters'] = 'Filter logs'; $string['filters_help'] = 'Enable filters that exclude some actions from being logged.'; $string['logguests'] = 'Log guest actions'; diff --git a/admin/tool/log/store/database/settings.php b/admin/tool/log/store/database/settings.php index bb8e2a1731a..5b930f4dadf 100644 --- a/admin/tool/log/store/database/settings.php +++ b/admin/tool/log/store/database/settings.php @@ -63,9 +63,9 @@ if ($hassiteconfig) { $settings->add(new admin_setting_configcheckbox('logstore_database/logguests', get_string('logguests', 'logstore_database'), '', '0')); $levels = \logstore_database\helper::get_level_options(); - $settings->add(new admin_setting_configmulticheckbox('logstore_database/excludelevels', get_string('excludelevels', - 'logstore_database'), '', array(), $levels)); + $settings->add(new admin_setting_configmulticheckbox('logstore_database/includelevels', get_string('includelevels', + 'logstore_database'), '', $levels, $levels)); $actions = \logstore_database\helper::get_action_options(); - $settings->add(new admin_setting_configmulticheckbox('logstore_database/excludeactions', get_string('excludeactions', - 'logstore_database'), '', array(), $actions)); + $settings->add(new admin_setting_configmulticheckbox('logstore_database/includeactions', get_string('includeactions', + 'logstore_database'), '', $actions, $actions)); } diff --git a/admin/tool/log/store/database/tests/fixtures/store.php b/admin/tool/log/store/database/tests/fixtures/store.php new file mode 100644 index 00000000000..099c39b648a --- /dev/null +++ b/admin/tool/log/store/database/tests/fixtures/store.php @@ -0,0 +1,40 @@ +. + +/** + * Fixtures for database log storage testing. + * + * @package logstore_database + * @copyright 2014 onwards Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace logstore_database\test; + +defined('MOODLE_INTERNAL') || die(); + +class store extends \logstore_database\log\store { + /** + * Public wrapper for testing. + * + * @param \core\event\base $event + * + * @return bool + */ + public function is_event_ignored(\core\event\base $event) { + return parent::is_event_ignored($event); + } +} \ No newline at end of file diff --git a/admin/tool/log/store/database/tests/store_test.php b/admin/tool/log/store/database/tests/store_test.php index 71e65432581..e16a89300aa 100644 --- a/admin/tool/log/store/database/tests/store_test.php +++ b/admin/tool/log/store/database/tests/store_test.php @@ -25,6 +25,7 @@ defined('MOODLE_INTERNAL') || die(); require_once(__DIR__ . '/fixtures/event.php'); +require_once(__DIR__ . '/fixtures/store.php'); class logstore_database_store_testcase extends advanced_testcase { public function test_log_writing() { @@ -225,6 +226,49 @@ class logstore_database_store_testcase extends advanced_testcase { get_log_manager(true); } + /** + * Test method is_event_ignored. + */ + public function test_is_event_ignored() { + $this->resetAfterTest(); + + // Test guest filtering. + set_config('logguests', 0, 'logstore_database'); + $this->setGuestUser(); + $event = \logstore_database\event\unittest_executed::create( + array('context' => context_system::instance(), 'other' => array('sample' => 5, 'xx' => 10))); + $logmanager = get_log_manager(); + $store = new \logstore_database\test\store($logmanager); + $this->assertTrue($store->is_event_ignored($event)); + + set_config('logguests', 1, 'logstore_database'); + $store = new \logstore_database\test\store($logmanager); // Reload. + $this->assertFalse($store->is_event_ignored($event)); + + // Test action/level filtering. + set_config('includelevels', '', 'logstore_database'); + set_config('includeactions', '', 'logstore_database'); + $store = new \logstore_database\test\store($logmanager); // Reload. + $this->assertTrue($store->is_event_ignored($event)); + + set_config('includelevels', '0,1', 'logstore_database'); + $store = new \logstore_database\test\store($logmanager); // Reload. + $this->assertTrue($store->is_event_ignored($event)); + + set_config('includelevels', '0,1,2', 'logstore_database'); + $store = new \logstore_database\test\store($logmanager); // Reload. + $this->assertFalse($store->is_event_ignored($event)); + + set_config('includelevels', '', 'logstore_database'); + set_config('includeactions', 'c,r,d', 'logstore_database'); + $store = new \logstore_database\test\store($logmanager); // Reload. + $this->assertTrue($store->is_event_ignored($event)); + + set_config('includeactions', 'c,r,u,d', 'logstore_database'); + $store = new \logstore_database\test\store($logmanager); // Reload. + $this->assertFalse($store->is_event_ignored($event)); + } + /** * Test logmanager::get_supported_reports returns all reports that require this store. */ diff --git a/admin/tool/log/store/database/version.php b/admin/tool/log/store/database/version.php index 7656dd42a11..dd57768b41f 100644 --- a/admin/tool/log/store/database/version.php +++ b/admin/tool/log/store/database/version.php @@ -24,6 +24,6 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014011900; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2014041700; // The current plugin version (Date: YYYYMMDDXX). $plugin->requires = 2014011000; // Requires this Moodle version. $plugin->component = 'logstore_database'; // Full name of the plugin (used for diagnostics).