diff --git a/admin/tool/lp/amd/build/competencyactions.min.js b/admin/tool/lp/amd/build/competencyactions.min.js index 43efeb0675b..52bdb6b6bd9 100644 --- a/admin/tool/lp/amd/build/competencyactions.min.js +++ b/admin/tool/lp/amd/build/competencyactions.min.js @@ -1 +1 @@ -define(["jquery","core/url","core/templates","core/notification","core/str","core/ajax","tool_lp/dragdrop-reorder","tool_lp/tree","tool_lp/dialogue","tool_lp/menubar","tool_lp/competencypicker","tool_lp/competency_outcomes","tool_lp/competencyruleconfig"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n,o,p,q,r,s,t=null,u=null,v=null,w=function(){var c=a('[data-region="competencyactions"]').data("competency"),d={competencyframeworkid:t.getCompetencyFrameworkId(),pagecontextid:n};null!==c&&(d.parentid=c.id);var e=a.param(d);window.location=b.relativeUrl("/admin/tool/lp/editcompetency.php?"+e)},x=function(){if("undefined"==typeof v&&(v=0),v!=u){var b=a('[data-region="filtercompetencies"]').data("frameworkid"),c=f.call([{methodname:"tool_lp_set_parent_competency",args:{competencyid:u,parentid:v}},{methodname:"tool_lp_data_for_competencies_manage_page",args:{competencyframeworkid:b,search:a('[data-region="filtercompetencies"] input').val()}}]);c[1].done(C).fail(d.exception)}},y=function(b){var c=a(b.getContent()),d=c.find("[data-enhance=movetree]"),e=new h(d,!1);e.on("selectionchanged",function(b,c){var d=c.selected;v=a(d).data("id")}),d.show(),c.on("click",'[data-action="move"]',function(){b.close(),x()}),c.on("click",'[data-action="cancel"]',function(){b.close()})},z=function(a,b){var c;for(c=0;cspan",M).on("dragover","li>span",N).on("dragenter","li>span",O).on("dragleave","li>span",P).on("drop","li>span",Q),b.on("selectionchanged",Y),p=new m(t,s),p.on("save",J.bind(this))}}}); \ No newline at end of file +define(["jquery","core/url","core/templates","core/notification","core/str","core/ajax","tool_lp/dragdrop-reorder","tool_lp/tree","tool_lp/dialogue","tool_lp/menubar","tool_lp/competencypicker","tool_lp/competency_outcomes","tool_lp/competencyruleconfig"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n,o,p,q,r,s,t=null,u=null,v=null,w=function(){var c=a('[data-region="competencyactions"]').data("competency"),d={competencyframeworkid:t.getCompetencyFrameworkId(),pagecontextid:n};null!==c&&(d.parentid=c.id);var e=a.param(d);window.location=b.relativeUrl("/admin/tool/lp/editcompetency.php?"+e)},x=function(){if("undefined"==typeof v&&(v=0),v!=u){var b=a('[data-region="filtercompetencies"]').data("frameworkid"),c=f.call([{methodname:"tool_lp_set_parent_competency",args:{competencyid:u,parentid:v}},{methodname:"tool_lp_data_for_competencies_manage_page",args:{competencyframeworkid:b,search:a('[data-region="filtercompetencies"] input').val()}}]);c[1].done(C).fail(d.exception)}},y=function(b){var c=a(b.getContent()),d=c.find("[data-enhance=movetree]"),e=new h(d,!1);e.on("selectionchanged",function(b,c){var d=c.selected;v=a(d).data("id")}),d.show(),c.on("click",'[data-action="move"]',function(){b.close(),x()}),c.on("click",'[data-action="cancel"]',function(){b.close()})},z=function(a,b){var c;for(c=0;cspan",M).on("dragover","li>span",N).on("dragenter","li>span",O).on("dragleave","li>span",P).on("drop","li>span",Q),b.on("selectionchanged",Y),p=new m(t,s),p.on("save",J.bind(this))}}}); \ No newline at end of file diff --git a/admin/tool/lp/amd/src/competencyactions.js b/admin/tool/lp/amd/src/competencyactions.js index 957349a8fc9..8d73c4b2541 100644 --- a/admin/tool/lp/amd/src/competencyactions.js +++ b/admin/tool/lp/amd/src/competencyactions.js @@ -683,6 +683,22 @@ define(['jquery', return false; }; + /** + * Return the string "Selected ". + * + * @function parseTaxonomies + * @param {String} Comma separated list of taxonomies. + * @return {Array} of level => taxonomystr + */ + var parseTaxonomies = function(taxonomiesstr) { + var all = taxonomiesstr.split(','); + all.unshift(""); + delete all[0]; + + // Note we don't need to fill holes, because other functions check for empty anyway. + return all; + }; + return { /** * Initialise this page (attach event handlers etc). @@ -696,7 +712,7 @@ define(['jquery', init: function(model, pagectxid, taxonomies, rulesMods) { treeModel = model; pageContextId = pagectxid; - taxonomiesConstants = taxonomies; + taxonomiesConstants = parseTaxonomies(taxonomies); rulesModules = rulesMods; $('[data-region="competencyactions"] [data-action="add"]').on('click', addHandler); diff --git a/admin/tool/lp/classes/api.php b/admin/tool/lp/classes/api.php index fefe3bf36aa..425697a4ac2 100644 --- a/admin/tool/lp/classes/api.php +++ b/admin/tool/lp/classes/api.php @@ -52,7 +52,7 @@ class api { $competency = new competency(0, $record); // First we do a permissions check. - require_capability('tool/lp:competencymanage', $competency->get_framework()->get_context()); + require_capability('tool/lp:competencymanage', $competency->get_context()); // OK - all set. $id = $competency->create(); @@ -71,7 +71,7 @@ class api { $competency = new competency($id); // First we do a permissions check. - require_capability('tool/lp:competencymanage', $competency->get_framework()->get_context()); + require_capability('tool/lp:competencymanage', $competency->get_context()); // OK - all set. return $competency->delete(); @@ -89,7 +89,7 @@ class api { $current = new competency($id); // First we do a permissions check. - require_capability('tool/lp:competencymanage', $current->get_framework()->get_context()); + require_capability('tool/lp:competencymanage', $current->get_context()); $max = self::count_competencies(array('parentid' => $current->get_parentid(), 'competencyframeworkid' => $current->get_competencyframeworkid())); @@ -130,7 +130,7 @@ class api { $current = new competency($id); // First we do a permissions check. - require_capability('tool/lp:competencymanage', $current->get_framework()->get_context()); + require_capability('tool/lp:competencymanage', $current->get_context()); $sortorder = $current->get_sortorder(); if ($sortorder == 0) { @@ -166,7 +166,7 @@ class api { $current = new competency($id); // First we do a permissions check. - require_capability('tool/lp:competencymanage', $current->get_framework()->get_context()); + require_capability('tool/lp:competencymanage', $current->get_context()); // This will throw an exception if the parent does not exist. @@ -212,7 +212,7 @@ class api { $competency = new competency($record->id); // First we do a permissions check. - require_capability('tool/lp:competencymanage', $competency->get_framework()->get_context()); + require_capability('tool/lp:competencymanage', $competency->get_context()); // Some things should not be changed in an update - they should use a more specific method. $record->sortorder = $competency->get_sortorder(); @@ -220,7 +220,7 @@ class api { $record->competencyframeworkid = $competency->get_competencyframeworkid(); $competency->from_record($record); - require_capability('tool/lp:competencymanage', $competency->get_framework()->get_context()); + require_capability('tool/lp:competencymanage', $competency->get_context()); // OK - all set. return $competency->update(); @@ -239,7 +239,7 @@ class api { $competency = new competency($id); // First we do a permissions check. - $context = $competency->get_framework()->get_context(); + $context = $competency->get_context(); if (!has_any_capability(array('tool/lp:competencyread', 'tool/lp:competencymanage'), $context)) { throw new required_capability_exception($context, 'tool/lp:competencyread', 'nopermissions', ''); } @@ -1538,7 +1538,7 @@ class api { public static function list_related_competencies($competencyid) { $competency = new competency($competencyid); - require_capability('tool/lp:competencymanage', $competency->get_framework()->get_context()); + require_capability('tool/lp:competencymanage', $competency->get_context()); return $competency->get_related_competencies(); } @@ -1554,7 +1554,7 @@ class api { $competency1 = new competency($competencyid); $competency2 = new competency($relatedcompetencyid); - require_capability('tool/lp:competencymanage', $competency1->get_framework()->get_context()); + require_capability('tool/lp:competencymanage', $competency1->get_context()); $relatedcompetency = related_competency::get_relation($competency1->get_id(), $competency2->get_id()); if (!$relatedcompetency->get_id()) { @@ -1577,7 +1577,7 @@ class api { // This only check if we have the permission in either competency because both competencies // should belong to the same framework. - require_capability('tool/lp:competencymanage', $competency->get_framework()->get_context()); + require_capability('tool/lp:competencymanage', $competency->get_context()); $relatedcompetency = related_competency::get_relation($competencyid, $relatedcompetencyid); if ($relatedcompetency->get_id()) { diff --git a/admin/tool/lp/classes/external.php b/admin/tool/lp/classes/external.php index 9631885a922..89d2d546a74 100644 --- a/admin/tool/lp/classes/external.php +++ b/admin/tool/lp/classes/external.php @@ -1177,7 +1177,7 @@ class external extends external_api { $competency = api::read_competency($params['id']); - $context = $competency->get_framework()->get_context(); + $context = $competency->get_context(); self::validate_context($context); $output = $PAGE->get_renderer('tool_lp'); $exporter = new competency_exporter($competency, array('context' => $context)); @@ -1225,7 +1225,7 @@ class external extends external_api { )); $competency = api::read_competency($params['id']); - $context = $competency->get_framework()->get_context(); + $context = $competency->get_context(); self::validate_context($context); return api::delete_competency($params['id']); @@ -1343,7 +1343,7 @@ class external extends external_api { )); $competency = api::read_competency($params['id']); - self::validate_context($competency->get_framework()->get_context()); + self::validate_context($competency->get_context()); $params = (object) $params; @@ -1690,7 +1690,7 @@ class external extends external_api { )); $competency = api::read_competency($params['competencyid']); - self::validate_context($competency->get_framework()->get_context()); + self::validate_context($competency->get_context()); return api::set_parent_competency($params['competencyid'], $params['parentid']); } @@ -1734,7 +1734,7 @@ class external extends external_api { )); $competency = api::read_competency($params['id']); - self::validate_context($competency->get_framework()->get_context()); + self::validate_context($competency->get_context()); return api::move_up_competency($params['id']); } @@ -1778,7 +1778,7 @@ class external extends external_api { )); $competency = api::read_competency($params['id']); - self::validate_context($competency->get_framework()->get_context()); + self::validate_context($competency->get_context()); return api::move_down_competency($params['id']); } @@ -1822,7 +1822,7 @@ class external extends external_api { )); $competency = api::read_competency($params['id']); - self::validate_context($competency->get_framework()->get_context()); + self::validate_context($competency->get_context()); return api::count_courses_using_competency($params['id']); } @@ -1866,7 +1866,7 @@ class external extends external_api { )); $competency = api::read_competency($params['id']); - self::validate_context($competency->get_framework()->get_context()); + self::validate_context($competency->get_context()); return api::list_courses_using_competency($params['id']); } @@ -1991,7 +1991,7 @@ class external extends external_api { $contextcache = array(); foreach ($competencies as $competency) { if (!isset($contextcache[$competency->get_competencyframeworkid()])) { - $contextcache[$competency->get_competencyframeworkid()] = $competency->get_framework()->get_context(); + $contextcache[$competency->get_competencyframeworkid()] = $competency->get_context(); } $context = $contextcache[$competency->get_competencyframeworkid()]; $exporter = new competency_exporter($competency, array('context' => $context)); @@ -2915,7 +2915,7 @@ class external extends external_api { )); $competency = api::read_competency($params['id']); - self::validate_context($competency->get_framework()->get_context()); + self::validate_context($competency->get_context()); return api::count_templates_using_competency($params['id']); } @@ -2961,7 +2961,7 @@ class external extends external_api { )); $competency = api::read_competency($params['id']); - self::validate_context($competency->get_framework()->get_context()); + self::validate_context($competency->get_context()); $output = $PAGE->get_renderer('tool_lp'); $templates = api::list_templates_using_competency($params['id']); @@ -3068,7 +3068,7 @@ class external extends external_api { foreach ($competencies as $competency) { if (!isset($contextcache[$competency->get_competencyframeworkid()])) { - $contextcache[$competency->get_competencyframeworkid()] = $competency->get_framework()->get_context(); + $contextcache[$competency->get_competencyframeworkid()] = $competency->get_context(); } $context = $contextcache[$competency->get_competencyframeworkid()]; $exporter = new competency_exporter($competency, array('context' => $context)); @@ -3961,7 +3961,7 @@ class external extends external_api { if ($plan->get_status() == plan::STATUS_COMPLETE) { if (!isset($contextcache[$r->competency->get_competencyframeworkid()])) { - $contextcache[$r->competency->get_competencyframeworkid()] = $r->competency->get_framework()->get_context(); + $contextcache[$r->competency->get_competencyframeworkid()] = $r->competency->get_context(); } $context = $contextcache[$r->competency->get_competencyframeworkid()]; @@ -4092,7 +4092,7 @@ class external extends external_api { 'relatedcompetencyid' => $relatedcompetencyid )); $competency = api::read_competency($params['competencyid']); - self::validate_context($competency->get_framework()->get_context()); + self::validate_context($competency->get_context()); return api::add_related_competency($params['competencyid'], $params['relatedcompetencyid']); } @@ -4143,7 +4143,7 @@ class external extends external_api { 'relatedcompetencyid' => $relatedcompetencyid )); $competency = api::read_competency($params['competencyid']); - self::validate_context($competency->get_framework()->get_context()); + self::validate_context($competency->get_context()); return api::remove_related_competency($params['competencyid'], $params['relatedcompetencyid']); } @@ -4185,7 +4185,7 @@ class external extends external_api { 'competencyid' => $competencyid, )); $competency = api::read_competency($params['competencyid']); - self::validate_context($competency->get_framework()->get_context()); + self::validate_context($competency->get_context()); $renderable = new \tool_lp\output\related_competencies($params['competencyid']); $renderer = $PAGE->get_renderer('tool_lp'); diff --git a/admin/tool/lp/classes/external/competency_framework_exporter.php b/admin/tool/lp/classes/external/competency_framework_exporter.php index ca03fd6cc01..4ea9f109023 100644 --- a/admin/tool/lp/classes/external/competency_framework_exporter.php +++ b/admin/tool/lp/classes/external/competency_framework_exporter.php @@ -36,10 +36,4 @@ class competency_framework_exporter extends persistent_exporter { protected function get_persistent_class() { return 'tool_lp\\competency_framework'; } - - public function export_for_template(renderer_base $output) { - $result = parent::export_for_template($output); - $result->taxonomies = json_encode($this->persistent->get_taxonomies()); - return $result; - } } diff --git a/admin/tool/lp/classes/external/persistent_exporter.php b/admin/tool/lp/classes/external/persistent_exporter.php index b0b5b46a43a..677b5c1818f 100644 --- a/admin/tool/lp/classes/external/persistent_exporter.php +++ b/admin/tool/lp/classes/external/persistent_exporter.php @@ -87,6 +87,23 @@ abstract class persistent_exporter implements templatable { } } + /** + * Function to guess the correct context, falling back to system context. + * + * @return context + */ + protected function get_context() { + $context = null; + if (isset($this->related['context']) && $this->related['context'] instanceof context) { + $context = $this->related['context']; + } else if (method_exists($this->persistent, 'get_context')) { + $context = $this->persistent->get_context(); + } else { + $context = context_system::instance(); + } + return $context; + } + /** * Function to export the renderer data in a format that is suitable for a * mustache template. This means raw records are generated as in to_record, @@ -98,23 +115,18 @@ abstract class persistent_exporter implements templatable { public function export_for_template(renderer_base $output) { $data = new stdClass(); $properties = $this->persistent->properties_definition(); - if (isset($this->related['context']) && $this->related['context'] instanceof context) { - $context = $this->related['context']; - } else if (method_exists($this->persistent, 'get_context')) { - $context = $this->persistent->get_context(); - } else { - $context = context_system::instance(); - } + $context = $this->get_context(); + $record = $this->persistent->to_record(); + foreach ($properties as $property => $definition) { if (!isset($data->$property)) { - $getmethod = 'get_' . $property; - $data->$property = $this->persistent->$getmethod(); + $data->$property = $record->$property; if ($definition['type'] === PARAM_TEXT) { $propertyformat = $property . 'format'; - if (isset($properties[$propertyformat]) && $properties[$propertyformat]['type'] == PARAM_FORMAT) { - $format = $this->persistent->get($propertyformat); - list($text, $format) = external_format_text($data->$property, $format, $context->id); + if (isset($properties[$propertyformat]) && $properties[$propertyformat]['type'] == PARAM_INT) { + $format = $record->$propertyformat; + list($text, $format) = external_format_text($data->$property, $format, $context->id, 'tool_lp', '', 0); $data->$property = $text; $data->$propertyformat = $format; } else { diff --git a/admin/tool/lp/classes/output/course_competencies_page.php b/admin/tool/lp/classes/output/course_competencies_page.php index b52f5979b7d..1d1eb641e7c 100644 --- a/admin/tool/lp/classes/output/course_competencies_page.php +++ b/admin/tool/lp/classes/output/course_competencies_page.php @@ -99,7 +99,7 @@ class course_competencies_page implements renderable, templatable { $contextcache = array(); foreach ($this->competencies as $competency) { if (!isset($contextcache[$competency->get_competencyframeworkid()])) { - $contextcache[$competency->get_competencyframeworkid()] = $competency->get_framework()->get_context(); + $contextcache[$competency->get_competencyframeworkid()] = $competency->get_context(); } $context = $contextcache[$competency->get_competencyframeworkid()]; diff --git a/admin/tool/lp/classes/output/related_competencies.php b/admin/tool/lp/classes/output/related_competencies.php index 7d662663e11..af9111534c0 100644 --- a/admin/tool/lp/classes/output/related_competencies.php +++ b/admin/tool/lp/classes/output/related_competencies.php @@ -49,7 +49,7 @@ class related_competencies implements renderable, templatable { */ public function __construct($competencyid) { $this->competency = api::read_competency($competencyid); - $this->context = $this->competency->get_framework()->get_context(); + $this->context = $this->competency->get_context(); $this->relatedcompetencies = api::list_related_competencies($competencyid); } diff --git a/admin/tool/lp/classes/output/template_competencies_page.php b/admin/tool/lp/classes/output/template_competencies_page.php index c592d1801c6..599f4d2542a 100644 --- a/admin/tool/lp/classes/output/template_competencies_page.php +++ b/admin/tool/lp/classes/output/template_competencies_page.php @@ -88,7 +88,7 @@ class template_competencies_page implements renderable, templatable { $contextcache = array(); foreach ($this->competencies as $competency) { if (!isset($contextcache[$competency->get_competencyframeworkid()])) { - $contextcache[$competency->get_competencyframeworkid()] = $competency->get_framework()->get_context(); + $contextcache[$competency->get_competencyframeworkid()] = $competency->get_context(); } $context = $contextcache[$competency->get_competencyframeworkid()]; diff --git a/admin/tool/lp/classes/plan.php b/admin/tool/lp/classes/plan.php index 6dd746424ec..89d1b807886 100644 --- a/admin/tool/lp/classes/plan.php +++ b/admin/tool/lp/classes/plan.php @@ -33,7 +33,7 @@ use lang_string; * @copyright 2015 David Monllao * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class plan extends persistent { +class plan extends persistent { const TABLE = 'tool_lp_plan'; diff --git a/admin/tool/lp/templates/manage_competencies_page.mustache b/admin/tool/lp/templates/manage_competencies_page.mustache index 88e5dc1215a..21a2152296b 100644 --- a/admin/tool/lp/templates/manage_competencies_page.mustache +++ b/admin/tool/lp/templates/manage_competencies_page.mustache @@ -118,7 +118,7 @@ require(['tool_lp/tree', 'tool_lp/competencytree', 'tool_lp/competencyactions', '{{search}}', '[data-enhance=tree]'); - actions.init(treeModel, {{pagecontextid}}, {{{framework.taxonomies}}}, {{{rulesmodules}}}); + actions.init(treeModel, {{pagecontextid}}, '{{{framework.taxonomies}}}', {{{rulesmodules}}}); }); {{/js}}