Merge branch 'develop' into feature/CanonicalDetailPages
authorChuck Scott <cscott@gaslightmedia.com>
Tue, 12 Jan 2016 20:33:55 +0000 (15:33 -0500)
committerChuck Scott <cscott@gaslightmedia.com>
Tue, 12 Jan 2016 20:33:55 +0000 (15:33 -0500)
Conflicts:
glm-member-db-packaging.php
views/front/packaging/list.html

1  2 
classes/data/dataPackages.php
glm-member-db-packaging.php
models/admin/member/packaging.php
models/admin/members/packaging.php
models/front/packaging/detail.php
setup/databaseScripts/update_database_V1.1.0.php
setup/frontHooks.php
views/admin/member/packaging.html
views/admin/members/packaging.html
views/front/packaging/detail.html
views/front/packaging/list.html

@@@ -141,26 -141,18 +141,28 @@@ class GlmDataPackages extends GlmDataAb
                  'use' => 'a'
              ),
  
 -            // Description
 -            'descr' => array (
 -                'field' => 'descr',
 +            // Package Slug
 +            'package_slug' => array (
 +                'field' => 'package_slug',
                  'type' => 'text',
                  'required' => true,
 -                'use' => 'a'
 +                'use' => 'gle'
              ),
  
-             // Description
-             'descr' => array (
-                 'field' => 'descr',
+             // Short Description
+             'short_descr' => array (
+                 'field' => 'short_descr',
                  'type' => 'text',
-             // Short Description
-             'short_descr' => array (
-                 'field' => 'short_descr',
 +                'required' => true,
++                'maxLength' => 230,
 +                'use' => 'a'
 +            ),
 +
++            // Description
++            'descr' => array (
++                'field' => 'descr',
 +                'type' => 'text',
++                'required' => true,
                  'use' => 'a'
              ),
  
          return $r;
      }
  
-         $slug = sanitize_title($p['title']);
 +    /*
 +     * Update package slug - should be called after a package record is added or updated
 +     *
 +     * @param integer id ID of package that needs the slug updated
 +     * @access public
 +     */
 +    public function updateSlug($id = false)
 +    {
 +
 +        if ($id == false) {
 +            return false;
 +        }
 +
 +        $p = $this->getEntry($id);
 +
++        $slug = sanitize_title($p['title'])."-$id";
 +
 +        // Update the slug
 +        $sql = "
 +         UPDATE ".GLM_MEMBERS_PACKAGING_PLUGIN_DB_PREFIX."packages
 +                 SET package_slug = '$slug'
 +                 WHERE id = $id
 +             ;";
 +        $this->wpdb->query($sql);
 +
 +        return $slug;
 +
 +    }
 +
 +
  }
  
  ?>
Simple merge
@@@ -133,6 -133,6 +133,9 @@@ class GlmMembersAdmin_member_packaging 
                  $haveMember = true;
              }
  
++            // Also store the member id in a WordPress Option in case user clicks "Member" sub-menu
++            update_option('glmMembersDatabaseMemberID', $memberID);
++
          }
  
          // If we don't have a member ID at this point, then it's a fatal error
@@@ -84,6 -84,6 +84,8 @@@ class GlmMembersAdmin_members_packagin
          $success = true;
          $havePackages = false;
          $packages = false;
++        $filterPackageType = false;
++        $haveFilter = false;
          $havePackage = false;
          $packageUpdated = false;
          $packageInfo = false;
              case 'list':
              default:
  
++                $where = '';
++
++                // Determine if there's any selected filters
++                if (isset($_REQUEST['filterPackageType'])) {
++                    switch($_REQUEST['filterPackageType']) {
++
++                        case 'member':
++                            $where = "T.ref_type > 0";
++                            $filterPackageType = 'member';
++                            $haveFilter = true;
++                            break;
++
++                        case 'multi-member':
++                            $where = "T.ref_type = 0";
++                            $filterPackageType = 'multi-member';
++                            $haveFilter = true;
++                            break;
++
++                        case 'all':
++                        default:
++                            $filterPackageType = 'all';
++                            break;
++
++                    }
++                } else {
++                    $filterPackageType = 'all';
++                }
++
                  // Get the list of packages
