Introduced customisable elements to the customcert
Elements are sub-plugins that have the same abilities as a core plugin, such as creating tables, capabilities and performing upgrades. Currently elements can define - * What additional form elements are rendered when adding the element to the customcert customisation page. * How the data from the additional form elements is validated and saved. * How the element is rendered on the PDF. * How the element handles removing data when it is deleted.
This commit is contained in:
parent
2b8403438f
commit
9d0eb727e5
13 changed files with 723 additions and 144 deletions
|
@ -24,6 +24,8 @@
|
|||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'mod/customcert:addinstance' => array(
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<XMLDB PATH="mod/customcert/db" VERSION="20121205" COMMENT="XMLDB file for Moodle mod/customcert"
|
||||
<XMLDB PATH="mod/customcert/db" VERSION="20130221" COMMENT="XMLDB file for Moodle mod/customcert"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
|
||||
>
|
||||
|
@ -32,15 +32,14 @@
|
|||
<KEY NAME="customcert" TYPE="foreign" FIELDS="customcertid" REFTABLE="customcert" REFFIELDS="id" PREVIOUS="primary"/>
|
||||
</KEYS>
|
||||
</TABLE>
|
||||
<TABLE NAME="customcert_pages" COMMENT="Stores each page of a custom cert" PREVIOUS="customcert_issues" NEXT="customcert_text_fields">
|
||||
<TABLE NAME="customcert_pages" COMMENT="Stores each page of a custom cert" PREVIOUS="customcert_issues" NEXT="customcert_elements">
|
||||
<FIELDS>
|
||||
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true" ENUM="false" NEXT="customcertid"/>
|
||||
<FIELD NAME="customcertid" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="orientation"/>
|
||||
<FIELD NAME="orientation" TYPE="char" LENGTH="10" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="customcertid" NEXT="width"/>
|
||||
<FIELD NAME="width" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="orientation" NEXT="height"/>
|
||||
<FIELD NAME="height" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="width" NEXT="backgroundimage"/>
|
||||
<FIELD NAME="backgroundimage" TYPE="char" LENGTH="255" NOTNULL="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="height" NEXT="pagenumber"/>
|
||||
<FIELD NAME="pagenumber" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="backgroundimage" NEXT="timecreated"/>
|
||||
<FIELD NAME="height" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="width" NEXT="pagenumber"/>
|
||||
<FIELD NAME="pagenumber" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="height" NEXT="timecreated"/>
|
||||
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="pagenumber" NEXT="timemodified"/>
|
||||
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="timecreated"/>
|
||||
</FIELDS>
|
||||
|
@ -49,20 +48,22 @@
|
|||
<KEY NAME="customcert" TYPE="foreign" FIELDS="customcertid" REFTABLE="customcert" REFFIELDS="id" PREVIOUS="primary"/>
|
||||
</KEYS>
|
||||
</TABLE>
|
||||
<TABLE NAME="customcert_text_fields" COMMENT="Stores the text fields for a given page" PREVIOUS="customcert_pages">
|
||||
<TABLE NAME="customcert_elements" COMMENT="Stores the elements for a given page" PREVIOUS="customcert_pages">
|
||||
<FIELDS>
|
||||
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true" ENUM="false" NEXT="customcertpageid"/>
|
||||
<FIELD NAME="customcertpageid" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="text"/>
|
||||
<FIELD NAME="text" TYPE="text" LENGTH="big" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="customcertpageid" NEXT="font"/>
|
||||
<FIELD NAME="font" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="text" NEXT="size"/>
|
||||
<FIELD NAME="size" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="font" NEXT="posx"/>
|
||||
<FIELD NAME="posx" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="size" NEXT="posy"/>
|
||||
<FIELD NAME="posy" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="posx" NEXT="timecreated"/>
|
||||
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true" ENUM="false" NEXT="pageid"/>
|
||||
<FIELD NAME="pageid" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="element"/>
|
||||
<FIELD NAME="element" TYPE="text" LENGTH="big" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="pageid" NEXT="data"/>
|
||||
<FIELD NAME="data" TYPE="text" LENGTH="big" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="element" NEXT="font"/>
|
||||
<FIELD NAME="font" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="data" NEXT="size"/>
|
||||
<FIELD NAME="size" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="font" NEXT="colour"/>
|
||||
<FIELD NAME="colour" TYPE="char" LENGTH="6" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="size" NEXT="posx"/>
|
||||
<FIELD NAME="posx" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="colour" NEXT="posy"/>
|
||||
<FIELD NAME="posy" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="posx" NEXT="timecreated"/>
|
||||
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="posy"/>
|
||||
</FIELDS>
|
||||
<KEYS>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for customcert_text_fields" NEXT="customcertpage"/>
|
||||
<KEY NAME="customcertpage" TYPE="foreign" FIELDS="customcertpageid" REFTABLE="customcert_pages" REFFIELDS="id" PREVIOUS="primary"/>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for customcert_elements" NEXT="page"/>
|
||||
<KEY NAME="page" TYPE="foreign" FIELDS="pageid" REFTABLE="customcert_pages" REFFIELDS="id" PREVIOUS="primary"/>
|
||||
</KEYS>
|
||||
</TABLE>
|
||||
</TABLES>
|
||||
|
|
29
db/subplugins.php
Normal file
29
db/subplugins.php
Normal file
|
@ -0,0 +1,29 @@
|
|||
<?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/>.
|
||||
|
||||
/**
|
||||
* Definition of sub-plugins.
|
||||
*
|
||||
* @package mod
|
||||
* @subpackage customcert
|
||||
* @copyright Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$subplugins = array('customcertelement' => 'mod/customcert/elements');
|
57
edit.php
57
edit.php
|
@ -18,7 +18,8 @@
|
|||
/**
|
||||
* Edit the customcert settings.
|
||||
*
|
||||
* @package mod_customcert
|
||||
* @package mod
|
||||
* @subpackage customcert
|
||||
* @copyright Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
@ -26,11 +27,13 @@
|
|||
require_once('../../config.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/lib.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/edit_form.php');
|
||||
require_once($CFG->dirroot . '/mod/customcert/elements/element.class.php');
|
||||
|
||||
$cmid = required_param('cmid', PARAM_INT);
|
||||
$moveup = optional_param('moveup', 0, PARAM_INT);
|
||||
$movedown = optional_param('movedown', 0, PARAM_INT);
|
||||
$delete = optional_param('delete', 0, PARAM_INT);
|
||||
$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);
|
||||
|
@ -59,8 +62,12 @@ if ((!empty($moveup)) || (!empty($movedown))) {
|
|||
$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($delete)) && (!empty($confirm))) {
|
||||
customcert_delete_page($delete);
|
||||
} else if ((!empty($deletepage)) && (!empty($confirm))) { // Check if we are deleting a page.
|
||||
customcert_delete_page($deletepage);
|
||||
} else if ((!empty($deleteelement)) && (!empty($confirm))) { // Check if we are deleting an element.
|
||||
// Ensure element exists and delete it.
|
||||
$element = $DB->get_record('customcert_elements', array('id' => $deleteelement), '*', MUST_EXIST);
|
||||
customcert_delete_element($element);
|
||||
}
|
||||
|
||||
$mform = new mod_customcert_edit_form('', array('customcertid' => $customcert->id,
|
||||
|
@ -74,32 +81,64 @@ if ($data = $mform->get_data()) {
|
|||
// Save any page data.
|
||||
customcert_save_page_data($data);
|
||||
|
||||
// Check if they requested to delete a page.
|
||||
// Flag to determine if we are deleting anything.
|
||||
$deleting = false;
|
||||
|
||||
// Loop through the data.
|
||||
foreach ($data as $key => $value) {
|
||||
// Check if they requested to delete a page.
|
||||
if (strpos($key, 'deletecertpage_') !== false) {
|
||||
// Get the pageid.
|
||||
$pageid = str_replace('deletecertpage_', '', $key);
|
||||
// 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,
|
||||
'delete' => $pageid,
|
||||
'deletepage' => $pageid,
|
||||
'confirm' => 1,
|
||||
'sesskey' => sesskey()));
|
||||
} else if (strpos($key, 'deleteelement_') !== false) { // Check if they requested to delete a page element.
|
||||
// Get the element id.
|
||||
$elementid = str_replace('deleteelement_', '', $key);
|
||||
// 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' => $elementid,
|
||||
'confirm' => 1,
|
||||
'sesskey' => sesskey()));
|
||||
} else if (strpos($key, 'addelement_') !== false) { // Check if they chose to add an element to a page.
|
||||
// Get the page id.
|
||||
$pageid = str_replace('addelement_', '', $key);
|
||||
// Get the element.
|
||||
$element = "element_" . $pageid;
|
||||
$element = $data->$element;
|
||||
customcert_add_element($element, $pageid);
|
||||
}
|
||||
|
||||
// Check if we are deleting either a page or an element.
|
||||
if ($deleting) {
|
||||
// Show a confirmation page.
|
||||
$strheading = get_string('deletecertpage', 'customcert');
|
||||
$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);
|
||||
$message = get_string('deletecertpageconfirm', 'customcert');
|
||||
echo $OUTPUT->confirm($message, $yesurl, $nourl);
|
||||
echo $OUTPUT->footer();
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
// If they chose to add another page, enter it into database.
|
||||
// Check if they chose to add a page.
|
||||
if (!empty($data->addcertpage)) {
|
||||
customcert_add_page($data);
|
||||
}
|
||||
|
|
129
edit_form.php
129
edit_form.php
|
@ -35,32 +35,27 @@ class mod_customcert_edit_form extends moodleform {
|
|||
/**
|
||||
* The instance id.
|
||||
*/
|
||||
protected $id = null;
|
||||
private $id = null;
|
||||
|
||||
/**
|
||||
* The course.
|
||||
*/
|
||||
protected $course = null;
|
||||
private $course = null;
|
||||
|
||||
/**
|
||||
* The total number of pages for this cert.
|
||||
*/
|
||||
protected $numpages = 1;
|
||||
|
||||
/**
|
||||
* The orientation options.
|
||||
*/
|
||||
protected $orientationoptions = array();
|
||||
|
||||
/**
|
||||
* The image options.
|
||||
*/
|
||||
protected $imageoptions = array();
|
||||
private $numpages = 1;
|
||||
|
||||
/**
|
||||
* The filemanager options.
|
||||
*/
|
||||
protected $filemanageroptions = array();
|
||||
private $filemanageroptions = array();
|
||||
|
||||
/**
|
||||
* The array of element objects loaded on this form.
|
||||
*/
|
||||
private $elementobjects = array();
|
||||
|
||||
/**
|
||||
* Form definition.
|
||||
|
@ -69,9 +64,6 @@ class mod_customcert_edit_form extends moodleform {
|
|||
global $CFG, $DB, $OUTPUT;
|
||||
|
||||
$this->id = $this->_customdata['customcertid'];
|
||||
$this->orientationoptions = array('L' => get_string('landscape', 'customcert'),
|
||||
'P' => get_string('portrait', 'customcert'));
|
||||
$this->imageoptions = customcert_get_images();
|
||||
$this->filemanageroptions = array('maxbytes' => $this->_customdata['course']->maxbytes,
|
||||
'subdirs' => 1,
|
||||
'accepted_types' => 'image');
|
||||
|
@ -135,13 +127,6 @@ class mod_customcert_edit_form extends moodleform {
|
|||
// Set the height.
|
||||
$element = $mform->getElement('height_'.$p->id);
|
||||
$element->setValue($p->height);
|
||||
// Set the background image.
|
||||
$element = $mform->getElement('backgroundimage_'.$p->id);
|
||||
$element->setValue($p->backgroundimage);
|
||||
// Now get the page text fields.
|
||||
if ($textfields = $DB->get_records('customcert_text_fields', array())) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -161,20 +146,27 @@ class mod_customcert_edit_form extends moodleform {
|
|||
foreach ($data as $key => $value) {
|
||||
if (strpos($key, 'width_') !== false) {
|
||||
$page = str_replace('width_', '', $key);
|
||||
// Validate that the weight is a valid value.
|
||||
if (!isset($data['width_'.$page]) || !is_number($data['width_'.$page])) {
|
||||
$errors['width_'.$page] = get_string('widthnotvalid', 'customcert');
|
||||
// Validate that the width is a valid value.
|
||||
if (!isset($data['width_' . $page]) || !is_number($data['width_' . $page])) {
|
||||
$errors['width_' . $page] = get_string('widthnotvalid', 'customcert');
|
||||
}
|
||||
}
|
||||
if (strpos($key, 'height_') !== false) {
|
||||
$page = str_replace('height_', '', $key);
|
||||
// Validate that the height is a valid value.
|
||||
if (!isset($data['height_'.$page]) || !is_number($data['height_'.$page])) {
|
||||
$errors['height_'.$page] = get_string('heightnotvalid', 'customcert');
|
||||
if (!isset($data['height_' . $page]) || !is_number($data['height_' . $page])) {
|
||||
$errors['height_' . $page] = get_string('heightnotvalid', 'customcert');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Go through each element and perform validation.
|
||||
if (!empty($this->elementobjects)) {
|
||||
foreach ($this->elementobjects as $e) {
|
||||
$errors += $e->validate_form_elements($data, $files);
|
||||
}
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
|
@ -184,67 +176,80 @@ class mod_customcert_edit_form extends moodleform {
|
|||
* @param stdClass $page the customcert page
|
||||
**/
|
||||
private function add_customcert_page_elements($page = null) {
|
||||
global $DB, $OUTPUT;
|
||||
global $CFG, $DB, $OUTPUT;
|
||||
|
||||
// Create the form object.
|
||||
$mform =& $this->_form;
|
||||
|
||||
// If page is null we are adding a customcert, not editing one, so set identifier to 1.
|
||||
// Get the elements that are available
|
||||
$elementsavailable = customcert_get_elements();
|
||||
|
||||
// If page is null we are adding a customcert, not editing one, so set pageid to 1.
|
||||
if (is_null($page)) {
|
||||
$identifier = 1;
|
||||
$pageid = 1;
|
||||
$pagenum = 1;
|
||||
} else {
|
||||
$identifier = $page->id;
|
||||
$pageid = $page->id;
|
||||
$pagenum = $page->pagenumber;
|
||||
}
|
||||
|
||||
$mform->addElement('header', 'page_'.$identifier, get_string('page', 'customcert', $pagenum));
|
||||
$mform->addElement('header', 'page_' . $pageid, get_string('page', 'customcert', $pagenum));
|
||||
|
||||
// Place the ordering arrows.
|
||||
// Only display the move up arrow if it is not the first.
|
||||
if ($pagenum > 1) {
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $this->_customdata['cmid'], 'moveup' => $identifier));
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $this->_customdata['cmid'], 'moveup' => $pageid));
|
||||
$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 ($pagenum < $this->numpages) {
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $this->_customdata['cmid'], 'movedown' => $identifier));
|
||||
$url = new moodle_url('/mod/customcert/edit.php', array('cmid' => $this->_customdata['cmid'], 'movedown' => $pageid));
|
||||
$mform->addElement('html', $OUTPUT->action_icon($url, new pix_icon('t/down', get_string('movedown'))));
|
||||
}
|
||||
|
||||
$mform->addElement('select', 'orientation_'.$identifier, get_string('orientation', 'customcert'), $this->orientationoptions);
|
||||
$mform->setDefault('orientation_'.$identifier, 'P');
|
||||
$mform->addHelpButton('orientation_'.$identifier, 'orientation', 'customcert');
|
||||
$orientationoptions = array('L' => get_string('landscape', 'customcert'),
|
||||
'P' => get_string('portrait', 'customcert'));
|
||||
$mform->addElement('select', 'orientation_' . $pageid, get_string('orientation', 'customcert'), $orientationoptions);
|
||||
$mform->setDefault('orientation_' . $pageid, 'P');
|
||||
$mform->addHelpButton('orientation_' . $pageid, 'orientation', 'customcert');
|
||||
|
||||
$mform->addElement('text', 'width_'.$identifier, get_string('width', 'customcert'));
|
||||
$mform->addRule('width_'.$identifier, null, 'required', null, 'client');
|
||||
$mform->addHelpButton('width_'.$identifier, 'width', 'customcert');
|
||||
$mform->addElement('text', 'width_' . $pageid, get_string('width', 'customcert'));
|
||||
$mform->addRule('width_' . $pageid, null, 'required', null, 'client');
|
||||
$mform->addHelpButton('width_' . $pageid, 'width', 'customcert');
|
||||
|
||||
$mform->addElement('text', 'height_'.$identifier, get_string('height', 'customcert'));
|
||||
$mform->addRule('height_'.$identifier, null, 'required', null, 'client');
|
||||
$mform->addHelpButton('height_'.$identifier, 'height', 'customcert');
|
||||
$mform->addElement('text', 'height_' . $pageid, get_string('height', 'customcert'));
|
||||
$mform->addRule('height_' . $pageid, null, 'required', null, 'client');
|
||||
$mform->addHelpButton('height_' . $pageid, 'height', 'customcert');
|
||||
|
||||
// Get the other image options.
|
||||
$mform->addElement('select', 'backgroundimage_'.$identifier, get_string('backgroundimage', 'customcert'), $this->imageoptions);
|
||||
$mform->setDefault('backgroundimage_'.$identifier, 0);
|
||||
$mform->addHelpButton('backgroundimage_'.$identifier, 'backgroundimage', 'customcert');
|
||||
// Check if there are elements to add.
|
||||
if ($elements = $DB->get_records('customcert_elements', array('pageid' => $pageid), 'id ASC')) {
|
||||
// Loop through and add the ones present.
|
||||
foreach ($elements as $element) {
|
||||
$classfile = "{$CFG->dirroot}/mod/customcert/elements/{$element->element}/lib.php";
|
||||
// It's possible this element was added to the database then the folder was deleted, if
|
||||
// this is the case we do not want to render these elements as an error will occur.
|
||||
if (file_exists($classfile)) {
|
||||
$classname = "customcert_element_{$element->element}";
|
||||
$e = new $classname($element);
|
||||
$e->render_form_elements($mform);
|
||||
// Add this to the objects array.
|
||||
$this->elementobjects[] = $e;
|
||||
// Add submit button to delete this.
|
||||
$mform->addElement('submit', 'deleteelement_' . $element->id, get_string('delete', 'customcert'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add text fields.
|
||||
$textgroup = array();
|
||||
$textgroup[] =& $mform->createElement('text', 'certtext_'.$identifier, '',
|
||||
array('cols' => '40', 'rows' => '4', 'wrap' => 'virtual'));
|
||||
$group = $mform->createElement('group', 'customcerttextgroup_'.$identifier,
|
||||
get_string('addtext', 'customcert'), $textgroup);
|
||||
|
||||
$count = (is_null($page)) ? 1 : $DB->count_records('customcert_text_fields', array('customcertpageid' => $identifier)) + 1;
|
||||
$this->repeat_elements(array($group), $count, array(), 'customcertimagerepeats_'.$identifier, 'imageadd_'.$identifier, 1,
|
||||
get_string('addanothertextfield', 'customcert'), true);
|
||||
$group = array();
|
||||
$group[] = $mform->createElement('select', 'element_' . $pageid, '', $elementsavailable);
|
||||
$group[] = $mform->createElement('submit', 'addelement_' . $pageid, get_string('addelement', 'customcert'));
|
||||
$mform->addElement('group', 'elementgroup', '', $group, '', false);
|
||||
|
||||
// Add option to delete this page if it is not the first page.
|
||||
if ($pagenum > 1) {
|
||||
$mform->addElement('html', '<div class=\'deletecertpage\'>');
|
||||
$mform->addElement('submit', 'deletecertpage_'.$identifier, get_string('deletecertpage', 'customcert'));
|
||||
$mform->addElement('html', '</div>');
|
||||
$mform->addElement('html', html_writer::start_tag('div', array('class' => 'deletecertpage')));
|
||||
$mform->addElement('submit', 'deletecertpage_' . $pageid, get_string('deletecertpage', 'customcert'));
|
||||
$mform->addElement('html', html_writer::end_tag('div'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
241
elements/element.class.php
Normal file
241
elements/element.class.php
Normal file
|
@ -0,0 +1,241 @@
|
|||
<?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/>.
|
||||
|
||||
|
||||
/**
|
||||
* The base class for the customcert elements.
|
||||
*
|
||||
* @package mod
|
||||
* @subpackage customcert
|
||||
* @copyright Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
class customcert_element_base {
|
||||
|
||||
/**
|
||||
* The data for the element we are adding.
|
||||
*/
|
||||
public $element;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param stdClass $element the element data
|
||||
*/
|
||||
function __construct($element) {
|
||||
$this->element = new stdClass();
|
||||
$this->element = $element;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is responsible for adding the element for the first time
|
||||
* to the database when no data has yet been specified, default values set.
|
||||
* Can be overriden if more functionality is needed.
|
||||
*
|
||||
* @param string $element the name of the element
|
||||
* @param int $pageid the page id we are saving it to
|
||||
*/
|
||||
public static function add_element($element, $pageid) {
|
||||
global $DB;
|
||||
|
||||
$data = new stdClass();
|
||||
$data->pageid = $pageid;
|
||||
$data->element = $element;
|
||||
$data->font = 'Times-Roman';
|
||||
$data->size = '12';
|
||||
$data->colour = 'FFFFFF';
|
||||
$data->posx = '250';
|
||||
$data->posy = '250';
|
||||
$data->timecreated = time();
|
||||
|
||||
$DB->insert_record('customcert_elements', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function renders the form elements when adding a customcert element.
|
||||
* Can be overridden if more functionality is needed.
|
||||
*
|
||||
* @param stdClass $mform the edit_form instance.
|
||||
* @return array the form elements
|
||||
*/
|
||||
public function render_form_elements($mform) {
|
||||
// Keep track of the number of times these elements have been
|
||||
// added, so we only add the help icon once.
|
||||
static $numtimesadded = 0;
|
||||
|
||||
// The identifier.
|
||||
$id = $this->element->id;
|
||||
|
||||
// The label.
|
||||
$label = get_string('pluginname', 'customcertelement_' . $this->element->element);
|
||||
|
||||
// String we are going to use often.
|
||||
$strrequired = get_string('required');
|
||||
|
||||
// The common group of elements.
|
||||
$group = array();
|
||||
$group[] = $mform->createElement('select', 'font_' . $id, '', customcert_get_fonts());
|
||||
$group[] = $mform->createElement('select', 'size_' . $id, '', customcert_get_font_sizes());
|
||||
$group[] = $mform->createELement('text', 'colour_' . $id, '', array('size' => 10, 'maxlength' => 6));
|
||||
$group[] = $mform->createElement('text', 'posx_' . $id, '', array('size' => 10));
|
||||
$group[] = $mform->createElement('text', 'posy_' . $id, '', array('size' => 10));
|
||||
|
||||
// Add this group.
|
||||
$mform->addElement('group', 'elementfieldgroup_' . $id, $label, $group,
|
||||
array(' ' . get_string('fontsize', 'customcert') . ' ', ' ' . get_string('colour', 'customcert') . ' ',
|
||||
' ' . get_string('posx', 'customcert') . ' ', ' ' . get_string('posy', 'customcert') . ' '), false);
|
||||
|
||||
// Set the types of these elements.
|
||||
$mform->setType('font_' . $id, PARAM_TEXT);
|
||||
$mform->setType('size_' . $id, PARAM_INT);
|
||||
$mform->setType('colour_' . $id, PARAM_RAW); // Need to validate this is a hexadecimal value.
|
||||
$mform->setType('posx_' . $id, PARAM_INT);
|
||||
$mform->setType('posy_' . $id, PARAM_INT);
|
||||
|
||||
// Add some rules.
|
||||
$grouprule = array();
|
||||
$grouprule['colour_' . $id][] = array(null, 'required', null, 'client');
|
||||
$grouprule['posx_' . $id][] = array(null, 'required', null, 'client');
|
||||
$grouprule['posy_' . $id][] = array(null, 'required', null, 'client');
|
||||
$mform->addGroupRule('elementfieldgroup_' . $id, $grouprule);
|
||||
|
||||
// Set the values of these elements.
|
||||
$mform->setDefault('font_' . $id, $this->element->font);
|
||||
$mform->setDefault('size_' . $id, $this->element->size);
|
||||
$mform->setDefault('colour_' . $id, $this->element->colour);
|
||||
$mform->setDefault('posx_' . $id, $this->element->posx);
|
||||
$mform->setDefault('posy_' . $id, $this->element->posy);
|
||||
|
||||
if ($numtimesadded == 0) {
|
||||
$mform->addHelpButton('elementfieldgroup_' . $id, 'commonformelements', 'customcert');
|
||||
}
|
||||
|
||||
$numtimesadded++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs validation on the element values.
|
||||
* Can be overridden if more functionality is needed.
|
||||
*
|
||||
* @param array $data the submitted data
|
||||
* @return array the validation errors
|
||||
*/
|
||||
public function validate_form_elements($data, $files) {
|
||||
$errors = array();
|
||||
|
||||
// The identifier.
|
||||
$id = $this->element->id;
|
||||
|
||||
// Get the group name.
|
||||
$group = 'elementfieldgroup_' . $id;
|
||||
|
||||
// Get the colour.
|
||||
$colour = 'colour_' . $id;
|
||||
$colour = $data[$colour];
|
||||
$colour = ltrim($colour, "#");
|
||||
// Check if colour is not a valid hexadecimal value.
|
||||
if(!preg_match("/[0-9A-F]{6}/i", $colour)) {
|
||||
$errors[$group] = get_string('invalidcolour', 'customcert');
|
||||
}
|
||||
|
||||
// Get position X.
|
||||
$posx = 'posx_' . $id;
|
||||
$posx = $data[$posx];
|
||||
// Check if posx is not numeric or less than 0.
|
||||
if ((!is_numeric($posx)) || ($posx < 0)) {
|
||||
if (!empty($errors[$group])) {
|
||||
$errors[$group] .= "<br />";
|
||||
$errors[$group] .= get_string('invalidposition', 'customcert', 'X');
|
||||
} else {
|
||||
$errors[$group] = get_string('invalidposition', 'customcert', 'X');
|
||||
}
|
||||
}
|
||||
|
||||
// Get position Y.
|
||||
$posy = 'posy_' . $id;
|
||||
$posy = $data[$posy];
|
||||
// Check if posy is not numeric or less than 0.
|
||||
if ((!is_numeric($posy)) || ($posy < 0)) {
|
||||
if (!empty($errors[$group])) {
|
||||
$errors[$group] .= "<br />";
|
||||
$errors[$group] .= get_string('invalidposition', 'customcert', 'Y');
|
||||
} else {
|
||||
$errors[$group] = get_string('invalidposition', 'customcert', 'Y');
|
||||
}
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles saving the form elements created by this element.
|
||||
* Can be overriden if more functionality is needed.
|
||||
*
|
||||
* @param stdClass $data the form data.
|
||||
*/
|
||||
public function save_form_elements($data) {
|
||||
global $DB;
|
||||
|
||||
// The identifier.
|
||||
$id = $this->element->id;
|
||||
|
||||
// Get the name of the fields we want from the form.
|
||||
$font = 'font_' . $id;
|
||||
$size = 'size_' . $id;
|
||||
$colour = 'colour_' . $id;
|
||||
$posx = 'posx_' . $id;
|
||||
$posy = 'posy_' . $id;
|
||||
|
||||
// Get the data from the form.
|
||||
$element = new stdClass();
|
||||
$element->id = $id;
|
||||
$element->font = (!empty($data->$font)) ? $data->$font : null;
|
||||
$element->size = (!empty($data->$size)) ? $data->$size : null;
|
||||
$element->colour = (!empty($data->$colour)) ? ltrim($data->$colour, "#") : null;
|
||||
$element->posx = (!empty($data->$posx)) ? $data->$posx : null;
|
||||
$element->posy = (!empty($data->$posy)) ? $data->$posy : null;
|
||||
|
||||
// Ok, now update record in the database.
|
||||
$DB->update_record('customcert_elements', $element);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles displaying the element on the pdf.
|
||||
* Must be overriden.
|
||||
*
|
||||
* @param stdClass the pdf object, see lib/pdflib.php
|
||||
*/
|
||||
public function display($pdf) {
|
||||
// Must be overriden.
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles deleting any data this element may have introduced.
|
||||
* Can be overriden if more functionality is needed.
|
||||
*
|
||||
* @return bool success return true if deletion success, false otherwise
|
||||
*/
|
||||
public function delete_element() {
|
||||
global $DB;
|
||||
|
||||
return $DB->delete_records('customcert_elements', array('id' => $this->element->id));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
<?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/>.
|
||||
|
||||
/**
|
||||
* Strings for component 'customcertelement_studentname', language 'en'.
|
||||
*
|
||||
* @package customcertelement_studentname
|
||||
* @copyright Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$string['pluginname'] = 'Student name';
|
53
elements/studentname/lib.php
Normal file
53
elements/studentname/lib.php
Normal file
|
@ -0,0 +1,53 @@
|
|||
<?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/>.
|
||||
|
||||
/**
|
||||
* The studentname elements core interaction API.
|
||||
*
|
||||
* @package customcertelement_studentname
|
||||
* @copyright Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
require_once($CFG->dirroot . '/mod/customcert/elements/element.class.php');
|
||||
|
||||
class customcert_element_studentname extends customcert_element_base {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param stdClass $element the element data
|
||||
*/
|
||||
function __construct($element) {
|
||||
parent::__construct($element);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles displaying the element on the pdf.
|
||||
*
|
||||
* @param $pdf the pdf object, see lib/pdflib.php
|
||||
*/
|
||||
public function display($pdf) {
|
||||
global $USER;
|
||||
|
||||
$pdf->setFont($this->element->font, '', $this->element->size);
|
||||
$pdf->SetXY($this->element->posx, $this->element->posy);
|
||||
$pdf->writeHTMLCell(0, 0, '', '', fullname($USER), 0, 0, 0, true, $align);
|
||||
}
|
||||
}
|
29
elements/studentname/version.php
Normal file
29
elements/studentname/version.php
Normal file
|
@ -0,0 +1,29 @@
|
|||
<?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/>.
|
||||
|
||||
/**
|
||||
* This file contains the version information for the studentname text plugin.
|
||||
*
|
||||
* @package customcertelement_studentname
|
||||
* @copyright Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$plugin->version = 2013021901;
|
||||
$plugin->requires = 2012062500;
|
||||
$plugin->component = 'customcertelement_studentname';
|
|
@ -16,7 +16,7 @@
|
|||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Language strings for the customcert module
|
||||
* Language strings for the customcert module.
|
||||
*
|
||||
* @package mod
|
||||
* @subpackage customcert
|
||||
|
@ -24,23 +24,33 @@
|
|||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$string['addtext'] = 'Add Text';
|
||||
$string['addanothertextfield'] = 'Add another text field';
|
||||
$string['addcertpage'] = 'Add another certificate page';
|
||||
$string['backgroundimage'] = 'Background image';
|
||||
$string['backgroundimage_help'] = 'This image will be take up the entire PDF page as the background image.';
|
||||
$string['addelement'] = 'Add element';
|
||||
$string['colour'] = 'Colour';
|
||||
$string['commonformelements'] = 'Common form elements';
|
||||
$string['commonformelements_help'] = 'These are the most common attributes shared between multiple customcert elements.<br /><br />
|
||||
<strong>Font Size:</strong> This is the size of the font in points.<br />
|
||||
<strong>Colour:</strong> This is the colour of the font.<br />
|
||||
<strong>Position x:</strong> This is the position in pixels from the top left corner you wish the element to display in the x direction.<br />
|
||||
<strong>Position Y:</strong> This is the position in pixels from the top left corner you wish the element to display in the y direction.<br />';
|
||||
$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['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['deletecertpageconfirm'] = 'Are you sure you want to delete this certificate page?';
|
||||
$string['deleteconfirm'] = 'Delete confirmation';
|
||||
$string['deleteelementconfirm'] = 'Are you sure you want to delete this element?';
|
||||
$string['deletepageconfirm'] = 'Are you sure you want to delete this certificate page?';
|
||||
$string['editcustomcert'] = 'Edit custom certificate';
|
||||
$string['fontsize'] = 'Size';
|
||||
$string['height'] = 'Height';
|
||||
$string['heightnotvalid'] = 'The height has to be a valid number.';
|
||||
$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['intro'] = 'Introduction';
|
||||
$string['invalidcolour'] = 'Please select a valid hexadecimal colour.';
|
||||
$string['invalidposition'] = 'Please select a positive number for position {$a}.';
|
||||
$string['landscape'] = 'Landscape';
|
||||
$string['modulename'] = 'Custom Certificate';
|
||||
$string['modulenameplural'] = 'Custom Certificates';
|
||||
|
@ -53,6 +63,8 @@ $string['page'] = 'Page {$a}';
|
|||
$string['pluginadministration'] = 'Custom Certificate administration';
|
||||
$string['pluginname'] = 'Custom Certificate';
|
||||
$string['portrait'] = 'Portrait';
|
||||
$string['posx'] = 'Position X';
|
||||
$string['posy'] = 'Postion Y';
|
||||
$string['uploadimage'] = 'Upload image';
|
||||
$string['width'] = 'Width';
|
||||
$string['widthnotvalid'] = 'The width has to be a valid number.';
|
||||
|
|
237
lib.php
237
lib.php
|
@ -24,10 +24,6 @@
|
|||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require_once($CFG->dirroot.'/course/lib.php');
|
||||
require_once($CFG->dirroot.'/grade/lib.php');
|
||||
require_once($CFG->dirroot.'/grade/querylib.php');
|
||||
|
||||
/**
|
||||
* Add customcert instance.
|
||||
*
|
||||
|
@ -38,8 +34,7 @@ require_once($CFG->dirroot.'/grade/querylib.php');
|
|||
function customcert_add_instance($data, $mform) {
|
||||
global $DB;
|
||||
|
||||
$time = time();
|
||||
$data->timecreated = $time;
|
||||
$data->timecreated = time();
|
||||
$data->timemodified = $data->timecreated;
|
||||
|
||||
return $DB->insert_record('customcert', $data);
|
||||
|
@ -75,11 +70,11 @@ function customcert_delete_instance($id) {
|
|||
global $DB;
|
||||
|
||||
// Ensure the customcert exists.
|
||||
if (!$customcert = $DB->get_record('customcert', array('id' => $id))) {
|
||||
if (!$DB->get_record('customcert', array('id' => $id))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get the course module used when deleting files associated to the customcert.
|
||||
// Get the course module as it is used when deleting files.
|
||||
if (!$cm = get_coursemodule_from_instance('customcert', $id)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -89,24 +84,28 @@ function customcert_delete_instance($id) {
|
|||
return false;
|
||||
}
|
||||
|
||||
// Delete the customcert issues.
|
||||
if (!$DB->delete_records('customcert_issues', array('customcertid' => $id))) {
|
||||
// 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))) {
|
||||
foreach ($elements as $element) {
|
||||
if (!customcert_delete_element($element)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get all the customcert pages.
|
||||
if ($pages = $DB->get_records('customcert_pages', array('customcertid' => $id))) {
|
||||
// Loop through pages.
|
||||
foreach ($pages as $p) {
|
||||
// Delete the text fields.
|
||||
if (!$DB->delete_records('customcert_text_fields', array('customcertpageid' => $p->id))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Delete the pages
|
||||
// Delete the pages.
|
||||
if (!$DB->delete_records('customcert_pages', array('customcertid' => $id))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Delete the customcert issues.
|
||||
if (!$DB->delete_records('customcert_issues', array('customcertid' => $id))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Delete any files associated with the customcert.
|
||||
|
@ -333,6 +332,102 @@ function customcert_upload_imagefiles($draftitemid) {
|
|||
file_save_draft_area_files($draftitemid, context_system::instance()->id, '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/elements";
|
||||
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 file exists, if not we do
|
||||
// not want to display it as an option as it will not work.
|
||||
$foldername = $elementfolder->getFilename();
|
||||
$classfile = "$elementdir/$foldername/lib.php";
|
||||
if (file_exists($classfile)) {
|
||||
require_once($classfile);
|
||||
$component = "customcertelement_{$foldername}";
|
||||
$options[$foldername] = get_string('pluginname', $component);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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 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;
|
||||
}
|
||||
// Format the font name, so "FontName-Style" becomes "Font Name - Style".
|
||||
$formatname = preg_replace("/([a-z])([A-Z])/", "$1 $2", $name);
|
||||
$formatname = preg_replace("/([a-zA-Z])-([a-zA-Z])/", "$1 - $2", $formatname);
|
||||
$options[$name] = $formatname;
|
||||
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.
|
||||
|
@ -340,7 +435,7 @@ function customcert_upload_imagefiles($draftitemid) {
|
|||
* @param stdClass $data the customcert data
|
||||
*/
|
||||
function customcert_save_page_data($data) {
|
||||
global $DB;
|
||||
global $CFG, $DB;
|
||||
|
||||
// Set the time to a variable.
|
||||
$time = time();
|
||||
|
@ -356,43 +451,64 @@ function customcert_save_page_data($data) {
|
|||
$page->orientation = $data->orientation_1;
|
||||
$page->width = $data->width_1;
|
||||
$page->height = $data->height_1;
|
||||
$page->backgroundimage = $data->backgroundimage_1;
|
||||
$page->pagenumber = 1;
|
||||
$page->timecreated = $time;
|
||||
$page->timemodified = $time;
|
||||
// Insert the page.
|
||||
$DB->insert_record('customcert_pages', $page);
|
||||
} else {
|
||||
// Go through the data and check for any page data.
|
||||
foreach ($data as $key => $value) {
|
||||
if (strpos($key, 'orientation_') !== false) {
|
||||
// Get the page id.
|
||||
$pageid = str_replace('orientation_', '', $key);
|
||||
// Get the rest of the elements now.
|
||||
$orientation = "orientation_$pageid";
|
||||
$width = "width_$pageid";
|
||||
$height = "height_$pageid";
|
||||
$backgroundimage = "backgroundimage_$pageid";
|
||||
// Create the page to update.
|
||||
$page = new stdClass();
|
||||
$page->id = $pageid;
|
||||
$page->customcertid = $data->id;
|
||||
$page->orientation = $data->$orientation;
|
||||
$page->width = $data->$width;
|
||||
$page->height = $data->$height;
|
||||
$page->backgroundimage = $data->$backgroundimage;
|
||||
$page->timemodified = $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.
|
||||
$orientation = 'orientation_' . $page->id;
|
||||
$width = 'width_' . $page->id;
|
||||
$height = 'height_' . $page->id;
|
||||
// Create the page data to update the DB with.
|
||||
$p = new stdClass();
|
||||
$p->id = $page->id;
|
||||
$p->orientation = $data->$orientation;
|
||||
$p->width = $data->$width;
|
||||
$p->height = $data->$height;
|
||||
$p->timemodified = $time;
|
||||
// Update the page.
|
||||
$DB->update_record('customcert_pages', $page);
|
||||
$DB->update_record('customcert_pages', $p);
|
||||
// Get the elements for the page.
|
||||
if ($elements = $DB->get_records('customcert_elements', array('pageid' => $page->id))) {
|
||||
// Loop through the elements.
|
||||
foreach ($elements as $element) {
|
||||
// Check that the standard class file exists.
|
||||
$classfile = "$CFG->dirroot/mod/customcert/elements/{$element->element}/lib.php";
|
||||
if (file_exists($classfile)) {
|
||||
$classname = "customcert_element_{$element->element}";
|
||||
$e = new $classname($element);
|
||||
$e->save_form_elements($data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles adding another element to a page in the customcert.
|
||||
*
|
||||
* @param string $element the name of the element
|
||||
* @param int $pageid the page id we are saving it to
|
||||
*/
|
||||
function customcert_add_element($element, $pageid) {
|
||||
global $CFG;
|
||||
|
||||
$classname = "customcert_element_{$element}";
|
||||
$classname::add_element($element, $pageid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles adding another page to the customcert.
|
||||
*
|
||||
* @param stdClass $data the customcert data
|
||||
* @param stdClass $data the form data
|
||||
*/
|
||||
function customcert_add_page($data) {
|
||||
global $DB;
|
||||
|
@ -408,8 +524,10 @@ function customcert_add_page($data) {
|
|||
$pagenum = $maxnum->maxpagenumber + 1;
|
||||
}
|
||||
|
||||
// New page creation.
|
||||
// Store time in a variable.
|
||||
$time = time();
|
||||
|
||||
// New page creation.
|
||||
$page = new stdClass();
|
||||
$page->customcertid = $data->id;
|
||||
$page->orientation = 'P';
|
||||
|
@ -427,7 +545,7 @@ function customcert_add_page($data) {
|
|||
* @param int $pageid the customcert page
|
||||
*/
|
||||
function customcert_delete_page($pageid) {
|
||||
global $DB;
|
||||
global $CFG, $DB;
|
||||
|
||||
// Get the page.
|
||||
$page = $DB->get_record('customcert_pages', array('id' => $pageid), '*', MUST_EXIST);
|
||||
|
@ -435,8 +553,12 @@ function customcert_delete_page($pageid) {
|
|||
// Delete this page.
|
||||
$DB->delete_records('customcert_pages', array('id' => $page->id));
|
||||
|
||||
// Delete any text fields belonging to this page.
|
||||
$DB->delete_records('customcert_text_fields', array('customcertpageid' => $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) {
|
||||
customcert_delete_element($element);
|
||||
}
|
||||
}
|
||||
|
||||
// Now we want to decrease the page number values of
|
||||
// the pages that are greater than the page we deleted.
|
||||
|
@ -448,6 +570,27 @@ function customcert_delete_page($pageid) {
|
|||
'pagenumber' => $page->pagenumber));
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles deleting an element.
|
||||
*
|
||||
* @param stdClass $element the element
|
||||
* @param bool returns true if success, false otherwise
|
||||
*/
|
||||
function customcert_delete_element($element) {
|
||||
global $CFG;
|
||||
|
||||
// Check that the standard class file exists.
|
||||
$classfile = "$CFG->dirroot/mod/customcert/elements/{$element->element}/lib.php";
|
||||
if (file_exists($classfile)) {
|
||||
require_once($classfile);
|
||||
$classname = "customcert_element_{$element->element}";
|
||||
$e = new $classname($element);
|
||||
return $e->delete_element();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the time the user has spent in the course.
|
||||
*
|
||||
|
|
|
@ -52,7 +52,6 @@ class mod_customcert_mod_form extends moodleform_mod {
|
|||
|
||||
$this->add_intro_editor(false, get_string('intro', 'customcert'));
|
||||
|
||||
// Design Options.
|
||||
$mform->addElement('header', 'options', get_string('options', 'customcert'));
|
||||
|
||||
$mform->addElement('text', 'requiredtime', get_string('coursetimereq', 'customcert'), array('size' => '3'));
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late
|
||||
*/
|
||||
|
||||
$module->version = 2012120701; // The current module version (Date: YYYYMMDDXX)
|
||||
$module->version = 2013022101; // The current module version (Date: YYYYMMDDXX)
|
||||
$module->requires = 2012062500; // Requires this Moodle version
|
||||
$module->cron = 0; // Period for cron to check this module (secs)
|
||||
$module->component = 'mod_customcert';
|
||||
|
|
Loading…
Reference in a new issue