WIP for member only dashboard
authorSteve Sutton <steve@gaslightmedia.com>
Fri, 26 Aug 2016 20:55:42 +0000 (16:55 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Fri, 26 Aug 2016 20:55:42 +0000 (16:55 -0400)
Still working out things with different add-ons.

css/admin.css
models/admin/dashboard/index.php
models/admin/member/index.php
setup/adminHooks.php
views/admin/dashboard/index.html
views/admin/member/index.html

index 5353c10..2800bed 100644 (file)
@@ -406,3 +406,37 @@ input[type=submit], input[type=file] {
     color: #888;
     font-weight: 400;
 }
+
+/* Dashboard Widgets for the Members Only */
+#glm-dashboard-widgets-wrap {
+    margin: 0 -8px;
+    overflow: hidden;
+}
+.glm-widget-container {
+    display: inline-block;
+    width: 30%;
+    float: left;
+    margin: 0 10px;
+}
+.glm-widget {
+    min-width: 255px;
+    border: 1px solid #e5e5e5;
+    box-shadow: 0 1px 1px rgba( 0, 0, 0, .04);
+    background: #fff;
+}
+.glm-widget-content {
+    padding: 20px;
+}
+.glm-widget h2 {
+    font-size: 14px;
+    padding: 8px 12px;
+    margin: 0;
+    line-height: 1.4;
+    border-bottom: 1px solid #eee;
+}
+.glm-widget h3 {
+    font-size: 12px;
+    padding: 8px 12px;
+    margin: 0;
+    line-height: 1.4;
+}
index a4e53a8..a6cb0c6 100644 (file)
@@ -95,17 +95,100 @@ class GlmMembersAdmin_dashboard_index extends GlmDataMembers
      * produce output.
      *
      */
-    public function modelAction ($actionData = false)
+    public function modelAction ( $actionData = false )
     {
 
-        $success = true;
+        $success            = true;
+        $text               = 'text';
+        $haveInfoRecords    = false;
+        $memberInfoRecords  = false;
+        $noActive           = false;
+        $showArchived       = false;
+        $memberID           = 0;
+        $clickThroughCounts = array('day' => 0, 'week' => 0, 'month' => 0);
+        $detailViewCounts   = array('day' => 0, 'week' => 0, 'month' => 0);
 
-        // Compile template data
+        // Check if there's a logged in user who is locked to their own entity.
+        $lockedToMember = apply_filters( 'glm_members_locked_to_member_id', false );
+        $memberID       = $lockedToMember;
+
+        // Get the current date, first date of this week, and first date of this month
+        $today = date('Y-m-d');
+        $thisWeek =  date('Y-m-d', strtotime('-'.date('w').' days'));
+        $thisMonth = date('Y-m-d', strtotime('-'.(date('j')-1).' days'));
+
+        $clickThroughCounts = $this->wpdb->get_row("
+            SELECT COALESCE ((
+                        SELECT clicks
+                          FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."clickthrough_stats
+                         WHERE member = $memberID
+                           AND stat_type = 1
+                           AND stat_date = '$today'
+                   ), 0) AS day,
+                   COALESCE ((
+                        SELECT clicks
+                          FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."clickthrough_stats
+                         WHERE member = $memberID
+                           AND stat_type = 2
+                           AND stat_date = '$thisWeek'
+                   ), 0) AS week,
+                   COALESCE ((
+                        SELECT clicks
+                          FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."clickthrough_stats
+                         WHERE member = $memberID
+                           AND stat_type = 3
+                           AND stat_date = '$thisMonth'
+                   ), 0) AS month
+        ", ARRAY_A);
+
+        $detailViewCounts = $this->wpdb->get_row("
+            SELECT COALESCE ((
+                        SELECT clicks
+                          FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."member_detail_stats
+                         WHERE member = $memberID
+                           AND stat_type = 1
+                           AND stat_date = '$today'
+                   ), 0) AS day,
+                   COALESCE ((
+                        SELECT clicks
+                          FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."member_detail_stats
+                         WHERE member = $memberID
+                           AND stat_type = 2
+                           AND stat_date = '$thisWeek'
+                   ), 0) AS week,
+                   COALESCE ((
+                        SELECT clicks
+                          FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."member_detail_stats
+                         WHERE member = $memberID
+                           AND stat_type = 3
+                           AND stat_date = '$thisMonth'
+                   ), 0) AS month
+        ", ARRAY_A);
+
+        // Setup the data Abstract class for member info.
+        require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataMemberInfo.php';
+        $MemberInfo        = new GlmDataMemberInfo($this->wpdb, $this->config);
+        $hideArchived      = " && T.status != ".$this->config['status_numb']['Archived'];
+        $memberInfoRecords = $MemberInfo->getList( "T.member = $memberID" . $hideArchived, 'T.status' );
+
+        // Check if there's any member information records.
+        if (is_array($memberInfoRecords) && count($memberInfoRecords) > 0) {
+            $haveInfoRecords = true;
+        }
+
+
+        // Compile template data.
         $templateData = array(
-            'sampletext' => 'This is a sample text.'
+            'member'            => $actionData,
+            'memberID'          => $memberID,
+            'haveInfoRecords'   => $haveInfoRecords,
+            'memberInfoRecords' => $memberInfoRecords,
+            'clickThroughCounts' => $clickThroughCounts,
+            'detailViewCounts'   => $detailViewCounts,
+            'thisDate'           => $thisDate,
         );
 
-        // Return status, suggested view, and data to controller
+        // Return status, suggested view, and data to controller.
         return array(
             'status'           => $success,
             'menuItemRedirect' => false,
index 0c5adeb..f3fb338 100644 (file)
@@ -414,30 +414,31 @@ class GlmMembersAdmin_member_index extends GlmDataMembers
             ", ARRAY_A);
 
         }
-        
+
         // End of - Get member view stats
 
         $thisDate = date('m/d/Y');
 
         // Compile template data
         $templateData = array(
-            'haveMemberTypes' => $haveMemberTypes,
-            'haveMember' => $haveMember,
-            'addingMember' => $addingMember,
-            'memberID' => $memberID,
-            'member' => $memberData,
-            'memberName' => $memberName,
-            'haveInfoRecords' => $haveInfoRecords,
-            'memberInfoRecords' => $memberInfoRecords,
-            'noActive' => $noActive,
-            'showArchived' => $showArchived,
-            'haveMemberInfo' => $haveMemberInfo,
-            'memberUpdated' => $memberUpdated,
-            'statusTypeNumbers' => $this->config['status_numb'],
-            'statusPending' => $this->config['status_numb']['Pending'],
+            'lockedToMember'     => $lockedToMember,
+            'haveMemberTypes'    => $haveMemberTypes,
+            'haveMember'         => $haveMember,
+            'addingMember'       => $addingMember,
+            'memberID'           => $memberID,
+            'member'             => $memberData,
+            'memberName'         => $memberName,
+            'haveInfoRecords'    => $haveInfoRecords,
+            'memberInfoRecords'  => $memberInfoRecords,
+            'noActive'           => $noActive,
+            'showArchived'       => $showArchived,
+            'haveMemberInfo'     => $haveMemberInfo,
+            'memberUpdated'      => $memberUpdated,
+            'statusTypeNumbers'  => $this->config['status_numb'],
+            'statusPending'      => $this->config['status_numb']['Pending'],
             'clickThroughCounts' => $clickThroughCounts,
-            'detailViewCounts' => $detailViewCounts,
-            'thisDate' => $thisDate
+            'detailViewCounts'   => $detailViewCounts,
+            'thisDate'           => $thisDate,
         );
 
         // Return status, suggested view, and data to controller
@@ -454,4 +455,4 @@ class GlmMembersAdmin_member_index extends GlmDataMembers
 
 }
 
-?>
\ No newline at end of file
+?>
index 65729d8..2caea11 100644 (file)
@@ -123,8 +123,10 @@ add_action( 'add_meta_boxes', function() {
 //}
 add_filter(
     'glm-member-db-dashboard-member-widgets',
-    function ( $content = null ) {
-        $content .= $this->controller( 'dashboard', 'index' );
+    function ( $member = null ) {
+        $content .= $this->controller( 'dashboard', 'index', $member );
         return $content;
-    }
+    },
+    10,
+    1
 );
index b15118b..2f072d6 100644 (file)
@@ -1,18 +1,23 @@
-<div id="dashboard-widgets-wrap">
-    <div id="dashboard-widgets" class="metabox-holder">
-        <div id="glm-members-dashboard-widget" class="postbox-container">
-            <div class="meta-box-sortables ui-sortable">
-                <div class="postbox">
-                    <button class="handlediv button-link" type="button" aria-expanded="true">
-                        <span class="screen-reader-text">Toggle panel: Member Profile</span>
-                        <span class="toggle-indicator" aria-hidden="true"></span>
-                    </button>
-                    <h2 class="hndle ui-sortable-handle">
-                        <span>Member Profile</span>
-                    </h2>
-                    <p>{$sampletext}</p>
-                </div>
-            </div>
+<div class="glm-widget-container">
+    <div class="glm-widget">
+        <h2>
+            <span>{$terms.term_member_cap} Profile</span>
+        </h2>
+        <div class="glm-widget-content">
+            <h3>{$terms.term_member_cap} Reports</h3>
+                <p>URL CLick Counts <b>Today:</b>
+                {$clickThroughCounts.day} <a data-type="daysClicks" class="dialog-button" href=""><img src="{$assetsUrl}/graph.png"></a></p>
+                <p>Detail Page View Counts <b>Today:</b>
+                {$detailViewCounts.day} <a data-type="daysViews" class="dialog-button" href=""><img src="{$assetsUrl}/graph.png"></a></p>
+            <h3>{$terms.term_member_cap} Info Records</h3>
+            {if $haveInfoRecords}
+                {foreach $memberInfoRecords as $m}
+                    <a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}&memberInfo={$m.id}"{if $m.status.value == $statusPending} class="glm-notice"{/if}>{$m.status.name} Profile</a>
+                {/foreach}
+            {else} <!-- haveInfoRecords -->
+                <a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}">Add New {$terms.term_member} Info</a>
+            {/if}
+
         </div>
     </div>
 </div>
index bf1e7fb..2bb4ea1 100644 (file)
@@ -3,38 +3,56 @@
 {if $haveMember || $addingMember}
  {if $haveMemberTypes}
 
-
   {if $memberUpdated}
     <h2 class="glm-notice glm-flash-updated">{$terms.term_member_cap} Updated</h2>
   {/if}
 
   {if $haveMember}
-    <table class="glm-admin-table">
-        <tr><td><span class="glm-admin-table-large-bold-text">{$member.fieldData.name}</span></td></tr>
-        <tr>
-            <td>
-                <table class="glm-admin-table">
-                    <tr>
-                        <th>URL CLick Counts</th>
-                        <td><b>Today:</b> {$clickThroughCounts.day}&nbsp;&nbsp;&nbsp;<a data-type="daysClicks" class="dialog-button" href=""><img src="{$assetsUrl}/graph.png"></a></td>
-                    </tr>
-                </table>
-            </td>
-            <td>
-                <table class="glm-admin-table">
-                    <tr>
-                        <th>Detail Page View Counts</th>
-                        <td><b>Today:</b> {$detailViewCounts.day}&nbsp;&nbsp;&nbsp;<a data-type="daysViews" class="dialog-button" href=""><img src="{$assetsUrl}/graph.png"></a></td>
-                    </tr>
-                </table>
-            </td>
-            <td class="glm-right">
-{if apply_filters('glm_members_menu_members', true)}
-                <span class="glm-right"><a href="{$thisUrl}?page={$thisPage}&glm_action=memberEdit&member={$memberID}" class="button button-primary glm-button glm-right">Edit {$terms.term_member_cap} Name and Status</a></span>
-{/if}
-            </td>
-        </tr>
-    </table>
+        {if $lockedToMember}
+        <table class="glm-admin-table">
+            <tr><td><span class="glm-admin-table-large-bold-text">{$member.fieldData.name}</span></td></tr>
+        </table>
+        {else}
+        <table class="glm-admin-table">
+            <tr><td><span class="glm-admin-table-large-bold-text">{$member.fieldData.name}</span></td></tr>
+            <tr>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr>
+                            <th>{$terms.term_member_cap} Slug:</th>
+                            <td class="glm-nowrap">{$member.fieldData.member_slug}</td>
+                        </tr>
+                        <tr><th>Date created:</th><td>{$member.fieldData.created.date}</td></tr>
+                        <tr>
+                            <th>URL CLick Counts</th>
+                            <td><b>Today:</b> {$clickThroughCounts.day}&nbsp;&nbsp;&nbsp;<a data-type="daysClicks" class="dialog-button" href=""><img src="{$assetsUrl}/graph.png"></a></td>
+                        </tr>
+                    </table>
+                </td>
+                <td>
+                    <table class="glm-admin-table">
+                        <tr>
+                            <th>{$terms.term_member_cap} Display & Access:</th>
+                            <td class="glm-nowrap">{$member.fieldData.access.name}</td>
+                        </tr>
+                        <tr>
+                            <th>{$terms.term_member_cap} Type:</th>
+                            <td>{$member.fieldData.member_type.name}</td>
+                        </tr>
+                        <tr>
+                            <th>Detail Page View Counts</th>
+                            <td><b>Today:</b> {$detailViewCounts.day}&nbsp;&nbsp;&nbsp;<a data-type="daysViews" class="dialog-button" href=""><img src="{$assetsUrl}/graph.png"></a></td>
+                        </tr>
+                    </table>
+                </td>
+                <td class="glm-right">
+    {if apply_filters('glm_members_menu_members', true)}
+                    <span class="glm-right"><a href="{$thisUrl}?page={$thisPage}&glm_action=memberEdit&member={$memberID}" class="button button-primary glm-button glm-right">Edit {$terms.term_member_cap} Name and Status</a></span>
+    {/if}
+                </td>
+            </tr>
+        </table>
+        {/if}
   {else}
         <h3>No {$terms.term_member} information available.</h3>
   {/if}
   {apply_filters('glm_members_admin_member_index_bottomOfMemberSummary', '', {$member.fieldData.id})}
 
   <p>&nbsp;</p>
+{if $haveMember && !$lockedToMember}
+
+  {if apply_filters('glm_members_permit_admin_member_index_view_member_info_version', true)}
+    {if apply_filters('glm_members_permit_admin_member_index_add_member_info_version', true)}
+    {/if}
+    <br clear="all">
+    <p>
+        <h3 class="glm-left">{$terms.term_member_cap} Profile Versions</h3>
+        <span class="glm-right">
+            <p>
+                <input type="checkbox" id="showArchived"{if $showArchived} checked="checked"{/if}> Show archived information&nbsp;&nbsp;
+                <a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}" class="button button-primary glm-button glm-right">Add New {$terms.term_member_cap} Information Version</a>
+            </p>
+        </span>
+    </p>
+
+    <table class="wp-list-table striped glm-admin-table">
+        <thead>
+            <tr>
+                <th>Status</th>
+                <th>Reference Name</th>
+                <th>Created</th>
+                <th>Last Update</th>
+                <th> </th>
+            </tr>
+        </thead>
+        <tbody>
+
+      {if $haveInfoRecords}
+        {assign var="i" value="0"}
+        {foreach $memberInfoRecords as $m}
+
+         {if $m.status.value == $statusTypeNumbers.Active || apply_filters('glm_members_permit_admin_member_index_list_inactive_info', true)}
+          {if $i++ is odd by 1}
+            <tr>
+          {else}
+            <tr class="alternate{if $m.status.name == 'Active'} glm-admin-table-active{/if}">
+          {/if}
+                <td>
+                    <a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}&memberInfo={$m.id}"{if $m.status.value == $statusPending} class="glm-notice"{/if}>{$m.status.name}</a>
+                </td>
+                <td>{$m.reference_name}</td>
+                <td>{$m.create_time.datetime}</td>
+                <td>{$m.modify_time.datetime}</td>
+                <td>
+                    {if $m.bad_lat_lon}<span class="glm-error">Bad Map Location</span>{/if}
+          {if apply_filters('glm_members_permit_admin_member_index_clone_activate_info_version', true)}
+                    <a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}&memberInfo={$m.id}&option=clone" class="button button-secondary glm-button-small glm-right">Clone</a>&nbsp;
+                    {if $m.status.name != 'Active'}<a href="{$thisUrl}?page={$thisPage}&glm_action=index&member={$memberID}&activateID={$m.id}" class="button button-secondary glm-button-small glm-right">Activate</a>{/if}
+          {/if}
+                </td>
+            </tr>
+
+
+         {/if}
+        {/foreach}
+      {else} <!-- haveInfoRecords -->
+            <tr><td colspan="5"><a href="{$thisUrl}?page={$thisPage}&glm_action=memberInfo&member={$memberID}">Click here to start entering information for this {$terms.term_member}.</a></td></tr>
+      {/if}
+        </tbody>
+    </table>
+   {/if} <!-- apply_filters -->
+  {/if}
 
-{if $widgets = apply_filters('glm-member-db-dashboard-member-widgets', '')}
-    {$widgets}
-{/if}
 
   <p>&nbsp;</p>
 
     <h3 class="glm-error">No {$terms.term_member} currently selected.</h3>
 {/if}
 
+{if $lockedToMember}
+    <div id="glm-dashboard-widgets-wrap">
+        {apply_filters('glm-member-db-dashboard-member-widgets', $member)}
+    </div>
+{/if}
+
 
     <script type="text/javascript">
         jQuery(document).ready(function($) {