From: Chuck Scott Date: Tue, 12 Jan 2016 20:33:55 +0000 (-0500) Subject: Merge branch 'develop' into feature/CanonicalDetailPages X-Git-Tag: v1.0.19^2~1^2 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=97fae60163b70f28b9b2394600b969d41ffd42f3;p=WP-Plugins%2Fglm-member-db-packaging.git Merge branch 'develop' into feature/CanonicalDetailPages Conflicts: glm-member-db-packaging.php views/front/packaging/list.html --- 97fae60163b70f28b9b2394600b969d41ffd42f3 diff --cc classes/data/dataPackages.php index f366f59,e0d48d7..072e722 --- a/classes/data/dataPackages.php +++ b/classes/data/dataPackages.php @@@ -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', + 'required' => true, ++ 'maxLength' => 230, + 'use' => 'a' + ), + - // Short Description - 'short_descr' => array ( - 'field' => 'short_descr', ++ // Description ++ 'descr' => array ( ++ 'field' => 'descr', + 'type' => 'text', ++ 'required' => true, 'use' => 'a' ), @@@ -287,36 -280,6 +289,36 @@@ return $r; } + /* + * 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']); ++ $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; + + } + + } ?> diff --cc models/admin/member/packaging.php index 6ceb1cd,a0c7ee2..af93f2e --- a/models/admin/member/packaging.php +++ b/models/admin/member/packaging.php @@@ -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 diff --cc models/admin/members/packaging.php index d49f66a,7ca37d9..e91f034 --- a/models/admin/members/packaging.php +++ b/models/admin/members/packaging.php @@@ -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; @@@ -216,9 -216,8 +218,36 @@@ 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) { @@@ -268,6 -267,6 +297,8 @@@ $templateData = array( 'havePackages' => $havePackages, 'packages' => $packages, ++ 'filterPackageType' => $filterPackageType, ++ 'haveFilter' => $haveFilter, 'havePackage' => $havePackage, 'packageUpdated' => $packageUpdated, 'packageID' => $packageID, diff --cc models/front/packaging/detail.php index 88c125a,88c125a..c5330de --- a/models/front/packaging/detail.php +++ b/models/front/packaging/detail.php @@@ -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 diff --cc setup/databaseScripts/update_database_V1.1.0.php index b71f50c,0000000..56df66f mode 100644,000000..100644 --- a/setup/databaseScripts/update_database_V1.1.0.php +++ b/setup/databaseScripts/update_database_V1.1.0.php @@@ -1,38 -1,0 +1,38 @@@ +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']); ++ $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') + ); + } + +} + +?> diff --cc setup/frontHooks.php index 0000000,0000000..895147b new file mode 100644 --- /dev/null +++ b/setup/frontHooks.php @@@ -1,0 -1,0 +1,51 @@@ ++ ++ * @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(); ++ } ++}); ++ ++?> diff --cc views/admin/member/packaging.html index 3e66b15,6e57ded..14b2528 --- a/views/admin/member/packaging.html +++ b/views/admin/member/packaging.html @@@ -13,11 -13,11 +13,11 @@@ {if $option == 'edit'}

Edit Package

-- Delete this Package ++ Delete this Package
--

Cancel

++

Cancel

@@@ -35,7 -35,7 +35,7 @@@ {else}

Add new Package

{/if} -- Return to Package List ++ Return to Package List
@@@ -64,6 -63,6 +64,13 @@@ ++ ++ Short Description: ++ ++ ++ {if $packageInfo.fieldFail.short_descr}

{$packageInfo.fieldFail.short_descr}

{/if} ++ ++ Description: @@@ -80,13 -79,13 +87,6 @@@ {if $packageInfo.fieldFail.descr}

{$packageInfo.fieldFail.descr}

{/if} -- -- Short Description: -- -- -- {if $packageInfo.fieldFail.short_descr}

{$packageInfo.fieldFail.short_descr}