- //                $packages = $this->getList("T.ref_type = 0");
-                 $packages = $this->getList();
 -                $packages = $this->getList("T.ref_type = 0");
++                $packages = $this->getList($where);
  
                  // If we have some, tell the template
                  if ($packages && count($packages) > 0) {
          $templateData = array(
              'havePackages' => $havePackages,
              'packages' => $packages,
++            'filterPackageType' => $filterPackageType,
++            'haveFilter' => $haveFilter,
              'havePackage' => $havePackage,
              'packageUpdated' => $packageUpdated,
              'packageID' => $packageID,
@@@ -102,14 -102,14 +102,27 @@@ class GlmMembersFront_packaging_detail 
          $settings = array();
          $status = false;
  
--        // Get requested package - Check URL parameter first
--        if (isset($_REQUEST['packageID'])) {
--            $packageID = ($_REQUEST['packageID'] - 0);
--        }
++        // If we have a package slug supplied from a rewrite - get the id
++        $rrPackageSlug = get_query_var('packageslug', '');
++        if ($rrPackageSlug != '') {
++
++            $sql = "
++                SELECT id
++                  FROM ".GLM_MEMBERS_PACKAGING_PLUGIN_DB_PREFIX. "packages
++                  WHERE package_slug = '$rrPackageSlug'
++          ;";
++            $packageID = $this->wpdb->get_var($sql);
++
++        // Otherwise if package ID submitted in the URL
++        } elseif (isset($_REQUEST['id']) && $_REQUEST['id'] > 0) {
++
++            $packageID = ($_REQUEST['id'] - 0);
++
++        // Otherwise if ID from the short-code
++        } elseif (isset($actionData['request']) && isset($actionData['request']['id'])) {
++
++            $packageID = ($actionData['request']['id'] - 0);
  
--        // If not supplied in URL, then check shortcode attribute
--        if (!$packageID) {
--            $packageID = $actionData['request']['id'] - 0;
          }
  
          // If there's a package ID, then get the package data
index b71f50c,0000000..56df66f
mode 100644,000000..100644
--- /dev/null
@@@ -1,38 -1,0 +1,38 @@@
-         $slug = sanitize_title($p['title']);
 +<?php
 +/*
 + * Gaslight Media Members Database - Packaging Add-On
 + *
 + * Database Update Script for version 1.1.0
 + */
 +
 +/*
 + * Update package records to build package_slug field data from title
 + */
 +
 +// Get all package records
 +$packageRecords = $this->wpdb->get_results('SELECT id, title FROM '.GLM_MEMBERS_PACKAGING_PLUGIN_DB_PREFIX.'packages;', ARRAY_A);
 +
 +// If there's any package records
 +if ($packageRecords && count($packageRecords) > 0) {
 +
 +    // For each package record
 +    foreach ($packageRecords as $p) {
 +
 +        // Create a slug from the title
++        $slug = sanitize_title($p['title']).'-'.$p['id'];
 +
 +        // Store this value back into the record
 +        $this->wpdb->update(
 +                GLM_MEMBERS_PACKAGING_PLUGIN_DB_PREFIX.'packages',
 +                array(
 +                        'package_slug' => $slug
 +                ),
 +                array( 'id' => $p['id'] ),
 +                array( '%s' ),
 +                array( '%d')
 +        );
 +    }
 +
 +}
 +
 +?>
index 0000000,0000000..895147b
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,51 @@@
++<?php
++/**
++ * Gaslight Media Members Database
++ * GLM Members Packaging Add-On Misc Hooks and Filters
++ *
++ * PHP version 5.5
++ *
++ * @category glmWordPressPlugin
++ * @package  glmMembersDatabase
++ * @author   Chuck Scott <cscott@gaslightmedia.com>
++ * @license  http://www.gaslightmedia.com Gaslightmedia
++ * @release  frontHooks.php,v 1.0 2014/10/31 19:31:47 cscott Exp $
++ * @link     http://dev.gaslightmedia.com/
++ */
++
++/*
++ * Place Misc Hooks and Filters here. If this file exists, it will be included
++ * by the add-on main plugin script.
++ *
++ * Note that filter and hook callback functions must be included in-line as shown below...
++ *
++ *  add_filter( 'filter_title', function( $parameter ) {
++ *     // Function code
++ *  });
++ *
++ *  Also note that parameters will be in the context of the main front controller constructor.
++ */
++
++// Setup rewrite for package detail pages
++add_filter('rewrite_rules_array', function($rules) {
++    $newrules = array();
++    $newrules['('.$this->config['settings']['canonical_package_page'].')/([^/]*)$'] = 'index.php?pagename=$matches[1]&packageslug=$matches[2]';
++    return $newrules + $rules;
++});
++
++// Add packageslug query var
++add_filter('query_vars', function($vars) {
++    array_push($vars, 'packageslug');
++    return $vars;
++});
++
++// On init, check if we need to flush the rewrite rules to pickup the new ones
++add_filter('init', function() {
++    $rules = get_option( 'rewrite_rules' );
++    if ( ! isset( $rules['('.$this->config['settings']['canonical_package_page'].')/([^/]*)$'] ) ) {
++        global $wp_rewrite;
++        $wp_rewrite->flush_rules();
++    }
++});
++
++?>
      
        {if $option == 'edit'}
          <h2>Edit Package</h2>
--        <a id="deletePackageButton" class="button-primary glm-button glm-right">Delete this Package</a>
++        <a id="deletePackageButton" class="button button-primary glm-button glm-right">Delete this Package</a>
          
          <div id="deletePackageDialog" class="glm-dialog-box" title="Delete Package">
              <center>
--                <p><a id="deletePackageCancel" class="button-primary">Cancel</a></p>
++                <p><a id="deletePackageCancel" class="button button-primary">Cancel</a></p>
                  <p><input id="deletePackageSubmit" type="submit" value="Delete this package"></p>
              </center>
              <div class="glm-item-container">
@@@ -35,7 -35,7 +35,7 @@@
        {else}
          <h2>Add new Package</h2>
        {/if}
--        <a href="{$thisURL}?page={$thisPage}&glm_action=packaging&member={$memberID}" class="button-primary glm-button glm-right">Return to Package List</a>
++        <a href="{$thisURL}?page={$thisPage}&glm_action=packaging&member={$memberID}" class="button button-primary glm-button glm-right">Return to Package List</a>
      
          <form action="{$thisURL}?page={$thisPage}" method="post" enctype="multipart/form-data">
              <input type="hidden" name="glm_action" value="packaging">
                          <input type="checkbox" name="active" {if $packageInfo.fieldData.active.value} checked{/if}>
                      </td>
                  </tr>
++                <tr>
++                    <th {if $packageInfo.fieldRequired.short_descr}class="glm-required"{/if}>Short Description:</th>
++                    <td {if $packageInfo.fieldFail.short_descr}class="glm-form-bad-input"{/if}>
++                        <input type="text" name="short_descr" value="{$packageInfo.fieldData.short_descr}" class="glm-form-text-input" placeholder="A short, one line, description of the package.">
++                        {if $packageInfo.fieldFail.short_descr}<p>{$packageInfo.fieldFail.short_descr}</p>{/if}
++                    </td>
++                </tr>
                  <tr>
                      <th {if $packageInfo.fieldRequired.descr}class="glm-required"{/if}>Description:</th>
                      <td {if $packageInfo.fieldFail.descr}class="glm-form-bad-input"{/if}>
                          {if $packageInfo.fieldFail.descr}<p>{$packageInfo.fieldFail.descr}</p>{/if}
                      </td>
                  </tr>
--                <tr>
--                    <th {if $packageInfo.fieldRequired.short_descr}class="glm-required"{/if}>Short Description:</th>
--                    <td {if $packageInfo.fieldFail.short_descr}class="glm-form-bad-input"{/if}>
--                        <input type="text" name="short_descr" value="{$packageInfo.fieldData.short_descr}" class="glm-form-text-input" placeholder="A short, one line, description of the package.">
--                        {if $packageInfo.fieldFail.short_descr}<p>{$packageInfo.fieldFail.short_descr}</p>{/if}
--                    </td>
--                </tr>
                  <tr>
                      <th {if $packageInfo.fieldRequired.image}class="glm-required"{/if}>Image:</th>
                      <td {if $packageInfo.fieldFail.image}class="glm-form-bad-input"{/if}>
          <table class="glm-admin-table">
              <tr><th>Title:</th><td>{$packageInfo.fieldData.title}</td></tr>
              <tr><th>Active:</th><td>{$packageInfo.fieldData.active.name}</td></tr>
--            <tr><th>Description:</th><td>{$packageInfo.fieldData.descr}</td></tr>
              <tr><th>Short Description:</th><td>{$packageInfo.fieldData.short_descr}</td></tr>
++            <tr><th>Description:</th><td>{$packageInfo.fieldData.descr}</td></tr>
              <tr><th>Image:</th><td><img src="{$glmPluginMediaURL}/images/large/{$packageInfo.fieldData.image}"></td></tr>
              <tr><th>Start Date:</th><td>{$packageInfo.fieldData.start_date.date}</td></tr>
              <tr><th>End Date:</th><td>{$packageInfo.fieldData.end_date.date}</td></tr>
  {else} <!-- option is not edit or add -->
          
    {if apply_filters('glm_members_permit_admin_member_packaging_add_package', true)}
--        <div id="addPackageButton" class="button-primary glm-right">Add a Package</div>
++        <div id="addPackageButton" class="button button-primary glm-right">Add a Package</div>
    {/if}
    
--        <h2>Multi-Member Packages</h2>
++        <h2>Member Packages</h2>
      
          <table class="wp-list-table striped glm-admin-table">
              <thead>
          
        {if $option == 'edit'}
          <h2>Edit Multi-Member Package</h2>
--        <a id="deletePackageButton" class="button-primary glm-button glm-right">Delete this Package</a>
++        <a id="deletePackageButton" class="button button-primary glm-button glm-right">Delete this Package</a>
          
          <div id="deletePackageDialog" class="glm-dialog-box" title="Delete Package">
              <center>
--                <p><a id="deletePackageCancel" class="button-primary">Cancel</a></p>
++                <p><a id="deletePackageCancel" class="button button-primary">Cancel</a></p>
                  <p><input id="deletePackageSubmit" type="submit" value="Delete this package"></p>
              </center>
              <div class="glm-item-container">
@@@ -32,7 -32,7 +32,7 @@@
        {else}
          <h2>Add new Multi-Member Package</h2>
        {/if}
--        <a href="{$thisURL}?page={$thisPage}&glm_action=packaging" class="button-primary glm-button glm-right">Return to Package List</a>
++        <a href="{$thisURL}?page={$thisPage}&glm_action=packaging" class="button button-primary glm-button glm-right">Return to Package List</a>
          
      
          <form action="{$thisURL}?page={$thisPage}" method="post" enctype="multipart/form-data">
  {else} <!-- option is not edit or add -->
      
    {if apply_filters('glm_members_permit_admin_members_packaging_add_package', true)}
-     <div id="addPackageButton" class="button-primary glm-right">&nbsp;&nbsp;Add a Package</div>
 -    <div id="addPackageButton" class="button-primary glm-right">Add a Package</div>
++    <div id="addPackageButton" class="button button-primary glm-right">&nbsp;&nbsp;Add a Package</div>
    {/if}
        
 -    <h2>Multi-Member Packages</h2>
 +    <!-- Package list selection form -->      
 +    <form class="glm-right" onSubmit="return false;">
 +       <span{if $haveFilter} class="glm-notice"{/if}><b>List Filters:</b>&nbsp;&nbsp;</span> 
-        <input type="radio" name="filterPackageType" class="listFilter"{if $filterMultiMember} checked{/if} value="all">All&nbsp;&nbsp;
-        <input type="radio" name="filterPackageType" class="listFilter"{if $filterMultiMember} checked{/if} value="member">Member&nbsp;&nbsp;
-        <input type="radio" name="filterPackageType" class="listFilter"{if $filterMultiMember} checked{/if} value="multi-member">Multi-Member&nbsp;&nbsp;
++       <input type="radio" name="filterPackageType" class="listFilter"{if $filterPackageType == 'all'} checked{/if} value="all">All&nbsp;&nbsp;
++       <input type="radio" name="filterPackageType" class="listFilter"{if $filterPackageType == 'member'} checked{/if} value="member">Member&nbsp;&nbsp;
++       <input type="radio" name="filterPackageType" class="listFilter"{if $filterPackageType == 'multi-member'} checked{/if} value="multi-member">Multi-Member&nbsp;&nbsp;
 +       Search: <input  id="glmPackageSearch" type="text" id="autoTest">&nbsp;&nbsp;
 +    </form>
 +    <br clear="all">
 +      
 +      
 +    <h2>Packages</h2>
  
      <table class="wp-list-table striped glm-admin-table">
          <thead>
    {if $havePackages}
      {foreach $packages as $p}
              <tr>
 -                <td>
 +                <td class="glm-nowrap">
++        {if $p.ref_type.value}
++                    <a href="{$thisURL}?page=glm-members-admin-menu-member&glm_action=packaging&option=edit&member={$p.ref_dest}&packageID={$p.id}">{$p.title}</a>
++        {else}
                      <a href="{$thisURL}?page={$thisPage}&glm_action=packaging&option=edit&packageID={$p.id}">{$p.title}</a>
++        {/if}
 +                </td>
 +                <td class="glm-nowrap">
 +                    <a href="{$thisURL}?page=glm-members-admin-menu-member&glm_action=index&member={$p.ref_dest}">{$p.ref_dest_name}</a>
                  </td>
                  <td>
                      {$p.start_date.date}
              });
      {/if}
  
 -             * Package Members Processing
+             /*
 -             // Build a list of members for the autocomplete search
 -             var availableTags = [
 -     {foreach $membersList as $m}
 -                 { label: "{$m.name|unescape:'html'}", value: "{$m.name|unescape:'html'}", id: '{$m.id}', name: "{$m.name}" },
 -     {/foreach}
 -              ];
++             * Filter triggers
+              */
++             var filter = '';
++             $("[name='filterPackageType']" ).change( function() {
 -             $( "#glmMembersList" ).autocomplete({
++                 // Get type of package filter selected
++                 filter = $(this).val();
++                
++                 window.location.href = "{$thisURL}?page={$thisPage}&glm_action=packaging&filterPackageType=" + filter;
++                
++                return false;
++            });
-                 { label: "{$p.title|unescape:'html'} - {$p.ref_dest_name|unescape:'html'}", id: '{$p.id}' },
 +            /*
 +             * Do autocomplete search for package
 +             * label: What will be searched
 +             * value: What will be displayed when selected
 +             * id: Package id added so we can go to the member while showing what was selected
 +             * Also note that autocomplete does not properly render HTML codes, so we 
 +             * "unescape" them for HTML in Smarty.
 +             */
 +            var availableTags = [
 +    {if $havePackages}
 +        {foreach $packages as $p}
++                { label: "{$p.title|unescape:'html'} - {$p.ref_dest_name|unescape:'html'}", id: '{$p.id}', memb: '{if isset($p.member)}{$p.member.member_pointer}{else}0{/if}' },
 +        {/foreach}
 +    {/if}
 +             ];
 +             $( "#glmPackageSearch" ).autocomplete({
                   source: availableTags,
                   html: true,
                   select: function( event, ui ) {
 -
 -                     // get the member ID and Name
 -                     var memberID = ui.item.id;
 -                     var memberName = ui.item.name
 -
 -                     // Get a copy of the template 
 -                     var memberTemplate = $('#glmGalleryItmeDataTemplate').html();
 -                     
 -                     // Set the member data into the template copy
 -                     memberTemplate = memberTemplate.replace('{ id }', memberID).replace('{ memberName }', memberID);
 -                     
 -                     // Insert the selected member
 -                     $('#glmPackageMembersList').append(memberTemplate);
 -
 -                     {if !$havePackageMembers}
 -                     // Hide the no members selected message
 -                     $('#glmNoMembersSelected').hide();                     
 -        {/if}        
 -
 +                     var packageID = ui.item.id;
-                      window.location.replace("{$adminURL}?page=glm-members-admin-menu-members&glm_action=packaging&package=" + packageID );
++                     var memberID = ui.item.memb;
++                     if (memberID > 0) {
++                         // Selected package is a member package
++                         window.location.replace("{$adminURL}?page=glm-members-admin-menu-member&glm_action=packaging&option=edit&member=" + memberID + "&packageID=" + packageID );
++                     } else {
++                         // Selected package is a mulit-member package
++                         window.location.replace("{$adminURL}?page=glm-members-admin-menu-members&glm_action=packaging&option=edit&packageID=" + packageID );
++                     }
                   }
               });
 -
 +             
          });
      </script>
              
      <!-- Container for member information -->
      <div class="member">
          <h2><a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$package.member_slug}/">{$package.ref_dest_name}</a></h2>
