From e8db1dba82423a1a6fdab49c849e26fc036a15f4 Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Tue, 23 Aug 2016 19:25:31 +0800 Subject: [PATCH] Added a background image element --- element/bgimage/classes/element.php | 132 ++++++++++++++++++ .../lang/en/customcertelement_bgimage.php | 25 ++++ element/bgimage/version.php | 29 ++++ 3 files changed, 186 insertions(+) create mode 100644 element/bgimage/classes/element.php create mode 100644 element/bgimage/lang/en/customcertelement_bgimage.php create mode 100644 element/bgimage/version.php diff --git a/element/bgimage/classes/element.php b/element/bgimage/classes/element.php new file mode 100644 index 0000000..c0ba259 --- /dev/null +++ b/element/bgimage/classes/element.php @@ -0,0 +1,132 @@ +. + +namespace customcertelement_bgimage; + +defined('MOODLE_INTERNAL') || die(); + +/** + * The customcert element background image's core interaction API. + * + * @package customcertelement_bgimage + * @copyright 2016 Mark Nelson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class element extends \customcertelement_image\element { + + /** + * This function renders the form elements when adding a customcert element. + * + * @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()); + $mform->addElement('filemanager', 'customcertimage', get_string('uploadimage', 'customcert'), '', $this->filemanageroptions); + } + + /** + * Performs validation on the element values. + * + * @param array $data the submitted data + * @param array $files the submitted files + * @return array the validation errors + */ + public function validate_form_elements($data, $files) { + // Array to return the errors. + return array(); + } + + /** + * This will handle how form data will be saved into the data column in the + * customcert_elements table. + * + * @param \stdClass $data the form data + * @return string the json encoded array + */ + public function save_unique_data($data) { + // Array of data we will be storing in the database. + $arrtostore = array( + 'pathnamehash' => $data->image, + 'width' => 0, + 'height' => 0 + ); + + return json_encode($arrtostore); + } + + /** + * Handles rendering the element on the pdf. + * + * @param \pdf $pdf the pdf object + * @param bool $preview true if it is a preview, false otherwise + * @param \stdClass $user the user we are rendering this for + */ + public function render($pdf, $preview, $user) { + global $CFG; + + // If there is no element data, we have nothing to display. + if (empty($this->element->data)) { + return; + } + + $imageinfo = json_decode($this->element->data); + + // Get the image. + $fs = get_file_storage(); + if ($file = $fs->get_file_by_hash($imageinfo->pathnamehash)) { + $contenthash = $file->get_contenthash(); + $l1 = $contenthash[0] . $contenthash[1]; + $l2 = $contenthash[2] . $contenthash[3]; + $location = $CFG->dataroot . '/filedir' . '/' . $l1 . '/' . $l2 . '/' . $contenthash; + + // Set the image to the size of the PDF page. + $pdf->Image($location, 0, 0, $pdf->getPageWidth(), $pdf->getPageHeight()); + } + } + + /** + * Render the element in html. + * + * 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; + + // If there is no element data, we have nothing to display. + if (empty($this->element->data)) { + return ''; + } + + $imageinfo = json_decode($this->element->data); + + // Get the image. + $fs = get_file_storage(); + if ($file = $fs->get_file_by_hash($imageinfo->pathnamehash)) { + $url = \moodle_url::make_pluginfile_url($file->get_contextid(), 'mod_customcert', 'image', $file->get_itemid(), + $file->get_filepath(), $file->get_filename()); + // Get the page we are rendering this on. + $page = $DB->get_record('customcert_pages', array('id' => $this->element->pageid), '*', MUST_EXIST); + + // Set the image to the size of the page. + $style = 'width: ' . $page->width . 'mm; height: ' . $page->height . 'mm'; + return \html_writer::tag('img', '', array('src' => $url, 'style' => $style)); + } + } +} + diff --git a/element/bgimage/lang/en/customcertelement_bgimage.php b/element/bgimage/lang/en/customcertelement_bgimage.php new file mode 100644 index 0000000..ef6357c --- /dev/null +++ b/element/bgimage/lang/en/customcertelement_bgimage.php @@ -0,0 +1,25 @@ +. + +/** + * Strings for component 'customcertelement_bgimage', language 'en'. + * + * @package customcertelement_bgimage + * @copyright 2016 Mark Nelson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +$string['pluginname'] = 'Background image'; diff --git a/element/bgimage/version.php b/element/bgimage/version.php new file mode 100644 index 0000000..6cf45d5 --- /dev/null +++ b/element/bgimage/version.php @@ -0,0 +1,29 @@ +. + +/** + * This file contains the version information for the background image plugin. + * + * @package customcertelement_bgimage + * @copyright 2016 Mark Nelson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.'); + +$plugin->version = 2016021900; // The current module version (Date: YYYYMMDDXX). +$plugin->requires = 2015051100; // Requires this Moodle version (2.9). +$plugin->component = 'customcertelement_bgimage';