diff --git a/README.md b/README.md index 7ccbef3c0fcfd44746efd417e524f5a196eef540..3867c4bb3432cbad38374acb3799654c8b2a2002 100644 --- a/README.md +++ b/README.md @@ -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 }, diff --git a/datasets/datasets.php b/datasets/datasets.php index 704147310a730e86d1819dc7cdb4327c33cb6cd3..7c0e386f1f2dee2709955b7b11c79ca324bd5ee1 100644 --- a/datasets/datasets.php +++ b/datasets/datasets.php @@ -1,29 +1,139 @@ <?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) diff --git a/datasets/ks-datasets-database.php b/datasets/ks-datasets-database.php index e83dd77bc4a3789fec63dff522f96ff2fc574ff5..8606b1e27b3dbb08111c0d7bf54c2976ac786b96 100644 --- a/datasets/ks-datasets-database.php +++ b/datasets/ks-datasets-database.php @@ -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; + } } diff --git a/editor/js/interactions.js b/editor/js/interactions.js index 60917d1a409a777c3ad97aed4fb9191165032aed..e1c66ea58e6a956e947abd0ad77718731651b760 100644 --- a/editor/js/interactions.js +++ b/editor/js/interactions.js @@ -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 "; }