Current File : /home/pacjaorg/www/copwordpres/wp-content/plugins/download-monitor/src/Installer.php |
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
class DLM_Installer {
/**
* Install all requirements for Download Monitor
*/
public function install() {
// Init User Roles
$this->init_user_roles();
// Setup Taxonomies
$taxonomy_manager = new DLM_Taxonomy_Manager();
$taxonomy_manager->setup();
// Setup Post Types
$post_type_manager = new DLM_Post_Type_Manager();
$post_type_manager->setup();
// Create Database Table
$this->install_tables();
// Directory Protection
$this->directory_protection();
// No Access Page
$this->add_no_access_page();
// Add endpoints
$dlm_download_handler = new DLM_Download_Handler();
$dlm_download_handler->add_endpoint();
// Set default 'No access message'
$dlm_no_access_error = get_option( 'dlm_no_access_error', '' );
if ( '' === $dlm_no_access_error ) {
update_option( 'dlm_no_access_error', sprintf( __( 'You do not have permission to access this download. %1$sGo to homepage%2$s', 'download-monitor' ), '<a href="' . home_url() . '">', '</a>' ) );
}
// setup no access page endpoints
$no_access_page_endpoint = new DLM_Download_No_Access_Page_Endpoint();
$no_access_page_endpoint->setup();
$installed_version = get_option( DLM_Constants::OPTION_CURRENT_VERSION );
$first_install = ! $installed_version ? true : false;
if ( $installed_version && version_compare( $installed_version, DLM_UPGRADER_VERSION, '<' ) ) {
set_transient( 'dlm_needs_upgrade', '1', 30 * DAY_IN_SECONDS );
}
update_option( DLM_Constants::OPTION_CURRENT_VERSION, DLM_VERSION );
// Update options that may have been moved
$this->update_options();
// add rewrite rules
add_rewrite_endpoint( 'download-id', EP_ALL );
// flush rewrite rules
flush_rewrite_rules(false);
flush_rewrite_rules();
do_action( 'dlm_after_install_setup', $first_install );
}
/**
* Init user roles
*
* @return void
*/
public function init_user_roles() {
global $wp_roles;
if ( class_exists( 'WP_Roles' ) && ! isset( $wp_roles ) ) {
$wp_roles = new WP_Roles();
}
if ( is_object( $wp_roles ) ) {
$wp_roles->add_cap( 'administrator', 'manage_downloads' );
$wp_roles->add_cap( 'administrator', 'dlm_manage_logs' );
$wp_roles->add_cap( 'administrator', 'dlm_view_reports' );
}
}
/**
* Creates the shop-related tables in the database.
* This is a separate method because it's also called from within the UpgradeManager.
*/
public function create_shop_tables() {
global $wpdb;
$wpdb->hide_errors();
$collate = $this->get_db_collate();
$table_prefix = $wpdb->prefix;
$tables_sql = array();
// order table
$tables_sql[] = "
CREATE TABLE IF NOT EXISTS `{$table_prefix}dlm_order` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`status` VARCHAR(255) NOT NULL,
`date_created` DATETIME NOT NULL,
`date_modified` DATETIME NULL,
`currency` VARCHAR(5) NOT NULL,
`hash` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB {$collate};";
// order customer
$tables_sql[] = "CREATE TABLE IF NOT EXISTS `{$table_prefix}dlm_order_customer` (
`first_name` VARCHAR(255) NULL,
`last_name` VARCHAR(255) NULL,
`company` VARCHAR(255) NULL,
`address_1` VARCHAR(255) NULL,
`address_2` VARCHAR(255) NULL,
`city` VARCHAR(255) NULL,
`state` VARCHAR(255) NULL,
`postcode` VARCHAR(255) NULL,
`country` VARCHAR(5) NULL,
`email` VARCHAR(255) NULL,
`phone` VARCHAR(50) NULL,
`ip_address` VARCHAR(50) NULL,
`order_id` INT UNSIGNED NOT NULL,
INDEX `fk_order_customer_order_idx` (`order_id` ASC),
PRIMARY KEY (`order_id`),
CONSTRAINT `fk_order_customer_order`
FOREIGN KEY (`order_id`)
REFERENCES `{$table_prefix}dlm_order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB {$collate};";
// transaction table
$tables_sql[] = "CREATE TABLE IF NOT EXISTS `{$table_prefix}dlm_order_transaction` (
`id` INT NOT NULL AUTO_INCREMENT,
`date_created` DATETIME NULL,
`date_modified` DATETIME NULL,
`amount` INT NULL,
`status` VARCHAR(50) NULL,
`processor` VARCHAR(255) NULL,
`processor_nice_name` VARCHAR(255) NULL,
`processor_transaction_id` VARCHAR(255) NULL,
`processor_status` VARCHAR(255) NULL,
`order_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
INDEX `fk_transaction_order1_idx` (`order_id` ASC),
CONSTRAINT `fk_transaction_order1`
FOREIGN KEY (`order_id`)
REFERENCES `{$table_prefix}dlm_order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB {$collate};";
// order items
$tables_sql[] = "CREATE TABLE IF NOT EXISTS `{$table_prefix}dlm_order_item` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_id` INT UNSIGNED NOT NULL,
`label` VARCHAR(255) NULL,
`qty` INT NULL,
`product_id` INT UNSIGNED NULL,
`tax_class` VARCHAR(255) NULL,
`tax_total` INT NULL,
`subtotal` INT NULL,
`total` INT NULL,
INDEX `fk_order_item_order1_idx` (`order_id` ASC),
PRIMARY KEY (`id`),
CONSTRAINT `fk_order_item_order1`
FOREIGN KEY (`order_id`)
REFERENCES `{$table_prefix}dlm_order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB {$collate};";
// session
$tables_sql[] = "CREATE TABLE IF NOT EXISTS `{$table_prefix}dlm_session` (
`key` VARCHAR(190) NOT NULL,
`hash` VARCHAR(190) NOT NULL,
`expiry` DATETIME NOT NULL,
`data` LONGTEXT NOT NULL,
PRIMARY KEY (`key`))
ENGINE = InnoDB {$collate};";
foreach ( $tables_sql as $sql ) {
$wpdb->query( $sql );
}
}
/**
* Get DB collate
*
* @return string
*/
private function get_db_collate() {
global $wpdb;
$collate = '';
if ( $wpdb->has_cap( 'collation' ) ) {
if ( ! empty( $wpdb->charset ) ) {
$collate .= "DEFAULT CHARACTER SET $wpdb->charset";
}
if ( ! empty( $wpdb->collate ) ) {
$collate .= " COLLATE $wpdb->collate";
}
}
return $collate;
}
/**
* install_tables function.
*
* @return void
*/
private function install_tables() {
global $wpdb;
$wpdb->hide_errors();
$collate = $this->get_db_collate();
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
$dlm_log = '
CREATE TABLE `' . $wpdb->prefix . "download_log` (
ID bigint(20) NOT NULL auto_increment,
user_id bigint(20) NOT NULL,
user_ip varchar(200) NOT NULL,
uuid varchar(200) NOT NULL,
user_agent varchar(200) NOT NULL,
download_id bigint(20) NOT NULL,
version_id bigint(20) NOT NULL,
version varchar(200) NOT NULL,
download_date datetime DEFAULT NULL,
download_status varchar(200) DEFAULT NULL,
download_status_message varchar(200) DEFAULT NULL,
download_location varchar(200) DEFAULT NULL,
download_category longtext DEFAULT NULL,
meta_data longtext DEFAULT NULL,
PRIMARY KEY (ID),
KEY attribute_name (download_id)
) $collate;
";
$dlm_reports = "CREATE TABLE `{$wpdb->prefix}dlm_reports_log` (
date DATE NOT NULL,
download_ids longtext NULL,
revenue longtext NULL,
refunds longtext NULL,
PRIMARY KEY (date),
KEY attribute_name (date)
) $collate;";
$dlm_downloads = "CREATE TABLE `{$wpdb->prefix}dlm_downloads` (
ID bigint(20) NOT NULL auto_increment,
download_id bigint(20) NOT NULL,
download_count bigint(20) NOT NULL,
download_versions varchar(200) NOT NULL,
PRIMARY KEY (ID),
KEY attribute_name (download_id)
) $collate;";
dbDelta( $dlm_log );
dbDelta( $dlm_reports );
dbDelta( $dlm_downloads );
// install shop tables.
$this->create_shop_tables();
}
/**
* Protect the upload dir on activation.
*
* @access public
* @return void
*/
public function directory_protection() {
// Install files and folders for uploading files and prevent hotlinking
$upload_dir = wp_upload_dir();
$htaccess_content = '# Apache 2.4 and up
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
# Apache 2.3 and down
<IfModule !mod_authz_core.c>
Order Allow,Deny
Deny from all
</IfModule>';
$files = array(
array(
'base' => $upload_dir['basedir'] . '/dlm_uploads',
'file' => '.htaccess',
'content' => $htaccess_content,
),
array(
'base' => $upload_dir['basedir'] . '/dlm_uploads',
'file' => 'index.html',
'content' => '',
),
);
foreach ( $files as $file ) {
if ( wp_mkdir_p( $file['base'] ) && ! file_exists( trailingslashit( $file['base'] ) . $file['file'] ) ) {
if ( $file_handle = @fopen( trailingslashit( $file['base'] ) . $file['file'], 'w' ) ) {
fwrite( $file_handle, $file['content'] );
fclose( $file_handle );
}
}
}
}
/**
* Creates No Access page automatically if none is set. Is activated on plugin activation.
*
* @access public
* @return void
*
* @since 4.8.7
*/
public function add_no_access_page() {
if ( 0 === absint( get_option( 'dlm_no_access_page', 0 ) ) ) {
$pc = new WPChill\DownloadMonitor\Util\PageCreator();
$pc->create_no_access_page();
}
}
/**
* Update options that may have been moved
*
* @return void
*/
private function update_options() {
// Update the invoice prefix, that was moved from PayPal to the main settings in the Shop tab
$paypal_invoice = download_monitor()->service( 'settings' )->get_option( 'gateway_paypal_invoice_prefix' );
if ( $paypal_invoice ) {
update_option( 'dlm_invoice_prefix', $paypal_invoice );
delete_option( 'gateway_paypal_invoice_prefix' );
}
}
}