Merge branch 'wip-mdl-33664' of git://github.com/rajeshtaneja/moodle
authorDan Poltawski <dan@moodle.com>
Wed, 13 Jun 2012 02:07:32 +0000 (10:07 +0800)
committerDan Poltawski <dan@moodle.com>
Wed, 13 Jun 2012 02:07:32 +0000 (10:07 +0800)
95 files changed:
backup/backup.php
backup/moodle2/restore_stepslib.php
backup/util/factories/backup_factory.class.php
backup/util/ui/backup_ui_setting.class.php
config-dist.php
course/dnduploadlib.php
course/format/topics/lib.php
course/format/weeks/lib.php
course/view.php
enrol/mnet/addinstance_form.php
enrol/yui/notification/notification.js
files/externallib.php
lib/form/editor.php
lib/outputrequirementslib.php
lib/yui/chooserdialogue/chooserdialogue.js
lib/yui/dragdrop/dragdrop.js
mod/assign/db/messages.php
mod/assign/gradingtable.php
mod/assign/lib.php
mod/assign/locallib.php
mod/assign/submission/onlinetext/locallib.php
mod/assign/version.php
mod/assignment/lib.php
mod/assignment/type/online/assignment.class.php
mod/book/locallib.php
mod/data/field/file/mod.html
mod/data/field/picture/mod.html
mod/data/lib.php
mod/folder/lib.php
mod/forum/post_form.php
mod/glossary/lib.php
mod/page/lib.php
mod/quiz/edit.php
mod/quiz/lang/en/quiz.php
mod/quiz/lib.php
mod/quiz/mod_form.php
mod/resource/lib.php
mod/resource/mod_form.php
mod/scorm/lang/en/scorm.php
mod/scorm/lib.php
mod/url/lib.php
mod/workshop/submission.php
pix/f/archive.png [new file with mode: 0644]
pix/f/audio.png
pix/f/avi.png
pix/f/base.png [new file with mode: 0644]
pix/f/bmp.png
pix/f/calc.png [new file with mode: 0644]
pix/f/chart.png [new file with mode: 0644]
pix/f/database.png
pix/f/document.png
pix/f/draw.png [new file with mode: 0644]
pix/f/eps.png
pix/f/flash.png
pix/f/gif.png
pix/f/image-128.png
pix/f/image-24.png
pix/f/image-256.png
pix/f/image-32.png
pix/f/image-48.png
pix/f/image-64.png
pix/f/image-72.png
pix/f/image-80.png
pix/f/image-96.png
pix/f/image.png
pix/f/impress.png [new file with mode: 0644]
pix/f/isf.gif [deleted file]
pix/f/isf.png [new file with mode: 0644]
pix/f/jpeg.png
pix/f/markup.png [new file with mode: 0644]
pix/f/math.png [new file with mode: 0644]
pix/f/moodle.png
pix/f/mp3.png
pix/f/mpeg.png
pix/f/oth.png
pix/f/pdf.png
pix/f/png.png
pix/f/powerpoint.png
pix/f/psd.png
pix/f/quicktime.png [new file with mode: 0644]
pix/f/sourcecode.png [new file with mode: 0644]
pix/f/spreadsheet.png
pix/f/text.png
pix/f/tiff.png
pix/f/video.png
pix/f/wav.png
pix/f/wmv.png
pix/f/writer.png [new file with mode: 0644]
question/type/essay/renderer.php
theme/base/pix/fp/dnd_arrow.gif [new file with mode: 0644]
theme/base/pix/fp/dnd_arrow.png [deleted file]
theme/base/style/core.css
theme/base/style/course.css
theme/base/style/filemanager.css
theme/yui_combo.php

