MDL-51025 tool_lp: Frameworks can be created on a category level

This commit is contained in:
Frederic Massart 2015-08-11 18:55:19 +08:00
parent 4511b7d694
commit 2de75345bb
31 changed files with 523 additions and 409 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
define(["jquery","core/templates","core/ajax","core/notification","core/str"],function(a,b,c,d,e){var f=0,g=function(c,d){a('[data-region="managecompetencies"]').replaceWith(c),b.runTemplateJS(d)},h=function(a){b.render("tool_lp/manage_competency_frameworks_page",a).done(g).fail(d.exception)},i=function(){var a=c.call([{methodname:"tool_lp_delete_competency_framework",args:{id:f}},{methodname:"tool_lp_data_for_competency_frameworks_manage_page",args:[]}]);a[1].done(h).fail(d.exception)},j=function(b){b.preventDefault();var g=a(this).attr("data-frameworkid");f=g;var h=c.call([{methodname:"tool_lp_read_competency_framework",args:{id:f}}]);h[0].done(function(a){e.get_strings([{key:"confirm",component:"moodle"},{key:"deletecompetencyframework",component:"tool_lp",param:a.shortname},{key:"delete",component:"moodle"},{key:"cancel",component:"moodle"}]).done(function(a){d.confirm(a[0],a[1],a[2],a[3],i)}).fail(d.exception)}).fail(d.exception)};return{deleteHandler:j}});
define(["jquery","core/templates","core/ajax","core/notification","core/str"],function(a,b,c,d,e){var f=0,g=0,h=function(c,d){a('[data-region="managecompetencies"]').replaceWith(c),b.runTemplateJS(d)},i=function(a){b.render("tool_lp/manage_competency_frameworks_page",a).done(h).fail(d.exception)},j=function(){var a=c.call([{methodname:"tool_lp_delete_competency_framework",args:{id:g}},{methodname:"tool_lp_data_for_competency_frameworks_manage_page",args:{pagecontextid:f}}]);a[1].done(i).fail(d.exception)},k=function(b){b.preventDefault();var f=a(this).attr("data-frameworkid");g=f;var h=c.call([{methodname:"tool_lp_read_competency_framework",args:{id:g}}]);h[0].done(function(a){e.get_strings([{key:"confirm",component:"moodle"},{key:"deletecompetencyframework",component:"tool_lp",param:a.shortname},{key:"delete",component:"moodle"},{key:"cancel",component:"moodle"}]).done(function(a){d.confirm(a[0],a[1],a[2],a[3],j)}).fail(d.exception)}).fail(d.exception)};return{deleteHandler:k,init:function(a){f=a}}});

View file

@ -1 +0,0 @@
define(["jquery","core/str","core/notification","core/ajax","tool_lp/dragdrop-reorder"],function(a,b,c,d,e){var f=function(b,e){var f=a(b).data("frameworkid"),g=a(e).data("frameworkid"),h=d.call([{methodname:"tool_lp_reorder_competency_framework",args:{from:f,to:g}}]);h[0].fail(c.exception)};return{init:function(){b.get_string("movecompetencyframework","tool_lp").done(function(a){e.dragdrop("movecompetencyframework",a,{identifier:"movecompetencyframework",component:"tool_lp"},{identifier:"movecompetencyframeworkafter",component:"tool_lp"},"drag-samenode","drag-parentnode","drag-handlecontainer",f)}).fail(c.exception)}}});

View file

