From cc2b7ea551118ab0d010f23a7b68ecc79c5b1336 Mon Sep 17 00:00:00 2001 From: moodler Date: Sun, 17 Aug 2003 14:46:44 +0000 Subject: [PATCH] Fixes bug #619 -- moving discussions wasn't moving attachments --- mod/forum/discuss.php | 3 +++ mod/forum/lib.php | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/mod/forum/discuss.php b/mod/forum/discuss.php index 2b8cf0d9e8..60cf79ef42 100644 --- a/mod/forum/discuss.php +++ b/mod/forum/discuss.php @@ -28,6 +28,9 @@ error("Only teachers can do that!"); } if ($forum = get_record("forum", "id", $move)) { + if (!forum_move_attachments($discussion, $move)) { + notify("Errors occurred while moving attachment directories - check your file permissions"); + } set_field("forum_discussions", "forum", $forum->id, "id", $discussion->id); $discussion->forum = $forum->id; add_to_log($course->id, "forum", "move discussion", "discuss.php?d=$discussion->id", "$discussion->id"); diff --git a/mod/forum/lib.php b/mod/forum/lib.php index f68c8ff014..88436d5841 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -1357,6 +1357,34 @@ function forum_delete_old_attachments($post, $exception="") { } } +function forum_move_attachments($discussion, $forumid) { +/// Given a discussion object that is being moved to forumid, +/// this function checks all posts in that discussion +/// for attachments, and if any are found, these are +/// moved to the new forum directory. + + global $CFG; + + $return = true; + + if ($posts = get_records_select("forum_posts", "discussion = '$discussion->id' AND attachment <> ''")) { + foreach ($posts as $oldpost) { + $oldpost->course = $discussion->course; + $oldpost->forum = $discussion->forum; + $oldpostdir = "$CFG->dataroot/".forum_file_area_name($oldpost); + if (is_dir($oldpostdir)) { + $newpost = $oldpost; + $newpost->forum = $forumid; + $newpostdir = "$CFG->dataroot/".forum_file_area_name($newpost); + if (! @rename($oldpostdir, $newpostdir)) { + $return = false; + } + } + } + } + return $return; +} + function forum_print_attachments($post, $return=NULL) { // if return=html, then return a html string. // if return=text, then return a text-only string. -- 2.39.5