diff options
-rw-r--r-- | ajax_chat.php | 2 | ||||
-rw-r--r-- | api/app.php | 591 | ||||
-rw-r--r-- | app.php | 217 | ||||
-rw-r--r-- | css/stats.css | 32 | ||||
-rw-r--r-- | db updates.sql | 10 | ||||
-rw-r--r-- | do.php | 21 | ||||
-rw-r--r-- | includes/datas.php | 27 | ||||
-rw-r--r-- | js/scores.js | 132 | ||||
-rw-r--r-- | pages/admin.php | 1 | ||||
-rw-r--r-- | pages/chat.php | 9 | ||||
-rw-r--r-- | pages/memberlist.php | 80 |
11 files changed, 776 insertions, 346 deletions
diff --git a/ajax_chat.php b/ajax_chat.php index 04a6fd4..2b6d909 100644 --- a/ajax_chat.php +++ b/ajax_chat.php @@ -1,5 +1,7 @@ <?
session_start();
+session_write_close();
+//Just doing this as evidence that $_SESSION as read-only is still available.
$userID = $_SESSION['userID'];
include('includes/chats.php');
diff --git a/api/app.php b/api/app.php new file mode 100644 index 0000000..806e4ae --- /dev/null +++ b/api/app.php @@ -0,0 +1,591 @@ +<?PHP
+
+include "../includes/maps.php";
+include "../includes/db.inc.php";
+include "../includes/mapoftheday.php";
+include "../includes/datas.php";
+
+include "../includes/mapclass.php";
+
+$myNewMap = new map("13x7.c1.r12.w10.t0..:0s.0r.0r.1a.7f.0s.11f.0s.7r.1r.1f.0s.1r.5r.1r.1f.0s.2r.5r.2f.0s.6r.4f.0s.0r.8r.1f.");
+
+//print_r($myNewMap->tiles);
+//echo "---<br>";
+
+//print_r(getJsonData($myNewMap));
+
+
+if ($_GET['r'] == 'scores') {
+
+ //echo 'getting...';
+ $scores = getScoresB(1156);
+ echo json_encode($scores);
+}
+exit;
+
+
+
+echo json_encode($myNewMap);
+
+//By Wrikken
+function getJsonData($obj){
+ $var = get_object_vars($obj);
+ foreach($var as &$value) {
+ if(is_object($value) && method_exists($value,'getJsonData')) {
+ $value = $value->getJsonData();
+ }
+ }
+ return $var;
+}
+
+
+exit;
+
+//Conditions for effectiveness.
+
+//Yes:
+echo ((20 & 4) == 4);
+echo "<br>";
+//Yes:
+echo ((4 & 20) == 4);
+echo "<br>";
+//No:
+echo ((4 & 20) == 20);
+echo "<br>";
+//No:
+echo ((16 & 4) == 4);
+echo "<br>";
+//Yes:
+echo ((37 & 4) == 4);
+echo "<br>";
+
+
+
+
+
+$format = '(%1$2d = %1$04b) = (%2$2d = %2$04b)'
+ . ' %3$s (%4$2d = %4$04b)' . "\n";
+
+echo <<<EOH
+ --------- --------- -- ---------
+ result value op test
+ --------- --------- -- ---------
+EOH;
+
+
+/*
+ * Here are the examples.
+ */
+
+$values = array(0, 1, 2, 4, 8);
+$test = 1 + 4;
+
+echo "\n Bitwise AND \n";
+foreach ($values as $value) {
+ $result = $value & $test;
+ printf($format, $result, $value, '&', $test);
+}
+
+echo "\n Bitwise Inclusive OR \n";
+foreach ($values as $value) {
+ $result = $value | $test;
+ printf($format, $result, $value, '|', $test);
+}
+
+echo "\n Bitwise Exclusive OR (XOR) \n";
+foreach ($values as $value) {
+ $result = $value ^ $test;
+ printf($format, $result, $value, '^', $test);
+}
+
+
+
+exit;
+
+
+
+
+
+//Select Stats/Scores.
+function getScoresB($mapID, $pageNumber = 1, $pageDivide = 10) {
+ $top = $pageNumber * $pageDivide;
+ $bottom = $top - $pageDivide;
+
+ //TODO: !! set to false before uploading.
+ $isBlindMap = true;
+
+ $pageRequest = 'all';
+
+ if ($pageRequest == 'all') {
+ $pageReqStart = 1;
+ $pageReqEnd = 1000;
+ } elseif (is_int($pageRequest)) {
+ $pageReqStart = $pageRequest;
+ $pageReqEnd = $pageRequest;
+ } else {
+ $tmp = explode($pageRequest, "-");
+ $pageReqStart = $tmp[0];
+ $pageReqEnd = $tmp[1];
+ }
+
+ $userID = $_SESSION['userID'];
+ $myBestMoves = 0;
+ if ($isBlindMap) {
+ $sql = "SELECT `moves` FROM `solutions` WHERE `mapID` = '$mapID' AND `userID` = '$userID'";
+ $result = mysql_query($sql) or die(mysql_error());
+ $row = mysql_fetch_assoc($result);
+ $myBestMoves = $row['moves'];
+ // echo "XX $myBestMoves XX ";
+ // echo "XX $userID XX ";
+ }
+
+ $sql = "
+ SELECT
+ timediff(solutions.dateModified, TIMESTAMP(CURDATE())) as diff,
+ users.displayName as display,
+ solutions.moves as moves,
+ users.ID as ID,
+ IfNull(userData.displayColor, '#cccccc') as displayColor,
+ IfNull(userData.wallColor, '#666666') as wallColor,
+ IfNull(userData.wallEmblem, 'blank.png') as wallEmblem,
+ solutions.dateModified as cdate
+ FROM
+ `users`
+ JOIN `solutions`
+ ON users.ID = solutions.userID
+ LEFT JOIN `userData`
+ ON users.ID = userData.userID
+ WHERE solutions.mapID = '$mapID'
+ ORDER BY solutions.moves DESC, solutions.dateModified ASC, solutions.ID DESC
+ ";
+ // ORDER BY solutions.moves ASC, solutions.dateModified DESC, solutions.ID ASC
+ $result = mysql_query($sql);
+ //$utime = date("g:i A (T)");
+
+ $output['updateTime'] = date("g:i A (T)");
+
+ $i = -1;
+ $foundUser = false;
+
+ while ($row = mysql_fetch_assoc($result)) {
+ $i++;
+
+ $moves = $row['moves'];
+
+ $requestedUserID = $row['ID'];
+ if ($i == 1) {
+ $bestMoves = $moves;
+ $output['bestMoves'] = $bestMoves;
+ $output['bestBy'] = $row['display'];
+ }
+
+ if ($_SESSION['userID'] == $requestedUserID) {
+ $userPosition = $i;
+ //$myBestMoves = $moves;
+ } else {
+ if ($i > $top)
+ continue;
+ if ($i <= $bottom)
+ continue;
+ }
+
+ if ($wallEmblem == '')
+ $wallEmblem = 'blank.png';
+
+ $cdate = $row['cdate'];
+ $cdate = date("g:i A (T)", strtotime($cdate));
+
+ $scoredDate = strtotime($row['cdate']);
+ $secondsSinceScored = strtotime("now") - $scoredDate ;
+
+ //Alternate background colors
+ $background = '#262631';
+ if ($i % 2 == 1)
+ $background = '#20202a';
+
+ if ($userPosition == $i) {
+ $background = '#343c57';
+ $foundUser = true;
+ }
+
+ $medal = 'none';
+ if ($moves == $bestMoves)
+ $medal = 'silver';
+ if ($i == 1)
+ $medal = 'gold';
+
+ // if is blind map.
+ if ($isBlindMap AND $myBestMoves < $moves)
+ $row['moves'] = '???';
+
+ $output['users'][$i] = $row;
+ $output['users'][$i]['rank'] = $i;
+ $output['users'][$i]['scoredDate'] = $cdate;
+ $output['users'][$i]['secondsSinceScored'] = $secondsSinceScored;
+ $output['users'][$i]['background'] = $background;
+ $output['users'][$i]['medal'] = $medal;
+ $output['users'][$i]['isUser'] = $userPosition == $i;
+ //$output['users'][$i]['debug'] = "Bestmoves: $bestMoves moves: $moves";
+ } // END WHILE
+
+ if ($foundUser) {
+ $userPage = ceil(($userPosition / $pageDivide));
+ $output['userPage'] = $userPage;
+ $output['userPosition'] = $userPosition;
+ }
+
+ $output['pageCount'] = ceil(($i / $pageDivide));
+
+ if ($prevPage > 0) {
+ $navi .= " <a href='javascript:scoresShowPage($mapID, 1);'><<</a> ";
+ $navi .= " <a href='javascript:scoresShowPage($mapID, $prevPage);'><</a> ";
+ } else {
+ $navi .= " << ";
+ $navi .= " <";
+ }
+ for ($x = 1; $x <= $pageCount; $x++) {
+ if ($x < $pageNumber - 3 OR $x > $pageNumber + 3)
+ continue;
+ if ($x == $pageNumber)
+ $navi .= "<strong> $x </strong>";
+ elseif ($userPage == $x)
+ $navi .= " <a href='javascript:scoresShowPage($mapID, $x)'><i>$x</i></a> ";
+ else
+ $navi .= " <a href='javascript:scoresShowPage($mapID, $x)'>$x</a> ";
+ }
+ if ($nextPage <= $pageCount) {
+ $navi .= " <a href='javascript:scoresShowPage($mapID, $nextPage);'>></a> ";
+ $navi .= " <a href='javascript:scoresShowPage($mapID, $pageCount);'>>></a> ";
+ }
+
+ $output['users'] = array_values($output['users']);
+
+ return $output;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+$prep['name'] = 'Active';
+for($i = 1; $i <= 4; $i++) {
+
+ $map = MapOfTheDay($i);
+ $mapid = $map['id'];
+
+ $data['name'] = $map['map'][0][6];
+ $data['id'] = $map['id'];
+ $data['tiles'] = convertMapTiles($map['map']);
+ $prep['levels'][] = $data;
+}
+
+// $past['name'] = 'Past Maps';
+// for($i = 2; $i <= 4; $i++) {
+
+ //$map = MapOfTheDay($i);
+
+ // $pastMap = pastMap(1, $i);
+ // $mapid = $pastMap;
+ // $mapcode = getMapCode($mapID);
+ // $map = GenerateMapByCode($mapcode);
+
+ // $mapid = $map['id'];
+
+ // $data['name'] = $map['map'][0][6];
+ // $data['id'] = $map['id'];
+ // $data['tiles'] = convertMapTiles($map['map']);
+ // $past['levels'][] = $data;
+// }
+
+
+$json['action'] = 'getLevelSets';
+$json['response'] = 'ok';
+$json['data']['levelSetsResponse']['sets'][] = $prep;
+$json['data']['levelSetsResponse']['sets'][] = $past;
+
+
+$encoded = json_encode($json);
+die($encoded);
+
+
+function convertMapTiles($map) {
+ $r = '';
+ for($i = 1; $i < count($map); $i++) {
+ if ($i !== 1)
+ $r .= ',';
+ for($j = 0; $j < count($map[$i]); $j++) {
+ switch($map[$i][$j]) {
+ case 'o': $r .= '00'; break;
+ case 's': $r .= '02'; break;
+ //Multipath:
+ case 'S': $r .= '99'; break;
+ //Path 1 and Path 2 allow-only rocks.
+ case 'X':
+ break;
+ case 'x':
+ break;
+
+ case 'f': $r .= '03';break;
+ case 't': $r .= '50';break;
+ case 'u': $r .= '60';break;
+ case 'm': $r .= '51';break;
+ case 'n': $r .= '61';break;
+ case 'g': $r .= '52';break;
+ case 'h': $r .= '63';break;
+ case 'i': $r .= '54';break;
+ case 'j': $r .= '64';break;
+ case 'k': $r .= '55';break;
+ case 'l': $r .= '65';break;
+
+ case 'a': $r .= '40';break;
+ case 'b': $r .= '41';break;
+ case 'c': $r .= '42';break;
+ case 'd': $r .= '43';break;
+ case 'e': $r .= '44';break;
+ case 'r': $r .= '00';break;
+ //Visually distinct rocks:
+ case 'R': $r .= '00';break;
+ case 'q': $r .= '00';break;
+
+ //Technically shouldn't ever be used to display a wall...
+ case 'w': $r .= '01';break;
+ }
+ }
+ }
+ return $r;
+}
+
+
+function translatemap($mapMatrix, $mapID) {
+
+
+ $mapdata['height'] = $mapMatrix[0][0];
+ $mapdata['width'] = $mapMatrix[0][1];
+ $waypoints = $mapMatrix[0][2];
+ $mapdata['rocks'] = $mapMatrix[0][3];
+ $walls = $mapMatrix[0][4];
+ $mapdata['teleports'] = $mapMatrix[0][5];
+
+ $r .= "<level>";
+ $r .= "\n <properties>";
+ $r .= "\n <mapID>$mapID</mapID>";
+ $r .= "\n <availableCost>$walls</availableCost>";
+ $r .= "\n <waypoints>$waypoints</waypoints>";
+ $r .= "\n </properties>";
+
+
+ $r .= "\n <tiles>";
+ $r .= "\n <rows>";
+ for ($i = 1; $i < count($mapMatrix); $i++) {
+
+ $r .= "\n <row>";
+ for ($j = 0; $j < count($mapMatrix[$i]); $j++) {
+
+ switch($mapMatrix[$i][$j]) {
+ case 's': $r .= "02 "; break;
+ case 'f': $r .= "03 "; break;
+
+ case 't': $r .= "50 "; break;
+ case 'u': $r .= "61 "; break;
+ //TP2
+ case 'm': $r .= "51 "; break;
+ case 'n': $r .= "62 "; break;
+ //TP3
+ case 'g': $r .= "52 "; break;
+ case 'h': $r .= "63 "; break;
+ //TP4
+ case 'i': $r .= "53 "; break;
+ case 'j': $r .= "64 "; break;
+ //TP5
+ case 'k': $r .= "54 "; break;
+ case 'l': $r .= "65 "; break;
+
+ case 'a': $r .= "40 "; break;
+ case 'b': $r .= "41 "; break;
+ case 'c': $r .= "42 "; break;
+ case 'd': $r .= "43 "; break;
+ case 'e': $r .= "44 "; break;
+
+ case 'r': $r .= "00 "; break; //rock
+ case 'w': $r .= "01 "; break; //wall
+ //default: $r .= "<td class='grid_td' id='$handle' onClick='grid_click(this)' >".$index."</td>";
+ default: $r .= "10 ";
+ //default: $r .= "<td class='grid_td' id='$handle' onClick='grid_click(this)' >".$mapMatrix[$i][$j]."</td>";
+ }
+ }
+ $r .= "</row>";
+ }
+ $r .= "\n </rows>";
+ $r .= "\n </tiles>";
+ $r .= "\n</level>";
+ return $r;
+}
+
+
+
+
+
+
+
+
+
+// encode array $json to JSON string
+
+//echo "working...";
+
+if ($_GET['act'] == "test") {
+
+//header('Content-Type: text/xml');
+header("Content-Type: text/plain");
+
+if ($_POST['XMLRequest']) {
+ $string = $_POST['XMLRequest'];
+} else {
+ $string = '<!-- request -->
+<BrainMazeAPI version="0.1">
+ <APIRequest>
+ <SubmitScore>
+ <MapID>5</MapID>
+ <Username>FiftyToo</Username>
+ <Score>50</Score>
+ </SubmitScore>
+ </APIRequest>
+</BrainMazeAPI>';
+}
+
+$xml = simplexml_load_string($string);
+
+//echo $xml->APIRequest->SubmitScore->MapID;
+//print_r ($xml);
+
+
+
+
+$score = $xml->APIRequest[0]->SubmitScore[0]->Score;
+$username = $xml->APIRequest[0]->SubmitScore[0]->Username;
+
+//echo $xml->getName() . "<br />";
+// foreach($xml->children() as $child) {
+// echo $child->getName() . ": " . $child . "<br />";
+// }
+
+
+//$score = 50;
+$previousScore = 49;
+$rank = 1;
+
+//Begin XML Response
+$w = new XMLWriter();
+$w->openMemory();
+$w->startDocument('1.0','UTF-8');
+$w->startElement("BrainMazeAPI");
+ $w->writeAttribute("version", "0.1");
+ $w->startElement("APIResponse");
+ $w->startElement("SubmitScore");
+ $w->writeAttribute("result", "SUCCESS");
+
+ $w->startElement("rank");
+ $w->text($rank);
+ $w->endElement();
+
+ $w->startElement("update");
+ $w->text('true');
+ $w->endElement();
+
+ $w->startElement("UsernameUsed");
+ $w->text($username);
+ $w->endElement();
+
+ $w->startElement("SubmittedScore");
+ $w->text($score);
+ $w->endElement();
+
+ $w->startElement("PreviousHighScore");
+ $w->text($previousScore);
+ $w->endElement();
+
+ $w->endElement();
+ $w->endElement();
+$w->endElement();
+echo $w->outputMemory(true);
+
+}
+
+
+
+if ($_GET['act'] == "submit") {
+header('Content-Type: text/xml');
+echo '<!-- response -->
+<BrainMazeAPI version="0.1">
+ <APIResponse>
+ <SubmitScore result="SUCCESS">
+ <Rank>5</Rank>
+ <SubmittedScore>50</SubmittedScore>
+ <PreviousHighScore>49</PreviousHighScore>
+ </SubmitScore>
+ </APIResponse>
+</BrainMazeAPI>';
+
+}
+
+
+$xml = '<!-- request -->
+<BrainMazeAPI version="0.1">
+ <APIRequest>
+ <SubmitScore>
+ <MapID>5</MapID>
+ <Username>FiftyToo</Username>
+ <Score>50</Score>
+ </SubmitScore>
+ </APIRequest>
+</BrainMazeAPI>
+
+
+<!-- response -->
+<BrainMazeAPI version="0.1">
+ <APIResponse>
+ <SubmitScore result="SUCCESS">
+ <Rank>5</Rank>
+ <SubmittedScore>50</SubmittedScore>
+ <PreviousHighScore>49</PreviousHighScore>
+ </SubmitScore>
+ </APIResponse>
+</BrainMazeAPI>';
+
+
+
+
+if ($_GET['act'] == "getmap") {
+
+ $maptype = $_GET['maptype'] + 0;
+ if (!is_int($maptype))
+ return;
+ if ($maptype > 4)
+ return;
+ if ($maptype < 1)
+ return;
+
+ $motd = MapOfTheDay($maptype);
+ $map = $motd['map'];
+ $mapID = $motd['id'];
+
+ //print_r($map);
+
+ echo translatemap($map, $mapID);
+
+}
+
+?>
diff --git a/app.php b/app.php deleted file mode 100644 index 7f0ab30..0000000 --- a/app.php +++ /dev/null @@ -1,217 +0,0 @@ -<?PHP
-
-include "includes/maps.php";
-include "includes/sqlEmbedded.php";
-include "includes/mapoftheday.php";
-include "includes/datas.php";
-
-// encode array $json to JSON string
-
-//echo "working...";
-
-if ($_GET['act'] == "test") {
-
-//header('Content-Type: text/xml');
-header("Content-Type: text/plain");
-
-if ($_POST['XMLRequest']) {
- $string = $_POST['XMLRequest'];
-} else {
- $string = '<!-- request -->
-<BrainMazeAPI version="0.1">
- <APIRequest>
- <SubmitScore>
- <MapID>5</MapID>
- <Username>FiftyToo</Username>
- <Score>50</Score>
- </SubmitScore>
- </APIRequest>
-</BrainMazeAPI>';
-}
-
-$xml = simplexml_load_string($string);
-
-//echo $xml->APIRequest->SubmitScore->MapID;
-//print_r ($xml);
-
-
-
-
-$score = $xml->APIRequest[0]->SubmitScore[0]->Score;
-$username = $xml->APIRequest[0]->SubmitScore[0]->Username;
-
-//echo $xml->getName() . "<br />";
-// foreach($xml->children() as $child) {
-// echo $child->getName() . ": " . $child . "<br />";
-// }
-
-
-//$score = 50;
-$previousScore = 49;
-$rank = 1;
-
-//Begin XML Response
-$w = new XMLWriter();
-$w->openMemory();
-$w->startDocument('1.0','UTF-8');
-$w->startElement("BrainMazeAPI");
- $w->writeAttribute("version", "0.1");
- $w->startElement("APIResponse");
- $w->startElement("SubmitScore");
- $w->writeAttribute("result", "SUCCESS");
-
- $w->startElement("rank");
- $w->text($rank);
- $w->endElement();
-
- $w->startElement("update");
- $w->text('true');
- $w->endElement();
-
- $w->startElement("UsernameUsed");
- $w->text($username);
- $w->endElement();
-
- $w->startElement("SubmittedScore");
- $w->text($score);
- $w->endElement();
-
- $w->startElement("PreviousHighScore");
- $w->text($previousScore);
- $w->endElement();
-
- $w->endElement();
- $w->endElement();
-$w->endElement();
-echo $w->outputMemory(true);
-
-}
-
-
-
-if ($_GET['act'] == "submit") {
-header('Content-Type: text/xml');
-echo '<!-- response -->
-<BrainMazeAPI version="0.1">
- <APIResponse>
- <SubmitScore result="SUCCESS">
- <Rank>5</Rank>
- <SubmittedScore>50</SubmittedScore>
- <PreviousHighScore>49</PreviousHighScore>
- </SubmitScore>
- </APIResponse>
-</BrainMazeAPI>';
-
-}
-
-
-$xml = '<!-- request -->
-<BrainMazeAPI version="0.1">
- <APIRequest>
- <SubmitScore>
- <MapID>5</MapID>
- <Username>FiftyToo</Username>
- <Score>50</Score>
- </SubmitScore>
- </APIRequest>
-</BrainMazeAPI>
-
-
-<!-- response -->
-<BrainMazeAPI version="0.1">
- <APIResponse>
- <SubmitScore result="SUCCESS">
- <Rank>5</Rank>
- <SubmittedScore>50</SubmittedScore>
- <PreviousHighScore>49</PreviousHighScore>
- </SubmitScore>
- </APIResponse>
-</BrainMazeAPI>';
-
-
-
-
-if ($_GET['act'] == "getmap") {
-
- $maptype = $_GET['maptype'] + 0;
- if (!is_int($maptype))
- return;
- if ($maptype > 4)
- return;
- if ($maptype < 1)
- return;
-
- $motd = MapOfTheDay($maptype);
- $map = $motd['map'];
- $mapID = $motd['id'];
-
- //print_r($map);
-
- echo translatemap($map, $mapID);
-
-}
-
-function translatemap($mapMatrix, $mapID) {
-
-
- $mapdata['height'] = $mapMatrix[0][0];
- $mapdata['width'] = $mapMatrix[0][1];
- $waypoints = $mapMatrix[0][2];
- $mapdata['rocks'] = $mapMatrix[0][3];
- $walls = $mapMatrix[0][4];
- $mapdata['teleports'] = $mapMatrix[0][5];
-
- $r .= "<level>";
- $r .= "\n <properties>";
- $r .= "\n <mapID>$mapID</mapID>";
- $r .= "\n <availableCost>$walls</availableCost>";
- $r .= "\n <waypoints>$waypoints</waypoints>";
- $r .= "\n </properties>";
-
-
- $r .= "\n <tiles>";
- $r .= "\n <rows>";
- for ($i = 1; $i < count($mapMatrix); $i++) {
-
- $r .= "\n <row>";
- for ($j = 0; $j < count($mapMatrix[$i]); $j++) {
-
- switch($mapMatrix[$i][$j]) {
- case 's': $r .= "02 "; break;
- case 'f': $r .= "03 "; break;
-
- case 't': $r .= "50 "; break;
- case 'u': $r .= "61 "; break;
- //TP2
- case 'm': $r .= "51 "; break;
- case 'n': $r .= "62 "; break;
- //TP3
- case 'g': $r .= "52 "; break;
- case 'h': $r .= "63 "; break;
- //TP4
- case 'i': $r .= "53 "; break;
- case 'j': $r .= "64 "; break;
- //TP5
- case 'k': $r .= "54 "; break;
- case 'l': $r .= "65 "; break;
-
- case 'a': $r .= "40 "; break;
- case 'b': $r .= "41 "; break;
- case 'c': $r .= "42 "; break;
- case 'd': $r .= "43 "; break;
- case 'e': $r .= "44 "; break;
-
- case 'r': $r .= "00 "; break; //rock
- case 'w': $r .= "01 "; break; //wall
- //default: $r .= "<td class='grid_td' id='$handle' onClick='grid_click(this)' >".$index."</td>";
- default: $r .= "10 ";
- //default: $r .= "<td class='grid_td' id='$handle' onClick='grid_click(this)' >".$mapMatrix[$i][$j]."</td>";
- }
- }
- $r .= "</row>";
- }
- $r .= "\n </rows>";
- $r .= "\n </tiles>";
- $r .= "\n</level>";
- return $r;
-}
diff --git a/css/stats.css b/css/stats.css index 28d6842..d41ff7d 100644 --- a/css/stats.css +++ b/css/stats.css @@ -108,6 +108,20 @@ td, th { position:relative; } +.membersList { + width:850px; +} + + +.scoreRight{ + float:right; + margin: 5px; +} +.scoreLeft{ + float:left; + margin: 5px; +} + .scoreMedal { text-align:left; @@ -131,6 +145,24 @@ td, th { text-overflow: ellipsis; white-space:nowrap; } +.memberName { + float:left; + padding: 5px 0px 3px 3px; + width:130px; + overflow:hidden; + text-overflow: ellipsis; + white-space:nowrap; +} +#membersPerPage { + margin:25px; +} + +.membersList .display { + width:175px; + overflow:hidden; + text-align:left; + padding-left:42px; +} .myPoints { diff --git a/db updates.sql b/db updates.sql index 440f473..efc21ce 100644 --- a/db updates.sql +++ b/db updates.sql @@ -8,6 +8,16 @@ ADD `totalMoves` INT NOT NULL DEFAULT '0'; ALTER TABLE `solutions` ADD `isTiedForHighScore` BOOLEAN NOT NULL DEFAULT '0'; +ALTER TABLE `users` ADD `challengeTier` INT NOT NULL , +ADD `championPoints` INT NOT NULL , +ADD `totalWins` INT DEFAULT '0' NOT NULL , +ADD `totalTies` INT DEFAULT '0' NOT NULL ; + +ALTER TABLE `solutions` ADD `championPointsWorth` INT DEFAULT '0' NOT NULL , +ADD `isHighScore` TINYINT( 1 ) NOT NULL ; + +ALTER TABLE `solutions` ADD `isTiedForHighScore` BOOLEAN NOT NULL DEFAULT '0'; + -- Add the 'mapExpireTime' column ALTER TABLE `mapOfTheDay` ADD `mapExpireTime` DATETIME NULL DEFAULT NULL AFTER `mapDate`; @@ -57,12 +57,16 @@ if (isset($_GET['checkachieve']) && $_GET['checkachieve'] == 'true' && $_SESSION }
if ($_GET['r'] == 'reqMemberPage') {
+ $order = $_GET['order'];
+ $orderBy = $_GET['orderBy'];
- $order = 'ORDER BY dateJoined DESC';
$page = $_GET['reqPage'] + 0;
if (!is_int($page))
return;
- $json = getMembers($order, $page, 4);
+ $pageDivide = $_GET['membersPageDivide'] + 0;
+ if (!is_int($pageDivide))
+ return;
+ $json = getMembers($page, $pageDivide, $order, $orderBy);
$json['page'] = $page;
$encoded = json_encode($json);
die($encoded);
@@ -253,6 +257,10 @@ if ($_GET['r'] == 'getpath') { }
// --------- CONTINUE EXECUTION ---------
+ //TODO: !! Close the session with session_write_close(); as soon as possible.
+ // This allows the session file to be opened by other requests.
+
+
// Now we don't have to worry about how long we're taking.
// All of this code will execute without the user waiting on the server.
@@ -264,15 +272,6 @@ if ($_GET['r'] == 'getpath') { ////Challenge/Tutorial?
-
- ////--------- RUSH THE PATH BACK TO THE USER
- // ignore_user_abort(true);
- // $encoded = json_encode($json);
- // header("Connection: close");
- // header("Content-Length: " . mb_strlen($encoded));
- // echo $encoded;
- // flush();
-
////TODO: Clean this up a bit
// if ($_GET['isChallenge'] == 'true')
// {
diff --git a/includes/datas.php b/includes/datas.php index 8ae5d5f..6566b89 100644 --- a/includes/datas.php +++ b/includes/datas.php @@ -708,7 +708,19 @@ function getChampionPointsArray() { } //Select Members -function getMembers($order, $pageNumber = 1, $pageDivide = 50) { +function getMembers($pageNumber = 1, $pageDivide = 50, $order = 'DESC', $orderBy = 'dateJoined') { + + if ($pageDivide <= 0) + $pageDivide = 50; + if ($order !== 'ASC' AND $order !== 'DESC') + $order = 'DESC'; + $columns = array('dateJoined', 'dateLogin', 'championPoints', + 'totalMazes', 'totalWins', 'totalTies', 'totalMovesThisWeek', + 'totalMoves', 'display'); + if (!in_array($orderBy, $columns)) + $orderBy = 'dateJoined'; + //These values are now confirmed. + $sqlOrder = "ORDER BY `$orderBy` $order"; $top = $pageNumber * $pageDivide; $bottom = $top - $pageDivide; @@ -720,7 +732,7 @@ function getMembers($order, $pageNumber = 1, $pageDivide = 50) { $row = mysql_fetch_assoc($result); $total = $row['count']; - $output['pageCount'] = $total / $pageDivide; + $output['pageCount'] = ceil(($total / $pageDivide)); $pageRequest = 'all'; if ($pageRequest == 'all') { @@ -745,17 +757,18 @@ function getMembers($order, $pageNumber = 1, $pageDivide = 50) { WHERE solutions.userID = users.ID AND solutions.dateModified BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY) AND CURRENT_DATE) , 0) AS totalMovesThisWeek, - users.totalMazes, - users.totalWins, - users.totalTies, + users.championPoints as championPoints, + users.totalMazes as totalMazes, + users.totalWins as totalWins, + users.totalTies as totalTies, IfNull(userData.wallColor, '#666666') as wallColor, - IfNull(userData.displayColor, '#cccccc'), + IfNull(userData.displayColor, '#cccccc') as displayColor, userData.wallEmblem as wallEmblem, users.datejoined as dateJoined, users.dateLogin as dateLogin FROM `users` LEFT JOIN `userData` ON users.ID = userData.userID - $order + $sqlOrder LIMIT $limitTop, $pageDivide "; diff --git a/js/scores.js b/js/scores.js index 734683a..f67f2c8 100644 --- a/js/scores.js +++ b/js/scores.js @@ -219,7 +219,10 @@ function scoresFormatPageNavi(JO) { //Memberlist related functions:
var membersPages = new Object;
-var membersCurrentPage = 1;
+var membersCurrentPage = 1;
+var membersPageDivide = 50;
+var membersOrderBy = 'dateJoined';
+var membersOrder = 'DESC';
function membersRequestPage(page) {
console.log('membersRequestPage', page);
@@ -239,7 +242,12 @@ function membersRequestPage(page) { //console.log("Requesting Page", page, ajax.inUse);
// == Additionally, check for achievements.
- ajax.requestFile = "do.php?r=reqMemberPage&reqPage="+page;
+
+ var requestString = "do.php?r=reqMemberPage&reqPage="+page+"&orderBy="+membersOrderBy
+ requestString += "&order="+membersOrder
+ requestString += "&membersPageDivide="+membersPageDivide
+
+ ajax.requestFile = requestString;
ajax.onCompletion = membersRequestPageDone; // Specify function to be executed on response.
//ajax.onLoading = '';
//ajax.onLoaded = '';
@@ -255,8 +263,21 @@ function membersRequestPageDone() { return;
membersUpdatePage(JO.page, membersFormatPage(JO));
}
+function membersToggleOrder() {
+ if (membersOrder == 'ASC')
+ membersOrder = 'DESC';
+ else
+ membersOrder = 'ASC';
+}
+
+function membersShowPage(page, orderBy, force) {
+
+ if (orderBy) {
+ if (membersOrderBy == orderBy)
+ membersToggleOrder();
+ membersOrderBy = orderBy;
+ }
-function membersShowPage(page) {
page = page - 0;
console.log('membersShowPage', page);
if (membersPreparePage(page) == false) {
@@ -276,7 +297,7 @@ function membersShowPage(page) { //Also; update the page
- if (page != membersCurrentPage) {
+ if (page != membersCurrentPage || orderBy || force) {
membersRequestPage(page);
}
membersCurrentPage = page;
@@ -308,7 +329,7 @@ function membersFormatPageNavi(JO) { var r = '';
var showedPrevPage = true;
for (var i = 1; i <= JO.pageCount; i++) {
- if (
+ if (
(JO.page > i - 3 && JO.page < i + 3)
|| (i == 1)
|| (i == JO.pageCount)
@@ -329,6 +350,24 @@ function membersFormatPageNavi(JO) { showedPrevPage = false;
}
}
+ var nextPage = JO.page - 0 + 1;
+ var prevPage = JO.page - 1;
+ if (JO.pageCount > 1) {
+ if (JO.page < JO.pageCount) {
+ r = r+" <a class='scoreRight' title='Last' href='javascript:membersShowPage("+JO.pageCount+")'>>>></a>";
+ r = r+" <a class='scoreRight' title='Next' href='javascript:membersShowPage("+nextPage+")'>></a>";
+ } else {
+ r = r+" <span class='scoreRight'>>>></span>";
+ r = r+" <span class='scoreRight'>></span>";
+ }
+ if (JO.page > 1) {
+ r = " <a class='scoreLeft' title='Previous' href='javascript:membersShowPage("+prevPage+")'><</a>"+r;
+ r = " <a class='scoreLeft' title='First' href='javascript:membersShowPage(1)'><<<</a>"+r;
+ } else {
+ r = r+" <span class='scoreLeft'><<<</span>";
+ r = r+" <span class='scoreLeft'><</span>";
+ }
+ }
return r;
}
@@ -336,22 +375,40 @@ function membersFormatPageNavi(JO) { function membersFormatPage(JO) {
// console.log("Formating page");
- var p = "<table class='score'>";
+ var p = "<table class='membersList score'>";
+ var navi = '';
if (JO.pageCount > 1) {
- var navi = membersFormatPageNavi(JO);
- p = p+"<tr><td colspan='9' style='text-align:center;'>"+navi+"</td></tr>";
+ navi = "<tr><th colspan='10' style='text-align:center;'>"+membersFormatPageNavi(JO)+"</th></tr>";
+ p = p+navi;
}
-
+
+ var headers = new Object;
+ headers['display'] = 'Name';
+ headers['championPoints'] = 'Points';
+ headers['totalMazes'] = 'Mazes';
+ headers['totalMoves'] = 'Moves';
+ headers['totalMovesThisWeek'] = 'Past Week';
+ headers['totalTies'] = 'Ties';
+ headers['totalWins'] = 'Wins';
+ headers['dateJoined'] = 'Joined';
+ headers['dateLogin'] = 'Last Login';
+
+
p = p+"<tr title='Updated "+JO.updateTime+"'>";
p = p+"<th>Rank</th>";
- p = p+"<th style='width:125px; overflow:hidden; text-align:left; padding-left:42px;'>Name</th>";
- p = p+"<th>Mazes</th>";
- p = p+"<th>Moves</th>";
- p = p+"<th>Past Week</th>";
- p = p+"<th>Wins</th>";
- p = p+"<th>Ties</th>";
- p = p+"<th>Joined</th>";
- p = p+"<th>Last Login</th>";
+
+ var sortIndicator;
+ for (var i in headers) {
+ sortIndicator = '';
+ if (i == membersOrderBy) {
+ if (membersOrder == 'DESC')
+ sortIndicator = ' ⇧';
+ else
+ sortIndicator = ' ⇩';
+ }
+ p = p+"<th class='"+i+"'><a title='' href='javascript:membersShowPage("+membersCurrentPage+",\""+i+"\")'>"+headers[i]+"</a>"+sortIndicator+"</th>";
+ }
+
p = p+"</tr>";
var showedLastUser = true;
@@ -369,53 +426,36 @@ function membersFormatPage(JO) { if (previousI != i + 1)
if (previousI < i - 1 && previousI != 0)
styleClass = 'border-top: 6px solid #777799;';
+
+ if (u.wallEmblem == undefined)
+ u.wallEmblem = 'blank.png';
- p = p+ "<tr style='"+styleClass+" background-color: "+u.background+"; color:"+u.displayColor+";' title='Scored "+scoredLocalTime.format("h:MM:ss TT")+"'>";
+ p = p+ "<tr style='"+styleClass+" background-color: "+u.background+"; color:"+u.displayColor+";' title=''>";
p = p+ "<td style='text-align:left;'>";
p = p+ i+ "</td>";
- p = p+ "<td style='vertical-align: middle;'>";
+
+ p = p+ "<td style='vertical-align: middle;width:180px;'>";
p = p+ " <div class='grid_td' style='float:left; width:35px; height:35px; background:"+u.wallColor+" url(images/marks/"+u.wallEmblem+");'>";
- p = p+ " <div style='background-color:transparent;' class='grid_td_inner grid_td_rocks'>";
- p = p+ " </div>";
+ p = p+ " <div style='background-color:transparent;' class='grid_td_inner grid_td_rocks'>";
+ p = p+ " </div>";
p = p+ " </div>";
- p = p+ "";
- p = p+ "<span class='scoreName'><a href='achievements?id="+u.ID+"' style='color:"+u.displayColor+"'>"+u.display+"</a></span>";
+ p = p+ " <span class='memberName' style='float:left;'><a href='achievements?id="+u.ID+"' style='color:"+u.displayColor+"'>"+u.display+"</a></span>";
p = p+ "</td>";
+ p = p+ "<td style='text-align:right;'>"+u.championPoints+"</td>";
p = p+ "<td style='text-align:right;'>"+u.totalMazes+"</td>";
p = p+ "<td style='text-align:right;'>"+u.totalMoves+"</td>";
p = p+ "<td style='text-align:right;'>"+u.totalMovesThisWeek+"</td>";
- p = p+ "<td style='text-align:right;'>"+u.totalWins+"</td>";
p = p+ "<td style='text-align:right;'>"+u.totalTies+"</td>";
+ p = p+ "<td style='text-align:right;'>"+u.totalWins+"</td>";
p = p+ "<td style='text-align:right;'>"+u.dateJoined+"</td>";
p = p+ "<td style='text-align:right;'>"+u.dateLogin+"</td>";
p = p+ "</tr>";
previousI = i;
}
-
- //p = p+"<tr><th colspan='3' style='text-align:center;'>"+navi+"</th></tr>";
+ p = p+navi
p = p+"</table>";
-
- var nextPage = JO.page - 0 + 1;
- var prevPage = JO.page - 1;
-
- if (JO.pageCount > 1) {
- if (JO.page < JO.pageCount) {
- p = p+"<a href='javascript:membersShowPage("+nextPage+")' class='rightBtn scoreActive'>></a>";
- } else
- p = "<div class='rightBtn scoreDisabled'>></div>"+p;
- if (JO.page > 1) {
- p = "<a href='javascript:membersShowPage("+prevPage+")' class='leftBtn scoreActive'><</a>"+p;
- } else
- p = "<div class='leftBtn scoreDisabled'><</div>"+p;
- }
- p = "<div class='scoreContainer1'>"+p+"</div>";
-
- //console.log(p);
- //console.log('jo page', JO.page);
- //console.log('jo pagecount', JO.pageCount);
- //p = JO.navi+p;
return p;
}
diff --git a/pages/admin.php b/pages/admin.php index 0f54285..dddacaa 100644 --- a/pages/admin.php +++ b/pages/admin.php @@ -29,6 +29,7 @@ if ($_GET['applyall'] == 'true') { }
else if ($_GET['recalcStats'] == 'true') {
echo "Recalculating all player stats...";
+ flush(); //This sends the above echo
recalculateStatsForAllPlayers();
diff --git a/pages/chat.php b/pages/chat.php index 10e8f7f..094f86a 100644 --- a/pages/chat.php +++ b/pages/chat.php @@ -191,11 +191,17 @@ function getChatDone(data) { //console.log('(END) lastID', lastID);
}
+function prepChat(chat) {
+ chat = chat.join('|:|');
+ chat = chat.replace(/\&/g,'%26')
+ return chat;
+}
+
function getChat(message) {
//console.log('LASTID:', lastID);
var dataString = 'getChatFromID='+lastID;
if (chatBuffer.length > 0) {
- dataString += '&send=true&messages='+chatBuffer.join('|:|');
+ dataString += '&send=true&messages='+prepChat(chatBuffer);
chatBuffer.length = 0;
}
//$.getJSON('ajax_chat.php?getChatFromID='+lastID++message, );
@@ -206,7 +212,6 @@ function getChat(message) { data: dataString,
success: function(data) {getChatDone(data);}
});
-
}
function sendChat() {
diff --git a/pages/memberlist.php b/pages/memberlist.php index 038b023..c447f1c 100644 --- a/pages/memberlist.php +++ b/pages/memberlist.php @@ -17,88 +17,42 @@ include_once ('./includes/sqlEmbedded.php'); include_once ('./includes/datas.php');
-
-//Order by prep
-$c = 'totalMovesThisWeek';
-if (isset($_GET['c'])) {
- switch ($_GET['c']) {
- case "totalMoves":
- $c = 'totalMoves';
- break;
- case "totalMovesThisWeek":
- $c = 'totalMovesThisWeek';
- break;
- case "totalMazes":
- $c = 'totalMazes';
- break;
- case "totalWins":
- $c = 'totalWins';
- break;
- case "totalTies":
- $c = 'totalTies';
- break;
- case "dateJoined":
- $c = 'dateJoined';
- break;
- case "dateLogin":
- $c = 'dateLogin';
- break;
- }
-}
-$o = 'DESC';
-if (isset($_GET['o'])) {
- switch ($_GET['o']) {
- case "desc":
- $o = 'DESC';
- break;
- case "asc":
- $o = 'ASC';
- break;
- }
-}
-
?>
<script>
-document.write('Begin:');
-
-
-
+ javascript:membersShowPage(1);
</script>
<?
-
//Order by:
//$order = "ORDER BY $c $o";
-$data = getMembers($order, 1, 2);
+//$data = getMembers(1, 10);
$json = json_encode($data);
-
+//onchange="savePref("speed", this.value)"
//style='border:1px solid red;width: 500px; position:absolute;'
-echo "
-<div class='wrapper'>
- <div class='scoreContainer2' style='min-height:700px; width:700px'>
- <div id='members' class='scoreContainer2' >
- <script>
-
- var json = $json;
-
- //var JO = decryptJSON(json);
- var JO = json;
- var parsed = membersFormatPage(JO);
+?>
+<div class='wrapper'>
+ <form class='memberListForm'>
+ <select id="membersPerPage" onChange="membersPageDivide=this.options[this.selectedIndex].value;membersShowPage(1,false,true);">
+ <option value="10">10</option>
+ <option value="25">25</option>
+ <option value="50" selected="selected">50</option>
+ <option value="100">100</option>
+ </select>
+ </form>
- document.write(parsed);
- document.write('complete');
+ <div id='members'>
- </script>
- </div>
</div>
</div>
-";
+<br />
+<br />
+<?
//echo $json;
//print_r($data);
|