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