load('tform_actions'); class page_action extends tform_actions { function onDelete() { global $app, $conf; $app->uses('tform'); if(!$rr = $app->db->queryOneRecord("SELECT * FROM rr WHERE id = ".$_REQUEST['id']." AND ".$app->tform->getAuthSQL('d'))) $app->error($app->lng('error_no_permission')); //$rr = $app->db->queryOneRecord("SELECT * FROM rr WHERE id = ".$_REQUEST['id']); $zone_id = $rr['zone']; // update serial $soa = $app->db->queryOneRecord("SELECT * FROM soa WHERE id = ".$zone_id); $serial = $soa['serial']; $update = 1; if($update > 0){ $serial_date = substr($serial, 0, 8); $count = intval(substr($serial, 8, 2)); $current_date = date("Ymd"); if($serial_date == $current_date){ $count += 1; $count = str_pad($count, 2, "0", STR_PAD_LEFT); $new_serial = $current_date.$count; } else { $new_serial = $current_date.'01'; } $app->db->query("UPDATE soa SET serial = '".$new_serial."' WHERE id = ".$zone_id); } // PTR if($conf['auto_create_ptr'] == 1 && trim($conf['default_ns']) != '' && trim($conf['default_mbox']) != ''){ if($rr['type'] == 'A' || $rr['type'] == 'AAAA'){ list($a, $b, $c, $d) = explode('.', $rr['data']); $ptr_soa = $c.'.'.$b.'.'.$a.'.in-addr.arpa.'; if(substr($rr['name'], -1) == '.'){ $ptr_soa_rr_data = $rr['name']; } else { $ptr_soa_rr_data = $rr['name'].(trim($rr['name']) == '' ? '' : '.').$soa['origin']; } if($ptr_soa_exist = $app->db->queryOneRecord("SELECT * FROM soa WHERE origin = '".$ptr_soa."'")){ if($ptr_soa_rr_exist = $app->db->queryOneRecord("SELECT * FROM rr WHERE zone = '".$ptr_soa_exist['id']."' AND name = '".$d."' AND type = 'PTR' AND data = '".$ptr_soa_rr_data."'")){ $app->db->query("DELETE FROM rr WHERE id = ".$ptr_soa_rr_exist['id']); // is there another A/AAAA record with that IP address? if($other_rr = $app->db->queryOneRecord("SELECT * FROM rr WHERE (type = 'A' OR type = 'AAAA') AND data = '".$rr['data']."' AND id != ".$rr['id'])){ $other_soa = $app->db->queryOneRecord("SELECT * FROM soa WHERE id = ".$other_rr['zone']); if(substr($other_rr['name'], -1) == '.'){ $other_ptr_soa_rr_data = $other_rr['name']; } else { $other_ptr_soa_rr_data = $other_rr['name'].(trim($other_rr['name']) == '' ? '' : '.').$other_soa['origin']; } $app->db->query("INSERT INTO rr (zone, name, type, data, aux, ttl, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other) VALUES ('".$ptr_soa_exist['id']."', '".$d."', 'PTR', '".$other_ptr_soa_rr_data."', '0', '".$conf['default_ttl']."', '".$_SESSION['s']['user']['sys_userid']."', '".$_SESSION['s']['user']['sys_groupid']."', '".$_SESSION['s']['user']['sys_perm_user']."', '".$_SESSION['s']['user']['sys_perm_group']."', '".$_SESSION['s']['user']['sys_perm_other']."')"); } // if no more records exist for the ptr_soa, delete it if(!$ptr_soa_rr = $app->db->queryOneRecord("SELECT * FROM rr WHERE zone = '".$ptr_soa_exist['id']."'")){ $app->db->query("DELETE FROM soa WHERE id = ".$ptr_soa_exist['id']); } else { // increment serial $serial_date = substr($ptr_soa_exist['serial'], 0, 8); $count = intval(substr($ptr_soa_exist['serial'], 8, 2)); $current_date = date("Ymd"); if($serial_date == $current_date){ $count += 1; $count = str_pad($count, 2, "0", STR_PAD_LEFT); $new_serial = $current_date.$count; } else { $new_serial = $current_date.'01'; } $app->db->query("UPDATE soa SET serial = '".$new_serial."' WHERE id = ".$ptr_soa_exist['id']); } } } } } parent::onDelete(); } } $app->tform_actions = new page_action; $app->tform_actions->onDelete(); ?>