diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index 10cd86732baf2702a52988ce53b4df61fad4a43b..2c00fece945c2d0e3bb1bbbc859153dcbb4585ce 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -133,6 +133,33 @@ CREATE TABLE `dns_soa` ( KEY `active` (`active`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; +-- -------------------------------------------------------- + +-- +-- Tabellenstruktur für Tabelle `dns_template` +-- + +CREATE TABLE `dns_template` ( + `template_id` bigint(20) NOT NULL auto_increment, + `sys_userid` int(11) NOT NULL default '0', + `sys_groupid` int(11) 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, + `name` varchar(255) default NULL, + `fields` varchar(255) default NULL, + `template` text, + `visible` varchar(255) NOT NULL default 'Y', + PRIMARY KEY (`template_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; + +-- +-- Daten für Tabelle `dns_template` +-- + +INSERT INTO `dns_template` (`template_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `name`, `fields`, `template`, `visible`) VALUES (1, 1, 1, 'riud', 'riud', '', 'Default', 'DOMAIN,IP,NS1,NS2,EMAIL', '[ZONE]\norigin={DOMAIN}.\nns={NS1}.\nmbox={EMAIL}.\nrefresh=28800\nretry=7200\nexpire=604800\nminimum=86400\nttl=86400\n\n[DNS_RECORDS]\nA|{DOMAIN}.|{IP}|0|86400\nA|www|{IP}|0|86400\nA|mail|{IP}|0|86400\nNS|{DOMAIN}.|{NS1}.|0|86400\nNS|{DOMAIN}.|{NS2}.|0|86400\nMX|{DOMAIN}.|mail.{DOMAIN}.|10|86400', 'y'); + + -- -------------------------------------------------------- diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php index 80844432806c7a749612d81ee6efc9917bea4272..ec9a1f311c98429da738d04283d9fecac1ed3d23 100644 --- a/interface/lib/classes/db_mysql.inc.php +++ b/interface/lib/classes/db_mysql.inc.php @@ -292,7 +292,7 @@ class db $new_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'"); $this->datalogSave($tablename, 'INSERT', $index_field, $index_value, $old_rec, $new_rec); - return true; + return $index_value; } //** Updates a record and saves the changes into the datalog diff --git a/interface/web/dns/dns_template_del.php b/interface/web/dns/dns_template_del.php new file mode 100644 index 0000000000000000000000000000000000000000..bfb343cbf861bb37ef07a2034edb6e33db29cb09 --- /dev/null +++ b/interface/web/dns/dns_template_del.php @@ -0,0 +1,58 @@ +auth->check_module_permissions('dns'); + +$app->uses('tpl,tform,tform_actions'); +$app->load('tform_actions'); + +class page_action extends tform_actions { + +} + +$page = new page_action; +$page->onDelete(); + +?> \ No newline at end of file diff --git a/interface/web/dns/dns_template_edit.php b/interface/web/dns/dns_template_edit.php new file mode 100644 index 0000000000000000000000000000000000000000..3f596278392339b58bf5877847294c2187e4732b --- /dev/null +++ b/interface/web/dns/dns_template_edit.php @@ -0,0 +1,58 @@ +auth->check_module_permissions('dns'); + +// Loading classes +$app->uses('tpl,tform,tform_actions'); +$app->load('tform_actions'); + +class page_action extends tform_actions { + +} + +$page = new page_action; +$page->onLoad(); + +?> \ No newline at end of file diff --git a/interface/web/dns/dns_template_list.php b/interface/web/dns/dns_template_list.php new file mode 100644 index 0000000000000000000000000000000000000000..20efa8d43d75b17f6363ea416a3fe5538a845616 --- /dev/null +++ b/interface/web/dns/dns_template_list.php @@ -0,0 +1,24 @@ +auth->check_module_permissions('dns'); + +$app->uses('listform_actions'); +// $app->listform_actions->SQLExtWhere = "access = 'REJECT'"; + +$app->listform_actions->onLoad(); + + +?> \ No newline at end of file diff --git a/interface/web/dns/dns_wizard.php b/interface/web/dns/dns_wizard.php new file mode 100644 index 0000000000000000000000000000000000000000..642d3714f4d81d7b06673ad3a89bdf9b11adbd3f --- /dev/null +++ b/interface/web/dns/dns_wizard.php @@ -0,0 +1,211 @@ +auth->check_module_permissions('dns'); + + +// Loading the template +$app->uses('tpl'); +$app->tpl->newTemplate("form.tpl.htm"); +$app->tpl->setInclude('content_tpl','templates/dns_wizard.htm'); + +// import variables +$template_id = (isset($_POST['template_id']))?intval($_POST['template_id']):1; +$server_id = (isset($_POST['server_id']))?intval($_POST['server_id']):1; +$sys_groupid = (isset($_POST['client_group_id']))?intval($_POST['client_group_id']):0; + + + +// Load the templates +$records = $app->db->queryAllRecords("SELECT * FROM dns_template WHERE visible = 'y'"); +$template_id_option = ''; +foreach($records as $rec){ + $checked = ($rec['template_id'] == $template_id)?' SELECTED':''; + $template_id_option .= ''; +} +$app->tpl->setVar("template_id_option",$template_id_option); + +// If the user is administrator +if($_SESSION['s']['user']['typ'] == 'admin') { + + // Load the list of servers + $records = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE dns_server = 1 ORDER BY server_name"); + $server_id_option = ''; + foreach($records as $rec){ + $checked = ($rec['server_id'] == $server_id)?' SELECTED':''; + $server_id_option .= ''; + } + $app->tpl->setVar("server_id",$server_id_option); + + // load the list of clients + $sql = "SELECT groupid, name FROM sys_group WHERE client_id > 0"; + $clients = $app->db->queryAllRecords($sql); + $client_select = ''; + if($_SESSION["s"]["user"]["typ"] == 'admin') $client_select .= ""; + if(is_array($clients)) { + foreach( $clients as $client) { + $selected = ($client["groupid"] == $sys_groupid)?'SELECTED':''; + $client_select .= "\r\n"; + } + } + + $app->tpl->setVar("client_group_id",$client_select); + +} + +$template_record = $app->db->queryOneRecord("SELECT * FROM dns_template WHERE template_id = '$template_id'"); +$fields = explode(',',$template_record['fields']); +if(is_array($fields)) { + foreach($fields as $field) { + $app->tpl->setVar($field."_VISIBLE",1); + $field = strtolower($field); + $app->tpl->setVar($field,$_POST[$field]); + } +} + +if($_POST['create'] == 1) { + + $error = ''; + + if(isset($_POST['domain']) && $_POST['domain'] == '') $error .= $app->lng('error_domain_empty'); + if(isset($_POST['ip']) && $_POST['ip'] == '') $error .= $app->lng('error_ip_empty'); + if(isset($_POST['ns1']) && $_POST['ns1'] == '') $error .= $app->lng('error_ns1_empty'); + if(isset($_POST['ns2']) && $_POST['ns2'] == '') $error .= $app->lng('error_ns2_empty'); + if(isset($_POST['email']) && $_POST['email'] == '') $error .= $app->lng('error_email_empty'); + + + // replace template placeholders + $tpl_content = $template_record['template']; + if($_POST['domain'] != '') $tpl_content = str_replace('{DOMAIN}',$_POST['domain'],$tpl_content); + if($_POST['ip'] != '') $tpl_content = str_replace('{IP}',$_POST['ip'],$tpl_content); + if($_POST['ns1'] != '') $tpl_content = str_replace('{NS1}',$_POST['ns1'],$tpl_content); + if($_POST['ns2'] != '') $tpl_content = str_replace('{NS2}',$_POST['ns2'],$tpl_content); + if($_POST['email'] != '') $tpl_content = str_replace('{EMAIL}',$_POST['email'],$tpl_content); + + // Parse the template + $tpl_rows = explode("\n",$tpl_content); + $section = ''; + $vars = array(); + $dns_rr = array(); + foreach($tpl_rows as $row) { + $row = trim($row); + if(substr($row,0,1) == '[') { + if($row == '[ZONE]') { + $section = 'zone'; + } elseif($row == '[DNS_RECORDS]') { + $section = 'dns_records'; + } else { + die('Unknown section type'); + } + } else { + if($row != '') { + // Handle zone section + if($section == 'zone') { + $parts = explode('=',$row); + $key = trim($parts[0]); + $val = trim($parts[1]); + if($key != '') $vars[$key] = $val; + } + // Handle DNS Record rows + if($section == 'dns_records') { + $parts = explode('|',$row); + $dns_rr[] = array( + 'name' => $app->db->quote($parts[1]), + 'type' => $app->db->quote($parts[0]), + 'data' => $app->db->quote($parts[2]), + 'aux' => $app->db->quote($parts[3]), + 'ttl' => $app->db->quote($parts[4]) + ); + } + } + } + + } // end foreach + + if($vars['origin'] == '') $error .= $app->lng('error_origin_empty'); + if($vars['ns'] == '') $error .= $app->lng('error_ns_empty'); + if($vars['mbox'] == '') $error .= $app->lng('error_mbox_empty'); + if($vars['refresh'] == '') $error .= $app->lng('error_refresh_empty'); + if($vars['retry'] == '') $error .= $app->lng('error_retry_empty'); + if($vars['expire'] == '') $error .= $app->lng('error_expire_empty'); + if($vars['minimum'] == '') $error .= $app->lng('error_minimum_empty'); + if($vars['ttl'] == '') $error .= $app->lng('error_ttl_empty'); + + if($error == '') { + // Insert the soa record + $sys_userid = $_SESSION['s']['user']['userid']; + $origin = $app->db->quote($vars['origin']); + $ns = $app->db->quote($vars['ns']); + $mbox = $app->db->quote(str_replace('@','.',$vars['mbox'])); + $refresh = $app->db->quote($vars['refresh']); + $retry = $app->db->quote($vars['retry']); + $expire = $app->db->quote($vars['expire']); + $minimum = $app->db->quote($vars['minimum']); + $ttl = $app->db->quote($vars['ttl']); + + $insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `origin`, `ns`, `mbox`, `serial`, `refresh`, `retry`, `expire`, `minimum`, `ttl`, `active`, `xfer`) VALUES + ('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$origin', '$ns', '$mbox', '1', '$refresh', '$retry', '$expire', '$minimum', '$ttl', 'Y', '')"; + $dns_soa_id = $app->db->datalogInsert('dns_soa', $insert_data, 'id'); + + // Insert the dns_rr records + if(is_array($dns_rr) && $dns_soa_id > 0) { + foreach($dns_rr as $rr) { + $insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `zone`, `name`, `type`, `data`, `aux`, `ttl`, `active`) VALUES + ('$sys_userid', '$sys_groupid', 'riud', 'riud', '', '$server_id', '$dns_soa_id', '$rr[name]', '$rr[type]', '$rr[data]', '$rr[aux]', '$rr[ttl]', 'Y')"; + $dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id'); + } + } + + header("Location: dns_soa_list.php"); + exit; + + } else { + $app->tpl->setVar("error",$error); + } + +} + + + +$app->tpl->setVar("title",'DNS Wizard'); + +$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dns_wizard.lng'; +include($lng_file); +$app->tpl->setVar($wb); + +$app->tpl_defaults(); +$app->tpl->pparse(); + + +?> \ No newline at end of file diff --git a/interface/web/dns/form/dns_template.tform.php b/interface/web/dns/form/dns_template.tform.php new file mode 100644 index 0000000000000000000000000000000000000000..f40b5336a0bdf3b47bd90d5fa93f905e900c0b51 --- /dev/null +++ b/interface/web/dns/form/dns_template.tform.php @@ -0,0 +1,101 @@ + 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"]['template'] = array ( + 'title' => "DNS Template", + 'width' => 100, + 'template' => "templates/dns_template_edit.htm", + 'fields' => array ( + ################################## + # Begin Datatable fields + ################################## + 'name' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'name_error_empty'), + ), + 'default' => '', + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), + 'fields' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOXARRAY', + 'default' => '', + 'separator' => ',', + 'value' => array('DOMAIN' => 'Domain','IP' => 'IP Address','NS1' => 'NS 1','NS2' => 'NS 2','EMAIL' => 'Email') + ), + 'template' => array ( + 'datatype' => 'TEXT', + 'formtype' => 'TEXTAREA', + 'default' => '', + 'value' => '', + 'cols' => '40', + 'rows' => '15' + ), + 'visible' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n',1 => 'y') + ), + ################################## + # ENDE Datatable fields + ################################## + ) +); + + + +?> \ No newline at end of file diff --git a/interface/web/dns/lib/lang/en_dns_template.lng b/interface/web/dns/lib/lang/en_dns_template.lng new file mode 100644 index 0000000000000000000000000000000000000000..78cc34d544e0faace78de3d27b8f923cf5b2c888 --- /dev/null +++ b/interface/web/dns/lib/lang/en_dns_template.lng @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/interface/web/dns/lib/lang/en_dns_template_list.lng b/interface/web/dns/lib/lang/en_dns_template_list.lng new file mode 100644 index 0000000000000000000000000000000000000000..26781e977fc9be6c2362bc4b1ca10664b0283ae1 --- /dev/null +++ b/interface/web/dns/lib/lang/en_dns_template_list.lng @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/interface/web/dns/lib/lang/en_dns_wizard.lng b/interface/web/dns/lib/lang/en_dns_wizard.lng new file mode 100644 index 0000000000000000000000000000000000000000..251f85034f65a25f4a0fd26256b5925a1adb88cc --- /dev/null +++ b/interface/web/dns/lib/lang/en_dns_wizard.lng @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/interface/web/dns/lib/module.conf.php b/interface/web/dns/lib/module.conf.php index 41e6d058fdc20d771f8e1092e73337bca5dcde2f..d233ba271ca852f97cec214cbb5784f473b3ba95 100644 --- a/interface/web/dns/lib/module.conf.php +++ b/interface/web/dns/lib/module.conf.php @@ -24,4 +24,33 @@ $items[] = array( 'title' => "A-Records", $module["nav"][] = array( 'title' => 'DNS', 'open' => 1, 'items' => $items); + +unset($items); + + +$items[] = array( 'title' => "Add DNS Zone", + 'target' => 'content', + 'link' => 'dns/dns_wizard.php'); + + +$items[] = array( 'title' => "Templates", + 'target' => 'content', + 'link' => 'dns/dns_template_list.php'); + + + +$module["nav"][] = array( 'title' => 'DNS Wizard', + 'open' => 1, + 'items' => $items); + + + + + + + + + + + ?> \ No newline at end of file diff --git a/interface/web/dns/list/dns_template.list.php b/interface/web/dns/list/dns_template.list.php new file mode 100644 index 0000000000000000000000000000000000000000..ca34596f6e143d0b47350e38d8c801ad8c1d3937 --- /dev/null +++ b/interface/web/dns/list/dns_template.list.php @@ -0,0 +1,80 @@ + "visible", + 'datatype' => "VARCHAR", + 'formtype' => "SELECT", + 'op' => "=", + 'prefix' => "", + 'suffix' => "", + 'width' => "", + 'value' => array('y' => "
Yes
",'n' => "
No
")); + + +$liste["item"][] = array( 'field' => "name", + 'datatype' => "VARCHAR", + 'formtype' => "TEXT", + 'op' => "like", + 'prefix' => "%", + 'suffix' => "%", + 'width' => "", + 'value' => ""); + + + + + + + + + + + +?> \ No newline at end of file diff --git a/interface/web/dns/templates/dns_template_edit.htm b/interface/web/dns/templates/dns_template_edit.htm new file mode 100644 index 0000000000000000000000000000000000000000..d6d387d66c2740dd5f7c74a7eae32fddcb21151a --- /dev/null +++ b/interface/web/dns/templates/dns_template_edit.htm @@ -0,0 +1,35 @@ +

+ +
+ +
+
DNS Template + + + + + + {tmpl_var name='fields_txt'}
+ {tmpl_var name='fields'} +
+
+ + + + + + + {tmpl_var name='visible'} + + +
+ + + +
+ + +
+
+ +
diff --git a/interface/web/dns/templates/dns_template_list.htm b/interface/web/dns/templates/dns_template_list.htm new file mode 100644 index 0000000000000000000000000000000000000000..c19a04b19e13c27b4752e6945bb759daf6399d33 --- /dev/null +++ b/interface/web/dns/templates/dns_template_list.htm @@ -0,0 +1,52 @@ +

+ +
+ +
+
Tools +
+ +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
{tmpl_var name="visible"}{tmpl_var name="name"} + +
+
+
+ +
diff --git a/interface/web/dns/templates/dns_wizard.htm b/interface/web/dns/templates/dns_wizard.htm new file mode 100644 index 0000000000000000000000000000000000000000..42fce51cd6bdff1181cea2fbec5ed301d4406a90 --- /dev/null +++ b/interface/web/dns/templates/dns_wizard.htm @@ -0,0 +1,62 @@ +

+ +
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+ +