Skip to content

Commit 624f072

Browse files
Merge pull request #104 from CodeForPhilly/develop
Release: v1.3.7
2 parents c2a3549 + 5291518 commit 624f072

File tree

2 files changed

+247
-0
lines changed

2 files changed

+247
-0
lines changed

html-templates/home-classic.tpl

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
{extends designs/site.tpl}
2+
3+
{block js-bottom}
4+
{$dwoo.parent}
5+
{jsmin "features/sidebar-checkin.js"}
6+
{/block}
7+
8+
{block content-wrapper}
9+
<main role="main">
10+
<div class="jumbotron">
11+
<div class="container-fluid">
12+
<div class="jumbotron-caption">
13+
<div class="media">
14+
<div class="media-left">
15+
<img src="{versioned_url img/logo.png}" class="media-object" height="140" alt="{Laddr::$siteName|escape}">
16+
</div>
17+
<div class="media-body">
18+
<p class="media-heading">{Laddr::$siteSlogan|escape|markdown}</p>
19+
<ul class="list-inline">
20+
{if $.User}
21+
<li class="list-inline-item"><p><a href="/chat" class="btn btn-success">{icon "comment"}&nbsp;{_ "Chat with us on Slack"}</a></p></li>
22+
{else}
23+
<li class="list-inline-item"><p><a href="/register" class="btn btn-success">{icon "heart"}&nbsp;{_ "Join Us!"}</a></p></li>
24+
{/if}
25+
<li class="list-inline-item"><p><a href="/projects" class="btn btn-primary">{icon "book"}&nbsp;{_ "Browse Projects"}</a></p></li>
26+
</ul>
27+
</div>
28+
</div>
29+
</div>
30+
</div>
31+
</div>
32+
<div class="container">
33+
<h1 class="sr-only">{Laddr::$siteName|escape}</h1>
34+
<div class="row">
35+
<div class="col-md-8 home-column-main">
36+
{include includes/home.announcements.tpl}
37+
38+
{load_templates subtemplates/meetups.tpl}
39+
{load_templates subtemplates/projects.tpl}
40+
{load_templates subtemplates/people.tpl}
41+
42+
{if $currentMeetup}
43+
<h2>{_ "Current Meetup"}</h2>
44+
<div class="card mb-4">
45+
<div class="card-header">
46+
{meetup $currentMeetup showRsvp=false}
47+
</div>
48+
<div class="card-body">
49+
<form class="checkin" action="/checkin" method="POST">
50+
<div class="form-group">
51+
<input type="hidden" name="MeetupID" value="{$currentMeetup.id}">
52+
53+
{selectField inputName=ProjectID blankOption='Current Project (if any)' options=Laddr\Project::getAll() useKeyAsValue=no default=$Buzz->ProjectID}
54+
</div>
55+
<input type="submit" value="Check In" class="btn btn-success">
56+
</form>
57+
58+
{if count($currentMeetup.checkins)}
59+
<div class="checkins">
60+
<h3>{_ "Checked-in Members"}</h3>
61+
62+
{$lastProjectID = false}
63+
64+
{foreach item=Checkin from=$currentMeetup.checkins}
65+
{if $Checkin->ProjectID !== $lastProjectID}
66+
{tif !$.foreach.default.first ? '</ul>'}
67+
<h4>
68+
{if $Checkin->Project}
69+
{projectLink $Checkin->Project}
70+
{else}
71+
{_ "No Current Project"}
72+
{/if}
73+
</h4>
74+
75+
{$lastProjectID = $Checkin->ProjectID}
76+
77+
<ul class="row list-unstyled">
78+
{/if}
79+
80+
<li class="col-xs-6 col-sm-4 col-md-3">
81+
{personLink $Checkin->Member photo=yes photoSize=64 linkCls="thumbnail"}
82+
</li>
83+
{/foreach}
84+
85+
</ul>
86+
87+
</div>
88+
{/if}
89+
90+
</div>
91+
</div>
92+
{/if}
93+
94+
<h2>{_ "Latest Project Activity"}</h2>
95+
96+
<ul class="list-inline">
97+
<li class="list-inline-item"><a href="/project-updates" class="btn btn-link">{icon "asterisk"} {_ "Browse all project updates"}</a></li>
98+
<li class="list-inline-item"><a href="/project-buzz" class="btn btn-link">{icon "flash"} {_ "Browse all project buzz"}</a></li>
99+
<li class="list-inline-item"><a href="/blog" class="btn btn-link">{icon "file"} {_ "Browse all blog posts"}</a></li>
100+
</ul>
101+
102+
{*
103+
<article class="post card">
104+
<div class="card-block">
105+
<header class="post-header">
106+
<h3 class="post-title">
107+
<a href="#">Code for Philly Hack Night</a><small class="text-muted margin-left">{icon "console"}</small>
108+
</h3>
109+
</header>
110+
<div class="update-body">
111+
<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
112+
113+
<h4>Projects</h4>
114+
<h5><a href="/projects/example_project-4">Example Project</a></h5>
115+
<ul class="row list-unstyled">
116+
<li class="col-xs-6 col-sm-4 col-md-3"><a href="/people/chris" title="Chris Alfano" class="thumbnail text-center"><img src="//www.gravatar.com/avatar/36b6d909c0c65d4fcdfcc307b84fb06f?s=128&amp;r=g&amp;d=mm" class="avatar " width="64" height="64"><span class="name ">Chris Alfano</span></a></li>
117+
<li class="col-xs-6 col-sm-4 col-md-3"><a href="/people/chris" title="Chris Alfano" class="thumbnail text-center"><img src="//www.gravatar.com/avatar/36b6d909c0c65d4fcdfcc307b84fb06f?s=128&amp;r=g&amp;d=mm" class="avatar " width="64" height="64"><span class="name ">Chris Alfano</span></a></li>
118+
<li class="col-xs-6 col-sm-4 col-md-3"><a href="/people/kurt" title="Kurt Gawinowicz" class="thumbnail text-center"><img src="//www.gravatar.com/avatar/5d5ff5fd825a914d5057562aec05eb9b?s=128&amp;r=g&amp;d=mm" class="avatar " width="64" height="64"><span class="name ">Kurt Gawinowicz</span></a></li>
119+
<li class="col-xs-6 col-sm-4 col-md-3"><a href="/people/kurt" title="Kurt Gawinowicz" class="thumbnail text-center"><img src="//www.gravatar.com/avatar/5d5ff5fd825a914d5057562aec05eb9b?s=128&amp;r=g&amp;d=mm" class="avatar " width="64" height="64"><span class="name ">Kurt Gawinowicz</span></a></li>
120+
<li class="col-xs-6 col-sm-4 col-md-3"><a href="/people/chris" title="Chris Alfano" class="thumbnail text-center"><img src="//www.gravatar.com/avatar/36b6d909c0c65d4fcdfcc307b84fb06f?s=128&amp;r=g&amp;d=mm" class="avatar " width="64" height="64"><span class="name ">Chris Alfano</span></a></li>
121+
<li class="col-xs-6 col-sm-4 col-md-3"><a href="/people/kurt" title="Kurt Gawinowicz" class="thumbnail text-center"><img src="//www.gravatar.com/avatar/5d5ff5fd825a914d5057562aec05eb9b?s=128&amp;r=g&amp;d=mm" class="avatar " width="64" height="64"><span class="name ">Kurt Gawinowicz</span></a></li>
122+
</ul>
123+
124+
<h4>New Projects</h4>
125+
<ul class="padding-bottom">
126+
<li><a href="#">Example Project 2</a></li>
127+
<li><a href="#">Example Project 3</a></li>
128+
<li><a href="#">Example Project 4</a></li>
129+
<li><a href="#">Example Project 5</a></li>
130+
</ul>
131+
132+
<h4>New Members</h4>
133+
<ul class="row list-unstyled">
134+
<li class="col-xs-6 col-sm-4 col-md-3"><a href="/people/chris" title="Chris Alfano" class="thumbnail text-center"><img src="//www.gravatar.com/avatar/36b6d909c0c65d4fcdfcc307b84fb06f?s=128&amp;r=g&amp;d=mm" class="avatar " width="64" height="64"><span class="name ">Chris Alfano</span></a></li>
135+
<li class="col-xs-6 col-sm-4 col-md-3"><a href="/people/chris" title="Chris Alfano" class="thumbnail text-center"><img src="//www.gravatar.com/avatar/36b6d909c0c65d4fcdfcc307b84fb06f?s=128&amp;r=g&amp;d=mm" class="avatar " width="64" height="64"><span class="name ">Chris Alfano</span></a></li>
136+
<li class="col-xs-6 col-sm-4 col-md-3"><a href="/people/kurt" title="Kurt Gawinowicz" class="thumbnail text-center"><img src="//www.gravatar.com/avatar/5d5ff5fd825a914d5057562aec05eb9b?s=128&amp;r=g&amp;d=mm" class="avatar " width="64" height="64"><span class="name ">Kurt Gawinowicz</span></a></li>
137+
</ul>
138+
139+
</div>
140+
</div>
141+
<footer class="post-footer card-footer clearfix">
142+
<small class="text-muted">{icon "clock-o"}&nbsp;<a href="/blog/lorem_ipsum_dolor_sit_amet"><time datetime="2016-10-05T19:21:00-04:00" title="Wed 05 Oct 2016 07:21:00 PM EDT">5 Oct 2016</time></a></small>
143+
</footer>
144+
</article>
145+
*}
146+
147+
{foreach item=Article from=$activity}
148+
{projectActivity $Article headingLevel=h3 showProject=true}
149+
{foreachelse}
150+
<i>{_ "No project updates have been posted on this site yet."}</i>
151+
{/foreach}
152+
</div>
153+
<div class="col-md-4 home-column-side">
154+
<aside class="meetups" role="complementary">
155+
{include includes/home.meetups.tpl}
156+
</aside>
157+
<footer class="footer" role="complementary">
158+
{contentBlock "home-footer-side"}
159+
</footer>
160+
</div>
161+
</div>
162+
</div>
163+
</main>
164+
{/block}

