oont-contents/plugins/woocommerce-pdf-ips-templates/woocommerce-pdf-ips-templates.php
2025-02-08 15:10:23 +01:00

403 lines
13 KiB
PHP

<?php
/**
* Plugin Name: PDF Invoices & Packing Slips for WooCommerce - Premium Templates
* Plugin URI: https://wpovernight.com/downloads/woocommerce-pdf-invoices-packing-slips-premium-templates/
* Description: Premium templates for the PDF Invoices & Packing Slips for WooCommerce extension
* Version: 2.20.3
* Author: WP Overnight
* Author URI: https://wpovernight.com/
* License: GPLv2 or later
* License URI: https://opensource.org/licenses/gpl-license.php
* Text Domain: wpo_wcpdf_templates
* WC requires at least: 3.0
* WC tested up to: 8.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
if ( ! class_exists( 'WPO_WCPDF_Templates' ) ) :
class WPO_WCPDF_Templates {
public $version = '2.20.3';
public $plugin_basename;
public $settings;
public $main;
public $dependencies;
public $updater;
protected static $_instance = null;
/**
* Main Plugin Instance
*
* Ensures only one instance of plugin is loaded or can be loaded.
*/
public static function instance() {
if ( is_null( self::$_instance ) ) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* Constructor
*/
public function __construct() {
$this->plugin_basename = plugin_basename(__FILE__);
$this->define( 'WPO_WCPDF_TEMPLATES_VERSION', $this->version );
// load the localisation & classes
add_action( 'plugins_loaded', array( $this, 'translations' ) );
add_action( 'wpo_wcpdf_reload_attachment_translations', array( $this, 'translations' ) );
add_action( 'wpo_wcpdf_reload_text_domains', array( $this, 'translations' ) );
add_action( 'init', array( $this, 'load_classes' ), 9 );
// Load the updater
add_action( 'init', array( $this, 'load_updater' ), 0 );
// run lifecycle methods
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
add_action( 'wp_loaded', array( $this, 'do_install' ) );
}
// Add premium templates to settings page listing
add_filter( 'wpo_wcpdf_template_paths', array( $this, 'register_template_path' ), 1, 1 );
// HPOS compatibility
add_action( 'before_woocommerce_init', array( $this, 'woocommerce_hpos_compatible' ) );
// On activation
register_activation_hook( __FILE__, array( $this, 'activate' ) );
// On deactivation
register_deactivation_hook( __FILE__, array( $this, 'deactivate' ) );
}
/**
* Define constant if not already set
* @param string $name
* @param string|bool $value
*/
private function define( $name, $value ) {
if ( ! defined( $name ) ) {
define( $name, $value );
}
}
/**
* Load the translation / textdomain files
*
* Note: the first-loaded translation file overrides any following ones if the same translation is present
*/
public function translations() {
if ( function_exists( 'determine_locale' ) ) { // WP5.0+
$locale = determine_locale();
} else {
$locale = is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
}
$locale = apply_filters( 'plugin_locale', $locale, 'woocommerce-pdf-invoices-packing-slips' );
$dir = trailingslashit( WP_LANG_DIR );
/**
* Frontend/global Locale. Looks in:
*
* - WP_LANG_DIR/woocommerce-pdf-ips-templates/wpo_wcpdf_templates-LOCALE.mo
* - WP_LANG_DIR/plugins/wpo_wcpdf_templates-LOCALE.mo
* - woocommerce-pdf-ips-templates/languages/wpo_wcpdf_templates-LOCALE.mo (which if not found falls back to:)
* - WP_LANG_DIR/plugins/wpo_wcpdf_templates-LOCALE.mo
*/
if ( in_array( current_filter(), array( 'wpo_wcpdf_reload_attachment_translations', 'wpo_wcpdf_reload_text_domains' ) ) ) {
unload_textdomain( 'wpo_wcpdf_templates' );
}
load_textdomain( 'wpo_wcpdf_templates', $dir . 'woocommerce-pdf-ips-templates/wpo_wcpdf_templates-' . $locale . '.mo' );
load_textdomain( 'wpo_wcpdf_templates', $dir . 'plugins/wpo_wcpdf_templates-' . $locale . '.mo' );
load_plugin_textdomain( 'wpo_wcpdf_templates', false, dirname( plugin_basename(__FILE__) ) . '/languages' );
}
/**
* Load the main plugin classes and functions
*/
public function includes() {
include_once( 'includes/compatibility/class-third-party-compatibility.php' );
$this->settings = include_once( 'includes/class-wcpdf-templates-settings.php' );
$this->main = include_once( 'includes/class-wcpdf-templates-main.php' );
include_once( 'includes/wcpdf-templates-functions.php' );
// Backwards compatibility with self
include_once( 'includes/legacy/class-wcpdf-templates-legacy.php' );
}
/**
* Instantiate classes when woocommerce is activated
*/
public function load_classes() {
$this->dependencies = include_once( 'includes/class-wcpdf-templates-dependencies.php' );
if ( $this->dependencies->ready() === false ) {
return;
}
// all systems ready - GO!
$this->includes();
}
/**
* Add premium templates to settings page listing
*/
public function register_template_path( $template_paths ) {
$template_paths['premium_plugin'] = WPO_WCPDF_Templates()->plugin_path() . '/templates/';
return $template_paths;
}
/** Lifecycle methods *******************************************************
* Because register_activation_hook only runs when the plugin is manually
* activated by the user, we're checking the current version against the
* version stored in the database
****************************************************************************/
/**
* Handles version checking
*/
public function do_install() {
// only install when woocommerce is active
if ( ! $this->dependencies->is_woocommerce_activated() ) {
return;
}
$version_setting = 'wpo_wcpdf_templates_version';
$installed_version = get_option( $version_setting );
// installed version lower than plugin version?
if ( version_compare( $installed_version, WPO_WCPDF_TEMPLATES_VERSION, '<' ) ) {
if ( ! $installed_version ) {
$this->install();
} else {
$this->upgrade( $installed_version );
}
// new version number
update_option( $version_setting, WPO_WCPDF_TEMPLATES_VERSION );
}
}
/**
* Plugin install method. Perform any installation tasks here
*/
protected function install() {
$option = 'wpo_wcpdf_settings_general';
// switch to Simple Premium when installing for the first time
if ( $settings = get_option( $option, array() ) ) {
$settings['template_path'] = 'premium_plugin/Simple Premium';
update_option( $option, $settings );
}
}
/**
* Plugin upgrade method. Perform any required upgrades here
*
* @param string $installed_version the currently installed ('old') version
*/
protected function upgrade( $installed_version ) {
// 2.1.5 Upgrade: set default footer height for Simple Premium (2cm)
if ( version_compare( $installed_version, '2.1.5', '<' ) ) {
$template_settings = get_option('wpo_wcpdf_template_settings');
if (isset($template_settings['template_path']) && strpos($template_settings['template_path'],'Simple Premium') !== false ) {
$template_settings['footer_height'] = '2cm';
update_option( 'wpo_wcpdf_template_settings', $template_settings );
}
}
// 2.1.7 Upgrade: set show meta as default in product block
if ( version_compare( $installed_version, '2.1.7', '<' ) ) {
$editor_settings = get_option('wpo_wcpdf_editor_settings');
$documents = array('invoice','packing-slip','proforma','credit-note');
foreach ($documents as $document) {
if (isset($editor_settings['fields_'.$document.'_columns'])) {
foreach ($editor_settings['fields_'.$document.'_columns'] as $key => $column) {
if (isset($column['type']) && $column['type'] == 'description') {
$column['show_meta'] = 1;
}
$editor_settings['fields_'.$document.'_columns'][$key] = $column;
}
}
}
update_option('wpo_wcpdf_editor_settings', $editor_settings);
}
// 2.4.0 Upgrade: footer height moved to General settings
if ( version_compare( $installed_version, '2.4.0', '<' ) ) {
// load legacy settings
$template_settings = get_option('wpo_wcpdf_template_settings');
if (!empty($template_settings['footer_height'])) {
// copy footer height to new general settings option
$general_settings = get_option('wpo_wcpdf_settings_general');
$general_settings['footer_height'] = $template_settings['footer_height'];
update_option( 'wpo_wcpdf_settings_general', $general_settings );
}
}
// 2.20.3 Upgrade: reassign editor columns/totals keys
if ( version_compare( $installed_version, '2.20.3-dev-1', '<' ) ) {
$option = 'wpo_wcpdf_editor_settings';
$editor_settings = get_option( $option, [] ); // get latest settings
$documents = WPO_WCPDF()->documents->get_documents();
$update = false;
foreach ( $documents as $document ) {
$keys = [
"fields_{$document->get_type()}_columns",
"fields_{$document->get_type()}_totals",
];
foreach ( $keys as $key ) {
if ( isset( $editor_settings[$key] ) ) {
$editor_settings[$key] = array_combine( range( 1, count( $editor_settings[$key] ) ), array_values( $editor_settings[$key] ) );
$update = true;
}
}
}
if ( $update ) {
update_option( $option, $editor_settings );
}
}
}
/**
* Activation hook
*
* Get transient for template when activating the plugin
*/
public function activate() {
if( $template_path = get_transient( 'wpo_wcpdf_premium_template_selected' ) ) {
$general_settings = get_option( 'wpo_wcpdf_settings_general' );
$general_settings['template_path'] = $template_path;
update_option( 'wpo_wcpdf_settings_general', $general_settings );
}
}
/**
* Deactivation hook
*
* Set transient for template when deactivating the plugin
*/
public function deactivate() {
$general_settings = get_option( 'wpo_wcpdf_settings_general' );
if( ! empty( $general_settings['template_path'] ) ) {
set_transient( 'wpo_wcpdf_premium_template_selected', $general_settings['template_path'], MONTH_IN_SECONDS );
// set template option to empty to use Simple
$general_settings['template_path'] = '';
update_option( 'wpo_wcpdf_settings_general', $general_settings );
}
}
/**
* Run the updater scripts from the WPO Sidekick
* @return void
*/
public function load_updater() {
// Init updater data
$item_name = 'PDF Invoices & Packing Slips for WooCommerce - Premium Templates';
$file = __FILE__;
$license_slug = 'wpo_wcpdf_templates_license';
$version = $this->version;
$author = 'Ewout Fernhout';
// load updater
if ( class_exists( 'WPO_Updater' ) ) { // WP Overnight Sidekick plugin
$this->updater = new WPO_Updater( $item_name, $file, $license_slug, $version, $author );
} else { // bundled updater
if ( !class_exists( 'WPO_Update_Helper' ) ) {
include_once( $this->plugin_path() . '/updater/update-helper.php' );
}
$this->updater = new WPO_Update_Helper( $item_name, $file, $license_slug, $version, $author );
}
// if license not activated, show notice in plugin settings page
if( is_callable( array( $this->updater, 'license_is_active' ) ) && ! $this->updater->license_is_active() ) {
add_action( 'wpo_wcpdf_before_settings_page', array( $this, 'no_active_license_message' ), 1 );
}
}
/**
* Displays message if the license is not activated
*
* @return void
*/
public function no_active_license_message( $active_tab )
{
if( class_exists( 'WPO_Updater' ) ) {
$activation_url = esc_url_raw( network_admin_url( 'admin.php?page=wpo-license-page' ) );
} else {
$activation_url = esc_url_raw( network_admin_url( 'plugins.php?s=Premium+Templates#woocommerce-pdf-ips-templates-manage-license' ) );
}
?>
<div class="notice notice-warning inline">
<p>
<?php
printf(
/* translators: 1. plugin name, 2. click here */
__( 'Your license of %1$s has not been activated on this site, %2$s to enter your license key.', 'wpo_wcpdf_templates' ),
'<strong>'.__( 'PDF Invoices & Packing Slips for WooCommerce - Premium Templates', 'wpo_wcpdf_templates' ).'</strong>',
'<a href="'.$activation_url.'">'.__( 'click here', 'wpo_wcpdf_templates' ).'</a>'
);
?>
</p>
</div>
<?php
}
/**
* Declares WooCommerce HPOS compatibility.
*
* @return void
*/
public function woocommerce_hpos_compatible() {
if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
}
}
/**
* Get the plugin url.
* @return string
*/
public function plugin_url() {
return untrailingslashit( plugins_url( '/', __FILE__ ) );
}
/**
* Get the plugin path.
* @return string
*/
public function plugin_path() {
return untrailingslashit( plugin_dir_path( __FILE__ ) );
}
} // class WPO_WCPDF_Templates
endif; // class_exists
/**
* Returns the main instance of PDF Invoices & Packing Slips for WooCommerce to prevent the need to use globals.
*
* @since 1.6
* @return WPO_WCPDF_Templates
*/
function WPO_WCPDF_Templates() {
return WPO_WCPDF_Templates::instance();
}
WPO_WCPDF_Templates(); // load plugin