| Server IP : 180.180.241.3 / Your IP : 216.73.216.35 Web Server : Microsoft-IIS/7.5 System : Windows NT NETWORK-NHRC 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 User : IUSR ( 0) PHP Version : 5.3.28 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /AppServ/www/app/webroot/new_news/wp-content/plugins/foogallery/includes/ |
Upload File : |
<?php
/**
* FooGallery global functions
*
* @package FooGallery
* @author Brad Vincent <brad@fooplugins.com>
* @license GPL-2.0+
* @link https://github.com/fooplugins/foogallery
* @copyright 2014 FooPlugins LLC
*/
/**
* Returns the name of the plugin. (Allows the name to be overridden from extensions or functions.php)
* @return string
*/
function foogallery_plugin_name() {
return apply_filters( 'foogallery_plugin_name', 'FooGallery' );
}
/**
* Return all the gallery templates used within FooGallery
*
* @return array
*/
function foogallery_gallery_templates() {
return apply_filters( 'foogallery_gallery_templates', array() );
}
/**
* Return the FooGallery extension API class
*
* @return FooGallery_Extensions_API
*/
function foogallery_extensions_api() {
return new FooGallery_Extensions_API();
}
/**
* Returns the default gallery template
*
* @return string
*/
function foogallery_default_gallery_template() {
return foogallery_get_setting( 'gallery_template' );
}
/**
* Returns if gallery permalinks are enabled
*
* @return bool
*/
function foogallery_permalinks_enabled() {
return foogallery_get_setting( 'gallery_permalinks_enabled' );
}
/**
* Returns the gallery permalink
*
* @return string
*/
function foogallery_permalink() {
return foogallery_get_setting( 'gallery_permalink' );
}
/**
* Return the FooGallery saved setting, or a default value
*
* @param string $key The key for the setting
*
* @param bool $default The default if no value is saved or found
*
* @return mixed
*/
function foogallery_get_setting( $key, $default = false ) {
$foogallery = FooGallery_Plugin::get_instance();
return $foogallery->options()->get( $key, foogallery_get_default( $key, $default ) );
}
/**
* Builds up a FooGallery gallery shortcode
*
* @param $gallery_id
*
* @return string
*/
function foogallery_build_gallery_shortcode( $gallery_id ) {
return '[' . foogallery_gallery_shortcode_tag() . ' id="' . $gallery_id . '"]';
}
/**
* Returns the gallery shortcode tag
*
* @return string
*/
function foogallery_gallery_shortcode_tag() {
return apply_filters( 'foogallery_gallery_shortcode_tag', FOOGALLERY_CPT_GALLERY );
}
/**
* Helper method for getting default settings
*
* @param string $key The default config key to retrieve.
*
* @param bool $default The default if no default is set or found
*
* @return string Key value on success, false on failure.
*/
function foogallery_get_default( $key, $default = false ) {
$defaults = array(
'gallery_template' => 'default',
'gallery_permalinks_enabled' => false,
'gallery_permalink' => 'gallery',
'lightbox' => 'none',
'thumb_jpeg_quality' => '80',
'thumb_resize_animations' => true,
'gallery_sorting' => '',
'datasource' => 'media_library'
);
// A handy filter to override the defaults
$defaults = apply_filters( 'foogallery_defaults', $defaults );
// Return the key specified.
return isset($defaults[ $key ]) ? $defaults[ $key ] : $default;
}
/**
* Returns the FooGallery Add Gallery Url within the admin
*
* @return string The Url to the FooGallery Add Gallery page in admin
*/
function foogallery_admin_add_gallery_url() {
return admin_url( 'post-new.php?post_type=' . FOOGALLERY_CPT_GALLERY );
}
/**
* Returns the FooGallery help page Url within the admin
*
* @return string The Url to the FooGallery help page in admin
*/
function foogallery_admin_help_url() {
return admin_url( add_query_arg( array( 'page' => FOOGALLERY_ADMIN_MENU_HELP_SLUG ), foogallery_admin_menu_parent_slug() ) );
}
/**
* Returns the FooGallery settings page Url within the admin
*
* @return string The Url to the FooGallery settings page in admin
*/
function foogallery_admin_settings_url() {
return admin_url( add_query_arg( array( 'page' => FOOGALLERY_ADMIN_MENU_SETTINGS_SLUG ), foogallery_admin_menu_parent_slug() ) );
}
/**
* Returns the FooGallery extensions page Url within the admin
*
* @return string The Url to the FooGallery extensions page in admin
*/
function foogallery_admin_extensions_url() {
return admin_url( add_query_arg( array( 'page' => FOOGALLERY_ADMIN_MENU_EXTENSIONS_SLUG ), foogallery_admin_menu_parent_slug() ) );
}
/**
* Returns the FooGallery system info page Url within the admin
*
* @return string The Url to the FooGallery system info page in admin
*/
function foogallery_admin_systeminfo_url() {
return admin_url( add_query_arg( array( 'page' => FOOGALLERY_ADMIN_MENU_SYSTEMINFO_SLUG ), foogallery_admin_menu_parent_slug() ) );
}
/**
* Get a foogallery template setting for the current foogallery that is being output to the frontend
* @param string $key
* @param string $default
*
* @return bool
*/
function foogallery_gallery_template_setting( $key, $default = '' ) {
global $current_foogallery;
global $current_foogallery_arguments;
global $current_foogallery_template;
$settings_key = "{$current_foogallery_template}_{$key}";
if ( $current_foogallery_arguments && array_key_exists( $key, $current_foogallery_arguments ) ) {
//try to get the value from the arguments
$value = $current_foogallery_arguments[ $key ];
} else if ( !empty( $current_foogallery ) && $current_foogallery->settings && array_key_exists( $settings_key, $current_foogallery->settings ) ) {
//then get the value out of the saved gallery settings
$value = $current_foogallery->settings[ $settings_key ];
} else {
//otherwise set it to the default
$value = $default;
}
$value = apply_filters( 'foogallery_gallery_template_setting-' . $key, $value );
return $value;
}
/**
* Get the admin menu parent slug
* @return string
*/
function foogallery_admin_menu_parent_slug() {
return apply_filters( 'foogallery_admin_menu_parent_slug', FOOGALLERY_ADMIN_MENU_PARENT_SLUG );
}
/**
* Helper function to build up the admin menu Url
* @param array $extra_args
*
* @return string|void
*/
function foogallery_build_admin_menu_url( $extra_args = array() ) {
$url = admin_url( foogallery_admin_menu_parent_slug() );
if ( ! empty( $extra_args ) ) {
$url = add_query_arg( $extra_args, $url );
}
return $url;
}
/**
* Helper function for adding a foogallery sub menu
*
* @param $menu_title
* @param string $capability
* @param string $menu_slug
* @param $function
*/
function foogallery_add_submenu_page( $menu_title, $capability, $menu_slug, $function ) {
add_submenu_page(
foogallery_admin_menu_parent_slug(),
$menu_title,
$menu_title,
$capability,
$menu_slug,
$function
);
}
/**
* Returns all FooGallery galleries
*
* @return FooGallery[] array of FooGallery galleries
*/
function foogallery_get_all_galleries( $excludes = false ) {
$args = array(
'post_type' => FOOGALLERY_CPT_GALLERY,
'post_status' => array( 'publish', 'draft' ),
'cache_results' => false,
'nopaging' => true,
);
if ( is_array( $excludes ) ) {
$args['post__not_in'] = $excludes;
}
$gallery_posts = get_posts( $args );
if ( empty( $gallery_posts ) ) {
return array();
}
$galleries = array();
foreach ( $gallery_posts as $post ) {
$galleries[] = FooGallery::get( $post );
}
return $galleries;
}
/**
* Parse some content and return an array of all gallery shortcodes that are used inside it
*
* @param $content The content to search for gallery shortcodes
*
* @return array An array of all the foogallery shortcodes found in the content
*/
function foogallery_extract_gallery_shortcodes( $content ) {
$shortcodes = array();
$regex_pattern = foogallery_gallery_shortcode_regex();
if ( preg_match_all( '/' . $regex_pattern . '/s', $content, $matches ) ) {
for ( $i = 0; $i < count( $matches[0] ); ++$i ) {
$shortcode = $matches[0][$i];
$args = $matches[3][$i];
$attribure_string = str_replace( ' ', '&', trim( $args ) );
$attribure_string = str_replace( '"', '', $attribure_string );
$attributes = wp_parse_args( $attribure_string );
if ( array_key_exists( 'id', $attributes ) ) {
$id = intval( $attributes['id'] );
$shortcodes[ $id ] = $shortcode;
}
}
}
return $shortcodes;
}
/**
* Build up the FooGallery shortcode regex
*
* @return string
*/
function foogallery_gallery_shortcode_regex() {
$tag = foogallery_gallery_shortcode_tag();
return
'\\[' // Opening bracket
. '(\\[?)' // 1: Optional second opening bracket for escaping shortcodes: [[tag]]
. "($tag)" // 2: Shortcode name
. '(?![\\w-])' // Not followed by word character or hyphen
. '(' // 3: Unroll the loop: Inside the opening shortcode tag
. '[^\\]\\/]*' // Not a closing bracket or forward slash
. '(?:'
. '\\/(?!\\])' // A forward slash not followed by a closing bracket
. '[^\\]\\/]*' // Not a closing bracket or forward slash
. ')*?'
. ')'
. '(?:'
. '(\\/)' // 4: Self closing tag ...
. '\\]' // ... and closing bracket
. '|'
. '\\]' // Closing bracket
. '(?:'
. '(' // 5: Unroll the loop: Optionally, anything between the opening and closing shortcode tags
. '[^\\[]*+' // Not an opening bracket
. '(?:'
. '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag
. '[^\\[]*+' // Not an opening bracket
. ')*+'
. ')'
. '\\[\\/\\2\\]' // Closing shortcode tag
. ')?'
. ')'
. '(\\]?)'; // 6: Optional second closing bracket for escaping shortcodes: [[tag]]
}
/**
* Builds up a class attribute that can be used in a gallery template
* @param $gallery FooGallery
*
* @return string the classname based on the gallery and any extra attributes
*/
function foogallery_build_class_attribute( $gallery ) {
$classes[] = 'foogallery-container';
$classes[] = "foogallery-{$gallery->gallery_template}";
$num_args = func_num_args();
if ( $num_args > 1 ) {
$arg_list = func_get_args();
for ( $i = 1; $i < $num_args; $i++ ) {
$classes[] = $arg_list[$i];
}
}
$classes = apply_filters( 'foogallery_build_class_attribute', $classes );
return implode( ' ', $classes );
}
/**
* Renders an escaped class attribute that can be used directly by gallery templates
*
* @param $gallery FooGallery
*/
function foogallery_build_class_attribute_render_safe( $gallery ) {
$args = func_get_args();
$result = call_user_func_array("foogallery_build_class_attribute", $args);
echo esc_attr( $result );
}
/**
* Render a foogallery
*
* @param $gallery_id int The id of the foogallery you want to render
*/
function foogallery_render_gallery( $gallery_id ) {
//create new instance of template engine
$engine = new FooGallery_Template_Loader();
$engine->render_template( array(
'id' => $gallery_id
) );
}
/**
* Returns the available sorting options that can be chosen for galleries and albums
*/
function foogallery_sorting_options() {
return apply_filters( 'foogallery_sorting_options', array(
'' => __('Default', 'foogallery'),
'date_desc' => __('Date created - newest first', 'foogallery'),
'date_asc' => __('Date created - oldest first', 'foogallery'),
'modified_desc' => __('Date modified - most recent first', 'foogallery'),
'modified_asc' => __('Date modified - most recent last', 'foogallery'),
'title_asc' => __('Title - alphabetically', 'foogallery'),
'title_desc' => __('Title - reverse', 'foogallery'),
'rand' => __('Random', 'foogallery')
) );
}
function foogallery_sorting_get_posts_orderby_arg( $sorting_option ) {
$orderby_arg = 'post__in';
switch ( $sorting_option ) {
case 'date_desc':
case 'date_asc':
$orderby_arg = 'date';
break;
case 'modified_desc':
case 'modified_asc':
$orderby_arg = 'modified';
break;
case 'title_asc':
case 'title_desc':
$orderby_arg = 'title';
break;
case 'rand':
$orderby_arg = 'rand';
break;
}
return apply_filters( 'foogallery_sorting_get_posts_orderby_arg', $orderby_arg, $sorting_option );
}
function foogallery_sorting_get_posts_order_arg( $sorting_option ) {
$order_arg = 'DESC';
switch ( $sorting_option ) {
case 'date_asc':
case 'modified_asc':
case 'title_asc':
$order_arg = 'ASC';
break;
}
return apply_filters( 'foogallery_sorting_get_posts_order_arg', $order_arg, $sorting_option );
}
/**
* Activate the default templates extension when there are no gallery templates loaded
*/
function foogallery_activate_default_templates_extension() {
$api = foogallery_extensions_api();
$api->activate( 'default_templates' );
}
/**
* Allow FooGallery to enqueue stylesheet and allow them to be enqueued in the head on the next page load
*
* @param $handle string
* @param $src string
* @param array $deps
* @param bool $ver
* @param string $media
*/
function foogallery_enqueue_style( $handle, $src, $deps = array(), $ver = false, $media = 'all' ) {
wp_enqueue_style( $handle, $src, $deps, $ver, $media );
do_action( 'foogallery_enqueue_style', $handle, $src, $deps, $ver, $media );
}
/**
* Returns all foogallery post objects that are attached to the post
*
* @param $post_id int The ID of the post
*
* @return array List of foogallery posts.
*/
function foogallery_get_galleries_attached_to_post( $post_id ) {
$gallery_ids = get_post_meta( $post_id, FOOGALLERY_META_POST_USAGE, false );
if ( !empty( $gallery_ids ) ) {
return get_posts( array(
'post_type' => array( FOOGALLERY_CPT_GALLERY, ),
'post_status' => array( 'draft', 'publish' ),
'posts_per_page' => -1,
'include' => $gallery_ids
) );
}
return array();
}
/**
* Clears all css load optimization post meta
*/
function foogallery_clear_all_css_load_optimizations() {
delete_post_meta_by_key( FOOGALLERY_META_POST_USAGE_CSS );
}
/**
* Performs a check to see if the plugin has been updated, and perform any housekeeping if necessary
*/
function foogallery_perform_version_check() {
$checker = new FooGallery_Version_Check();
$checker->perform_check();
}
/**
* Returns the JPEG quality used when generating thumbnails
*
* @return int The quality value stored in settings
*/
function foogallery_thumbnail_jpeg_quality() {
$quality = intval( foogallery_get_setting( 'thumb_jpeg_quality' ) );
//check if we get an invalid value for whatever reason and if so return a default of 80
if ( $quality <= 0 ) {
$quality = 80;
}
return $quality;
}
/**
* Returns the caption title source setting
*
* @return string
*/
function foogallery_caption_title_source() {
$source = foogallery_get_setting( 'caption_title_source', 'caption' );
if ( empty( $source ) ) {
$source = 'caption';
}
return $source;
}
/**
* Returns the attachment caption title based on the caption_title_source setting
*
* @param $attachment_post WP_Post
*
* @return string
*/
function foogallery_get_caption_title_for_attachment($attachment_post) {
$source = foogallery_caption_title_source();
if ( 'title' === $source ) {
$caption = trim( $attachment_post->post_title );
} else {
$caption = trim( $attachment_post->post_excerpt );
}
return apply_filters( 'foogallery_get_caption_title_for_attachment', $caption, $attachment_post );
}
/**
* Returns the caption description source setting
*
* @return string
*/
function foogallery_caption_desc_source() {
$source = foogallery_get_setting( 'caption_desc_source', 'desc' );
if ( empty( $source ) ) {
$source = 'desc';
}
return $source;
}
/**
* Returns the attachment caption description based on the caption_desc_source setting
*
* @param $attachment_post WP_Post
*
* @return string
*/
function foogallery_get_caption_desc_for_attachment($attachment_post) {
$source = foogallery_caption_desc_source();
switch ( $source ) {
case 'title':
$caption = trim( $attachment_post->post_title );
break;
case 'caption':
$caption = trim( $attachment_post->post_excerpt );
break;
case 'alt':
$caption = trim( get_post_meta( $attachment_post->ID, '_wp_attachment_image_alt', true ) );
break;
default:
$caption = trim( $attachment_post->post_content );
}
return apply_filters( 'foogallery_get_caption_desc_for_attachment', $caption, $attachment_post );
}
/**
* Runs thumbnail tests and outputs results in a table format
*/
function foogallery_output_thumbnail_generation_results() {
$thumbs = new FooGallery_Thumbnails();
try {
$results = $thumbs->run_thumbnail_generation_tests();
if ( $results['success'] ) {
echo '<span style="color:#0c0">' . __('Thumbnail generation test ran successfully.', 'foogallery') . '</span>';
} else {
echo '<span style="color:#c00">' . __('Thumbnail generation test failed!', 'foogallery') . '</span>';
var_dump( $results['error'] );
var_dump( $results['file_info'] );
}
}
catch (Exception $e) {
echo 'Exception: ' . $e->getMessage();
}
}
/**
* Returns the URL to the test image
*
* @return string
*/
function foogallery_test_thumb_url() {
return apply_filters( 'foogallery_test_thumb_url', FOOGALLERY_URL . 'assets/test_thumb_1.jpg' );
}
/**
* Return all the gallery datasources used within FooGallery
*
* @return array
*/
function foogallery_gallery_datasources() {
$default_datasource = foogallery_default_datasource();
$datasources[$default_datasource] = 'FooGalleryDatasource_MediaLibrary';
return apply_filters( 'foogallery_gallery_datasources', $datasources );
}
/**
* Returns the default gallery datasource
*
* @return string
*/
function foogallery_default_datasource() {
return foogallery_get_default( 'datasource', 'media_library' );
}
/**
* Instantiates a FooGallery datasource based on a datasource name
*
* @param $datasource_name string
*
* @return IFooGalleryDatasource
*/
function foogallery_instantiate_datasource( $datasource_name ) {
$datasources = foogallery_gallery_datasources();
if ( array_key_exists( $datasource_name, $datasources ) ) {
return new $datasources[$datasource_name];
}
return new FooGalleryDatasource_MediaLibrary();
}
/**
* Returns the src to the built-in image placeholder
* @return string
*/
function foogallery_image_placeholder_src() {
return apply_filters( 'foogallery_image_placeholder_src', FOOGALLERY_URL . 'assets/image-placeholder.png' );
}
/**
* Returns the image html for the built-in image placeholder
*
* @param array $args
*
* @return string
*/
function foogallery_image_placeholder_html( $args ) {
if ( !isset( $args ) ) {
$args = array(
'width' => 150,
'height' => 150
);
}
$args['src'] = foogallery_image_placeholder_src();
$args = array_map( 'esc_attr', $args );
$html = '<img ';
foreach ( $args as $name => $value ) {
$html .= " $name=" . '"' . $value . '"';
}
$html .= ' />';
return apply_filters( 'foogallery_image_placeholder_html', $html, $args );
}
/**
* Returns the thumbnail html for the featured attachment for a gallery.
* If no featured attachment can be found, then a placeholder image src is returned instead
*
* @param FooGallery $gallery
* @param array $args
*
* @return string
*/
function foogallery_find_featured_attachment_thumbnail_html( $gallery, $args = null ){
if ( !isset( $gallery ) ) return '';
if ( !isset( $args ) ) {
$args = array(
'width' => 150,
'height' => 150
);
}
$featuredAttachment = $gallery->featured_attachment();
if ( $featuredAttachment ) {
return $featuredAttachment->html_img( $args );
} else {
//if we have no featured attachment, then use the built-in image placeholder
return foogallery_image_placeholder_html( $args );
}
}
/**
* Returns the thumbnail src for the featured attachment for a gallery.
* If no featured attachment can be found, then a placeholder image src is returned instead
*
* @param FooGallery $gallery
* @param array $args
*
* @return string
*/
function foogallery_find_featured_attachment_thumbnail_src( $gallery, $args = null ){
if ( !isset( $gallery ) ) return '';
if ( !isset( $args ) ) {
$args = array(
'width' => 150,
'height' => 150
);
}
$featuredAttachment = $gallery->featured_attachment();
if ( $featuredAttachment ) {
return $featuredAttachment->html_img_src( $args );
} else {
//if we have no featured attachment, then use the built-in image placeholder
return foogallery_image_placeholder_src();
}
}
/**
* Returns the available retina options that can be chosen
*/
function foogallery_retina_options() {
return apply_filters( 'foogallery_retina_options', array(
'2x' => __('2x', 'foogallery'),
'3x' => __('3x', 'foogallery'),
'4x' => __('4x', 'foogallery')
) );
}
/**
* Does a full uninstall of the plugin including all data and settings!
*/
function foogallery_uninstall() {
if ( !current_user_can( 'install_plugins' ) ) exit;
//delete all gallery posts first
global $wpdb;
$query = "SELECT p.ID FROM {$wpdb->posts} AS p WHERE p.post_type IN (%s)";
$gallery_post_ids = $wpdb->get_col( $wpdb->prepare( $query, FOOGALLERY_CPT_GALLERY ) );
if ( !empty( $gallery_post_ids ) ) {
$deleted = 0;
foreach ( $gallery_post_ids as $post_id ) {
$del = wp_delete_post( $post_id );
if ( false !== $del ) {
++$deleted;
}
}
}
//delete all options
if ( is_network_admin() ) {
delete_site_option( FOOGALLERY_SLUG );
} else {
delete_option( FOOGALLERY_SLUG );
}
delete_option( FOOGALLERY_OPTION_VERSION );
delete_option( FOOGALLERY_OPTION_THUMB_TEST );
delete_option( FOOGALLERY_EXTENSIONS_SLUGS_OPTIONS_KEY );
delete_option( FOOGALLERY_EXTENSIONS_LOADING_ERRORS );
delete_option( FOOGALLERY_EXTENSIONS_LOADING_ERRORS_RESPONSE );
delete_option( FOOGALLERY_EXTENSIONS_SLUGS_OPTIONS_KEY );
delete_option( FOOGALLERY_EXTENSIONS_ACTIVATED_OPTIONS_KEY );
delete_option( FOOGALLERY_EXTENSIONS_ERRORS_OPTIONS_KEY );
//let any extensions clean up after themselves
do_action( 'foogallery_uninstall' );
}