From 237f4841886802105fcbf00b5c8fe05f4a1c626f Mon Sep 17 00:00:00 2001 From: Damyon Wiese <damyon@moodle.com> Date: Tue, 5 Nov 2013 23:30:28 +0800 Subject: [PATCH] MDL-42671 EditPDF: Disable EditPDF is zlib is not available Also put a warning on the admin page if this is the case. --- lib/adminlib.php | 65 +++++++++++++++++++ .../lang/en/assignfeedback_editpdf.php | 2 + mod/assign/feedback/editpdf/locallib.php | 3 + mod/assign/feedback/editpdf/settings.php | 12 +++- 4 files changed, 80 insertions(+), 2 deletions(-) diff --git a/lib/adminlib.php b/lib/adminlib.php index b3006870ced..074ad6426b4 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -8553,3 +8553,68 @@ class admin_setting_configmultiselect_modules extends admin_setting_configmultis return true; } } + +/** + * Admin setting to show if a php extension is enabled or not. + * + * @copyright 2013 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class admin_setting_php_extension_enabled extends admin_setting { + + /** @var string The name of the extension to check for */ + private $extension; + + /** + * Calls parent::__construct with specific arguments + */ + public function __construct($name, $visiblename, $description, $extension) { + $this->extension = $extension; + $this->nosave = true; + parent::__construct($name, $visiblename, $description, ''); + } + + /** + * Always returns true, does nothing + * + * @return true + */ + public function get_setting() { + return true; + } + + /** + * Always returns true, does nothing + * + * @return true + */ + public function get_defaultsetting() { + return true; + } + + /** + * Always returns '', does not write anything + * + * @return string Always returns '' + */ + public function write_setting($data) { + // Do not write any setting. + return ''; + } + + /** + * Outputs the html for this setting. + * @return string Returns an XHTML string + */ + public function output_html($data, $query='') { + global $OUTPUT; + + $o = ''; + if (!extension_loaded($this->extension)) { + $warning = $OUTPUT->pix_icon('i/warning', '', '', array('role' => 'presentation')) . ' ' . $this->description; + + $o .= format_admin_setting($this, $this->visiblename, $warning); + } + return $o; + } +} diff --git a/mod/assign/feedback/editpdf/lang/en/assignfeedback_editpdf.php b/mod/assign/feedback/editpdf/lang/en/assignfeedback_editpdf.php index c6f18d33af9..a5046043d0c 100644 --- a/mod/assign/feedback/editpdf/lang/en/assignfeedback_editpdf.php +++ b/mod/assign/feedback/editpdf/lang/en/assignfeedback_editpdf.php @@ -89,3 +89,5 @@ $string['unsavedchanges'] = 'Unsaved changes'; $string['viewfeedbackonline'] = 'View annotated pdf...'; $string['white'] = 'White'; $string['yellow'] = 'Yellow'; +$string['zlibenabled'] = 'zlib enabled'; +$string['zlibnotavailable'] = 'Php extension "zlib" is not available. The annotate PDF feature relies on this php extension and will be disabled until zlib is installed and enabled.'; diff --git a/mod/assign/feedback/editpdf/locallib.php b/mod/assign/feedback/editpdf/locallib.php index 1df66f32555..bca275c2593 100644 --- a/mod/assign/feedback/editpdf/locallib.php +++ b/mod/assign/feedback/editpdf/locallib.php @@ -266,6 +266,9 @@ class assign_feedback_editpdf extends assign_feedback_plugin { */ public function is_enabled() { $testpath = assignfeedback_editpdf\pdf::test_gs_path(); + if (!extension_loaded('zlib')) { + return false; + } if ($testpath->status == assignfeedback_editpdf\pdf::GSPATH_OK) { return true; } diff --git a/mod/assign/feedback/editpdf/settings.php b/mod/assign/feedback/editpdf/settings.php index 910c72e48ff..10493d0a856 100644 --- a/mod/assign/feedback/editpdf/settings.php +++ b/mod/assign/feedback/editpdf/settings.php @@ -35,8 +35,16 @@ $settings->add($setting); // Ghostscript setting. $settings->add(new admin_setting_configexecutable('assignfeedback_editpdf/gspath', - get_string('gspath', 'assignfeedback_editpdf'), - get_string('gspath_help', 'assignfeedback_editpdf'), '/usr/bin/gs')); + get_string('gspath', 'assignfeedback_editpdf'), + get_string('gspath_help', 'assignfeedback_editpdf'), + '/usr/bin/gs')); + +$setting = new admin_setting_php_extension_enabled('assignfeedback_editpdf/zlibenabled', + get_string('zlibenabled', 'assignfeedback_editpdf'), + get_string('zlibnotavailable', 'assignfeedback_editpdf'), + 'zlib'); + +$settings->add($setting); $url = new moodle_url('/mod/assign/feedback/editpdf/testgs.php'); $link = html_writer::link($url, get_string('testgs', 'assignfeedback_editpdf'));