web/wp-content/plugins/slideshow-jquery-image-gallery/classes/SlideshowPlugin.php
changeset 194 32102edaa81b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/slideshow-jquery-image-gallery/classes/SlideshowPlugin.php	Mon Nov 19 18:26:13 2012 +0100
@@ -0,0 +1,158 @@
+<?php
+/**
+ * Class SlideslowPlugin is called whenever a slideshow do_action tag is come across.
+ * Responsible for outputting the slideshow's HTML, CSS and Javascript.
+ *
+ * TODO Create a variable in which all slideshow html can be stored <- Rethink this, slideshow containers have random ids.
+ * @author: Stefan Boonstra
+ * @version: 22-09-12
+ */
+class SlideshowPlugin {
+
+	/**
+	 * Function deploy prints out the prepared html
+	 *
+	 * @param int $postId
+	 */
+	static function deploy($postId = null){
+		echo self::prepare($postId);
+	}
+
+	/**
+	 * Function prepare returns the required html and enqueues
+	 * the scripts and stylesheets necessary for displaying the slideshow
+	 *
+	 * Passing this function no parameter or passing it a negative one will
+	 * result in a random pick of slideshow
+	 *
+	 * @param int $postId
+	 * @return String $output
+	 */
+	static function prepare($postId = null){
+		// Get post by its ID, or by its slug
+		if(is_numeric($postId))
+			$post = wp_get_single_post($postId);
+		if(is_string($postId)){
+			$query = new WP_Query(array(
+				'post_type' => SlideshowPluginPostType::$postType,
+				'name' => $postId,
+				'orderby' => 'post_date',
+				'order' => 'DESC'
+			));
+
+			if($query->have_posts())
+				$post = $query->next_post();
+		}
+
+		// When no slideshow is found, get one at random
+		if(empty($post)){
+			$post = get_posts(array(
+				'numberposts' => 1,
+				'orderby' => 'rand',
+				'post_type' => SlideshowPluginPostType::$postType
+			));
+
+			if(is_array($post))
+				$post = $post[0];
+		}
+
+		// Exit on error
+		if(empty($post)){echo 'dayum';
+			return '<!-- Wordpress Slideshow - No slideshows available -->';
+		}
+
+		// Get settings
+		$allSettings = SlideshowPluginPostType::getSimpleSettings($post->ID, null, false);
+
+		// Get stored slide settings and convert them to array([slide-key] => array([setting-name] => [value]));
+		$slidesPreOrder = array();
+		$slideSettings = SlideshowPluginPostType::getSettings($post->ID, SlideshowPluginPostType::$prefixes['slide-list'], false);
+		if(is_array($slideSettings) && count($slideSettings) > 0)
+			foreach($slideSettings as $key => $value){
+				$key = explode('_', $key);
+				if(is_numeric($key[1]))
+					$slidesPreOrder[$key[1]][$key[2]] = $value;
+			}
+
+		// Create array ordered by the 'order' key of the slides array: array([order-key] => [slide-key]);
+		$slidesOrder = array();
+		if(count($slidesPreOrder) > 0){
+			foreach($slidesPreOrder as $key => $value)
+				if(isset($value['order']) && is_numeric($value['order']) && $value['order'] > 0)
+					$slidesOrder[$value['order']][] = $key;
+		}
+		ksort($slidesOrder);
+
+		// Order slides by the order key.
+		$slides = array();
+		if(count($slidesOrder) > 0)
+			foreach($slidesOrder as $value)
+				if(is_array($value))
+					foreach($value as $slideId){
+						$slides[] = $slidesPreOrder[$slideId];
+						unset($slidesPreOrder[$slideId]);
+					}
+
+		// Add remaining (unordered) slides to the end of the array.
+		$slides = array_merge($slides, $slidesPreOrder);
+
+		// Randomize if setting is true.
+		if(isset($allSettings['setting_random']) && $allSettings['setting_random'] == 'true')
+			shuffle($slides);
+
+		// Enqueue functional sheet
+		wp_enqueue_style(
+			'slideshow_functional_style',
+			SlideshowPluginMain::getPluginUrl() . '/style/' . __CLASS__ . '/functional.css'
+		);
+
+		// Create a microtime timestamp to host multiple slideshows with different styles and settings on the same page
+		$randomId = rand();
+
+		// Get stylesheet for printing
+		$style = '';
+		if($allSettings['style_style'] == 'custom' && isset($allSettings['style_custom']) && !empty($allSettings['style_custom'])){ // Custom style
+			$style = str_replace('%plugin-url%', SlideshowPluginMain::getPluginUrl(), $allSettings['style_custom']);
+		}else{ // Set style
+			$filePath = SlideshowPluginMain::getPluginPath() . '/style/' . __CLASS__ . '/style-' . $allSettings['style_style'] . '.css';
+			if(file_exists(SlideshowPluginMain::getPluginPath() . '/style/' . __CLASS__ . '/style-' . $allSettings['style_style'] . '.css')){
+				ob_start();
+				include($filePath);
+				$style = str_replace('%plugin-url%', SlideshowPluginMain::getPluginUrl(), ob_get_clean());
+			}
+		}
+
+		// Append the random ID to the slideshow container in the stylesheet, to identify multiple slideshows
+		if(!empty($style))
+			$style = str_replace('.slideshow_container', '.slideshow_container_' . $randomId, $style);
+
+		// Filter settings to only contain settings, then remove prefix
+		$settings = array();
+		if(is_array($allSettings) && count($allSettings) > 0)
+			foreach($allSettings as $key => $value)
+				if(SlideshowPluginPostType::$prefixes['settings'] == substr($key, 0, strlen(SlideshowPluginPostType::$prefixes['settings'])))
+					$settings[substr($key, strlen(SlideshowPluginPostType::$prefixes['settings']))] = $value;
+
+		// Include output file that stores output in $output.
+		$output = '';
+		ob_start();
+		include(SlideshowPluginMain::getPluginPath() . '/views/' . __CLASS__ . '/slideshow.php');
+		$output .= ob_get_clean();
+
+		// Enqueue flash object creation script
+		wp_enqueue_script(
+			'swfobject',
+			SlideshowPluginMain::getPluginUrl() . '/js/' . __CLASS__ . 'swfobject.js'
+		);
+
+		// Enqueue slideshow script
+		wp_enqueue_script(
+			'slideshow_script',
+			SlideshowPluginMain::getPluginUrl() . '/js/' . __CLASS__ . '/slideshow.js',
+			array('jquery')
+		);
+
+		// Return output
+		return $output;
+	}
+}
\ No newline at end of file