Adding a Portfolio Button to a page
Introduction
Adding an 'Add to Portfolio' button to any page is relatively trivial, there are just two things that you need to do:
Write a class that extends portfolio_caller_base
This sounds scary, but really it's not! It's a very small class. portfolio_caller_base has abstract functions that you must override, and some functions that you can override if you want to do something special. You should call it something like $module_portfolio_caller, or in a more complicated case (say assignment/type/upload, assignment_upload_portfolio_caller)
Methods you must override
During the export screens, it's desirable to still have some sensible navigation that logically follows from the place the user was before they started the export process. This function should return components to pass to build_nagivation (extralinks and cm)
prepare_package
@todo
supported_formats
The formats this plugin can support. At export time, both the plugin and the caller are polled for which formats they can support, and then the intersection is used to determine the export format. In the case that the intersection is greater than 1, the user is asked for their selection.
The available formats you can choose from are in portfolio_supported_formats and are constants PORTFOLIO_FORMAT_XXX.
get_return_url
This is used for redirecting the user on the case of a cancelled export, or at the end of their export, they are offered the option of continuing back to where they were (what this function returns) or on to their portfolio.
Methods you can override
has_export_config
If there's any addition config during the export process (for example, extra metadata), you can override this function to return true. If you do this, you must also override export_config_form and get_export_summary.
export_config_form
This function is called, and passed a moodle form object by reference to add elements to it. TODO: it would be nice to able to add validation at this point too.
get_course
portfolio_add_button tries to look for a course object at the point that it's called, by doing a global $COURSE which is hackish but mostly works. This is also used to build the navigation during the export process. If for some reason, your navigation doesn't include the current course, you can override this function to do something special. You shouldn't need to in the majority of cases.
set_export_config
@todo this might not be needed either
get_export_summary
If your plugin has overridden has_export_config, you must implement this to display nicely to the user on the confirmation screen.
Call portfolio_add_button in the appropriate place
Now that you've implemented this class, you just need to add the button. To do this, you require_once("$CFG->libdir/portfoliolib.php"); and call portfolio_add_button. It takes the following parameters:
$callbackclass
The name of the class you've made that subclassed portfolio_caller_base.
$callbackargs
An associative array of key=>value pairs you want passed to the constructor of your class.
$return
Whether you want the output returned or echoed. Defaults to false (echo)