2013-07-25 15:29:25 +00:00
< ? php
/**
* Installation related functions and actions .
*
* @ author WooThemes
* @ category Admin
* @ package WooCommerce / Classes
* @ version 2.1 . 0
*/
if ( ! defined ( 'ABSPATH' ) ) exit ; // Exit if accessed directly
if ( ! class_exists ( 'WC_Install' ) ) :
/**
* WC_Install Class
*/
class WC_Install {
/**
* Hook in tabs .
*/
public function __construct () {
2014-08-29 17:28:23 +00:00
// Run this on activation.
2013-10-24 18:36:22 +00:00
register_activation_hook ( WC_PLUGIN_FILE , array ( $this , 'install' ) );
2013-07-25 15:29:25 +00:00
2014-08-29 17:28:23 +00:00
// Hooks
2013-07-25 15:29:25 +00:00
add_action ( 'admin_init' , array ( $this , 'install_actions' ) );
add_action ( 'admin_init' , array ( $this , 'check_version' ), 5 );
add_action ( 'in_plugin_update_message-woocommerce/woocommerce.php' , array ( $this , 'in_plugin_update_message' ) );
2014-08-29 17:43:06 +00:00
add_filter ( 'plugin_action_links_' . WC_PLUGIN_BASENAME , array ( $this , 'plugin_action_links' ) );
2014-08-29 17:54:17 +00:00
add_filter ( 'plugin_row_meta' , array ( $this , 'plugin_row_meta' ), 10 , 2 );
2013-07-25 15:29:25 +00:00
}
/**
* check_version function .
*
* @ access public
* @ return void
*/
public function check_version () {
2014-01-12 00:05:14 +00:00
if ( ! defined ( 'IFRAME_REQUEST' ) && ( get_option ( 'woocommerce_version' ) != WC () -> version || get_option ( 'woocommerce_db_version' ) != WC () -> version ) ) {
2013-07-25 15:29:25 +00:00
$this -> install ();
2014-02-11 13:33:56 +00:00
do_action ( 'woocommerce_updated' );
2014-01-12 00:05:14 +00:00
}
2013-07-25 15:29:25 +00:00
}
/**
* Install actions such as installing pages when a button is clicked .
*/
public function install_actions () {
// Install - Add pages button
if ( ! empty ( $_GET [ 'install_woocommerce_pages' ] ) ) {
2013-11-18 19:59:10 +00:00
self :: create_pages ();
2013-07-25 15:29:25 +00:00
// We no longer need to install pages
delete_option ( '_wc_needs_pages' );
delete_transient ( '_wc_activation_redirect' );
// What's new redirect
2013-12-04 12:20:18 +00:00
wp_redirect ( admin_url ( 'index.php?page=wc-about&wc-installed=true' ) );
2013-07-25 15:29:25 +00:00
exit ;
// Skip button
} elseif ( ! empty ( $_GET [ 'skip_install_woocommerce_pages' ] ) ) {
// We no longer need to install pages
delete_option ( '_wc_needs_pages' );
delete_transient ( '_wc_activation_redirect' );
// What's new redirect
2013-12-04 12:20:18 +00:00
wp_redirect ( admin_url ( 'index.php?page=wc-about' ) );
2013-07-25 15:29:25 +00:00
exit ;
// Update button
} elseif ( ! empty ( $_GET [ 'do_update_woocommerce' ] ) ) {
$this -> update ();
// Update complete
delete_option ( '_wc_needs_pages' );
delete_option ( '_wc_needs_update' );
delete_transient ( '_wc_activation_redirect' );
// What's new redirect
2013-12-04 12:20:18 +00:00
wp_redirect ( admin_url ( 'index.php?page=wc-about&wc-updated=true' ) );
2013-07-25 15:29:25 +00:00
exit ;
}
}
/**
* Install WC
*/
public function install () {
$this -> create_options ();
$this -> create_tables ();
$this -> create_roles ();
// Register post types
2014-02-05 15:01:30 +00:00
include_once ( 'class-wc-post-types.php' );
2014-02-11 00:29:29 +00:00
WC_Post_types :: register_post_types ();
2014-02-05 15:01:30 +00:00
WC_Post_types :: register_taxonomies ();
2013-07-25 15:29:25 +00:00
2014-02-11 00:29:29 +00:00
// Also register endpoints - this needs to be done prior to rewrite rule flush
WC () -> query -> init_query_vars ();
WC () -> query -> add_endpoints ();
2013-07-25 15:29:25 +00:00
$this -> create_terms ();
$this -> create_cron_jobs ();
$this -> create_files ();
$this -> create_css_from_less ();
// Queue upgrades
2014-05-30 17:27:41 +00:00
$current_version = get_option ( 'woocommerce_version' , null );
2013-07-25 15:29:25 +00:00
$current_db_version = get_option ( 'woocommerce_db_version' , null );
2014-05-30 17:27:41 +00:00
if ( version_compare ( $current_db_version , '2.2.0' , '<' ) && null !== $current_db_version ) {
2013-07-25 15:29:25 +00:00
update_option ( '_wc_needs_update' , 1 );
} else {
update_option ( 'woocommerce_db_version' , WC () -> version );
}
// Update version
update_option ( 'woocommerce_version' , WC () -> version );
// Check if pages are needed
2014-01-12 00:05:14 +00:00
if ( wc_get_page_id ( 'shop' ) < 1 ) {
2013-07-25 15:29:25 +00:00
update_option ( '_wc_needs_pages' , 1 );
2014-01-12 00:05:14 +00:00
}
2013-07-25 15:29:25 +00:00
2014-02-11 00:29:29 +00:00
// Flush rules after install
2013-07-25 15:29:25 +00:00
flush_rewrite_rules ();
// Redirect to welcome screen
set_transient ( '_wc_activation_redirect' , 1 , 60 * 60 );
}
/**
* Handle updates
*/
public function update () {
// Do updates
$current_db_version = get_option ( 'woocommerce_db_version' );
if ( version_compare ( $current_db_version , '1.4' , '<' ) ) {
include ( 'updates/woocommerce-update-1.4.php' );
update_option ( 'woocommerce_db_version' , '1.4' );
}
if ( version_compare ( $current_db_version , '1.5' , '<' ) ) {
include ( 'updates/woocommerce-update-1.5.php' );
update_option ( 'woocommerce_db_version' , '1.5' );
}
if ( version_compare ( $current_db_version , '2.0' , '<' ) ) {
include ( 'updates/woocommerce-update-2.0.php' );
update_option ( 'woocommerce_db_version' , '2.0' );
}
if ( version_compare ( $current_db_version , '2.0.9' , '<' ) ) {
include ( 'updates/woocommerce-update-2.0.9.php' );
update_option ( 'woocommerce_db_version' , '2.0.9' );
}
2013-08-01 14:43:00 +00:00
if ( version_compare ( $current_db_version , '2.0.14' , '<' ) ) {
2014-01-12 00:05:14 +00:00
if ( 'HU' == get_option ( 'woocommerce_default_country' ) ) {
2013-08-01 14:43:00 +00:00
update_option ( 'woocommerce_default_country' , 'HU:BU' );
2014-01-12 00:05:14 +00:00
}
2013-08-01 14:43:00 +00:00
update_option ( 'woocommerce_db_version' , '2.0.14' );
}
2013-10-24 18:36:22 +00:00
if ( version_compare ( $current_db_version , '2.1.0' , '<' ) || WC_VERSION == '2.1-bleeding' ) {
2013-07-25 15:29:25 +00:00
include ( 'updates/woocommerce-update-2.1.php' );
update_option ( 'woocommerce_db_version' , '2.1.0' );
}
2014-05-30 17:27:41 +00:00
if ( version_compare ( $current_db_version , '2.2.0' , '<' ) || WC_VERSION == '2.2-bleeding' ) {
include ( 'updates/woocommerce-update-2.2.php' );
update_option ( 'woocommerce_db_version' , '2.2.0' );
}
2013-07-25 15:29:25 +00:00
update_option ( 'woocommerce_db_version' , WC () -> version );
}
/**
* Create cron jobs ( clear them first )
*/
private function create_cron_jobs () {
// Cron jobs
wp_clear_scheduled_hook ( 'woocommerce_scheduled_sales' );
wp_clear_scheduled_hook ( 'woocommerce_cancel_unpaid_orders' );
wp_clear_scheduled_hook ( 'woocommerce_cleanup_sessions' );
2014-01-12 00:05:14 +00:00
$ve = get_option ( 'gmt_offset' ) > 0 ? '+' : '-' ;
2013-07-25 15:29:25 +00:00
2014-01-12 00:05:14 +00:00
wp_schedule_event ( strtotime ( '00:00 tomorrow ' . $ve . get_option ( 'gmt_offset' ) . ' HOURS' ), 'daily' , 'woocommerce_scheduled_sales' );
2013-07-25 15:29:25 +00:00
$held_duration = get_option ( 'woocommerce_hold_stock_minutes' , null );
2014-01-12 00:05:14 +00:00
if ( is_null ( $held_duration ) ) {
2013-07-25 15:29:25 +00:00
$held_duration = '60' ;
2014-01-12 00:05:14 +00:00
}
2013-07-25 15:29:25 +00:00
2014-01-12 00:05:14 +00:00
if ( $held_duration != '' ) {
2013-07-25 15:29:25 +00:00
wp_schedule_single_event ( time () + ( absint ( $held_duration ) * 60 ), 'woocommerce_cancel_unpaid_orders' );
2014-01-12 00:05:14 +00:00
}
2013-07-25 15:29:25 +00:00
wp_schedule_event ( time (), 'twicedaily' , 'woocommerce_cleanup_sessions' );
}
/**
* Create pages that the plugin relies on , storing page id ' s in variables .
*
* @ access public
* @ return void
*/
2013-11-18 15:56:04 +00:00
public static function create_pages () {
2013-07-25 15:29:25 +00:00
$pages = apply_filters ( 'woocommerce_create_pages' , array (
'shop' => array (
2014-03-03 14:47:19 +00:00
'name' => _x ( 'shop' , 'Page slug' , 'woocommerce' ),
'title' => _x ( 'Shop' , 'Page title' , 'woocommerce' ),
2013-07-25 15:29:25 +00:00
'content' => ''
),
'cart' => array (
2014-03-03 14:47:19 +00:00
'name' => _x ( 'cart' , 'Page slug' , 'woocommerce' ),
'title' => _x ( 'Cart' , 'Page title' , 'woocommerce' ),
2013-10-23 13:55:18 +00:00
'content' => '[' . apply_filters ( 'woocommerce_cart_shortcode_tag' , 'woocommerce_cart' ) . ']'
2013-07-25 15:29:25 +00:00
),
'checkout' => array (
2014-05-30 14:13:26 +00:00
'name' => _x ( 'checkout' , 'Page slug' , 'woocommerce' ),
2014-03-03 14:47:19 +00:00
'title' => _x ( 'Checkout' , 'Page title' , 'woocommerce' ),
2013-10-23 13:55:18 +00:00
'content' => '[' . apply_filters ( 'woocommerce_checkout_shortcode_tag' , 'woocommerce_checkout' ) . ']'
2013-07-25 15:29:25 +00:00
),
'myaccount' => array (
2014-03-03 14:47:19 +00:00
'name' => _x ( 'my-account' , 'Page slug' , 'woocommerce' ),
'title' => _x ( 'My Account' , 'Page title' , 'woocommerce' ),
2013-10-23 13:55:18 +00:00
'content' => '[' . apply_filters ( 'woocommerce_my_account_shortcode_tag' , 'woocommerce_my_account' ) . ']'
2013-07-25 15:29:25 +00:00
)
) );
2014-01-12 00:05:14 +00:00
foreach ( $pages as $key => $page ) {
2013-11-25 14:07:22 +00:00
wc_create_page ( esc_sql ( $page [ 'name' ] ), 'woocommerce_' . $key . '_page_id' , $page [ 'title' ], $page [ 'content' ], ! empty ( $page [ 'parent' ] ) ? wc_get_page_id ( $page [ 'parent' ] ) : '' );
2014-01-12 00:05:14 +00:00
}
2013-07-25 15:29:25 +00:00
}
/**
* Add the default terms for WC taxonomies - product types and order statuses . Modify this at your own risk .
*
* @ access public
* @ return void
*/
private function create_terms () {
$taxonomies = array (
'product_type' => array (
'simple' ,
'grouped' ,
'variable' ,
'external'
)
);
foreach ( $taxonomies as $taxonomy => $terms ) {
foreach ( $terms as $term ) {
if ( ! get_term_by ( 'slug' , sanitize_title ( $term ), $taxonomy ) ) {
wp_insert_term ( $term , $taxonomy );
}
}
}
}
/**
* Default options
*
* Sets up the default options used on the settings page
*
* @ access public
*/
function create_options () {
// Include settings so that we can run through defaults
2013-07-26 14:36:28 +00:00
include_once ( 'admin/class-wc-admin-settings.php' );
$settings = WC_Admin_Settings :: get_settings_pages ();
2013-07-25 15:29:25 +00:00
2013-07-26 14:36:28 +00:00
foreach ( $settings as $section ) {
2014-01-11 23:56:29 +00:00
foreach ( $section -> get_settings () as $value ) {
2014-01-11 23:56:50 +00:00
if ( isset ( $value [ 'default' ] ) && isset ( $value [ 'id' ] ) ) {
$autoload = isset ( $value [ 'autoload' ] ) ? ( bool ) $value [ 'autoload' ] : true ;
add_option ( $value [ 'id' ], $value [ 'default' ], '' , ( $autoload ? 'yes' : 'no' ) );
}
}
2014-01-11 23:56:29 +00:00
2014-01-12 00:13:26 +00:00
// Special case to install the inventory settings.
2014-01-11 23:56:29 +00:00
if ( $section instanceof WC_Settings_Products ) {
foreach ( $section -> get_settings ( 'inventory' ) as $value ) {
if ( isset ( $value [ 'default' ] ) && isset ( $value [ 'id' ] ) ) {
$autoload = isset ( $value [ 'autoload' ] ) ? ( bool ) $value [ 'autoload' ] : true ;
add_option ( $value [ 'id' ], $value [ 'default' ], '' , ( $autoload ? 'yes' : 'no' ) );
}
}
}
}
2013-07-25 15:29:25 +00:00
}
/**
* Set up the database tables which the plugin needs to function .
*
* Tables :
* woocommerce_attribute_taxonomies - Table for storing attribute taxonomies - these are user defined
* woocommerce_termmeta - Term meta table - sadly WordPress does not have termmeta so we need our own
* woocommerce_downloadable_product_permissions - Table for storing user and guest download permissions .
* KEY ( order_id , product_id , download_id ) used for organizing downloads on the My Account page
* woocommerce_order_items - Order line items are stored in a table to make them easily queryable for reports
* woocommerce_order_itemmeta - Order line item meta is stored in a table for storing extra data .
* woocommerce_tax_rates - Tax Rates are stored inside 2 tables making tax queries simple and efficient .
* woocommerce_tax_rate_locations - Each rate can be applied to more than one postcode / city hence the second table .
*
* @ access public
* @ return void
*/
private function create_tables () {
2014-06-08 20:33:11 +00:00
global $wpdb ;
2013-07-25 15:29:25 +00:00
$wpdb -> hide_errors ();
$collate = '' ;
2014-01-11 23:56:50 +00:00
if ( $wpdb -> has_cap ( 'collation' ) ) {
2014-01-12 00:05:14 +00:00
if ( ! empty ( $wpdb -> charset ) ) {
2013-07-25 15:29:25 +00:00
$collate .= " DEFAULT CHARACTER SET $wpdb->charset " ;
2014-01-12 00:05:14 +00:00
}
if ( ! empty ( $wpdb -> collate ) ) {
2013-07-25 15:29:25 +00:00
$collate .= " COLLATE $wpdb->collate " ;
2014-01-12 00:05:14 +00:00
}
2014-01-11 23:56:50 +00:00
}
2013-07-25 15:29:25 +00:00
2014-01-11 23:56:50 +00:00
require_once ( ABSPATH . 'wp-admin/includes/upgrade.php' );
2013-07-25 15:29:25 +00:00
2014-02-13 13:29:55 +00:00
/**
* Update schemas before DBDELTA
*
* Before updating , remove any primary keys which could be modified due to schema updates
*/
if ( $wpdb -> get_var ( " SHOW TABLES LIKE ' { $wpdb -> prefix } woocommerce_downloadable_product_permissions'; " ) ) {
if ( ! $wpdb -> get_var ( " SHOW COLUMNS FROM ` { $wpdb -> prefix } woocommerce_downloadable_product_permissions` LIKE 'permission_id'; " ) ) {
$wpdb -> query ( " ALTER TABLE { $wpdb -> prefix } woocommerce_downloadable_product_permissions DROP PRIMARY KEY, ADD `permission_id` bigint(20) NOT NULL PRIMARY KEY AUTO_INCREMENT; " );
}
}
2014-01-11 23:56:50 +00:00
// WooCommerce Tables
$woocommerce_tables = "
2013-07-25 15:29:25 +00:00
CREATE TABLE { $wpdb -> prefix } woocommerce_attribute_taxonomies (
attribute_id bigint ( 20 ) NOT NULL auto_increment ,
attribute_name varchar ( 200 ) NOT NULL ,
attribute_label longtext NULL ,
attribute_type varchar ( 200 ) NOT NULL ,
attribute_orderby varchar ( 200 ) NOT NULL ,
PRIMARY KEY ( attribute_id ),
KEY attribute_name ( attribute_name )
) $collate ;
CREATE TABLE { $wpdb -> prefix } woocommerce_termmeta (
meta_id bigint ( 20 ) NOT NULL auto_increment ,
woocommerce_term_id bigint ( 20 ) NOT NULL ,
meta_key varchar ( 255 ) NULL ,
meta_value longtext NULL ,
PRIMARY KEY ( meta_id ),
KEY woocommerce_term_id ( woocommerce_term_id ),
KEY meta_key ( meta_key )
) $collate ;
CREATE TABLE { $wpdb -> prefix } woocommerce_downloadable_product_permissions (
permission_id bigint ( 20 ) NOT NULL auto_increment ,
download_id varchar ( 32 ) NOT NULL ,
product_id bigint ( 20 ) NOT NULL ,
order_id bigint ( 20 ) NOT NULL DEFAULT 0 ,
order_key varchar ( 200 ) NOT NULL ,
user_email varchar ( 200 ) NOT NULL ,
user_id bigint ( 20 ) NULL ,
downloads_remaining varchar ( 9 ) NULL ,
access_granted datetime NOT NULL default '0000-00-00 00:00:00' ,
access_expires datetime NULL default null ,
download_count bigint ( 20 ) NOT NULL DEFAULT 0 ,
PRIMARY KEY ( permission_id ),
KEY download_order_key_product ( product_id , order_id , order_key , download_id ),
KEY download_order_product ( download_id , order_id , product_id )
) $collate ;
CREATE TABLE { $wpdb -> prefix } woocommerce_order_items (
order_item_id bigint ( 20 ) NOT NULL auto_increment ,
order_item_name longtext NOT NULL ,
order_item_type varchar ( 200 ) NOT NULL DEFAULT '' ,
order_id bigint ( 20 ) NOT NULL ,
PRIMARY KEY ( order_item_id ),
KEY order_id ( order_id )
) $collate ;
CREATE TABLE { $wpdb -> prefix } woocommerce_order_itemmeta (
meta_id bigint ( 20 ) NOT NULL auto_increment ,
order_item_id bigint ( 20 ) NOT NULL ,
meta_key varchar ( 255 ) NULL ,
meta_value longtext NULL ,
PRIMARY KEY ( meta_id ),
KEY order_item_id ( order_item_id ),
KEY meta_key ( meta_key )
) $collate ;
CREATE TABLE { $wpdb -> prefix } woocommerce_tax_rates (
tax_rate_id bigint ( 20 ) NOT NULL auto_increment ,
tax_rate_country varchar ( 200 ) NOT NULL DEFAULT '' ,
tax_rate_state varchar ( 200 ) NOT NULL DEFAULT '' ,
tax_rate varchar ( 200 ) NOT NULL DEFAULT '' ,
tax_rate_name varchar ( 200 ) NOT NULL DEFAULT '' ,
tax_rate_priority bigint ( 20 ) NOT NULL ,
tax_rate_compound int ( 1 ) NOT NULL DEFAULT 0 ,
tax_rate_shipping int ( 1 ) NOT NULL DEFAULT 1 ,
tax_rate_order bigint ( 20 ) NOT NULL ,
tax_rate_class varchar ( 200 ) NOT NULL DEFAULT '' ,
PRIMARY KEY ( tax_rate_id ),
KEY tax_rate_country ( tax_rate_country ),
KEY tax_rate_state ( tax_rate_state ),
KEY tax_rate_class ( tax_rate_class ),
KEY tax_rate_priority ( tax_rate_priority )
) $collate ;
CREATE TABLE { $wpdb -> prefix } woocommerce_tax_rate_locations (
location_id bigint ( 20 ) NOT NULL auto_increment ,
location_code varchar ( 255 ) NOT NULL ,
tax_rate_id bigint ( 20 ) NOT NULL ,
location_type varchar ( 40 ) NOT NULL ,
PRIMARY KEY ( location_id ),
2014-01-11 23:56:50 +00:00
KEY tax_rate_id ( tax_rate_id ),
2013-07-25 15:29:25 +00:00
KEY location_type ( location_type ),
KEY location_type_code ( location_type , location_code )
) $collate ;
" ;
2014-01-11 23:56:50 +00:00
dbDelta ( $woocommerce_tables );
2013-07-25 15:29:25 +00:00
}
/**
* Create roles and capabilities
*/
public function create_roles () {
global $wp_roles ;
2014-01-12 00:05:14 +00:00
if ( class_exists ( 'WP_Roles' ) ) {
if ( ! isset ( $wp_roles ) ) {
2013-07-25 15:29:25 +00:00
$wp_roles = new WP_Roles ();
2014-01-12 00:05:14 +00:00
}
}
2013-07-25 15:29:25 +00:00
if ( is_object ( $wp_roles ) ) {
// Customer role
add_role ( 'customer' , __ ( 'Customer' , 'woocommerce' ), array (
2014-01-11 23:56:50 +00:00
'read' => true ,
'edit_posts' => false ,
'delete_posts' => false
2013-07-25 15:29:25 +00:00
) );
// Shop manager role
add_role ( 'shop_manager' , __ ( 'Shop Manager' , 'woocommerce' ), array (
'level_9' => true ,
'level_8' => true ,
'level_7' => true ,
'level_6' => true ,
'level_5' => true ,
'level_4' => true ,
'level_3' => true ,
'level_2' => true ,
'level_1' => true ,
'level_0' => true ,
2014-01-11 23:56:50 +00:00
'read' => true ,
'read_private_pages' => true ,
'read_private_posts' => true ,
'edit_users' => true ,
'edit_posts' => true ,
'edit_pages' => true ,
'edit_published_posts' => true ,
'edit_published_pages' => true ,
'edit_private_pages' => true ,
'edit_private_posts' => true ,
'edit_others_posts' => true ,
'edit_others_pages' => true ,
'publish_posts' => true ,
'publish_pages' => true ,
'delete_posts' => true ,
'delete_pages' => true ,
'delete_private_pages' => true ,
'delete_private_posts' => true ,
'delete_published_pages' => true ,
'delete_published_posts' => true ,
'delete_others_posts' => true ,
'delete_others_pages' => true ,
'manage_categories' => true ,
'manage_links' => true ,
'moderate_comments' => true ,
'unfiltered_html' => true ,
'upload_files' => true ,
'export' => true ,
2014-01-08 15:18:19 +00:00
'import' => true ,
'list_users' => true
2013-07-25 15:29:25 +00:00
) );
2013-08-09 16:11:15 +00:00
$capabilities = $this -> get_core_capabilities ();
2013-07-25 15:29:25 +00:00
2014-01-12 00:05:14 +00:00
foreach ( $capabilities as $cap_group ) {
foreach ( $cap_group as $cap ) {
2013-07-25 15:29:25 +00:00
$wp_roles -> add_cap ( 'shop_manager' , $cap );
$wp_roles -> add_cap ( 'administrator' , $cap );
}
}
}
}
2013-08-09 16:11:15 +00:00
/**
* Get capabilities for WooCommerce - these are assigned to admin / shop manager during installation or reset
*
* @ access public
2013-11-27 09:03:47 +00:00
* @ return array
2013-08-09 16:11:15 +00:00
*/
public function get_core_capabilities () {
$capabilities = array ();
$capabilities [ 'core' ] = array (
2014-01-12 00:05:14 +00:00
'manage_woocommerce' ,
'view_woocommerce_reports'
2013-08-09 16:11:15 +00:00
);
2014-07-30 20:24:14 +00:00
$capability_types = array ( 'product' , 'shop_order' , 'shop_coupon' , 'shop_webhook' );
2013-08-09 16:11:15 +00:00
2014-01-12 00:05:14 +00:00
foreach ( $capability_types as $capability_type ) {
2013-08-09 16:11:15 +00:00
$capabilities [ $capability_type ] = array (
// Post type
" edit_ { $capability_type } " ,
" read_ { $capability_type } " ,
" delete_ { $capability_type } " ,
" edit_ { $capability_type } s " ,
" edit_others_ { $capability_type } s " ,
" publish_ { $capability_type } s " ,
" read_private_ { $capability_type } s " ,
" delete_ { $capability_type } s " ,
" delete_private_ { $capability_type } s " ,
" delete_published_ { $capability_type } s " ,
" delete_others_ { $capability_type } s " ,
" edit_private_ { $capability_type } s " ,
" edit_published_ { $capability_type } s " ,
// Terms
" manage_ { $capability_type } _terms " ,
" edit_ { $capability_type } _terms " ,
" delete_ { $capability_type } _terms " ,
" assign_ { $capability_type } _terms "
);
}
return $capabilities ;
}
/**
* woocommerce_remove_roles function .
*
* @ access public
* @ return void
*/
public function remove_roles () {
global $wp_roles ;
2014-01-12 00:05:14 +00:00
if ( class_exists ( 'WP_Roles' ) ) {
if ( ! isset ( $wp_roles ) ) {
2013-08-09 16:11:15 +00:00
$wp_roles = new WP_Roles ();
2014-01-12 00:05:14 +00:00
}
}
2013-08-09 16:11:15 +00:00
if ( is_object ( $wp_roles ) ) {
$capabilities = $this -> get_core_capabilities ();
2014-01-12 00:05:14 +00:00
foreach ( $capabilities as $cap_group ) {
foreach ( $cap_group as $cap ) {
2013-08-09 16:11:15 +00:00
$wp_roles -> remove_cap ( 'shop_manager' , $cap );
$wp_roles -> remove_cap ( 'administrator' , $cap );
}
}
remove_role ( 'customer' );
remove_role ( 'shop_manager' );
}
}
2013-07-25 15:29:25 +00:00
/**
* Create files / directories
*/
private function create_files () {
// Install files and folders for uploading files and prevent hotlinking
$upload_dir = wp_upload_dir ();
$files = array (
array (
'base' => $upload_dir [ 'basedir' ] . '/woocommerce_uploads' ,
'file' => '.htaccess' ,
'content' => 'deny from all'
),
array (
'base' => $upload_dir [ 'basedir' ] . '/woocommerce_uploads' ,
'file' => 'index.html' ,
'content' => ''
),
array (
2014-05-28 10:12:35 +00:00
'base' => WC_LOG_DIR ,
2013-07-25 15:29:25 +00:00
'file' => '.htaccess' ,
'content' => 'deny from all'
),
array (
2014-05-28 10:12:35 +00:00
'base' => WC_LOG_DIR ,
2013-07-25 15:29:25 +00:00
'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 );
}
}
}
}
/**
* Create CSS from LESS file
*/
private function create_css_from_less () {
// Recompile LESS styles if they are custom
2014-03-03 12:19:29 +00:00
$colors = get_option ( 'woocommerce_frontend_css_colors' );
2013-07-25 15:29:25 +00:00
2014-03-03 12:19:29 +00:00
if ( ( ! empty ( $colors [ 'primary' ] ) && ! empty ( $colors [ 'secondary' ] ) && ! empty ( $colors [ 'highlight' ] ) && ! empty ( $colors [ 'content_bg' ] ) && ! empty ( $colors [ 'subtext' ] ) ) && ( $colors [ 'primary' ] != '#ad74a2' || $colors [ 'secondary' ] != '#f7f6f7' || $colors [ 'highlight' ] != '#85ad74' || $colors [ 'content_bg' ] != '#ffffff' || $colors [ 'subtext' ] != '#777777' ) ) {
if ( ! function_exists ( 'woocommerce_compile_less_styles' ) ) {
include_once ( 'admin/wc-admin-functions.php' );
2014-01-12 00:05:14 +00:00
}
2014-03-03 12:19:29 +00:00
woocommerce_compile_less_styles ();
2013-07-25 15:29:25 +00:00
}
}
2014-01-11 23:56:50 +00:00
/**
* Show plugin changes . Code adapted from W3 Total Cache .
*
* @ return void
*/
2014-04-07 15:39:19 +00:00
function in_plugin_update_message ( $args ) {
$transient_name = 'wc_upgrade_notice_' . $args [ 'Version' ];
2014-01-11 23:56:50 +00:00
2014-04-07 15:39:19 +00:00
if ( false === ( $upgrade_notice = get_transient ( $transient_name ) ) ) {
2014-01-11 23:56:50 +00:00
2014-04-07 15:39:19 +00:00
$response = wp_remote_get ( 'https://plugins.svn.wordpress.org/woocommerce/trunk/readme.txt' );
2014-01-11 23:56:50 +00:00
2014-04-07 15:39:19 +00:00
if ( ! is_wp_error ( $response ) && ! empty ( $response [ 'body' ] ) ) {
2014-01-11 23:56:50 +00:00
2014-04-07 15:39:19 +00:00
// Output Upgrade Notice
$matches = null ;
$regexp = '~==\s*Upgrade Notice\s*==\s*=\s*(.*)\s*=(.*)(=\s*' . preg_quote ( WC_VERSION ) . '\s*=|$)~Uis' ;
$upgrade_notice = '' ;
2014-01-11 23:56:50 +00:00
2014-04-07 15:39:19 +00:00
if ( preg_match ( $regexp , $response [ 'body' ], $matches ) ) {
$version = trim ( $matches [ 1 ] );
$notices = ( array ) preg_split ( '~[\r\n]+~' , trim ( $matches [ 2 ] ) );
2014-05-30 14:13:26 +00:00
2014-04-07 15:39:19 +00:00
if ( version_compare ( WC_VERSION , $version , '<' ) ) {
2014-01-11 23:56:50 +00:00
2014-04-07 15:39:19 +00:00
$upgrade_notice .= '<div class="wc_plugin_upgrade_notice">' ;
2014-01-11 23:56:50 +00:00
2014-04-07 15:39:19 +00:00
foreach ( $notices as $index => $line ) {
$upgrade_notice .= wp_kses_post ( preg_replace ( '~\[([^\]]*)\]\(([^\)]*)\)~' , '<a href="${2}">${1}</a>' , $line ) );
2014-01-11 23:56:50 +00:00
}
2014-02-28 13:42:48 +00:00
2014-04-07 15:39:19 +00:00
$upgrade_notice .= '</div> ' ;
2014-01-11 23:56:50 +00:00
}
}
2014-04-07 15:39:19 +00:00
set_transient ( $transient_name , $upgrade_notice , DAY_IN_SECONDS );
2014-01-11 23:56:50 +00:00
}
}
2014-04-07 15:39:19 +00:00
echo wp_kses_post ( $upgrade_notice );
2014-01-11 23:56:50 +00:00
}
2014-08-29 17:34:01 +00:00
/**
2014-08-29 17:43:06 +00:00
* Show action links on the plugin screen .
2014-08-29 17:34:01 +00:00
*
2014-08-29 17:43:06 +00:00
* @ access public
* @ param mixed $links Plugin Action links
* @ return array
2014-08-29 17:34:01 +00:00
*/
2014-08-29 17:43:06 +00:00
public function plugin_action_links ( $links ) {
2014-08-29 18:01:31 +00:00
$action_links = apply_filters ( 'woocommerce_plugin_action_links' , array (
2014-08-29 17:43:06 +00:00
'settings' => '<a href="' . admin_url ( 'admin.php?page=wc-settings' ) . '" title="' . esc_attr ( __ ( 'View this Plugin Settings' , 'woocommerce' ) ) . '">' . __ ( 'Settings' , 'woocommerce' ) . '</a>' ,
) );
return array_merge ( $action_links , $links );
2014-08-29 17:34:01 +00:00
}
2014-08-29 17:54:17 +00:00
/**
* Show row meta on the plugin screen .
*
* @ access public
* @ param mixed $links Plugin Row Meta
* @ param mixed $file Plugin Base file
* @ return array
*/
public function plugin_row_meta ( $links , $file ) {
if ( $file == WC_PLUGIN_BASENAME ) {
2014-08-29 19:04:25 +00:00
$row_meta = array (
2014-08-29 19:02:00 +00:00
'docs' => '<a href="' . esc_url ( apply_filters ( 'woocommerce_docs_url' , 'http://docs.woothemes.com/documentation/plugins/woocommerce/' ) ) . '" title="' . esc_attr ( __ ( 'View this Plugin Documentation' , 'woocommerce' ) ) . '">' . __ ( 'Docs' , 'woocommerce' ) . '</a>' ,
'apidocs' => '<a href="' . esc_url ( apply_filters ( 'woocommerce_apidocs_url' , 'http://docs.woothemes.com/wc-apidocs/' ) ) . '" title="' . esc_attr ( __ ( 'View this Plugin API Docs' , 'woocommerce' ) ) . '">' . __ ( 'API Docs' , 'woocommerce' ) . '</a>' ,
'support' => '<a href="' . esc_url ( apply_filters ( 'woocommerce_support_url' , 'http://support.woothemes.com/' ) ) . '" title="' . esc_attr ( __ ( 'Visit Premium Customer Support Forum' , 'woocommerce' ) ) . '">' . __ ( 'Premium Support' , 'woocommerce' ) . '</a>' ,
2014-08-29 19:04:25 +00:00
);
2014-08-29 17:54:17 +00:00
return array_merge ( $links , $row_meta );
}
return ( array ) $links ;
}
2013-07-25 15:29:25 +00:00
}
endif ;
2013-08-06 04:18:41 +00:00
return new WC_Install ();