Permalink
338 lines (285 sloc)
9.38 KB
| <?php | |
| defined( 'ABSPATH' ) or die( "you do not have acces to this page!" ); | |
| if ( ! class_exists( "cmplz_DNSMPD" ) ) { | |
| class cmplz_DNSMPD { | |
| private static $_this; | |
| function __construct() { | |
| if ( isset( self::$_this ) ) { | |
| wp_die( sprintf( '%s is a singleton class and you cannot create a second instance.', | |
| get_class( $this ) ) ); | |
| } | |
| self::$_this = $this; | |
| add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_assets' ) ); | |
| add_action( 'wp_ajax_cmplz_send_dnsmpd_request', array( $this, 'send_dnsmpd_request' ) ); | |
| add_action( 'wp_ajax_nopriv_cmplz_send_dnsmpd_request', array( $this, 'send_dnsmpd_request' ) ); | |
| add_action( 'activated_plugin', array( $this, 'update_db_check' ), 10, 2 ); | |
| add_action( 'admin_init', array( $this, 'update_db_check' ), 10 ); | |
| add_action( 'cmplz_admin_menu', array( $this, 'admin_menu' ) ); | |
| add_action( 'admin_init', array( $this, 'process_delete' ) ); | |
| add_action('admin_enqueue_scripts', array($this, 'admin_enqueue')); | |
| } | |
| static function this() { | |
| return self::$_this; | |
| } | |
| public function admin_menu() { | |
| if ( ! cmplz_user_can_manage() ) { | |
| return; | |
| } | |
| if ( ! cmplz_dnsmpi_required() | |
| ) { | |
| return; | |
| } | |
| add_submenu_page( | |
| 'complianz', | |
| __( 'DNSMPI', 'complianz-gdpr' ), | |
| __( 'DNSMPI', 'complianz-gdpr' ), | |
| 'manage_options', | |
| 'cmplz_dnsmpd', | |
| array( $this, 'removed_users_overview' ) | |
| ); | |
| } | |
| public function removed_users_overview() { | |
| include( dirname( __FILE__ ) . '/class-DNSMPD-table.php' ); | |
| $customers_table = new cmplz_DNSMPD_Table(); | |
| $customers_table->prepare_items(); | |
| ?> | |
| <div class="wrap"> | |
| <h1 class="wp-heading-inline"><?php _e( 'Do Not Sell My Personal Info Requests', 'complianz-gdpr' ); ?> | |
| <?php //do_action( 'edd_customers_table_top' ); | |
| ?> | |
| <a href="<?php echo esc_url_raw( cmplz_url | |
| . "DNSMPD/csv.php?nonce=" | |
| . wp_create_nonce( 'cmplz_csv_nonce' ) ) ?>" | |
| target="_blank" class="button button-primary"><?php _e("Export", "complianz-gdpr")?></a> | |
| </h1> | |
| <form id="cmplz-dnsmpd-filter" method="get" | |
| action="<?php echo admin_url( 'admin.php?page=cmplz_dnsmpd' ); ?>"> | |
| <?php | |
| $customers_table->search_box( __( 'Search Customers', | |
| 'complianz-gdpr' ), 'cmplz_dnsmpd' ); | |
| $customers_table->display(); | |
| ?> | |
| <input type="hidden" name="page" value="cmplz_dnsmpd"/> | |
| </form> | |
| <?php //do_action( 'edd_customers_table_bottom' ); | |
| ?> | |
| </div> | |
| <?php | |
| } | |
| public function get_users( $args ) { | |
| global $wpdb; | |
| $sql = "SELECT * from {$wpdb->prefix}cmplz_dnsmpd"; | |
| $search_sql = ''; | |
| if ( isset( $args['email'] ) && ! empty( $args['email'] ) | |
| && is_email( $args['email'] ) | |
| ) { | |
| $sql = $wpdb->prepare( "%s WHERE email like %s", $sql, | |
| "%" . sanitize_text_field( $args['email'] ) . "%" ); | |
| } | |
| if ( isset( $args['name'] ) && ! empty( $args['name'] ) ) { | |
| $search_sql = " WHERE name like '%" | |
| . sanitize_text_field( $args['name'] ) . "%'"; | |
| } | |
| $sql .= $search_sql . " ORDER BY " | |
| . sanitize_title( $args['orderby'] ) . " " | |
| . sanitize_title( $args['order'] ); | |
| if ( isset( $args['number'] ) ) { | |
| $sql .= " LIMIT " . intval( $args['number'] ) . " OFFSET " | |
| . intval( $args["offset"] ); | |
| } | |
| $users = $wpdb->get_results( $sql ); | |
| return $users; | |
| } | |
| /** | |
| * Count number of users | |
| * @param $args | |
| * | |
| * @return int | |
| */ | |
| public function count_users( $args ) { | |
| unset( $args['number'] ); | |
| $users = $this->get_users( $args ); | |
| return count( $users ); | |
| } | |
| public function send_dnsmpd_request() { | |
| //check honeypot | |
| $error = false; | |
| if ( isset( $_POST['firstname'] ) | |
| && ! empty( $_POST['firstname'] ) | |
| ) { | |
| $error = true; | |
| $message = __( "Sorry, it looks like you're a bot", | |
| 'complianz-gdpr' ); | |
| } | |
| if ( ! isset( $_POST['email'] ) || ! is_email( $_POST['email'] ) ) { | |
| $error = true; | |
| $message = __( "Please enter a valid email address.", | |
| 'complianz-gdpr' ); | |
| } | |
| if ( ! isset( $_POST['name'] ) || strlen( $_POST['name'] ) == 0 ) { | |
| $error = true; | |
| $message = __( "Please enter your name", 'complianz-gdpr' ); | |
| } | |
| if ( ! isset( $_POST['name'] ) || strlen( $_POST['name'] ) > 100 ) { | |
| $error = true; | |
| $message | |
| = __( "That's a long name you got there. Please try to shorten the name.", | |
| 'complianz-gdpr' ); | |
| } | |
| if ( ! $error ) { | |
| $email = sanitize_email( $_POST['email'] ); | |
| $name = sanitize_text_field( $_POST['name'] ); | |
| //check if this email address is already registered: | |
| global $wpdb; | |
| $count | |
| = $wpdb->get_var( $wpdb->prepare( "SELECT count(*) from {$wpdb->prefix}cmplz_dnsmpd WHERE email = '%s'", | |
| $email ) ); | |
| if ( $count == 0 ) { | |
| $wpdb->insert( $wpdb->prefix . 'cmplz_dnsmpd', | |
| array( | |
| 'name' => $name, | |
| 'email' => $email, | |
| 'request_date' => time() | |
| ) | |
| ); | |
| $this->send_confirmation_mail( $email, $name ); | |
| $message | |
| = __( "Your request has been processed successfully!", | |
| 'complianz-gdpr' ); | |
| } else { | |
| $message = __( "Your email address was already registered!", | |
| 'complianz-gdpr' ); | |
| } | |
| } | |
| $data = array( | |
| 'success' => ! $error, | |
| 'message' => $message | |
| ); | |
| $response = json_encode( $data ); | |
| header( "Content-Type: application/json" ); | |
| echo $response; | |
| exit; | |
| } | |
| /** | |
| * Handle ajax delete request | |
| */ | |
| public function process_delete() { | |
| if ( ! current_user_can( 'manage_options' ) ) { | |
| return; | |
| } | |
| if ( isset( $_GET['page'] ) && ( $_GET['page'] == 'cmplz_dnsmpd' ) | |
| && isset( $_GET['action'] ) | |
| && $_GET['action'] == 'delete' | |
| && isset( $_GET['id'] ) | |
| ) { | |
| global $wpdb; | |
| $wpdb->delete( $wpdb->prefix . 'cmplz_dnsmpd', | |
| array( 'ID' => intval( $_GET['id'] ) ) ); | |
| $paged = isset( $_GET['paged'] ) ? 'paged=' | |
| . intval( $_GET['paged'] ) | |
| : ''; | |
| wp_redirect( admin_url( 'admin.php?page=cmplz_dnsmpd' . $paged ) ); | |
| } | |
| } | |
| /** | |
| * Enqueue back-end assets | |
| * @param $hook | |
| */ | |
| public function admin_enqueue($hook){ | |
| if (!isset($_GET['page']) || $_GET['page'] !== 'cmplz_dnsmpd' ) return; | |
| $min = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '' : '.min'; | |
| wp_register_style('cmplz-posttypes', cmplz_url . "assets/css/posttypes$min.css", false, cmplz_version); | |
| wp_enqueue_style('cmplz-posttypes'); | |
| } | |
| /** | |
| * Enqueue front-end assets | |
| * @param $hook | |
| */ | |
| public function enqueue_assets( $hook ) { | |
| if ( ! cmplz_has_region( 'us' ) | |
| || ! cmplz_sells_personal_data() | |
| ) { | |
| return; | |
| } | |
| $dnsmpd_page_id | |
| = COMPLIANZ::$document->get_shortcode_page_id( 'cookie-statement', | |
| 'us' ); | |
| if ( ! $dnsmpd_page_id ) { | |
| return; | |
| } | |
| global $post; | |
| if ( $post && $post->ID != $dnsmpd_page_id ) { | |
| return; | |
| } | |
| wp_enqueue_script( 'cmplz-dnsmpd', cmplz_url . "DNSMPD/dnsmpd.js", | |
| array( 'jquery' ), cmplz_version, true ); | |
| wp_localize_script( | |
| 'cmplz-dnsmpd', | |
| 'cmplz_dnsmpd', | |
| array( | |
| 'url' => admin_url( 'admin-ajax.php' ), | |
| ) | |
| ); | |
| } | |
| public function update_db_check() { | |
| if ( get_option( 'cmplz_dnsmpd_db_version' ) != cmplz_version ) { | |
| require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); | |
| $this->create_user_table(); | |
| update_option( 'cmplz_dnsmpd_db_version', cmplz_version ); | |
| } | |
| } | |
| /* | |
| * | |
| * | |
| * | |
| * */ | |
| public function create_user_table() { | |
| global $wpdb; | |
| $charset_collate = $wpdb->get_charset_collate(); | |
| $table_name = $wpdb->prefix . 'cmplz_dnsmpd'; | |
| $sql = "CREATE TABLE $table_name ( | |
| `ID` int(11) NOT NULL AUTO_INCREMENT, | |
| `name` varchar(255) NOT NULL, | |
| `email` varchar(255) NOT NULL, | |
| `request_date` int(11) NOT NULL, | |
| PRIMARY KEY (ID) | |
| ) $charset_collate;"; | |
| dbDelta( $sql ); | |
| } | |
| private function send_confirmation_mail( $email, $name ) { | |
| $message = cmplz_get_value( 'notification_email_content' ); | |
| $subject = cmplz_get_value( 'notification_email_subject' ); | |
| $message = str_replace( '{name}', $name, $message ); | |
| $message = str_replace( '{blogname}', get_bloginfo( 'name' ), | |
| $message ); | |
| $this->send_mail( $email, $subject, $message ); | |
| } | |
| // private function send_admin_notification($email, $name){ | |
| // $message = cmplz_get_value('notification_email_content'); | |
| // $subject = cmplz_get_value('notification_email_subject'); | |
| // | |
| // $message = str_replace('{name}', $name, $message); | |
| // $message = str_replace('{blogname}', get_bloginfo('name'), $message); | |
| // $this->send_mail($email, $subject, $message); | |
| // } | |
| private function send_mail( $email, $subject, $message ) { | |
| $headers = array(); | |
| $from_name = get_bloginfo( 'name' ); | |
| $from_email = cmplz_get_value( 'notification_from_email' ); | |
| add_filter( 'wp_mail_content_type', function ( $content_type ) { | |
| return 'text/html'; | |
| } ); | |
| if ( ! empty( $from_email ) ) { | |
| $headers[] = 'From: ' . $from_name . ' <' . $from_email . '>' | |
| . "\r\n"; | |
| } | |
| $success = true; | |
| if ( wp_mail( $email, $subject, $message, $headers ) === false ) { | |
| $success = false; | |
| } | |
| // Reset content-type to avoid conflicts -- http://core.trac.wordpress.org/ticket/23578 | |
| remove_filter( 'wp_mail_content_type', 'set_html_content_type' ); | |
| return $success; | |
| } | |
| } | |
| } //class closure |