Version Description
- Fix: PHP optimizations to improve performance
- Fix: Automatic Layout option now selects default images based on the specified row height to improve gallery loading times
- Fix: Minor bug fixes
Download this release
Release Info
| Developer | chrisakelley |
| Plugin | |
| Version | 1.5.6 |
| Comparing to | |
| See all releases | |
Code changes from version 1.5.5 to 1.5.6
- assets/css/admin.css +2 -1
- assets/scss/admin.scss +2 -1
- envira-gallery-lite.php +23 -17
- includes/admin/addons.php +59 -3
- includes/admin/common.php +15 -15
- includes/admin/review.php +212 -0
- includes/global/shortcode.php +56 -62
- readme.txt +10 -0
assets/css/admin.css
CHANGED
|
@@ -101,11 +101,12 @@ body.post-type-envira_album {
|
|
| 101 |
body.post-type-envira_album div.wrap > h1,
|
| 102 |
body.post-type-envira_album div.wrap > h2 {
|
| 103 |
margin: 0 0 20px 0;
|
| 104 |
-
padding: 15px
|
| 105 |
background: #ffffff;
|
| 106 |
font-weight: 600;
|
| 107 |
font-size: 20px;
|
| 108 |
width: 100%;
|
|
|
|
| 109 |
/**
|
| 110 |
* Page Title Action (i.e. Add New)
|
| 111 |
*/
|
| 101 |
body.post-type-envira_album div.wrap > h1,
|
| 102 |
body.post-type-envira_album div.wrap > h2 {
|
| 103 |
margin: 0 0 20px 0;
|
| 104 |
+
padding: 15px 0 10px;
|
| 105 |
background: #ffffff;
|
| 106 |
font-weight: 600;
|
| 107 |
font-size: 20px;
|
| 108 |
width: 100%;
|
| 109 |
+
text-indent: 20px;
|
| 110 |
/**
|
| 111 |
* Page Title Action (i.e. Add New)
|
| 112 |
*/
|
assets/scss/admin.scss
CHANGED
|
@@ -81,11 +81,12 @@ body.post-type-envira_album {
|
|
| 81 |
> h1,
|
| 82 |
> h2 {
|
| 83 |
margin: 0 0 20px 0;
|
| 84 |
-
padding: 15px
|
| 85 |
background: $white;
|
| 86 |
font-weight: 600;
|
| 87 |
font-size: 20px;
|
| 88 |
width: 100%;
|
|
|
|
| 89 |
|
| 90 |
/**
|
| 91 |
* Page Title Action (i.e. Add New)
|
| 81 |
> h1,
|
| 82 |
> h2 {
|
| 83 |
margin: 0 0 20px 0;
|
| 84 |
+
padding: 15px 0 10px;
|
| 85 |
background: $white;
|
| 86 |
font-weight: 600;
|
| 87 |
font-size: 20px;
|
| 88 |
width: 100%;
|
| 89 |
+
text-indent: 20px;
|
| 90 |
|
| 91 |
/**
|
| 92 |
* Page Title Action (i.e. Add New)
|
envira-gallery-lite.php
CHANGED
|
@@ -5,7 +5,7 @@
|
|
| 5 |
* Description: Envira Gallery is best responsive WordPress gallery plugin. This is the lite version.
|
| 6 |
* Author: Thomas Griffin
|
| 7 |
* Author URI: http://enviragallery.com
|
| 8 |
-
* Version: 1.5.
|
| 9 |
* Text Domain: envira-gallery
|
| 10 |
*
|
| 11 |
* Envira Gallery is free software: you can redistribute it and/or modify
|
|
@@ -53,7 +53,7 @@ class Envira_Gallery_Lite {
|
|
| 53 |
*
|
| 54 |
* @var string
|
| 55 |
*/
|
| 56 |
-
public $version = '1.5.
|
| 57 |
|
| 58 |
/**
|
| 59 |
* The name of the plugin.
|
|
@@ -161,6 +161,7 @@ class Envira_Gallery_Lite {
|
|
| 161 |
require plugin_dir_path( __FILE__ ) . 'includes/admin/notice.php';
|
| 162 |
require plugin_dir_path( __FILE__ ) . 'includes/admin/posttype.php';
|
| 163 |
require plugin_dir_path( __FILE__ ) . 'includes/admin/table.php';
|
|
|
|
| 164 |
|
| 165 |
}
|
| 166 |
|
|
@@ -511,22 +512,27 @@ function envira_gallery_lite_activation_hook( $network_wide ) {
|
|
| 511 |
// Load the main plugin class.
|
| 512 |
$envira_gallery_lite = Envira_Gallery_Lite::get_instance();
|
| 513 |
|
| 514 |
-
|
| 515 |
-
|
| 516 |
-
|
| 517 |
-
|
| 518 |
-
|
| 519 |
-
|
| 520 |
-
|
| 521 |
-
|
| 522 |
-
|
| 523 |
-
|
| 524 |
-
|
| 525 |
-
|
| 526 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 527 |
}
|
| 528 |
-
|
| 529 |
-
return new Mobile_Detect;
|
| 530 |
|
| 531 |
}
|
| 532 |
|
| 5 |
* Description: Envira Gallery is best responsive WordPress gallery plugin. This is the lite version.
|
| 6 |
* Author: Thomas Griffin
|
| 7 |
* Author URI: http://enviragallery.com
|
| 8 |
+
* Version: 1.5.6
|
| 9 |
* Text Domain: envira-gallery
|
| 10 |
*
|
| 11 |
* Envira Gallery is free software: you can redistribute it and/or modify
|
| 53 |
*
|
| 54 |
* @var string
|
| 55 |
*/
|
| 56 |
+
public $version = '1.5.6';
|
| 57 |
|
| 58 |
/**
|
| 59 |
* The name of the plugin.
|
| 161 |
require plugin_dir_path( __FILE__ ) . 'includes/admin/notice.php';
|
| 162 |
require plugin_dir_path( __FILE__ ) . 'includes/admin/posttype.php';
|
| 163 |
require plugin_dir_path( __FILE__ ) . 'includes/admin/table.php';
|
| 164 |
+
require plugin_dir_path( __FILE__ ) . 'includes/admin/review.php';
|
| 165 |
|
| 166 |
}
|
| 167 |
|
| 512 |
// Load the main plugin class.
|
| 513 |
$envira_gallery_lite = Envira_Gallery_Lite::get_instance();
|
| 514 |
|
| 515 |
+
|
| 516 |
+
if ( ! function_exists( 'envira_mobile_detect' ) ) {
|
| 517 |
+
|
| 518 |
+
/**
|
| 519 |
+
* Holder for mobile detect.
|
| 520 |
+
*
|
| 521 |
+
* @access public
|
| 522 |
+
* @return void
|
| 523 |
+
*/
|
| 524 |
+
function envira_mobile_detect(){
|
| 525 |
+
|
| 526 |
+
//Check for mobile detect class before loading it again //prevents conflicts with themes
|
| 527 |
+
if ( ! class_exists( 'Mobile_Detect' ) ) {
|
| 528 |
+
|
| 529 |
+
require_once trailingslashit( plugin_dir_path( __FILE__ ) ) . 'includes/global/Mobile_Detect.php';
|
| 530 |
+
|
| 531 |
+
}
|
| 532 |
+
|
| 533 |
+
return new Mobile_Detect;
|
| 534 |
+
|
| 535 |
}
|
|
|
|
|
|
|
| 536 |
|
| 537 |
}
|
| 538 |
|
includes/admin/addons.php
CHANGED
|
@@ -44,7 +44,7 @@ class Envira_Gallery_Addons {
|
|
| 44 |
* @var string
|
| 45 |
*/
|
| 46 |
public $hook;
|
| 47 |
-
|
| 48 |
/**
|
| 49 |
* Primary class constructor.
|
| 50 |
*
|
|
@@ -363,10 +363,12 @@ class Envira_Gallery_Addons {
|
|
| 363 |
* @return array Array of addon data otherwise.
|
| 364 |
*/
|
| 365 |
public function get_addons_data( $key ) {
|
| 366 |
-
|
|
|
|
|
|
|
| 367 |
// Get Addons
|
| 368 |
// If the key is valid, we'll get personalised upgrade URLs for each Addon (if necessary) and plugin update information.
|
| 369 |
-
$addons =
|
| 370 |
|
| 371 |
// If there was an API error, set transient for only 10 minutes.
|
| 372 |
if ( ! $addons ) {
|
|
@@ -565,6 +567,60 @@ class Envira_Gallery_Addons {
|
|
| 565 |
</div>
|
| 566 |
<?php
|
| 567 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 568 |
}
|
| 569 |
|
| 570 |
/**
|
| 44 |
* @var string
|
| 45 |
*/
|
| 46 |
public $hook;
|
| 47 |
+
public $key;
|
| 48 |
/**
|
| 49 |
* Primary class constructor.
|
| 50 |
*
|
| 363 |
* @return array Array of addon data otherwise.
|
| 364 |
*/
|
| 365 |
public function get_addons_data( $key ) {
|
| 366 |
+
|
| 367 |
+
$this->key = $key;
|
| 368 |
+
|
| 369 |
// Get Addons
|
| 370 |
// If the key is valid, we'll get personalised upgrade URLs for each Addon (if necessary) and plugin update information.
|
| 371 |
+
$addons = $this->perform_remote_request( 'get-addons-data-v15', array( 'tgm-updater-key' => $key ) );
|
| 372 |
|
| 373 |
// If there was an API error, set transient for only 10 minutes.
|
| 374 |
if ( ! $addons ) {
|
| 567 |
</div>
|
| 568 |
<?php
|
| 569 |
|
| 570 |
+
}
|
| 571 |
+
/**
|
| 572 |
+
* Queries the remote URL via wp_remote_post and returns a json decoded response.
|
| 573 |
+
*
|
| 574 |
+
* @since 1.0.0
|
| 575 |
+
*
|
| 576 |
+
* @param string $action The name of the $_POST action var.
|
| 577 |
+
* @param array $body The content to retrieve from the remote URL.
|
| 578 |
+
* @param array $headers The headers to send to the remote URL.
|
| 579 |
+
* @param string $return_format The format for returning content from the remote URL.
|
| 580 |
+
* @return string|bool Json decoded response on success, false on failure.
|
| 581 |
+
*/
|
| 582 |
+
public function perform_remote_request( $action, $body = array(), $headers = array(), $return_format = 'json' ) {
|
| 583 |
+
|
| 584 |
+
// Build the body of the request.
|
| 585 |
+
$body = wp_parse_args(
|
| 586 |
+
$body,
|
| 587 |
+
array(
|
| 588 |
+
'tgm-updater-action' => $action,
|
| 589 |
+
'tgm-updater-key' => $this->key,
|
| 590 |
+
'tgm-updater-wp-version' => get_bloginfo( 'version' ),
|
| 591 |
+
'tgm-updater-referer' => site_url()
|
| 592 |
+
)
|
| 593 |
+
);
|
| 594 |
+
$body = http_build_query( $body, '', '&' );
|
| 595 |
+
|
| 596 |
+
// Build the headers of the request.
|
| 597 |
+
$headers = wp_parse_args(
|
| 598 |
+
$headers,
|
| 599 |
+
array(
|
| 600 |
+
'Content-Type' => 'application/x-www-form-urlencoded',
|
| 601 |
+
'Content-Length' => strlen( $body )
|
| 602 |
+
)
|
| 603 |
+
);
|
| 604 |
+
|
| 605 |
+
// Setup variable for wp_remote_post.
|
| 606 |
+
$post = array(
|
| 607 |
+
'headers' => $headers,
|
| 608 |
+
'body' => $body
|
| 609 |
+
);
|
| 610 |
+
|
| 611 |
+
// Perform the query and retrieve the response.
|
| 612 |
+
$response = wp_remote_post( 'http://enviragallery.com', $post );
|
| 613 |
+
$response_code = wp_remote_retrieve_response_code( $response );
|
| 614 |
+
$response_body = wp_remote_retrieve_body( $response );
|
| 615 |
+
|
| 616 |
+
// Bail out early if there are any errors.
|
| 617 |
+
if ( 200 != $response_code || is_wp_error( $response_body ) ) {
|
| 618 |
+
return false;
|
| 619 |
+
}
|
| 620 |
+
|
| 621 |
+
// Return the json decoded content.
|
| 622 |
+
return json_decode( $response_body );
|
| 623 |
+
|
| 624 |
}
|
| 625 |
|
| 626 |
/**
|
includes/admin/common.php
CHANGED
|
@@ -35,7 +35,7 @@ class Envira_Gallery_Common_Admin {
|
|
| 35 |
* @var object
|
| 36 |
*/
|
| 37 |
public $base;
|
| 38 |
-
|
| 39 |
/**
|
| 40 |
* Holds the metabox class object.
|
| 41 |
*
|
|
@@ -57,11 +57,11 @@ class Envira_Gallery_Common_Admin {
|
|
| 57 |
|
| 58 |
// Handle any necessary DB upgrades.
|
| 59 |
add_action( 'admin_init', array( $this, 'db_upgrade' ) );
|
| 60 |
-
|
| 61 |
// Load admin assets.
|
| 62 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_styles' ) );
|
| 63 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
|
| 64 |
-
|
| 65 |
// Delete any gallery association on attachment deletion. Also delete any extra cropped images.
|
| 66 |
add_action( 'delete_attachment', array( $this, 'delete_gallery_association' ) );
|
| 67 |
add_action( 'delete_attachment', array( $this, 'delete_cropped_image' ) );
|
|
@@ -104,7 +104,7 @@ class Envira_Gallery_Common_Admin {
|
|
| 104 |
if ( ! $cptGalleries ) {
|
| 105 |
// Get Post Types, excluding our own
|
| 106 |
// We don't use post_status => 'any', as this doesn't include CPTs where exclude_from_search = true.
|
| 107 |
-
$postTypes = get_post_types( array(
|
| 108 |
'public' => true,
|
| 109 |
) );
|
| 110 |
$excludedPostTypes = array( 'envira', 'envira_album', 'attachment' );
|
|
@@ -113,7 +113,7 @@ class Envira_Gallery_Common_Admin {
|
|
| 113 |
unset( $postTypes[ $key ] );
|
| 114 |
}
|
| 115 |
}
|
| 116 |
-
|
| 117 |
// Get all Posts that have _eg_gallery_data set
|
| 118 |
$inPostGalleries = new WP_Query( array(
|
| 119 |
'post_type' => $postTypes,
|
|
@@ -126,7 +126,7 @@ class Envira_Gallery_Common_Admin {
|
|
| 126 |
),
|
| 127 |
)
|
| 128 |
) );
|
| 129 |
-
|
| 130 |
// Check if any Posts with galleries exist
|
| 131 |
if ( count( $inPostGalleries->posts ) > 0 ) {
|
| 132 |
$migrated_galleries = 0;
|
|
@@ -138,7 +138,7 @@ class Envira_Gallery_Common_Admin {
|
|
| 138 |
if ( $post->post_type == 'envira' || $post->post_type == 'envira_album' ) {
|
| 139 |
continue;
|
| 140 |
}
|
| 141 |
-
|
| 142 |
// Get metadata
|
| 143 |
$data = get_post_meta( $post->ID, '_eg_gallery_data', true);
|
| 144 |
$in = get_post_meta( $post->ID, '_eg_in_gallery', true);
|
|
@@ -239,7 +239,7 @@ class Envira_Gallery_Common_Admin {
|
|
| 239 |
<?php
|
| 240 |
|
| 241 |
}
|
| 242 |
-
|
| 243 |
/**
|
| 244 |
* Loads styles for all Envira-based Administration Screens.
|
| 245 |
*
|
|
@@ -251,7 +251,7 @@ class Envira_Gallery_Common_Admin {
|
|
| 251 |
|
| 252 |
// Get current screen.
|
| 253 |
$screen = get_current_screen();
|
| 254 |
-
|
| 255 |
// Bail if we're not on the Envira Post Type screen.
|
| 256 |
if ( 'envira' !== $screen->post_type && 'envira_album' !== $screen->post_type ) {
|
| 257 |
return;
|
|
@@ -277,7 +277,7 @@ class Envira_Gallery_Common_Admin {
|
|
| 277 |
|
| 278 |
// Get current screen.
|
| 279 |
$screen = get_current_screen();
|
| 280 |
-
|
| 281 |
// Bail if we're not on the Envira Post Type screen.
|
| 282 |
if ( 'envira' !== $screen->post_type && 'envira_album' !== $screen->post_type ) {
|
| 283 |
return;
|
|
@@ -299,7 +299,7 @@ class Envira_Gallery_Common_Admin {
|
|
| 299 |
do_action( 'envira_gallery_admin_scripts' );
|
| 300 |
|
| 301 |
}
|
| 302 |
-
|
| 303 |
/**
|
| 304 |
* Deletes the Envira gallery association for the image being deleted.
|
| 305 |
*
|
|
@@ -467,11 +467,11 @@ class Envira_Gallery_Common_Admin {
|
|
| 467 |
public function delete_gallery( $id ) {
|
| 468 |
|
| 469 |
// Check if the media_delete setting is enabled
|
| 470 |
-
$media_delete =
|
| 471 |
if ( $media_delete != '1' ) {
|
| 472 |
return;
|
| 473 |
-
}
|
| 474 |
-
|
| 475 |
// Get post
|
| 476 |
$gallery = get_post( $id );
|
| 477 |
|
|
@@ -527,7 +527,7 @@ class Envira_Gallery_Common_Admin {
|
|
| 527 |
|
| 528 |
// Whether we have an ID or not, filter the ID.
|
| 529 |
$shareasale_id = apply_filters( 'envira_gallery_shareasale_id', $shareasale_id );
|
| 530 |
-
|
| 531 |
// If at this point we still don't have an ID, we really don't have one!
|
| 532 |
// Just return the standard upgrade URL.
|
| 533 |
if ( empty( $shareasale_id ) ) {
|
| 35 |
* @var object
|
| 36 |
*/
|
| 37 |
public $base;
|
| 38 |
+
|
| 39 |
/**
|
| 40 |
* Holds the metabox class object.
|
| 41 |
*
|
| 57 |
|
| 58 |
// Handle any necessary DB upgrades.
|
| 59 |
add_action( 'admin_init', array( $this, 'db_upgrade' ) );
|
| 60 |
+
|
| 61 |
// Load admin assets.
|
| 62 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_styles' ) );
|
| 63 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
|
| 64 |
+
|
| 65 |
// Delete any gallery association on attachment deletion. Also delete any extra cropped images.
|
| 66 |
add_action( 'delete_attachment', array( $this, 'delete_gallery_association' ) );
|
| 67 |
add_action( 'delete_attachment', array( $this, 'delete_cropped_image' ) );
|
| 104 |
if ( ! $cptGalleries ) {
|
| 105 |
// Get Post Types, excluding our own
|
| 106 |
// We don't use post_status => 'any', as this doesn't include CPTs where exclude_from_search = true.
|
| 107 |
+
$postTypes = get_post_types( array(
|
| 108 |
'public' => true,
|
| 109 |
) );
|
| 110 |
$excludedPostTypes = array( 'envira', 'envira_album', 'attachment' );
|
| 113 |
unset( $postTypes[ $key ] );
|
| 114 |
}
|
| 115 |
}
|
| 116 |
+
|
| 117 |
// Get all Posts that have _eg_gallery_data set
|
| 118 |
$inPostGalleries = new WP_Query( array(
|
| 119 |
'post_type' => $postTypes,
|
| 126 |
),
|
| 127 |
)
|
| 128 |
) );
|
| 129 |
+
|
| 130 |
// Check if any Posts with galleries exist
|
| 131 |
if ( count( $inPostGalleries->posts ) > 0 ) {
|
| 132 |
$migrated_galleries = 0;
|
| 138 |
if ( $post->post_type == 'envira' || $post->post_type == 'envira_album' ) {
|
| 139 |
continue;
|
| 140 |
}
|
| 141 |
+
|
| 142 |
// Get metadata
|
| 143 |
$data = get_post_meta( $post->ID, '_eg_gallery_data', true);
|
| 144 |
$in = get_post_meta( $post->ID, '_eg_in_gallery', true);
|
| 239 |
<?php
|
| 240 |
|
| 241 |
}
|
| 242 |
+
|
| 243 |
/**
|
| 244 |
* Loads styles for all Envira-based Administration Screens.
|
| 245 |
*
|
| 251 |
|
| 252 |
// Get current screen.
|
| 253 |
$screen = get_current_screen();
|
| 254 |
+
|
| 255 |
// Bail if we're not on the Envira Post Type screen.
|
| 256 |
if ( 'envira' !== $screen->post_type && 'envira_album' !== $screen->post_type ) {
|
| 257 |
return;
|
| 277 |
|
| 278 |
// Get current screen.
|
| 279 |
$screen = get_current_screen();
|
| 280 |
+
|
| 281 |
// Bail if we're not on the Envira Post Type screen.
|
| 282 |
if ( 'envira' !== $screen->post_type && 'envira_album' !== $screen->post_type ) {
|
| 283 |
return;
|
| 299 |
do_action( 'envira_gallery_admin_scripts' );
|
| 300 |
|
| 301 |
}
|
| 302 |
+
|
| 303 |
/**
|
| 304 |
* Deletes the Envira gallery association for the image being deleted.
|
| 305 |
*
|
| 467 |
public function delete_gallery( $id ) {
|
| 468 |
|
| 469 |
// Check if the media_delete setting is enabled
|
| 470 |
+
$media_delete = false;
|
| 471 |
if ( $media_delete != '1' ) {
|
| 472 |
return;
|
| 473 |
+
}
|
| 474 |
+
|
| 475 |
// Get post
|
| 476 |
$gallery = get_post( $id );
|
| 477 |
|
| 527 |
|
| 528 |
// Whether we have an ID or not, filter the ID.
|
| 529 |
$shareasale_id = apply_filters( 'envira_gallery_shareasale_id', $shareasale_id );
|
| 530 |
+
|
| 531 |
// If at this point we still don't have an ID, we really don't have one!
|
| 532 |
// Just return the standard upgrade URL.
|
| 533 |
if ( empty( $shareasale_id ) ) {
|
includes/admin/review.php
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Review class.
|
| 4 |
+
*
|
| 5 |
+
* @since 1.1.4.5
|
| 6 |
+
*
|
| 7 |
+
* @package envira
|
| 8 |
+
* @author Devin Vinson
|
| 9 |
+
*/
|
| 10 |
+
class Envira_Lite_Review {
|
| 11 |
+
|
| 12 |
+
/**
|
| 13 |
+
* Holds the class object.
|
| 14 |
+
*
|
| 15 |
+
* @since 1.1.4.5
|
| 16 |
+
*
|
| 17 |
+
* @var object
|
| 18 |
+
*/
|
| 19 |
+
public static $instance;
|
| 20 |
+
|
| 21 |
+
/**
|
| 22 |
+
* Path to the file.
|
| 23 |
+
*
|
| 24 |
+
* @since 1.1.4.5
|
| 25 |
+
*
|
| 26 |
+
* @var string
|
| 27 |
+
*/
|
| 28 |
+
public $file = __FILE__;
|
| 29 |
+
|
| 30 |
+
/**
|
| 31 |
+
* Holds the review slug.
|
| 32 |
+
*
|
| 33 |
+
* @since 1.1.4.5
|
| 34 |
+
*
|
| 35 |
+
* @var string
|
| 36 |
+
*/
|
| 37 |
+
public $hook;
|
| 38 |
+
|
| 39 |
+
/**
|
| 40 |
+
* Holds the base class object.
|
| 41 |
+
*
|
| 42 |
+
* @since 1.1.4.5
|
| 43 |
+
*
|
| 44 |
+
* @var object
|
| 45 |
+
*/
|
| 46 |
+
public $base;
|
| 47 |
+
|
| 48 |
+
/**
|
| 49 |
+
* API Username.
|
| 50 |
+
*
|
| 51 |
+
* @since 1.1.4.5
|
| 52 |
+
*
|
| 53 |
+
* @var bool|string
|
| 54 |
+
*/
|
| 55 |
+
public $user = false;
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
/**
|
| 59 |
+
* Primary class constructor.
|
| 60 |
+
*
|
| 61 |
+
* @since 1.1.4.5
|
| 62 |
+
*/
|
| 63 |
+
public function __construct() {
|
| 64 |
+
|
| 65 |
+
$this->base = Envira_Gallery_Lite::get_instance();
|
| 66 |
+
|
| 67 |
+
add_action( 'admin_notices', array( $this, 'review' ) );
|
| 68 |
+
add_action( 'wp_ajax_envira_dismiss_review', array( $this, 'dismiss_review' ) );
|
| 69 |
+
add_filter( 'admin_footer_text', array( $this, 'admin_footer' ), 1, 2 );
|
| 70 |
+
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
/**
|
| 74 |
+
* When user is on a Envira related admin page, display footer text
|
| 75 |
+
* that graciously asks them to rate us.
|
| 76 |
+
*
|
| 77 |
+
* @since
|
| 78 |
+
* @param string $text
|
| 79 |
+
* @return string
|
| 80 |
+
*/
|
| 81 |
+
public function admin_footer( $text ) {
|
| 82 |
+
global $current_screen;
|
| 83 |
+
if ( !empty( $current_screen->id ) && strpos( $current_screen->id, 'envira' ) !== false ) {
|
| 84 |
+
$url = 'https://wordpress.org/support/plugin/envira-gallery-lite/reviews/?filter=5#new-post';
|
| 85 |
+
$text = sprintf( __( 'Please rate <strong>Envira Gallery</strong> <a href="%s" target="_blank">★★★★★</a> on <a href="%s" target="_blank">WordPress.org</a> to help us spread the word. Thank you from the Envira Gallery team!', 'wpforms' ), $url, $url );
|
| 86 |
+
}
|
| 87 |
+
return $text;
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
/**
|
| 91 |
+
* Add admin notices as needed for reviews.
|
| 92 |
+
*
|
| 93 |
+
* @since 1.1.6.1
|
| 94 |
+
*/
|
| 95 |
+
public function review() {
|
| 96 |
+
|
| 97 |
+
// Verify that we can do a check for reviews.
|
| 98 |
+
$review = get_option( 'envira_gallery_review' );
|
| 99 |
+
$time = time();
|
| 100 |
+
$load = false;
|
| 101 |
+
|
| 102 |
+
if ( ! $review ) {
|
| 103 |
+
$review = array(
|
| 104 |
+
'time' => $time,
|
| 105 |
+
'dismissed' => false
|
| 106 |
+
);
|
| 107 |
+
$load = true;
|
| 108 |
+
} else {
|
| 109 |
+
// Check if it has been dismissed or not.
|
| 110 |
+
if ( (isset( $review['dismissed'] ) && ! $review['dismissed']) && (isset( $review['time'] ) && (($review['time'] + DAY_IN_SECONDS) <= $time)) ) {
|
| 111 |
+
$load = true;
|
| 112 |
+
}
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
// If we cannot load, return early.
|
| 116 |
+
if ( ! $load ) {
|
| 117 |
+
return;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
// Update the review option now.
|
| 121 |
+
update_option( 'envira_gallery_review', $review );
|
| 122 |
+
|
| 123 |
+
// Run through optins on the site to see if any have been loaded for more than a week.
|
| 124 |
+
$valid = false;
|
| 125 |
+
$galleries = $this->base->get_galleries();
|
| 126 |
+
|
| 127 |
+
if ( ! $galleries ) {
|
| 128 |
+
return;
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
foreach ( $galleries as $gallery ) {
|
| 132 |
+
|
| 133 |
+
$data = get_post( $gallery['id']);
|
| 134 |
+
|
| 135 |
+
// Check the creation date of the local optin. It must be at least one week after.
|
| 136 |
+
$created = isset( $data->post_date ) ? strtotime( $data->post_date ) + (7 * DAY_IN_SECONDS) : false;
|
| 137 |
+
if ( ! $created ) {
|
| 138 |
+
continue;
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
if ( $created <= $time ) {
|
| 142 |
+
$valid = true;
|
| 143 |
+
break;
|
| 144 |
+
}
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
// If we don't have a valid optin yet, return.
|
| 148 |
+
if ( ! $valid ) {
|
| 149 |
+
return;
|
| 150 |
+
}
|
| 151 |
+
|
| 152 |
+
// We have a candidate! Output a review message.
|
| 153 |
+
?>
|
| 154 |
+
<div class="notice notice-info is-dismissible envira-review-notice">
|
| 155 |
+
<p><?php _e( 'Hey, I noticed you created a photo gallery with Envira - that’s awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation.', 'envira-gallery-lite' ); ?></p>
|
| 156 |
+
<p><strong><?php _e( '~ Syed Balkhi<br>Co-Founder of OptinMonster', 'envira-gallery-lite' ); ?></strong></p>
|
| 157 |
+
<p>
|
| 158 |
+
<a href="https://wordpress.org/support/plugin/envira-gallery-lite/reviews/?filter=5#new-post" class="envira-dismiss-review-notice envira-review-out" target="_blank" rel="noopener"><?php _e( 'Ok, you deserve it', 'envira-gallery-lite' ); ?></a><br>
|
| 159 |
+
<a href="#" class="envira-dismiss-review-notice" target="_blank" rel="noopener"><?php _e( 'Nope, maybe later', 'envira-gallery-lite' ); ?></a><br>
|
| 160 |
+
<a href="#" class="envira-dismiss-review-notice" target="_blank" rel="noopener"><?php _e( 'I already did', 'envira-gallery-lite' ); ?></a><br>
|
| 161 |
+
</p>
|
| 162 |
+
</div>
|
| 163 |
+
<script type="text/javascript">
|
| 164 |
+
jQuery(document).ready( function($) {
|
| 165 |
+
$(document).on('click', '.envira-dismiss-review-notice, .envira-review-notice button', function( event ) {
|
| 166 |
+
if ( ! $(this).hasClass('envira-review-out') ) {
|
| 167 |
+
event.preventDefault();
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
$.post( ajaxurl, {
|
| 171 |
+
action: 'envira_dismiss_review'
|
| 172 |
+
});
|
| 173 |
+
|
| 174 |
+
$('.envira-review-notice').remove();
|
| 175 |
+
});
|
| 176 |
+
});
|
| 177 |
+
</script>
|
| 178 |
+
<?php
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
/**
|
| 182 |
+
* Dismiss the review nag
|
| 183 |
+
*
|
| 184 |
+
* @since 1.1.6.1
|
| 185 |
+
*/
|
| 186 |
+
public function dismiss_review() {
|
| 187 |
+
|
| 188 |
+
$review = get_option( 'envira_gallery_review' );
|
| 189 |
+
if ( ! $review ) {
|
| 190 |
+
$review = array();
|
| 191 |
+
}
|
| 192 |
+
|
| 193 |
+
$review['time'] = time();
|
| 194 |
+
$review['dismissed'] = true;
|
| 195 |
+
|
| 196 |
+
update_option( 'envira_gallery_review', $review );
|
| 197 |
+
die;
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
|
| 201 |
+
public static function get_instance() {
|
| 202 |
+
|
| 203 |
+
if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Envira_Lite_Review ) ) {
|
| 204 |
+
self::$instance = new Envira_Lite_Review();
|
| 205 |
+
}
|
| 206 |
+
|
| 207 |
+
return self::$instance;
|
| 208 |
+
|
| 209 |
+
}
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
$envira_lite_review = Envira_Lite_Review::get_instance();
|
includes/global/shortcode.php
CHANGED
|
@@ -72,6 +72,10 @@ class Envira_Gallery_Shortcode {
|
|
| 72 |
*/
|
| 73 |
public $index = array();
|
| 74 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
/**
|
| 76 |
* Primary class constructor.
|
| 77 |
*
|
|
@@ -81,6 +85,8 @@ class Envira_Gallery_Shortcode {
|
|
| 81 |
|
| 82 |
// Load the base class object.
|
| 83 |
$this->base = Envira_Gallery_Lite::get_instance();
|
|
|
|
|
|
|
| 84 |
|
| 85 |
// Register main gallery style.
|
| 86 |
wp_register_style( $this->base->plugin_slug . '-style', plugins_url( 'assets/css/envira.css', $this->base->file ), array(), $this->base->version );
|
|
@@ -150,11 +156,13 @@ class Envira_Gallery_Shortcode {
|
|
| 150 |
return;
|
| 151 |
}
|
| 152 |
|
|
|
|
|
|
|
| 153 |
// Get rid of any external plugins trying to jack up our stuff where a gallery is present.
|
| 154 |
$this->plugin_humility();
|
| 155 |
|
| 156 |
// Prepare variables.
|
| 157 |
-
$this->data[ $data['id'] ] = $
|
| 158 |
$this->index[ $data['id'] ] = array();
|
| 159 |
$gallery = '';
|
| 160 |
$i = 1;
|
|
@@ -171,37 +179,37 @@ class Envira_Gallery_Shortcode {
|
|
| 171 |
wp_enqueue_script( $this->base->plugin_slug . '-script' );
|
| 172 |
|
| 173 |
// Load custom gallery themes if necessary.
|
| 174 |
-
if ( 'base' !== $this->get_config( 'gallery_theme', $
|
| 175 |
// if columns is zero, then it's automattic which means we do not load gallery themes because it will mess up the new javascript layout
|
| 176 |
-
$this->load_gallery_theme( $this->get_config( 'gallery_theme', $
|
| 177 |
}
|
| 178 |
|
| 179 |
// Load custom lightbox themes if necessary.
|
| 180 |
-
if ( 'base' !== $this->get_config( 'lightbox_theme', $
|
| 181 |
-
$this->load_lightbox_theme( $this->get_config( 'lightbox_theme', $
|
| 182 |
}
|
| 183 |
|
| 184 |
// Load gallery init code in the footer.
|
| 185 |
add_action( 'wp_footer', array( $this, 'gallery_init' ), 1000 );
|
| 186 |
|
| 187 |
// Run a hook before the gallery output begins but after scripts and inits have been set.
|
| 188 |
-
do_action( 'envira_gallery_before_output', $
|
| 189 |
|
| 190 |
// Apply a filter before starting the gallery HTML.
|
| 191 |
-
$gallery = apply_filters( 'envira_gallery_output_start', $gallery, $
|
| 192 |
|
| 193 |
// Build out the gallery HTML.
|
| 194 |
-
$gallery .= '<div id="envira-gallery-wrap-' . sanitize_html_class( $
|
| 195 |
-
$gallery = apply_filters( 'envira_gallery_output_before_container', $gallery, $
|
| 196 |
|
| 197 |
// Description
|
| 198 |
-
if ( isset( $
|
| 199 |
-
$gallery = $this->description( $gallery, $
|
| 200 |
}
|
| 201 |
|
| 202 |
|
| 203 |
$opacity_insert = false;
|
| 204 |
-
if ( $this->get_config( 'columns', $
|
| 205 |
$opacity_insert = ' style="opacity: 0.0" ';
|
| 206 |
}
|
| 207 |
|
|
@@ -209,20 +217,20 @@ class Envira_Gallery_Shortcode {
|
|
| 209 |
$extra_css = 'envira-gallery-justified-public';
|
| 210 |
$row_height = false;
|
| 211 |
$justified_gallery_theme = false;
|
| 212 |
-
if ( $this->get_config( 'columns', $
|
| 213 |
$extra_css = false;
|
| 214 |
} else {
|
| 215 |
-
$row_height = $this->get_config( 'justified_row_height', $
|
| 216 |
-
$justified_gallery_theme = $this->get_config( 'justified_gallery_theme', $
|
| 217 |
}
|
| 218 |
|
| 219 |
-
$gallery .= '<div' . $opacity_insert . ' data-row-height="'.$row_height.'" data-gallery-theme="'.$justified_gallery_theme.'" id="envira-gallery-' . sanitize_html_class( $
|
| 220 |
|
| 221 |
// Start image loop
|
| 222 |
foreach ( $data['gallery'] as $id => $item ) {
|
| 223 |
|
| 224 |
// Add the gallery item to the markup
|
| 225 |
-
$gallery = $this->generate_gallery_item_markup( $gallery, $
|
| 226 |
|
| 227 |
// Increment the iterator.
|
| 228 |
$i++;
|
|
@@ -232,31 +240,31 @@ class Envira_Gallery_Shortcode {
|
|
| 232 |
|
| 233 |
$gallery .= '</div>';
|
| 234 |
// Description
|
| 235 |
-
if ( isset( $
|
| 236 |
-
$gallery = $this->description( $gallery, $
|
| 237 |
}
|
| 238 |
|
| 239 |
-
$gallery = apply_filters( 'envira_gallery_output_after_container', $gallery, $
|
| 240 |
|
| 241 |
$gallery .= '</div>';
|
| 242 |
-
$gallery = apply_filters( 'envira_gallery_output_end', $gallery, $
|
| 243 |
|
| 244 |
// Increment the counter.
|
| 245 |
$this->counter++;
|
| 246 |
|
| 247 |
// Remove any contextual filters so they don't affect other galleries on the page.
|
| 248 |
-
if ( $this->get_config( 'mobile', $
|
| 249 |
remove_filter( 'envira_gallery_output_image_attr', array( $this, 'mobile_image' ), 999, 4 );
|
| 250 |
}
|
| 251 |
|
| 252 |
// Add no JS fallback support.
|
| 253 |
$no_js = '<noscript>';
|
| 254 |
-
$no_js .= $this->get_indexable_images( $
|
| 255 |
$no_js .= '</noscript>';
|
| 256 |
$gallery .= $no_js;
|
| 257 |
|
| 258 |
// Return the gallery HTML.
|
| 259 |
-
return apply_filters( 'envira_gallery_output', $gallery, $
|
| 260 |
|
| 261 |
}
|
| 262 |
|
|
@@ -859,7 +867,7 @@ class Envira_Gallery_Shortcode {
|
|
| 859 |
$lightbox_transition_effect = $this->get_config( 'effect', $data );
|
| 860 |
|
| 861 |
/* Get standard effects */
|
| 862 |
-
$lightbox_standard_effects =
|
| 863 |
|
| 864 |
/* If open/close is standard, use openEffect, closeEffect */
|
| 865 |
if ( in_array( $lightbox_open_close_effect, $lightbox_standard_effects ) ) {
|
|
@@ -1205,7 +1213,7 @@ class Envira_Gallery_Shortcode {
|
|
| 1205 |
public function load_gallery_theme( $theme ) {
|
| 1206 |
|
| 1207 |
// Loop through the available themes and enqueue the one called.
|
| 1208 |
-
foreach (
|
| 1209 |
if ( $theme !== $data['value'] ) {
|
| 1210 |
continue;
|
| 1211 |
}
|
|
@@ -1231,7 +1239,7 @@ class Envira_Gallery_Shortcode {
|
|
| 1231 |
public function load_lightbox_theme( $theme ) {
|
| 1232 |
|
| 1233 |
// Loop through the available themes and enqueue the one called.
|
| 1234 |
-
foreach (
|
| 1235 |
if ( $theme !== $data['value'] ) {
|
| 1236 |
continue;
|
| 1237 |
}
|
|
@@ -1347,32 +1355,6 @@ class Envira_Gallery_Shortcode {
|
|
| 1347 |
// Inject new image size into $item
|
| 1348 |
$item['link'] = $image[0];
|
| 1349 |
|
| 1350 |
-
/*
|
| 1351 |
-
// Generate a retina version of the image
|
| 1352 |
-
$common = Envira_Gallery_Common::get_instance();
|
| 1353 |
-
$wordpress_image_sizes = $common->get_image_sizes();
|
| 1354 |
-
foreach ( $wordpress_image_sizes as $size ) {
|
| 1355 |
-
if ( $size['value'] !== $image_size ) {
|
| 1356 |
-
continue;
|
| 1357 |
-
}
|
| 1358 |
-
|
| 1359 |
-
// We found the image size. Use its dimensions
|
| 1360 |
-
$args = array(
|
| 1361 |
-
'position' => 'c',
|
| 1362 |
-
'width' => $size['width'],
|
| 1363 |
-
'height' => $size['height'],
|
| 1364 |
-
'quality' => 100,
|
| 1365 |
-
'retina' => true,
|
| 1366 |
-
);
|
| 1367 |
-
|
| 1368 |
-
// Get full image
|
| 1369 |
-
$full_image = wp_get_attachment_image_src( $id, 'full' );
|
| 1370 |
-
$item['lightbox_retina_image'] = $common->resize_image( $full_image[0], $args['width'], $args['height'], false, $args['position'], $args['quality'], $args['retina'] );
|
| 1371 |
-
break;
|
| 1372 |
-
|
| 1373 |
-
}
|
| 1374 |
-
*/
|
| 1375 |
-
|
| 1376 |
// Return
|
| 1377 |
return $item;
|
| 1378 |
|
|
@@ -1428,7 +1410,7 @@ class Envira_Gallery_Shortcode {
|
|
| 1428 |
|
| 1429 |
if ( count( $image_sizes_random ) == 0 ) {
|
| 1430 |
// The user didn't choose any image sizes - use them all.
|
| 1431 |
-
$wordpress_image_sizes =
|
| 1432 |
$wordpress_image_size_random_key = array_rand( $wordpress_image_sizes, 1 );
|
| 1433 |
$image_size = $wordpress_image_sizes[ $wordpress_image_size_random_key ]['value'];
|
| 1434 |
} else {
|
|
@@ -1443,8 +1425,23 @@ class Envira_Gallery_Shortcode {
|
|
| 1443 |
$src = wp_get_attachment_image_src( $id, $image_size );
|
| 1444 |
}
|
| 1445 |
} else {
|
| 1446 |
-
|
| 1447 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1448 |
|
| 1449 |
}
|
| 1450 |
|
|
@@ -1483,7 +1480,6 @@ class Envira_Gallery_Shortcode {
|
|
| 1483 |
// This is safe to call every time, as resize_image() will check if the image already exists, preventing thumbnails
|
| 1484 |
// from being generated every single time.
|
| 1485 |
$type = $mobile ? 'mobile' : 'crop'; // 'crop' is misleading here - it's the key that stores the thumbnail width + height
|
| 1486 |
-
$common = Envira_Gallery_Common::get_instance();
|
| 1487 |
$args = array(
|
| 1488 |
'position' => 'c',
|
| 1489 |
'width' => $this->get_config( $type . '_width', $data ),
|
|
@@ -1497,7 +1493,7 @@ class Envira_Gallery_Shortcode {
|
|
| 1497 |
// image width and height, which are hidden settings.
|
| 1498 |
if ( $image_size != 'default' && $retina ) {
|
| 1499 |
// Find WordPress registered image size
|
| 1500 |
-
$wordpress_image_sizes = $common->get_image_sizes( true ); // true = WordPress only image sizes (excludes random)
|
| 1501 |
|
| 1502 |
foreach ( $wordpress_image_sizes as $size ) {
|
| 1503 |
if ( $size['value'] !== $image_size ) {
|
|
@@ -1515,7 +1511,7 @@ class Envira_Gallery_Shortcode {
|
|
| 1515 |
// Filter
|
| 1516 |
$args = apply_filters( 'envira_gallery_crop_image_args', $args);
|
| 1517 |
|
| 1518 |
-
$resized_image = $common->resize_image( $image, $args['width'], $args['height'], $this->get_config( 'crop', $data ), $args['position'], $args['quality'], $args['retina'], $data );
|
| 1519 |
|
| 1520 |
// If there is an error, possibly output error message and return the default image src.
|
| 1521 |
if ( is_wp_error( $resized_image ) ) {
|
|
@@ -1632,9 +1628,7 @@ class Envira_Gallery_Shortcode {
|
|
| 1632 |
*/
|
| 1633 |
public function get_config( $key, $data ) {
|
| 1634 |
|
| 1635 |
-
$
|
| 1636 |
-
|
| 1637 |
-
return isset( $data['config'][$key] ) ? $data['config'][$key] : $instance->get_config_default( $key );
|
| 1638 |
|
| 1639 |
}
|
| 1640 |
|
| 72 |
*/
|
| 73 |
public $index = array();
|
| 74 |
|
| 75 |
+
public $gallery_data = array();
|
| 76 |
+
public $common;
|
| 77 |
+
public $is_mobile;
|
| 78 |
+
|
| 79 |
/**
|
| 80 |
* Primary class constructor.
|
| 81 |
*
|
| 85 |
|
| 86 |
// Load the base class object.
|
| 87 |
$this->base = Envira_Gallery_Lite::get_instance();
|
| 88 |
+
$this->common = Envira_Gallery_Common::get_instance();
|
| 89 |
+
$this->is_mobile = envira_mobile_detect()->isMobile();
|
| 90 |
|
| 91 |
// Register main gallery style.
|
| 92 |
wp_register_style( $this->base->plugin_slug . '-style', plugins_url( 'assets/css/envira.css', $this->base->file ), array(), $this->base->version );
|
| 156 |
return;
|
| 157 |
}
|
| 158 |
|
| 159 |
+
$this->gallery_data = $data;
|
| 160 |
+
|
| 161 |
// Get rid of any external plugins trying to jack up our stuff where a gallery is present.
|
| 162 |
$this->plugin_humility();
|
| 163 |
|
| 164 |
// Prepare variables.
|
| 165 |
+
$this->data[ $data['id'] ] = $this->gallery_data;
|
| 166 |
$this->index[ $data['id'] ] = array();
|
| 167 |
$gallery = '';
|
| 168 |
$i = 1;
|
| 179 |
wp_enqueue_script( $this->base->plugin_slug . '-script' );
|
| 180 |
|
| 181 |
// Load custom gallery themes if necessary.
|
| 182 |
+
if ( 'base' !== $this->get_config( 'gallery_theme', $this->gallery_data ) && $this->get_config( 'columns', $this->gallery_data ) > 0 ) {
|
| 183 |
// if columns is zero, then it's automattic which means we do not load gallery themes because it will mess up the new javascript layout
|
| 184 |
+
$this->load_gallery_theme( $this->get_config( 'gallery_theme', $this->gallery_data ) );
|
| 185 |
}
|
| 186 |
|
| 187 |
// Load custom lightbox themes if necessary.
|
| 188 |
+
if ( 'base' !== $this->get_config( 'lightbox_theme', $this->gallery_data ) ) {
|
| 189 |
+
$this->load_lightbox_theme( $this->get_config( 'lightbox_theme', $this->gallery_data ) );
|
| 190 |
}
|
| 191 |
|
| 192 |
// Load gallery init code in the footer.
|
| 193 |
add_action( 'wp_footer', array( $this, 'gallery_init' ), 1000 );
|
| 194 |
|
| 195 |
// Run a hook before the gallery output begins but after scripts and inits have been set.
|
| 196 |
+
do_action( 'envira_gallery_before_output', $this->gallery_data );
|
| 197 |
|
| 198 |
// Apply a filter before starting the gallery HTML.
|
| 199 |
+
$gallery = apply_filters( 'envira_gallery_output_start', $gallery, $this->gallery_data );
|
| 200 |
|
| 201 |
// Build out the gallery HTML.
|
| 202 |
+
$gallery .= '<div id="envira-gallery-wrap-' . sanitize_html_class( $this->gallery_data['id'] ) . '" class="' . $this->get_gallery_classes( $this->gallery_data ) . '" itemscope itemtype="http://schema.org/ImageGallery">';
|
| 203 |
+
$gallery = apply_filters( 'envira_gallery_output_before_container', $gallery, $this->gallery_data );
|
| 204 |
|
| 205 |
// Description
|
| 206 |
+
if ( isset( $this->gallery_data['config']['description_position'] ) && $this->gallery_data['config']['description_position'] == 'above' ) {
|
| 207 |
+
$gallery = $this->description( $gallery, $this->gallery_data );
|
| 208 |
}
|
| 209 |
|
| 210 |
|
| 211 |
$opacity_insert = false;
|
| 212 |
+
if ( $this->get_config( 'columns', $this->gallery_data ) == 0 ) {
|
| 213 |
$opacity_insert = ' style="opacity: 0.0" ';
|
| 214 |
}
|
| 215 |
|
| 217 |
$extra_css = 'envira-gallery-justified-public';
|
| 218 |
$row_height = false;
|
| 219 |
$justified_gallery_theme = false;
|
| 220 |
+
if ( $this->get_config( 'columns', $this->gallery_data ) > 0 ) {
|
| 221 |
$extra_css = false;
|
| 222 |
} else {
|
| 223 |
+
$row_height = $this->get_config( 'justified_row_height', $this->gallery_data );
|
| 224 |
+
$justified_gallery_theme = $this->get_config( 'justified_gallery_theme', $this->gallery_data );
|
| 225 |
}
|
| 226 |
|
| 227 |
+
$gallery .= '<div' . $opacity_insert . ' data-row-height="'.$row_height.'" data-gallery-theme="'.$justified_gallery_theme.'" id="envira-gallery-' . sanitize_html_class( $this->gallery_data['id'] ) . '" class="envira-gallery-public '.$extra_css.' envira-gallery-' . sanitize_html_class( $this->get_config( 'columns', $this->gallery_data ) ) . '-columns envira-clear' . ( $this->get_config( 'isotope', $this->gallery_data ) ? ' enviratope' : '' ) . ( $this->get_config( 'css_animations', $this->gallery_data ) ? ' envira-gallery-css-animations' : '' ) . '" data-envira-columns="' . $this->get_config( 'columns', $this->gallery_data ) . '">';
|
| 228 |
|
| 229 |
// Start image loop
|
| 230 |
foreach ( $data['gallery'] as $id => $item ) {
|
| 231 |
|
| 232 |
// Add the gallery item to the markup
|
| 233 |
+
$gallery = $this->generate_gallery_item_markup( $gallery, $this->gallery_data, $item, $id, $i );
|
| 234 |
|
| 235 |
// Increment the iterator.
|
| 236 |
$i++;
|
| 240 |
|
| 241 |
$gallery .= '</div>';
|
| 242 |
// Description
|
| 243 |
+
if ( isset( $this->gallery_data['config']['description_position'] ) && $this->gallery_data['config']['description_position'] == 'below' ) {
|
| 244 |
+
$gallery = $this->description( $gallery, $this->gallery_data );
|
| 245 |
}
|
| 246 |
|
| 247 |
+
$gallery = apply_filters( 'envira_gallery_output_after_container', $gallery, $this->gallery_data );
|
| 248 |
|
| 249 |
$gallery .= '</div>';
|
| 250 |
+
$gallery = apply_filters( 'envira_gallery_output_end', $gallery, $this->gallery_data );
|
| 251 |
|
| 252 |
// Increment the counter.
|
| 253 |
$this->counter++;
|
| 254 |
|
| 255 |
// Remove any contextual filters so they don't affect other galleries on the page.
|
| 256 |
+
if ( $this->get_config( 'mobile', $this->gallery_data ) ) {
|
| 257 |
remove_filter( 'envira_gallery_output_image_attr', array( $this, 'mobile_image' ), 999, 4 );
|
| 258 |
}
|
| 259 |
|
| 260 |
// Add no JS fallback support.
|
| 261 |
$no_js = '<noscript>';
|
| 262 |
+
$no_js .= $this->get_indexable_images( $this->gallery_data['id'] );
|
| 263 |
$no_js .= '</noscript>';
|
| 264 |
$gallery .= $no_js;
|
| 265 |
|
| 266 |
// Return the gallery HTML.
|
| 267 |
+
return apply_filters( 'envira_gallery_output', $gallery, $this->gallery_data );
|
| 268 |
|
| 269 |
}
|
| 270 |
|
| 867 |
$lightbox_transition_effect = $this->get_config( 'effect', $data );
|
| 868 |
|
| 869 |
/* Get standard effects */
|
| 870 |
+
$lightbox_standard_effects = $this->common->get_transition_effects_values();
|
| 871 |
|
| 872 |
/* If open/close is standard, use openEffect, closeEffect */
|
| 873 |
if ( in_array( $lightbox_open_close_effect, $lightbox_standard_effects ) ) {
|
| 1213 |
public function load_gallery_theme( $theme ) {
|
| 1214 |
|
| 1215 |
// Loop through the available themes and enqueue the one called.
|
| 1216 |
+
foreach ( $this->common->get_gallery_themes() as $array => $data ) {
|
| 1217 |
if ( $theme !== $data['value'] ) {
|
| 1218 |
continue;
|
| 1219 |
}
|
| 1239 |
public function load_lightbox_theme( $theme ) {
|
| 1240 |
|
| 1241 |
// Loop through the available themes and enqueue the one called.
|
| 1242 |
+
foreach ( $this->common->get_lightbox_themes() as $array => $data ) {
|
| 1243 |
if ( $theme !== $data['value'] ) {
|
| 1244 |
continue;
|
| 1245 |
}
|
| 1355 |
// Inject new image size into $item
|
| 1356 |
$item['link'] = $image[0];
|
| 1357 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1358 |
// Return
|
| 1359 |
return $item;
|
| 1360 |
|
| 1410 |
|
| 1411 |
if ( count( $image_sizes_random ) == 0 ) {
|
| 1412 |
// The user didn't choose any image sizes - use them all.
|
| 1413 |
+
$wordpress_image_sizes = $this->common->get_image_sizes( true );
|
| 1414 |
$wordpress_image_size_random_key = array_rand( $wordpress_image_sizes, 1 );
|
| 1415 |
$image_size = $wordpress_image_sizes[ $wordpress_image_size_random_key ]['value'];
|
| 1416 |
} else {
|
| 1425 |
$src = wp_get_attachment_image_src( $id, $image_size );
|
| 1426 |
}
|
| 1427 |
} else {
|
| 1428 |
+
|
| 1429 |
+
$row_height = $retina ? intval( $this->get_config( 'justified_row_height', $data ) ) * 2 : intval( $this->get_config( 'justified_row_height', $data ) );
|
| 1430 |
+
|
| 1431 |
+
if ( $row_height <= 300 ){
|
| 1432 |
+
|
| 1433 |
+
// Get the full image
|
| 1434 |
+
$src = apply_filters( 'envira_gallery_retina_image_src', wp_get_attachment_image_src( $id, 'medium' ), $id, $item, $data, $this->is_mobile );
|
| 1435 |
+
|
| 1436 |
+
} elseif ( $row_height <= 640 && ! $retina ){
|
| 1437 |
+
|
| 1438 |
+
$src = apply_filters( 'envira_gallery_retina_image_src', wp_get_attachment_image_src( $id, 'large' ), $id, $item, $data, $this->is_mobile );
|
| 1439 |
+
|
| 1440 |
+
}else{
|
| 1441 |
+
|
| 1442 |
+
$src = apply_filters( 'envira_gallery_retina_image_src', wp_get_attachment_image_src( $id, 'full' ), $id, $item, $data, $this->is_mobile );
|
| 1443 |
+
|
| 1444 |
+
}
|
| 1445 |
|
| 1446 |
}
|
| 1447 |
|
| 1480 |
// This is safe to call every time, as resize_image() will check if the image already exists, preventing thumbnails
|
| 1481 |
// from being generated every single time.
|
| 1482 |
$type = $mobile ? 'mobile' : 'crop'; // 'crop' is misleading here - it's the key that stores the thumbnail width + height
|
|
|
|
| 1483 |
$args = array(
|
| 1484 |
'position' => 'c',
|
| 1485 |
'width' => $this->get_config( $type . '_width', $data ),
|
| 1493 |
// image width and height, which are hidden settings.
|
| 1494 |
if ( $image_size != 'default' && $retina ) {
|
| 1495 |
// Find WordPress registered image size
|
| 1496 |
+
$wordpress_image_sizes = $this->common->get_image_sizes( true ); // true = WordPress only image sizes (excludes random)
|
| 1497 |
|
| 1498 |
foreach ( $wordpress_image_sizes as $size ) {
|
| 1499 |
if ( $size['value'] !== $image_size ) {
|
| 1511 |
// Filter
|
| 1512 |
$args = apply_filters( 'envira_gallery_crop_image_args', $args);
|
| 1513 |
|
| 1514 |
+
$resized_image = $this->common->resize_image( $image, $args['width'], $args['height'], $this->get_config( 'crop', $data ), $args['position'], $args['quality'], $args['retina'], $data );
|
| 1515 |
|
| 1516 |
// If there is an error, possibly output error message and return the default image src.
|
| 1517 |
if ( is_wp_error( $resized_image ) ) {
|
| 1628 |
*/
|
| 1629 |
public function get_config( $key, $data ) {
|
| 1630 |
|
| 1631 |
+
return isset( $data['config'][$key] ) ? $data['config'][$key] : $this->common->get_config_default( $key );
|
|
|
|
|
|
|
| 1632 |
|
| 1633 |
}
|
| 1634 |
|
readme.txt
CHANGED
|
@@ -185,6 +185,16 @@ Also, I'm an <a href="https://thomasgriffin.io" rel="me" title="WordPress Develo
|
|
| 185 |
|
| 186 |
== Changelog ==
|
| 187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
= 1.5.5 =
|
| 189 |
* Added: Select Image sizes for Automatic Layout.
|
| 190 |
* Fix: Some servers limit how many images can be inserted at a time.
|
| 185 |
|
| 186 |
== Changelog ==
|
| 187 |
|
| 188 |
+
= 1.5.6 =
|
| 189 |
+
|
| 190 |
+
* Fix: PHP optimizations to improve performance
|
| 191 |
+
* Fix: Automatic Layout option now selects default images based on the specified row height to improve gallery loading times
|
| 192 |
+
* Fix: Minor bug fixes
|
| 193 |
+
|
| 194 |
+
= 1.5.5.1 =
|
| 195 |
+
|
| 196 |
+
* Fix: Fatal Error on empty trash for galleries
|
| 197 |
+
|
| 198 |
= 1.5.5 =
|
| 199 |
* Added: Select Image sizes for Automatic Layout.
|
| 200 |
* Fix: Some servers limit how many images can be inserted at a time.
|
