public function index_action() { $this->object->enqueue_backend_resources(); $key = C_Photocrati_Transient_Manager::create_key('nextgen_pro_upgrade_page', 'html'); if ($html = C_Photocrati_Transient_Manager::fetch($key, FALSE)) { echo $html; } else { // Get page content $template = 'photocrati-nextgen_pro_upgrade#plus'; if (defined('NGG_PLUS_PLUGIN_BASENAME')) { $template = 'photocrati-nextgen_pro_upgrade#pro'; } $description = 'Extend NextGEN Gallery with 8 new pro gallery displays, a full screen responsive pro lightbox, commenting / social sharing / deep linking for individual images, ecommerce, digital downloads, and pro email support.'; $headline = 'Upgrade to NextGEN Plus or NextGEN Pro'; if (defined('NGG_PLUS_PLUGIN_BASENAME')) { $description = 'NextGEN Pro now offers ecommerce! Extend NextGEN Gallery and NextGEN Plus with a complete solution for selling prints and digital downloads, including unlimited pricelists, PayPal and Stripe integration, and more.'; $headline = 'Upgrade to NextGEN Pro with Ecommerce'; } $params = array('description' => $description, 'headline' => $headline); $html = $this->render_view($template, $params, TRUE); // Cache it C_Photocrati_Transient_Manager::update($key, $html); // Render it echo $html; } }
/** * @return C_Photocrati_Transient_Manager */ static function get_instance() { if (!self::$_instance) { $klass = get_class(); self::$_instance = new $klass(); } return self::$_instance; }
function index_action() { $this->object->enqueue_backend_resources(); $key = C_Photocrati_Transient_Manager::create_key('nextgen_pro_upgrade_page', 'html'); if ($html = C_Photocrati_Transient_Manager::fetch($key, FALSE)) { echo $html; } else { // Get template and page content $template = 'photocrati-nextgen_pro_upgrade#plus'; if (defined('NGG_PLUS_PLUGIN_BASENAME')) { $template = 'photocrati-nextgen_pro_upgrade#pro'; } $html = $this->render_view($template, array('i18n' => $this->get_i18n_strings()), TRUE); // Cache it C_Photocrati_Transient_Manager::update($key, $html); // Render it echo $html; } }
/** * Flushes NextGen Gallery caches */ function flush_cache($args, $assoc_args) { C_Photocrati_Transient_Manager::flush(); WP_CLI::success('Flushed all caches'); }
/** * Looks up using SQL the columns existing in the database */ function update_columns_cache() { $key = C_Photocrati_Transient_Manager::create_key('col_in_' . $this->get_table_name(), 'columns'); global $wpdb; $this->_table_columns = array(); $sql = "SHOW COLUMNS FROM `{$this->get_table_name()}`"; foreach ($wpdb->get_results($sql) as $row) { $this->_table_columns[] = $row->Field; } C_Photocrati_Transient_Manager::update($key, $this->_table_columns); }
/** * Flush all expires transients created by the plugin */ function delete_expired_transients() { C_Photocrati_Transient_Manager::flush(); }
public function cache_lookups() { C_Photocrati_Transient_Manager::update($this->_get_cache_key(), self::$_lookups); }
function reset_action() { global $wpdb; // Flush the cache C_Photocrati_Transient_Manager::flush(); // Uninstall the plugin $settings = C_NextGen_Settings::get_instance(); if (defined('NGG_PRO_PLUGIN_VERSION') || defined('NEXTGEN_GALLERY_PRO_VERSION')) { C_Photocrati_Installer::uninstall('photocrati-nextgen-pro'); } C_Photocrati_Installer::uninstall('photocrati-nextgen'); // removes all ngg_options entry in wp_options $settings->reset(); $settings->destroy(); // clear NextGEN's capabilities from the roles system $capabilities = array("NextGEN Gallery overview", "NextGEN Use TinyMCE", "NextGEN Upload images", "NextGEN Manage gallery", "NextGEN Manage others gallery", "NextGEN Manage tags", "NextGEN Edit album", "NextGEN Change style", "NextGEN Change options", "NextGEN Attach Interface"); $roles = array("subscriber", "contributor", "author", "editor", "administrator"); foreach ($roles as $role) { $role = get_role($role); foreach ($capabilities as $capability) { if (!is_null($role)) { $role->remove_cap($capability); } } } // Some installations of NextGen that upgraded from 1.9x to 2.0x have duplicates installed, // so for now (as of 2.0.21) we explicitly remove all display types and lightboxes from the // db as a way of fixing this. $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->posts} WHERE post_type = %s", 'display_type')); $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->posts} WHERE post_type = %s", 'lightbox_library')); // the installation will run on the next page load; so make our own request before reloading the browser wp_remote_get(admin_url('plugins.php'), array('timeout' => 180, 'blocking' => true, 'sslverify' => false)); header('Location: ' . get_admin_url()); throw new E_Clean_Exit(); }
/** * Looks up using SQL the columns existing in the database */ public function lookup_columns() { // Avoid doing multiple SHOW COLUMNS if we can help it $key = C_Photocrati_Transient_Manager::create_key('col_in_' . $this->get_table_name(), 'columns'); $this->_table_columns = C_Photocrati_Transient_Manager::fetch($key, FALSE); if (!$this->_table_columns) { global $wpdb; $this->_table_columns = array(); $sql = "SHOW COLUMNS FROM `{$this->get_table_name()}`"; foreach ($wpdb->get_results($sql) as $row) { $this->_table_columns[] = $row->Field; } C_Photocrati_Transient_Manager::update($key, $this->_table_columns); } return $this->_table_columns; }
public function _save_entity($entity) { $entity->updated_at = time(); // If successfully saved, then import metadata and $retval = $this->call_parent('_save_entity', $entity); if ($retval) { include_once NGGALLERY_ABSPATH . '/admin/functions.php'; $image_id = $this->get_id($entity); if (!isset($entity->meta_data['saved'])) { nggAdmin::import_MetaData($image_id); } C_Photocrati_Transient_Manager::flush('displayed_gallery_rendering'); } return $retval; }
/** * Uninstalls this module */ function uninstall($hard = FALSE) { C_Photocrati_Transient_Manager::flush(); $this->uninstall_display_types(); // TODO temporary Don't remove galleries on uninstall //if ($hard) $this->uninstall_displayed_galleries(); }
/** * Renders a displayed gallery on the frontend * @param C_Displayed_Gallery|stdClass $displayed_gallery */ public function render($displayed_gallery, $return = FALSE, $mode = null) { $retval = ''; $lookup = TRUE; // Simply throwing our rendered gallery into a feed will most likely not work correctly. // The MediaRSS option in NextGEN is available as an alternative. if (!C_NextGen_Settings::get_instance()->galleries_in_feeds && is_feed()) { return sprintf(__(' [<a href="%s">See image gallery at %s</a>] ', 'nggallery'), esc_url(apply_filters('the_permalink_rss', get_permalink())), $_SERVER['SERVER_NAME']); } if ($mode == null) { $mode = 'normal'; } if (apply_filters('ngg_cache_displayed_galleries', FALSE)) { // Save the displayed gallery as a transient if it hasn't already. Allows for ajax operations // to add or modify the gallery without losing a retrievable ID if (!$displayed_gallery->apply_transient()) { $displayed_gallery->to_transient(); } } else { if (is_null($displayed_gallery->id())) { $displayed_gallery->id(md5(json_encode($displayed_gallery->get_entity()))); } } // Get the display type controller $controller = $this->get_registry()->get_utility('I_Display_Type_Controller', $displayed_gallery->display_type); // Get routing info $router = C_Router::get_instance(); $url = $router->get_url($router->get_request_uri(), TRUE); // Should we lookup in cache? if (is_array($displayed_gallery->container_ids) && in_array('All', $displayed_gallery->container_ids)) { $lookup = FALSE; } elseif ($displayed_gallery->source == 'albums' && $controller->param('gallery') or $controller->param('album')) { $lookup = FALSE; } elseif ($controller->param('show')) { $lookup = FALSE; } elseif ($controller->is_cachable() === FALSE) { $lookup = FALSE; } elseif (!NGG_RENDERING_CACHE_ENABLED) { $lookup = FALSE; } // Enqueue any necessary static resources if (!defined('NGG_SKIP_LOAD_SCRIPTS') || !NGG_SKIP_LOAD_SCRIPTS) { $controller->enqueue_frontend_resources($displayed_gallery); } // Try cache lookup, if we're to do so $key = NULL; $html = FALSE; if ($lookup) { // The display type may need to output some things // even when serving from the cache if ($controller->has_method('cache_action')) { $retval = $controller->cache_action($displayed_gallery); } // Output debug message $retval .= $this->debug_msg('Lookup!'); // Some settings affect display types $settings = C_NextGen_Settings::get_instance(); $key_params = apply_filters('ngg_displayed_gallery_cache_params', array($displayed_gallery->get_entity(), $url, $mode, $settings->activateTags, $settings->appendType, $settings->maxImages, $settings->thumbEffect, $settings->thumbCode, $settings->galSort, $settings->galSortDir)); // Any displayed gallery links on the home page will need to be regenerated if the permalink structure // changes if (is_home() or is_front_page()) { $key_params[] = get_option('permalink_structure'); } // Try getting the rendered HTML from the cache $key = C_Photocrati_Transient_Manager::create_key('displayed_gallery_rendering', $key_params); $html = C_Photocrati_Transient_Manager::fetch($key, FALSE); // Output debug messages if ($html) { $retval .= $this->debug_msg('HIT!'); } else { $retval .= $this->debug_msg('MISS!'); } // TODO: This is hack. We need to figure out a more uniform way of detecting dynamic image urls if (strpos($html, C_Photocrati_Settings_Manager::get_instance()->dynamic_thumbnail_slug . '/') !== FALSE) { $html = FALSE; } } else { $retval .= $this->debug_msg('Not looking up in cache as per rules'); } // If we're displaying a variant, I want to know it if (isset($displayed_gallery->variation) && is_numeric($displayed_gallery->variation) && $displayed_gallery->variation > 0) { $retval .= $this->debug_msg("Using variation #{$displayed_gallery->variation}!"); } // If a cached version doesn't exist, then create the cache if (!$html) { $retval .= $this->debug_msg('Rendering displayed gallery'); $current_mode = $controller->get_render_mode(); $controller->set_render_mode($mode); $html = apply_filters('ngg_displayed_gallery_rendering', $controller->index_action($displayed_gallery, TRUE), $displayed_gallery); if ($key != null) { C_Photocrati_Transient_Manager::update($key, $html, NGG_RENDERING_CACHE_TTL); } } $retval .= $html; if (!$return) { echo $retval; } return $retval; }
/** * @author Alex Rabe * */ function nggallery_sortorder($galleryID = 0) { global $wpdb, $ngg, $nggdb; if ($galleryID == 0) { return; } $galleryID = (int) $galleryID; if (isset($_POST['updateSortorder'])) { check_admin_referer('ngg_updatesortorder'); // get variable new sortorder parse_str($_POST['sortorder']); if (is_array($sortArray)) { $neworder = array(); foreach ($sortArray as $pid) { $neworder[] = (int) $pid; } $sortindex = 1; foreach ($neworder as $pic_id) { $wpdb->query("UPDATE {$wpdb->nggpictures} SET sortorder = '{$sortindex}' WHERE pid = {$pic_id}"); $sortindex++; } C_Photocrati_Transient_Manager::flush('displayed_gallery_rendering'); do_action('ngg_gallery_sort', $galleryID); nggGallery::show_message(__('Sort order changed', 'nggallery')); } } // look for presort args $presort = isset($_GET['presort']) ? $_GET['presort'] : false; $dir = isset($_GET['dir']) && $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; $sortitems = array('pid', 'filename', 'alttext', 'imagedate'); // ensure that nobody added some evil sorting :-) if (in_array($presort, $sortitems)) { $picturelist = $nggdb->get_gallery($galleryID, $presort, $dir, false); } else { $picturelist = $nggdb->get_gallery($galleryID, 'sortorder', $dir, false); } //this is the url without any presort variable $clean_url = 'admin.php?page=nggallery-manage-gallery&mode=sort&gid=' . $galleryID; //if we go back , then the mode should be edit $back_url = 'admin.php?page=nggallery-manage-gallery&mode=edit&gid=' . $galleryID; // In the case somebody presort, then we take this url if (isset($_GET['dir']) || isset($_GET['presort'])) { $base_url = $_SERVER['REQUEST_URI']; } else { $base_url = $clean_url; } ?> <script type="text/javascript"> jQuery(document).ready(function($) { if ($(this).data('ready')) return; // Enable sorting $(".jqui-sortable").sortable({items: 'div.imageBox'}); $('#sortGallery').submit(function(e){ var serial = ""; var $images = $('div.imageBox'); for (var i=0; i<$images.length; i++) { var image_id = $images[i].id.split('-').pop(); if (serial.length > 0) serial = serial + '&'; serial = serial + "sortArray[]=" + image_id; } $('input[name=sortorder]').val(serial); }); // Listen for events in other frames if (window.Frame_Event_Publisher) { Frame_Event_Publisher.listen_for('attach_to_post:manage_galleries attach_to_post:manage_images', function(){ window.location.href = window.location.href; }); } $(this).data('ready', true); }); </script> <div class="wrap"> <form id="sortGallery" method="POST" action="<?php echo $clean_url; ?> " accept-charset="utf-8"> <h2><?php _e('Sort Gallery', 'nggallery'); ?> </h2> <div class="tablenav"> <div class="alignleft actions"> <?php wp_nonce_field('ngg_updatesortorder'); ?> <input class="button-primary action" type="submit" name="updateSortorder" value="<?php _e('Update Sort Order', 'nggallery'); ?> " /> </div> <div class="alignright actions"> <a href="<?php echo nextgen_esc_url($back_url); ?> " class="button"><?php _e('Back to gallery', 'nggallery'); ?> </a> </div> </div> <input name="sortorder" type="hidden" /> <ul class="subsubsub"> <li><?php _e('Presort', 'nggallery'); ?> :</li> <li><a href="<?php echo esc_attr(remove_query_arg('presort', $base_url)); ?> " <?php if ($presort == '') { echo 'class="current"'; } ?> ><?php _e('Unsorted', 'nggallery'); ?> </a> |</li> <li><a href="<?php echo esc_attr(add_query_arg('presort', 'pid', $base_url)); ?> " <?php if ($presort == 'pid') { echo 'class="current"'; } ?> ><?php _e('Image ID', 'nggallery'); ?> </a> |</li> <li><a href="<?php echo esc_attr(add_query_arg('presort', 'filename', $base_url)); ?> " <?php if ($presort == 'filename') { echo 'class="current"'; } ?> ><?php _e('Filename', 'nggallery'); ?> </a> |</li> <li><a href="<?php echo esc_attr(add_query_arg('presort', 'alttext', $base_url)); ?> " <?php if ($presort == 'alttext') { echo 'class="current"'; } ?> ><?php _e('Alt/Title text', 'nggallery'); ?> </a> |</li> <li><a href="<?php echo esc_attr(add_query_arg('presort', 'imagedate', $base_url)); ?> " <?php if ($presort == 'imagedate') { echo 'class="current"'; } ?> ><?php _e('Date/Time', 'nggallery'); ?> </a> |</li> <li><a href="<?php echo esc_attr(add_query_arg('dir', 'ASC', $base_url)); ?> " <?php if ($dir == 'ASC') { echo 'class="current"'; } ?> ><?php _e('Ascending', 'nggallery'); ?> </a> |</li> <li><a href="<?php echo esc_attr(add_query_arg('dir', 'DESC', $base_url)); ?> " <?php if ($dir == 'DESC') { echo 'class="current"'; } ?> ><?php _e('Descending', 'nggallery'); ?> </a></li> </ul> </form> <div id="debug" style="clear:both"></div> <div class='jqui-sortable'> <?php if ($picturelist) { foreach ($picturelist as $picture) { ?> <div class="imageBox" id="pid-<?php echo $picture->pid; ?> "> <div class="imageBox_theImage" style="background-image:url('<?php echo nextgen_esc_url($picture->thumbURL); ?> ')"></div> <div class="imageBox_label"><span><?php echo esc_html(stripslashes($picture->alttext)); ?> </span></div> </div> <?php } } ?> </div> </div> <?php }