From cae4796dd124b0b855773858f58c41609b78c09a Mon Sep 17 00:00:00 2001
From: Rasmus Fuhse <fuhse@data-quest.de>
Date: Wed, 16 Jun 2021 17:27:03 +0200
Subject: [PATCH] implement copying of files

---
 controllers/copy.php | 22 ++++++++++++++++++++--
 plugin.manifest      |  4 ++--
 views/copy/info.php  |  8 ++++++++
 3 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/controllers/copy.php b/controllers/copy.php
index 77c23e7..8ae7043 100755
--- a/controllers/copy.php
+++ b/controllers/copy.php
@@ -41,7 +41,7 @@ class CopyController extends PluginController
                 "semester_id", "dozent_id", "lock_copied_courses",
                 "invisible_copied_courses", "cycles", "resource_assignments",
                 "week_offset", "end_offset", "copy_tutors", "with_children",
-                "contents_scm"
+                "contents_scm", "contents_documents"
             ];
             foreach ($params as $param) {
                 $config_name = "COURSECOPY_SETTINGS_".strtoupper($param);
@@ -78,7 +78,7 @@ class CopyController extends PluginController
                 foreach ($course_ids as $course_id) {
                     $oldcourse = Course::find($course_id);
 
-                    if ($oldcourse) {
+                    if ($oldcourse && Seminar_Perm::get()->have_studip_perm('dozent', $course_id)) {
                         $newcourse = new Course();
                         $newcourse->setData($oldcourse->toArray());
                         if ($newcourse['parent_course']) {
@@ -268,6 +268,24 @@ class CopyController extends PluginController
                                 $new_scm->store();
                             }
                         }
+                        if (Request::get("contents_documents")) {
+                            $oldtopfolder = Folder::findTopFolder($oldcourse->getId());
+                            $newtopfolder = Folder::findTopFolder($newcourse->getId());
+                            foreach ($oldtopfolder->file_refs as $fileref) {
+                                FileManager::copyFile(
+                                    $fileref->getFileType(),
+                                    $newtopfolder->getTypedFolder(),
+                                    User::findCurrent()
+                                );
+                            }
+                            foreach ($oldtopfolder->subfolders as $subfolder) {
+                                FileManager::copyFolder(
+                                    $subfolder->getTypedFolder(),
+                                    $newtopfolder->getTypedFolder(),
+                                    User::findCurrent()
+                                );
+                            }
+                        }
                     }
                 }
                 PageLayout::postSuccess(_("Die Veranstaltungen wurden erfolgreich kopiert."));
diff --git a/plugin.manifest b/plugin.manifest
index ccb1fda..ed77a43 100755
--- a/plugin.manifest
+++ b/plugin.manifest
@@ -1,6 +1,6 @@
 pluginname=CourseCopy
 pluginclassname=CourseCopy
-version=1.7
+version=1.8.2
 origin=data-quest
-studipMinVersion=4.0
+studipMinVersion=4.6
 studipMaxVersion=5.0.99
diff --git a/views/copy/info.php b/views/copy/info.php
index 492c82d..5d4e0f4 100755
--- a/views/copy/info.php
+++ b/views/copy/info.php
@@ -87,12 +87,20 @@
     <fieldset>
         <legend><?= _("Inhalte") ?></legend>
 
+        <label>
+            <input type="checkbox"
+                   name="contents_documents"
+                   value="1"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_CONTENTS_DOCUMENTS ? " checked" : "" ?>>
+            <?= _("Dateien mit kopieren") ?>
+        </label>
+
         <label>
             <input type="checkbox"
                    name="contents_scm"
                    value="1"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_CONTENTS_SCM ? " checked" : "" ?>>
             <?= _("Freie Inhaltsseiten mit kopieren") ?>
         </label>
+
     </fieldset>
 
     <div data-dialog-button>
-- 
GitLab