From 52a5e6056fb9b73c9274857b94fd671aae5ca902 Mon Sep 17 00:00:00 2001 From: Evan Hall Date: Sat, 13 Apr 2019 17:02:28 -0500 Subject: [PATCH] Add 'reading ease' and 'length' sorting methods --- lib/Constants.php | 2 ++ lib/Library.php | 50 ++++++++++++++++++++++++++++++++++++++++++++ www/ebooks/index.php | 8 ++++++- 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/lib/Constants.php b/lib/Constants.php index 2ee2efd3..c94a23fb 100644 --- a/lib/Constants.php +++ b/lib/Constants.php @@ -4,6 +4,8 @@ const EBOOKS_PER_PAGE = 12; const SORT_NEWEST = 'newest'; const SORT_AUTHOR_ALPHA = 'author-alpha'; +const SORT_READING_EASE = 'reading-ease'; +const SORT_LENGTH = 'length'; const GET = 0; const POST = 1; diff --git a/lib/Library.php b/lib/Library.php index c1a5d745..260b1d73 100644 --- a/lib/Library.php +++ b/lib/Library.php @@ -50,6 +50,56 @@ class Library{ } break; + case SORT_READING_EASE: + // Get all ebooks, sorted by easiest first. + try{ + $ebooks = apcu_fetch('ebooks-reading-ease'); + } + catch(Safe\Exceptions\ApcuException $ex){ + $ebooks = Library::GetEbooks(); + + usort($ebooks, function($a, $b){ + if($a->ReadingEase < $b->ReadingEase){ + return -1; + } + elseif($a->ReadingEase == $b->ReadingEase){ + return 0; + } + else{ + return 1; + } + }); + + $ebooks = array_reverse($ebooks); + + apcu_store('ebooks-reading-ease', $ebooks); + } + break; + + case SORT_LENGTH: + // Get all ebooks, sorted by fewest words first. + try{ + $ebooks = apcu_fetch('ebooks-length'); + } + catch(Safe\Exceptions\ApcuException $ex){ + $ebooks = Library::GetEbooks(); + + usort($ebooks, function($a, $b){ + if($a->WordCount < $b->WordCount){ + return -1; + } + elseif($a->WordCount == $b->WordCount){ + return 0; + } + else{ + return 1; + } + }); + + apcu_store('ebooks-length', $ebooks); + } + break; + default: // Get all ebooks, unsorted. try{ diff --git a/www/ebooks/index.php b/www/ebooks/index.php index 5becc96d..09ec134c 100644 --- a/www/ebooks/index.php +++ b/www/ebooks/index.php @@ -16,7 +16,7 @@ try{ $page = 1; } - if($sort != SORT_AUTHOR_ALPHA && $sort != SORT_NEWEST){ + if($sort != SORT_AUTHOR_ALPHA && $sort != SORT_NEWEST && $sort != SORT_READING_EASE && $sort != SORT_LENGTH){ $sort = SORT_NEWEST; } @@ -72,6 +72,12 @@ try{ case SORT_AUTHOR_ALPHA: $pageDescription .= 'alphabetically by author name.'; break; + case SORT_READING_EASE: + $pageDescription .= 'by easiest ebooks first.'; + break; + case SORT_LENGTH: + $pageDescription .= 'by shortest ebooks first.'; + break; } } }