die('<h1>Forbidden</h1>'); } // determine if there are any slides not attached properly to slide groups, and re-attach by inferring // ownership from the legacy data $ts_ug_201_wpdb =& $GLOBALS['wpdb']; $orphaned_slides_query = "SELECT ID, post_title, post_name, post_content, post_status FROM {$ts_ug_201_wpdb->prefix}posts\n\tLEFT JOIN {$ts_ug_201_wpdb->prefix}term_relationships\n\t\tON {$ts_ug_201_wpdb->prefix}posts.ID = {$ts_ug_201_wpdb->prefix}term_relationships.object_id\n\tWHERE post_type = 'total_slider_slide'\n\tAND term_taxonomy_id IS NULL\n"; $orphaned_slides = $ts_ug_201_wpdb->get_results($orphaned_slides_query, OBJECT); if (is_array($orphaned_slides) && count($orphaned_slides) > 0) { // pull in legacy slides, so we can title + description match slides to determine their correct slide group ownership // for the new data format $legacy_slide_groups = get_option('total_slider_slide_groups'); $legacy_slides = array(); if (is_array($legacy_slide_groups) && count($legacy_slide_groups) > 0) { foreach ($legacy_slide_groups as $lsg) { if (is_a($lsg, 'Total_Slide_Group')) { $lsg->slug = Total_Slider::sanitize_slide_group_slug($lsg->slug); $legacy_slides[$lsg->slug] = get_option('total_slider_slides_' . $lsg->slug); } } // now that we have pulled legacy slide groups and their slides, we can match orphaned slides to these foreach ($orphaned_slides as $orphan) { $found_parent = false; // loop through all legacy slide groups foreach ($legacy_slides as $slug => $lsg) { // this still gives us groups -- slides are one level down if ($found_parent) { break; } if (is_array($lsg) && count($lsg) > 0) { foreach ($lsg as $ls) { if ($found_parent) {
/** * Update the Widget settings with the new selected Slide Group. * * @param array $new_instance * @param array $old_instance */ public function update($new_instance, $old_instance) { if ('**INVALID**' != $new_instance['groupSlug']) { return array('groupSlug' => Total_Slider::sanitize_slide_group_slug($new_instance['groupSlug'])); } else { return $old_instance; } }
/** * Fetch this Slide Group's properties, including slug, name, templateLocation, template, from the database. * * This uses the slug provided in the constructor to load in this Slide Group's other properties. * * @return boolean * */ public function load() { $term = get_term_by('slug', $this->originalSlug, 'total_slider_slide_group'); if (!$term) { return false; } $this->name = $term->name; $this->slug = Total_Slider::sanitize_slide_group_slug($term->slug); $this->term_id = intval($term->term_id); // get template from wp_option /* The slide group template and template location are stored in a wp_option similarly named to that which was formerly (1.x) used for the actual slide data. This is a string, delimited by a pipe (|) character, with the templateLocation ('builtin','theme','downloaded','legacy') before the pipe, and the template slug after the pipe. */ $group_options = get_option('total_slider_grptpl_' . $this->slug); if (false === $group_options) { // set default template information if none found $this->set_default_template(); } else { $group_options_expl = explode('|', $group_options); if (!is_array($group_options_expl) || count($group_options_expl) < 1) { $this->set_default_template(); } else { foreach ($group_options_expl as $key => $opt) { if ($key == 0) { // templateLocation if (!in_array($opt, Total_Slider::$allowed_template_locations)) { $this->set_default_template(); break; } $this->templateLocation = $opt; } if ($key == 1) { // template slug $this->template = Total_Slider_Template::sanitize_slug($opt); } } } } return true; }
if (is_array($legacy_slide_groups) && count($legacy_slide_groups) > 0) { $legacy_slide_group_names = array(); // to detect and handle Slide Group name clashes, which are now a problem with the 2.0 data format foreach ($legacy_slide_groups as $key => $legacy_group) { if (is_a($legacy_group, 'Total_Slide_Group')) { // convert this group to the new format $new_slug = Total_Slider::sanitize_slide_group_slug($legacy_group->slug); $legacy_slides = get_option('total_slider_slides_' . $new_slug); $new_group = new Total_Slide_Group($new_slug, $legacy_group->name); $new_group->template = $legacy_group->template; $new_group->templateLocation = $legacy_group->templateLocation; // if this legacy group name collides with an existing legacy group name, we must rename and re-slug it // or WP will combine posts attached to the two terms, merging the Slide Groups! if (in_array($legacy_group->name, $legacy_slide_group_names)) { $new_group->name = $legacy_group->name . ' (duplicate name)'; $new_group->slug = Total_Slider::sanitize_slide_group_slug(substr($legacy_group->slug, 0, 12) . sanitize_title_with_dashes(uniqid('', true))); } $new_group->save(); $new_slide_ids = array(); if (is_array($legacy_slides) && count($legacy_slides) > 0) { foreach ($legacy_slides as $legacy_slide) { $title = $legacy_slide['title']; $description = $legacy_slide['description']; $background = $legacy_slide['background']; $link = $legacy_slide['link']; $title_pos_x = $legacy_slide['title_pos_x']; $title_pos_y = $legacy_slide['title_pos_y']; $new_slide_ids[] = $new_group->new_slide($title, $description, $background, $link, $title_pos_x, $title_pos_y, 'publish'); } } // make sure we don't use this name again
/** * Create a Total Slider WP_Widget from a [totalslider] shortcode in the post body and return its contents. * * @param array $atts An array containing the shortcode attributes. See WordPress Codex documentation. We desire a string, 'group', containing the slide group slug. * @param string $content Not used by our shortcode handler. * @param string $tag Not used by our shortcode handler. * @return string */ public function shortcode_handler($atts, $content, $tag) { extract(shortcode_atts(array('group' => NULL), $atts)); // require a slide group if (empty($group)) { return __('<strong>Total Slider:</strong> No slide group selected to show.', 'total-slider'); } // require a valid slide group $group_obj = new Total_Slide_Group(Total_Slider::sanitize_slide_group_slug($group)); if (!$group_obj->load()) { return __('<strong>Total Slider:</strong> Could not find the selected slide group to show. Does it still exist?', 'total-slider'); } ob_start(); the_widget('Total_Slider_Widget', array('groupSlug' => Total_Slider::sanitize_slide_group_slug($group))); $output = ob_get_contents(); ob_end_clean(); return $output; }