Trying to modify sendlist to return better results.
authorJohnnie Lamar Odom II <jlodom00@alumni.amherst.edu>
Wed, 6 Jun 2018 05:09:34 +0000 (00:09 -0500)
committerJohnnie Lamar Odom II <jlodom00@alumni.amherst.edu>
Wed, 6 Jun 2018 05:09:34 +0000 (00:09 -0500)
code/clientlib/3.00/send.php
code/lib/Send.php

index e250e73..9e39250 100644 (file)
@@ -23,6 +23,7 @@ function sendGet($arrayRestInputs){
                                        for($i = 0; $i < $limit; $i++){
                                                $sendReturn[$i]['sent'] = date(DATE_ATOM, $sendReturn[$i]['sent']);
                                                $sendReturn[$i]['seen'] = date(DATE_ATOM, $sendReturn[$i]['seen']);
+                                               $sendReturn[$i]['requestinguser'] = $objectToken->username;
                                        }
                                }
                                return $sendReturn;
@@ -77,8 +78,10 @@ function sendlistGet($arrayRestInputs){
                                if(is_array($sendlistReturn)){
                                        $limit = count($sendlistReturn);
                                        for($i = 0; $i < $limit; $i++){
-                                               $sendlistReturn[$i]['senddate'] = date(DATE_ATOM, $sendlistReturn[$i]['senddate']);
-                                               $sendlistReturn[$i]['seen'] = date(DATE_ATOM, $sendlistReturn[$i]['seen']);
+                                               $sendlistReturn[$i]['selfsenddate'] = date(DATE_ATOM, $sendlistReturn[$i]['selfsenddate']);
+                                               $sendlistReturn[$i]['selfseen'] = date(DATE_ATOM, $sendlistReturn[$i]['selfseen']);
+                                               $sendlistReturn[$i]['othersenddate'] = date(DATE_ATOM, $sendlistReturn[$i]['othersenddate']);
+                                               $sendlistReturn[$i]['otherseen'] = date(DATE_ATOM, $sendlistReturn[$i]['otherseen']);
                                        }
                                }
                                return $sendlistReturn;
index 124846f..f965bef 100644 (file)
@@ -115,36 +115,72 @@ class Send {
        }\r
 \r
 \r
-       /**\r
-        * Return a watchlist of send information. Validation and date processing handled by api library.\r
-        */\r
+       /* Return a watchlist of send information.\r
+               Validation and date processing handled by api library, although we do some validation here as a backstop.\r
+               We grab two simple queries and combine them in code because the unified query was 5X slower and it made the API slow.\r
+               On the reference Planworld database, the complex query was nearing 6 seconds, and the code below returns in 1 */\r
 \r
        function getSendList ($uid) {\r
                $planworldForGetSendList = new Planworld();\r
                if($planworldForGetSendList->isUser($uid)){\r
                        $dbh = Planworld::_connect();\r
+                       $outboundreturn = '';\r
+                       $inboundreturn = '';\r
+                       $indexedreturn = array();\r
+                       $indexedkeylist = array();\r
+                       $finalarray = array();\r
                        try{\r
-                               $query = $dbh->prepare('SELECT name, isinbound, senddate, seen FROM\r
-                                       (SELECT U.username AS name, "TRUE" AS isinbound, MAX(S.SENT) AS senddate, MAX(S.SEEN) as seen FROM send S, users U\r
-                                               WHERE U.id=S.uid  AND S.to_uid=:uid GROUP BY S.uid\r
-                                       UNION\r
-                                       SELECT U.username AS name,  "FALSE" AS isinbound, MAX(S.sent) AS senddate, MAX(S.SEEN) as seen FROM send S, users U\r
-                                               WHERE U.id=S.to_uid AND S.uid=:uid GROUP BY S.to_uid\r
-                                               ORDER BY name, senddate DESC) SUB\r
-                                       GROUP BY name ORDER BY name');\r
-                               $queryArray = array('uid' => $uid);\r
-                               $query->execute($queryArray);\r
-                               $result = $query->fetchAll();\r
-                               if (!$result){\r
+                               $query1 = $dbh->prepare('SELECT U.username AS name, MAX(S.SENT) AS othersenddate, MAX(S.SEEN) as selfseen FROM send S, users U WHERE U.id=S.uid  AND S.to_uid=:uid GROUP BY S.uid  ORDER BY name');\r
+                               $queryArray1 = array('uid' => $uid);\r
+                               $query1->execute($queryArray1);\r
+                               $return1 = $query1->fetchAll();\r
+                               if (!$return1){\r
                                        return PLANWORLD_ERROR;\r
                                }\r
                                else {\r
-                                       return $result;\r
+                                       $inboundreturn = $return1;\r
                                }\r
                        }\r
                        catch(PDOException $badquery){\r
                                return PLANWORLD_ERROR;\r
                        }\r
+                       /* Get message information about messages from the self to the other. */\r
+                       try{\r
+                               $query2 = $dbh->prepare('SELECT U.username AS name, MAX(S.sent) AS selfsenddate, MAX(S.SEEN) as otherseen FROM send S, users U WHERE U.id=S.to_uid AND S.uid=:uid GROUP BY S.to_uid ORDER BY name');\r
+                               $queryArray2 = array('uid' => $uid);\r
+                               $query2->execute($queryArray2);\r
+                               $return2 = $query2->fetchAll();\r
+                               if (!$return2){\r
+                                       return PLANWORLD_ERROR;\r
+                               }\r
+                               else {\r
+                                       $outboundreturn = $return2;\r
+                               }\r
+                       }\r
+                       catch(PDOException $badquery){\r
+                               return PLANWORLD_ERROR;\r
+                       }\r
+                       foreach($inboundreturn as $row){\r
+                               $indexedreturn[$row["name"]] = array("name"=> $row["name"], "othersenddate"=> $row["othersenddate"], "selfsenddate"=> 0, "selfseen"=> $row["selfseen"], "otherseen"=> 0);\r
+                               $indexedkeylist[] = $row["name"];\r
+                       }\r
+\r
+                       foreach($outboundreturn as $row){\r
+                               if(in_array($row["name"], $indexedkeylist)){\r
+                                       $indexedreturn[$row["name"]]["selfsenddate"]=$row["selfsenddate"];\r
+                                       $indexedreturn[$row["name"]]["otherseen"]=$row["otherseen"];\r
+                               }\r
+                               else{\r
+                                       $indexedreturn[$row["name"]] = array("name"=> $row["name"], "othersenddate"=>0, $row["selfsenddate"], "selfseen"=>0, "otherseen"=> $row["otherseen"]);\r
+                                       $indexedkeylist[] = $row["name"];\r
+                               }\r
+                       }\r
+\r
+                       foreach($indexedreturn as $row){\r
+                               $finalarray[] = $row;\r
+                       }\r
+\r
+                       return $finalarray;\r
                }\r
                return PLANWORLD_ERROR;\r
        }\r