Files
resourcespace/pages/ajax/browsebar_load.php
2025-07-18 16:20:14 +07:00

401 lines
16 KiB
PHP

<?php
include '../../include/boot.php';
include '../../include/authenticate.php';
// generate JSON data to populate bar
$id = getval('id', '');
// Use id to work out search string for link and path to data requested e.g. to get field id for node expansion
$target_search = array();
$fc_parent = 0;
$parent_nodes = array();
$browse_field = 0;
$browse_elements = explode("-", $id);
$bcount = count($browse_elements);
$n = 0;
for ($n = 0; $n < $bcount; $n++) {
$browseparts = explode(":", $browse_elements[$n]);
$type = $browseparts[0];
$browseid = isset($browseparts[1]) ? $browseparts[1] : 0;
switch ($type) {
case "RT":
$target_search["restypes"] = $browseid;
$target_search["archive"] = "";
break;
case "F":
$browse_field = $browseid;
break;
case "N":
$parent_nodes[] = $browseid;
break;
case "FC":
if ($browseid != "") {
$fc_parent = $browseid;
}
break;
}
if ($n == $bcount - 1) {
// Last id - this decided what is requested
$returntype = $type;
$returnid = $browseid;
}
}
// Generate data to return
$return_items = array();
$n = 0;
switch ($returntype) {
case "R":
// Add resource types
$restypes = get_resource_types();
if (checkperm("a")) {
// Add 'create new' option
$return_items[$n] = array();
$return_items[$n]["id"] = $id . "-RT:new";
$return_items[$n]["name"] = $lang["resource_type_new"];
$return_items[$n]["class"] = "New";
$return_items[$n]["expandable"] = "false";
$tgtparams = array();
$tgtparams["type"] = "resource_type";
$tgtparams["noreload"] = "true";
$tgturl = generateURL($baseurl_short . "pages/ajax/create_new.php", $tgtparams);
$return_items[$n]["link"] = $tgturl;
$return_items[$n]["modal"] = true;
$n++;
}
foreach ($restypes as $restype) {
if (!in_array($restype['ref'], $hide_resource_types)) {
// Create link based on parent and current restype
$return_items[$n] = array();
$return_items[$n]["id"] = $id . "-RT:" . $restype["ref"];
$return_items[$n]["name"] = escape(i18n_get_translated($restype["name"]));
$return_items[$n]["class"] = "Restype";
$return_items[$n]["expandable"] = "true";
$tgtparams = array();
$tgtparams["restypes"] = $restype["ref"];
$tgtparams["noreload"] = "true";
$tgtparams["search"] = "";
$tgturl = generateURL($baseurl_short . "pages/search.php", $tgtparams);
$return_items[$n]["link"] = $tgturl;
$return_items[$n]["modal"] = false;
$n++;
}
}
$return_data["success"] = true;
$return_data["items"] = $return_items;
break;
case "RT":
// Resource type - get all applicable fields
if (checkperm("a")) {
// Add 'create new' option
$return_items[$n] = array();
$return_items[$n]["id"] = $id . "-F:new";
$return_items[$n]["name"] = $lang["resource_type_field_new"];
$return_items[$n]["class"] = "New";
$return_items[$n]["expandable"] = "false";
$tgtparams = array();
$tgtparams["restypes"] = "new";
$tgtparams["type"] = "resource_type_field";
$tgtparams["noreload"] = "true";
$tgturl = generateURL($baseurl_short . "pages/ajax/create_new.php", $tgtparams);
$return_items[$n]["link"] = $tgturl;
$return_items[$n]["modal"] = true;
$n++;
}
$gettypes = [0,(int)$returnid]; // add selected resource type fields
$allfields = get_resource_type_fields($gettypes, "order_by", 'asc', '', $FIXED_LIST_FIELD_TYPES);
foreach ($allfields as $field) {
if ($field["browse_bar"] && metadata_field_view_access($field["ref"]) && $field["type"] != FIELD_TYPE_DYNAMIC_KEYWORDS_LIST) {
// Create link based on parent and current restype
$return_items[$n] = array();
$return_items[$n]["id"] = $id . "-F:" . $field["ref"];
$return_items[$n]["name"] = i18n_get_translated($field["title"]);
$return_items[$n]["class"] = "Field";
$return_items[$n]["expandable"] = "true";
$return_items[$n]["link"] = "";
$return_items[$n]["modal"] = false;
$n++;
}
}
$return_data["success"] = true;
$return_data["items"] = $return_items;
break;
case "F":
// Get nodes for field
if (isset($parentnode) && $parentnode > 0) {
$parent = $parentnode;
} else {
$parent = null;
}
if (metadata_field_view_access($returnid)) {
$fielddata = get_resource_type_field($returnid);
if (!$fielddata["browse_bar"] || !metadata_field_view_access($returnid) || !in_array($fielddata["type"], $FIXED_LIST_FIELD_TYPES) || $fielddata["type"] == FIELD_TYPE_DYNAMIC_KEYWORDS_LIST) {
break;
}
if (checkperm("k") || checkperm('a') || ($fielddata["type"] == FIELD_TYPE_DYNAMIC_KEYWORDS_LIST && !checkperm("bdk" . $returnid))) {
// Add 'create new' option
$return_items[$n] = array();
$return_items[$n]["id"] = $id . "-N:new";
$return_items[$n]["name"] = $lang["add"];
$return_items[$n]["class"] = "New";
$return_items[$n]["expandable"] = "false";
$tgtparams = array();
$tgtparams["type"] = "node";
$tgtparams["field"] = $returnid;
$tgtparams["parent"] = $parent;
$tgtparams["noreload"] = "true";
$tgturl = generateURL($baseurl_short . "pages/ajax/create_new.php", $tgtparams);
$return_items[$n]["link"] = $tgturl;
$return_items[$n]["modal"] = true;
$n++;
}
$nodes = get_nodes($returnid, $parent, false);
if ((bool) $fielddata['automatic_nodes_ordering']) {
$nodes = reorder_nodes($nodes);
}
foreach ($nodes as $node) {
// Create link based on parent and current restype
$return_items[$n] = array();
$return_items[$n]["id"] = $id . "-N:" . $node["ref"];
$return_items[$n]["name"] = escape(i18n_get_translated($node["name"]));
$return_items[$n]["class"] = "Node";
$return_items[$n]["expandable"] = (is_parent_node($node["ref"])) ? "true" : "false";
$tgtparams = array();
$tgtparams["search"] = NODE_TOKEN_PREFIX . $node["ref"];
$tgtparams["noreload"] = "true";
$tgturl = generateURL($baseurl_short . "pages/search.php", $tgtparams, $target_search);
$return_items[$n]["link"] = $tgturl;
$return_items[$n]["modal"] = false;
$return_items[$n]["drop"] = true;
$n++;
}
$return_data["success"] = true;
$return_data["items"] = $return_items;
}
break;
case "N":
// Get subnodes for node
if (metadata_field_view_access($browse_field)) {
$fielddata = get_resource_type_field($browse_field);
if (!$fielddata["browse_bar"] || !metadata_field_view_access($browse_field) || !in_array($fielddata["type"], $FIXED_LIST_FIELD_TYPES) || $fielddata["type"] == FIELD_TYPE_DYNAMIC_KEYWORDS_LIST) {
break;
}
if (checkperm("k") || checkperm('a') || ($fielddata["type"] == FIELD_TYPE_DYNAMIC_KEYWORDS_LIST && !checkperm("bdk" . $returnid))) {
// Add 'create new' option
$return_items[$n] = array();
$return_items[$n]["id"] = $id . "-N:new";
$return_items[$n]["name"] = $lang["add"];
$return_items[$n]["class"] = "New";
$return_items[$n]["expandable"] = "false";
$tgtparams = array();
$tgtparams["type"] = "node";
$tgtparams["field"] = $browse_field;
$tgtparams["parent_nodes"] = implode(",", $parent_nodes);
$tgtparams["noreload"] = "true";
$tgturl = generateURL($baseurl_short . "pages/ajax/create_new.php", $tgtparams);
$return_items[$n]["link"] = $tgturl;
$return_items[$n]["modal"] = true;
$n++;
}
$nodes = get_nodes($browse_field, $returnid, false);
if ((bool) $fielddata['automatic_nodes_ordering']) {
$nodes = reorder_nodes($nodes);
}
foreach ($nodes as $node) {
$return_items[$n] = array();
$return_items[$n]["id"] = $id . "-N:" . $node["ref"];
$return_items[$n]["name"] = escape(i18n_get_translated($node["name"]));
$return_items[$n]["class"] = "Node";
$return_items[$n]["expandable"] = (is_parent_node($node["ref"])) ? "true" : "false";
$tgtparams = array();
$tgtparams["search"] = NODE_TOKEN_PREFIX . $node["ref"];
$tgtparams["noreload"] = "true";
$tgturl = generateURL($baseurl_short . "pages/search.php", $tgtparams, $target_search);
$return_items[$n]["link"] = $tgturl;
$return_items[$n]["modal"] = false;
$return_items[$n]["drop"] = true;
$n++;
}
$return_data["success"] = true;
$return_data["items"] = $return_items;
}
break;
// Featured collection
case "FC":
$fc_parent = validate_collection_parent(array("parent" => $fc_parent));
$can_create = checkperm("h") && can_create_collections();
// Add 'create new' option
if ($can_create) {
$item = array(
"id" => "{$id}-FC:new",
"name" => escape($lang["create"]),
"class" => "New",
"expandable" => "false",
"link" => generateURL(
"{$baseurl_short}pages/collections_featured.php",
array(
"new" => "true",
"cta" => "true",
"parent" => $fc_parent,
)
),
"modal" => true,
);
$return_items[$n] = $item;
$n++;
}
$featured_collections = get_featured_collections($fc_parent, array());
usort($featured_collections, "order_featured_collections");
foreach ($featured_collections as $fc) {
$is_featured_collection_category = is_featured_collection_category($fc);
$child_collection_count = count(get_featured_collections($fc['ref'], []));
$id_part = ($is_featured_collection_category ? "FC" : "C");
$link = generateURL("{$baseurl_short}pages/search.php", array("search" => "!collection{$fc["ref"]}", "noreload" => "true"));
if ($is_featured_collection_category) {
$link = generateURL("{$baseurl_short}pages/collections_featured.php", array("parent" => $fc["ref"], "noreload" => "true"));
}
$item = array(
"id" => "{$id}-{$id_part}:{$fc["ref"]}",
"name" => escape(strip_prefix_chars(i18n_get_translated($fc["name"]), "*")),
"class" => ($is_featured_collection_category ? "Featured" : "Col"),
"expandable" => (($is_featured_collection_category && $child_collection_count > 0) || ($can_create && $id_part === 'FC') ? "true" : "false"), # js/browsebar_js.php requires this to be a string.
"link" => $link,
"modal" => false,
"drop" => !$is_featured_collection_category,
);
$return_items[$n] = $item;
$n++;
}
$return_data["success"] = true;
$return_data["items"] = $return_items;
break;
case "C":
// My collections
if (can_create_collections()) {
// Add 'create new' option
$return_items[$n] = array();
$return_items[$n]["id"] = $id . "-C:new";
$return_items[$n]["name"] = $lang["createnewcollection"];
$return_items[$n]["class"] = "New";
$return_items[$n]["expandable"] = "false";
$tgtparams = array();
$tgtparams["type"] = "collection";
$tgtparams["noreload"] = "true";
$tgturl = generateURL($baseurl_short . "pages/ajax/create_new.php", $tgtparams);
$return_items[$n]["link"] = $tgturl;
$return_items[$n]["modal"] = true;
$n++;
}
$mycols = get_user_collections($userref);
foreach ($mycols as $mycol) {
// Create link based on parent
$return_items[$n] = array();
$return_items[$n]["id"] = $id . "-C:" . $mycol["ref"];
$return_items[$n]["name"] = i18n_get_collection_name($mycol["name"]);
$return_items[$n]["class"] = "Col";
$return_items[$n]["expandable"] = "false";
$tgtparams = array();
$tgtparams["search"] = "!collection" . $mycol["ref"];
$tgtparams["noreload"] = "true";
$tgturl = generateURL($baseurl_short . "pages/search.php", $tgtparams);
$return_items[$n]["link"] = $tgturl;
$return_items[$n]["modal"] = false;
$return_items[$n]["drop"] = true;
$n++;
}
$return_data["success"] = true;
$return_data["items"] = $return_items;
break;
case "WF":
// Workflow states
$showstates = array();
for ($s = -2; $s <= 3; $s++) {
if (!checkperm("z" . $s)) {
$showstates[] = $s;
}
}
foreach ($additional_archive_states as $additional_archive_state) {
if (!checkperm("z" . $additional_archive_state)) {
$showstates[] = $additional_archive_state;
}
}
foreach ($showstates as $showstate) {
// Create link based on parent
$return_items[$n] = array();
$return_items[$n]["id"] = $id . "-A:" . $showstate;
$return_items[$n]["name"] = isset($lang["status" . $showstate]) ? $lang["status" . $showstate] : $showstate;
$return_items[$n]["class"] = "State";
$return_items[$n]["expandable"] = "false";
$tgtparams = array();
$tgtparams["search"] = "";
$tgtparams["restypes"] = "";
$tgtparams["archive"] = $showstate;
$tgtparams["noreload"] = "true";
$tgturl = generateURL($baseurl_short . "pages/search.php", $tgtparams);
$return_items[$n]["link"] = $tgturl;
$return_items[$n]["modal"] = false;
// Set an icon
$icon = $workflowicons[$showstate] ?? (WORKFLOW_DEFAULT_ICONS[$showstate] ?? WORKFLOW_DEFAULT_ICON);
$return_items[$n]["icon"] = "<i class='fa-fw " . escape($icon) . "'></i>";
$n++;
}
$return_data["success"] = true;
$return_data["items"] = $return_items;
break;
default:
// TODO Return an error
$return_data["success"] = false;
$return_data["message"] = "ERROR";
break;
}
echo json_encode($return_data);
exit();