<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/custom_functions.php,v 1.8 2005/03/05 06:27:06 wurley Exp $

/**
 * CUSTOM_FUCTIONS has been DEPRECIATED, please use the hooks functions now.
 * Let the phpLDAPadmin developers know if you REALLY need this - it will be removed
 * in future releases.
 *
 * custom_functions.php:
 *
 * This file is full of functions (callbacks really) that are
 * meant to be filled in by users of phpLDAPadmin (you). These functions
 * are called as the result of a phpLDAPadmin event, like adding
 * a new entry, deleting an entry, changing an attribute value, etc.
 * Consider this concept an attempt to provide something like SQL 
 * triggers for LDAP users.
 *
 * This can be very handy, for example, for system administrators
 * who want to execute custom code after a user is created or deleted.
 *
 * These functions generally have 2 parameters, $server_id and $dn:
 *
 * 1. $server_id.
 * The $server_id can be used to connect to the server using 
 * pla_ldap_connect( $server_id ) to fetch additional information about
 * the entry being deleted. It can also be used to call 
 * get_object_attrs( $server_id, $dn ) to fetch the entry's attributes.
 *
 * 2. $dn
 * The dn is provided so users can determine where in the LDAP tree
 * this entry resides and act accordingly. For example, if the DN
 * contains "ou=development", you may want to act differently than 
 * if it contains "ou=accounting".
 *
 * Types of callback functions:
 *
 * These callbacks generally fall into two categories: "pre" and "post",
 * "pre" callbacks run before an event has occurred and their return 
 * value (true or false) is used to decide whether to allow the event
 * to proceed. "post" callbacks run after an event has occurred and
 * their return value (void) is ignored.
 *
 * NOTE: These custom callbacks are NOT executed for LDIF imports.
 *
 * ALSO NOTE: These callbacks are responsible for printing out error
 * messages. The calling code will die silently without notifying
 * the user why. YOU are responsible for creating output here.
 *
 * TODO: This section outlines events that phpLDAPadmin does not yet
 *       support. This list includes:
 *       - ldap_mod_add (ie, adding a new value to a multi-valued attribute)
 *       - ldap_mod_del (ie, deleting a value from a multi-valued attribute
 *                           or deleting an attribute from an entry)
 *       - ldap_rename  (ie, renaming an entry's RDN)
 *
 * DONE: This section lists events that phpLDAPadmin *does* support. 
 *       This list includes:
 *       - ldap_add     (ie, creating new entries)
 *       - ldap_delete  (ie, removing entries)
 *       - ldap_modify  (ie, changing the value of an attribute, for both
 *                           multi- and single-valued attributes)
 * @deprecated
 * @see hooks.php
 * @package phpLDAPadmin
 */

/*
 * This function is executed before modifying an entry's
 * attribute. Unlike preAttrModify, this function's
 * return value is ignored. In addition to the standard 
 * $server_id and $dn paramaters, this function also 
 * gives you the attribute name ($attr_name), and the new 
 * value that the attribute will have ($new_value). $new_value
 * may be a string or an array of strings.
 */
function postAttrModify( $server_id, $dn, $attr_name, $new_value )
{
	// Fill me in
	//
	// A very simple (and lame) example:
	// if( 0 == strcasecmp( $attr_name, "userPassword" ) ) {
	//     mail( "user@example.com", "Password change notification", 
	//           "User '$dn' has changed their password." );
	// }
}

/*
 * This function is executed before modifying an entry's
 * attribute. If it returns true, the entry is modified.
 * If it returns false, the entry is not modified.
 * In addition to the standard $server_id and $dn params,
 * this function also gives you the attribute name ($attr_name)
 * and the new value that the attribute will have ($new_value).
 * $new_value may be a string or an array of strings.
 * @deprecated
 */
function preAttrModify( $server_id, $dn, $attr_name, $new_value )
{
	// Fill me in
	return true;
}

/*
 * This function is executed before adding an entry's
 * attribute. If it returns true, the entry is added.
 * If it returns false, the entry is not added.
 * In addition to the standard $server_id and $dn params,
 * this function also gives you the attribute name ($attr_name)
 * and the new value that the attribute will have ($new_value).
 * $new_value may be a string or an array of strings.
 * @deprecated
 */
function preAttrAdd( $server_id, $dn, $attr_name, $new_value )
{
	// Fill me in
	return true;
}

/*
 * This function is executed after an entry is created.
 * Unlike preEntryCreate(), this function's return 
 * value is ignored. This is very handy for executing
 * custom code after creating a user account. For example,
 * one may wish to create the user's home directory.
 * See the documentation for preEntryCreate() below for
 * the description of the $attrs parameter.
 * @deprecated
 */
function postEntryCreate( $server_id, $dn, $attrs )
{
	// Fill me in
	//
	// A very simple example:
	// if( preg_match( "/^uid=(\w+),/", $dn, $user_name ) ) {
	//     $user_name = $user_name[1];
	//     mkdir( "/home/$user_name" );
	// } else {
	//     // not a user account
	// }
}

/*
 * This function is executed before an entry is created.
 * If it returns true, the entry is created, if false is
 * returned, the entry is not created. This function has
 * the additional parameters, $attrs, which is an assoc-
 * iative array of attribute/vale pairs of the same form
 * expected by ldap_add(), example:
 *
 * Array (
 *  [objectClass] => Array (
 *     [0] => top
 *     [1] => person
 *     [2] => inetOrgPerson
 *  )
 *  [cn] => John
 *  [sn] => Doe
 *   ...
 * )
 *
 * @deprecated
 */
function preEntryCreate( $server_id, $dn, $attrs )
{
	// Fill me in
	return true;
}

/*
 * This function is executed before an entry is deleted.
 * If it returns true, the entry is deleted, if false
 * is returned, the entry is not deleted.
 * @deprecated
 */
function preEntryDelete( $server_id, $dn )
{
	// Fill me in
	return true;
}

/*
 * This function is executed after an entry is deleted.
 * Unlike preEntryDelete(), this function's return 
 * value is ignored.
 * @deprecated
 */
function postEntryDelete( $server_id, $dn )
{
	// Fill me in
}

/**
 * This function is called, after a new session is initilaized
 * @deprecated
 */
function postSessionInit()
{
	// Fill me in
}
?>
