Commit inicial - WordPress Análisis de Precios Unitarios

- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2025-11-03 21:04:30 -06:00
commit a22573bf0b
24068 changed files with 4993111 additions and 0 deletions

View File

@@ -0,0 +1,575 @@
<?php
/**
* Plugin Name: FunnelKit Automations
* Plugin URI: https://funnelkit.com/wordpress-marketing-automation-autonami/
* Description: Recover lost revenue with Abandoned Cart Recovery for WooCommerce. Increase retention with Post Purchase Follow-Up Emails. Send beautiful Newsletters.
* Version: 3.6.4.2
* Author: FunnelKit
* Author URI: https://funnelkit.com
* License: GPLv3 or later
* License URI: http://www.gnu.org/licenses/gpl-3.0.html
* Text Domain: wp-marketing-automations
* Requires at least: 5.0
* Tested up to: 6.8.3
* WooFunnels: true
*
* FunnelKit Automations is free software.
* You can redistribute it and/or modify it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* FunnelKit Automations is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with FunnelKit Automations. If not, see <http://www.gnu.org/licenses/>.
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
#[AllowDynamicProperties]
final class BWFAN_Core {
/**
* @var BWFAN_Core
*/
private static $_instance = null;
private static $_registered_entity = array(
'active' => array(),
'inactive' => array(),
);
/**
* @var BWFAN_Admin
*/
public $admin;
/**
* @var BWFAN_Public
*/
public $public;
/**
* @var BWFAN_Load_Integrations
*/
public $integration;
/**
* @var BWFAN_Load_Sources
*/
public $sources;
/**
* @var BWFAN_Rules_Loader
*/
public $rules;
/**
* @var BWFAN_Shortcodes
*/
public $shortcodes;
/**
* @var BWFAN_Logger
*/
public $logger;
/**
* @var BWFAN_Merge_Tag_Loader
*/
public $merge_tags;
public $native_connectors;
/**
* @var BWFAN_Automations
*/
public $automations;
/**
* @var BWFAN_Automation_V2
*/
public $automations_v2;
/**
* @var BWFAN_Tasks
*/
public $tasks;
/**
* @var BWFAN_Logs
*/
public $logs;
/**
* @var BWFAN_Abandoned_Cart
*/
public $abandoned;
/**
* @var BWFAN_WooFunnels_Support
*/
public $support;
/**
* @var BWFAN_Email_Conversations
*/
public $conversations;
/**
* @var BWFAN_Conversation
*/
public $conversation;
/**
* @var BWFAN_Conversions
*/
public $conversions;
/**
* @var BWFAN_Connectors
*/
public $connectors;
/**
* @var BWFAN_Load_Custom_Search
*/
public $custom_search;
/**
* @var BWFAN_Subscribe_Link_Handler
*/
public $subscribe_link_handler;
public $wfco_admin;
public $db;
public $bwfan_api;
public $bwfan_recipe;
public $automations_v2_contact;
public $exporter;
private function __construct() {
add_filter( 'wfco_include_connector', function () {
return true;
} );
/**
* Load important variables and constants
*/
$this->define_plugin_properties();
/**
* Load dependency classes like bwfan-functions.php
*/
$this->load_dependencies_support();
/**
* Initiates and loads WooFunnels start file
*/
$this->load_woofunnels_core_classes();
/**
* Loads common file
*/
$this->load_commons();
}
/**
* Defining constants
*/
public function define_plugin_properties() {
define( 'BWFAN_VERSION', '3.6.4.2' );
define( 'BWFAN_MIN_PRO_VERSION', '3.6.4' );
define( 'BWFAN_MIN_WC_VERSION', '5.0' );
define( 'BWFAN_SLUG', 'bwfan' );
define( 'BWFAN_FULL_NAME', 'FunnelKit Automations' );
define( 'BWFAN_BWF_VERSION', '1.10.12.71' );
define( 'BWFAN_PLUGIN_FILE', __FILE__ );
define( 'BWFAN_PLUGIN_DIR', __DIR__ );
define( 'BWFAN_TEMPLATE_DIR', plugin_dir_path( BWFAN_PLUGIN_FILE ) . 'templates' );
define( 'BWFAN_SINGLE_EXPORT_DIR', wp_upload_dir()['basedir'] . '/funnelkit/fka-single-export' );
$plugin_url = untrailingslashit( plugin_dir_url( BWFAN_PLUGIN_FILE ) );
if ( is_ssl() ) {
$plugin_url = preg_replace( "/^http:/i", "https:", $plugin_url );
}
define( 'BWFAN_PLUGIN_URL', $plugin_url );
define( 'BWFAN_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
define( 'BWFAN_DB_VERSION', '1.0' );
( ! defined( 'BWFCRM_REACT_ENVIRONMENT' ) ) ? define( 'BWFCRM_REACT_ENVIRONMENT', 1 ) : '';
define( 'BWFAN_REACT_PROD_URL', BWFAN_PLUGIN_URL . '/admin/frontend/dist' );
if ( ! defined( 'BWFAN_IS_DEV' ) ) {
define( 'BWFAN_IS_DEV', false );
}
( defined( 'BWFAN_IS_DEV' ) && true === BWFAN_IS_DEV ) ? define( 'BWFAN_VERSION_DEV', time() ) : define( 'BWFAN_VERSION_DEV', BWFAN_VERSION );
}
/**
* Setting up event Dependency Classes
*/
public function load_dependencies_support() {
require BWFAN_PLUGIN_DIR . '/includes/bwfan-functions.php';
require BWFAN_PLUGIN_DIR . '/includes/bwfan-options.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-plugin-dependency.php';
add_action( 'admin_notices', array( $this, 'maybe_show_old_pro_notice' ), 1 );
}
public function load_woofunnels_core_classes() {
/** Setting Up WooFunnels Core */
require_once( BWFAN_PLUGIN_DIR . '/start.php' );
}
public function load_commons() {
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-phone-number.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-common.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-woofunnel-support.php';
require BWFAN_PLUGIN_DIR . '/libraries/action-scheduler/action-scheduler.php';
BWFAN_Common::init();
/**
* Loads common hooks
*/
$this->load_hooks();
}
public function load_hooks() {
/** Initialize Localization */
add_action( 'init', array( $this, 'localization' ) );
add_action( 'plugins_loaded', array( $this, 'load_classes' ), 1 );
add_action( 'plugins_loaded', array( $this, 'define_api_basename' ) );
/** Redirecting Plugin to the settings page after activation */
add_action( 'activated_plugin', array( $this, 'redirect_on_activation' ) );
/** Initializing Action Schedule WooFunnels Custom Table */
add_action( 'action_scheduler_pre_init', array( $this, 'initiate_as_ct' ), 1 );
/** Loading API's */
add_action( 'rest_api_init', array( $this, 'bwfan_load_apis' ) );
/** Loading CLI */
if ( version_compare( PHP_VERSION, '5.3', '>' ) ) {
add_action( 'plugins_loaded', array( $this, 'load_cli' ), 20 );
}
}
public static function get_instance() {
if ( null === self::$_instance ) {
self::$_instance = new self;
}
return self::$_instance;
}
public static function register( $short_name, $class, $overrides = null ) {
/** Ignore classes that have been marked as inactive */
if ( in_array( $class, self::$_registered_entity['inactive'], true ) ) {
return;
}
/** Mark classes as active. Override existing active classes if they are supposed to be overridden */
$index = array_search( $overrides, self::$_registered_entity['active'], true );
if ( false !== $index ) {
self::$_registered_entity['active'][ $index ] = $class;
} else {
self::$_registered_entity['active'][ $short_name ] = $class;
}
/** Mark overridden classes as inactive. */
if ( ! empty( $overrides ) ) {
self::$_registered_entity['inactive'][] = $overrides;
}
}
/**
* Admin notice if Pro older version active
*/
public function maybe_show_old_pro_notice() {
if ( ! bwfan_is_autonami_pro_active() ) {
return;
}
if ( version_compare( BWFAN_PRO_VERSION, BWFAN_MIN_PRO_VERSION, '>=' ) ) {
return;
}
?>
<div class="notice notice-warning" style="display: block!important;">
<p>
<?php
echo __( '<strong>Warning! Old version of FunnelKit Automations Pro is detected.</strong> We strongly recommend to update the latest version of FunnelKit Automations Pro.', 'wp-marketing-automations' ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
?>
</p>
</div>
<?php
}
public static function define_api_basename() {
$slug = 'autonami-app';
if ( defined( 'BWFAN_PRO_VERSION' ) && version_compare( BWFAN_PRO_VERSION, '2.5.1', '<' ) ) {
$slug = 'autonami-admin';
}
define( 'BWFAN_API_NAMESPACE', $slug );
}
public function load_classes() {
/**
* Loads all the public
*/
$this->load_public();
/**
* Loads all the admin
*/
if ( is_admin() ) {
$this->load_admin();
}
$this->register_abstract();
/**
* Loads rule classes
*/
if ( bwfan_is_autonami_pro_active() ) {
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-rules.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-rules-loader.php';
}
/**
* Loads core classes
*/
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-db.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-db-update.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-load-integrations.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-merge-tag-loader.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-load-sources.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-load-connectors.php';
require BWFAN_PLUGIN_DIR . '/compatibilities/class-bwfan-compatibilities.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-automations.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-tasks.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-logs.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-logger.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-dashboards.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-connectors.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-load-custom-search.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-recipe-loader.php';
/** Automation builder v2 */
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-automation-v2.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-automation-v2-contact.php';
/** Subscribe link handler */
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-subscribe-link-handler.php';
/** Remove duplicate contacts */
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-dev-remove-cfields-duplicate-records.php';
if ( bwfan_is_woocommerce_active() ) {
/** Load cart helper file */
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-recoverable-carts.php';
}
if ( bwfan_is_autonami_pro_active() ) {
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-dev-get-broadcast-timing.php';
/** Added export handler */
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-exporter-handler.php';
}
/** Load contact-related classes */
if ( BWFAN_Common::is_pro_3_0() ) {
require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-contacts.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-lists.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-tag.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-fields.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-field-group.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-contact-notes.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-funnels.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-email-conversations.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-conversation.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-conversions.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-message.php';
require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-automations.php';
}
$this->register_controllers();
do_action( 'bwfan_before_register_modules' );
$this->register_modules();
// After including class now initialize all class or functions
$this->register_classes();
}
/**
* Load all the API classes
*
* @return void
*/
public function bwfan_load_apis() {
$rest_route = isset( $_GET['rest_route'] ) ? $_GET['rest_route'] : ''; // phpcs:ignore
if ( empty( $rest_route ) ) {
$rest_route = $_SERVER['REQUEST_URI']; // phpcs:ignore
}
if ( empty( $rest_route ) ) {
return;
}
if ( false === strpos( $rest_route, BWFAN_API_NAMESPACE ) ) {
return;
}
require_once BWFAN_PLUGIN_DIR . '/includes/class-bwfan-api-loader.php';
BWFAN_API_Loader::register_routes();
}
public function load_public() {
require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-public.php';
}
public function load_admin() {
require BWFAN_PLUGIN_DIR . '/admin/class-bwfan-admin.php';
include_once( BWFAN_PLUGIN_DIR . '/admin/includes/class-bwfan-header.php' );
}
private function register_abstract() {
$abstract_path = BWFAN_PLUGIN_DIR . '/includes/abstracts';
foreach ( glob( $abstract_path . '/class-*.php' ) as $_field_filename ) {
$file_data = pathinfo( $_field_filename );
if ( isset( $file_data['basename'] ) && 'index.php' === $file_data['basename'] ) {
continue;
}
require_once( $_field_filename );
}
}
private function register_controllers() {
$abstract_path = BWFAN_PLUGIN_DIR . '/includes/controllers';
foreach ( glob( $abstract_path . '/class-*.php' ) as $_field_filename ) {
$file_data = pathinfo( $_field_filename );
if ( isset( $file_data['basename'] ) && 'index.php' === $file_data['basename'] ) {
continue;
}
require_once( $_field_filename );
}
}
public function register_modules() {
$integration_dir = BWFAN_PLUGIN_DIR . '/modules';
foreach ( glob( $integration_dir . '/*/class-*.php' ) as $_field_filename ) {
require_once( $_field_filename );
}
}
public function register_classes() {
$load_classes = self::get_registered_class();
if ( is_array( $load_classes ) && count( $load_classes ) > 0 ) {
foreach ( $load_classes as $access_key => $class ) {
if ( ! method_exists( $class, 'get_instance' ) ) {
continue;
}
$this->{$access_key} = $class::get_instance();
}
do_action( 'bwfan_loaded' );
}
}
public static function get_registered_class() {
return self::$_registered_entity['active'];
}
public function localization() {
load_plugin_textdomain( 'wp-marketing-automations', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
}
/**
* Added redirection on plugin activation
*
* @param $plugin
*/
public function redirect_on_activation( $plugin ) {
if ( defined( 'WP_CLI' ) || ( plugin_basename( __FILE__ ) !== $plugin ) ) {
return;
}
wp_safe_redirect( add_query_arg( array(
'page' => 'autonami',
), admin_url( 'admin.php' ) ) );
exit;
}
public function initiate_as_ct() {
/** AS older data store */
$as_ct_files = glob( BWFAN_PLUGIN_DIR . '/libraries/action-scheduler-ct/*.php' );
foreach ( $as_ct_files as $file_name ) {
if ( false !== strpos( $file_name, 'class-bwfan-as-ct-cli.php' ) ) {
/** Will load when CLI to run */
continue;
}
require_once $file_name;
}
/** AS new data store */
$as_ct_files = glob( BWFAN_PLUGIN_DIR . '/libraries/action-scheduler-v2/*.php' );
foreach ( $as_ct_files as $file_name ) {
if ( false !== strpos( $file_name, 'class-bwfan-as-ct-cli.php' ) ) {
/** Will load when CLI to run */
continue;
}
require_once $file_name;
}
}
public function load_cli() {
if ( defined( 'WP_CLI' ) && WP_CLI ) {
/** v1 cli command register */
require_once BWFAN_PLUGIN_DIR . '/libraries/action-scheduler-ct/class-bwfan-as-ct-cli.php';
WP_CLI::add_command( 'autonami-tasks', 'BWFAN_AS_CT_CLI' );
/** v2 cli command register */
require_once BWFAN_PLUGIN_DIR . '/libraries/action-scheduler-v2/class-bwfan-as-ct-cli.php';
WP_CLI::add_command( 'autonami-automation-contact', 'BWFAN_AS_CT_CLI' );
}
}
/**
* to avoid unserialize of the current class
*/
public function __wakeup() {
throw new ErrorException( 'BWFAN_Core can`t converted to string' );
}
/**
* to avoid serialize of the current class
*/
public function __sleep() {
throw new ErrorException( 'BWFAN_Core can`t converted to string' );
}
/**
* To avoid cloning of current class
*/
protected function __clone() {
}
}
if ( ! function_exists( 'BWFAN_Core' ) ) {
/**
* Global Common function to load all the classes
* @return BWFAN_Core
*/
function BWFAN_Core() { //@codingStandardsIgnoreLine
return BWFAN_Core::get_instance();
}
}
BWFAN_Core();