Skip to content

Commit

Permalink
MDL-52195 tool_lp: New page that lists the plans of a template
Browse files Browse the repository at this point in the history
  • Loading branch information
Frederic Massart committed Apr 18, 2016
1 parent 578e61c commit f0b2e58
Show file tree
Hide file tree
Showing 5 changed files with 258 additions and 1 deletion.
7 changes: 6 additions & 1 deletion admin/tool/lp/classes/external/template_exporter.php
Expand Up @@ -24,6 +24,7 @@
namespace tool_lp\external;

use renderer_base;
use tool_lp\plan;

/**
* Class for exporting template data.
Expand All @@ -39,14 +40,18 @@ protected static function define_class() {

protected function get_values(renderer_base $output) {
return array(
'duedateformatted' => userdate($this->persistent->get_duedate())
'duedateformatted' => userdate($this->persistent->get_duedate()),
'planscount' => plan::count_records(array('templateid' => $this->persistent->get_id()))
);
}

protected static function define_properties() {
return array(
'duedateformatted' => array(
'type' => PARAM_RAW
),
'planscount' => array(
'type' => PARAM_INT
)
);
}
Expand Down
181 changes: 181 additions & 0 deletions admin/tool/lp/classes/output/template_plans_table.php
@@ -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);
}
}
}
1 change: 1 addition & 0 deletions admin/tool/lp/lang/en/tool_lp.php
Expand Up @@ -213,6 +213,7 @@
$string['usercompetencystatus_idle'] = 'Idle';
$string['usercompetencystatus_inreview'] = 'In review';
$string['usercompetencystatus_waitingforreview'] = 'Waiting for review';
$string['userplans'] = 'User plans';
$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['when'] = 'When';
68 changes: 68 additions & 0 deletions admin/tool/lp/template_plans.php
@@ -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();
2 changes: 2 additions & 0 deletions admin/tool/lp/templates/manage_templates_page.mustache
Expand Up @@ -38,6 +38,7 @@
<tr>
<th scope="col">{{#str}}templatename, tool_lp{{/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>
</tr>
</thead>
Expand All @@ -46,6 +47,7 @@
<tr class="drag-samenode" data-templateid="{{id}}">
<td><a href="{{pluginbaseurl}}/templatecompetencies.php?templateid={{id}}&amp;pagecontextid={{pagecontextid}}">{{shortname}}</a></span> {{^visible}}{{#str}}hiddenhint, tool_lp{{/str}}{{/visible}}</td>
<td>{{contextname}}</td>
<td><a href="{{pluginbaseurl}}/template_plans.php?id={{id}}&amp;pagecontextid={{pagecontextid}}">{{planscount}}</a></td>
<td>
{{#canmanage}}
<ul class="templateactions">
Expand Down

0 comments on commit f0b2e58

Please sign in to comment.