Huge refactor
1) Every certificate is a template. Before a user would create a certificate then had the option to save it as a template. This could potentially be chaotic with numerous users creating templates, making the template system a mess. Now, rather than creating a certificate first, then saving it as a template, you are always creating a template. Each template is associated with a context, so depending on where you are creating it the context is different. This means users in the CONTEXT_MODULE context are creating a template specific to that module, where as a user creating a template in the CONTEXT_SYSTEM context would be creating a general template that can be used by others. This meant we can remove the 'customcert_template_*' db tables. Yay - no duplicated tables. 2) Created new helper classes and moved functionality there. 3) Moved files to classes/ for autoloading. 4) General tidy up.
This commit is contained in:
parent
54584a113c
commit
43d20c0d1b
59 changed files with 2028 additions and 1815 deletions
|
@ -111,7 +111,7 @@ class restore_customcert_activity_task extends restore_activity_task {
|
|||
// Go through the elements for the certificate.
|
||||
foreach ($elements as $e) {
|
||||
// Get an instance of the element class.
|
||||
if ($e = customcert_get_element_instance($e)) {
|
||||
if ($e = \mod_customcert\element::instance($e)) {
|
||||
$e->after_restore($this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
namespace mod_customcert;
|
||||
|
||||
/**
|
||||
* Creates an upload form on the settings page.
|
||||
*
|
||||
|
@ -22,12 +24,28 @@
|
|||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
require_once($CFG->dirroot.'/mod/customcert/upload_image_form.php');
|
||||
|
||||
/**
|
||||
* Class extends admin setting class to allow/process an uploaded file
|
||||
*/
|
||||
class mod_customcert_admin_setting_upload extends admin_setting_configtext {
|
||||
class admin_setting_link extends \admin_setting_configtext {
|
||||
|
||||
/**
|
||||
* @var string the link.
|
||||
*/
|
||||
protected $link;
|
||||
|
||||
/**
|
||||
* @var string the link name.
|
||||
*/
|
||||
protected $linkname;
|
||||
|
||||
public function __construct($name, $visiblename, $description, $linkname, $link, $defaultsetting,
|
||||
$paramtype = PARAM_RAW, $size=null) {
|
||||
$this->link = $link;
|
||||
$this->linkname = $linkname;
|
||||
parent::__construct($name, $visiblename, $description, $defaultsetting, $paramtype, $size);
|
||||
}
|
||||
|
||||
/**
|
||||
* Output the link to the upload image page.
|
||||
|
@ -41,7 +59,6 @@ class mod_customcert_admin_setting_upload extends admin_setting_configtext {
|
|||
$this->config_write($this->name, '');
|
||||
|
||||
return format_admin_setting($this, $this->visiblename,
|
||||
html_writer::link(new moodle_url('/mod/customcert/upload_image.php'), get_string('upload')),
|
||||
$this->description, true, '', null, $query);
|
||||
\html_writer::link($this->link, $this->linkname), $this->description, true, '', null, $query);
|
||||
}
|
||||
}
|
||||
}
|
440
classes/certificate.php
Normal file
440
classes/certificate.php
Normal file
|
@ -0,0 +1,440 @@
|
|||
<?php
|
||||
// This file is part of the customcert module for 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/>.
|
||||
|
||||
/**
|
||||
* Provides functionality needed by certificates.
|
||||
*
|
||||
* @package mod_customcert
|
||||
* @copyright 2016 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace mod_customcert;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Class element
|
||||
*
|
||||
* All customercert element plugins are based on this class.
|
||||
*/
|
||||
class certificate {
|
||||
|
||||
/**
|
||||
* @var string the print protection variable
|
||||
*/
|
||||
const PROTECTION_PRINT = 'print';
|
||||
|
||||
/**
|
||||
* @var string the modify protection variable
|
||||
*/
|
||||
const PROTECTION_MODIFY = 'modify';
|
||||
|
||||
/**
|
||||
* @var string the copy protection variable
|
||||
*/
|
||||
const PROTECTION_COPY = 'copy';
|
||||
|
||||
/**
|
||||
* @var int the number of issues that will be displayed on each page in the report
|
||||
* If you want to display all customcerts on a page set this to 0.
|
||||
*/
|
||||
const CUSTOMCERT_PER_PAGE = '20';
|
||||
|
||||
/**
|
||||
* @var int the max number of issues to display
|
||||
*/
|
||||
const CUSTOMCERT_MAX_PER_PAGE = '300';
|
||||
|
||||
/**
|
||||
* Handles setting the protection field for the customcert
|
||||
*
|
||||
* @param \stdClass $data
|
||||
* @return string the value to insert into the protection field
|
||||
*/
|
||||
public static function set_protection($data) {
|
||||
$protection = array();
|
||||
|
||||
if (!empty($data->protection_print)) {
|
||||
$protection[] = self::PROTECTION_PRINT;
|
||||
}
|
||||
if (!empty($data->protection_modify)) {
|
||||
$protection[] = self::PROTECTION_MODIFY;
|
||||
}
|
||||
if (!empty($data->protection_copy)) {
|
||||
$protection[] = self::PROTECTION_COPY;
|
||||
}
|
||||
|
||||
// Return the protection string.
|
||||
return implode(', ', $protection);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles uploading an image for the customcert module.
|
||||
*
|
||||
* @param int $draftitemid the draft area containing the files
|
||||
* @param int $contextid the context we are storing this image in
|
||||
*/
|
||||
public static function upload_imagefiles($draftitemid, $contextid) {
|
||||
// Save the file if it exists that is currently in the draft area.
|
||||
file_save_draft_area_files($draftitemid, $contextid, 'mod_customcert', 'image', 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of possible fonts to use.
|
||||
*/
|
||||
public static function get_fonts() {
|
||||
global $CFG;
|
||||
|
||||
// Array to store the available fonts.
|
||||
$options = array();
|
||||
|
||||
// Location of fonts in Moodle.
|
||||
$fontdir = "$CFG->dirroot/lib/tcpdf/fonts";
|
||||
// Check that the directory exists.
|
||||
if (file_exists($fontdir)) {
|
||||
// Get directory contents.
|
||||
$fonts = new \DirectoryIterator($fontdir);
|
||||
// Loop through the font folder.
|
||||
foreach ($fonts as $font) {
|
||||
// If it is not a file, or either '.' or '..', or
|
||||
// the extension is not php, or we can not open file,
|
||||
// skip it.
|
||||
if (!$font->isFile() || $font->isDot() || ($font->getExtension() != 'php')) {
|
||||
continue;
|
||||
}
|
||||
// Set the name of the font to null, the include next should then set this
|
||||
// value, if it is not set then the file does not include the necessary data.
|
||||
$name = null;
|
||||
// Some files include a display name, the include next should then set this
|
||||
// value if it is present, if not then $name is used to create the display name.
|
||||
$displayname = null;
|
||||
// Some of the TCPDF files include files that are not present, so we have to
|
||||
// suppress warnings, this is the TCPDF libraries fault, grrr.
|
||||
@include("$fontdir/$font");
|
||||
// If no $name variable in file, skip it.
|
||||
if (is_null($name)) {
|
||||
continue;
|
||||
}
|
||||
// Remove the extension of the ".php" file that contains the font information.
|
||||
$filename = basename($font, ".php");
|
||||
// Check if there is no display name to use.
|
||||
if (is_null($displayname)) {
|
||||
// Format the font name, so "FontName-Style" becomes "Font Name - Style".
|
||||
$displayname = preg_replace("/([a-z])([A-Z])/", "$1 $2", $name);
|
||||
$displayname = preg_replace("/([a-zA-Z])-([a-zA-Z])/", "$1 - $2", $displayname);
|
||||
}
|
||||
$options[$filename] = $displayname;
|
||||
}
|
||||
ksort($options);
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of possible font sizes to use.
|
||||
*/
|
||||
public static function get_font_sizes() {
|
||||
// Array to store the sizes.
|
||||
$sizes = array();
|
||||
|
||||
for ($i = 1; $i <= 60; $i++) {
|
||||
$sizes[$i] = $i;
|
||||
}
|
||||
|
||||
return $sizes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the time the user has spent in the course.
|
||||
*
|
||||
* @param int $courseid
|
||||
* @return int the total time spent in seconds
|
||||
*/
|
||||
public static function get_course_time($courseid) {
|
||||
global $CFG, $DB, $USER;
|
||||
|
||||
$logmanager = get_log_manager();
|
||||
$readers = $logmanager->get_readers();
|
||||
$enabledreaders = get_config('tool_log', 'enabled_stores');
|
||||
$enabledreaders = explode(',', $enabledreaders);
|
||||
|
||||
// Go through all the readers until we find one that we can use.
|
||||
foreach ($enabledreaders as $enabledreader) {
|
||||
$reader = $readers[$enabledreader];
|
||||
if ($reader instanceof \logstore_legacy\log\store) {
|
||||
$logtable = 'log';
|
||||
$coursefield = 'course';
|
||||
$timefield = 'time';
|
||||
break;
|
||||
} else if ($reader instanceof \core\log\sql_internal_reader) {
|
||||
$logtable = $reader->get_internal_log_table_name();
|
||||
$coursefield = 'courseid';
|
||||
$timefield = 'timecreated';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If we didn't find a reader then return 0.
|
||||
if (!isset($logtable)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$sql = "SELECT id, $timefield
|
||||
FROM {{$logtable}}
|
||||
WHERE userid = :userid
|
||||
AND $coursefield = :courseid
|
||||
ORDER BY $timefield ASC";
|
||||
$params = array('userid' => $USER->id, 'courseid' => $courseid);
|
||||
$totaltime = 0;
|
||||
if ($logs = $DB->get_recordset_sql($sql, $params)) {
|
||||
foreach ($logs as $log) {
|
||||
if (!isset($login)) {
|
||||
// For the first time $login is not set so the first log is also the first login
|
||||
$login = $log->$timefield;
|
||||
$lasthit = $log->$timefield;
|
||||
$totaltime = 0;
|
||||
}
|
||||
$delay = $log->$timefield - $lasthit;
|
||||
if ($delay > ($CFG->sessiontimeout * 60)) {
|
||||
// The difference between the last log and the current log is more than
|
||||
// the timeout Register session value so that we have found a session!
|
||||
$login = $log->$timefield;
|
||||
} else {
|
||||
$totaltime += $delay;
|
||||
}
|
||||
// Now the actual log became the previous log for the next cycle
|
||||
$lasthit = $log->$timefield;
|
||||
}
|
||||
|
||||
return $totaltime;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of issued customcerts.
|
||||
*
|
||||
* @param int $customcertid
|
||||
* @param bool $groupmode are we in group mode
|
||||
* @param \stdClass $cm the course module
|
||||
* @param int $page offset
|
||||
* @param int $perpage total per page
|
||||
* @return \stdClass the users
|
||||
*/
|
||||
public static function get_issues($customcertid, $groupmode, $cm, $page, $perpage) {
|
||||
global $DB;
|
||||
|
||||
// Get the conditional SQL.
|
||||
list($conditionssql, $conditionsparams) = self::get_conditional_issues_sql($cm, $groupmode);
|
||||
|
||||
// If it is empty then return an empty array.
|
||||
if (empty($conditionsparams)) {
|
||||
return array();
|
||||
}
|
||||
|
||||
// Add the conditional SQL and the customcertid to form all used parameters.
|
||||
$allparams = $conditionsparams + array('customcertid' => $customcertid);
|
||||
|
||||
// Return the issues.
|
||||
$sql = "SELECT u.*, ci.code, ci.timecreated
|
||||
FROM {user} u
|
||||
INNER JOIN {customcert_issues} ci
|
||||
ON u.id = ci.userid
|
||||
WHERE u.deleted = 0
|
||||
AND ci.customcertid = :customcertid
|
||||
$conditionssql
|
||||
ORDER BY " . $DB->sql_fullname();
|
||||
return $DB->get_records_sql($sql, $allparams, $page * $perpage, $perpage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total number of issues for a given customcert.
|
||||
*
|
||||
* @param int $customcertid
|
||||
* @param \stdClass $cm the course module
|
||||
* @param bool $groupmode the group mode
|
||||
* @return int the number of issues
|
||||
*/
|
||||
public static function get_number_of_issues($customcertid, $cm, $groupmode) {
|
||||
global $DB;
|
||||
|
||||
// Get the conditional SQL.
|
||||
list($conditionssql, $conditionsparams) = self::get_conditional_issues_sql($cm, $groupmode);
|
||||
|
||||
// If it is empty then return 0.
|
||||
if (empty($conditionsparams)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Add the conditional SQL and the customcertid to form all used parameters.
|
||||
$allparams = $conditionsparams + array('customcertid' => $customcertid);
|
||||
|
||||
// Return the number of issues.
|
||||
$sql = "SELECT COUNT(u.id) as count
|
||||
FROM {user} u
|
||||
INNER JOIN {customcert_issues} ci
|
||||
ON u.id = ci.userid
|
||||
WHERE u.deleted = 0
|
||||
AND ci.customcertid = :customcertid
|
||||
$conditionssql";
|
||||
return $DB->count_records_sql($sql, $allparams);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of the conditional variables to use in the get_issues SQL query.
|
||||
*
|
||||
* @param \stdClass $cm the course module
|
||||
* @param bool $groupmode are we in group mode ?
|
||||
* @return array the conditional variables
|
||||
*/
|
||||
public static function get_conditional_issues_sql($cm, $groupmode) {
|
||||
global $DB, $USER;
|
||||
|
||||
// Get all users that can manage this customcert to exclude them from the report.
|
||||
$context = \context_module::instance($cm->id);
|
||||
$conditionssql = '';
|
||||
$conditionsparams = array();
|
||||
|
||||
// Get all users that can manage this certificate to exclude them from the report.
|
||||
$certmanagers = array_keys(get_users_by_capability($context, 'mod/certificate:manage', 'u.id'));
|
||||
$certmanagers = array_merge($certmanagers, array_keys(get_admins()));
|
||||
list($sql, $params) = $DB->get_in_or_equal($certmanagers, SQL_PARAMS_NAMED, 'cert');
|
||||
$conditionssql .= "AND NOT u.id $sql \n";
|
||||
$conditionsparams += $params;
|
||||
|
||||
if ($groupmode) {
|
||||
$canaccessallgroups = has_capability('moodle/site:accessallgroups', $context);
|
||||
$currentgroup = groups_get_activity_group($cm);
|
||||
|
||||
// If we are viewing all participants and the user does not have access to all groups then return nothing.
|
||||
if (!$currentgroup && !$canaccessallgroups) {
|
||||
return array('', array());
|
||||
}
|
||||
|
||||
if ($currentgroup) {
|
||||
if (!$canaccessallgroups) {
|
||||
// Guest users do not belong to any groups.
|
||||
if (isguestuser()) {
|
||||
return array('', array());
|
||||
}
|
||||
|
||||
// Check that the user belongs to the group we are viewing.
|
||||
$usersgroups = groups_get_all_groups($cm->course, $USER->id, $cm->groupingid);
|
||||
if ($usersgroups) {
|
||||
if (!isset($usersgroups[$currentgroup])) {
|
||||
return array('', array());
|
||||
}
|
||||
} else { // They belong to no group, so return an empty array.
|
||||
return array('', array());
|
||||
}
|
||||
}
|
||||
|
||||
$groupusers = array_keys(groups_get_members($currentgroup, 'u.*'));
|
||||
if (empty($groupusers)) {
|
||||
return array('', array());
|
||||
}
|
||||
|
||||
list($sql, $params) = $DB->get_in_or_equal($groupusers, SQL_PARAMS_NAMED, 'grp');
|
||||
$conditionssql .= "AND u.id $sql ";
|
||||
$conditionsparams += $params;
|
||||
}
|
||||
}
|
||||
|
||||
return array($conditionssql, $conditionsparams);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a 10-digit code of random letters and numbers.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function generate_code() {
|
||||
global $DB;
|
||||
|
||||
$uniquecodefound = false;
|
||||
$code = random_string(10);
|
||||
while (!$uniquecodefound) {
|
||||
if (!$DB->record_exists('customcert_issues', array('code' => $code))) {
|
||||
$uniquecodefound = true;
|
||||
} else {
|
||||
$code = random_string(10);
|
||||
}
|
||||
}
|
||||
|
||||
return $code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the report.
|
||||
*
|
||||
* @param \stdClass $customcert
|
||||
* @param \stdClass $users the list of users who have had a customcert issued
|
||||
* @param string $type
|
||||
*/
|
||||
public static function generate_report_file($customcert, $users, $type) {
|
||||
global $CFG, $COURSE;
|
||||
|
||||
if ($type == 'ods') {
|
||||
require_once($CFG->libdir . '/odslib.class.php');
|
||||
$workbook = new \MoodleODSWorkbook('-');
|
||||
} else if ($type == 'xls') {
|
||||
require_once($CFG->libdir . '/excellib.class.php');
|
||||
$workbook = new \MoodleExcelWorkbook('-');
|
||||
}
|
||||
|
||||
$filename = clean_filename($COURSE->shortname . ' ' . rtrim($customcert->name, '.') . '.' . $type);
|
||||
|
||||
// Send HTTP headers.
|
||||
$workbook->send($filename);
|
||||
|
||||
// Creating the first worksheet.
|
||||
$myxls = $workbook->add_worksheet(get_string('report', 'customcert'));
|
||||
|
||||
// Print names of all the fields.
|
||||
$myxls->write_string(0, 0, get_string('lastname'));
|
||||
$myxls->write_string(0, 1, get_string('firstname'));
|
||||
$myxls->write_string(0, 2, get_string('idnumber'));
|
||||
$myxls->write_string(0, 3, get_string('group'));
|
||||
$myxls->write_string(0, 4, get_string('receiveddate', 'customcert'));
|
||||
$myxls->write_string(0, 5, get_string('code', 'customcert'));
|
||||
|
||||
// Generate the data for the body of the spreadsheet.
|
||||
$row = 1;
|
||||
if ($users) {
|
||||
foreach ($users as $user) {
|
||||
$myxls->write_string($row, 0, $user->lastname);
|
||||
$myxls->write_string($row, 1, $user->firstname);
|
||||
$studentid = (!empty($user->idnumber)) ? $user->idnumber : ' ';
|
||||
$myxls->write_string($row, 2, $studentid);
|
||||
$ug2 = '';
|
||||
if ($usergrps = groups_get_all_groups($COURSE->id, $user->id)) {
|
||||
foreach ($usergrps as $ug) {
|
||||
$ug2 = $ug2 . $ug->name;
|
||||
}
|
||||
}
|
||||
$myxls->write_string($row, 3, $ug2);
|
||||
$myxls->write_string($row, 4, userdate($user->timecreated));
|
||||
$myxls->write_string($row, 5, $user->code);
|
||||
$row++;
|
||||
}
|
||||
}
|
||||
// Close the workbook.
|
||||
$workbook->close();
|
||||
}
|
||||
}
|
|
@ -14,13 +14,14 @@
|
|||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
namespace mod_customcert;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
require_once($CFG->dirroot . '/course/moodleform_mod.php');
|
||||
require_once($CFG->dirroot.'/mod/customcert/locallib.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/includes/colourpicker.php');
|
||||
|
||||
MoodleQuickForm::registerElementType('customcert_colourpicker',
|
||||
\MoodleQuickForm::registerElementType('customcert_colourpicker',
|
||||
$CFG->dirroot . '/mod/customcert/includes/colourpicker.php', 'MoodleQuickForm_customcert_colourpicker');
|
||||
|
||||
/**
|
||||
|
@ -30,12 +31,12 @@ MoodleQuickForm::registerElementType('customcert_colourpicker',
|
|||
* @copyright 2013 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class mod_customcert_edit_element_form extends moodleform {
|
||||
class edit_element_form extends \moodleform {
|
||||
|
||||
/**
|
||||
* The element object.
|
||||
* @var \mod_customcert\element The element object.
|
||||
*/
|
||||
private $element;
|
||||
protected $element;
|
||||
|
||||
/**
|
||||
* Form definition.
|
||||
|
@ -52,7 +53,7 @@ class mod_customcert_edit_element_form extends moodleform {
|
|||
$mform->addRule('name', get_string('required'), 'required', null, 'client');
|
||||
$mform->addHelpButton('name', 'elementname', 'customcert');
|
||||
|
||||
$this->element = customcert_get_element_instance($element);
|
||||
$this->element = \mod_customcert\element::instance($element);
|
||||
$this->element->render_form_elements($mform);
|
||||
|
||||
$this->add_action_buttons(true);
|
|
@ -14,12 +14,14 @@
|
|||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
namespace mod_customcert;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
require_once($CFG->dirroot . '/course/moodleform_mod.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/includes/colourpicker.php');
|
||||
|
||||
MoodleQuickForm::registerElementType('customcert_colourpicker',
|
||||
\MoodleQuickForm::registerElementType('customcert_colourpicker',
|
||||
$CFG->dirroot . '/mod/customcert/includes/colourpicker.php', 'MoodleQuickForm_customcert_colourpicker');
|
||||
|
||||
/**
|
||||
|
@ -29,17 +31,17 @@ MoodleQuickForm::registerElementType('customcert_colourpicker',
|
|||
* @copyright 2013 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class mod_customcert_edit_form extends moodleform {
|
||||
class edit_form extends \moodleform {
|
||||
|
||||
/**
|
||||
* The instance id.
|
||||
* The id of the template being used.
|
||||
*/
|
||||
private $id = null;
|
||||
protected $tid = null;
|
||||
|
||||
/**
|
||||
* The total number of pages for this cert.
|
||||
*/
|
||||
private $numpages = 1;
|
||||
protected $numpages = 1;
|
||||
|
||||
/**
|
||||
* Form definition.
|
||||
|
@ -47,16 +49,27 @@ class mod_customcert_edit_form extends moodleform {
|
|||
public function definition() {
|
||||
global $DB;
|
||||
|
||||
$this->id = $this->_customdata['customcertid'];
|
||||
|
||||
$mform =& $this->_form;
|
||||
|
||||
$mform->addElement('text', 'name', get_string('name', 'customcert'));
|
||||
$mform->setType('name', PARAM_TEXT);
|
||||
$mform->addRule('name', null, 'required');
|
||||
|
||||
// Get the number of pages for this module.
|
||||
if ($pages = $DB->get_records('customcert_pages', array('customcertid' => $this->id), 'pagenumber')) {
|
||||
$this->numpages = count($pages);
|
||||
foreach ($pages as $p) {
|
||||
$this->add_customcert_page_elements($p);
|
||||
if (isset($this->_customdata['tid'])) {
|
||||
$this->tid = $this->_customdata['tid'];
|
||||
if ($pages = $DB->get_records('customcert_pages', array('templateid' => $this->tid), 'pagenumber')) {
|
||||
$this->numpages = count($pages);
|
||||
foreach ($pages as $p) {
|
||||
$this->add_customcert_page_elements($p);
|
||||
}
|
||||
}
|
||||
} else { // Add a new template.
|
||||
// Create a 'fake' page to display the elements on - not yet saved in the DB.
|
||||
$page = new \stdClass();
|
||||
$page->id = 1;
|
||||
$page->pagenumber = 1;
|
||||
$this->add_customcert_page_elements($page);
|
||||
}
|
||||
|
||||
$mform->closeHeaderBefore('addcertpage');
|
||||
|
@ -71,12 +84,9 @@ class mod_customcert_edit_form extends moodleform {
|
|||
$group[] = $mform->createElement('submit', 'previewbtn', get_string('savechangespreview', 'customcert'));
|
||||
$mform->addElement('group', 'submitbtngroup', '', $group, '', false);
|
||||
|
||||
$mform->addElement('hidden', 'id');
|
||||
$mform->setType('id', PARAM_INT);
|
||||
$mform->setDefault('id', $this->id);
|
||||
$mform->addElement('hidden', 'cmid');
|
||||
$mform->setType('cmid', PARAM_INT);
|
||||
$mform->setDefault('cmid', $this->_customdata['cmid']);
|
||||
$mform->addElement('hidden', 'tid');
|
||||
$mform->setType('tid', PARAM_INT);
|
||||
$mform->setDefault('tid', $this->tid);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -88,9 +98,9 @@ class mod_customcert_edit_form extends moodleform {
|
|||
$mform = $this->_form;
|
||||
|
||||
// Check that we are updating a current customcert.
|
||||
if ($this->id) {
|
||||
if ($this->tid) {
|
||||
// Get the pages for this customcert.
|
||||
if ($pages = $DB->get_records('customcert_pages', array('customcertid' => $this->id))) {
|
||||
if ($pages = $DB->get_records('customcert_pages', array('templateid' => $this->tid))) {
|
||||
// Loop through the pages.
|
||||
foreach ($pages as $p) {
|
||||
// Set the width.
|
||||
|
@ -118,8 +128,17 @@ class mod_customcert_edit_form extends moodleform {
|
|||
* @return array the errors that were found
|
||||
*/
|
||||
public function validation($data, $files) {
|
||||
global $DB;
|
||||
|
||||
$errors = parent::validation($data, $files);
|
||||
|
||||
// Check that the template name does not already exist for another template.
|
||||
if ($template = $DB->get_record('customcert_templates', array('name' => $data['name']))) {
|
||||
if (empty($data['tid']) || $template->id != $data['tid']) {
|
||||
$errors['name'] = get_string('customcertnameexists', 'customcert');
|
||||
}
|
||||
}
|
||||
|
||||
// Go through the data and check any width, height or margin values.
|
||||
foreach ($data as $key => $value) {
|
||||
if (strpos($key, 'pagewidth_') !== false) {
|
||||
|
@ -158,26 +177,33 @@ class mod_customcert_edit_form extends moodleform {
|
|||
/**
|
||||
* Adds the page elements to the form.
|
||||
*
|
||||
* @param stdClass $page the customcert page
|
||||
* @param \stdClass $page the customcert page
|
||||
*/
|
||||
private function add_customcert_page_elements($page) {
|
||||
protected function add_customcert_page_elements($page) {
|
||||
global $DB, $OUTPUT;
|
||||
|
||||
// Create the form object.
|
||||
$mform =& $this->_form;
|
||||
|
||||
$mform->addElement('header', 'page_' . $page->id, get_string('page', 'customcert', $page->pagenumber));
|
||||
if ($this->numpages > 1) {
|
||||
$mform->addElement('header', 'page_' . $page->id, get_string('page', 'customcert', $page->pagenumber));
|
||||
}
|
||||
|
||||
$editlink = '/mod/customcert/edit.php';
|
||||
$editlinkparams = array('tid' => $this->tid);
|
||||
$editelementlink = '/mod/customcert/edit_element.php';
|
||||
$editelementlinkparams = array('tid' => $this->tid);
|
||||
|
||||
// Place the ordering arrows.
|
||||
// Only display the move up arrow if it is not the first.
|
||||
if ($page->pagenumber > 1) {
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $this->_customdata['cmid'], 'moveup' => $page->id));
|
||||
$mform->addElement('html', $OUTPUT->action_icon($url, new pix_icon('t/up', get_string('moveup'))));
|
||||
$url = new \moodle_url($editlink, $editlinkparams + array('moveup' => $page->id));
|
||||
$mform->addElement('html', $OUTPUT->action_icon($url, new \pix_icon('t/up', get_string('moveup'))));
|
||||
}
|
||||
// Only display the move down arrow if it is not the last.
|
||||
if ($page->pagenumber < $this->numpages) {
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $this->_customdata['cmid'], 'movedown' => $page->id));
|
||||
$mform->addElement('html', $OUTPUT->action_icon($url, new pix_icon('t/down', get_string('movedown'))));
|
||||
$url = new \moodle_url($editlink, $editlinkparams + array('movedown' => $page->id));
|
||||
$mform->addElement('html', $OUTPUT->action_icon($url, new \pix_icon('t/down', get_string('movedown'))));
|
||||
}
|
||||
|
||||
$mform->addElement('text', 'pagewidth_' . $page->id, get_string('width', 'customcert'));
|
||||
|
@ -194,14 +220,16 @@ class mod_customcert_edit_form extends moodleform {
|
|||
|
||||
$mform->addElement('text', 'pageleftmargin_' . $page->id, get_string('leftmargin', 'customcert'));
|
||||
$mform->setType('pageleftmargin_' . $page->id, PARAM_INT);
|
||||
$mform->setDefault('pageleftmargin_' . $page->id, 0);
|
||||
$mform->addHelpButton('pageleftmargin_' . $page->id, 'leftmargin', 'customcert');
|
||||
|
||||
$mform->addElement('text', 'pagerightmargin_' . $page->id, get_string('rightmargin', 'customcert'));
|
||||
$mform->setType('pagerightmargin_' . $page->id, PARAM_INT);
|
||||
$mform->setDefault('pagerightmargin_' . $page->id, 0);
|
||||
$mform->addHelpButton('pagerightmargin_' . $page->id, 'rightmargin', 'customcert');
|
||||
|
||||
$group = array();
|
||||
$group[] = $mform->createElement('select', 'element_' . $page->id, '', customcert_get_elements());
|
||||
$group[] = $mform->createElement('select', 'element_' . $page->id, '', element::get_available_types());
|
||||
$group[] = $mform->createElement('submit', 'addelement_' . $page->id, get_string('addelement', 'customcert'));
|
||||
$mform->addElement('group', 'elementgroup', '', $group, '', false);
|
||||
|
||||
|
@ -210,7 +238,7 @@ class mod_customcert_edit_form extends moodleform {
|
|||
// Get the total number of elements.
|
||||
$numelements = count($elements);
|
||||
// Create a table to display these elements.
|
||||
$table = new html_table();
|
||||
$table = new \html_table();
|
||||
$table->head = array(get_string('name', 'customcert'), get_string('type', 'customcert'), '');
|
||||
$table->align = array('left', 'left', 'center');
|
||||
// If we have more than one element then we can change the order, so add extra column for the up and down arrow.
|
||||
|
@ -220,29 +248,29 @@ class mod_customcert_edit_form extends moodleform {
|
|||
}
|
||||
// Loop through and add the elements to the table.
|
||||
foreach ($elements as $element) {
|
||||
$row = new html_table_row();
|
||||
$row = new \html_table_row();
|
||||
$row->cells[] = $element->name;
|
||||
$row->cells[] = $element->element;
|
||||
// Link to edit this element.
|
||||
$editlink = new moodle_url('/mod/customcert/edit_element.php', array('id' => $element->id,
|
||||
'cmid' => $this->_customdata['cmid'],
|
||||
$link = new \moodle_url($editelementlink, $editelementlinkparams + array('id' => $element->id,
|
||||
'action' => 'edit'));
|
||||
$icons = $OUTPUT->action_icon($editlink, new pix_icon('t/edit', get_string('edit')));
|
||||
$icons = $OUTPUT->action_icon($link, new \pix_icon('t/edit', get_string('edit')));
|
||||
// Link to delete the element.
|
||||
$deletelink = new moodle_url('/mod/customcert/edit.php', array('cmid' => $this->_customdata['cmid'], 'deleteelement' => $element->id));
|
||||
$icons .= $OUTPUT->action_icon($deletelink, new pix_icon('t/delete', get_string('delete', 'customcert')));
|
||||
$link = new \moodle_url($editlink, $editlinkparams + array('id' => $element->id,
|
||||
'deleteelement' => $element->id));
|
||||
$icons .= $OUTPUT->action_icon($link, new \pix_icon('t/delete', get_string('delete')));
|
||||
// Now display any moving arrows if they are needed.
|
||||
if ($numelements > 1) {
|
||||
// Only display the move up arrow if it is not the first.
|
||||
$moveicons = '';
|
||||
if ($element->sequence > 1) {
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $this->_customdata['cmid'], 'emoveup' => $element->id));
|
||||
$moveicons .= $OUTPUT->action_icon($url, new pix_icon('t/up', get_string('moveup')));
|
||||
$url = new \moodle_url($editlink, $editlinkparams + array('emoveup' => $element->id));
|
||||
$moveicons .= $OUTPUT->action_icon($url, new \pix_icon('t/up', get_string('moveup')));
|
||||
}
|
||||
// Only display the move down arrow if it is not the last.
|
||||
if ($element->sequence < $numelements) {
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $this->_customdata['cmid'], 'emovedown' => $element->id));
|
||||
$moveicons .= $OUTPUT->action_icon($url, new pix_icon('t/down', get_string('movedown')));
|
||||
$url = new \moodle_url($editlink, $editlinkparams + array('emovedown' => $element->id));
|
||||
$moveicons .= $OUTPUT->action_icon($url, new \pix_icon('t/down', get_string('movedown')));
|
||||
}
|
||||
$icons .= $moveicons;
|
||||
}
|
||||
|
@ -250,20 +278,20 @@ class mod_customcert_edit_form extends moodleform {
|
|||
$table->data[] = $row;
|
||||
}
|
||||
// Create link to order the elements.
|
||||
$link = html_writer::link(new moodle_url('/mod/customcert/rearrange.php', array('id' => $page->id)),
|
||||
get_string('rearrangeelements', 'customcert'));
|
||||
$link = \html_writer::link(new \moodle_url('/mod/customcert/rearrange.php', array('pid' => $page->id)),
|
||||
get_string('rearrangeelements', 'customcert'));
|
||||
// Add the table to the form.
|
||||
$mform->addElement('static', 'elements_' . $page->id, get_string('elements', 'customcert'), html_writer::table($table)
|
||||
. html_writer::tag( 'div', $link, array('style' => 'text-align:right')));
|
||||
$mform->addElement('static', 'elements_' . $page->id, get_string('elements', 'customcert'), \html_writer::table($table)
|
||||
. \html_writer::tag( 'div', $link, array('style' => 'text-align:right')));
|
||||
$mform->addHelpButton('elements_' . $page->id, 'elements', 'customcert');
|
||||
}
|
||||
|
||||
// Add option to delete this page if there is more than one page.
|
||||
if ($this->numpages > 1) {
|
||||
// Link to delete the element.
|
||||
$deletelink = new moodle_url('/mod/customcert/edit.php', array('cmid' => $this->_customdata['cmid'], 'deletepage' => $page->id));
|
||||
$deletelink = html_writer::tag('a', get_string('deletecertpage', 'customcert'), array('href' => $deletelink->out(false), 'class' => 'deletebutton'));
|
||||
$mform->addElement('html', html_writer::tag('div', $deletelink, array('class' => 'deletebutton')));
|
||||
$deletelink = new \moodle_url($editlink, $editlinkparams + array('deletepage' => $page->id));
|
||||
$deletelink = \html_writer::tag('a', get_string('deletecertpage', 'customcert'), array('href' => $deletelink->out(false), 'class' => 'deletebutton'));
|
||||
$mform->addElement('html', \html_writer::tag('div', $deletelink, array('class' => 'deletebutton')));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -34,7 +34,7 @@ defined('MOODLE_INTERNAL') || die();
|
|||
abstract class element {
|
||||
|
||||
/**
|
||||
* The data for the element we are adding.
|
||||
* @var \stdClass $element The data for the element we are adding.
|
||||
*/
|
||||
public $element;
|
||||
|
||||
|
@ -51,20 +51,20 @@ abstract class element {
|
|||
* This function renders the form elements when adding a customcert element.
|
||||
* Can be overridden if more functionality is needed.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance.
|
||||
* @param edit_element_form $mform the edit_form instance.
|
||||
*/
|
||||
public function render_form_elements($mform) {
|
||||
// Render the common elements.
|
||||
$this->render_form_element_font($mform);
|
||||
$this->render_form_element_colour($mform);
|
||||
$this->render_form_element_position($mform);
|
||||
element_helper::render_form_element_font($mform);
|
||||
element_helper::render_form_element_colour($mform);
|
||||
element_helper::render_form_element_position($mform);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the data on the form when editing an element.
|
||||
* Can be overridden if more functionality is needed.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function definition_after_data($mform) {
|
||||
// Loop through the properties of the element and set the values
|
||||
|
@ -90,8 +90,8 @@ abstract class element {
|
|||
$errors = array();
|
||||
|
||||
// Common validation methods.
|
||||
$errors += $this->validate_form_element_colour($data);
|
||||
$errors += $this->validate_form_element_position($data);
|
||||
$errors += element_helper::validate_form_element_colour($data);
|
||||
$errors += element_helper::validate_form_element_position($data);
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ abstract class element {
|
|||
} else { // Must be adding a new one.
|
||||
$element->element = $data->element;
|
||||
$element->pageid = $data->pageid;
|
||||
$element->sequence = $this->get_element_sequence($element->pageid);
|
||||
$element->sequence = \mod_customcert\element_helper::get_element_sequence($element->pageid);
|
||||
$element->timecreated = time();
|
||||
$DB->insert_record('customcert_elements', $element);
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ abstract class element {
|
|||
|
||||
/**
|
||||
* This will handle how form data will be saved into the data column in the
|
||||
* customcert column.
|
||||
* customcert_elements table.
|
||||
* Can be overridden if more functionality is needed.
|
||||
*
|
||||
* @param \stdClass $data the form data
|
||||
|
@ -144,31 +144,19 @@ abstract class element {
|
|||
}
|
||||
|
||||
/**
|
||||
* This will handle how individual elements save their data
|
||||
* to a template to be loaded later.
|
||||
* This handles copying data from another element of the same type.
|
||||
* Can be overridden if more functionality is needed.
|
||||
*
|
||||
* @param \stdClass $data the form data
|
||||
* @return bool returns true if the data was saved to the template, false otherwise
|
||||
* @return bool returns true if the data was copied successfully, false otherwise
|
||||
*/
|
||||
public function save_data_to_template($data) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* This will handle how individual elements load their data
|
||||
* from a template to an existing customcert.
|
||||
* Can be overridden if more functionality is needed.
|
||||
*
|
||||
* @param \stdClass $data the form data
|
||||
* @return bool returns true if the data was loaded from the template, false otherwise
|
||||
*/
|
||||
public function load_data_from_template($data) {
|
||||
public function copy_element($data) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles rendering the element on the pdf.
|
||||
*
|
||||
* Must be overridden.
|
||||
*
|
||||
* @param \pdf $pdf the pdf object
|
||||
|
@ -176,56 +164,6 @@ abstract class element {
|
|||
*/
|
||||
public abstract function render($pdf, $preview);
|
||||
|
||||
/**
|
||||
* Common behaviour for rendering specified content on the pdf.
|
||||
*
|
||||
* @param \pdf $pdf the pdf object
|
||||
* @param string $content the content to render
|
||||
*/
|
||||
public function render_content($pdf, $content) {
|
||||
list($font, $attr) = $this->get_font();
|
||||
$pdf->setFont($font, $attr, $this->element->size);
|
||||
$fontcolour = \TCPDF_COLORS::convertHTMLColorToDec($this->element->colour, $fontcolour);
|
||||
$pdf->SetTextColor($fontcolour['R'], $fontcolour['G'], $fontcolour['B']);
|
||||
|
||||
$x = $this->element->posx;
|
||||
$y = $this->element->posy;
|
||||
$w = $this->element->width;
|
||||
$refpoint = $this->element->refpoint;
|
||||
$actualwidth = $pdf->GetStringWidth($content);
|
||||
|
||||
if ($w and $w < $actualwidth) {
|
||||
$actualwidth = $w;
|
||||
}
|
||||
|
||||
switch ($refpoint) {
|
||||
case CUSTOMCERT_REF_POINT_TOPRIGHT:
|
||||
$x = $this->element->posx - $actualwidth;
|
||||
if ($x < 0) {
|
||||
$x = 0;
|
||||
$w = $this->element->posx;
|
||||
} else {
|
||||
$w = $actualwidth;
|
||||
}
|
||||
break;
|
||||
case CUSTOMCERT_REF_POINT_TOPCENTER:
|
||||
$x = $this->element->posx - $actualwidth / 2;
|
||||
if ($x < 0) {
|
||||
$x = 0;
|
||||
$w = $this->element->posx * 2;
|
||||
} else {
|
||||
$w = $actualwidth;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ($w) {
|
||||
$w += 0.0001;
|
||||
}
|
||||
$pdf->setCellPaddings(0, 0, 0, 0);
|
||||
$pdf->writeHTMLCell($w, 0, $x, $y, $content, 0, 0, false, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the element in html.
|
||||
*
|
||||
|
@ -233,27 +171,11 @@ abstract class element {
|
|||
*
|
||||
* This function is used to render the element when we are using the
|
||||
* drag and drop interface to position it.
|
||||
*
|
||||
* @return string the html
|
||||
*/
|
||||
public abstract function render_html();
|
||||
|
||||
/**
|
||||
* Common behaviour for rendering specified content on the drag and drop page.
|
||||
*
|
||||
* @param string $content the content to render
|
||||
* @return string the html
|
||||
*/
|
||||
public function render_html_content($content) {
|
||||
list($font, $attr) = $this->get_font();
|
||||
$fontstyle = 'font-family: ' . $font;
|
||||
if (strpos($attr, 'B') !== false) {
|
||||
$fontstyle .= ': font-weight: bold';
|
||||
}
|
||||
if (strpos($attr, 'I') !== false) {
|
||||
$fontstyle .= ': font-style: italic';
|
||||
}
|
||||
$style = $fontstyle . '; color: ' . $this->element->colour . '; font-size: ' . $this->element->size . 'pt';
|
||||
return \html_writer::tag('span', $content, array('style' => $style));
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles deleting any data this element may have introduced.
|
||||
|
@ -261,174 +183,12 @@ abstract class element {
|
|||
*
|
||||
* @return bool success return true if deletion success, false otherwise
|
||||
*/
|
||||
public function delete_element() {
|
||||
public function delete() {
|
||||
global $DB;
|
||||
|
||||
return $DB->delete_records('customcert_elements', array('id' => $this->element->id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function that returns the sequence on a specified customcert page for a
|
||||
* newly created element.
|
||||
*
|
||||
* @param int $pageid the id of the page we are adding this element to
|
||||
* @return int the element number
|
||||
*/
|
||||
public static function get_element_sequence($pageid) {
|
||||
global $DB;
|
||||
|
||||
// Set the sequence of the element we are creating.
|
||||
$sequence = 1;
|
||||
// Check if there already elements that exist, if so, overwrite value.
|
||||
$sql = "SELECT MAX(sequence) as maxsequence
|
||||
FROM {customcert_elements}
|
||||
WHERE pageid = :id";
|
||||
// Get the current max sequence on this page and add 1 to get the new sequence.
|
||||
if ($maxseq = $DB->get_record_sql($sql, array('id' => $pageid))) {
|
||||
$sequence = $maxseq->maxsequence + 1;
|
||||
}
|
||||
|
||||
return $sequence;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to render the font elements.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance.
|
||||
*/
|
||||
public function render_form_element_font($mform) {
|
||||
$mform->addElement('select', 'font', get_string('font', 'customcert'), customcert_get_fonts());
|
||||
$mform->setType('font', PARAM_TEXT);
|
||||
$mform->setDefault('font', 'times');
|
||||
$mform->addHelpButton('font', 'font', 'customcert');
|
||||
|
||||
$mform->addElement('select', 'size', get_string('fontsize', 'customcert'), customcert_get_font_sizes());
|
||||
$mform->setType('size', PARAM_INT);
|
||||
$mform->setDefault('size', 12);
|
||||
$mform->addHelpButton('size', 'fontsize', 'customcert');
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to render the colour elements.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance.
|
||||
*/
|
||||
public function render_form_element_colour($mform) {
|
||||
$mform->addElement('customcert_colourpicker', 'colour', get_string('fontcolour', 'customcert'));
|
||||
$mform->setType('colour', PARAM_RAW); // Need to validate that this is a valid colour.
|
||||
$mform->setDefault('colour', '#000000');
|
||||
$mform->addHelpButton('colour', 'fontcolour', 'customcert');
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to render the position elements.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance.
|
||||
*/
|
||||
public function render_form_element_position($mform) {
|
||||
$mform->addElement('text', 'posx', get_string('posx', 'customcert'), array('size' => 10));
|
||||
$mform->setType('posx', PARAM_INT);
|
||||
$mform->setDefault('posx', 0);
|
||||
$mform->addHelpButton('posx', 'posx', 'customcert');
|
||||
|
||||
$mform->addElement('text', 'posy', get_string('posy', 'customcert'), array('size' => 10));
|
||||
$mform->setType('posy', PARAM_INT);
|
||||
$mform->setDefault('posy', 0);
|
||||
$mform->addHelpButton('posy', 'posy', 'customcert');
|
||||
|
||||
$mform->addElement('text', 'width', get_string('elementwidth', 'customcert'), array('size' => 10));
|
||||
$mform->setType('width', PARAM_INT);
|
||||
$mform->setDefault('width', 0);
|
||||
$mform->addHelpButton('width', 'elementwidth', 'customcert');
|
||||
|
||||
$refpointoptions = array();
|
||||
$refpointoptions[CUSTOMCERT_REF_POINT_TOPLEFT] = get_string('topleft', 'customcert');
|
||||
$refpointoptions[CUSTOMCERT_REF_POINT_TOPCENTER] = get_string('topcenter', 'customcert');
|
||||
$refpointoptions[CUSTOMCERT_REF_POINT_TOPRIGHT] = get_string('topright', 'customcert');
|
||||
|
||||
$mform->addElement('select', 'refpoint', get_string('refpoint', 'customcert'), $refpointoptions);
|
||||
$mform->setType('refpoint', PARAM_INT);
|
||||
$mform->setDefault('refpoint', CUSTOMCERT_REF_POINT_TOPCENTER);
|
||||
$mform->addHelpButton('refpoint', 'refpoint', 'customcert');
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to performs validation on the colour element.
|
||||
*
|
||||
* @param array $data the submitted data
|
||||
* @return array the validation errors
|
||||
*/
|
||||
public function validate_form_element_colour($data) {
|
||||
$errors = array();
|
||||
|
||||
// Validate the colour.
|
||||
if (!$this->validate_colour($data['colour'])) {
|
||||
$errors['colour'] = get_string('invalidcolour', 'customcert');
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to performs validation on the position elements.
|
||||
*
|
||||
* @param array $data the submitted data
|
||||
* @return array the validation errors
|
||||
*/
|
||||
public function validate_form_element_position($data) {
|
||||
$errors = array();
|
||||
|
||||
// Check if posx is not set, or not numeric or less than 0.
|
||||
if ((!isset($data['posx'])) || (!is_numeric($data['posx'])) || ($data['posx'] < 0)) {
|
||||
$errors['posx'] = get_string('invalidposition', 'customcert', 'X');
|
||||
}
|
||||
|
||||
// Check if posy is not set, or not numeric or less than 0.
|
||||
if ((!isset($data['posy'])) || (!is_numeric($data['posy'])) || ($data['posy'] < 0)) {
|
||||
$errors['posy'] = get_string('invalidposition', 'customcert', 'Y');
|
||||
}
|
||||
|
||||
// Check if width is less than 0.
|
||||
if (isset($data['width']) && $data['width'] < 0) {
|
||||
$errors['width'] = get_string('invalidelementwidth', 'customcert');
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the font used for this element.
|
||||
*
|
||||
* @return array the font and font attributes
|
||||
*/
|
||||
public function get_font() {
|
||||
// Variable for the font.
|
||||
$font = $this->element->font;
|
||||
// Get the last two characters of the font name.
|
||||
$fontlength = strlen($font);
|
||||
$lastchar = $font[$fontlength - 1];
|
||||
$secondlastchar = $font[$fontlength - 2];
|
||||
// The attributes of the font.
|
||||
$attr = '';
|
||||
// Check if the last character is 'i'.
|
||||
if ($lastchar == 'i') {
|
||||
// Remove the 'i' from the font name.
|
||||
$font = substr($font, 0, -1);
|
||||
// Check if the second last char is b.
|
||||
if ($secondlastchar == 'b') {
|
||||
// Remove the 'b' from the font name.
|
||||
$font = substr($font, 0, -1);
|
||||
$attr .= 'B';
|
||||
}
|
||||
$attr .= 'I';
|
||||
} else if ($lastchar == 'b') {
|
||||
// Remove the 'b' from the font name.
|
||||
$font = substr($font, 0, -1);
|
||||
$attr .= 'B';
|
||||
}
|
||||
return array($font, $attr);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is responsible for handling the restoration process of the element.
|
||||
*
|
||||
|
@ -438,58 +198,74 @@ abstract class element {
|
|||
*
|
||||
* @param \restore_customcert_activity_task $restore
|
||||
*/
|
||||
public function after_restore($restore) {
|
||||
public function after_restore($restore) { }
|
||||
|
||||
/**
|
||||
* Magic getter for read only access.
|
||||
*
|
||||
* @param string $name
|
||||
*/
|
||||
public function __get($name) {
|
||||
if (property_exists($this->element, $name)) {
|
||||
return $this->element->$name;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the colour selected.
|
||||
* Returns an instance of the element class.
|
||||
*
|
||||
* @param string $colour
|
||||
* @return bool returns true if the colour is valid, false otherwise
|
||||
* @param \stdClass $element the element
|
||||
* @return \mod_customcert\element|bool returns the instance of the element class, or false if element
|
||||
* class does not exists.
|
||||
*/
|
||||
protected function validate_colour($colour) {
|
||||
// List of valid HTML colour names.
|
||||
$colournames = array(
|
||||
'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure',
|
||||
'beige', 'bisque', 'black', 'blanchedalmond', 'blue',
|
||||
'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse',
|
||||
'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson',
|
||||
'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray',
|
||||
'darkgrey', 'darkgreen', 'darkkhaki', 'darkmagenta',
|
||||
'darkolivegreen', 'darkorange', 'darkorchid', 'darkred',
|
||||
'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray',
|
||||
'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink',
|
||||
'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick',
|
||||
'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro',
|
||||
'ghostwhite', 'gold', 'goldenrod', 'gray', 'grey', 'green',
|
||||
'greenyellow', 'honeydew', 'hotpink', 'indianred', 'indigo',
|
||||
'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen',
|
||||
'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan',
|
||||
'lightgoldenrodyellow', 'lightgray', 'lightgrey', 'lightgreen',
|
||||
'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue',
|
||||
'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow',
|
||||
'lime', 'limegreen', 'linen', 'magenta', 'maroon',
|
||||
'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple',
|
||||
'mediumseagreen', 'mediumslateblue', 'mediumspringgreen',
|
||||
'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream',
|
||||
'mistyrose', 'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive',
|
||||
'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod',
|
||||
'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip',
|
||||
'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', 'red',
|
||||
'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown',
|
||||
'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue',
|
||||
'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan',
|
||||
'teal', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'white',
|
||||
'whitesmoke', 'yellow', 'yellowgreen'
|
||||
);
|
||||
public static function instance($element) {
|
||||
// Get the class name.
|
||||
$classname = '\\customcertelement_' . $element->element . '\\element';
|
||||
|
||||
if (preg_match('/^#?([[:xdigit:]]{3}){1,2}$/', $colour)) {
|
||||
return true;
|
||||
} else if (in_array(strtolower($colour), $colournames)) {
|
||||
return true;
|
||||
// Ensure the necessary class exists.
|
||||
if (class_exists($classname)) {
|
||||
return new $classname($element);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of possible elements to add.
|
||||
*
|
||||
* @return array the list of element types that can be used.
|
||||
*/
|
||||
public static function get_available_types() {
|
||||
global $CFG;
|
||||
|
||||
// Array to store the element types.
|
||||
$options = array();
|
||||
|
||||
// Check that the directory exists.
|
||||
$elementdir = "$CFG->dirroot/mod/customcert/element";
|
||||
if (file_exists($elementdir)) {
|
||||
// Get directory contents.
|
||||
$elementfolders = new \DirectoryIterator($elementdir);
|
||||
// Loop through the elements folder.
|
||||
foreach ($elementfolders as $elementfolder) {
|
||||
// If it is not a directory or it is '.' or '..', skip it.
|
||||
if (!$elementfolder->isDir() || $elementfolder->isDot()) {
|
||||
continue;
|
||||
}
|
||||
// Check that the standard class exists, if not we do
|
||||
// not want to display it as an option as it will not work.
|
||||
$foldername = $elementfolder->getFilename();
|
||||
// Get the class name.
|
||||
$classname = '\\customcertelement_' . $foldername . '\\element';
|
||||
// Ensure the necessary class exists.
|
||||
if (class_exists($classname)) {
|
||||
$component = "customcertelement_{$foldername}";
|
||||
$options[$foldername] = get_string('pluginname', $component);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
\core_collator::asort($options);
|
||||
return $options;
|
||||
}
|
||||
}
|
||||
|
|
325
classes/element_helper.php
Normal file
325
classes/element_helper.php
Normal file
|
@ -0,0 +1,325 @@
|
|||
<?php
|
||||
// This file is part of the customcert module for 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/>.
|
||||
|
||||
/**
|
||||
* Provides useful functions related to elements.
|
||||
*
|
||||
* @package mod_customcert
|
||||
* @copyright 2016 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace mod_customcert;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Class helper.
|
||||
*
|
||||
* Provides useful functions related to elements.
|
||||
*/
|
||||
class element_helper {
|
||||
|
||||
/**
|
||||
* @var int the top-left of element
|
||||
*/
|
||||
const CUSTOMCERT_REF_POINT_TOPLEFT = 0;
|
||||
|
||||
/**
|
||||
* @var int the top-center of element
|
||||
*/
|
||||
const CUSTOMCERT_REF_POINT_TOPCENTER = 1;
|
||||
|
||||
/**
|
||||
* @var int the top-left of element
|
||||
*/
|
||||
const CUSTOMCERT_REF_POINT_TOPRIGHT = 2;
|
||||
|
||||
/**
|
||||
* Common behaviour for rendering specified content on the pdf.
|
||||
*
|
||||
* @param \pdf $pdf the pdf object
|
||||
* @param \mod_customcert\element $element the customcert element
|
||||
* @param string $content the content to render
|
||||
*/
|
||||
public static function render_content($pdf, $element, $content) {
|
||||
list($font, $attr) = \mod_customcert\element_helper::get_font($element);
|
||||
$pdf->setFont($font, $attr, $element->size);
|
||||
$fontcolour = \TCPDF_COLORS::convertHTMLColorToDec($element->colour, $fontcolour);
|
||||
$pdf->SetTextColor($fontcolour['R'], $fontcolour['G'], $fontcolour['B']);
|
||||
|
||||
$x = $element->posx;
|
||||
$y = $element->posy;
|
||||
$w = $element->width;
|
||||
$refpoint = $element->refpoint;
|
||||
$actualwidth = $pdf->GetStringWidth($content);
|
||||
|
||||
if ($w and $w < $actualwidth) {
|
||||
$actualwidth = $w;
|
||||
}
|
||||
|
||||
switch ($refpoint) {
|
||||
case self::CUSTOMCERT_REF_POINT_TOPRIGHT:
|
||||
$x = $element->posx - $actualwidth;
|
||||
if ($x < 0) {
|
||||
$x = 0;
|
||||
$w = $element->posx;
|
||||
} else {
|
||||
$w = $actualwidth;
|
||||
}
|
||||
break;
|
||||
case self::CUSTOMCERT_REF_POINT_TOPCENTER:
|
||||
$x = $element->posx - $actualwidth / 2;
|
||||
if ($x < 0) {
|
||||
$x = 0;
|
||||
$w = $element->posx * 2;
|
||||
} else {
|
||||
$w = $actualwidth;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ($w) {
|
||||
$w += 0.0001;
|
||||
}
|
||||
$pdf->setCellPaddings(0, 0, 0, 0);
|
||||
$pdf->writeHTMLCell($w, 0, $x, $y, $content, 0, 0, false, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Common behaviour for rendering specified content on the drag and drop page.
|
||||
*
|
||||
* @param \mod_customcert\element $element the customcert element
|
||||
* @param string $content the content to render
|
||||
* @return string the html
|
||||
*/
|
||||
public static function render_html_content($element, $content) {
|
||||
list($font, $attr) = \mod_customcert\element_helper::get_font($element);
|
||||
$fontstyle = 'font-family: ' . $font;
|
||||
if (strpos($attr, 'B') !== false) {
|
||||
$fontstyle .= ': font-weight: bold';
|
||||
}
|
||||
if (strpos($attr, 'I') !== false) {
|
||||
$fontstyle .= ': font-style: italic';
|
||||
}
|
||||
|
||||
$style = $fontstyle . '; color: ' . $element->colour . '; font-size: ' . $element->size . 'pt';
|
||||
return \html_writer::tag('span', $content, array('style' => $style));
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to render the font elements.
|
||||
*
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance.
|
||||
*/
|
||||
public static function render_form_element_font($mform) {
|
||||
$mform->addElement('select', 'font', get_string('font', 'customcert'), \mod_customcert\certificate::get_fonts());
|
||||
$mform->setType('font', PARAM_TEXT);
|
||||
$mform->setDefault('font', 'times');
|
||||
$mform->addHelpButton('font', 'font', 'customcert');
|
||||
$mform->addElement('select', 'size', get_string('fontsize', 'customcert'), \mod_customcert\certificate::get_font_sizes());
|
||||
$mform->setType('size', PARAM_INT);
|
||||
$mform->setDefault('size', 12);
|
||||
$mform->addHelpButton('size', 'fontsize', 'customcert');
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to render the colour elements.
|
||||
*
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance.
|
||||
*/
|
||||
public static function render_form_element_colour($mform) {
|
||||
$mform->addElement('customcert_colourpicker', 'colour', get_string('fontcolour', 'customcert'));
|
||||
$mform->setType('colour', PARAM_RAW); // Need to validate that this is a valid colour.
|
||||
$mform->setDefault('colour', '#000000');
|
||||
$mform->addHelpButton('colour', 'fontcolour', 'customcert');
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to render the position elements.
|
||||
*
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance.
|
||||
*/
|
||||
public static function render_form_element_position($mform) {
|
||||
$mform->addElement('text', 'posx', get_string('posx', 'customcert'), array('size' => 10));
|
||||
$mform->setType('posx', PARAM_INT);
|
||||
$mform->setDefault('posx', 0);
|
||||
$mform->addHelpButton('posx', 'posx', 'customcert');
|
||||
$mform->addElement('text', 'posy', get_string('posy', 'customcert'), array('size' => 10));
|
||||
$mform->setType('posy', PARAM_INT);
|
||||
$mform->setDefault('posy', 0);
|
||||
$mform->addHelpButton('posy', 'posy', 'customcert');
|
||||
$mform->addElement('text', 'width', get_string('elementwidth', 'customcert'), array('size' => 10));
|
||||
$mform->setType('width', PARAM_INT);
|
||||
$mform->setDefault('width', 0);
|
||||
$mform->addHelpButton('width', 'elementwidth', 'customcert');
|
||||
$refpointoptions = array();
|
||||
$refpointoptions[self::CUSTOMCERT_REF_POINT_TOPLEFT] = get_string('topleft', 'customcert');
|
||||
$refpointoptions[self::CUSTOMCERT_REF_POINT_TOPCENTER] = get_string('topcenter', 'customcert');
|
||||
$refpointoptions[self::CUSTOMCERT_REF_POINT_TOPRIGHT] = get_string('topright', 'customcert');
|
||||
$mform->addElement('select', 'refpoint', get_string('refpoint', 'customcert'), $refpointoptions);
|
||||
$mform->setType('refpoint', PARAM_INT);
|
||||
$mform->setDefault('refpoint', self::CUSTOMCERT_REF_POINT_TOPCENTER);
|
||||
$mform->addHelpButton('refpoint', 'refpoint', 'customcert');
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to performs validation on the colour element.
|
||||
*
|
||||
* @param array $data the submitted data
|
||||
* @return array the validation errors
|
||||
*/
|
||||
public static function validate_form_element_colour($data) {
|
||||
$errors = array();
|
||||
// Validate the colour.
|
||||
if (!\mod_customcert\element_helper::validate_colour($data['colour'])) {
|
||||
$errors['colour'] = get_string('invalidcolour', 'customcert');
|
||||
}
|
||||
return $errors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to performs validation on the position elements.
|
||||
*
|
||||
* @param array $data the submitted data
|
||||
* @return array the validation errors
|
||||
*/
|
||||
public static function validate_form_element_position($data) {
|
||||
$errors = array();
|
||||
// Check if posx is not set, or not numeric or less than 0.
|
||||
if ((!isset($data['posx'])) || (!is_numeric($data['posx'])) || ($data['posx'] < 0)) {
|
||||
$errors['posx'] = get_string('invalidposition', 'customcert', 'X');
|
||||
}
|
||||
// Check if posy is not set, or not numeric or less than 0.
|
||||
if ((!isset($data['posy'])) || (!is_numeric($data['posy'])) || ($data['posy'] < 0)) {
|
||||
$errors['posy'] = get_string('invalidposition', 'customcert', 'Y');
|
||||
}
|
||||
// Check if width is less than 0.
|
||||
if (isset($data['width']) && $data['width'] < 0) {
|
||||
$errors['width'] = get_string('invalidelementwidth', 'customcert');
|
||||
}
|
||||
return $errors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the font used for this element.
|
||||
*
|
||||
* @param \mod_customcert\element $element the customcert element
|
||||
* @return array the font and font attributes
|
||||
*/
|
||||
public static function get_font($element) {
|
||||
// Variable for the font.
|
||||
$font = $element->font;
|
||||
// Get the last two characters of the font name.
|
||||
$fontlength = strlen($font);
|
||||
$lastchar = $font[$fontlength - 1];
|
||||
$secondlastchar = $font[$fontlength - 2];
|
||||
// The attributes of the font.
|
||||
$attr = '';
|
||||
// Check if the last character is 'i'.
|
||||
if ($lastchar == 'i') {
|
||||
// Remove the 'i' from the font name.
|
||||
$font = substr($font, 0, -1);
|
||||
// Check if the second last char is b.
|
||||
if ($secondlastchar == 'b') {
|
||||
// Remove the 'b' from the font name.
|
||||
$font = substr($font, 0, -1);
|
||||
$attr .= 'B';
|
||||
}
|
||||
$attr .= 'I';
|
||||
} else if ($lastchar == 'b') {
|
||||
// Remove the 'b' from the font name.
|
||||
$font = substr($font, 0, -1);
|
||||
$attr .= 'B';
|
||||
}
|
||||
return array($font, $attr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the colour selected.
|
||||
*
|
||||
* @param string $colour
|
||||
* @return bool returns true if the colour is valid, false otherwise
|
||||
*/
|
||||
public static function validate_colour($colour) {
|
||||
// List of valid HTML colour names.
|
||||
$colournames = array(
|
||||
'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure',
|
||||
'beige', 'bisque', 'black', 'blanchedalmond', 'blue',
|
||||
'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse',
|
||||
'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson',
|
||||
'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray',
|
||||
'darkgrey', 'darkgreen', 'darkkhaki', 'darkmagenta',
|
||||
'darkolivegreen', 'darkorange', 'darkorchid', 'darkred',
|
||||
'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray',
|
||||
'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink',
|
||||
'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick',
|
||||
'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro',
|
||||
'ghostwhite', 'gold', 'goldenrod', 'gray', 'grey', 'green',
|
||||
'greenyellow', 'honeydew', 'hotpink', 'indianred', 'indigo',
|
||||
'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen',
|
||||
'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan',
|
||||
'lightgoldenrodyellow', 'lightgray', 'lightgrey', 'lightgreen',
|
||||
'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue',
|
||||
'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow',
|
||||
'lime', 'limegreen', 'linen', 'magenta', 'maroon',
|
||||
'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple',
|
||||
'mediumseagreen', 'mediumslateblue', 'mediumspringgreen',
|
||||
'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream',
|
||||
'mistyrose', 'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive',
|
||||
'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod',
|
||||
'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip',
|
||||
'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', 'red',
|
||||
'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown',
|
||||
'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue',
|
||||
'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan',
|
||||
'teal', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'white',
|
||||
'whitesmoke', 'yellow', 'yellowgreen'
|
||||
);
|
||||
|
||||
if (preg_match('/^#?([[:xdigit:]]{3}){1,2}$/', $colour)) {
|
||||
return true;
|
||||
} else if (in_array(strtolower($colour), $colournames)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function that returns the sequence on a specified customcert page for a
|
||||
* newly created element.
|
||||
*
|
||||
* @param int $pageid the id of the page we are adding this element to
|
||||
* @return int the element number
|
||||
*/
|
||||
public static function get_element_sequence($pageid) {
|
||||
global $DB;
|
||||
|
||||
// Set the sequence of the element we are creating.
|
||||
$sequence = 1;
|
||||
// Check if there already elements that exist, if so, overwrite value.
|
||||
$sql = "SELECT MAX(sequence) as maxsequence
|
||||
FROM {customcert_elements}
|
||||
WHERE pageid = :id";
|
||||
// Get the current max sequence on this page and add 1 to get the new sequence.
|
||||
if ($maxseq = $DB->get_record_sql($sql, array('id' => $pageid))) {
|
||||
$sequence = $maxseq->maxsequence + 1;
|
||||
}
|
||||
|
||||
return $sequence;
|
||||
}
|
||||
}
|
|
@ -14,10 +14,13 @@
|
|||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
namespace mod_customcert;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
require_once($CFG->libdir . '/formslib.php');
|
||||
|
||||
|
||||
/**
|
||||
* The form for loading customcert templates.
|
||||
*
|
||||
|
@ -25,27 +28,25 @@ require_once($CFG->libdir . '/formslib.php');
|
|||
* @copyright 2013 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class mod_customcert_load_template_form extends moodleform {
|
||||
class load_template_form extends \moodleform {
|
||||
|
||||
/**
|
||||
* Form definition.
|
||||
*/
|
||||
public function definition() {
|
||||
global $DB;
|
||||
|
||||
$mform =& $this->_form;
|
||||
|
||||
$mform->addElement('header', 'loadtemplateheader', get_string('loadtemplate', 'customcert'));
|
||||
|
||||
$templates = $DB->get_records_menu('customcert_templates',
|
||||
array('contextid' => \CONTEXT_SYSTEM::instance()->id), 'name ASC', 'id, name');
|
||||
|
||||
$group = array();
|
||||
$group[] = $mform->createElement('select', 'template', '', $this->_customdata['templates']);
|
||||
$group[] = $mform->createElement('select', 'ltid', '', $templates);
|
||||
$group[] = $mform->createElement('submit', 'loadtemplatesubmit', get_string('load', 'customcert'));
|
||||
|
||||
$mform->addElement('group', 'loadtemplategroup', '', $group, '', false);
|
||||
|
||||
// Set the type.
|
||||
$mform->setType('template', PARAM_INT);
|
||||
|
||||
$mform->addElement('hidden', 'cmid');
|
||||
$mform->setType('cmid', PARAM_INT);
|
||||
$mform->setDefault('cmid', $this->_customdata['cmid']);
|
||||
$mform->setType('ltid', PARAM_INT);
|
||||
}
|
||||
}
|
61
classes/page_helper.php
Normal file
61
classes/page_helper.php
Normal file
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
// This file is part of the customcert module for 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/>.
|
||||
|
||||
/**
|
||||
* Provides useful functions related to setting up the page.
|
||||
*
|
||||
* @package mod_customcert
|
||||
* @copyright 2016 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace mod_customcert;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Class helper.
|
||||
*
|
||||
* Provides useful functions.
|
||||
*/
|
||||
class page_helper {
|
||||
|
||||
/**
|
||||
* Sets up the page variables.
|
||||
*
|
||||
* @param \moodle_url $pageurl
|
||||
* @param \context $context
|
||||
* @param string $title the page title
|
||||
*/
|
||||
public static function page_setup($pageurl, $context, $title) {
|
||||
global $COURSE, $PAGE, $SITE;
|
||||
|
||||
$PAGE->set_url($pageurl);
|
||||
$PAGE->set_context($context);
|
||||
$PAGE->set_title(format_string($title));
|
||||
|
||||
// If we are in the system context then we are managing templates, and we want to show that in the navigation.
|
||||
if ($context->contextlevel == CONTEXT_SYSTEM) {
|
||||
$PAGE->set_pagelayout('admin');
|
||||
$PAGE->set_heading($SITE->fullname);
|
||||
|
||||
$urloverride = new \moodle_url('/admin/settings.php?section=modsettingcustomcert');
|
||||
\navigation_node::override_active_url($urloverride);
|
||||
} else {
|
||||
$PAGE->set_heading(format_string($COURSE->fullname));
|
||||
}
|
||||
}
|
||||
}
|
455
classes/template.php
Normal file
455
classes/template.php
Normal file
|
@ -0,0 +1,455 @@
|
|||
<?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/>.
|
||||
|
||||
/**
|
||||
* Class represents a customcert template.
|
||||
*
|
||||
* @copyright 2015 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace mod_customcert;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Class represents a customcert template.
|
||||
*
|
||||
* @copyright 2016 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class template {
|
||||
|
||||
/**
|
||||
* @var int $id The id of the template.
|
||||
*/
|
||||
protected $id;
|
||||
|
||||
/**
|
||||
* @var string $name The name of this template
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
/**
|
||||
* @var int $contextid The context id of this template
|
||||
*/
|
||||
protected $contextid;
|
||||
|
||||
/**
|
||||
* The constructor.
|
||||
*
|
||||
* @param \stdClass $template
|
||||
*/
|
||||
public function __construct($template) {
|
||||
$this->id = $template->id;
|
||||
$this->name = $template->name;
|
||||
$this->contextid = $template->contextid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles saving data.
|
||||
*
|
||||
* @param \stdClass $data the template data
|
||||
*/
|
||||
public function save($data) {
|
||||
global $DB;
|
||||
|
||||
$savedata = new \stdClass();
|
||||
$savedata->id = $this->id;
|
||||
$savedata->name = $data->name;
|
||||
$savedata->timemodified= time();
|
||||
|
||||
$DB->update_record('customcert_templates', $savedata);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles adding another page to the template.
|
||||
*
|
||||
* @return int the id of the page
|
||||
*/
|
||||
public function add_page() {
|
||||
global $DB;
|
||||
|
||||
// Set the page number to 1 to begin with.
|
||||
$pagenumber = 1;
|
||||
// Get the max page number.
|
||||
$sql = "SELECT MAX(pagenumber) as maxpage
|
||||
FROM {customcert_pages} cp
|
||||
WHERE cp.templateid = :templateid";
|
||||
if ($maxpage = $DB->get_record_sql($sql, array('templateid' => $this->id))) {
|
||||
$pagenumber = $maxpage->maxpage + 1;
|
||||
}
|
||||
|
||||
// New page creation.
|
||||
$page = new \stdClass();
|
||||
$page->templateid = $this->id;
|
||||
$page->width = '210';
|
||||
$page->height = '297';
|
||||
$page->pagenumber = $pagenumber;
|
||||
$page->timecreated = time();
|
||||
$page->timemodified = $page->timecreated;
|
||||
|
||||
// Insert the page.
|
||||
return $DB->insert_record('customcert_pages', $page);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles saving page data.
|
||||
*
|
||||
* @param \stdClass $data the template data
|
||||
*/
|
||||
public function save_page($data) {
|
||||
global $DB;
|
||||
|
||||
// Set the time to a variable.
|
||||
$time = time();
|
||||
|
||||
// Get the existing pages and save the page data.
|
||||
if ($pages = $DB->get_records('customcert_pages', array('templateid' => $data->tid))) {
|
||||
// Loop through existing pages.
|
||||
foreach ($pages as $page) {
|
||||
// Get the name of the fields we want from the form.
|
||||
$width = 'pagewidth_' . $page->id;
|
||||
$height = 'pageheight_' . $page->id;
|
||||
$leftmargin = 'pageleftmargin_' . $page->id;
|
||||
$rightmargin = 'pagerightmargin_' . $page->id;
|
||||
// Create the page data to update the DB with.
|
||||
$p = new \stdClass();
|
||||
$p->id = $page->id;
|
||||
$p->width = $data->$width;
|
||||
$p->height = $data->$height;
|
||||
$p->leftmargin = $data->$leftmargin;
|
||||
$p->rightmargin = $data->$rightmargin;
|
||||
$p->timemodified = $time;
|
||||
// Update the page.
|
||||
$DB->update_record('customcert_pages', $p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles deleting the template.
|
||||
*
|
||||
* @return bool return true if the deletion was successful, false otherwise
|
||||
*/
|
||||
public function delete() {
|
||||
global $CFG, $DB;
|
||||
|
||||
// Delete the elements.
|
||||
$sql = "SELECT e.*
|
||||
FROM {customcert_elements} e
|
||||
INNER JOIN {customcert_pages} p
|
||||
ON e.pageid = p.id
|
||||
WHERE p.templateid = :templateid";
|
||||
if ($elements = $DB->get_records_sql($sql, array('templateid' => $this->id))) {
|
||||
foreach ($elements as $element) {
|
||||
// Get an instance of the element class.
|
||||
if ($e = \mod_customcert\element::instance($element)) {
|
||||
$e->delete();
|
||||
} else {
|
||||
// The plugin files are missing, so just remove the entry from the DB.
|
||||
$DB->delete_records('customcert_elements', array('id' => $element->id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Delete the pages.
|
||||
if (!$DB->delete_records('customcert_pages', array('templateid' => $this->id))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Now, finally delete the actual template.
|
||||
if (!$DB->delete_records('customcert_templates', array('id' => $this->id))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles deleting a page from the template.
|
||||
*
|
||||
* @param int $pageid the template page
|
||||
*/
|
||||
public function delete_page($pageid) {
|
||||
global $DB;
|
||||
|
||||
// Get the page.
|
||||
$page = $DB->get_record('customcert_pages', array('id' => $pageid), '*', MUST_EXIST);
|
||||
|
||||
// Delete this page.
|
||||
$DB->delete_records('customcert_pages', array('id' => $page->id));
|
||||
|
||||
// The element may have some extra tasks it needs to complete to completely delete itself.
|
||||
if ($elements = $DB->get_records('customcert_elements', array('pageid' => $page->id))) {
|
||||
foreach ($elements as $element) {
|
||||
// Get an instance of the element class.
|
||||
if ($e = \mod_customcert\element::instance($element)) {
|
||||
$e->delete();
|
||||
} else {
|
||||
// The plugin files are missing, so just remove the entry from the DB.
|
||||
$DB->delete_records('customcert_elements', array('id' => $element->id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Now we want to decrease the page number values of
|
||||
// the pages that are greater than the page we deleted.
|
||||
$sql = "UPDATE {customcert_pages}
|
||||
SET pagenumber = pagenumber - 1
|
||||
WHERE templateid = :templateid
|
||||
AND pagenumber > :pagenumber";
|
||||
$DB->execute($sql, array('templateid' => $this->id, 'pagenumber' => $page->pagenumber));
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles deleting an element from the template.
|
||||
*
|
||||
* @param int $elementid the template page
|
||||
*/
|
||||
public function delete_element($elementid) {
|
||||
global $DB;
|
||||
|
||||
// Ensure element exists and delete it.
|
||||
$element = $DB->get_record('customcert_elements', array('id' => $elementid), '*', MUST_EXIST);
|
||||
|
||||
// Get an instance of the element class.
|
||||
if ($e = \mod_customcert\element::instance($element)) {
|
||||
$e->delete();
|
||||
} else {
|
||||
// The plugin files are missing, so just remove the entry from the DB.
|
||||
$DB->delete_records('customcert_elements', array('id' => $elementid));
|
||||
}
|
||||
|
||||
// Now we want to decrease the sequence numbers of the elements
|
||||
// that are greater than the element we deleted.
|
||||
$sql = "UPDATE {customcert_elements}
|
||||
SET sequence = sequence - 1
|
||||
WHERE pageid = :pageid
|
||||
AND sequence > :sequence";
|
||||
$DB->execute($sql, array('pageid' => $element->pageid, 'sequence' => $element->sequence));
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the PDF for the template.
|
||||
*
|
||||
* @param bool $preview true if it is a preview, false otherwise
|
||||
*/
|
||||
public function generate_pdf($preview = false) {
|
||||
global $CFG, $DB;
|
||||
|
||||
require_once($CFG->libdir . '/pdflib.php');
|
||||
|
||||
// Get the pages for the template, there should always be at least one page for each template.
|
||||
if ($pages = $DB->get_records('customcert_pages', array('templateid' => $this->id), 'pagenumber ASC')) {
|
||||
// Create the pdf object.
|
||||
$pdf = new \pdf();
|
||||
|
||||
// If the template belongs to a certificate then we need to check what permissions we set for it.
|
||||
if ($protection = $DB->get_field('customcert', 'protection', array('templateid' => $this->id))) {
|
||||
if (!empty($protection)) {
|
||||
$protection = explode(', ', $protection);
|
||||
$pdf->SetProtection($protection);
|
||||
}
|
||||
}
|
||||
|
||||
$pdf->setPrintHeader(false);
|
||||
$pdf->setPrintFooter(false);
|
||||
$pdf->SetTitle($this->name);
|
||||
$pdf->SetAutoPageBreak(true, 0);
|
||||
// Remove full-stop at the end, if it exists, to avoid "..pdf" being created and being filtered by clean_filename.
|
||||
$filename = rtrim($this->name, '.');
|
||||
$filename = clean_filename($filename . '.pdf');
|
||||
// Loop through the pages and display their content.
|
||||
foreach ($pages as $page) {
|
||||
// Add the page to the PDF.
|
||||
if ($page->width > $page->height) {
|
||||
$orientation = 'L';
|
||||
} else {
|
||||
$orientation = 'P';
|
||||
}
|
||||
$pdf->AddPage($orientation, array($page->width, $page->height));
|
||||
$pdf->SetMargins($page->leftmargin, 0, $page->rightmargin);
|
||||
// Get the elements for the page.
|
||||
if ($elements = $DB->get_records('customcert_elements', array('pageid' => $page->id), 'sequence ASC')) {
|
||||
// Loop through and display.
|
||||
foreach ($elements as $element) {
|
||||
// Get an instance of the element class.
|
||||
if ($e = \mod_customcert\element::instance($element)) {
|
||||
$e->render($pdf, $preview);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$pdf->Output($filename, 'D');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles moving the certificate page up.
|
||||
*
|
||||
* @param int $pageid
|
||||
*/
|
||||
public function move_page_up($pageid) {
|
||||
global $DB;
|
||||
|
||||
if ($movecertpage = $DB->get_record('customcert_pages', array('id' => $pageid))) {
|
||||
$swapcertpage = $DB->get_record('customcert_pages', array('pagenumber' => $movecertpage->pagenumber - 1));
|
||||
}
|
||||
|
||||
// Check that there is a page to move, and a page to swap it with.
|
||||
if (isset($swapcertpage) && $movecertpage) {
|
||||
$DB->set_field('customcert_pages', 'pagenumber', $swapcertpage->pagenumber, array('id' => $movecertpage->id));
|
||||
$DB->set_field('customcert_pages', 'pagenumber', $movecertpage->pagenumber, array('id' => $swapcertpage->id));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles moving the certificate page down.
|
||||
*
|
||||
* @param int $pageid
|
||||
*/
|
||||
public function move_page_down($pageid) {
|
||||
global $DB;
|
||||
|
||||
if ($movecertpage = $DB->get_record('customcert_pages', array('id' => $pageid))) {
|
||||
$swapcertpage = $DB->get_record('customcert_pages', array('pagenumber' => $movecertpage->pagenumber + 1));
|
||||
}
|
||||
|
||||
// Check that there is a page to move, and a page to swap it with.
|
||||
if (isset($swapcertpage) && $movecertpage) {
|
||||
$DB->set_field('customcert_pages', 'pagenumber', $swapcertpage->pagenumber, array('id' => $movecertpage->id));
|
||||
$DB->set_field('customcert_pages', 'pagenumber', $movecertpage->pagenumber, array('id' => $swapcertpage->id));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles moving the certificate element up.
|
||||
*
|
||||
* @param int $elementid
|
||||
*/
|
||||
public function move_element_up($elementid) {
|
||||
global $DB;
|
||||
|
||||
if ($movecertelement = $DB->get_record('customcert_elements', array('id' => $elementid))) {
|
||||
$swapcertelement = $DB->get_record('customcert_elements', array('sequence' => $movecertelement->sequence - 1));
|
||||
}
|
||||
|
||||
// Check that there is an element to move, and an element to swap it with.
|
||||
if (isset($swapcertelement) && $movecertelement) {
|
||||
$DB->set_field('customcert_elements', 'sequence', $swapcertelement->sequence, array('id' => $movecertelement->id));
|
||||
$DB->set_field('customcert_elements', 'sequence', $movecertelement->sequence, array('id' => $swapcertelement->id));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles moving the certificate element down.
|
||||
*
|
||||
* @param int $elementid
|
||||
*/
|
||||
public function move_element_down($elementid) {
|
||||
global $DB;
|
||||
|
||||
if ($movecertelement = $DB->get_record('customcert_elements', array('id' => $elementid))) {
|
||||
$swapcertelement = $DB->get_record('customcert_elements', array('sequence' => $movecertelement->sequence + 1));
|
||||
}
|
||||
|
||||
// Check that there is an element to move, and an element to swap it with.
|
||||
if (isset($swapcertelement) && $movecertelement) {
|
||||
$DB->set_field('customcert_elements', 'sequence', $swapcertelement->sequence, array('id' => $movecertelement->id));
|
||||
$DB->set_field('customcert_elements', 'sequence', $movecertelement->sequence, array('id' => $swapcertelement->id));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the id of the template.
|
||||
*
|
||||
* @return int the id of the template
|
||||
*/
|
||||
public function get_id() {
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the template.
|
||||
*
|
||||
* @return string the name of the template
|
||||
*/
|
||||
public function get_name() {
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the context id.
|
||||
*
|
||||
* @return int the context id
|
||||
*/
|
||||
public function get_contextid() {
|
||||
return $this->contextid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the context id.
|
||||
*
|
||||
* @return \context the context
|
||||
*/
|
||||
public function get_context() {
|
||||
return \context::instance_by_id($this->contextid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the context id.
|
||||
*
|
||||
* @return \context_module|null the context module, null if there is none
|
||||
*/
|
||||
public function get_cm() {
|
||||
$context = $this->get_context();
|
||||
if ($context->contextlevel === CONTEXT_MODULE) {
|
||||
return get_coursemodule_from_id('customcert', $context->instanceid, 0, false, MUST_EXIST);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures the user has the proper capabilities to manage this template.
|
||||
*
|
||||
* @throws \required_capability_exception if the user does not have the necessary capabilities (ie. Fred)
|
||||
*/
|
||||
public function require_manage() {
|
||||
require_capability('mod/customcert:manage', $this->get_context());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a template.
|
||||
*
|
||||
* @param string $templatename the name of the template
|
||||
* @param int $contextid the context id
|
||||
* @return \mod_customcert\template the template object
|
||||
*/
|
||||
public static function create($templatename, $contextid) {
|
||||
global $DB;
|
||||
|
||||
$template = new \stdClass();
|
||||
$template->name = $templatename;
|
||||
$template->contextid = $contextid;
|
||||
$template->timecreated = time();
|
||||
$template->timemodified = $template->timecreated;
|
||||
$template->id = $DB->insert_record('customcert_templates', $template);
|
||||
|
||||
return new \mod_customcert\template($template);
|
||||
}
|
||||
}
|
|
@ -14,6 +14,8 @@
|
|||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
namespace mod_customcert;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
require_once($CFG->libdir.'/formslib.php');
|
||||
|
@ -25,10 +27,10 @@ require_once($CFG->libdir.'/formslib.php');
|
|||
* @copyright 2013 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class mod_customcert_upload_image_form extends moodleform {
|
||||
class upload_image_form extends \moodleform {
|
||||
|
||||
/** @var array the filemanager options */
|
||||
private $filemanageroptions = array();
|
||||
protected $filemanageroptions = array();
|
||||
|
||||
/**
|
||||
* Form definition.
|
||||
|
@ -54,7 +56,7 @@ class mod_customcert_upload_image_form extends moodleform {
|
|||
|
||||
// Editing existing instance - copy existing files into draft area.
|
||||
$draftitemid = file_get_submitted_draft_itemid('customcertimage');
|
||||
file_prepare_draft_area($draftitemid, context_system::instance()->id, 'mod_customcert', 'image', 0, $this->filemanageroptions);
|
||||
file_prepare_draft_area($draftitemid, \context_system::instance()->id, 'mod_customcert', 'image', 0, $this->filemanageroptions);
|
||||
$element = $mform->getElement('customcertimage');
|
||||
$element->setValue($draftitemid);
|
||||
}
|
|
@ -52,7 +52,7 @@ $capabilities = array(
|
|||
'mod/customcert:manage' => array(
|
||||
|
||||
'captype' => 'write',
|
||||
'contextlevel' => CONTEXT_MODULE,
|
||||
'contextlevel' => CONTEXT_COURSE, CONTEXT_SYSTEM,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<FIELDS>
|
||||
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
|
||||
<FIELD NAME="course" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="templateid" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/>
|
||||
<FIELD NAME="intro" TYPE="text" LENGTH="small" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="introformat" TYPE="int" LENGTH="4" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
|
@ -18,6 +19,20 @@
|
|||
</FIELDS>
|
||||
<KEYS>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for customcert"/>
|
||||
<KEY NAME="template" TYPE="foreign" FIELDS="templateid" REFTABLE="customcert_template" REFFIELDS="id"/>
|
||||
</KEYS>
|
||||
</TABLE>
|
||||
<TABLE NAME="customcert_templates" COMMENT="Stores each customcert template">
|
||||
<FIELDS>
|
||||
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
|
||||
<FIELD NAME="name" TYPE="char" LENGTH="40" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="contextid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="References contextid."/>
|
||||
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
</FIELDS>
|
||||
<KEYS>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for customcert_template"/>
|
||||
<KEY NAME="contextid" TYPE="foreign" FIELDS="contextid" REFTABLE="context" REFFIELDS="id"/>
|
||||
</KEYS>
|
||||
</TABLE>
|
||||
<TABLE NAME="customcert_issues" COMMENT="Stores each issue of a customcert">
|
||||
|
@ -36,7 +51,7 @@
|
|||
<TABLE NAME="customcert_pages" COMMENT="Stores each page of a custom cert">
|
||||
<FIELDS>
|
||||
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
|
||||
<FIELD NAME="customcertid" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="templateid" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="width" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="height" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="leftmargin" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
|
@ -47,7 +62,7 @@
|
|||
</FIELDS>
|
||||
<KEYS>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for customcert_pages"/>
|
||||
<KEY NAME="customcert" TYPE="foreign" FIELDS="customcertid" REFTABLE="customcert" REFFIELDS="id"/>
|
||||
<KEY NAME="template" TYPE="foreign" FIELDS="templateid" REFTABLE="customcert_template" REFFIELDS="id"/>
|
||||
</KEYS>
|
||||
</TABLE>
|
||||
<TABLE NAME="customcert_elements" COMMENT="Stores the elements for a given page">
|
||||
|
@ -73,56 +88,5 @@
|
|||
<KEY NAME="page" TYPE="foreign" FIELDS="pageid" REFTABLE="customcert_pages" REFFIELDS="id"/>
|
||||
</KEYS>
|
||||
</TABLE>
|
||||
<TABLE NAME="customcert_template" COMMENT="Stores each customcert template">
|
||||
<FIELDS>
|
||||
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
|
||||
<FIELD NAME="name" TYPE="char" LENGTH="40" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
</FIELDS>
|
||||
<KEYS>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for customcert_template"/>
|
||||
</KEYS>
|
||||
</TABLE>
|
||||
<TABLE NAME="customcert_template_pages" COMMENT="Stores each page of a customcert template">
|
||||
<FIELDS>
|
||||
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
|
||||
<FIELD NAME="templateid" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="width" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="height" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="leftmargin" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="rightmargin" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="pagenumber" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
</FIELDS>
|
||||
<KEYS>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for customcert_template_pages"/>
|
||||
<KEY NAME="template" TYPE="foreign" FIELDS="templateid" REFTABLE="customcert_template" REFFIELDS="id"/>
|
||||
</KEYS>
|
||||
</TABLE>
|
||||
<TABLE NAME="customcert_template_elements" COMMENT="Stores the elements for a given customcert template page">
|
||||
<FIELDS>
|
||||
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
|
||||
<FIELD NAME="templatepageid" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/>
|
||||
<FIELD NAME="element" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/>
|
||||
<FIELD NAME="data" TYPE="text" LENGTH="big" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="font" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="size" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="colour" TYPE="char" LENGTH="50" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="posx" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="posy" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="width" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="refpoint" TYPE="int" LENGTH="4" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="sequence" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
|
||||
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
</FIELDS>
|
||||
<KEYS>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for customcert_template_elements"/>
|
||||
<KEY NAME="templatepage" TYPE="foreign" FIELDS="templatepageid" REFTABLE="customcert_template_pages" REFFIELDS="id"/>
|
||||
</KEYS>
|
||||
</TABLE>
|
||||
</TABLES>
|
||||
</XMLDB>
|
||||
|
|
133
db/upgrade.php
133
db/upgrade.php
|
@ -1,133 +0,0 @@
|
|||
<?php
|
||||
|
||||
// This file is part of the Certificate module for 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/>.
|
||||
|
||||
/**
|
||||
* This file keeps track of upgrades to the customcert module
|
||||
*
|
||||
* @package mod_customcert
|
||||
* @copyright 2015 Shamim Rezaie <rezaie@foodle.org>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
function xmldb_customcert_upgrade($oldversion=0) {
|
||||
|
||||
global $CFG, $DB;
|
||||
$dbman = $DB->get_manager();
|
||||
|
||||
if ($oldversion < 2015073000) {
|
||||
// Add the margin fields to customcert_pages table
|
||||
$table = new xmldb_table('customcert_pages');
|
||||
$field = new xmldb_field('margin', XMLDB_TYPE_INTEGER, 10, null, null, null, 0, 'height');
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
|
||||
// Add the margin fields to customcert_template_pages table
|
||||
$table = new xmldb_table('customcert_template_pages');
|
||||
$field = new xmldb_field('margin', XMLDB_TYPE_INTEGER, 10, null, null, null, 0, 'height');
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
|
||||
// Retrieve the customcert_elements table to add some elements to it
|
||||
$table = new xmldb_table('customcert_elements');
|
||||
// Add the width fields to customcert_elements table
|
||||
$field = new xmldb_field('width', XMLDB_TYPE_INTEGER, 10, null, null, null, 0, 'posy');
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
// Add the refpoint fields to customcert_elements table.
|
||||
$field = new xmldb_field('refpoint', XMLDB_TYPE_INTEGER, 4, null, null, null, 0, 'width');
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
// Add the align fields to customcert_elements table.
|
||||
$field = new xmldb_field('align', XMLDB_TYPE_CHAR, 1, null, null, null, 0, 'refpoint');
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
|
||||
// Retrieve the customcert_template_elements table to add some elements to it
|
||||
$table = new xmldb_table('customcert_template_elements');
|
||||
// Add the width fields to customcert_template_elements table
|
||||
$field = new xmldb_field('width', XMLDB_TYPE_INTEGER, 10, null, null, null, 0, 'posy');
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
// Add the refpoint fields to customcert_template_elements table.
|
||||
$field = new xmldb_field('refpoint', XMLDB_TYPE_INTEGER, 4, null, null, null, 0, 'width');
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
// Add the align fields to customcert_template_elements table.
|
||||
$field = new xmldb_field('align', XMLDB_TYPE_CHAR, 1, null, null, null, 0, 'refpoint');
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
|
||||
// Customcert savepoint reached.
|
||||
upgrade_mod_savepoint(true, 2015073000, 'customcert');
|
||||
}
|
||||
|
||||
if ($oldversion < 2015120800) {
|
||||
// Remove the align column from both the 'customcert_elements' and 'customcert_template_elements' table.
|
||||
$table = new xmldb_table('customcert_elements');
|
||||
$field = new xmldb_field('align');
|
||||
if ($dbman->field_exists($table, $field)) {
|
||||
$dbman->drop_field($table, $field);
|
||||
}
|
||||
|
||||
$table = new xmldb_table('customcert_template_elements');
|
||||
if ($dbman->field_exists($table, $field)) {
|
||||
$dbman->drop_field($table, $field);
|
||||
}
|
||||
|
||||
// Customcert savepoint reached.
|
||||
upgrade_mod_savepoint(true, 2015120800, 'customcert');
|
||||
}
|
||||
|
||||
if ($oldversion < 2015120801) {
|
||||
// Rename the 'margin' field to 'rightmargin' in the 'customcert_pages' and 'customcert_template_pages' tables.
|
||||
$table = new xmldb_table('customcert_pages');
|
||||
$field = new xmldb_field('margin', XMLDB_TYPE_INTEGER, 10, null, null, null, 0, 'height');
|
||||
if ($dbman->field_exists($table, $field)) {
|
||||
$dbman->rename_field($table, $field, 'rightmargin');
|
||||
}
|
||||
|
||||
$table = new xmldb_table('customcert_template_pages');
|
||||
if ($dbman->field_exists($table, $field)) {
|
||||
$dbman->rename_field($table, $field, 'rightmargin');
|
||||
}
|
||||
|
||||
// Add 'leftmargin' fields to the 'customcert_pages' and 'customcert_template_pages' tables.
|
||||
$table = new xmldb_table('customcert_pages');
|
||||
$field = new xmldb_field('leftmargin', XMLDB_TYPE_INTEGER, 10, null, null, null, 0, 'height');
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
|
||||
$table = new xmldb_table('customcert_template_pages');
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
|
||||
// Customcert savepoint reached.
|
||||
upgrade_mod_savepoint(true, 2015120801, 'customcert');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
231
edit.php
231
edit.php
|
@ -23,12 +23,8 @@
|
|||
*/
|
||||
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/locallib.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/edit_form.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/load_template_form.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/save_template_form.php');
|
||||
|
||||
$cmid = required_param('cmid', PARAM_INT);
|
||||
$tid = optional_param('tid', 0, PARAM_INT);
|
||||
$moveup = optional_param('moveup', 0, PARAM_INT);
|
||||
$movedown = optional_param('movedown', 0, PARAM_INT);
|
||||
$emoveup = optional_param('emoveup', 0, PARAM_INT);
|
||||
|
@ -37,99 +33,97 @@ $deleteelement = optional_param('deleteelement', 0, PARAM_INT);
|
|||
$deletepage = optional_param('deletepage', 0, PARAM_INT);
|
||||
$confirm = optional_param('confirm', 0, PARAM_INT);
|
||||
|
||||
$cm = get_coursemodule_from_id('customcert', $cmid, 0, false, MUST_EXIST);
|
||||
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
|
||||
$customcert = $DB->get_record('customcert', array('id' => $cm->instance), '*', MUST_EXIST);
|
||||
$context = context_module::instance($cm->id);
|
||||
|
||||
require_login($course, false, $cm);
|
||||
|
||||
require_capability('mod/customcert:manage', $context);
|
||||
|
||||
// The form for loading a customcert templates.
|
||||
$templates = customcert_get_templates();
|
||||
$loadtemplateform = new mod_customcert_load_template_form('', array('cmid' => $cm->id, 'templates' => $templates));
|
||||
// The form for saving the current information as a template.
|
||||
$savetemplateform = new mod_customcert_save_template_form('', array('cmid' => $cm->id));
|
||||
|
||||
// Check if they chose to load a customcert template and redirect.
|
||||
if ($data = $loadtemplateform->get_data()) {
|
||||
$url = new moodle_url('/mod/customcert/load_template.php', array('cmid' => $cmid, 'tid' => $data->template));
|
||||
redirect($url);
|
||||
// Edit an existing template.
|
||||
if ($tid) {
|
||||
// Create the template object.
|
||||
$template = $DB->get_record('customcert_templates', array('id' => $tid), '*', MUST_EXIST);
|
||||
$template = new \mod_customcert\template($template);
|
||||
// Set the context.
|
||||
$contextid = $template->get_contextid();
|
||||
// Set the page url.
|
||||
$pageurl = new moodle_url('/mod/customcert/edit.php', array('tid' => $tid));
|
||||
} else { // Adding a new template.
|
||||
// Need to supply the contextid.
|
||||
$contextid = required_param('contextid', PARAM_INT);
|
||||
// Set the page url.
|
||||
$pageurl = new moodle_url('/mod/customcert/edit.php', array('contextid' => $contextid));
|
||||
}
|
||||
|
||||
// Check if they chose to save the current information and redirect.
|
||||
if ($data = $savetemplateform->get_data()) {
|
||||
$url = new moodle_url('/mod/customcert/save_template.php', array('cmid' => $cmid, 'name' => $data->name));
|
||||
redirect($url);
|
||||
$context = context::instance_by_id($contextid);
|
||||
if ($context->contextlevel == CONTEXT_MODULE) {
|
||||
$cm = get_coursemodule_from_id('customcert', $context->instanceid, 0, false, MUST_EXIST);
|
||||
require_login($cm->course, false, $cm);
|
||||
} else {
|
||||
require_login();
|
||||
}
|
||||
require_capability('mod/customcert:manage', $context);
|
||||
|
||||
// Set up the page.
|
||||
\mod_customcert\page_helper::page_setup($pageurl, $context, get_string('editcustomcert', 'customcert'));
|
||||
|
||||
if ($context->contextlevel == CONTEXT_SYSTEM) {
|
||||
// We are managing a template - add some navigation.
|
||||
$PAGE->navbar->add(get_string('managetemplates', 'customcert'),
|
||||
new moodle_url('/mod/customcert/manage_templates.php'));
|
||||
$PAGE->navbar->add(get_string('editcustomcert', 'customcert'));
|
||||
}
|
||||
|
||||
// The form for loading a customcert templates.
|
||||
if ($tid && $DB->count_records('customcert_templates', array('contextid' => CONTEXT_SYSTEM::instance()->id)) > 0) {
|
||||
$loadtemplateurl = new moodle_url('/mod/customcert/load_template.php', array('tid' => $tid));
|
||||
$loadtemplateform = new \mod_customcert\load_template_form($loadtemplateurl);
|
||||
}
|
||||
|
||||
// Flag to determine if we are deleting anything.
|
||||
$deleting = false;
|
||||
|
||||
// Check if they are moving a custom certificate page.
|
||||
if ((!empty($moveup)) || (!empty($movedown))) {
|
||||
// Check if we are moving a page up.
|
||||
if (!empty($moveup)) {
|
||||
if ($movecertpage = $DB->get_record('customcert_pages', array('id' => $moveup))) {
|
||||
$swapcertpage = $DB->get_record('customcert_pages', array('pagenumber' => $movecertpage->pagenumber - 1));
|
||||
if ($tid) {
|
||||
// Check if they are moving a custom certificate page.
|
||||
if ((!empty($moveup)) || (!empty($movedown))) {
|
||||
// Check if we are moving a page up.
|
||||
if (!empty($moveup)) {
|
||||
$template->move_page_up($moveup);
|
||||
} else { // Must be moving a page down.
|
||||
$template->move_page_down($movedown);
|
||||
}
|
||||
} else { // Must be moving a page down.
|
||||
if ($movecertpage = $DB->get_record('customcert_pages', array('id' => $movedown))) {
|
||||
$swapcertpage = $DB->get_record('customcert_pages', array('pagenumber' => $movecertpage->pagenumber + 1));
|
||||
} else if ((!empty($emoveup)) || (!empty($emovedown))) { // Check if we are moving a custom certificate element.
|
||||
// Check if we are moving an element up.
|
||||
if (!empty($emoveup)) {
|
||||
$template->move_element_up($emoveup);
|
||||
} else { // Must be moving a element down.
|
||||
$template->move_element_down($emovedown);
|
||||
}
|
||||
}
|
||||
// Check that there is a page to move, and a page to swap it with.
|
||||
if ($swapcertpage && $movecertpage) {
|
||||
$DB->set_field('customcert_pages', 'pagenumber', $swapcertpage->pagenumber, array('id' => $movecertpage->id));
|
||||
$DB->set_field('customcert_pages', 'pagenumber', $movecertpage->pagenumber, array('id' => $swapcertpage->id));
|
||||
}
|
||||
} else if ((!empty($emoveup)) || (!empty($emovedown))) { // Check if we are moving a custom certificate element.
|
||||
// Check if we are moving an element up.
|
||||
if (!empty($emoveup)) {
|
||||
if ($movecertelement = $DB->get_record('customcert_elements', array('id' => $emoveup))) {
|
||||
$swapcertelement = $DB->get_record('customcert_elements', array('sequence' => $movecertelement->sequence - 1));
|
||||
} else if (!empty($deletepage)) { // Check if we are deleting a page.
|
||||
if (!empty($confirm)) { // Check they have confirmed the deletion.
|
||||
$template->delete_page($deletepage);
|
||||
} else {
|
||||
// Set deletion flag to true.
|
||||
$deleting = true;
|
||||
// Create the message.
|
||||
$message = get_string('deletepageconfirm', 'customcert');
|
||||
// Create the link options.
|
||||
$nourl = new moodle_url('/mod/customcert/edit.php', array('tid' => $tid));
|
||||
$yesurl = new moodle_url('/mod/customcert/edit.php', array('tid' => $tid,
|
||||
'deletepage' => $deletepage,
|
||||
'confirm' => 1,
|
||||
'sesskey' => sesskey()));
|
||||
}
|
||||
} else { // Must be moving a element down.
|
||||
if ($movecertelement = $DB->get_record('customcert_elements', array('id' => $emovedown))) {
|
||||
$swapcertelement = $DB->get_record('customcert_elements', array('sequence' => $movecertelement->sequence + 1));
|
||||
} else if (!empty($deleteelement)) { // Check if we are deleting an element.
|
||||
if (!empty($confirm)) { // Check they have confirmed the deletion.
|
||||
$template->delete_element($deleteelement);
|
||||
} else {
|
||||
// Set deletion flag to true.
|
||||
$deleting = true;
|
||||
// Create the message.
|
||||
$message = get_string('deleteelementconfirm', 'customcert');
|
||||
// Create the link options.
|
||||
$nourl = new moodle_url('/mod/customcert/edit.php', array('tid' => $tid));
|
||||
$yesurl = new moodle_url('/mod/customcert/edit.php', array('tid' => $tid,
|
||||
'deleteelement' => $deleteelement,
|
||||
'confirm' => 1,
|
||||
'sesskey' => sesskey()));
|
||||
}
|
||||
}
|
||||
// Check that there is an element to move, and an element to swap it with.
|
||||
if ($swapcertelement && $movecertelement) {
|
||||
$DB->set_field('customcert_elements', 'sequence', $swapcertelement->sequence, array('id' => $movecertelement->id));
|
||||
$DB->set_field('customcert_elements', 'sequence', $movecertelement->sequence, array('id' => $swapcertelement->id));
|
||||
}
|
||||
} else if (!empty($deletepage)) { // Check if we are deleting a page.
|
||||
if (!empty($confirm)) { // Check they have confirmed the deletion.
|
||||
customcert_delete_page($deletepage);
|
||||
} else {
|
||||
// Set deletion flag to true.
|
||||
$deleting = true;
|
||||
// Create the message.
|
||||
$message = get_string('deletepageconfirm', 'customcert');
|
||||
// Create the link options.
|
||||
$nourl = new moodle_url('/mod/customcert/edit.php', array('cmid' => $cm->id));
|
||||
$yesurl = new moodle_url('/mod/customcert/edit.php', array('cmid' => $cm->id,
|
||||
'deletepage' => $deletepage,
|
||||
'confirm' => 1,
|
||||
'sesskey' => sesskey()));
|
||||
}
|
||||
} else if (!empty($deleteelement)) { // Check if we are deleting an element.
|
||||
if (!empty($confirm)) { // Check they have confirmed the deletion.
|
||||
customcert_delete_element($deleteelement);
|
||||
} else {
|
||||
// Set deletion flag to true.
|
||||
$deleting = true;
|
||||
// Create the message.
|
||||
$message = get_string('deleteelementconfirm', 'customcert');
|
||||
// Create the link options.
|
||||
$nourl = new moodle_url('/mod/customcert/edit.php', array('cmid' => $cm->id));
|
||||
$yesurl = new moodle_url('/mod/customcert/edit.php', array('cmid' => $cm->id,
|
||||
'deleteelement' => $deleteelement,
|
||||
'confirm' => 1,
|
||||
'sesskey' => sesskey()));
|
||||
}
|
||||
}
|
||||
|
||||
// Check if we are deleting either a page or an element.
|
||||
|
@ -138,8 +132,6 @@ if ($deleting) {
|
|||
$strheading = get_string('deleteconfirm', 'customcert');
|
||||
$PAGE->navbar->add($strheading);
|
||||
$PAGE->set_title($strheading);
|
||||
$PAGE->set_heading($course->fullname);
|
||||
$PAGE->set_url('/mod/customcert/edit.php', array('cmid' => $cmid));
|
||||
echo $OUTPUT->header();
|
||||
echo $OUTPUT->heading($strheading);
|
||||
echo $OUTPUT->confirm($message, $yesurl, $nourl);
|
||||
|
@ -147,17 +139,57 @@ if ($deleting) {
|
|||
exit();
|
||||
}
|
||||
|
||||
$mform = new mod_customcert_edit_form('', array('customcertid' => $customcert->id,
|
||||
'cmid' => $cm->id,
|
||||
'course' => $course));
|
||||
if ($tid) {
|
||||
$mform = new \mod_customcert\edit_form($pageurl, array('tid' => $tid));
|
||||
// Set the name for the form.
|
||||
$mform->set_data(array('name' => $template->get_name()));
|
||||
} else {
|
||||
$mform = new \mod_customcert\edit_form($pageurl);
|
||||
}
|
||||
|
||||
if ($data = $mform->get_data()) {
|
||||
// If there is no id, then we are creating a template.
|
||||
if (!$tid) {
|
||||
$template = \mod_customcert\template::create($data->name, $contextid);
|
||||
|
||||
// Create a page for this template.
|
||||
$pageid = $template->add_page();
|
||||
|
||||
// Associate all the data from the form to the newly created page.
|
||||
$width = 'pagewidth_' . $pageid;
|
||||
$height = 'pageheight_' . $pageid;
|
||||
$leftmargin = 'pageleftmargin_' . $pageid;
|
||||
$rightmargin = 'pagerightmargin_' . $pageid;
|
||||
$rightmargin = 'pagerightmargin_' . $pageid;
|
||||
|
||||
// We may also have clicked to add an element, so these need changing as well.
|
||||
if (isset($data->element_1) && isset($data->addelement_1)) {
|
||||
$element = 'element_' . $pageid;
|
||||
$addelement = 'addelement_' . $pageid;
|
||||
$data->$element = $data->element_1;
|
||||
$data->$addelement = $data->addelement_1;
|
||||
|
||||
// Need to remove the temporary element and add element placeholders so we
|
||||
// don't try add an element to the wrong page.
|
||||
unset($data->element_1);
|
||||
unset($data->addelement_1);
|
||||
}
|
||||
|
||||
$data->$width = $data->pagewidth_1;
|
||||
$data->$height = $data->pageheight_1;
|
||||
$data->$leftmargin = $data->pageleftmargin_1;
|
||||
$data->$rightmargin = $data->pagerightmargin_1;
|
||||
}
|
||||
|
||||
// Save any data for the template.
|
||||
$template->save($data);
|
||||
|
||||
// Save any page data.
|
||||
customcert_save_page_data($data);
|
||||
$template->save_page($data);
|
||||
|
||||
// Check if we are adding a page.
|
||||
if (!empty($data->addcertpage)) {
|
||||
customcert_add_page($data);
|
||||
$template->add_page();
|
||||
}
|
||||
|
||||
// Loop through the data.
|
||||
|
@ -171,7 +203,7 @@ if ($data = $mform->get_data()) {
|
|||
$element = $data->$element;
|
||||
// Create the URL to redirect to to add this element.
|
||||
$params = array();
|
||||
$params['cmid'] = $cmid;
|
||||
$params['tid'] = $template->get_id();
|
||||
$params['action'] = 'add';
|
||||
$params['element'] = $element;
|
||||
$params['pageid'] = $pageid;
|
||||
|
@ -182,23 +214,18 @@ if ($data = $mform->get_data()) {
|
|||
|
||||
// Check if we want to preview this custom certificate.
|
||||
if (!empty($data->previewbtn)) {
|
||||
customcert_generate_pdf($customcert, true);
|
||||
$template->generate_pdf(true);
|
||||
}
|
||||
|
||||
// Redirect to the editing page to show form with recent updates.
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $cmid));
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('tid' => $template->get_id()));
|
||||
redirect($url);
|
||||
}
|
||||
|
||||
$PAGE->set_title(get_string('editcustomcert', 'customcert', format_string($customcert->name)));
|
||||
$PAGE->set_heading($course->fullname);
|
||||
$PAGE->set_url('/mod/customcert/edit.php', array('cmid' => $cmid));
|
||||
|
||||
echo $OUTPUT->header();
|
||||
echo $OUTPUT->heading(get_string('editcustomcert', 'customcert'));
|
||||
$mform->display();
|
||||
if (!empty($templates)) {
|
||||
if (isset($loadtemplateform)) {
|
||||
$loadtemplateform->display();
|
||||
}
|
||||
$savetemplateform->display();
|
||||
echo $OUTPUT->footer();
|
||||
|
|
|
@ -23,50 +23,56 @@
|
|||
*/
|
||||
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/edit_element_form.php');
|
||||
|
||||
$cmid = required_param('cmid', PARAM_INT);
|
||||
$tid = required_param('tid', PARAM_INT);
|
||||
$action = required_param('action', PARAM_ALPHA);
|
||||
|
||||
$cm = get_coursemodule_from_id('customcert', $cmid, 0, false, MUST_EXIST);
|
||||
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
|
||||
$customcert = $DB->get_record('customcert', array('id' => $cm->instance), '*', MUST_EXIST);
|
||||
$context = context_module::instance($cm->id);
|
||||
$template = $DB->get_record('customcert_templates', array('id' => $tid), '*', MUST_EXIST);
|
||||
|
||||
// Set the template object.
|
||||
$template = new \mod_customcert\template($template);
|
||||
|
||||
// Perform checks.
|
||||
if ($cm = $template->get_cm()) {
|
||||
require_login($cm->course, false, $cm);
|
||||
} else {
|
||||
require_login();
|
||||
}
|
||||
// Make sure the user has the required capabilities.
|
||||
$template->require_manage();
|
||||
|
||||
if ($action == 'edit') {
|
||||
// The id of the element must be supplied if we are currently editing one.
|
||||
$id = required_param('id', PARAM_INT);
|
||||
$element = $DB->get_record('customcert_elements', array('id' => $id), '*', MUST_EXIST);
|
||||
$pageurl = new moodle_url('/mod/customcert/edit_element.php', array('id' => $id, 'cmid' => $cmid, 'action' => $action));
|
||||
$pageurl = new moodle_url('/mod/customcert/edit_element.php', array('id' => $id, 'tid' => $tid, 'action' => $action));
|
||||
} else { // Must be adding an element.
|
||||
// Page id must be supplied in order to add an element.
|
||||
// We need to supply what element we want added to what page.
|
||||
$pageid = required_param('pageid', PARAM_INT);
|
||||
// Create the new element object, will have no data.
|
||||
$element = new stdClass();
|
||||
$element->element = required_param('element', PARAM_ALPHA);
|
||||
// Set the page url.
|
||||
$params = array();
|
||||
$params['cmid'] = $cmid;
|
||||
$params['action'] = 'add';
|
||||
$params['element'] = $element->element;
|
||||
$params['pageid'] = $pageid;
|
||||
$pageurl = new moodle_url('/mod/customcert/edit_element.php', $params);
|
||||
$pageurl = new moodle_url('/mod/customcert/edit_element.php', array('tid' => $tid, 'element' => $element->element,
|
||||
'pageid' => $pageid, 'action' => $action));
|
||||
}
|
||||
|
||||
require_login($course, false, $cm);
|
||||
// Set up the page.
|
||||
$title = get_string('editelement', 'customcert');
|
||||
\mod_customcert\page_helper::page_setup($pageurl, $template->get_context(), $title);
|
||||
|
||||
require_capability('mod/customcert:manage', $context);
|
||||
// Additional page setup.
|
||||
if ($template->get_context()->contextlevel == CONTEXT_SYSTEM) {
|
||||
$PAGE->navbar->add(get_string('managetemplates', 'customcert'),
|
||||
new moodle_url('/mod/customcert/manage_templates.php'));
|
||||
}
|
||||
$PAGE->navbar->add(get_string('editcustomcert', 'customcert'), new moodle_url('/mod/customcert/edit.php',
|
||||
array('tid' => $tid)));
|
||||
$PAGE->navbar->add($title);
|
||||
|
||||
$PAGE->set_heading($course->fullname);
|
||||
$PAGE->set_title(get_string('editcustomcert', 'customcert', format_string($customcert->name)));
|
||||
$PAGE->set_url($pageurl);
|
||||
|
||||
$mform = new mod_customcert_edit_element_form($pageurl, array('element' => $element, 'course' => $course,
|
||||
'cmid' => $cmid, 'action' => $action));
|
||||
$mform = new \mod_customcert\edit_element_form($pageurl, array('element' => $element));
|
||||
|
||||
// Check if they cancelled.
|
||||
if ($mform->is_cancelled()) {
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $cmid));
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('tid' => $tid));
|
||||
redirect($url);
|
||||
}
|
||||
|
||||
|
@ -80,15 +86,15 @@ if ($data = $mform->get_data()) {
|
|||
// Set the element variable.
|
||||
$data->element = $element->element;
|
||||
// Get an instance of the element class.
|
||||
if ($e = customcert_get_element_instance($data)) {
|
||||
if ($e = \mod_customcert\element::instance($data)) {
|
||||
$e->save_form_elements($data);
|
||||
}
|
||||
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $cmid));
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('tid' => $tid));
|
||||
redirect($url);
|
||||
}
|
||||
|
||||
echo $OUTPUT->header();
|
||||
echo $OUTPUT->heading(get_string('editcustomcert', 'customcert'));
|
||||
echo $OUTPUT->heading(get_string('editelement', 'customcert'));
|
||||
$mform->display();
|
||||
echo $OUTPUT->footer();
|
||||
|
|
|
@ -30,7 +30,7 @@ class element extends \mod_customcert\element {
|
|||
/**
|
||||
* This function renders the form elements when adding a customcert element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function render_form_elements($mform) {
|
||||
// We want to define the width of the border.
|
||||
|
@ -39,7 +39,7 @@ class element extends \mod_customcert\element {
|
|||
$mform->addHelpButton('width', 'width', 'customcertelement_border');
|
||||
|
||||
// The only other thing to define is the colour we want the border to be.
|
||||
parent::render_form_element_colour($mform);
|
||||
\mod_customcert\element_helper::render_form_element_colour($mform);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -62,6 +62,8 @@ class element extends \mod_customcert\element {
|
|||
*
|
||||
* This function is used to render the element when we are using the
|
||||
* drag and drop interface to position it.
|
||||
*
|
||||
* @return string the html
|
||||
*/
|
||||
public function render_html() {
|
||||
return '';
|
||||
|
@ -84,7 +86,7 @@ class element extends \mod_customcert\element {
|
|||
}
|
||||
|
||||
// Validate the colour.
|
||||
$errors += $this->validate_form_element_colour($data);
|
||||
$errors += \mod_customcert\element_helper::validate_form_element_colour($data);
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
@ -92,7 +94,7 @@ class element extends \mod_customcert\element {
|
|||
/**
|
||||
* Sets the data on the form when editing an element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function definition_after_data($mform) {
|
||||
if (!empty($this->element->data)) {
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->component = 'customcertelement_border';
|
||||
|
|
|
@ -38,7 +38,7 @@ class element extends \mod_customcert\element {
|
|||
|
||||
$categoryname = $DB->get_field('course_categories', 'name', array('id' => $COURSE->category), MUST_EXIST);
|
||||
|
||||
parent::render_content($pdf, $categoryname);
|
||||
\mod_customcert\element_helper::render_content($pdf, $this, $categoryname);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -46,12 +46,14 @@ class element extends \mod_customcert\element {
|
|||
*
|
||||
* This function is used to render the element when we are using the
|
||||
* drag and drop interface to position it.
|
||||
*
|
||||
* @return string the html
|
||||
*/
|
||||
public function render_html() {
|
||||
global $DB, $COURSE;
|
||||
|
||||
$categoryname = $DB->get_field('course_categories', 'name', array('id' => $COURSE->category), MUST_EXIST);
|
||||
|
||||
return parent::render_html_content($categoryname);
|
||||
return \mod_customcert\element_helper::render_html_content($this, $categoryname);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->component = 'customcertelement_categoryname';
|
||||
|
|
|
@ -37,7 +37,7 @@ class element extends \mod_customcert\element {
|
|||
global $DB, $USER;
|
||||
|
||||
if ($preview) {
|
||||
$code = customcert_generate_code();
|
||||
$code = \mod_customcert\certificate::generate_code();
|
||||
} else {
|
||||
// Get the page.
|
||||
$page = $DB->get_record('customcert_pages', array('id' => $this->element->pageid), '*', MUST_EXIST);
|
||||
|
@ -46,7 +46,7 @@ class element extends \mod_customcert\element {
|
|||
$code = $issue->code;
|
||||
}
|
||||
|
||||
parent::render_content($pdf, $code);
|
||||
\mod_customcert\element_helper::render_content($pdf, $this, $code);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -54,10 +54,12 @@ class element extends \mod_customcert\element {
|
|||
*
|
||||
* This function is used to render the element when we are using the
|
||||
* drag and drop interface to position it.
|
||||
*
|
||||
* @return string the html
|
||||
*/
|
||||
public function render_html() {
|
||||
$code = customcert_generate_code();
|
||||
$code = \mod_customcert\certificate::generate_code();
|
||||
|
||||
return parent::render_html_content($code);
|
||||
return \mod_customcert\element_helper::render_html_content($this, $code);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->component = 'customcertelement_code';
|
||||
|
|
|
@ -36,7 +36,7 @@ class element extends \mod_customcert\element {
|
|||
public function render($pdf, $preview) {
|
||||
global $COURSE;
|
||||
|
||||
parent::render_content($pdf, $COURSE->fullname);
|
||||
\mod_customcert\element_helper::render_content($pdf, $this, $COURSE->fullname);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -44,10 +44,12 @@ class element extends \mod_customcert\element {
|
|||
*
|
||||
* This function is used to render the element when we are using the
|
||||
* drag and drop interface to position it.
|
||||
*
|
||||
* @return string the html
|
||||
*/
|
||||
public function render_html() {
|
||||
global $COURSE;
|
||||
|
||||
return parent::render_html_content($COURSE->fullname);
|
||||
return \mod_customcert\element_helper::render_html_content($this, $COURSE->fullname);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->component = 'customcertelement_coursename';
|
||||
|
|
|
@ -40,7 +40,7 @@ class element extends \mod_customcert\element {
|
|||
/**
|
||||
* This function renders the form elements when adding a customcert element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function render_form_elements($mform) {
|
||||
// Get the possible date options.
|
||||
|
@ -129,7 +129,7 @@ class element extends \mod_customcert\element {
|
|||
|
||||
// Ensure that a date has been set.
|
||||
if (!empty($date)) {
|
||||
parent::render_content($pdf, $this->get_date_format_string($date, $dateformat));
|
||||
\mod_customcert\element_helper::render_content($pdf, $this, $this->get_date_format_string($date, $dateformat));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -138,6 +138,8 @@ class element extends \mod_customcert\element {
|
|||
*
|
||||
* This function is used to render the element when we are using the
|
||||
* drag and drop interface to position it.
|
||||
*
|
||||
* @return string the html
|
||||
*/
|
||||
public function render_html() {
|
||||
// If there is no element data, we have nothing to display.
|
||||
|
@ -149,13 +151,13 @@ class element extends \mod_customcert\element {
|
|||
$dateinfo = json_decode($this->element->data);
|
||||
$dateformat = $dateinfo->dateformat;
|
||||
|
||||
return parent::render_html_content($this->get_date_format_string(time(), $dateformat));
|
||||
return \mod_customcert\element_helper::render_html_content($this, $this->get_date_format_string(time(), $dateformat));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the data on the form when editing an element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function definition_after_data($mform) {
|
||||
// Set the item and format for this element.
|
||||
|
@ -209,7 +211,7 @@ class element extends \mod_customcert\element {
|
|||
* @param string $dateformat
|
||||
* @return string
|
||||
*/
|
||||
private function get_date_format_string($date, $dateformat) {
|
||||
protected function get_date_format_string($date, $dateformat) {
|
||||
switch ($dateformat) {
|
||||
case 1:
|
||||
$certificatedate = userdate($date, '%B %d, %Y');
|
||||
|
@ -238,7 +240,7 @@ class element extends \mod_customcert\element {
|
|||
* @param int $day the day of the month
|
||||
* @return string the suffix.
|
||||
*/
|
||||
private function get_ordinal_number_suffix($day) {
|
||||
protected function get_ordinal_number_suffix($day) {
|
||||
if (!in_array(($day % 100), array(11, 12, 13))) {
|
||||
switch ($day % 10) {
|
||||
// Handle 1st, 2nd, 3rd.
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->component = 'customcertelement_date';
|
||||
|
|
|
@ -39,7 +39,7 @@ class element extends \mod_customcert\element {
|
|||
/**
|
||||
* This function renders the form elements when adding a customcert element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function render_form_elements($mform) {
|
||||
// Get the grade items we can display.
|
||||
|
@ -104,7 +104,7 @@ class element extends \mod_customcert\element {
|
|||
$grade = self::get_grade($gradeinfo, $USER->id);
|
||||
}
|
||||
|
||||
parent::render_content($pdf, $grade);
|
||||
\mod_customcert\element_helper::render_content($pdf, $this, $grade);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -112,6 +112,8 @@ class element extends \mod_customcert\element {
|
|||
*
|
||||
* This function is used to render the element when we are using the
|
||||
* drag and drop interface to position it.
|
||||
*
|
||||
* @return string the html
|
||||
*/
|
||||
public function render_html() {
|
||||
global $COURSE;
|
||||
|
@ -132,13 +134,13 @@ class element extends \mod_customcert\element {
|
|||
}
|
||||
$grade = grade_format_gradevalue('100', $courseitem, true, $gradeinfo->gradeformat, $decimals);
|
||||
|
||||
return parent::render_html_content($grade);
|
||||
return \mod_customcert\element_helper::render_html_content($this, $grade);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the data on the form when editing an element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function definition_after_data($mform) {
|
||||
// Set the item and format for this element.
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->component = 'customcertelement_grade';
|
||||
|
|
|
@ -30,7 +30,7 @@ class element extends \mod_customcert\element {
|
|||
/**
|
||||
* This function renders the form elements when adding a customcert element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function render_form_elements($mform) {
|
||||
$mform->addElement('select', 'gradeitem', get_string('gradeitem', 'customcertelement_gradeitemname'),
|
||||
|
@ -73,7 +73,7 @@ class element extends \mod_customcert\element {
|
|||
// Get the name of the item.
|
||||
$itemname = $DB->get_field($module->name, 'name', array('id' => $cm->instance), MUST_EXIST);
|
||||
|
||||
parent::render_content($pdf, $itemname);
|
||||
\mod_customcert\element_helper::render_content($pdf, $this, $itemname);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -82,6 +82,8 @@ class element extends \mod_customcert\element {
|
|||
*
|
||||
* This function is used to render the element when we are using the
|
||||
* drag and drop interface to position it.
|
||||
*
|
||||
* @return string the html
|
||||
*/
|
||||
public function render_html() {
|
||||
global $DB;
|
||||
|
@ -95,14 +97,16 @@ class element extends \mod_customcert\element {
|
|||
// Get the name of the item.
|
||||
$itemname = $DB->get_field($module->name, 'name', array('id' => $cm->instance), MUST_EXIST);
|
||||
|
||||
return parent::render_html_content($itemname);
|
||||
return \mod_customcert\element_helper::render_html_content($this, $itemname);
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the data on the form when editing an element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function definition_after_data($mform) {
|
||||
if (!empty($this->element->data)) {
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->component = 'customcertelement_gradeitemname';
|
||||
|
|
|
@ -27,7 +27,7 @@ defined('MOODLE_INTERNAL') || die();
|
|||
*/
|
||||
class element extends \mod_customcert\element {
|
||||
|
||||
private $filemanageroptions = array();
|
||||
protected $filemanageroptions = array();
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
|
@ -49,7 +49,7 @@ class element extends \mod_customcert\element {
|
|||
/**
|
||||
* This function renders the form elements when adding a customcert element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function render_form_elements($mform) {
|
||||
$mform->addElement('select', 'image', get_string('image', 'customcertelement_image'), self::get_images());
|
||||
|
@ -99,7 +99,7 @@ class element extends \mod_customcert\element {
|
|||
}
|
||||
|
||||
// Validate the position.
|
||||
$errors += $this->validate_form_element_position($data);
|
||||
$errors += \mod_customcert\element_helper::validate_form_element_position($data);
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ class element extends \mod_customcert\element {
|
|||
global $COURSE;
|
||||
|
||||
// Handle file uploads.
|
||||
customcert_upload_imagefiles($data->customcertimage, \context_course::instance($COURSE->id)->id);
|
||||
\mod_customcert\certificate::upload_imagefiles($data->customcertimage, \context_course::instance($COURSE->id)->id);
|
||||
|
||||
parent::save_form_elements($data);
|
||||
}
|
||||
|
@ -169,11 +169,13 @@ class element extends \mod_customcert\element {
|
|||
*
|
||||
* This function is used to render the element when we are using the
|
||||
* drag and drop interface to position it.
|
||||
*
|
||||
* @return string the html
|
||||
*/
|
||||
public function render_html() {
|
||||
// If there is no element data, we have nothing to display.
|
||||
if (empty($this->element->data)) {
|
||||
return;
|
||||
return '';
|
||||
}
|
||||
|
||||
$imageinfo = json_decode($this->element->data);
|
||||
|
@ -210,7 +212,7 @@ class element extends \mod_customcert\element {
|
|||
/**
|
||||
* Sets the data on the form when editing an element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function definition_after_data($mform) {
|
||||
global $COURSE;
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->component = 'customcertelement_image';
|
||||
|
|
|
@ -36,7 +36,7 @@ class element extends \mod_customcert\element {
|
|||
public function render($pdf, $preview) {
|
||||
global $USER;
|
||||
|
||||
parent::render_content($pdf, fullname($USER));
|
||||
\mod_customcert\element_helper::render_content($pdf, $this, fullname($USER));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -44,10 +44,12 @@ class element extends \mod_customcert\element {
|
|||
*
|
||||
* This function is used to render the element when we are using the
|
||||
* drag and drop interface to position it.
|
||||
*
|
||||
* @return string the html
|
||||
*/
|
||||
public function render_html() {
|
||||
global $USER;
|
||||
|
||||
return parent::render_html_content(fullname($USER));
|
||||
return \mod_customcert\element_helper::render_html_content($this, fullname($USER));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->component = 'customcertelement_studentname';
|
||||
|
|
|
@ -30,7 +30,7 @@ class element extends \mod_customcert\element {
|
|||
/**
|
||||
* This function renders the form elements when adding a customcert element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function render_form_elements($mform) {
|
||||
$mform->addElement('select', 'teacher', get_string('teacher', 'customcertelement_teachername'),
|
||||
|
@ -65,7 +65,7 @@ class element extends \mod_customcert\element {
|
|||
$teacher = $DB->get_record('user', array('id' => $this->element->data));
|
||||
$teachername = fullname($teacher);
|
||||
|
||||
parent::render_content($pdf, $teachername);
|
||||
\mod_customcert\element_helper::render_content($pdf, $this, $teachername);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -73,6 +73,8 @@ class element extends \mod_customcert\element {
|
|||
*
|
||||
* This function is used to render the element when we are using the
|
||||
* drag and drop interface to position it.
|
||||
*
|
||||
* @return string the html
|
||||
*/
|
||||
public function render_html() {
|
||||
global $DB;
|
||||
|
@ -80,7 +82,7 @@ class element extends \mod_customcert\element {
|
|||
$teacher = $DB->get_record('user', array('id' => $this->element->data));
|
||||
$teachername = fullname($teacher);
|
||||
|
||||
return parent::render_html_content($teachername);
|
||||
return \mod_customcert\element_helper::render_html_content($this, $teachername);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -88,15 +90,14 @@ class element extends \mod_customcert\element {
|
|||
*
|
||||
* @return array the list of teachers
|
||||
*/
|
||||
private function get_list_of_teachers() {
|
||||
// When editing this element the cmid will be present in the URL.
|
||||
$cmid = required_param('cmid', PARAM_INT);
|
||||
protected function get_list_of_teachers() {
|
||||
global $PAGE;
|
||||
|
||||
// The list of teachers to return.
|
||||
$teachers = array();
|
||||
|
||||
// Now return all users who can manage the customcert in this context.
|
||||
if ($users = get_users_by_capability(\context_module::instance($cmid), 'mod/customcert:manage')) {
|
||||
if ($users = get_users_by_capability($PAGE->context, 'mod/customcert:manage')) {
|
||||
foreach ($users as $user) {
|
||||
$teachers[$user->id] = fullname($user);
|
||||
}
|
||||
|
@ -108,7 +109,7 @@ class element extends \mod_customcert\element {
|
|||
/**
|
||||
* Sets the data on the form when editing an element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function definition_after_data($mform) {
|
||||
if (!empty($this->element->data)) {
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->component = 'customcertelement_teachername';
|
||||
|
|
|
@ -30,7 +30,7 @@ class element extends \mod_customcert\element {
|
|||
/**
|
||||
* This function renders the form elements when adding a customcert element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function render_form_elements($mform) {
|
||||
$mform->addElement('textarea', 'text', get_string('text', 'customcertelement_text'));
|
||||
|
@ -58,7 +58,7 @@ class element extends \mod_customcert\element {
|
|||
* @param bool $preview true if it is a preview, false otherwise
|
||||
*/
|
||||
public function render($pdf, $preview) {
|
||||
parent::render_content($pdf, $this->element->data);
|
||||
\mod_customcert\element_helper::render_content($pdf, $this, $this->element->data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -66,15 +66,17 @@ class element extends \mod_customcert\element {
|
|||
*
|
||||
* This function is used to render the element when we are using the
|
||||
* drag and drop interface to position it.
|
||||
*
|
||||
* @return string the html
|
||||
*/
|
||||
public function render_html() {
|
||||
return parent::render_html_content($this->element->data);
|
||||
return \mod_customcert\element_helper::render_html_content($this, $this->element->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the data on the form when editing an element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function definition_after_data($mform) {
|
||||
if (!empty($this->element->data)) {
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->component = 'customcertelement_text';
|
||||
|
|
|
@ -30,7 +30,7 @@ class element extends \mod_customcert\element {
|
|||
/**
|
||||
* This function renders the form elements when adding a customcert element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function render_form_elements($mform) {
|
||||
// Get the user profile fields.
|
||||
|
@ -103,7 +103,7 @@ class element extends \mod_customcert\element {
|
|||
$value = $USER->$field;
|
||||
}
|
||||
|
||||
parent::render_content($pdf, $value);
|
||||
\mod_customcert\element_helper::render_content($pdf, $this, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -127,13 +127,13 @@ class element extends \mod_customcert\element {
|
|||
$value = $USER->$field;
|
||||
}
|
||||
|
||||
return parent::render_html_content($value);
|
||||
return \mod_customcert\element_helper::render_html_content($this, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the data on the form when editing an element.
|
||||
*
|
||||
* @param \mod_customcert_edit_element_form $mform the edit_form instance
|
||||
* @param \mod_customcert\edit_element_form $mform the edit_form instance
|
||||
*/
|
||||
public function definition_after_data($mform) {
|
||||
if (!empty($this->element->data)) {
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->component = 'customcertelement_userfield';
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
*/
|
||||
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/locallib.php');
|
||||
|
||||
$id = required_param('id', PARAM_INT); // Course ID.
|
||||
|
||||
|
@ -33,11 +32,13 @@ $course = $DB->get_record('course', array('id' => $id), '*', MUST_EXIST);
|
|||
require_login($course);
|
||||
|
||||
// Set up the page variables.
|
||||
$pageurl = new moodle_url('/mod/customcert/index.php', array('id' => $course->id));
|
||||
\mod_customcert\page_helper::page_setup($pageurl, CONTEXT_COURSE::instance($id),
|
||||
get_string('modulenameplural', 'customcert'));
|
||||
|
||||
// Additional page setup needed.
|
||||
$PAGE->set_pagelayout('incourse');
|
||||
$PAGE->set_url('/mod/customcert/index.php', array('id' => $course->id));
|
||||
$PAGE->navbar->add(get_string('modulenameplural', 'customcert'));
|
||||
$PAGE->set_title(get_string('modulenameplural', 'customcert'));
|
||||
$PAGE->set_heading($course->fullname);
|
||||
|
||||
// Get the customcerts, if there are none display a notice.
|
||||
if (!$customcerts = get_all_instances_in_course('customcert', $course)) {
|
||||
|
|
|
@ -30,17 +30,22 @@ $string['copy'] = 'Copy';
|
|||
$string['coursetimereq'] = 'Required minutes in course';
|
||||
$string['coursetimereq_help'] = 'Enter here the minimum amount of time, in minutes, that a student must be logged into the course before they will be able to receive
|
||||
the certificate.';
|
||||
$string['createtemplate'] = 'Create template';
|
||||
$string['customcertnameexists'] = 'A certificate already exists with this name';
|
||||
$string['customcertreport'] = 'Custom certificate report';
|
||||
$string['customcert:addinstance'] = 'Add a new custom certificate instance';
|
||||
$string['customcert:manage'] = 'Manage a custom certificate';
|
||||
$string['customcert:view'] = 'View a custom certificate';
|
||||
$string['delete'] = 'Delete';
|
||||
$string['deletecertpage'] = 'Delete certificate page';
|
||||
$string['deleteconfirm'] = 'Delete confirmation';
|
||||
$string['deleteelement'] = 'Delete element';
|
||||
$string['deleteelementconfirm'] = 'Are you sure you want to delete this element?';
|
||||
$string['deletepageconfirm'] = 'Are you sure you want to delete this certificate page?';
|
||||
$string['deletetemplateconfirm'] = 'Are you sure you want to delete this certificate template?';
|
||||
$string['description'] = 'Description';
|
||||
$string['editcustomcert'] = 'Edit custom certificate';
|
||||
$string['editelement'] = 'Edit element';
|
||||
$string['edittemplate'] = 'Edit template';
|
||||
$string['elementname'] = 'Element name';
|
||||
$string['elementname_help'] = 'This will be the name used to identify this element when editing a custom certificate. For example, you may have multiple images on a
|
||||
page and will want to distinguish between them quickly when editing the certificate. Note: this will not displayed on the PDF.';
|
||||
|
@ -48,8 +53,7 @@ $string['elements'] = 'Elements';
|
|||
$string['elements_help'] = 'These are the list of elements that will be displayed on this PDF page.';
|
||||
$string['elementwidth'] = 'Width';
|
||||
$string['elementwidth_help'] = 'Specify the width of the element - \'0\' means that there is no width constraint.';
|
||||
$string['errorloadingelement'] = 'Error loading the element "{$a}"';
|
||||
$string['errorsavingelement'] = 'Error saving the element "{$a}"';
|
||||
|
||||
$string['font'] = 'Font';
|
||||
$string['font_help'] = 'The font used when generating this element.';
|
||||
$string['fontcolour'] = 'Colour';
|
||||
|
@ -57,7 +61,6 @@ $string['fontcolour_help'] = 'The colour of the font.';
|
|||
$string['fontsize'] = 'Size';
|
||||
$string['fontsize_help'] = 'The size of the font in points.';
|
||||
$string['getcustomcert'] = 'Get your custom certificate';
|
||||
$string['gridpdfname'] = 'grid_for_page_{$a}';
|
||||
$string['height'] = 'Height';
|
||||
$string['height_help'] = 'This is the height of the certificate PDF in mm. For reference an A4 piece of paper is 297mm high and a letter is 279mm high.';
|
||||
$string['invalidcolour'] = 'Invalid colour chosen, please enter a valid HTML colour name, or a six-digit, or three-digit hexadecimal colour.';
|
||||
|
@ -73,17 +76,20 @@ $string['leftmargin_help'] = 'This is the left margin of the certificate PDF in
|
|||
$string['load'] = 'Load';
|
||||
$string['loadtemplate'] = 'Load template';
|
||||
$string['loadtemplatemsg'] = 'Are you sure you wish to load this template? This will remove any existing pages and elements for this certificate.';
|
||||
$string['managetemplates'] = 'Manage templates';
|
||||
$string['managetemplatesdesc'] = 'This link will take you to a new screen where you will be able to manage templates used by customcert activities in courses.';
|
||||
$string['modify'] = 'Modify';
|
||||
$string['modulename'] = 'Custom Certificate';
|
||||
$string['modulenameplural'] = 'Custom Certificates';
|
||||
$string['modulename'] = 'Custom certificate';
|
||||
$string['modulenameplural'] = 'Custom certificates';
|
||||
$string['name'] = 'Name';
|
||||
$string['nocustomcerts'] = 'There are no custom certificates for this course';
|
||||
$string['noimage'] = 'No image';
|
||||
$string['notemplates'] = 'No templates';
|
||||
$string['notissued'] = 'Not issued';
|
||||
$string['options'] = 'Options';
|
||||
$string['page'] = 'Page {$a}';
|
||||
$string['pluginadministration'] = 'Custom Certificate administration';
|
||||
$string['pluginname'] = 'Custom Certificate';
|
||||
$string['pluginadministration'] = 'Custom certificate administration';
|
||||
$string['pluginname'] = 'Custom certificate';
|
||||
$string['print'] = 'Print';
|
||||
$string['portrait'] = 'Portrait';
|
||||
$string['posx'] = 'Position X';
|
||||
|
@ -96,7 +102,6 @@ $string['receiveddate'] = 'Received date';
|
|||
$string['refpoint'] = 'Reference point location';
|
||||
$string['refpoint_help'] = 'This specifies which location of the element to be located at position X and position Y.';
|
||||
$string['replacetemplate'] = 'Replace';
|
||||
$string['report'] = 'Report';
|
||||
$string['rightmargin'] = 'Right margin';
|
||||
$string['rightmargin_help'] = 'This is the right margin of the certificate PDF in mm.';
|
||||
$string['save'] = 'Save';
|
||||
|
|
52
lib.php
52
lib.php
|
@ -34,13 +34,19 @@ defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
|||
function customcert_add_instance($data, $mform) {
|
||||
global $DB;
|
||||
|
||||
$data->protection = customcert_set_protection($data);
|
||||
// Create a template for this customcert to use.
|
||||
$context = context_module::instance($data->coursemodule);
|
||||
$template = \mod_customcert\template::create($data->name, $context->id);
|
||||
|
||||
// Add the data to the DB.
|
||||
$data->templateid = $template->get_id();
|
||||
$data->protection = \mod_customcert\certificate::set_protection($data);
|
||||
$data->timecreated = time();
|
||||
$data->timemodified = $data->timecreated;
|
||||
$data->id = $DB->insert_record('customcert', $data);
|
||||
|
||||
// Add a page to this customcert.
|
||||
customcert_add_page($data);
|
||||
$template->add_page();
|
||||
|
||||
return $data->id;
|
||||
}
|
||||
|
@ -55,7 +61,7 @@ function customcert_add_instance($data, $mform) {
|
|||
function customcert_update_instance($data, $mform) {
|
||||
global $DB;
|
||||
|
||||
$data->protection = customcert_set_protection($data);
|
||||
$data->protection = \mod_customcert\certificate::set_protection($data);
|
||||
$data->timemodified = time();
|
||||
$data->id = $data->instance;
|
||||
|
||||
|
@ -74,7 +80,7 @@ function customcert_delete_instance($id) {
|
|||
global $CFG, $DB;
|
||||
|
||||
// Ensure the customcert exists.
|
||||
if (!$DB->get_record('customcert', array('id' => $id))) {
|
||||
if (!$customcert = $DB->get_record('customcert', array('id' => $id))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -88,28 +94,10 @@ function customcert_delete_instance($id) {
|
|||
return false;
|
||||
}
|
||||
|
||||
// Delete the elements.
|
||||
$sql = "SELECT e.*
|
||||
FROM {customcert_elements} e
|
||||
INNER JOIN {customcert_pages} p
|
||||
ON e.pageid = p.id
|
||||
WHERE p.customcertid = :customcertid";
|
||||
if ($elements = $DB->get_records_sql($sql, array('customcertid' => $id))) {
|
||||
require_once($CFG->dirroot . '/mod/customcert/locallib.php');
|
||||
foreach ($elements as $element) {
|
||||
// Get an instance of the element class.
|
||||
if ($e = customcert_get_element_instance($element)) {
|
||||
$e->delete_element();
|
||||
} else {
|
||||
// The plugin files are missing, so just remove the entry from the DB.
|
||||
$DB->delete_records('customcert_elements', array('id' => $element->id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Delete the pages.
|
||||
if (!$DB->delete_records('customcert_pages', array('customcertid' => $id))) {
|
||||
return false;
|
||||
// Now, delete the template associated with this certificate.
|
||||
if ($template = $DB->get_record('customcert_templates', array('id' => $customcert->templateid))) {
|
||||
$template = new \mod_customcert\template($template);
|
||||
$template->delete();
|
||||
}
|
||||
|
||||
// Delete the customcert issues.
|
||||
|
@ -130,7 +118,7 @@ function customcert_delete_instance($id) {
|
|||
* This function will remove all posts from the specified customcert
|
||||
* and clean up any related data.
|
||||
*
|
||||
* @param $data the data submitted from the reset course.
|
||||
* @param stdClass $data the data submitted from the reset course.
|
||||
* @return array status array
|
||||
*/
|
||||
function customcert_reset_userdata($data) {
|
||||
|
@ -235,7 +223,7 @@ function customcert_user_complete($course, $user, $mod, $customcert) {
|
|||
* @param string $filearea
|
||||
* @param array $args
|
||||
* @param bool $forcedownload
|
||||
* @return bool|nothing false if file not found, does not return anything if found - just send the file
|
||||
* @return bool|null false if file not found, does not return anything if found - just send the file
|
||||
*/
|
||||
function customcert_pluginfile($course, $cm, $context, $filearea, $args, $forcedownload) {
|
||||
global $CFG;
|
||||
|
@ -279,8 +267,6 @@ function customcert_supports($feature) {
|
|||
return true;
|
||||
case FEATURE_GROUPINGS:
|
||||
return true;
|
||||
case FEATURE_GROUPMEMBERSONLY:
|
||||
return true;
|
||||
case FEATURE_MOD_INTRO:
|
||||
return true;
|
||||
case FEATURE_COMPLETION_TRACKS_VIEWS:
|
||||
|
@ -327,7 +313,7 @@ function customcert_cron() {
|
|||
* @param navigation_node $customcertnode
|
||||
*/
|
||||
function customcert_extend_settings_navigation(settings_navigation $settings, navigation_node $customcertnode) {
|
||||
global $PAGE;
|
||||
global $DB, $PAGE;
|
||||
|
||||
$keys = $customcertnode->get_children_key_list();
|
||||
$beforekey = null;
|
||||
|
@ -339,8 +325,10 @@ function customcert_extend_settings_navigation(settings_navigation $settings, na
|
|||
}
|
||||
|
||||
if (has_capability('mod/customcert:manage', $PAGE->cm->context)) {
|
||||
// Get the template id.
|
||||
$templateid = $DB->get_field('customcert', 'templateid', array('id' => $PAGE->cm->instance));
|
||||
$node = navigation_node::create(get_string('editcustomcert', 'customcert'),
|
||||
new moodle_url('/mod/customcert/edit.php', array('cmid' => $PAGE->cm->id)),
|
||||
new moodle_url('/mod/customcert/edit.php', array('tid' => $templateid)),
|
||||
navigation_node::TYPE_SETTING, null, 'mod_customcert_edit',
|
||||
new pix_icon('t/edit', ''));
|
||||
$customcertnode->add_node($node, $beforekey);
|
||||
|
|
|
@ -23,22 +23,23 @@
|
|||
*/
|
||||
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/locallib.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/save_template_form.php');
|
||||
|
||||
$cmid = required_param('cmid', PARAM_INT);
|
||||
$tid = required_param('tid', PARAM_INT);
|
||||
$ltid = required_param('ltid', PARAM_INT); // The template to load.
|
||||
$confirm = optional_param('confirm', 0, PARAM_INT);
|
||||
|
||||
$cm = get_coursemodule_from_id('customcert', $cmid, 0, false, MUST_EXIST);
|
||||
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
|
||||
$customcert = $DB->get_record('customcert', array('id' => $cm->instance), '*', MUST_EXIST);
|
||||
$template = $DB->get_record('customcert_template', array('id' => $tid), '*', MUST_EXIST);
|
||||
$context = context_module::instance($cm->id);
|
||||
$template = $DB->get_record('customcert_templates', array('id' => $tid), '*', MUST_EXIST);
|
||||
$template = new \mod_customcert\template($template);
|
||||
|
||||
require_login($course, false, $cm);
|
||||
$loadtemplate = $DB->get_record('customcert_templates', array('id' => $ltid), '*', MUST_EXIST);
|
||||
$loadtemplate = new \mod_customcert\template($loadtemplate);
|
||||
|
||||
require_capability('mod/customcert:manage', $context);
|
||||
if ($cm = $template->get_cm()) {
|
||||
require_login($cm->course, false, $cm);
|
||||
} else {
|
||||
require_login();
|
||||
}
|
||||
$template->require_manage();
|
||||
|
||||
// Check that they have confirmed they wish to load the template.
|
||||
if ($confirm) {
|
||||
|
@ -47,36 +48,34 @@ if ($confirm) {
|
|||
FROM {customcert_elements} e
|
||||
INNER JOIN {customcert_pages} p
|
||||
ON e.pageid = p.id
|
||||
WHERE p.customcertid = :customcertid";
|
||||
if ($elements = $DB->get_records_sql($sql, array('customcertid' => $customcert->id))) {
|
||||
WHERE p.templateid = :templateid";
|
||||
if ($elements = $DB->get_records_sql($sql, array('templateid' => $template->get_id()))) {
|
||||
foreach ($elements as $element) {
|
||||
// Get an instance of the element class.
|
||||
if ($e = customcert_get_element_instance($element)) {
|
||||
$e->delete_element();
|
||||
if ($e = \mod_customcert\element::instance($element)) {
|
||||
$e->delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Delete the pages.
|
||||
$DB->delete_records('customcert_pages', array('customcertid' => $customcert->id));
|
||||
$DB->delete_records('customcert_pages', array('templateid' => $template->get_id()));
|
||||
|
||||
// Store the current time in a variable.
|
||||
$time = time();
|
||||
|
||||
// Now, get the template data.
|
||||
if ($templatepages = $DB->get_records('customcert_template_pages', array('templateid' => $tid))) {
|
||||
// Create an array to store any errors loading an element to a template.
|
||||
$errors = array();
|
||||
// Now, get the template data we want to load.
|
||||
if ($templatepages = $DB->get_records('customcert_pages', array('templateid' => $ltid))) {
|
||||
// Loop through the pages.
|
||||
foreach ($templatepages as $templatepage) {
|
||||
$page = clone($templatepage);
|
||||
$page->customcertid = $customcert->id;
|
||||
$page->templateid = $tid;
|
||||
$page->timecreated = $time;
|
||||
$page->timemodified = $time;
|
||||
// Insert into the database.
|
||||
$page->id = $DB->insert_record('customcert_pages', $page);
|
||||
// Now go through the elements.
|
||||
if ($templateelements = $DB->get_records('customcert_template_elements', array('templatepageid' => $templatepage->id))) {
|
||||
// Now go through the elements we want to load.
|
||||
if ($templateelements = $DB->get_records('customcert_elements', array('pageid' => $templatepage->id))) {
|
||||
foreach ($templateelements as $templateelement) {
|
||||
$element = clone($templateelement);
|
||||
$element->pageid = $page->id;
|
||||
|
@ -85,12 +84,10 @@ if ($confirm) {
|
|||
// Ok, now we want to insert this into the database.
|
||||
$element->id = $DB->insert_record('customcert_elements', $element);
|
||||
// Load any other information the element may need to for the template.
|
||||
if ($e = customcert_get_element_instance($element)) {
|
||||
if (!$e->load_data_from_template($element)) {
|
||||
// Remove from the customcert_elements table.
|
||||
$DB->delete_records('customcert_elements', array('id' => $element->id));
|
||||
// Add the error message to the array to display later.
|
||||
$errors[] = get_string('errorloadingelement', 'customcert', $element->element);
|
||||
if ($e = \mod_customcert\element::instance($element)) {
|
||||
if (!$e->copy_element($templateelement)) {
|
||||
// Failed to copy - delete the element.
|
||||
$e->delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -98,32 +95,21 @@ if ($confirm) {
|
|||
}
|
||||
}
|
||||
|
||||
// Get any errors caused by the loading of an element and put into a message.
|
||||
$message = '';
|
||||
if (!empty($errors)) {
|
||||
foreach ($errors as $e) {
|
||||
$message .= $OUTPUT->notification($e) . '<br />';
|
||||
}
|
||||
}
|
||||
|
||||
// Redirect.
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $cmid));
|
||||
redirect($url, $message);
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('tid' => $tid));
|
||||
redirect($url);
|
||||
}
|
||||
|
||||
|
||||
// Create the link options.
|
||||
$nourl = new moodle_url('/mod/customcert/edit.php', array('cmid' => $cmid));
|
||||
$yesurl = new moodle_url('/mod/customcert/load_template.php', array('cmid' => $cmid,
|
||||
'tid' => $tid,
|
||||
$nourl = new moodle_url('/mod/customcert/edit.php', array('tid' => $tid));
|
||||
$yesurl = new moodle_url('/mod/customcert/load_template.php', array('tid' => $tid,
|
||||
'ltid' => $ltid,
|
||||
'confirm' => 1));
|
||||
|
||||
$pageurl = new moodle_url('/mod/customcert/load_template.php', array('tid' => $tid, 'ltid' => $ltid));
|
||||
\mod_customcert\page_helper::page_setup($pageurl, $template->get_context(), get_string('loadtemplate', 'customcert'));
|
||||
|
||||
// Show a confirmation page.
|
||||
$strheading = get_string('loadtemplate', 'customcert');
|
||||
$PAGE->navbar->add($strheading);
|
||||
$PAGE->set_title($strheading);
|
||||
$PAGE->set_heading($COURSE->fullname);
|
||||
$PAGE->set_url('/mod/customcert/load_template.php', array('cmid' => $cmid, 'tid' => $tid));
|
||||
echo $OUTPUT->header();
|
||||
echo $OUTPUT->heading($strheading);
|
||||
echo $OUTPUT->confirm(get_string('loadtemplatemsg', 'customcert'), $yesurl, $nourl);
|
||||
echo $OUTPUT->footer();
|
697
locallib.php
697
locallib.php
|
@ -1,697 +0,0 @@
|
|||
<?php
|
||||
// This file is part of the customcert module for 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/>.
|
||||
|
||||
/**
|
||||
* Customcert module internal API.
|
||||
*
|
||||
* @package mod_customcert
|
||||
* @copyright 2013 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* @var string the print protection variable
|
||||
*/
|
||||
define('PROTECTION_PRINT', 'print');
|
||||
|
||||
/**
|
||||
* @var string the modify protection variable
|
||||
*/
|
||||
define('PROTECTION_MODIFY', 'modify');
|
||||
|
||||
/**
|
||||
* @var string the copy protection variable
|
||||
*/
|
||||
define('PROTECTION_COPY', 'copy');
|
||||
|
||||
/**
|
||||
* @var int the number of issues that will be displayed on each page in the report
|
||||
* If you want to display all customcerts on a page set this to 0.
|
||||
*/
|
||||
define('CUSTOMCERT_PER_PAGE', 20);
|
||||
|
||||
/**
|
||||
* @var int the max number of issues to display
|
||||
*/
|
||||
define('CUSTOMCERT_MAX_PER_PAGE', 300);
|
||||
|
||||
/**
|
||||
* @var int the top-left of element
|
||||
*/
|
||||
define('CUSTOMCERT_REF_POINT_TOPLEFT', 0);
|
||||
|
||||
/**
|
||||
* @var int the top-center of element
|
||||
*/
|
||||
define('CUSTOMCERT_REF_POINT_TOPCENTER', 1);
|
||||
|
||||
/**
|
||||
* @var int the top-left of element
|
||||
*/
|
||||
define('CUSTOMCERT_REF_POINT_TOPRIGHT', 2);
|
||||
|
||||
/**
|
||||
* Handles setting the protection field for the customcert
|
||||
*
|
||||
* @param stdClass $data
|
||||
* @return string the value to insert into the protection field
|
||||
*/
|
||||
function customcert_set_protection($data) {
|
||||
$protection = array();
|
||||
|
||||
if (!empty($data->protection_print)) {
|
||||
$protection[] = PROTECTION_PRINT;
|
||||
}
|
||||
if (!empty($data->protection_modify)) {
|
||||
$protection[] = PROTECTION_MODIFY;
|
||||
}
|
||||
if (!empty($data->protection_copy)) {
|
||||
$protection[] = PROTECTION_COPY;
|
||||
}
|
||||
|
||||
// Return the protection string.
|
||||
return implode(', ', $protection);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles uploading an image for the customcert module.
|
||||
*
|
||||
* @param int $draftitemid the draft area containing the files
|
||||
* @param int $contextid the context we are storing this image in
|
||||
*/
|
||||
function customcert_upload_imagefiles($draftitemid, $contextid) {
|
||||
// Save the file if it exists that is currently in the draft area.
|
||||
file_save_draft_area_files($draftitemid, $contextid, 'mod_customcert', 'image', 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of possible elements to add.
|
||||
*
|
||||
* @return array the list of images that can be used.
|
||||
*/
|
||||
function customcert_get_elements() {
|
||||
global $CFG;
|
||||
|
||||
// Array to store the element types.
|
||||
$options = array();
|
||||
|
||||
// Check that the directory exists.
|
||||
$elementdir = "$CFG->dirroot/mod/customcert/element";
|
||||
if (file_exists($elementdir)) {
|
||||
// Get directory contents.
|
||||
$elementfolders = new DirectoryIterator($elementdir);
|
||||
// Loop through the elements folder.
|
||||
foreach ($elementfolders as $elementfolder) {
|
||||
// If it is not a directory or it is '.' or '..', skip it.
|
||||
if (!$elementfolder->isDir() || $elementfolder->isDot()) {
|
||||
continue;
|
||||
}
|
||||
// Check that the standard class exists, if not we do
|
||||
// not want to display it as an option as it will not work.
|
||||
$foldername = $elementfolder->getFilename();
|
||||
// Get the class name.
|
||||
$classname = '\\customcertelement_' . $foldername . '\\element';
|
||||
// Ensure the necessary class exists.
|
||||
if (class_exists($classname)) {
|
||||
$component = "customcertelement_{$foldername}";
|
||||
$options[$foldername] = get_string('pluginname', $component);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
core_collator::asort($options);
|
||||
return $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of possible fonts to use.
|
||||
*/
|
||||
function customcert_get_fonts() {
|
||||
global $CFG;
|
||||
|
||||
// Array to store the available fonts.
|
||||
$options = array();
|
||||
|
||||
// Location of fonts in Moodle.
|
||||
$fontdir = "$CFG->dirroot/lib/tcpdf/fonts";
|
||||
// Check that the directory exists.
|
||||
if (file_exists($fontdir)) {
|
||||
// Get directory contents.
|
||||
$fonts = new DirectoryIterator($fontdir);
|
||||
// Loop through the font folder.
|
||||
foreach ($fonts as $font) {
|
||||
// If it is not a file, or either '.' or '..', or
|
||||
// the extension is not php, or we can not open file,
|
||||
// skip it.
|
||||
if (!$font->isFile() || $font->isDot() || ($font->getExtension() != 'php')) {
|
||||
continue;
|
||||
}
|
||||
// Set the name of the font to null, the include next should then set this
|
||||
// value, if it is not set then the file does not include the necessary data.
|
||||
$name = null;
|
||||
// Some files include a display name, the include next should then set this
|
||||
// value if it is present, if not then $name is used to create the display name.
|
||||
$displayname = null;
|
||||
// Some of the TCPDF files include files that are not present, so we have to
|
||||
// suppress warnings, this is the TCPDF libraries fault, grrr.
|
||||
@include("$fontdir/$font");
|
||||
// If no $name variable in file, skip it.
|
||||
if (is_null($name)) {
|
||||
continue;
|
||||
}
|
||||
// Remove the extension of the ".php" file that contains the font information.
|
||||
$filename = basename($font, ".php");
|
||||
// Check if there is no display name to use.
|
||||
if (is_null($displayname)) {
|
||||
// Format the font name, so "FontName-Style" becomes "Font Name - Style".
|
||||
$displayname = preg_replace("/([a-z])([A-Z])/", "$1 $2", $name);
|
||||
$displayname = preg_replace("/([a-zA-Z])-([a-zA-Z])/", "$1 - $2", $displayname);
|
||||
}
|
||||
$options[$filename] = $displayname;
|
||||
}
|
||||
ksort($options);
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of possible font sizes to use.
|
||||
*/
|
||||
function customcert_get_font_sizes() {
|
||||
// Array to store the sizes.
|
||||
$sizes = array();
|
||||
|
||||
for ($i = 1; $i <= 60; $i++) {
|
||||
$sizes[$i] = $i;
|
||||
}
|
||||
|
||||
return $sizes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles saving page data.
|
||||
*
|
||||
* @param stdClass $data the customcert data
|
||||
*/
|
||||
function customcert_save_page_data($data) {
|
||||
global $DB;
|
||||
|
||||
// Set the time to a variable.
|
||||
$time = time();
|
||||
|
||||
// Get the existing pages and save the page data.
|
||||
if ($pages = $DB->get_records('customcert_pages', array('customcertid' => $data->id))) {
|
||||
// Loop through existing pages.
|
||||
foreach ($pages as $page) {
|
||||
// Get the name of the fields we want from the form.
|
||||
$width = 'pagewidth_' . $page->id;
|
||||
$height = 'pageheight_' . $page->id;
|
||||
$leftmargin = 'pageleftmargin_' . $page->id;
|
||||
$rightmargin = 'pagerightmargin_' . $page->id;
|
||||
// Create the page data to update the DB with.
|
||||
$p = new stdClass();
|
||||
$p->id = $page->id;
|
||||
$p->width = $data->$width;
|
||||
$p->height = $data->$height;
|
||||
$p->leftmargin = $data->$leftmargin;
|
||||
$p->rightmargin = $data->$rightmargin;
|
||||
$p->timemodified = $time;
|
||||
// Update the page.
|
||||
$DB->update_record('customcert_pages', $p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an instance of the element class.
|
||||
*
|
||||
* @param stdClass $element the element
|
||||
* @return stdClass|bool returns the instance of the element class, or false if element
|
||||
* class does not exists.
|
||||
*/
|
||||
function customcert_get_element_instance($element) {
|
||||
// Get the class name.
|
||||
$classname = '\\customcertelement_' . $element->element . '\\element';
|
||||
|
||||
// Ensure the necessary class exists.
|
||||
if (class_exists($classname)) {
|
||||
return new $classname($element);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles adding another page to the customcert.
|
||||
*
|
||||
* @param stdClass $data the form data
|
||||
*/
|
||||
function customcert_add_page($data) {
|
||||
global $DB;
|
||||
|
||||
// Set the page number to 1 to begin with.
|
||||
$pagenumber = 1;
|
||||
// Get the max page number.
|
||||
$sql = "SELECT MAX(pagenumber) as maxpage
|
||||
FROM {customcert_pages} cp
|
||||
WHERE cp.customcertid = :customcertid";
|
||||
if ($maxpage = $DB->get_record_sql($sql, array('customcertid' => $data->id))) {
|
||||
$pagenumber = $maxpage->maxpage + 1;
|
||||
}
|
||||
|
||||
// Store time in a variable.
|
||||
$time = time();
|
||||
|
||||
// New page creation.
|
||||
$page = new stdClass();
|
||||
$page->customcertid = $data->id;
|
||||
$page->width = '210';
|
||||
$page->height = '297';
|
||||
$page->pagenumber = $pagenumber;
|
||||
$page->timecreated = $time;
|
||||
$page->timemodified = $time;
|
||||
|
||||
// Insert the page.
|
||||
$DB->insert_record('customcert_pages', $page);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles deleting an element from the customcert.
|
||||
*
|
||||
* @param int $elementid the customcert page
|
||||
*/
|
||||
function customcert_delete_element($elementid) {
|
||||
global $DB;
|
||||
|
||||
// Ensure element exists and delete it.
|
||||
$element = $DB->get_record('customcert_elements', array('id' => $elementid), '*', MUST_EXIST);
|
||||
|
||||
// Get an instance of the element class.
|
||||
if ($e = customcert_get_element_instance($element)) {
|
||||
$e->delete_element();
|
||||
} else {
|
||||
// The plugin files are missing, so just remove the entry from the DB.
|
||||
$DB->delete_records('customcert_elements', array('id' => $elementid));
|
||||
}
|
||||
|
||||
// Now we want to decrease the sequence numbers of the elements
|
||||
// that are greater than the element we deleted.
|
||||
$sql = "UPDATE {customcert_elements}
|
||||
SET sequence = sequence - 1
|
||||
WHERE pageid = :pageid
|
||||
AND sequence > :sequence";
|
||||
$DB->execute($sql, array('pageid' => $element->pageid, 'sequence' => $element->sequence));
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles deleting a page from the customcert.
|
||||
*
|
||||
* @param int $pageid the customcert page
|
||||
*/
|
||||
function customcert_delete_page($pageid) {
|
||||
global $DB;
|
||||
|
||||
// Get the page.
|
||||
$page = $DB->get_record('customcert_pages', array('id' => $pageid), '*', MUST_EXIST);
|
||||
|
||||
// Delete this page.
|
||||
$DB->delete_records('customcert_pages', array('id' => $page->id));
|
||||
|
||||
// The element may have some extra tasks it needs to complete to completely delete itself.
|
||||
if ($elements = $DB->get_records('customcert_elements', array('pageid' => $page->id))) {
|
||||
foreach ($elements as $element) {
|
||||
// Get an instance of the element class.
|
||||
if ($e = customcert_get_element_instance($element)) {
|
||||
$e->delete_element();
|
||||
} else {
|
||||
// The plugin files are missing, so just remove the entry from the DB.
|
||||
$DB->delete_records('customcert_elements', array('id' => $element->id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Now we want to decrease the page number values of
|
||||
// the pages that are greater than the page we deleted.
|
||||
$sql = "UPDATE {customcert_pages}
|
||||
SET pagenumber = pagenumber - 1
|
||||
WHERE customcertid = :customcertid
|
||||
AND pagenumber > :pagenumber";
|
||||
$DB->execute($sql, array('customcertid' => $page->customcertid, 'pagenumber' => $page->pagenumber));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of all the templates.
|
||||
*
|
||||
* @return bool returns true if success, false otherwise
|
||||
*/
|
||||
function customcert_get_templates() {
|
||||
global $DB;
|
||||
|
||||
return $DB->get_records_menu('customcert_template', array(), 'name ASC', 'id, name');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the time the user has spent in the course.
|
||||
*
|
||||
* @param int $courseid
|
||||
* @return int the total time spent in seconds
|
||||
*/
|
||||
function customcert_get_course_time($courseid) {
|
||||
global $CFG, $DB, $USER;
|
||||
|
||||
$logmanager = get_log_manager();
|
||||
$readers = $logmanager->get_readers();
|
||||
$enabledreaders = get_config('tool_log', 'enabled_stores');
|
||||
$enabledreaders = explode(',', $enabledreaders);
|
||||
|
||||
// Go through all the readers until we find one that we can use.
|
||||
foreach ($enabledreaders as $enabledreader) {
|
||||
$reader = $readers[$enabledreader];
|
||||
if ($reader instanceof \logstore_legacy\log\store) {
|
||||
$logtable = 'log';
|
||||
$coursefield = 'course';
|
||||
$timefield = 'time';
|
||||
break;
|
||||
} else if ($reader instanceof \core\log\sql_internal_reader) {
|
||||
$logtable = $reader->get_internal_log_table_name();
|
||||
$coursefield = 'courseid';
|
||||
$timefield = 'timecreated';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If we didn't find a reader then return 0.
|
||||
if (!isset($logtable)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$sql = "SELECT id, $timefield
|
||||
FROM {{$logtable}}
|
||||
WHERE userid = :userid
|
||||
AND $coursefield = :courseid
|
||||
ORDER BY $timefield ASC";
|
||||
$params = array('userid' => $USER->id, 'courseid' => $courseid);
|
||||
$totaltime = 0;
|
||||
if ($logs = $DB->get_recordset_sql($sql, $params)) {
|
||||
foreach ($logs as $log) {
|
||||
if (!isset($login)) {
|
||||
// For the first time $login is not set so the first log is also the first login
|
||||
$login = $log->$timefield;
|
||||
$lasthit = $log->$timefield;
|
||||
$totaltime = 0;
|
||||
}
|
||||
$delay = $log->$timefield - $lasthit;
|
||||
if ($delay > ($CFG->sessiontimeout * 60)) {
|
||||
// The difference between the last log and the current log is more than
|
||||
// the timeout Register session value so that we have found a session!
|
||||
$login = $log->$timefield;
|
||||
} else {
|
||||
$totaltime += $delay;
|
||||
}
|
||||
// Now the actual log became the previous log for the next cycle
|
||||
$lasthit = $log->$timefield;
|
||||
}
|
||||
|
||||
return $totaltime;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of issued customcerts.
|
||||
*
|
||||
* @param int $customcertid
|
||||
* @param bool $groupmode are we in group mode
|
||||
* @param stdClass $cm the course module
|
||||
* @param int $page offset
|
||||
* @param int $perpage total per page
|
||||
* @return stdClass the users
|
||||
*/
|
||||
function customcert_get_issues($customcertid, $groupmode, $cm, $page, $perpage) {
|
||||
global $DB;
|
||||
|
||||
// Get the conditional SQL.
|
||||
list($conditionssql, $conditionsparams) = customcert_get_conditional_issues_sql($cm, $groupmode);
|
||||
|
||||
// If it is empty then return an empty array.
|
||||
if (empty($conditionsparams)) {
|
||||
return array();
|
||||
}
|
||||
|
||||
// Add the conditional SQL and the customcertid to form all used parameters.
|
||||
$allparams = $conditionsparams + array('customcertid' => $customcertid);
|
||||
|
||||
// Return the issues.
|
||||
$sql = "SELECT u.*, ci.code, ci.timecreated
|
||||
FROM {user} u
|
||||
INNER JOIN {customcert_issues} ci
|
||||
ON u.id = ci.userid
|
||||
WHERE u.deleted = 0
|
||||
AND ci.customcertid = :customcertid
|
||||
$conditionssql
|
||||
ORDER BY " . $DB->sql_fullname();
|
||||
return $DB->get_records_sql($sql, $allparams, $page * $perpage, $perpage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total number of issues for a given customcert.
|
||||
*
|
||||
* @param int $customcertid
|
||||
* @param stdClass $cm the course module
|
||||
* @param bool $groupmode the group mode
|
||||
* @return int the number of issues
|
||||
*/
|
||||
function customcert_get_number_of_issues($customcertid, $cm, $groupmode) {
|
||||
global $DB;
|
||||
|
||||
// Get the conditional SQL.
|
||||
list($conditionssql, $conditionsparams) = customcert_get_conditional_issues_sql($cm, $groupmode);
|
||||
|
||||
// If it is empty then return 0.
|
||||
if (empty($conditionsparams)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Add the conditional SQL and the customcertid to form all used parameters.
|
||||
$allparams = $conditionsparams + array('customcertid' => $customcertid);
|
||||
|
||||
// Return the number of issues.
|
||||
$sql = "SELECT COUNT(u.id) as count
|
||||
FROM {user} u
|
||||
INNER JOIN {customcert_issues} ci
|
||||
ON u.id = ci.userid
|
||||
WHERE u.deleted = 0
|
||||
AND ci.customcertid = :customcertid
|
||||
$conditionssql";
|
||||
return $DB->count_records_sql($sql, $allparams);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of the conditional variables to use in the get_issues SQL query.
|
||||
*
|
||||
* @param stdClass $cm the course module
|
||||
* @param bool $groupmode are we in group mode ?
|
||||
* @return array the conditional variables
|
||||
*/
|
||||
function customcert_get_conditional_issues_sql($cm, $groupmode) {
|
||||
global $DB, $USER;
|
||||
|
||||
// Get all users that can manage this customcert to exclude them from the report.
|
||||
$context = context_module::instance($cm->id);
|
||||
$conditionssql = '';
|
||||
$conditionsparams = array();
|
||||
|
||||
// Get all users that can manage this certificate to exclude them from the report.
|
||||
$certmanagers = array_keys(get_users_by_capability($context, 'mod/certificate:manage', 'u.id'));
|
||||
$certmanagers = array_merge($certmanagers, array_keys(get_admins()));
|
||||
list($sql, $params) = $DB->get_in_or_equal($certmanagers, SQL_PARAMS_NAMED, 'cert');
|
||||
$conditionssql .= "AND NOT u.id $sql \n";
|
||||
$conditionsparams += $params;
|
||||
|
||||
if ($groupmode) {
|
||||
$canaccessallgroups = has_capability('moodle/site:accessallgroups', $context);
|
||||
$currentgroup = groups_get_activity_group($cm);
|
||||
|
||||
// If we are viewing all participants and the user does not have access to all groups then return nothing.
|
||||
if (!$currentgroup && !$canaccessallgroups) {
|
||||
return array('', array());
|
||||
}
|
||||
|
||||
if ($currentgroup) {
|
||||
if (!$canaccessallgroups) {
|
||||
// Guest users do not belong to any groups.
|
||||
if (isguestuser()) {
|
||||
return array('', array());
|
||||
}
|
||||
|
||||
// Check that the user belongs to the group we are viewing.
|
||||
$usersgroups = groups_get_all_groups($cm->course, $USER->id, $cm->groupingid);
|
||||
if ($usersgroups) {
|
||||
if (!isset($usersgroups[$currentgroup])) {
|
||||
return array('', array());
|
||||
}
|
||||
} else { // They belong to no group, so return an empty array.
|
||||
return array('', array());
|
||||
}
|
||||
}
|
||||
|
||||
$groupusers = array_keys(groups_get_members($currentgroup, 'u.*'));
|
||||
if (empty($groupusers)) {
|
||||
return array('', array());
|
||||
}
|
||||
|
||||
list($sql, $params) = $DB->get_in_or_equal($groupusers, SQL_PARAMS_NAMED, 'grp');
|
||||
$conditionssql .= "AND u.id $sql ";
|
||||
$conditionsparams += $params;
|
||||
}
|
||||
}
|
||||
|
||||
return array($conditionssql, $conditionsparams);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a 10-digit code of random letters and numbers.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function customcert_generate_code() {
|
||||
global $DB;
|
||||
|
||||
$uniquecodefound = false;
|
||||
$code = random_string(10);
|
||||
while (!$uniquecodefound) {
|
||||
if (!$DB->record_exists('customcert_issues', array('code' => $code))) {
|
||||
$uniquecodefound = true;
|
||||
} else {
|
||||
$code = random_string(10);
|
||||
}
|
||||
}
|
||||
|
||||
return $code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the PDF for the specified customcert and user.
|
||||
*
|
||||
* @param stdClass $customcert
|
||||
* @param bool $preview true if it is a preview, false otherwise
|
||||
*/
|
||||
function customcert_generate_pdf($customcert, $preview = false) {
|
||||
global $CFG, $DB;
|
||||
|
||||
require_once($CFG->libdir . '/pdflib.php');
|
||||
|
||||
// Get the pages for the customcert, there should always be at least one page for each customcert.
|
||||
if ($pages = $DB->get_records('customcert_pages', array('customcertid' => $customcert->id), 'pagenumber ASC')) {
|
||||
// Create the pdf object.
|
||||
$pdf = new pdf();
|
||||
if (!empty($customcert->protection)) {
|
||||
$protection = explode(', ', $customcert->protection);
|
||||
$pdf->SetProtection($protection);
|
||||
}
|
||||
$pdf->setPrintHeader(false);
|
||||
$pdf->setPrintFooter(false);
|
||||
$pdf->SetTitle($customcert->name);
|
||||
$pdf->SetAutoPageBreak(true, 0);
|
||||
// Remove full-stop at the end, if it exists, to avoid "..pdf" being created and being filtered by clean_filename.
|
||||
$filename = rtrim($customcert->name, '.');
|
||||
$filename = clean_filename($filename . '.pdf');
|
||||
// Loop through the pages and display their content.
|
||||
foreach ($pages as $page) {
|
||||
// Add the page to the PDF.
|
||||
if ($page->width > $page->height) {
|
||||
$orientation = 'L';
|
||||
} else {
|
||||
$orientation = 'P';
|
||||
}
|
||||
$pdf->AddPage($orientation, array($page->width, $page->height));
|
||||
$pdf->SetMargins($page->leftmargin, 0, $page->rightmargin);
|
||||
// Get the elements for the page.
|
||||
if ($elements = $DB->get_records('customcert_elements', array('pageid' => $page->id), 'sequence ASC')) {
|
||||
// Loop through and display.
|
||||
foreach ($elements as $element) {
|
||||
// Get an instance of the element class.
|
||||
if ($e = customcert_get_element_instance($element)) {
|
||||
$e->render($pdf, $preview);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$pdf->Output($filename, 'D');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the report.
|
||||
*
|
||||
* @param stdClass $customcert
|
||||
* @param stdClass $users the list of users who have had a customcert issued
|
||||
* @param string $type
|
||||
*/
|
||||
function customcert_generate_report_file($customcert, $users, $type) {
|
||||
global $CFG, $COURSE;
|
||||
|
||||
if ($type == 'ods') {
|
||||
require_once($CFG->libdir . '/odslib.class.php');
|
||||
$workbook = new MoodleODSWorkbook('-');
|
||||
} else if ($type == 'xls') {
|
||||
require_once($CFG->libdir . '/excellib.class.php');
|
||||
$workbook = new MoodleExcelWorkbook('-');
|
||||
}
|
||||
|
||||
$filename = clean_filename($COURSE->shortname . ' ' . rtrim($customcert->name, '.') . '.' . $type);
|
||||
|
||||
// Send HTTP headers.
|
||||
$workbook->send($filename);
|
||||
|
||||
// Creating the first worksheet.
|
||||
$myxls = $workbook->add_worksheet(get_string('report', 'customcert'));
|
||||
|
||||
// Print names of all the fields.
|
||||
$myxls->write_string(0, 0, get_string('lastname'));
|
||||
$myxls->write_string(0, 1, get_string('firstname'));
|
||||
$myxls->write_string(0, 2, get_string('idnumber'));
|
||||
$myxls->write_string(0, 3, get_string('group'));
|
||||
$myxls->write_string(0, 4, get_string('receiveddate', 'customcert'));
|
||||
$myxls->write_string(0, 5, get_string('code', 'customcert'));
|
||||
|
||||
// Generate the data for the body of the spreadsheet.
|
||||
$row = 1;
|
||||
if ($users) {
|
||||
foreach ($users as $user) {
|
||||
$myxls->write_string($row, 0, $user->lastname);
|
||||
$myxls->write_string($row, 1, $user->firstname);
|
||||
$studentid = (!empty($user->idnumber)) ? $user->idnumber : ' ';
|
||||
$myxls->write_string($row, 2, $studentid);
|
||||
$ug2 = '';
|
||||
if ($usergrps = groups_get_all_groups($COURSE->id, $user->id)) {
|
||||
foreach ($usergrps as $ug) {
|
||||
$ug2 = $ug2 . $ug->name;
|
||||
}
|
||||
}
|
||||
$myxls->write_string($row, 3, $ug2);
|
||||
$myxls->write_string($row, 4, userdate($user->timecreated));
|
||||
$myxls->write_string($row, 5, $user->code);
|
||||
$row++;
|
||||
}
|
||||
}
|
||||
// Close the workbook.
|
||||
$workbook->close();
|
||||
}
|
115
manage_templates.php
Normal file
115
manage_templates.php
Normal file
|
@ -0,0 +1,115 @@
|
|||
<?php
|
||||
// This file is part of the customcert module for 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/>.
|
||||
|
||||
/**
|
||||
* Manage customcert templates.
|
||||
*
|
||||
* @package mod_customcert
|
||||
* @copyright 2016 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require_once('../../config.php');
|
||||
|
||||
$contextid = optional_param('contextid', CONTEXT_SYSTEM::instance()->id, PARAM_INT);
|
||||
$action = optional_param('action', '', PARAM_ALPHA);
|
||||
$confirm = optional_param('confirm', 0, PARAM_INT);
|
||||
|
||||
if ($action) {
|
||||
$tid = required_param('tid', PARAM_INT);
|
||||
} else {
|
||||
$tid = optional_param('tid', 0, PARAM_INT);
|
||||
}
|
||||
|
||||
if ($tid) {
|
||||
$template = $DB->get_record('customcert_templates', array('id' => $tid), '*', MUST_EXIST);
|
||||
$template = new \mod_customcert\template($template);
|
||||
}
|
||||
|
||||
$context = context::instance_by_id($contextid);
|
||||
|
||||
require_login();
|
||||
require_capability('mod/customcert:manage', $context);
|
||||
|
||||
// Set up the page.
|
||||
$pageurl = new moodle_url('/mod/customcert/manage_templates.php');
|
||||
\mod_customcert\page_helper::page_setup($pageurl, $context, get_string('managetemplates', 'customcert'));
|
||||
|
||||
// Additional page setup.
|
||||
$PAGE->navbar->add(get_string('managetemplates', 'customcert'));
|
||||
|
||||
// Check if we are deleting a template.
|
||||
if ($tid) {
|
||||
if ($action == 'delete') {
|
||||
if (!$confirm) {
|
||||
$nourl = new moodle_url('/mod/customcert/manage_templates.php');
|
||||
$yesurl = new moodle_url('/mod/customcert/manage_templates.php', array('tid' => $tid,
|
||||
'action' => 'delete',
|
||||
'confirm' => 1,
|
||||
'sesskey' => sesskey()));
|
||||
|
||||
// Show a confirmation page.
|
||||
$strheading = get_string('deleteconfirm', 'customcert');
|
||||
$PAGE->navbar->add($strheading);
|
||||
$PAGE->set_title($strheading);
|
||||
$message = get_string('deletetemplateconfirm', 'customcert');
|
||||
echo $OUTPUT->header();
|
||||
echo $OUTPUT->heading($strheading);
|
||||
echo $OUTPUT->confirm($message, $yesurl, $nourl);
|
||||
echo $OUTPUT->footer();
|
||||
exit();
|
||||
}
|
||||
|
||||
// Delete the template.
|
||||
$template->delete();
|
||||
|
||||
// Redirect back to the manage templates page.
|
||||
redirect(new moodle_url('/mod/customcert/manage_templates.php'));
|
||||
}
|
||||
}
|
||||
// Get all the templates that are available.
|
||||
if ($templates = $DB->get_records('customcert_templates', array('contextid' => $contextid), 'timecreated DESC')) {
|
||||
// Create a table to display these elements.
|
||||
$table = new html_table();
|
||||
$table->head = array(get_string('name', 'customcert'), '');
|
||||
$table->align = array('left', 'center');
|
||||
|
||||
foreach ($templates as $template) {
|
||||
// Link to edit the element.
|
||||
$editlink = new \moodle_url('/mod/customcert/edit.php', array('tid' => $template->id));
|
||||
$editicon = $OUTPUT->action_icon($editlink, new \pix_icon('t/edit', get_string('edit')));
|
||||
|
||||
// Link to delete the element.
|
||||
$deletelink = new \moodle_url('/mod/customcert/manage_templates.php', array('tid' => $template->id,
|
||||
'action' => 'delete'));
|
||||
$deleteicon = $OUTPUT->action_icon($deletelink, new \pix_icon('t/delete', get_string('delete')));
|
||||
|
||||
$row = new html_table_row();
|
||||
$row->cells[] = $template->name;
|
||||
$row->cells[] = $editicon . $deleteicon;
|
||||
$table->data[] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
echo $OUTPUT->header();
|
||||
if (isset($table)) {
|
||||
echo html_writer::table($table);
|
||||
} else {
|
||||
echo html_writer::tag('div', get_string('notemplates', 'customcert'), array('class' => 'alert'));
|
||||
}
|
||||
$url = new moodle_url('/mod/customcert/edit.php?action=add&contextid=' . $contextid);
|
||||
echo $OUTPUT->single_button($url, get_string('createtemplate', 'customcert'), 'get');
|
||||
echo $OUTPUT->footer();
|
|
@ -17,7 +17,6 @@
|
|||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
require_once($CFG->dirroot.'/course/moodleform_mod.php');
|
||||
require_once($CFG->dirroot.'/mod/customcert/locallib.php');
|
||||
|
||||
/**
|
||||
* Instance add/edit form.
|
||||
|
|
BIN
pix/dash.gif
BIN
pix/dash.gif
Binary file not shown.
Before Width: | Height: | Size: 48 B |
|
@ -23,26 +23,28 @@
|
|||
*/
|
||||
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/locallib.php');
|
||||
|
||||
// The page of the customcert we are editing.
|
||||
$pid = required_param('id', PARAM_INT);
|
||||
$pid = required_param('pid', PARAM_INT);
|
||||
|
||||
$page = $DB->get_record('customcert_pages', array('id' => $pid), '*', MUST_EXIST);
|
||||
$template = $DB->get_record('customcert_templates', array('id' => $page->templateid), '*', MUST_EXIST);
|
||||
$elements = $DB->get_records('customcert_elements', array('pageid' => $pid), 'sequence');
|
||||
$cm = get_coursemodule_from_instance('customcert', $page->customcertid, 0, false, MUST_EXIST);
|
||||
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
|
||||
$context = context_module::instance($cm->id);
|
||||
|
||||
require_login($course, false, $cm);
|
||||
|
||||
require_capability('mod/customcert:manage', $context);
|
||||
// Set the template.
|
||||
$template = new \mod_customcert\template($template);
|
||||
// Perform checks.
|
||||
if ($cm = $template->get_cm()) {
|
||||
require_login($cm->course, false, $cm);
|
||||
} else {
|
||||
require_login();
|
||||
}
|
||||
// Make sure the user has the required capabilities.
|
||||
$template->require_manage();
|
||||
|
||||
// Set the $PAGE settings.
|
||||
$PAGE->set_url(new moodle_url('/mod/customcert/rearrange.php', array('id' => $pid)));
|
||||
$PAGE->set_pagetype('mod-customcert-position');
|
||||
$PAGE->set_title(get_string('rearrangeelements', 'customcert'));
|
||||
$PAGE->set_heading($course->fullname);
|
||||
$pageurl = new moodle_url('/mod/customcert/rearrange.php', array('pid' => $pid));
|
||||
\mod_customcert\page_helper::page_setup($pageurl, $template->get_context(), get_string('rearrangeelements', 'customcert'));
|
||||
|
||||
// Include the JS we need.
|
||||
$module = array(
|
||||
|
@ -50,15 +52,15 @@ $module = array(
|
|||
'fullpath' => '/mod/customcert/yui/src/rearrange.js',
|
||||
'requires' => array('dd-delegate', 'dd-drag')
|
||||
);
|
||||
$PAGE->requires->js_init_call('M.mod_customcert.rearrange.init', array($cm->id, $page, $elements), false, $module);
|
||||
$PAGE->requires->js_init_call('M.mod_customcert.rearrange.init', array($template->get_id(), $page, $elements), false, $module);
|
||||
|
||||
// Create the buttons to save the position of the elements.
|
||||
$html = html_writer::start_tag('div', array('class' => 'buttons'));
|
||||
$html .= $OUTPUT->single_button(new moodle_url('/mod/customcert/edit.php', array('cmid' => $cm->id)),
|
||||
$html .= $OUTPUT->single_button(new moodle_url('/mod/customcert/edit.php', array('tid' => $template->get_id())),
|
||||
get_string('saveandclose', 'customcert'), 'get', array('class' => 'savepositionsbtn'));
|
||||
$html .= $OUTPUT->single_button(new moodle_url('/mod/customcert/rearrange.php', array('id' => $pid)),
|
||||
$html .= $OUTPUT->single_button(new moodle_url('/mod/customcert/rearrange.php', array('pid' => $pid)),
|
||||
get_string('saveandcontinue', 'customcert'), 'get', array('class' => 'applypositionsbtn'));
|
||||
$html .= $OUTPUT->single_button(new moodle_url('/mod/customcert/edit.php', array('cmid' => $cm->id)),
|
||||
$html .= $OUTPUT->single_button(new moodle_url('/mod/customcert/edit.php', array('tid' => $template->get_id())),
|
||||
get_string('cancel'), 'get', array('class' => 'cancelbtn'));
|
||||
$html .= html_writer::end_tag('div');
|
||||
|
||||
|
@ -73,15 +75,15 @@ if ($page->leftmargin) {
|
|||
if ($elements) {
|
||||
foreach ($elements as $element) {
|
||||
// Get an instance of the element class.
|
||||
if ($e = customcert_get_element_instance($element)) {
|
||||
if ($e = \mod_customcert\element::instance($element)) {
|
||||
switch ($element->refpoint) {
|
||||
case CUSTOMCERT_REF_POINT_TOPRIGHT:
|
||||
case \mod_customcert\element_helper::CUSTOMCERT_REF_POINT_TOPRIGHT:
|
||||
$class = 'element refpoint-right';
|
||||
break;
|
||||
case CUSTOMCERT_REF_POINT_TOPCENTER:
|
||||
case \mod_customcert\element_helper::CUSTOMCERT_REF_POINT_TOPCENTER:
|
||||
$class = 'element refpoint-center';
|
||||
break;
|
||||
case CUSTOMCERT_REF_POINT_TOPLEFT:
|
||||
case \mod_customcert\element_helper::CUSTOMCERT_REF_POINT_TOPLEFT:
|
||||
default:
|
||||
$class = 'element refpoint-left';
|
||||
}
|
||||
|
@ -96,7 +98,6 @@ if ($page->rightmargin) {
|
|||
$html .= html_writer::end_tag('div');
|
||||
|
||||
echo $OUTPUT->header();
|
||||
echo $OUTPUT->heading(get_string('editcustomcert', 'customcert'));
|
||||
echo $OUTPUT->heading(get_string('rearrangeelementsheading', 'customcert'), 4);
|
||||
echo $html;
|
||||
echo $OUTPUT->footer();
|
22
report.php
22
report.php
|
@ -23,20 +23,19 @@
|
|||
*/
|
||||
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/locallib.php');
|
||||
|
||||
$id = required_param('id', PARAM_INT);
|
||||
$download = optional_param('download', '', PARAM_ALPHA);
|
||||
|
||||
$page = optional_param('page', 0, PARAM_INT);
|
||||
$perpage = optional_param('perpage', CUSTOMCERT_PER_PAGE, PARAM_INT);
|
||||
$perpage = optional_param('perpage', \mod_customcert\certificate::CUSTOMCERT_PER_PAGE, PARAM_INT);
|
||||
$pageurl = $url = new moodle_url('/mod/customcert/report.php', array('id' => $id, 'page' => $page, 'perpage' => $perpage));
|
||||
|
||||
// Ensure the perpage variable does not exceed the max allowed if
|
||||
// the user has not specified they wish to view all customcerts.
|
||||
if (CUSTOMCERT_PER_PAGE !== 0) {
|
||||
if (($perpage > CUSTOMCERT_MAX_PER_PAGE) || ($perpage === 0)) {
|
||||
$perpage = CUSTOMCERT_PER_PAGE;
|
||||
if (\mod_customcert\certificate::CUSTOMCERT_PER_PAGE !== 0) {
|
||||
if (($perpage > \mod_customcert\certificate::CUSTOMCERT_MAX_PER_PAGE) || ($perpage === 0)) {
|
||||
$perpage = \mod_customcert\certificate::CUSTOMCERT_PER_PAGE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -55,10 +54,10 @@ require_capability('mod/customcert:manage', $context);
|
|||
if ($groupmode = groups_get_activity_groupmode($cm)) {
|
||||
groups_get_activity_group($cm, true);
|
||||
}
|
||||
$users = customcert_get_issues($customcert->id, $groupmode, $cm, $page, $perpage);
|
||||
$users = \mod_customcert\certificate::get_issues($customcert->id, $groupmode, $cm, $page, $perpage);
|
||||
|
||||
if ($download) {
|
||||
customcert_generate_report_file($customcert, $users, $download);
|
||||
\mod_customcert\certificate::generate_report_file($customcert, $users, $download);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
@ -82,10 +81,11 @@ $btndownloadods = $OUTPUT->single_button(new moodle_url('report.php', array('id'
|
|||
$btndownloadxls = $OUTPUT->single_button(new moodle_url('report.php', array('id' => $cm->id, 'download' => 'xls')), get_string("downloadexcel"));
|
||||
$tablebutton->data[] = array($btndownloadods, $btndownloadxls);
|
||||
|
||||
$PAGE->set_url($pageurl);
|
||||
$PAGE->navbar->add(get_string('report', 'customcert'));
|
||||
$PAGE->set_title(format_string($customcert->name) . ": " . get_string('report', 'customcert'));
|
||||
$PAGE->set_heading($course->fullname);
|
||||
// Set up the page.
|
||||
\mod_customcert\page_helper::page_setup($pageurl, $context, get_string('customcertreport', 'customcert'));
|
||||
|
||||
// Additional page setup.
|
||||
$PAGE->navbar->add(get_string('customcertreport', 'customcert'));
|
||||
|
||||
echo $OUTPUT->header();
|
||||
echo $OUTPUT->heading(get_string('modulenameplural', 'customcert'));
|
||||
|
|
24
rest.php
24
rest.php
|
@ -28,20 +28,24 @@ if (!defined('AJAX_SCRIPT')) {
|
|||
|
||||
require_once(__DIR__ . '/../../config.php');
|
||||
|
||||
$cmid = required_param('cmid', PARAM_INT);
|
||||
$tid = required_param('tid', PARAM_INT);
|
||||
$values = required_param('values', PARAM_RAW);
|
||||
$values = json_decode($values);
|
||||
|
||||
$cm = get_coursemodule_from_id('customcert', $cmid, 0, false, MUST_EXIST);
|
||||
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
|
||||
$context = context_module::instance($cm->id);
|
||||
$elements = $DB->get_records_sql('SELECT * FROM {customcert_elements} e
|
||||
JOIN {customcert_pages} p ON e.pageid = p.id
|
||||
WHERE p.customcertid = ?', array($cm->instance));
|
||||
// Make sure the template exists.
|
||||
$template = $DB->get_record('customcert_templates', array('id' => $tid), '*', MUST_EXIST);
|
||||
|
||||
// Check that the user is able to perform the change.
|
||||
require_login($course, false, $cm);
|
||||
require_capability('mod/customcert:manage', $context);
|
||||
// Set the template.
|
||||
$template = new \mod_customcert\template($template);
|
||||
// Perform checks.
|
||||
if ($cm = $template->get_cm()) {
|
||||
$courseid = $cm->course;
|
||||
require_login($courseid, false, $cm);
|
||||
} else {
|
||||
require_login();
|
||||
}
|
||||
// Make sure the user has the required capabilities.
|
||||
$template->require_manage();
|
||||
|
||||
// Loop through the data.
|
||||
foreach ($values as $value) {
|
||||
|
|
|
@ -1,108 +0,0 @@
|
|||
<?php
|
||||
// This file is part of the customcert module for 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/>.
|
||||
|
||||
/**
|
||||
* Handles saving customcert templates.
|
||||
*
|
||||
* @package mod_customcert
|
||||
* @copyright 2013 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/locallib.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/save_template_form.php');
|
||||
|
||||
$cmid = required_param('cmid', PARAM_INT);
|
||||
$name = required_param('name', PARAM_TEXT);
|
||||
|
||||
$cm = get_coursemodule_from_id('customcert', $cmid, 0, false, MUST_EXIST);
|
||||
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
|
||||
$customcert = $DB->get_record('customcert', array('id' => $cm->instance), '*', MUST_EXIST);
|
||||
$context = context_module::instance($cm->id);
|
||||
|
||||
require_login($course, false, $cm);
|
||||
|
||||
require_capability('mod/customcert:manage', $context);
|
||||
|
||||
// Store the current time in a variable.
|
||||
$time = time();
|
||||
|
||||
if (!$template = $DB->get_record('customcert_template', array('name' => $name))) {
|
||||
// Create the template.
|
||||
$template = new stdClass();
|
||||
$template->name = $name;
|
||||
$template->timecreated = $time;
|
||||
}
|
||||
|
||||
$template->timemodified = $time;
|
||||
|
||||
if (empty($template->id)) {
|
||||
$template->id = $DB->insert_record('customcert_template', $template);
|
||||
} else {
|
||||
$DB->update_record('customcert_template', $template);
|
||||
$templatepages = $DB->get_records_menu('customcert_template_pages', array('templateid' => $template->id));
|
||||
$DB->delete_records_list('customcert_template_elements', 'templatepageid', array_keys($templatepages));
|
||||
$DB->delete_records('customcert_template_pages', array('templateid' => $template->id));
|
||||
}
|
||||
|
||||
// Get the pages of the customcert we are copying.
|
||||
if ($pages = $DB->get_records('customcert_pages', array('customcertid' => $customcert->id))) {
|
||||
// Create an array to store any errors saving an element to a template.
|
||||
$errors = array();
|
||||
// Loop through and copy the data.
|
||||
foreach ($pages as $page) {
|
||||
// Insert into the template page table.
|
||||
$templatepage = clone($page);
|
||||
$templatepage->templateid = $template->id;
|
||||
$templatepage->timecreated = $time;
|
||||
$templatepage->timemodified = $time;
|
||||
$templatepage->id = $DB->insert_record('customcert_template_pages', $templatepage);
|
||||
// Get the elements.
|
||||
if ($elements = $DB->get_records('customcert_elements', array('pageid' => $page->id))) {
|
||||
// Loop through the elements.
|
||||
foreach ($elements as $element) {
|
||||
// Insert into the template element table.
|
||||
$templateelement = clone($element);
|
||||
$templateelement->templatepageid = $templatepage->id;
|
||||
$templateelement->timecreated = $time;
|
||||
$templateelement->timemodified = $time;
|
||||
$templateelement->id = $DB->insert_record('customcert_template_elements', $templateelement);
|
||||
// Save any other information the element may need to for the template.
|
||||
if ($e = customcert_get_element_instance($element)) {
|
||||
if (!$e->save_data_to_template($element)) {
|
||||
// Remove from the customcert_template_elements table.
|
||||
$DB->delete_records('customcert_template_elements', array('id' => $templateelement->id));
|
||||
// Add the error message to the array to display later.
|
||||
$errors[] = get_string('errorsavingelement', 'customcert', $element->element);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get any errors caused by the loading of an element and put into a message.
|
||||
$message = '';
|
||||
if (!empty($errors)) {
|
||||
foreach ($errors as $e) {
|
||||
$message .= $OUTPUT->notification($e) . '<br />';
|
||||
}
|
||||
}
|
||||
|
||||
// Redirect.
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $cmid));
|
||||
redirect($url, $message);
|
|
@ -1,79 +0,0 @@
|
|||
<?php
|
||||
// This file is part of the customcert module for 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/>.
|
||||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
require_once($CFG->libdir . '/formslib.php');
|
||||
|
||||
/**
|
||||
* The form for handling saving customcert templates.
|
||||
*
|
||||
* @package mod_customcert
|
||||
* @copyright 2013 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class mod_customcert_save_template_form extends moodleform {
|
||||
|
||||
/**
|
||||
* Form definition.
|
||||
*/
|
||||
public function definition() {
|
||||
$mform =& $this->_form;
|
||||
|
||||
$mform->addElement('header', 'savetemplateheader', get_string('savetemplate', 'customcert'));
|
||||
|
||||
$group = array();
|
||||
$group[] = $mform->createElement('text', 'name');
|
||||
$group[] = $mform->createElement('submit', 'savetemplatesubmit', get_string('save', 'customcert'));
|
||||
$group[] = $mform->createElement('checkbox', 'replace', null, get_string('replacetemplate', 'customcert'));
|
||||
|
||||
$mform->addElement('group', 'savetemplategroup', get_string('templatename', 'customcert'), $group, '', false);
|
||||
|
||||
// Set the template name to required and set the type.
|
||||
$mform->addGroupRule('savetemplategroup', array(
|
||||
'name' => array(
|
||||
array(null, 'required', null, 'client')
|
||||
)
|
||||
));
|
||||
$mform->setType('name', PARAM_NOTAGS);
|
||||
|
||||
$mform->addElement('hidden', 'cmid');
|
||||
$mform->setType('cmid', PARAM_INT);
|
||||
$mform->setDefault('cmid', $this->_customdata['cmid']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Some basic validation.
|
||||
*
|
||||
* @param array $data
|
||||
* @param array $files
|
||||
* @return array the errors that were found
|
||||
*/
|
||||
public function validation($data, $files) {
|
||||
global $DB;
|
||||
|
||||
$errors = parent::validation($data, $files);
|
||||
|
||||
if (empty($data['replace'])) {
|
||||
// Ensure the name does not already exist.
|
||||
if ($DB->record_exists('customcert_template', array('name' => $data['name']))) {
|
||||
$errors['savetemplategroup'] = get_string('templatenameexists', 'customcert');
|
||||
}
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
}
|
|
@ -24,7 +24,10 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
require_once($CFG->dirroot.'/mod/customcert/adminsetting.class.php');
|
||||
$settings->add(new \mod_customcert\admin_setting_link('customcert/managetemplates',
|
||||
get_string('managetemplates', 'customcert'), get_string('managetemplatesdesc', 'customcert'),
|
||||
get_string('managetemplates', 'customcert'), new moodle_url('/mod/customcert/manage_templates.php'), ''));
|
||||
|
||||
$settings->add(new mod_customcert_admin_setting_upload('customcert/uploadimage',
|
||||
get_string('uploadimage', 'customcert'), get_string('uploadimagedesc', 'customcert'), ''));
|
||||
$settings->add(new \mod_customcert\admin_setting_link('customcert/uploadimage',
|
||||
get_string('uploadimage', 'customcert'), get_string('uploadimagedesc', 'customcert'),
|
||||
get_string('uploadimage', 'customcert'), new moodle_url('/mod/customcert/upload_image.php'), ''));
|
||||
|
|
30
styles.css
30
styles.css
|
@ -11,19 +11,19 @@
|
|||
margin-right: auto;
|
||||
}
|
||||
|
||||
#page-mod-customcert-position .savepositionsbtn,
|
||||
#page-mod-customcert-position .applypositionsbtn,
|
||||
#page-mod-customcert-position .cancelbtn {
|
||||
#page-mod-customcert-rearrange .savepositionsbtn,
|
||||
#page-mod-customcert-rearrange .applypositionsbtn,
|
||||
#page-mod-customcert-rearrange .cancelbtn {
|
||||
float:left
|
||||
}
|
||||
|
||||
#page-mod-customcert-position .element {
|
||||
#page-mod-customcert-rearrange .element {
|
||||
display:inline-block;
|
||||
position: absolute;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
#page-mod-customcert-position .element:before {
|
||||
#page-mod-customcert-rearrange .element:before {
|
||||
content: "";
|
||||
display: block;
|
||||
background-image: url([[pix:mod_customcert|target]]);
|
||||
|
@ -33,35 +33,35 @@
|
|||
float: left;
|
||||
}
|
||||
|
||||
#page-mod-customcert-position .element:hover {
|
||||
#page-mod-customcert-rearrange .element:hover {
|
||||
cursor:move;
|
||||
}
|
||||
|
||||
#page-mod-customcert-position .element.refpoint-left:before {
|
||||
background-position: left top;
|
||||
#page-mod-customcert-rearrange .element.refpoint-left:before {
|
||||
background-rearrange: left top;
|
||||
margin: -4px -5px -5px -4px;
|
||||
}
|
||||
|
||||
#page-mod-customcert-position .element.refpoint-center:before {
|
||||
background-position: center top;
|
||||
#page-mod-customcert-rearrange .element.refpoint-center:before {
|
||||
background-rearrange: center top;
|
||||
margin: -4px 0 -5px 0;
|
||||
}
|
||||
|
||||
#page-mod-customcert-position .element.refpoint-right:before {
|
||||
background-position: right top;
|
||||
#page-mod-customcert-rearrange .element.refpoint-right:before {
|
||||
background-rearrange: right top;
|
||||
margin: -4px -5px -5px 4px;
|
||||
}
|
||||
|
||||
#page-mod-customcert-position #pdf {
|
||||
#page-mod-customcert-rearrange #pdf {
|
||||
clear:both;
|
||||
border-style:solid;
|
||||
border-width:1px;
|
||||
}
|
||||
|
||||
#page-mod-customcert-position div#leftmargin {
|
||||
#page-mod-customcert-rearrange div#leftmargin {
|
||||
border-left: 1px dotted black;
|
||||
}
|
||||
|
||||
#page-mod-customcert-position div#rightmargin {
|
||||
#page-mod-customcert-rearrange div#rightmargin {
|
||||
border-right: 1px dotted black;
|
||||
}
|
||||
|
|
|
@ -23,8 +23,6 @@
|
|||
*/
|
||||
|
||||
require('../../config.php');
|
||||
require_once($CFG->dirroot.'/mod/customcert/locallib.php');
|
||||
require_once($CFG->dirroot.'/mod/customcert/upload_image_form.php');
|
||||
|
||||
require_login();
|
||||
|
||||
|
@ -33,21 +31,20 @@ require_capability('moodle/site:config', $context);
|
|||
|
||||
$struploadimage = get_string('uploadimage', 'customcert');
|
||||
|
||||
$PAGE->set_url('/admin/settings.php', array('section' => 'modsettingcustomcert'));
|
||||
$PAGE->set_pagetype('admin-setting-modsettingcustomcert');
|
||||
$PAGE->set_pagelayout('admin');
|
||||
$PAGE->set_context($context);
|
||||
$PAGE->set_title($struploadimage);
|
||||
$PAGE->set_heading($SITE->fullname);
|
||||
// Set the page variables.
|
||||
$pageurl = new moodle_url('/mod/customcert/upload_image.php');
|
||||
\mod_customcert\page_helper::page_setup($pageurl, $context, $struploadimage, $SITE->fullname);
|
||||
|
||||
// Additional page setup.
|
||||
$PAGE->navbar->add($struploadimage);
|
||||
|
||||
$uploadform = new mod_customcert_upload_image_form();
|
||||
$uploadform = new \mod_customcert\upload_image_form();
|
||||
|
||||
if ($uploadform->is_cancelled()) {
|
||||
redirect(new moodle_url('/admin/settings.php?section=modsettingcustomcert'));
|
||||
} else if ($data = $uploadform->get_data()) {
|
||||
// Handle file uploads.
|
||||
customcert_upload_imagefiles($data->customcertimage, $context->id);
|
||||
\mod_customcert\certificate::upload_imagefiles($data->customcertimage, $context->id);
|
||||
|
||||
redirect(new moodle_url('/mod/customcert/upload_image.php'), get_string('changessaved'));
|
||||
}
|
||||
|
|
|
@ -24,10 +24,10 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
|
||||
|
||||
$plugin->version = 2015121400; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2015051100; // Requires this Moodle version (2.9).
|
||||
$plugin->cron = 0; // Period for cron to check this module (secs).
|
||||
$plugin->component = 'mod_customcert';
|
||||
|
||||
$plugin->maturity = MATURITY_BETA;
|
||||
$plugin->release = "Beta release"; // User-friendly version number.
|
||||
$plugin->release = "Beta release (Build: 2016021900)"; // User-friendly version number.
|
||||
|
|
17
view.php
17
view.php
|
@ -23,7 +23,6 @@
|
|||
*/
|
||||
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/locallib.php');
|
||||
|
||||
$id = required_param('id', PARAM_INT);
|
||||
$action = optional_param('action', '', PARAM_ALPHA);
|
||||
|
@ -31,6 +30,7 @@ $action = optional_param('action', '', PARAM_ALPHA);
|
|||
$cm = get_coursemodule_from_id('customcert', $id, 0, false, MUST_EXIST);
|
||||
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
|
||||
$customcert = $DB->get_record('customcert', array('id' => $cm->instance), '*', MUST_EXIST);
|
||||
$template = $DB->get_record('customcert_templates', array('id' => $customcert->templateid), '*', MUST_EXIST);
|
||||
|
||||
// Ensure the user is allowed to view this page.
|
||||
require_login($course, false, $cm);
|
||||
|
@ -39,15 +39,11 @@ require_capability('mod/customcert:view', $context);
|
|||
|
||||
// Initialise $PAGE.
|
||||
$pageurl = new moodle_url('/mod/customcert/view.php', array('id' => $cm->id));
|
||||
$PAGE->set_url($pageurl);
|
||||
$PAGE->set_context($context);
|
||||
$PAGE->set_cm($cm);
|
||||
$PAGE->set_title(format_string($customcert->name));
|
||||
$PAGE->set_heading(format_string($course->fullname));
|
||||
\mod_customcert\page_helper::page_setup($pageurl, $context, format_string($customcert->name));
|
||||
|
||||
// Check if the user can view the certificate based on time spent in course.
|
||||
if ($customcert->requiredtime && !has_capability('mod/certificate:manage', $context)) {
|
||||
if (customcert_get_course_time($course->id) < ($customcert->requiredtime * 60)) {
|
||||
if (\mod_customcert\certificate::get_course_time($course->id) < ($customcert->requiredtime * 60)) {
|
||||
$a = new stdClass;
|
||||
$a->requiredtime = $customcert->requiredtime;
|
||||
notice(get_string('requiredtimenotmet', 'certificate', $a), "$CFG->wwwroot/course/view.php?id=$course->id");
|
||||
|
@ -66,7 +62,7 @@ if (empty($action)) {
|
|||
$reportlink = '';
|
||||
if (has_capability('mod/customcert:manage', $context)) {
|
||||
// Get the total number of issues.
|
||||
$numissues = customcert_get_number_of_issues($customcert->id, $cm, $groupmode);
|
||||
$numissues = \mod_customcert\certificate::get_number_of_issues($customcert->id, $cm, $groupmode);
|
||||
$href = new moodle_urL('/mod/customcert/report.php', array('id' => $cm->id));
|
||||
$url = html_writer::tag('a', get_string('viewcustomcertissues', 'customcert', $numissues),
|
||||
array('href' => $href->out()));
|
||||
|
@ -121,11 +117,12 @@ if (empty($action)) {
|
|||
$customcertissue = new stdClass();
|
||||
$customcertissue->customcertid = $customcert->id;
|
||||
$customcertissue->userid = $USER->id;
|
||||
$customcertissue->code = customcert_generate_code();
|
||||
$customcertissue->code = \mod_customcert\certificate::generate_code();
|
||||
$customcertissue->timecreated = time();
|
||||
// Insert the record into the database.
|
||||
$DB->insert_record('customcert_issues', $customcertissue);
|
||||
}
|
||||
// Now we want to generate the PDF.
|
||||
customcert_generate_pdf($customcert);
|
||||
$template = new \mod_customcert\template($template);
|
||||
$template->generate_pdf();
|
||||
}
|
||||
|
|
20
yui/src/rearrange.js
vendored
20
yui/src/rearrange.js
vendored
|
@ -6,7 +6,7 @@ M.mod_customcert.rearrange = {
|
|||
/**
|
||||
* The course module id.
|
||||
*/
|
||||
cmid : 0,
|
||||
templateid : 0,
|
||||
|
||||
/**
|
||||
* The customcert page we are displaying.
|
||||
|
@ -63,13 +63,13 @@ M.mod_customcert.rearrange = {
|
|||
* Initialise.
|
||||
*
|
||||
* @param Y
|
||||
* @param cmid
|
||||
* @param templateid
|
||||
* @param page
|
||||
* @param elements
|
||||
*/
|
||||
init : function(Y, cmid, page, elements) {
|
||||
init : function(Y, templateid, page, elements) {
|
||||
// Set the course module id.
|
||||
this.cmid = cmid;
|
||||
this.templateid = templateid;
|
||||
// Set the page.
|
||||
this.page = page;
|
||||
// Set the elements.
|
||||
|
@ -224,7 +224,7 @@ M.mod_customcert.rearrange = {
|
|||
save_positions : function(e) {
|
||||
// The parameters to send the AJAX call.
|
||||
var params = {
|
||||
cmid: this.cmid,
|
||||
tid: this.templateid,
|
||||
values: []
|
||||
};
|
||||
|
||||
|
@ -268,7 +268,15 @@ M.mod_customcert.rearrange = {
|
|||
},
|
||||
success: function() {
|
||||
var formNode = e.currentTarget.ancestor('form', true);
|
||||
window.location = formNode.getAttribute('action') + '?' + Y.QueryString.stringify({cmid:formNode.one('[name=cmid]').get('value')});
|
||||
var baseUrl = formNode.getAttribute('action');
|
||||
var pageinput = formNode.one('[name=pid]');
|
||||
if (pageinput) {
|
||||
var pageid = pageinput.get('value');
|
||||
window.location = baseUrl + '?pid=' + pageid;
|
||||
} else {
|
||||
var templateid = formNode.one('[name=tid]').get('value');
|
||||
window.location = baseUrl + '?tid=' + templateid;
|
||||
}
|
||||
}
|
||||
},
|
||||
context: this
|
||||
|
|
Loading…
Reference in a new issue