--      {if $package.logo}
++      {if $package.member.logo}
          <img src="{$glmPluginMediaURL}/images/small/{$package.logo}">
        {/if}
          <div class="address">
--            <span>{$package.addr1}</span>
--          {if $package.addr2}
--            <span>{$package.addr2}</span>
++            <span>{$package.member.addr1}</span>
++          {if $package.member.addr2}
++            <span>{$package.member.addr2}</span>
            {/if}
--            <span>{$package.city}</span>, {$package.state.name} {$package.zip}</span>
--          {if $package.country.name}
--            <span>{$package.country.name}</span>
++            <span>{$package.member.city}</span>, {$package.member.state.name} {$package.member.zip}</span>
++          {if $package.member.country.name}
++            <span>{$package.member.country.name}</span>
            {/if}
--          {if $package.toll_free}
--            <span class="phone">{$package.toll_free}</span>
++          {if $package.member.toll_free}
++            <span class="phone">{$package.member.toll_free}</span>
            {/if}
--          {if $package.phone}
--            <span class="phone">{$package.phone}</span>
++          {if $package.member.phone}
++            <span class="phone">{$package.member.phone}</span>
            {/if}
--          {if $package.url}
--            <span class="url">{$package.url}</span>
++          {if $package.member.url}
++            <span class="url">{$package.member.url}</span>
            {/if}
