mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 08:56:36 +02:00
MDL-52195 tool_lp: New page that lists the plans of a template
This commit is contained in:
parent
578e61c18a
commit
f0b2e58190
5 changed files with 258 additions and 1 deletions
|
@ -24,6 +24,7 @@
|
||||||
namespace tool_lp\external;
|
namespace tool_lp\external;
|
||||||
|
|
||||||
use renderer_base;
|
use renderer_base;
|
||||||
|
use tool_lp\plan;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class for exporting template data.
|
* Class for exporting template data.
|
||||||
|
@ -39,7 +40,8 @@ class template_exporter extends persistent_exporter {
|
||||||
|
|
||||||
protected function get_values(renderer_base $output) {
|
protected function get_values(renderer_base $output) {
|
||||||
return array(
|
return array(
|
||||||
'duedateformatted' => userdate($this->persistent->get_duedate())
|
'duedateformatted' => userdate($this->persistent->get_duedate()),
|
||||||
|
'planscount' => plan::count_records(array('templateid' => $this->persistent->get_id()))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +49,9 @@ class template_exporter extends persistent_exporter {
|
||||||
return array(
|
return array(
|
||||||
'duedateformatted' => array(
|
'duedateformatted' => array(
|
||||||
'type' => PARAM_RAW
|
'type' => PARAM_RAW
|
||||||
|
),
|
||||||
|
'planscount' => array(
|
||||||
|
'type' => PARAM_INT
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
181
admin/tool/lp/classes/output/template_plans_table.php
Normal file
181
admin/tool/lp/classes/output/template_plans_table.php
Normal file
|
@ -0,0 +1,181 @@
|
||||||
|
<?php
|
||||||
|
// This file is part of Moodle - http://moodle.org/
|
||||||
|
//
|
||||||
|
// Moodle is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// Moodle is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template plans table.
|
||||||
|
*
|
||||||
|
* @package tool_lp
|
||||||
|
* @copyright 2015 Frédéric Massart - FMCorz.net
|
||||||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace tool_lp\output;
|
||||||
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
|
require_once($CFG->libdir . '/tablelib.php');
|
||||||
|
|
||||||
|
use html_writer;
|
||||||
|
use moodle_url;
|
||||||
|
use table_sql;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template plans table class.
|
||||||
|
*
|
||||||
|
* Note that presently this table may display some rows although the current user
|
||||||
|
* does not have permission to view those plans.
|
||||||
|
*
|
||||||
|
* @package tool_lp
|
||||||
|
* @copyright 2015 Frédéric Massart - FMCorz.net
|
||||||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
|
*/
|
||||||
|
class template_plans_table extends table_sql {
|
||||||
|
|
||||||
|
/** @var context The context. */
|
||||||
|
protected $context;
|
||||||
|
|
||||||
|
/** @var \tool_lp\template The template. */
|
||||||
|
protected $template;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up the table.
|
||||||
|
*
|
||||||
|
* @param string $uniqueid Unique id of table.
|
||||||
|
* @param \tool_lp\template $template The template.
|
||||||
|
*/
|
||||||
|
public function __construct($uniqueid, \tool_lp\template $template) {
|
||||||
|
global $CFG;
|
||||||
|
parent::__construct($uniqueid);
|
||||||
|
|
||||||
|
// This object should not be used without the right permissions.
|
||||||
|
require_capability('tool/lp:templatemanage', $template->get_context());
|
||||||
|
|
||||||
|
// Set protected properties.
|
||||||
|
$this->template = $template;
|
||||||
|
$this->context = $this->template->get_context();
|
||||||
|
$this->useridfield = 'userid';
|
||||||
|
|
||||||
|
// Define columns in the table.
|
||||||
|
$this->define_table_columns();
|
||||||
|
|
||||||
|
// Define configs.
|
||||||
|
$this->define_table_configs();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format column name.
|
||||||
|
*
|
||||||
|
* @param stdClass $row
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function col_name($row) {
|
||||||
|
return html_writer::link(new moodle_url('/admin/tool/lp/plan.php', array('id' => $row->id)),
|
||||||
|
format_string($row->name, true, array('context' => $this->context)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup the headers for the table.
|
||||||
|
*/
|
||||||
|
protected function define_table_columns() {
|
||||||
|
$extrafields = get_extra_user_fields($this->context);
|
||||||
|
|
||||||
|
// Define headers and columns.
|
||||||
|
$cols = array(
|
||||||
|
'name' => get_string('planname', 'tool_lp'),
|
||||||
|
'fullname' => get_string('name')
|
||||||
|
);
|
||||||
|
|
||||||
|
// Add headers for extra user fields.
|
||||||
|
foreach ($extrafields as $field) {
|
||||||
|
if (get_string_manager()->string_exists($field, 'moodle')) {
|
||||||
|
$cols[$field] = get_string($field);
|
||||||
|
} else {
|
||||||
|
$cols[$field] = $field;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add remaining headers.
|
||||||
|
$cols = array_merge($cols, array());
|
||||||
|
|
||||||
|
$this->define_columns(array_keys($cols));
|
||||||
|
$this->define_headers(array_values($cols));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define table configs.
|
||||||
|
*/
|
||||||
|
protected function define_table_configs() {
|
||||||
|
$this->collapsible(false);
|
||||||
|
$this->sortable(true, 'lastname', SORT_ASC);
|
||||||
|
$this->pageable(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds the SQL query.
|
||||||
|
*
|
||||||
|
* @param bool $count When true, return the count SQL.
|
||||||
|
* @return array containing sql to use and an array of params.
|
||||||
|
*/
|
||||||
|
protected function get_sql_and_params($count = false) {
|
||||||
|
$fields = 'p.id, p.userid, p.name, ';
|
||||||
|
|
||||||
|
// Add extra user fields that we need for the graded user.
|
||||||
|
$extrafields = get_extra_user_fields($this->context);
|
||||||
|
foreach ($extrafields as $field) {
|
||||||
|
$fields .= 'u.' . $field . ', ';
|
||||||
|
}
|
||||||
|
$fields .= get_all_user_name_fields(true, 'u');
|
||||||
|
|
||||||
|
if ($count) {
|
||||||
|
$select = "COUNT(1)";
|
||||||
|
} else {
|
||||||
|
$select = "$fields";
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "SELECT $select
|
||||||
|
FROM {" . \tool_lp\plan::TABLE . "} p
|
||||||
|
JOIN {user} u ON u.id = p.userid
|
||||||
|
WHERE p.templateid = :templateid";
|
||||||
|
$params = array('templateid' => $this->template->get_id());
|
||||||
|
|
||||||
|
// Add order by if needed.
|
||||||
|
if (!$count && $sqlsort = $this->get_sql_sort()) {
|
||||||
|
$sql .= " ORDER BY " . $sqlsort;
|
||||||
|
}
|
||||||
|
|
||||||
|
return array($sql, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query the DB.
|
||||||
|
*
|
||||||
|
* @param int $pagesize size of page for paginated displayed table.
|
||||||
|
* @param bool $useinitialsbar do you want to use the initials bar.
|
||||||
|
*/
|
||||||
|
public function query_db($pagesize, $useinitialsbar = true) {
|
||||||
|
global $DB;
|
||||||
|
|
||||||
|
list($countsql, $countparams) = $this->get_sql_and_params(true);
|
||||||
|
list($sql, $params) = $this->get_sql_and_params();
|
||||||
|
$total = $DB->count_records_sql($countsql, $countparams);
|
||||||
|
$this->pagesize($pagesize, $total);
|
||||||
|
$this->rawdata = $DB->get_records_sql($sql, $params, $this->get_page_start(), $this->get_page_size());
|
||||||
|
|
||||||
|
// Set initial bars.
|
||||||
|
if ($useinitialsbar) {
|
||||||
|
$this->initialbars($total > $pagesize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -213,6 +213,7 @@ $string['totalrequiredtocomplete'] = 'Total required to complete';
|
||||||
$string['usercompetencystatus_idle'] = 'Idle';
|
$string['usercompetencystatus_idle'] = 'Idle';
|
||||||
$string['usercompetencystatus_inreview'] = 'In review';
|
$string['usercompetencystatus_inreview'] = 'In review';
|
||||||
$string['usercompetencystatus_waitingforreview'] = 'Waiting for review';
|
$string['usercompetencystatus_waitingforreview'] = 'Waiting for review';
|
||||||
|
$string['userplans'] = 'User plans';
|
||||||
$string['visible'] = 'Visible';
|
$string['visible'] = 'Visible';
|
||||||
$string['visible_help'] = 'A competency framework can be hidden from teachers. This could be useful if a framework is still in the process of being developed.';
|
$string['visible_help'] = 'A competency framework can be hidden from teachers. This could be useful if a framework is still in the process of being developed.';
|
||||||
$string['when'] = 'When';
|
$string['when'] = 'When';
|
||||||
|
|
68
admin/tool/lp/template_plans.php
Normal file
68
admin/tool/lp/template_plans.php
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
<?php
|
||||||
|
// This file is part of Moodle - http://moodle.org/
|
||||||
|
//
|
||||||
|
// Moodle is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// Moodle is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List plans derived from the template.
|
||||||
|
*
|
||||||
|
* @package tool_lp
|
||||||
|
* @copyright 2015 Frédéric Massart - FMCorz.net
|
||||||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
require(__DIR__ . '/../../../config.php');
|
||||||
|
|
||||||
|
$id = required_param('id', PARAM_INT);
|
||||||
|
$pagecontextid = required_param('pagecontextid', PARAM_INT); // Reference to the context we came from.
|
||||||
|
|
||||||
|
require_login(0, false);
|
||||||
|
if (isguestuser()) {
|
||||||
|
throw new require_login_exception('Guests are not allowed here.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$pagecontext = context::instance_by_id($pagecontextid);
|
||||||
|
$template = \tool_lp\api::read_template($id);
|
||||||
|
$context = $template->get_context();
|
||||||
|
require_capability('tool/lp:templatemanage', $context);
|
||||||
|
|
||||||
|
// Set up the page.
|
||||||
|
$url = new moodle_url('/admin/tool/lp/template_plans.php', array(
|
||||||
|
'id' => $id,
|
||||||
|
'pagecontextid' => $pagecontextid
|
||||||
|
));
|
||||||
|
$templatesurl = new moodle_url('/admin/tool/lp/learningplans.php', array('pagecontextid' => $pagecontextid));
|
||||||
|
|
||||||
|
$PAGE->navigation->override_active_url($templatesurl);
|
||||||
|
$PAGE->set_context($pagecontext);
|
||||||
|
|
||||||
|
$title = get_string('userplans', 'tool_lp');
|
||||||
|
$templatename = format_string($template->get_shortname(), true, array('context' => $context));
|
||||||
|
|
||||||
|
$PAGE->set_pagelayout('admin');
|
||||||
|
$PAGE->set_url($url);
|
||||||
|
$PAGE->set_title($title);
|
||||||
|
$PAGE->set_heading($templatename);
|
||||||
|
$PAGE->navbar->add($templatename, $url);
|
||||||
|
|
||||||
|
// Display the page.
|
||||||
|
$output = $PAGE->get_renderer('tool_lp');
|
||||||
|
echo $output->header();
|
||||||
|
echo $output->heading($title);
|
||||||
|
|
||||||
|
$tpl = new \tool_lp\output\template_plans_table('tplplans', $template);
|
||||||
|
$tpl->define_baseurl($url);
|
||||||
|
echo $tpl->out(50, true);
|
||||||
|
|
||||||
|
echo $output->footer();
|
|
@ -38,6 +38,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">{{#str}}templatename, tool_lp{{/str}}</th>
|
<th scope="col">{{#str}}templatename, tool_lp{{/str}}</th>
|
||||||
<th scope="col">{{#str}}context, core_role{{/str}}</th>
|
<th scope="col">{{#str}}context, core_role{{/str}}</th>
|
||||||
|
<th scope="col">{{#str}}userplans, tool_lp{{/str}}</th>
|
||||||
<th scope="col">{{#str}}actions, tool_lp{{/str}}</th>
|
<th scope="col">{{#str}}actions, tool_lp{{/str}}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -46,6 +47,7 @@
|
||||||
<tr class="drag-samenode" data-templateid="{{id}}">
|
<tr class="drag-samenode" data-templateid="{{id}}">
|
||||||
<td><a href="{{pluginbaseurl}}/templatecompetencies.php?templateid={{id}}&pagecontextid={{pagecontextid}}">{{shortname}}</a></span> {{^visible}}{{#str}}hiddenhint, tool_lp{{/str}}{{/visible}}</td>
|
<td><a href="{{pluginbaseurl}}/templatecompetencies.php?templateid={{id}}&pagecontextid={{pagecontextid}}">{{shortname}}</a></span> {{^visible}}{{#str}}hiddenhint, tool_lp{{/str}}{{/visible}}</td>
|
||||||
<td>{{contextname}}</td>
|
<td>{{contextname}}</td>
|
||||||
|
<td><a href="{{pluginbaseurl}}/template_plans.php?id={{id}}&pagecontextid={{pagecontextid}}">{{planscount}}</a></td>
|
||||||
<td>
|
<td>
|
||||||
{{#canmanage}}
|
{{#canmanage}}
|
||||||
<ul class="templateactions">
|
<ul class="templateactions">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue