'field' => 'start_time',
'type' => 'time',
'time_format' => 'h:i a',
+ 'default' => '09:00',
'required' => true,
'use' => 'a'
),
'field' => 'end_time',
'type' => 'time',
'time_format' => 'h:i a',
+ 'default' => '17:00',
'use' => 'a'
),
'field' => 'week_of_month',
'type' => 'bitmap',
'bitmap' => $this->config['week'],
- 'default' => 0, // no weeks selected
+ 'default' => 4095, // no weeks selected
'use' => 'a'
),
'field' => 'day_of_week',
'type' => 'bitmap',
'bitmap' => $this->config['day'],
- 'default' => 0, // no days selected
+ 'default' => 4095, // no days selected
'use' => 'a'
),
* Check installation, activation, and version of main Member DB plugin
*/
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
-$plugin_name = 'glm-member-db/glm-member-db.php';
+$plugin_name = 'glm-member-db/index.php';
$is_active = is_plugin_active($plugin_name);
// If it's not active, then warn user and deactivate this add-on plugin
$numbEvents = 0;
$numbPending = 0;
+ $namesList = false;
$haveCategories = false;
// Check for required Event Categories
$haveCategories = true;
}
- // Get list of events
- $events = $this->getList();
- if ($events) {
- $numbEvents = count($events);
- }
+ // Get full list of names matching this where clause for search box
+ $namesList = $this->getIdName();
+
+ // Get number of events
+ $numbEvents = $this->getStats();
+
+ // Get number of events pending
+ $numbPending = $this->getStats('status = '.$this->config['status_numb']['Pending']);
// Get list of Pending Events
- $pending = $this->getList('T.status = '.$this->config['status_numb']['Pending']);
- if ($pending) {
- $numbPending = count($pending);
- }
+// $pending = $this->getList('T.status = '.$this->config['status_numb']['Pending'], 'name', true, 'id', 1, 20);
+ $pending = $this->getIdName('T.status = '.$this->config['status_numb']['Pending']);
// Compile template data
'events' => $events,
'numbEvents' => $numbEvents,
'pending' => $pending,
+ 'namesList' => $namesList,
'numbPending' => $numbPending,
'haveCategories' => $haveCategories
);
$haveMember = false;
$memberName = false;
$memberData = false;
+ $numbDisplayed = false;
+ $lastDisplayed = false;
+ $paging = true;
+ $prevStart = false;
+ $nextStart = false;
+ $start = 1;
+ $limit = 20; // Set to the number of listings per page
+ $namesList = false;
// Check for Member Menu Use
if (defined('GLM_EVENTS_MEMBER_MENU')) {
$where = 'true';
+ // Check for Archived filter
+ if (isset($_REQUEST['filterArchived']) && $_REQUEST['filterArchived'] == 'on') {
+ $filterArchived = true;
+ $where .= " AND status = " . $this->config['status_numb']['Archived'];
+ }
+
+ // Check for Pending filter
+ if (isset($_REQUEST['filterPending']) && $_REQUEST['filterPending'] == 'on') {
+ $filterPending = true;
+ $where .= " AND status = " . $this->config['status_numb']['Pending'];
+ }
+
// Add "selected" element default false;
reset($categories);
while (list($k, $v) = each($categories)) {
$categories[$c]['selected'] = true;
}
- $where .= " AND T.id in (
+ $where .= " AND id in (
SELECT DISTINCT(EC.event)
FROM ".GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX."event_categories EC,
".GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX."categories C
)";
}
+ // Check if we have a Text Search string
+ if (isset($_REQUEST['textSearch']) && trim($_REQUEST['textSearch']) != '') {
+ $textSearch = trim($_REQUEST['textSearch']);
+ $where .= " AND name LIKE '%$textSearch%'";
+ }
+
+
// If we have a From date
+ $dateWhere = '';
if (isset($_REQUEST['fromDate']) && trim($_REQUEST['fromDate']) != '') {
$fromDate = date('m/d/Y', strtotime($_REQUEST['fromDate']));
$fromMYSQL = date('Y-m-d', strtotime($fromDate));
+ $dateWhere = " end_time >= '$fromMYSQL' ";
}
// If we have a to Date
if (isset($_REQUEST['toDate']) && trim($_REQUEST['toDate']) != '') {
+
$toDate = date('m/d/Y', strtotime($_REQUEST['toDate']));
$toMYSQL = date('Y-m-d', strtotime($toDate." +1 day"));
+ // If we have a from date then we need Parens and AND
+ if ($dateWhere != '') {
+ $dateWhere = "( ".$dateWhere." AND start_time <= '$toMYSQL' )";
+
+ // Otherwise we don't
+ } else {
+ $dateWhere = " start_time <= '$toMYSQL' ";
+ }
+ }
+/*
// If we have a from but not a to date, use from as the to but don't populate the to field
} elseif ($fromDate) {
$toDate = date('m/d/Y', strtotime($_REQUEST['fromDate']));
$toMYSQL = date('Y-m-d', strtotime($toDate." +1 day"));
$toDate = false;
}
+*/
// If we have from and to dates, do search for those inclusive
- if ($fromDate) {
+ if ($dateWhere != '') {
$where .= "
- AND T.id in (
+ AND id in (
SELECT DISTINCT(event)
FROM ".GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX."times
- WHERE (
- start_time BETWEEN '$fromMYSQL' AND '$toMYSQL'
- OR
- end_time BETWEEN '$fromMYSQL' AND '$toMYSQL'
- )
+ WHERE $dateWhere
AND active
)
";
// Check if the list is for a specific member
if (defined('GLM_EVENTS_MEMBER_MENU') && $memberID) {
- $where .= "T.ref_dest = $memberID";
+ $where .= " AND ref_dest = $memberID";
}
- // Determine number of events in list
- $events = $this->getList($where);
- if ($events) {
- $numbEvents = count($events);
+ // Get the total number of events listed
+ $numbEvents = $this->getStats($where);
+
+ // If the number of events is less than a page, don't do paging
+ if ($numbEvents <= $limit) {
+ $paging = false;
}
+ // Get full list of names matching this where clause for search box
+ $namesList = $this->getIdName($where);
+
+ // Check if we're doing paging
+ if (isset($_REQUEST['pageSelect'])) {
+
+ // If request is for Next
+ if ($_REQUEST['pageSelect'][0] == 'N') {
+ $newStart = $_REQUEST['nextStart'] - 0;
+
+ // Otherwise it must be Previous
+ } else {
+ $newStart = $_REQUEST['prevStart'] - 0;
+ }
+
+ if ($newStart > 0) {
+ $start = $newStart;
+ }
+ }
+
+ // Get the list of events and determine number of events in list
+ $saveFLT = $this->postFirstAndLastTimes;
+ $this->postFirstAndLastTimes = true;
+ $eventsResult = $this->getList($where, 'name', true, 'id', $start, $limit);
+ $this->postFirstAndLastTimes = $saveFLT;
+
+ // Get paging results
+ $numbDisplayed = $eventsResult['returned'];
+ $lastDisplayed = $eventsResult['last'];
+ if ($start == 1) {
+ $prevStart = false;
+ } else {
+ $prevStart = $start - $limit;
+ if ($start < 1) {
+ $start = 1;
+ }
+ }
+ if ($eventsResult['returned'] == $limit) {
+ $nextStart = $start + $limit;
+ }
+
+ // since we're doing paging, we have to break out just the events data
+ $events = $eventsResult['list'];
+ unset($eventsResult);
+
break;
}
'memberID' => $memberID,
'haveMember' => $haveMember,
'memberName' => $memberName,
- 'memberData' => $memberData
+ 'memberData' => $memberData,
+ 'numbDisplayed' => $numbDisplayed,
+ 'lastDisplayed' => $lastDisplayed,
+ 'paging' => $paging,
+ 'prevStart' => $prevStart,
+ 'nextStart' => $nextStart,
+ 'start' => $start = 1,
+ 'limit' => $limit,
+ 'namesList' => $namesList
);
// Return status, any suggested view, and any data to controller
$allDay = ( $event['all_day'] || !$event['btime'] );
$recurData =array(
'event' => $eventId,
+ 'name' => 'Imported Event Schedule',
'start_time' => $btime,
'end_time' => $etime,
'from_date' => $event['bdate'],
'%s',
'%s',
'%s',
+ '%s',
'%d',
'%d',
'%d',
// No member selected - Clear checkbox, Dissable checkbox, Show location
$('#useMemberLocationCheckbox').prop('checked', false);
$('#useMemberLocationCheckbox').prop('disabled', true);
+ $('#useMemberMessage').addClass('glm-hidden');
+ $('#notUseMemberMessage').removeClass('glm-hidden');
$('#locationContainer').removeClass('glm-hidden');
} else {
// Member set - Enable checkbox
$('#useMemberLocationCheckbox').prop('disabled', false);
+ $('#useMemberMessage').removeClass('glm-hidden');
+ $('#notUseMemberMessage').addClass('glm-hidden');
}
}
}
// Make sure there's at least one recurrence
- {if !$locations}
+ {if !$recurrences}
addNewRecurrenceForm();
{/if}
} else {
$(".not-all-day-" + recurID).removeClass('glm-hidden');
$(".all-day-" + recurID).addClass('glm-hidden');
- if (!$("#startTimeOnly_" + recurID)[0].checked) {
- $(".start-time-only-" + recurID).removeClass('glm-hidden');
- startTimeOnlyInit();
- }
+ startTimeOnlyInit();
+ startTimeOnlySetup();
}
});
// Start Time only selection
$('.start-time-only-checkbox').each( function() {
recurID = $(this).attr('data-id');
- if ($(this)[0].checked) {
+ if ($(this)[0].checked || $('#allDayEvent_' + recurID)[0].checked) {
$("#endTimeRow_" + recurID).addClass('glm-hidden');
} else {
$("#endTimeRow_" + recurID).removeClass('glm-hidden');
$('.start-time-only-checkbox').click( function() {
startTimeOnlySetup();
});
- startTimeOnlySetup();
+// startTimeOnlySetup();
}
startTimeOnlyInit();
<td>
<input id="useMemberLocationCheckbox" type="checkbox" name="use_member_location" {if $event.fieldData.use_member_location.value} checked{/if}>
<span id="useMemberMessage">Uses location data from the selected member rather than location data from here.</span>
- <span id="notUseMemberMessage" class="glm-hidden">To use member information select a member for the event in the "Status & Desription" tab.</span>
+ <span id="notUseMemberMessage" class="glm-hidden">(To use member information instead of this location data, select a member for the event in the "Event Desription" tab.)</span>
</td>
</tr>
</table>
<th {if $newRecurrence.fieldRequired.start_time}class="glm-required"{/if}>Start Time:</th>
<td>
<input data-id="{$r.id}" type="text" name="Recur{$r.id}_start_time" value="{trim($r.start_time.time)}" class="glm-form-text-input-veryshort glm-time-input recurrence-input">
- <input data-id="{$r.id}" type="checkbox" name="Recur{$r.id}_start_time_only" class="start-time-only-checkbox recurrence-input" {if $r.start_time_only.value} checked{/if}> Start time only
+ <input id="start_time_only_{$r.id}" data-id="{$r.id}" type="checkbox" name="Recur{$r.id}_start_time_only" class="start-time-only-checkbox recurrence-input" {if $r.start_time_only.value} checked{/if}> Start time only
</td>
</tr>
- <tr id="endTimeRow_{$r.id}" class="not-all-day-{$r.id}{if $r.all_day.value} glm-hidden{/if}">
+ <tr id="endTimeRow_{$r.id}" class="not-all-day-{$r.id}{if $r.all_day.value || $r.start_time_only.value} glm-hidden{/if}">
<th {if $newRecurrence.fieldRequired.end_time}class="glm-required"{/if}>End Time:</th>
<td><input data-id="{$r.id}" type="text" name="Recur{$r.id}_end_time" value="{trim($r.end_time.time)}" class="glm-form-text-input-veryshort glm-time-input recurrence-input"></td>
</tr>
<tr>
<th {if $event.fieldRequired.name}class="glm-required"{/if}>Event Name:</th>
<td {if $event.fieldFail.name}class="glm-form-bad-input" data-tabid="glm-event-descr"{/if}>
- <input type="text" name="name" value="{$event.fieldData.name}" class="glm-form-text-input-medium" placeholder="Name of this event.">
+ <input type="text" name="name" value="{$event.fieldData.name|escape}" class="glm-form-text-input-medium" placeholder="Name of this event.">
{if $event.fieldFail.name}<p>{$event.fieldFail.name}</p>{/if}<br>
</td>
</tr>
<table class="glm-admin-table">
<tr><th>Number of Events Listed: </th><td>{$numbEvents}</td></tr>
+ <tr><th>Number Pending: </th><td>{$numbPending}</td></tr>
</table>
{if $pending}
<thead>
<tr>
<th>Event Name</th>
- <th>Last Updated</th>
</tr>
</thead>
<tbody>
<td>
<a href="{$thisUrl}?page=glm-members-admin-menu-events-index&glm_action=list&option=edit&event={$p.id}">{$p.name}</a>
</td>
- <td>
- {$p.updated.datetime}
- </td>
</tr>
{/foreach}
</tbody>
</table>
{/if}
-{if $events}
+{if $namesList}
<script type="text/javascript">
jQuery(document).ready(function($) {
* "unescape" them for HTML in Smarty.
*/
var availableTags = [
- {foreach $events as $e}
+ {foreach $namesList as $e}
{ label: "{$e.name|replace:'"':"'"}", value: "{$e.name|replace:'"':"'"}", id: '{$e.id}' },
{/foreach}
];
+
$( "#glmEventsList" ).autocomplete({
source: availableTags,
html: true,
<form action="{$thisUrl}?page={$thisPage}" method="post" id="searchForm">
<input type="hidden" name="glm_action" value="list">
+ <input type="hidden" name="prevStart" value="{$prevStart}">
+ <input type="hidden" name="nextStart" value="{$nextStart}">
+ <input type="hidden" name="limit" value="{$limit}">
<div class="glm-right" style="text-align: right;">
<p>
- <b>From Date: </b><input type="text" name="fromDate" value="{$fromDate}" class="glm-form-text-input-short glm-date-input">
- <b>To Date: </b><input type="text" name="toDate" value="{$toDate}" class="glm-form-text-input-short glm-date-input">
- <b>Categories: </b>
- <select id="filterCategories" name="filterCategories[]" multiple="multiple" size="1">
- {foreach from=$categories item=v}
- <option value="{$v.id}" data-parent="{$v.parent}"{if $v.selected} selected{/if}>
- {if $v.parent_id} {/if}{$v.name}
- </option>
- {/foreach}
- </select>
- <input type="submit" value="Submit">
- </p><p>
- <b>Show Archived: </b><input type="checkbox" id="filterArchived" class="listFilter"{if $filterArchived} checked{/if} style="margin-right: 1em;">
- <b>Pending Only: </b><input type="checkbox" id="filterPending" class="listFilter"{if $filterPending} checked{/if} style="margin-right: 1em;">
- <b>Text Search: </b><input id="glmEventsSearch" type="text" id="autoTest"><br>
+ <span class="glm-nowrap">
+ <b>From Date: </b><input type="text" name="fromDate" value="{$fromDate}" class="glm-form-text-input-short glm-date-input">
+ <b>To Date: </b><input type="text" name="toDate" value="{$toDate}" class="glm-form-text-input-short glm-date-input">
+ </span>
+ <span class="glm-nowrap">
+ <b>Categories: </b>
+ <select id="filterCategories" name="filterCategories[]" multiple="multiple" size="1">
+ {foreach from=$categories item=v}
+ <option value="{$v.id}" data-parent="{$v.parent}"{if $v.selected} selected{/if}>
+ {if $v.parent_id} {/if}{$v.name}
+ </option>
+ {/foreach}
+ </select>
+ </span>
+ <span class="glm-nowrap">
+ <b>Show Archived Only: </b><input type="checkbox" id="filterArchived" name="filterArchived" class="listFilter"{if $filterArchived} checked{/if} style="margin-right: 1em;">
+ <b>Show Pending Only: </b><input type="checkbox" id="filterPending" name="filterPending" class="listFilter"{if $filterPending} checked{/if} style="margin-right: 1em;">
+ </span>
+ <span class="glm-nowrap">
+ <b>Text Search: </b><input id="glmEventsSearch" name="textSearch" type="text" id="autoTest">
+ <input type="submit" value="Submit">
+ </span>
<p>
</div>
- </form>
-
- <table class="wp-list-table striped glm-admin-table">
- <thead>
- <tr>
- <th>ID</th>
- <th>Event Name</th>
- <th>Member</th>
- <th>Status</th>
- <th>Created</th>
- <th>Updated</th>
- <th>Approved</th>
- </tr>
- </thead>
- <tbody>
-{if $events}
- {assign var="i" value="0"}
- {foreach $events as $e}
- {if $i++ is odd by 1}
- <tr>
- {else}
- <tr class="alternate">
- {/if}
- <td>
- {$e.id}
- </td>
- <td class="glm-nowrap">
- {if $haveMember}
- <a href="{$thisUrl}?page=glm-members-admin-menu-member&glm_action=events&member={$memberID}&option=edit&event={$e.id}">{$e.name}</a>
+ <br clear="all">
+
+ {if $paging}
+ {if $prevStart}<input type="Submit" name="pageSelect" value="Previous {$limit} Events" class="button button-secondary glm-button">{/if}
+ {if $nextStart}<input type="Submit" name="pageSelect" value="Next {$limit} Events" class="button button-secondary glm-button">{/if}
+ {/if}
+
+ <table class="wp-list-table striped glm-admin-table">
+ <thead>
+ <tr>
+ <th>ID</th>
+ <th>Event Name</th>
+ <th>Member</th>
+ <th>Status</th>
+ <th>First Date</th>
+ <th>Last Date</th>
+ </tr>
+ </thead>
+ <tbody>
+ {if $events}
+ {assign var="i" value="0"}
+ {foreach $events as $e}
+ {if $i++ is odd by 1}
+ <tr>
{else}
- <a href="{$thisUrl}?page={$thisPage}&glm_action=list&option=edit&event={$e.id}">{$e.name}</a>
+ <tr class="alternate">
{/if}
- </td>
- <td class="glm-nowrap">
- {$e.ref_dest}
- </td>
- <td class="glm-nowrap">
- {$e.status.name}
- </td>
- <td>
- {$e.created.datetime}
- </td>
- <td>
- {$e.updated.datetime}
- </td>
- <td>
- {$e.approved.datetime}
- </td>
- </tr>
- {/foreach}
-{else}
- <tr class="alternate"><td colspan="2">(no events listed)</td></tr>
-{/if}
- </tbody>
- </table>
+ <td>
+ {$e.id}
+ </td>
+ <td class="glm-nowrap">
+ {if $haveMember}
+ <a href="{$thisUrl}?page=glm-members-admin-menu-member&glm_action=events&member={$memberID}&option=edit&event={$e.id}">{$e.name}</a>
+ {else}
+ <a href="{$thisUrl}?page={$thisPage}&glm_action=list&option=edit&event={$e.id}">{$e.name}</a>
+ {/if}
+ </td>
+ <td class="glm-nowrap">
+ {$e.ref_dest}
+ </td>
+ <td class="glm-nowrap">
+ {$e.status.name}
+ </td>
+ <td>
+ {$e.firstDate}
+ </td>
+ <td>
+ {$e.lastDate}
+ </td>
+ </tr>
+ {/foreach}
+ {else}
+ <tr class="alternate"><td colspan="2">(no events listed)</td></tr>
+ {/if}
+ </tbody>
+ </table>
+
+ {if $paging}
+ {if $prevStart}<input type="Submit" name="pageSelect" value="Previous {$limit} Events" class="button button-secondary glm-button">{/if}
+ {if $nextStart}<input type="Submit" name="pageSelect" value="Next {$limit} Events" class="button button-secondary glm-button">{/if}
+ {/if}
+
+ </form>
<script type="text/javascript">
jQuery(document).ready(function($) {
$(".glm-flash-updated").fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500);
// Filter triggers
+
+ $("#filterArchived").on('click', function() {
+ $("#filterPending").attr('checked', false);
+ });
+
+ $("#filterPending").on('click', function() {
+ $("#filterArchived").attr('checked', false);
+ });
+/*
$(".listFilter" ).change( function() {
var filter = '';
- // Check for archived filter
+ // Check for Archived filter
if ($("#filterArchived").attr('checked')) {
- filter += '&filterArchived=true';
- }
-
- // Check for pending data filter
+ filter = '&filterArchived=true';
+ }
+
+ // Check for Pending filter
if ($("#filterPending").attr('checked')) {
- filter += '&filterPending=true';
+ filter = '&filterPending=true';
}
window.location.href = "{$thisUrl}?page={$thisPage}&glm_action=list" + filter;
return false;
});
-
+*/
/*
* Do autocomplete search for member
* label: What will be searched
*/
var availableTags = [
- {foreach $events as $e}
+ {foreach $namesList as $e}
{ label: "{$e.name|replace:'"':"'"}", value: "{$e.name|replace:'"':"'"}", id: '{$e.id}' },
{/foreach}
];
+
$( "#glmEventsSearch" ).autocomplete({
source: availableTags,
html: true,
<input type="hidden" name="import" value="true">
<div style="float:left;width: 200px;">
<fieldset>
- <legend>Database Creds</legend>
+ <legend>Database to import from:</legend>
<label for="db_host">DB Host</label>
<input id="db_host" name="db_host" />
<label for="db_name">DB Name</label>
</div>
<div style="float:left;width: 200px;">
<fieldset>
- <legend>Settings</legend>
+ <legend>Settings:</legend>
<label for="schema">Schema</label>
<input id="schema" name="schema" />
<label for="cattablename">Category Table Name</label>