query("select * from product where id=:id", ["id" => $pid]); if ($r = $db->nextRecord($q)) { $out->push($r); } } return $out; } public static function api_get_mru() { $out = new Collection; $mru = Session::get("mru"); if (!$mru) { $mru = []; } foreach ($mru as $p) { $prod = new Product($p); if ($prod) { $out->push($prod); } } return $out; } public static function api_add_mru($id) { $mru = Session::get("mru"); if (!$mru) { $mru = []; } array_unshift($mru, $id); $mru = array_unique($mru); while (count($mru) > 5) { array_pop($mru); } Session::set("mru", $mru); return ProductController::api_get_mru(); } public static function api_search() { return Product::find([["full_path", "like", "%" . $_POST['search'] . "%"]])->orderBy("full_path")->all(); } public static function api_add_child($_request, $id) { $p = new Product; $p->parent = $id; $p->title = $_request->put("title"); $p->save(); return $p; } public static function api_set($id) { $p = new Product($id); $data = []; foreach ($_POST as $k=>$v) { $p->$k = $v; } $p->save(); return $p; } public static function api_move($id) { $p = new Product($id); $p->parent = $_POST['to']; $p->save(); return $p; } public static function api_delete($id) { $product = new Product($id); if ($product->valid()) { $laf = Product::find([["title", "=", "Lost and Found"]])->first(); DB::getInstance()->query("delete from docproduct where product=:pid", ["pid" => $product->id]); foreach ($product->children as $c) { $c->parent = $laf; $c->save(); } $product->load("parent"); $par = $product->parent; $product->delete(); return $par; } return []; } public static function api_empty_trash($id) { $prod = new Product($id); $docs = $prod->documents; foreach ($docs as $doc) { $revs = $doc->revisions; foreach ($revs as $rev) { $rev->delete(); } $dpl = DocProduct::find([["document", "=", $doc->id]])->all(); foreach ($dpl as $dp) { $dp->delete(); } $doc->delete(); } $prod->invalidate("documents"); return []; } public static function api_available_metadata($id) { $prod = new Product($id); $exist = $prod->meta(); $metas = MetaType::find()->all(); $out = new Collection(); foreach ($metas as $meta) { if (!in_array($meta->id, $exist)) { $cl = new stdClass; $cl->key = $meta->id; $cl->value = $meta->name; $out->push($cl); } } $out->sort("value"); return $out; } public static function api_add_metadata($_request, $id) { $prod = new Product($id); $prod->add_meta($_request->put('item_id')); return Collection::from_array($prod->meta()); } public static function api_gemini_all($id) { $prod = new Product($id); $c = new Collection(); foreach ($prod->documents as $doc) { $job = new GeminiJob($doc->id, "document:" . $doc->id); $jobid = $job->queue(); $c->push(["document" => $doc->id, "job" => $jobid]); } return $c; } }