@@ -11,9 +11,8 @@
-
-
-
+
+
Index: mod/resource/db/upgrade.php
=========================================================
--- mod/resource/db/upgrade.php (revision 1.13)
+++ mod/resource/db/upgrade.php Fri May 28 14:17:02 WST 2010
@@ -211,5 +211,40 @@
upgrade_mod_savepoint($result, 2009063000, 'resource');
}
+ if ($result && $oldversion < 2009080501) {
+ require_once("$CFG->libdir/filelib.php");
+
+ $sql = "SELECT r.id,
+ r.mainfile,
+ cm.id AS cmid
+ FROM {resource} r
+ JOIN {modules} m ON m.name='resource'
+ JOIN {course_modules} cm ON (cm.module = m.id AND cm.instance = r.id)";
+
+ if ($instances = $DB->get_recordset_sql($sql)) {
+ foreach ($instances as $instance) {
+ $context = get_context_instance(CONTEXT_MODULE, $instance->cmid);
+ $filearea = 'resource_content';
+ $itemid = 0;
+ $filepath = file_correct_filepath(dirname($instance->mainfile));
+ $filename = basename($instance->mainfile);
+ file_set_sortorder($context->id, $filearea, $itemid, $filepath, $filename, 1);
+ }
+ }
+
+ /// Define field mainfile to be dropped from resource
+ $table = new xmldb_table('resource');
+ $field = new xmldb_field('mainfile');
+
+ /// Conditionally launch drop field mainfile
+ if ($dbman->field_exists($table, $field)) {
+ $dbman->drop_field($table, $field);
+ }
+
+ /// resource savepoint reached
+ upgrade_mod_savepoint($result, 2009080501, 'resource');
+ }
+
+
return $result;
}
Index: mod/resource/lib.php
=========================================================
--- mod/resource/lib.php (revision 1.126)
+++ mod/resource/lib.php Thu May 27 17:46:56 WST 2010
@@ -84,10 +84,7 @@
function resource_add_instance($data, $mform) {
global $CFG, $DB;
require_once("$CFG->libdir/resourcelib.php");
-
- $cmid = $data->coursemodule;
- $draftitemid = $data->files;
-
+ $cmid = $data->coursemodule;
$data->timemodified = time();
$displayoptions = array();
if ($data->display == RESOURCELIB_DISPLAY_POPUP) {
@@ -104,23 +101,7 @@
// we need to use context now, so we need to make sure all needed info is already in db
$DB->set_field('course_modules', 'instance', $data->id, array('id'=>$cmid));
- $context = get_context_instance(CONTEXT_MODULE, $cmid);
-
- if ($draftitemid) {
- file_save_draft_area_files($draftitemid, $context->id, 'resource_content', 0, array('subdirs'=>true));
- }
-
- $fs = get_file_storage();
- $files = $fs->get_area_files($context->id, 'resource_content', 0, '', false);
- if (count($files) == 1) {
- $file = reset($files);
- $path = $file->get_filepath().$file->get_filename();
- if ($path !== $data->mainfile) {
- $data->mainfile = $path;
- $DB->set_field('resource', 'mainfile', $path, array('id'=>$data->id));
- }
- }
-
+ resource_set_mainfile($data);
return $data->id;
}
@@ -133,10 +114,6 @@
function resource_update_instance($data, $mform) {
global $CFG, $DB;
require_once("$CFG->libdir/resourcelib.php");
-
- $cmid = $data->coursemodule;
- $draftitemid = $data->files;
-
$data->timemodified = time();
$data->id = $data->instance;
$data->revision++;
@@ -153,23 +130,7 @@
$data->displayoptions = serialize($displayoptions);
$DB->update_record('resource', $data);
-
- $context = get_context_instance(CONTEXT_MODULE, $cmid);
- if ($draftitemid) {
- file_save_draft_area_files($draftitemid, $context->id, 'resource_content', 0, array('subdirs'=>true));
- }
-
- $fs = get_file_storage();
- $files = $fs->get_area_files($context->id, 'resource_content', 0, '', false);
- if (count($files) == 1) {
- $file = reset($files);
- $path = $file->get_filepath().$file->get_filename();
- if ($path !== $data->mainfile) {
- $data->mainfile = $path;
- $DB->set_field('resource', 'mainfile', $path, array('id'=>$data->id));
- }
- }
-
+ resource_set_mainfile($data);
return true;
}
@@ -267,8 +228,9 @@
global $CFG, $DB;
require_once("$CFG->libdir/filelib.php");
require_once("$CFG->dirroot/mod/resource/locallib.php");
+ $context = get_context_instance(CONTEXT_MODULE, $coursemodule->id);
- if (!$resource = $DB->get_record('resource', array('id'=>$coursemodule->instance), 'id, name, display, displayoptions, tobemigrated, mainfile, revision')) {
+ if (!$resource = $DB->get_record('resource', array('id'=>$coursemodule->instance), 'id, name, display, displayoptions, tobemigrated, revision')) {
return NULL;
}
@@ -279,8 +241,13 @@
$info->icon ='i/cross_red_big';
return $info;
}
-
- $info->icon = str_replace(array('.gif', '.png'), '', file_extension_icon($resource->mainfile));
+ $fs = get_file_storage();
+ $files = $fs->get_area_files($context->id, 'resource_content', 0, 'sortorder');
+ if (count($files) >= 1) {
+ $mainfile = array_pop($files);
+ $info->icon = str_replace(array('.gif', '.png'), '', file_extension_icon($mainfile->get_filename()));
+ $resource->mainfile = $mainfile->get_filename();
+ }
$display = resource_get_final_display_type($resource);
@@ -301,9 +268,11 @@
$info->extra = "onclick=\"window.location.href ='$fullurl';return false;\"";
} else if ($display == RESOURCELIB_DISPLAY_DOWNLOAD) {
+ if (empty($mainfile)) {
+ return NULL;
+ }
// do not open any window because it would be left there after download
- $context = get_context_instance(CONTEXT_MODULE, $coursemodule->id);
- $path = '/'.$context->id.'/resource_content/'.$resource->revision.$resource->mainfile;
+ $path = '/'.$context->id.'/resource_content/'.$resource->revision.$mainfile->get_filename();
$fullurl = addslashes_js(file_encode_url($CFG->wwwroot.'/pluginfile.php', $path, true));
// When completion information is enabled for download files, make
Index: mod/resource/locallib.php
=========================================================
--- mod/resource/locallib.php (revision 1.10)
+++ mod/resource/locallib.php Thu May 27 17:45:30 WST 2010
@@ -214,6 +214,7 @@
resource_print_heading($resource, $cm, $course, true);
resource_print_intro($resource, $cm, $course, true);
+ $resource->mainfile = $file->get_filename();
echo '';
switch (resource_get_final_display_type($resource)) {
case RESOURCELIB_DISPLAY_POPUP:
@@ -360,7 +361,11 @@
'application/pdf', 'text/html',
);
- $mimetype = mimeinfo('type', $resource->mainfile);
+ if (empty($resource->mainfile)) {
+ return RESOURCELIB_DISPLAY_DOWNLOAD;
+ } else {
+ $mimetype = mimeinfo('type', $resource->mainfile);
+ }
if (in_array($mimetype, $download)) {
return RESOURCELIB_DISPLAY_DOWNLOAD;
@@ -390,3 +395,21 @@
return parent::get_visible_name();
}
}
+
+function resource_set_mainfile($data) {
+ global $DB;
+ $fs = get_file_storage();
+ $cmid = $data->coursemodule;
+ $draftitemid = $data->files;
+
+ $context = get_context_instance(CONTEXT_MODULE, $cmid);
+ if ($draftitemid) {
+ file_save_draft_area_files($draftitemid, $context->id, 'resource_content', 0, array('subdirs'=>true));
+ }
+ $files = $fs->get_area_files($context->id, 'resource_content', 0, 'sortorder', false);
+ if (count($files) == 1) {
+ // only one file attached, set it as main file automatically
+ $file = reset($files);
+ file_set_sortorder($context->id, 'resource_content', 0, $file->get_filepath(), $file->get_filename(), 1);
+ }
+}
Index: mod/resource/mod_form.php
=========================================================
--- mod/resource/mod_form.php (revision 1.32)
+++ mod/resource/mod_form.php Thu May 27 13:51:31 WST 2010
@@ -68,13 +68,10 @@
$filemanager_options['accepted_types'] = '*';
$filemanager_options['maxbytes'] = 0;
$filemanager_options['maxfiles'] = -1;
- $filemanager_options['mainfile'] = 'mainfile';
+ $filemanager_options['mainfile'] = true;
$mform->addElement('filemanager', 'files', get_string('selectfiles'), null, $filemanager_options);
- $mform->addElement('hidden', 'mainfile', get_string('areamainfile', 'repository'), array('id'=>'id_mainfile'));
- $mform->setType('mainfile', PARAM_PATH);
-
//-------------------------------------------------------
$mform->addElement('header', 'optionssection', get_string('optionsheader', 'resource'));
@@ -197,20 +194,25 @@
$usercontext = get_context_instance(CONTEXT_USER, $USER->id);
$fs = get_file_storage();
- if (!$files = $fs->get_area_files($usercontext->id, 'user_draft', $data['files'], 'id', false)) {
+ if (!$files = $fs->get_area_files($usercontext->id, 'user_draft', $data['files'], 'sortorder', false)) {
$errors['files'] = get_string('required');
return $errors;
}
if (count($files) == 1) {
// no need to select main file if only one picked
return $errors;
- }
- $filepaths = array();
- foreach ($files as $file) {
- $filepaths[] = $file->get_filepath().$file->get_filename();
- }
- if (!in_array($data['mainfile'], $filepaths)) {
- $errors['files'] = get_string('selectmainfile', 'resource');
+ } else if(count($files) > 1) {
+ // looking for main file
+ $mainfile = false;
+ foreach($files as $file) {
+ if ($file->get_sortorder() == 1) {
+ $mainfile = true;
+ break;
+ }
+ }
+ if (!$mainfile) {
+ $errors['files'] = get_string('selectmainfile', 'resource');
+ }
}
return $errors;
}
Index: mod/resource/version.php
=========================================================
--- mod/resource/version.php (revision 1.40)
+++ mod/resource/version.php Thu May 27 15:54:21 WST 2010
@@ -23,7 +23,7 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-$module->version = 2009080500;
+$module->version = 2009080501;
$module->requires = 2009073101; // Requires this Moodle version
$module->cron = 0;
Index: mod/resource/view.php
=========================================================
--- mod/resource/view.php (revision 1.69)
+++ mod/resource/view.php Thu May 27 17:40:49 WST 2010
@@ -64,10 +64,12 @@
}
$fs = get_file_storage();
-$pathnamehash = sha1($context->id.'resource_content0'.$resource->mainfile);
-if (!$file = $fs->get_file_by_hash($pathnamehash)) {
+$files = $fs->get_area_files($context->id, 'resource_content', 0, 'sortorder');
+if (count($files) < 1) {
resource_print_filenotfound($resource, $cm, $course);
die;
+} else {
+ $file = array_pop($files);
}
if ($redirect) {
@@ -78,6 +80,7 @@
redirect($fullurl);
}
+$resource->mainfile = $file->get_filename();
switch (resource_get_final_display_type($resource)) {
case RESOURCELIB_DISPLAY_EMBED:
resource_display_embed($resource, $cm, $course, $file);
Index: version.php
=========================================================
--- version.php (revision 1.1594)
+++ version.php Fri May 28 14:25:02 WST 2010
@@ -6,7 +6,7 @@
// This is compared against the values stored in the database to determine
// whether upgrades should be performed (see lib/db/*.php)
- $version = 2010052800; // YYYYMMDD = date of the last version bump
+ $version = 2010052801; // YYYYMMDD = date of the last version bump
// XX = daily increments
$release = '2.0 Preview 2 (Build: 20100528)'; // Human-friendly version name