aboutsummaryrefslogtreecommitdiff
path: root/lib/extern/modules/ExternModuleDownload.class.php
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+github@gmail.com>2021-07-22 16:07:19 +0200
committerJan-Hendrik Willms <tleilax+github@gmail.com>2021-07-22 16:19:12 +0200
commita3da1483a9e689846179159355badfec8073dbec (patch)
tree770dcca6bdf5f6f2a11b0e7fcbbeda6919a3fc52 /lib/extern/modules/ExternModuleDownload.class.php
current code from svn, revision 62608
Diffstat (limited to 'lib/extern/modules/ExternModuleDownload.class.php')
-rw-r--r--lib/extern/modules/ExternModuleDownload.class.php343
1 files changed, 343 insertions, 0 deletions
diff --git a/lib/extern/modules/ExternModuleDownload.class.php b/lib/extern/modules/ExternModuleDownload.class.php
new file mode 100644
index 0000000..5a31118
--- /dev/null
+++ b/lib/extern/modules/ExternModuleDownload.class.php
@@ -0,0 +1,343 @@
+<?
+# Lifter002: TODO
+# Lifter007: TODO
+# Lifter003: TODO
+# Lifter010: TODO
+/**
+* ExternModuleDownload.class.php
+*
+*
+*
+*
+* @author Peter Thienel <pthienel@web.de>, Suchi & Berg GmbH <info@data-quest.de>
+* @access public
+* @modulegroup extern
+* @module ExternModuleDownload
+* @package studip_extern
+*/
+
+// +---------------------------------------------------------------------------+
+// This file is part of Stud.IP
+// ExternModuleDownload.class.php
+//
+// Copyright (C) 2003 Peter Thienel <pthienel@web.de>,
+// Suchi & Berg GmbH <info@data-quest.de>
+// +---------------------------------------------------------------------------+
+// This program 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 2
+// of the License, or any later version.
+// +---------------------------------------------------------------------------+
+// This program 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 this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+// +---------------------------------------------------------------------------+
+
+
+require_once 'lib/extern/views/extern_html_templates.inc.php';
+require_once 'lib/statusgruppe.inc.php';
+
+
+class ExternModuleDownload extends ExternModule {
+
+ var $field_names = [];
+ var $data_fields = ["icon", "filename", "description", "mkdate",
+ "filesize", "fullname"];
+ var $registered_elements = ["Body", "TableHeader", "TableHeadrow",
+ "TableRow", "Link", "LinkIntern", "TableFooter"];
+ var $args = ['seminar_id'];
+
+ /**
+ *
+ */
+ function __construct($range_id, $module_name, $config_id = NULL, $set_config = NULL, $global_id = NULL) {
+ $this->field_names =
+ [
+ _("Icon"),
+ _("Dateiname"),
+ _("Beschreibung"),
+ _("Datum"),
+ _("Größe"),
+ _("Upload durch")
+ ];
+ parent::__construct($range_id, $module_name, $config_id, $set_config, $global_id);
+ }
+
+ function setup () {
+ $this->elements["LinkIntern"]->link_module_type = 2;
+ $this->elements["LinkIntern"]->real_name = _("Link zum Modul MitarbeiterInnendetails");
+ $this->elements["Link"]->real_name = _("Link zum Dateidownload");
+ }
+
+ function printout ($args) {
+ if ($this->config->getValue("Main", "wholesite"))
+ echo html_header($this->config);
+
+ if (!$language = $this->config->getValue("Main", "language"))
+ $language = "de_DE";
+ init_i18n($language);
+
+ echo $this->toString($args);
+
+ if ($this->config->getValue("Main", "wholesite"))
+ echo html_footer();
+ }
+
+ function printoutPreview () {
+ echo html_header($this->config);
+
+ if (!$language = $this->config->getValue("Main", "language"))
+ $language = "de_DE";
+ init_i18n($language);
+
+ echo $this->toStringPreview();
+
+ echo html_footer();
+ }
+
+ function toString ($args = NULL) {
+
+ $error_message = "";
+
+ // check for valid range_id
+ if(!$this->checkRangeId($this->config->range_id)) {
+ $error_message = $GLOBALS["EXTERN_ERROR_MESSAGE"];
+ }
+ // if $args['seminar_id'] is given, check for free access
+ if ($args['seminar_id']) {
+ $seminar_id = $args['seminar_id'];
+ $query = "SELECT Lesezugriff FROM seminare s LEFT JOIN seminar_inst si ";
+ $query .= "USING(seminar_id) WHERE s.seminar_id = ? ";
+ $query .= "AND si.institut_id = ?";
+
+ $parameters = [$seminar_id, $this->config->range_id];
+ $statement = DBManager::get()->prepare($query);
+ $statement->execute($parameters);
+ $row = $statement->fetch(PDO::FETCH_ASSOC);
+
+ if ($row === false && $row['Lesezugriff'] == 0)
+ $error_message = $GLOBALS["EXTERN_ERROR_MESSAGE"];
+ } else {
+ $seminar_id = $this->config->range_id;
+ }
+
+ $sort = $this->config->getValue("Main", "sort");
+ $query_order = [];
+ foreach ($sort as $key => $position) {
+ if ($position > 0) {
+ $query_order[$position] = $this->data_fields[$key];
+ }
+ }
+ if (count($query_order)) {
+ ksort($query_order, SORT_NUMERIC);
+ $query_order = implode(",", $query_order) . " DESC";
+ } else {
+ $query_order = '';
+ }
+
+ if (!$nameformat = $this->config->getValue("Main", "nameformat")) {
+ $nameformat = "no_title_short";
+ }
+
+ $downloadable_file_refs = [];
+
+ $top_folder = Folder::findTopFolder($seminar_id);
+ $top_folder = $top_folder->getTypedFolder();
+
+ $files = $folders = [];
+ extract(FileManager::getFolderFilesRecursive($top_folder, 'nobody'));
+
+ foreach ($files as $f) {
+ if ($folders[$f->folder_id]->isFileDownloadable($f, 'nobody')) {
+ $file_data = $f->toArray();
+ $file_data['fullname'] = $f->owner->getFullname($nameformat);
+ $file_data['username'] = $f->owner->username;
+ $file_data['filename'] = $f->name;
+ $file_data['filesize'] = $f->size;
+ $downloadable_file_refs[] = $file_data;
+ }
+ }
+
+ if (empty($downloadable_file_refs)) {
+ $error_message = $this->config->getValue("Main", "nodatatext");
+ }
+
+ $out = $this->elements["TableHeadrow"]->toString();
+
+ if ($error_message) {
+ // use one column and set it visible to display error_message
+ $this->config->setValue('Main', 'order', ['0']);
+ $this->config->setValue('Main', 'visible', ['1']);
+ $this->config->setValue('Main', 'width', ['100%']);
+ $out = $this->elements['TableRow']->toString(['content' => ['' => $error_message]]);
+ } else {
+
+ $table_row_data["data_fields"] = $this->data_fields;
+ $downloadable_file_refs = new SimpleCollection($downloadable_file_refs);
+ $downloadable_file_refs->orderBy($query_order);
+ foreach ($downloadable_file_refs as $downloadable_file_ref) {
+ $icon = Icon::create(FileManager::getIconNameForMimeType($downloadable_file_ref->mime_type), 'clickable');
+
+ $download_link = $downloadable_file_ref->download_url;
+
+ // Aufbereiten der Daten
+ $table_row_data["content"] = [
+ "icon" => sprintf("<a href=\"%s\">%s</a>",
+ $download_link,
+ $icon->asImg()),
+
+ "filename" => $this->elements["Link"]->toString(["content" =>
+ htmlReady($downloadable_file_ref->name), "link" => $download_link]),
+
+ "description" => htmlReady(mila_extern($downloadable_file_ref->description,
+ $this->config->getValue("Main", "lengthdesc"))),
+
+ "mkdate" => strftime($this->config->getValue("Main", "dateformat"), $downloadable_file_ref->mkdate),
+
+ "filesize" => $downloadable_file_ref->size > 1048576 ? round($downloadable_file_ref->size / 1048576, 1) . " MB"
+ : round($downloadable_file_ref->size / 1024, 1) . " kB",
+
+ ];
+ // if user is member of a group then link name to details page
+ if (GetRoleNames(GetAllStatusgruppen($this->config->range_id, $downloadable_file_ref['user_id']))) {
+ $table_row_data['content']['fullname'] =
+ $this->elements['LinkIntern']->toString(['content' =>
+ htmlReady($downloadable_file_ref->fullname), 'module' => 'Persondetails',
+ 'link_args' => 'username=' . $downloadable_file_ref->username]);
+ } else {
+ $table_row_data['content']['fullname'] = htmlReady($downloadable_file_ref->fullname);
+ }
+ $out .= $this->elements["TableRow"]->toString($table_row_data);
+ }
+ }
+
+ return $this->elements["TableHeader"]->toString(["content" => $out]);
+ }
+
+ function toStringPreview () {
+ $time = time();
+ // preview data
+ $data[] = ["dokument_id" => 1, "description" => _("Das ist eine Text-Datei."),
+ "filename" => "text_file.txt", "mkdate" => ($time - 100000), "chdate" => ($time - 50000),
+ "filesize" => 26378, "Vorname" => "Julius", "Nachname" => "Rodman"];
+ $data[] = ["dokument_id" => 2, "description" => _("Das ist eine Powerpoint-Datei."),
+ "filename" => "powerpoint_file.ppt", "mkdate" => ($time - 200000), "chdate" => ($time - 150000),
+ "filesize" => 263784, "Vorname" => "William", "Nachname" => "Wilson"];
+ $data[] = ["dokument_id" => 3, "description" => _("Das ist eine ZIP-Datei."),
+ "filename" => "zip_file.zip", "mkdate" => ($time - 300000), "chdate" => ($time - 250000),
+ "filesize" => 63784, "Vorname" => "August", "Nachname" => "Bedloe"];
+ $data[] = ["dokument_id" => 4, "description" => _("Das ist eine Excel-Datei."),
+ "filename" => "excel_file.txt", "mkdate" => ($time - 400000), "chdate" => ($time - 350000),
+ "filesize" => 23784, "Vorname" => "Ernst", "Nachname" => "Waldemar"];
+ $data[] = ["dokument_id" => 5, "description" => _("Das ist eine Bild-Datei."),
+ "filename" => "bild_jpeg_file.jpg", "mkdate" => ($time - 500000), "chdate" => ($time - 450000),
+ "filesize" => 53784, "Vorname" => "Absalom", "Nachname" => "Hicks"];
+ $data[] = ["dokument_id" => 6, "description" => _("Das ist ein Dokument im Microsoft Rich-Text-Format."),
+ "filename" => "microsoft_rtf_file.rtf", "mkdate" => ($time - 600000), "chdate" => ($time - 550000),
+ "filesize" => 563784, "Vorname" => "Dirk", "Nachname" => "Peters"];
+ $data[] = ["dokument_id" => 7, "description" => _("Das ist ein Adobe PDF-Dokument."),
+ "filename" => "adobe_pdf_file.pdf", "mkdate" => ($time - 700000), "chdate" => ($time - 650000),
+ "filesize" => 13784, "Vorname" => "Augustus", "Nachname" => "Barnard"];
+ $data[] = ["dokument_id" => 8, "description" => _("Und noch ein ZIP-Archiv."),
+ "filename" => "gnu_zip_file.tar.gz", "mkdate" => ($time - 800000), "chdate" => ($time - 750000),
+ "filesize" => 2684, "Vorname" => "Gordon", "Nachname" => "Pym"];
+ $data[] = ["dokument_id" => 9, "description" => _("Eine weitere Text-Datei."),
+ "filename" => "text2_file.txt", "mkdate" => ($time - 900000), "chdate" => ($time - 850000),
+ "filesize" => 123784, "Vorname" => "Hans", "Nachname" => "Pfaal"];
+ $data[] = ["dokument_id" => 10, "description" => _("Ein Bild im PNG-Format."),
+ "filename" => "picture_png_file.png", "mkdate" => ($time - 1000000), "chdate" => ($time - 950000),
+ "filesize" => 813784, "Vorname" => "John", "Nachname" => "Greely"];
+ $data[] = ["dokument_id" => 11, "description" => _("Eine anderes Format."),
+ "filename" => "good_music.mp3", "mkdate" => ($time - 1150000), "chdate" => ($time - 653900),
+ "filesize" => 934651, "Vorname" => "Augustus", "Nachname" => "Barnard"];
+
+ $table_row_data["data_fields"] = $this->data_fields;
+ $out = $this->elements["TableHeadrow"]->toString();
+
+ foreach ($data as $db) {
+
+ preg_match("/^.+\.([a-z1-9_-]+)$/i", $db["filename"], $file_suffix);
+
+ // choose the icon for the given file format
+ $icon = "";
+ switch ($file_suffix[1]) {
+ case "txt" :
+ if (!$picture_file = $this->config->getValue("Main", "icontxt"))
+ $icon = Icon::create("file-text", "clickable");
+ break;
+ case "xls" :
+ if (!$picture_file = $this->config->getValue("Main", "iconxls"))
+ $icon = Icon::create("file-xls", "clickable");
+ break;
+ case "ppt" :
+ if (!$picture_file = $this->config->getValue("Main", "iconppt"))
+ $icon = Icon::create("file-presentation", "clickable");
+ break;
+ case "rtf" :
+ if (!$picture_file = $this->config->getValue("Main", "iconrtf"))
+ $icon = Icon::create("file-text", "clickable");
+ break;
+ case "zip" :
+ case "tgz" :
+ case "gz" :
+ if (!$picture_file = $this->config->getValue("Main", "iconzip"))
+ $icon = Icon::create("file-archive", "clickable");
+ break;
+ case "jpg" :
+ case "png" :
+ case "gif" :
+ case "jpeg" :
+ case "tif" :
+ if (!$picture_file = $this->config->getValue("Main", "iconpic"))
+ $icon = Icon::create("file-image", "clickable");
+ break;
+ case "pdf" :
+ if (!$picture_file = $this->config->getValue("Main", "iconpdf"))
+ $icon = Icon::create("file-pdf", "clickable");
+ break;
+ default :
+ if (!$picture_file = $this->config->getValue("Main", "icondefault"))
+ $icon = Icon::create("file-generic", "clickable");
+ }
+
+ if ($icon)
+ $picture_file = $icon;
+
+ // Aufbereiten der Daten
+ $table_row_data["content"] = [
+ "icon" => $this->elements["Link"]->toString(
+ [
+ "content" => is_string($picture_file)
+ ? Assets::img($picture_file)
+ : $picture_file->asImg(),
+ "link" => ""]),
+
+ "filename" => $this->elements["Link"]->toString(["content" =>
+ htmlReady($db["filename"]), "link" => ""]),
+
+ "description" => htmlReady(mila_extern($db["description"],
+ $this->config->getValue("Main", "lengthdesc"))),
+
+ "mkdate" => strftime($this->config->getValue("Main", "dateformat"), $db["mkdate"]),
+
+ "filesize" => $db["filesize"] > 1048576 ? round($db["filesize"] / 1048576, 1) . " MB"
+ : round($db["filesize"] / 1024, 1) . " kB",
+
+ "fullname" => $this->elements["LinkIntern"]->toString(
+ ["content" => htmlReady($db["Vorname"]." ".$db["Nachname"])])
+
+ ];
+ $out .= $this->elements["TableRow"]->toString($table_row_data);
+ }
+
+ return $this->elements["TableHeader"]->toString(["content" => $out]);
+ }
+
+
+}
+
+?>