aboutsummaryrefslogtreecommitdiff
path: root/lib/modules/CoreDocuments.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/modules/CoreDocuments.php')
-rw-r--r--lib/modules/CoreDocuments.php205
1 files changed, 205 insertions, 0 deletions
diff --git a/lib/modules/CoreDocuments.php b/lib/modules/CoreDocuments.php
new file mode 100644
index 0000000..2acfeef
--- /dev/null
+++ b/lib/modules/CoreDocuments.php
@@ -0,0 +1,205 @@
+<?php
+
+/*
+ * Copyright (c) 2012 Rasmus Fuhse <fuhse@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 (at your option) any later version.
+ */
+
+class CoreDocuments extends CorePlugin implements StudipModule, OERModule
+{
+
+
+ /**
+ * Determines if the StudipModule wants to handle the OERMaterial. Returns false if not.
+ * @param OERMaterial $material
+ * @return false|Icon
+ */
+ static public function oerModuleWantsToUseMaterial(OERMaterial $material)
+ {
+ return true;
+ }
+
+ /**
+ * Returns an Icon class object with the given role.
+ * @param string $role
+ * @return null|Icon
+ */
+ public function oerGetIcon($role = Icon::ROLE_CLICKABLE)
+ {
+ return Icon::create("file", $role);
+ }
+
+ /**
+ * This function is triggered i a user chose to use this module as the target of the oermaterial.
+ * Now this module should put a copy of $material in its own area of the given course.
+ * @param OERMaterial $material
+ * @param Course $course
+ * @return array|FileType
+ */
+ static public function oerModuleIntegrateMaterialToCourse(OERMaterial $material, Course $course)
+ {
+ $folder = Folder::findTopFolder($course->id);
+ $folder = $folder->getTypedFolder();
+ $uploaded_file = [
+ 'name' => $material['filename'],
+ 'type' => $material['content_type'],
+ 'content_terms_of_use_id' => "FREE_LICENSE",
+ 'description' => $material['description']
+ ];
+ $url = $material->getDownloadUrl();
+ if ($url) {
+ if ($material['host_id']) {
+ $tmp_name = $GLOBALS['TMP_PATH'] . '/oer_' . $material->getId();
+ file_put_contents($tmp_name, file_get_contents($url, false, get_default_http_stream_context($url)));
+ $uploaded_file['tmp_name'] = $tmp_name;
+ $uploaded_file['type'] = filesize($tmp_name);
+ } else {
+ $uploaded_file['tmp_name'] = $material->getFilePath();
+ $uploaded_file['size'] = filesize($material->getFilePath());
+ }
+
+ $standardfile = StandardFile::create($uploaded_file);
+ } elseif($material['source_url']) {
+ $standardfile = URLFile::create([
+ 'url' => $material['source_url'],
+ 'name' => $material['name'],
+ 'author_name' => implode(', ', array_map(function ($a) { return $a['name']; }, $material)),
+ 'description' => $material['description'],
+ 'content_terms_of_use_id' => "FREE_LICENSE"
+ ]);
+ }
+
+ if ($standardfile->getSize() || is_a($standardfile, 'URLFile')) {
+ $error = $folder->validateUpload($standardfile, User::findCurrent()->id);
+ if ($error && is_string($error)) {
+ if ($tmp_name) {
+ @unlink($tmp_name);
+ }
+ return [$error];
+ }
+
+ $newfile = $folder->addFile($standardfile);
+ if ($tmp_name) {
+ @unlink($tmp_name);
+ }
+ if (!$newfile) {
+ return [_('Daten konnten nicht kopiert werden!')];
+ }
+ return $newfile;
+ } else {
+ if ($tmp_name) {
+ @unlink($tmp_name);
+ }
+ return [_('Daten konnten nicht kopiert werden!')];
+ }
+ }
+
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getIconNavigation($course_id, $last_visit, $user_id)
+ {
+ $range_type = get_object_type($course_id, ['sem', 'inst']) === 'sem' ? 'course' : 'institute';
+ $navigation = new Navigation(
+ _('Dateibereich'),
+ "dispatch.php/{$range_type}/files"
+ );
+ $navigation->setImage(Icon::create('files', Icon::ROLE_CLICKABLE, ['title' => _('Dateien')]));
+
+ $condition = "INNER JOIN folders ON (folders.id = file_refs.folder_id)
+ WHERE folders.range_type = :range_type
+ AND folders.range_id = :context_id
+ AND GREATEST(file_refs.mkdate, file_refs.chdate) >= :last_visit
+ AND file_refs.user_id != :me";
+ $file_refs = FileRef::findBySQL($condition, [
+ 'me' => $user_id,
+ 'last_visit' => $last_visit,
+ 'context_id' => $course_id,
+ 'range_type' => $range_type
+ ]);
+ foreach ($file_refs as $fileref) {
+ $foldertype = $fileref->folder->getTypedFolder();
+ if ($foldertype->isFileDownloadable($fileref->getId(), $user_id)) {
+ $navigation->setImage(Icon::create('files', Icon::ROLE_ATTENTION), [
+ 'title' => _('Es gibt neue Dateien.'),
+ ]);
+ $navigation->setURL("dispatch.php/{$range_type}/files/flat", ['select' => 'new']);
+ break;
+ }
+ }
+
+ return $navigation;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getTabNavigation($course_id)
+ {
+ $range_type = get_object_type($course_id, ['sem', 'inst']) === 'sem' ? 'course' : 'institute';
+ $newFilesNavigation = new Navigation(_('Dateien'), "dispatch.php/{$range_type}/files");
+ $newFilesNavigation->setImage(Icon::create('files', Icon::ROLE_INFO_ALT));
+ $newFilesNavigation->setActiveImage(Icon::create('files', Icon::ROLE_INFO));
+ return ['files' => $newFilesNavigation];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getMetadata()
+ {
+ return [
+ 'summary' => _('Austausch von Dateien, Hausaufgabenordner & Terminordner'),
+ 'description' => _('Im Dateibereich können Dateien sowohl von ' .
+ 'Lehrenden als auch von Studierenden hoch- bzw. ' .
+ 'heruntergeladen werden. Es können Ordner angelegt und ' .
+ 'individuell benannt werden (nur Lehrende). Die Dateien ' .
+ 'können somit strukturiert zur Verfügung gestellt werden. ' .
+ 'Multimediadateien wie Grafiken, Audio- und Videodateien ' .
+ 'können sofort angezeigt bzw. abgespielt werden. Über das ' .
+ 'PlugIn "Dateiordnerberechtigung" können Im Dateibereich ' .
+ 'bestimmte Rechte für Studierende, wie z.B. das Leserecht, ' .
+ 'festgelegt werden.'),
+ 'displayname' => _('Dateien'),
+ 'category' => _('Lehr- und Lernorganisation'),
+ 'keywords' => _('Hoch- und Herunterladen von Dateien;
+ Anlegen von Ordnern und Unterordnern;
+ Verschieben einer Datei/eines Ordners per drag and drop innerhalb einer Veranstaltung;
+ Verschieben einer Datei/eines Ordners in eine andere Veranstaltung;
+ Kopieren einer Datei/eines Ordners in eine andere oder mehrere Veranstaltungen;
+ Verlinkung auf abgelegte Dateien möglich;
+ Erstellung Hausaufgabenordner durch Aktivierung der Funktion "Dateiordnerberechtigung"'),
+ 'descriptionshort' => _('Austausch von Dateien'),
+ 'descriptionlong' => _('Dateien können sowohl von Lehrenden als auch von Studierenden hoch- bzw. ' .
+ 'heruntergeladen werden. Ordner können angelegt und individuell benannt werden ' .
+ '(Standard: nur Lehrende), so dass Dateien strukuriert zur Verfügung gestellt ' .
+ 'werden können. Multimediadateien wie Grafiken, Audio- und Videodateien werden ' .
+ 'sofort angezeigt bzw. abspielbar dargestellt. Über das PlugIn "Dateiordnerberechtigungen" ' .
+ 'können Im Dateibereich bestimmte Rechte (r, w, x, f) für Studierende, wie z.B. das ' .
+ 'Leserecht (r), festgelegt werden.'),
+ 'icon' => Icon::create('files', Icon::ROLE_INFO),
+ 'icon_clickable' => Icon::create('files', Icon::ROLE_CLICKABLE),
+ 'screenshots' => [
+ 'path' => 'assets/images/plus/screenshots/Dateibereich_-_Dateiordnerberechtigung',
+ 'pictures' => [
+ 0 => ['source' => 'Ordneransicht_mit_geoeffnetem_Ordner.jpg', 'title' => _('Ordneransicht mit geöffnetem Ordner')],
+ 1 => ['source' => 'Ordneransicht_mit_Dateiinformationen.jpg', 'title' => _('Ordneransicht mit Dateiinformationen')],
+ 2 => ['source' => 'Neuen_Ordner_erstellen.jpg', 'title' => _('Neuen Ordner erstellen')],
+ 3 => ['source' => 'Ordner_zum_Hausaufgabenordner_umwandeln.jpg', 'title' => _('Ordner zum Hausaufgabenordner umwandeln')],
+ 4 => ['source' => 'Ansicht_alle_Dateien.jpg', 'title' => _('Ansicht alle Dateien')]
+ ]
+ ]
+ ];
+ }
+
+ public function getInfoTemplate($course_id)
+ {
+ // TODO: Implement getInfoTemplate() method.
+ return null;
+ }
+}