MDL-14722 Added new maxattachments setting at admin and forum level to

set the maximum number of attachments for forum posts.   Default: 1.

Works, but still needs a bit of polishing to deal with re-editing posts (to stop people going above maxattachments)

Also fixed documentation for attachments.
This commit is contained in:
moodler 2008-09-08 05:46:42 +00:00
parent 757f30a20c
commit 30a9aff589
10 changed files with 111 additions and 28 deletions

View file

@ -166,6 +166,22 @@ function xmldb_forum_upgrade($oldversion) {
upgrade_mod_savepoint($result, 2008081900, 'forum');
}
if ($result && $oldversion < 2008090800) {
/// Define field maxattachments to be added to forum
$table = new xmldb_table('forum');
$field = new xmldb_field('maxattachments', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '1', 'maxbytes');
/// Conditionally launch add field maxattachments
if (!$dbman->field_exists($table, $field)) {
$dbman->add_field($table, $field);
}
/// forum savepoint reached
upgrade_mod_savepoint($result, 2008090800, 'forum');
}
return $result;
}

View file

@ -4067,10 +4067,9 @@ function forum_pluginfile($course, $cminfo, $context, $filearea, $args) {
* @param $newfile is a full upload array from $_FILES
* @param $message is a string to hold the messages.
*/
function forum_add_attachment($post, $cm, $mform=null, &$message=null, $remove_previous=true) {
function forum_add_attachment($post, $forum, $cm, $mform=null, &$message=null, $remove_previous=true) {
global $CFG, $DB, $USER;
//TODO: add message when overwriting
if (empty($mform)) {
return false;
}
@ -4078,29 +4077,43 @@ function forum_add_attachment($post, $cm, $mform=null, &$message=null, $remove_p
$filearea = 'forum_attachment';
$fs = get_file_storage();
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
if ($remove_previous) {
// The logic here really needs work to handle re-editing properly TODO XXX
if ($remove_previous) { // Remove ALL previous files for this post
$fs->delete_area_files($context->id, $filearea, $post->id);
$post->attachment = '';
$DB->update_record('forum_posts', $post);
$post->attachment = 0;
$DB->set_field('forum_posts', 'attachment', 0, array('id'=>$post->id)); // Update it now in case we fail later on
}
if ($mform->save_stored_file('attachment', $context->id, $filearea, $post->id, '/', null, true, $USER->id)) {
$post->attachment = '1';
$DB->update_record('forum_posts', $post);
return true;
$values = $mform->get_data();
} else {
return false;
if (!isset($forum->maxattachments)) { // TODO - delete this once we add a field to the forum table
$forum->maxattachments = 3;
}
for ($i=0; $i<$forum->maxattachments; $i++) {
$elementname = 'attachment'.$i;
if (empty($values->$elementname)) { // Nothing defined
continue;
}
if (!is_numeric($values->$elementname)) { // Pre-existing file reference, skip it
continue;
}
if ($mform->save_stored_file($elementname, $context->id, $filearea, $post->id, '/', null, true, $USER->id)) {
$post->attachment = '1';
$DB->set_field('forum_posts', 'attachment', 1, array('id'=>$post->id)); // Update it now in case we fail later on
} else {
return false;
}
}
}
/**
* Relinks urls linked to draftfile.php in $post->message.
*/
function forum_relink_inline_attachments($post, $cm){
function forum_relink_inline_attachments($post, $forum, $cm){
global $DB;
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
@ -4133,8 +4146,8 @@ function forum_add_new_post($post, $mform, &$message) {
return false;
}
forum_relink_inline_attachments($post, $cm);
forum_add_attachment($post, $cm, $mform, $message, false);
forum_relink_inline_attachments($post, $forum, $cm);
forum_add_attachment($post, $forum, $cm, $mform, $message, false);
// Update discussion modified date
$DB->set_field("forum_discussions", "timemodified", $post->modified, array("id" => $post->discussion));
@ -4176,8 +4189,8 @@ function forum_update_post($post, $mform, &$message) {
return false;
}
forum_relink_inline_attachments($post, $cm);
forum_add_attachment($post, $cm, $mform, $message, true);
forum_relink_inline_attachments($post, $forum, $cm);
forum_add_attachment($post, $forum, $cm, $mform, $message, false);
if (forum_tp_can_track_forums($forum) && forum_tp_is_tracked($forum)) {
forum_tp_mark_post_read($post->userid, $post, $post->forum);
@ -4210,7 +4223,7 @@ function forum_add_discussion($discussion, $mform=null, &$message=null) {
$post->mailed = 0;
$post->subject = $discussion->name;
$post->message = $discussion->intro;
$post->attachment = "";
$post->attachment = 0;
$post->forum = $forum->id; // speedup
$post->course = $forum->course; // speedup
$post->format = $discussion->format;
@ -4239,8 +4252,8 @@ function forum_add_discussion($discussion, $mform=null, &$message=null) {
return 0;
}
forum_relink_inline_attachments($post, $cm);
forum_add_attachment($post, $cm, $mform, $message, false);
forum_relink_inline_attachments($post, $forum, $cm);
forum_add_attachment($post, $forum, $cm, $mform, $message, false);
if (forum_tp_can_track_forums($forum) && forum_tp_is_tracked($forum)) {
forum_tp_mark_post_read($post->userid, $post, $post->forum);

View file

@ -54,6 +54,11 @@ class mod_forum_mod_form extends moodleform_mod {
$mform->setHelpButton('maxbytes', array('maxattachmentsize', get_string('maxattachmentsize', 'forum'), 'forum'));
$mform->setDefault('maxbytes', $CFG->forum_maxbytes);
$choices = array(0,1,2,3,4,5,6,7,8,9);
$mform->addElement('select', 'maxattachments', get_string('maxattachments', 'forum'), $choices);
$mform->setHelpButton('maxattachments', array('maxattachments', get_string('maxattachments', 'forum'), 'forum'));
$mform->setDefault('maxattachments', $CFG->forum_maxattachments);
if ($CFG->enablerssfeeds && isset($CFG->forum_enablerssfeeds) && $CFG->forum_enablerssfeeds) {
//-------------------------------------------------------------------------------
$mform->addElement('header', '', get_string('rss'));

View file

@ -441,11 +441,14 @@
}
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
if (!isset($forum->maxattachments)) { // TODO - delete this once we add a field to the forum table
$forum->maxattachments = 3;
}
$mform_post = new mod_forum_post_form('post.php', array('course'=>$course, 'cm'=>$cm, 'coursecontext'=>$coursecontext, 'modcontext'=>$modcontext, 'forum'=>$forum, 'post'=>$post));
if ($fromform = $mform_post->get_data()) {
require_login($course, false, $cm);
if (empty($SESSION->fromurl)) {
@ -753,6 +756,26 @@
$subscribe = !empty($USER->autosubscribe);
}
$defaultattachments = array();
if ($forum->maxattachments) {
for ($i=0; $i<$forum->maxattachments; $i++) {
$defaultattachments['attachment'.$i] = '';
}
if (!empty($post->attachment)) { // We already have some attachments, so show them
$fs = get_file_storage();
$i = 0;
if ($files = $fs->get_area_files($modcontext->id, 'forum_attachment', $post->id, "timemodified ASC", false)) {
foreach ($files as $file) {
$defaultattachments['attachment'.$i] = $file->get_filename();
$i++;
}
}
}
}
// HACK ALERT: this is very wrong, the defaults should be always initialized before calling $mform->get_data() !!!
$mform_post->set_data(array( 'general'=>$heading,
'subject'=>$post->subject,
@ -762,9 +785,11 @@
'userid'=>$post->userid,
'parent'=>$post->parent,
'discussion'=>$post->discussion,
'course'=>$course->id)+
'course'=>$course->id) +
$page_params+
$defaultattachments +
$page_params +
(isset($post->format)?array(
'format'=>$post->format):

View file

@ -52,9 +52,11 @@ class mod_forum_post_form extends moodleform {
$mform->setHelpButton('subscribemessage', array('subscription', get_string('subscription', 'forum'), 'forum'));
}
if ($forum->maxbytes != 1 && has_capability('mod/forum:createattachment', $modcontext)) { // 1 = No attachments at all
$mform->addElement('filepicker', 'attachment', get_string('attachment', 'forum'));
$mform->setHelpButton('attachment', array('attachment', get_string('attachment', 'forum'), 'forum'));
if (!empty($forum->maxattachments) && $forum->maxbytes != 1 && has_capability('mod/forum:createattachment', $modcontext)) { // 1 = No attachments at all
for ($i=0; $i<$forum->maxattachments; $i++) {
$mform->addElement('filepicker', 'attachment'.$i, get_string('attachment', 'forum'));
$mform->setHelpButton('attachment'.$i, array('attachment2', get_string('attachment', 'forum'), 'forum'));
}
}
if (empty($post->id) && has_capability('moodle/course:manageactivities', $coursecontext)) { // hack alert

View file

@ -23,6 +23,10 @@ $settings->add(new admin_setting_configtext('forum_manydiscussions', get_string(
$settings->add(new admin_setting_configselect('forum_maxbytes', get_string('maxattachmentsize', 'forum'),
get_string('configmaxbytes', 'forum'), 512000, get_max_upload_sizes($CFG->maxbytes)));
// Default number of attachments allowed per post in all forums
$settings->add(new admin_setting_configtext('forum_maxattachments', get_string('maxattachments', 'forum'),
get_string('configmaxattachments', 'forum'), 1, PARAM_INT));
// Default whether user needs to mark a post as read
$settings->add(new admin_setting_configcheckbox('forum_trackreadposts', get_string('trackforum', 'forum'),
get_string('configtrackreadposts', 'forum'), 1));

View file

@ -5,8 +5,8 @@
// This fragment is called by /admin/index.php
////////////////////////////////////////////////////////////////////////////////
$module->version = 2008081900;
$module->requires = 2008081600; // Requires this Moodle version
$module->version = 2008090800;
$module->requires = 2008090800; // Requires this Moodle version
$module->cron = 60;
?>