init(); } return self::$instance; } function init() { add_action('admin_init', array($this, 'init_add_account')); add_action('wp_ajax_qligg_add_account', array($this, 'ajax_add_account')); add_action('wp_ajax_qligg_delete_account', array($this, 'ajax_delete_account')); add_action('wp_ajax_qligg_renew_access_token', array($this, 'ajax_renew_access_token')); add_action('admin_enqueue_scripts', array($this, 'add_js')); add_action('admin_menu', array($this, 'add_menu')); } function add_menu() { add_submenu_page(QLIGG_DOMAIN, esc_html__('Accounts', 'insta-gallery'), esc_html__('Accounts', 'insta-gallery'), 'manage_options', self::$slug, array($this, 'add_panel')); } function add_panel() { global $submenu, $qliggAPI; $account_model = new QLIGG_Account(); $accounts = $account_model->get_accounts(); include(QLIGG_PLUGIN_DIR . '/includes/view/backend/pages/parts/header.php'); include(QLIGG_PLUGIN_DIR . '/includes/view/backend/pages/accounts.php'); } function ajax_add_account() { $account_model = new QLIGG_Account(); $account_data = [ 'id' => sanitize_text_field($_REQUEST['account_data']['id']), 'access_token' => sanitize_text_field($_REQUEST['account_data']['access_token']) ]; if ($access_token = $account_model->renew_access_token($_REQUEST['account_data']['access_token'])) { if (substr($access_token['access_token'], 0, 4) === 'IGQV') { $account_data['token_type'] = 'PERSONAL'; } else { $account_data['token_type'] = 'BUSINESS'; } $account_data['expires_in'] = intval($access_token['expires_in']); $account = $this->add_account($account_data); if (isset($account['id'])) { parent::success_ajax(esc_html__('The token has been updated successfully', 'insta-gallery')); } if (isset($account['error']['message'])) { parent::error_ajax(esc_html($account['error']['message'])); } if (isset($account['message'])) { parent::error_ajax(esc_html($account['message'])); } } } function ajax_renew_access_token() { if (!isset($_REQUEST['account_id'])) { return; } $account_model = new QLIGG_Account(); if ($account = $account_model->renew_account_token(sanitize_key($_REQUEST['account_id']))) { if (isset($account['id'])) { parent::success_ajax(esc_html__('The token has been updated successfully', 'insta-gallery')); } if (isset($account['error']['message'])) { parent::error_ajax(esc_html($account['error']['message'])); } if (isset($account['message'])) { parent::error_ajax(esc_html($account['message'])); } } parent::error_ajax(esc_html__('Unknow error', 'insta-gallery')); } function add_account(array $account_data = []) { if ( isset($account_data['id']) && isset($account_data['access_token']) && isset($account_data['token_type']) && isset($account_data['expires_in']) ) { $account_model = new QLIGG_Account(); delete_transient("insta_gallery_v2_user_profile_{$account_data['id']}"); $feed_model = new QLIGG_Feed(); $tk = "%%insta_gallery_v2_user_media_{$account_data['id']}_%%"; $feed_model->clear_cache($tk); $id = sanitize_text_field($account_data['id']); $access_token = sanitize_text_field($account_data['access_token']); $token_type = sanitize_text_field($account_data['token_type']); $expires_in = sanitize_text_field($account_data['expires_in']); return $account_model->add_account(array( 'id' => $id, 'access_token' => $access_token, 'token_type' => $token_type, 'expires_in' => $expires_in )); } } function init_add_account() { if (isset($_REQUEST['accounts'][0]['id'])) { foreach ($_REQUEST['accounts'] as $account_data) { if ( isset($account_data['id']) && isset($account_data['access_token']) && isset($account_data['token_type']) && isset($account_data['expires_in']) ) { $this->add_account($account_data); } } if (wp_safe_redirect(admin_url('admin.php?page=qligg_account'))) { exit; } } } function ajax_delete_account() { if (!empty($_REQUEST['account_id']) && current_user_can('manage_options') && check_ajax_referer('qligg_delete_account', 'nonce', false)) { $account_model = new QLIGG_Account(); $account_id = sanitize_text_field($_REQUEST['account_id']); $account_model->delete_account($account_id); delete_transient("insta_gallery_v2_user_profile_{$account_id}"); $feed_model = new QLIGG_Feed(); $tk = "%%insta_gallery_v2_user_media_{$account_id}_%%"; $feed_model->clear_cache($tk); parent::success_ajax(esc_html__('Account removed successfully', 'insta-gallery')); } parent::error_access_denied(); } function add_js() { $admin = include_once(QLIGG_PLUGIN_DIR . 'assets/backend/js/admin.asset.php'); wp_register_script('qligg-admin-account', plugins_url('/assets/backend/js/admin.js', QLIGG_PLUGIN_FILE), $admin['dependencies'], $admin['version'], true); wp_localize_script('qligg-admin-account', 'qligg_account', array( 'nonce' => array( 'qligg_add_account' => wp_create_nonce('qligg_add_account'), 'qligg_delete_account' => wp_create_nonce('qligg_delete_account'), 'qligg_renew_access_token' => wp_create_nonce('qligg_renew_access_token') ), 'message' => array( 'confirm_delete' => esc_html__('Do you want to delete the account?', 'insta-gallery') ) )); if (isset($_GET['page']) && ($_GET['page'] === self::$slug)) { wp_enqueue_script('qligg-admin-account'); wp_enqueue_style('qligg-admin'); } } } QLIGG_Account_Controller::instance();