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
|
@ -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();
|
||||
|
||||
} 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);
|
||||
|
|
|
@ -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