mantisbt:addson_requirements
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
mantisbt:addson_requirements [2007/10/26 08:33] – DGtlRift | mantisbt:addson_requirements [2008/10/29 04:25] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Mantis Plug-ins Requirements ====== | ||
+ | * **Author:** Victor Boctor | ||
+ | * **Status:** In Progress | ||
+ | |||
+ | ===== Introduction ===== | ||
+ | |||
+ | Mantis currently supports some extensibility features like custom fields, custom functions, custom constants, and custom strings. | ||
+ | |||
+ | ===== Types of Plug-in ===== | ||
+ | |||
+ | * Display Filters - Provides the ability to pre-process strings before they outputted to the web page. This can be used to implement features like the ones built-in Mantis to link to issues, issue notes and cvs web. This is where # + 123 is converted to a hyperlink to issue number 123. | ||
+ | * Group Action - Provides the ability to process a set of issues that have been selected from the View Issues page and based on user's input process such issues in a custom way. | ||
+ | * Issue Action - Ability to add an action button to the Issue View page, this is like the Monitor and Delete buttons. | ||
+ | * Reports - Users should be able to easily develop extra reports | ||
+ | * Extensions - Ability to implement a Mantis extension which cuts across all different areas of Mantis, extra fields, extra reporting, configuration, | ||
+ | |||
+ | ===== Plug-ins Support Infrastructure ===== | ||
+ | |||
+ | * Ability to detect all plug-ins in the Mantis directory structure. | ||
+ | * From the manage plug-ins page, allow administrators (configurable threshold) to install / un-install a plug-in. | ||
+ | * Keep track of the installed plug-ins and make sure to provide them with the needed integration points. | ||
+ | * Extend the database scheme upgrade script to support modules. | ||
+ | * Detailed documentation about how to implement Mantis plug-ins. | ||
+ | |||
+ | ===== Information about a plugin ===== | ||
+ | |||
+ | * Name | ||
+ | * Publisher (e.g. Mantis Group) | ||
+ | * Publisher' | ||
+ | * Description | ||
+ | * Status (stable, beta, etc?) | ||
+ | * Creation Date | ||
+ | * Mantis Minimum Version | ||
+ | * PHP Minimum Version | ||
+ | * PHP Maximum Version (?) | ||
+ | * RequiredModules (array) | ||
+ | |||
+ | We can add support for dependencies on DB type, DB version, web server, etc. However, ideally we should target to reduce such dependencies when possible. | ||
+ | |||
+ | ===== Directory Structure ===== | ||
+ | |||
+ | < | ||
+ | mantis/ | ||
+ | admin/ | ||
+ | core/ | ||
+ | lang/ | ||
+ | modules/ | ||
+ | # | ||
+ | css/ | ||
+ | *.css | ||
+ | images/ | ||
+ | logo.jpg (some plugins may have logos, file name is configurable) | ||
+ | core/ | ||
+ | javascript/ | ||
+ | *.js | ||
+ | doc/ | ||
+ | readme.html | ||
+ | lang/ | ||
+ | strings_english.txt | ||
+ | pages/ | ||
+ | (new pages - included from module_page.php based on module name and action) | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | </ | ||
+ | |||
+ | * # | ||
+ | * register in events | ||
+ | * register necessary css based on current page. | ||
+ | * register necessary javascript based on current page. | ||
+ | * register menu options (menu, label_id, url) | ||
+ | * register string_display_filter | ||
+ | * register view issues links (e.g. csv, graphs, etc) | ||
+ | * register view issue links (e.g. Wiki) | ||
+ | * register the pages to include the plug-in (or ALL). | ||
+ | * register the pages to exclude the plug-in (or empty array) | ||
+ | * Support system exclude from pages (e.g. download attachment, module management page, etc) | ||
+ | |||
+ | ===== Configuration Options ===== | ||
+ | |||
+ | * manage_plugins_threshold. | ||
+ | |||
+ | Note that the plugins are always applied to all projects. | ||
+ | |||
+ | ===== New Pages ===== | ||
+ | |||
+ | The following pages will allow management of plug-ins and all their related details: | ||
+ | |||
+ | * manage_modules_page.php: | ||
+ | * manage_modules_add.php: | ||
+ | * manage_modules_remove.php: | ||
+ | * module_page.php: | ||
+ | |||
+ | ===== Plug-ins APIs ===== | ||
+ | |||
+ | This is the standard APIs that are used in managing modules and allowing modules to interact with some standard Mantis functionality. | ||
+ | |||
+ | * module_event - trigger an event with the appropriate parameters. | ||
+ | * module_event_is_subscribed() - check before doing extra work for the event. | ||
+ | * module_include_all() | ||
+ | * module_include_lang() | ||
+ | * module_include_css() | ||
+ | * module_include_javascript() | ||
+ | * module_get_info( $p_module_name ); | ||
+ | * module_install( $p_module_name ); | ||
+ | * module_get_dependencies( $p_module_name ) | ||
+ | * module_can_install( $p_module_name ) | ||
+ | * module_get_depedents( $p_module ) | ||
+ | * module_can_uninstall( $p_module ) | ||
+ | |||
+ | ===== Events ===== | ||
+ | |||
+ | Events are integration points that are similar to custom functions, however, they can be handled by one or more of the installed plug-ins. | ||
+ | |||
+ | * issue created | ||
+ | * issue updated | ||
+ | * issue deleted | ||
+ | * issue viewed | ||
+ | * issue cloned | ||
+ | * issue moved | ||
+ | * issue assigned | ||
+ | * issue re-assigned | ||
+ | * issue status changed | ||
+ | * issue attachment attached | ||
+ | * issue attachment deleted | ||
+ | * issue attachment preview | ||
+ | * user created by administrator | ||
+ | * user signed up | ||
+ | * user logged in for first time | ||
+ | * user pruned | ||
+ | * user deleted | ||
+ | * user disabled | ||
+ | * user authentication failed | ||
+ | * user logged in | ||
+ | * user updated | ||
+ | * user added to project | ||
+ | * user removed from project | ||
+ | * cronjob | ||
+ | * news added | ||
+ | * news updated | ||
+ | * news deleted | ||
+ | * note added | ||
+ | * note updated | ||
+ | * note deleted | ||
+ | * issue monitored | ||
+ | * issue unmonitored | ||
+ | * relationship_added | ||
+ | * relationship_deleted | ||
+ | * relationship_updated | ||
+ | * sponsorship_added | ||
+ | * sponsorship_updated | ||
+ | * sponsorship_deleted | ||
+ | * category_added | ||
+ | * category_updated | ||
+ | * category_deleted | ||
+ | * version_added | ||
+ | * version_updated | ||
+ | * version_deleted | ||
+ | * checkin | ||
+ | * project file attached | ||
+ | * project file deleted | ||
+ | * tag created | ||
+ | * tag updated | ||
+ | * tag deleted | ||
+ | * tag attached | ||
+ | * tag detached | ||
+ | * user heartbeat (can be used for users online) | ||
+ | * error (only for php errors, email errors, etc - i.e. system errors). | ||
+ | |||
+ | ===== Output Hooks ===== | ||
+ | |||
+ | Plug-ins should be able to create new pages, however, they should also be able to enrich the content of some of the existing pages. | ||
+ | |||
+ | * issue view | ||
+ | * user view | ||
+ | * project page view | ||
+ | * my view page | ||
+ | * below menu (similar to the current location of "last visited" | ||
+ | |||
+ | ===== Ideas for Plugins ===== | ||
+ | |||
+ | * notification plugins | ||
+ | * email plugin | ||
+ | * twitter pluggin | ||
+ | * sms pluggin | ||
+ | * attachment preview | ||
+ | * files (e.g. images, txt, flash) | ||
+ | * urls (e.g. youtube) | ||
+ | * bbcode | ||
+ | * Issue Action Group (may need a bit of cleanup) | ||
+ | * Audit Log | ||
+ | * Issues Last Visited (as a plug-in rather than built-in feature) | ||
+ | * Email admin on errors | ||
+ | * Wiki integration? | ||
+ | * Email Reports: e.g. issues matching filter sent to < | ||
+ | * created by a user | ||
+ | * can be public, hence, will trigger for each user | ||
+ | * min access level | ||
+ | * max access level | ||
+ | * for each project? | ||
+ | |||
+ | ===== To be Spec'd ===== | ||
+ | |||
+ | * Detail the parameters sent to each of the events. | ||
+ | * How are the plug-ins going to be distributed. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Feedback ===== | ||
+ | |||
+ | This is still in progress, but you are free to contribute ideas. | ||
+ | |||
+ | * (DGtlRift) I would say that in " | ||
+ | * plugin version - could be used by a plugin manager to query if there is an updated plugin available from the plugin' | ||
+ | * minimum mantis compatibility version - verify that this plugin will actually work with this version of mantis. | ||
+ | * (DGtlRift) I would also suggest that the " | ||
+ | * I'm also thinking that it may be easier to use a hash table to store the constants in # | ||
+ | * Perhaps XML would be better for having this info | ||
+ | * (deboutv) In my plugin manager, I have chosen to provide Mantis plugin in pkg format. This file is the result of a zip and a serialize of an array => gzcompress( serialize( array ), 9 ); The array contains the following fields: | ||
+ | < | ||
+ | $t_pkg[' | ||
+ | $t_pkg[' | ||
+ | // | ||
+ | $t_pkg[' | ||
+ | $t_pkg[' | ||
+ | $t_pkg[' | ||
+ | $t_pkg[' | ||
+ | </ | ||
+ | * (deboutv) Hacking Mantis with a plugin. We need to think about the security of the Mantis application and its data. Allowing plugins is dangerous because of the content of the plugin (it could pretend to be a BBCode interpreter but in reality it could be a BBCode interpreter and a spy). With a plugin (ie: code of third parties), you can read/write the SQL database, grant priviledges to the users... | ||
+ | * (DGtlRift) There should also be a description of how plugins themselves should generate events. | ||
+ | * (DGtlRift) Re: Distribution. | ||
+ | * The most simple way is to just have a list of tar.gz compressed archives of each plugin. | ||
+ | * The next option would be to offer the ability to install via the admin interface, where Mantis would check against a web list of available plugins and download (to the server) and install the plugin (requiring Mantis to have write privileges) to the plugins directory. | ||
+ | * Another option is to have all the plgins in RPM form - which would automate installation for the sysadmin. | ||
+ | * (DGtlRift) Should the plugins be globally " | ||
+ | |||
+ | ==== First implementation ==== | ||
+ | |||
+ | A first implementation has been written, you can find it [[http:// | ||
+ | |||
+ | === Respect === | ||
+ | |||
+ | * Ability to detect add-ons. | ||
+ | * Allow configuration of the add-ons. | ||
+ | |||
+ | === Does not respect === | ||
+ | |||
+ | * No install/ | ||
+ | * Check the requirements. | ||
+ | * Directory structure not respected: | ||
+ | < | ||
+ | mantis/ | ||
+ | admin/ | ||
+ | core/ | ||
+ | lang/ | ||
+ | plugins_page.php | ||
+ | plugins/ | ||
+ | plugin1/ | ||
+ | plugin2/ | ||
+ | plugin3/ | ||
+ | index.php | ||
+ | info.php | ||
+ | core/ | ||
+ | functions_api.php | ||
+ | lang/ | ||
+ | strings_english.txt | ||
+ | </ | ||
+ | |||
+ | === What the plugin manager does? === | ||
+ | |||
+ | * It is in charge to load the strings_*.txt file according to the current language | ||
+ | * It is in charge to allow configuration of the plugin according to the access_level. The configuration page is located into index.php | ||
+ | * It checks new release of the plugin (optional). |