예제 #1
0
 function form_zone()
 {
     global $construct, $db, $vars;
     $form_zone = new form(array('FORM_NAME' => 'form_zone'));
     $form_zone->db_data((get('zone') == 'add' ? 'dns_zones.name, dns_zones.info, ' : '') . 'dns_zones_nameservers.nameserver_id');
     if (get('zone') == 'add') {
         if (get('type') == 'reverse') {
             $ipr = $db->get("ip_start, ip_end", "ip_ranges", "node_id = " . intval(get('node')));
             foreach ((array) $ipr as $key => $value) {
                 $ipr[$key]['ip_start'] = long2ip($value['ip_start']);
                 $ipr[$key]['ip_end'] = long2ip($value['ip_end']);
                 $ipr[$key]['value'] = reverse_zone_from_ip($ipr[$key]['ip_start']);
                 $ipr[$key]['output'] = $ipr[$key]['value'] . " [" . $ipr[$key]['ip_start'] . ' - ' . $ipr[$key]['ip_end'] . "]";
             }
             $form_zone->db_data_enum('dns_zones.name', $ipr);
         } else {
             $form_zone->data[0]['value'] = $db->get('name_ns', 'nodes', "id = " . intval(get('node')));
             $form_zone->data[0]['value'] = $form_zone->data[0]['value'][0]['name_ns'];
             $form_zone->data[0]['value'] .= "." . $vars['dns']['root_zone'];
         }
     }
     $form_zone->db_data_pickup("dns_zones_nameservers.nameserver_id", "dns_nameservers", $db->get('dns_nameservers.id AS value, ' . 'CONCAT(dns_nameservers.name, ".", nodes.name_ns, ".", "' . $vars['dns']['ns_zone'] . '") AS output', "dns_zones_nameservers, dns_nameservers, nodes", "dns_nameservers.node_id = nodes.id AND dns_nameservers.id = dns_zones_nameservers.nameserver_id AND dns_zones_nameservers.zone_id = '" . get('zone') . "'", "", "dns_zones_nameservers.id ASC"), TRUE);
     return $form_zone;
 }
예제 #2
0
 function output_onpost_form_zone()
 {
     global $construct, $main, $db, $vars;
     if (substr($_POST['dns_zones__name'], -strlen($vars['dns']['root_zone']) - 1) == "." . $vars['dns']['root_zone']) {
         $_POST['dns_zones__name'] = substr($_POST['dns_zones__name'], 0, -strlen($vars['dns']['root_zone']) - 1);
     }
     $_POST['dns_zones__name'] = validate_zone($_POST['dns_zones__name']);
     $form_zone = $this->form_zone();
     $ret = TRUE;
     $f = array();
     if (get('zone') == 'add') {
         if ($_POST['dns_zones__name'] == '') {
             if (is_null($_POST['dns_zones__name'])) {
                 $main->message->set_fromlang('error', 'zone_invalid_name');
             } else {
                 $db->output_error_fields_required(array('dns_zones__name'));
             }
             return;
         }
         switch (get('type')) {
             case 'forward':
                 if ($_POST['dns_zones__name'] . '.' . $vars['dns']['root_zone'] == $vars['dns']['ns_zone']) {
                     $main->message->set_fromlang('error', 'zone_reserved_name');
                     return;
                 }
                 break;
             case 'reverse':
                 $iprange = $db->get("ip_start, ip_end", "ip_ranges", "node_id = " . intval(get('node')));
                 foreach ((array) $iprange as $value) {
                     if (reverse_zone_from_ip(long2ip($value['ip_start'])) == $_POST['dns_zones__name']) {
                         $valid = TRUE;
                         break;
                     }
                 }
                 if (!$valid) {
                     $main->message->set_fromlang('error', 'zone_out_of_range');
                     return;
                 }
                 break;
             default:
                 $main->message->set_fromlang('error', 'generic');
                 return;
         }
         $f = array('dns_zones.status' => 'waiting', 'dns_zones.type' => get('type'), "dns_zones.node_id" => intval(get('node')));
         $ret = $form_zone->db_set($f, "dns_zones", "id", get('zone'));
     }
     $ins_id = get('zone') == 'add' ? $db->insert_id : get('zone');
     $ret = $ret && $form_zone->db_set_multi(array(), "dns_zones_nameservers", "zone_id", $ins_id);
     if ($ret) {
         $main->message->set_fromlang('info', get('zone') == 'add' ? 'request_dnszone_success' : 'edit_success', make_ref('/node_editor', array("node" => intval(get('node')))));
     } else {
         $main->message->set_fromlang('error', 'generic');
     }
 }