} // Update data source if ($command === "Create") { $item = new SMKeyValueCollection(); foreach ($props as $prop => $val) { if (isset($dsDef["Fields"][$prop]["ForceInitialValue"]) === true) { $item[$prop] = $dsDef["Fields"][$prop]["ForceInitialValue"]; continue; } $item[$prop] = (string) $val; } if (isset($dsDef["Callbacks"]) === true && isset($dsDef["Callbacks"]["Functions"]["Create"]) === true) { require_once $dsDef["Callbacks"]["File"]; $dsDef["Callbacks"]["Functions"]["Create"]($item); } $ds->Insert($item); $ds->Commit(); if (isset($dsDef["Callbacks"]) === true && isset($dsDef["Callbacks"]["Functions"]["CreateCompleted"]) === true) { require_once $dsDef["Callbacks"]["File"]; $dsDef["Callbacks"]["Functions"]["CreateCompleted"]($item); } echo SMShopDataItemToJson($dsDef, $props, $item); // Return updated data to client (UTF8 encoded) } else { if ($command === "Retrieve") { $items = $ds->Select("*", "Id = '" . $ds->Escape($props["Id"]) . "'"); if (count($items) > 0) { $item = $items[0]; if (isset($dsDef["Callbacks"]) === true && isset($dsDef["Callbacks"]["Functions"]["Retrieve"]) === true) { require_once $dsDef["Callbacks"]["File"]; $dsDef["Callbacks"]["Functions"]["Retrieve"]($item);