diff --git a/interface/lib/classes/validate_client.inc.php b/interface/lib/classes/validate_client.inc.php index 198701bc4cde14f3dcca5a089e2e395f5e610e41..c67601bfb7d7c080bd5d9f15d086ab63e06d38dc 100644 --- a/interface/lib/classes/validate_client.inc.php +++ b/interface/lib/classes/validate_client.inc.php @@ -122,6 +122,10 @@ class validate_client { case 'mail_servers': $used_servers = $app->db->queryAllRecords('SELECT domain_id FROM mail_domain INNER JOIN sys_user ON mail_domain.sys_userid = sys_user.userid WHERE client_id = ' . $client_id . ' AND server_id NOT IN (' . implode(', ', $field_value) . ');'); break; + + case 'xmpp_servers': + $used_servers = $app->db->queryAllRecords('SELECT domain_id FROM xmpp_domain INNER JOIN sys_user ON xmpp_domain.sys_userid = sys_user.userid WHERE client_id = ' . $client_id . ' AND server_id NOT IN (' . implode(', ', $field_value) . ');'); + break; } if ($used_servers === null || count($used_servers)) diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php index b5bf002b210e1a947688af925824385e978dc4a4..c0bed86cb9e83d9c01d7ccf4b3010c56141effd7 100644 --- a/interface/web/client/form/client.tform.php +++ b/interface/web/client/form/client.tform.php @@ -782,9 +782,8 @@ $form["tabs"]['limits'] = array ( 'class'=> 'custom_datasource', 'function'=> 'client_servers' ), - 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', - 'errmsg'=> 'no_xmpp_server_error'), - 1 => array ( 'type' => 'CUSTOM', + 'validators' => array ( + 0 => array ( 'type' => 'CUSTOM', 'class' => 'validate_client', 'function' => 'check_used_servers', 'errmsg'=> 'xmpp_servers_used'), @@ -832,17 +831,6 @@ $form["tabs"]['limits'] = array ( 'default' => 'n', 'value' => array(0 => 'n', 1 => 'y') ), - 'limit_xmpp_auth_options' => array( - 'datatype' => 'VARCHAR', - 'formtype' => 'CHECKBOXARRAY', - 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', - 'errmsg'=> 'xmpp_auth_options_notempty'), - ), - 'default' => '', - 'separator' => ',', - 'valuelimit' => 'client:xmpp_auth_options', - 'value' => array('plain' => 'Plain', 'hashed' => 'Hashed', 'isp' => 'By Mail Account') - ), 'limit_xmpp_vjud' => array( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng index 786bd7cae204f824743975c4ee2155ec20680de2..663d27615a74809285043ecf1dd8510ce1f5ecbf 100644 --- a/interface/web/client/lib/lang/en_client.lng +++ b/interface/web/client/lib/lang/en_client.lng @@ -178,10 +178,8 @@ $wb['no_xmpp_server_error'] = 'At least one XMPP Server must be selected.'; $wb['xmpp_servers_used'] = 'The server you are trying to remove from this client is used as a XMPP Server. Be sure that this server is not used by this client before you remove it.'; $wb['limit_xmpp_domain_error_notint'] = 'The XMPP domain limit must be a number.'; $wb['limit_xmpp_user_error_notint'] = 'The XMPP user limit must be a number.'; -$wb['xmpp_auth_options_notempty'] = 'At least one XMPP auth method must be selected.'; $wb['limit_xmpp_domain_txt'] = 'Max. number of XMPP domains'; $wb['limit_xmpp_user_txt'] = 'Max. number of XMPP accounts'; -$wb['xmpp_auth_options_txt'] = 'Available Auth options'; $wb['limit_xmpp_muc_txt'] = 'Multiuser chat available'; $wb['limit_xmpp_pastebin_txt'] = 'Pastebin for MUC available'; $wb['limit_xmpp_httparchive_txt'] = 'HTTP archive for MUC available'; diff --git a/interface/web/mail/form/xmpp_domain.tform.php b/interface/web/mail/form/xmpp_domain.tform.php index 5934497184e6ae6c63eaddc47ef6805d6a229692..3fe62a2ac3c335e0ec5fd7e026784e8423e3e16f 100644 --- a/interface/web/mail/form/xmpp_domain.tform.php +++ b/interface/web/mail/form/xmpp_domain.tform.php @@ -55,6 +55,20 @@ $form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, $form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete $form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete +$muc_available = $muc_pastebin_available = $muc_httparchive_available = $anon_available = $vjud_available = $proxy_available = $status_available = true; +if(!$app->auth->is_admin()) { + $client_group_id = $_SESSION["s"]["user"]["default_group"]; + $client = $app->db->queryOneRecord("SELECT limit_xmpp_muc, limit_xmpp_anon, limit_xmpp_vjud, limit_xmpp_proxy, limit_xmpp_status, limit_xmpp_pastebin, limit_xmpp_httparchive FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id"); + + if($client['limit_xmpp_muc'] != 'y') $muc_available = false; + if($client['limit_xmpp_pastebin'] != 'y' || $client['limit_xmpp_muc'] != 'y') $muc_pastebin_available = false; + if($client['limit_xmpp_httparchive'] != 'y' || $client['limit_xmpp_muc'] != 'y') $muc_httparchive_available = false; + if($client['limit_xmpp_anon'] != 'y') $anon_available = false; + if($client['limit_xmpp_vjud'] != 'y') $vjud_available = false; + if($client['limit_xmpp_proxy'] != 'y') $proxy_available= false; + if($client['limit_xmpp_status'] != 'y') $status_available = false; +} + $form["tabs"]['domain'] = array ( 'title' => "Domain", 'width' => 100, @@ -149,7 +163,6 @@ $form["tabs"]['domain'] = array ( ) ); - $form["tabs"]['features'] = array ( 'title' => "Modules", 'width' => 100, @@ -158,127 +171,139 @@ $form["tabs"]['features'] = array ( //################################# // Begin Datatable fields //################################# - 'use_anon_host' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'CHECKBOX', - 'default' => 'y', - 'value' => array(0 => 'n', 1 => 'y') - ), 'use_pubsub' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'CHECKBOX', 'default' => 'y', 'value' => array(0 => 'n', 1 => 'y') - ), - 'use_vjud' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'CHECKBOX', - 'default' => 'y', - 'value' => array(0 => 'n', 1 => 'y') - ), - 'vjud_opt_mode' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'SELECT', - 'default' => '0', - 'value' => array(0 => 'Opt-In', 1 => 'Opt-Out') - ), - 'use_proxy' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'CHECKBOX', - 'default' => 'y', - 'value' => array(0 => 'n', 1 => 'y') - ), - 'use_status_host' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'CHECKBOX', - 'default' => 'y', - 'value' => array(0 => 'n', 1 => 'y') - ), + ) //################################# // ENDE Datatable fields //################################# ) ); +if($anon_available) + $form['tabs']['features']['fields']['use_anon_host'] = array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ); +if($vjud_available){ + $form['tabs']['features']['fields']['use_vjud'] = array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ); + $form['tabs']['features']['fields']['vjud_opt_mode'] = array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'SELECT', + 'default' => '0', + 'value' => array(0 => 'Opt-In', 1 => 'Opt-Out') + ); +} -$form["tabs"]['muc'] = array ( - 'title' => "MUC", - 'width' => 100, - 'template' => "templates/xmpp_domain_edit_muc.htm", - 'fields' => array ( - //################################# - // Begin Datatable fields - //################################# - 'use_muc_host' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'CHECKBOX', - 'default' => 'y', - 'value' => array(0 => 'n', 1 => 'y') - ), - 'muc_name' => array( - 'datatype' => 'VARCHAR', - 'formtype' => 'TEXT', - 'default' => '' - ), - 'muc_restrict_room_creation' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'SELECT', - 'default' => '1', - 'value' => array(0 => 'Everyone', 1 => 'Members', 2 => 'Admins') - ), - 'muc_admins' => array( - 'datatype' => 'VARCHAR', - 'formtype' => 'TEXT', - 'default' => 'admin@service.com, superuser@service.com', - 'value' => '', - 'width' => '15', - 'maxlength' => '3' - ), - 'use_pastebin' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'CHECKBOX', - 'default' => 'y', - 'value' => array(0 => 'n', 1 => 'y') - ), - 'pastebin_expire_after' => array( - 'datatype' => 'VARCHAR', - 'formtype' => 'TEXT', - 'default' => '48', - 'validators' => array(0 => array('type' => 'ISINT'), - array('type'=>'RANGE', 'range'=>'1:168') +if($proxy_available) + $form['tabs']['features']['fields']['use_proxy'] = array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ); +if($status_available) + $form['tabs']['features']['fields']['use_status_host'] = array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ); + + +if($muc_available) + $form["tabs"]['muc'] = array ( + 'title' => "MUC", + 'width' => 100, + 'template' => "templates/xmpp_domain_edit_muc.htm", + 'fields' => array ( + //################################# + // Begin Datatable fields + //################################# + 'use_muc_host' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') ), - 'value' => '', - 'width' => '15' - ), - 'pastebin_trigger' => array( - 'datatype' => 'VARCHAR', - 'formtype' => 'TEXT', - 'default' => '!paste', - 'value' => '', - 'width' => '15' - ), - 'use_http_archive' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'CHECKBOX', - 'default' => 'y', - 'value' => array(0 => 'n', 1 => 'y') - ), - 'http_archive_show_join' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'CHECKBOX', - 'default' => 'y', - 'value' => array(0 => 'n', 1 => 'y') - ), - 'http_archive_show_status' => array ( - 'datatype' => 'VARCHAR', - 'formtype' => 'CHECKBOX', - 'default' => 'y', - 'value' => array(0 => 'n', 1 => 'y') + 'muc_name' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '' + ), + 'muc_restrict_room_creation' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'SELECT', + 'default' => '1', + 'value' => array(0 => 'Everyone', 1 => 'Members', 2 => 'Admins') + ), + 'muc_admins' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => 'admin@service.com, superuser@service.com', + 'value' => '', + 'width' => '15', + 'maxlength' => '3' + ), + //################################# + // ENDE Datatable fields + //################################# + ) + ); +if($muc_available && $muc_pastebin_available){ + $form['tabs']['muc']['fields']['use_pastebin'] = array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ); + $form['tabs']['muc']['fields']['pastebin_expire_after'] = array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '48', + 'validators' => array(0 => array('type' => 'ISINT'), + array('type'=>'RANGE', 'range'=>'1:168') ), - //################################# - // ENDE Datatable fields - //################################# - ) -); + 'value' => '', + 'width' => '15' + ); + $form['tabs']['muc']['fields']['pastebin_trigger'] = array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '!paste', + 'value' => '', + 'width' => '15' + ); +} +if($muc_available && $muc_httparchive_available){ + $form['tabs']['muc']['fields']['use_http_archive'] = array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ); + $form['tabs']['muc']['fields']['http_archive_show_join'] = array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ); + $form['tabs']['muc']['fields']['http_archive_show_status'] = array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n', 1 => 'y') + ); +} $form["tabs"]['ssl'] = array ( 'title' => "SSL", diff --git a/interface/web/mail/lib/lang/en_xmpp_domain.lng b/interface/web/mail/lib/lang/en_xmpp_domain.lng index 9e2924cb9161939905113ceb8ea9834c4d6f996c..f1da77ba2982cd082929d00250decf05d4bff728 100644 --- a/interface/web/mail/lib/lang/en_xmpp_domain.lng +++ b/interface/web/mail/lib/lang/en_xmpp_domain.lng @@ -58,4 +58,5 @@ $wb['save_certificate_txt'] = 'Save certificate'; $wb['create_certificate_txt'] = 'Create certificate'; $wb['delete_certificate_txt'] = 'Delete certificate'; $wb['ssl_error_isemail'] = 'Please enter a valid email adress for generation of the SSL certificate'; +$wb["limit_xmppdomain_txt"] = 'The max. number of XMPP domains for your account is reached.'; ?> diff --git a/interface/web/mail/lib/module.conf.php b/interface/web/mail/lib/module.conf.php index 24e45d05ee6965b1d33ea3061a8fd43d5b228821..b6df07e97e1dfc6d6911e6e13a76baa091e76d0a 100644 --- a/interface/web/mail/lib/module.conf.php +++ b/interface/web/mail/lib/module.conf.php @@ -151,7 +151,7 @@ if($app->auth->get_client_limit($userid, 'fetchmail') != 0) //**** XMPP Menu $items = array(); -if($app->auth->get_client_limit($userid, 'xmppdomain') != 0) +if($app->auth->get_client_limit($userid, 'xmpp_domain') != 0) { $items[] = array( 'title' => 'XMPP Domain', 'target' => 'content', @@ -159,7 +159,7 @@ if($app->auth->get_client_limit($userid, 'xmppdomain') != 0) 'html_id' => 'xmpp_domain_list'); } -if($app->auth->get_client_limit($userid, 'xmppaccount') != 0) +if($app->auth->get_client_limit($userid, 'xmpp_user') != 0) { $items[] = array( 'title' => 'XMPP Account', 'target' => 'content', diff --git a/interface/web/mail/templates/xmpp_domain_edit_modules.htm b/interface/web/mail/templates/xmpp_domain_edit_modules.htm index f6d988fea2fb66117c261b89be96ab06c2d23db9..8efcf509760b533849287d79e2894d4ce0d57c49 100644 --- a/interface/web/mail/templates/xmpp_domain_edit_modules.htm +++ b/interface/web/mail/templates/xmpp_domain_edit_modules.htm @@ -4,43 +4,50 @@