--- /dev/null
+<?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;
+ }
+
+}
+
+?>
* 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) {
'slug' => GLM_MEMBERS_ITINERARY_PLUGIN_SLUG,
'actions' => $GLOBALS['glmMembersItineraryAddOnValidActions'],
'config' => array(
-// 'settings' => $GLOBALS['glmMembersItineraryManagementSettings'],
+ 'settings' => $GLOBALS['glmMembersItineraryManagementSettings'],
// 'terms' => $GLOBALS['glmMembersItinerarySettingsTerms']
),
'shortcodes' => $GLOBALS['glmMembersItineraryShortcodes'],
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;
});
*/
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;
}
--- /dev/null
+<?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
+ );
+
+
+ }
+
+
+}
+
--- /dev/null
+<?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
+ );
+ }
+}
10,
2
);
+
+// If no session then start one.
+add_action( 'init', function(){
+ if ( !session_id() ) {
+ session_start();
+ }
+});
*
*/
+// 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');}
+// );
*
*/
+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;
+ }
+ );
+}
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');
--- /dev/null
+<?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'),
+);
+
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
// If no session then start one.
add_action( 'init', function(){
- if ( ! session_id() ) {
+ if ( !session_id() ) {
session_start();
}
});
*/
$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>
+';
'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,
+ )
)
);
--- /dev/null
+{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'}
--- /dev/null
+<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>
+