HEX
Server: Apache/2
System: Linux bq-e705.pointdnshere.com 4.18.0-513.11.1.el8_9.x86_64 #1 SMP Wed Jan 17 02:00:40 EST 2024 x86_64
User: wellmix (1103)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: /home/wellmix/public_html/wp-content/plugins/elementskit/widgets/facebook-feed/classes/settings.php
<?php

class Ekit_facebook_settings {

	public $ekit_fb_account_id = '';
	/**
	 * Access token app id
	 */
	public $ekit_fb_app_id = '';

	/**
	 * Access token secret key
	 */
	public $ekit_fb_app_secret = '';

	/**
	 * Access token secret key
	 */

	protected static $fb_graph_url = 'https://graph.facebook.com/';
	protected static $fb_api_version = 'v8.0';

	public $ekit_fb_app_access_token = '';

	private $user_app_id;
	private $user_app_key;
	private $user_id;
	private $access_key;
	private $page_id;


	private $fileds = [
		'id',
		'message',
		'created_time',
	];


	public function setup(array $config) {

		$this->user_id    = empty($config['pg_id']) ? '' : $config['pg_id'];
		$this->page_id    = empty($config['pg_id']) ? '' : $config['pg_id'];
		$this->access_key = empty($config['pg_tok']) ? '' : $config['pg_tok'];
	}


	public function getToken() {
		return $this->access_key;

	}


	public static function get_me_call_transient_key($token = 'nothing') {

		return 'ekit_fb_feeds_me_' . md5($token);
	}


	public static function get_fb_user_feed_call_transient_key($user_id) {

		return 'ekit_fbf_call_' . $user_id;
	}


	public static function get_fb_pg_post_call_transient_key($page_id, $tok) {

		$md = md5($page_id . $tok);

		return 'ekit_fbf_pg_post_call_' . $md;
	}


	public static function get_fb_pg_call_transient_key($token = 'nothing') {

		return 'ekit_fbf_page_info_' . md5($token);
	}


	public static function get_fb_feed_url($user_id, $ac_token, $limit = 5, $fld = '') {

		$url  = self::$fb_graph_url . self::$fb_api_version . '/' . $user_id . '/feed';
		$args = '?access_token=' . $ac_token . '&limit=' . $limit . '&fields=' . $fld;

		return $url . $args;
	}


	public static function get_fb_page_posts_url($page_id, $pg_token, $fld = '') {

		$url  = self::$fb_graph_url . self::$fb_api_version . '/' . $page_id . '/posts';
		$args = '?access_token=' . $pg_token . '&fields=' . $fld;

		return $url . $args;
	}

	/**
	 * @param $page_id
	 * @param string $type - small, normal, album, large, square
	 * @return string
	 */
	public static function get_fb_page_profile_pic_url($page_id, $type = 'normal') {

		$url  = self::$fb_graph_url . self::$fb_api_version . '/' . $page_id . '/picture';
		$args = '?type='.$type;

		return $url . $args;
	}


	public function get_fb_user_feed($user_id, $limit = 5, $fields = []) {

		$token           = $this->access_key;
		$transient_name  = self::get_fb_user_feed_call_transient_key($user_id);
		$transient_value = get_transient($transient_name);

		if(false !== $transient_value) {

			return [
				'success' => true,
				'msg'     => __('Fetched from transient', 'elementskit'),
				'param'   => $transient_value,
			];
		}

		try {

			if(empty($fields)) {
				$fld = implode(',', $this->fileds);
			} else {
				$fld = implode(',', $fields);
			}

			$url     = self::get_fb_feed_url($user_id, $token, $limit, $fld);
			$request = wp_remote_get($url);

			if(is_wp_error($request)) {

				return [
					'success' => false,
					'msg'     => $request->get_error_message(),
					'param'   => [],
				];
			}

			$body   = wp_remote_retrieve_body($request);
			$result = json_decode($body);

			$expiration_time = 86400;//in second
			set_transient($transient_name, $result, $expiration_time);


		} catch(\Exception $ex) {

			return [
				'success' => false,
				'msg'     => $ex->getMessage(),
				'param'   => [],
			];
		}

		return [
			'success' => true,
			'msg'     => __('Fetched and cached the api call', 'elementskit'),
			'param'   => $result,
		];
	}


