View difference between Paste ID: eyjt8Q9M and 3NnU7VXP
SHOW: | | - or go back to the newest paste.
1
<?php
2
// Error message for people using the old function
3
function display_sermons($options = array()) {
4
	echo "This function is now deprecated. Use sb_display_sermons or the sermon browser widget, instead.";
5
}
6
// Function to display sermons for users to add to their template
7
function sb_display_sermons($options = array()) {
8
	$default = array(
9
		'display_preacher' => 1,
10
		'display_passage' => 1,
11
		'display_date' => 1,
12
		'display_player' => 0,
13
		'preacher' => 0,
14
		'service' => 0,
15
		'series' => 0,
16
		'limit' => 5,
17
		'url_only' => 0,
18
	);
19
	$options = array_merge($default, (array) $options);
20
	extract($options);
21
	if ($url_only == 1)
22
		$limit = 1;
23
	$sermons = sb_get_sermons(array(
24
			'preacher' => $preacher,
25
			'service' => $service,
26
			'series' => $series
27
		),
28
		array(), 1, $limit
29
	);
30
	if ($url_only == 1)
31
		sb_print_sermon_link($sermons[0], true, false);
32
	else {
33
		echo "<ul class=\"sermon-widget\">\r";
34
		foreach ((array) $sermons as $sermon) {
35
			echo "\t<li>";
36
			echo "<span class=\"sermon-title\"><a href=\"";
37
			sb_print_sermon_link($sermon, true, false);
38
			echo "\">".stripslashes($sermon->title)."</a></span>";
39
			if ($display_passage) {
40
				$foo = unserialize($sermon->start);
41
				$bar = unserialize($sermon->end);
42
				echo "<span class=\"sermon-passage\"> (".sb_get_books($foo[0], $bar[0]).")</span>";
43
			}
44
			if ($display_preacher) {
45
				echo "<span class=\"sermon-preacher\">".__('by', $sermon_domain)." <a href=\"";
46
				sb_print_preacher_link($sermon, false);
47
				echo "\">".stripslashes($sermon->preacher)."</a></span>";
48
			}
49
			if ($display_date)
50
				echo " <span class=\"sermon-date\">".__('on', $sermon_domain)." ".sb_formatted_date ($sermon)."</span>";
51
			if ($display_player)
52
				sb_display_mini_player($sermon);
53
			echo ".</li>\r";
54
		}
55
		echo "</ul>\r";
56
	}
57
}
58
59
// Displays the widget
60
function sb_widget_sermon($args, $widget_args=1) {
61
	global $sermon_domain;
62
	extract( $args, EXTR_SKIP );
63
	if ( is_numeric($widget_args) )
64
		$widget_args = array( 'number' => $widget_args );
65
	$widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) );
66
	extract( $widget_args, EXTR_SKIP );
67
	$options = sb_get_option('sermons_widget_options');
68
	if ( !isset($options[$number]) )
69
		return;
70
	extract($options[$number]);
71
	echo $before_widget;
72
	echo $before_title . $title . $after_title;
73
	$sermons = sb_get_sermons(array(
74
			'preacher' => $preacher,
75
			'service' => $service,
76
			'series' => $series
77
		),
78
		array(), 1, $limit
79
	);
80
	$i=0;
81
	echo "<ul class=\"sermon-widget\">";
82
	foreach ((array) $sermons as $sermon){
83
		$i++;
84
		echo "<li><span class=\"sermon-title\">";
85
		echo "<a href=".sb_build_url(array('sermon_id' => $sermon->id), true).">".stripslashes($sermon->title)."</a></span>";
86
		if ($book) {
87
			$foo = unserialize($sermon->start);
88
			$bar = unserialize($sermon->end);
89
			if (isset ($foo[0]) && isset($bar[0]))
90
				echo " <span class=\"sermon-passage\">(".sb_get_books($foo[0], $bar[0], FALSE).")</span>";
91
		}
92
		if ($preacherz) {
93
			echo " <span class=\"sermon-preacher\">".__('by', $sermon_domain)." <a href=\"";
94
			sb_print_preacher_link($sermon, false);
95
			echo "\">".stripslashes($sermon->preacher)."</a></span>";
96
		}
97
		if ($date)
98
			echo " <span class=\"sermon-date\">".__(' on ', $sermon_domain).sb_formatted_date ($sermon)."</span>";
99
		if ($player)
100
			sb_display_mini_player($sermon, $i);
101
		echo ".</li>";
102
	}
103
	echo "</ul>";
104
	echo $after_widget;
105
}
106
107
// Displays the tag cloud in the sidebar
108
function sb_widget_tag_cloud ($args) {
109
	global $sermon_domain;
110
	extract($args);
111
	echo $before_widget;
112
	echo $before_title.__('Sermon Browser tags', $sermon_domain).$after_title;
113
	sb_print_tag_clouds();
114
	echo $after_widget;
115
}
116
117
function sb_admin_bar_menu () {
118
	global $wp_admin_bar, $sermon_domain;
119
	if (!current_user_can('edit_posts') || !class_exists('WP_Admin_Bar'))
120
		return;
121
	if (isset($_GET['sermon_id']) && (int)$_GET['sermon_id'] != 0 && current_user_can('publish_pages')) {
122
		$wp_admin_bar->add_menu(array('id' => 'sermon-browser-menu', 'title' => __('Edit Lecture', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/new_sermon.php&mid='.(int)$_GET['sermon_id'])));
123
		$wp_admin_bar->add_menu(array('parent' => 'sermon-browser-menu', 'id' => 'sermon-browser-sermons', 'title' => __('List Lectures', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/sermon.php')));
124
	} else {
125
		$wp_admin_bar->add_menu(array('id' => 'sermon-browser-menu', 'title' => __('Lectures', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/sermon.php')));
126
		if (current_user_can('publish_pages'))
127
			$wp_admin_bar->add_menu(array('parent' => 'sermon-browser-menu', 'id' => 'sermon-browser-add', 'title' => __('Add Lectures', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/new_sermon.php')));
128
	}
129
	if (current_user_can('upload_files'))
130
		$wp_admin_bar->add_menu(array('parent' => 'sermon-browser-menu', 'id' => 'sermon-browser-files', 'title' => __('Files', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/files.php')));
131
	if (current_user_can('manage_categories')) {
132
		$wp_admin_bar->add_menu(array('parent' => 'sermon-browser-menu', 'id' => 'sermon-browser-preachers', 'title' => __('Preachers', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/preachers.php')));
133
		$wp_admin_bar->add_menu(array('parent' => 'sermon-browser-menu', 'id' => 'sermon-browser-series', 'title' => __('Series &amp; Services', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/manage.php')));
134
	}
135
	if (current_user_can('manage_options')) {
136
		$wp_admin_bar->add_menu(array('parent' => 'sermon-browser-menu', 'id' => 'sermon-browser-options', 'title' => __('Options', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/options.php')));
137
		$wp_admin_bar->add_menu(array('parent' => 'sermon-browser-menu', 'id' => 'sermon-browser-series', 'title' => __('Templates', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/templates.php')));
138
	}
139
	if (current_user_can('edit_plugins'))
140
		$wp_admin_bar->add_menu(array('parent' => 'sermon-browser-menu', 'id' => 'sermon-browser-uninstall', 'title' => __('Uninstall', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/uninstall.php')));
141
	$wp_admin_bar->add_menu(array('parent' => 'sermon-browser-menu', 'id' => 'sermon-browser-help', 'title' => __('Help', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/help.php')));
142
	$wp_admin_bar->add_menu(array('parent' => 'sermon-browser-menu', 'id' => 'sermon-browser-japan', 'title' => __('Pray for Japan', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/japan.php')));
143
	$wp_admin_bar->add_menu(array('parent' => 'new-content', 'id' => 'sermon-browser-add2', 'title' => __('Lecture', $sermon_domain), 'href' => admin_url('admin.php?page=sermon-browser/new_sermon.php')));
144
}
145
146
// Sorts an object by rank
147
function sb_sort_object($a,$b) {
148
	if(  $a->rank ==  $b->rank )
149
		return 0;
150
	return ($a->rank < $b->rank) ? -1 : 1;
151
}
152
153
// Displays the most popular sermons in the sidebar
154
function sb_widget_popular ($args) {
155
156
	global $wpdb, $sermon_domain;
157
	extract($args);
158
	if (!isset($suffix))
159
		$suffix = '_w';
160
	if (!isset($options))
161
		$options = sb_get_option('popular_widget_options');
162
	echo $before_widget;
163
	if ($options['title'] != '')
164
		echo $before_title.$options['title'].$after_title;
165
	$jscript = '';
166
	$trigger = array();
167
	$output = array();
168
	$series_final = array();
169
	$preachers_final = array();
170
	if ($options['display_sermons']) {
171
		$sermons = $wpdb->get_results("SELECT sermons.id, sermons.title, sum(stuff.count) AS total
172
									   FROM {$wpdb->prefix}sb_stuff AS stuff
173
									   LEFT JOIN {$wpdb->prefix}sb_sermons AS sermons ON stuff.sermon_id = sermons.id
174
									   GROUP BY sermons.id ORDER BY total DESC LIMIT 0, {$options['limit']}");
175
		if ($sermons) {
176
			$output['sermons'] = '<div class="popular-sermons'.$suffix.'"><ul>';
177
			foreach ($sermons as $sermon)
178
				$output['sermons'] .= '<li><a href="'.sb_build_url(array('sermon_id' => $sermon->id), true).'">'.$sermon->title.'</a></li>';
179
			$output['sermons'] .= '</ul></div>';
180
			$trigger[] = '<a id="popular_sermons_trigger'.$suffix.'" href="#">Lectures</a>';
181
			$jscript .=  'jQuery("#popular_sermons_trigger'.$suffix.'").click(function() {
182
							jQuery(this).attr("style", "font-weight:bold");
183
							jQuery("#popular_series_trigger'.$suffix.'").removeAttr("style");
184
							jQuery("#popular_preachers_trigger'.$suffix.'").removeAttr("style");
185
							jQuery.setSbCookie ("sermons");
186
							jQuery("#sb_popular_wrapper'.$suffix.'").fadeOut("slow", function() {
187
								jQuery("#sb_popular_wrapper'.$suffix.'").html("'.addslashes($output['sermons']).'").fadeIn("slow");
188
							});
189
							return false;
190
						});';
191
		}
192
	}
193
194
	if ($options['display_series']) {
195
		$series1 = $wpdb->get_results("SELECT series.id, series.name, avg(stuff.count) AS average
196
									   FROM {$wpdb->prefix}sb_stuff AS stuff
197
									   LEFT JOIN {$wpdb->prefix}sb_sermons AS sermons ON stuff.sermon_id = sermons.id
198
									   LEFT JOIN {$wpdb->prefix}sb_series AS series ON sermons.series_id = series.id
199
									   GROUP BY series.id ORDER BY average DESC");
200
		$series2 = $wpdb->get_results("SELECT series.id, sum(stuff.count) AS total
201
									   FROM {$wpdb->prefix}sb_stuff AS stuff
202
									   LEFT JOIN {$wpdb->prefix}sb_sermons AS sermons ON stuff.sermon_id = sermons.id
203
									   LEFT JOIN {$wpdb->prefix}sb_series AS series ON sermons.series_id = series.id
204
									   GROUP BY series.id ORDER BY total DESC");
205
		if ($series1) {
206
			$i=1;
207
			foreach ($series1 as $series) {
208
				$series_final[$series->id]->name = $series->name;
209
				$series_final[$series->id]->rank = $i;
210
				$series_final[$series->id]->id = $series->id;
211
				$i++;
212
			}
213
			$i=1;
214
			foreach ($series2 as $series) {
215
				$series_final[$series->id]->rank += $i;
216
				$i++;
217
			}
218
			usort($series_final,'sb_sort_object');
219
			$series_final = array_slice($series_final, 0, $options['limit']);
220
			$output['series'] = '<div class="popular-series'.$suffix.'"><ul>';
221
			foreach ($series_final as $series)
222
				$output['series'] .= '<li><a href="'.sb_build_url(array('series' => $series->id), true).'">'.$series->name.'</a></li>';
223
			$output['series'] .= '</ul></div>';
224
		}
225
		$trigger[] = '<a id="popular_series_trigger'.$suffix.'" href="#">Series</a>';
226
		$jscript .=	 'jQuery("#popular_series_trigger'.$suffix.'").click(function() {
227
							jQuery(this).attr("style", "font-weight:bold");
228
							jQuery("#popular_sermons_trigger'.$suffix.'").removeAttr("style");
229
							jQuery("#popular_preachers_trigger'.$suffix.'").removeAttr("style");
230
							jQuery.setSbCookie ("series");
231
							jQuery("#sb_popular_wrapper'.$suffix.'").fadeOut("slow", function() {
232
								jQuery("#sb_popular_wrapper'.$suffix.'").html("'.addslashes($output['series']).'").fadeIn("slow");
233
							});
234
							return false;
235
						});';
236
	}
237
238
	if ($options['display_preachers']) {
239
		$preachers1 = $wpdb->get_results("SELECT preachers.id, preachers.name, avg(stuff.count) AS average
240
										  FROM {$wpdb->prefix}sb_stuff AS stuff
241
										  LEFT JOIN {$wpdb->prefix}sb_sermons AS sermons ON stuff.sermon_id = sermons.id
242
										  LEFT JOIN {$wpdb->prefix}sb_preachers AS preachers ON sermons.preacher_id = preachers.id
243
										  GROUP BY preachers.id
244
										  ORDER BY average DESC");
245
		$preachers2 = $wpdb->get_results("SELECT preachers.id, sum(stuff.count) AS total
246
										  FROM {$wpdb->prefix}sb_stuff AS stuff
247
										  LEFT JOIN {$wpdb->prefix}sb_sermons AS sermons ON stuff.sermon_id = sermons.id
248
										  LEFT JOIN {$wpdb->prefix}sb_preachers AS preachers ON sermons.preacher_id = preachers.id
249
										  GROUP BY preachers.id
250
										  ORDER BY total DESC");
251
		if ($preachers1) {
252
			$i=1;
253
			foreach ($preachers1 as $preacher) {
254
				$preachers_final[$preacher->id]->name = $preacher->name;
255
				$preachers_final[$preacher->id]->rank = $i;
256
				$preachers_final[$preacher->id]->id = $preacher->id;
257
				$i++;
258
			}
259
			$i=1;
260
			foreach ($preachers2 as $preacher) {
261
				$preachers_final[$preacher->id]->rank += $i;
262
				$i++;
263
			}
264
			usort($preachers_final,'sb_sort_object');
265
			$preachers_final = array_slice($preachers_final, 0, $options['limit']);
266
			$output['preachers'] = '<div class="popular-preachers'.$suffix.'"><ul>';
267
			foreach ($preachers_final as $preacher)
268
				$output['preachers'] .= '<li><a href="'.sb_build_url(array('preacher' => $preacher->id), true).'">'.$preacher->name.'</a></li>';
269
			$output['preachers'] .= '</ul></div>';
270
			$trigger[] = '<a id="popular_preachers_trigger'.$suffix.'" href="#">Preachers</a>';
271
			$jscript .=	 'jQuery("#popular_preachers_trigger'.$suffix.'").click(function() {
272
								jQuery(this).attr("style", "font-weight:bold");
273
								jQuery("#popular_series_trigger'.$suffix.'").removeAttr("style");
274
								jQuery("#popular_sermons_trigger'.$suffix.'").removeAttr("style");
275
								jQuery.setSbCookie("preachers");
276
								jQuery("#sb_popular_wrapper'.$suffix.'").fadeOut("slow", function() {
277
									jQuery("#sb_popular_wrapper'.$suffix.'").html("'.addslashes($output['preachers']).'").fadeIn("slow");
278
								});
279
								return false;
280
							 });';
281
		}
282
	}
283
284
	$jscript .= 'if (jQuery.getSbCookie() == "preachers") { jQuery("#popular_preachers_trigger'.$suffix.'").attr("style", "font-weight:bold"); jQuery("#sb_popular_wrapper'.$suffix.'").html("'.addslashes($output['preachers']).'")};';
285
	$jscript .= 'if (jQuery.getSbCookie() == "series") { jQuery("#popular_series_trigger'.$suffix.'").attr("style", "font-weight:bold"); jQuery("#sb_popular_wrapper'.$suffix.'").html("'.addslashes($output['series']).'")};';
286
	$jscript .= 'if (jQuery.getSbCookie() == "sermons") { jQuery("#popular_sermons_trigger'.$suffix.'").attr("style", "font-weight:bold"); jQuery("#sb_popular_wrapper'.$suffix.'").html("'.addslashes($output['sermons']).'")};';
287
	echo '<p>'.implode ($trigger, ' | ').'</p>';
288
	echo '<div id="sb_popular_wrapper'.$suffix.'">'.current($output).'</div>';
289
	echo '<script type="text/javascript">jQuery.setSbCookie = function (value) {
290
											document.cookie = "sb_popular="+encodeURIComponent(value);
291
										 };</script>';
292
	echo '<script type="text/javascript">jQuery.getSbCookie = function () {
293
											var cookieValue = null;
294
											if (document.cookie && document.cookie != "") {
295
												var cookies = document.cookie.split(";");
296
												for (var i = 0; i < cookies.length; i++) {
297
													var cookie = jQuery.trim(cookies[i]);
298
													var name = "sb_popular";
299
													if (cookie.substring(0, name.length + 1) == (name + "=")) {
300
														cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
301
														break;
302
													}
303
												}
304
											}
305
										 return cookieValue;
306
										 }</script>';
307
	echo '<script type="text/javascript">jQuery(document).ready(function() {'.$jscript.'});</script>';
308
	echo $after_widget;
309
}
310
311
function sb_print_most_popular() {
312
	$args['before_widget'] = '<div id="sermon_most_popular" style="border: 1px solid ; margin: 0pt 0pt 1em 2em; padding: 5px; float: right; font-size: 75%; line-height: 1em">';
313
	$args['after_widget'] = '</div>';
314
	$args['before_title'] = '<span class="popular_title">';
315
	$args['after_title'] = '</span>';
316
	$args['suffix'] = '_f';
317
	sb_widget_popular ($args);
318
}
319
320
//Modify page title
321
function sb_page_title($title) {
322
	global $wpdb, $sermon_domain;
323
	if (isset($_GET['sermon_id'])) {
324
		$id = (int)$_GET['sermon_id'];
325
		$sermon = $wpdb->get_row("SELECT m.title, p.name FROM {$wpdb->prefix}sb_sermons as m LEFT JOIN {$wpdb->prefix}sb_preachers as p ON m.preacher_id = p.id where m.id = $id");
326
		if ($sermon)
327
			return $title.' ('.stripslashes($sermon->title).' - '.stripslashes($sermon->name).')';
328
		else
329
			return $title.' ('.__('No sermons found.', $sermon_domain).')';
330
	}
331
	else
332
		return $title;
333
}
334
335
//Downloads external webpage. Used to add Bible passages to sermon page.
336
function sb_download_page ($page_url) {
337
	if (function_exists('curl_init')) {
338
		$curl = curl_init();
339
		curl_setopt ($curl, CURLOPT_URL, $page_url);
340
		curl_setopt ($curl, CURLOPT_TIMEOUT, 2);
341
		curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
342
		curl_setopt ($curl, CURLOPT_HTTPHEADER, array('Accept-Charset: utf-8;q=0.7,*;q=0.7'));
343
		$contents = curl_exec ($curl);
344
		$content_type = curl_getinfo( $curl, CURLINFO_CONTENT_TYPE );
345
		curl_close ($curl);
346
	}
347
	else
348
		{
349
		$handle = @fopen ($page_url, 'r');
350
		if ($handle) {
351
			stream_set_blocking($handle, TRUE );
352
			stream_set_timeout($handle, 2);
353
			$info = socket_get_status($handle);
354
			while (!feof($handle) && !$info['timed_out']) {
355
				$contents .= fread($handle, 8192);
356
				$info = socket_get_status($handle);
357
			}
358
		@fclose($handle);
359
		}
360
	}
361
	return $contents;
362
}
363
364
// Returns human friendly Bible reference (e.g. John 3:1-16, not John 3:1-John 3:16)
365
function sb_tidy_reference ($start, $end, $add_link = FALSE, $relative_link = TRUE) {
366
	if (!trim($start['book'])) {
367
		return "";
368
	}
369
	$translated_books = array_combine(sb_get_default('eng_bible_books'), sb_get_default('bible_books'));
370
	$start_book = $translated_books[trim($start['book'])];
371
	$end_book = $translated_books[trim($end['book'])];
372
	$start_chapter = trim($start['chapter']);
373
	$end_chapter = trim($end['chapter']);
374
	$start_verse = trim($start['verse']);
375
	$end_verse = trim($end['verse']);
376
	if ($add_link) {
377
		$start_book = "<a href=\"".sb_get_book_link($start_book, $relative_link)."\">{$start_book}</a>";
378
		$end_book = "<a href=\"".sb_get_book_link($end_book, $relative_link)."\">{$end_book}</a>";
379
	}
380
	if ($start_book == $end_book) {
381
		if ($start_chapter == $end_chapter) {
382
			if ($start_verse == $end_verse) {
383
				$reference = "$start_book $start_chapter:$start_verse";
384
			} else {
385
				$reference = "$start_book $start_chapter:$start_verse-$end_verse";
386
			}
387
		} else {
388
			 $reference = "$start_book $start_chapter:$start_verse-$end_chapter:$end_verse";
389
		}
390
	} else {
391
		$reference =  "$start_book $start_chapter:$start_verse - $end_book $end_chapter:$end_verse";
392
	}
393
	return $reference;
394
}
395
396
//Print unstyled bible passage
397
function sb_print_bible_passage ($start, $end) {
398
	echo "<p class='bible-passage'>".sb_tidy_reference($start, $end)."</p>";
399
}
400
401
// Returns human friendly Bible reference with link to filter
402
function sb_get_books($start, $end, $relative_link = TRUE) {
403
	return sb_tidy_reference ($start, $end, TRUE, $relative_link);
404
}
405
406
//Add Bible text to single sermon page
407
function sb_add_bible_text ($start, $end, $version) {
408
	if ($version == 'esv')
409
		return sb_add_esv_text ($start, $end);
410
	elseif ($version == 'net')
411
		return sb_add_net_text ($start, $end);
412
	else
413
		return sb_add_other_bibles ($start, $end, $version);
414
}
415
416
//Returns ESV text
417
function sb_add_esv_text ($start, $end) {
418
	// If you are experiencing errors, you should sign up for an ESV API key,
419
	// and insert the name of your key in place of the letters IP in the URL
420
	// below (.e.g. ...passageQuery?key=YOURAPIKEY&passage=...)
421
	$esv_url = 'http://www.esvapi.org/v2/rest/passageQuery?key=IP&passage='.rawurlencode(sb_tidy_reference ($start, $end)).'&include-headings=false&include-footnotes=false';
422
	return sb_download_page ($esv_url);
423
}
424
425
// Converts XML string to object
426
function sb_get_xml ($content) {
427
	if (class_exists('SimpleXMLElement')) {
428
		$xml = new SimpleXMLElement($content);
429
	} else {
430
		$xml = new SimpleXMLElement4();
431
		$xml = $xml->xml_load_file($content, 'object', 'utf-8');
432
	}
433
	return $xml;
434
}
435
436
//Returns NET Bible text
437
function sb_add_net_text ($start, $end) {
438
	$reference = str_replace(' ', '+', sb_tidy_reference ($start, $end));
439
	$old_chapter = $start['chapter'];
440
	$net_url = "http://labs.bible.org/api/xml/verse.php?passage={$reference}";
441
	if (class_exists('SimpleXMLElement')) // Ignore paragraph formatting on PHP4 because xml_parse_into_struct doesn't like HTML tags
442
		$xml = sb_get_xml(sb_download_page($net_url.'&formatting=para'));
443
	else
444
		$xml = sb_get_xml(sb_download_page($net_url));
445
	$output='';
446
	$items = array();
447
	$items = $xml->item;
448
	foreach ($items as $item) {
449
		if ($item->text != '[[EMPTY]]') {
450
			if (substr($item->text, 0, 8) == '<p class') {
451
				$paraend = stripos($item->text, '>', 8)+1;
452
				$output .= "\n".substr($item->text, 0, $paraend);
453
				$item->text = substr ($item->text, $paraend);
454
			}
455
			if ($old_chapter == $item->chapter) {
456
				$output .= " <span class=\"verse-num\">{$item->verse}</span>";
457
			} else {
458
				$output .= " <span class=\"chapter-num\">{$item->chapter}:{$item->verse}</span> ";
459
				$old_chapter = strval($item->chapter);
460
			}
461
			$output .= 	$item->text;
462
		}
463
	}
464
	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>";
465
}
466
467
//Returns Bible text using SermonBrowser's own API
468
function sb_add_other_bibles ($start, $end, $version) {
469
	if ($version == 'hnv')
470
		return '<div class="'.$version.'"><p>Sorry, the Hebrew Names Version is no longer available.</p></div>';
471
	$reference = str_replace(' ', '+', sb_tidy_reference ($start, $end));
472
	$reference = str_replace('Psalm+', 'Psalms+', $reference);		//Fix for API "Psalms" vs "Psalm"
473
	$old_chapter = $start['chapter'];
474
	$url = "http://api.preachingcentral.com/bible.php?passage={$reference}&version={$version}";
475
	$xml = sb_get_xml(sb_download_page($url));
476
	$output='';
477
	$items = array();
478
	$items = $xml->range->item;
479
	if ($xml->range->item)
480
		foreach ($xml->range->item as $item) {
481
			if ($item->text != '[[EMPTY]]') {
482
				if ($old_chapter == $item->chapter) {
483
					$output .= " <span class=\"verse-num\">{$item->verse}</span>";
484
				} else {
485
					$output .= " <span class=\"chapter-num\">{$item->chapter}:{$item->verse}</span> ";
486
					$old_chapter = strval($item->chapter);
487
				}
488
				$output .=	 $item->text;
489
			}
490
		}
491
	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>';
492
}
493
494
//Adds edit sermon link if current user has edit rights
495
function sb_edit_link ($id) {
496
	if (current_user_can('publish_posts')) {
497
		$id = (int)$id;
498
		echo '<div class="sb_edit_link"><a href="'.site_url().'/wp-admin/admin.php?page=sermon-browser/new_sermon.php&mid='.$id.'">Edit Lecture</a></div>';
499
	}
500
}
501
502
// Returns URL for search links
503
function sb_build_url($arr, $clear = false, $relative_link = false) {
504
	global $wpdb;
505
	// Word list for URL building purpose
506
	$wl = array('preacher', 'title', 'date', 'enddate', 'series', 'service', 'sortby', 'dir', 'book', 'stag', 'podcast');
507
	$foo = array_merge((array) $_GET, (array) $_POST, $arr);
508
	foreach ($foo as $k => $v) {
509
		if (in_array($k, array_keys($arr)) | (in_array($k, $wl) && !$clear)) {
510
			$bar[] = rawurlencode($k).'='.rawurlencode($v);
511
		}
512
	}
513
	if (isset($bar)) {
514
		if ($relative_link and get_option('permalink_structure'))  // relative links don't work if pretty permalinks are not being used
515
			return sb_query_char().implode('&amp;', $bar);
516
		else
517
			return sb_display_url().sb_query_char().implode('&amp;', $bar);
518
	}
519
	else {
520
		return sb_display_url();
521
	}
522
}
523
524
// Adds javascript and CSS where required
525
function sb_add_headers() {
526
	global $sermon_domain, $post, $wpdb, $wp_scripts;
527
	if (isset($post->ID) && $post->ID != '') {
528
		echo "<!-- Added by SermonBrowser (version ".SB_CURRENT_VERSION.") - http://www.sermonbrowser.com/ -->\r";
529
		echo "<link rel=\"alternate\" type=\"application/rss+xml\" title=\"".__('Lecture podcast', $sermon_domain)."\" href=\"".sb_get_option('podcast_url')."\" />\r";
530
		wp_enqueue_style('sb_style');
531
		$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();");
532
		if ($pageid !== NULL) {
533
			if (sb_get_option('filter_type') == 'dropdown') {
534
				wp_enqueue_script('sb_datepicker');
535
				wp_enqueue_style ('sb_datepicker');
536
			}
537
			if (isset($_REQUEST['title']) || isset($_REQUEST['preacher']) || isset($_REQUEST['date']) || isset($_REQUEST['enddate']) || isset($_REQUEST['series']) || isset($_REQUEST['service']) || isset($_REQUEST['book']) || isset($_REQUEST['stag']))
538
				echo "<link rel=\"alternate\" type=\"application/rss+xml\" title=\"".__('Custom sermon podcast', $sermon_domain)."\" href=\"".sb_podcast_url()."\" />\r";
539
			wp_enqueue_script('jquery');
540
		} else {
541
			$sidebars_widgets = wp_get_sidebars_widgets();
542
			if (isset($sidebars_widgets['wp_inactive_widgets']))
543
				unset($sidebars_widgets['wp_inactive_widgets']);
544
			if (is_array($sidebars_widgets))
545
				foreach ($sidebars_widgets as $sb_w)
546
					if (is_array($sb_w) && in_array('sermon-browser-popular', $sb_w))
547
						wp_enqueue_script('jquery');
548
		}
549
	}
550
}
551
552
// Formats date into words
553
function sb_formatted_date ($sermon) {
554
	global $sermon_domain;
555
	if (isset($sermon->time) && $sermon->time != '')
556
		$sermon_time = $sermon->time;
557
	else
558
		$sermon_time = sb_default_time ($sermon->sid);
559
	if ($sermon->datetime == '1970-01-01 00:00:00')
560
		return __('Unknown Date', $sermon_domain);
561
	else
562
		return date_i18n(get_option('date_format'), strtotime($sermon->datetime));
563
}
564
565
// Returns podcast URL
566
function sb_podcast_url() {
567
	return str_replace(' ', '%20', sb_build_url(array('podcast' => 1, 'dir'=>'desc', 'sortby'=>'m.datetime')));
568
}
569
570
// Prints sermon search URL
571
function sb_print_sermon_link($sermon, $echo = true, $relative_link = true) {
572
	if ($echo)
573
		echo sb_build_url(array('sermon_id' => $sermon->id), true, $relative_link);
574
	else
575
		return sb_build_url(array('sermon_id' => $sermon->id), true, $relative_link);
576
}
577
578
// Prints preacher search URL
579
function sb_print_preacher_link($sermon, $relative_link = true) {
580
	echo sb_build_url(array('preacher' => $sermon->pid), false, $relative_link);
581
}
582
583
// Prints series search URL
584
function sb_print_series_link($sermon) {
585
	echo sb_build_url(array('series' => $sermon->ssid), false, true);
586
}
587
588
// Prints service search URL
589
function sb_print_service_link($sermon) {
590
	echo sb_build_url(array('service' => $sermon->sid), false, true);
591
}
592
593
// Prints bible book search URL
594
function sb_get_book_link($book_name, $relative_link = true) {
595
	return sb_build_url(array('book' => $book_name), false, $relative_link);
596
}
597
598
// Prints tag search URL
599
function sb_get_tag_link($tag, $relative_link = true) {
600
	return sb_build_url(array('stag' => $tag), false, $relative_link);
601
}
602
603
// Prints tags
604
function sb_print_tags($tags) {
605
	$out = array();
606
	foreach ((array) $tags as $tag) {
607
		$tag = stripslashes($tag);
608
		$out[] = '<a href="'.sb_get_tag_link($tag).'">'.$tag.'</a>';
609
	}
610
	$tags = implode(', ', (array) $out);
611
	echo $tags;
612
}
613
614
//Prints tag cloud
615
function sb_print_tag_clouds($minfont=80, $maxfont=150) {
616
	global $wpdb;
617
	$rawtags = $wpdb->get_results("SELECT name FROM {$wpdb->prefix}sb_tags as t RIGHT JOIN {$wpdb->prefix}sb_sermons_tags as st ON t.id = st.tag_id");
618
	foreach ($rawtags as $tag) {
619
		if (isset($cnt[$tag->name]))
620
			$cnt[$tag->name]++;
621
		else
622
			$cnt[$tag->name] = 1;
623
	}
624
	$fontrange = $maxfont - $minfont;
625
	$maxcnt = 0;
626
	$mincnt = 1000000;
627
	foreach ($cnt as $cur) {
628
		if ($cur > $maxcnt) $maxcnt = $cur;
629
		if ($cur < $mincnt) $minct = $cur;
630
	}
631
	$cntrange = $maxcnt + 1 - $mincnt;
632
	$minlog = log($mincnt);
633
	$maxlog = log($maxcnt);
634
	$logrange = $maxlog == $minlog ? 1 : $maxlog - $minlog;
635
	arsort($cnt);
636
	foreach ($cnt as $tag => $count) {
637
		$size = $minfont + $fontrange * (log($count) - $minlog) / $logrange;
638
		$out[] = '<a style="font-size:'.(int) $size.'%" href="'.sb_get_tag_link($tag, FALSE).'">'.$tag.'</a>';
639
	}
640
	echo implode(' ', $out);
641
}
642
643
//Prints link to next page
644
function sb_print_next_page_link($limit = 0) {
645
	global $sermon_domain, $record_count;
646
	if ($limit == 0)
647
		$limit = sb_get_option('sermons_per_page');
648
	$current = isset($_REQUEST['pagenum']) ? (int) $_REQUEST['pagenum'] : 1;
649
	if ($current < ceil($record_count / $limit)) {
650
		$url = sb_build_url(array('pagenum' => ++$current), false, true);
651
		echo '<a href="'.$url.'">'.__('Next page', $sermon_domain).' &raquo;</a>';
652
	}
653
}
654
655
//Prints link to previous page
656
function sb_print_prev_page_link($limit = 0) {
657
	global $sermon_domain;
658
	if ($limit == 0) $limit = sb_get_option('sermons_per_page');
659
	$current = isset($_REQUEST['pagenum']) ? (int) $_REQUEST['pagenum'] : 1;
660
	if ($current > 1) {
661
		$url = sb_build_url(array('pagenum' => --$current), false, true);
662
		echo '<a href="'.$url.'">&laquo; '.__('Previous page', $sermon_domain).'</a>';
663
	}
664
}
665
666
// Print link to attached files
667
function sb_print_url($url) {
668
	global $sermon_domain;
669
	require (SB_INCLUDES_DIR.'/filetypes.php');
670
	$pathinfo = pathinfo($url);
671
	$ext = $pathinfo['extension'];
672
	if ((substr($url,0,7) == "http://") or (substr($url,0,8) == 'https://'))
673
		$url=sb_display_url().sb_query_char(FALSE).'show&url='.rawurlencode($url);
674
	else
675
		if (strtolower($ext) == 'mp3')
676
			$url=sb_display_url().sb_query_char(FALSE).'show&file_name='.rawurlencode($url);
677
		else
678
			$url=sb_display_url().sb_query_char(FALSE).'download&file_name='.rawurlencode($url);
679
	$uicon = $default_site_icon;
680
	foreach ($siteicons as $site => $icon) {
681
		if (strpos($url, $site) !== false) {
682
			$uicon = $icon;
683
			break;
684
		}
685
	}
686
	$uicon = isset($filetypes[$ext]['icon']) ? $filetypes[$ext]['icon'] : $uicon;
687
	if (strtolower($ext) == 'mp3') {
688
		if ((substr(sb_get_option('mp3_shortcode'), 0, 18) == '[audio:%SERMONURL%') && function_exists('ap_insert_player_widgets')) {
689
			echo ap_insert_player_widgets(str_ireplace('%SERMONURL%', $url, sb_get_option('mp3_shortcode')));
690
			return;
691
		} elseif (do_shortcode(sb_get_option('mp3_shortcode')) != sb_get_option('mp3_shortcode')) {
692
			echo do_shortcode(str_ireplace('%SERMONURL%', $url, sb_get_option('mp3_shortcode')));
693
			return;
694
		}
695
	}
696
	$uicon = SB_PLUGIN_URL.'/sb-includes/icons/'.$uicon;
697
	if (!isset($filetypes[$ext]['name']))
698
		$filetypes[$ext]['name'] = sprintf(__('%s file', $sermon_domain), addslashes($ext));
699
	else
700
		$filetypes[$ext]['name'] = addslashes($filetypes[$ext]['name']);
701
	echo "<a href=\"{$url}\"><img class=\"site-icon\" alt=\"{$filetypes[$ext]['name']}\" title=\"{$filetypes[$ext]['name']}\" src=\"{$uicon}\"></a>";
702
}
703
704
// Print link to attached external URLs
705
function sb_print_url_link($url) {
706
	global $sermon_domain;
707
	echo '<div class="sermon_file">';
708
	sb_print_url ($url);
709
	if (substr($url, -4) == ".mp3") {
710
		if ((substr($url,0,7) == "http://") or (substr($url,0,8) == 'https://')) {
711
			$param="url"; }
712
		else {
713
			$param="file_name"; }
714
		$url = rawurlencode($url);
715
        echo ' <a href="'.sb_display_url().sb_query_char().'download&amp;'.$param.'='.$url.'">'.__('Download', $sermon_domain).'</a>';
716
	}
717
	echo '</div>';
718
}
719
720
//Decode base64 encoded data
721
function sb_print_code($code) {
722
	echo do_shortcode(base64_decode($code));
723
}
724
725
//Prints preacher description
726
function sb_print_preacher_description($sermon) {
727
	global $sermon_domain;
728
	if (strlen($sermon->preacher_description)>0) {
729
		echo "<div class='preacher-description'><span class='about'>" . __('About', $sermon_domain).' '.stripslashes($sermon->preacher).': </span>';
730
		echo "<span class='description'>".stripslashes($sermon->preacher_description)."</span></div>";
731
	}
732
}
733
734
//Prints preacher image
735
function sb_print_preacher_image($sermon) {
736
	if ($sermon->image)
737
		echo "<img alt='".stripslashes($sermon->preacher)."' class='preacher' src='".trailingslashit(site_url()).sb_get_option('upload_dir').'images/'.$sermon->image."'>";
738
}
739
740
//Prints link to sermon preached next (but not today)
741
function sb_print_next_sermon_link($sermon) {
742
	global $wpdb;
743
	$next = $wpdb->get_row("SELECT id, title FROM {$wpdb->prefix}sb_sermons WHERE DATE(datetime) > DATE('{$sermon->datetime}') AND id <> {$sermon->id} ORDER BY datetime asc LIMIT 1");
744
	if (!$next) return;
745
	echo '<a href="';
746
	sb_print_sermon_link($next);
747
	echo '">'.stripslashes($next->title).' &raquo;</a>';
748
}
749
750
//Prints link to sermon preached on previous days
751
function sb_print_prev_sermon_link($sermon) {
752
	global $wpdb;
753
	$prev = $wpdb->get_row("SELECT id, title FROM {$wpdb->prefix}sb_sermons WHERE DATE(datetime) < DATE('{$sermon->datetime}') AND id <> {$sermon->id} ORDER BY datetime desc LIMIT 1");
754
	if (!$prev) return;
755
	echo '<a href="';
756
	sb_print_sermon_link($prev);
757
	echo '">&laquo; '.stripslashes($prev->title).'</a>';
758
}
759
760
//Prints links to other sermons preached on the same day
761
function sb_print_sameday_sermon_link($sermon) {
762
	global $wpdb, $sermon_domain;
763
	$same = $wpdb->get_results("SELECT id, title FROM {$wpdb->prefix}sb_sermons WHERE DATE(datetime) = DATE('{$sermon->datetime}') AND id <> {$sermon->id}");
764
	if (!$same) {
765
		_e('None', $sermon_domain);
766
		return;
767
	}
768
	$output = array();
769
	foreach ($same as $cur)
770
		$output[] = '<a href="'.sb_print_sermon_link($cur, false).'">'.stripslashes($cur->title).'</a>';
771
	echo implode($output, ', ');
772
}
773
774
//Gets single sermon from the database
775
function sb_get_single_sermon($id) {
776
	global $wpdb;
777
	$id = (int) $id;
778
	$sermon = $wpdb->get_row("SELECT m.id, m.title, m.datetime, m.start, m.end, m.description, p.id as pid, p.name as preacher, p.image as image, p.description as preacher_description, s.id as sid, s.name as service, ss.id as ssid, ss.name as series 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 and m.id = {$id}");
779
	if ($sermon) {
780
		$file = $code = $tags = array();
781
		$stuff = $wpdb->get_results("SELECT f.id, f.type, f.name FROM {$wpdb->prefix}sb_stuff as f WHERE sermon_id = $id ORDER BY id desc");
782
		$rawtags = $wpdb->get_results("SELECT t.name FROM {$wpdb->prefix}sb_sermons_tags as st LEFT JOIN {$wpdb->prefix}sb_tags as t ON st.tag_id = t.id WHERE st.sermon_id = {$sermon->id} ORDER BY t.name asc");
783
		foreach ($rawtags as $tag) {
784
			$tags[] = $tag->name;
785
		}
786
		foreach ($stuff as $cur)
787
			${$cur->type}[] = $cur->name;
788
		$sermon->start = unserialize($sermon->start);
789
		$sermon->end = unserialize($sermon->end);
790
		return array(
791
			'Sermon' => $sermon,
792
			'Files' => $file,
793
			'Code' => $code,
794
			'Tags' => $tags,
795
		);
796
	} else
797
		return false;
798
}
799
800
//Prints the filter line for a given parameter
801
function sb_print_filter_line ($id, $results, $filter, $display, $max_num = 7) {
802
	global $sermon_domain, $more_applied;
803
	$translate_book = FALSE;
804
	if ($id == 'book') {
805
		$translate_book = TRUE;
806
		$translated_books = array_combine(sb_get_default('eng_bible_books'), sb_get_default('bible_books'));
807
	}
808
	echo "<div id = \"{$id}\" class=\"filter\">\r<span class=\"filter-heading\">".__(ucwords($id), $sermon_domain).":</span> \r";
809
	$i = 1;
810
	$more = FALSE;
811
	foreach ($results as $result) {
812
		if ($i == $max_num) {
813
			echo "<span id=\"{$id}-more\">";
814
			$more = TRUE;
815
			$more_applied[] = $id;
816
		}
817
		if ($i != 1)
818
			echo ", \r";
819
			if ($translate_book) {
820
				echo '<a href="'.sb_build_url(array($id => $result->$filter), false, true).'">'.$translated_books[stripslashes($result->$display)].'</a>&nbsp;('.$result->count.')';
821
			}
822
			else {
823
				echo '<a href="'.sb_build_url(array($id => $result->$filter), false, true).'">'.stripslashes($result->$display).'</a>&nbsp;('.$result->count.')';
824
			}
825
		$i++;
826
	}
827
	echo ".";
828
	if ($more)
829
		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>';
830
	echo '</div>';
831
}
832
833
//Prints the filter line for the date parameter
834
function sb_print_date_filter_line ($dates) {
835
	global $more_applied, $sermon_domain;
836
	$date_output = "<div id = \"dates\" class=\"filter\">\r<span class=\"filter-heading\">".__('Date', $sermon_domain).":</span> \r";
837
	$first = $dates[0];
838
	$last = end($dates);
839
	$count = 0;
840
	if ($first->year == $last->year) {
841
		if ($first->month == $last->month) {
842
			$date_output = '';
843
		} else {
844
			$previous_month = -1;
845
			foreach ($dates as $date) {
846
				if ($date->month != $previous_month) {
847
					if ($count != 0)
848
						$date_output .= '('.$count.'), ';
849
					$date_output .= '<a href="'.sb_build_url(Array ('date' => $date->year.'-'.$date->month.'-01', 'enddate' => $date->year.'-'.$date->month.'-31'), false, true).'">'.strftime('%B', strtotime("{$date->year}-{$date->month}-{$date->day}")).'</a> ';
850
					$previous_month = $date->month;
851
					$count = 1;
852
				} else
853
					$count++;
854
			}
855
			$date_output .= '('.$count.'), ';
856
		}
857
	} else {
858
		$previous_year = 0;
859
		foreach ($dates as $date) {
860
			if ($date->year !== $previous_year) {
861
				if ($count !== 0)
862
					$date_output .= '('.$count.'), ';
863
				$date_output .= '<a href="'.sb_build_url(Array ('date' => $date->year.'-01-01', 'enddate' => $date->year.'-12-31'), false, true).'">'.$date->year.'</a> ';
864
				$previous_year = $date->year;
865
				$count = 1;
866
			} else
867
				$count++;
868
		}
869
		$date_output .= '('.$count.'), ';
870
	}
871
	if ($date_output != '')
872
		echo rtrim($date_output, ', ')."</div>\r";
873
}
874
875
//Returns the filter URL minus a given parameter
876
function sb_url_minus_parameter ($param1, $param2='') {
877
	global $filter_options;
878
	$existing_params = array_merge((array) $_GET, (array) $_POST);
879
	$returned_query = array();
880
	foreach (array_keys($existing_params) as $query) {
881
		if (in_array($query, $filter_options) && $query != $param1 && $query != $param2) {
882
			$returned_query[] = "{$query}={$existing_params[$query]}";
883
		}
884
	}
885
	if (count($returned_query) > 0)
886
		return sb_display_url().sb_query_char().implode('&amp;', $returned_query);
887
	else
888
		return sb_display_url();
889
}
890
891
//Displays the filter on sermon search page
892
function sb_print_filters($filter) {
893
	global $wpdb, $sermon_domain, $more_applied, $filter_options;
894
	$hide_filter = FALSE;
895
	if ($filter['filterhide'] == 'hide') {
896
		$hide_filter = TRUE;
897
		$js_hide = "
898
		var filter_visible = false;
899
		jQuery('#mainfilter').hide();
900
		jQuery('#show_hide_filter').text('[ SHOW ]');
901
		jQuery('#show_hide_filter').click(function() {
902
			jQuery('#mainfilter:visible').slideUp('slow');
903
			jQuery('#mainfilter:hidden').slideDown('slow');
904
			if (filter_visible) {
905
				jQuery('#show_hide_filter').text('[ SHOW ]');
906
				filter_visible = false;
907
			} else {
908
				jQuery('#show_hide_filter').text('[ HIDE ]');
909
				filter_visible = true;
910
			}
911
			return false;
912
		});";
913
		$js_hide = str_replace ('SHOW', __('Show filter', $sermon_domain), $js_hide);
914
		$js_hide = str_replace ('HIDE', __('Hide filter', $sermon_domain), $js_hide);
915
	}
916
	if ($filter['filter'] == 'oneclick') {
917
		// One click filter
918
		$hide_custom_podcast = true;
919
		$filter_options = array ('preacher', 'book', 'service', 'series', 'date', 'enddate', 'title');
920
		$output = '';
921
		foreach ($filter_options AS $filter_option)
922
			if (isset($_REQUEST[$filter_option])) {
923
				if ($filter_option != 'enddate') {
924
					if ($output != '')
925
						$output .= "\r, ";
926
					if ($filter_option == 'date') {
927
						$output .= '<strong>'.__('Date', $sermon_domain).'</strong>:&nbsp;';
928
						if (substr($_REQUEST['date'],0,4) == substr($_REQUEST['enddate'],0,4))
929
							$output .= substr($_REQUEST['date'],0,4).'&nbsp;(<a href="'.sb_url_minus_parameter('date', 'enddate').'">x</a>)';
930
						if (substr($_REQUEST['date'],5,2) == substr($_REQUEST['enddate'],5,2))
931
							$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'), false, true).'">x</a>)';
932
					} else {
933
						$output .= '<strong>'.__(ucwords($filter_option), $sermon_domain).'</strong>:&nbsp;*'.$filter_option.'*';
934
						$output .= '&nbsp;(<a href="'.sb_url_minus_parameter($filter_option).'">x</a>)';
935
					}
936
				}
937
				$hide_custom_podcast = FALSE;
938
			}
939
		$hide_empty = sb_get_option('hide_no_attachments');
940
		$sermons=sb_get_sermons($filter, array(), 1, 99999, $hide_empty);
941
		$ids = array();
942
		foreach ($sermons as $sermon)
943
			$ids[] = $sermon->id;
944
		$ids = "('".implode ("', '", $ids)."')";
945
946
		$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.datetime DESC");
947
		$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.datetime DESC");
948
		$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");
949
		$book_count = $wpdb->get_results("SELECT bs.book_name AS name, count(distinct bs.sermon_id) AS count FROM {$wpdb->prefix}sb_books_sermons AS bs JOIN {$wpdb->prefix}sb_books as b ON bs.book_name=b.name AND bs.sermon_id IN {$ids} GROUP BY b.id");
950
		$dates = $wpdb->get_results("SELECT YEAR(datetime) as year, MONTH (datetime) as month, DAY(datetime) as day FROM {$wpdb->prefix}sb_sermons WHERE id IN {$ids} ORDER BY datetime ASC");
951
952
		$more_applied = array();
953
		$output = str_replace ('*preacher*', isset($preachers[0]->name) ? $preachers[0]->name : '', $output);
954
		$output = str_replace ('*book*', isset($_REQUEST['book']) ? __(htmlentities($_REQUEST['book']), $sermon_domain) : '', $output);
955
		$output = str_replace ('*service*', isset($services[0]->name) ? $services[0]->name : '', $output);
956
		$output = str_replace ('*series*', isset($series[0]->name) ? $series[0]->name : '', $output);
957
958
		echo "<span class=\"inline_controls\"><a href=\"#\" id=\"show_hide_filter\"></a></span>";
959
		if ($output != '')
960
			echo '<div class="filtered">'.__('Active filter', $sermon_domain).': '.$output."</div>\r";
961
		echo '<div id="mainfilter">';
962
		if (count($preachers) > 1)
963
			sb_print_filter_line ('preacher', $preachers, 'id', 'name', 7);
964
		if (count($book_count) > 1)
965
			sb_print_filter_line ('book', $book_count, 'name', 'name', 10);
966
		if (count($series) > 1)
967
			sb_print_filter_line ('series', $series, 'id', 'name', 10);
968
		if (count($services) > 1)
969
			sb_print_filter_line ('service', $services, 'id', 'name', 10);
970
		sb_print_date_filter_line ($dates);
971
		echo "</div>\r";
972
		if (count($more_applied) > 0 | $output != '' | $hide_custom_podcast === TRUE | $hide_filter === TRUE) {
973
			echo "<script type=\"text/javascript\">\r";
974
			echo "\tjQuery(document).ready(function() {\r";
975
			if ($hide_filter === TRUE)
976
				echo $js_hide."\r";
977
			if ($hide_custom_podcast === TRUE)
978
				echo "\t\tjQuery('.podcastcustom').hide();\r";
979
			if (count($more_applied) > 0) {
980
				foreach ($more_applied as $element_id) {
981
					echo "\t\tjQuery('#{$element_id}-more').hide();\r";
982
					echo "\t\tjQuery('#{$element_id}-more-link').show();\r";
983
					echo "\t\tjQuery('a#{$element_id}-toggle').click(function() {\r";
984
					echo "\t\t\tjQuery('#{$element_id}-more').show();\r";
985
					echo "\t\t\tjQuery('#{$element_id}-more-link').hide();\r";
986
					echo "\t\t\treturn false;\r";
987
					echo "\t\t});\r";
988
				}
989
			}
990
			echo "\t});\r";
991
			echo "</script>\r";
992
		}
993
	} elseif ($filter['filter'] == 'dropdown') {
994
		// Drop-down filter
995
		$translated_books = array_combine(sb_get_default('eng_bible_books'), sb_get_default('bible_books'));
996
		$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.datetime DESC");
997
		$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.datetime DESC");
998
		$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");
999
		$book_count = $wpdb->get_results("SELECT bs.book_name AS name, count(distinct bs.sermon_id) AS count FROM {$wpdb->prefix}sb_books_sermons AS bs JOIN {$wpdb->prefix}sb_books AS b ON bs.book_name = b.name GROUP BY b.id");
1000
		$sb = array(
1001
			'Title' => 'm.title',
1002
			'Preacher' => 'preacher',
1003
			'Date' => 'm.datetime',
1004
			'Passage' => 'b.id',
1005
		);
1006
		$di = array(
1007
			__('Ascending', $sermon_domain) => 'asc',
1008
			__('Descending', $sermon_domain) => 'desc',
1009
		);
1010
		$csb = isset($_REQUEST['sortby']) ? $_REQUEST['sortby'] : 'm.datetime';
1011
		$cd = isset($_REQUEST['dir']) ? $_REQUEST['dir'] : 'desc';
1012
		?>
1013
		<span class="inline_controls"><a href="#" id="show_hide_filter"></a></span>
1014
		<div id="mainfilter">
1015
			<form method="post" id="sermon-filter" action="<?php echo sb_display_url(); ?>">
1016
				<div style="clear:both">
1017
					<table class="sermonbrowser">
1018
						<tr>
1019
							<td class="fieldname"><?php _e('Speaker', $sermon_domain) ?></td>
1020
							<td class="field"><select name="preacher" id="preacher">
1021
									<option value="0" <?php echo (isset($_REQUEST['preacher']) && $_REQUEST['preacher'] != 0) ? '' : 'selected="selected"' ?>><?php _e('[All]', $sermon_domain) ?></option>
1022
									<?php foreach ($preachers as $preacher): ?>
1023
									<option value="<?php echo $preacher->id ?>" <?php echo isset($_REQUEST['preacher']) && $_REQUEST['preacher'] == $preacher->id ? 'selected="selected"' : '' ?>><?php echo stripslashes($preacher->name).' ('.$preacher->count.')' ?></option>
1024
									<?php endforeach ?>
1025
								</select>
1026
							</td>
1027
							<td class="fieldname rightcolumn"><?php _e('Services', $sermon_domain) ?></td>
1028
							<td class="field"><select name="series" id="series">
1029
							  <option value="0" <?php echo (isset($_REQUEST['series']) && $_REQUEST['series'] != 0) ? '' : 'selected="selected"' ?>>
1030
							    <?php _e('[All]', $sermon_domain) ?>
1031
						      </option>
1032
							  <?php foreach ($series as $item): ?>
1033
							  <option value="<?php echo $item->id ?>" <?php echo isset($_REQUEST['series']) && $_REQUEST['series'] == $item->id ? 'selected="selected"' : '' ?>><?php echo stripslashes($item->name).' ('.$item->count.')' ?></option>
1034
							  <?php endforeach ?>
1035
						    </select></td>
1036
							<td width="30" class="field">&nbsp;</td>
1037
							<td width="30" class="field">&nbsp;</td>
1038
							<td class="field"><input type="submit" class="filter" value="<?php _e('Filter &raquo;', $sermon_domain) ?>"></td>
1039
						</tr>
1040
					</table>
1041
					<input type="hidden" name="page" value="1">
1042
			  </div>
1043
			</form>
1044-
	      <?php
1044+
1045
		<script type="text/javascript">
1046
			jQuery.datePicker.setDateFormat('ymd','-');
1047
			jQuery('#date').datePicker({startDate:'01/01/1970'});
1048
			jQuery('#enddate').datePicker({startDate:'01/01/1970'});
1049
			<?php if ($hide_filter === TRUE) { ?>
1050
			jQuery(document).ready(function() {
1051
				<?php echo $js_hide; ?>
1052
			});
1053
			<?php } ?>
1054
		</script>	
1055
      <?php
1056
	}
1057
}
1058
// Returns the first MP3 file attached to a sermon
1059
// Stats have to be turned off for iTunes compatibility
1060
function sb_first_mp3($sermon, $stats= TRUE) {
1061
	$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
1062
	if (stripos($user_agent, 'itunes') !== FALSE | stripos($user_agent, 'FeedBurner') !== FALSE)
1063
		$stats = FALSE;
1064
	$stuff = sb_get_stuff($sermon, true);
1065
	$stuff = array_merge((array)$stuff['Files'], (array)$stuff['URLs']);
1066
	foreach ((array) $stuff as $file) {
1067
		if (strtolower(substr($file, strrpos($file, '.') + 1)) == 'mp3') {
1068
			if ((substr($url,0,7) == "http://") or (substr($url,0,8) == 'https://')) {
1069
				if ($stats)
1070
					$file=sb_display_url().sb_query_char().'show&amp;url='.rawurlencode($file);
1071
			} else {
1072
				if (!$stats)
1073
					$file=trailingslashit(site_url()).sb_get_option('upload_dir').rawurlencode($file);
1074
				else
1075
					$file=sb_display_url().sb_query_char().'show&amp;file_name='.rawurlencode($file);
1076
			}
1077
			return $file;
1078
			break;
1079
		}
1080
	}
1081
}
1082
1083
//Gets colour for mini-flash player from the options of another flash player plugin.
1084
function sb_get_flash_player_colour ($type) {
1085
	if ($type == 'foreground') {
1086
		//AudioPlayer v2
1087
		$options = get_option('AudioPlayer_options');
1088
		if ($options)
1089
			return $options['colorScheme']['rightbg'];
1090
		//AudioPlayer v1
1091
		$options = get_option('audio_player_rightbgcolor');
1092
		if ($options)
1093
			return str_replace('0x', '', $options);
1094
		//Default
1095
		return '000000';
1096
	} elseif ($type == 'background') {
1097
		//AudioPlayer v2
1098
		$options = get_option('AudioPlayer_options');
1099
		if ($options)
1100
			if ($options['colorScheme']['transparentpagebg'] == 'true')
1101
				return 'transparent';
1102
			else
1103
				return $options['colorScheme']['rightbg'];
1104
		//AudioPlayer v1
1105
		$options = get_option('audio_player_transparentpagebgcolor');
1106
		if ($options)
1107
			return 'transparent';
1108
		else
1109
			return str_replace('0x', '', get_option('audio_player_pagebgcolor'));
1110
1111
	}
1112
}
1113
1114
// Displays the mini flash mp3 player
1115
function sb_display_mini_player ($sermon, $id=1, $flashvars="") {
1116
	$filename = sb_first_mp3($sermon, FALSE);
1117
	if ($filename !="") {
1118
		$flashvars .= "&foreColor=#".sb_get_flash_player_colour ('foreground');
1119
		$flashvars .= "&filename=".$filename;
1120
		if (substr($flashvars, 0, 1) == "&")
1121
			$flashvars = substr($flashvars, 1);
1122-
?>
1122+
1123
		if (sb_get_flash_player_colour ('background') == 'transparent')
1124
			echo " wmode=\"transparent\"";
1125
		else
1126
			echo " bgcolor=\"0x".sb_get_flash_player_colour ('background')."\"";
1127
		echo " quality=\"high\"";
1128
		echo " flashvars=\"".$flashvars."\"";
1129
		echo " src=\"".SB_PLUGIN_URL."/sb-includes/1bit.swf\"";
1130
		echo " type=\"application/x-shockwave-flash\"/></span>";
1131
	}
1132
}
1133-
		</script>
1133+
?>