WordPress.org

Plugin Directory


Ignore:
Timestamp:
04/07/09 23:39:05 (5 years ago)
Author:
mark8barnes
Message:
 
Location:
sermon-browser/trunk
Files:
4 added
6 edited

Legend:

Unmodified
Added
Removed
  • sermon-browser/trunk/sb-includes/dictionary.php

    r76786 r108590  
    33function sb_search_results_dictionary() { 
    44    return array( 
    5         '[filters_form]' => '<?php sb_print_filters() ?>', 
     5        '[filters_form]' => '<?php sb_print_filters($atts) ?>', 
    66        '[tag_cloud]' => '<?php sb_print_tag_clouds() ?>', 
    77        '[sermons_count]' => '<?php echo $record_count ?>', 
     
    6161        '[kjvtext]' => '<?php for ($i = 0; $i < count($sermon["Sermon"]->start); $i++): echo sb_add_bible_text ($sermon["Sermon"]->start[$i], $sermon["Sermon"]->end[$i], "kjv"); endfor ?>', 
    6262        '[asvtext]' => '<?php for ($i = 0; $i < count($sermon["Sermon"]->start); $i++): echo sb_add_bible_text ($sermon["Sermon"]->start[$i], $sermon["Sermon"]->end[$i], "asv"); endfor ?>', 
     63        '[nettext]' => '<?php for ($i = 0; $i < count($sermon["Sermon"]->start); $i++): echo sb_add_bible_text ($sermon["Sermon"]->start[$i], $sermon["Sermon"]->end[$i], "net"); endfor ?>', 
    6364        '[ylttext]' => '<?php for ($i = 0; $i < count($sermon["Sermon"]->start); $i++): echo sb_add_bible_text ($sermon["Sermon"]->start[$i], $sermon["Sermon"]->end[$i], "ylt"); endfor ?>', 
    6465        '[webtext]' => '<?php for ($i = 0; $i < count($sermon["Sermon"]->start); $i++): echo sb_add_bible_text ($sermon["Sermon"]->start[$i], $sermon["Sermon"]->end[$i], "web"); endfor ?>', 
  • sermon-browser/trunk/sb-includes/frontend.php

    r79270 r108590  
    11<?php  
     2// Create the shortcode handler 
     3function sb_shortcode($atts, $content=null) { 
     4    global $wpdb, $clr, $record_count; 
     5    ob_start(); 
     6    $atts = shortcode_atts(array( 
     7        'filter' => 'one-click', 
     8        'id' => $_REQUEST['sermon_id'], 
     9        'preacher' => $_REQUEST['preacher'], 
     10        'series' => $_REQUEST['series'], 
     11        'book' => $_REQUEST['book'], 
     12        'service' => $_REQUEST['service'], 
     13        'date' => $_REQUEST['date'], 
     14        'enddate' => $_REQUEST['enddate'], 
     15        'tag' => $_REQUEST['stag'], 
     16        'title' => $_REQUEST['title'], 
     17    ), $atts); 
     18    if ($atts['id'] != 0) { 
     19        $clr = true; 
     20        $sermon = sb_get_single_sermon((int) $atts['id']); 
     21        eval('?>'.base64_decode(get_option('sb_sermon_single_output'))); 
     22    } else { 
     23        $clr = false; 
     24        $sermons = sb_get_sermons($atts, 
     25        array( 
     26            'by' => $_REQUEST['sortby'] ? $_REQUEST['sortby'] : 'm.date', 
     27            'dir' => $_REQUEST['dir'], 
     28        ), 
     29        $_REQUEST['page'] ? $_REQUEST['page'] : 1            
     30        ); 
     31        $output = '?>'.base64_decode(get_option('sb_sermon_multi_output')); 
     32        eval($output); 
     33    }            
     34    $content = ob_get_contents(); 
     35    ob_end_clean();      
     36    return $content; 
     37} 
     38 
    239// Get the URL of the sermons page 
    3 function sb_display_url($recalc=FALSE) { 
    4     global $display_url, $wpdb; 
    5     if (!$display_url | $recalc) { 
    6         $pageid = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE '%[sermons]%' AND (post_status = 'publish' OR post_status = 'private') AND post_date < NOW();"); 
    7         $display_url = get_permalink($pageid); 
    8         if ($display_url == sb_get_value('wordpress_url')|$display_url =="") { // Hack to force true permalink even if page used for front page. 
    9             $display_url = sb_get_value('wordpress_url')."/?page_id=".$pageid; 
    10         } 
    11     } 
    12     return $display_url; 
     40function sb_display_url() { 
     41    global $wpdb, $post, $sb_display_url; 
     42    if ($sb_display_url == '') { 
     43        $pageid = null; 
     44        if ($post->ID != '') 
     45            $pageid = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE '%[sermons%' AND (post_status = 'publish' OR post_status = 'private') AND ID={$post->ID} AND post_date < NOW();"); 
     46        if ($pageid === null) 
     47            $pageid = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE '%[sermons]%' AND (post_status = 'publish' OR post_status = 'private') AND post_date < NOW();"); 
     48        $sb_display_url = get_permalink($pageid); 
     49        if ($sb_display_url == sb_get_value('wordpress_url')|$sb_display_url =="") // Hack to force true permalink even if page used for front page. 
     50            $sb_display_url = sb_get_value('wordpress_url')."/?page_id=".$pageid; 
     51    } 
     52    return $sb_display_url; 
    1353} 
    1454 
     
    68108        $content_type = curl_getinfo( $curl, CURLINFO_CONTENT_TYPE ); 
    69109        curl_close ($curl); 
    70         preg_match( '@([\w/+]+)(;\s+charset=(\S+))?@i', $content_type, $matches ); 
    71         if (isset($matches[3])) {$charset = $matches[3];} 
    72             else {$charset = 'ISO-8859-1';} //Assume this charset for non-esv texts 
    73         $blog_charset = get_option('blog_charset'); 
    74         if (strcasecmp($blog_charset, $charset)<>0) $contents = iconv ($charset, $blog_charset, $contents); 
    75110    } 
    76111    else 
     
    85120                $info = socket_get_status($handle); 
    86121            } 
    87         fclose($handle); 
     122        @fclose($handle); 
    88123        } 
    89124    } 
     
    93128// Returns human friendly Bible reference (e.g. John 3:1-16, not John 3:1-John 3:16) 
    94129function sb_tidy_reference ($start, $end, $add_link = FALSE) { 
     130    if (!trim($start['book'])) { 
     131        return ""; 
     132    } 
     133    $start_book = trim($start['book']); 
     134    $end_book = trim($end['book']); 
     135    $start_chapter = trim($start['chapter']); 
     136    $end_chapter = trim($end['chapter']); 
     137    $start_verse = trim($start['verse']); 
     138    $end_verse = trim($end['verse']); 
    95139    if ($add_link) { 
    96         $r1 = '<a href="'.sb_get_book_link($start['book']).'">'.$start['book'].'</a>'; 
     140        $start_book = "<a href=\"".sb_get_book_link($start_book)."\">{$start_book}</a>"; 
     141        $end_book = "<a href=\"".sb_get_book_link($end_book)."\">{$end_book}</a>"; 
     142    } 
     143    if ($start_book == $end_book) { 
     144        if ($start_chapter == $end_chapter) { 
     145            if ($start_verse == $end_verse) { 
     146                $reference = "$start_book $start_chapter:$start_verse"; 
     147            } else { 
     148                $reference = "$start_book $start_chapter:$start_verse-$end_verse"; 
     149            } 
     150        } else { 
     151             $reference = "$start_book $start_chapter:$start_verse-$end_chapter:$end_verse"; 
     152        } 
    97153    } else { 
    98         $r1 = $start['book']; 
    99     } 
    100     $r2 = $start['chapter']; 
    101     $r3 = $start['verse']; 
    102     if ($add_link) { 
    103         $r4 = '<a href="'.sb_get_book_link($end['book']).'">'.$end['book'].'</a>'; 
    104     } else { 
    105         $r4 = $end['book']; 
    106     } 
    107     $r5 = $end['chapter']; 
    108     $r6 = $end['verse']; 
    109     if (empty($start['book'])) { 
    110         return ''; 
    111     } 
    112     if ($start['book'] == $end['book']) { 
    113         if ($start['chapter'] == $end['chapter']) { 
    114             $reference = "$r1 $r2:$r3-$r6"; 
    115         } 
    116         else $reference = "$r1 $r2:$r3-$r5:$r6"; 
    117     }    
    118     else $reference =  "$r1 $r2:$r3 - $r4 $r5:$r6"; 
     154        $reference =  "$start_book $start_chapter:$start_verse - $end_book $end_chapter:$end_verse"; 
     155    } 
    119156    return $reference; 
    120157} 
     
    132169//Add Bible text to single sermon page 
    133170function sb_add_bible_text ($start, $end, $version) { 
    134     if ($version == "esv") { 
     171    if ($version == 'esv') 
    135172        return sb_add_esv_text ($start, $end); 
    136     } 
    137     else { 
    138         $books = sb_get_value('bible_books'); 
    139         $r1 = array_search($start['book'], $books)+1; 
    140         $r2 = $start['chapter']; 
    141         $r3 = $start['verse']; 
    142         $r4 = array_search($end['book'], $books)+1; 
    143         $r5 = $end['chapter']; 
    144         $r6 = $end['verse']; 
    145         if (empty($start['book'])) { 
    146             return ''; 
    147         } 
    148         $ls_url = 'http://api.seek-first.com/v1/BibleSearch.php?type=lookup&appid=seekfirst&startbooknum='.$r1.'&startchapter='.$r2.'&startverse='.$r3.'&endbooknum='.$r4.'&endchapter='.$r5.'&endverse='.$r6.'&version='.$version; 
    149         $content = sb_download_page ($ls_url); 
    150         //Clean up and re-format data 
    151         if ($content != '') { 
    152             $r1++; 
    153             for (; $r4>=$r1; $r1++) { 
    154                 $searchstring = '<BookNum>'.$r1.'</BookNum>'; 
    155                 $findpos = strpos($content, $searchstring); 
    156                 $content=substr_replace($content, '</p><p><span class="chapter-num">'.$books[$r1-1].' 1:1</span>', $findpos, strlen($searchstring)); 
    157                 $searchstring = '<Verse>1</Verse>'; 
    158                 $findpos = strpos($content, $searchstring); 
    159                 $content=substr_replace($content, '', $findpos, strlen($searchstring)); 
    160             } 
    161             if ($r2 > 1) {$r2++;} else {$closepara = '</p><p>';} 
    162             for (; $r5>=$r2; $r2++) { 
    163                 $searchstring = '<Chapter>'.$r2.'</Chapter>'; 
    164                 $findpos = strpos($content, $searchstring); 
    165                 $content=substr_replace($content, $closepara.'<span class="chapter-num">'.$r2.':1</span>', $findpos, strlen($searchstring)); 
    166                 $searchstring = '<Verse>1</Verse>'; 
    167                 $findpos = strpos($content, $searchstring); 
    168                 $content=substr_replace($content, '', $findpos, strlen($searchstring)); 
    169             } 
    170             $patterns = array ( 
    171                 '/<!--(.)*?-->/', 
    172                 '/<.?(Result|Results)>/', 
    173                 '/<ShortBook>(.*)<\/ShortBook>/', 
    174                 '/<Book>(.*)<\/Book>/', 
    175                 '/<Copyright>(.*)<\/Copyright>/', 
    176                 '/<VersionName>(.*)<\/VersionName>/', 
    177                 '/<Title>(.*)<\/Title>/', 
    178                 '/<TotalResults>(.*)<\/TotalResults>/', 
    179                 '/<BookNum>(.*)<\/BookNum>/', 
    180                 '/<Chapter>(.*)<\/Chapter>/', 
    181                 '/<Verse>/', 
    182                 '/<\/Verse>\n/', 
    183                 '/<Text>/', 
    184                 '/<\/Text>\n/', 
    185                 '/\n/', 
    186             ); 
    187             $replace = array ( 
    188                 '', '', '', '', '', '', '', '', '', '', '<span class="verse-num">', ' </span>', '', '', ' ' 
    189             ); 
    190             $content = preg_replace ($patterns, $replace, $content); 
    191             while (strpos($content, '  ')!==FALSE) { 
    192                 $content = str_replace('  ', ' ', $content); 
    193             } 
    194             return '<div class="'.$version.'"><h2>'.sb_tidy_reference ($start, $end). '</h2><p>'.$content.' (<a href="http://biblepro.bibleocean.com/dox/default.aspx">'. strtoupper($version). '</a>)</p></div>'; 
    195         } 
    196     } 
    197 } 
    198  
     173    elseif ($version == 'net') 
     174        return sb_add_net_text ($start, $end); 
     175    else 
     176        return sb_add_seek_first_text ($start, $end, $version); 
     177} 
     178     
    199179//Returns ESV text 
    200180function sb_add_esv_text ($start, $end) { 
     
    204184    $esv_url = 'http://www.esvapi.org/v2/rest/passageQuery?key=IP&passage='.urlencode(sb_tidy_reference ($start, $end)).'&include-headings=false&include-footnotes=false'; 
    205185    return sb_download_page ($esv_url); 
     186} 
     187 
     188// Converts XML string to object 
     189function sb_get_xml ($content) { 
     190    if (class_exists('SimpleXMLElement')) { 
     191        $xml = new SimpleXMLElement($content); 
     192    } else { 
     193        $xml = new SimpleXMLElement4(); 
     194        $xml = $xml->xml_load_file($content, 'object', 'utf-8'); 
     195    } 
     196    return $xml; 
     197} 
     198 
     199//Returns NET Bible text 
     200function sb_add_net_text ($start, $end) { 
     201    $reference = str_replace(' ', '+', sb_tidy_reference ($start, $end)); 
     202    $old_chapter = $start['chapter']; 
     203    $net_url = "http://labs.bible.org/api/xml/verse.php?passage={$reference}"; 
     204    if (class_exists('SimpleXMLElement')) // Ignore paragraph formatting on PHP4 because xml_parse_into_struct doesn't like HTML tags 
     205        $xml = sb_get_xml(sb_download_page($net_url.'&formatting=para')); 
     206    else 
     207        $xml = sb_get_xml(sb_download_page($net_url)); 
     208    $output=''; 
     209    $items = array(); 
     210    $items = $xml->item; 
     211    foreach ($items as $item) { 
     212        if ($item->text != '[[EMPTY]]') { 
     213            if (substr($item->text, 0, 8) == '<p class') { 
     214                $paraend = stripos($item->text, '>', 8)+1; 
     215                $output .= "\n".substr($item->text, 0, $paraend); 
     216                $item->text = substr ($item->text, $paraend); 
     217            } 
     218            if ($old_chapter == $item->chapter) { 
     219                $output .= " <span class=\"verse-num\">{$item->verse}</span>"; 
     220            } else { 
     221                $output .= " <span class=\"chapter-num\">{$item->chapter}:{$item->verse}</span> "; 
     222                $old_chapter = strval($item->chapter); 
     223            } 
     224            $output .=  $item->text; 
     225        } 
     226    } 
     227    return "<div class=\"net\">\r<h2>".sb_tidy_reference ($start, $end)."</h2><p>{$output} (<a href=\"http://net.bible.org/?{$reference}\">NET Bible</a>)</p></div>"; 
     228} 
     229 
     230//Returns Bible text using the Living Stones API 
     231function sb_add_seek_first_text ($start, $end, $version) { 
     232    $books = sb_get_value('bible_books'); 
     233    $r1 = array_search($start['book'], $books)+1; 
     234    $r2 = $start['chapter']; 
     235    $r3 = $start['verse']; 
     236    $r4 = array_search($end['book'], $books)+1; 
     237    $r5 = $end['chapter']; 
     238    $r6 = $end['verse']; 
     239    if (empty($start['book'])) 
     240        return; 
     241    else { 
     242        $content = sb_download_page ('http://api.seek-first.com/v1/BibleSearch.php?type=lookup&appid=seekfirst&startbooknum='.$r1.'&startchapter='.$r2.'&startverse='.$r3.'&endbooknum='.$r4.'&endchapter='.$r5.'&endverse='.$r6.'&version='.$version); 
     243        if ($content != '') { 
     244            $patterns = array ( 
     245                '/<!--(.)*?-->/', 
     246                '/<Copyright>(.*)<\/Copyright>/', 
     247                '/<VersionName>(.*)<\/VersionName>/', 
     248                '/<TotalResults>(.*)<\/TotalResults>/', 
     249            ); 
     250            $replace = array ('', '', '', ''); 
     251            $content = trim(preg_replace ($patterns, $replace, $content)); 
     252            $old_chapter = $start['chapter']; 
     253            $content = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n".$content; 
     254            $xml = sb_get_xml($content); 
     255            $output=''; 
     256            $items = array(); 
     257            $items = $xml->Result; 
     258            foreach ($items as $item) { 
     259                if ($old_chapter == $item->Chapter) { 
     260                    $output .= " <span class=\"verse-num\">{$item->Verse}</span>"; 
     261                } else { 
     262                    $output .= " <span class=\"chapter-num\">{$item->Chapter}:{$item->Verse}</span> "; 
     263                    $old_chapter = strval($item->Chapter); 
     264                } 
     265                $output .=  $item->Text; 
     266            } 
     267        } 
     268        return '<div class="'.$version.'"><h2>'.sb_tidy_reference ($start, $end). '</h2><p>'.$output.' (<a href="http://biblepro.bibleocean.com/dox/default.aspx">'. strtoupper($version). '</a>)</p></div>'; 
     269    } 
    206270} 
    207271 
     
    355419} 
    356420 
    357 //Emulates get_headers on PHP 4 
    358 if (!function_exists('get_headers')) { 
    359 function get_headers($Url, $Format= 0, $Depth= 0) { 
    360     if ($Depth > 5) return; 
    361     $Parts = parse_url($Url); 
    362     if (!array_key_exists('path', $Parts))   $Parts['path'] = '/'; 
    363     if (!array_key_exists('port', $Parts))   $Parts['port'] = 80; 
    364     if (!array_key_exists('scheme', $Parts)) $Parts['scheme'] = 'http'; 
    365  
    366     $Return = array(); 
    367     $fp = fsockopen($Parts['host'], $Parts['port'], $errno, $errstr, 30); 
    368     if ($fp) { 
    369         $Out = 'GET '.$Parts['path'].(isset($Parts['query']) ? '?'.@$Parts['query'] : '')." HTTP/1.1\r\n". 
    370                'Host: '.$Parts['host'].($Parts['port'] != 80 ? ':'.$Parts['port'] : '')."\r\n". 
    371                'Connection: Close'."\r\n"; 
    372         fwrite($fp, $Out."\r\n"); 
    373         $Redirect = false; $RedirectUrl = ''; 
    374         while (!feof($fp) && $InLine = fgets($fp, 1280)) { 
    375             if ($InLine == "\r\n") break; 
    376             $InLine = rtrim($InLine); 
    377  
    378             list($Key, $Value) = explode(': ', $InLine, 2); 
    379             if ($Key == $InLine) { 
    380                 if ($Format == 1) 
    381                         $Return[$Depth] = $InLine; 
    382                 else    $Return[] = $InLine; 
    383  
    384                 if (strpos($InLine, 'Moved') > 0) $Redirect = true; 
    385             } else { 
    386                 if ($Key == 'Location') $RedirectUrl = $Value; 
    387                 if ($Format == 1) 
    388                         $Return[$Key] = $Value; 
    389                 else    $Return[] = $Key.': '.$Value; 
    390             } 
    391         } 
    392         fclose($fp); 
    393         if ($Redirect && !empty($RedirectUrl)) { 
    394             $NewParts = parse_url($RedirectUrl); 
    395             if (!array_key_exists('host', $NewParts))   $RedirectUrl = $Parts['host'].$RedirectUrl; 
    396             if (!array_key_exists('scheme', $NewParts)) $RedirectUrl = $Parts['scheme'].'://'.$RedirectUrl; 
    397             $RedirectHeaders = get_headers($RedirectUrl, $Format, $Depth+1); 
    398             if ($RedirectHeaders) $Return = array_merge_recursive($Return, $RedirectHeaders); 
    399         } 
    400         return $Return; 
    401     } 
    402     return false; 
    403 }} 
    404  
    405 // Display single sermon or multi-sermons page 
    406 function sb_sermons_filter($content) { 
    407     global $wpdb, $clr, $record_count; 
    408     ob_start(); 
    409      
    410     if ($_GET['sermon_id']) { 
    411         $clr = true; 
    412         $sermon = sb_get_single_sermon((int) $_GET['sermon_id']); 
    413         eval('?>'.base64_decode(get_option('sb_sermon_single_output'))); 
    414     } else { 
    415         $clr = false; 
    416         $sermons = sb_get_sermons(array( 
    417             'title' => $_REQUEST['title'], 
    418             'preacher' => $_REQUEST['preacher'], 
    419             'date' => $_REQUEST['date'], 
    420             'enddate' => $_REQUEST['enddate'], 
    421             'series' => $_REQUEST['series'], 
    422             'service' => $_REQUEST['service'], 
    423             'book' => $_REQUEST['book'], 
    424             'tag' => $_REQUEST['stag'], 
    425         ), 
    426         array( 
    427             'by' => $_REQUEST['sortby'] ? $_REQUEST['sortby'] : 'm.date', 
    428             'dir' => $_REQUEST['dir'], 
    429         ), 
    430         $_REQUEST['page'] ? $_REQUEST['page'] : 1            
    431         ); 
    432         eval('?>'.base64_decode(get_option('sb_sermon_multi_output'))); 
    433     }            
    434     $content = str_replace('[sermons]', ob_get_contents(), $content); 
    435     ob_end_clean();      
    436     return $content; 
    437 } 
    438  
    439421// Returns URL for search links 
    440422function sb_build_url($arr, $clear = false) { 
    441423    global $post, $wpdb; 
    442424    // Word list for URL building purpose 
    443     $wl = array('preacher', 'title', 'date', 'enddate', 'series', 'service', 'sortby', 'dir', 'page', 'sermon_id', 'book', 'stag', 'podcast'); 
     425    $wl = array('preacher', 'title', 'date', 'enddate', 'series', 'service', 'sortby', 'dir', 'sermon_id', 'book', 'stag', 'podcast'); 
    444426    $foo = array_merge((array) $_GET, (array) $_POST, $arr); 
    445     if ($foo['page'] && (strpos ($foo['page'], 'sermon-browser/options.php') != FALSE)) { //Remove unwanted parameters passed by the admin page when re-generating pages/posts 
    446         unset($foo['page']); 
    447         if ($foo['rewrite']) unset($foo['rewrite']); 
    448         if ($foo['start']) unset($foo['start']); 
    449         if ($foo['start']) unset($foo['method']); 
    450         if ($foo['start']) unset($foo['mode']); 
    451     } 
    452427    foreach ($foo as $k => $v) { 
    453         if ((!$clear || in_array($k, array_keys($arr)) || !in_array($k, $wl)) && $k != 'page_id' && $k != 'p') { 
     428        if (in_array($k, array_keys($arr)) | (in_array($k, $wl) && !$clear)) { 
    454429            $bar[] = "$k=$v"; 
    455430        } 
    456431    } 
    457     return sb_display_url().sb_query_char().implode('&amp;', $bar); 
     432    if (isset($bar)) 
     433        return sb_display_url().sb_query_char().implode('&amp;', $bar); 
     434    else 
     435        return sb_display_url(); 
    458436} 
    459437 
    460438// Adds javascript and CSS where required 
    461439function sb_add_headers() { 
    462     global $post, $wpdb; 
    463     $current_page = $post->ID; 
    464     $pageid = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE '%[sermons]%' AND (post_status = 'publish' OR post_status = 'private') AND post_date < NOW();"); 
    465     if ($current_page == $pageid) { 
    466         wp_enqueue_script('sb_datepicker'); 
    467         wp_enqueue_script('sb_64'); 
    468         wp_enqueue_style ('sb_datepicker'); 
    469         wp_enqueue_style ('sb_style'); 
    470     } 
    471 } 
    472  
    473 // Adds podcast feeds to header 
    474 function sb_add_feed_links() { 
    475440    global $sermon_domain, $post, $wpdb; 
    476441    echo "<!-- Added by SermonBrowser (version ".SB_CURRENT_VERSION.") - http://www.4-14.org.uk/sermon-browser -->\r"; 
    477442    echo "<link rel=\"alternate\" type=\"application/rss+xml\" title=\"".__('Sermon podcast', $sermon_domain)."\" href=\"".get_option('sb_podcast')."\" />\r"; 
    478     $current_page = $post->ID; 
    479     $pageid = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE '%[sermons]%' AND (post_status = 'publish' OR post_status = 'private') AND post_date < NOW();"); 
    480     if ($current_page == $pageid) { 
    481         if ($_REQUEST['title'] OR $_REQUEST['preacher'] OR $_REQUEST['date'] OR $_REQUEST['enddate'] OR $_REQUEST['series'] OR $_REQUEST['service'] OR $_REQUEST['book'] OR $_REQUEST['stag']) { 
     443    $pageid = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE '%[sermons%' AND (post_status = 'publish' OR post_status = 'private') AND ID={$post->ID} AND post_date < NOW();"); 
     444    if ($pageid !== NULL) { 
     445        wp_enqueue_script('sb_datepicker'); 
     446        wp_enqueue_style ('sb_datepicker'); 
     447        wp_enqueue_style ('sb_style'); 
     448        if ($_REQUEST['title'] OR $_REQUEST['preacher'] OR $_REQUEST['date'] OR $_REQUEST['enddate'] OR $_REQUEST['series'] OR $_REQUEST['service'] OR $_REQUEST['book'] OR $_REQUEST['stag']) 
    482449            echo "<link rel=\"alternate\" type=\"application/rss+xml\" title=\"".__('Custom sermon podcast', $sermon_domain)."\" href=\"".sb_podcast_url()."\" />\r"; 
    483         } 
    484450    } 
    485451} 
     
    496462} 
    497463 
     464// Formats date into words 
    498465function sb_format_date ($the_date) { 
    499466    if (WPLANG == '' | WPLANG == "en_EN" | WPLANG == "en") { 
     
    761728    $filter = array_merge($default_filter, $filter); 
    762729    $order = array_merge($default_order, $order); 
    763      
    764730    $page = (int) $page; 
    765731    if ($filter['title'] != '') { 
     
    833799} 
    834800 
     801//Prints the filter line for a given parameter 
     802function sb_print_filter_line ($id, $results, $filter, $display, $max_num = 7) { 
     803    global $more_applied; 
     804    echo "<div id = \"{$id}\" class=\"filter\" style=\"margin-bottom: 1em\">\r<span style=\"font-weight:bold\">".ucwords($id).":</span> \r"; 
     805    $i = 1; 
     806    $more = FALSE; 
     807    foreach ($results as $result) { 
     808        if ($i == $max_num) { 
     809            echo "<span id=\"{$id}-more\">"; 
     810            $more = TRUE; 
     811            $more_applied[] = $id; 
     812        } 
     813        if ($i != 1) 
     814            echo ", \r"; 
     815        echo '<a href="'.sb_build_url(array($id => $result->$filter)).'">'.stripslashes($result->$display).'</a>&nbsp;('.$result->count.')'; 
     816        $i++; 
     817    } 
     818    echo "."; 
     819    if ($more) 
     820        echo "</span>\r<span id=\"{$id}-more-link\" style=\"display:none\">&hellip; (<a  id=\"{$id}-toggle\" href=\"#\"><strong>".($i-$max_num).' '.__('more', $sermon_domain).'</strong></a>)</span>'; 
     821    echo '</div>'; 
     822} 
     823 
     824//Prints the filter line for the date parameter 
     825function sb_print_date_filter_line ($dates) { 
     826    global $more_applied; 
     827    $date_output = "<div id = \"dates\" class=\"filter\" style=\"margin-bottom: 1em\">\r<span style=\"font-weight:bold\">Date:</span> \r"; 
     828    $first = $dates[0]; 
     829    $last = end($dates); 
     830    $count = 0; 
     831    if ($first->year == $last->year) { 
     832        if ($first->month == $last->month) { 
     833            $date_output = ''; 
     834        } else { 
     835            foreach ($dates as $date) { 
     836                if ($date->month != $previous_month) { 
     837                    if ($count != 0) 
     838                        $date_output .= '('.$count.'), '; 
     839                    $date_output .= '<a href="'.sb_build_url(Array ('date' => $date->year.'-'.$date->month.'-01', 'enddate' => $date->year.'-'.$date->month.'-31')).'">'.strftime('%B', strtotime("{$date->year}-{$date->month}-{$date->day}")).'</a> '; 
     840                    $previous_month = $date->month; 
     841                    $count = 1; 
     842                } else 
     843                    $count++; 
     844            } 
     845            $date_output .= '('.$count.'), ';        
     846        } 
     847    } else { 
     848        foreach ($dates as $date) { 
     849            if ($date->year !== $previous_year) { 
     850                if ($count !== 0) 
     851                    $date_output .= '('.$count.'), '; 
     852                $date_output .= '<a href="'.sb_build_url(Array ('date' => $date->year.'-01-01', 'enddate' => $date->year.'-12-31')).'">'.$date->year.'</a> '; 
     853                $previous_year = $date->year; 
     854                $count = 1; 
     855            } else 
     856                $count++; 
     857        } 
     858        $date_output .= '('.$count.'), ';        
     859    } 
     860    if ($date_output != '') 
     861        echo rtrim($date_output, ', ')."</div>\r"; 
     862} 
     863 
     864//Returns the filter URL minus a given parameter 
     865function sb_url_minus_parameter ($param1, $param2='') { 
     866    global $filter_options; 
     867    $existing_params = array_merge((array) $_GET, (array) $_POST); 
     868    foreach (array_keys($existing_params) as $query) { 
     869        if (in_array($query, $filter_options) && $query != $param1 && $query != $param2) { 
     870            $returned_query[] = "{$query}={$existing_params[$query]}"; 
     871        } 
     872    } 
     873    if (count($returned_query) > 0) 
     874        return sb_display_url().sb_query_char().implode('&amp;', $returned_query); 
     875    else 
     876        return sb_display_url(); 
     877} 
     878 
    835879//Displays the filter on sermon search page 
    836 function sb_print_filters() { 
    837     global $wpdb, $sermon_domain; 
    838      
    839     $preachers = $wpdb->get_results("SELECT p.*, count(p.id) AS count FROM {$wpdb->prefix}sb_preachers AS p JOIN {$wpdb->prefix}sb_sermons AS s ON p.id = s.preacher_id GROUP BY p.id ORDER BY count DESC, s.date DESC");    
    840     $series = $wpdb->get_results("SELECT ss.*, count(ss.id) AS count FROM {$wpdb->prefix}sb_series AS ss JOIN {$wpdb->prefix}sb_sermons AS sermons ON ss.id = sermons.series_id GROUP BY ss.id ORDER BY sermons.date DESC"); 
    841     $services = $wpdb->get_results("SELECT s.*, count(s.id) AS count FROM {$wpdb->prefix}sb_services AS s JOIN {$wpdb->prefix}sb_sermons AS sermons ON s.id = sermons.service_id GROUP BY s.id ORDER BY count DESC"); 
    842     $book_count = $wpdb->get_results("SELECT bs.book_name AS name, count( b.id ) AS count FROM {$wpdb->prefix}sb_books_sermons AS bs JOIN {$wpdb->prefix}sb_books AS b ON bs.book_name = b.name WHERE bs.type = 'start' GROUP BY b.id");     
    843     $sb = array(         
    844         'Title' => 'm.title', 
    845         'Preacher' => 'preacher', 
    846         'Date' => 'm.date', 
    847         'Passage' => 'b.id', 
    848     ); 
    849      
    850     $di = array( 
    851         'Ascending' => 'asc', 
    852         'Descending' => 'desc', 
    853     ); 
    854      
    855     $csb = $_REQUEST['sortby'] ? $_REQUEST['sortby'] : 'm.date'; 
    856     $cd = $_REQUEST['dir'] ? $_REQUEST['dir'] : 'desc';  
    857  
    858 ?>   
    859     <form method="post" id="sermon-filter" action="<?php echo sb_display_url(); ?>"> 
    860         <div style="clear:both"> 
    861             <table class="sermonbrowser"> 
    862                 <tr> 
    863                     <td class="fieldname"><?php _e('Preacher', $sermon_domain) ?></td> 
    864                     <td class="field"><select name="preacher" id="preacher"> 
    865                             <option value="0" <?php echo $_REQUEST['preacher'] != 0 ? '' : 'selected="selected"' ?>><?php _e('[All]', $sermon_domain) ?></option> 
    866                             <?php foreach ($preachers as $preacher): ?> 
    867                             <option value="<?php echo $preacher->id ?>" <?php echo $_REQUEST['preacher'] == $preacher->id ? 'selected="selected"' : '' ?>><?php echo stripslashes($preacher->name).' ('.$preacher->count.')' ?></option> 
    868                             <?php endforeach ?> 
    869                         </select> 
    870                     </td> 
    871                     <td class="fieldname rightcolumn"><?php _e('Services', $sermon_domain) ?></td> 
    872                     <td class="field"><select name="service" id="service"> 
    873                             <option value="0" <?php echo $_REQUEST['service'] != 0 ? '' : 'selected="selected"' ?>><?php _e('[All]', $sermon_domain) ?></option> 
    874                             <?php foreach ($services as $service): ?> 
    875                             <option value="<?php echo $service->id ?>" <?php echo $_REQUEST['service'] == $service->id ? 'selected="selected"' : '' ?>><?php echo stripslashes($service->name).' ('.$service->count.')' ?></option> 
    876                             <?php endforeach ?> 
    877                         </select> 
    878                     </td> 
    879                 </tr> 
    880                 <tr> 
    881                     <td class="fieldname"><?php _e('Book', $sermon_domain) ?></td> 
    882                     <td class="field"><select name="book"> 
    883                             <option value=""><?php _e('[All]', $sermon_domain) ?></option> 
    884                             <?php foreach ($book_count as $book): ?> 
    885                             <option value="<?php echo $book->name ?>" <?php echo $_REQUEST['book'] == $book->name ? 'selected=selected' : '' ?>><?php echo stripslashes($book->name). ' ('.$book->count.')' ?></option> 
    886                             <?php endforeach ?> 
    887                         </select> 
    888                     </td> 
    889                     <td class="fieldname rightcolumn"><?php _e('Series', $sermon_domain) ?></td> 
    890                     <td class="field"><select name="series" id="series"> 
    891                             <option value="0" <?php echo $_REQUEST['series'] != 0 ? '' : 'selected="selected"' ?>><?php _e('[All]', $sermon_domain) ?></option> 
    892                             <?php foreach ($series as $item): ?> 
    893                             <option value="<?php echo $item->id ?>" <?php echo $_REQUEST['series'] == $item->id ? 'selected="selected"' : '' ?>><?php echo stripslashes($item->name).' ('.$item->count.')' ?></option> 
    894                             <?php endforeach ?> 
    895                         </select> 
    896                     </td> 
    897                 </tr> 
    898                 <tr> 
    899                     <td class="fieldname"><?php _e('Start date', $sermon_domain) ?></td> 
    900                     <td class="field"><input type="text" name="date" id="date" value="<?php echo mysql_real_escape_string($_REQUEST['date']) ?>" /></td> 
    901                     <td class="fieldname rightcolumn"><?php _e('End date', $sermon_domain) ?></td> 
    902                     <td class="field"><input type="text" name="enddate" id="enddate" value="<?php echo mysql_real_escape_string($_REQUEST['enddate']) ?>" /></td> 
    903                 </tr> 
    904                 <tr> 
    905                     <td class="fieldname"><?php _e('Keywords', $sermon_domain) ?></td> 
    906                     <td class="field" colspan="3"><input style="width: 98.5%" type="text" id="title" name="title" value="<?php echo mysql_real_escape_string($_REQUEST['title']) ?>" /></td> 
    907                 </tr> 
    908                 <tr> 
    909                     <td class="fieldname"><?php _e('Sort by', $sermon_domain) ?></td> 
    910                     <td class="field"><select name="sortby" id="sortby"> 
    911                             <?php foreach ($sb as $k => $v): ?> 
    912                             <option value="<?php echo $v ?>" <?php echo $csb == $v ? 'selected="selected"' : '' ?>><?php _e($k, $sermon_domain) ?></option> 
    913                             <?php endforeach ?> 
    914                         </select> 
    915                     </td> 
    916                     <td class="fieldname rightcolumn"><?php _e('Direction', $sermon_domain) ?></td> 
    917                     <td class="field"><select name="dir" id="dir"> 
    918                             <?php foreach ($di as $k => $v): ?> 
    919                             <option value="<?php echo $v ?>" <?php echo $cd == $v ? 'selected="selected"' : '' ?>><?php _e($k, $sermon_domain) ?></option> 
    920                             <?php endforeach ?> 
    921                         </select> 
    922                     </td> 
    923                 </tr> 
    924                 <tr> 
    925                     <td colspan="3">&nbsp;</td> 
    926                     <td class="field"><input type="submit" class="filter" value="<?php _e('Filter &raquo;', $sermon_domain) ?>">            </td> 
    927                 </tr> 
    928             </table> 
    929             <input type="hidden" name="page" value="1"> 
     880function sb_print_filters($filter) { 
     881    global $wpdb, $sermon_domain, $more_applied, $filter_options; 
     882    if (get_option('sb_filterhide') == 'hide') { 
     883        $hide_filter = TRUE; 
     884    $js_hide = <<<HERE 
     885        var filter_visible = false; 
     886        jQuery("#mainfilter").hide(); 
     887        jQuery("#show_hide_filter").text("[ SHOW ]"); 
     888        jQuery("#show_hide_filter").click(function() { 
     889            jQuery("#mainfilter:visible").slideUp("slow"); 
     890            jQuery("#mainfilter:hidden").slideDown("slow"); 
     891            if (filter_visible) { 
     892                jQuery("#show_hide_filter").text("[ SHOW ]"); 
     893                filter_visible = false; 
     894            } else { 
     895                jQuery("#show_hide_filter").text("[ HIDE ]"); 
     896                filter_visible = true; 
     897            } 
     898            return false; 
     899        }); 
     900HERE; 
     901    } 
     902    $js_hide = str_replace ('SHOW', __('Show filter', $sermon_domain), $js_hide); 
     903    $js_hide = str_replace ('HIDE', __('Hide filter', $sermon_domain), $js_hide); 
     904    if (get_option('sb_filtertype') == 'oneclick') { 
     905        // One click filter 
     906        $hide_custom_podcast = true; 
     907        if ($filter['filter'] !== 'none') { 
     908            $filter_options = array ('preacher', 'book', 'service', 'series', 'date', 'enddate', 'title'); 
     909            $output = ''; 
     910            foreach ($filter_options AS $filter_option) 
     911                if ($_REQUEST[$filter_option]) { 
     912                    if ($filter_option != 'enddate') { 
     913                        if ($output != '') 
     914                            $output .= "\r, "; 
     915                        if ($filter_option == 'date') { 
     916                            $output .= '<strong>Date</strong>:&nbsp;'; 
     917                            if (substr($_REQUEST['date'],0,4) == substr($_REQUEST['enddate'],0,4)) 
     918                                $output .= substr($_REQUEST['date'],0,4).'&nbsp;(<a href="'.sb_url_minus_parameter('date', 'enddate').'">x</a>)'; 
     919                            if (substr($_REQUEST['date'],5,2) == substr($_REQUEST['enddate'],5,2)) 
     920                                $output .= ', '.strftime('%B', strtotime($_REQUEST['date'])).' (<a href="'.sb_build_url(Array ('date' => substr($_REQUEST['date'],0,4).'-01-01', 'enddate' => substr($_REQUEST['date'],0,4).'-12-31')).'">x</a>)'; 
     921                        } else { 
     922                            $output .= '<strong>'.ucwords($filter_option).'</strong>:&nbsp;*'.$filter_option.'*'; 
     923                            $output .= '&nbsp;(<a href="'.sb_url_minus_parameter($filter_option).'">x</a>)'; 
     924                        } 
     925                    } 
     926                    $hide_custom_podcast = FALSE; 
     927                } 
     928            $sermons=sb_get_sermons($filter, array(), 1, 99999); 
     929            $ids = array(); 
     930            foreach ($sermons as $sermon) 
     931                $ids[] = $sermon->id; 
     932            $ids = "('".implode ("', '", $ids)."')"; 
     933 
     934            $preachers = $wpdb->get_results("SELECT p.*, count(p.id) AS count FROM {$wpdb->prefix}sb_preachers AS p JOIN {$wpdb->prefix}sb_sermons AS sermons ON p.id = sermons.preacher_id WHERE sermons.id IN {$ids} GROUP BY p.id ORDER BY count DESC, sermons.date DESC");   
     935            $series = $wpdb->get_results("SELECT ss.*, count(ss.id) AS count FROM {$wpdb->prefix}sb_series AS ss JOIN {$wpdb->prefix}sb_sermons AS sermons ON ss.id = sermons.series_id  WHERE sermons.id IN {$ids} GROUP BY ss.id ORDER BY sermons.date DESC"); 
     936            $services = $wpdb->get_results("SELECT s.*, count(s.id) AS count FROM {$wpdb->prefix}sb_services AS s JOIN {$wpdb->prefix}sb_sermons AS sermons ON s.id = sermons.service_id  WHERE sermons.id IN {$ids} GROUP BY s.id ORDER BY count DESC"); 
     937            $book_count = $wpdb->get_results("SELECT bs.book_name AS name, count(b.id) AS count FROM {$wpdb->prefix}sb_books_sermons AS bs JOIN {$wpdb->prefix}sb_books as b ON bs.book_name=b.name WHERE bs.type = 'start' AND bs.sermon_id IN {$ids} GROUP BY b.id");  
     938            $dates = $wpdb->get_results("SELECT substr(date,1,4) as year, substr(date,6,2) as month, substr(date,9,2) as day FROM {$wpdb->prefix}sb_sermons WHERE id IN {$ids} ORDER BY date ASC"); 
     939 
     940            $more_applied = array(); 
     941            $output = str_replace ('*preacher*', $preachers[0]->name, $output); 
     942            $output = str_replace ('*book*', $book_count[0]->name, $output); 
     943            $output = str_replace ('*service*', $services[0]->name, $output); 
     944            $output = str_replace ('*series*', $series[0]->name, $output); 
     945         
     946            echo "<span class=\"inline_controls\"><a href=\"#\" id=\"show_hide_filter\"></a></span>"; 
     947            if ($output != '') 
     948                echo '<div class="filtered">'.__('Active filter', $sermon_domain).': '.$output."</div>\r"; 
     949            echo '<div id="mainfilter">'; 
     950            if (count($preachers) > 1) 
     951                sb_print_filter_line ('preacher', $preachers, 'id', 'name', 7); 
     952            if (count($book_count) > 1) 
     953                sb_print_filter_line ('book', $book_count, 'name', 'name', 10); 
     954            if (count($series) > 1) 
     955                sb_print_filter_line ('series', $series, 'id', 'name', 10); 
     956            if (count($services) > 1) 
     957                sb_print_filter_line ('service', $services, 'id', 'name', 10); 
     958            sb_print_date_filter_line ($dates); 
     959            echo "</div>\r"; 
     960        } 
     961        if (count($more_applied) > 0 | $output != '' | $hide_custom_podcast === TRUE | $hide_filter === TRUE) { 
     962            echo "<script type=\"text/javascript\">\r"; 
     963            echo "\tjQuery(document).ready(function() {\r"; 
     964            if ($hide_filter === TRUE) 
     965                echo $js_hide."\r"; 
     966            if ($hide_custom_podcast === TRUE) 
     967                echo "\t\tjQuery('.podcastcustom').hide();\r"; 
     968            if (count($more_applied) > 0) { 
     969                foreach ($more_applied as $element_id) { 
     970                    echo "\t\tjQuery('#{$element_id}-more').hide();\r"; 
     971                    echo "\t\tjQuery('#{$element_id}-more-link').show();\r"; 
     972                    echo "\t\tjQuery('a#{$element_id}-toggle').click(function() {\r"; 
     973                    echo "\t\t\tjQuery('#{$element_id}-more').show();\r"; 
     974                    echo "\t\t\tjQuery('#{$element_id}-more-link').hide();\r"; 
     975                    echo "\t\t\treturn false;\r"; 
     976                    echo "\t\t});\r"; 
     977                } 
     978            } 
     979            echo "\t});\r"; 
     980            echo "</script>\r"; 
     981        } 
     982    } elseif (get_option('sb_filtertype') == 'dropdown') { 
     983        // Drop-down filter 
     984        $preachers = $wpdb->get_results("SELECT p.*, count(p.id) AS count FROM {$wpdb->prefix}sb_preachers AS p JOIN {$wpdb->prefix}sb_sermons AS s ON p.id = s.preacher_id GROUP BY p.id ORDER BY count DESC, s.date DESC");    
     985        $series = $wpdb->get_results("SELECT ss.*, count(ss.id) AS count FROM {$wpdb->prefix}sb_series AS ss JOIN {$wpdb->prefix}sb_sermons AS sermons ON ss.id = sermons.series_id GROUP BY ss.id ORDER BY sermons.date DESC"); 
     986        $services = $wpdb->get_results("SELECT s.*, count(s.id) AS count FROM {$wpdb->prefix}sb_services AS s JOIN {$wpdb->prefix}sb_sermons AS sermons ON s.id = sermons.service_id GROUP BY s.id ORDER BY count DESC"); 
     987        $book_count = $wpdb->get_results("SELECT bs.book_name AS name, count( b.id ) AS count FROM {$wpdb->prefix}sb_books_sermons AS bs JOIN {$wpdb->prefix}sb_books AS b ON bs.book_name = b.name WHERE bs.type = 'start' GROUP BY b.id");     
     988        $sb = array(         
     989            'Title' => 'm.title', 
     990            'Preacher' => 'preacher', 
     991            'Date' => 'm.date', 
     992            'Passage' => 'b.id', 
     993        ); 
     994        $di = array( 
     995            'Ascending' => 'asc', 
     996            'Descending' => 'desc', 
     997        ); 
     998        $csb = $_REQUEST['sortby'] ? $_REQUEST['sortby'] : 'm.date'; 
     999        $cd = $_REQUEST['dir'] ? $_REQUEST['dir'] : 'desc';  
     1000        ?> 
     1001        <span class="inline_controls"><a href="#" id="show_hide_filter"></a></span> 
     1002        <div id="mainfilter"> 
     1003            <form method="post" id="sermon-filter" action="<?php echo sb_display_url(); ?>"> 
     1004                <div style="clear:both"> 
     1005                    <table class="sermonbrowser"> 
     1006                        <tr> 
     1007                            <td class="fieldname"><?php _e('Preacher', $sermon_domain) ?></td> 
     1008                            <td class="field"><select name="preacher" id="preacher"> 
     1009                                    <option value="0" <?php echo $_REQUEST['preacher'] != 0 ? '' : 'selected="selected"' ?>><?php _e('[All]', $sermon_domain) ?></option> 
     1010                                    <?php foreach ($preachers as $preacher): ?> 
     1011                                    <option value="<?php echo $preacher->id ?>" <?php echo $_REQUEST['preacher'] == $preacher->id ? 'selected="selected"' : '' ?>><?php echo stripslashes($preacher->name).' ('.$preacher->count.')' ?></option> 
     1012                                    <?php endforeach ?> 
     1013                                </select> 
     1014                            </td> 
     1015                            <td class="fieldname rightcolumn"><?php _e('Services', $sermon_domain) ?></td> 
     1016                            <td class="field"><select name="service" id="service"> 
     1017                                    <option value="0" <?php echo $_REQUEST['service'] != 0 ? '' : 'selected="selected"' ?>><?php _e('[All]', $sermon_domain) ?></option> 
     1018                                    <?php foreach ($services as $service): ?> 
     1019                                    <option value="<?php echo $service->id ?>" <?php echo $_REQUEST['service'] == $service->id ? 'selected="selected"' : '' ?>><?php echo stripslashes($service->name).' ('.$service->count.')' ?></option> 
     1020                                    <?php endforeach ?> 
     1021                                </select> 
     1022                            </td> 
     1023                        </tr> 
     1024                        <tr> 
     1025                            <td class="fieldname"><?php _e('Book', $sermon_domain) ?></td> 
     1026                            <td class="field"><select name="book"> 
     1027                                    <option value=""><?php _e('[All]', $sermon_domain) ?></option> 
     1028                                    <?php foreach ($book_count as $book): ?> 
     1029                                    <option value="<?php echo $book->name ?>" <?php echo $_REQUEST['book'] == $book->name ? 'selected=selected' : '' ?>><?php echo stripslashes($book->name). ' ('.$book->count.')' ?></option> 
     1030                                    <?php endforeach ?> 
     1031                                </select> 
     1032                            </td> 
     1033                            <td class="fieldname rightcolumn"><?php _e('Series', $sermon_domain) ?></td> 
     1034                            <td class="field"><select name="series" id="series"> 
     1035                                    <option value="0" <?php echo $_REQUEST['series'] != 0 ? '' : 'selected="selected"' ?>><?php _e('[All]', $sermon_domain) ?></option> 
     1036                                    <?php foreach ($series as $item): ?> 
     1037                                    <option value="<?php echo $item->id ?>" <?php echo $_REQUEST['series'] == $item->id ? 'selected="selected"' : '' ?>><?php echo stripslashes($item->name).' ('.$item->count.')' ?></option> 
     1038                                    <?php endforeach ?> 
     1039                                </select> 
     1040                            </td> 
     1041                        </tr> 
     1042                        <tr> 
     1043                            <td class="fieldname"><?php _e('Start date', $sermon_domain) ?></td> 
     1044                            <td class="field"><input type="text" name="date" id="date" value="<?php echo mysql_real_escape_string($_REQUEST['date']) ?>" /></td> 
     1045                            <td class="fieldname rightcolumn"><?php _e('End date', $sermon_domain) ?></td> 
     1046                            <td class="field"><input type="text" name="enddate" id="enddate" value="<?php echo mysql_real_escape_string($_REQUEST['enddate']) ?>" /></td> 
     1047                        </tr> 
     1048                        <tr> 
     1049                            <td class="fieldname"><?php _e('Keywords', $sermon_domain) ?></td> 
     1050                            <td class="field" colspan="3"><input style="width: 98.5%" type="text" id="title" name="title" value="<?php echo mysql_real_escape_string($_REQUEST['title']) ?>" /></td> 
     1051                        </tr> 
     1052                        <tr> 
     1053                            <td class="fieldname"><?php _e('Sort by', $sermon_domain) ?></td> 
     1054                            <td class="field"><select name="sortby" id="sortby"> 
     1055                                    <?php foreach ($sb as $k => $v): ?> 
     1056                                    <option value="<?php echo $v ?>" <?php echo $csb == $v ? 'selected="selected"' : '' ?>><?php _e($k, $sermon_domain) ?></option> 
     1057                                    <?php endforeach ?> 
     1058                                </select> 
     1059                            </td> 
     1060                            <td class="fieldname rightcolumn"><?php _e('Direction', $sermon_domain) ?></td> 
     1061                            <td class="field"><select name="dir" id="dir"> 
     1062                                    <?php foreach ($di as $k => $v): ?> 
     1063                                    <option value="<?php echo $v ?>" <?php echo $cd == $v ? 'selected="selected"' : '' ?>><?php _e($k, $sermon_domain) ?></option> 
     1064                                    <?php endforeach ?> 
     1065                                </select> 
     1066                            </td> 
     1067                        </tr> 
     1068                        <tr> 
     1069                            <td colspan="3">&nbsp;</td> 
     1070                            <td class="field"><input type="submit" class="filter" value="<?php _e('Filter &raquo;', $sermon_domain) ?>">            </td> 
     1071                        </tr> 
     1072                    </table> 
     1073                    <input type="hidden" name="page" value="1"> 
     1074                </div> 
     1075            </form> 
    9301076        </div> 
    931     </form> 
    932     <script type="text/javascript"> 
    933         jQuery.datePicker.setDateFormat('ymd','-'); 
    934         jQuery('#date').datePicker({startDate:'01/01/1970'}); 
    935         jQuery('#enddate').datePicker({startDate:'01/01/1970'}); 
    936     </script> 
    937 <?php 
    938 } 
    939  
     1077        <script type="text/javascript"> 
     1078            jQuery.datePicker.setDateFormat('ymd','-'); 
     1079            jQuery('#date').datePicker({startDate:'01/01/1970'}); 
     1080            jQuery('#enddate').datePicker({startDate:'01/01/1970'}); 
     1081            <?php if ($hide_filter === TRUE) { ?> 
     1082            jQuery(document).ready(function() { 
     1083                <?php echo $js_hide; ?> 
     1084            }); 
     1085            <?php } ?> 
     1086        </script> 
     1087    <?php 
     1088    } 
     1089} 
    9401090?> 
  • sermon-browser/trunk/sb-includes/podcast.php

    r83832 r108590  
    55    if ($sermon_time == "") 
    66        $sermon_time = sb_default_time ($sermon->sid); 
    7     echo date('d M Y H:i:s', strtotime($sermon->date.' '.$sermon_time))." +0000"; 
     7    echo date('D, d M Y H:i:s', strtotime($sermon->date.' '.$sermon_time))." +0000"; 
    88} 
    99 
     
    2727    } 
    2828} 
     29 
     30//Prints size of first .mp3 file 
     31function sb_first_mp3_length($sermon) { 
     32    $stuff = sb_get_stuff($sermon); 
     33    $stuff = array_merge((array)$stuff['Files'], (array)$stuff['URLs']); 
     34    foreach ((array) $stuff as $file) { 
     35        if (strtolower(substr($file, strrpos($file, '.') + 1)) == 'mp3') 
     36            if (substr($file,0,7) == "http://") 
     37                return; 
     38            else { 
     39                $mp3file = new mp3file(sb_get_value('wordpress_path').get_option('sb_sermon_upload_dir').$file); 
     40                $meta = $mp3file->get_metadata(); 
     41                return $meta['Length']; 
     42            } 
     43    } 
     44} 
     45 
     46//Replaces & with &amp; 
     47function sb_ampersand_entity ($string) { 
     48    return str_replace('&amp;&amp;', '&amp;', str_replace('&', '&amp;', $string)); 
     49} 
     50 
    2951?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> 
    3052<channel> 
    31     <atom:link href="<?php echo str_replace('&amp;&amp;', '&amp;', str_replace('&', '&amp;', get_option('sb_podcast'))) ?>" rel="self" type="application/rss+xml" /> 
    32     <title><?php echo get_bloginfo('name')?> Podcast</title> 
     53    <atom:link href="<?php sb_ampersand_entity(get_option('sb_podcast')) ?>" rel="self" type="application/rss+xml" /> 
     54    <title><?php echo sb_ampersand_entity(get_bloginfo('name')) ?> Podcast</title> 
    3355    <itunes:author></itunes:author> 
    3456    <description><?php echo get_bloginfo('description') ?></description> 
    35     <link><?php echo str_replace('&amp;&amp;', '&amp;', str_replace('&', '&amp;', get_bloginfo('home'))) ?></link> 
     57    <link><?php echo sb_ampersand_entity(get_bloginfo('home')) ?></link> 
    3658    <language>en-us</language> 
    3759    <copyright></copyright> 
     
    3961    <itunes:owner> 
    4062        <itunes:name></itunes:name> 
    41         <itunes:email>webmaster@example.com</itunes:email> 
     63        <itunes:email></itunes:email> 
    4264    </itunes:owner> 
    4365 
     
    5476    <item> 
    5577        <guid><?php echo sb_first_mp3($sermon) ?></guid> 
    56         <title><?php echo stripslashes($sermon->title) ?></title> 
     78        <title><?php echo sb_ampersand_entity(stripslashes($sermon->title)) ?></title> 
    5779        <link><?php echo sb_display_url().sb_query_char().'sermon_id='.$sermon->id ?></link> 
     80        <itunes:author><?php echo sb_ampersand_entity(stripslashes($sermon->preacher)) ?></itunes:author> 
    5881        <description><![CDATA[<?php echo stripslashes($sermon->description) ?>]]></description> 
     82        <itunes:summary><![CDATA[<?php echo stripslashes($sermon->description) ?>]]></itunes:summary> 
    5983        <enclosure url="<?php echo sb_first_mp3($sermon) ?>" length="<?php echo sb_first_mp3_size($sermon) ?>" type="audio/mpeg"/> 
     84        <itunes:duration><?php echo sb_first_mp3_length($sermon) ?></itunes:duration> 
    6085        <category><?php echo stripslashes($sermon->service) ?></category> 
    6186        <pubDate><?php sb_print_iso_date($sermon) ?></pubDate> 
  • sermon-browser/trunk/sb-includes/readme.txt

    r101044 r108590  
    33Donate link: http://www.4-14.org.uk/sermon-browser#support 
    44Tags: sermons, podcast, mp3, church, bible, audio, widget, embed, video, esv, wpmu, church, iTunes, preacher 
    5 Requires at least: 2.2 
     5Requires at least: 2.5 
    66Tested up to: 2.7.1 
    77Stable tag: trunk 
     
    19195. **Embed videos** and other flash files from sites such as YouTube or Google Video. 
    20206. **Other file types** can also be uploaded, including PDF, Powerpoint, Word, text and RTF. Multiple files can be attached to single sermons. 
    21 7. The **full Bible text** of the passage being preached on can be included on each sermon page (five different versions, including ESV). 
     217. The **full Bible text** of the passage being preached on can be included on each sermon page (nine different versions, including ESV). 
    22228. Files can be uploaded to your own site **through the browser or via FTP**. Alternatively you can use other free audio hosting sites such as Odeo. 
    23239. Powerful **templating function** allows complete customisation to complement the look of your site. 
     
    252511. Support for Wordpress MU (WPMU) 
    262612. Extensive **help and tutorial** screencasts. 
     2713. English and Spanish translations included. 
    2728 
    2829== Installation == 
     
    195196* **[asvtext]** - Displays the full text of the ASV Bible for all passages linked to that sermon. 
    196197* **[kjvtext]** - Displays the full text of the KJV Bible for all passages linked to that sermon. 
     198* **[nettext]** - Displays the full text of the NET Bible for all passages linked to that sermon. 
    197199* **[ylttext]** - Displays the full text of the YLT Bible for all passages linked to that sermon. 
    198200* **[webtext]** - Displays the full text of the WEB Bible for all passages linked to that sermon. 
    199201* **[akjvtext]** - Displays the full text of the AKJV Bible for all passages linked to that sermon. 
    200202* **[hnvtext]** - Displays the full text of the HNV Bible for all passages linked to that sermon. 
     203* **[lbrvtext]** - Displays the full text of the Reina Valera Bible (Spanish) for all passages linked to that sermon. 
    201204* **[biblepassage]** - Displays the reference of the bible passages for that sermon. Useful for utilising other bible plugins (see FAQ). 
  • sermon-browser/trunk/sb-includes/widget.php

    r83055 r108590  
    11<?php 
    22 
     3// Error message for people using the old function 
     4function display_sermons($options = array()) { 
     5    echo "This function is now deprecated. Use sb_display_sermons or the sermon browser widget, instead."; 
     6} 
    37// Function to display sermons for users to add to their template 
    48function sb_display_sermons($options = array()) { 
     
    3943        } 
    4044        if ($display_date) 
    41             echo "<span class=\"sermon-date\"> ".__('on', $sermon_domain)." ".sb_format_date(strtotime($sermon->date))."</span> "; 
     45            echo " <span class=\"sermon-date\">".__('on', $sermon_domain)." ".sb_format_date(strtotime($sermon->date))."</span>"; 
    4246        if ($display_player) 
    4347            sb_display_mini_player($sermon); 
     
    8589function sb_first_mp3($sermon, $stats= TRUE) { 
    8690    $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; 
    87     if (stripos($user_agent, 'itunes')!==FALSE | stripos($user_agent, 'feedburner')!==FALSE) 
     91    if (stripos($user_agent, 'itunes') !== FALSE | stripos($user_agent, 'FeedBurner') !== FALSE) 
    8892        $stats = FALSE; 
    8993    $stuff = sb_get_stuff($sermon, true); 
     
    110114    $filename = sb_first_mp3($sermon, FALSE); 
    111115    if ($filename !="") { 
    112         $flashvars .= "&foreColor=".str_replace("0x", "#", get_option("audio_player_rightbgcolor")); 
     116        $ap2_options = get_option('AudioPlayer_options'); 
     117        if ($ap2_options != '') { 
     118            $color = '#'.$ap2_options['colorScheme']['rightbg']; 
     119        } else 
     120            $color = str_replace("0x", "#", get_option("audio_player_rightbgcolor")); 
     121        $flashvars .= "&foreColor=".$color; 
    113122        $flashvars .= "&filename=".$filename; 
    114123        if (substr($flashvars, 0, 1) == "&") 
    115124            $flashvars = substr($flashvars, 1); 
    116         echo "<span class=\"sermon-player\"><embed id=\"oneBitInsert_{$id}\" width=\"10\" height=\"10\""; 
     125        echo " <span class=\"sermon-player\"><embed id=\"oneBitInsert_{$id}\" width=\"10\" height=\"10\""; 
    117126        if (get_option('audio_player_transparentpagebgcolor')=="true") 
    118127            echo " wmode=\"transparent\""; 
     
    165174        if ($date) 
    166175            echo " <span class=\"sermon-date\">".__(' on ', $sermon_domain).sb_format_date(strtotime($sermon->date))."</span>"; 
    167         if ($player) { 
    168             echo " "; 
     176        if ($player) 
    169177            sb_display_mini_player($sermon, $i); 
    170         } 
    171178        echo ".</li>"; 
    172179    } 
  • sermon-browser/trunk/sermon.php

    r83832 r108590  
    33Plugin Name: Sermon Browser 
    44Plugin URI: http://www.4-14.org.uk/sermon-browser 
    5 Description: Add sermons to your Wordpress blog. Main coding by <a href="http://codeandmore.com/">Tien Do Xuan</a>. Design and additional coding 
     5Description: Add sermons to your Wordpress blog. Coding by <a href="http://codeandmore.com/">Tien Do Xuan</a> and  
    66Author: Mark Barnes 
    7 Version: 0.40.2 
     7Version: 0.41 
    88Author URI: http://www.4-14.org.uk/ 
    99 
     
    3030 
    3131//Set global constants 
    32 define('SB_CURRENT_VERSION', '0.40.2'); 
     32define('SB_CURRENT_VERSION', '0.41'); 
    3333define('SB_DATABASE_VERSION', '1.5'); 
    3434 
     
    3737add_action('admin_menu', 'sb_add_pages');                       // Add menus to admin 
    3838add_action('rightnow_end', 'sb_rightnow');                      // Display stats in the dashboard 
    39 add_filter('the_content', 'sb_sermons_filter');                 // Replace [sermons] 
    4039add_action('widgets_init', 'sb_widget_sermon_init');            // Initialise the widget 
    41 add_action('wp_head', 'sb_add_headers', 0);                     // Add CSS and javascript to frontend 
     40add_action('wp_head', 'sb_add_headers', 0);                     // Add CSS, javascript and podcast feeds to frontend 
    4241add_action('admin_init', 'sb_add_admin_headers');               // Add CSS and javascript to admin 
    4342add_action('wp_head', 'wp_print_styles', 9);                    // Force styles output in header 
    44 add_action('wp_head', 'sb_add_feed_links');                     // Add podcast feeds to HEAD 
    4543add_filter('wp_title', 'sb_page_title');                        // Amend page title on sermon pages 
    4644add_action('save_post', 'update_podcast_url');                  // Add check if [sermons] moves, and update podcast URL 
    47 add_action('update_option_permalink_structure', 'update_podcast_url'); 
    4845if (SAVEQUERIES) add_action('wp_footer', 'sb_footer_stats');    // Add stats to footer if required (frontend) 
    4946if (SAVEQUERIES) add_action('admin_footer', 'sb_footer_stats'); // Add stats to footer if required (admin) 
    5047 
    5148// Include required files 
    52 require('sb-includes/dictionary.php');  // Template functions 
    53 require('sb-includes/filetypes.php');   // User-defined icons 
    54 require('sb-includes/frontend.php');    // Everything related to displaying sermons 
    55 require('sb-includes/widget.php');      // Widget functionality 
     49require('sb-includes/dictionary.php');          // Template functions 
     50require('sb-includes/filetypes.php');           // User-defined icons 
     51require('sb-includes/frontend.php');            // Everything related to displaying sermons 
     52require('sb-includes/widget.php');              // Widget functionality 
     53if (version_compare(PHP_VERSION, '5.0.0', '<')) 
     54    require('sb-includes/php4compat.php');      // Functions required for PHP4 
     55else 
     56    require('sb-includes/mp3length.php');       // Calculates the length of an mp3 file (not compatible with PHP4) 
    5657 
    5758// Initialisation 
     
    5960    // Runs the upgrade procedures (re-save templates, and ping server) 
    6061    function sb_upgrade ($old_version, $new_version) { 
    61         if ($old_version != "") { 
    62             sb_ping_gallery(); 
    63             $sbmf = get_option('sb_sermon_multi_form'); 
    64             if ($sbmf) 
    65                 update_option('sb_sermon_multi_output', base64_encode(strtr(stripslashes(base64_decode($sbmf)), sb_search_results_dictionary()))); 
    66             $sbsf = get_option('sb_sermon_single_form'); 
    67             if ($sbsf)  
    68                 update_option('sb_sermon_single_output', base64_encode(strtr(stripslashes(base64_decode($sbsf)), sb_sermon_page_dictionary()))); 
    69             update_option('sb_sermon_version', SB_CURRENT_VERSION); 
    70         } 
     62        sb_ping_gallery(); 
     63        $sbmf = get_option('sb_sermon_multi_form'); 
     64        if ($sbmf) 
     65            update_option('sb_sermon_multi_output', base64_encode(strtr(stripslashes(base64_decode($sbmf)), sb_search_results_dictionary()))); 
     66        $sbsf = get_option('sb_sermon_single_form'); 
     67        if ($sbsf)  
     68            update_option('sb_sermon_single_output', base64_encode(strtr(stripslashes(base64_decode($sbsf)), sb_sermon_page_dictionary()))); 
     69        update_option('sb_sermon_version', SB_CURRENT_VERSION); 
     70        if (get_option('sb_filtertype') == '') 
     71            update_option('sb_filtertype', 'dropdown'); 
    7172    } 
    7273     
     
    9798    wp_register_style('sb_style', sb_get_value('plugin_url').'/sb-includes/style.php', false, get_option('sb_sermon_style_date_modified')); 
    9899 
     100    //Register [sermon] shortcode handler 
     101    add_shortcode('sermons', 'sb_shortcode'); 
     102     
    99103    //Attempt to set php.ini directives 
    100104    if (sb_return_kbytes(ini_get('upload_max_filesize'))<15360) ini_set('upload_max_filesize', '15M'); 
     
    105109    if (ini_get('file_uploads')<>'1') ini_set('file_uploads', '1'); 
    106110 
    107     // Check for Sermon Browser upgrade 
    108     $sb_version = get_option('sb_sermon_version'); 
    109     if ($sb_version != SB_CURRENT_VERSION) 
    110         sb_upgrade ($sb_version, SB_CURRENT_VERSION); 
    111  
    112111    // Only proceed with install/upgrade if necessary 
    113112    $db_version = get_option('sb_sermon_db_version'); 
    114     if($db_version == SB_DATABASE_VERSION) return; 
    115     require_once(ABSPATH . 'wp-includes/pluggable.php'); 
    116     require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 
    117  
    118     // Create folders 
    119     $sermonUploadDir = sb_get_default('sermon_path'); 
    120     if (!is_dir(sb_get_value('wordpress_path').$sermonUploadDir)) 
    121         sb_mkdir(sb_get_value('wordpress_path').$sermonUploadDir); 
    122     if(!is_dir(sb_get_value('wordpress_path').$sermonUploadDir.'images')) 
    123         sb_mkdir(sb_get_value('wordpress_path').$sermonUploadDir.'images'); 
    124     $books = sb_get_default('bible_books'); 
    125  
    126     //Upgrade database from earlier versions 
    127     if ($db_version) { 
    128         switch ($db_version) { 
    129             case '1.0':  
    130                 // Also moves files from old default folder to new default folder 
    131                 $oldSermonPath = sb_get_value('plugin_path')."/files/"; 
    132                 $files = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sb_stuff WHERE type = 'file' ORDER BY name asc");  
    133                 foreach ((array)$files as $file) { 
    134                     @chmod(sb_get_value('wordpress_path').$oldSermonPath.$file->name, 0777); 
    135                     @rename(sb_get_value('wordpress_path').$oldSermonPath.$file->name, sb_get_value('wordpress_path').$sermonUploadDir.$file->name); 
    136                 } 
    137                 $table_name = $wpdb->prefix . "sb_preachers"; 
    138                 if($wpdb->get_var("show tables like '$table_name'") == $table_name) {             
    139                       $wpdb->query("ALTER TABLE " . $table_name . " ADD `description` TEXT NOT NULL, ADD `image` VARCHAR( 255 ) NOT NULL ;"); 
    140                 } 
    141                 update_option('sb_sermon_db_version', '1.1');        
    142             case '1.1': 
    143                 add_option('sb_sermon_style', base64_encode($defaultStyle)); 
    144                 if(!is_dir(sb_get_value('wordpress_path').$sermonUploadDir.'images') && sb_mkdir(sb_get_value('wordpress_path').$sermonUploadDir.'images')){ 
    145                     @chmod(sb_get_value('wordpress_path').$sermonUploadDir.'images', 0777); 
    146                 } 
    147                 update_option('sb_sermon_db_version', '1.2');    
    148             case '1.2': 
    149                 $wpdb->query("ALTER TABLE ".$wpdb->prefix."sb_stuff ADD count INT(10) NOT NULL"); 
    150                 $wpdb->query("ALTER TABLE ".$wpdb->prefix."sb_books_sermons ADD INDEX (sermon_id)"); 
    151                 $wpdb->query("ALTER TABLE ".$wpdb->prefix."sb_sermons_tags ADD INDEX (sermon_id)"); 
    152                 update_option('sb_sermon_db_version', '1.3'); 
    153             case '1.3': 
    154                 $wpdb->query("ALTER TABLE ".$wpdb->prefix."sb_series ADD page_id INT(10) NOT NULL"); 
    155                 $wpdb->query("ALTER TABLE ".$wpdb->prefix."sb_sermons ADD page_id INT(10) NOT NULL"); 
    156                 add_option('sb_display_method', 'dynamic'); 
    157                 add_option('sb_sermons_per_page', '10'); 
    158                 add_option('sb_sermon_multi_output', base64_encode(strtr(sb_get_value('multi_form'), sb_search_results_dictionary()))); 
    159                 add_option('sb_sermon_single_output', base64_encode(strtr(sb_get_value('single_form'), sb_sermon_page_dictionary()))); 
    160                 add_option('sb_sermon_style_output', base64_encode(stripslashes(base64_decode(get_option('sb_sermon_style'))))); 
    161                 add_option('sb_sermon_style_date_modified', strtotime('now')); 
    162                 update_option('sb_sermon_db_version', '1.4'); 
    163             case '1.4' : 
    164                 //Remove duplicate indexes added by a previous bug 
    165                 $extra_indexes = $wpdb->get_results("SELECT index_name, table_name FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema = '".DB_NAME."' AND index_name LIKE 'sermon_id_%'"); 
    166                 if (is_array($extra_indexes)) 
    167                     foreach ($extra_indexes as $extra_index) 
    168                         $wpdb->query("ALTER TABLE ".$extra_index->table_name." DROP INDEX {$extra_index->index_name}"); 
    169                 //Remove duplicate tags added by a previous bug 
    170                 $unique_tags = $wpdb->get_results("SELECT DISTINCT name FROM {$wpdb->prefix}sb_tags"); 
    171                 if (is_array($unique_tags)) { 
    172                     foreach ($unique_tags as $tag) { 
    173                         $tag_ids = $wpdb->get_results("SELECT id FROM {$wpdb->prefix}sb_tags WHERE name='{$tag->name}'"); 
    174                         if (is_array($tag_ids)) { 
    175                             foreach ($tag_ids as $tag_id) { 
    176                                 $wpdb->query("UPDATE {$wpdb->prefix}sb_sermons_tags SET tag_id='{$tag_ids[0]->id}' WHERE tag_id='{$tag_id->id}'"); 
    177                                 if ($tag_ids[0]->id != $tag_id->id) 
    178                                     $wpdb->query("DELETE FROM {$wpdb->prefix}sb_tags WHERE id='{$tag_id->id}'"); 
     113    if($db_version == SB_DATABASE_VERSION) { 
     114        $sb_version = get_option('sb_sermon_version'); 
     115        if ($sb_version != SB_CURRENT_VERSION) 
     116            sb_upgrade ($sb_version, SB_CURRENT_VERSION); 
     117    } else { 
     118        require_once(ABSPATH . 'wp-includes/pluggable.php'); 
     119        require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 
     120 
     121        // Create folders 
     122        $sermonUploadDir = sb_get_default('sermon_path'); 
     123        if (!is_dir(sb_get_value('wordpress_path').$sermonUploadDir)) 
     124            sb_mkdir(sb_get_value('wordpress_path').$sermonUploadDir); 
     125        if(!is_dir(sb_get_value('wordpress_path').$sermonUploadDir.'images')) 
     126            sb_mkdir(sb_get_value('wordpress_path').$sermonUploadDir.'images'); 
     127        $books = sb_get_default('bible_books'); 
     128 
     129        //Upgrade database from earlier versions 
     130        if ($db_version) { 
     131            switch ($db_version) { 
     132                case '1.0':  
     133                    // Also moves files from old default folder to new default folder 
     134                    $oldSermonPath = sb_get_value('plugin_path')."/files/"; 
     135                    $files = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sb_stuff WHERE type = 'file' ORDER BY name asc");  
     136                    foreach ((array)$files as $file) { 
     137                        @chmod(sb_get_value('wordpress_path').$oldSermonPath.$file->name, 0777); 
     138                        @rename(sb_get_value('wordpress_path').$oldSermonPath.$file->name, sb_get_value('wordpress_path').$sermonUploadDir.$file->name); 
     139                    } 
     140                    $table_name = $wpdb->prefix . "sb_preachers"; 
     141                    if($wpdb->get_var("show tables like '$table_name'") == $table_name) {             
     142                          $wpdb->query("ALTER TABLE " . $table_name . " ADD `description` TEXT NOT NULL, ADD `image` VARCHAR( 255 ) NOT NULL ;"); 
     143                    } 
     144                    update_option('sb_sermon_db_version', '1.1');        
     145                case '1.1': 
     146                    add_option('sb_sermon_style', base64_encode($defaultStyle)); 
     147                    if(!is_dir(sb_get_value('wordpress_path').$sermonUploadDir.'images') && sb_mkdir(sb_get_value('wordpress_path').$sermonUploadDir.'images')){ 
     148                        @chmod(sb_get_value('wordpress_path').$sermonUploadDir.'images', 0777); 
     149                    } 
     150                    update_option('sb_sermon_db_version', '1.2');    
     151                case '1.2': 
     152                    $wpdb->query("ALTER TABLE ".$wpdb->prefix."sb_stuff ADD count INT(10) NOT NULL"); 
     153                    $wpdb->query("ALTER TABLE ".$wpdb->prefix."sb_books_sermons ADD INDEX (sermon_id)"); 
     154                    $wpdb->query("ALTER TABLE ".$wpdb->prefix."sb_sermons_tags ADD INDEX (sermon_id)"); 
     155                    update_option('sb_sermon_db_version', '1.3'); 
     156                case '1.3': 
     157                    $wpdb->query("ALTER TABLE ".$wpdb->prefix."sb_series ADD page_id INT(10) NOT NULL"); 
     158                    $wpdb->query("ALTER TABLE ".$wpdb->prefix."sb_sermons ADD page_id INT(10) NOT NULL"); 
     159                    add_option('sb_display_method', 'dynamic'); 
     160                    add_option('sb_sermons_per_page', '10'); 
     161                    add_option('sb_sermon_multi_output', base64_encode(strtr(sb_get_value('multi_form'), sb_search_results_dictionary()))); 
     162                    add_option('sb_sermon_single_output', base64_encode(strtr(sb_get_value('single_form'), sb_sermon_page_dictionary()))); 
     163                    add_option('sb_sermon_style_output', base64_encode(stripslashes(base64_decode(get_option('sb_sermon_style'))))); 
     164                    add_option('sb_sermon_style_date_modified', strtotime('now')); 
     165                    update_option('sb_sermon_db_version', '1.4'); 
     166                case '1.4' : 
     167                    //Remove duplicate indexes added by a previous bug 
     168                    $extra_indexes = $wpdb->get_results("SELECT index_name, table_name FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema = '".DB_NAME."' AND index_name LIKE 'sermon_id_%'"); 
     169                    if (is_array($extra_indexes)) 
     170                        foreach ($extra_indexes as $extra_index) 
     171                            $wpdb->query("ALTER TABLE ".$extra_index->table_name." DROP INDEX {$extra_index->index_name}"); 
     172                    //Remove duplicate tags added by a previous bug 
     173                    $unique_tags = $wpdb->get_results("SELECT DISTINCT name FROM {$wpdb->prefix}sb_tags"); 
     174                    if (is_array($unique_tags)) { 
     175                        foreach ($unique_tags as $tag) { 
     176                            $tag_ids = $wpdb->get_results("SELECT id FROM {$wpdb->prefix}sb_tags WHERE name='{$tag->name}'"); 
     177                            if (is_array($tag_ids)) { 
     178                                foreach ($tag_ids as $tag_id) { 
     179                                    $wpdb->query("UPDATE {$wpdb->prefix}sb_sermons_tags SET tag_id='{$tag_ids[0]->id}' WHERE tag_id='{$tag_id->id}'"); 
     180                                    if ($tag_ids[0]->id != $tag_id->id) 
     181                                        $wpdb->query("DELETE FROM {$wpdb->prefix}sb_tags WHERE id='{$tag_id->id}'"); 
     182                                } 
    179183                            } 
    180184                        } 
    181185                    } 
    182                 } 
    183                 sb_delete_unused_tags(); 
    184                 $wpdb->query("ALTER TABLE {$wpdb->prefix}sb_tags CHANGE name name VARCHAR(255)"); 
    185                 $wpdb->query("ALTER TABLE {$wpdb->prefix}sb_tags ADD UNIQUE (name)"); 
    186                 update_option('sb_sermon_db_version', '1.5'); 
    187                 return; 
    188             default: 
    189                 update_option('sb_sermon_db_version', '1.0'); 
    190         }        
    191     } else { //Create default tables 
    192        $table_name = $wpdb->prefix . "sb_preachers"; 
    193        if($wpdb->get_var("show tables like '$table_name'") != $table_name) {             
    194           $sql = "CREATE TABLE " . $table_name . " ( 
    195             `id` INT( 10 ) NOT NULL AUTO_INCREMENT , 
    196             `name` VARCHAR( 30 ) NOT NULL , 
    197             `description` TEXT NOT NULL , 
    198             `image` VARCHAR( 255 ) NOT NULL, 
    199             PRIMARY KEY ( `id` ) 
    200             );"; 
    201           dbDelta($sql); 
    202           $sql = "INSERT INTO " . $table_name . "(name, description, image) VALUES ( 'C H Spurgeon', '', '' );"; 
    203           dbDelta($sql); 
    204           $sql = "INSERT INTO " . $table_name . "(name, description, image) VALUES ( 'Martyn Lloyd-Jones', '', '' );"; 
    205           dbDelta($sql); 
    206        } 
    207         
    208        $table_name = $wpdb->prefix . "sb_series"; 
    209        if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
    210           $sql = "CREATE TABLE " . $table_name . " ( 
    211             `id` INT( 10 ) NOT NULL AUTO_INCREMENT , 
    212             `name` VARCHAR( 255 ) NOT NULL , 
    213             `page_id` INT(10) NOT NULL, 
    214             PRIMARY KEY ( `id` ) 
    215             );"; 
    216           dbDelta($sql); 
    217           $sql = "INSERT INTO " . $table_name . "(name) VALUES ( 'Exposition of the Psalms' );"; 
    218           dbDelta($sql); 
    219           $sql = "INSERT INTO " . $table_name . "(name) VALUES ( 'Exposition of Romans' );"; 
    220           dbDelta($sql); 
    221        } 
    222         
    223        $table_name = $wpdb->prefix . "sb_services"; 
    224        if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
    225           $sql = "CREATE TABLE " . $table_name . " ( 
    226             `id` INT( 10 ) NOT NULL AUTO_INCREMENT , 
    227             `name` VARCHAR( 255 ) NOT NULL , 
    228             `time` VARCHAR( 5 ) NOT NULL ,  
    229             PRIMARY KEY ( `id` ) 
    230             );"; 
    231           dbDelta($sql); 
    232           $sql = "INSERT INTO " . $table_name . "(name, time) VALUES ( 'Sunday Morning', '10:30' );"; 
    233           dbDelta($sql); 
    234           $sql = "INSERT INTO " . $table_name . "(name, time) VALUES ( 'Sunday Evening', '18:00' );"; 
    235           dbDelta($sql); 
    236           $sql = "INSERT INTO " . $table_name . "(name, time) VALUES ( 'Midweek Meeting', '19:00' );"; 
    237           dbDelta($sql); 
    238           $sql = "INSERT INTO " . $table_name . "(name, time) VALUES ( 'Special event', '20:00' );"; 
    239           dbDelta($sql); 
    240        } 
    241         
    242        $table_name = $wpdb->prefix . "sb_sermons"; 
    243        if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
    244           $sql = "CREATE TABLE " . $table_name . " ( 
    245             `id` INT( 10 ) NOT NULL AUTO_INCREMENT , 
    246             `title` VARCHAR( 255 ) NOT NULL , 
    247             `preacher_id` INT( 10 ) NOT NULL , 
    248             `date` DATE NOT NULL , 
    249             `service_id` INT( 10 ) NOT NULL , 
    250             `series_id` INT( 10 ) NOT NULL , 
    251             `start` TEXT NOT NULL , 
    252             `end` TEXT NOT NULL , 
    253             `description` TEXT , 
    254             `time` VARCHAR ( 5 ),  
    255             `override` TINYINT ( 1 ) ,   
    256             `page_id` INT(10) NOT NULL, 
    257             PRIMARY KEY ( `id` ) 
    258             );"; 
    259           dbDelta($sql); 
    260        } 
    261  
    262         $table_name = $wpdb->prefix . "sb_books_sermons"; 
    263         if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
    264           $sql = "CREATE TABLE " . $table_name . " (         
    265             `id` INT(10) NOT NULL AUTO_INCREMENT, 
    266             `book_name` VARCHAR( 30 ) NOT NULL ,         
    267             `chapter` INT(10) NOT NULL, 
    268             `verse` INT(10) NOT NULL, 
    269             `order` INT(10) NOT NULL, 
    270             `type` VARCHAR ( 30 ),  
    271             `sermon_id` INT( 10 ) NOT NULL, 
    272             INDEX (`sermon_id`), 
    273             PRIMARY KEY ( `id` ) 
    274             );"; 
    275           dbDelta($sql); 
    276        } 
    277  
    278         $table_name = $wpdb->prefix . "sb_books"; 
    279         if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
    280           $sql = "CREATE TABLE " . $table_name . " (         
    281             `id` INT(10) NOT NULL AUTO_INCREMENT, 
    282             `name` VARCHAR( 30 ) NOT NULL , 
    283             PRIMARY KEY ( `id` ) 
    284             );"; 
    285           dbDelta($sql); 
    286        } 
    287         
    288        $table_name = $wpdb->prefix . "sb_stuff"; 
    289        if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
    290           $sql = "CREATE TABLE " . $table_name . " ( 
    291             `id` INT( 10 ) NOT NULL AUTO_INCREMENT , 
    292             `type` VARCHAR( 30 ) NOT NULL , 
    293             `name` TEXT NOT NULL , 
    294             `sermon_id` INT( 10 ) NOT NULL , 
    295             `count` INT( 10 ) NOT NULL , 
    296             PRIMARY KEY ( `id` ) 
    297             );"; 
    298           dbDelta($sql); 
    299        } 
    300  
    301         $table_name = $wpdb->prefix . "sb_tags"; 
    302            if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
    303                 $sql = "CREATE TABLE " . $table_name . " ( 
    304                     `id` int(10) NOT NULL auto_increment, 
    305                     `name` varchar(255) default NULL, 
    306                     PRIMARY KEY (`id`), 
    307                     UNIQUE KEY `name` (`name`) 
    308                     );"; 
     186                    sb_delete_unused_tags(); 
     187                    $wpdb->query("ALTER TABLE {$wpdb->prefix}sb_tags CHANGE name name VARCHAR(255)"); 
     188                    $wpdb->query("ALTER TABLE {$wpdb->prefix}sb_tags ADD UNIQUE (name)"); 
     189                    update_option('sb_sermon_db_version', '1.5'); 
     190                    return; 
     191                default: 
     192                    update_option('sb_sermon_db_version', '1.0'); 
     193            }        
     194        } else { //Create default tables 
     195           $table_name = $wpdb->prefix . "sb_preachers"; 
     196           if($wpdb->get_var("show tables like '$table_name'") != $table_name) {             
     197              $sql = "CREATE TABLE " . $table_name . " ( 
     198                `id` INT( 10 ) NOT NULL AUTO_INCREMENT , 
     199                `name` VARCHAR( 30 ) NOT NULL , 
     200                `description` TEXT NOT NULL , 
     201                `image` VARCHAR( 255 ) NOT NULL, 
     202                PRIMARY KEY ( `id` ) 
     203                );"; 
     204              dbDelta($sql); 
     205              $sql = "INSERT INTO " . $table_name . "(name, description, image) VALUES ( 'C H Spurgeon', '', '' );"; 
     206              dbDelta($sql); 
     207              $sql = "INSERT INTO " . $table_name . "(name, description, image) VALUES ( 'Martyn Lloyd-Jones', '', '' );"; 
    309208              dbDelta($sql); 
    310209           } 
    311          
    312         $table_name = $wpdb->prefix . "sb_sermons_tags"; 
     210            
     211           $table_name = $wpdb->prefix . "sb_series"; 
    313212           if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
    314213              $sql = "CREATE TABLE " . $table_name . " ( 
    315214                `id` INT( 10 ) NOT NULL AUTO_INCREMENT , 
    316                 `sermon_id` INT( 10 ) NOT NULL , 
    317                 `tag_id` INT( 10 ) NOT NULL , 
     215                `name` VARCHAR( 255 ) NOT NULL , 
     216                `page_id` INT(10) NOT NULL, 
     217                PRIMARY KEY ( `id` ) 
     218                );"; 
     219              dbDelta($sql); 
     220              $sql = "INSERT INTO " . $table_name . "(name) VALUES ( 'Exposition of the Psalms' );"; 
     221              dbDelta($sql); 
     222              $sql = "INSERT INTO " . $table_name . "(name) VALUES ( 'Exposition of Romans' );"; 
     223              dbDelta($sql); 
     224           } 
     225            
     226           $table_name = $wpdb->prefix . "sb_services"; 
     227           if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
     228              $sql = "CREATE TABLE " . $table_name . " ( 
     229                `id` INT( 10 ) NOT NULL AUTO_INCREMENT , 
     230                `name` VARCHAR( 255 ) NOT NULL , 
     231                `time` VARCHAR( 5 ) NOT NULL ,  
     232                PRIMARY KEY ( `id` ) 
     233                );"; 
     234              dbDelta($sql); 
     235              $sql = "INSERT INTO " . $table_name . "(name, time) VALUES ( 'Sunday Morning', '10:30' );"; 
     236              dbDelta($sql); 
     237              $sql = "INSERT INTO " . $table_name . "(name, time) VALUES ( 'Sunday Evening', '18:00' );"; 
     238              dbDelta($sql); 
     239              $sql = "INSERT INTO " . $table_name . "(name, time) VALUES ( 'Midweek Meeting', '19:00' );"; 
     240              dbDelta($sql); 
     241              $sql = "INSERT INTO " . $table_name . "(name, time) VALUES ( 'Special event', '20:00' );"; 
     242              dbDelta($sql); 
     243           } 
     244            
     245           $table_name = $wpdb->prefix . "sb_sermons"; 
     246           if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
     247              $sql = "CREATE TABLE " . $table_name . " ( 
     248                `id` INT( 10 ) NOT NULL AUTO_INCREMENT , 
     249                `title` VARCHAR( 255 ) NOT NULL , 
     250                `preacher_id` INT( 10 ) NOT NULL , 
     251                `date` DATE NOT NULL , 
     252                `service_id` INT( 10 ) NOT NULL , 
     253                `series_id` INT( 10 ) NOT NULL , 
     254                `start` TEXT NOT NULL , 
     255                `end` TEXT NOT NULL , 
     256                `description` TEXT , 
     257                `time` VARCHAR ( 5 ),  
     258                `override` TINYINT ( 1 ) ,   
     259                `page_id` INT(10) NOT NULL, 
     260                PRIMARY KEY ( `id` ) 
     261                );"; 
     262              dbDelta($sql); 
     263           } 
     264 
     265            $table_name = $wpdb->prefix . "sb_books_sermons"; 
     266            if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
     267              $sql = "CREATE TABLE " . $table_name . " (         
     268                `id` INT(10) NOT NULL AUTO_INCREMENT, 
     269                `book_name` VARCHAR( 30 ) NOT NULL ,         
     270                `chapter` INT(10) NOT NULL, 
     271                `verse` INT(10) NOT NULL, 
     272                `order` INT(10) NOT NULL, 
     273                `type` VARCHAR ( 30 ),  
     274                `sermon_id` INT( 10 ) NOT NULL, 
    318275                INDEX (`sermon_id`), 
    319276                PRIMARY KEY ( `id` ) 
     
    321278              dbDelta($sql); 
    322279           } 
    323         $welcome_name = __('Delete', $sermon_domain); 
    324         $welcome_text = __('Congratulations, you just completed the installation!', $sermon_domain);     
    325         add_option('sb_sermon_upload_dir', $sermonUploadDir); 
    326         add_option('sb_sermon_upload_url', sb_get_default('attachment_url')); 
    327         add_option('sb_podcast', sb_get_value('wordpress_url').'?podcast'); 
    328         add_option('sb_display_method', 'dynamic'); 
    329         add_option('sb_sermons_per_page', '10'); 
    330         delete_option('sb_sermon_multi_form'); 
    331         add_option('sb_sermon_multi_form', base64_encode(sb_default_multi_template())); 
    332         delete_option('sb_sermon_single_form'); 
    333         add_option('sb_sermon_single_form', base64_encode(sb_default_single_template())); 
    334         delete_option('sb_sermon_style'); 
    335         add_option('sb_sermon_style', base64_encode(sb_default_css())); 
    336         add_option('sb_sermon_style_date_modified', strtotime('now')); 
    337         add_option('sb_sermon_multi_output', base64_encode(strtr(sb_default_multi_template(), sb_search_results_dictionary()))); 
    338         add_option('sb_sermon_single_output', base64_encode(strtr(sb_default_single_template(), sb_sermon_page_dictionary()))); 
    339         add_option('sb_sermon_style_output', base64_encode(sb_default_css())); 
    340         for ($i=0; $i < count($books); $i++) {  
    341             $wpdb->query("INSERT INTO {$wpdb->prefix}sb_books VALUES (null, '{$books[$i]}');"); 
    342         } 
    343         add_option('sb_sermon_db_version', SB_DATABASE_VERSION); 
     280 
     281            $table_name = $wpdb->prefix . "sb_books"; 
     282            if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
     283              $sql = "CREATE TABLE " . $table_name . " (         
     284                `id` INT(10) NOT NULL AUTO_INCREMENT, 
     285                `name` VARCHAR( 30 ) NOT NULL , 
     286                PRIMARY KEY ( `id` ) 
     287                );"; 
     288              dbDelta($sql); 
     289           } 
     290            
     291           $table_name = $wpdb->prefix . "sb_stuff"; 
     292           if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
     293              $sql = "CREATE TABLE " . $table_name . " ( 
     294                `id` INT( 10 ) NOT NULL AUTO_INCREMENT , 
     295                `type` VARCHAR( 30 ) NOT NULL , 
     296                `name` TEXT NOT NULL , 
     297                `sermon_id` INT( 10 ) NOT NULL , 
     298                `count` INT( 10 ) NOT NULL , 
     299                PRIMARY KEY ( `id` ) 
     300                );"; 
     301              dbDelta($sql); 
     302           } 
     303 
     304            $table_name = $wpdb->prefix . "sb_tags"; 
     305               if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
     306                    $sql = "CREATE TABLE " . $table_name . " ( 
     307                        `id` int(10) NOT NULL auto_increment, 
     308                        `name` varchar(255) default NULL, 
     309                        PRIMARY KEY (`id`), 
     310                        UNIQUE KEY `name` (`name`) 
     311                        );"; 
     312                  dbDelta($sql); 
     313               } 
     314             
     315            $table_name = $wpdb->prefix . "sb_sermons_tags"; 
     316               if($wpdb->get_var("show tables like '$table_name'") != $table_name) {       
     317                  $sql = "CREATE TABLE " . $table_name . " ( 
     318                    `id` INT( 10 ) NOT NULL AUTO_INCREMENT , 
     319                    `sermon_id` INT( 10 ) NOT NULL , 
     320                    `tag_id` INT( 10 ) NOT NULL , 
     321                    INDEX (`sermon_id`), 
     322                    PRIMARY KEY ( `id` ) 
     323                    );"; 
     324                  dbDelta($sql); 
     325               } 
     326            $welcome_name = __('Delete', $sermon_domain); 
     327            $welcome_text = __('Congratulations, you just completed the installation!', $sermon_domain);     
     328            add_option('sb_sermon_upload_dir', $sermonUploadDir); 
     329            add_option('sb_sermon_upload_url', sb_get_default('attachment_url')); 
     330            add_option('sb_podcast', sb_get_value('wordpress_url').'?podcast'); 
     331            add_option('sb_display_method', 'dynamic'); 
     332            add_option('sb_sermons_per_page', '10'); 
     333            delete_option('sb_sermon_multi_form'); 
     334            add_option('sb_sermon_multi_form', base64_encode(sb_default_multi_template())); 
     335            delete_option('sb_sermon_single_form'); 
     336            add_option('sb_sermon_single_form', base64_encode(sb_default_single_template())); 
     337            delete_option('sb_sermon_style'); 
     338            add_option('sb_sermon_style', base64_encode(sb_default_css())); 
     339            add_option('sb_sermon_style_date_modified', strtotime('now')); 
     340            add_option('sb_sermon_multi_output', base64_encode(strtr(sb_default_multi_template(), sb_search_results_dictionary()))); 
     341            add_option('sb_sermon_single_output', base64_encode(strtr(sb_default_single_template(), sb_sermon_page_dictionary()))); 
     342            add_option('sb_sermon_style_output', base64_encode(sb_default_css())); 
     343            for ($i=0; $i < count($books); $i++) {  
     344                $wpdb->query("INSERT INTO {$wpdb->prefix}sb_books VALUES (null, '{$books[$i]}');"); 
     345            } 
     346            add_option('sb_sermon_db_version', SB_DATABASE_VERSION); 
     347            add_option('sb_filtertype', 'oneclick'); 
     348            add_option('sb_filterhide', 'hide'); 
     349        } 
    344350    } 
    345351} 
     
    348354function sb_add_pages() { 
    349355    global $sermon_domain; 
    350     add_menu_page(__('Sermons', $sermon_domain), __('Sermons', $sermon_domain), 'edit_posts', __FILE__, 'sb_manage_sermons'); 
     356    add_menu_page(__('Sermons', $sermon_domain), __('Sermons', $sermon_domain), 'edit_posts', __FILE__, 'sb_manage_sermons', sb_get_value('plugin_url').'/sb-includes/sb-icon.png'); 
    351357    add_submenu_page(__FILE__, __('Sermons', $sermon_domain), __('Sermons', $sermon_domain), 'edit_posts', __FILE__, 'sb_manage_sermons'); 
    352358    if ($_REQUEST['page'] == 'sermon-browser/new_sermon.php' && $_REQUEST['mid']) { 
     
    397403        update_option('sb_display_method', 'dynamic'); 
    398404        update_option('sb_sermons_per_page', '10'); 
     405        update_option('sb_filtertype', 'oneclick'); 
     406        update_option('sb_filterhide', 'hide'); 
    399407        if (!is_dir(sb_get_value('wordpress_path').$dir)) { 
    400408          if (sb_mkdir(sb_get_value('wordpress_path').$dir)) { 
     
    465473        if (intval($_POST['perpage']) == -100) update_option('sb_show_donate_reminder', 'off'); 
    466474        update_option('sb_sermon_upload_dir', $dir); 
     475        update_option('sb_filtertype', $_POST['filtertype']); 
     476        update_option('sb_filterhide', $_POST['filterhide']); 
    467477        update_option('sb_sermon_upload_url', get_bloginfo('wpurl').$dir);       
    468478        if (!is_dir(sb_get_value('wordpress_path').$dir)) { 
     
    539549        delete_option('sb_sermon_db_version'); 
    540550        delete_option('sb_show_donate_reminder'); 
     551        delete_option('sb_filtertype'); 
     552        delete_option('sb_filterhide'); 
    541553        if (IS_MU) { 
    542554            echo '<div id="message" class="updated fade"><p><b>'.__('All sermon data has been removed.', $sermon_domain).'</b></div>'; 
     
    564576    // HTML for options page 
    565577?> 
    566     <form method="post"> 
    567578    <div class="wrap"> 
     579        <a href="http://www.4-14.org.uk/sermon-browser"><img src="<?php echo sb_get_value('plugin_url')?>/sb-includes/logo-small.png" width="191" height ="35" style="margin: 1em 2em; float: right; background: #f9f9f9;" /></a> 
     580        <form method="post"> 
    568581        <h2><?php _e('Options', $sermon_domain) ?></h2> 
    569582        <br style="clear:both"/> 
     
    594607                <td align="right" style="vertical-align:middle"><?php _e('Sermons per page', $sermon_domain) ?>: </td> 
    595608                <td><input type="text" name="perpage" value="<?php echo get_option('sb_sermons_per_page') ?>" /></td> 
     609            </tr> 
     610            <tr> 
     611                <td align="right" style="vertical-align:top" rowspan="2"><?php _e('Filter type', $sermon_domain) ?>: </td> 
     612                <td> 
     613                <?php 
     614                    $ft = get_option('sb_filtertype'); 
     615                    $filter_options = array ('dropdown' => __('Drop-down', $sermon_domain), 'oneclick' => __('One-click', $sermon_domain), 'none' => __('None', $sermon_domain)); 
     616                    foreach ($filter_options as $value => $filter_option) { 
     617                        echo "<input type=\"radio\" name=\"filtertype\" value=\"{$value}\" "; 
     618                        if ($ft == $value) 
     619                            echo 'checked="checked" '; 
     620                        echo "/> {$filter_option}<br/>\n"; 
     621                    } 
     622                ?> 
     623                </td> 
     624            </tr> 
     625            <tr> 
     626                <td> 
     627                    <input type="checkbox" name="filterhide" <?php if (get_option('sb_filterhide') == 'hide') echo 'checked="checked" '; ?> value="hide" \> <?php _e('Minimise filter', $sermon_domain); ?> 
     628                </td> 
    596629            </tr> 
    597630            <?php 
     
    671704    <form method="post"> 
    672705    <div class="wrap"> 
     706        <a href="http://www.4-14.org.uk/sermon-browser"><img src="<?php echo sb_get_value('plugin_url')?>/sb-includes/logo-small.png" width="191" height ="35" style="margin: 1em 2em; float: right; background: #f9f9f9;" /></a> 
    673707        <h2><?php _e('Templates', $sermon_domain) ?></h2> 
    674708        <br/> 
     
    777811?> 
    778812    <div class="wrap"> 
     813        <a href="http://www.4-14.org.uk/sermon-browser"><img src="<?php echo sb_get_value('plugin_url')?>/sb-includes/logo-small.png" width="191" height ="35" style="margin: 1em 2em; float: right; background: #f9f9f9;" /></a> 
    779814        <h2><?php echo $_GET['act'] == 'new' ? __('Add', $sermon_domain) : __('Edit', $sermon_domain) ?> <?php _e('preacher', $sermon_domain) ?></h2> 
    780815        <br style="clear:both"> 
     
    838873?> 
    839874    <div class="wrap"> 
     875        <a href="http://www.4-14.org.uk/sermon-browser"><img src="<?php echo sb_get_value('plugin_url')?>/sb-includes/logo-small.png" width="191" height ="35" style="margin: 1em 2em; float: right; background: #f9f9f9;" /></a> 
    840876        <h2><?php _e('Preachers', $sermon_domain) ?> (<a href="<?php echo sb_get_value('wordpress_url') ?>/wp-admin/admin.php?page=sermon-browser/preachers.php&act=new"><?php _e('add new', $sermon_domain) ?></a>)</h2> 
    841         <br> 
     877        <br/> 
    842878        <table class="widefat"> 
    843879            <thead> 
     
    10001036    <a name="manage-<?php echo $k ?>"></a> 
    10011037    <div class="wrap"> 
     1038        <?php if ($k == 'Series') { ?><a href="http://www.4-14.org.uk/sermon-browser"><img src="<?php echo sb_get_value('plugin_url')?>/sb-includes/logo-small.png" width="191" height ="35" style="margin: 1em 2em; float: right; background: #f9f9f9;" /></a><?php } ?> 
    10021039        <h2><?php echo $k ?> (<a href="javascript:createNew<?php echo $k ?>()"><?php _e('add new', $sermon_domain) ?></a>)</h2>  
    10031040        <br style="clear:both"> 
     
    12191256    <a name="top"></a> 
    12201257    <div class="wrap"> 
     1258        <a href="http://www.4-14.org.uk/sermon-browser"><img src="<?php echo sb_get_value('plugin_url')?>/sb-includes/logo-small.png" width="191" height ="35" style="margin: 1em 2em; float: right; background: #f9f9f9;" /></a> 
    12211259        <h2><?php _e('Upload Files', $sermon_domain) ?></h2>         
    12221260        <?php 
     
    14411479    $cnt = $cnt['COUNT(*)'];         
    14421480             
    1443     $sermons = $wpdb->get_results("SELECT m.id, m.title, m.date, p.name as pname, s.name as sname, ss.name as ssname FROM {$wpdb->prefix}sb_sermons as m, {$wpdb->prefix}sb_preachers as p, {$wpdb->prefix}sb_services as s, {$wpdb->prefix}sb_series as ss where (m.preacher_id = p.id and m.service_id = s.id and m.series_id = ss.id) ORDER BY m.date desc, s.time desc LIMIT 0, ".sb_get_value('sermons_per_page')); 
     1481    $sermons = $wpdb->get_results("SELECT m.id, m.title, m.date, p.name as pname, s.name as sname, ss.name as ssname 
     1482        FROM {$wpdb->prefix}sb_sermons as m 
     1483        LEFT JOIN {$wpdb->prefix}sb_preachers as p ON m.preacher_id = p.id 
     1484        LEFT JOIN {$wpdb->prefix}sb_services as s ON m.service_id = s.id 
     1485        LEFT JOIN {$wpdb->prefix}sb_series as ss ON m.series_id = ss.id 
     1486        ORDER BY m.date desc, s.time desc LIMIT 0, ".sb_get_value('sermons_per_page')); 
    14441487    $preachers = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sb_preachers ORDER BY name;");     
    14451488    $series = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sb_series ORDER BY name;"); 
     
    14671510    </script>    
    14681511    <div class="wrap"> 
    1469         <h2>Filter</h2> 
     1512            <a href="http://www.4-14.org.uk/sermon-browser"><img src="<?php echo sb_get_value('plugin_url')?>/sb-includes/logo-small.png" width="191" height ="35" style="margin: 1em 2em; float: right; background: #f9f9f9;" /></a> 
     1513            <h2>Filter</h2> 
    14701514            <form id="searchform" name="searchform">             
    14711515            <fieldset style="float:left; margin-right: 1em"> 
     
    15551599 
    15561600    if ($_POST['save'] && $_POST['title']) {         
    1557         // prepare 
     1601 
     1602    // prepare 
    15581603        $title = mysql_real_escape_string($_POST['title']); 
    15591604        $preacher_id = (int) $_POST['preacher']; 
     
    16131658            $wpdb->query("INSERT INTO {$wpdb->prefix}sb_books_sermons VALUES(null, '{$ed['book']}', '{$ed['chapter']}', '{$ed['verse']}', $i, 'end', $id);"); 
    16141659        } 
    1615         // now files 
    1616         foreach ($_POST['file'] as $uid => $file) { 
     1660        // now previously uploaded files 
     1661        foreach ($_POST['file'] as $uid => $file) 
     1662            if ($file != 0)  
     1663                $wpdb->query("UPDATE {$wpdb->prefix}sb_stuff SET sermon_id = $id WHERE id = $file;"); 
     1664 
    16171665            if ($_FILES['upload']['error'][$uid] == UPLOAD_ERR_OK) { 
    16181666                $filename = basename($_FILES['upload']['name'][$uid]); 
     
    16381686                        $wpdb->query($queryz);                   
    16391687                    } else { 
    1640                         echo '<div id="message" class="updated fade"><p><b>'.__($filename. ' already exists.', $sermon_domain).'</b></div>'; 
     1688                        echo '<div id="message" class="updated fade"><p><b>'.$filename.__(' already exists.', $sermon_domain).'</b></div>'; 
    16411689                        $error = true; 
    16421690                    } 
     
    16461694                    $error = true; 
    16471695                } 
    1648             } elseif ($file != 0)  
    1649                 $wpdb->query("UPDATE {$wpdb->prefix}sb_stuff SET sermon_id = $id WHERE id = $file;"); 
    16501696        } 
    16511697        // then URLs 
     
    18311877    <?php sb_do_alerts(); ?> 
    18321878    <div class="wrap"> 
     1879        <a href="http://www.4-14.org.uk/sermon-browser"><img src="<?php echo sb_get_value('plugin_url')?>/sb-includes/logo-small.png" width="191" height ="35" style="margin: 1em 2em; float: right; background: #f9f9f9;" /></a> 
    18331880        <h2><?php echo $_GET['mid'] ? 'Edit Sermon' : 'Add Sermon' ?></h2> 
    1834         <br> 
     1881        <br/> 
    18351882        <form method="post" enctype="multipart/form-data"> 
    18361883        <fieldset> 
     
    21132160    <style>div.wrap h3, div.wrap h4, div.wrap h5 {margin-bottom: 0; margin-top: 2em} div.wrap p {margin-left: 2em; margin-top: 0.5em} div.wrap h3 {border-top: 1px solid #555555; padding-top: 0.5em}</style> 
    21142161    <div class="wrap"> 
     2162        <a href="http://www.4-14.org.uk/sermon-browser"><img src="<?php echo sb_get_value('plugin_url')?>/sb-includes/logo-small.png" width="191" height ="35" style="margin: 1em 2em; float: right; background: #f9f9f9;" /></a> 
    21152163        <h2><?php _e('Help page', $sermon_domain) ?></h2> 
    21162164        <h3>Screencasts</h3> 
     
    21642212        <p>You need to install and activate the <a href="http://www.1pixelout.net/code/audio-player-wordpress-plugin/">1pixelout audio player</a> plugin. You can also customise the plugin so that its colours match your site.</p> 
    21652213        <h4 id="differentversions">How do I change the Bible version from the ESV?</h4> 
    2166         <p>Five Bible versions are supported by Sermon Browser: the English Standard Version, American Standard Version, King James Version, Young's Literal Transaltion and the World English Bible. To change to one of these other versions, go to Options, and edit the single template. Replace [esvtext] with [asvtext], [kjvtext], [ylttext] or [webtext]. Thanks go to <a href="http://www.crosswaybibles.org/" target="_blank">Crossway</a> for providing access to the ESV, and <a href="http://www.lstones.com/" target="_blank">Living Stones Ministries</a> for the other versions.</p> 
     2214        <p>Nine Bible versions in two languages are supported by Sermon Browser: the English Standard Version, American Standard Version, King James Version (and the American King James Version), NET Bible, Young's Literal Transaltion, the World English Bible (including the Hebrew Names Version) and the Spanish Reina Valera. To change to one of these other versions, go to Options, and edit the single template. Replace [esvtext] with [asvtext], [kjvtext], [akjvtext], [nettext], [ylttext], [webtext], [hnvtext] or [lbrvtext]. Thanks go to <a href="http://www.crosswaybibles.org/" target="_blank">Crossway</a> for providing access to the ESV, <a href="http://www.bible.org/" target="_blank">bible.org</a> for the NET Bible and <a href="http://www.lstones.com/" target="_blank">Living Stones Ministries</a> for the other versions.</p> 
    21672215        <p>If you're desperate to use other versions not currently supported, you can manage it using other Wordpress plugins (albeit with reduced functionality).  However, if you're desperate to use other versions, you can manage it using other Wordpress plugins (albeit with reduced functionality). The <a href="http://wordpress.org/extend/plugins/ebibleicious/">eBibleicious</a> plugin allows for NASB, MSG, KJV, NKJV, ESV, HCSB, and NCV (use it in 'snippet' mode). However, there are three disadvantages. (1) To use it, you'll need to register for an API key (although it is free). (2) It uses Javascript so search engines won't see the Bible text, and nor will users with javascript turned off. (3) Most importantly, it only shows a maximum of four verses (the ESV shows up to 500 verses!). 
    21682216        <p>You can also use the <a href="http://www.logos.com/reftagger">RefTagger</a> plugin, though this shows even fewer verses. Even worse (for our purposes) the bible passage only shows when you hover over a special link with your mouse. It does, however, provide an even longer list of translations. Please be aware that both RefTagger and eBibleicious will add bible text to bible references across your whole website, not just your sermons pages.</p> 
     
    21722220        <h4 id="sidebar">How do I get recent sermons to display in my sidebar?</h4> 
    21732221        <p>If your WordPress theme supports widgets, just go to Design and choose <a href="widgets.php">Widgets</a>. There you easily can add the Sermons widget to your sidebar. If your theme doesn't support widgets, you'll need to edit your theme manually. Usually, you'll be editing a file called <b>sidebar.php</b>, but your theme may give it a different name. Add the following code:</p> 
    2174         <p style="font-family:monospace">&lt;?php if (function_exists('display_sermons')) display_sermons(array('display_preacher' => 0, 'display_passage' => 1, 'display_date' => 1, 'display_player' => 1, 'preacher' => 0, 'service' => 0, 'series' => 0, 'limit' => 5)) ?></code> 
     2222        <p style="font-family:monospace">&lt;?php if (function_exists('sb_display_sermons')) sb_display_sermons(array('display_preacher' => 0, 'display_passage' => 1, 'display_date' => 1, 'display_player' => 1, 'preacher' => 0, 'service' => 0, 'series' => 0, 'limit' => 5)) ?&rt;</code> 
    21752223        <p>Each of the numbers in that line can be changed. <b>display_preacher</b>, <b>display_passage</b>, <b>display_date</b>, and <b>display_player</b> affect what is displayed (0 is off, 1 is on). <b>preacher</b>, <b>service</b> and <b>series</b> allow you to limit the output to a particular preacher, service or series. Simply change the number of the ID of the preacher/services/series you want to display. You can get the ID from the Preachers page, or the Series & Services page. 0 shows all preachers/services/series. <b>limit</b> is simply the maximum number of sermons you want displayed.</p> 
    21762224        <h4 id="diskspace">My host only allows me a certain amount of disk space, and I have so many sermons uploaded, I've run out of space! What can I do?</h4> 
     
    22492297            <li><b>[asvtext]</b> - Displays the full text of the <a href="http://en.wikipedia.org/wiki/American_Standard_Version">ASV Bible</a> for all passages linked to that sermon.</li> 
    22502298            <li><b>[kjvtext]</b> - Displays the full text of the <a href="http://en.wikipedia.org/wiki/Authorized_King_James_Version">KJV</a> Bible for all passages linked to that sermon.</li> 
     2299            <li><b>[nettext]</b> - Displays the full text of the <a href="http://net.bible.org/bible.php">NET Bible</a> Bible for all passages linked to that sermon.</li> 
    22512300            <li><b>[ylttext]</b> - Displays the full text of the <a href="http://en.wikipedia.org/wiki/Young%27s_Literal_Translation">YLT</a> Bible for all passages linked to that sermon.</li> 
    22522301            <li><b>[webtext]</b> - Displays the full text of the <a href="http://ebible.org/bible/web/">WEB</a> Bible for all passages linked to that sermon.</li> 
     
    23742423            $cond .= 'and m.series_id = ' . (int) $_POST['series'] . ' '; 
    23752424        } 
    2376         $m = $wpdb->get_results("SELECT m.id, m.title, m.date, p.name as pname, s.name as sname, ss.name as ssname FROM {$wpdb->prefix}sb_sermons as m, {$wpdb->prefix}sb_preachers as p, {$wpdb->prefix}sb_services as s, {$wpdb->prefix}sb_series as ss where m.preacher_id = p.id and m.service_id = s.id and m.series_id = ss.id {$cond} ORDER BY m.date desc, s.time desc LIMIT {$st}, ".sb_get_value('sermons_per_page')); 
    2377         $cnt = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}sb_sermons as m, {$wpdb->prefix}sb_preachers as p, {$wpdb->prefix}sb_services as s, {$wpdb->prefix}sb_series as ss where m.preacher_id = p.id and m.service_id = s.id and m.series_id = ss.id $cond;"); 
     2425        $m = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS m.id, m.title, m.date, p.name as pname, s.name as sname, ss.name as ssname 
     2426        FROM {$wpdb->prefix}sb_sermons as m 
     2427        LEFT JOIN {$wpdb->prefix}sb_preachers as p ON m.preacher_id = p.id 
     2428        LEFT JOIN {$wpdb->prefix}sb_services as s ON m.service_id = s.id 
     2429        LEFT JOIN {$wpdb->prefix}sb_series as ss ON m.series_id = ss.id 
     2430        WHERE 1=1 {$cond} 
     2431        ORDER BY m.date desc, s.time desc LIMIT {$st}, ".sb_get_value('sermons_per_page')); 
     2432 
     2433        $cnt = $wpdb->get_var("SELECT FOUND_ROWS()"); 
    23782434        ?> 
    23792435        <?php foreach ($m as $sermon): ?>                    
     
    26922748    } 
    26932749} 
    2694  
    2695 // stripos function for PHP <5 
    2696 if (!function_exists("stripos")) { 
    2697     function stripos($haystack, $needle, $offset=0) { 
    2698         return strpos(strtolower($haystack), strtolower($needle), $offset); 
    2699     } 
    2700 } 
     2750             
    27012751 
    27022752/*************************************** 
     
    27082758$multi = <<<HERE 
    27092759<div class="sermon-browser"> 
    2710     <h2>Filters</h2>         
    27112760    [filters_form] 
    27122761    <div style="clear:both"> 
    2713         <table class="podcastcustom"> 
     2762        <h4>Subscribe to Podcast</h4> 
     2763        <table class="podcast"> 
    27142764            <tr> 
    2715                 <td class="podcasticon" rowspan="2"><a href="[podcast_for_search]">[podcasticon_for_search]</a></td> 
    2716             </tr> 
    2717             <tr> 
    2718                 <td> 
    2719                     <p class="podcasttitle"><a href="[podcast_for_search]">Subscribe to custom podcast</a></p> 
    2720                     <p class="description">(new sermons that match <b>this search</b>)</p> 
    2721                 </td> 
    2722             </tr> 
    2723         </table> 
    2724         <table class="podcastall"> 
    2725             <tr> 
    2726                 <td class="podcasticon" rowspan="2"><a href="[podcast]">[podcasticon]</a></td> 
    2727             </tr> 
    2728             <tr> 
    2729                 <td> 
    2730                     <p class="podcasttitle"><a href="[podcast]">Subscribe to full podcast</a></p> 
    2731                     <p class="description">(<b>all</b> new sermons)</p> 
     2765                <td class="podcastall"> 
     2766                    <table> 
     2767                        <tr> 
     2768                            <td style="padding-right:1em"><a href="[podcast]">[podcasticon]</a></td> 
     2769                            <td><strong>All sermons</strong><br /><a href="[itunes_podcast]">iTunes</a> &bull; <a href="[podcast]">Other</a></td> 
     2770                        </tr> 
     2771                    </table> 
     2772                <td style="width: 2em"> </td> 
     2773                <td class="podcastcustom"> 
     2774                    <table> 
     2775                        <tr> 
     2776                            <td style="padding-right:1em"><a href="[podcast_for_search]">[podcasticon_for_search]</a></td> 
     2777                            <td><strong>Filtered sermons</strong><br /><a href="[itunes_podcast_for_search]">iTunes</a> &bull; <a href="[podcast_for_search]">Other</a></td> 
     2778                        </tr> 
     2779                    </table> 
    27322780                </td> 
    27332781            </tr> 
    27342782        </table> 
    27352783    </div> 
    2736     <h2>Sermons ([sermons_count])</h2>       
     2784    <h2 style="clear:both">Sermons ([sermons_count])</h2>        
    27372785    <div class="floatright">[next_page]</div> 
    27382786    <div class="floatleft">[previous_page]</div> 
     
    27582806    <div class="floatright">[next_page]</div> 
    27592807    <div class="floatleft">[previous_page]</div> 
    2760     <!--[creditlink]--> 
     2808    [creditlink] 
    27612809</div> 
    27622810HERE; 
     
    28672915} 
    28682916 
    2869 table.podcastall { 
     2917table.podcast { 
     2918    margin: 0 0 1em 0; 
     2919} 
     2920 
     2921.podcastall { 
    28702922    float:left; 
    2871     border: 2px solid #FC9328; 
    28722923    background: #fff0c8 url(icons/podcast_background.png) repeat-x; 
    2873     padding: 0.3em; 
     2924    padding: 0.5em; 
    28742925    font-size: 1em; 
    2875 } 
    2876  
    2877 table.podcastall img.podcasticon, table.podcastcustom img.podcasticon { 
    2878     float:left; 
    2879     margin-right: 1em; 
    2880     border: none; 
    2881 } 
    2882  
    2883 table.podcastall p.podcasttitle a{ 
    2884     color: #FC9328; 
    2885     font-weight: bold; 
    2886     font-size:125%; 
    2887 } 
    2888  
    2889 table.podcastall p, table.podcastcustom p { 
    2890     margin: 0 !important; 
    2891     padding: 0 !important; 
    2892 } 
    2893  
    2894 table.podcastcustom { 
     2926    -moz-border-radius: 7px; 
     2927    -webkit-border-radius: 7px; 
     2928} 
     2929 
     2930.podcastcustom { 
    28952931    float:right; 
    2896     border: 2px solid #b83ee5; 
    28972932    background: #fce4ff url(icons/podcast_custom_background.png) repeat-x; 
    2898     padding: 0.3em; 
     2933    padding: 0.5em; 
    28992934    font-size: 1em; 
    2900 } 
    2901  
    2902 table.podcastcustom p.podcasttitle  a{ 
    2903     color: #b83ee5; 
    2904     font-weight: bold; 
    2905     font-size:125%; 
    2906 } 
    2907  
    2908 td.podcasticon { 
    2909     vertical-align: top; 
     2935    -moz-border-radius: 7px; 
     2936    -webkit-border-radius: 7px; 
     2937} 
     2938 
     2939div.filtered, div.mainfilter { 
     2940    text-align: left; 
    29102941} 
    29112942 
     
    29452976div.esv span.small-caps { 
    29462977    font-variant: small-caps; 
     2978} 
     2979 
     2980div.net p.poetry { 
     2981    font-style: italics; 
     2982    margin: 0 
    29472983} 
    29482984 
Note: See TracChangeset for help on using the changeset viewer.