From: Steve Sutton Date: Wed, 31 Oct 2018 20:26:57 +0000 (-0400) Subject: Setup of the trip planner. X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/index.cgi?a=commitdiff_plain;h=eaa78fa7fac55dde0afd3e5c6218166b8ef4ddd2;p=WP-Plugins%2Fglm-member-db-itinerary.git Setup of the trip planner. 1st version of the database is setup. 0.0.1 Trip planner buttons added to each member in the list. Adds to the trip planner. Removes from trip planner. --- diff --git a/classes/data/dataSettings.php b/classes/data/dataSettings.php new file mode 100644 index 0000000..9743658 --- /dev/null +++ b/classes/data/dataSettings.php @@ -0,0 +1,178 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @release SVN: $Id: dataEvents.php,v 1.0 2011/01/25 19:31:47 cscott Exp $ + */ + +/** + * GlmDataItineraryManagement class + * + * PHP version 5 + * + * @category Data + * @package GLM Member DB + * @author Chuck Scott + * @license http://www.gaslightmedia.com Gaslightmedia + * @release SVN: $Id: dataMembers.php,v 1.0 2011/01/25 19:31:47 cscott + * Exp $ + */ +class GlmDataItinerarySettings extends GlmDataAbstract +{ + + /** + * WordPress Database Object + * + * @var $wpdb + * @access public + */ + public $wpdb; + /** + * Plugin Configuration Data + * + * @var $config + * @access public + */ + public $config; + /** + * Data Table Name + * + * @var $table + * @access public + */ + public $table; + /** + * Field definitions + * + * 'type' is type of field as defined by the application + * text Regular text field + * pointer Pointer to an entry in another table + * 'filters' is the filter name for a particular filter ID in PHP filter + * functions + * See PHP filter_id() + * + * 'use' is when to use the field + * l = List + * g = Get + * n = New + * i = Insert + * e = Edit + * u = Update + * d = Delete + * a = All + * + * @var $ini + * @access public + */ + public $fields = false; + /** + * MemberInfo DB object + * + * @var $MemberInfo + * @access public + */ + public $MemberInfo; + + /** + * Constructor + * + * @param object $d database connection + * @param array $config Configuration array + * @param bool $limitedEdit Flag to say indicate limited edit requested + * + * @return void + * @access public + */ + public function __construct($wpdb, $config, $limitedEdit = false) + { + + // If this class is not being extended along with existing $wpdb and $config + if (!$this->wpdb) { + + // Save WordPress Database object + $this->wpdb = $wpdb; + + // Save plugin configuration object + $this->config = $config; + + } + + /* + * Table Name + */ + $this->table = GLM_MEMBERS_ITINERARY_PLUGIN_DB_PREFIX . 'management'; + + /* + * Table Data Fields + */ + + $this->fields = array ( + + 'id' => array ( + 'field' => 'id', + 'type' => 'integer', + 'view_only' => true, + 'use' => 'a', + ), + + // Page id for Trip Planner Page + 'itinerary_page' => array( + 'field' => 'itinerary_page', + 'type' => 'integer', + 'use' => 'a', + ), + + // Page Content for Trip Planner + 'itinerary_page_content' => array( + 'field' => 'itinerary_page_content', + 'type' => 'text', + 'use' => 'a', + ), + + // Page Content for Trip Planner + 'add_label' => array( + 'field' => 'add_label', + 'type' => 'text', + 'use' => 'a', + ), + + // Page Content for Trip Planner + 'view_label' => array( + 'field' => 'view_label', + 'type' => 'text', + 'use' => 'a', + ), + + ); + + } + + /* + * Entry Post Processing Call-Back Method + * + * Perform post-processing for all result entries. + * + * In this case we're using it to append an array of category + * data to each member result and also sort by member name. + * + * @param array $r Array of field result data for a single entry + * @param string $a Action being performed (l, i, g, ...) + * + * @return object Class object + * + */ + public function entryPostProcessing($r, $a) + { + return $r; + } + +} + +?> diff --git a/index.php b/index.php index 2cde743..6ef8eb8 100644 --- a/index.php +++ b/index.php @@ -151,15 +151,9 @@ if (is_file(GLM_MEMBERS_ITINERARY_PLUGIN_DB_SCRIPTS.'/dbVersions.php')) { * Then add the data to the "config" array under "// Add this add-on to the add-ons array" below. */ -// Management -// $glmMembersItineraryManagementSettings = $wpdb->get_row( "SELECT * FROM ".GLM_MEMBERS_ITINERARY_PLUGIN_DB_PREFIX."management WHERE id = 1", ARRAY_A ); -// unset($glmMembersItineraryManagementSettings['id']); - // Settings -// $glmMembersItinerarySettingsTerms = $wpdb->get_row( "SELECT * FROM ".GLM_MEMBERS_ITINERARY_PLUGIN_DB_PREFIX."settings_terms WHERE id = 1", ARRAY_A ); -// unset($glmMembersItinerarySettingsTerms['id']); - - +$glmMembersItineraryManagementSettings = $wpdb->get_row( "SELECT * FROM ".GLM_MEMBERS_ITINERARY_PLUGIN_DB_PREFIX."management WHERE id = 1", ARRAY_A ); +unset($glmMembersItineraryManagementSettings['id']); function glmMembersItineraryRegisterAddOn($addOns) { @@ -171,7 +165,7 @@ function glmMembersItineraryRegisterAddOn($addOns) { 'slug' => GLM_MEMBERS_ITINERARY_PLUGIN_SLUG, 'actions' => $GLOBALS['glmMembersItineraryAddOnValidActions'], 'config' => array( -// 'settings' => $GLOBALS['glmMembersItineraryManagementSettings'], + 'settings' => $GLOBALS['glmMembersItineraryManagementSettings'], // 'terms' => $GLOBALS['glmMembersItinerarySettingsTerms'] ), 'shortcodes' => $GLOBALS['glmMembersItineraryShortcodes'], diff --git a/js/front.js b/js/front.js index ff4ea4b..7df88c3 100644 --- a/js/front.js +++ b/js/front.js @@ -2,9 +2,53 @@ jQuery('.glm-planner-button').on('click', function(){ var member_id = jQuery(this).data('id'); - console.log( 'help me ' + member_id ); - jQuery.ajax({ - url: 'http://66.129.38.1/wp-admin/admin-ajax.php?action=glm_members_admin_ajax&glm_action=itineraryList&member_id=' + member_id, + var alt_text = jQuery(this).data('alt'); + var base_url = jQuery(this).data('baseurl'); + var ref_page = jQuery(this).data('refpage'); + var button = jQuery(this); + var load_page = jQuery(this).data('loadpage'); + var is_view = jQuery(this).data('view'); - }); + if ( !is_view ) { + jQuery.ajax({ + url: base_url + '/wp-admin/admin-ajax.php', + cache: false, + data: { + action: 'glm_members_admin_ajax', + glm_action: 'itineraryList', + member_id: member_id, + ref_page: ref_page + }, + dataType: 'html', + success: function(){ + button.data('view', '1'); + button.text( alt_text ); + } + }); + } else { + window.location.href = load_page; + } +}); + +jQuery('.glm-itinerary-delete').on('click', function(e){ + e.preventDefault(); + var member_id = jQuery(this).data('id'); + var base_url = jQuery(this).data('baseurl'); + var button = jQuery(this); + if ( member_id ) { + jQuery.ajax({ + url: base_url + '/wp-admin/admin-ajax.php', + cache: false, + data: { + action: 'glm_members_admin_ajax', + glm_action: 'itineraryList', + member_id: member_id, + del: true + }, + success: function(){ + button.parent('.glm-itinerary-list-item').remove(); + } + }); + } + return false; }); diff --git a/models/admin/ajax/itineraryList.php b/models/admin/ajax/itineraryList.php index 293a70e..02eb39d 100644 --- a/models/admin/ajax/itineraryList.php +++ b/models/admin/ajax/itineraryList.php @@ -76,14 +76,37 @@ class GlmMembersAdmin_ajax_itineraryList //extends GlmDataMemberInfo */ public function modelAction ($actionData = false) { + // trigger_error( print_r( $_REQUEST, true ), E_USER_NOTICE ); $member_id = isset( $_REQUEST['member_id'] ) ? filter_var( $_REQUEST['member_id'], FILTER_VALIDATE_INT ) : null; + $ref_page = isset( $_REQUEST['ref_page'] ) ? filter_var( $_REQUEST['ref_page'], FILTER_SANITIZE_STRING ) : null; + $delete = isset( $_REQUEST['del'] ) ? filter_var( $_REQUEST['del'], FILTER_VALIDATE_BOOLEAN ) : false; + // trigger_error( print_r( $delete, true ), E_USER_NOTICE ); if ( $member_id ) { - // add to the session - $_SESSION['travel-list'][$member_id]; + if ( $delete ) { + // trigger_error( 'testing for deletion', E_USER_NOTICE ); + if ( isset( $_SESSION['travel-list'] ) && is_array( $_SESSION['travel-list'] ) ) { + foreach ( $_SESSION['travel-list'] as $key => $data_val ) { + // trigger_error( 'key: ' . $key, E_USER_NOTICE ); + // trigger_error( 'member_id: ' . $member_id, E_USER_NOTICE ); + if ( $data_val['ref_dest'] == $member_id ) { + unset ( $_SESSION['travel-list'][$key] ); + } + } + } + } else { + // add to the session + $_SESSION['travel-list'][$member_id] = array( + 'ref_type' => 'member', + 'ref_dest' => $member_id, + 'page_slug' => $ref_page, + ); + } } + // trigger_error( print_r( $_SESSION, true ), E_USER_NOTICE ); + return true; } diff --git a/models/admin/settings/itinerary.php b/models/admin/settings/itinerary.php new file mode 100644 index 0000000..f39ac47 --- /dev/null +++ b/models/admin/settings/itinerary.php @@ -0,0 +1,195 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @release itinerary.php,v 1.0 2014/10/31 19:31:47 cscott Exp $ + * @link http://dev.gaslightmedia.com/ + */ + +// Load Management Events data abstract +require_once GLM_MEMBERS_ITINERARY_PLUGIN_CLASS_PATH.'/data/dataSettings.php'; + +/** + * GlmMembersAdmin_settings_itinerary + * + * PHP version 5 + * + * @category Model + * @package GLM Member DB + * @author Chuck Scott + * @license http://www.gaslightmedia.com Gaslightmedia + * @release SVN: $Id: packaging.php,v 1.0 2011/01/25 19:31:47 cscott + * Exp $ + */ +class GlmMembersAdmin_settings_itinerary extends GlmDataItinerarySettings +{ + + /** + * WordPress Database Object + * + * @var $wpdb + * @access public + */ + public $wpdb; + /** + * dbh Postgres database connection + * + * @var mixed + * @access public + */ + public $dbh; + /** + * settings used for the schema and tablenames + * + * @var mixed + * @access public + */ + public $settings = array(); + + /** + * Constructor + * + * This constructor performs the work for this model. This model returns + * an array containing the following. + * + * 'status' + * + * True if successful and false if there was a fatal failure. + * + * 'view' + * + * A suggested view name that the contoller 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. + * + * @wpdb object WordPress database object + * + * @return array Array containing status, suggested view, and any data + */ + 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); + + } + + /** + * modelAction + * + * @param bool $actionData + * @access public + * @return void + */ + public function modelAction($actionData = false) + { + + $option = false; + $settings_updated = false; + $settings_update_error = false; + $itinerary_settings = false; + $option2 = false; + + if (isset($_REQUEST['option'])) { + $option = $_REQUEST['option']; + } + + switch ($option) { + + case 'settings': + + default: + + // Make sure option is set if default + $option = 'settings'; + + // Determine if current user can edit configurations + if (!current_user_can('manage_categories')) { + return array( + 'status' => false, + 'menuItemRedirect' => 'error', + 'modelRedirect' => 'index', + 'view' => 'admin/error/index.html', + 'data' => array( + 'reason' => 'User does not have rights to make configuration changes.' + ) + ); + } + + // Check for submission option + $option2 = ''; + if (isset($_REQUEST['option2'])) { + $option2 = $_REQUEST['option2']; + } + + switch($option2) { + + // Update the settings and redisplay the form + case 'submit': + + // Update the itinerary settings settings + $itinerary_settings = $this->updateEntry(1); + if ($itinerary_settings['status']) { + $settings_updated = true; + } else { + $settings_update_error = true; + } + + break; + + // Default is to get the current settings and display the form + default: + + // Try to get the first (should be only) entry for general settings. + $itinerary_settings = $this->editEntry(1); + + break; + + } + + break; + + } + + // Compile template data + $template_data = array( + 'action' => $_REQUEST['glm_action'], + 'option' => $option, + 'settingsUpdated' => $settings_updated, + 'settingsUpdateError' => $settings_update_error, + 'itinerarySettings' => $itinerary_settings, + ); + + // Return status, suggested view, and data to controller + return array( + 'status' => true, + 'menuItemRedirect' => false, + 'modelRedirect' => false, + 'view' => 'admin/settings/itinerary.html', + 'data' => $template_data + ); + + + } + + +} + diff --git a/models/front/itinerary/list.php b/models/front/itinerary/list.php new file mode 100755 index 0000000..c059174 --- /dev/null +++ b/models/front/itinerary/list.php @@ -0,0 +1,48 @@ + + * @license PHP Version 3.0 {@link http://www.php.net/license/3_0.txt} + */ +class GlmMembersFront_itinerary_list // extends GlmMembersFront_events_baseAction +{ + /** + * modelAction + * + * @param bool $actionData Action Data passed to the modelAction + * + * @access public + * @return void + */ + public function modelAction($actionData = false) + { + $settings = array(); + $status = true; + $view = 'list.html'; + + + $templateData = array( + 'baseurl' => get_bloginfo( 'url' ), + ); + + error_reporting(E_ALL ^ E_NOTICE); + return array( + 'status' => $status, + 'menuItemRedirect' => false, + 'modelRedirect' => false, + 'view' => 'front/itinerary/' . $view, + 'data' => $templateData, + 'settings' => $settings + ); + } +} diff --git a/setup/adminHooks.php b/setup/adminHooks.php index 8788e10..1dc986b 100644 --- a/setup/adminHooks.php +++ b/setup/adminHooks.php @@ -42,3 +42,10 @@ add_filter('glm-member-db-admin-management-hooksHelp', function($content) { 10, 2 ); + +// If no session then start one. +add_action( 'init', function(){ + if ( !session_id() ) { + session_start(); + } +}); diff --git a/setup/adminMenus.php b/setup/adminMenus.php index d69ce18..24dad8a 100644 --- a/setup/adminMenus.php +++ b/setup/adminMenus.php @@ -50,3 +50,20 @@ * */ +// add_submenu_page( +// 'glm-members-admin-menu-members', +// 'Trip Planner', +// 'Trip Planner', +// 'glm_members_members', +// 'glm-members-admin-menu-itinerary-index', +// function(){$this->controller('itinerary');} +// ); +// +// add_submenu_page( +// 'glm-members-admin-menu-members', +// 'Trip Planner', +// '    Settings', +// 'glm_members_members', +// 'glm-members-admin-menu-itinerary-settings', +// function(){$this->controller('itinerary');} +// ); diff --git a/setup/adminTabs.php b/setup/adminTabs.php index 3bfc353..219b2b4 100644 --- a/setup/adminTabs.php +++ b/setup/adminTabs.php @@ -33,3 +33,18 @@ * */ +if ( current_user_can( 'manage_categories' ) ) { + add_filter( 'glm-member-db-add-tab-for-settings', + function( $addOnTabs ) { + $newTabs = array( + array( + 'text' => 'Itinerary', + 'menu' => 'settings', + 'action' => 'itinerary', + ) + ); + $addOnTabs = array_merge( $addOnTabs, $newTabs ); + return $addOnTabs; + } + ); +} diff --git a/setup/databaseScripts/create_database_V0.0.1.sql b/setup/databaseScripts/create_database_V0.0.1.sql index a09bb04..1127253 100644 --- a/setup/databaseScripts/create_database_V0.0.1.sql +++ b/setup/databaseScripts/create_database_V0.0.1.sql @@ -45,6 +45,13 @@ CREATE TABLE {prefix}user ( CREATE TABLE {prefix}management ( id INT NOT NULL AUTO_INCREMENT, itinerary_page INT NULL, - button_text TINYTEXT NULL, + itinerary_page_content TEXT NULL, + add_label TINYTEXT NULL, + view_label TINYTEXT NULL, PRIMARY KEY (id) ); + +---- + +-- Add record to management table +INSERT INTO {prefix}management (id, add_label, view_label) VALUES (1, 'Add to Trip Planner', 'View Trip Planner'); diff --git a/setup/databaseScripts/dbVersions.php b/setup/databaseScripts/dbVersions.php new file mode 100644 index 0000000..3246374 --- /dev/null +++ b/setup/databaseScripts/dbVersions.php @@ -0,0 +1,19 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @release dbVersions.php + * @link http://dev.gaslightmedia.com/ + */ + +$glmMembersItineraryDbVersions = array( + '0.0.1' => array('version' => '0.0.1', 'tables' => 3, 'date' => '10/31/2018'), +); + diff --git a/setup/frontHooks.php b/setup/frontHooks.php index bd75a0d..65a1ef9 100644 --- a/setup/frontHooks.php +++ b/setup/frontHooks.php @@ -28,12 +28,28 @@ add_filter( 'glm-member-db-front-members-list-memberDataBelow', function( $content, $member_id ){ - echo '
$_SESSION: ' . print_r( $_SESSION, true ) . '
'; - if ( $_SESSION['travel-list'][$member_id] ) { - return $content . ''; + global $wp, $config; + if ( isset( $_SESSION['travel-list'][$member_id] ) && $_SESSION['travel-list'][$member_id] ) { + $label = $config['settings']['view_label']; + $alt_label = $config['settings']['add_label']; + $is_view = '1'; } else { - return $content . ''; + $label = $config['settings']['add_label']; + $alt_label = $config['settings']['view_label']; + $is_view = ''; } + $load_page = get_the_permalink( $config['settings']['itinerary_page'] ); + $current_slug = add_query_arg( array(), $wp->request ); + return sprintf( + '', + $member_id, + htmlspecialchars( $alt_label, ENT_QUOTES, 'UTF-8' ), + get_bloginfo( 'url' ), + $current_slug, + $is_view, + $load_page, + $label + ); }, 10, 2 @@ -41,7 +57,7 @@ add_filter( // If no session then start one. add_action( 'init', function(){ - if ( ! session_id() ) { + if ( !session_id() ) { session_start(); } }); diff --git a/setup/shortcodes.php b/setup/shortcodes.php index 7b38856..5b32e24 100644 --- a/setup/shortcodes.php +++ b/setup/shortcodes.php @@ -88,7 +88,23 @@ */ $glmMembersItineraryShortcodes = array( + 'glm-itinerary-list' => array( + 'plugin' => 'glm-member-db-itinerary', + 'menu' => 'itinerary', + 'action' => 'list', + 'table' => false, + 'attributes' => array( + ), + ) ); -$glmMembersItineraryShortcodesDescription = ''; +$glmMembersItineraryShortcodesDescription = ' +ShortcodeAttribute + + [glm-itinerary-list] + + Displays the trip planner list. + + +'; diff --git a/setup/validActions.php b/setup/validActions.php index da8022d..a091937 100644 --- a/setup/validActions.php +++ b/setup/validActions.php @@ -62,8 +62,14 @@ $glmMembersItineraryAddOnValidActions = array( 'ajax' => array( 'itineraryList' => GLM_MEMBERS_ITINERARY_PLUGIN_SLUG, ), + 'settings' => array( + 'itinerary' => GLM_MEMBERS_ITINERARY_PLUGIN_SLUG, + ), ), 'frontActions' => array( + 'itinerary' => array( + 'list' => GLM_MEMBERS_ITINERARY_PLUGIN_SLUG, + ) ) ); diff --git a/views/admin/settings/itinerary.html b/views/admin/settings/itinerary.html new file mode 100644 index 0000000..5439ff9 --- /dev/null +++ b/views/admin/settings/itinerary.html @@ -0,0 +1,78 @@ +{include file='admin/settings/header.html'} + +{* Itinerary Settings *} + + + + + + + + +
+ {if $settingsUpdated}

Settings Updated

{/if} + {if $settingsUpdateError}Settings Update Error{/if} +

Itinerary Settings

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Trip Planner Page Id + + {if $itinerarySettings.fieldFail.itinerary_page}

{$itinerarySettings.fieldFail.itinerary_page}

{/if}
+
Trip Planner Page Contents + {php} + wp_editor('{if $itinerarySettings.fieldData.itinerary_page_content} {$itinerarySettings.fieldData.itinerary_page_content|escape:quotes} {/if}', 'glm_notification', array( + 'media_buttons' => false, + 'textarea_name' => 'itinerary_page_content', + 'editor_height' => 300, // Height in px, overrides editor_rows + )); + {/php} + {if $itinerarySettings.fieldFail.itinerary_page_content} +

{$itinerarySettings.fieldFail.itinerary_page_content}

+ {/if}
+
Add to Text + + {if $itinerarySettings.fieldFail.add_label}

{$itinerarySettings.fieldFail.add_label}

{/if}
+
View Text + + {if $itinerarySettings.fieldFail.view_label}

{$itinerarySettings.fieldFail.view_label}

{/if}
+
+ +
+
+ + + +{include file='admin/footer.html'} diff --git a/views/front/itinerary/list.html b/views/front/itinerary/list.html new file mode 100644 index 0000000..093216e --- /dev/null +++ b/views/front/itinerary/list.html @@ -0,0 +1,22 @@ +

Title of the page

+ +

Content from settings.

+ + +List of members in session +
+ {foreach $smarty.session['travel-list'] as $record} +
+ {$data = apply_filters('glm-member-get-memberinfo-data', '', $record.ref_dest)} + +

{$data.member_name}

+
+ {$data.addr1}
+ {$data.city}, {$data.state} {$data.zip}
+ {if $data.phone}Phone: {$data.phone}
{/if} + {if $data.url}Website
{/if} +
+
+ {/foreach} +
+