--          {if $package.email}
--            <span class="email">{$package.email}</span>
++          {if $package.member.email}
++            <span class="email">{$package.member.email}</span>
            {/if}
          </div>
      </div>
@@@ -47,7 -47,7 +47,7 @@@
          <img src="{$glmPluginMediaURL}/images/small/{$package.image}">
        {/if}
        {if $package.descr}
--        <span class="descr">{$package.descr}</span>
++        <span class="descr">{$package.descr|nl2br}</span>
        {else if $package.short_descr}
          <span class="descr">{$package.short_descr}</span>
        {/if}
  -->
  
  <!-- Container for entire list of packages -->
- <div class="glm-member-package-container">
+ <div class="glm-member-package-wrapper">
      
  {if $havePackages}
-    
-   {foreach $packages as $p}
    
-     {if $byMember && $p.firstForMember}
-         <!-- Container for member information if multiple packages are listed under one member. - Only shows before first package for this member -->
-         <div class="member">
-             <h2 class="member-title"><a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$p.member_slug}/">{$p.ref_dest_name}</a></h2>
-             
-             {if $p.logo}
-             <img src="{$glmPluginMediaURL}/images/medium/{$p.logo}">
-           {/if}
-             <div class="address">
-                 <div class="addr1">{$p.addr1}</div>
-               {if $p.addr2}
-                 <div class="addr2">{$p.addr2}</div>
-               {/if}
-                 <div class="citystatezip">{if $p.city}{$p.city}, {/if}{if $p.state.name}{$p.state.name} {/if}{if $p.zip}{$p.zip}{/if}</div>
-               {if $p.country.name}
-                 <div class="country">{$p.country.name}</div>
-               {/if}
-               {if $p.toll_free}
-                 <div class="phone">{$p.toll_free}</div>
-               {/if}
-               {if $p.phone}
-                 <div class="phone">{$p.phone}</div>
-               {/if}
-               {if $p.url}
-                 <div><a class="url" title="url" href={$p.url}>{$p.url}</a></div>
-               {/if}
-               {if $p.email}
-                 <div><a class="email" title="Email" href={$p.email}>{$p.email}</a></div>
+   <!-- If pacakges are listed by member, use this block -->
+    
+   {if $byMember}
+       {foreach $members as $m}
+         <div class="glm-member-package-container">
+             <!-- Container for member information if multiple packages are listed under one member. - Only shows before first package for this member -->
+             <div class="member">
 -                {if $m.logo}
