diff --git a/install/sql/incremental/upd_0031.sql b/install/sql/incremental/upd_0031.sql
index f14e1264adc78926fc06c3faf7eea2f012165058..0fb25a5d407b0bd7d3bc43bfdfd0ac80c0119db4 100644
--- a/install/sql/incremental/upd_0031.sql
+++ b/install/sql/incremental/upd_0031.sql
@@ -1 +1,18 @@
+CREATE TABLE `server_php` (
+ `server_php_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+ `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+ `sys_perm_user` varchar(5) DEFAULT NULL,
+ `sys_perm_group` varchar(5) DEFAULT NULL,
+ `sys_perm_other` varchar(5) DEFAULT NULL,
+ `server_id` int(11) unsigned NOT NULL DEFAULT '0',
+ `client_id` int(11) unsigned NOT NULL DEFAULT '0',
+ `name` varchar(255) DEFAULT NULL,
+ `php_fastcgi_binary` varchar(255) DEFAULT NULL,
+ `php_fastcgi_ini_dir` varchar(255) DEFAULT NULL,
+ `php_fpm_init_script` varchar(255) DEFAULT NULL,
+ `php_fpm_ini_dir` varchar(255) DEFAULT NULL,
+ `php_fpm_pool_dir` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`server_php_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
ALTER TABLE `web_domain` ADD `fastcgi_php_version` VARCHAR( 255 ) NULL DEFAULT NULL;
\ No newline at end of file
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index a755adfa304b664152bb7c5d64e53104d863c9c2..2612d7e886c8a7540232aee5f205daba7ea965cb 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1010,6 +1010,31 @@ CREATE TABLE `server_ip` (
-- --------------------------------------------------------
+
+--
+-- Table structure for table `server_php`
+--
+
+CREATE TABLE `server_php` (
+ `server_php_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `sys_userid` int(11) unsigned NOT NULL DEFAULT '0',
+ `sys_groupid` int(11) unsigned NOT NULL DEFAULT '0',
+ `sys_perm_user` varchar(5) DEFAULT NULL,
+ `sys_perm_group` varchar(5) DEFAULT NULL,
+ `sys_perm_other` varchar(5) DEFAULT NULL,
+ `server_id` int(11) unsigned NOT NULL DEFAULT '0',
+ `client_id` int(11) unsigned NOT NULL DEFAULT '0',
+ `name` varchar(255) DEFAULT NULL,
+ `php_fastcgi_binary` varchar(255) DEFAULT NULL,
+ `php_fastcgi_ini_dir` varchar(255) DEFAULT NULL,
+ `php_fpm_init_script` varchar(255) DEFAULT NULL,
+ `php_fpm_ini_dir` varchar(255) DEFAULT NULL,
+ `php_fpm_pool_dir` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`server_php_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
--
-- Table structure for table `shell_user`
--
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index 9f6f30cc89ff56c58e407c6fcd370b6af0958c32..275fa7ace326712fc4d90939bb86a4b5cc9d4a0a 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -90,7 +90,6 @@ fastcgi_children=8
fastcgi_max_requests=5000
fastcgi_bin=/usr/bin/php-cgi
fastcgi_config_syntax=1
-fastcgi_additional_php_versions=
[jailkit]
jailkit_chroot_home=/home/[username]
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index facc193e4559c40c704acc318c55dd8b5af3957c..24f3f18c64984250110f31c76e2a3971b9eba1dd 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -867,14 +867,6 @@ $form["tabs"]['fastcgi'] = array(
'width' => '40',
'maxlength' => '255'
),
- 'fastcgi_additional_php_versions' => array (
- 'datatype' => 'VARCHAR',
- 'formtype' => 'TEXT',
- 'default' => '',
- 'value' => '',
- 'width' => '30',
- 'maxlength' => '255'
- ),
##################################
# ENDE Datatable fields
##################################
diff --git a/interface/web/admin/form/server_php.tform.php b/interface/web/admin/form/server_php.tform.php
new file mode 100644
index 0000000000000000000000000000000000000000..e5fcb7b36303437c5cd5e6c0924ecf641579a812
--- /dev/null
+++ b/interface/web/admin/form/server_php.tform.php
@@ -0,0 +1,194 @@
+ 0 id must match with id of current user
+$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
+$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
+$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
+
+$form["tabs"]['php_name'] = array (
+ 'title' => "Name",
+ 'width' => 80,
+ 'template' => "templates/server_php_name_edit.htm",
+ 'fields' => array (
+ ##################################
+ # Beginn Datenbankfelder
+ ##################################
+ 'server_id' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'SELECT',
+ 'default' => '',
+ 'datasource' => array ( 'type' => 'SQL',
+ 'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
+ 'keyfield'=> 'server_id',
+ 'valuefield'=> 'server_name'
+ ),
+ 'value' => ''
+ ),
+ 'client_id' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'SELECT',
+ 'default' => '',
+ 'datasource' => array ( 'type' => 'SQL',
+ 'querystring' => "SELECT client_id,CONCAT(contact_name,' :: ',username) as name FROM client WHERE {AUTHSQL} ORDER BY contact_name",
+ 'keyfield'=> 'client_id',
+ 'valuefield'=> 'name'
+ ),
+ 'value' => array(0 => ' ')
+ ),
+ 'name' => array (
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'validators' => array(0 => array('type' => 'NOTEMPTY',
+ 'errmsg' => 'server_php_name_error_empty'),
+ ),
+ 'default' => '',
+ 'value' => '',
+ 'separator' => '',
+ 'width' => '40',
+ 'maxlength' => '255'
+ ),
+ ##################################
+ # ENDE Datenbankfelder
+ ##################################
+ )
+);
+
+$form["tabs"]['php_fastcgi'] = array(
+ 'title' => "FastCGI Settings",
+ 'width' => 80,
+ 'template' => "templates/server_php_fastcgi_edit.htm",
+ 'fields' => array(
+ ##################################
+ # Begin Datatable fields
+ ##################################
+ 'php_fastcgi_binary' => array(
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'default' => '',
+ 'value' => '',
+ 'width' => '40',
+ 'maxlength' => '255'
+ ),
+ 'php_fastcgi_ini_dir' => array(
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'default' => '',
+ 'value' => '',
+ 'width' => '40',
+ 'maxlength' => '255'
+ ),
+ ##################################
+ # ENDE Datatable fields
+ ##################################
+ )
+);
+
+$form["tabs"]['php_fpm'] = array(
+ 'title' => "PHP-FPM Settings",
+ 'width' => 80,
+ 'template' => "templates/server_php_fpm_edit.htm",
+ 'fields' => array(
+ ##################################
+ # Begin Datatable fields
+ ##################################
+ 'php_fpm_init_script' => array(
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'default' => '',
+ 'value' => '',
+ 'width' => '40',
+ 'maxlength' => '255'
+ ),
+ 'php_fpm_ini_dir' => array(
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'default' => '',
+ 'value' => '',
+ 'width' => '40',
+ 'maxlength' => '255'
+ ),
+ 'php_fpm_pool_dir' => array(
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'default' => '',
+ 'value' => '',
+ 'width' => '40',
+ 'maxlength' => '255'
+ ),
+ ##################################
+ # ENDE Datatable fields
+ ##################################
+ )
+);
+?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/de.lng b/interface/web/admin/lib/lang/de.lng
index 3cea3528919445224d7d5c2aa3adf08aee5a2981..d638c99eccc37ec604af81631b292e2c400c1a4f 100644
--- a/interface/web/admin/lib/lang/de.lng
+++ b/interface/web/admin/lib/lang/de.lng
@@ -40,4 +40,5 @@ $wb['Do OS-Update'] = 'Do OS-Update';
$wb['Do ISPConfig-Update'] = 'Do ISPConfig-Update';
$wb['1001'] = 'Username or password is empty.';
$wb['1002'] = 'Username or password is wrong.';
+$wb['Additional PHP Versions'] = 'Zusätzliche PHP-Versionen';
?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 7911e94814225274cba1ec91ae9f76b7e0cd96fb..fd78f1bcedf6fb282989d957dd6762e47586a241 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -153,6 +153,4 @@ $wb['set_folder_permissions_on_update_txt'] = 'Set folder permissions on update'
$wb['add_web_users_to_sshusers_group_txt'] = 'Add web users to -sshusers- group';
$wb['connect_userid_to_webid_txt'] = 'Connect Linux userid to webid';
$wb['connect_userid_to_webid_start_txt'] = 'Start ID for userid/webid connect';
-$wb["fastcgi_additional_php_versions_txt"] = 'Zusätzliche PHP-Versionen';
-$wb["fastcgi_additional_php_versions_hint_txt"] = 'Format:
<name>;<path_to_executable>;<path_to_php.ini_dir>
z.B.:
PHP 5.2.17;/opt/php52/bin/php-cgi;/opt/php52/etc/';
?>
diff --git a/interface/web/admin/lib/lang/de_server_ip.lng b/interface/web/admin/lib/lang/de_server_ip.lng
index ba94772979d388611a46eb1090c3c91b3b1f1a63..c432cbb7e0f440eee921694e3ef37d03234b3925 100644
--- a/interface/web/admin/lib/lang/de_server_ip.lng
+++ b/interface/web/admin/lib/lang/de_server_ip.lng
@@ -4,8 +4,8 @@ $wb['ip_address_txt'] = 'IP Adresse';
$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
$wb['ip_error_wrong'] = 'Das IP Adresse ist ungültig';
$wb['ip_error_unique'] = 'Das IP Adresse müss einzigartig sein';
-$wb['client_id_txt'] = 'Client';
-$wb['ip_type_txt'] = 'Type';
+$wb['client_id_txt'] = 'Kunde';
+$wb['ip_type_txt'] = 'Typ';
$wb['virtualhost_port_txt'] = 'HTTP Ports';
-$wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
+$wb['error_port_syntax'] = 'Ungültige Zeichen im Ports-Feld. Bitte geben Sie nur komma-separierte Nummern an. Beispiel: 80,443';
?>
diff --git a/interface/web/admin/lib/lang/de_server_ip_list.lng b/interface/web/admin/lib/lang/de_server_ip_list.lng
index 54deb763a24365265aa8b0c6831a479cff52ce7c..1d792dffe4fcc0bffcd39a3548a0bce1f4efc6a2 100644
--- a/interface/web/admin/lib/lang/de_server_ip_list.lng
+++ b/interface/web/admin/lib/lang/de_server_ip_list.lng
@@ -3,7 +3,7 @@ $wb['list_head_txt'] = 'IP Adressen';
$wb['server_id_txt'] = 'Server';
$wb['ip_address_txt'] = 'IP Adresse';
$wb['add_new_record_txt'] = 'Neue IP Adresse hinzufügen';
-$wb['client_id_txt'] = 'Client';
+$wb['client_id_txt'] = 'Kunde';
$wb['virtualhost_txt'] = 'HTTP Vhost';
$wb['virtualhost_port_txt'] = 'HTTP Ports';
$wb['ip_type_txt'] = 'Type';
diff --git a/interface/web/admin/lib/lang/de_server_php.lng b/interface/web/admin/lib/lang/de_server_php.lng
new file mode 100644
index 0000000000000000000000000000000000000000..d28c534aba5ab71fae54f7352905c5d1a2e21834
--- /dev/null
+++ b/interface/web/admin/lib/lang/de_server_php.lng
@@ -0,0 +1,16 @@
+
diff --git a/interface/web/admin/lib/lang/de_server_php_list.lng b/interface/web/admin/lib/lang/de_server_php_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..0176bf8664fd9c621cfad9e37c2c52fadf3721be
--- /dev/null
+++ b/interface/web/admin/lib/lang/de_server_php_list.lng
@@ -0,0 +1,7 @@
+
diff --git a/interface/web/admin/lib/lang/en.lng b/interface/web/admin/lib/lang/en.lng
index b07214eed66230ea94873882fdcd3e1e003bf439..2fb4deed06ebcbffb5d08aa0cc3c0a915adc60b4 100644
--- a/interface/web/admin/lib/lang/en.lng
+++ b/interface/web/admin/lib/lang/en.lng
@@ -42,4 +42,5 @@ $wb['Remote Users'] = 'Remote Users';
$wb['Remote Actions'] = 'Remote Actions';
$wb['Do OS-Update'] = 'Do OS-Update';
$wb['Do ISPConfig-Update'] = 'Do ISPConfig-Update';
+$wb['Additional PHP Versions'] = 'Additional PHP Versions';
?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index c6a80f2de1b3de3166c1048cb0843cf6a4289c82..4cce27548246f6fbd52ac2086498f24ba3c9efdd 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -157,6 +157,4 @@ $wb["connect_userid_to_webid_txt"] = 'Connect Linux userid to webid';
$wb["connect_userid_to_webid_start_txt"] = 'Start ID for userid/webid connect';
$wb["realtime_blackhole_list_txt"] = 'Real-time Blackhole List';
$wb["realtime_blackhole_list_note_txt"] = '(Separate RBL\'s with commas)';
-$wb["fastcgi_additional_php_versions_txt"] = 'Additional PHP Versions';
-$wb["fastcgi_additional_php_versions_hint_txt"] = 'Format:
<name>;<path_to_executable>;<path_to_php.ini_dir>
e.g.:
PHP 5.2.17;/opt/php52/bin/php-cgi;/opt/php52/etc/';
?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_server_php.lng b/interface/web/admin/lib/lang/en_server_php.lng
new file mode 100644
index 0000000000000000000000000000000000000000..addbfa49357aa4e45f3c0ef1700065df9cf541f7
--- /dev/null
+++ b/interface/web/admin/lib/lang/en_server_php.lng
@@ -0,0 +1,16 @@
+
diff --git a/interface/web/admin/lib/lang/en_server_php_list.lng b/interface/web/admin/lib/lang/en_server_php_list.lng
new file mode 100644
index 0000000000000000000000000000000000000000..b402fd1ed19978b32027a9ed16e7b44f241db93e
--- /dev/null
+++ b/interface/web/admin/lib/lang/en_server_php_list.lng
@@ -0,0 +1,7 @@
+
diff --git a/interface/web/admin/lib/module.conf.php b/interface/web/admin/lib/module.conf.php
index 84959d6c5404d5d73397b256f6e41fcae6ca827c..833c8c5156ee894b227721ed7ac4d34468a2a32c 100644
--- a/interface/web/admin/lib/module.conf.php
+++ b/interface/web/admin/lib/module.conf.php
@@ -78,6 +78,11 @@ $items[] = array( 'title' => 'Edit Server IP',
$items[] = array( 'title' => 'Interface Config',
'target' => 'content',
'link' => 'admin/system_config_edit.php?id=1');
+
+$items[] = array( 'title' => 'Additional PHP Versions',
+ 'target' => 'content',
+ 'link' => 'admin/server_php_list.php',
+ 'html_id'=> 'server_php_list');
$module['nav'][] = array( 'title' => 'System',
'open' => 1,
diff --git a/interface/web/admin/list/server_php.list.php b/interface/web/admin/list/server_php.list.php
new file mode 100644
index 0000000000000000000000000000000000000000..1464d161f5ad8c858b8d792eb1037f5f8a6351b1
--- /dev/null
+++ b/interface/web/admin/list/server_php.list.php
@@ -0,0 +1,82 @@
+ 'server_id',
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'SELECT',
+ 'op' => 'like',
+ 'prefix' => '%',
+ 'suffix' => '%',
+ 'datasource' => array ( 'type' => 'SQL',
+ 'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
+ 'keyfield'=> 'server_id',
+ 'valuefield'=> 'server_name'
+ ),
+ 'width' => '',
+ 'value' => '');
+
+$liste['item'][] = array( 'field' => 'client_id',
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'SELECT',
+ 'op' => 'like',
+ 'prefix' => '%',
+ 'suffix' => '%',
+ 'datasource' => array ( 'type' => 'SQL',
+ 'querystring' => 'SELECT client_id,contact_name FROM client WHERE {AUTHSQL} ORDER BY contact_name',
+ 'keyfield'=> 'client_id',
+ 'valuefield'=> 'contact_name'
+ ),
+ 'width' => '',
+ 'value' => '');
+
+$liste['item'][] = array( 'field' => 'name',
+ 'datatype' => 'VARCHAR',
+ 'op' => 'like',
+ 'prefix' => '%',
+ 'suffix' => '%',
+ 'width' => '');
+
+?>
\ No newline at end of file
diff --git a/interface/web/admin/server_php_del.php b/interface/web/admin/server_php_del.php
new file mode 100644
index 0000000000000000000000000000000000000000..9b6a6fed9bb2190be566460ccf2f5dae573596dd
--- /dev/null
+++ b/interface/web/admin/server_php_del.php
@@ -0,0 +1,51 @@
+auth->check_module_permissions('admin');
+
+$app->uses("tform_actions");
+$app->tform_actions->onDelete();
+
+?>
\ No newline at end of file
diff --git a/interface/web/admin/server_php_edit.php b/interface/web/admin/server_php_edit.php
new file mode 100644
index 0000000000000000000000000000000000000000..aeac62113aebf094c9f856dd1250944fbee1c34c
--- /dev/null
+++ b/interface/web/admin/server_php_edit.php
@@ -0,0 +1,73 @@
+auth->check_module_permissions('admin');
+
+// Loading classes
+$app->uses('tpl,tform,tform_actions');
+$app->load('tform_actions');
+
+class page_action extends tform_actions {
+
+ function onBeforeUpdate() {
+ global $app, $conf;
+
+ //* Check if the server has been changed
+ // We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
+ if(($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) && isset($this->dataRecord["server_id"])) {
+ $rec = $app->db->queryOneRecord("SELECT server_id from server_php WHERE server_php_id = ".$this->id);
+ if($rec['server_id'] != $this->dataRecord["server_id"]) {
+ //* Add a error message and switch back to old server
+ $app->tform->errorMessage .= $app->lng('The Server can not be changed.');
+ $this->dataRecord["server_id"] = $rec['server_id'];
+ }
+ unset($rec);
+ }
+ }
+}
+
+$page = new page_action;
+$page->onLoad();
+
+?>
\ No newline at end of file
diff --git a/interface/web/sites/ajax_get_fastcgi_php_versions.php b/interface/web/admin/server_php_list.php
similarity index 71%
rename from interface/web/sites/ajax_get_fastcgi_php_versions.php
rename to interface/web/admin/server_php_list.php
index 41d2536e547a6ae540fb1847c86bf70a6fe7bd42..86a7050801afa5e073b1c9fd71362a8dac371be9 100644
--- a/interface/web/sites/ajax_get_fastcgi_php_versions.php
+++ b/interface/web/admin/server_php_list.php
@@ -1,7 +1,7 @@
auth->check_module_permissions('sites');
+/******************************************
+* Begin Form configuration
+******************************************/
+
+$list_def_file = "list/server_php.list.php";
-$server_id = intval($_GET["server_id"]);
-$client_group_id = intval($_GET["client_group_id"]);
+/******************************************
+* End Form configuration
+******************************************/
-if($_SESSION["s"]["user"]["typ"] == 'admin' or $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
+//* Check permissions for module
+$app->auth->check_module_permissions('admin');
- $app->uses('ini_parser,getconf');
- $fastcgi = $app->getconf->get_server_config($server_id,'fastcgi');
- $php_versions = explode('\n',$fastcgi['fastcgi_additional_php_versions']);
+$app->uses('listform_actions');
- $php_select = "";
+$app->listform_actions->SQLOrderBy = "ORDER BY server_id, name";
- if(is_array($php_versions)) {
- foreach( $php_versions as $php_version) {
- $php_select .= "#$php_version";
- }
- }
+$app->listform_actions->onLoad();
- unset($php_versions);
-}
-echo $php_select;
?>
\ No newline at end of file
diff --git a/interface/web/admin/templates/server_config_fastcgi_edit.htm b/interface/web/admin/templates/server_config_fastcgi_edit.htm
index 0f051f5b6d25b66e5e397fb0e2f342efd922567b..3ca49c5d6495888ab76063b58f4e8e63e9472231 100644
--- a/interface/web/admin/templates/server_config_fastcgi_edit.htm
+++ b/interface/web/admin/templates/server_config_fastcgi_edit.htm
@@ -39,10 +39,6 @@
{tmpl_var name='fastcgi_config_syntax'}
-