diff --git a/src/app/controllers/User/GetFollowsController.php b/src/app/controllers/User/GetFollowsController.php index 89f9e7c6612c18fdac84a7eb824ed88a998997af..bae80139286a7ccce5262b8a7f1e5c4580c2c4d0 100644 --- a/src/app/controllers/User/GetFollowsController.php +++ b/src/app/controllers/User/GetFollowsController.php @@ -3,7 +3,7 @@ require_once SRC_ROOT_PATH . "/app/baseclasses/BaseController.php"; -require_once SRC_ROOT_PATH . "/app/models/GetPostModel.php"; +require_once SRC_ROOT_PATH . "/app/models/GetAnalyticDataModel.php"; class GetFollowsController extends BaseController{ protected static $instance; @@ -12,14 +12,15 @@ class GetFollowsController extends BaseController{ } public static function getInstance(){ if(!isset(self::$instance)){ - self::$instance = new static(GetPostModel::getInstance()); + self::$instance = new static(GetAnalyticDataModel::getInstance()); } return self::$instance; } public function get($urlParams){ - $idowner = $urlParams[0]; - $data = $this->srv->getFollows($idowner); + $username = $urlParams[0]; + $date = $urlParams[1]; + $data = $this->srv->getFollows($username, $date); if($data!=null){ header('Content-Type: application/json'); return json_encode(array( diff --git a/src/app/controllers/User/GetDataPostController.php b/src/app/controllers/User/GetPostCountController.php similarity index 74% rename from src/app/controllers/User/GetDataPostController.php rename to src/app/controllers/User/GetPostCountController.php index 068f463e6ff22a5e1b086114ac9866c40f1b81c1..b865666bac977079813f7a5d64c24f003c06a1fa 100644 --- a/src/app/controllers/User/GetDataPostController.php +++ b/src/app/controllers/User/GetPostCountController.php @@ -3,23 +3,23 @@ require_once SRC_ROOT_PATH . "/app/baseclasses/BaseController.php"; -require_once SRC_ROOT_PATH . "/app/models/GetPostModel.php"; +require_once SRC_ROOT_PATH . "/app/models/GetAnalyticDataModel.php"; -class GetDataPostController extends BaseController{ +class GetPostCountController extends BaseController{ protected static $instance; private function __construct($srv){ parent::__construct($srv); } public static function getInstance(){ if(!isset(self::$instance)){ - self::$instance = new static(GetPostModel::getInstance()); + self::$instance = new static(GetAnalyticDataModel::getInstance()); } return self::$instance; } public function get($urlParams){ - $idowner = $urlParams[0]; - $data = $this->srv->getDataPostByOwner($idowner); + $username = $urlParams[0]; + $data = $this->srv->getPostCountByOwner($username); if($data!=null){ header('Content-Type: application/json'); return json_encode(array( diff --git a/src/app/controllers/User/GetDataPostIDController.php b/src/app/controllers/User/GetPostDataController.php similarity index 72% rename from src/app/controllers/User/GetDataPostIDController.php rename to src/app/controllers/User/GetPostDataController.php index 66252ead470f16f6d21226b5d48c04e580c9f460..572a763dae3c3d5a41c3987b4bd5028324abb0e7 100644 --- a/src/app/controllers/User/GetDataPostIDController.php +++ b/src/app/controllers/User/GetPostDataController.php @@ -3,24 +3,25 @@ require_once SRC_ROOT_PATH . "/app/baseclasses/BaseController.php"; -require_once SRC_ROOT_PATH . "/app/models/GetPostModel.php"; +require_once SRC_ROOT_PATH . "/app/models/GetAnalyticDataModel.php"; -class GetDataPostIDController extends BaseController{ +class GetPostDataController extends BaseController{ protected static $instance; private function __construct($srv){ parent::__construct($srv); } public static function getInstance(){ if(!isset(self::$instance)){ - self::$instance = new static(GetPostModel::getInstance()); + self::$instance = new static(GetAnalyticDataModel::getInstance()); } return self::$instance; } public function get($urlParams){ - $idowner = $urlParams[0]; + $username = $urlParams[0]; $idpost = $urlParams[1]; - $data = $this->srv->getDataPostIDByOwner($idowner,$idpost); + $date = $urlParams[2]; + $data = $this->srv->getDataPostIDByOwner($username,$idpost,$date); if($data!=null){ header('Content-Type: application/json'); return json_encode(array( diff --git a/src/app/models/GetAnalyticDataModel.php b/src/app/models/GetAnalyticDataModel.php new file mode 100644 index 0000000000000000000000000000000000000000..9362d72c80dab95f585c7651e005cb01fda7f165 --- /dev/null +++ b/src/app/models/GetAnalyticDataModel.php @@ -0,0 +1,100 @@ +<?php + +require_once SRC_ROOT_PATH . "/app/baseclasses/BaseModel.php"; +require_once SRC_ROOT_PATH . "/app/core/PDOHandler.php"; + +class GetAnalyticDataModel +{ + protected static $instance; + + + public static function getInstance() + { + if (!isset(self::$instance)) { + self::$instance = new static(); + } + return self::$instance; + } + + public function getFollows($username, $date){ + try{ + $db = PDOHandler::getInstance()->getPDO(); + $sql = "SELECT COUNT(*) AS total from follows f INNER JOIN users u ON followed_user_id=id WHERE u.username='$username' AND f.created_at <= '$date'::date"; + $result = $db->query($sql); + if($result){ + $data = $result->fetchAll(PDO::FETCH_ASSOC); + return $data; + } + else{ + return null; + } + }catch(Exception $e){ + echo $e->getMessage(); + return null; + } + } + public function getPostCountByOwner($username){ + try{ + $db = PDOHandler::getInstance()->getPDO(); + $sql = "SELECT COUNT(*) count FROM posts p LEFT JOIN users u ON owner_id=id WHERE username='$username' AND p.refer_type IS NULL"; + $result = $db->query($sql); + // $sql2 = "SELECT DATE(created_at) as day, COUNT(post_id) as total from posts WHERE refer_post_owner=$owner AND refer_type='Reply' GROUP BY day ORDER BY day DESC LIMIT 7"; + // $result2 = $db->query($sql2); + // $sql3 = "SELECT DATE(created_at) as day, COUNT(post_id) as total from likes WHERE post_owner_id=$owner GROUP BY day ORDER BY day DESC LIMIT 7"; + // $result3 = $db->query($sql3); + // $sql4 = "SELECT DATE(created_at) as day, SUM(views) as total from posts WHERE owner_id=$owner GROUP BY day ORDER BY day DESC LIMIT 7"; + // $result4 = $db->query($sql4); + if($result){ + $data = $result->fetchAll(PDO::FETCH_ASSOC); + return $data; + } + else{ + return null; + } + }catch(Exception $e){ + echo $e->getMessage(); + return null; + } + } + public function getDataPostIDByOwner($username, $post_id, $date){ + try{ + $db = PDOHandler::getInstance()->getPDO(); + $sql = "SELECT id FROM users WHERE username='$username'"; + $result = $db->query($sql); + if(is_null($result)) return null; + $owner = $result->fetch(PDO::FETCH_ASSOC); + if(!$owner) return null; + $owner = $owner['id']; + + $repliesQuery = "SELECT COUNT(*) AS total FROM posts WHERE refer_type='Reply' AND refer_post_owner=$owner AND refer_post=$post_id AND created_at <= '$date'::date"; + $repliesResult = $db->query($repliesQuery); + if(is_null($repliesResult)) return null; + $repliescount = $repliesResult->fetch(PDO::FETCH_ASSOC); + + $likesQuery = "SELECT COUNT(*) AS total FROM likes WHERE post_owner_id=$owner AND post_id=$post_id AND created_at <= '$date'::date"; + $likesResult = $db->query($likesQuery); + if(is_null($likesResult)) return null; + $likescount = $likesResult->fetch(PDO::FETCH_ASSOC); + + $viewsResult = "SELECT views AS total FROM posts WHERE owner_id=$owner AND post_id=$post_id"; + $viewsResult = $db->query($viewsResult); + if(is_null($viewsResult)) return null; + $viewscount = $viewsResult->fetch(PDO::FETCH_ASSOC); + if(!$viewscount) return null; + + // var_dump($repliescount); + // var_dump($likescount); + // var_dump($viewscount); + return array( + 'replies' => $repliescount['total'], + 'likes' => $likescount['total'], + 'views' => $viewscount['total'] + ); + }catch(Exception $e){ + echo $e->getMessage(); + return null; + } + } +} + +?> \ No newline at end of file diff --git a/src/app/models/GetPostModel.php b/src/app/models/GetPostModel.php deleted file mode 100644 index f28ed02f6ff2266ab867436eeeeca0ad647a9bb3..0000000000000000000000000000000000000000 --- a/src/app/models/GetPostModel.php +++ /dev/null @@ -1,130 +0,0 @@ -<?php - -require_once SRC_ROOT_PATH . "/app/baseclasses/BaseModel.php"; -require_once SRC_ROOT_PATH . "/app/core/PDOHandler.php"; - -class GetPostModel -{ - protected static $instance; - - - public static function getInstance() - { - if (!isset(self::$instance)) { - self::$instance = new static(); - } - return self::$instance; - } - - public function getFollows($id){ - try{ - $db = PDOHandler::getInstance()->getPDO(); - $sql = "SELECT DATE(created_at) as day, COUNT(followed_user_id) as total from follows WHERE followed_user_id=$id GROUP BY day ORDER BY day DESC LIMIT 7;"; - $result = $db->query($sql); - if($result){ - $data = $result->fetchAll(PDO::FETCH_ASSOC); - return $data; - } - else{ - return null; - } - }catch(Exception $e){ - echo $e->getMessage(); - return null; - } - } - public function getDataPostByOwner($owner){ - try{ - $db = PDOHandler::getInstance()->getPDO(); - $sql = "SELECT p.post_id,u.id,u.username,u.profile_name,p.body,pr.path,p.created_at FROM posts as p LEFT JOIN post_resources as pr ON p.post_id=pr.post_id AND p.owner_id=pr.post_owner_id JOIN users as u ON p.owner_id=u.id WHERE p.owner_id=$owner AND p.refer_type IS NULL "; - $result = $db->query($sql); - $sql2 = "SELECT DATE(created_at) as day, COUNT(post_id) as total from posts WHERE refer_post_owner=$owner AND refer_type='Reply' GROUP BY day ORDER BY day DESC LIMIT 7"; - $result2 = $db->query($sql2); - $sql3 = "SELECT DATE(created_at) as day, COUNT(post_id) as total from likes WHERE post_owner_id=$owner GROUP BY day ORDER BY day DESC LIMIT 7"; - $result3 = $db->query($sql3); - $sql4 = "SELECT DATE(created_at) as day, SUM(views) as total from posts WHERE owner_id=$owner GROUP BY day ORDER BY day DESC LIMIT 7"; - $result4 = $db->query($sql4); - if($result){ - if($result2){ - if($result3){ - if($result4){ - $data = $result->fetchAll(PDO::FETCH_ASSOC); - $data2 = $result2->fetchAll(PDO::FETCH_ASSOC); - $data3 = $result3->fetchAll(PDO::FETCH_ASSOC); - $data4 = $result4->fetchAll(PDO::FETCH_ASSOC); - return array( - 'post' => $data, - 'reply' => $data2, - 'likes' => $data3, - 'view' => $data4 - ); - } - else{ - return null; - } - } - else{ - return null; - } - } - else{ - return null; - } - } - else{ - return null; - } - }catch(Exception $e){ - echo $e->getMessage(); - return null; - } - } - public function getDataPostIDByOwner($owner,$post_id){ - try{ - $db = PDOHandler::getInstance()->getPDO(); - $sql = "SELECT p.post_id,u.id,u.username,u.profile_name,p.body,pr.path,p.created_at FROM posts as p LEFT JOIN post_resources as pr ON p.post_id=pr.post_id AND p.owner_id=pr.post_owner_id JOIN users as u ON p.owner_id=u.id WHERE p.owner_id=$owner AND p.post_id=$post_id AND p.refer_type IS NULL "; - $result = $db->query($sql); - $sql2 = "SELECT DATE(created_at) as day, COUNT(post_id) as total from posts WHERE refer_post_owner=$owner AND refer_post=$post_id AND refer_type='Reply' GROUP BY day ORDER BY day DESC LIMIT 7"; - $result2 = $db->query($sql2); - $sql3 = "SELECT DATE(created_at) as day, COUNT(post_id) as total from likes WHERE post_owner_id=$owner AND post_id=$post_id GROUP BY day ORDER BY day DESC LIMIT 7"; - $result3 = $db->query($sql3); - $sql4 = "SELECT DATE(created_at) as day, views as total from posts WHERE owner_id=$owner AND post_id=$post_id"; - $result4 = $db->query($sql4); - if($result){ - if($result2){ - if($result3){ - if($result4){ - $data = $result->fetch(PDO::FETCH_ASSOC); - $data2 = $result2->fetchAll(PDO::FETCH_ASSOC); - $data3 = $result3->fetchAll(PDO::FETCH_ASSOC); - $data4 = $result4->fetch(PDO::FETCH_ASSOC); - return array( - 'post' => $data, - 'reply' => $data2, - 'likes' => $data3, - 'view' => $data4 - ); - } - else{ - return null; - } - } - else{ - return null; - } - } - else{ - return null; - } - } - else{ - return null; - } - }catch(Exception $e){ - echo $e->getMessage(); - return null; - } - } -} - -?> \ No newline at end of file diff --git a/src/index.php b/src/index.php index 1dc6492697f943e56deb24df1467b3b5033dbc4a..cafcceb4711c92e8ac401e9053354d9172bd8a28 100644 --- a/src/index.php +++ b/src/index.php @@ -13,8 +13,8 @@ require_once CONTROLLER_PATH . "/User/LogoutController.php"; require_once CONTROLLER_PATH . "/User/RegisterController.php"; require_once CONTROLLER_PATH . "/User/GetAllUserController.php"; require_once CONTROLLER_PATH . "/User/GetFollowsController.php"; -require_once CONTROLLER_PATH . "/User/GetDataPostController.php"; -require_once CONTROLLER_PATH . "/User/GetDataPostIDController.php"; +require_once CONTROLLER_PATH . "/User/GetPostCountController.php"; +require_once CONTROLLER_PATH . "/User/GetPostDataController.php"; require_once CONTROLLER_PATH . "/Admin/AdminController.php"; require_once CONTROLLER_PATH . "/Admin/BanController.php"; require_once CONTROLLER_PATH . "/Admin/UnbanController.php"; @@ -69,9 +69,9 @@ $router->addHandler("/api/profileuser/*", ProfileUserController::getInstance(), $router->addHandler("/api/follow", FollowController::getInstance(), []); $router->addHandler("/api/unfollow", UnfollowController::getInstance(), []); $router->addHandler("/api/getalluser", GetAllUserController::getInstance(), []); -$router->addHandler("/api/getdatafollows/*", GetFollowsController::getInstance(), []); -$router->addHandler("/api/getdatapost/*", GetDataPostController::getInstance(), []); -$router->addHandler("/api/getdatapostid/*/*", GetDataPostIDController::getInstance(), []); +$router->addHandler("/api/getdatafollows/*/*", GetFollowsController::getInstance(), []); +$router->addHandler("/api/getpostcount/*", GetPostCountController::getInstance(), []); +$router->addHandler("/api/getpostdata/*/*/*", GetPostDataController::getInstance(), []); $router->addHandler("/", HomePage::getInstance(), []);