Coding Convention
----------------

We are using the following coding convention

Graphically
----------------

The classes are structured like that.
texts prefixed by "##" are comments to explain the convention with an example. Do not use them in your code. 

<?php
## The header below is on every head of php file use current year instead of 2012. ##
/*
 ----------------------------------------------------------------------
 AlternC - Web Hosting System
 Copyright (C) 2000-2012 by the AlternC Development Team.
 https://alternc.org/
 ----------------------------------------------------------------------
 LICENSE

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License (GPL)
 as published by the Free Software Foundation; either version 2
 of the License, or (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 To read the license please visit http://www.gnu.org/copyleft/gpl.html
 ----------------------------------------------------------------------
 Purpose of file: Manage mailing-lists with Mailman
 ----------------------------------------------------------------------
*/
## Enter the purpose of this file up there ^^ ##

## the name of the class is the same as the file (m_dom, m_mailman...) ##
class m_mailman {


## 2 blank lines here and between each functions, give it some space ;) ##
## the following line of -- allow you to visually quickly find a function ##
## then the comment after it is using /** notation, so that phpdoc can build a self-made documentation of our classes ##
  /* ----------------------------------------------------------------- */
  /** ## here we put a full long description of the function's behavior, in english ##
   * ## this description may span multiple lines ##
   * @param $domain string ## each param has its @param line, followed by the param name ($domain) type (string) and description ##
   * @return array ## a @return line is added when the function returns anything, followed by the returned type and description ##
   */
  function enum_ml($domain = null, $order_by = array('domain', 'list')) {
## function which consist of more than one word are separated by _ ##
## private functions are prefixed by "private" and their name starts by "_" ##
    global $err,$db,$cuid;
## use the globals for $db (database mapper), $cuid (uid of current alternc's user) $err (error/log mapper) 
    $err->log("mailman","enum_ml");
## when calling an important function, log it that way ##
## when raising an error, use the following syntax ##
    $err->raise("classname",_("text in english"));
  }
}
/* at the end of a php-only file, we don't put a ?> */

?>

Syntax in code :
----------------

  function names starting by "hook_" are hooks called that way:

global $hooks;
$res=$hooks->invoke("hook_class_method_name",array($param1,$param2));

$params1 & 2 are sent as parameters to the hooked functions of each files.

the hook function name must have the CALLING class name after hook_ 
like hook_admin_del_member for a hook in "admin" class.

$res is an array with the returned data as values, for each function called in a class. 
The key in that array is the classname called.