File "WpAutoUpload.php"
Full Path: /var/www/bvnghean.vn/wp-content/plugins/auto-upload-images/src/WpAutoUpload.php
File size: 7.85 KB
MIME-type: text/x-php
Charset: utf-8
<?php
require 'ImageUploader.php';
/**
* Wordpress Auto Upload Images
* @link http://wordpress.org/plugins/auto-upload-images/
* @link https://github.com/airani/wp-auto-upload
* @author Ali Irani <ali@irani.im>
*/
class WpAutoUpload
{
const WP_OPTIONS_KEY = 'aui-setting';
private static $_options;
/**
* WP_Auto_Upload Run.
* Set default variables and options
* Add wordpress actions
*/
public function run()
{
add_action('plugins_loaded', array($this, 'initTextdomain'));
add_action('admin_menu', array($this, 'addAdminMenu'));
add_filter('wp_insert_post_data', array($this, 'savePost'), 10, 2);
}
/**
* Initial plugin textdomain for translation files
*/
public function initTextdomain()
{
load_plugin_textdomain('auto-upload-images', false, basename(WPAUI_DIR) . '/src/lang');
}
/**
* Automatically upload external images of a post to Wordpress upload directory
* call by wp_insert_post_data filter
* @param array data An array of slashed post data
* @param array $postarr An array of sanitized, but otherwise unmodified post data
* @return array $data
*/
public function savePost($data, $postarr)
{
if (wp_is_post_revision($postarr['ID']) ||
wp_is_post_autosave($postarr['ID']) ||
(defined('DOING_AJAX') && DOING_AJAX) ||
(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)) {
return $data;
}
if ($content = $this->save($postarr)) {
$data['post_content'] = $content;
}
return $data;
}
/**
* Upload images and save new urls
* @return string filtered content
*/
public function save($postarr)
{
$excludePostTypes = self::getOption('exclude_post_types');
if (is_array($excludePostTypes) && in_array($postarr['post_type'], $excludePostTypes, true)) {
return false;
}
$content = $postarr['post_content'];
$images = $this->findAllImageUrls(stripslashes($content));
if (count($images) == 0) {
return false;
}
foreach ($images as $image) {
$uploader = new ImageUploader($image['url'], $image['alt'], $postarr);
if ($uploadedImage = $uploader->save()) {
$urlParts = parse_url($uploadedImage['url']);
$base_url = $uploader::getHostUrl(null, true, true);
$image_url = $base_url . $urlParts['path'];
$content = preg_replace('/'. preg_quote($image['url'], '/') .'/', $image_url, $content);
$content = preg_replace('/alt=["\']'. preg_quote($image['alt'], '/') .'["\']/', "alt='{$uploader->getAlt()}'", $content);
}
}
return $content;
}
/**
* Find image urls in content and retrieve urls by array
* @param $content
* @return array
*/
public function findAllImageUrls($content)
{
$urls1 = array();
preg_match_all('/<img[^>]*srcset=["\']([^"\']*)[^"\']*["\'][^>]*>/i', $content, $srcsets, PREG_SET_ORDER);
if (count($srcsets) > 0) {
$count = 0;
foreach ($srcsets as $key => $srcset) {
preg_match_all('/(https?:)?\/\/[^\s,]+/i', $srcset[1], $srcsetUrls, PREG_SET_ORDER);
if (count($srcsetUrls) == 0) {
continue;
}
foreach ($srcsetUrls as $srcsetUrl) {
$urls1[$count][] = $srcset[0];
$urls1[$count][] = $srcsetUrl[0];
$count++;
}
}
}
preg_match_all('/<img[^>]*src=["\']([^"\']*)[^"\']*["\'][^>]*>/i', $content, $urls, PREG_SET_ORDER);
$urls = array_merge($urls, $urls1);
if (count($urls) == 0) {
return array();
}
foreach ($urls as $index => &$url) {
$images[$index]['alt'] = preg_match('/<img[^>]*alt=["\']([^"\']*)[^"\']*["\'][^>]*>/i', $url[0], $alt) ? $alt[1] : null;
$images[$index]['url'] = $url = $url[1];
}
foreach (array_unique($urls) as $index => $url) {
$unique_array[] = $images[$index];
}
return $unique_array;
}
/**
* Add settings page under options menu
*/
public function addAdminMenu()
{
add_options_page(
__('Auto Upload Images Settings', 'auto-upload-images'),
__('Auto Upload Images', 'auto-upload-images'),
'manage_options',
'auto-upload',
array($this, 'settingPage')
);
}
/**
* Returns options in an array
* @return array
*/
public static function getOptions()
{
if (static::$_options) {
return static::$_options;
}
$defaults = array(
'base_url' => get_bloginfo('url'),
'image_name' => '%filename%',
'alt_name' => '%image_alt%',
);
return static::$_options = wp_parse_args(get_option(self::WP_OPTIONS_KEY), $defaults);
}
/**
* Reset options to default options
* @return bool
*/
public static function resetOptionsToDefaults()
{
$defaults = array(
'base_url' => get_bloginfo('url'),
'image_name' => '%filename%',
'alt_name' => '%image_alt%',
);
static::$_options = $defaults;
return update_option(self::WP_OPTIONS_KEY, $defaults);
}
/**
* Return an option with specific key
* @param $key
* @return mixed
*/
public static function getOption($key, $default = null)
{
$options = static::getOptions();
if (isset($options[$key]) === false) {
return $default;
}
return $options[$key];
}
/**
* Returns fixed and replace deprecated patterns
* @param $pattern
* @return string
*/
public function replaceDeprecatedPatterns($pattern)
{
preg_match_all('/%(date|day)%/', $pattern, $rules);
$patterns = array(
'%date%' => '%today_date%',
'%day%' => '%today_day%',
);
if ($rules[0]) {
foreach ($rules[0] as $rule) {
$pattern = preg_replace("/$rule/", array_key_exists($rule, $patterns) ? $patterns[$rule] : $rule, $pattern);
}
}
return $pattern;
}
/**
* Settings page contents
*/
public function settingPage()
{
if (isset($_POST['submit']) && check_admin_referer('aui_settings')) {
$textFields = array('base_url', 'image_name', 'alt_name', 'max_width', 'max_height');
foreach ($textFields as $field) {
if (array_key_exists($field, $_POST) && $_POST[$field]) {
if ($field === 'image_name' || $field === 'alt_name') {
$_POST[$field] = $this->replaceDeprecatedPatterns($_POST[$field]);
}
static::$_options[$field] = sanitize_text_field($_POST[$field]);
}
}
if (array_key_exists('exclude_urls', $_POST) && $_POST['exclude_urls']) {
static::$_options['exclude_urls'] = sanitize_textarea_field($_POST['exclude_urls']);
}
if (array_key_exists('exclude_post_types', $_POST) && $_POST['exclude_post_types']) {
foreach ($_POST['exclude_post_types'] as $typ) {
static::$_options['exclude_post_types'][] = sanitize_text_field($typ);
}
}
update_option(self::WP_OPTIONS_KEY, static::$_options);
$message = __('Settings Saved.', 'auto-upload-images');
}
if (isset($_POST['reset']) && self::resetOptionsToDefaults()) {
$message = __('Successfully settings reset to defaults.', 'auto-upload-images');
}
include_once('setting-page.php');
}
}