Example #1
0
function sys_process_schema_request()
{
    $defaults = folder_get_default_values($GLOBALS["t"]["folder"]);
    if (!empty($_REQUEST["defaults"])) {
        $defaults = array_merge(json_decode($_REQUEST["defaults"], true), $defaults);
    }
    if (empty($GLOBALS["t"]["fields"])) {
        return;
    }
    foreach (array_keys($GLOBALS["t"]["fields"]) as $key) {
        $field =& $GLOBALS["t"]["fields"][$key];
        if (isset($field["SIMPLE_DEFAULT_FUNCTION"])) {
            list($class, $function, $params) = sys_find_callback("modify", $field["SIMPLE_DEFAULT_FUNCTION"]);
            $field["SIMPLE_DEFAULT"] = call_user_func(array($class, $function), $params);
        }
        if (isset($defaults[$key])) {
            $field["SIMPLE_DEFAULT"] = $defaults[$key];
        }
        if (empty($field["DATA"])) {
            continue;
        }
        foreach ($field["DATA"] as $vkey => $val) {
            if (!isset($val["_FUNCTION_"])) {
                continue;
            }
            list($class, $function, $params) = sys_find_callback("select", $val["_FUNCTION_"]);
            $result = call_user_func(array($class, $function), $params, array(), true);
            if (!empty($result["_ticket_"])) {
                $field["SIMPLE_LOOKUP"][$vkey] = array("ticket" => $result["_ticket_"], "schema" => $result["_params_"][1], "overload" => isset($result["_overload_"]));
                $_SESSION["tickets"][$result["_ticket_"]] = $result["_params_"];
                unset($result["_ticket_"]);
                unset($result["_params_"]);
                unset($result["_overload_"]);
            }
            $field["DATA"][$vkey] = $result;
        }
    }
}
Example #2
0
 private static function _copy($ccp, $folder, $sgsml, $delete)
 {
     $tname = $sgsml->tname;
     $vars = array("handler" => $ccp["handler"], "sqlvarsnoquote" => $ccp["vars_noquote"], "custom_name" => $ccp["custom_name"], "default_sql" => $ccp["default_sql"]);
     $rows = db_select($ccp["tname"], $ccp["data_fields"], $ccp["where"], "", "", array("item" => $ccp["items"], "folder" => $ccp["folder"], "folders" => $ccp["folders"]), $vars);
     if (is_array($rows) and count($rows) < count($ccp["items"])) {
         exit("{t}Item(s) not found or access denied.{/t}");
     }
     foreach (self::_get_mappings("->") as $mapping) {
         if (!strpos($mapping[1], "=")) {
             continue;
         }
         $mapping[1] = explode(".", $mapping[1]);
         if ("simple_" . $mapping[0] == $ccp["tname"] and "simple_" . $mapping[1][0] == $tname) {
             $sgsml->patch_fields(array_slice($mapping[1], 1));
         }
     }
     $mappings = array();
     foreach (self::_get_mappings("|") as $mapping) {
         if (strpos($mapping[0], "->")) {
             continue;
         }
         $mapping1 = explode(".", $mapping[0]);
         $mapping2 = explode(".", $mapping[1]);
         $key = "simple_" . $mapping1[0] . ".simple_" . $mapping2[0];
         $mappings[$key][$mapping2[1]] = $mapping1[1];
         $key = "simple_" . $mapping2[0] . ".simple_" . $mapping1[0];
         $mappings[$key][$mapping1[1]] = $mapping2[1];
     }
     $default_values = folder_get_default_values($folder);
     $messages = array();
     foreach ($rows as $row) {
         if (empty($row["folder"]) or !db_get_right($row["folder"], "read")) {
             continue;
         }
         if (isset($mappings[$ccp["tname"] . "." . $tname])) {
             foreach ($mappings[$ccp["tname"] . "." . $tname] as $to => $from) {
                 $row[$to] = $row[$from];
             }
         }
         $row = array_merge($row, $default_values);
         foreach (array_keys($row) as $key) {
             if (!isset($sgsml->fields[$key])) {
                 unset($row[$key]);
                 continue;
             }
             $field = $sgsml->fields[$key];
             if ((isset($field["KEY"]) or isset($field["IS_UNIQUE"])) and !empty($row[$key]) and !isset($field["READONLYIN"])) {
                 $val = $row[$key];
                 $step = 1;
                 while ($step < 100 and validate::itemexists($tname, array($key => $val), -1) != "") {
                     $step++;
                     $val = $row[$key] . "_" . $step;
                 }
                 $row[$key] = $val;
             }
             if (isset($field["RESTORE"])) {
                 $row[$key] = self::_restore_value($row, $key, $field["RESTORE"]);
             }
         }
         $id = $row["id"];
         $row["id"] = -1;
         $row["folder"] = $folder;
         if (isset($row["syncid"])) {
             $row["syncid"] = "";
         }
         $newfiles = array();
         if (is_array($ccp["file_fields"]) and count($ccp["file_fields"]) > 0) {
             foreach ($ccp["file_fields"] as $file_field) {
                 if (!empty($row[$file_field])) {
                     $data_files = explode("|", trim($row[$file_field], "|"));
                     $row[$file_field] = array();
                     foreach ($data_files as $file) {
                         if (!file_exists($file)) {
                             continue;
                         }
                         $target = self::_paste_item_copyfile($file, $row["id"], $tname);
                         $row[$file_field][] = $target;
                         $newfiles[] = $target;
                     }
                     $row[$file_field] = implode("|", $row[$file_field]);
                 }
             }
         }
         if (!empty($sgsml->att["DISABLE_TRIGGER_CCP"])) {
             unset($sgsml->att["TRIGGER_NEW"]);
         }
         $result = $sgsml->insert($row);
         if (!is_numeric($result)) {
             if (is_array($result) and count($result) > 0) {
                 $message = "{t}Error pasting asset{/t}:";
                 foreach ($result as $field => $errors) {
                     foreach ($errors as $error) {
                         $message .= "\n" . $error[0] . ": " . $error[1];
                     }
                 }
             } else {
                 $message = $result;
             }
             $messages[] = $message;
         } else {
             if ($delete) {
                 asset::delete_items($ccp["folder"], "display", array($id), $ccp["delete_mode"]);
             }
             sys_log_stat("copied_records", 1);
         }
         foreach ($newfiles as $file) {
             if (sys_strbegins($file, SIMPLE_CACHE . "/upload/")) {
                 @unlink($file);
             }
         }
     }
     return $messages;
 }