mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 00:46:50 +02:00
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:
parent
757f30a20c
commit
30a9aff589
10 changed files with 111 additions and 28 deletions
|
@ -56,6 +56,7 @@ $string['configenabletimedposts'] = 'Set to \'yes\' if you want to allow setting
|
|||
$string['configlogblocked'] = 'Forum cron may log blocked attempts to send emails to users with disabled email.';
|
||||
$string['configlongpost'] = 'Any post over this length (in characters not including HTML) is considered long. Posts displayed on the site front page, social format course pages, or user profiles are shortened to a natural break somewhere between the forum_shortpost and forum_longpost values.';
|
||||
$string['configmanydiscussions'] = 'Maximum number of discussions shown in a forum per page';
|
||||
$string['configmaxattachments'] = 'Default maximum number of attachments allowed per post.';
|
||||
$string['configmaxbytes'] = 'Default maximum size for all forum attachments on the site (subject to course limits and other local settings)';
|
||||
$string['configoldpostdays'] = 'Number of days old any post is considered read.';
|
||||
$string['configreplytouser'] = 'When a forum post is mailed out, should it contain the user\'s email address so that recipients can reply personally rather than via the forum? Even if set to \'Yes\' users can choose in their profile to keep their email address secret.';
|
||||
|
@ -160,6 +161,7 @@ $string['markread'] = 'Mark read';
|
|||
$string['markreadbutton'] = 'Mark<br />read';
|
||||
$string['markunread'] = 'Mark unread';
|
||||
$string['markunreadbutton'] = 'Mark<br />unread';
|
||||
$string['maxattachments'] = 'Maximum attachments';
|
||||
$string['maxattachmentsize'] = 'Maximum attachment size';
|
||||
$string['maxtimehaspassed'] = 'Sorry, but the maximum time for editing this post ($a) has passed!';
|
||||
$string['message'] = 'Message';
|
||||
|
|
13
lang/en_utf8/help/forum/attachment2.html
Normal file
13
lang/en_utf8/help/forum/attachment2.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
<h1>Attachments for posts</h1>
|
||||
|
||||
<p>You can optionally attach one or more files (the number depends
|
||||
on the forum settings) to any post in the forums.</p>
|
||||
|
||||
<p>This can useful when you want to share a picture or a
|
||||
word processing document, for example.</p>
|
||||
|
||||
<p>Your files can be of any type, however it is highly recommended
|
||||
that the file is named using standard 3-letter internet
|
||||
suffixes such as .doc for a Word document, .jpg or .png
|
||||
for an image, and so on. This will make it easier for others
|
||||
to download and view your attachment in their browsers.</p>
|
3
lang/en_utf8/help/forum/maxattachments.html
Normal file
3
lang/en_utf8/help/forum/maxattachments.html
Normal file
|
@ -0,0 +1,3 @@
|
|||
<h1>Maximum number of attachments</h1>
|
||||
|
||||
<p>This setting allows you to control how many attachments are allowed for each post in this forum.</p>
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
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);
|
||||
|
|
|
@ -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'));
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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;
|
||||
|
||||
?>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue