196 lines
6.2 KiB
PHP
196 lines
6.2 KiB
PHP
<?php
|
|
/*
|
|
* Plugin Name: Infinite Uploads
|
|
* Description: Infinitely scalable cloud storage and delivery for your videos and uploads made easy! Upload directly to cloud storage and manage your files right from the WordPress Media Library.
|
|
* Version: 2.0.8
|
|
* Author: Infinite Uploads
|
|
* Author URI: https://infiniteuploads.com/?utm_source=iup_plugin&utm_medium=plugin&utm_campaign=iup_plugin&utm_content=meta
|
|
* Text Domain: infinite-uploads
|
|
* Requires at least: 5.3
|
|
* Requires PHP: 7.0
|
|
* License: GPLv2
|
|
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
|
* Network: true
|
|
*
|
|
* Inspired by AWS PHP SDK stream wrapper code from the S3 Uploads plugin by Human Made https://github.com/humanmade/S3-Uploads.
|
|
*
|
|
* Copyright 2021-2025 ClikIT, LLC
|
|
*/
|
|
|
|
define( 'INFINITE_UPLOADS_VERSION', '2.0.8' );
|
|
|
|
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
|
require_once dirname( __FILE__ ) . '/inc/class-infinite-uploads-wp-cli-command.php';
|
|
}
|
|
|
|
//require_once 'inc/class-infinite-uploads-wp-mail.php';
|
|
|
|
register_activation_hook( __FILE__, 'infinite_uploads_install' );
|
|
|
|
add_action( 'plugins_loaded', 'infinite_uploads_init' );
|
|
|
|
function infinite_uploads_init() {
|
|
|
|
//how much to try uploading/downloading per ajax loop (we want as much as possible without exceeding (php timeout - ajax_timeout) to avoid 504s
|
|
if ( ! defined( 'INFINITE_UPLOADS_SYNC_MAX_BYTES' ) ) {
|
|
define( 'INFINITE_UPLOADS_SYNC_MAX_BYTES', MB_IN_BYTES * 5 );
|
|
}
|
|
//This is the maximum to transfer in parallel within the INFINITE_UPLOADS_SYNC_MAX_BYTES size.
|
|
if ( ! defined( 'INFINITE_UPLOADS_SYNC_CONCURRENCY' ) ) {
|
|
define( 'INFINITE_UPLOADS_SYNC_CONCURRENCY', 15 );
|
|
}
|
|
if ( ! defined( 'INFINITE_UPLOADS_SYNC_MULTIPART_CONCURRENCY' ) ) {
|
|
define( 'INFINITE_UPLOADS_SYNC_MULTIPART_CONCURRENCY', 5 );
|
|
}
|
|
if ( ! defined( 'INFINITE_UPLOADS_SYNC_PER_LOOP' ) ) {
|
|
define( 'INFINITE_UPLOADS_SYNC_PER_LOOP', 1000 );
|
|
}
|
|
if ( ! defined( 'INFINITE_UPLOADS_HTTP_CACHE_CONTROL' ) ) {
|
|
define( 'INFINITE_UPLOADS_HTTP_CACHE_CONTROL', YEAR_IN_SECONDS );
|
|
}
|
|
//we cache the last object uploaded to cloud in memory so it can be processed without downloading again.
|
|
if ( ! defined( 'INFINITE_UPLOADS_STREAM_CACHE_MAX_BYTES' ) ) {
|
|
define( 'INFINITE_UPLOADS_STREAM_CACHE_MAX_BYTES', MB_IN_BYTES * 32 );
|
|
}
|
|
|
|
// Require Our custom AWS Autoloader file.
|
|
require_once dirname( __FILE__ ) . '/vendor/Aws3/aws-autoloader.php';
|
|
|
|
if ( ! infinite_uploads_check_requirements() ) {
|
|
return;
|
|
}
|
|
|
|
infinite_uploads_upgrade();
|
|
|
|
$instance = Infinite_Uploads::get_instance();
|
|
$instance->setup();
|
|
}
|
|
|
|
function infinite_uploads_upgrade() {
|
|
|
|
// Install the needed DB table if not already.
|
|
$installed = get_site_option( 'iup_installed' );
|
|
if ( INFINITE_UPLOADS_VERSION != $installed ) {
|
|
infinite_uploads_install();
|
|
}
|
|
}
|
|
|
|
function infinite_uploads_install() {
|
|
global $wpdb;
|
|
|
|
//prevent race condition during upgrade by setting option before running potentially long query
|
|
if ( is_multisite() ) {
|
|
update_site_option( 'iup_installed', INFINITE_UPLOADS_VERSION );
|
|
} else {
|
|
update_option( 'iup_installed', INFINITE_UPLOADS_VERSION, true );
|
|
}
|
|
|
|
$charset_collate = $wpdb->get_charset_collate();
|
|
|
|
//191 is the maximum innodb default key length on utf8mb4
|
|
$sql = "CREATE TABLE {$wpdb->base_prefix}infinite_uploads_files (
|
|
`file` VARCHAR(255) NOT NULL,
|
|
`size` BIGINT UNSIGNED NOT NULL DEFAULT '0',
|
|
`modified` INT UNSIGNED NOT NULL,
|
|
`type` VARCHAR(20) NOT NULL,
|
|
`transferred` BIGINT UNSIGNED NOT NULL DEFAULT '0',
|
|
`synced` BOOLEAN NOT NULL DEFAULT '0',
|
|
`deleted` BOOLEAN NOT NULL DEFAULT '0',
|
|
`errors` INT UNSIGNED NOT NULL DEFAULT '0',
|
|
`transfer_status` TEXT NULL DEFAULT NULL,
|
|
PRIMARY KEY (`file`(191)),
|
|
KEY `type` (`type`),
|
|
KEY `synced` (`synced`),
|
|
KEY `deleted` (`deleted`)
|
|
) {$charset_collate};";
|
|
|
|
if ( ! function_exists( 'dbDelta' ) ) {
|
|
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
|
|
}
|
|
|
|
return dbDelta( $sql );
|
|
}
|
|
|
|
/**
|
|
* Check whether the environment meets the plugin's requirements, like the minimum PHP version.
|
|
*
|
|
* @return bool True if the requirements are met, else false.
|
|
*/
|
|
function infinite_uploads_check_requirements() {
|
|
global $wp_version;
|
|
$hook = is_multisite() ? 'network_admin_notices' : 'admin_notices';
|
|
|
|
if ( version_compare( PHP_VERSION, '5.5.0', '<' ) ) {
|
|
add_action( $hook, 'infinite_uploads_outdated_php_version_notice' );
|
|
|
|
return false;
|
|
}
|
|
|
|
if ( version_compare( $wp_version, '5.3.0', '<' ) ) {
|
|
add_action( $hook, 'infinite_uploads_outdated_wp_version_notice' );
|
|
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Print an admin notice when the PHP version is not high enough.
|
|
*
|
|
* This has to be a named function for compatibility with PHP 5.2.
|
|
*/
|
|
function infinite_uploads_outdated_php_version_notice() {
|
|
?>
|
|
<div class="notice notice-warning is-dismissible"><p>
|
|
<?php printf( esc_html__( 'The Infinite Uploads plugin requires PHP version 5.5.0 or higher. Your server is running PHP version %s.', 'infinite-uploads' ), PHP_VERSION ); ?>
|
|
</p></div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Print an admin notice when the WP version is not high enough.
|
|
*
|
|
* This has to be a named function for compatibility with PHP 5.2.
|
|
*/
|
|
function infinite_uploads_outdated_wp_version_notice() {
|
|
global $wp_version;
|
|
?>
|
|
<div class="notice notice-warning is-dismissible"><p>
|
|
<?php printf( esc_html__( 'The Infinite Uploads plugin requires WordPress version 5.3 or higher. Your server is running WordPress version %s.', 'infinite-uploads' ), $wp_version ); ?>
|
|
</p></div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Check if URL rewriting is enabled.
|
|
*
|
|
* @return bool
|
|
*/
|
|
function infinite_uploads_enabled() {
|
|
return get_site_option( 'iup_enabled' );
|
|
}
|
|
|
|
/**
|
|
* Autoload callback.
|
|
*
|
|
* @param $class_name string Name of the class to load.
|
|
*/
|
|
function infinite_uploads_autoload( $class_name ) {
|
|
/*
|
|
* Load plugin classes:
|
|
* - Class name: Infinite_Uploads_Image_Editor_Imagick.
|
|
* - File name: class-infinite-uploads-image-editor-imagick.php.
|
|
*/
|
|
$class_file = 'class-' . strtolower( str_replace( '_', '-', $class_name ) ) . '.php';
|
|
$class_path = dirname( __FILE__ ) . '/inc/' . $class_file;
|
|
|
|
if ( file_exists( $class_path ) ) {
|
|
require $class_path;
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
spl_autoload_register( 'infinite_uploads_autoload' );
|