Adding widget for the member only dashboard.
Apply Filter setup in main template for member dashboard so AddOns can
add their dashboard widgets.
--- /dev/null
+<?php
+
+/**
+ * Gaslight Media Members Database
+ * Admin Members Dashboard
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package glmMembersDatabase
+ * @author Steve Sutton <steve@gaslightmedia.com>
+ * @license http://www.gaslightmedia.com Gaslightmedia
+ * @version 0.1
+ */
+
+require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataMembers.php';
+
+/**
+ * Dashboard Class Model
+ *
+ * Each Add-On can have one or more dashboards.
+ */
+
+class GlmMembersAdmin_dashboard_index extends GlmDataMembers
+{
+ /**
+ * Word Press Database Object
+ *
+ * @var $wpdb
+ * @access public
+ */
+ public $wpdb;
+ /**
+ * Plugin Configuration Data
+ *
+ * @var $config
+ * @access public
+ */
+ public $config;
+
+ /**
+ * Constructor
+ *
+ * This contructor sets up this model. At this time that only includes
+ * storing away the WordPress data object.
+ *
+ * @return object Class object
+ *
+ */
+ public function __construct ($wpdb, $config)
+ {
+
+ // Save WordPress Database object
+ $this->wpdb = $wpdb;
+
+ // Save plugin configuration object
+ $this->config = $config;
+
+ // Run constructor for members data class
+ parent::__construct(false, false);
+
+ }
+
+ /**
+ * Perform Model Action
+ *
+ * This method does the work for this model and returns any resulting data
+ *
+ * @return array Status and data array
+ *
+ * 'status'
+ *
+ * True if successful and false if there was a fatal failure.
+ *
+ * 'menuItemRedirect'
+ *
+ * If not false, provides a menu item the controller should
+ * execute after this one. Normally if this is used, there would also be a
+ * modelRedirect value supplied as well.
+ *
+ * 'modelRedirect'
+ *
+ * If not false, provides an action the controller should execute after
+ * this one.
+ *
+ * 'view'
+ *
+ * A suggested view name that the controller should use instead of the
+ * default view for this model or false to indicate that the default view
+ * should be used.
+ *
+ * 'data'
+ *
+ * Data that the model is returning for use in merging with the view to
+ * produce output.
+ *
+ */
+ public function modelAction ($actionData = false)
+ {
+
+ $success = true;
+
+ // Compile template data
+ $templateData = array(
+ 'sampletext' => 'This is a sample text.'
+ );
+
+ // Return status, suggested view, and data to controller
+ return array(
+ 'status' => $success,
+ 'menuItemRedirect' => false,
+ 'modelRedirect' => false,
+ 'view' => 'admin/dashboard/index.html',
+ 'data' => $templateData
+ );
+
+ }
+
+}
*/
public $config;
- /*
+ /**
* Constructor
*
* This contructor sets up this model. At this time that only includes
}
- /*
+ /**
* Perform Model Action
*
* This method does the work for this model and returns any resulting data
}
-?>
\ No newline at end of file
+?>
+++ /dev/null
-0 info it worked if it ends with ok
-1 verbose cli [ '/usr/bin/nodejs', '/usr/bin/npm', 'install' ]
-2 info using npm@1.4.21
-3 info using node@v0.10.25
-4 error install Couldn't read dependencies
-5 error package.json ENOENT, open '/home/laury/dev55/explorewesternup.gaslightmedia.com/web/wp-content/plugins/glm-member-db/package.json'
-5 error package.json This is most likely not a problem with npm itself.
-5 error package.json npm can't find a package.json file in your current directory.
-6 error System Linux 3.19.0-42-generic
-7 error command "/usr/bin/nodejs" "/usr/bin/npm" "install"
-8 error cwd /home/laury/dev55/explorewesternup.gaslightmedia.com/web/wp-content/plugins/glm-member-db
-9 error node -v v0.10.25
-10 error npm -v 1.4.21
-11 error path /home/laury/dev55/explorewesternup.gaslightmedia.com/web/wp-content/plugins/glm-member-db/package.json
-12 error code ENOPACKAGEJSON
-13 error errno 34
-14 verbose exit [ 34, true ]
// ));
// }
//}
-
-
-?>
+add_filter(
+ 'glm-member-db-dashboard-member-widgets',
+ function ( $content = null ) {
+ $content .= $this->controller( 'dashboard', 'index' );
+ return $content;
+ }
+);
$glmMembersValidActions = array(
'adminActions' => array(
'ajax' => array(
- 'imageUpload' => 'glm-member-db',
- 'newOldMemberIdsCsv' => 'glm-member-db',
- 'membersListExport' => 'glm-member-db',
- 'memberClickThrough' => 'glm-member-db',
- 'memberDetailClick' => 'glm-member-db',
- 'memberGraphs' => 'glm-member-db'
+ 'imageUpload' => 'glm-member-db',
+ 'newOldMemberIdsCsv' => 'glm-member-db',
+ 'membersListExport' => 'glm-member-db',
+ 'memberClickThrough' => 'glm-member-db',
+ 'memberDetailClick' => 'glm-member-db',
+ 'memberGraphs' => 'glm-member-db',
+ ),
+ 'dashboard' => array(
+ 'index' => 'glm-member-db',
),
'dashboardWidget' => array(
- 'index' => 'glm-member-db'
+ 'index' => 'glm-member-db',
),
'members' => array(
- 'index' => 'glm-member-db', // member list
- 'list' => 'glm-member-db',
- 'reports' => 'glm-member-db',
- 'other' => 'glm-member-db'
+ 'index' => 'glm-member-db', // member list
+ 'list' => 'glm-member-db',
+ 'reports' => 'glm-member-db',
+ 'other' => 'glm-member-db',
),
'member' => array(
- 'index' => 'glm-member-db', // Member Dashboard
- 'memberInfo' => 'glm-member-db',
- 'memberEdit' => 'glm-member-db',
- 'locations' => 'glm-member-db',
+ 'index' => 'glm-member-db', // Member Dashboard
+ 'memberInfo' => 'glm-member-db',
+ 'memberEdit' => 'glm-member-db',
+ 'locations' => 'glm-member-db',
),
'settings' => array(
- 'index' => 'glm-member-db', // Member Types
- 'categories' => 'glm-member-db',
- 'cities' => 'glm-member-db',
- 'regions' => 'glm-member-db',
- 'amenities' => 'glm-member-db'
+ 'index' => 'glm-member-db', // Member Types
+ 'categories' => 'glm-member-db',
+ 'cities' => 'glm-member-db',
+ 'regions' => 'glm-member-db',
+ 'amenities' => 'glm-member-db',
),
'management' => array(
- 'index' => 'glm-member-db', // General Options
+ 'index' => 'glm-member-db', // General Options
'terms' => 'glm-member-db',
'development' => 'glm-member-db',
'videos' => 'glm-member-db',
'theme' => 'glm-member-db',
'import' => 'glm-member-db',
'addons' => 'glm-member-db',
- 'hooks' => 'glm-member-db'
+ 'hooks' => 'glm-member-db',
),
'shortcodes' => array(
- 'index' => 'glm-member-db'
+ 'index' => 'glm-member-db',
),
'error' => array(
- 'index' => 'glm-member-db',
- 'badAction' => 'glm-member-db',
+ 'index' => 'glm-member-db',
+ 'badAction' => 'glm-member-db',
),
'pages' => array(
- 'shortcode' => 'glm-member-db'
- )
+ 'shortcode' => 'glm-member-db',
+ ),
),
'frontActions' => array(
'members' => array(
- 'list' => 'glm-member-db',
- 'detail' => 'glm-member-db'
+ 'list' => 'glm-member-db',
+ 'detail' => 'glm-member-db',
),
'error' => array(
- 'index' => 'glm-member-db',
- 'badAction' => 'glm-member-db'
- )
- )
+ 'index' => 'glm-member-db',
+ 'badAction' => 'glm-member-db',
+ ),
+ ),
);
-
-?>
--- /dev/null
+<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>
+ </div>
+</div>
<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} <a data-type="daysClicks" class="dialog-button" href=""><img src="{$assetsUrl}/graph.png"></a></td>
</tr>
</table>
</td>
- <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} <a data-type="daysViews" class="dialog-button" href=""><img src="{$assetsUrl}/graph.png"></a></td>
</table>
</td>
<td class="glm-right">
-{if apply_filters('glm_members_menu_members', true)}
+{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>
+ </tr>
</table>
{else}
<h3>No {$terms.term_member} information available.</h3>
{/if}
-
+
<script src="{$jsUrl}/PrintArea/jquery.PrintArea.js" type="text/JavaScript" language="javascript"></script>
-
+
<!-- URL click through graphs -->
<div id="daysClicks" class="graph-dialog glm-dialog-box" title="URL Click-Through Counts Graph">
<div id="urlClicksPrintArea" class="PrintArea" style="padding: 10px;">
<p> </p>
- {if $haveMember}
+{if $widgets = apply_filters('glm-member-db-dashboard-member-widgets', '')}
+ {$widgets}
+{/if}
- {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
- <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>
- {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}
+ <p> </p>
- {else}
+ {else}
<h3 class="glm-error">You do not have any {$terms.term_member_cap} Types setup.</h3>
<p>You must have at least one {$terms.term_member_cap} Type to add a new {$terms.term_member}.</p>
<td><a href="{$thisUrl}?page=glm-members-admin-menu-configure&glm_action=memberTypes">Click here to add {$terms.term_member_cap} Types.</a></td>
$('#showArchived').click( function() {
checked = 'false';
if ($(this).attr('checked') == 'checked') {
- checked = 'true';
+ checked = 'true';
}
- window.location.replace("{$thisUrl}?page={$thisPage}&glm_action=index&member={$memberID}&showArchived=" + checked);
+ window.location.replace("{$thisUrl}?page={$thisPage}&glm_action=index&member={$memberID}&showArchived=" + checked);
});
- // Flash certain elements for a short time after display
+ // Flash certain elements for a short time after display
$(".glm-flash-updated").fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500);
});
</script>
-
+
{include file='admin/footer.html'}