Your IP : 216.73.216.164


Current Path : /var/www/ooareogundevinitiative/wp-content/plugins/newsletter/users/
Upload File :
Current File : /var/www/ooareogundevinitiative/wp-content/plugins/newsletter/users/users.php

<?php

defined( 'ABSPATH' ) || exit;

class NewsletterUsers extends NewsletterModule {

	static $instance;

	/**
	 * @return NewsletterUsers
	 */
	static function instance() {
		if ( self::$instance == null ) {
			self::$instance = new NewsletterUsers();
		}

		return self::$instance;
	}

	function __construct() {
		parent::__construct( 'users', '1.3.0' );
		if ( is_admin() ) {
			add_action( 'wp_ajax_newsletter_users_export', array( $this, 'hook_wp_ajax_newsletter_users_export' ) );
		}
	}

	function hook_wp_ajax_newsletter_users_export() {

		$newsletter = Newsletter::instance();
		if ( $newsletter->is_allowed() ) {
			require_once NEWSLETTER_INCLUDES_DIR . '/controls.php';
			$controls = new NewsletterControls();

			if ( $controls->is_action( 'export' ) ) {
				$this->export( $controls->data );
			}
		} else {
			die( 'Not allowed.' );
		}
	}

	function upgrade() {
		global $wpdb, $charset_collate;

		parent::upgrade();

		$sql = "CREATE TABLE `" . $wpdb->prefix . "newsletter` (
  `name` varchar(100) NOT NULL DEFAULT '',
  `email` varchar(100) NOT NULL DEFAULT '',
  `token` varchar(50) NOT NULL DEFAULT '',
  `language` varchar(10) NOT NULL DEFAULT '',
  `status` varchar(1) NOT NULL DEFAULT 'S',
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `profile` mediumtext,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated` int(11) NOT NULL DEFAULT '0',
  `last_activity` int(11) NOT NULL DEFAULT '0',
  `followup_step` tinyint(4) NOT NULL DEFAULT '0',
  `followup_time` bigint(20) NOT NULL DEFAULT '0',
  `followup` tinyint(4) NOT NULL DEFAULT '0',
  `surname` varchar(100) NOT NULL DEFAULT '',
  `sex` char(1) NOT NULL DEFAULT 'n',
  `feed_time` bigint(20) NOT NULL DEFAULT '0',
  `feed` tinyint(4) NOT NULL DEFAULT '0',
  `referrer` varchar(50) NOT NULL DEFAULT '',
  `ip` varchar(50) NOT NULL DEFAULT '',
  `wp_user_id` int(11) NOT NULL DEFAULT '0',
  `http_referer` varchar(255) NOT NULL DEFAULT '',
  `geo` tinyint(4) NOT NULL DEFAULT '0',
  `country` varchar(4) NOT NULL DEFAULT '',
  `region` varchar(100) NOT NULL DEFAULT '',
  `city` varchar(100) NOT NULL DEFAULT '',
  `bounce_type` varchar(50) NOT NULL DEFAULT '',
  `bounce_time` int(11) NOT NULL DEFAULT '0',
  `unsub_email_id` int(11) NOT NULL DEFAULT '0',  
  `unsub_time` int(11) NOT NULL DEFAULT '0',\n";

		for ( $i = 1; $i <= NEWSLETTER_LIST_MAX; $i ++ ) {
			$sql .= "`list_$i` tinyint(4) NOT NULL DEFAULT '0',\n";
		}

		for ( $i = 1; $i <= NEWSLETTER_PROFILE_MAX; $i ++ ) {
			$sql .= "`profile_$i` varchar(255) NOT NULL DEFAULT '',\n";
		}
		// Leave as last
		$sql .= "`test` tinyint(4) NOT NULL DEFAULT '0',\n";
		$sql .= "PRIMARY KEY (`id`),\nUNIQUE KEY `email` (`email`),\nKEY `wp_user_id` (`wp_user_id`)\n) $charset_collate;";

		dbDelta( $sql );

		if ( $this->old_version < '1.2.7' ) {
			$this->query( "update " . NEWSLETTER_USERS_TABLE . " set geo=1 where country<>''" );

		}
		if ( $this->old_version > '1.2.5' && $this->old_version < '1.2.9' ) {
			$this->upgrade_query( "ALTER TABLE " . NEWSLETTER_USERS_TABLE . " DROP COLUMN last_ip;" );
		}

	}

	function admin_menu() {
		$this->add_menu_page( 'index', 'Subscribers' );
		$this->add_admin_page( 'new', 'New subscriber' );
		$this->add_admin_page( 'edit', 'Subscribers Edit' );
		$this->add_admin_page( 'massive', 'Massive Management' );
		$this->add_admin_page( 'export', 'Export' );
		$this->add_admin_page( 'import', 'Import' );
		$this->add_admin_page( 'statistics', 'Statistics' );
	}

	function export( $options = null ) {
		global $wpdb;

		header( 'Content-Type: application/octet-stream' );
		header( 'Content-Disposition: attachment; filename="newsletter-subscribers.csv"' );

		// BOM
		echo "\xEF\xBB\xBF";

		$sep = ';';
		if ( $options ) {
			$sep = $options['separator'];
		}
		if ( $sep == 'tab' ) {
			$sep = "\t";
		}

		// CSV header
		echo '"Email"' . $sep . '"Name"' . $sep . '"Surname"' . $sep . '"Gender"' . $sep . '"Status"' . $sep . '"Date"' . $sep . '"Token"' . $sep;

		// In table profiles
		for ( $i = 1; $i <= NEWSLETTER_PROFILE_MAX; $i ++ ) {
			echo '"Profile ' . $i . '"' . $sep; // To adjust with field name
		}

		// Lists
		for ( $i = 1; $i <= NEWSLETTER_LIST_MAX; $i ++ ) {
			echo '"List ' . $i . '"' . $sep;
		}

		echo '"Feed by mail"' . $sep . '"Follow up"' . $sep;
		echo '"IP"' . $sep . '"Referrer"' . $sep . '"Country"';

		echo "\n";

		$page = 0;
		while ( true ) {
			$query = "select * from " . NEWSLETTER_USERS_TABLE . "";
			$list  = (int) $_POST['options']['list'];
			if ( ! empty( $list ) ) {
				$query .= " where list_" . $list . "=1";
			}
			$recipients = $wpdb->get_results( $query . " order by email limit " . $page * 500 . ",500" );
			for ( $i = 0; $i < count( $recipients ); $i ++ ) {
				echo '"' . $recipients[ $i ]->email . '"' . $sep . '"' . $this->sanitize_csv( $recipients[ $i ]->name ) .
				     '"' . $sep . '"' . $this->sanitize_csv( $recipients[ $i ]->surname ) .
				     '"' . $sep . '"' . $recipients[ $i ]->sex .
				     '"' . $sep . '"' . $recipients[ $i ]->status . '"' . $sep . '"' . $recipients[ $i ]->created . '"' . $sep . '"' . $recipients[ $i ]->token . '"' . $sep;

				for ( $j = 1; $j <= NEWSLETTER_PROFILE_MAX; $j ++ ) {
					$column = 'profile_' . $j;
					echo '"' . $this->sanitize_csv( $recipients[ $i ]->$column ) . '"' . $sep;
				}

				for ( $j = 1; $j <= NEWSLETTER_LIST_MAX; $j ++ ) {
					$list = 'list_' . $j;
					echo '"' . $recipients[ $i ]->$list . '"' . $sep;
				}

				echo '"' . $recipients[ $i ]->feed . '"' . $sep;
				echo '"' . $recipients[ $i ]->followup . '"' . $sep;
				echo '"' . $recipients[ $i ]->ip . '"' . $sep;
				echo '"' . $recipients[ $i ]->referrer . '"' . $sep;
				echo '"' . $recipients[ $i ]->country . '"' . $sep;

				echo "\n";
				flush();
			}
			if ( count( $recipients ) < 500 ) {
				break;
			}
			$page ++;
		}
		die();
	}

	function sanitize_csv( $text ) {
		$text = str_replace( '"', "'", $text );
		$text = str_replace( "\n", ' ', $text );
		$text = str_replace( "\r", ' ', $text );
		$text = str_replace( ";", ' ', $text );

		// Do you wonder? Excel...
		$first = substr( $text, 0, 1 );
		if ( $first == '=' || $first == '+' || $first == '-' || $first == '@' ) {
			$text = "'" . $text;
		}

		return $text;
	}

	/**
	 * @param array $args
	 * @param string $format
	 *
	 * @return array|object|null
	 */
	function get_users( $args, $format = OBJECT ) {
		global $wpdb;

		$default_args = array(
			'page'     => 1,
			'per_page' => 10
		);

		$args = array_merge( $default_args, $args );

		$query      = 'SELECT * FROM ' . NEWSLETTER_USERS_TABLE . ' ';
		$query_args = [];

		$query        .= ' LIMIT %d OFFSET %d';
		$query_args[] = (int) $args['per_page'];
		$query_args[] = ( (int) $args['page'] - 1 ) * (int) $args['per_page'];


		$records = $wpdb->get_results( $wpdb->prepare( $query, $query_args ), $format );

		if ( $wpdb->last_error ) {
			$this->logger->error( $wpdb->last_error );

			return null;
		}

		return $records;

	}

	/**
	 * Check if email exists
	 *
	 * @param string $email
	 *
	 * @return bool
	 */
	function email_exists( $email ) {

		$email = parent::normalize_email( $email );
		$user  = parent::get_user( $email );

		return $user ? true : false;

	}

}

NewsletterUsers::instance();