====== phpList Development ====== ===== Infrastructure ===== For the complete list of phpList development links, including repositories, documentation, and more, see the [[develop:infrastructure|development infrastructure]] page. See also the [[develop:developmentsetup|development environment setup]] guide. You can use [[Docker|Docker]] if you wish, to create a working phpList on your local system from source, for development purposes. ===== Coding Style ===== phpList uses [[codingstyle|coding standards]] to keep code uniform and consistent with best practice. Your contributions should adhere to these also. ===== Function index ====== phpList 3 includes many custom functions to make adding new features easier. These include functions for getting and setting message data, for example. A comprehensive list with documentation of these functions exists in the [[develop/functionndx|Function index]]. ===== Contributing ===== ==== Agreement required ==== Please sign the Contributor License Agreement (CLA) [[https://phplist.com/cla?action=login|via GitHub]] to make managing the legal aspects of the phpList codebase simpler. It is only required once and takes just a [[https://phplist.com/cla?action=login|few seconds]]. Currently it seems to fail on Firefox. If you get an error, please use Chrome instead. We will try to find the cause. Alternatively sign and send the [[https://phplist.com/cla|CLA]] to us by email or post. ===== Automated testing ===== phpList uses both Behat and phpUnit for automated testing. ==== Behat ==== Guidelines for running and writing user acceptance tests with Behat can be found in testing documentation of the [[https://github.com/phplist/phpList3|phpList 3 repository]]. These tests are automatically executed by [[https://travis-ci.org/phpList/phplist3|Travis]]. ==== phpUnit ==== phpUnit tests for phpList 4 use a custom configuration documented in the phpList 4 documentation folder. ===== Writing plugins ===== phpList includes a powerful plugin framework for extending application functionality. Most aspects of phpList's behaviour can be changed via a broad range of plugin hooks. See the comprehensive guide to [[develop:plugins |writing a plugin]]. A directory of existing plugins exists on the [[plugins:start|Plugins page]]. Unlike contributions to the phpList core applications, plugins can use a variety of different copyright licenses, so long as they are compatible with the license of phpList. ===== phpList in Docker ===== To facilitate development of phpList, core code, themes and plugins, you can now set up [[develop:docker|phpList in docker]] and work with your local code. ===== Release versioning ===== Upcoming releases are tracked on the [[https://github.com/phpList/phplist3|GitHub]]. Issues are assigned to 'target versions', which can be a fixed version number (e.g. 4.0.1) or a meta version (e.g. 'Next patch'). Hard numbers represent that the issue needs to be included in a specific release, whereas meta versions represent issues that would be 'nice to have' in the next release of a given type (e.g. patch, minor, or major).