<?php
$TABLE 
= $_GET["edit"];
$fields = fields($TABLE);
$where = (isset($_GET["select"]) ? ($_POST["check"] && count($_POST["check"]) == 1 ? where_check($_POST["check"][0], $fields) : "") : where($_GET, $fields));
$update = (isset($_GET["select"]) ? $_POST["edit"] : $where);
foreach (
$fields as $name => $field) {
    if (!isset(
$field["privileges"][$update ? "update" : "insert"]) || $adminer->fieldName($field) == "" || $field["generated"]) {
        unset(
$fields[$name]);
    }
}

if (
$_POST && !$error && !isset($_GET["select"])) {
    
$location = $_POST["referer"];
    if (
$_POST["insert"]) { // continue edit or insert
        
$location = ($update ? null : $_SERVER["REQUEST_URI"]);
    } elseif (!
preg_match('~^.+&select=.+$~', $location)) {
        
$location = ME . "select=" . urlencode($TABLE);
    }

    
$indexes = indexes($TABLE);
    
$unique_array = unique_array($_GET["where"], $indexes);
    
$query_where = "\nWHERE $where";

    if (isset(
$_POST["delete"])) {
        
queries_redirect(
            
$location,
            
lang('Item has been deleted.'),
            
$driver->delete($TABLE, $query_where, !$unique_array)
        );

    } else {
        
$set = array();
        foreach (
$fields as $name => $field) {
            
$val = process_input($field);
            if (
$val !== false && $val !== null) {
                
$set[idf_escape($name)] = $val;
            }
        }

        if (
$update) {
            if (!
$set) {
                
redirect($location);
            }
            
queries_redirect(
                
$location,
                
lang('Item has been updated.'),
                
$driver->update($TABLE, $set, $query_where, !$unique_array)
            );
            if (
is_ajax()) {
                
page_headers();
                
page_messages($error);
                exit;
            }
        } else {
            
$result = $driver->insert($TABLE, $set);
            
$last_id = ($result ? last_id() : 0);
            
queries_redirect($location, lang('Item%s has been inserted.', ($last_id ? " $last_id" : "")), $result); //! link
        
}
    }
}

$row = null;
if (
$_POST["save"]) {
    
$row = (array) $_POST["fields"];
} elseif (
$where) {
    
$select = array();
    foreach (
$fields as $name => $field) {
        if (isset(
$field["privileges"]["select"])) {
            
$as = convert_field($field);
            if (
$_POST["clone"] && $field["auto_increment"]) {
                
$as = "''";
            }
            if (
$jush == "sql" && preg_match("~enum|set~", $field["type"])) {
                
$as = "1*" . idf_escape($name);
            }
            
$select[] = ($as ? "$as AS " : "") . idf_escape($name);
        }
    }
    
$row = array();
    if (!
support("table")) {
        
$select = array("*");
    }
    if (
$select) {
        
$result = $driver->select($TABLE, $select, array($where), $select, array(), (isset($_GET["select"]) ? 2 : 1));
        if (!
$result) {
            
$error = error();
        } else {
            
$row = $result->fetch_assoc();
            if (!
$row) { // MySQLi returns null
                
$row = false;
            }
        }
        if (isset(
$_GET["select"]) && (!$row || $result->fetch_assoc())) { // $result->num_rows != 1 isn't available in all drivers
            
$row = null;
        }
    }
}

if (!
support("table") && !$fields) {
    if (!
$where) { // insert
        
$result = $driver->select($TABLE, array("*"), $where, array("*"));
        
$row = ($result ? $result->fetch_assoc() : false);
        if (!
$row) {
            
$row = array($driver->primary => "");
        }
    }
    if (
$row) {
        foreach (
$row as $key => $val) {
            if (!
$where) {
                
$row[$key] = null;
            }
            
$fields[$key] = array("field" => $key, "null" => ($key != $driver->primary), "auto_increment" => ($key == $driver->primary));
        }
    }
}

edit_form($TABLE, $fields, $row, $update);