Merge branch 'MDL-27857-assignment-portfolio' of git://github.com/mudrd8mz/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 4 Oct 2011 10:42:32 +0000 (12:42 +0200)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 4 Oct 2011 10:42:32 +0000 (12:42 +0200)
lib/portfoliolib.php
mod/assignment/lang/en/assignment.php
mod/assignment/lib.php
mod/assignment/locallib.php
mod/assignment/renderer.php

index 9683ba6..c981d09 100644 (file)
@@ -255,7 +255,7 @@ class portfolio_add_button {
     *
     * @param int $format format to display the button or form or icon or link.
     *                    See constants PORTFOLIO_ADD_XXX for more info.
-    *                    optional, defaults to PORTFOLI_ADD_FULL_FORM
+    *                    optional, defaults to PORTFOLIO_ADD_FULL_FORM
     * @param str $addstr string to use for the button or icon alt text or link text.
     *                    this is whole string, not key.  optional, defaults to 'Add to portfolio';
     */
index e9a9031..bef1da4 100644 (file)
@@ -125,9 +125,11 @@ $string['helpuploadsingle'] = '<p>This type of assignment allows each participan
    a zipped web site, or anything you ask them to submit.</p>';
 $string['hideintro'] = 'Hide description before available date';
 $string['hideintro_help'] = 'If enabled, the assignment description is hidden before the "Available from" date. Only the assignment name is displayed.';
-$string['invalidassignment'] = 'incorrect assignment';
-$string['invalidid'] = 'assignment ID was incorrect';
-$string['invalidtype'] = 'Incorrect assignment type';
+$string['invalidassignment'] = 'Invalid assignment';
+$string['invalidfileandsubmissionid'] = 'Missing file or submission ID';
+$string['invalidid'] = 'Invalid assignment ID';
+$string['invalidsubmissionid'] = 'Invalid submission ID';
+$string['invalidtype'] = 'Invalid assignment type';
 $string['invaliduserid'] = 'Invalid user ID';
 $string['itemstocount'] = 'Count';
 $string['lastgrade'] = 'Last grade';
index d247b31..f698054 100644 (file)
@@ -1918,7 +1918,7 @@ class assignment_base {
                 $path = file_encode_url($CFG->wwwroot.'/pluginfile.php', '/'.$this->context->id.'/mod_assignment/submission/'.$submission->id.'/'.$filename);
                 $output .= '<a href="'.$path.'" ><img src="'.$OUTPUT->pix_url(file_mimetype_icon($mimetype)).'" class="icon" alt="'.$mimetype.'" />'.s($filename).'</a>';
                 if ($CFG->enableportfolios && $this->portfolio_exportable() && has_capability('mod/assignment:exportownsubmission', $this->context)) {
-                    $button->set_callback_options('assignment_portfolio_caller', array('id' => $this->cm->id, 'fileid' => $file->get_id()), '/mod/assignment/locallib.php');
+                    $button->set_callback_options('assignment_portfolio_caller', array('id' => $this->cm->id, 'submissionid' => $submission->id, 'fileid' => $file->get_id()), '/mod/assignment/locallib.php');
                     $button->set_format_by_file($file);
                     $output .= $button->to_html(PORTFOLIO_ADD_ICON_LINK);
                 }
@@ -1926,8 +1926,8 @@ class assignment_base {
                 $output .= '<br />';
             }
             if ($CFG->enableportfolios && count($files) > 1  && $this->portfolio_exportable() && has_capability('mod/assignment:exportownsubmission', $this->context)) {
-                $button->set_callback_options('assignment_portfolio_caller', array('id' => $this->cm->id), '/mod/assignment/locallib.php');
-                $output .= '<br />'  . $button->to_html();
+                $button->set_callback_options('assignment_portfolio_caller', array('id' => $this->cm->id, 'submissionid' => $submission->id), '/mod/assignment/locallib.php');
+                $output .= '<br />'  . $button->to_html(PORTFOLIO_ADD_TEXT_LINK);
             }
         }
 
index d6701bb..e2c3761 100644 (file)
@@ -38,6 +38,9 @@ class assignment_portfolio_caller extends portfolio_module_caller_base {
     */
     private $assignmentfile;
 
+    /** @var int callback arg - the id of submission we export */
+    protected $submissionid;
+
     /**
     * callback arg for a single file export
     */
@@ -45,11 +48,19 @@ class assignment_portfolio_caller extends portfolio_module_caller_base {
 
     public static function expected_callbackargs() {
         return array(
-            'id'     => true,
-            'fileid' => false,
+            'id'           => true,
+            'submissionid' => false,
+            'fileid'       => false,
         );
     }
 
+    /**
+     * Load data needed for the portfolio export
+     *
+     * If the assignment type implements portfolio_load_data(), the processing is delegated
+     * to it. Otherwise, the caller must provide either fileid (to export single file) or
+     * submissionid (to export all data attached to the given submission) via callback arguments.
+     */
     public function load_data() {
         global $DB, $CFG;
 
@@ -75,9 +86,23 @@ class assignment_portfolio_caller extends portfolio_module_caller_base {
             return $this->assignment->portfolio_load_data($this);
         }
 
-        $submission = $DB->get_record('assignment_submissions', array('assignment'=>$assignment->id, 'userid'=>$this->user->id));
+        if (empty($this->fileid)) {
+            if (empty($this->submissionid)) {
+                throw new portfolio_caller_exception('invalidfileandsubmissionid', 'mod_assignment');
+            }
+
+            if (! $submission = $DB->get_record('assignment_submissions', array('assignment'=>$assignment->id, 'id'=>$this->submissionid))) {
+                throw new portfolio_caller_exception('invalidsubmissionid', 'mod_assignment');
+            }
+
+            $submissionid = $submission->id;
+
+        } else {
+            // once we know the file id, we do not need the submission
+            $submissionid = null;
+        }
 
-        $this->set_file_and_format_data($this->fileid, $this->assignment->context->id, 'mod_assignment', 'submission', $submission->id, 'timemodified', false);
+        $this->set_file_and_format_data($this->fileid, $this->assignment->context->id, 'mod_assignment', 'submission', $submissionid, 'timemodified', false);
     }
 
     public function prepare_package() {
index 89d9b75..77eaf61 100644 (file)
@@ -96,9 +96,9 @@ class assignment_files implements renderable {
             $files = $fs->get_area_files($this->context->id, 'mod_assignment', $filearea, $itemid, "timemodified", false);
             if (count($files) >= 1 && has_capability('mod/assignment:exportownsubmission', $this->context)) {
                 $button = new portfolio_add_button();
-                $button->set_callback_options('assignment_portfolio_caller', array('id' => $this->cm->id), '/mod/assignment/locallib.php');
+                $button->set_callback_options('assignment_portfolio_caller', array('id' => $this->cm->id, 'submissionid' => $itemid), '/mod/assignment/locallib.php');
                 $button->reset_formats();
-                $this->portfolioform = $button->to_html();
+                $this->portfolioform = $button->to_html(PORTFOLIO_ADD_TEXT_LINK);
             }
         }
         $this->preprocess($this->dir, $filearea);