HEX
Server: Apache
System: Linux server 5.4.0-56-generic #62-Ubuntu SMP Mon Nov 23 19:20:19 UTC 2020 x86_64
User: losadagest (10000)
PHP: 7.4.33
Disabled: opcache_get_status
Upload Files
File: /var/www/vhosts/aceitunaslosada.com/insta-gallery/includes/controllers/AccountController.php
<?php

include_once(QLIGG_PLUGIN_DIR . 'includes/models/Account.php');
include_once(QLIGG_PLUGIN_DIR . 'includes/models/Feed.php');
include_once(QLIGG_PLUGIN_DIR . 'includes/controllers/QLIGG_Controller.php');

class QLIGG_Account_Controller extends QLIGG_Controller
{

  protected static $instance;
  protected static $slug = 'qligg_account';

  //  protected static $slug = QLIGG_DOMAIN . '_account';

  public static function instance()
  {

    //print_r($_REQUEST);

    if (!isset(self::$instance)) {
      self::$instance = new self();
      self::$instance->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();