web/wp-content/plugins/slideshow-jquery-image-gallery/classes/SlideshowPluginSlideInserter.php
changeset 194 32102edaa81b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/slideshow-jquery-image-gallery/classes/SlideshowPluginSlideInserter.php	Mon Nov 19 18:26:13 2012 +0100
@@ -0,0 +1,225 @@
+<?php
+/**
+ * Class SlideshowPluginSlideInserter
+ *
+ * TODO This class will probably need to be renamed to SlideshowPluginSlideHandler to explain more functionality
+ * TODO than just inserting slides. (Show and delete functionality should be applied here as well)
+ * @author Stefan Boonstra
+ * @version 03-10-2012
+ */
+class SlideshowPluginSlideInserter {
+
+	/** Flag to see if enqueue function has been called */
+	private static $enqueuedFiles;
+
+	/**
+	 * Returns the html for showing the image insert button.
+	 * Enqueues scripts unless $enqueueFiles is set to false.
+	 *
+	 * @param boolean $enqueueFiles
+	 * @return String $button
+	 */
+	static function getImageSlideInsertButton($enqueueFiles = true){
+		if($enqueueFiles)
+			self::enqueueFiles();
+
+		// Put popup html in footer
+		add_action('admin_footer', array(__CLASS__, 'includePopup'));
+
+		// Return button html
+		ob_start();
+		include(SlideshowPluginMain::getPluginPath() . '/views/' . __CLASS__ . '/insert-image-button.php');
+		return ob_get_clean();
+	}
+
+	/**
+	 * Returns the html for showing the text insert button.
+	 * Enqueues scripts unless $enqueueFiles is set to false.
+	 *
+	 * @param boolean $enqueueFiles
+	 * @return String $button
+	 */
+	static function getTextSlideInsertButton($enqueueFiles = true){
+		if($enqueueFiles)
+			self::enqueueFiles();
+
+		// Return button html
+		ob_start();
+		include(SlideshowPluginMain::getPluginPath() . '/views/' . __CLASS__ . '/insert-text-button.php');
+		return ob_get_clean();
+	}
+
+	/**
+	 * Returns the html for showing the video insert button.
+	 * Enqueues scripts unless $enqueueFiles is set to false.
+	 *
+	 * @param boolean $enqueueFiles
+	 * @return String $button
+	 */
+	static function getVideoSlideInsertButton($enqueueFiles = true){
+		if($enqueueFiles)
+			self::enqueueFiles();
+
+		// Return button html
+		ob_start();
+		include(SlideshowPluginMain::getPluginPath() . '/views/' . __CLASS__ . '/insert-video-button.php');
+		return ob_get_clean();
+	}
+
+	/**
+	 * This function is registered in the SlideshowPluginAjax class
+	 * and deletes slides with a particular $_POST['slideId']
+	 */
+	static function deleteSlide(){
+		if((!isset($_POST['slideId']) || !is_numeric($_POST['slideId'])) ||
+			(!isset($_POST['postId']) || !is_numeric($_POST['postId'])))
+			die;
+
+		$search = 'slide_' . $_POST['slideId'] . '_';
+		$settings = get_post_meta($_POST['postId'], 'settings', true);
+		if(is_array($settings) && count($settings) > 0){
+			foreach($settings as $key => $setting)
+				if(strtolower(substr($key, 0, strlen($search))) == strtolower($search))
+					unset($settings[$key]);
+		}
+		update_post_meta($_POST['postId'], 'settings', $settings);
+
+		die;
+	}
+
+	/**
+	 * This function is registered in the SlideshowPluginAjax class
+	 * and prints the results from the search query
+	 */
+	static function printSearchResults(){
+		// Numberposts and offset
+		$numberPosts = 10;
+		$offset = 0;
+		if(isset($_POST['offset']))
+			$offset = $_POST['offset'];
+
+		// Get attachments with a title alike the search string, needs to be filtered
+		add_filter('posts_where', array(__CLASS__, 'printSearchResultsWhereFilter'));
+		$attachments = get_posts(array(
+			'numberposts' => $numberPosts + 1,
+			'offset' => $offset,
+			'orderby' => 'post_date',
+			'order' => 'DESC',
+			'post_type' => 'attachment',
+			'suppress_filters' => false
+		));
+		remove_filter('posts_where', array(__CLASS__, 'printSearchResultsWhereFilter'));
+
+		// Check if there are enough attachments to print a 'Load more images' button
+		$loadMoreResults = false;
+		if(count($attachments) > $numberPosts){
+			array_pop($attachments);
+			$loadMoreResults = true;
+		}
+
+		// Print results to the screen
+		if(count($attachments) > 0){
+			foreach($attachments as $attachment){
+				$image = wp_get_attachment_image_src($attachment->ID);
+				if(!$image[3]) $image[0] = SlideshowPluginMain::getPluginUrl() . '/images/SlideshowPluginPostType/no-img.png';
+				echo '<tr valign="top">
+					<td class="image">
+						<img width="60" height="60" src="' . $image[0] . '" class="attachment" alt="' . $attachment->post_title . '" title="' . $attachment->post_title . '">
+					</td>
+					<td class="column-title">
+						<strong class="title">
+							' . $attachment->post_title . '
+						</strong>
+						<p class="description">' . $attachment->post_content . '</p>
+					</td>
+					<td class="insert-button">
+						<input
+							type="button"
+							id="' . $attachment->ID . '"
+							class="insert-attachment button-secondary"
+							value="' . __('Insert', 'slideshow-plugin') . '"
+						/>
+					</td>
+				</tr>';
+			}
+			if($loadMoreResults){
+				echo '<tr>
+					<td colspan="3" style="text-align: center;">
+						<button class="button-secondary load-more-results ' . ($offset + $numberPosts) . '" >
+							' . __('Load more results', 'slideshow-plugin') . '
+						</button>
+					</td>
+				</tr>';
+			}
+		} else {
+			echo '<tr>
+				<td colspan="3" style="text-align: center;">
+					<a href="' . admin_url() . 'media-new.php" target="_blank">
+						' . __('No images were found, click here to upload some.', 'slideshow-plugin') . '
+					</a>
+				</td>
+			</tr>';
+		}
+
+		die;
+	}
+
+	/**
+	 * Applies a where clause on the get_posts call from self::printSearchResults()
+	 *
+	 * @param string $where
+	 * @return string $where
+	 */
+	static function printSearchResultsWhereFilter($where){
+		global $wpdb;
+
+		if(isset($_POST['search']))
+			$where .= $wpdb->prepare(
+				" AND (post_title LIKE '%%%s%%' OR ID LIKE '%%%s%%') ",
+				$_POST['search'],
+				$_POST['search']
+			);
+
+		return $where;
+	}
+
+	/**
+	 * Include popup, needs to be called in the footer
+	 */
+	static function includePopup(){
+		include(SlideshowPluginMain::getPluginPath() . '/views/' . __CLASS__ . '/search-popup.php');
+	}
+
+	/**
+	 * Enqueues styles and scripts necessary for the media upload button.
+	 */
+	static function enqueueFiles(){
+		// Check if already enqueued
+		if(self::$enqueuedFiles)
+			return;
+
+		// Enqueue style
+		wp_enqueue_style(
+			'slideshow-slide-inserter',
+			SlideshowPluginMain::getPluginUrl() . '/style/' . __CLASS__ . '/slide-inserter.css'
+		);
+
+		// Enqueue insert button script
+		wp_enqueue_script(
+			'slideshow-slide-inserter',
+			SlideshowPluginMain::getPluginUrl() . '/js/' . __CLASS__ . '/slide-inserter.js',
+			array('jquery')
+		);
+
+		wp_localize_script(
+			'slideshow-slide-inserter',
+			'SlideInserterTranslations',
+			array(
+				'confirmMessage' => __('Are you sure you want to delete this slide?', 'slideshow-plugin')
+			)
+		);
+
+		// Set enqueued to true
+		self::$enqueuedFiles = true;
+	}
+}
\ No newline at end of file