Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
MDL-57898 core_customfield: Custom fields API
This commit is part of work on Custom fields API,
to minimize commit history in moodle core the work of a team of developers was split
into several commits with different authors but the authorship of individual
lines of code may be different from the commit author.
  • Loading branch information
danielneis authored and marinaglancy committed Jan 18, 2019
1 parent 0446fee commit 01c1095
Show file tree
Hide file tree
Showing 35 changed files with 2,761 additions and 0 deletions.
62 changes: 62 additions & 0 deletions admin/customfields.php
@@ -0,0 +1,62 @@
<?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/>.

/**
* Allows the admin to enable, disable and uninstall custom fields
*
* @package core_admin
* @copyright 2018 Daniel Neis Araujo
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');

$action = required_param('action', PARAM_ALPHANUMEXT);
$customfieldname = required_param('field', PARAM_PLUGIN);

$syscontext = context_system::instance();
$PAGE->set_url('/admin/customfields.php');
$PAGE->set_context($syscontext);

require_login();
require_capability('moodle/site:config', $syscontext);
require_sesskey();

$return = new moodle_url('/admin/settings.php', array('section' => 'managecustomfields'));

$customfieldplugins = core_plugin_manager::instance()->get_plugins_of_type('customfield');
$sortorder = array_flip(array_keys($customfieldplugins));

if (!isset($customfieldplugins[$customfieldname])) {
print_error('customfieldnotfound', 'error', $return, $customfieldname);
}

switch ($action) {
case 'disable':
if ($customfieldplugins[$customfieldname]->is_enabled()) {
set_config('disabled', 1, 'customfield_'. $customfieldname);
core_plugin_manager::reset_caches();
}
break;
case 'enable':
if (!$customfieldplugins[$customfieldname]->is_enabled()) {
unset_config('disabled', 'customfield_'. $customfieldname);
core_plugin_manager::reset_caches();
}
break;
}
redirect($return);
12 changes: 12 additions & 0 deletions admin/settings/plugins.php
Expand Up @@ -59,6 +59,18 @@
$plugin->load_settings($ADMIN, 'formatsettings', $hassiteconfig);
}

// Custom fields.
$ADMIN->add('modules', new admin_category('customfieldsettings', new lang_string('customfields', 'core_customfield')));
$temp = new admin_settingpage('managecustomfields', new lang_string('managecustomfields', 'core_admin'));
$temp->add(new admin_setting_managecustomfields());
$ADMIN->add('customfieldsettings', $temp);
$plugins = core_plugin_manager::instance()->get_plugins_of_type('customfield');
core_collator::asort_objects_by_property($plugins, 'displayname');
foreach ($plugins as $plugin) {
/** @var \core\plugininfo\customfield $plugin */
$plugin->load_settings($ADMIN, 'customfieldsettings', $hassiteconfig);
}

// blocks
$ADMIN->add('modules', new admin_category('blocksettings', new lang_string('blocks')));
$ADMIN->add('blocksettings', new admin_page_manageblocks());
Expand Down
84 changes: 84 additions & 0 deletions customfield/classes/event/category_created.php
@@ -0,0 +1,84 @@
<?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/>.

/**
* Custom field category created event.
*
* @package core_customfield
* @copyright 2018 Daniel Neis Araujo <daniel@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace core_customfield\event;

use core_customfield\category_controller;

defined('MOODLE_INTERNAL') || die();

/**
* Custom field category created event class.
*
* @package core_customfield
* @since Moodle 3.6
* @copyright 2018 Daniel Neis Araujo <daniel@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class category_created extends \core\event\base {

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

/**
* Creates an instance from a category controller object
*
* @param category_controller $category
* @return category_created
*/
public static function create_from_object(category_controller $category): category_created {
$eventparams = [
'objectid' => $category->get('id'),
'context' => $category->get_handler()->get_configuration_context(),
'other' => ['name' => $category->get('name')]
];
$event = self::create($eventparams);
$event->add_record_snapshot($event->objecttable, $category->to_record());
return $event;
}

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

/**
* Returns non-localised description of what happened.
*
* @return string
*/
public function get_description() {
return "The user with id '$this->userid' created the category with id '$this->objectid'.";
}
}
84 changes: 84 additions & 0 deletions customfield/classes/event/category_updated.php
@@ -0,0 +1,84 @@
<?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/>.

/**
* Custom field category updated event.
*
* @package core_customfield
* @copyright 2018 Daniel Neis Araujo <daniel@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace core_customfield\event;

use core_customfield\category_controller;

defined('MOODLE_INTERNAL') || die();

/**
* Custom field category updated event class.
*
* @package core_customfield
* @since Moodle 3.6
* @copyright 2018 Daniel Neis Araujo <daniel@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class category_updated extends \core\event\base {

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

/**
* Creates an instance from a category controller object
*
* @param category_controller $category
* @return category_updated
*/
public static function create_from_object(category_controller $category): category_updated {
$eventparams = [
'objectid' => $category->get('id'),
'context' => $category->get_handler()->get_configuration_context(),
'other' => ['name' => $category->get('name')]
];
$event = self::create($eventparams);
$event->add_record_snapshot($event->objecttable, $category->to_record());
return $event;
}

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

/**
* Returns non-localised description of what happened.
*
* @return string
*/
public function get_description() {
return "The user with id '$this->userid' updated the category with id '$this->objectid'.";
}
}
87 changes: 87 additions & 0 deletions customfield/classes/event/field_created.php
@@ -0,0 +1,87 @@
<?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/>.

/**
* Custom field created event.
*
* @package core_customfield
* @copyright 2018 Daniel Neis Araujo <daniel@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace core_customfield\event;

use core_customfield\field_controller;

defined('MOODLE_INTERNAL') || die();

/**
* Custom field created event class.
*
* @package core_customfield
* @since Moodle 3.6
* @copyright 2018 Daniel Neis Araujo <daniel@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class field_created extends \core\event\base {

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

/**
* Creates an instance from a field controller object
*
* @param field_controller $field
* @return field_created
*/
public static function create_from_object(field_controller $field): field_created {
$eventparams = [
'objectid' => $field->get('id'),
'context' => $field->get_handler()->get_configuration_context(),
'other' => [
'shortname' => $field->get('shortname'),
'name' => $field->get('name')
]
];
$event = self::create($eventparams);
$event->add_record_snapshot($event->objecttable, $field->to_record());
return $event;
}

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

/**
* Returns non-localised description of what happened.
*
* @return string
*/
public function get_description() {
return "The user with id '$this->userid' created the field with id '$this->objectid'.";
}
}

0 comments on commit 01c1095

Please sign in to comment.