setObject("public/" . $metadata['file'], fopen($fileName, "r"));
$sizes = @$metadata['sizes'];
if(is_array($sizes))
{
$thumbPref = dirname($metadata['file']);
$dirName = dirname($fileName);
foreach ($sizes as $thums)
{
if(isset($thums['file']))
{
$thumbName = $dirName . DIRECTORY_SEPARATOR . $thums['file'];
if(file_exists($thumbName))
{
$remoteCloud->setObject("public/" . $thumbPref . "/" . $thums['file'], fopen($thumbName, "r"));
}
}
}
}
}
}
if(isset($metadata['post_mime_type']) && isset($metadata['guid']) && $metadata['post_type'] == 'attachment'){
if(strpos($metadata['post_mime_type'], 'image/') !== 0){
$siteUrl = wp_upload_dir()['baseurl'] . DIRECTORY_SEPARATOR;
$objectName = str_replace($siteUrl, '', $metadata['guid']);
$fileName = wp_upload_dir()['basedir'] . DIRECTORY_SEPARATOR . $objectName;
if (is_file($fileName) && is_readable($fileName)) {
include_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
$remoteCloud->setObject("public/" . $objectName, fopen($fileName, "r"));
}
}
}
return $metadata;
}
public static function mediafileDelete($metaid)
{
$metadata = wp_get_attachment_metadata( $metaid );
if (isset($metadata['file'])) {
$fileName = wp_upload_dir()['basedir'] . DIRECTORY_SEPARATOR . $metadata['file'];
if (is_file($fileName) ) {
include_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
$remoteCloud->deleteObject("public/" . $metadata['file']);
$sizes = @$metadata['sizes'];
if(is_array($sizes))
{
$thumbPref = dirname($metadata['file']);
$dirName = dirname($fileName);
foreach ($sizes as $thums)
{
if(isset($thums['file']))
{
$thumbName = $dirName . DIRECTORY_SEPARATOR . $thums['file'];
if(file_exists($thumbName))
{
$remoteCloud->deleteObject("public/" . $thumbPref . "/" . $thums['file']);
}
}
}
}
}
}else{
$fileName = get_attached_file($metaid);
if(file_exists($fileName))
{
$objectName = str_replace(wp_upload_dir()['basedir']."/", '', $fileName);
include_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
$remoteCloud->deleteObject("public/" . $objectName);
echo "CUSTOM DELETE public/" . $objectName;
}
}
return $metaid;
}
public static function viewTools()
{
load_textdomain( 'default', ATLEX_LANG_FILE );
$settings = self::getSettings();
if(@$settings['connected'] == 1) {
wp_enqueue_script('wp-atlex-tool-js', plugins_url('/assets/js/wp-atlex-tool.js', __FILE__), array('jquery'), null, true);
wp_enqueue_style('wp-atlex-css', plugins_url('/assets/css/wp-atlex.css', __FILE__));
wp_localize_script('wp-atlex-tool-js', 'atlexOptions', array(
'ajax_url' => admin_url('admin-ajax.php'),
'path_sql_container' => $settings['container'] . '/sql',
'path_dir_container' => $settings['container'] . '/wordpress',
'nonce' => wp_create_nonce('atlex_nonce'),
'remote_backup_sql' => $settings['container'] . '/sql',
'remote_backup_files' => $settings['container'] . '/wordpress',
'msg_loading' => __('Loading'),
'msg_sql_delete' => __('Do you want to delete sql archive from cloud?'),
'msg_sql_restore' => __('Do you want to restore database from sql archive?'),
'msg_dir_delete' => __('Do you want to delete files archive from cloud?'),
'msg_success_download' => __('File success downloaded to ') . wp_upload_dir()['basedir'] . '/atlexbackup',
));
extract(
array(
'images_src' => array(
'loading' => plugins_url('assets/img/loading.gif', __FILE__),
),
'settings' => self::getSettings(),
)
);
include __DIR__ . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'tools.php';
} else {
echo '
';
echo __('You need configurate cloud setting for connection');
echo '
';
self::printSettingsMenu();
}
}
public static function getSettings()
{
$options = array(
'connected' => '0',
'adapter' => 'ftp',
'host' => '',
'user' => '',
'password' => '',
'project' => '',
'container' => 'backup',
'local_path' => wp_upload_dir()['basedir'],
'cdn_sync' => 'off',
'cdn_change_url' => 'off',
'cdn_url' => '',
'cdn_status' => 'off',
);
$data = get_option('atlex_cloud_configuration');
if($data){
$options = unserialize(get_option('atlex_cloud_configuration'));
}
return $options;
}
public static function adminPluginSettingsLink( $links )
{
$args = array( 'page' => 'atlex_cloud_options' );
$url = add_query_arg( $args, admin_url('options-general.php'));
$settings_link = ''.__('Settings').'';
array_unshift( $links, $settings_link );
return $links;
}
public static function printToolMenu(){
load_textdomain( 'default', ATLEX_LANG_FILE );
$args = array( 'page' => 'atlex_cloud_tools' );
$url = add_query_arg( $args, admin_url('tools.php'));
echo '';
}
public static function printSettingsMenu(){
load_textdomain( 'default', ATLEX_LANG_FILE );
$args = array( 'page' => 'atlex_cloud_options' );
$url = add_query_arg( $args, admin_url('options-general.php'));
echo '';
}
public static function viewOptions() {
if ( !current_user_can( 'manage_options' ) ) {
wp_die('You do not have sufficient permissions to access this page.');
}
load_textdomain( 'default', ATLEX_LANG_FILE );
wp_enqueue_script('wp-atlex-options-js', plugins_url('/assets/js/wp-atlex-options.js', __FILE__), array('jquery'), null, true);
wp_enqueue_style('wp-atlex-css', plugins_url('/assets/css/wp-atlex.css', __FILE__));
wp_localize_script('wp-atlex-options-js', 'atlexOptions', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('atlex_nonce'),
));
$options = self::getSettings();
extract(
array(
'form' => $options,
'adapter_options' => array(
array('text'=>'FTP', 'value' => 'ftp', 'protocol' => 'ftp://'),
array('text'=>'Amazone S3 - AWS', 'value' => 's3', 'protocol' => 'https://'),
array('text'=>'OpenStack', 'value' => 'os', 'protocol' => 'https://'),
),
'images_src' => array(
'loading' => plugins_url('assets/img/loading.gif', __FILE__),
'cloud-tool' => plugins_url('assets/img/cloud-tool.png', __FILE__),
'settings' => plugins_url('assets/img/settings.png', __FILE__),
),
)
);
include __DIR__ . DIRECTORY_SEPARATOR .'views' . DIRECTORY_SEPARATOR . 'options.php';
}
public static function ajaxOptionsSave()
{
@error_reporting(E_ALL);
@ini_set('display_errors', 1);
if(!isset($_POST["nonce"]) || !wp_verify_nonce($_POST["nonce"], 'atlex_nonce'))
wp_die('permission denied');
$cdn_status = 'off';
if(@$_POST['cdn_sync'] === 'on'){
$cdn_status = 'syncprocess';
}
$host = sanitize_text_field($_POST['host']);
$host = str_replace('https://', '', $host);
$host = str_replace('http://', '', $host);
$host = str_replace('ftp://', '', $host);
$adapter = sanitize_text_field($_POST['adapter']);
if($adapter == 'os'){
if (!defined('PHP_VERSION_ID')) {
$version = explode('.', PHP_VERSION);
define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}
if(PHP_VERSION_ID < 70000){
wp_die(__("You can use OpenStack adapter with PHP7 and up version"));
}
}
$options = array(
'connected' => 0,
'adapter' => $adapter,
'host' => $host,
'user' => sanitize_text_field($_POST['user']),
'password' => sanitize_text_field($_POST['password']),
'project' => sanitize_text_field($_POST['project']),
'container' => sanitize_text_field($_POST['container']),
'local_path' => sanitize_text_field($_POST['local_path']),
'cdn_sync' => sanitize_text_field($_POST['cdn_sync']),
'cdn_url' => sanitize_text_field($_POST['cdn_url']),
'cdn_change_url' => sanitize_text_field($_POST['cdn_change_url']),
'cdn_status' => sanitize_text_field($cdn_status)
);
update_option('atlex_cloud_configuration', serialize($options));
try{
include_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
$remoteCloud->createContainer(sanitize_text_field($_POST['container']) . "/sql");
$remoteCloud->createContainer(sanitize_text_field($_POST['container']) . "/wordpress");
$msg = __("Successfully connected");
if($_POST['cdn_sync'] == 'on')
$msg .= "\n" . __("Started mediafiles synchronization process");
$options['connected'] = 1;
update_option('atlex_cloud_configuration', serialize($options));
wp_die($msg);
}catch(Exception $e){
wp_die(__("Error on connection"));
}
}
public static function zipData($source, $destination)
{
$zip = new \ZipArchive();
if ($zip->open($destination, \ZIPARCHIVE::CREATE))
{
$source = realpath($source);
if (is_dir($source))
{
$iterator = new \RecursiveDirectoryIterator($source);
$iterator->setFlags(\RecursiveDirectoryIterator::SKIP_DOTS);
$files = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST);
foreach ($files as $file)
{
$file = realpath($file);
if (is_dir($file))
{
$zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
} elseif (is_file($file))
{
$zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
}
}
} else if (is_file($source))
{
$zip->addFromString(basename($source), file_get_contents($source));
}
}
$zip->close();
}
public static function ajaxArchiveCreate()
{
error_reporting(E_ALL);
ini_set('display_errors', 1);
if(!isset($_POST["nonce"]) || !wp_verify_nonce($_POST["nonce"], 'atlex_nonce'))
wp_die('permission denied');
global $wpdb;
$upload = wp_upload_dir();
$upload_dir = $upload['basedir'];
$upload_dir = $upload_dir . DIRECTORY_SEPARATOR . 'atlexbackup';
if (!wp_mkdir_p($upload_dir)) {
echo "create directory error";
}
try {
include_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
$dump = new \MySQLDump($wpdb->dbh);
$fileName = $upload_dir . DIRECTORY_SEPARATOR . sanitize_text_field($_POST['name']) . '.gz';
$dump->save($fileName);
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
if (is_file($fileName) && is_readable($fileName)) {
$settings = self::getSettings();
$remoteCloud->setObject($settings['container'] . "/sql/" . sanitize_text_field($_POST['name']) . '.gz', fopen($fileName, "r"));
}
unlink($fileName);
echo json_encode(
array(
'success' => true,
'name' => sanitize_text_field($_POST['name'])
)
);
wp_die();
}catch(Exception $e){
echo json_encode(
array(
'error' => $e->getMessage()
)
);
wp_die();
}
}
public static function ajaxLoadArchives()
{
//error_reporting(E_ALL);
//ini_set('display_errors', 1);
if(!isset($_POST["nonce"]) || !wp_verify_nonce($_POST["nonce"], 'atlex_nonce'))
wp_die('permission denied');
try {
include_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
$settings = self::getSettings();
$containers = $remoteCloud->get($settings['container'] . "/sql");
$data = [];
/** @var \Atlex\Cloud\CloudObject $containerObject */
foreach ($containers as $containerObject) {
if ($containerObject->getType() == \Atlex\Cloud\CloudObjectType::OBJECT) {
$data[] = [
'name' => $containerObject->getName(),
'path' => $containerObject->getPath(),
];
}
}
usort($data, function ($a, $b) {
return $a['name'] > $b['name'];
});
echo json_encode(
array(
'success' => true,
'archives' => $data,
)
);
wp_die();
}catch(Exception $e){
echo json_encode(
array(
'error' => $e->getMessage()
)
);
wp_die();
}
}
public static function ajaxArchiveDelete()
{
if(!isset($_POST["nonce"]) || !wp_verify_nonce($_POST["nonce"], 'atlex_nonce'))
wp_die('permission denied');
include_once __DIR__. DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
try{
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
$remoteCloud->deleteObject(sanitize_text_field($_POST['path']));
echo json_encode(
array(
'success' => true,
)
);
wp_die();
}catch(Exception $e){
echo json_encode(
array(
'error' => $e->getMessage()
)
);
wp_die();
}
}
public static function ajaxArchiveRestore()
{
if(!isset($_POST["nonce"]) || !wp_verify_nonce($_POST["nonce"], 'atlex_nonce'))
wp_die('permission denied');
include_once __DIR__. DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
global $wpdb;
try{
$upload = wp_upload_dir();
$upload_dir = $upload['basedir'];
$upload_dir = $upload_dir . DIRECTORY_SEPARATOR . 'atlexbackup';
if ( ! wp_mkdir_p( $upload_dir ) ){
echo "Не удалось создать каталог";
}
if(!file_exists($upload_dir . "/.htaccess"))
{
$f = fopen($upload_dir . "/.htaccess", "w+");
fwrite($f, "RewriteEngine On\n\nDeny from all\n");
fclose($f);
}
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
$tempFile = $upload_dir . DIRECTORY_SEPARATOR . "sqltmp.gz";
$file = fopen($tempFile, "w+");
$remoteCloud->getObject(sanitize_text_field($_POST['path']), $file);
$import = new \MySQLImport($wpdb->dbh);
$import->load($tempFile);
unlink($tempFile);
echo json_encode(
array(
'success' => true,
)
);
wp_die();
}catch(Exception $e){
echo json_encode(
array(
'error' => $e->getMessage()
)
);
wp_die();
}
}
public static function ajaxDirUpload()
{
error_reporting(E_ALL);
ini_set('display_errors', 1);
if(!isset($_POST["nonce"]) || !wp_verify_nonce($_POST["nonce"], 'atlex_nonce'))
wp_die('permission denied');
$upload = wp_upload_dir();
$upload_dir = $upload['basedir'];
$upload_dir = $upload_dir . DIRECTORY_SEPARATOR . 'atlexbackup';
include_once __DIR__. DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
try{
if ( ! wp_mkdir_p( $upload_dir ) ){
echo "create directory error";
}
if(!file_exists($upload_dir . "/.htaccess"))
{
$f = fopen($upload_dir . "/.htaccess", "w+");
fwrite($f, "RewriteEngine On\n\nDeny from all\n");
fclose($f);
}
$tempName = $upload_dir . "/tempdir.zip";
self::zipData(sanitize_text_field($_POST['path']), $tempName);
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
if( is_file($tempName) && is_readable($tempName) )
{
$settings = self::getSettings();
$remoteCloud->setObject($settings['container'] . "/wordpress/".sanitize_text_field($_POST['object_name']).'.zip', fopen($tempName, "r"));
}
unlink($tempName);
echo json_encode(
array(
'success' => true,
'name' => sanitize_text_field($_POST['object_name'])
)
);
wp_die();
}catch(Exception $e){
echo json_encode(
array(
'error' => $e->getMessage()
)
);
wp_die();
}
}
public static function ajaxLoadDirs()
{
if(!isset($_POST["nonce"]) || !wp_verify_nonce($_POST["nonce"], 'atlex_nonce'))
wp_die('permission denied');
include_once __DIR__. DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
try {
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
$settings = self::getSettings();
$containers = $remoteCloud->get($settings['container'] . "/wordpress");
$data = [];
/** @var \Atlex\Cloud\CloudObject $containerObject */
foreach ($containers as $containerObject) {
if ($containerObject->getType() == \Atlex\Cloud\CloudObjectType::OBJECT) {
$data[] = [
'name' => $containerObject->getName(),
'path' => $containerObject->getPath(),
];
}
}
usort($data, function ($a, $b) {
return $a['name'] > $b['name'];
});
echo json_encode(
array(
'success' => true,
'archives' => $data,
)
);
wp_die();
}catch(Exception $e){
echo json_encode(
array(
'error' => $e->getMessage()
)
);
wp_die();
}
}
public static function ajaxDirDelete()
{
if(!isset($_POST["nonce"]) || !wp_verify_nonce($_POST["nonce"], 'atlex_nonce'))
wp_die('permission denied');
include_once __DIR__. DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
try {
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
$remoteCloud->deleteObject(sanitize_text_field($_POST['path']));
echo json_encode(
array(
'success' => true,
)
);
wp_die();
}catch(Exception $e){
echo json_encode(
array(
'error' => $e->getMessage()
)
);
wp_die();
}
}
public static function ajaxDirDownload()
{
if(!isset($_POST["nonce"]) || !wp_verify_nonce($_POST["nonce"], 'atlex_nonce'))
wp_die('permission denied');
include_once __DIR__. DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
try {
$upload = wp_upload_dir();
$upload_dir = $upload['basedir'];
$upload_dir = $upload_dir . DIRECTORY_SEPARATOR . 'atlexbackup';
if (!wp_mkdir_p($upload_dir)) {
echo "create directory error";
}
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
$name = basename(sanitize_text_field($_POST['path']));
$tempFile = $upload_dir . DIRECTORY_SEPARATOR . $name;
$file = fopen($tempFile, "w+");
$remoteCloud->getObject(sanitize_text_field($_POST['path']), $file);
echo json_encode(
array(
'success' => true,
)
);
wp_die();
}catch(Exception $e){
echo json_encode(
array(
'error' => $e->getMessage()
)
);
wp_die();
}
}
public static function ajaxMediafilesUpload()
{
error_reporting(E_ALL);
ini_set('display_errors', 1);
session_write_close();
if(!isset($_POST["nonce"]) || !wp_verify_nonce($_POST["nonce"], 'atlex_nonce'))
wp_die('permission denied');
$settings = self::getSettings();
$settings['cdn_status'] = 'syncprocess';
update_option('atlex_cloud_configuration', serialize($settings));
$upload = wp_upload_dir();
$upload_dir = $upload['basedir'];
try{
include_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
/** @var \Atlex\AtlexCloud $remoteCloud */
$remoteCloud = self::getCloud();
$query_media_args = array(
'post_type' => 'attachment',
'post_status' => 'inherit',
'posts_per_page' => -1,
);
$query_objects = new WP_Query($query_media_args);
$parentDirs = array();
$siteUrl = wp_upload_dir()['baseurl'] . DIRECTORY_SEPARATOR;
foreach ($query_objects->posts as $object) {
$name = str_replace($siteUrl, '', wp_get_attachment_url($object->ID));
$parts = @explode('/', $name);
if(is_array($parts)){
if(@$parts[0] != ''){
if(!in_array($parts[0], $parentDirs)){
$parentDirs[] = $parts[0];
$dir = $parts[0];
$remoteCloud->deleteContainer('public/' . $dir);
$remoteCloud->upload($upload_dir . DIRECTORY_SEPARATOR . $dir, 'public/' . $dir);
}
}
}
}
$settings = self::getSettings();
$settings['cdn_status'] = 'synchronized';
update_option('atlex_cloud_configuration', serialize($settings));
echo json_encode(
array(
'success' => true,
)
);
wp_die();
} catch (Exception $e) {
echo json_encode(
array(
'error' => $e->getMessage()
)
);
wp_die();
}
}
public static function ajaxSyncStatus()
{
error_reporting(E_ALL);
ini_set('display_errors', 1);
if(!isset($_POST["nonce"]) || !wp_verify_nonce($_POST["nonce"], 'atlex_nonce'))
wp_die('permission denied');
return self::getSettings()['cdn_status'];
}
public static function settingsGeneralMenu(){
load_textdomain( 'default', ATLEX_LANG_FILE );
add_settings_field(
'atlex_setting-menu',
__('ATLEX cloud settings'),
array('ADMATLCLD\AtlexCloudPlugin', 'printSettingsMenu'),
'general',
'default',
array( 'label_for' => 'atlex_setting-menu' )
);
}
public static function uninstallPlugin(){
delete_option( 'atlex_cloud_configuration' );
}
}