	/**
	 * Get user details
	 * mainly id and name
	 *
	 * @return array
	 */
	public function get_fb_me_id() {

		$msg   = __('Successfully retrieved', 'elementskit');
		$token = $this->access_key;

		$transient_name  = self::get_me_call_transient_key($token);
		$transient_value = get_transient($transient_name);

		if(false !== $transient_value) {

			return [
				'success' => true,
				'msg'     => $msg,
				'param'   => $transient_value,
			];
		}


		$url_acc   = self::$fb_graph_url . self::$fb_api_version . '/me';
		$acc_args  = '?access_token=' . $token;
		$extracted = [];

		try {

			$request = wp_remote_get($url_acc . $acc_args);
			$body    = wp_remote_retrieve_body($request);
			$dt      = json_decode($body);

			if(!empty($dt->name)) {
				$extracted['usr_tok']  = $token;
				$extracted['usr_name'] = $dt->name;
				$extracted['usr_id']   = $dt->id;

				$expiration_time = 86400;//in second

				set_transient($transient_name, $extracted, $expiration_time);
			}

		} catch(\Exception $ex) {

			$msg = $ex->getMessage();
			$dt  = 'Nothing....';
		}


		return [
			'success' => true,
			'msg'     => $msg,
			'param'   => $extracted,
		];
	}


	public function get_fb_page_id_by_token($page_token) {

		$msg   = __('Successfully retrieved', 'elementskit');
		$token = $page_token;

		$trans_name  = self::get_fb_pg_call_transient_key($token);
		$trans_value = get_transient($trans_name);

		if(false !== $trans_value) {

			return [
				'success' => true,
				'msg'     => $msg,
				'param'   => $trans_value,
			];
		}


		$url_acc   = self::$fb_graph_url . self::$fb_api_version . '/me';
		$acc_args  = '?access_token=' . $token;
		$extracted = [];

		try {

			$request = wp_remote_get($url_acc . $acc_args);
			$body    = wp_remote_retrieve_body($request);
			$dt      = json_decode($body);

			if(!empty($dt->name)) {
				$extracted['pg_tok']  = $token;
				$extracted['pg_name'] = $dt->name;
				$extracted['pg_id']   = $dt->id;

				$expiration_time = 86400 * 10;//10 days at least

				set_transient($trans_name, $extracted, $expiration_time);
			}

		} catch(\Exception $ex) {

			$msg = $ex->getMessage();
			$dt  = 'Nothing....';
		}


		return [
			'success' => true,
			'msg'     => $msg,
			'param'   => $extracted,
		];
	}


	public function verify_fb_page_and_token() {

		$msg     = __('Successfully retrieved', 'elementskit');
		$token   = $this->access_key;
		$page_id = $this->page_id;

		$hash        = md5($token . $this->page_id);
		$trans_name  = self::get_fb_pg_call_transient_key($hash);
		$trans_value = get_transient($trans_name);

		if(false !== $trans_value) {

			return [
				'success' => true,
				'msg'     => $msg,
				'param'   => $trans_value,
			];
		}


		$url_acc   = self::$fb_graph_url . self::$fb_api_version . '/' . $page_id;
		$acc_args  = '?access_token=' . $token;
		$extracted = [];

		try {

			$request = wp_remote_get($url_acc . $acc_args);
			$body    = wp_remote_retrieve_body($request);
			$dt      = json_decode($body);

			if(!empty($dt->name)) {
				$extracted['pg_tok']  = $token;
				$extracted['pg_name'] = $dt->name;
				$extracted['pg_id']   = $dt->id;

				$expiration_time = 86400 * 10;//10 days at least

				set_transient($trans_name, $extracted, $expiration_time);
			}

		} catch(\Exception $ex) {

			$msg = $ex->getMessage();
			$dt  = 'Nothing....';
		}


		return [
			'success' => true,
			'msg'     => $msg,
			'param'   => $extracted,
		];
	}


	public function get_fb_page_posts($limit = 5, $fields = []) {

		$token       = $this->access_key;
		$page_id     = $this->page_id;
		$trans_name  = self::get_fb_pg_post_call_transient_key($page_id, $token);
		$trans_value = get_transient($trans_name);

		if(false !== $trans_value) {

			return [
				'success' => true,
				'msg'     => __('Fetched from transient', 'elementskit'),
				'param'   => $trans_value,
			];
		}

		try {

			$num = empty($limit) ? 10 : ($limit > 25 ? 25 : $limit  );
			$fld     = 'id,message,attachments{description,title,type,url,media},from,comments{message,like_count,user_likes,permalink_url},likes{username,name},shares,permalink_url,full_picture,created_time&limit='.intval($num);
			$url     = self::get_fb_page_posts_url($page_id, $token, $fld);
			$request = wp_remote_get($url);

			if(is_wp_error($request)) {

				return [
					'success' => false,
					'msg'     => $request->get_error_message(),
					'param'   => [],
				];
			}

			$body   = wp_remote_retrieve_body($request);
			$result = json_decode($body);

			$expiration_time = 86400;//in second
			set_transient($trans_name, $result, $expiration_time);

		} catch(\Exception $ex) {

			return [
				'success' => false,
				'msg'     => $ex->getMessage(),
				'param'   => [],
			];
		}

		return [
			'success' => true,
			'msg'     => __('Fetched and cached the api call', 'elementskit'),
			'param'   => $result,
		];
	}


	/**
	 * @param mixed $access_key
	 */
	public function setAccessKey($access_key) {
		$this->access_key = $access_key;
	}
}