From: Laury GvR Date: Fri, 30 Mar 2018 15:25:40 +0000 (-0400) Subject: Pseudo-random sort order for package list added X-Git-Tag: v1.3.0^2~7 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/index.cgi?a=commitdiff_plain;h=b333b27ec8945a3cbca0c230db573a6fe9d6700c;p=WP-Plugins%2Fglm-member-db-packaging.git Pseudo-random sort order for package list added Pseudo-random sort ordering will order the list differently for each session (not each page refresh) by using a random seed and a cookie. The database now contains the package_list_order field, and management for package list has a dropdown for this setting. The default is still Alpha-Numeric, and the config values used are the ones in the Member DB plugin.ini file. --- diff --git a/classes/data/dataManagement.php b/classes/data/dataManagement.php index aca0c49..dd2604d 100644 --- a/classes/data/dataManagement.php +++ b/classes/data/dataManagement.php @@ -140,6 +140,18 @@ class GlmDataPackagingManagement extends GlmDataAbstract 'use' => 'a', ), + + // Front-end Listings - Member List Order + 'package_list_order' => array( + 'field' => 'package_list_order', + 'type' => 'list', + 'list' => $this->config['sort_order'], + 'required' => true, + 'default' => $this->config['sort_order_numb']['Alpha-Numeric'], + 'force_list' => true, + 'use' => 'a' + ), + // Canonical Page Slug 'canonical_package_page' => array ( 'field' => 'canonical_package_page', diff --git a/config/plugin.ini b/config/plugin.ini index 8fdb6a8..4ab6699 100644 --- a/config/plugin.ini +++ b/config/plugin.ini @@ -3,4 +3,4 @@ ; Gaslight Media Members Database Packaging Add-On Plugin ; -[common] +[common] \ No newline at end of file diff --git a/index.php b/index.php index f947d11..e025a13 100644 --- a/index.php +++ b/index.php @@ -44,7 +44,7 @@ if (!defined('ABSPATH')) { * version from this plugin. */ define('GLM_MEMBERS_PACKAGING_PLUGIN_VERSION', '1.2.18'); -define('GLM_MEMBERS_PACKAGING_PLUGIN_DB_VERSION', '1.1.7'); +define('GLM_MEMBERS_PACKAGING_PLUGIN_DB_VERSION', '1.1.8'); // This is the minimum version of the GLM Members DB plugin require for this plugin. define('GLM_MEMBERS_PACKAGING_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION', '2.9.15'); diff --git a/models/front/packaging/list.php b/models/front/packaging/list.php index 6718db4..e674f9b 100644 --- a/models/front/packaging/list.php +++ b/models/front/packaging/list.php @@ -215,61 +215,66 @@ class GlmMembersFront_packaging_list extends GlmDataPackages // Drop the data organized by packages $packages = false; - - - - - /* - * Sort members by pseudo-random sequence - * - * A management option in packaging will need to be created to select this - * or "Sort by member name" below. - * - * *** THIS IS UNTESTED CODE *** - * - * WARNING: shuffle() will create new keys for the array! - * The $members keys will no longer match the member IDs. - * This should not be a problem, but be aware of it. - * - */ - - /* - $cookieName = 'GLM_PACKAGE_SORT_SEED'; - $cookieTime = 86400; - - // Get browser cookie if it exists or otherwise generate one - if (isset($_COOKIE[$cookieName])) { - $seed = ($_COOKIE[$cookieName]); - } else { - $seed = intval(time()*1000000+microtime()*1000000); - } - - // Enforce seed as positive integer - $seed = abs(intval($seed -0)); - - // Store or update seed in browser cookie - setcookie($cookieName, $seed, time() + $cookieTime); - - // Use the seed to order the Member list - Note that shuffle() will produce the same results if strand() has the same seed. - srand($seed); - shuffle($members); - */ - - - - // Sort by member name - reset( $members ); - uasort( - $members, - function($a, $b) { - if ( $a['member'] == $b['member'] ) { - return 0; + + // Determine how to sort the package list + // The sort order config uses the one set up in Member DB plugin.ini + switch ($this->config['settings']['package_list_order']) { + + // Pseudo-Random list order + case $this->config['sort_order_numb']['Pseudo-Random']: + + /* + * Sort members by pseudo-random sequence + * + * WARNING: shuffle() will create new keys for the array! + * The $members keys will no longer match the member IDs. + * This should not be a problem, but be aware of it. + * + */ + $cookieName = 'GLM_PACKAGE_SORT_SEED'; + $cookieTime = 86400; + + // Get browser cookie if it exists or otherwise generate one + if (isset($_COOKIE[$cookieName])) { + $seed = ($_COOKIE[$cookieName]); + } else { + $seed = intval(time()*1000000+microtime()*1000000); } - return ( $a['member'] < $b['member'] ) ? -1 : 1; - } - ); + // Enforce seed as positive integer + $seed = abs(intval($seed -0)); + + // Store or update seed in browser cookie + setcookie($cookieName, $seed, time() + $cookieTime); + + // Use the seed to order the Member list - Note that shuffle() will produce the same results if strand() has the same seed. + srand($seed); + shuffle($members); + + break; + + // Default is alpha-numeric list order + default: + case $this->config['sort_order_numb']['Alpha-Numeric']: + + // Sort by member name + reset( $members ); + uasort( + $members, + function($a, $b) { + if ( $a['member'] == $b['member'] ) { + return 0; + } + return ( $a['member'] < $b['member'] ) ? -1 : 1; + } + ); + + break; + + } + $byMember = true; + } // Check for alternate template requests diff --git a/setup/databaseScripts/create_database_V1.1.7.sql b/setup/databaseScripts/create_database_V1.1.7.sql deleted file mode 100644 index 0ee81ee..0000000 --- a/setup/databaseScripts/create_database_V1.1.7.sql +++ /dev/null @@ -1,115 +0,0 @@ --- Gaslight Media Members Database - Packaging --- File Created: 12/02/15 15:27:15 --- Database Version: 1.1.6 --- Database Creation Script --- --- To permit each query below to be executed separately, --- all queries must be separated by a line with four dashes - --- Packages -CREATE TABLE {prefix}packages ( - id INT NOT NULL AUTO_INCREMENT, - active BOOLEAN NULL, -- Package is active - status INT NULL, -- Status for this package, see config['status'] - title TINYTEXT NULL, -- Title of package - package_slug TINYTEXT NULL, -- Package name slug for canonical URLs (lowercase, "-" for spaces, no punctuation) - offsite_url TINYTEXT NULL, -- Url for the package list on the member's site - descr TEXT NULL, -- Description of package - short_descr TINYTEXT NULL, -- Short description of package - image TINYTEXT NULL, -- Package image - start_date TIMESTAMP NULL, -- Date display of this package starts - end_date TIMESTAMP NULL, -- Date display of this package ends (last date of display) - expire_date TIMESTAMP NULL, -- Date package expires (first date it's expired) - position INT NULL, -- Display order position - pricing TINYTEXT NULL, -- Pricing, descriptive - ref_type INT NULL, -- Type of entity this package is associated with - ref_dest INT NULL, -- Pointer to the specific entity - PRIMARY KEY (id), - INDEX(ref_type), - INDEX(ref_dest), - INDEX(start_date), - INDEX(end_date), - INDEX(expire_date) -); - ----- - --- Package Elements - Items in a package -CREATE TABLE {prefix}package_elements ( - id INT NOT NULL AUTO_INCREMENT, - package INT NULL, -- Pointer to the package - active BOOLEAN NULL, -- Package is active - title TINYTEXT NULL, -- Title of element - descr TEXT NULL, -- Description for this entity's participation in the package - short_descr TEXT NULL, -- Short description for this entity's participation in the package - image TINYTEXT NULL, -- Element image - position INT NULL, -- Display order position - ref_type INT NULL, -- Type of entity this element is association with - ref_dest INT NULL, -- Pointer to the specific entity - PRIMARY KEY (id), - INDEX(package), - INDEX(ref_type), - INDEX(ref_dest) -); - ----- - --- Package Management Settings -CREATE TABLE {prefix}management ( - id INT NOT NULL AUTO_INCREMENT, - canonical_package_page TINYTEXT NULL, -- Canonical page slug for package detail - package_link_text_member_list TINYTEXT NULL, - package_link_text_member_detail TINYTEXT NULL, - package_to_email TINYTEXT NULL, -- Email address of the recipient - package_from_email TINYTEXT NULL, -- Email address of the sender - package_email_notification TEXT NULL, -- Email notification message - package_display_member_message BOOLEAN DEFAULT '0', -- Boolean to show member message or not - package_member_message TEXT NULL, -- Member Message - package_all_moderated BOOLEAN DEFAULT '0', -- if all packages are moderated or not - package_list_show_image BOOLEAN DEFAULT '1', - package_list_show_short_descr BOOLEAN DEFAULT '1', - package_list_show_expire_date BOOLEAN DEFAULT '1', - package_list_show_pricing BOOLEAN DEFAULT '1', - package_list_show_offsite_url BOOLEAN DEFAULT '1', - package_list_show_offsite_url_newtarget BOOLEAN DEFAULT '1', - package_list_show_member_image BOOLEAN DEFAULT '1', - package_list_show_member_short_descr BOOLEAN DEFAULT '1', - package_list_show_member_link BOOLEAN DEFAULT '1', - package_list_show_member_link_newtarget BOOLEAN DEFAULT '1', - package_list_show_member_address BOOLEAN DEFAULT '1', - package_list_show_member_second_address BOOLEAN DEFAULT '1', - package_list_show_member_street BOOLEAN DEFAULT '1', - package_list_show_member_citystatezip BOOLEAN DEFAULT '1', - package_list_show_member_country BOOLEAN DEFAULT '1', - package_list_show_member_region BOOLEAN DEFAULT '1', - package_list_show_member_phone BOOLEAN DEFAULT '1', - package_list_show_member_tollfree BOOLEAN DEFAULT '1', - package_list_show_member_email BOOLEAN DEFAULT '1', - package_list_show_member_website_url BOOLEAN DEFAULT '1', - package_list_show_member_website_url_newtarget BOOLEAN DEFAULT '1', - package_list_show_package_detail_link BOOLEAN DEFAULT '1', - package_detail_show_image BOOLEAN DEFAULT '1', - package_detail_show_offsite_url BOOLEAN DEFAULT '1', - package_detail_show_offsite_url_newtarget BOOLEAN DEFAULT '1', - package_detail_show_member_link BOOLEAN DEFAULT '1', - package_detail_show_member_link_newtarget BOOLEAN DEFAULT '1', - package_detail_show_member_address BOOLEAN DEFAULT '1', - package_detail_show_member_street BOOLEAN DEFAULT '1', - package_detail_show_member_citystatezip BOOLEAN DEFAULT '1', - package_detail_show_member_country BOOLEAN DEFAULT '1', - package_detail_show_member_region BOOLEAN DEFAULT '1', - package_detail_show_member_phone BOOLEAN DEFAULT '1', - package_detail_show_member_tollfree BOOLEAN DEFAULT '1', - package_detail_show_member_email BOOLEAN DEFAULT '1', - PRIMARY KEY (id) -); - ----- - --- Set default package management entry -INSERT INTO {prefix}management - ( id, canonical_package_page ) - VALUES - ( 1, 'package-detail' ) -; - diff --git a/setup/databaseScripts/create_database_V1.1.8.sql b/setup/databaseScripts/create_database_V1.1.8.sql new file mode 100644 index 0000000..61aa1a8 --- /dev/null +++ b/setup/databaseScripts/create_database_V1.1.8.sql @@ -0,0 +1,116 @@ +-- Gaslight Media Members Database - Packaging +-- File Created: 12/02/15 15:27:15 +-- Database Version: 1.1.8 +-- Database Creation Script +-- +-- To permit each query below to be executed separately, +-- all queries must be separated by a line with four dashes + +-- Packages +CREATE TABLE {prefix}packages ( + id INT NOT NULL AUTO_INCREMENT, + active BOOLEAN NULL, -- Package is active + status INT NULL, -- Status for this package, see config['status'] + title TINYTEXT NULL, -- Title of package + package_slug TINYTEXT NULL, -- Package name slug for canonical URLs (lowercase, "-" for spaces, no punctuation) + offsite_url TINYTEXT NULL, -- Url for the package list on the member's site + descr TEXT NULL, -- Description of package + short_descr TINYTEXT NULL, -- Short description of package + image TINYTEXT NULL, -- Package image + start_date TIMESTAMP NULL, -- Date display of this package starts + end_date TIMESTAMP NULL, -- Date display of this package ends (last date of display) + expire_date TIMESTAMP NULL, -- Date package expires (first date it's expired) + position INT NULL, -- Display order position + pricing TINYTEXT NULL, -- Pricing, descriptive + ref_type INT NULL, -- Type of entity this package is associated with + ref_dest INT NULL, -- Pointer to the specific entity + PRIMARY KEY (id), + INDEX(ref_type), + INDEX(ref_dest), + INDEX(start_date), + INDEX(end_date), + INDEX(expire_date) +); + +---- + +-- Package Elements - Items in a package +CREATE TABLE {prefix}package_elements ( + id INT NOT NULL AUTO_INCREMENT, + package INT NULL, -- Pointer to the package + active BOOLEAN NULL, -- Package is active + title TINYTEXT NULL, -- Title of element + descr TEXT NULL, -- Description for this entity's participation in the package + short_descr TEXT NULL, -- Short description for this entity's participation in the package + image TINYTEXT NULL, -- Element image + position INT NULL, -- Display order position + ref_type INT NULL, -- Type of entity this element is association with + ref_dest INT NULL, -- Pointer to the specific entity + PRIMARY KEY (id), + INDEX(package), + INDEX(ref_type), + INDEX(ref_dest) +); + +---- + +-- Package Management Settings +CREATE TABLE {prefix}management ( + id INT NOT NULL AUTO_INCREMENT, + canonical_package_page TINYTEXT NULL, -- Canonical page slug for package detail + package_link_text_member_list TINYTEXT NULL, + package_link_text_member_detail TINYTEXT NULL, + package_to_email TINYTEXT NULL, -- Email address of the recipient + package_from_email TINYTEXT NULL, -- Email address of the sender + package_email_notification TEXT NULL, -- Email notification message + package_display_member_message BOOLEAN DEFAULT '0', -- Boolean to show member message or not + package_member_message TEXT NULL, -- Member Message + package_all_moderated BOOLEAN DEFAULT '0', -- if all packages are moderated or not + package_list_order SMALLINT DEFAULT '10', + package_list_show_image BOOLEAN DEFAULT '1', + package_list_show_short_descr BOOLEAN DEFAULT '1', + package_list_show_expire_date BOOLEAN DEFAULT '1', + package_list_show_pricing BOOLEAN DEFAULT '1', + package_list_show_offsite_url BOOLEAN DEFAULT '1', + package_list_show_offsite_url_newtarget BOOLEAN DEFAULT '1', + package_list_show_member_image BOOLEAN DEFAULT '1', + package_list_show_member_short_descr BOOLEAN DEFAULT '1', + package_list_show_member_link BOOLEAN DEFAULT '1', + package_list_show_member_link_newtarget BOOLEAN DEFAULT '1', + package_list_show_member_address BOOLEAN DEFAULT '1', + package_list_show_member_second_address BOOLEAN DEFAULT '1', + package_list_show_member_street BOOLEAN DEFAULT '1', + package_list_show_member_citystatezip BOOLEAN DEFAULT '1', + package_list_show_member_country BOOLEAN DEFAULT '1', + package_list_show_member_region BOOLEAN DEFAULT '1', + package_list_show_member_phone BOOLEAN DEFAULT '1', + package_list_show_member_tollfree BOOLEAN DEFAULT '1', + package_list_show_member_email BOOLEAN DEFAULT '1', + package_list_show_member_website_url BOOLEAN DEFAULT '1', + package_list_show_member_website_url_newtarget BOOLEAN DEFAULT '1', + package_list_show_package_detail_link BOOLEAN DEFAULT '1', + package_detail_show_image BOOLEAN DEFAULT '1', + package_detail_show_offsite_url BOOLEAN DEFAULT '1', + package_detail_show_offsite_url_newtarget BOOLEAN DEFAULT '1', + package_detail_show_member_link BOOLEAN DEFAULT '1', + package_detail_show_member_link_newtarget BOOLEAN DEFAULT '1', + package_detail_show_member_address BOOLEAN DEFAULT '1', + package_detail_show_member_street BOOLEAN DEFAULT '1', + package_detail_show_member_citystatezip BOOLEAN DEFAULT '1', + package_detail_show_member_country BOOLEAN DEFAULT '1', + package_detail_show_member_region BOOLEAN DEFAULT '1', + package_detail_show_member_phone BOOLEAN DEFAULT '1', + package_detail_show_member_tollfree BOOLEAN DEFAULT '1', + package_detail_show_member_email BOOLEAN DEFAULT '1', + PRIMARY KEY (id) +); + +---- + +-- Set default package management entry +INSERT INTO {prefix}management + ( id, canonical_package_page ) + VALUES + ( 1, 'package-detail' ) +; + diff --git a/setup/databaseScripts/dbVersions.php b/setup/databaseScripts/dbVersions.php index de15c0e..450ace1 100644 --- a/setup/databaseScripts/dbVersions.php +++ b/setup/databaseScripts/dbVersions.php @@ -23,5 +23,6 @@ $glmMembersPackagingDbVersions = array( '1.1.5' => array('version' => '1.1.5', 'tables' => 3), '1.1.6' => array('version' => '1.1.6', 'tables' => 3), '1.1.7' => array('version' => '1.1.7', 'tables' => 3), + '1.1.8' => array('version' => '1.1.8', 'tables' => 3), ); diff --git a/setup/databaseScripts/update_database_V1.1.8.sql b/setup/databaseScripts/update_database_V1.1.8.sql new file mode 100644 index 0000000..658ff52 --- /dev/null +++ b/setup/databaseScripts/update_database_V1.1.8.sql @@ -0,0 +1,12 @@ +-- Gaslight Media Members Database +-- File Created: 3/30/2018 +-- Database Version: 1.1.8 +-- Database Update From Previous Version Script +-- +-- To permit each query below to be executed separately, +-- all queries must be separated by a line with four dashses +ALTER TABLE {prefix}management ADD COLUMN package_list_order SMALLINT NULL; + +---- + +UPDATE {prefix}management SET package_list_order = 10; \ No newline at end of file diff --git a/views/admin/management/packaging.html b/views/admin/management/packaging.html index fda1fb6..16590c7 100644 --- a/views/admin/management/packaging.html +++ b/views/admin/management/packaging.html @@ -101,6 +101,16 @@ + + + +

Package List Display Options

Package List Order + +
Show Package Image:
Show Package Short Description:
Show Package Expire Date: