Backend for songs.zachdecook.com
* Allow sorting by bible book and by key
Zach DeCook 2018-03-20
parent f3c77ea · commit b01ad1d
-rwxr-xr-xindex.php4
-rw-r--r--page.php11
-rw-r--r--sort.php66
3 files changed, 79 insertions, 2 deletions
diff --git a/index.php b/index.php
index bc25f51..9520ed3 100755
--- a/index.php
+++ b/index.php
@@ -85,7 +85,9 @@ include 'page.php';
$song_number = isset( $_GET['song'] ) ? $_GET['song'] : '';
if( ! $song_number )
{
- echo toc();
+ $sort = '';
+ if ( isset( $_GET['sort'] ) ) $sort = $_GET['sort'];
+ echo toc($sort);
}
else
{
diff --git a/page.php b/page.php
index d710b28..94d0317 100644
--- a/page.php
+++ b/page.php
@@ -8,7 +8,7 @@
/**
* @brief Go through the file inputfile.txt and return each song with a link to it.
*/
-function toc(){
+function toc( $sort ){
$handle = fopen("inputfile.txt", "r");
$entries = array();
$number = 0;
@@ -42,6 +42,15 @@ function toc(){
}
$toc = '<form><input type="text" id="toc-filter" placeholder="Filter by song title"/></form>';
$toc .= '<ul id="toc">';
+ if ( $sort ){
+ include 'sort.php';
+ if ( $sort == 'key' ){
+ usort( $entries, 'tocKeysort' );
+ }
+ else if ( $sort == 'verse' ){
+ usort( $entries, 'tocBooksort' );
+ }
+ }
foreach( $entries as $item ){
$toc .= tocentry($item);
}
diff --git a/sort.php b/sort.php
new file mode 100644
index 0000000..887178d
--- /dev/null
+++ b/sort.php
@@ -0,0 +1,66 @@
+<?php
+
+function tocKeysort( $a, $b ){
+ $aKey = $a['key'] ?: 'H';
+ $bKey = $b['key'] ?: 'H';
+ return ord($aKey[0]) - ord($bKey[0]);
+}
+
+
+function tocBooksort( $a, $b ){
+$bookOrder = array(
+'Genesis',
+'Exodus',
+'Numbers',
+'Deuteronomy',
+'Joshua',
+'I Samuel',
+'I Chronicles',
+'II Chronicles',
+'Psalm',
+'Proverbs',
+'Isaiah',
+'Jeremiah',
+'Lamentations',
+'Micah',
+'Habakkuk',
+'Zephaniah',
+'Zepheniah',
+'Matthew',
+'Matt.',
+'John',
+'Romans',
+'I Cor.',
+'II Corinthians',
+'Galatians',
+'Ephesians',
+'Philippians',
+'Phil.',
+'I Thessalonians',
+'II Timothy',
+'Hebrews',
+'James',
+'Psalm',
+'I Peter',
+'I John',
+'Jude',
+'Revelation',
+'Revelations',
+'Rev.',
+);
+ $aVerse = $a['verse'] ?: '';
+ $bVerse = $b['verse'] ?: '';
+ $matches = array();
+ $aBookKey = 3000;
+ $bBookKey = 3000;
+ if ( preg_match( '/^[0-9i]*\ ?[A-Z.]+/i', $aVerse, $matches ) ){
+ $aBook = $matches[0];
+ $aBookKey = array_search( $aBook, $bookOrder );
+ }
+ if ( preg_match( '/^[0-9i]*\ ?[A-Z.]+/i', $bVerse, $matches ) ){
+ $bBook = $matches[0];
+ $bBookKey = array_search( $bBook, $bookOrder );
+ }
+
+ return $aBookKey - $bBookKey;
+}