Translations of this page?:

Development

If you want to contribute to DokuWiki and join the development you should read this page.

A developers guide with some pointers to help you get started with understanding the code is in progress.

Getting the Devel-Code

The current development code is available through the Darcs repository or as a daily snapshot. You can also browse the source or use the Darcs Webinterface.

The whole source code is well documented and an auto-generated API Reference is available:

  • For the develonly API Reference, click here. (This is built daily.)
  • For the stable API Reference, click here. (Not maintained by splitbrain.org.)

Communication

All development activity is coordinated through the mailinglist ( RSS feed) – if you are interested in changing DokuWiki's codebase you should join the list! Sometimes we discuss development decision live on IRC.

What to do

Well what you want to contribute is of course up to you – you should scratch your own itches first. If you need some ideas of what is missing from DokuWiki you should have a look at the bugtracker.

Please also have a look at help wanted, where I list things which could use some improvement and patches would be more than welcome.

Coding Style

I'm not very strict in how the code should be formatted but a few basic things should be attended to when adding code to DokuWiki.

Brackets and Indentations

You should indent your code by either 2 or 4 spaces to mark logical blocks. Please do not use tabs. The same number of spaces should be used through the whole file, so check how many spaces the existing code uses and use the same amount.

Opening brackets should start on the same line as the keyword, closing bracket should be aligned below the first letter of the starting keyword. Eg:

if ($foo == "bar"){
  call_bar();
}elseif($foo == "baz"){
  call_baz();
}else{
  call_other();
}

Lineendings

Lines should end with a single linefeed character (UNIX style). Please try to avoid trailing whitespace. Have a look at my .vimrc file on how to spot it easily in VIM.

Commenting

Each function and class should have a PHPDocumentor style comment, giving at least the function's purpose and its author. Parameter and return value descriptions are nice but only mandatory if they are not obvious. If you enhance an existing function just add another author line.

Example:

/**
 * Check for foo in bar
 *
 * Checks if there is a foo in bar
 *
 * @author   Joe Schmoe <joe@example.com>
 * @param    string $in your input
 * @returns  boolean    true if foo in bar
 *
 */
function is_foo($in){
...
}

These comments are used for the autogenerated API Docs.

PHP closing tags

You should omit PHP's closing tags (?>) in all files to avoid premature output. This may sound strange but is actually mentioned in the PHP manual:

Note: The closing tag of a PHP block at the end of a file is optional, and in some cases omitting it is helpful when using include() or require(), so unwanted whitespace will not occur at the end of files, and you will still be able to add headers to the response later. It is also handy if you use output buffering, and would not like to see added unwanted whitespace at the end of the parts generated by the included files.

Unit Tests

All new code additions should be accompanied by appropriate test cases as described in UnitTesting.

Sending Patches

Patches should be sent to the mailinglist. Patches created by darcs are preferred and much simpler to integrate. If darcs is not an option, you should create patches in unified diff format (diff -u) against the latest available daily snapshot.

Development Docs

Here is a list of documents which should help you to understand some of DokuWikis internals.

  • Directory Layout – What are all those directories and files?
  • functionslist – All functions in Dokuwiki
  • Parser – Overview on the parser and render system.
  • JavaScript – How is JavaScript integrated into DokuWiki's Userinterface
  • CSS – How stylesheets are handled
 
wiki/development.txt · Last modified: 2007/12/21 19:20 by andi
 
Imprint Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki
WikiForumIRCBugsTranslate