From 866d543fdead304457b6f3c559d6b618117e8768 Mon Sep 17 00:00:00 2001 From: mjollnir_ Date: Thu, 14 Aug 2008 16:01:12 +0000 Subject: [PATCH] MDL-15758 - slight change to the portfolio_add_button contract to be more flexible. --- lang/en_utf8/portfolio.php | 1 + lib/portfoliolib.php | 93 +++++++++++++++---- mod/assignment/lib.php | 4 +- .../type/upload/assignment.class.php | 4 +- mod/data/lib.php | 2 +- mod/forum/discuss.php | 3 +- mod/forum/lib.php | 9 +- mod/glossary/export.php | 12 ++- mod/glossary/lib.php | 2 +- mod/resource/lib.php | 4 +- 10 files changed, 97 insertions(+), 37 deletions(-) diff --git a/lang/en_utf8/portfolio.php b/lang/en_utf8/portfolio.php index d9341351a1..df1d805fbc 100644 --- a/lang/en_utf8/portfolio.php +++ b/lang/en_utf8/portfolio.php @@ -33,6 +33,7 @@ $string['instanceismisconfigured'] = 'Portfolio instance is misconfigured, skipp $string['instancenotsaved'] = 'Failed to save portfolio'; $string['instancenotdelete'] = 'Failed to delete portfolio'; $string['instancesaved'] = 'Portfolio saved successfully'; +$string['invalidaddformat'] = 'Invalid add format passed to portfolio_add_button. ($a) Must be one of PORTFOLIO_ADD_XXX'; $string['invalidtempid'] = 'Invalid export id. maybe it has expired'; $string['invalidformat'] = 'Something is exporting an invalid format, $a'; $string['invalidinstance'] = 'Could not find that portfolio instance'; diff --git a/lib/portfoliolib.php b/lib/portfoliolib.php index 750278c70c..b53bdc8cee 100644 --- a/lib/portfoliolib.php +++ b/lib/portfoliolib.php @@ -113,6 +113,34 @@ define('PORTFOLIO_TIME_MODERATE', 'moderate'); */ define('PORTFOLIO_TIME_HIGH', 'high'); +// ************************************************** // +// available ways to add the portfolio export to a page +// ************************************************** // + +/** +* a whole form, containing a drop down menu (where necessary) +* and a submit button +*/ +define('PORTFOLIO_ADD_FULL_FORM', 1); + + +/** +* a whole form, containing a drop down menu (where necessary) +* but has an icon instead of a button to submit +*/ +define('PORTFOLIO_ADD_ICON_FORM', 2); + +/** +* just an icon with a link around it (yuk, as will result in a long url +* only use where necessary) +*/ +define('PORTFOLIO_ADD_ICON_LINK', 3); + +/** +* just some text with a link around it (yuk, as will result in a long url +* only use where necessary) +*/ +define('PORTFOLIO_ADD_TEXT_LINK', 4); /** * entry point to add an 'add to portfolio' button somewhere in moodle @@ -131,12 +159,14 @@ define('PORTFOLIO_TIME_HIGH', 'high'); * but more often, the caller is a script.php and the class in a lib.php * so you can pass it here if necessary. * this path should be relative (ie, not include) dirroot -* @param boolean $fullform either display the fullform with the dropmenu of available instances -* or just a small icon (which will trigger instance selection in a new screen) -* optional, defaults to true. +* @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 +* @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'; * @param boolean $return whether to echo or return content (optional defaults to false (echo) */ -function portfolio_add_button($callbackclass, $callbackargs, $callbackfile=null, $fullform=true, $return=false) { +function portfolio_add_button($callbackclass, $callbackargs, $callbackfile=null, $format=PORTFOLIO_ADD_FULL_FORM, $addstr=null, $return=false) { global $SESSION, $CFG, $COURSE, $USER; @@ -177,7 +207,8 @@ function portfolio_add_button($callbackclass, $callbackargs, $callbackfile=null, $callersupports = call_user_func(array($callbackclass, 'supported_formats')); - $output = '
' . "\n"; + $formoutput = '' . "\n"; + $linkoutput = ''; + $linkoutput .= 'ca_' . $key . '=' . $value . '&'; + $formoutput .= "\n" . ''; } - $output .= "\n" . ''; - $output .= "\n" . ''; - $output .= "\n" . ''; + $formoutput .= "\n" . ''; + $formoutput .= "\n" . ''; + $formoutput .= "\n" . ''; + $linkoutput .= 'callbackfile=' . $callbackfile . '&callbackclass=' + . $callbackclass . '&course=' . (!empty($COURSE) ? $COURSE->id : 0); $selectoutput = ''; if (count($instances) == 1) { $instance = array_shift($instances); @@ -203,22 +237,41 @@ function portfolio_add_button($callbackclass, $callbackargs, $callbackfile=null, debugging(get_string('instancemisconfigured', 'portfolio', get_string($error[$instance->get('id')], 'portfolio_' . $instance->get('plugin')))); return; } - $output .= "\n" . ''; + $formoutput .= "\n" . ''; + $linkoutput .= '&instance=' . $instance->get('id'); } else { $selectoutput = portfolio_instance_select($instances, $callersupports, $callbackclass, 'instance', true); } - if ($fullform) { - $output .= $selectoutput; - $output .= "\n" . ''; - } else { - $output .= "\n" . ''; - //@todo replace this with a little icon - } - - $output .= "\n" . ''; - + if (empty($addstr)) { + $addstr = get_string('addtoportfolio', 'portfolio'); + } + if (empty($format)) { + $format = PORTFOLIO_ADD_FULL_FORM; + } + switch ($format) { + case PORTFOLIO_ADD_FULL_FORM: + $formoutput .= $selectoutput; + $formoutput .= "\n" . ''; + $formoutput .= "\n" . ''; + break; + case PORTFOLIO_ADD_ICON_FORM: + $formoutput .= $selectoutput; + $formoutput .= "\n" . ''; + $formoutput .= "\n" . ''; + break; + case PORTFOLIO_ADD_ICON_LINK: + $linkoutput .= '"> . $addstr .
'; + break; + case PORTFOLIO_ADD_TEXT_LINK: + $linkoutput .= '">' . $addstr .''; + break; + default: + debugging('asdfd'); + print_error('invalidaddformat', 'portfolio', '', $format); + } + $output = (in_array($format, array(PORTFOLIO_ADD_FULL_FORM, PORTFOLIO_ADD_ICON_FORM)) ? $formoutput : $linkoutput); if ($return) { return $output; } else { diff --git a/mod/assignment/lib.php b/mod/assignment/lib.php index d256dd1227..30ef3c3bf5 100644 --- a/mod/assignment/lib.php +++ b/mod/assignment/lib.php @@ -1715,13 +1715,13 @@ class assignment_base { $output .= ''.$icon.''.s($filename).''; if ($this->portfolio_exportable() && has_capability('mod/assignment:exportownsubmission', $this->context)) { $p['file'] = $file->get_id(); - $output .= portfolio_add_button('assignment_portfolio_caller', $p, null, false, true); + $output .= portfolio_add_button('assignment_portfolio_caller', $p, null, PORTFOLIO_ADD_ICON_LINK, null, true); } $output .= '
'; } if ($this->portfolio_exportable() && has_capability('mod/assignment:exportownsubmission', $this->context)) { unset($p['file']);// for all files - $output .= '
' . portfolio_add_button('assignment_portfolio_caller', $p, null, true, true); + $output .= '
' . portfolio_add_button('assignment_portfolio_caller', $p, null, PORTFOLIO_ADD_FULL_FORM, null, true); } } diff --git a/mod/assignment/type/upload/assignment.class.php b/mod/assignment/type/upload/assignment.class.php index 51d5f9d03b..223a64aba1 100644 --- a/mod/assignment/type/upload/assignment.class.php +++ b/mod/assignment/type/upload/assignment.class.php @@ -362,13 +362,13 @@ class assignment_upload extends assignment_base { if (has_capability('mod/assignment:exportownsubmission', $this->context)) { $p['file'] = $file->get_id(); - $output .= portfolio_add_button('assignment_portfolio_caller', $p, '/mod/assignment/lib.php', false, true); + $output .= portfolio_add_button('assignment_portfolio_caller', $p, '/mod/assignment/lib.php', PORTFOLIO_ADD_ICON_LINK, null, true); } $output .= '
'; } if (has_capability('mod/assignment:exportownsubmission', $this->context)) { unset($p['file']);// for all files - $output .= '
' . portfolio_add_button('assignment_portfolio_caller', $p, '/mod/assignment/lib.php', true, true); + $output .= '
' . portfolio_add_button('assignment_portfolio_caller', $p, '/mod/assignment/lib.php', null, null, true); } } diff --git a/mod/data/lib.php b/mod/data/lib.php index aab332fa13..2f9aafd25e 100755 --- a/mod/data/lib.php +++ b/mod/data/lib.php @@ -1003,7 +1003,7 @@ function data_print_template($template, $records, $data, $search='',$page=0, $re && ((has_capability('mod/data:exportentry', $context) || (data_isowner($record->id) && has_capability('mod/data:exportownentry', $context))))) { require_once($CFG->libdir . '/portfoliolib.php'); - $replacement[] = portfolio_add_button('data_portfolio_caller', array('id' => $cm->id, 'record' => $record->id), null, false, true); + $replacement[] = portfolio_add_button('data_portfolio_caller', array('id' => $cm->id, 'record' => $record->id), null, PORTFOLIO_ADD_ICON_LINK, null, true); } else { $replacement[] = ''; } diff --git a/mod/forum/discuss.php b/mod/forum/discuss.php index f073023afd..32c5aa9778 100644 --- a/mod/forum/discuss.php +++ b/mod/forum/discuss.php @@ -161,7 +161,8 @@ $p = array( 'discussionid' => $discussion->id, ); - //$portfolio = portfolio_add_button('forum_portfolio_caller', $p, '/mod/forum/lib.php', true, true); + // @todo penny check these arguments when uncommenting + //$portfolio = portfolio_add_button('forum_portfolio_caller', $p, '/mod/forum/lib.php', null, null, true); } echo '
'; diff --git a/mod/forum/lib.php b/mod/forum/lib.php index cedbd3026c..3c88ccf74f 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -3112,7 +3112,8 @@ function forum_print_post($post, $discussion, $forum, &$cm, $course, $ownpost=fa $p = array( 'postid' => $post->id, ); - //$commands[] = portfolio_add_button('forum_portfolio_caller', $p, '/mod/forum/lib.php', false, true); + // @todo penny check these arguments when uncommenting + //$commands[] = portfolio_add_button('forum_portfolio_caller', $p, '/mod/forum/lib.php', PORTFOLIO_ADD_TEXT_LINK, null, true); } echo '
'; @@ -3880,7 +3881,8 @@ function forum_print_attachments($post, $return=NULL) { 'postid' => $post->id, 'attachment' => 1, ); - //$output .= portfolio_add_button('forum_portfolio_caller', $p, '/mod/forum/lib.php', false, true); + // @todo penny check these arguments when uncommenting + //$output .= portfolio_add_button('forum_portfolio_caller', $p, '/mod/forum/lib.php', PORTFOLIO_ADD_ICON_FORM, null, true); } $output .= "
"; @@ -3899,7 +3901,8 @@ function forum_print_attachments($post, $return=NULL) { 'postid' => $post->id, 'attachment' => 1, ); - //portfolio_add_button('forum_portfolio_caller', $p, '/mod/forum/lib.php', false); + // @todo penny check these arguments when uncommenting + //portfolio_add_button('forum_portfolio_caller', $p, '/mod/forum/lib.php', PORTFOLIO_ADD_ICON_FORM); } echo '
'; } diff --git a/mod/glossary/export.php b/mod/glossary/export.php index 40df63eaca..d5f0d88707 100644 --- a/mod/glossary/export.php +++ b/mod/glossary/export.php @@ -57,11 +57,13 @@
libdir . '/portfoliolib.php'); - $p = array( - 'id' => $cm->id, - ); - portfolio_add_button('glossary_csv_portfolio_caller', $p, '/mod/glossary/lib.php'); + if ($DB->count_records('glossary_entries', array('glossaryid' => $glossary->id)) && true) { // @todo penny capability check + require_once($CFG->libdir . '/portfoliolib.php'); + $p = array( + 'id' => $cm->id, + ); + portfolio_add_button('glossary_csv_portfolio_caller', $p, '/mod/glossary/lib.php'); + } print_box_end(); print_footer($course); ?> diff --git a/mod/glossary/lib.php b/mod/glossary/lib.php index 9408a8ac35..6e8b3a9933 100644 --- a/mod/glossary/lib.php +++ b/mod/glossary/lib.php @@ -866,7 +866,7 @@ function glossary_print_entry_icons($course, $cm, $glossary, $entry, $mode='',$h 'id' => $cm->id, 'entryid' => $entry->id, ); - $return .= portfolio_add_button('glossary_entry_portfolio_caller', $p, false, false, true); + $return .= portfolio_add_button('glossary_entry_portfolio_caller', $p, null, PORTFOLIO_ADD_ICON_LINK, null, true); } $return .= "  "; // just to make up a little the output in Mozilla ;) diff --git a/mod/resource/lib.php b/mod/resource/lib.php index 8bb207cade..1d9964b390 100644 --- a/mod/resource/lib.php +++ b/mod/resource/lib.php @@ -746,7 +746,7 @@ class resource_portfolio_caller extends portfolio_module_caller_base { return has_capability('mod/resource:exportresource', get_context_instance(CONTEXT_MODULE, $this->cm->id)); } - public static function add_button($resource, $fullform=true, $return=false) { + public static function add_button($resource, $format=null, $return=false) { if (!has_capability('mod/resource:exportresource', get_context_instance(CONTEXT_MODULE, $resource->cm->id))) { return; } @@ -754,7 +754,7 @@ class resource_portfolio_caller extends portfolio_module_caller_base { debugging(get_string('portfolionotimplemented', 'resource')); return false; } - return portfolio_add_button('resource_portfolio_caller', array('id' => $resource->cm->instance), '/mod/resource/lib.php', $fullform, $return); + return portfolio_add_button('resource_portfolio_caller', array('id' => $resource->cm->instance), '/mod/resource/lib.php', $format, null, $return); } public function get_sha1() { -- 2.39.5