@ -37,13 +37,20 @@ define(['jquery',
* @param {Number} itemid
* @param {String} itemtype
*/
var competencies = function(itemid, itemtype) {
var competencies = function(itemid, itemtype, pagectxid) {
this.itemid = itemid;
this.itemtype = itemtype;
this.pageContextId = pagectxid;
this.selectedCompetency = 0;
var localthis = this;
var loadframeworks = ajax.call([
{ methodname: 'tool_lp_list_competency_frameworks', args: { filters: {}, sort: 'sortorder' } }
{ methodname: 'tool_lp_list_competency_frameworks', args: {
sort: 'shortname',
context: {
contextid: this.pageContextId,
},
includes: 'parents'
}}
]);
loadframeworks[0].done(function(frameworks) {

View file

@ -40,6 +40,8 @@ define(['jquery',
var moveSource = null;
/** @var {Node} moveTarget - The end of a drag operation */
var moveTarget = null;
/** @var {Number} pageContextId The page context ID. */
var pageContextId;
/**
* Respond to choosing the "Add" menu item for the selected node in the tree.
@ -49,7 +51,8 @@ define(['jquery',
var parent = $('[data-region="competencyactions"]').data('competency');
var params = {
competencyframeworkid : treeModel.getCompetencyFrameworkId()
competencyframeworkid : treeModel.getCompetencyFrameworkId(),
pagecontextid: pageContextId
};
if (parent !== null) {
@ -198,7 +201,8 @@ define(['jquery',
var params = {
competencyframeworkid : treeModel.getCompetencyFrameworkId(),
id : competency.id,
parentid: competency.parentid
parentid: competency.parentid,
pagecontextid: pageContextId
};
var queryparams = $.param(params);
@ -400,9 +404,11 @@ define(['jquery',
*
* @method init
* @param {Object} model The tree model provides some useful functions for loading and searching competencies.
* @param {Number} pagectxid The page context ID.
*/
init: function(model) {
init: function(model, pagectxid) {
treeModel = model;
pageContextId = pagectxid;
$('[data-region="competencyactions"]').on('click', addHandler);

View file

@ -24,6 +24,9 @@
define(['jquery', 'core/templates', 'core/ajax', 'core/notification', 'core/str'], function($, templates, ajax, notification, str) {
// Private variables and functions.
/** @var {Number} pagecontextid The id of the context */
var pagecontextid = 0;
/** @var {Number} frameworkid The id of the framework */
var frameworkid = 0;
@ -60,7 +63,7 @@ define(['jquery', 'core/templates', 'core/ajax', 'core/notification', 'core/str'
args: { id: frameworkid }
}, {
methodname: 'tool_lp_data_for_competency_frameworks_manage_page',
args: []
args: { pagecontextid: pagecontextid }
}]);
requests[1].done(reloadList).fail(notification.exception);
};
@ -108,6 +111,15 @@ define(['jquery', 'core/templates', 'core/ajax', 'core/notification', 'core/str'
* @method deleteHandler
* @param {Event} e
*/
deleteHandler: confirmDelete
deleteHandler: confirmDelete,
/**
* Initialise the module.
* @method init
* @param {Number} contextid The context id of the page.
*/
init: function(contextid) {
pagecontextid = contextid;
}
};
});

View file

@ -1,74 +0,0 @@
// 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/>.
/**
* Move competency frameworks via ajax.
*
* @module tool_lp/frameworkmove
* @package tool_lp
* @copyright 2015 Damyon Wiese <damyon@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery',
'core/str',
'core/notification',
'core/ajax',
'tool_lp/dragdrop-reorder'],
function($, str, notification, ajax, dragdrop) {
// Private variables and functions.
/**
* Handle a drop on a node.
*
* @method handleDrop
* @param {DOMNode} drag
* @param {DOMNode} drop
*/
var handleDrop = function(drag, drop) {
var from = $(drag).data('frameworkid');
var to = $(drop).data('frameworkid');
var requests = ajax.call([{
methodname: 'tool_lp_reorder_competency_framework',
args: { from: from, to: to }
}]);
requests[0].fail(notification.exception);
};
return /** @alias module:tool_lp/frameworkmove */ {
// Public variables and functions.
/**
* Initialise this plugin. It loads some strings, then adds the drag/drop functions.
* @method init
*/
init: function() {
// Init this module.
str.get_string('movecompetencyframework', 'tool_lp').done(
function(movestring) {
dragdrop.dragdrop('movecompetencyframework',
movestring,
{ identifier: 'movecompetencyframework', component: 'tool_lp'},
{ identifier: 'movecompetencyframeworkafter', component: 'tool_lp'},
'drag-samenode',
'drag-parentnode',
'drag-handlecontainer',
handleDrop);
}
).fail(notification.exception);
}
};
});

View file

@ -24,6 +24,8 @@
namespace tool_lp;
use stdClass;
use context;
use context_helper;
use context_system;
use context_course;
use context_user;
@ -47,11 +49,12 @@ class api {
* @return competency
*/
public static function create_competency(stdClass $record) {
$competency = new competency(0, $record);
// First we do a permissions check.
require_capability('tool/lp:competencymanage', context_system::instance());
require_capability('tool/lp:competencymanage', $competency->get_framework()->get_context());
// OK - all set.
$competency = new competency(0, $record);
$id = $competency->create();
return $competency;
}
@ -65,11 +68,12 @@ class api {
* @return boolean
*/
public static function delete_competency($id) {
$competency = new competency($id);
// First we do a permissions check.
require_capability('tool/lp:competencymanage', context_system::instance());
require_capability('tool/lp:competencymanage', $competency->get_framework()->get_context());
// OK - all set.
$competency = new competency();
$competency->set_id($id);
return $competency->delete();
}
@ -83,12 +87,11 @@ class api {
* @return boolean
*/
public static function move_down_competency($id) {
// First we do a permissions check.
require_capability('tool/lp:competencymanage', context_system::instance());
// Check the current one too.
$current = new competency($id);
// First we do a permissions check.
require_capability('tool/lp:competencymanage', $current->get_framework()->get_context());
$max = self::count_competencies(array('parentid' => $current->get_parentid(),
'competencyframeworkid' => $current->get_competencyframeworkid()));
if ($max > 0) {
@ -124,12 +127,11 @@ class api {
* @return boolean
*/
public static function move_up_competency($id) {
// First we do a permissions check.
require_capability('tool/lp:competencymanage', context_system::instance());
// Check the current one too.
$current = new competency($id);
// First we do a permissions check.
require_capability('tool/lp:competencymanage', $current->get_framework()->get_context());
$sortorder = $current->get_sortorder();
if ($sortorder == 0) {
return false;
@ -161,13 +163,14 @@ class api {
* @return boolean
*/
public static function set_parent_competency($id, $newparentid) {
$current = new competency($id);
// First we do a permissions check.
require_capability('tool/lp:competencymanage', context_system::instance());
require_capability('tool/lp:competencymanage', $current->get_framework()->get_context());
// This will throw an exception if the parent does not exist.
// Check the current one too.
$current = new competency($id);
$parentframeworkid = $current->get_competencyframeworkid();
$parentpath = '/0/';
if ($newparentid) {
@ -211,17 +214,20 @@ class api {
* @return boolean
*/
public static function update_competency($record) {
$current = new competency($record->id);
// First we do a permissions check.
require_capability('tool/lp:competencymanage', context_system::instance());
require_capability('tool/lp:competencymanage', $current->get_framework()->get_context());
// Some things should not be changed in an update - they should use a more specific method.
$current = new competency($record->id);
$record->sortorder = $current->get_sortorder();
$record->parentid = $current->get_parentid();
$record->competencyframeworkid = $current->get_competencyframeworkid();
// OK - all set.
$competency = new competency(0, $record);
require_capability('tool/lp:competencymanage', $competency->get_framework()->get_context());
// OK - all set.
return $competency->update();
}
@ -234,14 +240,16 @@ class api {
* @return stdClass
*/
public static function read_competency($id) {
$competency = new competency($id);
// First we do a permissions check.
$context = context_system::instance();
$context = $competency->get_framework()->get_context();
if (!has_any_capability(array('tool/lp:competencyread', 'tool/lp:competencymanage'), $context)) {
throw new required_capability_exception($context, 'tool/lp:competencyread', 'nopermissions', '');
}
// OK - all set.
return new competency($id);
return $competency;
}
/**
@ -254,8 +262,10 @@ class api {
* @return array of competencies
*/
public static function search_competencies($textsearch, $competencyframeworkid) {
$framework = new competency_framework($competencyframeworkid);
// First we do a permissions check.
$context = context_system::instance();
$context = $framework->get_context();
if (!has_any_capability(array('tool/lp:competencyread', 'tool/lp:competencymanage'), $context)) {
throw new required_capability_exception($context, 'tool/lp:competencyread', 'nopermissions', '');
}
@ -268,7 +278,7 @@ class api {
/**
* Perform a search based on the provided filters and return a paginated list of records.
*
* Requires tool/lp:competencyread capability at the system context.
* Requires tool/lp:competencyread capability at some context.
*
* @param array $filters A list of filters to apply to the list.
* @param string $sort The column to sort on
@ -278,8 +288,14 @@ class api {
* @return array of competencies
*/
public static function list_competencies($filters, $sort = '', $order = 'ASC', $skip = 0, $limit = 0) {
if (!isset($filters['competencyframeworkid'])) {
$context = context_system::instance();
} else {
$framework = new competency_framework($filters['competencyframeworkid']);
$context = $framework->get_context();
}
// First we do a permissions check.
$context = context_system::instance();
if (!has_any_capability(array('tool/lp:competencyread', 'tool/lp:competencymanage'), $context)) {
throw new required_capability_exception($context, 'tool/lp:competencyread', 'nopermissions', '');
}
@ -292,14 +308,20 @@ class api {
/**
* Perform a search based on the provided filters and return a paginated list of records.
*
* Requires tool/lp:competencyread capability at the system context.
* Requires tool/lp:competencyread capability at some context.
*
* @param array $filters A list of filters to apply to the list.
* @return int
*/
public static function count_competencies($filters) {
if (!isset($filters['competencyframeworkid'])) {
$context = context_system::instance();
} else {
$framework = new competency_framework($filters['competencyframeworkid']);
$context = $framework->get_context();
}
// First we do a permissions check.
$context = context_system::instance();
if (!has_any_capability(array('tool/lp:competencyread', 'tool/lp:competencymanage'), $context)) {
throw new required_capability_exception($context, 'tool/lp:competencyread', 'nopermissions', '');
}
@ -318,11 +340,8 @@ class api {
* @return competency_framework
*/
public static function create_framework(stdClass $record) {
// First we do a permissions check.
require_capability('tool/lp:competencymanage', context_system::instance());
// OK - all set.
$framework = new competency_framework(0, $record);
require_capability('tool/lp:competencymanage', $framework->get_context());
$id = $framework->create();
return $framework;
}
@ -336,12 +355,8 @@ class api {
* @return boolean
*/
public static function delete_framework($id) {
// First we do a permissions check.
require_capability('tool/lp:competencymanage', context_system::instance());
// OK - all set.
$framework = new competency_framework();
$framework->set_id($id);
$framework = new competency_framework($id);
require_capability('tool/lp:competencymanage', $framework->get_context());
return $framework->delete();
}
@ -354,11 +369,13 @@ class api {
* @return boolean
*/
public static function update_framework($record) {
// First we do a permissions check.
require_capability('tool/lp:competencymanage', context_system::instance());
// OK - all set.
$framework = new competency_framework(0, $record);
$framework = new competency_framework($record->id);
// Check the permissions before update.
require_capability('tool/lp:competencymanage', $framework->get_context());
if (isset($record->contextid) && $record->contextid != $framework->get_contextid()) {
throw new coding_exception('Changing the context of an existing framework is forbidden.');
}
$framework->from_record($record);
return $framework->update();
}
@ -371,51 +388,11 @@ class api {
* @return competency_framework
*/
public static function read_framework($id) {
// First we do a permissions check.
$context = context_system::instance();
if (!has_any_capability(array('tool/lp:competencyread', 'tool/lp:competencymanage'), $context)) {
throw new required_capability_exception($context, 'tool/lp:competencyread', 'nopermissions', '');
$framework = new competency_framework($id);
if (!has_any_capability(array('tool/lp:competencyread', 'tool/lp:competencymanage'), $framework->get_context())) {
throw new required_capability_exception($framework->get_context(), 'tool/lp:competencyread', 'nopermissions', '');
}
// OK - all set.
return new competency_framework($id);
}
/**
* Move the competency framework up or down in the display list.
*
* Requires tool/lp:competencymanage capability at the system context.
*
* @param int $frameworkidfrom The framework we are moving.
* @param int $frameworkidto Where we are moving to. If moving down, it will go after this framework,
* If moving up, it will go before this framework.
* @return boolean
*/
public static function reorder_framework($frameworkidfrom, $frameworkidto) {
require_capability('tool/lp:competencymanage', context_system::instance());
$down = true;
$frameworkfrom = new competency_framework($frameworkidfrom);
$frameworkto = new competency_framework($frameworkidto);
$all = self::list_frameworks(array(), 'sortorder', 'ASC', 0, 0);
if ($frameworkfrom->get_sortorder() > $frameworkto->get_sortorder()) {
// We are moving down, so put it after the "to" item.
$down = false;
}
foreach ($all as $id => $framework) {
$sort = $framework->get_sortorder();
if ($down && $sort > $frameworkfrom->get_sortorder() && $sort <= $frameworkto->get_sortorder()) {
$framework->set_sortorder($framework->get_sortorder() - 1);
$framework->update();
} else if (!$down && $sort >= $frameworkto->get_sortorder() && $sort < $frameworkfrom->get_sortorder()) {
$framework->set_sortorder($framework->get_sortorder() + 1);
$framework->update();
}
}
$frameworkfrom->set_sortorder($frameworkto->get_sortorder());
return $frameworkfrom->update();
return $framework;
}
/**
@ -423,23 +400,62 @@ class api {
*
* Requires tool/lp:competencyread capability at the system context.
*
* @param array $filters A list of filters to apply to the list.
* @param string $sort The column to sort on
* @param string $order ('ASC' or 'DESC')
* @param int $skip Number of records to skip (pagination)
* @param int $limit Max of records to return (pagination)
* @param context $context The parent context of the frameworks.
* @param string $includes Defines what other contexts to fetch frameworks from.
* Accepted values are:
* - children: All descendants
* - parents: All parents, grand parents, etc...
* - self: Context passed only.
* @return array of competency_framework
*/
public static function list_frameworks($filters, $sort, $order, $skip, $limit) {
public static function list_frameworks($sort, $order, $skip, $limit, $context, $includes = 'children') {
global $DB;
if (!in_array($includes, array('children', 'parents', 'self'))) {
throw new coding_exception('Invalid parameter value for \'includes\'.');
}
// Get all the other relevant contexts.
$contexts = array($context->id => $context);
if ($includes == 'children') {
$params = array('coursecatlevel' => CONTEXT_COURSECAT, 'path' => $context->path . '/%');
$pathlike = $DB->sql_like('path', ':path');
$sql = "contextlevel = :coursecatlevel AND $pathlike";
$rs = $DB->get_recordset_select('context', $sql, $params);
foreach ($rs as $record) {
$ctxid = $record->id;
context_helper::preload_from_record($record);
$contexts[$ctxid] = context::instance_by_id($ctxid);
}
$rs->close();
} else if ($includes == 'parents') {
$children = $context->get_parent_contexts();
foreach ($children as $ctx) {
$contexts[$ctx->id] = $ctx;
}
}
// First we do a permissions check.
$context = context_system::instance();
if (!has_any_capability(array('tool/lp:competencyread', 'tool/lp:competencymanage'), $context)) {
throw new required_capability_exception($context, 'tool/lp:competencyread', 'nopermissions', '');
foreach ($contexts as $key => $ctx) {
if (!has_any_capability(array('tool/lp:competencyread', 'tool/lp:competencymanage'), $ctx)) {
unset($contexts[$key]);
}
}
if (empty($contexts)) {
throw new required_capability_exception($context, 'tool/lp:competencyread', 'nopermissions', '');
}
// OK - all set.
$framework = new competency_framework();
return $framework->get_records($filters, $sort, $order, $skip, $limit);
list($insql, $inparams) = $DB->get_in_or_equal(array_keys($contexts), SQL_PARAMS_NAMED);
return $framework->get_records_select("contextid $insql", $inparams, $sort, '*', $skip, $limit);
}
/**

View file

@ -214,6 +214,15 @@ class competency extends persistent {
$this->path = $path;
}
/**
* Get the competencyframeworkid
*
* @return int The competency framework id.
*/
public function get_framework() {
return new competency_framework($this->get_competencyframeworkid());
}
/**
* Get the competencyframeworkid
*

View file

@ -24,6 +24,7 @@
namespace tool_lp;
use stdClass;
use context;
/**
* Class for loading/storing competency frameworks from the DB.
@ -57,6 +58,9 @@ class competency_framework extends persistent {
/** @var string $scaleconfiguration scale information relevant to this framework*/
private $scaleconfiguration = '';
/** @var int $contextid The context ID in which the framework is set. */
private $contextid = null;
/**
* Method that provides the table name matching this class.
*
@ -173,6 +177,24 @@ class competency_framework extends persistent {
$this->visible = $visible;
}
/**
* Get the context.
*
* @return context The context
*/
public function get_context() {
return context::instance_by_id($this->contextid);
}
/**
* Get the contextid.
*
* @return string The contextid
*/
public function get_contextid() {
return $this->contextid;
}
/**
* Get the scale ID.
*
@ -252,6 +274,9 @@ class competency_framework extends persistent {
if (isset($record->usermodified)) {
$this->set_usermodified($record->usermodified);
}
if (isset($record->contextid)) {
$this->contextid = $record->contextid;
}
return $this;
}
@ -275,6 +300,7 @@ class competency_framework extends persistent {
$record->timecreated = $this->get_timecreated();
$record->timemodified = $this->get_timemodified();
$record->usermodified = $this->get_usermodified();
$record->contextid = $this->get_contextid();
return $record;
}

View file

@ -26,6 +26,7 @@ namespace tool_lp;
require_once("$CFG->libdir/externallib.php");
require_once("$CFG->libdir/grade/grade_scale.php");
use context;
use external_api;
use external_function_parameters;
use external_value;
@ -90,6 +91,36 @@ class external extends external_api {
return new external_function_parameters($params);
}
/**
* Returns a prepared structure to use a context parameters.
* @return external_single_structure
*/
protected static function get_context_parameters() {
$id = new external_value(
PARAM_INT,
'Context ID. Either use this value, or level and instanceid.',
VALUE_DEFAULT,
0
);
$level = new external_value(
PARAM_ALPHA,
'Context level. To be used with instanceid.',
VALUE_DEFAULT,
''
);
$instanceid = new external_value(
PARAM_INT,
'Context instance ID. To be used with level',
VALUE_DEFAULT,
0
);
return new external_single_structure(array(
'contextid' => $id,
'contextlevel' => $level,
'instanceid' => $instanceid,
));
}
/**
* Returns description of a generic count_x() parameters.
*
@ -216,6 +247,7 @@ class external extends external_api {
'description' => $description,
'descriptionformat' => $descriptionformat,
'visible' => $visible,
'context' => self::get_context_parameters(),
);
return new external_function_parameters($params);
}
@ -238,7 +270,8 @@ class external extends external_api {
* @param bool $visible Is this framework visible.
* @return \stdClass The new record
*/
public static function create_competency_framework($shortname, $idnumber, $description, $descriptionformat, $visible) {
public static function create_competency_framework($shortname, $idnumber, $description, $descriptionformat, $visible,
$context) {
$params = self::validate_parameters(self::create_competency_framework_parameters(),
array(
'shortname' => $shortname,
@ -246,10 +279,17 @@ class external extends external_api {
'description' => $description,
'descriptionformat' => $descriptionformat,
'visible' => $visible,
'context' => $context,
));
$params = (object) $params;
$context = self::get_context_from_params($params['context']);
self::validate_context($context);
unset($params['context']);
$params['contextid'] = $context->id;
$params = (object) $params;
$result = api::create_framework($params);
return $result->to_record();
}
@ -466,7 +506,46 @@ class external extends external_api {
* @return \external_function_parameters
*/
public static function list_competency_frameworks_parameters() {
return self::list_parameters_structure();
$sort = new external_value(
PARAM_ALPHANUMEXT,
'Column to sort by.',
VALUE_DEFAULT,
''
);
$order = new external_value(
PARAM_ALPHA,
'Sort direction. Should be either ASC or DESC',
VALUE_DEFAULT,
''
);
$skip = new external_value(
PARAM_INT,
'Skip this number of records before returning results',
VALUE_DEFAULT,
0
);
$limit = new external_value(
PARAM_INT,
'Return this number of records at most.',
VALUE_DEFAULT,
0
);
$includes = new external_value(
PARAM_ALPHA,
'What other contextes to fetch the frameworks from. (children, parents, self)',
VALUE_DEFAULT,
'children'
);
$params = array(
'sort' => $sort,
'order' => $order,
'skip' => $skip,
'limit' => $limit,
'context' => self::get_context_parameters(),
'includes' => $includes
);
return new external_function_parameters($params);
}
/**
@ -485,39 +564,37 @@ class external extends external_api {
* @param string $order
* @param string $skip
* @param int $limit
* @param array $context
* @param bool $includes
*
* @return array
* @throws \required_capability_exception
* @throws invalid_parameter_exception
*/
public static function list_competency_frameworks($filters, $sort, $order, $skip, $limit) {
public static function list_competency_frameworks($sort, $order, $skip, $limit, $context, $includes) {
$params = self::validate_parameters(self::list_competency_frameworks_parameters(),
array(
'filters' => $filters,
'sort' => $sort,
'order' => $order,
'skip' => $skip,
'limit' => $limit
'limit' => $limit,
'context' => $context,
'includes' => $includes
));
$context = self::get_context_from_params($params['context']);
self::validate_context($context);
if ($params['order'] !== '' && $params['order'] !== 'ASC' && $params['order'] !== 'DESC') {
throw new invalid_parameter_exception('Invalid order param. Must be ASC, DESC or empty.');
}
$safefilters = array();
$validcolumns = array('id', 'shortname', 'description', 'sortorder', 'idnumber', 'visible');
foreach ($params['filters'] as $filter) {
if (!in_array($filter->column, $validcolumns)) {
throw new invalid_parameter_exception('Filter column was invalid');
}
$safefilters[$filter->column] = $filter->value;
}
$results = api::list_frameworks($safefilters,
$params['sort'],
$params['order'],
$params['skip'],
$params['limit']);
$results = api::list_frameworks($params['sort'],
$params['order'],
$params['skip'],
$params['limit'],
$context,
$params['includes']);
$records = array();
foreach ($results as $result) {
$record = $result->to_record();
@ -601,8 +678,7 @@ class external extends external_api {
* @return \external_function_parameters
*/
public static function data_for_competency_frameworks_manage_page_parameters() {
// No params required.
$params = array();
$params = array('pagecontext' => self::get_context_parameters());
return new external_function_parameters($params);
}
@ -619,10 +695,19 @@ class external extends external_api {
*
* @return boolean
*/
public static function data_for_competency_frameworks_manage_page() {
public static function data_for_competency_frameworks_manage_page($pagecontext) {
global $PAGE;
$renderable = new output\manage_competency_frameworks_page();
$params = self::validate_parameters(
self::data_for_competency_frameworks_manage_page_parameters(),
array(
'pagecontext' => $pagecontext
)
);
$context = self::get_context_from_params($params['pagecontext']);
self::validate_context($context);
$renderable = new output\manage_competency_frameworks_page($context);
$renderer = $PAGE->get_renderer('tool_lp');
$data = $renderable->export_for_template($renderer);
@ -649,62 +734,6 @@ class external extends external_api {
}
/**
* Move a competency framework and adjust sort order of all affected.
*
* @return \external_function_parameters
*/
public static function reorder_competency_framework_parameters() {
$from = new external_value(
PARAM_INT,
'Framework id to reorder.',
VALUE_REQUIRED
);
$to = new external_value(
PARAM_INT,
'Framework id to move to.',
VALUE_REQUIRED
);
$params = array(
'from' => $from,
'to' => $to
);
return new external_function_parameters($params);
}
/**
* Expose to AJAX
* @return boolean
*/
public static function reorder_competency_framework_is_allowed_from_ajax() {
return true;
}
/**
* Move this competency_framework to a new relative sort order.
*
* @param int $from
* @param int $to
* @return boolean
*/
public static function reorder_competency_framework($from, $to) {
$params = self::validate_parameters(self::reorder_competency_framework_parameters(),
array(
'from' => $from,
'to' => $to
));
return api::reorder_framework($params['from'], $params['to']);
}
/**
* Returns description of reorder_competency_framework return value.
*
* @return \external_description
*/
public static function reorder_competency_framework_returns() {
return new external_value(PARAM_BOOL, 'True if this framework was moved.');
}
/**
* Returns the external structure of a full competency record.
*
@ -1342,7 +1371,7 @@ class external extends external_api {
$framework = new competency_framework($params['competencyframeworkid']);
$renderable = new output\manage_competencies_page($framework, $params['search']);
$renderable = new output\manage_competencies_page($framework, $params['search'], $framework->get_context());
$renderer = $PAGE->get_renderer('tool_lp');
$data = $renderable->export_for_template($renderer);

View file

@ -47,7 +47,8 @@ class competency_framework extends moodleform {
global $PAGE;
$mform = $this->_form;
$id = $this->_customdata;
$id = $this->_customdata['id'];
$context = $this->_customdata['context'];
$mform->addElement('hidden', 'id');
$mform->setType('id', PARAM_INT);
@ -81,6 +82,9 @@ class competency_framework extends moodleform {
$mform->setDefault('visible', true);
$mform->addHelpButton('visible', 'visible', 'tool_lp');
$mform->addElement('static', 'context', get_string('context', 'core_role'));
$mform->setDefault('context', $context->get_context_name());
$this->add_action_buttons(true, get_string('savechanges', 'tool_lp'));
if (!empty($id)) {

View file

@ -43,6 +43,9 @@ class course_competencies_page implements renderable, templatable {
/** @var int $courseid Course id for this page. */
protected $courseid = null;
/** @var context $context The context for this page. */
protected $context = null;
/** @var \tool_lp\competency[] $competencies List of competencies. */
protected $competencies = array();
@ -60,12 +63,24 @@ class course_competencies_page implements renderable, templatable {
* @param int $courseid The course record for this page.
*/
public function __construct($courseid) {
$context = context_course::instance($courseid);
$this->context = context_course::instance($courseid);
$this->courseid = $courseid;
$this->competencies = api::list_competencies_in_course($courseid);
$this->canmanagecompetencyframeworks = has_capability('tool/lp:competencymanage', context_system::instance());
$this->canmanagecoursecompetencies = has_capability('tool/lp:coursecompetencymanage', $context);
$this->manageurl = new moodle_url('/admin/tool/lp/competencyframeworks.php');
$this->canmanagecoursecompetencies = has_capability('tool/lp:coursecompetencymanage', $this->context);
// Check the lowest level in which the user can manage the competencies.
$this->manageurl = null;
$this->canmanagecompetencyframeworks = false;
$contexts = array_reverse($this->context->get_parent_contexts(true));
foreach ($contexts as $context) {
$canmanage = has_capability('tool/lp:competencymanage', $context);
if ($canmanage) {
$this->manageurl = new moodle_url('/admin/tool/lp/competencyframeworks.php',
array('pagecontextid' => $context->id));
$this->canmanagecompetencyframeworks = true;
break;
}
}
}
/**
@ -77,6 +92,7 @@ class course_competencies_page implements renderable, templatable {
public function export_for_template(renderer_base $output) {
$data = new stdClass();
$data->courseid = $this->courseid;
$data->pagecontextid = $this->context->id;
$data->competencies = array();
foreach ($this->competencies as $competency) {
$record = $competency->to_record();
@ -84,7 +100,10 @@ class course_competencies_page implements renderable, templatable {
}
$data->canmanagecompetencyframeworks = $this->canmanagecompetencyframeworks;
$data->canmanagecoursecompetencies = $this->canmanagecoursecompetencies;
$data->manageurl = $this->manageurl->out(true);
$data->manageurl = null;
if ($this->canmanagecompetencyframeworks) {
$data->manageurl = $this->manageurl->out(true);
}
return $data;
}

View file

@ -55,14 +55,19 @@ class manage_competencies_page implements renderable, templatable {
/** @var moodle_url $pluginurlbase Base url to use constructing links. */
protected $pluginbaseurl = null;
/** @var context $pagecontext The page context. */
protected $pagecontext = null;
/**
* Construct this renderable.
*
* @param \tool_lp\competency_framework $framework Competency framework.
* @param string $search Search string.
* @param context $pagecontext The page context.
*/
public function __construct($framework, $search) {
public function __construct($framework, $search, $pagecontext) {
$this->framework = $framework;
$this->pagecontext = $pagecontext;
$this->search = $search;
$addpage = new single_button(
new moodle_url('/admin/tool/lp/editcompetencyframework.php'),
@ -72,8 +77,7 @@ class manage_competencies_page implements renderable, templatable {
$this->competencies = api::search_competencies($search, $framework->get_id());
$context = context_system::instance();
$this->canmanage = has_capability('tool/lp:competencymanage', $context);
$this->canmanage = has_capability('tool/lp:competencymanage', $framework->get_context());
}
/**
@ -107,6 +111,7 @@ class manage_competencies_page implements renderable, templatable {
$data->canmanage = $this->canmanage;
$data->competencies = array();
$data->search = $this->search;
$data->pagecontextid = $this->pagecontext->id;
foreach ($this->competencies as $competency) {
if ($competency->get_parentid() == 0) {

View file

@ -29,6 +29,7 @@ use renderer_base;
use single_button;
use stdClass;
use moodle_url;
use context;
use context_system;
use tool_lp\api;
@ -40,6 +41,9 @@ use tool_lp\api;
*/
class manage_competency_frameworks_page implements renderable, templatable {
/** @var context The context in which everything is happening. */
protected $pagecontext;
/** @var array $navigation List of links to display on the page. Each link contains a url and a title. */
protected $navigation = array();
@ -55,17 +59,17 @@ class manage_competency_frameworks_page implements renderable, templatable {
/**
* Construct this renderable.
*/
public function __construct() {
public function __construct(context $pagecontext) {
$this->pagecontext = $pagecontext;
$addpage = new single_button(
new moodle_url('/admin/tool/lp/editcompetencyframework.php'),
get_string('addnewcompetencyframework', 'tool_lp')
new moodle_url('/admin/tool/lp/editcompetencyframework.php', array('pagecontextid' => $this->pagecontext->id)),
get_string('addnewcompetencyframework', 'tool_lp'),
'get'
);
$this->navigation[] = $addpage;
$this->competencyframeworks = api::list_frameworks(array(), 'sortorder', 'ASC', 0, 0);
$context = context_system::instance();
$this->canmanage = has_capability('tool/lp:competencymanage', $context);
$this->competencyframeworks = api::list_frameworks('shortname', 'ASC', 0, 0, $this->pagecontext);
}
/**
@ -76,12 +80,14 @@ class manage_competency_frameworks_page implements renderable, templatable {
*/
public function export_for_template(renderer_base $output) {
$data = new stdClass();
$data->canmanage = $this->canmanage;
$data->competencyframeworks = array();
$data->pagecontextid = $this->pagecontext->id;
foreach ($this->competencyframeworks as $framework) {
$record = $framework->to_record();
$filters = array('competencyframeworkid' => $framework->get_id());
$record->canmanage = has_capability('tool/lp:competencymanage', $framework->get_context());
$record->competencies_count = api::count_competencies($filters);
$record->context_name = $framework->get_context()->get_context_name();
$data->competencyframeworks[] = $record;
}
$data->pluginbaseurl = (new moodle_url('/admin/tool/lp'))->out(true);

View file

@ -264,9 +264,7 @@ abstract class persistent {
public function get_records_select($select, $params = null, $sort = '', $fields = '*', $limitfrom = 0, $limitnum = 0) {
global $DB;
if (!$records = $DB->get_records_select($this->get_table_name(), $select, $params, $sort, $fields, $limitfrom, $limitnum)) {
return false;
}
$records = $DB->get_records_select($this->get_table_name(), $select, $params, $sort, $fields, $limitfrom, $limitnum);
// We return class instances.
$instances = array();

View file

@ -25,17 +25,28 @@
require_once(__DIR__ . '/../../../config.php');
require_once($CFG->libdir.'/adminlib.php');
admin_externalpage_setup('toollpcompetencies');
$id = required_param('competencyframeworkid', PARAM_INT);
$pagecontextid = required_param('pagecontextid', PARAM_INT); // Reference to the context we came from.
$search = optional_param('search', '', PARAM_RAW);
require_login();
$pagecontext = context::instance_by_id($pagecontextid);
$framework = \tool_lp\api::read_framework($id);
$context = $framework->get_context();
require_capability('tool/lp:competencymanage', $context);
$title = get_string('competencies', 'tool_lp');
$pagetitle = get_string('competenciesforframework', 'tool_lp', $framework->get_shortname());
// Set up the page.
$url = new moodle_url("/admin/tool/lp/competencies.php", array('competencyframeworkid' => $framework->get_id()));
$url = new moodle_url("/admin/tool/lp/competencies.php", array('competencyframeworkid' => $framework->get_id(),
'pagecontextid' => $pagecontextid));
$frameworksurl = new moodle_url('/admin/tool/lp/competencyframeworks.php', array('pagecontextid' => $pagecontextid));
$PAGE->navigation->override_active_url($frameworksurl);
$PAGE->set_context($pagecontext);
$PAGE->set_pagelayout('admin');
$PAGE->set_url($url);
$PAGE->navbar->add($framework->get_shortname(), $url);
$PAGE->set_title($title);
@ -44,7 +55,7 @@ $output = $PAGE->get_renderer('tool_lp');
echo $output->header();
echo $output->heading($pagetitle);
$page = new \tool_lp\output\manage_competencies_page($framework, $search);
$page = new \tool_lp\output\manage_competencies_page($framework, $search, $pagecontext);
echo $output->render($page);
echo $output->footer();

View file

@ -25,12 +25,21 @@
require_once(__DIR__ . '/../../../config.php');
require_once($CFG->libdir.'/adminlib.php');
admin_externalpage_setup('toollpcompetencies');
$pagecontextid = required_param('pagecontextid', PARAM_INT);
$context = context::instance_by_id($pagecontextid);
$url = new moodle_url("/admin/tool/lp/competencyframeworks.php");
$url->param('pagecontextid', $pagecontextid);
require_login();
require_capability('tool/lp:competencymanage', $context);
$title = get_string('competencies', 'tool_lp');
$pagetitle = get_string('competencyframeworks', 'tool_lp');
// Set up the page.
$url = new moodle_url("/admin/tool/lp/competencyframeworks.php");
$PAGE->set_context($context);
$PAGE->set_pagelayout('admin');
$PAGE->set_url($url);
$PAGE->set_title($title);
$PAGE->set_heading($title);
@ -38,7 +47,7 @@ $output = $PAGE->get_renderer('tool_lp');
echo $output->header();
echo $output->heading($pagetitle);
$page = new \tool_lp\output\manage_competency_frameworks_page();
$page = new \tool_lp\output\manage_competency_frameworks_page($context);
echo $output->render($page);
echo $output->footer();

View file

@ -30,14 +30,14 @@ $capabilities = array(
'tool/lp:competencymanage' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSECAT,
'archetypes' => array(
),
'clonepermissionsfrom' => 'moodle/site:config'
'manager' => CAP_ALLOW
)
),
'tool/lp:competencyread' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_SYSTEM,
'contextlevel' => CONTEXT_COURSECAT,
'archetypes' => array(
'user' => CAP_ALLOW
),

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<XMLDB PATH="admin/tool/lp/db" VERSION="20150813" COMMENT="XMLDB file for Moodle admin/tool/lp"
<XMLDB PATH="admin/tool/lp/db" VERSION="20150814" COMMENT="XMLDB file for Moodle admin/tool/lp"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../../lib/xmldb/xmldb.xsd"
>
@ -31,6 +31,7 @@
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
<FIELD NAME="shortname" TYPE="char" LENGTH="100" NOTNULL="false" SEQUENCE="false" COMMENT="Short name for the competency framework."/>
<FIELD NAME="contextid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="idnumber" TYPE="char" LENGTH="100" NOTNULL="false" SEQUENCE="false" COMMENT="Unique idnumber for this competency framework."/>
<FIELD NAME="description" TYPE="text" NOTNULL="false" SEQUENCE="false" COMMENT="Description of this competency framework"/>
<FIELD NAME="descriptionformat" TYPE="int" LENGTH="4" NOTNULL="true" DEFAULT="0" SEQUENCE="false" COMMENT="The format of the description field"/>

View file

@ -65,5 +65,21 @@ function xmldb_tool_lp_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2015052404, 'tool', 'lp');
}
if ($oldversion < 2015052405) {
// Define field contextid to be added to tool_lp_competency_framework.
$table = new xmldb_table('tool_lp_competency_framework');
$field = new xmldb_field('contextid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null,
context_system::instance()->id, 'id');
// Conditionally launch add field contextid.
if (!$dbman->field_exists($table, $field)) {
$dbman->add_field($table, $field);
}
// Lp savepoint reached.
upgrade_plugin_savepoint(true, 2015052405, 'tool', 'lp');
}
return true;
}

View file

@ -25,25 +25,27 @@
require_once(__DIR__ . '/../../../config.php');
require_once($CFG->libdir.'/adminlib.php');
admin_externalpage_setup('toollpcompetencies');
$title = get_string('competencies', 'tool_lp');
$id = optional_param('id', 0, PARAM_INT);
$competencyframeworkid = required_param('competencyframeworkid', PARAM_INT);
$pagecontextid = required_param('pagecontextid', PARAM_INT); // Reference to the context we came from.
$parentid = optional_param('parentid', 0, PARAM_INT);
require_login();
$pagecontext = context::instance_by_id($pagecontextid);
if (empty($id)) {
$pagetitle = get_string('addnewcompetency', 'tool_lp');
} else {
$pagetitle = get_string('editcompetency', 'tool_lp');
}
// Set up the page.
$params = array('id' => $id, 'competencyframeworkid' => $competencyframeworkid, 'parentid' => $parentid);
$url = new moodle_url("/admin/tool/lp/editcompetency.php", $params);
$PAGE->set_url($url);
$PAGE->set_title($title);
$PAGE->set_heading($title);
$output = $PAGE->get_renderer('tool_lp');
$url = new moodle_url("/admin/tool/lp/editcompetency.php", array('id' => $id, 'competencyframeworkid' => $competencyframeworkid,
'parentid' => $parentid, 'pagecontextid' => $pagecontextid));
$frameworksurl = new moodle_url('/admin/tool/lp/competencyframeworks.php', array('pagecontextid' => $pagecontextid));
$frameworkurl = new moodle_url('/admin/tool/lp/competencies.php', array('competencyframeworkid' => $competencyframeworkid,
'pagecontextid' => $pagecontextid));
$competencyframework = \tool_lp\api::read_framework($competencyframeworkid);
$parent = null;
@ -51,10 +53,20 @@ if ($parentid) {
$parent = \tool_lp\api::read_competency($parentid);
}
$form = new \tool_lp\form\competency(null, array('id' => $id, 'competencyframework' => $competencyframework, 'parent' => $parent));
$PAGE->navigation->override_active_url($frameworksurl);
$PAGE->set_context($pagecontext);
$PAGE->set_pagelayout('admin');
$PAGE->set_url($url);
$PAGE->set_title($title);
$PAGE->set_heading($title);
$PAGE->navbar->add($competencyframework->get_shortname(), $frameworkurl);
$output = $PAGE->get_renderer('tool_lp');
$form = new \tool_lp\form\competency($url->out(false), array('id' => $id, 'competencyframework' => $competencyframework,
'parent' => $parent));
if ($form->is_cancelled()) {
redirect(new moodle_url('/admin/tool/lp/competencies.php', array('competencyframeworkid' => $competencyframeworkid)));
redirect($frameworkurl);
}
echo $output->header();
@ -71,14 +83,12 @@ if ($data) {
require_sesskey();
\tool_lp\api::create_competency($data);
echo $output->notification(get_string('competencycreated', 'tool_lp'), 'notifysuccess');
echo $output->continue_button(new moodle_url('/admin/tool/lp/competencies.php',
array('competencyframeworkid' => $competencyframeworkid)));
echo $output->continue_button($frameworkurl);
} else {
require_sesskey();
\tool_lp\api::update_competency($data);
echo $output->notification(get_string('competencyupdated', 'tool_lp'), 'notifysuccess');
echo $output->continue_button(new moodle_url('/admin/tool/lp/competencies.php',
array('competencyframeworkid' => $competencyframeworkid)));
echo $output->continue_button($frameworkurl);
}
} else {
$form->display();

View file

@ -25,26 +25,45 @@
require_once(__DIR__ . '/../../../config.php');
require_once($CFG->libdir.'/adminlib.php');
admin_externalpage_setup('toollpcompetencies');
$id = optional_param('id', 0, PARAM_INT);
$pagecontextid = required_param('pagecontextid', PARAM_INT); // Reference to where we can from.
if (!empty($id)) {
// Always use the context from the framework when it exists.
$framework = new \tool_lp\competency_framework($id);
$context = $framework->get_context();
} else {
$context = context::instance_by_id($pagecontextid);
}
// We check that we have the permission to edit this framework, in its own context.
require_login();
require_capability('tool/lp:competencymanage', $context);
// We keep the original context in the URLs, so that we remain in the same context.
$url = new moodle_url("/admin/tool/lp/editcompetencyframework.php", array('id' => $id, 'pagecontextid' => $pagecontextid));
$frameworksurl = new moodle_url('/admin/tool/lp/competencyframeworks.php', array('pagecontextid' => $pagecontextid));
$formurl = new moodle_url("/admin/tool/lp/editcompetencyframework.php", array('pagecontextid' => $pagecontextid));
$title = get_string('competencies', 'tool_lp');
$id = optional_param('id', 0, PARAM_INT);
if (empty($id)) {
$pagetitle = get_string('addnewcompetencyframework', 'tool_lp');
} else {
$pagetitle = get_string('editcompetencyframework', 'tool_lp');
}
// Set up the page.
$url = new moodle_url("/admin/tool/lp/editcompetencyframework.php", array('id' => $id));
$PAGE->navigation->override_active_url($frameworksurl);
$PAGE->set_context(context::instance_by_id($pagecontextid));
$PAGE->set_pagelayout('admin');
$PAGE->set_url($url);
$PAGE->set_title($title);
$PAGE->set_heading($title);
$output = $PAGE->get_renderer('tool_lp');
$form = new \tool_lp\form\competency_framework(null, $id);
$form = new \tool_lp\form\competency_framework($formurl->out(false), array('id' => $id, 'context' => $context));
if ($form->is_cancelled()) {
redirect(new moodle_url('/admin/tool/lp/competencyframeworks.php'));
redirect($frameworksurl);
}
echo $output->header();
@ -59,14 +78,15 @@ if ($data) {
if (empty($data->id)) {
// Create new framework.
require_sesskey();
$data->contextid = $context->id;
\tool_lp\api::create_framework($data);
echo $output->notification(get_string('competencyframeworkcreated', 'tool_lp'), 'notifysuccess');
echo $output->continue_button('/admin/tool/lp/competencyframeworks.php');
echo $output->continue_button($frameworksurl);
} else {
require_sesskey();
\tool_lp\api::update_framework($data);
echo $output->notification(get_string('competencyframeworkupdated', 'tool_lp'), 'notifysuccess');
echo $output->continue_button('/admin/tool/lp/competencyframeworks.php');
echo $output->continue_button($frameworksurl);
}
} else {
$form->display();

View file

@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die;
$temp = new admin_externalpage(
'toollpcompetencies',
get_string('competencyframeworks', 'tool_lp'),
new moodle_url('/admin/tool/lp/competencyframeworks.php'),
new moodle_url('/admin/tool/lp/competencyframeworks.php', array('pagecontextid' => context_system::instance()->id)),
'tool/lp:competencymanage'
);
$ADMIN->add('root', $temp, 'badges');

View file

@ -51,6 +51,6 @@
</div>
{{#js}}
require(['tool_lp/competencies'], function(mod) {
(new mod({{courseid}}, 'course'));
(new mod({{courseid}}, 'course', {{pagecontextid}}));
});
{{/js}}

View file

@ -107,7 +107,7 @@ require(['tool_lp/tree', 'tool_lp/competencytree', 'tool_lp/competencyactions' ]
treeModel.init({{framework.id}});
actions.init(treeModel);
actions.init(treeModel, {{pagecontextid}});
var competencytree = new ariatree('[data-enhance=tree]', actions.selectionChanged);

View file

@ -40,14 +40,16 @@
<tr>
<th scope="col">{{#str}}competencyframeworkname, tool_lp{{/str}}</th>
<th scope="col">{{#str}}competencies, tool_lp{{/str}}</th>
<th scope="col">{{#str}}context, core_role{{/str}}</th>
<th scope="col">{{#str}}actions, tool_lp{{/str}}</th>
</tr>
</thead>
<tbody class="drag-parentnode">
{{#competencyframeworks}}
<tr class="drag-samenode" data-frameworkid="{{id}}">
<td><span class="drag-handlecontainer"></span><span><a href="{{pluginbaseurl}}/competencies.php?competencyframeworkid={{id}}">{{shortname}} {{idnumber}}</a></span> {{^visible}}{{#str}}hiddenhint, tool_lp{{/str}}{{/visible}}</td>
<td><span class="drag-handlecontainer"></span><span><a href="{{pluginbaseurl}}/competencies.php?competencyframeworkid={{id}}&amp;pagecontextid={{pagecontextid}}">{{shortname}} {{idnumber}}</a></span> {{^visible}}{{#str}}hiddenhint, tool_lp{{/str}}{{/visible}}</td>
<td>{{competencies_count}}</td>
<td>{{context_name}}</td>
<td>
{{#canmanage}}
<ul title="{{#str}}edit{{/str}}" class="competencyframeworkactions">
@ -55,12 +57,12 @@
<a href="#">{{#str}}edit{{/str}}</a><b class="caret"></b>
<ul class="dropdown-menu">
<li>
<a href="{{pluginbaseurl}}/editcompetencyframework.php?id={{id}}">
<a href="{{pluginbaseurl}}/editcompetencyframework.php?id={{id}}&amp;pagecontextid={{pagecontextid}}">
{{#pix}}t/edit{{/pix}} {{#str}}edit{{/str}}
</a>
</li>
<li>
<a data-action="deletecompetencyframework" data-frameworkid="{{id}}" href="#">
<a data-action="deletecompetencyframework" href="#" data-frameworkid="{{id}}">
{{#pix}}t/delete{{/pix}} {{#str}}delete{{/str}}
</a>
</li>
@ -88,11 +90,10 @@
{{#js}}
// Initialise the JS.
require(['tool_lp/frameworkdelete',
'tool_lp/menubar',
'tool_lp/frameworkmove'],
function(deleteMod, menubar, moveMod) {
'tool_lp/menubar'],
function(deleteMod, menubar) {
moveMod.init();
deleteMod.init({{pagecontextid}});
menubar.enhance('.competencyframeworkactions', {
"[data-action='deletecompetencyframework']": deleteMod.deleteHandler

View file

@ -89,7 +89,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
public function test_create_competency_frameworks_with_read_permissions() {
$this->setExpectedException('required_capability_exception');
$this->setUser($this->user);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
}
/**
@ -97,7 +98,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_create_competency_frameworks_with_manage_permissions() {
$this->setUser($this->creator);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$result = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $result);
$this->assertGreaterThan(0, $result->timecreated);
@ -116,7 +118,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
public function test_create_competency_frameworks_with_nasty_data() {
$this->setUser($this->creator);
$this->setExpectedException('invalid_parameter_exception');
$result = external::create_competency_framework('short<a href="">', 'id;"number', 'de<>\\..scription', FORMAT_HTML, true);
$result = external::create_competency_framework('short<a href="">', 'id;"number', 'de<>\\..scription', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
}
/**
@ -124,7 +127,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_read_competency_frameworks_with_manage_permissions() {
$this->setUser($this->creator);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$result = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $result);
$id = $result->id;
@ -146,7 +150,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_read_competency_frameworks_with_read_permissions() {
$this->setUser($this->creator);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$result = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $result);
// Switch users to someone with less permissions.
@ -170,7 +175,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_delete_competency_frameworks_with_manage_permissions() {
$this->setUser($this->creator);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$result = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $result);
$id = $result->id;
@ -186,7 +192,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
public function test_delete_competency_frameworks_with_read_permissions() {
$this->setExpectedException('required_capability_exception');
$this->setUser($this->creator);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$result = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $result);
$id = $result->id;
@ -200,7 +207,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_update_competency_frameworks_with_manage_permissions() {
$this->setUser($this->creator);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$result = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $result);
$result = external::update_competency_framework($result->id, 'shortname2',
@ -216,7 +224,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
public function test_update_competency_frameworks_with_read_permissions() {
$this->setExpectedException('required_capability_exception');
$this->setUser($this->creator);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$result = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $result);
$this->setUser($this->user);
@ -229,16 +238,20 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_list_and_count_competency_frameworks_with_manage_permissions() {
$this->setUser($this->creator);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname2', 'idnumber2', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname3', 'idnumber3', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$result = external::create_competency_framework('shortname2', 'idnumber2', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$result = external::create_competency_framework('shortname3', 'idnumber3', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$result = external::count_competency_frameworks(array());
$result = external_api::clean_returnvalue(external::count_competency_frameworks_returns(), $result);
$this->assertEquals($result, 3);
$result = external::list_competency_frameworks(array(), 'shortname', 'ASC', 0, 10);
$result = external::list_competency_frameworks('shortname', 'ASC', 0, 10,
array('contextid' => context_system::instance()->id), 'self');
$result = external_api::clean_returnvalue(external::list_competency_frameworks_returns(), $result);
$this->assertEquals(count($result), 3);
@ -259,9 +272,12 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_list_and_count_competency_frameworks_with_read_permissions() {
$this->setUser($this->creator);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname2', 'idnumber2', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname3', 'idnumber3', 'description', FORMAT_HTML, true);
$result = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$result = external::create_competency_framework('shortname2', 'idnumber2', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$result = external::create_competency_framework('shortname3', 'idnumber3', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$this->setUser($this->user);
$result = external::count_competency_frameworks(array());
@ -269,7 +285,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
$this->assertEquals($result, 3);
$result = external::list_competency_frameworks(array(), 'shortname', 'ASC', 0, 10);
$result = external::list_competency_frameworks('shortname', 'ASC', 0, 10,
array('contextid' => context_system::instance()->id), 'self');
$result = external_api::clean_returnvalue(external::list_competency_frameworks_returns(), $result);
$this->assertEquals(count($result), 3);
@ -285,67 +302,13 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
$this->assertEquals(true, $result->visible);
}
/**
* Test we can re-order competency frameworks.
*/
public function test_reorder_competency_framework() {
$this->setUser($this->creator);
$f1 = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$f2 = external::create_competency_framework('shortname2', 'idnumber2', 'description', FORMAT_HTML, true);
$f3 = external::create_competency_framework('shortname3', 'idnumber3', 'description', FORMAT_HTML, true);
$f4 = external::create_competency_framework('shortname4', 'idnumber4', 'description', FORMAT_HTML, true);
$f5 = external::create_competency_framework('shortname5', 'idnumber5', 'description', FORMAT_HTML, true);
$f6 = external::create_competency_framework('shortname6', 'idnumber6', 'description', FORMAT_HTML, true);
// This is a move up.
$result = external::reorder_competency_framework($f5->id, $f2->id);
$result = external::list_competency_frameworks(array(), 'sortorder', 'ASC', 0, 10);
$result = external_api::clean_returnvalue(external::list_competency_frameworks_returns(), $result);
$r1 = (object) $result[0];
$r2 = (object) $result[1];
$r3 = (object) $result[2];
$r4 = (object) $result[3];
$r5 = (object) $result[4];
$r6 = (object) $result[5];
$this->assertEquals($f1->id, $r1->id);
$this->assertEquals($f5->id, $r2->id);
$this->assertEquals($f2->id, $r3->id);
$this->assertEquals($f3->id, $r4->id);
$this->assertEquals($f4->id, $r5->id);
$this->assertEquals($f6->id, $r6->id);
// This is a move down.
$result = external::reorder_competency_framework($f5->id, $f4->id);
$result = external::list_competency_frameworks(array(), 'sortorder', 'ASC', 0, 10);
$result = external_api::clean_returnvalue(external::list_competency_frameworks_returns(), $result);
$r1 = (object) $result[0];
$r2 = (object) $result[1];
$r3 = (object) $result[2];
$r4 = (object) $result[3];
$r5 = (object) $result[4];
$r6 = (object) $result[5];
$this->assertEquals($f1->id, $r1->id);
$this->assertEquals($f2->id, $r2->id);
$this->assertEquals($f3->id, $r3->id);
$this->assertEquals($f4->id, $r4->id);
$this->assertEquals($f5->id, $r5->id);
$this->assertEquals($f6->id, $r6->id);
$this->setExpectedException('required_capability_exception');
$this->setUser($this->user);
$result = external::reorder_competency_framework($f5->id, $f4->id);
}
/**
* Test we can't create a competency with only read permissions.
*/
public function test_create_competency_with_read_permissions() {
$this->setExpectedException('required_capability_exception');
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$this->setUser($this->user);
$competency = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
@ -356,7 +319,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_create_competency_with_manage_permissions() {
$this->setUser($this->creator);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$competency = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
@ -379,7 +343,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_create_competency_with_nasty_data() {
$this->setUser($this->creator);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$this->setExpectedException('invalid_parameter_exception');
$competency = external::create_competency('shortname<a href="">', 'id;"number',
@ -391,7 +356,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_read_competencies_with_manage_permissions() {
$this->setUser($this->creator);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$result = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
$result = (object) external_api::clean_returnvalue(external::create_competency_returns(), $result);
@ -417,7 +383,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_read_competencies_with_read_permissions() {
$this->setUser($this->creator);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$result = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
$result = (object) external_api::clean_returnvalue(external::create_competency_returns(), $result);
@ -445,7 +412,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_delete_competency_with_manage_permissions() {
$this->setUser($this->creator);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$result = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
$result = (object) external_api::clean_returnvalue(external::create_competency_returns(), $result);
@ -463,7 +431,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
public function test_delete_competency_with_read_permissions() {
$this->setExpectedException('required_capability_exception');
$this->setUser($this->creator);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$result = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
$result = (object) external_api::clean_returnvalue(external::create_competency_returns(), $result);
@ -479,7 +448,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_update_competency_with_manage_permissions() {
$this->setUser($this->creator);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$result = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
$result = (object) external_api::clean_returnvalue(external::create_competency_returns(), $result);
@ -496,7 +466,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
public function test_update_competency_with_read_permissions() {
$this->setExpectedException('required_capability_exception');
$this->setUser($this->creator);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$result = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
$result = (object) external_api::clean_returnvalue(external::create_competency_returns(), $result);
@ -510,7 +481,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_list_and_count_competencies_with_manage_permissions() {
$this->setUser($this->creator);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$result = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
$result = external::create_competency('shortname2', 'idnumber2', 'description2', FORMAT_HTML, true, $framework->id, 0);
@ -521,7 +493,7 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
$this->assertEquals($result, 3);
$result = external::list_competencies(array(), 'shortname', 'ASC', 0, 10);
array('id' => $result = external::list_competencies(array(), 'shortname', 'ASC', 0, 10, context_system::instance()->id));
$result = external_api::clean_returnvalue(external::list_competencies_returns(), $result);
$this->assertEquals(count($result), 3);
@ -541,7 +513,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_list_and_count_competencies_with_read_permissions() {
$this->setUser($this->creator);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$result = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
$result = external::create_competency('shortname2', 'idnumber2', 'description2', FORMAT_HTML, true, $framework->id, 0);
@ -554,7 +527,7 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
$this->assertEquals($result, 3);
$result = external::list_competencies(array(), 'shortname', 'ASC', 0, 10);
array('id' => $result = external::list_competencies(array(), 'shortname', 'ASC', 0, 10, context_system::instance()->id));
$result = external_api::clean_returnvalue(external::list_competencies_returns(), $result);
$this->assertEquals(count($result), 3);
@ -574,7 +547,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
*/
public function test_search_competencies_with_read_permissions() {
$this->setUser($this->creator);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$result = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
$result = external::create_competency('shortname2', 'idnumber2', 'description2', FORMAT_HTML, true, $framework->id, 0);
@ -783,7 +757,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
$template = (object) external_api::clean_returnvalue(external::create_template_returns(), $template);
// Create a competency.
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$competency = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
$competency = (object) external_api::clean_returnvalue(external::create_competency_returns(), $competency);
@ -817,7 +792,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
$template = (object) external_api::clean_returnvalue(external::create_template_returns(), $template);
// Create a competency.
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
$competency = external::create_competency('shortname', 'idnumber', 'description', FORMAT_HTML, true, $framework->id, 0);
$competency = (object) external_api::clean_returnvalue(external::create_competency_returns(), $competency);
@ -860,7 +836,8 @@ class tool_lp_external_testcase extends externallib_advanced_testcase {
$template = (object) external_api::clean_returnvalue(external::create_template_returns(), $template);
// Create a competency framework.
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true);
$framework = external::create_competency_framework('shortname', 'idnumber', 'description', FORMAT_HTML, true,
array('contextid' => context_system::instance()->id));
$framework = (object) external_api::clean_returnvalue(external::create_competency_framework_returns(), $framework);
// Create multiple competencies.

View file

@ -24,7 +24,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2015052404; // The current plugin version (Date: YYYYMMDDXX).
$plugin->version = 2015052405; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2014110400; // Requires this Moodle version.
$plugin->component = 'tool_lp'; // Full name of the plugin (used for diagnostics).

View file

@ -4679,6 +4679,13 @@ class settings_navigation extends navigation_node {
$categorynode->add(get_string('filters', 'admin'), $url, self::TYPE_SETTING, null, 'filters', new pix_icon('i/filter', ''));
}
// Competency frameworks.
if (has_capability('tool/lp:competencymanage', $catcontext)) {
$url = new moodle_url('/admin/tool/lp/competencyframeworks.php', array('pagecontextid' => $catcontext->id));
$categorynode->add(get_string('competencyframeworks', 'tool_lp'), $url, self::TYPE_SETTING, null,
'competencyframeworks', new pix_icon('i/settings', ''));
}
// Restore.
if (has_capability('moodle/restore:restorecourse', $catcontext)) {
$url = new moodle_url('/backup/restorefile.php', array('contextid' => $catcontext->id));