/** * Signs a user up to the email optin list for Thomas Griffin Media. * * @since 1.0.0 */ public function signup() { // Validate the fields before loading the API . if (!isset($_REQUEST['email']) || isset($_REQUEST['email']) && empty($_REQUEST['email']) || !is_email($_REQUEST['email'])) { echo json_encode(array('error' => Tgmsp_Lite_Strings::get_instance()->strings['email_error'])); die; } // Add the user to the email newsletter list. require_once plugin_dir_path(dirname(dirname(__FILE__))) . 'madmimi/MadMimi.class.php'; $mimi = new MadMimi('*****@*****.**', '709d4d36e5690d97382f36ee11d7a268'); // Add to general email list. $info = array('email' => $_REQUEST['email'], 'add_list' => 'Soliloquy Lite'); $mimi->AddUser($info); // Ensure that we properly die at the end of processing the request. echo json_encode(array('success' => Tgmsp_Lite_Strings::get_instance()->strings['email_success'])); die; }
/** * Adds contextual help to Soliloquy pages. * * @since 1.0.0 * * @global object $post The current post object */ public function contextual_help() { global $post; $current_screen = get_current_screen(); /** Set a 'global' help sidebar for all Soliloquy related pages */ if (Tgmsp_Lite::is_soliloquy_screen()) { $current_screen->set_help_sidebar(sprintf('<p><strong>%1$s</strong></p><p><strong><a href="' . apply_filters('tgmsp_affiliate_url', 'http://soliloquywp.com/pricing/?utm_source=orgrepo&utm_medium=link&utm_campaign=Soliloquy%2BLite') . '" title="%2$s" target="_blank">%2$s</a></strong></p>', Tgmsp_Lite_Strings::get_instance()->strings['sidebar_help_title'], Tgmsp_Lite_Strings::get_instance()->strings['sidebar_help_upgrade'])); } /** Set help for the main edit screen */ if ('edit-soliloquy' == $current_screen->id && Tgmsp_Lite::is_soliloquy_screen()) { $current_screen->add_help_tab(array('id' => 'soliloquy-main-help', 'title' => Tgmsp_Lite_Strings::get_instance()->strings['overview'], 'content' => sprintf('<p>%s</p><p>%s</p><p><strong>%s</strong></p>', Tgmsp_Lite_Strings::get_instance()->strings['main_help'], Tgmsp_Lite_Strings::get_instance()->strings['main_help_two'], sprintf(Tgmsp_Lite_Strings::get_instance()->strings['upgrade_nag'], sprintf('<a href="' . apply_filters('tgmsp_affiliate_url', 'http://soliloquywp.com/pricing/?utm_source=orgrepo&utm_medium=link&utm_campaign=Soliloquy%2BLite') . '" title="%1$s" target="_blank">%1$s</a>', Tgmsp_Lite_Strings::get_instance()->strings['upgrade_nag_link']), '')))); } /** Set help for the Add New and Edit screens */ if (Tgmsp_Lite::is_soliloquy_add_edit_screen()) { $current_screen->add_help_tab(array('id' => 'soliloquy-add-help', 'title' => Tgmsp_Lite_Strings::get_instance()->strings['overview'], 'content' => sprintf('<p>%s</p>', Tgmsp_Lite_Strings::get_instance()->strings['add_edit_help']))); $current_screen->add_help_tab(array('id' => 'soliloquy-advanced-help', 'title' => Tgmsp_Lite_Strings::get_instance()->strings['advanced_help'], 'content' => sprintf('<p><strong>%1$s</strong></p><p><a href="' . apply_filters('tgmsp_affiliate_url', 'http://soliloquywp.com/pricing/?utm_source=orgrepo&utm_medium=link&utm_campaign=Soliloquy%2BLite') . '" title="%2$s" target="_blank"><strong>%2$s</strong></a></p><p><a href="http://demo.soliloquywp.com/wp-admin/" title="%3$s" target="_blank"><em>%3$s</em></a></p>', Tgmsp_Lite_Strings::get_instance()->strings['advanced_help_desc'], Tgmsp_Lite_Strings::get_instance()->strings['advanced_help_up'], Tgmsp_Lite_Strings::get_instance()->strings['advanced_help_demo']))); } }
/** * Enqueue custom scripts and styles for the Soliloquy post type. * * @since 1.0.0 * * @global int $id The current post ID * @global object $post The current post object */ public function load_assets() { global $id, $post; /** Load for any Soliloquy screen */ if (Tgmsp_Lite::is_soliloquy_screen()) { wp_enqueue_style('soliloquy-admin'); /** Send the post ID along with our script */ if (Tgmsp_Lite::is_soliloquy_add_edit_screen()) { $post_id = null === $id ? $post->ID : $id; } else { $post_id = 0; } /** Store script arguments in an array */ $args = apply_filters('tgmsp_slider_object_args', array('alt' => Tgmsp_Lite_Strings::get_instance()->strings['image_alt'], 'ajaxurl' => admin_url('admin-ajax.php'), 'caption' => Tgmsp_Lite_Strings::get_instance()->strings['image_caption'], 'dismissnonce' => wp_create_nonce('soliloquy_dismissing'), 'dismissing' => Tgmsp_Lite_Strings::get_instance()->strings['dismissing'], 'duration' => 600, 'id' => $post_id, 'height' => 300, 'link' => Tgmsp_Lite_Strings::get_instance()->strings['image_link'], 'linknonce' => wp_create_nonce('soliloquy_linking'), 'linktitle' => Tgmsp_Lite_Strings::get_instance()->strings['image_url_title'], 'loading' => Tgmsp_Lite_Strings::get_instance()->strings['loading'], 'metadesc' => Tgmsp_Lite_Strings::get_instance()->strings['image_meta'], 'metanonce' => wp_create_nonce('soliloquy_meta'), 'metatitle' => Tgmsp_Lite_Strings::get_instance()->strings['update_meta'], 'modify' => Tgmsp_Lite_Strings::get_instance()->strings['modify_image'], 'modifytb' => Tgmsp_Lite_Strings::get_instance()->strings['modify_image_tb'], 'nonce' => wp_create_nonce('soliloquy_uploader'), 'remove' => Tgmsp_Lite_Strings::get_instance()->strings['remove_image'], 'removenonce' => wp_create_nonce('soliloquy_remove'), 'removing' => Tgmsp_Lite_Strings::get_instance()->strings['removing'], 'saving' => Tgmsp_Lite_Strings::get_instance()->strings['saving'], 'sortnonce' => wp_create_nonce('soliloquy_sortable'), 'speed' => 7000, 'spinner' => plugins_url('css/images/loading.gif', dirname(dirname(__FILE__))), 'savemeta' => Tgmsp_Lite_Strings::get_instance()->strings['save_meta'], 'upload' => Tgmsp_Lite_Strings::get_instance()->strings['upload_images_tb'], 'tab' => Tgmsp_Lite_Strings::get_instance()->strings['new_tab'], 'title' => Tgmsp_Lite_Strings::get_instance()->strings['image_title'], 'url' => Tgmsp_Lite_Strings::get_instance()->strings['image_url'], 'width' => 600)); wp_enqueue_script('soliloquy-admin'); wp_localize_script('soliloquy-admin', 'soliloquy', $args); } /** Only load for the Soliloquy post type add and edit screens */ if (Tgmsp_Lite::is_soliloquy_add_edit_screen()) { wp_enqueue_script('jquery-ui-sortable'); add_thickbox(); } }
/** * Customize the post columns for the Soliloquy post type. * * @since 1.0.0 * * @param array $columns The default columns provided by WP_List_Table */ public function soliloquy_columns($columns) { $columns = array('cb' => '<input type="checkbox" />', 'title' => Tgmsp_Lite_Strings::get_instance()->strings['column_title'], 'shortcode' => Tgmsp_Lite_Strings::get_instance()->strings['column_shortcode'], 'template' => Tgmsp_Lite_Strings::get_instance()->strings['column_function'], 'images' => Tgmsp_Lite_Strings::get_instance()->strings['column_number'], 'modified' => Tgmsp_Lite_Strings::get_instance()->strings['column_modified'], 'date' => Tgmsp_Lite_Strings::get_instance()->strings['column_date']); return $columns; }
/** * Template tag function for outputting the slider within templates. * * @since 1.0.0 * * @package Soliloquy Lite * @param int $id The Soliloquy slider ID * @param bool $return Flag for returning or echoing the slider content */ function soliloquy_slider($id, $return = false) { $id = absint($id); /** Return if no slider ID has been entered or if it is not valid */ if (!$id) { printf('<p>%s</p>', Tgmsp_Lite_Strings::get_instance()->strings['no_id']); return; } $validate = get_post($id, OBJECT); if (!$validate || isset($validate->post_type) && 'soliloquy' !== $validate->post_type) { printf('<p>%s</p>', Tgmsp_Lite_Strings::get_instance()->strings['invalid_id']); return; } if ($return) { return do_shortcode('[soliloquy id="' . $id . '"]'); } else { echo do_shortcode('[soliloquy id="' . $id . '"]'); } }
/** * Add an extra image meta field to store image links. * * @since 1.0.0 * * @param array $fields Default array of meta fields for uploads * @param object $attachment The current attachment object */ public function add_image_link($fields, $attachment) { if ($this->is_our_context() || Tgmsp_Lite::is_soliloquy_screen()) { $fields['soliloquy_link'] = apply_filters('tgmsp_extra_media_fields_link', array('label' => Tgmsp_Lite_Strings::get_instance()->strings['image_link'], 'input' => 'text', 'value' => get_post_meta($attachment->ID, '_soliloquy_image_link', true))); $fields['soliloquy_link_title'] = apply_filters('tgmsp_extra_media_fields_link_title', array('label' => Tgmsp_Lite_Strings::get_instance()->strings['image_link_title'], 'input' => 'text', 'value' => get_post_meta($attachment->ID, '_soliloquy_image_link_title', true))); $fields['soliloquy_link_tab'] = apply_filters('tgmsp_extra_media_fields_link_tab', array('label' => Tgmsp_Lite_Strings::get_instance()->strings['new_tab'], 'input' => 'html', 'html' => '<input id="attachments[' . $attachment->ID . '][soliloquy_link_tab]" name="attachments[' . $attachment->ID . '][soliloquy_link_tab]" type="checkbox" value="' . get_post_meta($attachment->ID, '_soliloquy_image_link_tab', true) . '"' . checked(get_post_meta($attachment->ID, '_soliloquy_image_link_tab', true), 1, false) . ' />')); $fields = apply_filters('tgmsp_media_fields', $fields, $attachment); } return $fields; }
/** * Outputs the jQuery and HTML necessary to insert a slider when the user * uses the button added to the media buttons above TinyMCE. * * @since 1.0.0 * * @global string $pagenow The current page slug */ public function admin_footer() { global $pagenow; /** Only run in post/page creation and edit screens */ if (in_array($pagenow, array('post.php', 'page.php', 'post-new.php', 'post-edit.php'))) { /** Get all published sliders */ $sliders = get_posts(array('post_type' => 'soliloquy', 'posts_per_page' => -1, 'post_status' => 'publish')); ?> <script type="text/javascript"> function insertSlider() { var id = jQuery('#select-soliloquy-slider').val(); /** Return early if no slider is selected */ if ( '' == id ) { alert('<?php echo esc_js(Tgmsp_Lite_Strings::get_instance()->strings['slider_select']); ?> '); return; } /** Send the shortcode to the editor */ window.send_to_editor('[soliloquy id="' + id + '"]'); } </script> <div id="choose-soliloquy-slider" style="display: none;"> <div class="wrap" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;"> <div id="icon-soliloquy" class="icon32" style="background: url(<?php echo plugins_url('css/images/title-icon.png', dirname(dirname(__FILE__))); ?> ) no-repeat scroll 0 50%; height: 36px; width: 36px;"><br></div> <h2><?php echo Tgmsp_Lite_Strings::get_instance()->strings['slider_choose']; ?> </h2> <?php do_action('tgmsp_before_slider_insertion', $sliders); ?> <p style="font-weight: bold; padding-bottom: 10px;"><?php echo Tgmsp_Lite_Strings::get_instance()->strings['slider_select_desc']; ?> </p> <select id="select-soliloquy-slider" style="clear: both; display: block; margin-bottom: 1em;"> <?php foreach ($sliders as $slider) { echo '<option value="' . absint($slider->ID) . '">' . esc_attr($slider->post_title) . '</option>'; } ?> </select> <input type="button" id="soliloquy-insert-slider" class="button-primary" value="<?php echo esc_attr(Tgmsp_Lite_Strings::get_instance()->strings['slider_select_insert']); ?> " onclick="insertSlider();" /> <a id="soliloquy-cancel-slider" class="button-secondary" onclick="tb_remove();" title="<?php echo esc_attr(Tgmsp_Lite_Strings::get_instance()->strings['slider_select_cancel']); ?> "><?php echo Tgmsp_Lite_Strings::get_instance()->strings['slider_select_cancel']; ?> </a> <?php do_action('tgmsp_after_slider_insertion', $sliders); ?> </div> </div> <?php } }
/** * Outputs slider data in a shortcode called 'soliloquy'. * * @since 1.0.0 * * @global array $soliloquy_data An array of data for the current Soliloquy ID * @global int $soliloquy_count Incremental variable for each Soliloquy on current page * @param array $atts Array of shortcode attributes * @return string $slider Concatenated string of slider data */ public function shortcode($atts) { /** Create global variables to store all soliloquy ID's and meta on the current page */ $soliloquy_data = array(); $soliloquy_count = 0; global $soliloquy_data, $soliloquy_count; /** Extract shortcode atts */ extract(shortcode_atts(array('id' => 0), $atts)); /** Return if no slider ID has been entered or if it is not valid */ if (!$id) { printf('<p>%s</p>', Tgmsp_Lite_Strings::get_instance()->strings['no_id']); return; } $validate = get_post($id, OBJECT); if (!$validate || isset($validate->post_type) && 'soliloquy' !== $validate->post_type) { printf('<p>%s</p>', Tgmsp_Lite_Strings::get_instance()->strings['invalid_id']); return; } /** Ok, we have a valid slider ID - store all data in one variable and get started */ $soliloquy_data[absint($soliloquy_count)]['id'] = $id; $soliloquy_data[absint($soliloquy_count)]['meta'] = get_post_meta($id, '_soliloquy_settings', true); $slider = ''; $images = $this->get_images($id, $soliloquy_data[absint($soliloquy_count)]['meta']); $i = 1; $preloader = false; /** Only proceed if we have images to output */ if ($images) { /** Make sure jQuery is loaded and load script and slider */ wp_enqueue_script('soliloquy-script'); wp_enqueue_style('soliloquy-style'); add_action('wp_footer', array($this, 'slider_script'), 99); /** Allow devs to circumvent the entire slider if necessary - beware, this filter is powerful - use with caution */ $pre = apply_filters('tgmsp_pre_load_slider', false, $id, $images, $soliloquy_data, $soliloquy_count, $slider); if ($pre) { return $pre; } do_action('tgmsp_before_slider_output', $id, $images, $soliloquy_data, $soliloquy_count, $slider); /** If a custom size is chosen, all image sizes will be cropped the same, so grab width/height from first image */ $width = $soliloquy_data[absint($soliloquy_count)]['meta']['width'] ? $soliloquy_data[absint($soliloquy_count)]['meta']['width'] : $images[0]['width']; $width = $ratio_width = apply_filters('tgmsp_slider_width', $width, $id); $width = preg_match('|%$|', trim($width)) ? trim($width) . ';' : absint($width) . 'px;'; $height = $soliloquy_data[absint($soliloquy_count)]['meta']['height'] ? $soliloquy_data[absint($soliloquy_count)]['meta']['height'] : $images[0]['height']; $height = $ratio_height = apply_filters('tgmsp_slider_height', $height, $id); $height = preg_match('|%$|', trim($height)) ? trim($height) . ';' : absint($height) . 'px;'; // If the user wants a preloader image, store the aspect ratio for dynamic height calculation. if (isset($soliloquy_data[absint($soliloquy_count)]['meta']['preloader']) && $soliloquy_data[absint($soliloquy_count)]['meta']['preloader']) { $preloader = true; $ratio_width = preg_match('|%$|', trim($ratio_width)) ? str_replace('%', '', $ratio_width) : absint($ratio_width); $ratio_height = preg_match('|%$|', trim($ratio_height)) ? str_replace('%', '', $ratio_height) : absint($ratio_height); $soliloquy_data[absint($soliloquy_count)]['ratio'] = $ratio_width / $ratio_height; add_action('tgmsp_callback_start_' . $id, array($this, 'preloader')); add_filter('tgmsp_slider_classes', array($this, 'preloader_class')); } /** Output the slider info */ $slider = apply_filters('tgmsp_before_slider', $slider, $id, $images, $soliloquy_data, absint($soliloquy_count)); $slider .= '<div id="soliloquy-container-' . esc_attr($id) . '" ' . $this->get_custom_slider_classes() . ' style="' . apply_filters('tgmsp_slider_width_output', 'max-width: ' . $width, $width, $id) . ' ' . apply_filters('tgmsp_slider_height_output', 'max-height: ' . $height, $height, $id) . ' ' . apply_filters('tgmsp_slider_container_style', '', $id) . '">'; $slider .= '<div id="soliloquy-' . esc_attr($id) . '" class="soliloquy">'; $slider .= '<ul id="soliloquy-list-' . esc_attr($id) . '" class="soliloquy-slides">'; foreach ($images as $image) { $alt = empty($image['alt']) ? apply_filters('tgmsp_no_alt', '', $id, $image) : $image['alt']; $title = empty($image['title']) ? apply_filters('tgmsp_no_title', '', $id, $image) : $image['title']; $link_title = empty($image['linktitle']) ? apply_filters('tgmsp_no_link_title', '', $id, $image) : $image['linktitle']; $link_target = empty($image['linktab']) ? apply_filters('tgmsp_no_link_target', '', $id, $image) : 'target="_blank"'; $slide = '<li id="soliloquy-' . esc_attr($id) . '-item-' . $i . '" class="soliloquy-item" style="' . apply_filters('tgmsp_slider_item_style', 'display: none;', $id, $image, $i) . '" ' . apply_filters('tgmsp_slider_item_attr', '', $id, $image, $i) . '>'; if (!empty($image['link'])) { $slide .= apply_filters('tgmsp_link_output', '<a href="' . esc_url($image['link']) . '" title="' . esc_attr($link_title) . '" ' . $link_target . '>', $id, $image, $link_title, $link_target); } $slide .= apply_filters('tgmsp_image_output', '<img class="soliloquy-item-image" src="' . esc_url($image['src']) . '" alt="' . esc_attr($alt) . '" title="' . esc_attr($title) . '" />', $id, $image, $alt, $title); if (!empty($image['link'])) { $slide .= '</a>'; } if (!empty($image['caption'])) { $slide .= apply_filters('tgmsp_caption_output', '<div class="soliloquy-caption"><div class="soliloquy-caption-inside">' . $image['caption'] . '</div></div>', $id, $image); } $slide .= '</li>'; $slider .= apply_filters('tgmsp_individual_slide', $slide, $id, $image, $i); $i++; } $slider .= '</ul>'; $slider = apply_filters('tgmsp_inside_slider', $slider, $id, $images, $soliloquy_data, absint($soliloquy_count)); $slider .= '</div>'; $slider = apply_filters('tgmsp_inside_slider_container', $slider, $id, $images, $soliloquy_data, absint($soliloquy_count)); $slider .= '</div>'; $slider = apply_filters('tgmsp_after_slider', $slider, $id, $images, $soliloquy_data, absint($soliloquy_count)); // If we are adding a preloading icon, do it now. if ($preloader) { $slider .= '<style type="text/css">.soliloquy-container.soliloquy-preloader{background: url("' . plugins_url("css/images/preloader.gif", dirname(dirname(__FILE__))) . '") no-repeat scroll 50% 50%;}@media only screen and (-webkit-min-device-pixel-ratio: 1.5),only screen and (-o-min-device-pixel-ratio: 3/2),only screen and (min--moz-device-pixel-ratio: 1.5),only screen and (min-device-pixel-ratio: 1.5){.soliloquy-container.soliloquy-preloader{background-image: url("' . plugins_url("css/images/preloader@2x.gif", dirname(dirname(__FILE__))) . '");background-size: 16px 16px;}}</style>'; } } /** Increment the counter in case there are multiple slider instances on the same page */ $soliloquy_count++; return apply_filters('tgmsp_slider_shortcode', $slider, $id, $images); }
/** * Outputs any error messages when verifying license keys. * * @since 1.0.0 */ public function admin_notices() { if (Tgmsp_Lite::is_soliloquy_screen() && current_user_can('manage_options')) { /** If a user hasn't dismissed the notice yet, output it for them to upgrade */ if (!get_user_meta(get_current_user_id(), 'soliloquy_dismissed_notice', true)) { add_settings_error('tgmsp', 'tgmsp-upgrade-soliloquy', sprintf(Tgmsp_Lite_Strings::get_instance()->strings['upgrade_nag'], sprintf('<a href="' . apply_filters('tgmsp_affiliate_url', 'http://soliloquywp.com/pricing/?utm_source=orgrepo&utm_medium=link&utm_campaign=Soliloquy%2BLite') . '" title="%1$s" target="_blank">%1$s</a>', Tgmsp_Lite_Strings::get_instance()->strings['upgrade_nag_link']), sprintf('<a id="soliloquy-dismiss-notice" href="#" title="%1$s">%1$s</a>', Tgmsp_Lite_Strings::get_instance()->strings['upgrade_nag_dismiss'])), 'updated'); } /** Allow settings notices to be filtered */ apply_filters('tgmsp_output_notices', settings_errors('tgmsp')); } }