From f65cf9406397ac688ec4060ba070e172af0cd90b Mon Sep 17 00:00:00 2001 From: Patrick Davison Date: Thu, 14 Feb 2013 00:42:29 -0800 Subject: Lots'n Lots of work on the scoreboard... --- ajax/maps.ajax.php | 14 +- ajax/scores.ajax.php | 108 ++++++++- css/maps.css | 10 +- includes/maps.php | 4 +- js/scores.js | 67 ++---- pages/home.php | 3 +- pages/scores.php | 644 +++++++++++++-------------------------------------- 7 files changed, 307 insertions(+), 543 deletions(-) diff --git a/ajax/maps.ajax.php b/ajax/maps.ajax.php index d2ae750..a5d72f2 100644 --- a/ajax/maps.ajax.php +++ b/ajax/maps.ajax.php @@ -1,20 +1,22 @@ \ No newline at end of file diff --git a/ajax/scores.ajax.php b/ajax/scores.ajax.php index b95d22e..7ba25d0 100644 --- a/ajax/scores.ajax.php +++ b/ajax/scores.ajax.php @@ -8,6 +8,7 @@ $userID = $_SESSION['userID']; require('../includes/maps.php'); require('../includes/mapclass.php'); require('../includes/datas.php'); +include_once('../includes/sqli.php'); if ($_GET['getmap'] == 'true') { $mapID = $_GET['mapID']; @@ -28,17 +29,105 @@ if ($_GET['getmaplist'] == 'true') { echo getMapNavigation($todaysScoreMaps); } +if (isset($_GET['getmapidsbydate'])) { + //TODO: SANATIZE + $requestDate = $_GET['getmapidsbydate']; + echo json_encode(getMapIDsByDate($requestDate)); +} + +// Here is that SQL for you +// SELECT correctMapIds.mapType, maps.ID, maps.code +// FROM maps +// INNER JOIN +// ( + // SELECT MIN(mapOfTheDay.mapId) AS mapId, mapOfTheDay.mapType + // FROM `mapOfTheDay` + // INNER JOIN + // ( + // SELECT mapType, MIN(mapExpireTime) AS mapExpireTime + // FROM mapOfTheDay + // WHERE mapExpireTime > DATE_ADD(CURDATE(), INTERVAL -1 DAY) + // GROUP BY mapType + // ) AS expireTimes ON mapOfTheDay.mapType = expireTimes.mapType + // AND mapOfTheDay.mapExpireTime = expireTimes.mapExpireTime + // GROUP BY mapOfTheDay.mapType +// ) AS correctMapIds ON maps.ID = correctMapIds.mapId + +//TODO: SANITIZE. +function getMapIDsByDate($date) { + global $mysqli; +$sql = "SELECT MIN(mapOfTheDay.mapId) AS mapId +FROM `mapOfTheDay` +INNER JOIN +( + SELECT mapType, MIN(mapExpireTime) AS mapExpireTime + FROM mapOfTheDay + WHERE mapExpireTime > ? + GROUP BY mapType +) AS expireTimes ON mapOfTheDay.mapType = expireTimes.mapType + AND mapOfTheDay.mapExpireTime = expireTimes.mapExpireTime +GROUP BY mapOfTheDay.mapType"; + +$stmt = $mysqli->prepare($sql); +$stmt->bind_param("s", $date); +$stmt->execute(); + + $stmt->bind_result($mapID); + /* fetch values */ + while ($stmt->fetch()) { + $ids[] = $mapID; + } + + return $ids; + +var_dump($ids); + + +while ($myrow[] = $result->fetch_assoc()) {} + + $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)) { + $mapID = $data['mapID']; + $mapType = $data['mapType']; + $map = new map($code); + if ($map->name == '') + $map->name = $mapNamesByType[$mapType]; + $r[$mapID] = $map; + } + return $myrow; +} 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) - "; + // $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, 5) + // "; + + $sql = "SELECT correctMapIds.mapType, maps.ID as mapID, maps.code +FROM maps +INNER JOIN +( + SELECT MIN(mapOfTheDay.mapId) AS mapId, mapOfTheDay.mapType + FROM `mapOfTheDay` + INNER JOIN + ( + SELECT mapType, MIN(mapExpireTime) AS mapExpireTime + FROM mapOfTheDay + WHERE mapExpireTime > DATE_ADD(CURDATE(), INTERVAL -$daysAgo DAY) + GROUP BY mapType + ) AS expireTimes ON mapOfTheDay.mapType = expireTimes.mapType + AND mapOfTheDay.mapExpireTime = expireTimes.mapExpireTime + GROUP BY mapOfTheDay.mapType +) AS correctMapIds ON maps.ID = correctMapIds.mapId"; + $result = mysql_query($sql) or die(mysql_error()); if (mysql_num_rows($result) == 0) return -1; @@ -49,8 +138,7 @@ function getMapsPlayed($daysAgo) { $mapID = $data['mapID']; $mapType = $data['mapType']; $map = new map($code); - if ($map->name == '') - $map->name = $mapNamesByType[$mapType]; + if ($map->name == '') $map->name = $mapNamesByType[$mapType]; $r[$mapID] = $map; } diff --git a/css/maps.css b/css/maps.css index 57ddc7e..86ca3c4 100644 --- a/css/maps.css +++ b/css/maps.css @@ -36,6 +36,14 @@ background-image: url(../images/OverlayTileFaceted50b.png); background-color: #b85555; } +.map .r2 { + background-color: #CCCCCC; + background-image: url(../images/OverlayTileFaceted50b.png); +} +.map .p { + background-color: #FFFFEE; + background-image: url(../images/PathableOnly1.png.png); +} .map .s { background-image: url(../images/OverlayStart50b.png); background-color: #fbfefb; @@ -320,7 +328,7 @@ background-image: url(../images/OverlayTileFaceted50b.png); } .grid_td_path { - background-image: url(../images/OverlayTeleport.png); + background-image: url(../images/PathableOnly1.png.png); background-color: #FFFFEE; } diff --git a/includes/maps.php b/includes/maps.php index efe17b8..1af64a2 100644 --- a/includes/maps.php +++ b/includes/maps.php @@ -324,9 +324,9 @@ function DisplayMapThumbnail($map, $link = false) { $size = $size.'%'; //$size = '1.2px'; if ($link) { - $r .= ""; + $r .= "
"; } else { - $r .= "
"; + $r .= "
"; } for ($y = 0; $y < $map->height; $y++) { //Number of Rows $r .= ""; diff --git a/js/scores.js b/js/scores.js index 47a37c3..7c97a2d 100644 --- a/js/scores.js +++ b/js/scores.js @@ -55,7 +55,7 @@ function scoresUpdatePage(mapid, page, html) { scorePages[mapid][page].html = html; //if (scorePages[mapid][page] == currentPage[mapid]) { if (page == currentPage[mapid]) { - scoresShowPage(mapid, page); + scoresShowPage(page, mapid); } } @@ -63,7 +63,7 @@ function scoresShowMyPage(mapid) { //Future use } -function scoresShowPage(mapid, page) { +function scoresShowPage(page, mapid) { mapid = mapid - 0; page = page - 0; // console.log('scoresShowPage', mapid, page); @@ -106,13 +106,16 @@ function scoresPreparePage (mapid, page) { return true; } +var scoresShowNavSideBtns = false; function scoresFormatPage(JO) { // console.log("Formating page"); var p = "
"; + console.log("jo object", JO); + var navi = ''; if (JO.pageCount > 1) { - var navi = scoresFormatPageNavi(JO); - p = p+""; + navi = ""; + p = p+navi; } p = p+""; p = p+""; @@ -183,18 +186,20 @@ function scoresFormatPage(JO) { } //p = p+""; + p = p+navi; p = p+"
"+navi+"
"+formatPageNavi(JO, "scoresShowPage", JO.mapid)+"
Rank
"+navi+"
"; var nextPage = JO.page - 0 + 1; var prevPage = JO.page - 1; - if (JO.pageCount > 1) { + //TODO: Re'enable this somehow? + if (JO.pageCount > 1 && scoresShowNavSideBtns) { if (JO.page < JO.pageCount) { - p = p+">"; + p = p+">"; } else p = "
>
"+p; if (JO.page > 1) { - p = "<"+p; + p = "<"+p; } else p = "
<
"+p; } @@ -208,36 +213,6 @@ function scoresFormatPage(JO) { return p; } -function scoresFormatPageNavi(JO) { - var r = ''; - var showedPrevPage = true; - for (var i = 1; i <= JO.pageCount; i++) { - if ( - (JO.page > i - 3 && JO.page < i + 3) - || (i == 1) - || (i == JO.pageCount) - || (i == JO.userPage) - ) { - - if (!showedPrevPage) - r = r + ' ... '; - if (JO.page == i) { - r = r + " " + i + ""; - } else if (i == JO.userPage) { - r = r + " " + i + ''; - } else { - r = r + " " + i + ''; - } - showedPrevPage = true; - } else { - showedPrevPage = false; - } - } - - return r; -} - - //Memberlist related functions: var membersPages = new Object; var membersCurrentPage = 1; @@ -346,7 +321,7 @@ function membersUpdatePage(page, html) { } } -function membersFormatPageNavi(JO) { +function formatPageNavi(JO, callback) { var r = ''; var showedPrevPage = true; for (var i = 1; i <= JO.pageCount; i++) { @@ -362,9 +337,9 @@ function membersFormatPageNavi(JO) { if (JO.page == i) { r = r + " " + i + ""; } else if (i == JO.userPage) { - r = r + " " + i + ''; + r = r + " " + i + ''; } else { - r = r + " " + i + ''; + r = r + " " + i + ''; } showedPrevPage = true; } else { @@ -375,15 +350,15 @@ function membersFormatPageNavi(JO) { var prevPage = JO.page - 1; if (JO.pageCount > 1) { if (JO.page < JO.pageCount) { - r = r+" >>>"; - r = r+" >"; + r = r+" >>>"; + r = r+" >"; } else { r = r+" >>>"; r = r+" >"; } if (JO.page > 1) { - r = " <"+r; - r = " <<<"+r; + r = " <"+r; + r = " <<<"+r; } else { r = r+" <<<"; r = r+" <"; @@ -399,7 +374,7 @@ function membersFormatPage(JO) { var p = ""; var navi = ''; if (JO.pageCount > 1) { - navi = ""; + navi = ""; p = p+navi; } @@ -476,7 +451,7 @@ function membersFormatPage(JO) { previousI = i; } - p = p+navi + p = p+navi; p = p+"
"+membersFormatPageNavi(JO)+"
"+formatPageNavi(JO, "membersShowPage")+"
"; return p; } diff --git a/pages/home.php b/pages/home.php index cc94068..31ea756 100644 --- a/pages/home.php +++ b/pages/home.php @@ -55,6 +55,7 @@ echo soundManager2(); @@ -200,7 +201,7 @@ function displayMaze($motd, $mapType) { $topscorediv = "
- + "; $mysolution = ''; diff --git a/pages/scores.php b/pages/scores.php index 43bc7dc..118dfa7 100644 --- a/pages/scores.php +++ b/pages/scores.php @@ -45,7 +45,8 @@ $datePrevDay = date('Y-m-d', strtotime("-1 day", $dateAgo)); if ($daysAgo < 1) die("You must specify a date previous to today."); - +//!! TODO: +$timeUntilNewDailyMap = strtotime("tomorrow") - strtotime("now"); ?> @@ -59,44 +60,60 @@ playerWallEmblem = ''; - -
-
-Work in progress -
- -
-

