-
Notifications
You must be signed in to change notification settings - Fork 2
/
rostergallery.php
200 lines (188 loc) · 9.03 KB
/
rostergallery.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
<?php
if ($_SERVER['REQUEST_METHOD'] != "GET") {
header('HTTP/1.0 400 Invalid Request');
die();
}
$perflog = "\r\n" . date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - Start Page\r\n";
$root = $_SERVER['DOCUMENT_ROOT'];
require_once $root . '/include.php';
global $dbcon;
// Get the requested roster id
$perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - Start Inputs\r\n";
$rid = getIfSet($_REQUEST['r'], '');
if ($rid == null || $rid == '') {
$rid = getIfSet($_REQUEST['rid']);
}
if ($rid == null || $rid == '') {
$rid = getIfSet($_REQUEST['rosterid']);
}
$perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - Start Get Roster\r\n";
$myRoster = Roster::GetRoster($rid);
if ($myRoster == null) {
// Roster not found
// Send them to My Rosters I guess?
header("Location: /u");
exit;
}
$perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - Start Session\r\n";
$me = Session::CurrentUser();
$ismine = $me != null && $me->userid == $myRoster->userid;
if (!$ismine) {
$perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - Update ViewCount\r\n";
// Anonymous or a user viewing another user's roster, increment the viewcount
global $dbcon;
$sql = "UPDATE Roster SET viewcount = viewcount + 1 WHERE rosterid = ?";
$cmd = $dbcon->prepare($sql);
$paramtypes = "s";
$params = array();
$params[] =& $paramtypes;
$params[] =& $rid;
call_user_func_array(array($cmd, "bind_param"), $params);
$cmd->execute();
}
?>
<!DOCTYPE html>
<html>
<head>
<?php
$perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - Headers\r\n";
include "header.shtml";
$pagetitle = $myRoster->rostername . " " . ($myRoster->userid == 'prebuilt' ? "" : (" by " . $myRoster->username)) . " - Gallery";
$pagedesc = $myRoster->killteamname . " KillTeam" . ($myRoster->userid == 'prebuilt' ? "" : (" by " . $myRoster->username)) . ":\r\n" . $myRoster->notes;
$pagekeywords = "Gallery,Photos,Miniatures,Prebuilt,sample,rosters,teams,import," . $myRoster->rostername . "," . $myRoster->killteamname . "," . $myRoster->username;
$pageimg = "https://ktdash.app/api/rosterportrait.php?rid={$myRoster->rosterid}";
$pageurl = "https://ktdash.app/r/{$myRoster->rosterid}/g";
include "og.php";
?>
<?php
if (count($myRoster->operatives) > 0)
{
?>
<link rel="preload" href="/img/noimg.jpg" as="image">
<link rel="preload" href="/api/rosterportrait.php?rid=<?php echo $myRoster->rosterid ?>" as="image">
<link rel="preload" href="/api/operativeportrait.php?roid=<?php echo $myRoster->operatives[0]->rosteropid ?>" as="image">
<?php
}
?>
<style>
<?php
$perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - Start CSS\r\n";
include "css/styles.css";
$perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - End CSS\r\n";
?>
</style>
</head>
<body ng-app="kt" class="ng-cloak" ng-controller="ktCtrl" ng-init="initRosterGallery();"
style="
background-color: rgba(32, 32, 32, 0.9);
background-attachment:fixed;
background-image: url(/api/rosterportrait.php?rid=<?php echo $myRoster->rosterid ?>);
background-position: top center;
background-size: cover;
background-blend-mode: multiply;">
<?php
include "topnav.shtml";
include "templates/dialogs.shtml";
?>
<script type="text/javascript">
// Pre-load roster data straight on this page instead of XHR round-trip to the API
<?php $perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - Set roster preload\r\n"; ?>
document.body.setAttribute("myRoster", JSON.stringify(<?php echo json_encode($myRoster) ?>));
// Pre-load current user
<?php $perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - Set user preload\r\n"; ?>
document.body.setAttribute("currentuser", JSON.stringify(<?php echo json_encode($me) ?>));
<?php $perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - End data preloads\r\n"; ?>
</script>
<div class="orange container-fluid">
<div class="row">
<div class="col-11 m-0 p-0">
<h1>
<a class="navloader" href="/r/<?php echo $myRoster->rosterid ?>"><?php echo $myRoster->rostername ?></a>
</h1>
</div>
<div class="col-1 m-0 p-0 align-text-top text-end">
<div class="btn-group">
<a class="h3" role="button" id="gallactions" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-ellipsis-h fa-fw"></i>
</a>
<ul class="dropdown-menu dropdown-menu-dark" aria-labelledby="gallactions">
<?php if ($ismine) { ?>
<li><a class="pointer dropdown-item p-1" ng-click="initUploadRosterPortrait(myRoster)" data-bs-toggle="tooltip" data-bs-placement="top" title="Change Portrait"><i class="fas fa-camera fa-fw"></i> Edit Roster Portrait</a></li>
<?php } ?>
<li><a class="pointer dropdown-item p-1" ng-click="showShareRosterGallery(myRoster);" data-bs-toggle="tooltip" data-bs-placement="top" title="Share Roster"><i class="fas fa-share-square fa-fw"></i> Share Roster Gallery</a></li>
<li><a class="pointer dropdown-item p-1 navloader" href="/r/<?php echo $myRoster->rosterid ?>"><i class="fas fa-users fa-fw"></i> Go To Roster</a></li>
<?php if ($me != null && $me->userid == 'vince') { ?>
<li><a class="pointer dropdown-item p-1" ng-if="myRoster.spotlight == 1" ng-click="toggleSpotlight(myRoster, 0);"><i class="fas fa-star fa-fw text-small" data-bs-toggle="tooltip" data-bs-placement="top" title="Spotlight"></i></i> Spotlight Off</a></li>
<li><a class="pointer dropdown-item p-1" ng-if="myRoster.spotlight == 0" ng-click="toggleSpotlight(myRoster, 1);"><i class="fas fa-star fa-fw text-small" data-bs-toggle="tooltip" data-bs-placement="top" title="Spotlight"></i></i> Spotlight On</a></li>
<?php } ?>
</ul>
</div>
</div>
</div>
<span ng-if="myRoster.spotlight == 1"><i class="fas fa-star fa-fw text-small" data-bs-toggle="tooltip" data-bs-placement="top" title="Spotlight"></i></span>
<a class="navloader" href="/fa/<?php echo $myRoster->factionid ?>/kt/<?php echo $myRoster->killteamid ?>"><?php echo $myRoster->killteamname ?></a>
by <a class="navloader" href="/u/<?php echo $myRoster->username ?>"><span class="badge bg-dark"><i class="fas fa-user fa-fw"></i> <?php echo $myRoster->username ?></span></a>
</div>
<?php
if ($myRoster->notes != '') {
?>
<p style="max-height: 200px; overflow:auto;">
<?php
$perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - Roster notes\r\n";
echo preg_replace("/\r\n|\r|\n/", '<br/>', htmlentities($myRoster->notes));
?>
</p>
<?php
}
?>
<!-- loadWaiter -->
<h3 class="center" ng-show="loading">
<br/>
<div>
<i class="fas fa-undo-alt fa-fw rotate" ></i>
<br />
Loading Gallery...
</div>
</h3>
<div class="row p-0 m-0 ng-cloak" ng-hide="loading">
<!-- Roster Portrait -->
<div class="ng-cloak col-12 col-md-6 col-lg-4 col-xl-3 m-0 p-0" style="overflow: hidden;border: 1px solid #eee;">
<img id="rosterportrait_{{ myRoster.rosterid }}"
src="/api/rosterportrait.php?rid=<?php echo $myRoster->rosterid ?>"
alt="{{ myRoster.rostername }}"
title="{{ myRoster.rostername }}"
style="height: 100%; width: 100%; min-height: 150px; max-height: 400px; object-fit:cover; object-position:50% 0%; display:block;"
ng-click="showPhoto(myRoster.rostername, '/api/rosterportrait.php?rid=' + myRoster.rosterid);"
class="pointer" />
</div>
<!-- Operative Portraits -->
<div class="ng-cloak col-12 col-md-6 col-lg-4 col-xl-3 m-0 p-0" ng-repeat="operative in myRoster.operatives | orderBy: 'seq' track by $index" style="overflow: hidden; border: 1px solid #eee;">
<h4 class="orange m-0 p-1 row">
<div class="col-10 p-0 m-0 d-inline">
{{ operative.opname }}
</div>
<?php if ($ismine) { ?>
<div class="col-2 p-0 m-0 text-end">
<a class="pointer p-1" ng-click="initUploadOpPortrait(operative)" data-bs-toggle="tooltip" data-bs-placement="top" title="Change Portrait"><i class="fas fa-camera fa-fw"></i></a>
</div>
<?php }?>
</h4>
<div class="orange p-1">{{ operative.optype }}</div>
<div class="p-0 m-0 pointer">
<img id="opportrait_{{operative.rosteropid}}"
ng-src="/api/operativeportrait.php?roid={{ operative.rosteropid }}"
alt="{{ operative.opname }}"
title="{{ operative.opname }}"
style="height: 100%; width: 100%; min-height: 150px; max-height: 400px; object-fit:cover; object-position:50% 0%; display:block;"
ng-click="showPhoto(operative.opname, '/api/operativeportrait.php?roid=' + operative.rosteropid);" />
</div>
</div>
</div>
<?php
$perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - Start Footer\r\n";
include "footer.shtml";
$perflog .= date("H:i:s.") . substr(microtime(FALSE), 2, 3) . " - End Page\r\n";
echo "<!-- $perflog -->";
?>
</body>
</html>