index d088cad..ef0a897 100644 (file)
@@ -62,7 +62,7 @@ switch ($type) {
     case backup::TYPE_1SECTION :
         $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
         require_capability('moodle/backup:backupsection', $coursecontext);
-        if (!empty($section->name)) {
+        if ((string)$section->name !== '') {
             $sectionname = format_string($section->name, true, array('context' => $coursecontext));
             $heading = get_string('backupsection', 'backup', $sectionname);
             $PAGE->navbar->add($sectionname);
index 9ee8f5a..60a4086 100644 (file)
@@ -1083,7 +1083,7 @@ class restore_section_structure_step extends restore_structure_step {
         // Section exists, update non-empty information
         } else {
             $section->id = $secrec->id;
-            if (empty($secrec->name)) {
+            if ((string)$secrec->name === '') {
                 $section->name = $data->name;
             }
             if (empty($secrec->summary)) {
index a24905c..e2143cd 100644 (file)
@@ -139,7 +139,7 @@ abstract class backup_factory {
             throw new backup_task_exception('section_task_section_not_found', $sectionid);
         }
 
-        return new backup_section_task(empty($section->name) ? $section->section : $section->name, $sectionid);
+        return new backup_section_task((string)$section->name === '' ? $section->section : $section->name, $sectionid);
     }
 
     /**
index 3db20a1..c18d463 100644 (file)
@@ -129,7 +129,7 @@ class base_setting_ui {
      * @param string $label
      */
     public function set_label($label) {
-        if (empty($label) || $label !== clean_param($label, PARAM_TEXT)) {
+        if ((string)$label === '' || $label !== clean_param($label, PARAM_TEXT)) {
             throw new base_setting_ui_exception('setting_invalid_ui_label');
         }
         $this->label = $label;
index e82d7bd..eb0ab29 100644 (file)
@@ -234,6 +234,10 @@ $CFG->admin = 'admin';
 //         '/filedir'   => '/var/www/moodle/filedir',  // for custom $CFG->filedir locations
 //     );
 //
+// YUI caching may be sometimes improved by slasharguments:
+//     $CFG->yuislasharguments = 1;
+// Some servers may need a special rewrite rule to work around internal path length limitations:
+// RewriteRule (^.*/theme/yui_combo\.php)(/.*) $1?file=$2
 //
 //
 // This setting will prevent the 'My Courses' page being displayed when a student
index 1b07746..816924b 100644 (file)
@@ -39,7 +39,7 @@ require_once($CFG->dirroot.'/course/lib.php');
 function dndupload_add_to_course($course, $modnames) {
     global $CFG, $PAGE;
 
-    $showstatus = optional_param('editingenabled', false, PARAM_BOOL);
+    $showstatus = optional_param('notifyeditingon', false, PARAM_BOOL);
 
     // Get all handlers.
     $handler = new dndupload_handler($course, $modnames);
@@ -671,4 +671,4 @@ class dndupload_ajax_processor {
         echo json_encode($resp);
         die();
     }
-}
\ No newline at end of file
+}
index e8632fc..3728ab2 100644 (file)
@@ -59,7 +59,7 @@ function callback_topics_definition() {
 
 function callback_topics_get_section_name($course, $section) {
     // We can't add a node without any text
-    if (!empty($section->name)) {
+    if ((string)$section->name !== '') {
         return format_string($section->name, true, array('context' => get_context_instance(CONTEXT_COURSE, $course->id)));
     } else if ($section->section == 0) {
         return get_string('section0name', 'format_topics');
index a1e1ea9..fe6fd6b 100644 (file)
@@ -66,7 +66,7 @@ function callback_weeks_definition() {
  */
 function callback_weeks_get_section_name($course, $section) {
     // We can't add a node without text
-    if (!empty($section->name)) {
+    if ((string)$section->name !== '') {
         // Return the name the user set.
         return format_string($section->name, true, array('context' => context_course::instance($course->id)));
     } else if ($section->section == 0) {
index 9667832..e0f295b 100644 (file)
             if ($course->id == SITEID) {
                 redirect($CFG->wwwroot .'/?redirect=0');
             } else {
-                $url = new moodle_url($PAGE->url, array('editingenabled' => 1));
+                $url = new moodle_url($PAGE->url, array('notifyeditingon' => 1));
                 redirect($url);
             }
         } else if (($edit == 0) and confirm_sesskey()) {
index f002f54..9e30ce1 100644 (file)
@@ -72,9 +72,10 @@ class enrol_mnet_addinstance_form extends moodleform {
      * Do not allow multiple instances for single remote host
      *
      * @param array $data raw form data
-     * @return array
+     * @param array $files
+     * @return array of errors
      */
-    function validation($data) {
+    function validation($data, $files) {
         global $DB;
 
         $errors = array();
index 1c7e6da..352dd6e 100644 (file)
@@ -73,6 +73,11 @@ Y.extend(DIALOGUE, Y.Overlay, {
                 if (this.get('center') && !e.prevVal && e.newVal) {
                     this.centerDialogue();
                 }
+                if (this.get('draggable')) {
+                    var titlebar = '#' + this.get('id') + ' .' + CSS.HEADER;
+                    this.plug(Y.Plugin.Drag, {handles : [titlebar]});
+                    Y.one(titlebar).setStyle('cursor', 'move');
+                }
                 break;
         }
     },
@@ -110,6 +115,10 @@ Y.extend(DIALOGUE, Y.Overlay, {
         center : {
             validator : Y.Lang.isBoolean,
             value : true
+        },
+        draggable : {
+            validator : Y.Lang.isBoolean,
+            value : false
         }
     }
 });
@@ -372,4 +381,4 @@ M.core.confirm = CONFIRM;
 M.core.exception = EXCEPTION;
 M.core.ajaxException = AJAXEXCEPTION;
 
-}, '@VERSION@', {requires:['base','node','overlay','event-key', 'moodle-enrol-notification-skin']});
\ No newline at end of file
+}, '@VERSION@', {requires:['base','node','overlay','event-key', 'moodle-enrol-notification-skin', 'dd-plugin']});
index ec16724..f6001d2 100644 (file)
@@ -52,7 +52,8 @@ class core_files_external extends external_api {
                 'filearea'  => new external_value(PARAM_TEXT, 'file area'),
                 'itemid'    => new external_value(PARAM_INT, 'associated id'),
                 'filepath'  => new external_value(PARAM_PATH, 'file path'),
-                'filename'  => new external_value(PARAM_FILE, 'file name')
+                'filename'  => new external_value(PARAM_FILE, 'file name'),
+                'modified' => new external_value(PARAM_INT, 'timestamp to return files changed after this time.', VALUE_DEFAULT, null)
             )
         );
     }
@@ -66,12 +67,15 @@ class core_files_external extends external_api {
      * @param int $itemid item id
      * @param string $filepath file path
      * @param string $filename file name
+     * @param int $modified timestamp to return files changed after this time.
      * @return array
      * @since Moodle 2.2
      */
-    public static function get_files($contextid, $component, $filearea, $itemid, $filepath, $filename) {
+    public static function get_files($contextid, $component, $filearea, $itemid, $filepath, $filename, $modified = null) {
         global $CFG, $USER, $OUTPUT;
-        $fileinfo = self::validate_parameters(self::get_files_parameters(), array('contextid'=>$contextid, 'component'=>$component, 'filearea'=>$filearea, 'itemid'=>$itemid, 'filepath'=>$filepath, 'filename'=>$filename));
+        $fileinfo = self::validate_parameters(self::get_files_parameters(), array(
+                    'contextid'=>$contextid, 'component'=>$component, 'filearea'=>$filearea,
+                    'itemid'=>$itemid, 'filepath'=>$filepath, 'filename'=>$filename, 'modified'=>$modified));
 
         $browser = get_file_browser();
 
@@ -99,7 +103,10 @@ class core_files_external extends external_api {
         $return = array();
         $return['parents'] = array();
         $return['files'] = array();
-        if ($file = $browser->get_file_info($context, $fileinfo['component'], $fileinfo['filearea'], $fileinfo['itemid'], $fileinfo['filepath'], $fileinfo['filename'])) {
+        $list = array();
+        if ($file = $browser->get_file_info(
+            $context, $fileinfo['component'], $fileinfo['filearea'], $fileinfo['itemid'],
+                $fileinfo['filepath'], $fileinfo['filename'])) {
             $level = $file->get_parent();
             while ($level) {
                 $params = $level->get_params();
@@ -107,36 +114,42 @@ class core_files_external extends external_api {
                 array_unshift($return['parents'], $params);
                 $level = $level->get_parent();
             }
-            $list = array();
             $children = $file->get_children();
             foreach ($children as $child) {
 
                 $params = $child->get_params();
+                $timemodified = $child->get_timemodified();
 
                 if ($child->is_directory()) {
-                    $node = array(
-                        'contextid' => $params['contextid'],
-                        'component' => $params['component'],
-                        'filearea'  => $params['filearea'],
-                        'itemid'    => $params['itemid'],
-                        'filepath'  => $params['filepath'],
-                        'filename'  => $child->get_visible_name(),
-                        'url'       => null,
-                        'isdir'     => true
-                    );
-                    $list[] = $node;
+                    if ((is_null($modified)) or ($modified < $timemodified)) {
+                        $node = array(
+                            'contextid' => $params['contextid'],
+                            'component' => $params['component'],
+                            'filearea'  => $params['filearea'],
+                            'itemid'    => $params['itemid'],
+                            'filepath'  => $params['filepath'],
+                            'filename'  => $child->get_visible_name(),
+                            'url'       => null,
+                            'isdir'     => true,
+                            'timemodified' => $timemodified
+                           );
+                           $list[] = $node;
+                    }
                 } else {
-                    $node = array(
-                        'contextid' => $params['contextid'],
-                        'component' => $params['component'],
-                        'filearea'  => $params['filearea'],
-                        'itemid'    => $params['itemid'],
-                        'filepath'  => $params['filepath'],
-                        'filename'  => $child->get_visible_name(),
-                        'url'       => $child->get_url(),
-                        'isdir'     => false
-                    );
-                    $list[] = $node;
+                    if ((is_null($modified)) or ($modified < $timemodified)) {
+                        $node = array(
+                            'contextid' => $params['contextid'],
+                            'component' => $params['component'],
+                            'filearea'  => $params['filearea'],
+                            'itemid'    => $params['itemid'],
+                            'filepath'  => $params['filepath'],
+                            'filename'  => $child->get_visible_name(),
+                            'url'       => $child->get_url(),
+                            'isdir'     => false,
+                            'timemodified' => $timemodified
+                        );
+                           $list[] = $node;
+                    }
                 }
             }
         }
@@ -176,6 +189,7 @@ class core_files_external extends external_api {
                             'filename' => new external_value(PARAM_FILE, ''),
                             'isdir'    => new external_value(PARAM_BOOL, ''),
                             'url'      => new external_value(PARAM_TEXT, ''),
+                            'timemodified' => new external_value(PARAM_INT, ''),
                         )
                     )
                 )
@@ -219,12 +233,14 @@ class core_files_external extends external_api {
     public static function upload($contextid, $component, $filearea, $itemid, $filepath, $filename, $filecontent) {
         global $USER, $CFG;
 
-        $fileinfo = self::validate_parameters(self::upload_parameters(), array('contextid'=>$contextid, 'component'=>$component, 'filearea'=>$filearea, 'itemid'=>$itemid, 'filepath'=>$filepath, 'filename'=>$filename, 'filecontent'=>$filecontent));
+        $fileinfo = self::validate_parameters(self::upload_parameters(), array(
+            'contextid'=>$contextid, 'component'=>$component, 'filearea'=>$filearea, 'itemid'=>$itemid,
+            'filepath'=>$filepath, 'filename'=>$filename, 'filecontent'=>$filecontent));
 
         if (!isset($fileinfo['filecontent'])) {
             throw new moodle_exception('nofile');
         }
-        // saving file
+        // Saving file.
         $dir = make_temp_directory('wsupload');
 
         if (empty($fileinfo['filename'])) {
@@ -239,7 +255,6 @@ class core_files_external extends external_api {
             $savedfilepath = $dir.$filename;
         }
 
-
         file_put_contents($savedfilepath, base64_decode($fileinfo['filecontent']));
         unset($fileinfo['filecontent']);
 
@@ -250,7 +265,7 @@ class core_files_external extends external_api {
         }
 
         if (isset($fileinfo['itemid'])) {
-            // TODO MDL-31116 in user private area, itemid is always 0
+            // TODO MDL-31116 in user private area, itemid is always 0.
             $itemid = 0;
         } else {
             throw new coding_exception('itemid cannot be empty');
@@ -265,19 +280,19 @@ class core_files_external extends external_api {
         if (!($fileinfo['component'] == 'user' and $fileinfo['filearea'] == 'private')) {
             throw new coding_exception('File can be uploaded to user private area only');
         } else {
-            // TODO MDL-31116 hard-coded to use user_private area
+            // TODO MDL-31116 hard-coded to use user_private area.
             $component = 'user';
             $filearea = 'private';
         }
 
         $browser = get_file_browser();
 
-        // check existing file
+        // Check existing file.
         if ($file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename)) {
             throw new moodle_exception('fileexist');
         }
 
-        // move file to filepool
+        // Move file to filepool.
         if ($dir = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, '.')) {
             $info = $dir->create_file_from_pathname($filename, $savedfilepath);
             $params = $info->get_params();
index f36580b..0f054a5 100644 (file)
@@ -52,7 +52,8 @@ class MoodleQuickForm_editor extends HTML_QuickForm_element {
 
     /** @var array options provided to initalize filepicker */
     protected $_options    = array('subdirs'=>0, 'maxbytes'=>0, 'maxfiles'=>0, 'changeformat'=>0,
-                                   'context'=>null, 'noclean'=>0, 'trusttext'=>0);
+                                   'context'=>null, 'noclean'=>0, 'trusttext'=>0, 'return_types'=>7);
+    // $_options['return_types'] = FILE_INTERNAL | FILE_EXTERNAL | FILE_REFERENCE
 
     /** @var array values for editor */
     protected $_values     = array('text'=>null, 'format'=>null, 'itemid'=>null);
@@ -303,7 +304,7 @@ class MoodleQuickForm_editor extends HTML_QuickForm_element {
             $args = new stdClass();
             // need these three to filter repositories list
             $args->accepted_types = array('web_image');
-            $args->return_types = (FILE_INTERNAL | FILE_EXTERNAL | FILE_REFERENCE);
+            $args->return_types = $this->_options['return_types'];
             $args->context = $ctx;
             $args->env = 'filepicker';
             // advimage plugin
index aa8755e..c4fdd8f 100644 (file)
@@ -152,7 +152,8 @@ class page_requirements_manager {
     public function __construct() {
         global $CFG;
 
-        $sep = empty($CFG->slasharguments) ? '?' : '/';
+        // You may need to set up URL rewrite rule because oversized URLs might not be allowed by web server.
+        $sep = empty($CFG->yuislasharguments) ? '?' : '/';
 
         require_once("$CFG->libdir/yui/phploader/phploader/loader.php");
 
index 7f720d2..ebc37e1 100644 (file)
@@ -22,6 +22,7 @@ YUI.add('moodle-core-chooserdialogue', function(Y) {
             var params = {
                 bodyContent : bodycontent.get('innerHTML'),
                 headerContent : headercontent.get('innerHTML'),
+                draggable : true,
                 visible : false, // Hide by default
                 zindex : 100, // Display in front of other items
                 lightbox : true, // This dialogue should be modal
index 27d0f1d..6669f37 100644 (file)
@@ -135,7 +135,7 @@ YUI.add('moodle-core-dragdrop', function(Y) {
 
         global_drop_over : function(e) {
             // Check that drop object belong to correct group
-            if (!e.drop.inGroup(this.groups)) {
+            if (!e.drop || !e.drop.inGroup(this.groups)) {
                 return;
             }
             //Get a reference to our drag and drop nodes
@@ -168,7 +168,7 @@ YUI.add('moodle-core-dragdrop', function(Y) {
             // this.lastdroptarget (ghost node we use for indicating where to drop)
             e.drag = e.target;
             // Check that drop object belong to correct group
-            if (!e.drag.target.inGroup(this.groups)) {
+            if (!e.drop || !e.drop.inGroup(this.groups)) {
                 return;
             }
             e.drop = this.lastdroptarget;
@@ -177,7 +177,7 @@ YUI.add('moodle-core-dragdrop', function(Y) {
 
         global_drop_hit : function(e) {
             // Check that drop object belong to correct group
-            if (!e.drop.inGroup(this.groups)) {
+            if (!e.drop || !e.drop.inGroup(this.groups)) {
                 return;
             }
             this.drop_hit(e);
index 77581d7..d4c71fd 100644 (file)
 $messageproviders = array (
 
     // Ordinary assignment submissions
-    'assign_student_notification' => array (
-        'capability' => 'mod/assign:submit'
+    'assign_student_notification' => array(
     ),
-    'assign_grader_notification' => array (
+    'assign_grader_notification' => array(
         'capability' => 'mod/assign:grade'
     )
 
index db4432d..6d11be0 100644 (file)
@@ -414,7 +414,7 @@ class assign_grading_table extends table_sql implements renderable {
             if ($row->locked) {
                 $o .= $this->output->container(get_string('submissionslockedshort', 'assign'), 'lockedsubmission');
             }
-            if ($row->grade) {
+            if ($row->grade >= 0) {
                 $o .= $this->output->container(get_string('graded', 'assign'), 'submissiongraded');
             }
         }
index b9e71a1..caccf10 100644 (file)
@@ -795,7 +795,7 @@ function assign_update_grades($assign, $userid=0, $nullifnone=true) {
  * @param stdClass $context
  * @return array
  */
-function mod_assign_get_file_areas($course, $cm, $context) {
+function assign_get_file_areas($course, $cm, $context) {
     global $CFG;
     require_once($CFG->dirroot . '/mod/assign/locallib.php');
     $areas = array();
@@ -837,7 +837,7 @@ function mod_assign_get_file_areas($course, $cm, $context) {
  * @param string $filename
  * @return object file_info instance or null if not found
  */
-function mod_assign_get_file_info($browser, $areas, $course, $cm, $context, $filearea, $itemid, $filepath, $filename) {
+function assign_get_file_info($browser, $areas, $course, $cm, $context, $filearea, $itemid, $filepath, $filename) {
     global $CFG;
     require_once($CFG->dirroot . '/mod/assign/locallib.php');
 
index aa53202..86e8b92 100644 (file)
@@ -895,7 +895,12 @@ class assign {
         if ($this->get_instance()->grade >= 0) {
             // Normal number
             if ($editing) {
-                $o = '<input type="text" name="quickgrade_' . $userid . '" value="' . format_float($grade) . '" size="6" maxlength="10" class="quickgrade"/>';
+                if ($grade < 0) {
+                    $displaygrade = '';
+                } else {
+                    $displaygrade = format_float($grade);
+                }
+                $o = '<input type="text" name="quickgrade_' . $userid . '" value="' . $displaygrade . '" size="6" maxlength="10" class="quickgrade"/>';
                 $o .= '&nbsp;/&nbsp;' . format_float($this->get_instance()->grade,2);
                 $o .= '<input type="hidden" name="grademodified_' . $userid . '" value="' . $modified . '"/>';
                 return $o;
@@ -1636,7 +1641,7 @@ class assign {
         }
         if ($grade) {
             $data = new stdClass();
-            if ($grade->grade >= 0) {
+            if ($grade->grade !== NULL && $grade->grade >= 0) {
                 $data->grade = format_float($grade->grade,2);
             }
         } else {
@@ -1897,7 +1902,7 @@ class assign {
     private function is_graded($userid) {
         $grade = $this->get_user_grade($userid, false);
         if ($grade) {
-            return ($grade->grade != '');
+            return ($grade->grade !== NULL && $grade->grade >= 0);
         }
         return false;
     }
index 0ab3777..cfb95ad 100644 (file)
@@ -106,7 +106,8 @@ class assign_submission_onlinetext extends assign_submission_plugin {
            'noclean' => false,
            'maxfiles' => EDITOR_UNLIMITED_FILES,
            'maxbytes' => $this->assignment->get_course()->maxbytes,
-           'context' => $this->assignment->get_context()
+           'context' => $this->assignment->get_context(),
+           'return_types' => FILE_INTERNAL | FILE_EXTERNAL
         );
         return $editoroptions;
     }
index b2b2bfa..af599d0 100644 (file)
@@ -25,7 +25,7 @@
 defined('MOODLE_INTERNAL') || die();
 
 $module->component = 'mod_assign'; // Full name of the plugin (used for diagnostics)
-$module->version  = 2012051700;    // The current module version (Date: YYYYMMDDXX)
+$module->version  = 2012061100;    // The current module version (Date: YYYYMMDDXX)
 $module->requires = 2012050300;    // Requires this Moodle version
 $module->cron     = 60;
 
index f82005d..8f8dcf3 100644 (file)
@@ -1113,7 +1113,7 @@ class assignment_base {
             }
         }
 
-        $submitform = new mod_assignment_grading_form( null, $mformdata );
+        $submitform = new assignment_grading_form( null, $mformdata );
 
          if (!$display) {
             $ret_data = new stdClass();
@@ -2422,7 +2422,7 @@ class assignment_base {
 } ////// End of the assignment_base class
 
 
-class mod_assignment_grading_form extends moodleform {
+class assignment_grading_form extends moodleform {
     /** @var stores the advaned grading instance (if used in grading) */
     private $advancegradinginstance;
 
@@ -3994,7 +3994,7 @@ function assignment_get_file_areas($course, $cm, $context) {
  * @param string $filename
  * @return file_info_stored file_info_stored instance or null if not found
  */
-function mod_assignment_get_file_info($browser, $areas, $course, $cm, $context, $filearea, $itemid, $filepath, $filename) {
+function assignment_get_file_info($browser, $areas, $course, $cm, $context, $filearea, $itemid, $filepath, $filename) {
     global $CFG, $DB, $USER;
 
     if ($context->contextlevel != CONTEXT_MODULE || $filearea != 'submission') {
index 163bdab..48819c7 100644 (file)
@@ -42,7 +42,8 @@ class assignment_online extends assignment_base {
                 'noclean'  => false,
                 'maxfiles' => EDITOR_UNLIMITED_FILES,
                 'maxbytes' => $this->course->maxbytes,
-                'context'  => $this->context
+                'context'  => $this->context,
+                'return_types' => FILE_INTERNAL | FILE_EXTERNAL
             );
 
             $data = new stdClass();
index 238913d..b0a23af 100644 (file)
@@ -268,7 +268,11 @@ function book_get_toc($chapters, $chapter, $book, $cm, $edit) {
                     }
                 } else {
                     if ($book->numbering == BOOK_NUM_NUMBERS) {
-                        $title = "x.x $title";
+                        if (empty($chapters[$ch->parent]->hidden)) {
+                            $title = "$nch.x $title";
+                        } else {
+                            $title = "x.x $title";
+                        }
                     }
                     $title = '<span class="dimmed_text">'.$title.'</span>';
                 }
index 73815b5..7a67a16 100644 (file)
@@ -12,7 +12,7 @@
             <?php echo get_string('maxsize', 'data'); ?></label></td>
         <td class="c1">
             <?php
-                $course->maxbytes = $DB->get_field('course', 'maxbytes', array('id'=>$this->data->course));
+                $course = $DB->get_record('course', array('id'=>$this->data->course));
                 $choices = get_max_upload_sizes($CFG->maxbytes, $course->maxbytes);
                 echo html_writer::select($choices, 'param3', $this->field->param3, false, array('id' => 'param3'));
             ?>
index 9dd1583..4b32474 100644 (file)
@@ -44,7 +44,7 @@
             <?php echo get_string('maxsize', 'data'); ?></label></td>
         <td class="c1">
             <?php
-                $course->maxbytes = $DB->get_field('course', 'maxbytes', array('id'=>$this->data->course));
+                $course = $DB->get_record('course', array('id'=>$this->data->course));
                 $choices = get_max_upload_sizes($CFG->maxbytes, $course->maxbytes);
                 echo html_writer::select($choices, 'param3', $this->field->param3, false, array('id'=>'param3'));
             ?>
index d21aff3..c23094b 100644 (file)
@@ -2832,7 +2832,7 @@ function data_get_file_areas($course, $cm, $context) {
  * @param string $filename
  * @return file_info_stored file_info_stored instance or null if not found
  */
-function mod_data_get_file_info($browser, $areas, $course, $cm, $context, $filearea, $itemid, $filepath, $filename) {
+function data_get_file_info($browser, $areas, $course, $cm, $context, $filearea, $itemid, $filepath, $filename) {
     global $CFG, $DB;
 
     if ($context->contextlevel != CONTEXT_MODULE) {
index 607e78f..fde1587 100644 (file)
@@ -363,7 +363,7 @@ function folder_export_contents($cm, $baseurl) {
  * Register the ability to handle drag and drop file uploads
  * @return array containing details of the files / types the mod can handle
  */
-function mod_folder_dndupload_register() {
+function folder_dndupload_register() {
     return array('files' => array(
                      array('extension' => 'zip', 'message' => get_string('dnduploadmakefolder', 'mod_folder'))
                  ));
@@ -374,7 +374,7 @@ function mod_folder_dndupload_register() {
  * @param object $uploadinfo details of the file / content that has been uploaded
  * @return int instance id of the newly created mod
  */
-function mod_folder_dndupload_handle($uploadinfo) {
+function folder_dndupload_handle($uploadinfo) {
     global $DB, $USER;
 
     // Gather the required info.
index e3caa53..b475684 100644 (file)
@@ -45,7 +45,8 @@ class mod_forum_post_form extends moodleform {
             $forum->maxbytes = $course->maxbytes;
         }
         // TODO: add max files and max size support
-        $editoroptions = array('maxfiles' => EDITOR_UNLIMITED_FILES, 'trusttext'=>true, 'context'=>$modcontext);
+        $editoroptions = array('maxfiles' => EDITOR_UNLIMITED_FILES, 'trusttext'=>true,
+            'context'=>$modcontext, 'return_types'=>FILE_INTERNAL | FILE_EXTERNAL);
 
         $mform->addElement('header', 'general', '');//fill in the data depending on page params later using set_data
         $mform->addElement('text', 'subject', get_string('subject', 'forum'), 'size="48"');
index 4c68fb4..0a05ec7 100644 (file)
@@ -1620,7 +1620,7 @@ function glossary_get_file_areas($course, $cm, $context) {
  * @param string $filename
  * @return file_info_stored file_info_stored instance or null if not found
  */
-function mod_glossary_get_file_info($browser, $areas, $course, $cm, $context, $filearea, $itemid, $filepath, $filename) {
+function glossary_get_file_info($browser, $areas, $course, $cm, $context, $filearea, $itemid, $filepath, $filename) {
     global $CFG, $DB;
 
     if ($context->contextlevel != CONTEXT_MODULE) {
index 68b813c..3242bd6 100644 (file)
@@ -477,7 +477,7 @@ function page_export_contents($cm, $baseurl) {
  * Register the ability to handle drag and drop file uploads
  * @return array containing details of the files / types the mod can handle
  */
-function mod_page_dndupload_register() {
+function page_dndupload_register() {
     return array('types' => array(
                      array('identifier' => 'text/html', 'message' => get_string('createpage', 'page')),
                      array('identifier' => 'text', 'message' => get_string('createpage', 'page'))
@@ -489,7 +489,7 @@ function mod_page_dndupload_register() {
  * @param object $uploadinfo details of the file / content that has been uploaded
  * @return int instance id of the newly created mod
  */
-function mod_page_dndupload_handle($uploadinfo) {
+function page_dndupload_handle($uploadinfo) {
     // Gather the required info.
     $data = new stdClass();
     $data->course = $uploadinfo->course->id;
index e2f24d2..1f108bf 100644 (file)
@@ -145,10 +145,6 @@ $quizhasattempts = quiz_has_attempts($quiz->id);
 
 $PAGE->set_url($thispageurl);
 
-$pagetitle = get_string('editingquiz', 'quiz');
-if ($quiz_reordertool) {
-    $pagetitle = get_string('orderingquiz', 'quiz');
-}
 // Get the course object and related bits.
 $course = $DB->get_record('course', array('id' => $quiz->course));
 if (!$course) {
@@ -412,7 +408,7 @@ $PAGE->requires->skip_link_to('questionbank',
         get_string('skipto', 'access', get_string('questionbank', 'question')));
 $PAGE->requires->skip_link_to('quizcontentsblock',
         get_string('skipto', 'access', get_string('questionsinthisquiz', 'quiz')));
-$PAGE->set_title($pagetitle);
+$PAGE->set_title(get_string('editingquizx', 'quiz', format_string($quiz->name)));
 $PAGE->set_heading($course->fullname);
 $node = $PAGE->settingsnav->find('mod_quiz_edit', navigation_node::TYPE_SETTING);
 if ($node) {
@@ -498,10 +494,10 @@ if ($quiz_reordertool) {
 }
 
 if ($quiz_reordertool) {
-    echo $OUTPUT->heading_with_help(get_string('orderingquiz', 'quiz') . ': ' . $quiz->name,
+    echo $OUTPUT->heading_with_help(get_string('orderingquizx', 'quiz', format_string($quiz->name)),
             'orderandpaging', 'quiz');
 } else {
-    echo $OUTPUT->heading(get_string('editingquiz', 'quiz') . ': ' . $quiz->name, 2);
+    echo $OUTPUT->heading(get_string('editingquizx', 'quiz', format_string($quiz->name)), 2);
     echo $OUTPUT->help_icon('editingquiz', 'quiz', get_string('basicideasofquiz', 'quiz'));
 }
 quiz_print_status_bar($quiz);
index af3f104..89f7b69 100644 (file)
@@ -246,6 +246,7 @@ $string['editingquiz_help'] = 'When creating a quiz, the main concepts are:
 * The question bank, which stores copies of all questions organised into categories
 * Random questions -  A student gets different questions each time they attempt the quiz and different students can get different questions';
 $string['editingquiz_link'] = 'mod/quiz/edit';
+$string['editingquizx'] = 'Editing quiz: {$a}';
 $string['editoverride'] = 'Edit override';
 $string['editqcats'] = 'Edit questions categories';
 $string['editquestions'] = 'Edit questions';
@@ -514,6 +515,7 @@ To add page breaks after particular questions, tick the checkboxes next to the q
 
 To arrange the questions over a number of pages, click the Repaginate button and select the desired number of questions per page.';
 $string['orderingquiz'] = 'Order and paging';
+$string['orderingquizx'] = 'Order and paging: {$a}';
 $string['outof'] = '{$a->grade} out of a maximum of {$a->maxgrade}';
 $string['outofpercent'] = '{$a->grade} out of a maximum of {$a->maxgrade} ({$a->percent}%)';
 $string['outofshort'] = '{$a->grade}/{$a->maxgrade}';
@@ -522,9 +524,11 @@ $string['overallfeedback_help'] = 'Overall feedback is text that is shown after
 $string['overdue'] = 'Overdue';
 $string['overduehandling'] = 'When time expires';
 $string['overduehandling_desc'] = 'What should happen by default if a student does not submit the quiz before time expires.';
-$string['overduehandlingautosubmit'] = 'the attempt is submitted automatically';
-$string['overduehandlinggraceperiod'] = 'there is a grace period in which to submit the attempt, but not answer more questions';
-$string['overduehandlingautoabandon'] = 'that is it. The attempt must be submitted before time expires, or it is not counted';
+$string['overduehandling_help'] = 'This setting controls what happens if the Student fails to submit their quiz attempt before time expires. If the student is actively working on the quiz at the time, then the countdown timer will always automatically submit the attempt for them, but if they have logged out, then this setting controls what happens.';
+$string['overduehandling_link'] = 'mod/quiz/timing';
+$string['overduehandlingautosubmit'] = 'Open attempts are submitted automatically';
+$string['overduehandlinggraceperiod'] = 'There is a grace period when open attempts can be submitted, but no more questions answered';
+$string['overduehandlingautoabandon'] = 'Attempts must be submitted before time expires, or they are not counted';
 $string['overduemustbesubmittedby'] = 'This attempt is now overdue. It should already have been submitted. If you would like this quiz to be graded, you must submit it by {$a}. If you do not submit it by then, no marks from this attempt will be counted.';
 $string['override'] = 'Override';
 $string['overridedeletegroupsure'] = 'Are you sure you want to delete the override for group {$a}?';
@@ -609,6 +613,7 @@ $string['quiznavigation'] = 'Quiz navigation';
 $string['quizopen'] = 'Open the quiz';
 $string['quizopenclose'] = 'Open and close dates';
 $string['quizopenclose_help'] = 'Students can only start their attempt(s) after the open time and they must complete their attempts before the close time.';
+$string['quizopenclose_link'] = 'mod/quiz/timing';
 $string['quizopened'] = 'This quiz is open.';
 $string['quizopenedon'] = 'This quiz opened at {$a}';
 $string['quizopens'] = 'Quiz opens';
@@ -810,6 +815,7 @@ $string['timedelay'] = 'You are not allowed to do the quiz since you have not pa
 $string['timeleft'] = 'Time left';
 $string['timelimit'] = 'Time limit';
 $string['timelimit_help'] = 'If enabled, the time limit is stated on the initial quiz page and a countdown timer is displayed in the quiz navigation block.';
+$string['timelimit_link'] = 'mod/quiz/timing';
 $string['timelimitexeeded'] = 'Sorry! Quiz time limit exceeded!';
 $string['timelimitmin'] = 'Time limit (minutes)';
 $string['timelimitsec'] = 'Time limit (seconds)';
index 31cb991..97bd198 100644 (file)
@@ -1741,7 +1741,7 @@ function quiz_pluginfile($course, $cm, $context, $filearea, $args, $forcedownloa
  * @param array $options additional options affecting the file serving
  * @return bool false if file not found, does not return if found - justsend the file
  */
-function mod_quiz_question_pluginfile($course, $context, $component,
+function quiz_question_pluginfile($course, $context, $component,
         $filearea, $qubaid, $slot, $args, $forcedownload, array $options=array()) {
     global $CFG;
     require_once($CFG->dirroot . '/mod/quiz/locallib.php');
index 0b101ec..a074514 100644 (file)
@@ -94,6 +94,7 @@ class mod_quiz_mod_form extends moodleform_mod {
         // What to do with overdue attempts.
         $mform->addElement('select', 'overduehandling', get_string('overduehandling', 'quiz'),
                 quiz_get_overdue_handling_options());
+        $mform->addHelpButton('overduehandling', 'overduehandling', 'quiz');
         $mform->setAdvanced('overduehandling', $quizconfig->overduehandling_adv);
         $mform->setDefault('overduehandling', $quizconfig->overduehandling);
         // TODO Formslib does OR logic on disableif, and we need AND logic here.
index d5f2081..8243c5b 100644 (file)
@@ -484,7 +484,7 @@ function resource_export_contents($cm, $baseurl) {
  * Register the ability to handle drag and drop file uploads
  * @return array containing details of the files / types the mod can handle
  */
-function mod_resource_dndupload_register() {
+function resource_dndupload_register() {
     return array('files' => array(
                      array('extension' => '*', 'message' => get_string('dnduploadresource', 'mod_resource'))
                  ));
@@ -495,7 +495,7 @@ function mod_resource_dndupload_register() {
  * @param object $uploadinfo details of the file / content that has been uploaded
  * @return int instance id of the newly created mod
  */
-function mod_resource_dndupload_handle($uploadinfo) {
+function resource_dndupload_handle($uploadinfo) {
     // Gather the required info.
     $data = new stdClass();
     $data->course = $uploadinfo->course->id;
index 01560dd..7b9d645 100644 (file)
@@ -61,9 +61,6 @@ class mod_resource_mod_form extends moodleform_mod {
         $mform->addElement('header', 'contentsection', get_string('contentheader', 'resource'));
 
         $filemanager_options = array();
-        // 3 == FILE_EXTERNAL | FILE_INTERNAL | FILE_REFERENCE
-        // These two constant names are defined in repository/lib.php
-        $filemanager_options['return_types'] = 7;
         $filemanager_options['accepted_types'] = '*';
         $filemanager_options['maxbytes'] = 0;
         $filemanager_options['maxfiles'] = -1;
index 7b92eda..f1cb721 100644 (file)
@@ -92,6 +92,7 @@ $string['displaycoursestructure_help'] = 'If enabled, the table of contents is d
 $string['displaycoursestructuredesc'] = 'This preference sets the default value for the display course structure on entry page setting';
 $string['displaydesc'] = 'This preference sets the default of whether to display the package or not for an activity';
 $string['displaysettings'] = 'Display Settings';
+$string['dnduploadscorm'] = 'Create SCORM package';
 $string['domxml'] = 'DOMXML external library';
 $string['duedate'] = 'Due date';
 $string['element'] = 'Element';
@@ -180,7 +181,7 @@ $string['invalidhacpsession'] = 'Invalid HACP Session';
 $string['invalidmanifestresource'] = 'WARNING: The following resources were referenced in your manifest but couldn\'t be found:';
 $string['last'] = 'Last accessed on';
 $string['lastaccess'] = 'Last access';
-$string['lastattempt'] = 'Last attempt';
+$string['lastattempt'] = 'Last completed attempt';
 $string['lastattemptlock'] = 'Lock after final attempt';
 $string['lastattemptlock_help'] = 'If enabled, a student is prevented from launching the SCORM player after using up all their allocated attempts.';
 $string['lastattemptlockdesc'] = 'This preference sets the default value for the lock after final attempt setting';
@@ -334,7 +335,7 @@ $string['versionwarning'] = 'The manifest version is older than 1.3, warning at
 $string['viewallreports'] = 'View reports for {$a} attempts';
 $string['viewalluserreports'] = 'View reports for {$a} users';
 $string['whatgrade'] = 'Attempts grading';
-$string['whatgrade_help'] = 'If multiple attempts are allowed, this setting specifies whether the highest, average (mean), first or last attempt is recorded in the gradebook.
+$string['whatgrade_help'] = 'If multiple attempts are allowed, this setting specifies whether the highest, average (mean), first or last completed attempt is recorded in the gradebook.
 
 Handling of Multiple Attempts
 
index 9849031..7b395f5 100644 (file)
@@ -1258,3 +1258,68 @@ function scorm_get_completion_state($course, $cm, $userid, $type) {
 
     return $result;
 }
+
+/**
+ * Register the ability to handle drag and drop file uploads
+ * @return array containing details of the files / types the mod can handle
+ */
+function scorm_dndupload_register() {
+    return array('files' => array(
+        array('extension' => 'zip', 'message' => get_string('dnduploadscorm', 'scorm'))
+    ));
+}
+
+/**
+ * Handle a file that has been uploaded
+ * @param object $uploadinfo details of the file / content that has been uploaded
+ * @return int instance id of the newly created mod
+ */
+function scorm_dndupload_handle($uploadinfo) {
+
+    $context = context_module::instance($uploadinfo->coursemodule);
+    file_save_draft_area_files($uploadinfo->draftitemid, $context->id, 'mod_scorm', 'package', 0);
+    $fs = get_file_storage();
+    $files = $fs->get_area_files($context->id, 'mod_scorm', 'package', 0, 'sortorder, itemid, filepath, filename', false);
+    $file = reset($files);
+
+    // Validate the file, make sure it's a valid SCORM package!
+    $packer = get_file_packer('application/zip');
+    $filelist = $file->list_files($packer);
+
+    if (!is_array($filelist)) {
+        return false;
+    } else {
+        $manifestpresent = false;
+        $aiccfound = false;
+
+        foreach ($filelist as $info) {
+            if ($info->pathname == 'imsmanifest.xml') {
+                $manifestpresent = true;
+                break;
+            }
+
+            if (preg_match('/\.cst$/', $info->pathname)) {
+                $aiccfound = true;
+                break;
+            }
+        }
+
+        if (!$manifestpresent && !$aiccfound) {
+            return false;
+        }
+    }
+
+    // Create a default scorm object to pass to scorm_add_instance()!
+    $scorm = get_config('scorm');
+    $scorm->course = $uploadinfo->course->id;
+    $scorm->coursemodule = $uploadinfo->coursemodule;
+    $scorm->cmidnumber = '';
+    $scorm->name = $uploadinfo->displayname;
+    $scorm->scormtype = SCORM_TYPE_LOCAL;
+    $scorm->reference = $file->get_filename();
+    $scorm->intro = '';
+    $scorm->width = $scorm->framewidth;
+    $scorm->height = $scorm->frameheight;
+
+    return scorm_add_instance($scorm, null);
+}
index 65c21cf..8fdfee1 100644 (file)
@@ -336,7 +336,7 @@ function url_export_contents($cm, $baseurl) {
  * Register the ability to handle drag and drop file uploads
  * @return array containing details of the files / types the mod can handle
  */
-function mod_url_dndupload_register() {
+function url_dndupload_register() {
     return array('types' => array(
                      array('identifier' => 'url', 'message' => get_string('createurl', 'url'))
                  ));
@@ -347,7 +347,7 @@ function mod_url_dndupload_register() {
  * @param object $uploadinfo details of the file / content that has been uploaded
  * @return int instance id of the newly created mod
  */
-function mod_url_dndupload_handle($uploadinfo) {
+function url_dndupload_handle($uploadinfo) {
     // Gather all the required data.
     $data = new stdClass();
     $data->course = $uploadinfo->course->id;
index efcff41..e17f13b 100644 (file)
@@ -144,7 +144,8 @@ if ($edit) {
                         'subdirs'   => false,
                         'maxfiles'  => $maxfiles,
                         'maxbytes'  => $maxbytes,
-                        'context'   => $workshop->context
+                        'context'   => $workshop->context,
+                        'return_types' => FILE_INTERNAL | FILE_EXTERNAL
                       );
 
     $attachmentopts = array('subdirs' => true, 'maxfiles' => $maxfiles, 'maxbytes' => $maxbytes, 'return_types' => FILE_INTERNAL);
diff --git a/pix/f/archive.png b/pix/f/archive.png
new file mode 100644 (file)
index 0000000..6b20595
Binary files /dev/null and b/pix/f/archive.png differ
index 6882b6f..88bf08d 100644 (file)
Binary files a/pix/f/audio.png and b/pix/f/audio.png differ
index 4491e22..593ffd5 100644 (file)
Binary files a/pix/f/avi.png and b/pix/f/avi.png differ
diff --git a/pix/f/base.png b/pix/f/base.png
new file mode 100644 (file)
index 0000000..9248c8b
Binary files /dev/null and b/pix/f/base.png differ
index a53c85f..b00e6a2 100644 (file)
Binary files a/pix/f/bmp.png and b/pix/f/bmp.png differ
diff --git a/pix/f/calc.png b/pix/f/calc.png
new file mode 100644 (file)
index 0000000..66e9833
Binary files /dev/null and b/pix/f/calc.png differ
diff --git a/pix/f/chart.png b/pix/f/chart.png
new file mode 100644 (file)
index 0000000..ef0b6ee
Binary files /dev/null and b/pix/f/chart.png differ
index 74a2d13..bd55b8b 100644 (file)
Binary files a/pix/f/database.png and b/pix/f/database.png differ
index 1dfb712..253a84c 100644 (file)
Binary files a/pix/f/document.png and b/pix/f/document.png differ
diff --git a/pix/f/draw.png b/pix/f/draw.png
new file mode 100644 (file)
index 0000000..3067ddc
Binary files /dev/null and b/pix/f/draw.png differ
index 8075e23..2c10d87 100644 (file)
Binary files a/pix/f/eps.png and b/pix/f/eps.png differ
index 2cff187..1cd9e63 100644 (file)
Binary files a/pix/f/flash.png and b/pix/f/flash.png differ
index 2e6d160..8f887fa 100644 (file)
Binary files a/pix/f/gif.png and b/pix/f/gif.png differ
index f70d02f..b40a733 100644 (file)
Binary files a/pix/f/image-128.png and b/pix/f/image-128.png differ
index 779415d..42820c9 100644 (file)
Binary files a/pix/f/image-24.png and b/pix/f/image-24.png differ
index ad1c5e7..b081d00 100644 (file)
Binary files a/pix/f/image-256.png and b/pix/f/image-256.png differ
index bfdf341..066ef6c 100644 (file)
Binary files a/pix/f/image-32.png and b/pix/f/image-32.png differ
index 4e46413..1f14a57 100644 (file)
Binary files a/pix/f/image-48.png and b/pix/f/image-48.png differ
index cbed5fb..c181eaa 100644 (file)
Binary files a/pix/f/image-64.png and b/pix/f/image-64.png differ
index 14b9623..72d3390 100644 (file)
Binary files a/pix/f/image-72.png and b/pix/f/image-72.png differ
index 5e23b6c..a20c56b 100644 (file)
Binary files a/pix/f/image-80.png and b/pix/f/image-80.png differ
index 270814b..cbf244f 100644 (file)
Binary files a/pix/f/image-96.png and b/pix/f/image-96.png differ
index a5cd485..dbdbe7f 100644 (file)
Binary files a/pix/f/image.png and b/pix/f/image.png differ
diff --git a/pix/f/impress.png b/pix/f/impress.png
new file mode 100644 (file)
index 0000000..fe4d72f
Binary files /dev/null and b/pix/f/impress.png differ
diff --git a/pix/f/isf.gif b/pix/f/isf.gif
deleted file mode 100644 (file)
index 003ac11..0000000
Binary files a/pix/f/isf.gif and /dev/null differ
diff --git a/pix/f/isf.png b/pix/f/isf.png
new file mode 100644 (file)
index 0000000..762a8a9
Binary files /dev/null and b/pix/f/isf.png differ
index c1fd299..98c868b 100644 (file)
Binary files a/pix/f/jpeg.png and b/pix/f/jpeg.png differ
diff --git a/pix/f/markup.png b/pix/f/markup.png
new file mode 100644 (file)
index 0000000..a067c73
Binary files /dev/null and b/pix/f/markup.png differ
diff --git a/pix/f/math.png b/pix/f/math.png
new file mode 100644 (file)
index 0000000..2d1adc0
Binary files /dev/null and b/pix/f/math.png differ
index 70e3f1b..cc40b7b 100644 (file)
Binary files a/pix/f/moodle.png and b/pix/f/moodle.png differ
index 36db610..3e3b58c 100644 (file)
Binary files a/pix/f/mp3.png and b/pix/f/mp3.png differ
index 3225907..35a7a1d 100644 (file)
Binary files a/pix/f/mpeg.png and b/pix/f/mpeg.png differ
index 57cbf55..24ffc97 100644 (file)
Binary files a/pix/f/oth.png and b/pix/f/oth.png differ
index 92bd3a6..b35e4a1 100644 (file)
Binary files a/pix/f/pdf.png and b/pix/f/pdf.png differ
index 41d52c6..bcc7eed 100644 (file)
Binary files a/pix/f/png.png and b/pix/f/png.png differ
index c127b1d..29b0b3c 100644 (file)
Binary files a/pix/f/powerpoint.png and b/pix/f/powerpoint.png differ
index a6657b2..86690db 100644 (file)
Binary files a/pix/f/psd.png and b/pix/f/psd.png differ
diff --git a/pix/f/quicktime.png b/pix/f/quicktime.png
new file mode 100644 (file)
index 0000000..97b96fb
Binary files /dev/null and b/pix/f/quicktime.png differ
diff --git a/pix/f/sourcecode.png b/pix/f/sourcecode.png
new file mode 100644 (file)
index 0000000..767dfde
Binary files /dev/null and b/pix/f/sourcecode.png differ
index 2fa2c9e..1f35f32 100644 (file)
Binary files a/pix/f/spreadsheet.png and b/pix/f/spreadsheet.png differ
index 91bd190..e9ec05b 100644 (file)
Binary files a/pix/f/text.png and b/pix/f/text.png differ
index 567679a..2c51c32 100644 (file)
Binary files a/pix/f/tiff.png and b/pix/f/tiff.png differ
index 726d1ba..bcefa46 100644 (file)
Binary files a/pix/f/video.png and b/pix/f/video.png differ
index c479357..8927684 100644 (file)
Binary files a/pix/f/wav.png and b/pix/f/wav.png differ
index 67fc572..bcefa46 100644 (file)
Binary files a/pix/f/wmv.png and b/pix/f/wmv.png differ
diff --git a/pix/f/writer.png b/pix/f/writer.png
new file mode 100644 (file)
index 0000000..94d30fe
Binary files /dev/null and b/pix/f/writer.png differ
index 288954f..ac2bac9 100644 (file)
@@ -109,6 +109,7 @@ class qtype_essay_renderer extends qtype_renderer {
         $pickeroptions->itemid = $qa->prepare_response_files_draft_itemid(
                 'attachments', $options->context->id);
         $pickeroptions->context = $options->context;
+        $pickeroptions->return_types = FILE_INTERNAL;
 
         $pickeroptions->itemid = $qa->prepare_response_files_draft_itemid(
                 'attachments', $options->context->id);
@@ -280,7 +281,7 @@ class qtype_essay_format_editor_renderer extends plugin_renderer_base {
      * @return array filepicker options for the editor.
      */
     protected function get_filepicker_options($context, $draftitemid) {
-        return array();
+        return array('return_types'  => FILE_INTERNAL | FILE_EXTERNAL);
     }
 
     /**
diff --git a/theme/base/pix/fp/dnd_arrow.gif b/theme/base/pix/fp/dnd_arrow.gif
new file mode 100644 (file)
index 0000000..9a474a5
Binary files /dev/null and b/theme/base/pix/fp/dnd_arrow.gif differ
diff --git a/theme/base/pix/fp/dnd_arrow.png b/theme/base/pix/fp/dnd_arrow.png
deleted file mode 100644 (file)
index 771f95a..0000000
Binary files a/theme/base/pix/fp/dnd_arrow.png and /dev/null differ
index 7e349d0..67922dd 100644 (file)
@@ -819,7 +819,7 @@ sup {vertical-align: super;}
 }
 
 .moodle-dialogue-base .moodle-dialogue {
-    background-color: transparent;
+    background-color: transparent!important;
     border: 0px solid transparent!important;
 }
 
@@ -843,9 +843,9 @@ sup {vertical-align: super;}
     padding:5px 5px 5px 5px;
     border-radius: 10px 10px 0px 0px;
     border-bottom: 1px solid #BBBBBB!important;
-    background: #CCCCCC;
-    background: -webkit-gradient(linear, left top, left bottom, from(#FFFFFF), to(#CCCCCC));
-    background: -moz-linear-gradient(top,  #FFFFFF,  #CCCCCC);
+    background: #CCCCCC!important;
+    background: -webkit-gradient(linear, left top, left bottom, from(#FFFFFF), to(#CCCCCC))!important;
+    background: -moz-linear-gradient(top,  #FFFFFF,  #CCCCCC)!important;
     filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#CCCCCC')!important;
     filter: dropshadow(color=#FFFFFF, offx=1, offy=1);
 }
@@ -935,7 +935,7 @@ sup {vertical-align: super;}
     left: 18.5em;
     margin: 0;
     padding: 2em 2em 2em 2.4em;
-    background-color: white;
+    background-color: #FFFFFF;
     overflow-x: hidden;
     overflow-y: auto;
     max-height: 550px;
index 5a5fc1a..815efa0 100644 (file)
@@ -8,6 +8,7 @@
 
 .course-content .section .activity img.activityicon {vertical-align:middle;height:16px;width:16px;}
 .course-content .section .activity .commands img.iconsmall {vertical-align: baseline;}
+.course-content .section .activity .commands img {padding: 0 2px;}
 .course-content .section-summary { border: 1px solid #DDD; margin-top: 5px; list-style: none; }
 .course-content .section-summary .section-title  { margin: 2px 5px 2px 5px; }
 .course-content .section-summary .summarytext { margin: 2px 5px 2px 5px; }
index b6ed919..09f98df 100644 (file)
@@ -274,8 +274,7 @@ a.ygtvspacer:hover {color: transparent;text-decoration: none;}
 .dndsupported .dndupload-ready .dndupload-target {display:block;}
 .dndupload-uploadinprogress {display:none;text-align:center;}
 .dndupload-uploading .dndupload-uploadinprogress {display:block;}
-.dndupload-arrow {background:url('[[pix:theme|fp/dnd_arrow]]') center no-repeat;width:56px;height:47px;position:absolute;margin-left: -28px;/*right:46%;left:46%;*/animation:mymove 5s infinite;-moz-animation:mymove 5s infinite;-webkit-animation:mymove 5s infinite;}
-@keyframes mymove {0%{top:10px;} 12%{top:40px;} 30%{top:20px} 65%{top:35px;} 100%{top:9px;}}@-moz-keyframes mymove{0%{top:10px;} 12%{top:40px;} 30%{top:20px} 65%{top:35px;} 100%{top:9px;}}@-webkit-keyframes mymove {0%{top:10px;} 12%{top:40px;} 30%{top:20px} 65%{top:35px;} 100%{top:9px;}}
+.dndupload-arrow {background:url([[pix:theme|fp/dnd_arrow]]) center no-repeat;width:60px;height:80px;position:absolute;margin-left: -28px;top: 5px;}
 
 /*
  * Select Dialogue (File Manager only)
index bafcc1e..2a77538 100644 (file)
@@ -166,7 +166,7 @@ function combo_send_cached($content, $mimetype, $etag, $lastmodified) {
     header('Last-Modified: '. gmdate('D, d M Y H:i:s', $lastmodified) .' GMT');
     header('Expires: '. gmdate('D, d M Y H:i:s', time() + $lifetime) .' GMT');
     header('Pragma: ');
-    header('Cache-Control: max-age='.$lifetime);
+    header('Cache-Control: public, max-age='.$lifetime);
     header('Accept-Ranges: none');
     header('Content-Type: '.$mimetype);
     header('Etag: '.$etag);