From b333b27ec8945a3cbca0c230db573a6fe9d6700c Mon Sep 17 00:00:00 2001 From: Laury GvR Date: Fri, 30 Mar 2018 11:25:40 -0400 Subject: [PATCH] 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. --- classes/data/dataManagement.php | 12 ++ config/plugin.ini | 2 +- index.php | 2 +- models/front/packaging/list.php | 109 +++++++++--------- ..._V1.1.7.sql => create_database_V1.1.8.sql} | 3 +- setup/databaseScripts/dbVersions.php | 1 + .../update_database_V1.1.8.sql | 12 ++ views/admin/management/packaging.html | 10 ++ 8 files changed, 96 insertions(+), 55 deletions(-) rename setup/databaseScripts/{create_database_V1.1.7.sql => create_database_V1.1.8.sql} (98%) create mode 100644 setup/databaseScripts/update_database_V1.1.8.sql 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.8.sql similarity index 98% rename from setup/databaseScripts/create_database_V1.1.7.sql rename to setup/databaseScripts/create_database_V1.1.8.sql index 0ee81ee..61aa1a8 100644 --- a/setup/databaseScripts/create_database_V1.1.7.sql +++ b/setup/databaseScripts/create_database_V1.1.8.sql @@ -1,6 +1,6 @@ -- Gaslight Media Members Database - Packaging -- File Created: 12/02/15 15:27:15 --- Database Version: 1.1.6 +-- Database Version: 1.1.8 -- Database Creation Script -- -- To permit each query below to be executed separately, @@ -66,6 +66,7 @@ CREATE TABLE {prefix}management ( 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', 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 @@ + + + + -- 2.17.1

Package List Display Options

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