Jelajahi Sumber

Implemented notifications API v1

seavenois 9 tahun lalu
induk
melakukan
d4d7a94f43
2 mengubah file dengan 128 tambahan dan 2 penghapusan
  1. 126 0
      www/API/v1/notifications.php
  2. 2 2
      www/API/v1/sync.php

+ 126 - 0
www/API/v1/notifications.php

@@ -0,0 +1,126 @@
+<?php
+	// Gasteizko Margolariak API v1 //
+		
+	//List of available data formatting
+	define('FOR_JSON', 'json');
+	
+	//Default info format
+	define('DEF_FORMAT', FOR_JSON);
+	
+	//Posible notification target
+	define('TARGET_ALL', 'all');
+	define('TARGET_GM', 'gm');
+	
+	//Default target
+	define('DEF_TARGET', TARGET_ALL);
+		
+	//$_GET valid parameters
+	define('GET_CLIENT', 'client');
+	define('GET_USER', 'user');
+	define('GET_TARGET', 'target');
+	define('GET_FORMAT', 'json');
+	
+	//Error messages
+	define('ERR_TARGET', '-TARGET:');
+	define('ERR_FORMAT', '-FORMAT:');
+	
+	/****************************************************
+	* This function is called from almost everywhere at *
+	* the beggining of the page. It initializes the     *
+	* session variables, connect to the db, enabling    *
+	* the variable $con for futher use everywhere in    *
+	* the php code, and populates the arrays $user      *
+	* and $permission, with info about the user.        *
+	*                                                   *
+	* @return: (db connection): The connection handler. *
+	****************************************************/
+	function startdb(){
+		//Include the db configuration file. It's somehow like this
+		/*
+		<?php
+			$host = 'XXXX';
+			$db_name = 'XXXX';
+			$username_ro = 'XXXX';
+			$username_rw = 'XXXX';
+			$pass_ro = 'XXXX';
+			$pass_rw = 'XXXX';
+		?>
+		*/
+		include('../../.htpasswd');
+		
+		//Connect to to database
+		$con = mysqli_connect($host, $username_rw, $pass_rw, $db_name);
+		
+		//Set encoding options
+		mysqli_set_charset($con, 'utf-8');
+		header('Content-Type: text/html; charset=utf8');
+		mysqli_query($con, 'SET NAMES utf8;');
+		
+		//Return the db connection
+		return $con;
+	}
+	
+	function show_notifications($con, $target = DEF_TARGET, $format = DEF_FORMAT){
+		if ($target == TARGET_GM){
+			$query = "SELECT id, title_es, title_en, title_eu, text_es, text_en, text_eu, dtime, internal AS gm, duration, 0 AS seen FROM notification WHERE internal = 1 AND dtime > NOW() - INTERVAL duration MINUTE ORDER BY dtime DESC";
+		}
+		else{
+			$query = "SELECT id, title_es, title_en, title_eu, text_es, text_en, text_eu, dtime, internal AS gm, duration, 0 AS seen FROM notification WHERE dtime > NOW() - INTERVAL duration MINUTE ORDER BY dtime DESC";
+		}
+		$q = mysqli_query($con, $query);
+		switch ($format){
+			case FOR_JSON:
+				//Create result array
+				$rows = array();
+				while($r = mysqli_fetch_assoc($q)) {
+					$rows[] = $r;
+				}
+				return(json_encode($rows));
+				break;
+		}
+	}
+	
+	//Connect to the database
+	$con = startdb('rw');
+	
+	//Get data from URL
+	$client = mysqli_real_escape_string($con, $_GET[GET_CLIENT]);
+	$user = mysqli_real_escape_string($con, $_GET[GET_USER]);
+	$target = strtolower(mysqli_real_escape_string($con, $_GET[GET_TARGET]));
+	$format = strtolower(mysqli_real_escape_string($con, $_GET[GET_FORMAT]));
+	
+	//Initialize some variables
+	$error = '';
+	
+	//Validate data
+	if (strlen($client) < 1){
+		$client = '';
+	}
+	if (strlen($user) < 1){
+		$user = '';
+	}
+	if (strlen($target) < 1){
+		$target = DEF_TARGET;
+	}
+	if ($target != TARGET_ALL && $action != TARGET_GM){
+		//Bad request
+		http_response_code(400);
+		$error = $error . ERR_TARGET . mysqli_real_escape_string($con, $_GET[GET_TARGET]);
+	}
+	if (strlen($format) < 1){
+		$format = DEF_FORMAT;
+	}
+	if ($format != FOR_JSON){
+		//Bad request
+		http_response_code(400);
+		$error = $error . ERR_FORMAT . mysqli_real_escape_string($con, $_GET[GET_FORMAT]);
+	}
+	
+	
+	//If there has not been an error, procede
+	if (strlen($error) == 0){
+		echo(show_notifications($con, $target, $format));
+	}
+	
+	//Log the request
+	//log_sync(); //TODO;

+ 2 - 2
www/API/v1/sync.php

@@ -211,7 +211,7 @@
 				$q = mysqli_query($con, "SELECT photo.id AS id, file, permalink, title_es, title_en, title_eu, description_es, description_en, description_eu, uploaded, place, width, height, size, CONCAT(photo.username, user) AS username FROM photo, user WHERE user.id = photo.user AND approved = 1;");
 				break;
 			case "post":
-				$q = mysqli_query($con, "SELECT post.id AS id, permalink, title_es, title_en, title_eu, text_es, text_en, text_eu, username, dtime FROM post, user WHERE user.id = user AND visible = 1;");
+				$q = mysqli_query($con, "SELECT post.id AS id, permalink, title_es, title_en, title_eu, text_es, text_en, text_eu, comments, username, dtime FROM post, user WHERE user.id = user AND visible = 1;");
 				break;
 			case "post_comment":
 				$q = mysqli_query($con, "SELECT post_comment.id AS id, post, text, dtime, CONCAT(user.username, user) AS user, lang FROM post_comment, user WHERE post_comment.user = user.id AND approved = 1;");
@@ -381,7 +381,7 @@
 			//If the client needs an update
 			else{
 				$out = sync($con, $section);
-				$out = str_replace('\"', '\u0022s', $out);
+				$out = str_replace('\"', '\u0022', $out);
 				$out = str_replace(':""', ':null', $out);
 				$out = "{\"sync\":$out}";
 				echo($out);