++              {if $m.logo}
+                 <img src="{$glmPluginMediaURL}/images/medium/{$m.logo}">
                {/if}
 -                <h2 class="member-title"><a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$m.member_slug}/">{$m.member_name}</a></h2>
++                <h2 class="member-title"><a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$m.member_slug}/">{$m.member_name} this is a test</a></h2>
+                 <div class="address">
+                     <div class="addr1">{$m.addr1}</div>
+                   {if $m.addr2}
+                     <div class="addr2">{$m.addr2}</div>
+                   {/if}
+                     <div class="citystatezip">{if $m.city}{$m.city}, {/if}{if $m.state.name}{$m.state.name} {/if}{if $m.zip}{$m.zip}{/if}</div>
+                   {if $m.country.name}
+                     <div class="country">{$m.country.name}</div>
+                   {/if}
+                   {if $m.toll_free}
+                     <div class="phone">{$m.toll_free}</div>
+                   {/if}
+                   {if $m.phone}
+                     <div class="phone">{$m.phone}</div>
+                   {/if}
+                   {if $m.url}
+                     <div><a class="url" title="url" href={$m.url}>{$m.url}</a></div>
+                   {/if}
+                   {if $m.email}
+                     <div><a class="email" title="Email" href={$m.email}>Email</a></div>
+                   {/if}
+                 </div>
              </div>
