Setup of the trip planner.
authorSteve Sutton <steve@gaslightmedia.com>
Wed, 31 Oct 2018 20:26:57 +0000 (16:26 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Wed, 31 Oct 2018 20:26:57 +0000 (16:26 -0400)
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.

16 files changed:
classes/data/dataSettings.php [new file with mode: 0644]
index.php
js/front.js
models/admin/ajax/itineraryList.php
models/admin/settings/itinerary.php [new file with mode: 0644]
models/front/itinerary/list.php [new file with mode: 0755]
setup/adminHooks.php
setup/adminMenus.php
setup/adminTabs.php
setup/databaseScripts/create_database_V0.0.1.sql
setup/databaseScripts/dbVersions.php [new file with mode: 0644]
setup/frontHooks.php
setup/shortcodes.php
setup/validActions.php
views/admin/settings/itinerary.html [new file with mode: 0644]
views/front/itinerary/list.html [new file with mode: 0644]

diff --git a/classes/data/dataSettings.php b/classes/data/dataSettings.php
new file mode 100644 (file)
index 0000000..9743658
--- /dev/null
@@ -0,0 +1,178 @@
+<?php
+/**
+ * GLM Member-DB WordPress Add-On Plugin
+ * Data Class Management
+ *
+ * PHP version 5.3
+ *
+ * @category Data
+ * @package  GLM Member-DB
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @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 <cscott@gaslightmedia.com>
+ * @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;
+    }
+
+}
+
+?>
index 2cde743..6ef8eb8 100644 (file)
--- 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'],
index ff4ea4b..7df88c3 100644 (file)
@@ -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;
 });
index 293a70e..02eb39d 100644 (file)
@@ -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 (file)
index 0000000..f39ac47
--- /dev/null
@@ -0,0 +1,195 @@
+<?php
+/**
+ * Gaslight Media Members Database
+ * GLM Members DB - Events Add-on - Management Events Tab
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author     Chuck Scott <cscott@gaslightmedia.com>
+ * @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 <cscott@gaslightmedia.com>
+ * @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 (executable)
index 0000000..c059174
--- /dev/null
@@ -0,0 +1,48 @@
+<?php
+/**
+ * list.php
+ *
+ */
+
+/**
+ * GlmMembersFront_itinerary_list
+ *
+ * @uses      GlmDataItinerary
+ * @package   GlmMemberItinerary
+ * @version   0.0.1
+ * @copyright Copyright (c) 2010 All rights reserved.
+ * @author    Steve Sutton <steve@gaslightmedia.com>
+ * @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
+        );
+    }
+}
index 8788e10..1dc986b 100644 (file)
@@ -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();
+    }
+});
index d69ce18..24dad8a 100644 (file)
  *
  */
 
+// 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',
+//     '&nbsp;&nbsp;&nbsp;&nbsp;Settings',
+//     'glm_members_members',
+//     'glm-members-admin-menu-itinerary-settings',
+//     function(){$this->controller('itinerary');}
+// );
index 3bfc353..219b2b4 100644 (file)
  *
  */
 
+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;
+        }
+    );
+}
index a09bb04..1127253 100644 (file)
@@ -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 (file)
index 0000000..3246374
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Gaslight Media Members Database
+ * GLM Members Billing DB Versions
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @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'),
+);
+
index bd75a0d..65a1ef9 100644 (file)
 add_filter(
     'glm-member-db-front-members-list-memberDataBelow',
     function( $content, $member_id ){
-        echo '<pre>$_SESSION: ' . print_r( $_SESSION, true ) . '</pre>';
-        if ( $_SESSION['travel-list'][$member_id] ) {
-            return $content . '<button class="glm-planner-button" data-id="' . $member_id . '">View Trip planner</button>';
+        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 . '<button class="glm-planner-button" data-id="' . $member_id . '">Add to Trip planner</button>';
+            $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(
+            '<button class="glm-planner-button" data-id="%d" data-alt="%s" data-baseurl="%s" data-refpage="%s" data-view="%s" data-loadpage="%s">%s</button>',
+            $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();
     }
 });
index 7b38856..5b32e24 100644 (file)
  */
 
 $glmMembersItineraryShortcodes = array(
+    'glm-itinerary-list' => array(
+        'plugin'     => 'glm-member-db-itinerary',
+        'menu'       => 'itinerary',
+        'action'     => 'list',
+        'table'      => false,
+        'attributes' => array(
+        ),
+    )
 );
 
-$glmMembersItineraryShortcodesDescription = '';
+$glmMembersItineraryShortcodesDescription = '
+<tr><th>Shortcode</th><th>Attribute</th></tr>
+<tr>
+    <th>[glm-itinerary-list]</th>
+    <td width="50%">
+        Displays the trip planner list.
+    </td>
+</tr>
+';
 
index da8022d..a091937 100644 (file)
@@ -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 (file)
index 0000000..5439ff9
--- /dev/null
@@ -0,0 +1,78 @@
+{include file='admin/settings/header.html'}
+
+{* Itinerary Settings *}
+
+<table id="glm-table-settings" class="glm-admin-table glm-settings-table">
+    <tr>
+        <td colspan="2">
+            {if $settingsUpdated}<h2 class="glm-notice glm-flash-updated glm-right">Settings Updated</h2>{/if}
+            {if $settingsUpdateError}<span class="glm-error glm-flash-updated glm-right">Settings Update Error</span>{/if}
+            <h2>Itinerary Settings</h2>
+        </td>
+    </tr>
+    <tr>
+        <td>
+            <form action="{$thisUrl}?page={$thisPage}" method="post" enctype="multipart/form-data">
+                <input type="hidden" name="glm_action" value="itinerary">
+                <input type="hidden" name="option" value="settings">
+                <input type="hidden" name="option2" value="submit">
+                <table class="glm-admin-table">
+
+                    <tr>
+                        <th {if $itinerarySettings.fieldRequired.itinerary_page} class="glm-required"}{/if}>Trip Planner Page Id</th>
+                        <td {if $itinerarySettings.fieldFail.itinerary_page}class="glm-form-bad-input" data-tabid="glm-ititenary-page"{/if}>
+                            <input type="text" name="itinerary_page" value="{$itinerarySettings.fieldData.itinerary_page}" class="glm-form-text-input-small">
+                        {if $itinerarySettings.fieldFail.itinerary_page}<p>{$itinerarySettings.fieldFail.itinerary_page}</p>{/if}<br>
+                        </td>
+                    </tr>
+
+                    <tr>
+                        <th {if $itinerarySettings.fieldRequired.itinerary_page_content} class="glm-required"}{/if}>Trip Planner Page Contents</th>
+                        <td {if $itinerarySettings.fieldFail.itinerary_page_content}class="glm-form-bad-input" data-tabid="glm-itinerary-page-contents"{/if}>
+                        {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}
+                                <p>{$itinerarySettings.fieldFail.itinerary_page_content}</p>
+                            {/if}<br>
+                        </td>
+                    </tr>
+
+                    <tr>
+                        <th {if $itinerarySettings.fieldRequired.add_label} class="glm-required"}{/if}>Add to Text</th>
+                        <td {if $itinerarySettings.fieldFail.add_label}class="glm-form-bad-input" data-tabid="glm-add-label"{/if}>
+                            <input type="text" name="add_label" value="{$itinerarySettings.fieldData.add_label|escape}" class="glm-form-text-input-small">
+                        {if $itinerarySettings.fieldFail.add_label}<p>{$itinerarySettings.fieldFail.add_label}</p>{/if}<br>
+                        </td>
+                    </tr>
+
+                    <tr>
+                        <th {if $itinerarySettings.fieldRequired.view_label} class="glm-required"}{/if}>View Text</th>
+                        <td {if $itinerarySettings.fieldFail.view_label}class="glm-form-bad-input" data-tabid="glm-view-label"{/if}>
+                            <input type="text" name="view_label" value="{$itinerarySettings.fieldData.view_label|escape}" class="glm-form-text-input-small">
+                        {if $itinerarySettings.fieldFail.view_label}<p>{$itinerarySettings.fieldFail.view_label}</p>{/if}<br>
+                        </td>
+                    </tr>
+
+                </table>
+                <input type="submit" value="Update Settings" class="button-primary">
+            </form>
+        </td>
+    </tr>
+</table>
+
+<script type="text/javascript">
+
+    jQuery(document).ready(function($) {
+
+        // 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'}
diff --git a/views/front/itinerary/list.html b/views/front/itinerary/list.html
new file mode 100644 (file)
index 0000000..093216e
--- /dev/null
@@ -0,0 +1,22 @@
+<h1>Title of the page</h1>
+
+<p>Content from settings.</p>
+
+
+List of members in session
+<div>
+    {foreach $smarty.session['travel-list'] as $record}
+        <div class="glm-itinerary-list-item" style="border:1px solid black; padding: 10px; margin: 10px;">
+            {$data = apply_filters('glm-member-get-memberinfo-data', '', $record.ref_dest)}
+            <a href="#" class="dashicons dashicons-trash glm-itinerary-delete" data-id="{$data.member}" data-baseurl="{$baseurl}" style="float:right;" alt="Remove"></a>
+            <h4 style="width:90%; clear: none;">{$data.member_name}</h4>
+            <div>
+                {$data.addr1}<br>
+                {$data.city}, {$data.state} {$data.zip}<br>
+                {if $data.phone}Phone: {$data.phone}<br>{/if}
+                {if $data.url}<a href="{$data.url}">Website</a><br>{/if}
+            </div>
+        </div>
+    {/foreach}
+</div>
+