2005-08-01 11:58:07 +00:00
< ? php
/*
$Id $
This code is part of LDAP Account Manager ( http :// www . sourceforge . net / projects / lam )
2006-03-03 17:30:35 +00:00
Copyright ( C ) 2004 - 2006 Roland Gruber
2005-08-01 11:58:07 +00:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License 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 .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
/**
* Manages Kolab user accounts .
*
* @ package modules
* @ author Roland Gruber
*/
/**
* Manages Kolab user accounts .
*
* @ package modules
*/
class kolabUser extends baseModule {
2006-08-13 12:58:19 +00:00
2005-08-01 11:58:07 +00:00
/** list of invitation policies */
2007-10-13 17:28:37 +00:00
private $invitationPolicies ;
2005-08-01 11:58:07 +00:00
/**
* Creates a new kolabUser object .
*
* @ param string $scope account type ( user , group , host )
*/
2007-12-28 16:08:56 +00:00
function __construct ( $scope ) {
2005-08-01 11:58:07 +00:00
// list of invitation policies
$this -> invitationPolicies = array (
'ACT_ALWAYS_ACCEPT' => _ ( 'Always accept' ),
'ACT_ALWAYS_REJECT' => _ ( 'Always reject' ),
'ACT_MANUAL' => _ ( 'Manual' ),
'ACT_REJECT_IF_CONFLICTS' => _ ( 'Reject if conflicts' ),
'ACT_MANUAL_IF_CONFLICTS' => _ ( 'Manual if conflicts' )
);
// call parent constructor
2007-12-28 16:08:56 +00:00
parent :: __construct ( $scope );
2005-08-01 11:58:07 +00:00
}
/**
* Returns meta data that is interpreted by parent class
*
* @ return array array with meta data
2008-02-03 14:28:28 +00:00
*
* @ see baseModule :: get_metaData ()
2005-08-01 11:58:07 +00:00
*/
function get_metaData () {
$return = array ();
2007-11-19 18:42:03 +00:00
// icon
$return [ 'icon' ] = 'kolab.png' ;
2005-08-01 11:58:07 +00:00
// manages host accounts
$return [ " account_types " ] = array ( " user " );
// alias name
$return [ " alias " ] = _ ( " Kolab " );
// module dependencies
$return [ 'dependencies' ] = array ( 'depends' => array ( 'inetOrgPerson' ), 'conflicts' => array ());
// LDAP filter
$return [ " ldap_filter " ] = array ( 'or' => " (objectClass=kolabInetOrgPerson) " );
2006-04-05 15:48:27 +00:00
// managed object classes
$return [ 'objectClasses' ] = array ( 'kolabInetOrgPerson' );
2006-05-13 08:55:31 +00:00
// managed attributes
$return [ 'attributes' ] = array ( 'c' , 'alias' , 'kolabHomeServer' , 'kolabHomeMTA' , 'kolabDelegate' ,
'cyrus-userquota' , 'kolabInvitationPolicy' , 'kolabFreeBusyFuture' , 'kolabDeleteflag' );
2005-08-01 11:58:07 +00:00
// profile options
$return [ 'profile_options' ] = array (
array (
2008-03-01 12:25:39 +00:00
array ( 'kind' => 'text' , 'text' => _ ( 'Mail server' ) . " : " ),
array ( 'kind' => 'input' , 'name' => 'kolab_homeServer' , 'type' => 'text' , 'size' => '30' , 'maxlength' => '255' ),
array ( 'kind' => 'help' , 'value' => 'homeServer' )),
2005-08-01 11:58:07 +00:00
array (
2008-03-01 12:25:39 +00:00
array ( 'kind' => 'text' , 'text' => _ ( 'Country' ) . " : " ),
array ( 'kind' => 'input' , 'name' => 'kolab_country' , 'type' => 'text' , 'size' => '30' , 'maxlength' => '255' ),
array ( 'kind' => 'help' , 'value' => 'country' )),
2005-08-01 11:58:07 +00:00
array (
2008-03-01 12:25:39 +00:00
array ( 'kind' => 'text' , 'text' => _ ( 'Free/Busy interval' ) . " : " ),
array ( 'kind' => 'input' , 'name' => 'kolab_freeBusy' , 'type' => 'text' , 'size' => '30' , 'maxlength' => '255' ),
array ( 'kind' => 'help' , 'value' => 'freeBusy' )),
2005-08-01 11:58:07 +00:00
array (
2008-03-01 12:25:39 +00:00
array ( 'kind' => 'text' , 'text' => _ ( 'Mail quota' ) . " : " ),
array ( 'kind' => 'input' , 'name' => 'kolab_quota' , 'type' => 'text' , 'size' => '30' , 'maxlength' => '255' ),
array ( 'kind' => 'help' , 'value' => 'quota' ))
2005-08-01 11:58:07 +00:00
);
// profile checks
$return [ 'profile_checks' ][ 'kolab_homeServer' ] = array (
'type' => 'ext_preg' ,
'regex' => 'DNSname' ,
'error_message' => $this -> messages [ 'homeServer' ][ 0 ]);
$return [ 'profile_checks' ][ 'kolab_country' ] = array (
'type' => 'ext_preg' ,
'regex' => 'country' ,
'error_message' => $this -> messages [ 'country' ][ 0 ]);
$return [ 'profile_checks' ][ 'kolab_freeBusy' ] = array (
'type' => 'ext_preg' ,
'regex' => 'digit' ,
'error_message' => $this -> messages [ 'freeBusy' ][ 0 ]);
$return [ 'profile_checks' ][ 'kolab_quota' ] = array (
'type' => 'ext_preg' ,
'regex' => 'digit' ,
'error_message' => $this -> messages [ 'quota' ][ 0 ]);
// profile mappings
$return [ 'profile_mappings' ] = array (
'kolab_homeServer' => 'kolabHomeServer' ,
'kolab_country' => 'c' ,
'kolab_freeBusy' => 'kolabFreeBusyFuture' ,
'kolab_quota' => 'cyrus-userquota'
);
2008-03-01 12:25:39 +00:00
// self service field settings
$return [ 'selfServiceFieldSettings' ] = array (
'kolabFreeBusyFuture' => _ ( 'Free/Busy interval' ),
'kolabDelegate' => _ ( 'Delegates' ),
2008-03-04 19:47:14 +00:00
'kolabInvitationPolicy' => _ ( 'Invitation policy' )
2008-03-01 12:25:39 +00:00
);
// self service configuration settings
$return [ 'selfServiceSettings' ] = array (
array (
array ( 'kind' => 'text' , 'text' => '<b>' . _ ( " Account suffix " ) . ': </b>' ),
array ( 'kind' => 'input' , 'type' => 'text' , 'name' => 'kolabUser_suffix' ),
array ( 'kind' => 'help' , 'value' => 'suffix' ))
);
2005-08-01 11:58:07 +00:00
// help Entries
$return [ 'help' ] = array (
2008-03-01 12:25:39 +00:00
'suffix' => array (
" Headline " => _ ( " Account suffix " ),
" Text " => _ ( " LDAP DN (e.g. dc=company,dc=com) of accounts. This is used to find possible delegation candidates. " )
),
2005-08-01 11:58:07 +00:00
'invPol' => array (
" Headline " => _ ( " Invitation policy " ),
" Text " => _ ( " For automatic invitation handling. " )
),
'invPolList' => array (
" Headline " => _ ( " Invitation policy list " ),
" Text " => _ ( " This is a comma separated list of invitation policies. " )
),
'delegate' => array (
" Headline " => _ ( " Delegates " ),
" Text " => _ ( " A user may define who is allowed to act on behalf of herself. This property is checked when using the Kolab smtp daemon (Postfix) to send emails. " )
),
'delegateList' => array (
" Headline " => _ ( " Delegates " ),
" Text " => _ ( " This is a comma separated list of delegates. " )
),
'alias' => array (
" Headline " => _ ( " EMail alias " ),
" Text " => _ ( " EMail alias for this account. " )
),
'aliasList' => array (
" Headline " => _ ( " EMail alias list " ),
" Text " => _ ( " This is a comma separated list of eMail aliases. " )
),
'country' => array (
" Headline " => _ ( " Country " ),
" Text " => _ ( " The country name of the user. " )
),
'homeServer' => array (
" Headline " => _ ( " Mailbox home server " ),
" Text " => _ ( " The name of the server where the mailbox is located. " )
),
'freeBusy' => array (
" Headline " => _ ( " Free/Busy interval " ),
" Text " => _ ( " This is the time limit (in days) for other users who want to check future appointments. If you leave this blank the default (60 days) will be set. " )
),
'quota' => array (
" Headline " => _ ( " Mail quota " ),
" Text " => _ ( " The Cyrus mail quota for users in MBytes, leave blank for unlimited space. " )
),
'deleteFlag' => array (
" Headline " => _ ( " Mark for deletion " ),
" Text " => _ ( " This will set a special flag on the account which tells Kolabd to remove it. Use this to cleanly delete Kolab accounts (e.g. this removes mail boxes). " )
));
// upload fields
$return [ 'upload_columns' ] = array (
array (
'name' => 'kolabUser_invPol' ,
'description' => _ ( 'Invitation policy' ),
'help' => 'invPolList' ,
'example' => 'user@domain:ACT_ALWAYS_ACCEPT,user2@domain:ACT_MANUAL'
),
array (
'name' => 'kolabUser_country' ,
'description' => _ ( 'Country' ),
'help' => 'country' ,
'example' => _ ( 'Germany' )
),
array (
'name' => 'kolabUser_homeServer' ,
'description' => _ ( 'Mailbox home server' ),
'help' => 'homeServer' ,
'example' => 'localhost' ,
'required' => true
),
array (
'name' => 'kolabUser_aliases' ,
'description' => _ ( 'EMail aliases' ),
'help' => 'aliasList' ,
'example' => 'user@domain,user2@domain'
),
array (
'name' => 'kolabUser_delegates' ,
'description' => _ ( 'Delegates' ),
'help' => 'delegateList' ,
'example' => 'user@domain,user2@domain'
),
array (
'name' => 'kolabUser_freeBusy' ,
'description' => _ ( 'Free/Busy interval' ),
'help' => 'freeBusy' ,
'example' => '60'
),
array (
'name' => 'kolabUser_quota' ,
'description' => _ ( 'Mail quota' ),
'help' => 'quota' ,
'example' => '300'
)
);
// available PDF fields
$return [ 'PDF_fields' ] = array (
'invPol' , 'country' , 'homeServer' , 'aliases' , 'delegate' , 'freeBusy' , 'quota'
);
return $return ;
}
/**
* This function fills the error message array with messages
*/
function load_Messages () {
$this -> messages [ 'invPol' ][ 0 ] = array ( 'ERROR' , _ ( 'Target of invitation policy is invalid!' )); // third array value is set dynamically
$this -> messages [ 'invPol' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' kolabUser_invPol' , _ ( 'Policy list has invalid format!' ));
$this -> messages [ 'alias' ][ 0 ] = array ( 'ERROR' , _ ( 'EMail alias is invalid!' )); // third array value is set dynamically
$this -> messages [ 'alias' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' kolabUser_aliases' , _ ( 'EMail alias list has invalid format!' ));
$this -> messages [ 'country' ][ 0 ] = array ( 'ERROR' , _ ( 'Country name is invalid!' )); // third array value is set dynamically
$this -> messages [ 'country' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' kolabUser_country' , _ ( 'Country name is invalid!' ));
$this -> messages [ 'homeServer' ][ 0 ] = array ( 'ERROR' , _ ( 'Mailbox home server name is invalid!' )); // third array value is set dynamically
$this -> messages [ 'homeServer' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' kolabUser_homeServer' , _ ( 'Mailbox home server name is invalid!' ));
$this -> messages [ 'homeServer' ][ 2 ] = array ( 'ERROR' , _ ( 'Mailbox home server name is empty!' ), '' );
$this -> messages [ 'delegate' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' kolabUser_delegate' , _ ( 'Delegates has invalid format!' ));
$this -> messages [ 'freeBusy' ][ 0 ] = array ( 'ERROR' , _ ( 'Free/Busy interval must be a number!' )); // third array value is set dynamically
$this -> messages [ 'freeBusy' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' kolabUser_freeBusy' , _ ( 'Free/Busy interval must be a number!' ));
$this -> messages [ 'quota' ][ 0 ] = array ( 'ERROR' , _ ( 'Mail quota must be a number!' )); // third array value is set dynamically
$this -> messages [ 'quota' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' kolabUser_quota' , _ ( 'Mail quota must be a number!' ));
}
2006-08-13 12:58:19 +00:00
2005-08-01 11:58:07 +00:00
/**
* Returns a list of modifications which have to be made to the LDAP account .
*
* @ return array list of modifications
* < br > This function returns an array with 3 entries :
* < br > array ( DN1 ( 'add' => array ( $attr ), 'remove' => array ( $attr ), 'modify' => array ( $attr )), DN2 .... )
* < br > DN is the DN to change . It may be possible to change several DNs ( e . g . create a new user and add him to some groups via attribute memberUid )
* < br > " add " are attributes which have to be added to LDAP entry
* < br > " remove " are attributes which have to be removed from LDAP entry
* < br > " modify " are attributes which have to been modified in LDAP entry
*/
function save_attributes () {
// add object class if needed
if ( ! isset ( $this -> attributes [ 'objectClass' ]) || ! in_array ( 'kolabInetOrgPerson' , $this -> attributes [ 'objectClass' ])) {
$this -> attributes [ 'objectClass' ][] = 'kolabInetOrgPerson' ;
}
2006-02-01 19:10:51 +00:00
return parent :: save_attributes ();
2005-08-01 11:58:07 +00:00
}
/**
2007-11-03 14:17:19 +00:00
* Returns the HTML meta data for the main account page .
*
* @ return array HTML meta data
*/
2006-08-13 12:58:19 +00:00
function display_html_attributes () {
2007-10-10 19:04:39 +00:00
$attrsI = $this -> getAccountContainer () -> getAccountModule ( 'inetOrgPerson' ) -> getAttributes ();
2007-10-03 18:02:10 +00:00
if ( $this -> getAccountContainer () -> isNewAccount ) {
2007-10-05 17:35:16 +00:00
if ( $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) != null ) {
2007-10-10 19:04:39 +00:00
$attrsP = $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> getAttributes ();
if ( ! $attrsP [ 'userPassword' ][ 0 ]) {
2007-10-04 16:45:05 +00:00
StatusMessage ( 'ERROR' , _ ( " Please enter a user password on this page: %s " ), '' , array ( $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> get_alias ()));
2006-06-28 15:10:02 +00:00
}
2005-08-16 12:06:13 +00:00
}
2007-10-05 17:35:16 +00:00
elseif ( $this -> getAccountContainer () -> getAccountModule ( 'inetOrgPerson' ) != null ) {
2007-10-10 19:04:39 +00:00
if ( ! $attrsI [ 'userPassword' ][ 0 ]) {
2007-10-04 16:45:05 +00:00
StatusMessage ( 'ERROR' , _ ( " Please enter a user password on this page: %s " ), '' , array ( $this -> getAccountContainer () -> getAccountModule ( 'inetOrgPerson' ) -> get_alias ()));
2006-06-28 15:10:02 +00:00
}
2005-08-16 12:06:13 +00:00
}
2005-09-04 17:45:30 +00:00
}
2007-10-10 19:04:39 +00:00
if ( ! $attrsI [ 'mail' ][ 0 ]) {
2007-10-04 16:45:05 +00:00
StatusMessage ( 'ERROR' , _ ( " Please enter an email address on this page: %s " ), '' , array ( $this -> getAccountContainer () -> getAccountModule ( 'inetOrgPerson' ) -> get_alias ()));
2005-08-16 12:06:13 +00:00
}
2005-08-01 11:58:07 +00:00
$return = array ();
// check if account is marked for deletion
2005-08-04 15:07:25 +00:00
if ( isset ( $this -> attributes [ 'kolabDeleteflag' ])) {
2005-08-01 11:58:07 +00:00
$return [] = array (
2008-03-04 19:47:14 +00:00
array ( 'kind' => 'text' , 'text' => _ ( 'This account is marked for deletion.' )));
2005-08-01 11:58:07 +00:00
return $return ;
}
// country
$return [] = array (
2008-03-04 19:47:14 +00:00
array ( 'kind' => 'text' , 'text' => _ ( 'Country' )),
array ( 'kind' => 'input' , 'name' => 'country' , 'type' => 'text' , 'value' => $this -> attributes [ 'c' ][ 0 ]),
array ( 'kind' => 'help' , 'value' => 'country' ));
2005-08-01 11:58:07 +00:00
// mailbox server
if ( ! isset ( $this -> orig [ 'kolabHomeServer' ][ 0 ])) { // value currently not set
$return [] = array (
2008-03-04 19:47:14 +00:00
array ( 'kind' => 'text' , 'text' => _ ( 'Mailbox home server' ) . " * " ),
array ( 'kind' => 'input' , 'name' => 'homeServer' , 'type' => 'text' , 'value' => $this -> attributes [ 'kolabHomeServer' ][ 0 ]),
array ( 'kind' => 'help' , 'value' => 'homeServer' ));
2005-08-01 11:58:07 +00:00
}
else { // input is unchangable when set
$return [] = array (
2008-03-04 19:47:14 +00:00
array ( 'kind' => 'text' , 'text' => _ ( 'Mailbox home server' )),
array ( 'kind' => 'text' , 'text' => $this -> orig [ 'kolabHomeServer' ][ 0 ]),
array ( 'kind' => 'help' , 'value' => 'homeServer' ));
2005-08-01 11:58:07 +00:00
}
// Cyrus mail quota
$return [] = array (
2008-03-04 19:47:14 +00:00
array ( 'kind' => 'text' , 'text' => _ ( 'Mail quota' )),
array ( 'kind' => 'input' , 'name' => 'quota' , 'type' => 'text' , 'value' => $this -> attributes [ 'cyrus-userquota' ][ 0 ]),
array ( 'kind' => 'help' , 'value' => 'quota' ));
2005-08-01 11:58:07 +00:00
// free/busy future
$return [] = array (
2008-03-04 19:47:14 +00:00
array ( 'kind' => 'text' , 'text' => _ ( 'Free/Busy interval' )),
array ( 'kind' => 'input' , 'name' => 'freeBusy' , 'type' => 'text' , 'value' => $this -> attributes [ 'kolabFreeBusyFuture' ][ 0 ]),
array ( 'kind' => 'help' , 'value' => 'freeBusy' ));
2005-08-01 11:58:07 +00:00
// invitation policies
$returnPol = array ();
// default invitation policy
$defaultInvPol = $this -> invitationPolicies [ 'ACT_MANUAL' ];
for ( $i = 0 ; $i < sizeof ( $this -> attributes [ 'kolabInvitationPolicy' ]); $i ++ ) {
$parts = split ( " : " , $this -> attributes [ 'kolabInvitationPolicy' ][ $i ]);
if ( sizeof ( $parts ) == 1 ) {
$defaultInvPol = $this -> invitationPolicies [ $this -> attributes [ 'kolabInvitationPolicy' ][ $i ]];
unset ( $this -> attributes [ 'kolabInvitationPolicy' ][ $i ]);
$this -> attributes [ 'kolabInvitationPolicy' ] = array_values ( $this -> attributes [ 'kolabInvitationPolicy' ]);
break ;
}
}
$returnPol [] = array (
2008-03-04 19:47:14 +00:00
array ( 'kind' => 'text' , 'text' => _ ( 'Anyone' )),
array ( 'kind' => 'select' , 'name' => 'defaultInvPol' , 'options' => array_values ( $this -> invitationPolicies ), 'options_selected' => $defaultInvPol ),
array ( 'kind' => 'help' , 'value' => 'invPol' ));
2005-08-01 11:58:07 +00:00
// other invitation policies
for ( $i = 0 ; $i < sizeof ( $this -> attributes [ 'kolabInvitationPolicy' ]); $i ++ ) {
$parts = split ( " : " , $this -> attributes [ 'kolabInvitationPolicy' ][ $i ]);
if ( sizeof ( $parts ) == 2 ) {
$returnPol [] = array (
2008-03-04 19:47:14 +00:00
array ( 'kind' => 'input' , 'name' => 'invPol1' . $i , 'type' => 'text' , 'value' => $parts [ 0 ]),
array ( 'kind' => 'select' , 'name' => 'invPol2' . $i , 'options' => array_values ( $this -> invitationPolicies ), 'options_selected' => $this -> invitationPolicies [ $parts [ 1 ]]),
array ( 'kind' => 'input' , 'type' => 'submit' , 'name' => 'delInvPol' . $i , 'value' => _ ( " Remove " )),
array ( 'kind' => 'help' , 'value' => 'invPol' ));
2005-08-01 11:58:07 +00:00
}
}
// input box for new invitation policy
$returnPol [] = array (
2008-03-04 19:47:14 +00:00
array ( 'kind' => 'input' , 'name' => 'invPol1' , 'type' => 'text' , 'value' => '' ),
array ( 'kind' => 'select' , 'name' => 'invPol2' , 'options' => array_values ( $this -> invitationPolicies )),
array ( 'kind' => 'input' , 'type' => 'submit' , 'name' => 'addInvPol' , 'value' => _ ( " Add " )),
array ( 'kind' => 'help' , 'value' => 'invPol' ));
2005-08-01 11:58:07 +00:00
$returnPol = array (
array ( 'kind' => 'fieldset' , 'legend' => _ ( 'Invitation policy' ), 'value' => $returnPol , 'td' => array ( 'colspan' => 3 ))
);
$return [] = $returnPol ;
// mail aliases
$returnAliases = array ();
for ( $i = 0 ; $i < sizeof ( $this -> attributes [ 'alias' ]); $i ++ ) {
$returnAliases [] = array (
2008-03-04 19:47:14 +00:00
array ( 'kind' => 'input' , 'name' => 'alias' . $i , 'type' => 'text' , 'value' => $this -> attributes [ 'alias' ][ $i ]),
array ( 'kind' => 'input' , 'type' => 'submit' , 'name' => 'delAlias' . $i , 'value' => _ ( " Remove " )),
array ( 'kind' => 'help' , 'value' => 'alias' ));
2005-08-01 11:58:07 +00:00
}
// input box for new mail alias
$returnAliases [] = array (
2008-03-04 19:47:14 +00:00
array ( 'kind' => 'input' , 'name' => 'alias' , 'type' => 'text' , 'value' => '' ),
array ( 'kind' => 'input' , 'type' => 'submit' , 'name' => 'addAlias' , 'value' => _ ( " Add " )),
array ( 'kind' => 'help' , 'value' => 'alias' ));
2005-08-01 11:58:07 +00:00
$returnAliases = array (
array ( 'kind' => 'fieldset' , 'legend' => _ ( 'EMail aliases' ), 'value' => $returnAliases , 'td' => array ( 'colspan' => 3 ))
);
$return [] = $returnAliases ;
// delegates
$delegates = array ();
$delegatesTemp = $_SESSION [ 'cache' ] -> get_cache ( 'mail' , 'inetOrgPerson' , 'user' );
if ( is_array ( $delegatesTemp )) {
$DNs = array_keys ( $delegatesTemp );
foreach ( $DNs as $DN ) {
$delegates [] = $delegatesTemp [ $DN ][ 0 ];
}
sort ( $delegates );
}
$returnDelegates = array ();
for ( $i = 0 ; $i < sizeof ( $this -> attributes [ 'kolabDelegate' ]); $i ++ ) {
$returnDelegates [] = array (
2008-03-01 12:25:39 +00:00
array ( 'kind' => 'select' , 'name' => 'delegate' . $i , 'options' => $delegates , 'options_selected' => array ( $this -> attributes [ 'kolabDelegate' ][ $i ])),
array ( 'kind' => 'input' , 'type' => 'submit' , 'name' => 'delDelegate' . $i , 'value' => _ ( " Remove " )),
array ( 'kind' => 'help' , 'value' => 'delegate' ));
2005-08-01 11:58:07 +00:00
}
// input box for new delegate
$returnDelegates [] = array (
2008-03-01 12:25:39 +00:00
array ( 'kind' => 'select' , 'name' => 'delegate' , 'options' => $delegates ),
array ( 'kind' => 'input' , 'type' => 'submit' , 'name' => 'addDelegate' , 'value' => _ ( " Add " )),
array ( 'kind' => 'help' , 'value' => 'delegate' ));
2005-08-01 11:58:07 +00:00
$returnDelegates = array (
array ( 'kind' => 'fieldset' , 'legend' => _ ( 'Delegates' ), 'value' => $returnDelegates , 'td' => array ( 'colspan' => 3 ))
);
$return [] = $returnDelegates ;
// delete flag
2007-10-03 18:02:10 +00:00
if ( ! $this -> getAccountContainer () -> isNewAccount ) {
2005-08-01 11:58:07 +00:00
$returnDelete = array (
2005-09-01 15:20:15 +00:00
0 => array ( 'kind' => 'input' , 'type' => 'submit' , 'value' => _ ( 'Mark account for deletion' ), 'name' => 'form_subpage_kolabUser_deleteUser_open' ),
2005-08-01 11:58:07 +00:00
1 => array ( 'kind' => 'help' , 'value' => 'deleteFlag' ));
$return [] = array (
array ( 'kind' => 'fieldset' , 'legend' => _ ( 'Delete Kolab account' ), 'value' => array ( $returnDelete ), 'td' => array ( 'colspan' => 3 ))
);
}
return $return ;
}
/**
2005-09-07 12:58:34 +00:00
* Processes user input of the primary module page .
* It checks if all input values are correct and updates the associated LDAP attributes .
2005-08-01 11:58:07 +00:00
*
2005-09-07 12:58:34 +00:00
* @ return array list of info / error messages
2005-08-01 11:58:07 +00:00
*/
2006-08-13 12:58:19 +00:00
function process_attributes () {
2006-05-16 15:38:55 +00:00
$errors = array ();
2006-08-13 12:58:19 +00:00
if ( $_POST [ 'form_subpage_kolabUser_deleteUser_open' ]) return array ();
2005-08-01 11:58:07 +00:00
$this -> attributes [ 'kolabInvitationPolicy' ] = array ();
// country
2006-08-13 12:58:19 +00:00
if ( isset ( $_POST [ 'country' ])) {
if (( $_POST [ 'country' ] == " " ) || get_preg ( $_POST [ 'country' ], 'country' )) {
$this -> attributes [ 'c' ][ 0 ] = $_POST [ 'country' ];
2005-08-01 11:58:07 +00:00
}
else {
$message = $this -> messages [ 'country' ][ 0 ];
2006-08-13 12:58:19 +00:00
$message [] = $_POST [ 'country' ];
2006-08-16 17:42:35 +00:00
$errors [] = $message ;
2005-08-01 11:58:07 +00:00
}
}
// mailbox server
2006-08-13 12:58:19 +00:00
if ( isset ( $_POST [ 'homeServer' ])) {
if ( $_POST [ 'homeServer' ] == " " ) {
2006-08-16 17:42:35 +00:00
$errors [] = $this -> messages [ 'homeServer' ][ 2 ];
2005-08-01 11:58:07 +00:00
}
2006-08-13 12:58:19 +00:00
elseif ( get_preg ( $_POST [ 'homeServer' ], 'DNSname' )) {
$this -> attributes [ 'kolabHomeServer' ][ 0 ] = $_POST [ 'homeServer' ];
2005-08-01 11:58:07 +00:00
}
else {
$message = $this -> messages [ 'homeServer' ][ 0 ];
2006-08-13 12:58:19 +00:00
$message [] = $_POST [ 'homeServer' ];
2006-08-16 17:42:35 +00:00
$errors [] = $message ;
2005-08-01 11:58:07 +00:00
}
}
// check old invitation policies
$policies = array_flip ( $this -> invitationPolicies );
$targets = array ();
$i = 0 ;
2006-08-13 12:58:19 +00:00
while ( isset ( $_POST [ 'invPol1' . $i ])) {
if ( isset ( $_POST [ 'delInvPol' . $i ])) {
2005-08-01 11:58:07 +00:00
$i ++ ;
continue ;
}
2006-08-13 12:58:19 +00:00
if ( isset ( $_POST [ 'invPol2' . $i ]) && ( $_POST [ 'invPol1' . $i ] != " " ) && ! in_array ( $_POST [ 'invPol1' . $i ], $targets )) {
$targets [] = $_POST [ 'invPol1' . $i ];
2005-08-01 11:58:07 +00:00
// check invitation policy
2006-08-13 12:58:19 +00:00
if ( ! get_preg ( $_POST [ 'invPol1' . $i ], 'email' )) {
2005-08-01 11:58:07 +00:00
$message = $this -> messages [ 'invPol' ][ 0 ];
2006-08-13 12:58:19 +00:00
$message [] = $_POST [ 'invPol1' . $i ];
2006-08-16 17:42:35 +00:00
$errors [] = $message ;
2005-08-01 11:58:07 +00:00
}
else {
2006-08-13 12:58:19 +00:00
$this -> attributes [ 'kolabInvitationPolicy' ][] = $_POST [ 'invPol1' . $i ] . ':' . $policies [ $_POST [ 'invPol2' . $i ]];
2005-08-01 11:58:07 +00:00
}
}
$i ++ ;
}
// check new invitation policy
2006-08-13 12:58:19 +00:00
if ( isset ( $_POST [ 'invPol1' ]) && ( $_POST [ 'invPol1' ] != " " ) && ! in_array ( $_POST [ 'invPol1' ], $targets )) {
2005-08-01 11:58:07 +00:00
// check new invitation policy
2006-08-13 12:58:19 +00:00
if ( ! get_preg ( $_POST [ 'invPol1' ], 'email' )) {
2005-08-01 11:58:07 +00:00
$message = $this -> messages [ 'invPol' ][ 0 ];
2006-08-13 12:58:19 +00:00
$message [] = $_POST [ 'invPol1' ];
2006-08-16 17:42:35 +00:00
$errors [] = $message ;
2005-08-01 11:58:07 +00:00
}
else {
2006-08-13 12:58:19 +00:00
$this -> attributes [ 'kolabInvitationPolicy' ][] = $_POST [ 'invPol1' ] . ':' . $policies [ $_POST [ 'invPol2' ]];
2005-08-01 11:58:07 +00:00
}
}
// default invitation policy
2006-08-13 12:58:19 +00:00
if ( isset ( $_POST [ 'defaultInvPol' ]) && ( $_POST [ 'defaultInvPol' ] != " " )) {
$this -> attributes [ 'kolabInvitationPolicy' ][] = $policies [ $_POST [ 'defaultInvPol' ]];
2005-08-01 11:58:07 +00:00
}
// check old mail aliases
$this -> attributes [ 'alias' ] = array ();
$i = 0 ;
2006-08-13 12:58:19 +00:00
while ( isset ( $_POST [ 'alias' . $i ])) {
if ( isset ( $_POST [ 'delAlias' . $i ])) {
2005-08-01 11:58:07 +00:00
$i ++ ;
continue ;
}
2006-08-13 12:58:19 +00:00
if ( isset ( $_POST [ 'alias' . $i ]) && ( $_POST [ 'alias' . $i ] != " " ) && ! in_array ( $_POST [ 'alias' . $i ], $this -> attributes [ 'alias' ])) {
2005-08-01 11:58:07 +00:00
// check mail alias
2006-08-13 12:58:19 +00:00
if ( ! get_preg ( $_POST [ 'alias' . $i ], 'email' )) {
2005-08-01 11:58:07 +00:00
$message = $this -> messages [ 'alias' ][ 0 ];
2006-08-13 12:58:19 +00:00
$message [] = $_POST [ 'alias' . $i ];
2006-08-16 17:42:35 +00:00
$errors [] = $message ;
2005-08-01 11:58:07 +00:00
}
2006-08-13 12:58:19 +00:00
$this -> attributes [ 'alias' ][] = $_POST [ 'alias' . $i ];
2005-08-01 11:58:07 +00:00
}
$i ++ ;
}
// check new mail alias
2006-08-13 12:58:19 +00:00
if ( isset ( $_POST [ 'alias' ]) && ( $_POST [ 'alias' ] != " " )) {
2005-08-01 11:58:07 +00:00
// check new mail alias
2006-08-13 12:58:19 +00:00
if ( ! get_preg ( $_POST [ 'alias' ], 'email' )) {
2005-08-01 11:58:07 +00:00
$message = $this -> messages [ 'alias' ][ 0 ];
2006-08-13 12:58:19 +00:00
$message [] = $_POST [ 'alias' ];
2006-08-16 17:42:35 +00:00
$errors [] = $message ;
2005-08-01 11:58:07 +00:00
}
else {
2006-08-13 12:58:19 +00:00
$this -> attributes [ 'alias' ][] = $_POST [ 'alias' ];
2005-08-01 11:58:07 +00:00
}
}
$this -> attributes [ 'alias' ] = array_unique ( $this -> attributes [ 'alias' ]);
// check old delegates
$this -> attributes [ 'kolabDelegate' ] = array ();
$i = 0 ;
2006-08-13 12:58:19 +00:00
while ( isset ( $_POST [ 'delegate' . $i ])) {
if ( isset ( $_POST [ 'delDelegate' . $i ])) {
2005-08-01 11:58:07 +00:00
$i ++ ;
continue ;
}
2006-08-13 12:58:19 +00:00
$this -> attributes [ 'kolabDelegate' ][] = $_POST [ 'delegate' . $i ];
2005-08-01 11:58:07 +00:00
$i ++ ;
}
// check new delegate
2006-08-13 12:58:19 +00:00
if ( isset ( $_POST [ 'addDelegate' ]) && ( $_POST [ 'delegate' ] != " " )) {
$this -> attributes [ 'kolabDelegate' ][] = $_POST [ 'delegate' ];
2005-08-01 11:58:07 +00:00
}
$this -> attributes [ 'kolabDelegate' ] = array_unique ( $this -> attributes [ 'kolabDelegate' ]);
// free/busy future
2006-08-13 12:58:19 +00:00
if ( isset ( $_POST [ 'freeBusy' ])) {
if (( $_POST [ 'freeBusy' ] == " " ) || get_preg ( $_POST [ 'freeBusy' ], 'digit' )) {
$this -> attributes [ 'kolabFreeBusyFuture' ][ 0 ] = $_POST [ 'freeBusy' ];
2005-08-01 11:58:07 +00:00
}
else {
$message = $this -> messages [ 'freeBusy' ][ 0 ];
2006-08-13 12:58:19 +00:00
$message [] = $_POST [ 'freeBusy' ];
2006-08-16 17:42:35 +00:00
$errors [] = $message ;
2005-08-01 11:58:07 +00:00
}
}
// Cyrus mail quota
2006-08-13 12:58:19 +00:00
if ( isset ( $_POST [ 'quota' ])) {
if (( $_POST [ 'quota' ] == " " ) || get_preg ( $_POST [ 'quota' ], 'digit' )) {
$this -> attributes [ 'cyrus-userquota' ][ 0 ] = $_POST [ 'quota' ];
2005-08-01 11:58:07 +00:00
}
else {
$message = $this -> messages [ 'quota' ][ 0 ];
2006-08-13 12:58:19 +00:00
$message [] = $_POST [ 'quota' ];
2006-08-16 17:42:35 +00:00
$errors [] = $message ;
2005-08-01 11:58:07 +00:00
}
}
2006-05-16 15:38:55 +00:00
return $errors ;
2005-08-01 11:58:07 +00:00
}
/**
* This function will create the meta HTML code to show a page to delete accounts .
*/
2006-08-13 12:58:19 +00:00
function display_html_deleteUser () {
2005-08-01 11:58:07 +00:00
$return = array ();
$return [] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Do you really want to mark this account for deletion?' ), 'td' => array ( 'colspan' => 2 )));
$return [] = array (
0 => array ( 'kind' => 'text' , 'text' => ' ' , 'td' => array ( 'colspan' => 2 )));
$return [] = array (
2005-09-01 15:20:15 +00:00
0 => array ( 'kind' => 'input' , 'type' => 'submit' , 'value' => _ ( 'Mark account for deletion' ), 'name' => 'form_subpage_kolabUser_attributes_confirm' ),
1 => array ( 'kind' => 'input' , 'type' => 'submit' , 'value' => _ ( 'Cancel' ), 'name' => 'form_subpage_kolabUser_attributes_cancel' ));
2005-08-01 11:58:07 +00:00
return $return ;
}
2006-08-13 12:58:19 +00:00
2005-08-01 11:58:07 +00:00
/**
* Write variables into object and do some regex checks
*/
2006-08-13 12:58:19 +00:00
function process_deleteUser () {
if ( $_POST [ 'form_subpage_kolabUser_attributes_confirm' ]) {
2005-08-01 11:58:07 +00:00
// set delete flag
$this -> attributes [ 'kolabDeleteflag' ][ 0 ] = $this -> attributes [ 'kolabHomeServer' ][ 0 ];
}
}
/**
* This function returns true if all needed settings are done .
2005-08-16 12:06:13 +00:00
*
* @ return true , if account can be saved
2005-08-01 11:58:07 +00:00
*/
function module_complete () {
2007-10-10 19:04:39 +00:00
$attrsI = $this -> getAccountContainer () -> getAccountModule ( 'inetOrgPerson' ) -> getAttributes ();
$attrsP = $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> getAttributes ();
if ( ! $attrsI [ 'mail' ][ 0 ]) return false ;
2007-10-03 18:02:10 +00:00
if ( $this -> getAccountContainer () -> isNewAccount ) {
2007-10-05 17:35:16 +00:00
if ( $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) != null ) {
2007-10-10 19:04:39 +00:00
if ( ! $attrsP [ 'userPassword' ][ 0 ]) return false ;
2006-06-28 15:10:02 +00:00
}
2007-10-05 17:35:16 +00:00
elseif ( $this -> getAccountContainer () -> getAccountModule ( 'inetOrgPerson' ) != null ) {
2007-10-10 19:04:39 +00:00
if ( ! $attrsI [ 'userPassword' ][ 0 ]) return false ;
2006-06-28 15:10:02 +00:00
}
2005-08-01 11:58:07 +00:00
}
2006-05-16 15:38:55 +00:00
return true ;
2005-08-01 11:58:07 +00:00
}
2006-08-13 12:58:19 +00:00
2005-08-01 11:58:07 +00:00
/**
* In this function the LDAP account is built up .
*
* @ param array $rawAccounts list of hash arrays ( name => value ) from user input
* @ param array $partialAccounts list of hash arrays ( name => value ) which are later added to LDAP
* @ param array $ids list of IDs for column position ( e . g . " posixAccount_uid " => 5 )
* @ return array list of error messages if any
*/
function build_uploadAccounts ( $rawAccounts , $ids , & $partialAccounts ) {
$messages = array ();
for ( $i = 0 ; $i < sizeof ( $rawAccounts ); $i ++ ) {
// add object class
if ( ! in_array ( " kolabInetOrgPerson " , $partialAccounts [ $i ][ 'objectClass' ])) $partialAccounts [ $i ][ 'objectClass' ][] = " kolabInetOrgPerson " ;
// country
if ( $rawAccounts [ $i ][ $ids [ 'kolabUser_country' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'kolabUser_country' ]], 'country' )) {
$partialAccounts [ $i ][ 'c' ] = $rawAccounts [ $i ][ $ids [ 'kolabUser_country' ]];
}
else {
$errMsg = $this -> messages [ 'country' ][ 1 ];
array_push ( $errMsg , array ( $i ));
2006-05-16 15:43:00 +00:00
$messages [] = $errMsg ;
2005-08-01 11:58:07 +00:00
}
}
// mailbox server
if ( $rawAccounts [ $i ][ $ids [ 'kolabUser_homeServer' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'kolabUser_homeServer' ]], 'DNSname' )) {
$partialAccounts [ $i ][ 'kolabHomeServer' ] = $rawAccounts [ $i ][ $ids [ 'kolabUser_homeServer' ]];
}
else {
$errMsg = $this -> messages [ 'homeServer' ][ 1 ];
array_push ( $errMsg , array ( $i ));
2006-05-16 15:43:00 +00:00
$messages [] = $errMsg ;
2005-08-01 11:58:07 +00:00
}
}
// add invitation policies
if ( $rawAccounts [ $i ][ $ids [ 'kolabUser_invPol' ]] != " " ) {
$pols = explode ( ',' , $rawAccounts [ $i ][ $ids [ 'kolabUser_invPol' ]]);
// check format
$policies = array_keys ( $this -> invitationPolicies );
$defaultFound = false ;
for ( $p = 0 ; $p < sizeof ( $pols ); $p ++ ) {
$parts = split ( " : " , $pols [ $p ]);
// default policy
if ( sizeof ( $parts ) == 1 ) {
if ( ! $defaultFound && get_preg ( $parts [ 0 ], 'email' )) {
$partialAccounts [ $i ][ 'kolabInvitationPolicy' ][] = $parts [ 0 ];
}
else {
$errMsg = $this -> messages [ 'invPol' ][ 1 ];
array_push ( $errMsg , array ( $i ));
$messages [] = $errMsg ;
}
$defaultFound = true ;
}
// additional policies
elseif ( sizeof ( $parts ) == 2 ) {
if ( get_preg ( $parts [ 0 ], 'email' ) && in_array ( $parts [ 1 ], $policies )) {
$partialAccounts [ $i ][ 'kolabInvitationPolicy' ][] = $pols [ $p ];
}
else {
$errMsg = $this -> messages [ 'invPol' ][ 1 ];
array_push ( $errMsg , array ( $i ));
$messages [] = $errMsg ;
}
}
// invalid format
else {
$errMsg = $this -> messages [ 'invPol' ][ 1 ];
array_push ( $errMsg , array ( $i ));
$messages [] = $errMsg ;
}
}
}
// add mail aliases
if ( $rawAccounts [ $i ][ $ids [ 'kolabUser_aliases' ]] != " " ) {
$aliases = explode ( ',' , $rawAccounts [ $i ][ $ids [ 'kolabUser_aliases' ]]);
// check format
for ( $a = 0 ; $a < sizeof ( $aliases ); $a ++ ) {
if ( get_preg ( $aliases [ $a ], 'email' )) {
$partialAccounts [ $i ][ 'alias' ][] = $aliases [ $a ];
}
// invalid format
else {
$errMsg = $this -> messages [ 'alias' ][ 1 ];
array_push ( $errMsg , array ( $i ));
$messages [] = $errMsg ;
}
}
}
// add delegates
if ( $rawAccounts [ $i ][ $ids [ 'kolabUser_delegates' ]] != " " ) {
$delegates = array ();
$delegatesTemp = $_SESSION [ 'cache' ] -> get_cache ( 'mail' , 'inetOrgPerson' , 'user' );
if ( is_array ( $delegatesTemp )) {
$DNs = array_keys ( $delegatesTemp );
foreach ( $DNs as $DN ) {
$delegates [] = $delegatesTemp [ $DN ][ 0 ];
}
sort ( $delegates );
}
$newDelegates = explode ( ',' , $rawAccounts [ $i ][ $ids [ 'kolabUser_delegates' ]]);
// check format
for ( $d = 0 ; $d < sizeof ( $newDelegates ); $d ++ ) {
if ( in_array ( $newDelegates [ $d ], $delegates )) {
$partialAccounts [ $i ][ 'kolabDelegate' ][] = $newDelegates [ $d ];
}
// invalid format
else {
$errMsg = $this -> messages [ 'delegate' ][ 0 ];
array_push ( $errMsg , array ( $i ));
$messages [] = $errMsg ;
}
}
}
// free/busy
if ( $rawAccounts [ $i ][ $ids [ 'kolabUser_freeBusy' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'kolabUser_freeBusy' ]], 'digit' )) {
$partialAccounts [ $i ][ 'kolabFreeBusyFuture' ] = $rawAccounts [ $i ][ $ids [ 'kolabUser_freeBusy' ]];
}
else {
$errMsg = $this -> messages [ 'freeBusy' ][ 1 ];
array_push ( $errMsg , array ( $i ));
2006-05-16 15:43:00 +00:00
$messages [] = $errMsg ;
2005-08-01 11:58:07 +00:00
}
}
// Cyrus mail quota
if ( $rawAccounts [ $i ][ $ids [ 'kolabUser_quota' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'kolabUser_quota' ]], 'digit' )) {
$partialAccounts [ $i ][ 'cyrus-userquota' ] = $rawAccounts [ $i ][ $ids [ 'kolabUser_quota' ]];
}
else {
$errMsg = $this -> messages [ 'quota' ][ 1 ];
array_push ( $errMsg , array ( $i ));
2006-05-16 15:43:00 +00:00
$messages [] = $errMsg ;
2005-08-01 11:58:07 +00:00
}
}
}
return $messages ;
}
/**
2005-10-09 18:05:32 +00:00
* Returns the PDF entries for this module .
2006-08-13 12:58:19 +00:00
*
2005-10-09 18:05:32 +00:00
* @ return array list of possible PDF entries
2005-08-01 11:58:07 +00:00
*/
function get_pdfEntries () {
$return = array ();
// country
if ( sizeof ( $this -> attributes [ 'c' ]) > 0 ) {
$return [ 'kolabUser_country' ][ 0 ] = '<block><key>' . _ ( 'Country' ) . '</key><value>' . $this -> attributes [ 'c' ][ 0 ] . '</value></block>' ;
}
// mail server
if ( sizeof ( $this -> attributes [ 'kolabHomeServer' ]) > 0 ) {
$return [ 'kolabUser_homeServer' ][ 0 ] = '<block><key>' . _ ( 'Mailbox home server' ) . '</key><value>' . $this -> attributes [ 'kolabHomeServer' ][ 0 ] . '</value></block>' ;
}
// mail quota
if ( sizeof ( $this -> attributes [ 'cyrus-userquota' ]) > 0 ) {
$return [ 'kolabUser_quota' ][ 0 ] = '<block><key>' . _ ( 'Mail quota' ) . '</key><value>' . $this -> attributes [ 'cyrus-userquota' ][ 0 ] . '</value></block>' ;
}
// free/busy
if ( sizeof ( $this -> attributes [ 'kolabFreeBusyFuture' ]) > 0 ) {
$return [ 'kolabUser_freeBusy' ][ 0 ] = '<block><key>' . _ ( 'Free/Busy interval' ) . '</key><value>' . $this -> attributes [ 'kolabFreeBusyFuture' ][ 0 ] . '</value></block>' ;
}
// invitation policies
if ( sizeof ( $this -> attributes [ 'kolabInvitationPolicy' ]) > 0 ) {
// find default policy
$default = " " ;
for ( $i = 0 ; $i < sizeof ( $this -> attributes [ 'kolabInvitationPolicy' ]); $i ++ ) {
if ( ! strpos ( $this -> attributes [ 'kolabInvitationPolicy' ][ $i ], " : " )) {
$default = $this -> attributes [ 'kolabInvitationPolicy' ][ $i ];
break ;
}
}
$return [ 'kolabUser_invPol' ][ 0 ] = '<block><key>' . _ ( 'Invitation policy' ) . '</key><tr><td align=\"L\">' . _ ( 'Anyone' ) . " : " . $this -> invitationPolicies [ $default ] . '</td></tr></block>' ;
for ( $i = 0 ; $i < sizeof ( $this -> attributes [ 'kolabInvitationPolicy' ]); $i ++ ) {
$parts = split ( ':' , $this -> attributes [ 'kolabInvitationPolicy' ][ $i ]);
if ( sizeof ( $parts ) == 2 ) {
$return [ 'kolabUser_invPol' ][] = '<block><tr><td align=\"L\">' . $parts [ 0 ] . " : " . $this -> invitationPolicies [ $parts [ 1 ]] . '</td></tr></block>' ;
}
}
}
// email aliases
if ( sizeof ( $this -> attributes [ 'alias' ]) > 0 ) {
$return [ 'kolabUser_aliases' ][ 0 ] = '<block><key>' . _ ( 'EMail aliases' ) . '</key><value>' . implode ( " , " , $this -> attributes [ 'alias' ]) . '</value></block>' ;
}
// delegates
if ( sizeof ( $this -> attributes [ 'kolabDelegate' ]) > 0 ) {
$return [ 'kolabUser_delegate' ][ 0 ] = '<block><key>' . _ ( 'Delegates' ) . '</key><value>' . implode ( " , " , $this -> attributes [ 'kolabDelegate' ]) . '</value></block>' ;
}
return $return ;
}
2008-03-01 12:25:39 +00:00
/**
* Returns the meta HTML code for each input field .
* format : array ( < field1 > => array ( < META HTML > ), ... )
* It is not possible to display help links .
*
* @ param array $fields list of active fields
* @ param array $attributes attributes of LDAP account ( attribute names in lower case )
* @ return array meta HTML
*/
function getSelfServiceOptions ( $fields , $attributes ) {
if ( ! in_array ( 'kolabInetOrgPerson' , $attributes [ 'objectClass' ])) {
return array ();
}
$return = array ();
2008-03-04 19:47:14 +00:00
// free/busy future
2008-03-01 12:25:39 +00:00
if ( in_array ( 'kolabFreeBusyFuture' , $fields )) {
$kolabFreeBusyFuture = '' ;
if ( isset ( $attributes [ 'kolabFreeBusyFuture' ][ 0 ])) {
$kolabFreeBusyFuture = $attributes [ 'kolabFreeBusyFuture' ][ 0 ];
}
$return [ 'kolabFreeBusyFuture' ] = array (
array ( 'kind' => 'text' , 'text' => _ ( 'Free/Busy interval' )),
array ( 'kind' => 'input' , 'name' => 'kolabUser_kolabFreeBusyFuture' , 'type' => 'text' , 'size' => '30' ,
'maxlength' => '255' , 'value' => $kolabFreeBusyFuture ));
}
2008-03-04 19:47:14 +00:00
// delegates
2008-03-01 12:25:39 +00:00
if ( in_array ( 'kolabDelegate' , $fields )) {
$delegates = array ();
2008-09-04 17:43:53 +00:00
$sr = @ ldap_search ( $_SESSION [ 'ldapHandle' ], escapeDN ( $this -> selfServiceSettings [ 'kolabUser_suffix' ][ 0 ]), '(&(objectClass=inetOrgPerson)(mail=*))' , array ( 'mail' ));
2008-03-01 12:25:39 +00:00
if ( $sr ) {
$result = ldap_get_entries ( $_SESSION [ 'ldapHandle' ], $sr );
for ( $i = 0 ; $i < $result [ 'count' ]; $i ++ ) {
$delegates [] = $result [ $i ][ 'mail' ][ 0 ];
}
}
$delegates = array_unique ( $delegates );
sort ( $delegates );
$kolabDelegate = array ();
if ( isset ( $attributes [ 'kolabDelegate' ])) {
$kolabDelegate = $attributes [ 'kolabDelegate' ];
// do not show existing delegation candidates in selection list
for ( $i = 0 ; $i < sizeof ( $kolabDelegate ); $i ++ ) {
$key = array_search ( $kolabDelegate [ $i ], $delegates );
if ( $key !== false ) {
unset ( $delegates [ $key ]);
}
}
}
$delegates = array_values ( $delegates );
sort ( $kolabDelegate );
$_SESSION [ 'kolabUser_kolabDelegate' ] = $kolabDelegate ;
$delegateFields = array ();
for ( $i = 0 ; $i < sizeof ( $kolabDelegate ); $i ++ ) {
$delegateFields [] = array (
array ( 'kind' => 'text' , 'text' => $kolabDelegate [ $i ]),
array ( 'kind' => 'input' , 'type' => 'checkbox' , 'name' => 'delDelegate_' . $i ),
array ( 'kind' => 'text' , 'text' => _ ( 'Delete' ))
);
}
$delegateFields [] = array (
array ( 'kind' => 'select' , 'name' => 'new_delegate_value' , 'options' => $delegates ),
array ( 'kind' => 'input' , 'type' => 'checkbox' , 'name' => 'new_delegate' ),
array ( 'kind' => 'text' , 'text' => _ ( " Add " ))
);
$return [ 'kolabDelegate' ] = array (
array ( 'kind' => 'fieldset' , 'value' => $delegateFields , 'legend' => _ ( 'Delegates' ), 'td' => array ( 'colspan' => 2 ))
);
}
2008-03-04 19:47:14 +00:00
// invitation policies
if ( in_array ( 'kolabInvitationPolicy' , $fields )) {
$returnPol = array ();
// default invitation policy
$defaultInvPol = $this -> invitationPolicies [ 'ACT_MANUAL' ];
for ( $i = 0 ; $i < sizeof ( $attributes [ 'kolabInvitationPolicy' ]); $i ++ ) {
$parts = split ( " : " , $attributes [ 'kolabInvitationPolicy' ][ $i ]);
if ( sizeof ( $parts ) == 1 ) {
$defaultInvPol = $this -> invitationPolicies [ $attributes [ 'kolabInvitationPolicy' ][ $i ]];
unset ( $attributes [ 'kolabInvitationPolicy' ][ $i ]);
$attributes [ 'kolabInvitationPolicy' ] = array_values ( $attributes [ 'kolabInvitationPolicy' ]);
break ;
}
}
$returnPol [] = array (
array ( 'kind' => 'text' , 'text' => _ ( 'Anyone' )),
array ( 'kind' => 'select' , 'name' => 'defaultInvPol' , 'options' => array_values ( $this -> invitationPolicies ), 'options_selected' => $defaultInvPol ),
array ( 'kind' => 'text' , 'text' => '' ));
// other invitation policies
for ( $i = 0 ; $i < sizeof ( $attributes [ 'kolabInvitationPolicy' ]); $i ++ ) {
$parts = split ( " : " , $attributes [ 'kolabInvitationPolicy' ][ $i ]);
if ( sizeof ( $parts ) == 2 ) {
$returnPol [] = array (
array ( 'kind' => 'input' , 'name' => 'invPol1' . $i , 'type' => 'text' , 'value' => $parts [ 0 ]),
array ( 'kind' => 'select' , 'name' => 'invPol2' . $i , 'options' => array_values ( $this -> invitationPolicies ), 'options_selected' => $this -> invitationPolicies [ $parts [ 1 ]]),
array ( 'kind' => 'input' , 'type' => 'checkbox' , 'name' => 'delInvPol' . $i ),
array ( 'kind' => 'text' , 'text' => _ ( " Remove " )));
}
}
// input box for new invitation policy
$returnPol [] = array (
array ( 'kind' => 'input' , 'name' => 'invPol1' , 'type' => 'text' , 'value' => '' ),
array ( 'kind' => 'select' , 'name' => 'invPol2' , 'options' => array_values ( $this -> invitationPolicies )),
array ( 'kind' => 'input' , 'type' => 'checkbox' , 'name' => 'addInvPol' ),
array ( 'kind' => 'text' , 'text' => _ ( " Add " )));
$returnPol = array (
array ( 'kind' => 'fieldset' , 'legend' => _ ( 'Invitation policy' ), 'value' => $returnPol , 'td' => array ( 'colspan' => 3 ))
);
$return [ 'kolabInvitationPolicy' ] = $returnPol ;
}
2008-03-01 12:25:39 +00:00
return $return ;
}
/**
* Checks if all input values are correct and returns the LDAP commands which should be executed .
*
* @ param string $fields input fields
* @ param array $attributes LDAP attributes
* @ return array messages and LDAP commands ( array ( 'messages' => array (), 'add' => array (), 'del' => array (), 'mod' => array ()))
*/
function checkSelfServiceOptions ( $fields , $attributes ) {
$return = array ( 'messages' => array (), 'add' => array (), 'del' => array (), 'mod' => array ());
$attributeNames = array (); // list of attributes which should be checked for modification
$attributesNew = $attributes ;
// kolabFreeBusyFuture
if ( in_array ( 'kolabFreeBusyFuture' , $fields )) {
$attributeNames [] = 'kolabFreeBusyFuture' ;
if ( isset ( $_POST [ 'kolabUser_kolabFreeBusyFuture' ]) && ( $_POST [ 'kolabUser_kolabFreeBusyFuture' ] != '' )) {
if ( ! get_preg ( $_POST [ 'kolabUser_kolabFreeBusyFuture' ], 'digit' )) $return [ 'messages' ][] = $this -> messages [ 'freeBusy' ][ 0 ];
else $attributesNew [ 'kolabFreeBusyFuture' ][ 0 ] = $_POST [ 'kolabUser_kolabFreeBusyFuture' ];
}
elseif ( isset ( $attributes [ 'kolabFreeBusyFuture' ])) {
$attributesNew [ 'kolabFreeBusyFuture' ] = array ();
}
}
// delegates
if ( in_array ( 'kolabDelegate' , $fields )) {
$attributeNames [] = 'kolabDelegate' ;
// new delegation
if ( isset ( $_POST [ 'new_delegate' ]) && ( $_POST [ 'new_delegate' ] == 'on' )) {
$attributesNew [ 'kolabDelegate' ][] = $_POST [ 'new_delegate_value' ];
}
// check for deleted delegations
$postKeys = array_keys ( $_POST );
for ( $i = 0 ; $i < sizeof ( $postKeys ); $i ++ ) {
if ( strpos ( $postKeys [ $i ], 'delDelegate_' ) !== false ) {
$sKey = substr ( $postKeys [ $i ], strlen ( 'delDelegate_' ));
$key = array_search ( $_SESSION [ 'kolabUser_kolabDelegate' ][ $sKey ], $attributesNew [ 'kolabDelegate' ]);
if ( $key !== false ) {
unset ( $attributesNew [ 'kolabDelegate' ][ $key ]);
$attributesNew [ 'kolabDelegate' ] = array_values ( $attributesNew [ 'kolabDelegate' ]);
}
}
}
}
2008-03-04 19:47:14 +00:00
// invitation policies
if ( in_array ( 'kolabInvitationPolicy' , $fields )) {
$attributeNames [] = 'kolabInvitationPolicy' ;
$policies = array_flip ( $this -> invitationPolicies );
$attributesNew [ 'kolabInvitationPolicy' ] = array ();
// check old invitation policies
$targets = array ();
$i = 0 ;
while ( isset ( $_POST [ 'invPol1' . $i ])) {
if ( isset ( $_POST [ 'delInvPol' . $i ])) {
$i ++ ;
continue ;
}
if ( isset ( $_POST [ 'invPol2' . $i ]) && ( $_POST [ 'invPol1' . $i ] != " " ) && ! in_array ( $_POST [ 'invPol1' . $i ], $targets )) {
$targets [] = $_POST [ 'invPol1' . $i ];
// check invitation policy
if ( ! get_preg ( $_POST [ 'invPol1' . $i ], 'email' )) {
$message = $this -> messages [ 'invPol' ][ 0 ];
$message [] = $_POST [ 'invPol1' . $i ];
$errors [] = $message ;
}
else {
$attributesNew [ 'kolabInvitationPolicy' ][] = $_POST [ 'invPol1' . $i ] . ':' . $policies [ $_POST [ 'invPol2' . $i ]];
}
}
$i ++ ;
}
// check new invitation policy
if ( isset ( $_POST [ 'invPol1' ]) && ( $_POST [ 'invPol1' ] != " " ) && ! in_array ( $_POST [ 'invPol1' ], $targets )) {
// check new invitation policy
if ( ! get_preg ( $_POST [ 'invPol1' ], 'email' )) {
$message = $this -> messages [ 'invPol' ][ 0 ];
$message [] = $_POST [ 'invPol1' ];
$errors [] = $message ;
}
else {
$attributesNew [ 'kolabInvitationPolicy' ][] = $_POST [ 'invPol1' ] . ':' . $policies [ $_POST [ 'invPol2' ]];
}
}
// default invitation policy
if ( isset ( $_POST [ 'defaultInvPol' ]) && ( $_POST [ 'defaultInvPol' ] != " " )) {
$attributesNew [ 'kolabInvitationPolicy' ][] = $policies [ $_POST [ 'defaultInvPol' ]];
}
}
2008-03-01 12:25:39 +00:00
// find differences
for ( $i = 0 ; $i < sizeof ( $attributeNames ); $i ++ ) {
$attrName = $attributeNames [ $i ];
if ( isset ( $attributes [ $attrName ]) && ! isset ( $attributesNew [ $attrName ])) {
$return [ 'del' ][ $attrName ] = $attributes [ $attrName ];
}
elseif ( ! isset ( $attributes [ $attrName ]) && isset ( $attributesNew [ $attrName ])) {
$return [ 'add' ][ $attrName ] = $attributesNew [ $attrName ];
}
else {
for ( $a = 0 ; $a < sizeof ( $attributes [ $attrName ]); $a ++ ) {
if ( ! in_array ( $attributes [ $attrName ][ $a ], $attributesNew [ $attrName ])) {
$return [ 'mod' ][ $attrName ] = $attributesNew [ $attrName ];
break ;
}
}
for ( $a = 0 ; $a < sizeof ( $attributesNew [ $attrName ]); $a ++ ) {
if ( ! in_array ( $attributesNew [ $attrName ][ $a ], $attributes [ $attrName ])) {
$return [ 'mod' ][ $attrName ] = $attributesNew [ $attrName ];
break ;
}
}
}
}
return $return ;
}
2005-08-01 11:58:07 +00:00
}
?>