Ejemplo n.º 1
0
function sync_table($src, $dst, $cond = array(), $transl = "", $modes = array("INSERT", "UPDATE", "DELETE"))
{
    global $SYNC_STATUS;
    global $SCHEMA;
    global $ERROR;
    global $debug;
    $tdef = $SCHEMA[$src];
    $version = _db_extfield($src, "version");
    $limit = @$SYNC_STATUS[$src][$dst];
    if ($limit) {
        $cond["{$version} >"] = $limit;
    }
    $qstruct = array("TABLE" => $src, "FIELD" => array(), "COND" => $cond, "ORDER" => "", "START" => 0, "COUNT" => 0);
    $databases = array();
    $q2 = _db_mangle_query($databases, $qstruct);
    // currently only 1 database supported
    $database = key($databases);
    $query = _db_make_query($database, $subqs, $q2);
    $env = array("DB" => $database, "ARG" => $subqs, "CB_PROCESS" => "_sync_cb_table", "SRC" => $src, "DST" => $dst, "TRANSL" => $transl, "MODES" => $modes, "version" => $version, "MAXTIME" => $limit);
    $ok = _db_multiquery($env, false, $query, array("_db_cb_process_data"));
    if (!$ok) {
        if (!$ERROR) {
            $ERROR = "unknown sync error";
        }
        if ($debug) {
            echo "sync oops............................ {$ERROR} <br>\n";
        }
        return false;
    }
    $SYNC_STATUS[$src][$dst] = $env["MAXTIME"];
    return true;
}
Ejemplo n.º 2
0
function _db_prepare_data($table, $data)
{
    global $SCHEMA;
    global $USER;
    global $FROM;
    $version = _db_extfield($table, "version");
    $modified_from = _db_extfield($table, "modified_from");
    $modified_by = _db_extfield($table, "modified_by");
    $newdata = array();
    foreach ($data as $idx => $row) {
        $newrow = $row;
        // initialize "automatic" fields
        $newrow[$version] = null;
        $newrow[$modified_from] = $FROM;
        $newrow[$modified_by] = $USER;
        foreach ($row as $field => $value) {
            // handle splitted fields
            $fdef = @$SCHEMA[$table]["FIELDS"][$field];
            if (($extra = @$fdef["DATA_SPLIT"]) && is_array($value)) {
                $delim = $extra[0];
                $key = $extra[1];
                $newarray = array();
                foreach ($value as $rec) {
                    $newarray[] = $rec[$key];
                }
                $newrow[$field] = implode($delim, $newarray);
            }
            // callbacks for conversion
            if ($cb = @$fdef["CB_CONV_WRITE"]) {
                $newrow[$field] = $cb($table, $field, $newrow[$field]);
            }
        }
        $newdata[$idx] = $newrow;
    }
    return $newdata;
}
Ejemplo n.º 3
0
if (!$TOOL["order"]) {
    $TOOL["order"] = _db_primary($table);
}
if (!$TOOL["tool_page_start"]) {
    $TOOL["tool_page_start"] = 1;
}
if (!$TOOL["tool_page_size"]) {
    $TOOL["tool_page_size"] = 100;
}
if (!isset($_REQUEST["tool_level"])) {
    $TOOL["tool_level"] = 1;
}
$tp_table = $table;
if (@$_REQUEST["tool_history"]) {
    $tp_table = _db_2temporal($table);
    $version = _db_extfield($table, "version");
    $TOOL["order"] .= ",{$version}";
}
////////////////////////////////////////////////////////////////////
function app_get_templates()
{
    global $BASEDIR;
    global $CONFIG;
    global $USER;
    global $PERM;
    global $debug;
    global $LANGUAGE;
    if (!@$LANGUAGE) {
        $LANGUAGE = "generic_generic.php";
    }
    $lang = $LANGUAGE;
Ejemplo n.º 4
0
function _mysql_make_update_tp(&$stack, $qstruct, &$cb_list)
{
    global $ERROR;
    $mode = $qstruct["MODE"];
    if ($mode == "DELETE") {
        // this need not depend on $qstruct["DATA"]
        return _mysql_make_delete_tp($stack, $qstruct, $cb_list);
    }
    $res = "";
    $table = $qstruct["TABLE"];
    $realtable = _db_realname($table);
    $realtable_tp = _db_2temporal($realtable);
    $autoinc = _db_autoinc($table);
    $version = _db_version($table);
    $deleted = _db_extfield($table, "deleted");
    $fields = implode(", ", _db_realname($table, $qstruct["ALL_FIELDS"]));
    $count = 0;
    foreach ($qstruct["DATA"] as $row) {
        $idcond = _mysql_make_idcond_base($qstruct, $row);
        if ($count++) {
            $res .= "; ";
        }
        //$res .= "replace into $realtable_tp($fields) ";
        $res .= "insert into {$realtable_tp}({$fields}) ";
        $where = _mysql_make_idwhere($qstruct, $row);
        if ($ERROR) {
            return null;
        }
        $newdata = "";
        $rowcount = 0;
        $oldcount = 0;
        foreach ($qstruct["ALL_FIELDS"] as $field) {
            $realfield = _db_realname($table, $field);
            if ($rowcount++) {
                $newdata .= ", ";
            }
            if ($field == $deleted) {
                $row[$field] = false;
            }
            if ($mode == "INSERT" && $field == $autoinc || $field == $version) {
                // give AUTO_INCREMENT / versioning a chance
                $newdata .= "null";
            } elseif (array_key_exists($field, $row) && in_array($field, $qstruct["UPDATE_FIELDS"])) {
                // take new value
                $value = @$row[$field];
                if ($field == $autoinc && $mode == "INSERT") {
                    $value = null;
                }
                if (!@$qstruct["RAW_MODE"] && !_mysql_check_allref($stack, $table, $field, $value, $mode, $idcond)) {
                    return null;
                }
                $newdata .= db_esc_sql($value);
            } elseif ($mode == "REPLACE") {
                // caution: we cannot be sure that the data already exists, handle that case
                $newdata .= "case when exists(select {$realfield} from {$realtable} where {$where}) then (select max({$realfield}) from {$realtable} where {$where}) else null end";
            } else {
                // fallback to old value from the db
                $oldcount++;
                $newdata .= $realfield;
            }
        }
        if ($mode == "REPLACE") {
            $res .= "select {$newdata}";
        } elseif (($oldcount || $mode == "UPDATE") && $mode != "INSERT") {
            $res .= "select {$newdata} from {$realtable} where {$where}";
        } else {
            $res .= "values ({$newdata})";
        }
        $cb_list[] = $qstruct["CB"];
    }
    return $res;
}
Ejemplo n.º 5
0
function _db_version($table, $MYSCHEMA = null)
{
    if (@$MYSCHEMA[$table]["FIELDNAME_VERSION"]) {
        return $MYSCHEMA[$table]["FIELDNAME_VERSION"];
    }
    return _db_extfield($table, "version", $MYSCHEMA);
}