site-root/home.php

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
3+
// short circuit original handler for new static homepage
4+
if (empty(Site::$pathStack[0]) || Site::$pathStack[0] != 'classic') {
5+
return RequestHandler::respond('home');
6+
}
7+
8+
// compile home page data
9+
$now = new DateTime();
10+
$pageData = array();
11+
12+
13+
// meetups
14+
try {
15+
$meetups = Emergence\Meetup\Connector::getUpcomingEvents();
16+
$nextMeetup = array_shift($meetups);
17+
18+
// detect if meetup is happening right now
19+
// - use ?next_meetup_now=1 to test feature before any event
20+
if(
21+
($nextMeetup && $nextMeetup['time_start'] < $now)
22+
|| !empty($_GET['next_meetup_now'])
23+
) {
24+
$currentMeetup = $nextMeetup;
25+
$nextMeetup = array_shift($meetups);
26+
}
27+
28+
if($currentMeetup) {
29+
$currentMeetup['checkins'] = Laddr\MemberCheckin::getAllForMeetupByProject($currentMeetup['id']);
30+
}
31+
32+
$pageData['currentMeetup'] = $currentMeetup;
33+
$pageData['nextMeetup'] = $nextMeetup;
34+
$pageData['futureMeetups'] = $meetups;
35+
} catch (Exception $e) {
36+
// just omit meetup data
37+
}
38+
39+
40+
// build activity stream
41+
if (!$pageData['activity'] = Cache::fetch('home-activity')) {
42+
$existingTables = \DB::allValues('table_name', 'SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA = SCHEMA()');
43+
$activityQueries = [];
44+
45+
if (in_array(Emergence\CMS\AbstractContent::$tableName, $existingTables)) {
46+
$activityQueries[] = sprintf(
47+
'SELECT'
48+
.' ID, Class, Published AS Timestamp'
49+
.' FROM `%s`'
50+
.' WHERE'
51+
.' Class = "%s" AND'
52+
.' Visibility = "Public" AND'
53+
.' Status = "Published" AND'
54+
.' (Published IS NULL OR Published <= CURRENT_TIMESTAMP)',
55+
Emergence\CMS\AbstractContent::$tableName,
56+
DB::escape(Emergence\CMS\BlogPost::class)
57+
);
58+
}
59+
60+
if (in_array(Laddr\ProjectUpdate::$tableName, $existingTables)) {
61+
$activityQueries[] = sprintf('SELECT ID, Class, Created AS Timestamp FROM `%s`', Laddr\ProjectUpdate::$tableName);
62+
}
63+
64+
if (in_array(Laddr\ProjectBuzz::$tableName, $existingTables)) {
65+
$activityQueries[] = sprintf('SELECT ID, Class, Published AS Timestamp FROM `%s`', Laddr\ProjectBuzz::$tableName);
66+
}
67+
68+
if (count($activityQueries)) {
69+
$pageData['activity'] = array_map(
70+
function($result) {
71+
return $result['Class']::getByID($result['ID']);
72+
}
73+
,DB::allRecords(implode(' UNION ', $activityQueries).' ORDER BY Timestamp DESC LIMIT 10')
74+
);
75+
} else {
76+
$pageData['activity'] = [];
77+
}
78+
Cache::store('home-activity', $pageData['activity'], 30);
79+
}
80+
81+
82+
// render data against home template
83+
RequestHandler::respond('home-classic', $pageData);

0 commit comments

Comments
 (0)