Skip to content
Snippets Groups Projects
Commit 00c27579 authored by Maximilian Giller's avatar Maximilian Giller :squid:
Browse files

Implemented get space with full graph

parent a00b7f40
Branches
No related tags found
No related merge requests found
Pipeline #53949 passed
......@@ -62,14 +62,15 @@ To run the project run `npm run watch`. This starts a parcel instance which auto
"nodetype_id": "3",
"name": "Vorlesung",
"color": "85D0AB"
}
"references": [
{
},
"references": {
"35": {
"node_id": "1",
"reference_id": "35",
"url": "https://tu-bs.de/reference.html"
},
... more references
]
}
},
... more nodes
},
......
<?php
require_once(__DIR__."/ks-datasets-database.php");
//! TODO: REMOVE!
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once(__DIR__ . "/../knowledge-space-database.php");
require_once(__DIR__ . "/ks-datasets-database.php");
$EMPTY_SPACE = '{"links":[],"nodes":[]}';
$SPACES_DIR = __DIR__."/spaces/";
$SPACES_DIR = __DIR__ . "/spaces/";
add_action("wp_ajax_get_space", "kg_get_space"); // Fires only for logged-in-users
add_action("wp_ajax_nopriv_get_space", 'kg_get_space' ); // Fires for everyone
function kg_get_space() {
$space_id = kg_get_space_file_path($_POST["space_id"]);
add_action("wp_ajax_nopriv_get_space", 'kg_get_space'); // Fires for everyone
function kg_get_space()
{
$space_id = $_POST["space_id"];
$space = ks_select_all_spaces($space_id);
$space = ks_select_space($space_id);
if ($space == null) {
// No valid space found
wp_die();
}
$space_id = $space->space_id;
// Collect nodes
// Collect data
$nodes = ks_select_space_nodes($space_id);
$links = ks_select_space_links($space_id);
// Construct data
$nodes = ks_construct_nodes($nodes);
$links = ks_construct_links($links);
// Construct payload and insert graph data
$spaces = ks_spaces_to_array(array($space));
$spaces[$space_id]["nodes"] = $nodes;
$spaces[$space_id]["links"] = $links;
$payload = array("spaces" => $spaces);
echo json_encode($payload);
wp_die();
}
function ks_construct_links($raw_links) {
$array_links = array();
foreach ($raw_links as $link) {
// Construct link
$array_link = array(
"link_id" => $link->link_id,
"source_node_id" => $link->source_node_id,
"target_node_id" => $link->target_node_id
);
$array_links[$array_link["link_id"]] = $array_link;
}
return $array_links;
}
function ks_construct_nodes($raw_nodes) {
$array_nodes = array();
foreach ($raw_nodes as $node) {
// Get type
$array_type = ks_get_nodetype_to_node($node->nodetype_id);
// Get references
$array_references = ks_get_references_to_node($node->node_id);
// Construct node
$array_node = array(
"node_id" => $node->node_id,
"space_id" => $node->space_id,
"title" => $node->title,
"description" => $node->description,
"icon_url" => $node->icon_url,
"header_url" => $node->header_url,
"video_url" => $node->video_url,
"type" => $array_type,
"references" => $array_references,
);
$array_nodes[$array_node["node_id"]] = $array_node;
}
return $array_nodes;
}
function ks_get_references_to_node($node_id)
{
if ($node_id == null) {
return array();
}
$raw_references = ks_select_node_references($node_id);
if ($raw_references == null) {
return array();
}
$array_references = array();
foreach($raw_references as $raw_reference) {
$array_reference = array(
"node_id" => $raw_reference->node_id,
"reference_id" => $raw_reference->reference_id,
"url" => $raw_reference->url
);
$array_references[$array_reference["reference_id"]] = $array_reference;
}
return $array_references;
}
function ks_get_nodetype_to_node($nodetype_id)
{
if ($nodetype_id == null) {
return null;
}
$type = ks_select_nodetype($nodetype_id);
if ($type == null) {
return null;
}
return array(
"nodetype_id" => $type->nodetype_id,
"name" => $type->name,
"color" => str_pad(dechex($type->color), 6, "0", STR_PAD_LEFT)
);
}
add_action("wp_ajax_list_spaces", "kg_list_spaces"); // Fires only for logged-in-users
function kg_list_spaces() {
$spaces = ks_select_spaces();
function kg_list_spaces()
{
$spaces = ks_select_all_spaces();
$spaces = ks_spaces_to_array($spaces);
$payload = array("spaces" => $spaces);
......@@ -34,7 +144,8 @@ function kg_list_spaces() {
add_action("wp_ajax_update_space", "kg_update_space"); // Fires only for logged-in-users
//add_action("wp_ajax_nopriv_update_space", 'update_space' ); // Fires for everyone
function kg_update_space() {
function kg_update_space()
{
// Check user capabilities
if (current_user_can("edit_posts")) {
// Use json encoding.
......@@ -48,7 +159,8 @@ function kg_update_space() {
}
}
function kg_store_new_graph($graph, $space_id) {
function kg_store_new_graph($graph, $space_id)
{
$file_path = kg_get_space_file_path($space_id);
$result = file_put_contents($file_path, $graph);
......@@ -59,34 +171,15 @@ function kg_store_new_graph($graph, $space_id) {
echo $result;
}
function kg_get_space_file_path($space_id) {
function kg_get_space_file_path($space_id)
{
// Cleaning up the space id
$space_id = str_replace("/", "-", $space_id);
$space_id = str_replace("\\", "-", $space_id);
$space_id = str_replace(".", "-", $space_id);
global $SPACES_DIR;
return $SPACES_DIR.$space_id.".json";
}
function kg_create_empty_space($file_path) {
// Don't do anything, if it exists
if (file_exists($file_path)) {
return;
}
// Write empty space to file
global $EMPTY_SPACE;
file_put_contents($file_path, $EMPTY_SPACE);
}
function endsWith( $haystack, $needle ) {
# Source: https://stackoverflow.com/a/834355/7376120
$length = strlen( $needle );
if( !$length ) {
return true;
}
return substr( $haystack, -$length ) === $needle;
return $SPACES_DIR . $space_id . ".json";
}
function ks_spaces_to_array($spaces)
......
......@@ -20,7 +20,7 @@ function ks_select_all_spaces()
function ks_select_space($space_id)
{
global $SPACES_TABLE;
return ks_select("SELECT * FROM $SPACES_TABLE WHERE space_id = %i", $space_id);
return ks_select_single("SELECT * FROM $SPACES_TABLE WHERE space_id = %d", $space_id);
}
function ks_insert_space($name = null, $description = "")
......@@ -48,35 +48,55 @@ function ks_insert_space($name = null, $description = "")
function ks_select_space_nodes($space_id)
{
global $NODES_TABLE;
return ks_select("SELECT * FROM $NODES_TABLE WHERE space_id = %i", $space_id);
return ks_select("SELECT * FROM $NODES_TABLE WHERE space_id = %d", $space_id);
}
function ks_select_space_links($space_id)
{
global $LINKS_TABLE;
global $NODES_TABLE;
return ks_select("SELECT link_id, source_node_id, target_node_id FROM $LINKS_TABLE JOIN $NODES_TABLE ON $NODES_TABLE.node_id = $LINKS_TABLE.source_node_id WHERE $NODES_TABLE.space_id = %i", $space_id);
return ks_select("SELECT link_id, source_node_id, target_node_id FROM $LINKS_TABLE JOIN $NODES_TABLE ON $NODES_TABLE.node_id = $LINKS_TABLE.source_node_id WHERE $NODES_TABLE.space_id = %d", $space_id);
}
function ks_select_space_nodetypes($space_id)
{
global $NODETYPES_TABLE;
return ks_select("SELECT * FROM $NODETYPES_TABLE WHERE space_id = %i", $space_id);
return ks_select("SELECT * FROM $NODETYPES_TABLE WHERE space_id = %d", $space_id);
}
function ks_select_nodetype($nodetype_id)
{
global $NODETYPES_TABLE;
return ks_select_single("SELECT * FROM $NODETYPES_TABLE WHERE nodetype_id = %d", $nodetype_id);
}
function ks_select_space_references($space_id)
{
global $REFERENCES_TABLE;
global $NODES_TABLE;
return ks_select("SELECT reference_id, url, node_id FROM $REFERENCES_TABLE JOIN $NODES_TABLE ON $NODES_TABLE.node_id = $REFERENCES_TABLE.node_id WHERE $NODES_TABLE.space_id = %i", $space_id);
return ks_select("SELECT reference_id, url, node_id FROM $REFERENCES_TABLE JOIN $NODES_TABLE ON $NODES_TABLE.node_id = $REFERENCES_TABLE.node_id WHERE $NODES_TABLE.space_id = %d", $space_id);
}
function ks_select_node_references($node_id)
{
global $REFERENCES_TABLE;
return ks_select("SELECT * FROM $REFERENCES_TABLE WHERE node_id = %d", $node_id);
}
function ks_select($query, $parameters = array())
{
global $wpdb;
$sql = $wpdb->prepare($query, $parameters);
$results = $wpdb->get_results($sql) or die(mysql_error());
return $wpdb->get_results($sql);
}
return $results;
function ks_select_single($query, $parameters = array())
{
$result = ks_select($query, $parameters);
if ($result) {
return $result[0];
} else {
return null;
}
}
......@@ -17,7 +17,7 @@ export function initInteractions() {
Object.keys(spaces).forEach(space_id => {
var selectedTxt = "";
var space = spaces[space_id];
if (space.name === SPACE) {
if (space_id === SPACE) {
selectedTxt = "selected ";
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment