/** * Wrapping spine titles in an additional span for styling * * @param string $title Title of the spine * @param array $slidedeck The SlideDeck object being rendered * @param array $slide The Slide array * * @uses SlideDeckLens_Scaffold::is_valid() * @uses SlideDeckPlugin::slidedeck_is_dynamic() * * @return string */ function slidedeck_horizontal_spine_title($title, $slidedeck, $slide) { global $SlideDeckPlugin, $SlideDeckSlide; if ($this->is_valid($slidedeck['lens'])) { $title_text = $title; if (!$SlideDeckPlugin->slidedeck_is_dynamic($slidedeck)) { $custom_spine_title = get_post_meta($slide['id'], '_spine_title', true); if ($custom_spine_title) { $title_text = $custom_spine_title; } else { $title_text = ''; } } $title = slidedeck2_stip_tags_and_truncate_text($title_text, $slidedeck['options']['spineTitleLength']); $title = "<span class=\"sd2-spine-title\">{$title}</span>"; } return $title; }
/** * Render slides for SlideDecks of this type * * Loads the slides associated with this SlideDeck if it matches this Deck type and returns * a string of HTML markup. * * @param array $slides_arr Array of slides * @param object $slidedeck SlideDeck object * * @global $SlideDeckPlugin * * @uses SlideDeckPlugin::process_slide_content() * @uses Legacy::get_slides() * * @return string */ function slidedeck_get_slides($slides, $slidedeck) { global $SlideDeckPlugin; // Fail silently if not this Deck type if (!$this->is_valid($slidedeck['source'])) { return $slides; } // How many decks are on the page as of now. $deck_iteration = 0; if (isset($SlideDeckPlugin->SlideDeck->rendered_slidedecks[$slidedeck['id']])) { $deck_iteration = $SlideDeckPlugin->SlideDeck->rendered_slidedecks[$slidedeck['id']]; } // Slides associated with this SlideDeck $slides_nodes = $this->get_slides_nodes($slidedeck); $slide_counter = 1; if (is_array($slides_nodes)) { // Loop through all slide nodes to build a structured slides array foreach ($slides_nodes as &$slide_nodes) { $slide = array('source' => $this->name, 'title' => $slide_nodes['title'], 'created_at' => $slide_nodes['created_at']); $slide = array_merge($this->slide_node_model, $slide); // Look to see if an image is associated with this slide $has_image = false; $images = $SlideDeckPlugin->Lens->parse_html_for_images($slide_nodes['content']); if (!empty($images)) { $first_image = reset($images); $has_image = $first_image; } if ($has_image) { $thumbnail = $has_image; $full_image = preg_replace('/\\.com\\/[0-9]+x\\//', '.com/600x/', $has_image); $slide['classes'][] = "has-image"; $slide['thumbnail'] = $thumbnail; $slide['type'] = "image"; } else { $slide['classes'][] = "no-image"; } $slide_nodes['source'] = $slide['source']; $slide_nodes['type'] = $slide['type']; // Excerpt node if (!array_key_exists('excerpt', $slide_nodes) || empty($slide_nodes['excerpt'])) { $slide_nodes['excerpt'] = $slide_nodes['content']; } // Truncate excerpt node length $excerpt_length = $has_image ? $slidedeck['options']['excerptLengthWithImages'] : $slidedeck['options']['excerptLengthWithoutImages']; $slide_nodes['excerpt'] = slidedeck2_stip_tags_and_truncate_text($slide_nodes['excerpt'], $excerpt_length, "…"); // Truncate title node length $title_length = $has_image ? $slidedeck['options']['titleLengthWithImages'] : $slidedeck['options']['titleLengthWithoutImages']; $slide_nodes['title'] = slidedeck2_stip_tags_and_truncate_text($slide['title'], $title_length, "…"); if (!empty($slide_nodes['excerpt'])) { $slide['classes'][] = "has-excerpt"; } else { $slide['classes'][] = "no-excerpt"; } if (!empty($slide_nodes['title'])) { $slide['classes'][] = "has-title"; } else { $slide['classes'][] = "no-title"; } // Set image node if ($has_image) { $slide_nodes['image'] = $full_image; } // Set link target node $slide_nodes['target'] = $slidedeck['options']['linkTarget']; $slide['content'] = $SlideDeckPlugin->Lens->process_template($slide_nodes, $slidedeck); $slide_counter++; $slides[] = $slide; } } return $slides; }
/** * Render slides for SlideDecks of this type * * Loads the slides associated with this SlideDeck if it matches this Deck type and returns * a string of HTML markup. * * @param array $slides_arr Array of slides * @param object $slidedeck SlideDeck object * * @global $SlideDeckPlugin * * @uses SlideDeckPlugin::process_slide_content() * @uses Legacy::get_slides_nodes() * * @return string */ function slidedeck_get_slides($slides, $slidedeck) { global $SlideDeckPlugin; // Fail silently if not this Deck type if (!$this->is_valid($slidedeck['source'])) { return $slides; } // How many decks are on the page as of now. $deck_iteration = 0; if (isset($SlideDeckPlugin->SlideDeck->rendered_slidedecks[$slidedeck['id']])) { $deck_iteration = $SlideDeckPlugin->SlideDeck->rendered_slidedecks[$slidedeck['id']]; } // Slides associated with this SlideDeck $slides_nodes = $this->get_slides_nodes($slidedeck); $slide_counter = 1; // set the first slide flag $SlideDeckPlugin->is_first_slide = true; foreach ((array) $slides_nodes as $slide_nodes) { $slide = array('source' => $this->name, 'title' => $slide_nodes['video_meta']['title'], 'thumbnail' => (string) $slide_nodes['video_meta']['thumbnail'], 'created_at' => $slide_nodes['created_at'], 'classes' => array('has-image'), 'type' => 'video'); $slide = array_merge($this->slide_node_model, $slide); $slide_nodes['source'] = $slide['source']; $slide_nodes['type'] = $slide['type']; // In-line styles to apply to the slide DD element $slide_styles = array(); $slide_nodes['slide_counter'] = $slide_counter; $slide_nodes['deck_iteration'] = $deck_iteration; $slide['title'] = $slide_nodes['title'] = slidedeck2_stip_tags_and_truncate_text($slide_nodes['video_meta']['title'], $slidedeck['options']['titleLengthWithImages']); $slide_nodes['permalink'] = $slide_nodes['video_meta']['permalink']; $slide_nodes['excerpt'] = slidedeck2_stip_tags_and_truncate_text($slide_nodes['video_meta']['description'], $slidedeck['options']['excerptLengthWithImages']); $slide_nodes['image'] = $slide_nodes['video_meta']['full_image']; // Build an in-line style tag if needed if (!empty($slide_styles)) { foreach ($slide_styles as $property => $value) { $slide['styles'] .= "{$property}:{$value};"; } } if (!empty($slide['title'])) { $slide['classes'][] = "has-title"; } else { $slide['classes'][] = "no-title"; } if (!empty($slide_nodes['video_meta']['description'])) { $slide['classes'][] = "has-excerpt"; } else { $slide['classes'][] = "no-excerpt"; } // Set link target node $slide_nodes['target'] = $slidedeck['options']['linkTarget']; $slide['content'] = $SlideDeckPlugin->Lens->process_template($slide_nodes, $slidedeck); $slide_counter++; $SlideDeckPlugin->is_first_slide = false; $slides[] = $slide; } return $slides; }
/** * Render slides for SlideDecks of this type * * Loads the slides associated with this SlideDeck if it matches this Deck type and returns * a string of HTML markup. * * @param array $slides_arr Array of slides * @param object $slidedeck SlideDeck object * * @global $SlideDeckPlugin * * @uses SlideDeckPlugin::process_slide_content() * @uses Legacy::get_slides() * * @return string */ function slidedeck_get_slides($slides, $slidedeck) { global $SlideDeckPlugin; // How many decks are on the page as of now. $deck_iteration = $SlideDeckPlugin->SlideDeck->rendered_slidedecks[$slidedeck['id']]; // Fail silently if not this Deck type if ($slidedeck['type'] != $this->type) { return $slides; } // Adding footer scripts for the preview. add_action("slidedeck_print_footer_scripts", array(&$this, 'slidedeck_print_footer_scripts'), 9); // Slides associated with this SlideDeck $slides_nodes = $this->get_slides($slidedeck); $slide_counter = 1; foreach ((array) $slides_nodes as $slide_nodes) { $slide = array('title' => $slide_nodes['meta']['title'], 'styles' => "", 'classes' => array(), 'content' => "", 'thumbnail' => (string) $slide_nodes['meta']['thumbnail']); // In-line styles to apply to the slide DD element $slide_styles = array(); $slide_nodes['slide_counter'] = $slide_counter; $slide_nodes['deck_iteration'] = $deck_iteration; $slide['title'] = $slide_nodes['title'] = slidedeck2_stip_tags_and_truncate_text($slide_nodes['meta']['title'], $slidedeck['options']['titleLength']); $slide_nodes['permalink'] = $slide_nodes['meta']['permalink']; $slide_nodes['excerpt'] = slidedeck2_stip_tags_and_truncate_text($slide_nodes['meta']['description'], $slidedeck['options']['descriptionLength']); $slide_nodes['image'] = $slide_nodes['meta']['full_image']; // Build an in-line style tag if needed if (!empty($slide_styles)) { foreach ($slide_styles as $property => $value) { $slide['styles'] .= "{$property}:{$value};"; } } if (!empty($slide['title'])) { $slide['classes'][] = "has-title"; } else { $slide['classes'][] = "no-title"; } if (!empty($slide_nodes['meta']['description'])) { $slide['classes'][] = "has-excerpt"; } else { $slide['classes'][] = "no-excerpt"; } // Set link target node $slide_nodes['target'] = $slidedeck['options']['linkTarget']; $slide['content'] = $SlideDeckPlugin->Lens->process_template($slide_nodes, $slidedeck); $slide_counter++; $slides[] = $slide; } return $slides; }
/** * Get slides for SlideDecks of this type * * Loads the slides associated with this SlideDeck if it matches this Deck type and returns * an array of structured slide data. * * @param array $slides_arr Array of slides * @param object $slidedeck SlideDeck object * * @global $SlideDeckPlugin * * @uses SlideDeckPlugin::process_slide_content() * @uses SlideDeck_Posts::get_slides() * * @return array */ function slidedeck_get_slides($slides, $slidedeck) { global $SlideDeckPlugin; // Fail silently if not this Deck type if (!$this->is_valid($slidedeck['source'])) { return $slides; } // How many decks are on the page as of now. $deck_iteration = 0; if (isset($SlideDeckPlugin->SlideDeck->rendered_slidedecks[$slidedeck['id']])) { $deck_iteration = $SlideDeckPlugin->SlideDeck->rendered_slidedecks[$slidedeck['id']]; } $slides_nodes = $this->get_slides_nodes($slidedeck); // Current slide $slide_counter = 1; // Loop through all slide nodes to build a structured slides array foreach ($slides_nodes as &$slide_nodes) { $slide = array('source' => $this->name, 'title' => $slide_nodes['title'], 'created_at' => $slide_nodes['created_at']); $slide = array_merge($this->slide_node_model, $slide); // Look to see if an image is associated with this slide $has_image = $this->get_image($slide_nodes, $slidedeck); /** * If the users would like to override their post content with their * post excerpt. We love our users. Really we do! */ if (isset($slidedeck['options']['use-custom-post-excerpt']) && !empty($slidedeck['options']['use-custom-post-excerpt'])) { if ($slidedeck['options']['use-custom-post-excerpt'] && !empty($post->post_excerpt)) { $slide_nodes['content'] = $slide_nodes['excerpt']; } } $slide_nodes['content'] = strip_shortcodes($slide_nodes['content']); if ($has_image) { $slide['classes'][] = "has-image"; $slide['type'] = "image"; $slide['thumbnail'] = $this->_get_post_thumbnail($slide_nodes['id'], $has_image); } else { $slide['classes'][] = "no-image"; } $slide_nodes['source'] = $slide['source']; $slide_nodes['type'] = $slide['type']; // Excerpt node if (!array_key_exists('excerpt', $slide_nodes) || empty($slide_nodes['excerpt'])) { $slide_nodes['excerpt'] = $slide_nodes['content']; } // Truncate excerpt node length $excerpt_length = $has_image ? $slidedeck['options']['excerptLengthWithImages'] : $slidedeck['options']['excerptLengthWithoutImages']; $slide_nodes['excerpt'] = slidedeck2_stip_tags_and_truncate_text($slide_nodes['excerpt'], $excerpt_length, "…"); // Truncate title node length $title_length = $has_image ? $slidedeck['options']['titleLengthWithImages'] : $slidedeck['options']['titleLengthWithoutImages']; $slide_nodes['title'] = slidedeck2_stip_tags_and_truncate_text($slide['title'], $title_length, "…"); $slide_nodes['title'] = convert_chars(wptexturize($slide_nodes['title'])); if (!empty($slide_nodes['excerpt'])) { $slide['classes'][] = "has-excerpt"; } else { $slide['classes'][] = "no-excerpt"; } if (!empty($slide_nodes['title'])) { $slide['classes'][] = "has-title"; } else { $slide['classes'][] = "no-title"; } // Set image node if ($has_image) { $slide_nodes['image'] = $has_image; } // Set link target node $slide_nodes['target'] = $slidedeck['options']['linkTarget']; $slide['content'] = $SlideDeckPlugin->Lens->process_template($slide_nodes, $slidedeck); $slide_counter++; $slides[] = $slide; } return $slides; }
/** * Render slides for SlideDecks of this type * * Loads the slides associated with this SlideDeck if it matches this Deck type and returns * a string of HTML markup. * * @param array $slides_arr Array of slides * @param object $slidedeck SlideDeck object * * @global $SlideDeckPlugin * * @uses SlideDeckPlugin::process_slide_content() * @uses Legacy::get_slides() * * @return string */ function slidedeck_get_slides($slides, $slidedeck) { global $SlideDeckPlugin; // How many decks are on the page as of now. $deck_iteration = $SlideDeckPlugin->SlideDeck->rendered_slidedecks[$slidedeck['id']]; // Fail silently if not this Deck type if ($slidedeck['type'] != $this->type) { return $slides; } // Slides associated with this SlideDeck $slides_nodes = $this->get_slides($slidedeck); $slide_counter = 1; if (is_array($slides_nodes)) { foreach ($slides_nodes as &$slide_nodes) { $slide = array('title' => $slide_nodes['title'], 'styles' => "", 'classes' => array('has-image'), 'content' => "", 'thumbnail' => (string) $slide_nodes['thumbnail']); // In-line styles to apply to the slide DD element $slide_styles = array('background-image' => 'url(' . $slide_nodes['image'] . ')'); // Build an in-line style tag if needed if (!empty($slide_styles)) { foreach ($slide_styles as $property => $value) { $slide['styles'] .= "{$property}:{$value};"; } } $slide['title'] = $slide_nodes['title'] = slidedeck2_stip_tags_and_truncate_text($slide_nodes['title'], $slidedeck['options']['titleLengthWithImages'], "…"); $slide_nodes['content'] = isset($slide_nodes['description']) ? $slide_nodes['description'] : ""; $slide_nodes['excerpt'] = slidedeck2_stip_tags_and_truncate_text($slide_nodes['content'], $slidedeck['options']['excerptLengthWithImages'], "…"); if (!empty($slide_nodes['title'])) { $slide['classes'][] = "has-title"; } else { $slide['classes'][] = "no-title"; } if (!empty($slide_nodes['description'])) { $slide['classes'][] = "has-excerpt"; } else { $slide['classes'][] = "no-excerpt"; } // Set link target node $slide_nodes['target'] = $slidedeck['options']['linkTarget']; $slide['content'] = $SlideDeckPlugin->Lens->process_template($slide_nodes, $slidedeck); $slide_counter++; $slides[] = $slide; } } return $slides; }
/** * Hook into register_activation_hook action * * NOTE: DO NOT RELY ON THIS PLUGIN HOOK FOR DATABASE MIGRATIONS * ------------------------------------------------------------- * WordPress will not run the activation hook properly when it is bulk upgrading plugins * so database migrations and the like will not run if the user has selected to bulk update * all of their SlideDeck plugins at once. * * Put code here that needs to happen when your plugin is first activated * (database * creation, permalink additions, etc.) * * @uses wp_remote_fopen() */ static function activate() { SlideDeckPlugin::load_constants(); include_once dirname(__FILE__) . '/lib/template-functions.php'; if (!is_dir(SLIDEDECK2_CUSTOM_LENS_DIR)) { if (is_writable(dirname(SLIDEDECK2_CUSTOM_LENS_DIR))) { mkdir(SLIDEDECK2_CUSTOM_LENS_DIR, 0777); } } self::check_plugin_updates(); $installed_version = get_option("slidedeck_version", false); $installed_license = get_option("slidedeck_license", false); if ($installed_license) { if (strtolower($installed_license) == "lite" && strtolower(self::$license) != "lite") { // Upgrade from Lite to PRO slidedeck2_km("Upgrade to PRO", array('license' => self::$license, 'version' => self::$version)); } } // First time installation if (!$installed_version) { slidedeck2_km("SlideDeck Installed", array('license' => self::$license, 'version' => self::$version)); // Setup the cohorts data self::set_cohort_data(); } if ($installed_version && version_compare(self::$version, $installed_version, '>')) { /** * 2.0.x to 2.1.x upgrade process... */ if (version_compare($installed_version, '2.1', '<')) { if (!class_exists("SlideDeck")) { include dirname(__FILE__) . '/classes/slidedeck.php'; } if (!class_exists("SlideDeckSlideModel")) { include dirname(__FILE__) . '/sources/custom/slide-model.php'; } global $SlideDeckPlugin, $wpdb; // Import Media Library and List of Videos decks $SlideDeck = new SlideDeck(); $SlideDeckSlide = new SlideDeckSlideModel(); $SlideDeckPlugin = (object) array(); $SlideDeckPlugin->SlideDeck = $SlideDeck; $slidedecks = $SlideDeck->get(null, 'post_title', 'ASC', 'publish'); foreach ($slidedecks as $slidedeck) { $sources = $slidedeck['source']; if (!is_array($sources)) { $sources = array($sources); } // Import Media Library SlideDecks if (in_array("medialibrary", $sources) && !in_array("custom", $sources)) { $media_ids = $slidedeck['options']['medialibrary_ids']; $slide_counter = 0; foreach ($media_ids as $media_id) { $media_post = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->posts} WHERE ID = %d", $media_id)); // Get the image meta data $meta_data = wp_get_attachment_metadata($media_id); // Create the slide $slide_id = $SlideDeckSlide->create($slidedeck['id'], "image", array('menu_order' => $slide_counter + 1, 'post_title' => $media_post->post_title, 'post_excerpt' => $media_post->post_excerpt, 'post_content' => $media_post->post_excerpt, 'post_date' => $media_post->post_date)); // Associate the image with the slide update_post_meta($slide_id, "_image_attachment", $media_id); update_post_meta($slide_id, "_image_source", "upload"); update_post_meta($slide_id, "_image_url", ""); $_layout = "body-text"; $_caption_position = "left"; switch ($slidedeck['lens']) { case "block-title": $_layout = "body-text"; $_caption_position = "left"; break; case "fashion": $_layout = "body-text"; $_caption_position = "left"; break; case "half-moon": $_layout = "body-text"; $_caption_position = "right"; break; case "o-town": $_layout = "body-text"; $_caption_position = "left"; break; case "proto": $_layout = "body-text"; $_caption_position = "left"; break; } update_post_meta($slide_id, "_layout", $_layout); update_post_meta($slide_id, "_caption_position", $_caption_position); $slidedeck['options']['total_slides'] = 999; $slide_counter++; } // Update the source add_post_meta($slidedeck['id'], "slidedeck_source", "custom"); } // Import Video List SlideDecks if (in_array("listofvideos", $sources) && !in_array("custom", $sources)) { $video_urls = get_post_meta($slidedeck['id'], "slidedeck_list_of_videos", true); $video_urls = explode("\n", $video_urls); $video_urls = array_map("trim", $video_urls); $slide_counter = 0; foreach ($video_urls as $video_url) { $video_meta = $SlideDeck->get_video_meta_from_url($video_url); // Create the slide $slide_id = $SlideDeckSlide->create($slidedeck['id'], "video", array('menu_order' => $slide_counter + 1, 'post_title' => slidedeck2_stip_tags_and_truncate_text($video_meta['title'], $slidedeck['options']['titleLength']), 'post_excerpt' => slidedeck2_stip_tags_and_truncate_text($video_meta['description'], $slidedeck['options']['descriptionLength']), 'post_content' => slidedeck2_stip_tags_and_truncate_text($video_meta['description'], $slidedeck['options']['descriptionLength']))); update_post_meta($slide_id, "_permalink", $video_meta['permalink']); update_post_meta($slide_id, "_video_url", $video_url); update_post_meta($slide_id, "_video_meta", $video_meta); $_layout = "body-text"; $_caption_position = "left"; switch ($slidedeck['lens']) { case "fashion": $_layout = "body-text"; $_caption_position = "left"; break; case "o-town": $_layout = "body-text"; $_caption_position = "left"; break; case "video": $_layout = "body-text"; $_caption_position = "left"; break; } update_post_meta($slide_id, "_layout", $_layout); update_post_meta($slide_id, "_caption_position", $_caption_position); $slidedeck['options']['total_slides'] = 999; $slidedeck['options']['show-excerpt'] = true; $slidedeck['options']['show-title'] = true; $slidedeck['options']['show-readmore'] = true; $slide_counter++; } // Update the source add_post_meta($slidedeck['id'], "slidedeck_source", "custom"); // Proto video lens is being deprecated for custom SlideDecks if ($slidedeck['lens'] == "video") { update_post_meta($slidedeck['id'], "slidedeck_lens", "tool-kit"); } } update_post_meta($slidedeck['id'], "slidedeck_options", $slidedeck['options']); } // End of Import Media Library and List of Videos decks // Update various cache settings and durations... $SlideDeck = new SlideDeck(); $slidedecks = $SlideDeck->get(null, 'post_title', 'ASC', 'publish'); foreach ($slidedecks as $slidedeck) { $sources = $slidedeck['source']; if (!is_array($sources)) { $sources = array($sources); } if (count($slidedeck['source']) > 1) { continue; } // Update cache duration option name if (isset($slidedeck['options']['feedCacheDuration'])) { $slidedeck['options']['cache_duration'] = $slidedeck['options']['feedCacheDuration']; unset($slidedeck['options']['feedCacheDuration']); } // Update Twitter source meta if (in_array('twitter', $sources)) { $slidedeck['options']['twitter_search_or_user'] = $slidedeck['options']['search_or_user']; unset($slidedeck['options']['search_or_user']); } // Adjust cache to minutes instead of seconds $intersect = array_intersect(array('twitter', 'youtube', 'vimeo', 'dailymotion'), $sources); if (!empty($intersect)) { $slidedeck['options']['cache_duration'] = round($slidedeck['options']['cache_duration'] / 60); } update_post_meta($slidedeck['id'], "slidedeck_options", $slidedeck['options']); } // End of Update various cache settings and durations... } // Upgrade to new version slidedeck2_km("SlideDeck Upgraded", array('license' => self::$license, 'version' => self::$version)); } update_option("slidedeck_version", self::$version); update_option("slidedeck_license", self::$license); /** * Installation timestamp: SlideDeck 2 */ $existing_timestamp = get_option('slidedeck2_installed', false); if (!$existing_timestamp) { update_option('slidedeck2_installed', time()); } /** * Installation timestamp: SlideDeck 2 Paid */ $existing_timestamp = get_option('slidedeck2_paid_installed', false); if (!$existing_timestamp) { update_option('slidedeck2_paid_installed', time()); } // Activation slidedeck2_km("SlideDeck Activated", array('license' => self::$license, 'version' => self::$version)); }
/** * Get slides for SlideDecks of this type * * Loads the slides associated with this SlideDeck if it matches this Deck type and returns * an array of structured slide data. * * @param array $slides_arr Array of slides * @param object $slidedeck SlideDeck object * * @global $SlideDeckPlugin * * @uses SlideDeckPlugin::process_slide_content() * @uses SlideDeck_Posts::get_slides() * * @return array */ function slidedeck_get_slides($slides, $slidedeck) { global $SlideDeckPlugin; // Fail silently if not this Deck type if (!$this->is_valid($slidedeck['source'])) { return $slides; } // How many decks are on the page as of now. $deck_iteration = 0; if (isset($SlideDeckPlugin->SlideDeck->rendered_slidedecks[$slidedeck['id']])) { $deck_iteration = $SlideDeckPlugin->SlideDeck->rendered_slidedecks[$slidedeck['id']]; } $slides_nodes = $this->get_slides_nodes($slidedeck); // Current slide $slide_counter = 1; // Loop through all slide nodes to build a structured slides array foreach ($slides_nodes as &$slide_nodes) { $slide = array('source' => $this->name, 'title' => $slide_nodes['title'], 'created_at' => $slide_nodes['created_at']); $slide = array_merge($this->slide_node_model, $slide); // Look to see if an image is associated with this slide $has_image = $this->get_image($slide_nodes); // Look to see if a video is associated with this slide $has_video = isset($slide_nodes['video']) ? $slide_nodes['video'] : false; if ($has_image) { $slide['classes'][] = "has-image"; $slide['thumbnail'] = $has_image; $slide['type'] = "image"; } else { $slide['classes'][] = "no-image"; } if ($has_video) { $slide_nodes['video_meta'] = $this->get_video_meta_from_url($has_video); $slide['classes'][] = "has-video"; $slide['type'] = "video"; $slide_nodes['slide_counter'] = $slide_counter; $slide_nodes['deck_iteration'] = $deck_iteration; } $slide_nodes['source'] = $slide['source']; $slide_nodes['type'] = $slide['type']; // Excerpt node if (!array_key_exists('excerpt', $slide_nodes) || empty($slide_nodes['excerpt'])) { $slide_nodes['excerpt'] = $slide_nodes['content']; } // Truncate excerpt node length $excerpt_length = $has_image ? $slidedeck['options']['excerptLengthWithImages'] : $slidedeck['options']['excerptLengthWithoutImages']; $slide_nodes['excerpt'] = slidedeck2_stip_tags_and_truncate_text($slide_nodes['excerpt'], $excerpt_length, "…"); // Truncate title node length $title_length = $has_image ? $slidedeck['options']['titleLengthWithImages'] : $slidedeck['options']['titleLengthWithoutImages']; $slide_nodes['title'] = slidedeck2_stip_tags_and_truncate_text($slide['title'], $title_length, "…"); if (!empty($slide_nodes['excerpt'])) { $slide['classes'][] = "has-excerpt"; } else { $slide['classes'][] = "no-excerpt"; } if (!empty($slide_nodes['title'])) { $slide['classes'][] = "has-title"; } else { $slide['classes'][] = "no-title"; } // Set image node if ($has_image) { $slide_nodes['image'] = $has_image; } // Set link target node $slide_nodes['target'] = $slidedeck['options']['linkTarget']; $slide['content'] = $SlideDeckPlugin->Lens->process_template($slide_nodes, $slidedeck); $slide_counter++; $slides[] = $slide; } return $slides; }
/** * Get slides for SlideDecks of this type * * Loads the slides associated with this SlideDeck if it matches this Deck type and returns * an array of structured slide data. * * @param array $slides_arr Array of slides * @param object $slidedeck SlideDeck object * * @global $SlideDeckPlugin * * @uses SlideDeckPlugin::process_slide_content() * @uses SlideDeck_Posts::get_slides() * * @return array */ function slidedeck_get_slides($slides, $slidedeck) { global $SlideDeckPlugin; // Fail silently if not this Deck type if ($slidedeck['type'] != $this->type) { return $slides; } // Slides associated with this SlideDeck switch ($slidedeck['source']) { case "posts": $slides_nodes = $this->get_posts_slides($slidedeck); break; case "rss": $slides_nodes = $this->get_rss_slides($slidedeck); break; case "gplus": $slides_nodes = $this->get_gplus_slides($slidedeck); break; } // Loop through all slide nodes to build a structured slides array foreach ($slides_nodes as &$slide_nodes) { $slide = array('title' => $slide_nodes['title'], 'styles' => "", 'classes' => array(), 'content' => ""); // Look to see if an image is associated with this slide $has_image = $this->get_image($slide_nodes, $slidedeck); if ($has_image) { $slide['styles'] = 'background-image: url(' . $has_image . ');'; $slide['classes'][] = "has-image"; $slide['thumbnail'] = $has_image; if ($slidedeck['source'] == "posts") { $slide['thumbnail'] = $this->_get_post_thumbnail($slide_nodes['id'], $has_image); } } else { $slide['classes'][] = "no-image"; } // Excerpt node if (!array_key_exists('excerpt', $slide_nodes) || empty($slide_nodes['excerpt'])) { $slide_nodes['excerpt'] = $slide_nodes['content']; } // Truncate excerpt node length $excerpt_length = $has_image ? $slidedeck['options']['excerptLengthWithImages'] : $slidedeck['options']['excerptLengthWithoutImages']; $slide_nodes['excerpt'] = slidedeck2_stip_tags_and_truncate_text($slide_nodes['excerpt'], $excerpt_length, "…"); // Truncate title node length $title_length = $has_image ? $slidedeck['options']['titleLengthWithImages'] : $slidedeck['options']['titleLengthWithoutImages']; $slide_nodes['title'] = slidedeck2_stip_tags_and_truncate_text($slide['title'], $title_length, "…"); if (!empty($slide_nodes['excerpt'])) { $slide['classes'][] = "has-excerpt"; } else { $slide['classes'][] = "no-excerpt"; } if (!empty($slide_nodes['title'])) { $slide['classes'][] = "has-title"; } else { $slide['classes'][] = "no-title"; } // Set image node if ($has_image) { $slide_nodes['image'] = $has_image; } // Set link target node $slide_nodes['target'] = $slidedeck['options']['linkTarget']; $slide['content'] = $SlideDeckPlugin->Lens->process_template($slide_nodes, $slidedeck); $slides[] = $slide; } return $slides; }