<?php /** * The Third Party integration with the NextGen Gallery plugin. * * @since 1.0.5 */ namespace LiteSpeed\Thirdparty; defined('WPINC') || exit(); // Try preload instead // todo: need test // add_action('load_nextgen_gallery_modules', 'NextGenGallery::detect') ; class NextGenGallery { const CACHETAG_ALBUMS = 'NGG_A.'; const CACHETAG_GALLERIES = 'NGG_G.'; const CACHETAG_TAGS = 'NGG_T.'; /** * Detect is triggered at the load_nextgen_gallery_modules action. * * If this action is triggered, assume NextGen Gallery is used. * * @since 1.0.5 * @access public */ public static function preload() { add_action('ngg_added_new_image', __CLASS__ . '::add_image'); add_action('ngg_ajax_image_save', __CLASS__ . '::update_image'); add_action('ngg_delete_picture', __CLASS__ . '::delete_image'); add_action('ngg_moved_images', __CLASS__ . '::move_image', 10, 3); add_action('ngg_copied_images', __CLASS__ . '::copy_image', 10, 3); add_action('ngg_generated_image', __CLASS__ . '::gen_image'); add_action('ngg_recovered_image', __CLASS__ . '::gen_image'); add_action('ngg_gallery_sort', __CLASS__ . '::update_gallery'); add_action('ngg_delete_gallery', __CLASS__ . '::update_gallery'); add_action('ngg_update_album', __CLASS__ . '::update_album'); add_action('ngg_delete_album', __CLASS__ . '::update_album'); add_filter('ngg_displayed_gallery_cache_params', __CLASS__ . '::add_container'); } /** * When an image is added, need to purge all pages that displays its gallery. * * @since 1.0.5 * @access public * @param string $image The image object added. */ public static function add_image($image) { if (!$image || !method_exists($image, 'get_gallery')) { return; } $gallery = $image->get_gallery(); if ($gallery && $gallery->pageid) { do_action('litespeed_purge', self::CACHETAG_GALLERIES . $gallery->pageid); } } /** * When an image is updated, need to purge all pages that displays its gallery. * * @since 1.0.5 * @access public */ public static function update_image() { if (isset($_REQUEST['gallery_id'])) { do_action('litespeed_purge', self::CACHETAG_GALLERIES . sanitize_key($_REQUEST['gallery_id'])); return; } if (isset($_POST['task_list'])) { $task_list = str_replace('\\', '', $_POST['task_list']); $task_list = json_decode($task_list, true); if (!empty($task_list[0]['query']['id'])) { do_action('litespeed_purge', self::CACHETAG_GALLERIES . sanitize_key($task_list[0]['query']['id'])); return; } } if (isset($_POST['id'])) { $id = (int) $_POST['id']; } elseif (isset($_POST['image'])) { $id = (int) $_POST['image']; } elseif (isset($_GET['pid'])) { $id = (int) $_GET['pid']; } else { error_log('LiteSpeed_Cache hit ngg_ajax_image_save with no post image id.'); return; } $image = \C_Image_Mapper::get_instance()->find($id); if ($image) { do_action('litespeed_purge', self::CACHETAG_GALLERIES . $image->galleryid); } } /** * When an image is deleted, need to purge all pages that displays its gallery. * * @since 1.0.5 * @access public */ public static function delete_image() { if (isset($_GET['gid'])) { do_action('litespeed_purge', self::CACHETAG_GALLERIES . sanitize_key($_GET['gid'])); } } /** * When an image is moved, need to purge all old galleries and the new gallery. * * @since 1.0.8 * @access public * @param array $images unused * @param array $old_gallery_ids Source gallery ids for the images. * @param integer $new_gallery_id Destination gallery id. */ public static function move_image($images, $old_gallery_ids, $new_gallery_id) { foreach ($old_gallery_ids as $gid) { do_action('litespeed_purge', self::CACHETAG_GALLERIES . $gid); } do_action('litespeed_purge', self::CACHETAG_GALLERIES . $new_gallery_id); } /** * When an image is copied, need to purge the destination gallery. * * @param array $image_pid_map unused * @param array $old_gallery_ids unused * @param integer $new_gallery_id Destination gallery id. */ public static function copy_image($image_pid_map, $old_gallery_ids, $new_gallery_id) { do_action('litespeed_purge', self::CACHETAG_GALLERIES . $new_gallery_id); } /** * When an image is re-generated, need to purge the gallery it belongs to. * Also applies to recovered images. * * @param Image $image The re-generated image. */ public static function gen_image($image) { do_action('litespeed_purge', self::CACHETAG_GALLERIES . $image->galleryid); } /** * When a gallery is updated, need to purge all pages that display the gallery. * * @since 1.0.5 * @access public * @param integer $gid The gallery id of the gallery updated. */ public static function update_gallery($gid) { // New version input will be an object with gid value if (is_object($gid) && !empty($gid->gid)) { $gid = $gid->gid; } do_action('litespeed_purge', self::CACHETAG_GALLERIES . $gid); } /** * When an album is updated, need to purge all pages that display the album. * * @since 1.0.5 * @access public * @param integer $aid The album id of the album updated. */ public static function update_album($aid) { do_action('litespeed_purge', self::CACHETAG_ALBUMS . $aid); } /** * When rendering a page, if the page has a gallery, album or tag cloud, * it needs to be tagged appropriately. * * @since 1.0.5 * @access public * @param object $render_parms Parameters used to render the associated part of the page. * @return mixed Null if passed in null, $render_parms otherwise. */ public static function add_container($render_parms) { // Check if null. If it is null, can't continue. if (is_null($render_parms)) { return null; } $src = $render_parms[0]->source; $container_ids = $render_parms[0]->container_ids; // Can switch on first char if we end up with more sources. switch ($src) { case 'albums': $tag = self::CACHETAG_ALBUMS; break; case 'galleries': $tag = self::CACHETAG_GALLERIES; break; case 'tags': $tag = self::CACHETAG_TAGS; break; default: return $render_parms; } foreach ($container_ids as $id) { do_action('litespeed_tag_add', $tag . $id); } return $render_parms; } }