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;
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;
}\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