New template for event front page.
authorSteve Sutton <steve@gaslightmedia.com>
Thu, 28 Jul 2016 19:39:14 +0000 (15:39 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Thu, 28 Jul 2016 19:39:14 +0000 (15:39 -0400)
Adding new attribute for the event list: featured (bool)
When set it will only get the featured events.
Still they'll be current ones.

models/front/events/baseAction.php
models/front/events/list.php
setup/shortcodes.php
views/front/events/eventsFeed.html [new file with mode: 0644]

index 46752e3..f6d1926 100644 (file)
@@ -75,7 +75,7 @@ abstract class GlmMembersFront_events_baseAction extends GlmDataEvents
      * @access public
      * @return array events
      */
-    public function getModelEventsData($categoryId = null, $limit = null, $memberId = null)
+    public function getModelEventsData( $categoryId = null, $limit = null, $memberId = null )
     {
 
         $this->postAddTimes = true;
@@ -88,7 +88,7 @@ abstract class GlmMembersFront_events_baseAction extends GlmDataEvents
         // If a catgegory ID is supplied
         if ($catId = filter_var( $categoryId, FILTER_VALIDATE_INT )) {
             $events = $this->getEventsByCategory( $catId, $limit );
-                       // Else if a event name is supplied
+            // Else if a event name is supplied
         } else if ($term = filter_var( $categoryId, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES )) {
             $searchTerm = $this->wpdb->esc_like( stripslashes( $term ) );
             $where .= "T.name like '%" . $term . "%'
@@ -102,21 +102,21 @@ abstract class GlmMembersFront_events_baseAction extends GlmDataEvents
                 ";
             $order  = "T.id";
             $order .= " LIMIT 2 OFFSET 0";
-            $events = $this->getList($where, $order);
-               } else if ( $limit = filter_var( $limit, FILTER_VALIDATE_INT ) ) {
-                       // Need to get the event id's for the next $limit number of events.
-                       $where .= "T.id 
-                               AND T.status = " . $this->config['status_numb']['Active'] . "
-                               AND T.id IN (
-                                               SELECT distinct event
-                                                 FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times AS ET
-                                            WHERE active
-                                                  AND start_time >= NOW()
-                                       )
-                               ";
-                       $order  = "T.id";
             $events = $this->getList( $where, $order );
-                       // Otherwise get all categories
+        } else if ( $limit = filter_var( $limit, FILTER_VALIDATE_INT ) ) {
+            // Need to get the event id's for the next $limit number of events.
+            $where .= "T.id
+                AND T.status = " . $this->config['status_numb']['Active'] . "
+                AND T.id IN (
+                        SELECT distinct event
+                          FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times AS ET
+                         WHERE active
+                           AND start_time >= NOW()
+                    )
+                ";
+            $order  = "T.id";
+            $events = $this->getList( $where, $order );
+            // Otherwise get all categories
         } else {
             $where .= "T.status = " . $this->config['status_numb']['Active'] . "
                 AND T.id IN (
@@ -126,21 +126,20 @@ abstract class GlmMembersFront_events_baseAction extends GlmDataEvents
                            AND " . $this->dateRange . "
                     )
                 ";
-            $events = $this->getList($where);
+            $events = $this->getList( $where );
         }
 
-        //echo '<pre>$events: ' . print_r($events, true) . '</pre>';
-        if ( !empty($events) ) {
+        if ( !empty( $events ) ) {
             foreach ( $events as &$event ) {
                 // grab the first from times and see if it's ongoing or not
-                if ($event['times']) {
-                    reset($event['times']);
-                    $firstKey = key($event['times']);
-                    reset($event['times']);
+                if ( $event['times'] ) {
+                    reset( $event['times'] );
+                    $firstKey = key( $event['times'] );
+                    reset( $event['times'] );
                 }
                 $event['dates'] = $this->getEventDate(
-                    strtotime($event['starting_date']),
-                    strtotime($event['ending_date']),
+                    strtotime( $event['starting_date'] ),
+                    strtotime( $event['ending_date'] ),
                     'timestamp'
                 );
             }
@@ -149,6 +148,23 @@ abstract class GlmMembersFront_events_baseAction extends GlmDataEvents
         return $events;
     }
 
+    /**
+     * getFeaturedEventsData
+     *
+     * Fetch all events from current date on that are marked featured.
+     *
+     * @access public
+     * @return mixed
+     */
+    public function getFeaturedEventsData()
+    {
+        $this->postAddTimes = true;
+        $where .= "T.featured = 1";
+        $events = $this->getList( $where );
+        $this->postAddTimes = false;
+        return $events;
+    }
+
     /**
      * getModelEventData
      *
@@ -159,19 +175,19 @@ abstract class GlmMembersFront_events_baseAction extends GlmDataEvents
      * @access public
      * @return array The event
      */
-    public function getModelEventData($eventId)
+    public function getModelEventData( $eventId )
     {
         $this->postAddTimes     = true;
         $this->postAddLocations = true;
-        $event                  = $this->getEntry($eventId);
+        $event                  = $this->getEntry( $eventId );
         if ( $event['url'] ) {
             if ( !preg_match( '/^http:|https:/', $event['url'] ) ) {
                 $event['url'] = 'http://' . $event['url'];
             }
         }
         $event['dates'] = $this->getEventDate(
-            strtotime($event['starting_date']),
-            strtotime($event['ending_date']),
+            strtotime( $event['starting_date'] ),
+            strtotime( $event['ending_date'] ),
             'timestamp'
         );
         $this->postAddTimes     = false;
index 9352e4a..8e966ef 100644 (file)
@@ -42,23 +42,37 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
      * @access public
      * @return void
      */
-    public function modelAction($actionData = false)
+    public function modelAction( $actionData = false )
     {
-        $status   = $categoryId = null;
-        $action   = '';
-        $settings = $events = $event = $categoryEvents = array();
-        $calDates = false;
+        $status         = null;
+        $categoryId     = null;
+        $action         = '';
+        $settings       = array();
+        $events         = array();
+        $event          = array();
+        $calDates       = false;
+        $memberId       = null;
+        $view           = null;
+        $featured       = null;
+        $eventsByDate   = null;
 
         // If a memberID has been specified, limit to that member
-        $memberId = $actionData['request']['member'] - 0;
+        if ( isset( $actiondata['request']['member'] ) ) {
+            $memberId = $actionData['request']['member'] - 0;
+        }
         if ($memberId == 0) {
             $memberId = null;
         }
-        $limit = filter_var( $actionData['request']['limit'], FILTER_VALIDATE_INT );
+        if ( isset( $actionData['request']['limit'] ) ) {
+            $limit = filter_var( $actionData['request']['limit'], FILTER_VALIDATE_INT );
+        }
         if ( $limit ) {
             $action = 'front-page';
         }
-
+        if ( isset( $actionData['request']['featured'] ) ) {
+            $featured = filter_var( $actionData['request']['featured'], FILTER_VALIDATE_BOOLEAN );
+            $action = 'featured';
+        }
         if (isset($_REQUEST['eventId']) && $eventId = filter_var($_REQUEST['eventId'], FILTER_VALIDATE_INT)) {
             $search = true;
             $action = 'event-detail';
@@ -80,7 +94,6 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
             $action = 'nameSearch';
         }
         if ( isset($_REQUEST['glm_event_from']) ) {
-            //$fromDate = filter_var($_REQUEST['glm_event_from'], FILTER_SANITIZE_STRING);
             $fromDate = filter_var(
                 $_REQUEST['glm_event_from'],
                 FILTER_VALIDATE_REGEXP,
@@ -94,7 +107,6 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
             $fromDate = date('m/d/Y');
         }
         if ( isset($_REQUEST['glm_event_to']) ) {
-            //$toDate   = filter_var($_REQUEST['glm_event_to'], FILTER_SANITIZE_STRING);
             $toDate = filter_var(
                 $_REQUEST['glm_event_to'],
                 FILTER_VALIDATE_REGEXP,
@@ -104,7 +116,7 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
                     )
                 )
             );
-        } else if ( in_array($action, array( 'event-list-name', 'nameSearch' )) ) {
+        } else if ( in_array($action, array( 'event-list-name', 'nameSearch', 'featured' )) ) {
             $toDate = null;
         } else {
             if ( isset($_REQUEST['t']) && $t = filter_var( $_REQUEST['t'], FILTER_SANITIZE_STRING ) ) {
@@ -142,7 +154,6 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
                   FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times
                  WHERE DATE(start_time) >= '{$from}')";
         }
-        //echo '<pre>$this->dateRange: ' . print_r($this->dateRange, true) . '</pre>';
 
         if (isset($_REQUEST['event_name'])
             && $eventNameSearch = filter_var($_REQUEST['event_name'], FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES)) {
@@ -164,12 +175,12 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
         wp_enqueue_style('jquery-style', '//ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css');
 
 
-        switch ($action) {
+        switch ( $action ) {
         case 'front-page':
             $events = $this->getModelEventsData($categoryId, $limit);
             break;
         case 'event-list-name':
-            $events = $this->getModelEventsData($eventNameSearch);
+            $events = $this->getModelEventsData( $eventNameSearch );
             $view = 'agenda.html';
             break;
         case 'event-list':
@@ -206,6 +217,16 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
                 exit;
             }
             break;
+        case 'featured':
+            $events = $this->getFeaturedEventsData();
+            //echo '<pre>$events: ' . print_r( $events, true ) . '</pre>';
+            if ( isset ( $actionData['request']['template'] ) ) {
+                $view = $actionData['request']['template'];
+            } else {
+                $view = 'agenda.html';
+            }
+                //$view = 'agenda.html';
+            break;
         case 'pdf':
             include_once GLM_MEMBERS_EVENTS_PLUGIN_PATH . '/SetaPDF/Autoload.php';
             $this->postAddLocations   = true;
@@ -487,7 +508,7 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
 
         // group the events by the starting date
         $eventsByDate = $mainEvents = array();
-        if ($events) {
+        if ( $events && $action != 'featured' ) {
             foreach ( $events as $event ) {
                 if ( isset( $event['times'] ) && is_array( $event['times'] ) ) {
                     foreach ( $event['times'] as $eventTime ) {
@@ -532,7 +553,7 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
         }
 
          // Check for alternate template requests
-        switch($actionData['request']['template']) {
+        switch( $actionData['request']['template'] ) {
             case 'member-list':
                 wp_enqueue_style('glm-member-db-events-style', GLM_MEMBERS_EVENTS_PLUGIN_URL . 'css/front.css');
                 $view = 'listForMemberListing.html';
@@ -578,6 +599,11 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
                 // No changes otherwise
                 break;
         }
+        $option_name = GLM_MEMBERS_PLUGIN_OPTION_PREFIX . 'event_list_id';
+        $event_page_id = get_option( $option_name );
+        if ( $event_page_id ) {
+            $mainEventPageUrl = get_permalink( $event_page_id );
+        }
 
         // Compile template data
         $templateData = array(
@@ -587,11 +613,13 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
             'eventId'      => false,
             'categoryId'   => $categoryId,
             'categories'   => $categories,
+            'events'       => $events,
             'eventsByDate' => $eventsByDate,
-            'catEvents'    => $categoryEvents,
             'fromDate'     => $fromDate,
             'toDate'       => $toDate,
             'eventName'    => stripslashes( $eventNameSearch ),
+            'mainEventUrl' => $mainEventPageUrl,
+            'mainImgUrl'   => GLM_MEMBERS_PLUGIN_MEDIA_URL . '/images/large/',
             'imgUrl'       => GLM_MEMBERS_PLUGIN_MEDIA_URL . '/images/small/',
             'calDates'     => $calDates
         );
index 0b17350..2797fc5 100644 (file)
@@ -13,7 +13,7 @@
  * @link     http://dev.gaslightmedia.com/
  */
 
-/*
+/**
  * Array of short-code
  *
  * This array lists all of the short-codes available from the main
@@ -102,8 +102,9 @@ $glmMembersEventsShortcodes = array(
             'type'     => 'all',
             'order'    => 'title',
             'member'   => false,
-                       'template' => false,
-                       'limit'    => null
+            'template' => false,
+            'limit'    => null,
+            'featured' => null,
         )
     ),
     'glm-members-event-detail' => array(
@@ -136,6 +137,43 @@ $glmMembersEventsShortcodesDescription = '
         <td width="50%">
             Displays a list of events.
         </td>
+    </tr>
+    <tr>
+        <td>&nbsp;</td>
+        <th>
+            order="{ fieldName }"
+        </th>
+        <td>
+        The "order" attribute is used to set the field to use for ordering results. Defaults to \'title\'.
+        </td>
+    </tr>
+    <tr>
+        <td>&nbsp;</td>
+        <th>
+            template="{ template }"
+        </th>
+        <td>
+        The "template" attribute is used to set the template that will be
+        used for smarty. Defaults to false.
+        </td>
+    </tr>
+    <tr>
+        <td>&nbsp;</td>
+        <th>
+            featured="{ True/False }"
+        </th>
+        <td>
+        The "featured" attribute filters the result with the featured field. Defaults to null.
+        </td>
+    </tr>
+    <tr>
+        <td>&nbsp;</td>
+        <th>
+            limit="{ (number) }"
+        </th>
+        <td>
+        The "limit" attribute limits the results to (number). Defaults to null.
+        </td>
     </tr>
      <tr>
         <th>[glm-members-event-detail]</th>
diff --git a/views/front/events/eventsFeed.html b/views/front/events/eventsFeed.html
new file mode 100644 (file)
index 0000000..c6845a8
--- /dev/null
@@ -0,0 +1,19 @@
+<div class="small-12 medium-9 large-10 columns">
+    <h1>Upcoming Events</h1>
+</div>
+<div class="small-12 show-for-medium-up medium-3 large-2 columns">
+    <a href="{$mainEventUrl}"><button>View All Events</button></a>
+</div>
+<div class="small-12 columns">
+    <div id="feed" class="row collapse">
+        {foreach $events as $event}
+        <div class="small-12 text-left medium-6 large-4 columns">
+            <a href="{$siteBaseUrl}event-detail/{$event.name_slug}/"><img src="{$mainImgUrl}{$event.image}"></a>
+            <a href="{$siteBaseUrl}event-detail/{$event.name_slug}/"><h6>{$event.name}</h6></a>
+            <hr>
+            <span>{$event.starting_timestamp|date_format:"%b %e"}</span>
+            <a href="{$siteBaseUrl}event-detail/{$event.name_slug}/" class="read">More</a>
+        </div>
+        {/foreach}
+    </div>
+</div>