{/if} -- -- Image: @@@ -154,8 -153,8 +154,8 @@@ -- ++ @@@ -169,10 -168,10 +169,10 @@@ {else} {if apply_filters('glm_members_permit_admin_member_packaging_add_package', true)} --
Add a Package
++
Add a Package
{/if} --

Multi-Member Packages

++

Member Packages

Title:{$packageInfo.fieldData.title}
Active:{$packageInfo.fieldData.active.name}
Description:{$packageInfo.fieldData.descr}
Short Description:{$packageInfo.fieldData.short_descr}
Description:{$packageInfo.fieldData.descr}
Image:
Start Date:{$packageInfo.fieldData.start_date.date}
End Date:{$packageInfo.fieldData.end_date.date}
diff --cc views/admin/members/packaging.html index ee211fb,96e2bb2..136b96c --- a/views/admin/members/packaging.html +++ b/views/admin/members/packaging.html @@@ -10,11 -10,11 +10,11 @@@ {if $option == 'edit'}

Edit Multi-Member Package

-- Delete this Package ++ Delete this Package
--

Cancel

++

Cancel

@@@ -32,7 -32,7 +32,7 @@@ {else}

Add new Multi-Member Package

{/if} -- Return to Package List ++ Return to Package List @@@ -227,21 -226,10 +227,21 @@@ {else} {if apply_filters('glm_members_permit_admin_members_packaging_add_package', true)} -
  Add a Package
-
Add a Package
++
  Add a Package
{/if} -

Multi-Member Packages

+ + + List Filters:   - All   - Member   - Multi-Member   ++ All   ++ Member   ++ Multi-Member   + Search:    + +
+ + +

Packages

