summaryrefslogtreecommitdiffstats
path: root/pages/scores.php
diff options
context:
space:
mode:
authorPatrick Davison <snapwilliam@gmail.com>2013-01-29 15:50:46 -0800
committerPatrick Davison <snapwilliam@gmail.com>2013-01-29 15:50:46 -0800
commit6ee6d213e08ca4a5dfa53ba7f74e5b78b6098b73 (patch)
tree93a10106e458ec5be640d837c9f3ea09182b7a0a /pages/scores.php
parent25b880ff40e62982e9b498bb5927271f81756e6b (diff)
downloadpathery-6ee6d213e08ca4a5dfa53ba7f74e5b78b6098b73.tar.xz
Leaderboard renamed to scores. URL backdating included.
Diffstat (limited to 'pages/scores.php')
-rw-r--r--pages/scores.php531
1 files changed, 531 insertions, 0 deletions
diff --git a/pages/scores.php b/pages/scores.php
new file mode 100644
index 0000000..3a79529
--- /dev/null
+++ b/pages/scores.php
@@ -0,0 +1,531 @@
+<?php
+htmlHeader(
+ array('stats', 'challenge'), 'Scores',
+ 'Score history for Pathery',
+ array('scores', 'dateformat')
+);
+
+include_once('./includes/maps.php');
+//include('./includes/mapoftheday.php');
+include_once('./includes/datas.php');
+include_once('./includes/mapclass.php');
+include_once('./includes/constants.php');
+
+include_once ('./includes/sqlEmbedded.php');
+
+$time_start = microtime(true);
+$time_end = microtime(true);
+
+//TESTCODE
+
+$time = $time_end - $time_start;
+if ($_GET['debug'] == true) echo "StatContent Rechieve: $time seconds\n";
+
+
+//The date to display
+$dateDisplay = date('Y-m-d', strtotime("-1 days"));
+
+//This is only used in a strtotime function, so this should be safe.
+if (isset($_GET['date'])) {
+ $dateLookup = $_GET['date'];
+ if (!strtotime($dateLookup))
+ $dateLookup = $dateDisplay;
+} else
+ $dateLookup = $dateDisplay;
+
+$daysAgo = day_diff($dateLookup, date('Y-m-d'));
+$dateAgo = strtotime("-$daysAgo days");
+
+$dateAsStr = date('l, F jS, Y', $dateAgo);
+
+$dateNextDay = date('Y-m-d', strtotime("+1 day", $dateAgo));
+$datePrevDay = date('Y-m-d', strtotime("-1 day", $dateAgo));
+
+//No cheater cheaters
+if ($daysAgo < 1)
+ die("You must specify a date previous to today.");
+
+
+?>
+
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script type="text/javascript" src="js/jquery.keystrokes.min.js"></script>
+
+<script>
+
+
+//Contra
+$(document).bind('keystrokes', {
+keys: ['arrow up', 'arrow up', 'arrow down', 'arrow down', 'arrow left', 'arrow right', 'arrow left', 'arrow right', 'b', 'a', 'enter']
+}, function(){
+alert('You unlocked awesomeness!');
+});
+
+
+var daysAgo = <? echo $daysAgo; ?>;
+
+$.ajaxSetup ({
+ cache: false
+});
+var ajax_load = "<img src='images/loading.gif' alt='loading...' />";
+// load() functions
+var loadUrl = "ajax/load.php";
+
+$("#load_basic").click(function(){
+ $("#result").html(ajax_load).load(loadUrl);
+});
+
+var loadUrl = "ajax/load.php";
+
+$("#load_basic").click(function(){
+ $("#result").html(ajax_load).load(loadUrl);
+});
+
+
+function displayMap(mapID) {
+ var urlString = 'ajax/scores.ajax.php?getmap=true&mapID='+mapID;
+ $("#mapDisplay").fadeOut('fast');
+ //.html(ajax_load)
+ $("#mapDisplay").load(urlString, null, function() {$("#mapDisplay").fadeIn('slow');});
+ urlString = 'do.php?r=reqScorePage&reqPage=1&mapID='+mapID;
+ //$("#scoreDisplay").html(ajax_load).load(urlString);
+
+ if (!$('#'+mapID+',dspScore').length) {
+ var newDiv = $('<div/>', {
+ 'id': mapID+',dspScore',
+ html: ''
+ });
+ $('#scoreDisplay').empty();
+ newDiv.prependTo('#scoreDisplay');
+ }
+ scoresShowPage(mapID, 1);
+
+ // $.ajax({
+ // type: "GET",
+ // url: "ajax/chat.ajax.php",
+ // data: dataString,
+ // success: function(data) {getChatDone(data);}
+ // });
+ // var newDiv = $('<div/>', {
+ // 'id': mapID+',dspScore',
+ // 'class': 'my-new-list',
+ // 'style': 'display: none',
+ // html: ''
+ // });
+}
+function getMaplist(request) {
+ // daysAgo++
+ switch (request) {
+ case "next":
+ if (daysAgo <= 1)
+ return;
+ daysAgo--;
+ break;
+ case "prev":
+ daysAgo++;
+ break;
+ case "yesterday":
+ if (daysAgo == 1)
+ return;
+ daysAgo = 1;
+ break;
+ }
+
+ var urlString = 'ajax/scores.ajax.php?getmaplist=true&daysago='+daysAgo;
+ $("#mapNavigation").fadeOut('fast');
+ //.html(ajax_load)
+ $("#mapNavigation").load(urlString, null, function() {$("#mapNavigation").fadeIn('slow');});
+}
+
+
+function handleJSONResponse(data) {
+ json = jQuery.parseJSON(data);
+ // $.each(json, function(key, user) {
+
+ // }
+}
+
+</script>
+
+
+<body>
+
+<?php
+topbar($Links);
+
+
+
+$todaysScoreMaps = getMapsPlayed($daysAgo);
+
+?>
+
+<div class="wrapper" style='width:1100px;'>
+
+<div id='#displayDate' style='text-align:center;padding-bottom:7px;'>
+<h2 title='Maps that were played during this day'><? echo $dateAsStr; ?></h2>
+</div>
+
+<div id="daynav">
+<a href='javascript:getMaplist("prev");' title='Older'>&lt; Previous Day</a>
+<a href='javascript:getMaplist("next");' title='Newer'>Next Day &gt;</a>
+<a href='javascript:getMaplist("yesterday");' title='Now'>Yesterday &gt;&gt;</a>
+<div id='mapNavigation'>
+<? echo getMapNavigation($todaysScoreMaps); ?>
+</div>
+<?
+
+
+function getMapsPlayed($daysAgo) {
+ $sql = "
+ SELECT `mapID`, `code`, `mapType`
+ FROM `mapOfTheDay`
+ INNER JOIN `maps` ON `mapID` = maps.ID
+ WHERE DATE_ADD(CURDATE(), INTERVAL -$daysAgo DAY) =
+ mapDate AND
+ `mapType` IN (1, 2, 3, 4)
+ ";
+ $result = mysql_query($sql) or die(mysql_error());
+ if (mysql_num_rows($result) == 0)
+ return -1;
+ global $mapNamesByType;
+ $r = array();
+ while($data = mysql_fetch_array($result)) {
+ $code = $data['code'];
+ $mapID = $data['mapID'];
+ $mapType = $data['mapType'];
+ $map = new map($code);
+ if ($map->name == '')
+ $map->name = $mapNamesByType[$mapType];
+ $r[$mapID] = $map;
+
+ }
+ return $r;
+}
+
+
+function getMapNavigation(&$maps) {
+ foreach ($maps as $mapID => &$map) {
+ $r .= "<div class='mapThumbnail' onclick='displayMap($mapID)'>";
+ $r .= $map->name;
+ $r .= DisplayMapThumbnail($map);
+ $r .= "</div>";;
+ }
+ return $r;
+}
+
+
+
+$time_start = microtime(true);
+
+
+$special = 'Special';
+if ($specialMapName != '')
+ $special = $specialMapName;
+
+?>
+</div>
+
+ <div style="clear: both"></div>
+ <div id=\"yms-$mapType\">
+
+ <div id='scoreDisplay' class="col1">
+
+ </div>
+
+ <div id='mapDisplay' style='display:none' class="col2">
+
+ </div>
+ </div>
+
+<?
+
+
+//echo $statContent;
+
+
+
+
+?>
+
+<div style="clear: both"></div>
+
+<!--
+<div id="yms-5">
+ <div class="col1">
+ <? echo $tStats;?>
+ </div>
+ <div class="col2">
+ <? echo $yStats;?>
+ </div>
+</div>
+
+<div id="yms-6">
+ <div class="col1">
+ <? echo $wStats;?>
+ </div>
+ <div class="col2">
+ <? echo $mStats;?>
+ </div>
+</div>
+-->
+
+<br class="clear">
+</div>
+
+<script>
+
+
+
+function showStats(type) {
+ //super usefulll
+ //var anchor = window.location.hash.substring(1);
+
+ for (var i = 1; i <= 4; i++) {
+ var elem = document.getElementById("yms-" + i);
+ if (elem.className.indexOf('hidden-stats') < 0)
+ elem.className += 'hidden-stats';
+ elem = document.getElementById("dl-" + i);
+ elem.className = elem.className.replace('selected', '');
+ }
+ elem = document.getElementById("yms-" + type);
+ elem.className = elem.className.replace('hidden-stats', '');
+ elem = document.getElementById("dl-" + type);
+ if (elem.className.indexOf('selected') < 0)
+ elem.className += 'selected';
+}
+showStats(1);
+</script>
+
+<script src="sounds/script/soundmanager.js"></script>
+<script type="text/javascript">soundManagerInit();</script>
+
+<?php
+
+
+
+
+htmlFooter();
+
+//TODO !! DELETE FUNCTIONS WHEN DONE!!
+function mysql_field_array( $query ) {
+ $field = mysql_num_fields( $query );
+ for ( $i = 0; $i < $field; $i++ ) {
+ $names[] = mysql_field_name( $query, $i );
+ }
+ return $names;
+}
+function displaystats($result, $caption = NULL) {
+ //Get names.
+ $headers = "<tr class='leaderboardHeaders'>";
+ $headers .= "<th class='leaderboardHeadersRank'>Rank</th>";
+ $headers .= "<th class='leaderboardHeadersName'>Name</th>";
+ $headers .= "<th class='leaderboardHeadersMoves'>Moves</th>";
+ $headers .= "<th class='leaderboardHeadersTime'>Time taken</th>";
+ $headers .= "</th>";
+ //Start table
+ //$r .= "<table style='border:1px solid #FFF'>";
+ //$r .= "<caption>$caption</caption>";
+ //Headers on the top. including Rank.
+ //$r .= "<tr>";
+ //$r .= $headers;
+ //$r .= "</tr>";
+
+ $i = 1;
+ $championPoints = null;
+ while ($row = mysql_fetch_assoc($result)) {
+ $rowcontent = '';
+ $mapid = $row['mapID'];
+ $solution = $row['solution'];
+ $wallColor = $row['wallColor'];
+ $wallEmblem = $row['wallEmblem'];
+ $displayColor = $row['displayColor'];
+ $displayName = $row['Name'];
+ $userID = $row['userID'];
+
+ //Default
+ if ($wallColor == '')
+ $wallColor = '#666666';
+
+ $x = "<tr class='lbrow' onmouseover='changeWallEmblem(\"$wallEmblem\"); changeWallColor(\"$wallColor\"); loadSol(\"$mapid:$solution\");'>\n";
+ $x .= "<td>$i</td>";
+ $x .= "<td class='leaderboardName'><span title='UserID: $userID'><a href='achievements?id=$userID' style='color:$displayColor'>$displayName</a></span></td>";
+ //$x .= "<td style='color:$displayColor';>" . $row['Name'] . '</td>';
+ $x .= '<td><a href="javascript:void(0)">' . $row['Moves'] . '</a></td>';
+ $x .= '<td>' . $row['Timetaken'] . '</td>';
+ $x .= "</tr>";
+
+ if ($userID == $_SESSION['userID']) {
+ $promotedContent .= $x;
+ $championPoints = $row['championPointsWorth'];
+ } else {
+ $content .= $x;
+ }
+
+ $i++;
+ }
+
+ $r = '';
+ if($championPoints != null && $championPoints > 0)
+ {
+ $r .= "<div class='myPoints'>Points earned: <span class='myPointsValue'>$championPoints</span> <img src='../images/championpoints.png' width='16px' height='16px'></img></div>";
+ }
+ $r .= "<table style='border:1px solid #FFF'>";
+ $r .= "<caption>$caption</caption>";
+ $r .= $headers;
+ $r .= $promotedContent;
+ $r .= $content;
+
+ $r .= "</table>";
+ return $r;
+}
+
+function day_diff($date1, $date2) {
+ $current = $date1;
+ $datetime2 = date_create($date2);
+ $count = 0;
+ while(date_create($current) < $datetime2){
+ $current = gmdate("Y-m-d", strtotime("+1 day", strtotime($current)));
+ $count++;
+ }
+ return $count;
+}
+
+
+function getStat ($type, $daysAgo = 1) {
+ switch ($type) {
+
+ //Todays
+ case 1:
+ $where = "
+ DATE_ADD(CURDATE(), INTERVAL -0 DAY) =
+ DATE_FORMAT(solutions.dateModified,'%Y-%m-%d')
+ AND DATE_ADD(CURDATE(), INTERVAL -0 DAY) =
+ DATE_FORMAT(maps.dateCreated,'%Y-%m-%d')
+ ";
+ $statname = "Today's Best Overall:";
+ break;
+ //Yesterdays
+ case 2:
+ $where = "
+ DATE_ADD(CURDATE(), INTERVAL -$daysAgo DAY) =
+ DATE_FORMAT(solutions.dateModified,'%Y-%m-%d')
+ AND DATE_ADD(CURDATE(), INTERVAL -$daysAgo DAY) =
+ DATE_FORMAT(maps.dateCreated,'%Y-%m-%d')
+ ";
+ $statname = "Yesterday's Best Overall:";
+ if ($daysAgo > 1) {
+ $statname = "$daysAgo days ago's Best Overall.";
+ }
+ break;
+ case 3:
+ $where = "
+ YEARweek(solutions.dateModified) = YEARweek(CURRENT_DATE)
+ ";
+ $statname = "This week, starting Sunday";
+ break;
+ case 4:
+ $where = "
+ ( month(solutions.dateModified) = month(CURRENT_DATE) AND year(solutions.dateModified) = year(CURRENT_DATE) )
+ ";
+ $statname = "This month's Best";
+ break;
+ }
+
+ $sql = "SELECT
+ users.displayName as Name,
+ SUM(solutions.moves) as Moves,
+ timediff(MAX(dateModified), maps.dateCreated) as Timetaken,
+ users.wallColor,
+ users.wallEmblem,
+ users.displayColor,
+ users.ID as userID,
+ SUM(CASE WHEN solutions.dateModified < CURDATE()
+ THEN solutions.championPointsWorth
+ ELSE 0 END) AS championPointsWorth
+ FROM `maps`
+ JOIN `solutions`
+ ON maps.ID = solutions.mapID
+ JOIN `users`
+ ON solutions.userID = users.ID
+ WHERE $where
+ GROUP BY solutions.userID
+ ORDER BY Moves DESC, MAX(dateModified) ASC
+ ";
+ $result = mysql_query($sql);
+ return displayStats($result, $statname);
+}
+
+function displayPastMaze($mapType, $name, $daysAgo = 1) {
+ //Ensure no cheating
+ if ($daysAgo < 1)
+ return;
+
+ $pastMap = pastMap($mapType, $daysAgo);
+ $mapID = $pastMap;
+ $mapcode = getMapCode($mapID);
+ $map = GenerateMapByCode($mapcode);
+
+ $sql = "SELECT
+ maps.ID as mapID,
+ solution,
+ users.displayName as Name,
+ SUM(solutions.moves) as Moves,
+ timediff(solutions.dateModified, maps.dateCreated) as Timetaken,
+ users.wallColor,
+ users.wallEmblem,
+ users.displayColor,
+ users.ID as userID,
+ solutions.championPointsWorth
+ FROM `maps`
+ JOIN `solutions`
+ ON maps.ID = solutions.mapID
+ JOIN `users`
+ ON solutions.userID = users.ID
+ JOIN `mapOfTheDay`
+ ON maps.ID = mapOfTheDay.mapID
+ WHERE
+ maps.ID = '$mapID'
+ GROUP BY solutions.userID
+ ORDER BY Moves DESC, `dateModified` ASC
+ ";
+
+ $result = mysql_query($sql) or die(mysql_error());
+
+ $statname = "Yesterday's Best $name:";
+ if ($daysAgo > 1) {
+ $statname = "$daysAgo days ago's Best $name:";
+ }
+ $stats = displayStats($result, $statname);
+
+ //Sucky temporary solution:
+ $GLOBALS['specialMapName'] = $map[0][6];
+
+ $sql = "SELECT `moves`, `displayName`, `solution`
+ FROM `solutions`
+ LEFT JOIN `users`
+ ON solutions.userID = users.ID
+ WHERE `mapID` = '$mapID'
+ ORDER BY `moves` DESC, `dateModified` ASC
+ LIMIT 1";
+ $result = mysql_query($sql) or die(mysql_error());
+ if (mysql_num_rows($result) > 0) {
+ list($bestMoves, $byName, $solution) = mysql_fetch_row($result);
+ }
+ $r = '';
+
+ $r .= '<div style="clear: both"></div>';
+ $r .= "<div id=\"yms-$mapType\">";
+ $r .= '<div class="col1">';
+ $r .= $stats;
+ $r .= '</div>';
+
+ $r .= '<div class="col2">';
+ $r .= "Best solution for this map: <b>$bestMoves by $byName </b>";
+ $r .= DisplayMap($map, $mapID, 'normal', 2);
+ $r .= '</div>';
+ $r .= '</div>';
+ return $r;
+}
+
+
+?>