-         </div>
-     {/if}
+         
+         {foreach $m.packages as $p}
+             <!-- Container for each package -->
+             <div class="package">
+     
+                 <!-- Container for package information -->
+                 <div class="package-info">
+                     
+                   {if $p.image}
+                     <img src="{$glmPluginMediaURL}/images/medium/{$p.image}">
+                   {/if}
 -                    <h3 class="package-title"><a href="{$thisURL}?glm_action=detail&packageID={$p.id}">{$p.title}</a></h3>
 -                  {if $p.descr}
 -                    {$p.descr}
 -                  {else if $p.short_descr}
++                    <h3 class="package-title"><a href="{$siteBaseUrl}{$settings.canonical_package_page}/{$p.package_slug}/">{$p.title}</a></h3>
+                     {$p.short_descr}
 -                  {/if}
+                     <div class="details">
+                         <div><span class="title">Expires: </span><span class="data">{$p.expire_date.date}</span></div>
+                         <div><span class="title">Pricing: </span><span class="data">{$p.pricing}</span></div>
+                     </div>
+                 </div>
+             
+             </div>
+         {/foreach} <!-- /package -->
+         
+         </div> <!-- /member -->
+       {/foreach}
+   
+   <!-- If packages are listed by package, use this block -->
+   {else}
+   
+     {foreach $packages as $p}
      
