AppendObject(new BS_Alert("Successfully inserted record " . $record . "." . $zone)); } else if ($_POST["submit"] == "Edit") { if (!isset($_POST["old"])) Error("Missing old record necessary for update"); if (DNS_ModifyRecord($zone, $record, $value, $type, $ttl, $comment, $_POST["old"])) { $form->AppendObject(new BS_Alert("Successfully replaced " . $_POST["old"] . " with " . $record . "." . $zone . " " . $ttl . " " . $type . " " . $value)); } // Delete PTR if wanted if (isset($_POST['ptr']) && $_POST['ptr'] === "true") { if (isset($_POST["old_type"]) && $_POST["old_type"] == "A") { // Check if all necessary values are present if (!isset($_POST["old_value"]) || !isset($_POST["old_record"])) { DisplayWarning("PTR record was not deleted, because old_record or old_value was missing"); } else { DNS_DeletePTRForARecord($_POST["old_value"], $_POST["old_record"], $comment); } } else { Debug("Not removing PTR, original type was " . $_POST["old_type"]); } } } else { Error("Unknown modify mode"); } // Create PTR if wanted if (isset($_POST['ptr']) && $_POST['ptr'] === "true") { if ($type !== "A") { DisplayWarning('PTR record was not created: PTR record can be only created when you are inserting A record, you created ' . $type . ' record instead'); return; } DNS_InsertPTRForARecord($value, $record . '.' . $zone, $ttl, $comment); } } public static function GetInsertForm($parent, $edit_mode = false, $default_key = "", $default_ttl = NULL, $default_type = "A", $default_value = "", $default_comment = "") { global $g_audit, $g_selected_domain, $g_domains, $g_editable, $g_default_ttl; // In case we are returning to insert form from previous insert, make default type the one we used before if (isset($_POST['type'])) $default_type = $_POST['type']; else if (isset($_GET['type'])) $default_type = $_GET['type']; else if (psf_string_endsWith($g_selected_domain, ".in-addr.arpa")) $default_type = "PTR"; // Reuse some values from previous POST request if (isset($_POST['comment'])) $default_comment = $_POST['comment']; // If ttl is not specified use default one from config file if ($default_ttl === NULL) $default_ttl = strval($g_default_ttl); $form = new Form("index.php?action=new", $parent); $form->Method = FormMethod::Post; $layout = new HtmlTable($form); $layout->BorderSize = 0; $layout->ColWidth[4] = '40%'; $layout->Headers = [ "Record", "Zone", "TTL", "Type", "Value" ]; if ($g_audit) $layout->Headers[] = 'Comment'; $form_items = []; $form_items[] = new BS_TextBox("record", $default_key, NULL, $layout); $dl = new ComboBox("zone", $layout); if ($edit_mode) { if ($g_selected_domain === NULL) { Error("No domain selected"); } $dl->AddDefaultValue($g_selected_domain, "." . $g_selected_domain); $dl->Enabled = false; } else { foreach ($g_domains as $key => $info) { if (!IsAuthorizedToWrite($key)) continue; if ($g_selected_domain == $key) $dl->AddDefaultValue($key, "." . $key); else $dl->AddValue($key, '.' . $key); } } $form_items[] = $dl; $form_items[] = new BS_TextBox("ttl", $default_ttl, NULL, $layout); $tl = new ComboBox("type", $layout); $types = $g_editable; foreach ($types as $type) { if ($default_type == $type) $tl->AddDefaultValue($type); else $tl->AddValue($type); } $form_items[] = $tl; $value_box = new BS_TextBox("value", $default_value, NULL, $layout); $value_box->Size = 45; $form_items[] = $value_box; if ($g_audit) { $comment = new BS_TextBox("comment", $default_comment, NULL, $layout); $comment->Placeholder = 'Optional comment for audit log'; $comment->Size = 80; $form_items[] = $comment; } $layout->AppendRow($form_items); if (Zones::HasPTRZones()) { if (!$edit_mode) $form->AppendObject(new BS_CheckBox("ptr", "true", false, NULL, $form, "Create PTR record for this IP (works only with A records)")); else $form->AppendObject(new BS_CheckBox("ptr", "true", false, NULL, $form, "Modify underlying PTR records (works only if original, new or both values are A records)")); } if (isset($_GET["old"])) $form->AppendObject(new Hidden("old", htmlspecialchars($_GET["old"]))); if ($edit_mode) { // Preserve old values, we need to work with them when modifying PTR records $form->AppendObject(new Hidden("old_record", htmlspecialchars($_GET["key"]))); $form->AppendObject(new Hidden("old_ttl", htmlspecialchars($default_ttl))); $form->AppendObject(new Hidden("old_type", htmlspecialchars($default_type))); $form->AppendObject(new Hidden("old_value", htmlspecialchars($default_value))); $form->AppendObject(new BS_Button("submit", "Edit")); } else { $form->AppendObject(new BS_Button("submit", "Create")); } return $form; } public static function GetEditForm($parent) { global $g_selected_domain; $k = $_GET["key"]; $suffix = $g_selected_domain; if (psf_string_endsWith($k, $suffix)) $k = substr($k, 0, strlen($k) - strlen($suffix)); if (psf_string_endsWith($k, $suffix . ".")) $k = substr($k, 0, strlen($k) - strlen($suffix) - 1); while (psf_string_endsWith($k, ".")) $k = substr($k, 0, strlen($k) - 1); return self::GetInsertForm($parent, true, $k, $_GET["ttl"], $_GET["type"], $_GET["value"]); } }