Merge branch 'MDL-65142-master' of git://github.com/rezaies/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Mon, 8 Apr 2019 15:09:03 +0000 (17:09 +0200)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Mon, 8 Apr 2019 15:09:03 +0000 (17:09 +0200)
dataformat/pdf/classes/privacy/provider.php [new file with mode: 0644]
dataformat/pdf/classes/writer.php [new file with mode: 0644]
dataformat/pdf/lang/en/dataformat_pdf.php [new file with mode: 0644]
dataformat/pdf/version.php [new file with mode: 0644]

diff --git a/dataformat/pdf/classes/privacy/provider.php b/dataformat/pdf/classes/privacy/provider.php
new file mode 100644 (file)
index 0000000..770142b
--- /dev/null
@@ -0,0 +1,46 @@
+<?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/>.
+
+/**
+ * Privacy provider implementation for dataformat_pdf.
+ *
+ * @package    dataformat_pdf
+ * @copyright  2019 Shamim Rezaie <shamim@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+namespace dataformat_pdf\privacy;
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Privacy provider implementation for dataformat_pdf.
+ *
+ * @copyright  2019 Shamim Rezaie <shamim@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class provider implements \core_privacy\local\metadata\null_provider {
+
+    /**
+     * Get the language string identifier with the component's language
+     * file to explain why this plugin stores no data.
+     *
+     * @return  string
+     */
+    public static function get_reason() : string {
+        return 'privacy:metadata';
+    }
+}
diff --git a/dataformat/pdf/classes/writer.php b/dataformat/pdf/classes/writer.php
new file mode 100644 (file)
index 0000000..0559c93
--- /dev/null
@@ -0,0 +1,139 @@
+<?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/>.
+
+/**
+ * pdf data format writer
+ *
+ * @package    dataformat_pdf
+ * @copyright  2019 Shamim Rezaie <shamim@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+namespace dataformat_pdf;
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * pdf data format writer
+ *
+ * @package    dataformat_pdf
+ * @copyright  2019 Shamim Rezaie <shamim@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class writer extends \core\dataformat\base {
+
+    public $mimetype = "application/pdf";
+
+    public $extension = ".pdf";
+
+    /**
+     * @var \pdf The pdf object that is used to generate the pdf file.
+     */
+    protected $pdf;
+
+    /**
+     * @var float Each column's width in the current sheet.
+     */
+    protected $colwidth;
+
+    /**
+     * @var string[] Title of columns in the current sheet.
+     */
+    protected $columns;
+
+    /**
+     * writer constructor.
+     */
+    public function __construct() {
+        global $CFG;
+        require_once($CFG->libdir . '/pdflib.php');
+
+        $this->pdf = new \pdf();
+        $this->pdf->setPrintHeader(false);
+        $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+        // Set background color for headings.
+        $this->pdf->SetFillColor(238, 238, 238);
+    }
+
+    public function send_http_headers() {
+    }
+
+    public function start_output() {
+        $this->pdf->AddPage('L');
+    }
+
+    public function start_sheet($columns) {
+        $margins = $this->pdf->getMargins();
+        $pagewidth = $this->pdf->getPageWidth() - $margins['left'] - $margins['right'];
+
+        $this->colwidth = $pagewidth / count($columns);
+        $this->columns = $columns;
+
+        $this->print_heading();
+    }
+
+    public function write_record($record, $rownum) {
+        $rowheight = 0;
+
+        foreach ($record as $cell) {
+            $rowheight = max($rowheight, $this->pdf->getStringHeight($this->colwidth, $cell, false, true, '', 1));
+        }
+
+        $margins = $this->pdf->getMargins();
+        if ($this->pdf->GetY() + $rowheight + $margins['bottom'] > $this->pdf->getPageHeight()) {
+            $this->pdf->AddPage('L');
+            $this->print_heading();
+        }
+
+        $total = count($record);
+        $counter = 1;
+        foreach ($record as $cell) {
+            $nextposition = ($counter == $total) ? 1 : 0;
+            $this->pdf->Multicell($this->colwidth, $rowheight, $cell, 1, 'L', false, $nextposition);
+            $counter++;
+        }
+    }
+
+    public function close_output() {
+        $filename = $this->filename . $this->get_extension();
+
+        $this->pdf->Output($filename, 'D');
+    }
+
+    /**
+     * Prints the heading row.
+     */
+    private function print_heading() {
+        $fontfamily = $this->pdf->getFontFamily();
+        $fontstyle = $this->pdf->getFontStyle();
+        $this->pdf->SetFont($fontfamily, 'B');
+        $rowheight = 0;
+        foreach ($this->columns as $columns) {
+            $rowheight = max($rowheight, $this->pdf->getStringHeight($this->colwidth, $columns, false, true, '', 1));
+        }
+
+        $total = count($this->columns);
+        $counter = 1;
+        foreach ($this->columns as $columns) {
+            $nextposition = ($counter == $total) ? 1 : 0;
+            $this->pdf->Multicell($this->colwidth, $rowheight, $columns, 1, 'C', true, $nextposition);
+            $counter++;
+        }
+
+        $this->pdf->SetFont($fontfamily, $fontstyle);
+    }
+}
diff --git a/dataformat/pdf/lang/en/dataformat_pdf.php b/dataformat/pdf/lang/en/dataformat_pdf.php
new file mode 100644 (file)
index 0000000..e4ce79c
--- /dev/null
@@ -0,0 +1,28 @@
+<?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/>.
+
+/**
+ * pdf dataformat lang strings.
+ *
+ * @package    dataformat_pdf
+ * @copyright  2019 Shamim Rezaie <shamim@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+$string['dataformat'] = 'Portable Document Format (.pdf)';
+$string['privacy:metadata'] = 'The PDF data format plugin does not store any personal data.';
+$string['shortname'] = 'PDF';
+
diff --git a/dataformat/pdf/version.php b/dataformat/pdf/version.php
new file mode 100644 (file)
index 0000000..99c62d8
--- /dev/null
@@ -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/>.
+
+/**
+ * Data activity filter version information
+ *
+ * @package    dataformat_pdf
+ * @copyright  2019 Shamim Rezaie <shamim@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+$plugin->version   = 2019040100;
+$plugin->requires  = 2018112800;  // Requires this Moodle version.
+$plugin->component = 'dataformat_pdf';