Anthony Carbon * Author URI: https://www.anthonycarbon.com/ * Donate link: https://www.paypal.me/anthonypagaycarbon * Tags: wp-login.php, gravityform, media-upload, field, ajax, anthonycarbon.com * Requires at least: 4.4 * Tested up to: 5.0 * Stable tag: 1.2.2 * Text Domain: ae * License: GPL v3 **/ if ( ! defined('ABSPATH') ){ exit; } if ( ! class_exists( 'Anton_Extensions' ) ) : class Anton_Extensions { public $add_ons = array(); public function __construct() { $this->define_constants(); $this->includes(); $this->register(); $this->init_hooks(); } public function define( $name, $value ) { if ( ! defined( $name ) ) { define( $name, $value ); } } public function register() { } public function define_constants() { $this->define( 'AE', 'ae' ); $this->define( 'AE_NAME', 'Anton Extensions' ); $this->define( 'AE_BN', plugin_basename( __FILE__ ) ); $this->define( 'AE_URL', plugin_dir_url(__FILE__) ); $this->define( 'AE_IMG_URL', AE_URL . 'assets/images' ); $this->define( 'AE_JS_URL', AE_URL . 'assets/js' ); $this->define( 'AE_CSS_URL', AE_URL . 'assets/css' ); // PATH $this->define( 'AE_PATH', plugin_dir_path( __FILE__ ) ); $this->define( 'AE_LIB_PATH', AE_PATH . 'lib' ); $this->define( 'AE_ADMIN_PATH', AE_LIB_PATH . '/admin' ); $this->define( 'AE_VIEW_PATH', AE_LIB_PATH . '/view' ); $this->define( 'AE_CLASS_PATH', AE_LIB_PATH . '/class' ); $this->define( 'AE_CORE_PATH', AE_LIB_PATH . '/core' ); $this->define( 'AE_AJAX_PATH', AE_CORE_PATH . '/ajax' ); $this->define( 'AE_TEMPLATE_PATH', AE_LIB_PATH . '/templates' ); // DIR $this->define( 'AE_PARENT_THEME_DIR', get_template_directory() ); $this->define( 'AE_CHILD_THEME_DIR', get_stylesheet_directory() ); } public function init_hooks() { add_action( 'admin_menu', array( $this, 'admin_menu' ) ); add_filter( 'plugin_action_links', array( $this, 'settings_url' ), 10, 2 ); add_filter( 'plugin_row_meta', array( $this, 'add_action_links' ), 10, 2 ); add_filter( 'wp_mail_from', array( $this, 'wp_mail_from' ) ); add_filter( 'wp_new_user_notification_email_admin', array( $this, 'new_user_registration' ), 10, 3 ); add_filter( 'wp_mail_from_name', array( $this, 'wp_mail_from_name' ) ); add_action( 'admin_init', array( $this, 'register_setting' ) ); add_action( 'admin_print_styles', array( $this, 'admin_styles' ) ); add_action( 'admin_print_scripts', array( $this, 'admin_scripts' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'styles_scripts' ) ); add_action( 'wp_ajax_ae_ajax', array( $this, 'ae_ajax' ) ); add_action( 'wp_ajax_nopriv_ae_ajax', array( $this, 'ae_ajax' ) ); add_action( 'wp_ajax_croppie', array( $this, 'croppie' ) ); add_action( 'wp_ajax_nopriv_croppie', array( $this, 'croppie' ) ); add_action( 'wp_ajax_single_image_crop', array( $this, 'single_image_crop' ) ); add_action( 'wp_ajax_nopriv_single_image_crop', array( $this, 'single_image_crop' ) ); // USER AVATAR UPLOAD add_action( 'wp_ajax_user_avatar_upload', array( $this, 'ajax_user_avatar_upload' ) ); add_action( 'wp_ajax_nopriv_user_avatar_upload', array( $this, 'ajax_user_avatar_upload' ) ); add_shortcode( 'user-avatar-upload', array( $this, 'user_avatar_upload' ) ); do_action( 'ae_init' ); } public function add_action_links( $plugin_meta, $plugin_file ) { if( $plugin_file == plugin_basename(__FILE__) ){ //$plugin_meta[] = sprintf( '%s', __( 'Documentaion', AE ) ); $plugin_meta[] = '' . __( 'Donate, buy me a coffee', AE ) . ''; } return $plugin_meta; } public function register_setting(){ register_setting( AE, AE ); if( ! get_option( AE ) && get_option( 'anton-extensions' ) ){ update_option( AE, get_option( 'anton-extensions' ) ); } } public function admin_menu(){ add_menu_page( AE_NAME, // Page Name AE_NAME, // Menu Name 'manage_options', AE, array( $this, 'admin_settings' ) ); } public function admin_settings() { wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'wp-color-picker' ); wp_enqueue_style( AE . '-croppie' ); wp_enqueue_style( AE . '-admin' ); wp_enqueue_media(); wp_enqueue_script( AE . '-admin' ); wp_enqueue_script( AE . '-croppie' ); wp_localize_script( AE . '-admin', 'ae', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'homeurl' => get_bloginfo( 'url' ), 'img_url' => AE_IMG_URL, 'spinner' => get_bloginfo( 'url' ) . '/wp-includes/images/spinner.gif', 'spinner2x' => get_bloginfo( 'url' ) . '/wp-includes/images/spinner-2x.gif', ) ); include( AE_ADMIN_PATH . '/settings.php' ); } public function includes() { include_once( AE_CORE_PATH . '/development-functions.php' ); include_once( AE_CORE_PATH . '/functions-template.php' ); include_once( AE_CORE_PATH . '/functions.php' ); include_once( AE_CORE_PATH . '/features.php' ); include_once( AE_CORE_PATH . '/upload.php' ); } public function admin_styles(){ wp_register_style( AE . '-croppie', AE_CSS_URL . '/croppie.min.css' ); wp_register_style( AE . '-admin', AE_CSS_URL . '/admin.min.css', array( AE . '-croppie' ) ); } public function admin_scripts() { wp_register_script( AE . '-admin', AE_JS_URL . '/admin.min.js', array( 'jquery' ) ); wp_register_script( AE . '-croppie', AE_JS_URL . '/croppie.min.js', array( 'jquery' ) ); } public function styles_scripts(){ global $wp_query; // wp_enqueue_media(); wp_register_script( AE . '-croppie', AE_JS_URL . '/croppie.min.js', array( 'jquery' ) ); wp_register_script( AE, AE_JS_URL . '/script.min.js', array( 'jquery' ) ); wp_register_style( AE . '-croppie', AE_CSS_URL . '/croppie.min.css' ); wp_register_style( AE, AE_CSS_URL . '/style.min.css', array( AE . '-croppie' ) ); // wp_enqueue_script( AE ); // wp_enqueue_style( AE ); $localize_script = array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'homeurl' => get_bloginfo( 'url' ), 'img_url' => AE_IMG_URL, 'spinner' => get_bloginfo( 'url' ) . '/wp-includes/images/spinner.gif', 'spinner2x' => get_bloginfo( 'url' ) . '/wp-includes/images/spinner-2x.gif', ); wp_localize_script( AE, 'ae', apply_filters( 'ae_localize_script', $localize_script ) ); } public function ae_ajax(){ $a = array( 'ids' => maybe_serialize( wppost( 'ids' ) ), 'preview' => '' ); if( in_array( wppost( 'multiple' ), array( 'true', 'add' ) ) && wppost( 'ids' ) ): foreach( wppost( 'ids' ) as $id ) : $a['preview'] .= wp_get_attachment_image( $id, 'thumbnail' ); endforeach; endif; switch( wppost( 'multiple' ) ) : case 'true' : echo json_encode( $a ); break; case 'add' : echo json_encode( $a ); break; default: echo sanitize_text_field( wppost( 'ids' ) ); break; endswitch; die(); } public function settings_url( $links, $file ){ if ( $file != AE_BN ) { return $links; } array_unshift( $links, sprintf( '%s', esc_url( admin_url( 'admin.php' ) ), AE, esc_html__( 'Settings', AE ) ) ); return $links; } public function ajax_user_avatar_upload(){ include( apply_filters( 'ajax_user_avatar_php', AE_AJAX_PATH . '/user-avatar.php' ) ); die(); } public function user_avatar_upload( $atts, $args = false ){ $defaults = array( 'savetext' => __( 'SAVE', AE ), 'newimage' => __( 'UPLOAD NEW IMAGE', AE ), 'cancel' => __( 'CANCEL', AE ), 'width' => 300, 'height' => 300 ); $r = shortcode_atts( $defaults, $atts ); if( $args ){ $r = wp_parse_args( $atts, $defaults ); } ob_start(); include( apply_filters( 'shortcode_user_avatar_php', AE_TEMPLATE_PATH . '/user-avatar.php' ) ); return ob_get_clean(); } public function single_image_crop(){ include( AE_AJAX_PATH . '/single-image-crop.php' ); die(); } public function croppie(){ global $current_user; if( ! wppost( 'attach_id' ) ) { return; } $query = array(); $upload_dir = wp_upload_dir(); $upload_path = str_replace( '/', DIRECTORY_SEPARATOR, wpkeyvalue( $upload_dir, 'path' ) ) . DIRECTORY_SEPARATOR; $img = wppost( 'base64' ); $img = str_replace('data:image/png;base64,', '', $img); $img = str_replace(' ', '+', $img); $decoded = base64_decode($img) ; $filename = explode( "fakepath", wppost( 'file' ) ); $filename = wpkeyvalue( $filename, 1 ); $hashed_filename = $filename; // @new $image_upload = file_put_contents( $upload_path . $hashed_filename, $decoded ); //HANDLE UPLOADED FILE if( !function_exists( 'wp_handle_sideload' ) ) { require_once( ABSPATH . 'wp-admin/includes/file.php' ); } // Without that I'm getting a debug error!? if( !function_exists( 'wp_get_current_user' ) ) { require_once( ABSPATH . 'wp-includes/pluggable.php' ); } // @new $file = array(); $file['error'] = ''; $file['tmp_name'] = $upload_path . $hashed_filename; $file['name'] = $hashed_filename; $file['type'] = 'image/png'; $file['size'] = filesize( $upload_path . $hashed_filename ); // upload file to server // @new use $file instead of $image_upload $file_return = wp_handle_sideload( $file, array( 'test_form' => false ) ); $filename = wpkeyvalue( $file_return, 'file' ); $post_title = preg_replace('/\.[^.]+$/', '', basename($filename)); $attachment = array( 'post_mime_type' => wpkeyvalue( $file_return, 'type' ), 'post_title' => $post_title, 'post_content' => '', 'post_status' => 'inherit', 'guid' => wpkeyvalue( $wp_upload_dir, 'url' ) . '/' . basename($filename) ); global $wpdb, $current_user; if( wppost( 'attach_id' ) ) { if( wppost( 'key' ) ) { $args = array( 'post_type' => 'attachment', 'posts_per_page' => -1, 'fields' => 'ids', 'author' => wpstdclass( $current_user, 'ID' ) ? wpstdclass( $current_user, 'ID' ) : 0, 'meta_key' => 'wp_login_logo', 'meta_value' => 1, 'post_status' => array( 'publish', 'private', 'inherit' ), ); $query = new WP_Query( $args ); $query->posts[] = wppost( 'attach_id' ); if( $posts = array_filter( $query->posts ) ){ foreach ( $posts as $key => $post ) { wp_delete_attachment( $post, true ); } } }else{ wp_delete_attachment( wppost( 'attach_id' ), true ); } } $attach_id = wp_insert_attachment( $attachment, $filename, 289 ); require_once(ABSPATH . 'wp-admin/includes/image.php'); $attach_data = wp_generate_attachment_metadata( $attach_id, $filename ); wp_update_attachment_metadata( $attach_id, $attach_data ); $image_src = wp_get_attachment_image_src( $attach_id, 'full' ); update_post_meta( $attach_id, wppost( 'key' ), true ); $a = array( 'user_id' => wpstdclass( $current_user, 'ID' ), 'post_title' => $post_title, 'post_attach_id' => wppost( 'attach_id' ), 'attach_id' => $attach_id, 'attach_url' => wpkeyvalue( $image_src, 0 ), 'key' => wppost( 'key' ) ); echo json_encode( $a ); die(); } public function wp_mail_from( $from_email ){ $wordpress = explode( 'wordpress@', $from_email ); if( count( $wordpress ) > 1 ){ return ae_get_option( 'wp_mail_address', false ) ? ae_get_option( 'wp_mail_address', false ) : get_bloginfo( 'admin_email' ); } return $from_email; } public function wp_mail_from_name( $from_name ){ if( $from_name == 'WordPress' ){ return ae_get_option( 'wp_mail_name', false ) ? ae_get_option( 'wp_mail_name', false ) : get_bloginfo( 'name' ); } return $from_name; } public function new_user_registration( $notification, $user, $blogname ) { $default_notification = wpkeyvalue( $notification, 'subject' ); $subject = ae_get_option( 'new_user_registration_subject_name', false ); if( $subject ){ $notification['subject'] = $subject; $in_array = explode( "{if}", $subject ); if( wpkeyvalue( $in_array, 1 ) ){ $in_array = explode( "{/if}", wpkeyvalue( $in_array, 1 ) ); $in_array = explode( "|", wpkeyvalue( $in_array, 0 ) ); if( wpkeyvalue( $in_array, 0 ) && wpkeyvalue( $in_array, 1 ) ){ if( in_array( wpkeyvalue( $in_array, 0 ), (array) wpstdclass( $user, 'roles' ) ) ){ $notification['subject'] = wpkeyvalue( $in_array, 1 ); }else{ $notification['subject'] = $default_notification; } } } } return $notification; } } add_action( 'plugins_loaded', 'ae_loaded', 10 ); function ae_loaded(){ new Anton_Extensions; do_action( 'ae_loaded' ); } endif;