Skip to content

Commit b7a2dff

Browse files
committed
Add packet index
1 parent 827bf48 commit b7a2dff

File tree

13 files changed

+271
-20
lines changed

13 files changed

+271
-20
lines changed

controllers/Document/Index.php

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,8 @@ public function run(Router &$router) {
6161
$documents = [];
6262
foreach ($model->documents as $document) {
6363
$user = $document->getUser();
64-
$documents[] = [
65-
"content" => $document->getContent(false),
66-
"created_datetime" => self::renderDateTime($document->getCreatedDateTime()),
67-
"edited_count" => $document->getEditedCount(),
68-
"edited_datetime" => self::renderDateTime($document->getEditedDateTime()),
69-
"id" => $document->getId(),
70-
"options_bitmask" => $document->getOptionsBitmask(),
71-
"title" => $document->getTitle(),
72-
"user" => [
64+
if ($user) {
65+
$user = [
7366
"avatar_url" => "https:"
7467
. (new Gravatar($user->getEmail()))->getUrl(null, "identicon"),
7568
"id" => $user->getId(),
@@ -78,7 +71,17 @@ public function run(Router &$router) {
7871
"/user/" . $user->getId() . "/"
7972
. Common::sanitizeForUrl($user->getName())
8073
)
81-
]
74+
];
75+
}
76+
$documents[] = [
77+
"content" => $document->getContent(false),
78+
"created_datetime" => self::renderDateTime($document->getCreatedDateTime()),
79+
"edited_count" => $document->getEditedCount(),
80+
"edited_datetime" => self::renderDateTime($document->getEditedDateTime()),
81+
"id" => $document->getId(),
82+
"options_bitmask" => $document->getOptionsBitmask(),
83+
"title" => $document->getTitle(),
84+
"user" => $user
8285
];
8386
}
8487
$model->documents = $documents;

controllers/Packet/Index.php

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
<?php
2+
3+
namespace BNETDocs\Controllers\Packet;
4+
5+
use \BNETDocs\Libraries\Common;
6+
use \BNETDocs\Libraries\Controller;
7+
use \BNETDocs\Libraries\Packet;
8+
use \BNETDocs\Libraries\Exceptions\UnspecifiedViewException;
9+
use \BNETDocs\Libraries\Gravatar;
10+
use \BNETDocs\Libraries\Router;
11+
use \BNETDocs\Libraries\UserSession;
12+
use \BNETDocs\Models\Packet\Index as PacketIndexModel;
13+
use \BNETDocs\Views\Packet\IndexHtml as PacketIndexHtmlView;
14+
use \BNETDocs\Views\Packet\IndexJSON as PacketIndexJSONView;
15+
use \DateTime;
16+
use \DateTimeZone;
17+
18+
class Index extends Controller {
19+
20+
public function run(Router &$router) {
21+
switch ($router->getRequestPathExtension()) {
22+
case "htm": case "html": case "":
23+
$view = new PacketIndexHtmlView();
24+
break;
25+
case "json":
26+
$view = new PacketIndexJSONView();
27+
break;
28+
default:
29+
throw new UnspecifiedViewException();
30+
}
31+
$model = new PacketIndexModel();
32+
33+
$model->packets = Packet::getAllPackets();
34+
$model->user_session = UserSession::load($router);
35+
36+
// Alphabetically sort the packets for HTML
37+
if ($view instanceof PacketIndexHtmlView && $model->packets) {
38+
usort($model->packets, function($a, $b){
39+
$a1 = $a->getPacketName();
40+
$b1 = $b->getPacketName();
41+
if ($a1 == $b1) return 0;
42+
return ($a1 < $b1 ? -1 : 1);
43+
});
44+
}
45+
46+
// Remove packets that are not published
47+
if ($model->packets) {
48+
$i = count($model->packets) - 1;
49+
while ($i >= 0) {
50+
if (!($model->packets[$i]->getOptionsBitmask()
51+
& Packet::OPTION_PUBLISHED)) {
52+
unset($model->packets[$i]);
53+
}
54+
--$i;
55+
}
56+
}
57+
58+
// Objectify for JSON
59+
if ($view instanceof PacketIndexJSONView) {
60+
$model->timestamp = new DateTime("now", new DateTimeZone("UTC"));
61+
$packets = [];
62+
foreach ($model->packets as $packet) {
63+
$user = $packet->getUser();
64+
if ($user) {
65+
$user = [
66+
"avatar_url" => "https:"
67+
. (new Gravatar($user->getEmail()))->getUrl(null, "identicon"),
68+
"id" => $user->getId(),
69+
"name" => $user->getName(),
70+
"url" => Common::relativeUrlToAbsolute(
71+
"/user/" . $user->getId() . "/"
72+
. Common::sanitizeForUrl($user->getName())
73+
)
74+
];
75+
}
76+
$packets[] = [
77+
"created_datetime" => self::renderDateTime($packet->getCreatedDateTime()),
78+
"edited_count" => $packet->getEditedCount(),
79+
"edited_datetime" => self::renderDateTime($packet->getEditedDateTime()),
80+
"id" => $packet->getId(),
81+
"options_bitmask" => $packet->getOptionsBitmask(),
82+
"packet_transport_layer_id" => $packet->getPacketTransportLayerId(),
83+
"packet_application_layer_id" => $packet->getPacketApplicationLayerId(),
84+
"packet_direction_id" => $packet->getPacketDirectionId(),
85+
"packet_id" => $packet->getPacketId(),
86+
"packet_name" => $packet->getPacketName(),
87+
"packet_format" => $packet->getPacketFormat(),
88+
"packet_remarks" => $packet->getPacketRemarks(false),
89+
"user" => $user,
90+
"url" => Common::relativeUrlToAbsolute(
91+
"/packet/" . $packet->getId() . "/"
92+
. Common::sanitizeForUrl($packet->getPacketName())
93+
)
94+
];
95+
}
96+
$model->packets = $packets;
97+
}
98+
99+
// Post-filter summary of packets
100+
$model->sum_packets = count($model->packets);
101+
102+
ob_start();
103+
$view->render($model);
104+
$router->setResponseCode(200);
105+
$router->setResponseTTL(0);
106+
$router->setResponseHeader("Content-Type", $view->getMimeType());
107+
$router->setResponseContent(ob_get_contents());
108+
ob_end_clean();
109+
}
110+
111+
protected static function renderDateTime($obj) {
112+
if (!$obj instanceof DateTime) return $obj;
113+
return $obj->format("r");
114+
}
115+
116+
}

libraries/Document.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ public function getTitle() {
190190
}
191191

192192
public function getUser() {
193+
if (is_null($this->user_id)) return null;
193194
return new User($this->user_id);
194195
}
195196

libraries/NewsPost.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ public function getTitle() {
170170
}
171171

172172
public function getUser() {
173+
if (is_null($this->user_id)) return null;
173174
return new User($this->user_id);
174175
}
175176

libraries/Packet.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ public function getPublishedDateTime() {
235235
}
236236

237237
public function getUser() {
238+
if (is_null($this->user_id)) return null;
238239
return new User($this->user_id);
239240
}
240241

libraries/Router.php

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use \BNETDocs\Controllers\News\View as NewsViewController;
1414
use \BNETDocs\Controllers\Packet\Popular as PacketPopularController;
1515
use \BNETDocs\Controllers\Packet\Search as PacketSearchController;
16+
use \BNETDocs\Controllers\Packet\Index as PacketIndexController;
1617
use \BNETDocs\Controllers\Packet\View as PacketViewController;
1718
use \BNETDocs\Controllers\PageNotFound as PageNotFoundController;
1819
use \BNETDocs\Controllers\Redirect as RedirectController;
@@ -246,16 +247,16 @@ public function route(Pair &$redirect = null) {
246247
break;
247248
case "document":
248249
switch ($subpath) {
249-
case "search": case "search.htm": case "search.html":
250-
$controller = new DocumentSearchController();
251-
break;
252250
case "index": case "index.htm": case "index.html":
253251
case "index.json":
254252
$controller = new DocumentIndexController();
255253
break;
256254
case "popular": case "popular.htm": case "popular.html":
257255
$controller = new DocumentPopularController();
258256
break;
257+
case "search": case "search.htm": case "search.html":
258+
$controller = new DocumentSearchController();
259+
break;
259260
default:
260261
if (is_numeric($subpath)) {
261262
$controller = new DocumentViewController($subpath);
@@ -287,12 +288,16 @@ public function route(Pair &$redirect = null) {
287288
break;
288289
case "packet":
289290
switch ($subpath) {
290-
case "search": case "search.htm": case "search.html":
291-
$controller = new PacketSearchController();
291+
case "index": case "index.htm": case "index.html":
292+
case "index.json":
293+
$controller = new PacketIndexController();
292294
break;
293295
case "popular": case "popular.htm": case "popular.html":
294296
$controller = new PacketPopularController();
295297
break;
298+
case "search": case "search.htm": case "search.html":
299+
$controller = new PacketSearchController();
300+
break;
296301
default:
297302
if (is_numeric($subpath)) {
298303
$controller = new PacketViewController($subpath);

libraries/Server.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ public function getUpdatedDateTime() {
147147
}
148148

149149
public function getUser() {
150+
if (is_null($this->user_id)) return null;
150151
return new User($this->user_id);
151152
}
152153

models/Document/Index.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ class Index extends Model {
1010

1111
public function __construct() {
1212
parent::__construct();
13-
$this->documents = null;
14-
$this->user_session = null;
13+
$this->documents = null;
14+
$this->sum_documents = null;
15+
$this->user_session = null;
1516
}
1617

1718
}

models/Packet/Index.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace BNETDocs\Models\Packet;
4+
5+
use \BNETDocs\Libraries\Model;
6+
7+
class Index extends Model {
8+
9+
public $user_session;
10+
11+
public function __construct() {
12+
parent::__construct();
13+
$this->packets = null;
14+
$this->sum_packets = null;
15+
$this->user_session = null;
16+
}
17+
18+
}

templates/Document/Index.phtml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,14 @@ require("./header.inc.phtml");
3535
</thead><tbody>
3636
<?php foreach ($this->getContext()->documents as $document) {
3737
$user = $document->getUser();
38-
$user_url = Common::relativeUrlToAbsolute("/user/" . urlencode($user->getId()) . "/" . Common::sanitizeForUrl($user->getName(), true));
39-
$avatar_url = "https:" . $getAvatar($avatars, $user)->getUrl(22, "identicon");
38+
if ($user) {
39+
$user_url = Common::relativeUrlToAbsolute("/user/" . urlencode($user->getId()) . "/" . Common::sanitizeForUrl($user->getName(), true));
40+
$avatar_url = "https:" . $getAvatar($avatars, $user)->getUrl(22, "identicon");
41+
}
4042
?>
4143
<tr>
4244
<td><a href="<?php echo Common::relativeUrlToAbsolute("/document/" . urlencode($document->getId()) . "/" . Common::sanitizeForUrl($document->getTitle(), true)); ?>"><?php echo htmlspecialchars($document->getTitle(), ENT_HTML5, "UTF-8"); ?></a></td>
43-
<td><a href="<?php echo $user_url; ?>"><img class="avatar" src="<?php echo $avatar_url; ?>"/> <?php echo htmlspecialchars($user->getName(), ENT_HTML5, "UTF-8"); ?></a></td>
45+
<td><?php if ($user) { ?><a href="<?php echo $user_url; ?>"><img class="avatar" src="<?php echo $avatar_url; ?>"/> <?php echo htmlspecialchars($user->getName(), ENT_HTML5, "UTF-8"); ?></a><?php } else { ?>Anonymous<?php } ?></td>
4446
</tr>
4547
<?php } ?>
4648
</tbody></table>

0 commit comments

Comments
 (0)