+
+Loading...
-< Previous Day -Next Day > -Yesterday >>
-
<
-
>
+
<
+
>
- + Loading...
name == '') - $map->name = $mapNamesByType[$mapType]; - $r[$mapID] = $map; - - } - return $r; -} - - -function getMapNavigation(&$maps) { - foreach ($maps as $mapID => &$map) { - $r .= "
"; - $r .= $map->name; - $r .= DisplayMapThumbnail($map); - $r .= "
";; - } - return $r; -} - - - -$time_start = microtime(true); - - -$special = 'Special'; -if ($specialMapName != '') - $special = $specialMapName; - -?> -
- -
-
- -
- -
- - -
- - - -
- - - -
-
- - - "; - $headers .= "Rank"; - $headers .= "Name"; - $headers .= "Moves"; - $headers .= "Time taken"; - $headers .= ""; - //Start table - //$r .= ""; - //$r .= ""; - //Headers on the top. including Rank. - //$r .= ""; - //$r .= $headers; - //$r .= ""; - - $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 = "\n"; - $x .= ""; - $x .= ""; - //$x .= "'; - $x .= ''; - $x .= ''; - $x .= ""; - - if ($userID == $_SESSION['userID']) { - $promotedContent .= $x; - $championPoints = $row['championPointsWorth']; - } else { - $content .= $x; - } - - $i++; - } - - $r = ''; - if($championPoints != null && $championPoints > 0) - { - $r .= "
Points earned: $championPoints
"; - } - $r .= "
$caption
$i$displayName" . $row['Name'] . '' . $row['Moves'] . '' . $row['Timetaken'] . '
"; - $r .= ""; - $r .= $headers; - $r .= $promotedContent; - $r .= $content; - - $r .= "
$caption
"; - 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 .= '
'; - $r .= "
"; - $r .= '
'; - $r .= $stats; - $r .= '
'; - - $r .= '
'; - $r .= "Best solution for this map: $bestMoves by $byName "; - $r .= DisplayMap($map, $mapID, 'normal', 2); - $r .= '
'; - $r .= '
'; - return $r; -} - - -?> +?> \ No newline at end of file -- cgit v1.2.3