/** * Creates endpoint * @param array $endpoint Endpoint to create */ private function create_endpoint($endpoint) { // Test if method set if (!isset($endpoint['method'])) { throw new APIexception("Unexpected Header", 2, 400); } $ep = explode("/", $endpoint['endpoint']); // Test if name set if (!isset($ep[0])) { throw new APIexception("No endpoint", 1, 404); } // Test if verb if (isset($ep[1])) { if (preg_match('/^\\:(\\w+)/', $ep[1])) { $verb = NULL; } else { $verb = $ep[1]; } } else { $verb = NULL; } // Test for filters in endpoint name foreach ($ep as $filter) { if (preg_match('/^\\:(\\w+)/', $filter, $result)) { $endpoint['params']['filters'][] = $result[1]; } } // Sets endpoint name $ep = $ep[0]; // Test for custom query if (isset($endpoint['params']['query'])) { $query = $endpoint['params']['query']; $action = strtolower(preg_replace("/^(\\w+) .*/", "\$1", $query)); } else { // Check if columns from table have prefix $this->col_prefix = $endpoint['params']['col_prefix'] = isset($endpoint['params']['col_prefix']) ? $endpoint['params']['col_prefix'] : Dictionary::get_col_prefix($ep); // Creates query $q = new Query($endpoint['method'], $ep, $verb, $endpoint['params']); $query = $q->get_query(); $action = $q->get_action(); } $join_queries = array(); if (isset($endpoint['params']['join'])) { foreach ($endpoint['params']['join'] as $k => $v) { $cols = explode("|", $v); $params = array(); if (isset($cols[2])) { $params['show'] = array_map(function ($val) { if ($val !== "id" && $val !== "updated") { return $this->col_prefix . $val; } return $val; }, explode(",", $cols[2])); } $params['filters'][] = $cols[1]; $join_queries[$cols[0]] = Query::construct_query("select", $k, $params); } } // Sets endpoint object $endpoint['query'] = array("q" => $query, "action" => $action, "columns" => !empty($endpoint['params']['columns']) ? $endpoint['params']['columns'] : "", "filters" => !empty($endpoint['params']['filters']) ? $endpoint['params']['filters'] : "", "limiter" => !empty($endpoint['params']['limit']) ? $endpoint['params']['limit'] : "", "join" => $join_queries); $endpoint['params']['cacheable'] = isset($endpoint['params']['cacheable']) ? $endpoint['params']['cacheable'] : FALSE; // Registers endpoint on dictionary Dictionary::register($endpoint); }