| Server IP : 104.21.74.147 / Your IP : 216.73.217.154 Web Server : nginx/1.24.0 System : Linux wordpress-sites 6.8.0-134-generic #134-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 26 18:43:11 UTC 2026 x86_64 User : www-data ( 33) PHP Version : 8.1.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/rebeccaone.com/wp-content/plugins/envira-gallery/src/Utils/ |
Upload File : |
<?php
/**
* Copy class.
*
* @since 1.0.0
* @package Envira_Gallery
* @author Envira Team
*/
namespace Envira\Utils;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Helper Class to copy photos between galleries.
*
* @since 1.7.0
*/
class Copy {
/**
* Path to the file.
*
* @since 1.0.0
* @var string
*/
public $file = __FILE__;
/**
* Holds the base class object.
*
* @since 1.0.0
* @var object
*/
public $base;
/**
* Holds any plugin error messages.
*
* @since 1.0.0
* @var array
*/
public $errors = [];
/**
* Primary class constructor.
*
* @since 1.0.0
*/
public function __construct() {
// Import a gallery.
$this->copy_photos();
// Copy photos from one gallery to another.
add_action( 'admin_init', [ $this, 'copy_photos' ] );
add_action( 'admin_notices', [ $this, 'notices' ] );
}
/**
* Imports an Envira gallery.
*
* @return void Return early (possibly setting errors) if failing proper checks to import the gallery.
* @since 1.0.0
*/
public function copy_photos() {
if ( ! $this->verify_copy_gallery() ) {
return;
}
if ( ! $this->can_copy_images() ) {
$this->errors[] = __( 'Sorry, but you lack the permissions to copy images.', 'envira-gallery' );
return;
}
// phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce is verify_copy_gallery().
$gallery_copy_from = empty( $_POST['envira_copy_target_gallery'] ) ? 0 : intval( $_POST['envira_copy_target_gallery'] );
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is verify_copy_gallery().
$gallery_copy_to = empty( $_GET['post'] ) ? 0 : intval( $_GET['post'] );
if ( ! $gallery_copy_to || ! $gallery_copy_from ) {
$this->errors[] = __( 'Sorry, but there was an error.', 'envira-gallery' );
return;
}
$existing_images = [];
$total_images_copied = 0;
// Get Gallery Data.
$gallery_data_copy_to = envira_get_gallery( $gallery_copy_to );
$gallery_data_copy_from = envira_get_gallery( $gallery_copy_from );
if ( ! $gallery_data_copy_to || ! $gallery_data_copy_from ) {
$this->errors[] = __( 'Sorry, but there was an error.', 'envira-gallery' );
return;
}
// Make sure there is a gallery array. If there is not, then this makes things simple.
if ( empty( $gallery_data_copy_to['gallery'] ) ) {
$gallery_data_copy_to['gallery'] = $gallery_data_copy_from['gallery'];
$total_images_copied = count( $gallery_data_copy_from['gallery'] );
// Simply add the images from the copy_from.
} else {
// We need to add unique items to the gallery array.
foreach ( $gallery_data_copy_to['gallery'] as $gallery_data_copy_to_key => $gallery_data_copy_to_info ) {
$existing_images[] = $gallery_data_copy_to_key;
}
if ( ! empty( $gallery_data_copy_from['gallery'] ) ) {
foreach ( $gallery_data_copy_from['gallery'] as $gallery_data_copy_from_key => $gallery_data_copy_from_info ) {
if ( ! in_array( $gallery_data_copy_from_key, $existing_images, true ) ) {
$gallery_data_copy_to['gallery'][ $gallery_data_copy_from_key ] = $gallery_data_copy_from_info;
++$total_images_copied;
}
}
}
}
if ( 0 === $total_images_copied ) {
$this->errors = [];
$this->errors[] = __( 'Sorry, no images were copied. Check and see if you are trying to copy duplicated images.', 'envira-gallery' );
return;
}
// Update the meta for the post that is receiving the gallery.
update_post_meta( $gallery_copy_to, '_eg_gallery_data', $gallery_data_copy_to );
}
/**
* Determines if a gallery import nonce is valid and verified.
*
* @return bool True if the nonce is valid, false otherwise.
* @since 1.0.0
*/
public function verify_copy_gallery() {
return isset( $_POST['envira-gallery-copy-images'] ) && wp_verify_nonce( sanitize_key( $_POST['envira-gallery-copy-images'] ), 'envira-gallery-copy-images' );
}
/**
* Determines if the user can actually import the gallery.
*
* @return bool True if the user can import the gallery, false otherwise.
* @since 1.0.0
*/
public function can_copy_images() {
$manage_options = current_user_can( 'manage_options' );
return apply_filters( 'envira_gallery_copy_images_cap', $manage_options );
}
/**
* Outputs any errors or notices generated by the class.
*
* @since 1.0.0
*/
public function notices() {
if ( ! empty( $this->errors ) ) :
?>
<div id="message" class="error">
<p><?php echo esc_html( implode( '<br>', $this->errors ) ); ?></p>
</div>
<?php
endif;
// If a gallery has been copied, create a notice for the status.
if ( empty( $this->errors ) && $this->verify_copy_gallery() ) :
?>
<div id="message" class="updated">
<p><?php echo esc_html( __( 'Photos copied.', 'envira-gallery' ) ); ?></p>
</div>
<?php
endif;
}
}