%PDF- %PDF-
Direktori : /home/tradesc/www/relax/wp-content/plugins/cartflows/classes/ |
Current File : /home/tradesc/www/relax/wp-content/plugins/cartflows/classes/class-cartflows-admin.php |
<?php /** * CartFlows Admin. * * @package CartFlows */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Class Cartflows_Admin. */ class Cartflows_Admin { /** * Instance * * @access private * @var object Class object. * @since 1.0.0 */ private static $instance; /** * Initiator * * @since 1.0.0 * @return object initialized object of class. */ public static function get_instance() { if ( ! isset( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Constructor */ public function __construct() { $this->init_hooks(); } /** * Init Hooks. * * @since 1.0.0 * @return void */ public function init_hooks() { if ( ! is_admin() ) { return; } /* Add lite version class to body */ add_action( 'admin_body_class', array( $this, 'add_admin_body_class' ) ); add_filter( 'plugin_action_links_' . CARTFLOWS_BASE, array( $this, 'add_action_links' ) ); add_action( 'admin_init', array( $this, 'flush_rules_after_save_permalinks' ) ); add_filter( 'post_row_actions', array( $this, 'remove_flow_actions' ), 99, 2 ); add_action( 'wp_dashboard_setup', array( $this, 'dashboard_widget' ) ); add_action( 'init', array( $this, 'run_scheduled_docs_job' ) ); add_action( 'cartflows_update_knowledge_base_data', array( $this, 'cartflows_update_knowledge_base_data' ) ); $this->do_not_cache_admin_pages_actions(); } /** * Do not cache admin pages actions. * * @since 1.6.13 * @return void */ public function do_not_cache_admin_pages_actions() { add_action( 'admin_init', array( $this, 'add_admin_cache_restrict_const' ) ); add_action( 'admin_head', array( $this, 'add_admin_cache_restrict_meta' ) ); } /** * Run scheduled job for CartFLows knowledge base data. * * @since 2.0.0 * @return void */ public function run_scheduled_docs_job() { if ( false === as_next_scheduled_action( 'cartflows_update_knowledge_base_data' ) && ! wp_installing() ) { as_schedule_recurring_action( time(), WEEK_IN_SECONDS, 'cartflows_update_knowledge_base_data' ); } } /** * Cartflows's REST knowledge base data. * * @since 2.0.0 * @return mixed */ public static function cartflows_update_knowledge_base_data() { $docs_json = json_decode( wp_remote_retrieve_body( wp_remote_get( 'https://cartflows.com//wp-json/powerful-docs/v1/get-docs' ) ) ); Cartflows_Helper::update_admin_settings_option( 'cartflows_docs_data', $docs_json ); } /** * Init dashboard widgets. */ public function dashboard_widget() { if ( current_user_can( 'manage_options' ) && '1' === get_option( 'wcf_setup_skipped', false ) && '1' !== get_option( 'wcf_setup_complete', false ) ) { wp_add_dashboard_widget( 'cartFlows_setup_dashboard_widget', __( 'CartFlows Setup', 'cartflows' ), array( $this, 'status_widget' ) ); } } /** * Show status widget. */ public function status_widget() { $admin_url = admin_url( 'index.php' ) . '?page=cartflow-setup&'; $steps = array( 'welcome' => $admin_url . 'step=welcome', 'page-builder' => $admin_url . 'step=page-builder', 'plugin-install' => $admin_url . 'step=plugin-install', 'global-checkout' => $admin_url . 'step=global-checkout', 'optin' => $admin_url . 'step=optin', 'ready' => $admin_url . 'step=ready', ); $exit_step = get_option( 'wcf_exit_setup_step', 'welcome' ); $incompleted_steps = array_search( $exit_step, array_keys( $steps ), true ); $remianing_steps = array_slice( $steps, 0, $incompleted_steps ); $completed_tasks_count = count( $remianing_steps ) + 1; $tasks_count = count( $steps ); $button_link = ! empty( $exit_step ) ? $steps[ $exit_step ] : ''; $progress_percentage = ( $completed_tasks_count / $tasks_count ) * 100; $circle_r = 6.5; $circle_dashoffset = ( ( 100 - $progress_percentage ) / 100 ) * ( pi() * ( $circle_r * 2 ) ); wp_enqueue_style( 'cartflows-dashboard-widget', CARTFLOWS_URL . 'admin/assets/css/admin-widget.css', array(), CARTFLOWS_VER ); ?> <div class="cartflows-dashboard-widget-finish-setup"> <span class='progress-wrapper'> <svg class="circle-progress" width="17" height="17" version="1.1" xmlns="http://www.w3.org/2000/svg"> <circle r="6.5" cx="10" cy="10" fill="transparent" stroke-dasharray="40.859" stroke-dashoffset="0"></circle> <circle class="bar" r="6.5" cx="190" cy="10" fill="transparent" stroke-dasharray="40.859" stroke-dashoffset="<?php echo esc_attr( $circle_dashoffset ); ?>" transform='rotate(-90 100 100)'></circle> </svg> <span><?php echo esc_html_e( 'Step', 'cartflows' ); ?> <?php echo esc_html( $completed_tasks_count ); ?> <?php echo esc_html_e( 'of', 'cartflows' ); ?> <?php echo esc_html( $tasks_count ); ?></span> </span> <div class="description"> <div class="wcf-left-column"> <p> <?php echo esc_html_e( 'You\'re almost there! Once you complete CartFlows setup you can start receiving orders from flows.', 'cartflows' ); ?> </p> <a href='<?php echo esc_url( $button_link ); ?>' class='button button-primary'><?php echo esc_html_e( 'Complete Setup', 'cartflows' ); ?></a> </div> <div class="wcf-right-column"> <img src="<?php echo esc_url( CARTFLOWS_URL . 'admin/assets/images/cartflows-home-widget.svg' ); ?>" /> </div> </div> </div> <?php } /** * Add the clone link to action list for flows row actions * * @param array $actions Actions array. * @param object $post Post object. * * @return array */ public function remove_flow_actions( $actions, $post ) { if ( current_user_can( 'edit_posts' ) && isset( $post ) && CARTFLOWS_FLOW_POST_TYPE === $post->post_type ) { if ( isset( $actions['duplicate'] ) ) { // Duplicate page plugin remove. unset( $actions['duplicate'] ); } if ( isset( $actions['edit_as_new_draft'] ) ) { // Duplicate post plugin remove. unset( $actions['edit_as_new_draft'] ); } } return $actions; } /** * After save of permalinks. */ public static function flush_rules_after_save_permalinks() { $has_saved_permalinks = get_option( 'cartflows_permalink_refresh' ); if ( $has_saved_permalinks ) { // Required to flush rules when permalink changes. flush_rewrite_rules(); //phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.flush_rewrite_rules_flush_rewrite_rules delete_option( 'cartflows_permalink_refresh' ); } } /** * Show action on plugin page. * * @param array $links links. * @return array */ public function add_action_links( $links ) { $mylinks = array( '<a target="_blank" href="' . esc_url( 'https://cartflows.com/docs/?utm_source=plugin-page&utm_medium=free-cartflows&utm_campaign=go-pro' ) . '">' . __( 'Docs', 'cartflows' ) . '</a>', ); if ( current_user_can( 'cartflows_manage_settings' ) ) { $default_url = add_query_arg( array( 'page' => CARTFLOWS_SLUG, 'settings' => true, ), admin_url( 'admin.php' ) ); array_unshift( $mylinks, '<a href="' . esc_url( $default_url ) . '">' . __( 'Settings', 'cartflows' ) . '</a>' ); } if ( ! _is_cartflows_pro() ) { array_push( $mylinks, '<a style="color: #39b54a; font-weight: 700;" target="_blank" href="' . esc_url( 'https://cartflows.com/pricing/?utm_source=plugin-page&utm_medium=free-cartflows&utm_campaign=go-pro' ) . '"> Go Pro </a>' ); } return array_merge( $links, $mylinks ); } /** * Check is flow admin. * * @since 1.0.0 * @return boolean */ public static function is_flow_edit_admin() { $current_screen = get_current_screen(); if ( is_object( $current_screen ) && isset( $current_screen->post_type ) && ( CARTFLOWS_FLOW_POST_TYPE === $current_screen->post_type ) && isset( $current_screen->base ) && ( 'post' === $current_screen->base ) ) { return true; } return false; } /** * Admin body classes. * * Body classes to be added to <body> tag in admin page * * @param String $classes body classes returned from the filter. * @return String body classes to be added to <body> tag in admin page */ public function add_admin_body_class( $classes ) { $classes .= ' cartflows-' . CARTFLOWS_VER; if ( isset( $_GET['action'] ) && in_array( sanitize_text_field( wp_unslash( $_GET['action'] ) ), array( 'wcf-log', 'wcf-license' ) ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended $classes .= ' wcf-debug-page '; } return $classes; } /** * Check allowed screen for notices. * * @since 1.0.0 * @return bool */ public function allowed_screen_for_notices() { $screen = get_current_screen(); $screen_id = $screen ? $screen->id : ''; $allowed_screens = array( 'toplevel_page_cartflows', 'edit-cartflows_flow', ); if ( in_array( $screen_id, $allowed_screens, true ) ) { return true; } return false; } /** * Function to add the meta and headers for not to cache the CartFlows wp-admin page. * * @return void */ public function add_admin_cache_restrict_meta() { if ( ! $this->allowed_screen_for_notices() ) { return; } echo '<!-- Added by CartFlows -->'; echo '<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" />'; echo '<!-- Added by CartFlows -->'; } /** * Function to add the Do Not Cache Constants on the CartFlows admin pages. * * @return void */ public function add_admin_cache_restrict_const() { // Ignoring nonce verification as using SuperGlobal variables on WordPress hooks. if ( isset( $_GET['page'] ) && ( 'cartflows' === sanitize_text_field( $_GET['page'] ) || false !== strpos( sanitize_text_field( $_GET['page'] ), 'cartflows_' ) ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended wcf()->utils->get_cache_headers(); } } } Cartflows_Admin::get_instance();