@@@ -257,11 -244,8 +257,15 @@@ {if $havePackages} {foreach $packages as $p} - +
+ ++ {if $p.ref_type.value} ++ {$p.title} ++ {else} {$p.title} ++ {/if} + + {$p.ref_dest_name} {$p.start_date.date} @@@ -314,30 -298,43 +318,51 @@@ }); {/if} + /* - * Package Members Processing ++ * Filter triggers + */ ++ var filter = ''; ++ $("[name='filterPackageType']" ).change( function() { + - // 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} - ]; ++ // Get type of package filter selected ++ filter = $(this).val(); ++ ++ window.location.href = "{$thisURL}?page={$thisPage}&glm_action=packaging&filterPackageType=" + filter; ++ ++ return false; ++ }); + - $( "#glmMembersList" ).autocomplete({ + /* + * 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}' }, ++ { 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 ); ++ } } }); - + }); diff --cc views/front/packaging/detail.html index 0f8429d,0f8429d..53ad422 --- a/views/front/packaging/detail.html +++ b/views/front/packaging/detail.html @@@ -13,29 -13,29 +13,29 @@@

{$package.ref_dest_name}

-- {if $package.logo} ++ {if $package.member.logo} {/if}
-- {$package.addr1} -- {if $package.addr2} -- {$package.addr2} ++ {$package.member.addr1} ++ {if $package.member.addr2} ++ {$package.member.addr2} {/if} -- {$package.city}, {$package.state.name} {$package.zip} -- {if $package.country.name} -- {$package.country.name} ++ {$package.member.city}, {$package.member.state.name} {$package.member.zip} ++ {if $package.member.country.name} ++ {$package.member.country.name} {/if} -- {if $package.toll_free} -- {$package.toll_free} ++ {if $package.member.toll_free} ++ {$package.member.toll_free} {/if} -- {if $package.phone} -- {$package.phone} ++ {if $package.member.phone} ++ {$package.member.phone} {/if} -- {if $package.url} -- {$package.url} ++ {if $package.member.url} ++ {$package.member.url} {/if} -- {if $package.email} -- ++ {if $package.member.email} ++ {/if}
@@@ -47,7 -47,7 +47,7 @@@ {/if} {if $package.descr} -- {$package.descr} ++ {$package.descr|nl2br} {else if $package.short_descr} {$package.short_descr} {/if} diff --cc views/front/packaging/list.html index 1ac0fce,a470868..120807a --- a/views/front/packaging/list.html +++ b/views/front/packaging/list.html @@@ -6,101 -6,137 +6,133 @@@ --> -
+
{if $havePackages} - - {foreach $packages as $p} - {if $byMember && $p.firstForMember} - -
-

{$p.ref_dest_name}

- - {if $p.logo} - - {/if} -
-
{$p.addr1}
- {if $p.addr2} -
{$p.addr2}
- {/if} -
{if $p.city}{$p.city}, {/if}{if $p.state.name}{$p.state.name} {/if}{if $p.zip}{$p.zip}{/if}
- {if $p.country.name} -
{$p.country.name}
- {/if} - {if $p.toll_free} -
{$p.toll_free}
- {/if} - {if $p.phone} -
{$p.phone}
- {/if} - {if $p.url} - - {/if} - {if $p.email} - + + + {if $byMember} + {foreach $members as $m} +
+ + +
- {if $m.logo} ++ {if $m.logo} + {/if} -

{$m.member_name}

++

{$m.member_name} this is a test

+
+
{$m.addr1}
+ {if $m.addr2} +
{$m.addr2}
+ {/if} +
{if $m.city}{$m.city}, {/if}{if $m.state.name}{$m.state.name} {/if}{if $m.zip}{$m.zip}{/if}
+ {if $m.country.name} +
{$m.country.name}
+ {/if} + {if $m.toll_free} +
{$m.toll_free}
+ {/if} + {if $m.phone} +
{$m.phone}
+ {/if} + {if $m.url} + + {/if} + {if $m.email} + + {/if} +
-
- {/if} + + {foreach $m.packages as $p} + +
+ + +
+ + {if $p.image} + + {/if} -

{$p.title}

- {if $p.descr} - {$p.descr} - {else if $p.short_descr} ++

{$p.title}

+ {$p.short_descr} - {/if} +
+
Expires: {$p.expire_date.date}
+
Pricing: {$p.pricing}
+
+
+ +
+ {/foreach} + +
+ {/foreach} + + + {else} + + {foreach $packages as $p} - -
+
- {if !$byMember} +
- {if $p.logo} - + {if $p.member.logo} + {/if} -

{$p.ref_dest_name}

+

{$p.member.member_name}

-
{$p.addr1}
- {if $p.addr2} -
{$p.addr2}
+
{$p.member.addr1}
+ {if $p.member.addr2} +
{$p.member.addr2}
{/if} -
{if $p.city}{$p.city}, {/if}{if $p.state.name}{$p.state.name} {/if}{if $p.zip}{$p.zip}{/if}
- {if $p.country.name} -
{$p.country.name}
+
{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}
+ {if $p.member.country.name} +
{$p.member.country.name}
{/if} - {if $p.toll_free} -
{$p.toll_free}
+ {if $p.member.toll_free} +
{$p.member.toll_free}
{/if} - {if $p.phone} -
{$p.phone}
+ {if $p.member.phone} +
{$p.member.phone}
{/if} - {if $p.url} - {$p.url} + {if $p.member.url} + {$p.member.url} {/if} - {if $p.email} - + {if $p.member.email} + {/if}
- {/if} -
- - {if $p.image} - - {/if} -

{$p.title}

- {if $p.descr} - {$p.descr} - {else if $p.short_descr} - {$p.short_descr} - {/if} -
- Expires: {$p.expire_date.date} - Pricing: {$p.pricing} +
+
+ + {if $p.image} + + {/if} -

{$p.title}

++

{$p.title}

+ {if $p.descr} - {$p.descr} ++ {$p.descr|nl2br} + {else if $p.short_descr} + {$p.short_descr} + {/if} +
+
Expires: {$p.expire_date.date}
+
Pricing: {$p.pricing}
+
+
-
- - {/foreach} + {/foreach} + + {/if} + {else} (Sorry, no packages currently listed.)