-         <!-- Container for each package -->
-         <div class="package">
+         <div class="glm-member-package-container">
  
-         {if !$byMember}
+     
              <!-- Container for member information if displayed with each package -->
              <div class="member">
-                 {if $p.logo}
-                 <img src="{$glmPluginMediaURL}/images/medium/{$p.logo}">
+                 {if $p.member.logo}
+                 <img src="{$glmPluginMediaURL}/images/medium/{$p.member.logo}">
                {/if}
-                 <h2 class="member-title"><a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$p.member_slug}/">{$p.ref_dest_name}</a></h2>
+                 <h2 class="member-title"><a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$p.member.member_slug}/">{$p.member.member_name}</a></h2>
                  <div class="address">
-                     <div class="addr1">{$p.addr1}</div>
-                   {if $p.addr2}
-                     <div class="addr2">{$p.addr2}</div>
+                     <div class="addr1">{$p.member.addr1}</div>
+                   {if $p.member.addr2}
+                     <div class="addr2">{$p.member.addr2}</div>
                    {/if}
-                     <div class="citystatezip">{if $p.city}{$p.city}, {/if}{if $p.state.name}{$p.state.name} {/if}{if $p.zip}{$p.zip}{/if}</div>
-                   {if $p.country.name}
-                     <div class="country">{$p.country.name}</div>
+                     <div class="citystatezip">{if $p.member.city}{$p.member.city}, {/if}{if $p.member.state.name}{$p.member.state.name} {/if}{if $p.member.zip}{$p.member.zip}{/if}</div>
+                   {if $p.member.country.name}
+                     <div class="country">{$p.member.country.name}</div>
                    {/if}
-                   {if $p.toll_free}
-                     <div class="phone">{$p.toll_free}</div>
+                   {if $p.member.toll_free}
+                     <div class="phone">{$p.member.toll_free}</div>
                    {/if}
-                   {if $p.phone}
-                     <div class="phone">{$p.phone}</div>
+                   {if $p.member.phone}
+                     <div class="phone">{$p.member.phone}</div>
                    {/if}
-                   {if $p.url}
-                   <a class="url" title="url" href={$p.url}>{$p.url}</a>
+                   {if $p.member.url}
+                   <a class="url" title="url" href={$p.member.url}>{$p.member.url}</a>
                    {/if}
-                   {if $p.email}
-                     <a class="email" title="Email" href={$p.email}>Email</a>
+                   {if $p.member.email}
+                     <a class="email" title="Email" href={$p.member.email}>Email</a>
                    {/if}
                  </div>
              </div>
-         {/if}
          
              <!-- Container for package information -->
-             <div class="package-info">
-                 
-               {if $p.image}
-                 <img src="{$glmPluginMediaURL}/images/medium/{$p.image}">
-               {/if}
-                 <h3 class="package-title"><a href="{$thisURL}{$settings.canonical_package_page}/{$p.package_slug}/">{$p.title}</a></h3>
-               {if $p.descr}
-                 {$p.descr}
-               {else if $p.short_descr}
-                 {$p.short_descr}
-               {/if}
-                 <div class="details">
-                     <span class="title">Expires: </span><span class="data">{$p.expire_date.date}</span>
-                     <span class="title">Pricing: </span><span class="data">{$p.pricing}</span>
+             <div class="package">
+                 <div class="package-info">
+                     
+                   {if $p.image}
+                     <img src="{$glmPluginMediaURL}/images/medium/{$p.image}">
+                   {/if}
 -                    <h3 class="package-title"><a href="{$thisURL}?glm_action=detail&packageID={$p.id}">{$p.title}</a></h3>
++                    <h3 class="package-title"><a href="{$siteBaseUrl}{$settings.canonical_package_page}/{$p.package_slug}/">{$p.title}</a></h3>
+                   {if $p.descr}
 -                    {$p.descr}
++                    {$p.descr|nl2br}
+                   {else if $p.short_descr}
+                     {$p.short_descr}
+                   {/if}
+                     <div class="details">
+                         <div><span class="title">Expires: </span><span class="data">{$p.expire_date.date}</span></div>
+                         <div><span class="title">Pricing: </span><span class="data">{$p.pricing}</span></div>
+                     </div>
                  </div>
              </div>
+         </div>
          
-         </div> <!-- /package -->
-   {/foreach}                          
+     {/foreach}
+   
+   {/if} <!-- if by member -->
+   
    
  {else}
      (Sorry, no packages currently listed.)