2010-09-27 01:14:42 +02:00
< ? php
2011-10-16 21:33:31 +02:00
# $Id$
2010-09-27 01:14:42 +02:00
2011-10-16 21:33:31 +02:00
/**
2010-09-27 01:14:42 +02:00
* Handlers User level alias actions - e . g . add alias , get aliases , update etc .
*/
2011-03-02 23:37:22 +01:00
class DomainHandler extends PFAHandler {
2010-09-27 01:14:42 +02:00
2011-11-12 23:01:45 +01:00
protected $domain_field = 'domain' ;
2011-10-30 21:39:14 +01:00
protected function validate_new_id () {
$valid = check_domain ( $this -> id );
2011-10-16 23:41:27 +02:00
if ( $valid ) {
return true ;
} else {
2011-10-30 21:27:08 +01:00
$this -> errormsg [ $this -> id_field ] = Lang :: read ( 'pAdminCreate_domain_domain_text_error2' ); # TODO: half of the errormsg is currently delivered via flash_error() in check_domain
2011-10-16 23:41:27 +02:00
return false ;
}
}
2011-10-19 19:52:26 +02:00
# init $this->struct, $this->db_table and $this->id_field
2011-10-16 23:41:27 +02:00
protected function initStruct () {
2011-10-16 20:50:33 +02:00
$this -> db_table = 'domain' ;
2011-03-02 23:37:22 +01:00
$this -> id_field = 'domain' ;
2011-07-30 00:06:52 +02:00
# TODO: shorter PALANG labels ;-)
# TODO: hardcode 'default' to Config::read in pacol()?
$transp = boolconf ( 'transport' ) ? 1 : 0 ; # TOOD: use a function or write a Config::intbool function
2011-10-16 20:50:33 +02:00
$quota = boolconf ( 'quota' ) ? 1 : 0 ; # TOOD: use a function or write a Config::intbool function
2011-07-30 00:06:52 +02:00
$dom_q = boolconf ( 'domain_quota' ) ? 1 : 0 ; # TOOD: use a function or write a Config::intbool function
2011-03-02 23:37:22 +01:00
2011-10-23 00:49:01 +02:00
# values for the "type" column:
# text one line of text
# num number
# vnum "virtual" number, coming from JOINs etc.
# bool boolean (converted to 0/1, additional column _$field with yes/no)
# ts timestamp (created/modified)
# enum list of options, must be given in column "options" as array
# NOTE: There are dependencies between alias_count, mailbox_count and total_quota.
# NOTE: If you disable "display in list" for one of them, the SQL query for the others might break.
# NOTE: (Disabling all of them shouldn't be a problem.)
2011-04-20 00:08:20 +02:00
$this -> struct = array (
2011-10-25 23:28:55 +02:00
# field name allow display in... type $PALANG label $PALANG description default / options / ...
2011-03-02 23:37:22 +01:00
# editing? form list
2011-10-16 21:33:31 +02:00
'domain' => pacol ( $this -> new , 1 , 1 , 'text' , 'pAdminEdit_domain_domain' , '' ),
'description' => pacol ( 1 , 1 , 1 , 'text' , 'pAdminEdit_domain_description' , '' ),
'aliases' => pacol ( 1 , 1 , 1 , 'num' , 'pAdminEdit_domain_aliases' , 'pAdminEdit_domain_aliases_text' , Config :: read ( 'aliases' ) ),
2011-10-30 01:48:18 +02:00
'alias_count' => pacol ( 0 , 0 , 1 , 'vnum' , '' , '' , '' , '' ,
/*not_in_db*/ 0 ,
2011-10-25 23:28:55 +02:00
/*dont_write_to_db*/ 1 ,
2011-10-30 01:44:37 +02:00
/*select*/ 'coalesce(__alias_count,0) - coalesce(__mailbox_count,0) as alias_count' ,
2011-10-30 01:48:18 +02:00
/*extrafrom*/ 'left join ( select count(*) as __alias_count, domain as __alias_domain from ' . table_by_key ( 'alias' ) .
2011-10-23 00:49:01 +02:00
' group by domain) as __alias on domain = __alias_domain' ),
2011-10-16 21:33:31 +02:00
'mailboxes' => pacol ( 1 , 1 , 1 , 'num' , 'pAdminEdit_domain_mailboxes' , 'pAdminEdit_domain_mailboxes_text' , Config :: read ( 'mailboxes' ) ),
2011-10-30 01:48:18 +02:00
'mailbox_count' => pacol ( 0 , 0 , 1 , 'vnum' , '' , '' , '' , '' ,
/*not_in_db*/ 0 ,
2011-10-25 23:28:55 +02:00
/*dont_write_to_db*/ 1 ,
2011-10-30 01:48:18 +02:00
/*select*/ 'coalesce(__mailbox_count,0) as mailbox_count' ,
/*extrafrom*/ 'left join ( select count(*) as __mailbox_count, sum(quota) as __total_quota, domain as __mailbox_domain from ' . table_by_key ( 'mailbox' ) .
2011-10-23 00:49:01 +02:00
' group by domain) as __mailbox on domain = __mailbox_domain' ),
2011-10-16 21:33:31 +02:00
'maxquota' => pacol ( $quota , $quota , $quota , 'num' , 'pAdminEdit_domain_maxquota' , 'pAdminEdit_domain_maxquota_text' , Config :: read ( 'maxquota' ) ),
2011-10-30 01:48:18 +02:00
'total_quota' => pacol ( 0 , 0 , 1 , 'vnum' , '' , '' , '' , '' ,
/*not_in_db*/ 0 ,
2011-10-25 23:28:55 +02:00
/*dont_write_to_db*/ 1 ,
2011-10-23 00:49:01 +02:00
/*select*/ 'round(coalesce(__total_quota/' . intval ( Config :: read ( 'quota_multiplier' )) . ',0)) as total_quota' /*extrafrom*/ /* already in mailbox_count */ ),
2011-10-16 21:33:31 +02:00
'quota' => pacol ( $dom_q , $dom_q , $dom_q , 'num' , 'pAdminEdit_domain_quota' , 'pAdminEdit_domain_maxquota_text' , Config :: read ( 'domain_quota_default' ) ),
'transport' => pacol ( $transp , $transp , $transp , 'enum' , 'pAdminEdit_domain_transport' , 'pAdminEdit_domain_transport_text' , Config :: read ( 'transport_default' ) ,
2011-10-30 22:25:57 +01:00
/*options*/ Config :: read ( 'transport_options' ) ),
2011-10-16 21:33:31 +02:00
'backupmx' => pacol ( 1 , 1 , 1 , 'bool' , 'pAdminEdit_domain_backupmx' , '' ),
2011-10-19 00:56:33 +02:00
'active' => pacol ( 1 , 1 , 1 , 'bool' , 'pAdminEdit_domain_active' , '' , 1 ),
2011-10-30 21:27:08 +01:00
'default_aliases' => pacol ( $this -> new , $this -> new , 0 , 'bool' , 'pAdminCreate_domain_defaultaliases' , '' , 1 , '' , /*not in db*/ 1 ),
2011-10-31 21:57:43 +01:00
'created' => pacol ( 0 , 0 , 1 , 'ts' , 'created' , '' ),
2011-10-16 21:33:31 +02:00
'modified' => pacol ( 0 , 0 , 1 , 'ts' , 'pAdminList_domain_modified' , '' ),
2011-03-02 23:37:22 +01:00
);
2011-10-30 21:27:08 +01:00
# TODO: hook to modify $this->struct
2010-09-27 01:14:42 +02:00
}
2011-10-19 19:52:26 +02:00
# messages used in various functions.
# always list the key to hand over to Lang::read
# the only exception is 'logname' which uses the key for db_log
protected function initMsg () {
$this -> msg [ 'error_already_exists' ] = 'pAdminCreate_domain_domain_text_error' ;
$this -> msg [ 'error_does_not_exist' ] = 'domain_does_not_exist' ;
if ( $this -> new ) {
$this -> msg [ 'logname' ] = 'create_domain' ;
$this -> msg [ 'store_error' ] = 'pAdminCreate_domain_result_error' ;
} else {
$this -> msg [ 'logname' ] = 'edit_domain' ;
$this -> msg [ 'store_error' ] = 'pAdminEdit_domain_result_error' ;
}
}
2011-11-13 23:59:21 +01:00
/*
* Configuration for the web interface
*/
public function webformConfig () {
return array (
# $PALANG labels
'formtitle_create' => 'pAdminCreate_domain_welcome' ,
'formtitle_edit' => 'pAdminEdit_domain_welcome' ,
'create_button' => 'pAdminCreate_domain_button' ,
'successmessage' => 'pAdminCreate_domain_result_success' ,
# various settings
'required_role' => 'global-admin' ,
'listview' => 'list-domain.php' ,
'early_init' => 0 ,
);
}
2011-10-30 01:44:37 +02:00
/**
* called by $this -> store () after storing $this -> values in the database
* can be used to update additional tables , call scripts etc .
*/
protected function storemore () {
2011-10-30 01:48:18 +02:00
if ( $this -> new && $this -> values [ 'default_aliases' ]) {
foreach ( Config :: read ( 'default_aliases' ) as $address => $goto ) {
2011-10-30 21:39:14 +01:00
$address = $address . " @ " . $this -> id ;
2011-10-30 01:48:18 +02:00
# TODO: use AliasHandler->add instead of writing directly to the alias table
$arr = array (
'address' => $address ,
'goto' => $goto ,
2011-10-30 21:39:14 +01:00
'domain' => $this -> id ,
2011-10-30 01:48:18 +02:00
);
$result = db_insert ( 'alias' , $arr );
# TODO: error checking
2011-10-19 19:52:26 +02:00
}
2011-10-30 01:48:18 +02:00
}
if ( $this -> new ) {
2011-10-30 21:39:14 +01:00
$tMessage = Lang :: read ( 'pAdminCreate_domain_result_success' ) . " ( " . $this -> id . " ) " ; # TODO: tMessage is not used/returned anywhere
2011-10-30 01:48:18 +02:00
} else {
# TODO: success message for edit
}
2011-10-19 19:52:26 +02:00
if ( $this -> new ) {
2011-10-30 21:39:14 +01:00
if ( ! domain_postcreation ( $this -> id )) {
2011-10-19 19:52:26 +02:00
$this -> errormsg [] = Lang :: read ( 'pAdminCreate_domain_error' );
}
} else {
# we don't have domain_postedit()
2010-09-27 01:14:42 +02:00
}
2011-10-30 01:44:37 +02:00
return true ; # TODO: don't hardcode
2010-09-27 01:14:42 +02:00
}
2011-10-16 21:33:31 +02:00
2011-02-14 00:35:49 +01:00
/**
* @ return true on success false on failure
*/
2011-10-16 21:33:31 +02:00
public function delete () {
if ( ! $this -> view () ) {
2011-02-14 00:35:49 +01:00
$this -> errormsg [] = 'A domain with that name does not exist.' ; # TODO: make translatable
return false ;
}
$this -> errormsg [] = '*** Domain deletion not implemented yet ***' ;
return false ; # XXX function aborts here until TODO below is implemented! XXX
# TODO: recursively delete mailboxes, aliases, alias_domains, fetchmail entries etc. before deleting the domain
# TODO: move the needed code from delete.php here
2011-10-30 21:39:14 +01:00
$result = db_delete ( $this -> db_table , $this -> id_field , $this -> id );
2011-10-16 21:33:31 +02:00
if ( $result == 1 ) {
2011-10-30 21:39:14 +01:00
list ( /*NULL*/ , $domain ) = explode ( '@' , $this -> id );
db_log ( $domain , 'delete_domain' , $this -> id ); # TODO delete_domain is not a valid db_log keyword yet because we don't yet log add/delete domain
2011-02-14 00:35:49 +01:00
return true ;
}
}
2010-09-27 01:14:42 +02:00
}
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */