File: /home/dmstechonline/social.dmstech.online/classes/Social/fbConfig.php
<?php
/* Check the absolute path to the Social Auto Poster directory. */
if ( !defined( 'SAP_APP_PATH' ) ) {
// If SAP_APP_PATH constant is not defined, perform some action, show an error, or exit the script
// Or exit the script if required
exit();
}
/**
* Facebook posting
*
* @package Social auto poster
* @since 1.0.0
*/
require_once LIB_PATH . "Social/facebook/autoload.php";
// Include required libraries
use Facebook\Facebook;
use Facebook\Exceptions\FacebookResponseException;
use Facebook\Exceptions\FacebookSDKException;
class SAP_Facebook {
public $fbPermissions = array('email', 'public_profile', 'publish_pages', 'pages_manage_posts', 'publish_to_groups','business_management'); //Optional permissions
public $facebook, $settings, $flash, $posts, $common, $logs, $quick_posts, $sap_common;
public $grantaccessToken, $helper;
public function __construct($user_id = '') {
global $sap_common;
global $proxy_url, $proxy_pupw;
if (!class_exists('SAP_Quick_Posts')) {
require_once( CLASS_PATH . 'Quick_Posts.php' );
}
if (!class_exists('SAP_Posts')) {
require_once( CLASS_PATH . 'Posts.php' );
}
$this->settings = new SAP_Settings();
$this->flash = new Flash();
$this->posts = new SAP_Posts();
$this->common = new Common();
$this->logs = new SAP_Logs();
$this->quick_posts = new SAP_Quick_Posts();
$this->sap_common = $sap_common;
/* Initialize the function */
$this->sap_fb_initialize($user_id);
}
/**
* Include Facebook Class
*
* Handles to load facebook class
*
* @package Social Auto Poster
* @since 1.0.0
*/
public function sap_load_facebook($app_id = false, $user_id = '') {
//Getting facebook apps
$fb_apps = $this->sap_get_fb_apps( $user_id );
/// If app id is not passed then take first fb app data
if (empty($app_id)) {
$fb_apps_keys = array_keys($fb_apps);
$app_id = reset($fb_apps_keys);
}
//// Check facebook application id and application secret is not empty or not
if (!empty($app_id) && !empty($fb_apps[$app_id])) {
$this->facebook = new Facebook(array(
'app_id' => $app_id,
'app_secret' => $fb_apps[$app_id],
'cookie' => true,
'default_graph_version' => SAP_NEW_FB_APP_VERSION,
));
$this->helper = $this->facebook->getRedirectLoginHelper();
return true;
} else {
return false;
}
}
/**
* Assign Facebook User's all Data to session
*
* Handles to assign user's facebook data
* to sessoin & save to database
*
* @package Social Auto Poster
* @since 1.0.0
*/
public function sap_fb_initialize($user_id='') {
//Get global SAP facebook options
$sap_facebook_options = $this->settings->get_user_setting('sap_facebook_options', $user_id);
if (isset($_GET['grant_fb']) && $_GET['grant_fb'] == 'true' && isset($_GET['code']) && isset($_GET['state']) && isset($_GET['fb_app_id'])) {
//record logs for grant extended permission
$this->sap_common->sap_script_logs('Facebook Grant Extended Permission',$user_id);
//record logs for get parameters set properly
$this->sap_common->sap_script_logs('Get Parameters Set Properly.',$user_id);
$fb_app_id = $_GET['fb_app_id'];
$facebook_auth_options = !empty($sap_facebook_options['facebook_auth_options']) ? $sap_facebook_options['facebook_auth_options'] : 'graph';
try {
//load facebook class
$facebook = $this->sap_load_facebook($fb_app_id, $user_id);
} catch (Exception $e) {
//catch exception generated
$error = $e->getMessage();
$this->sap_common->sap_script_logs('Facebook Exception : ' . $error, $user_id);
$facebook = null;
}
if (!$facebook)
return false;
$this->grantaccessToken = $this->helper->getAccessToken();
$oAuth2Client = $this->facebook->getOAuth2Client();
$oAuth2Client->getLongLivedAccessToken($this->grantaccessToken);
$this->facebook->setDefaultAccessToken($this->grantaccessToken);
$user = array();
// Getting user facebook profile info
try {
$profileRequest = $this->facebook->get('/me?fields=name,first_name,last_name');
$user = $profileRequest->getGraphNode()->asArray();
} catch (FacebookResponseException $e) {
echo $this->sap_common->lang('social_fbconfig_graph_error') .''. $e->getMessage();
exit;
} catch (FacebookSDKException $e) {
echo $this->sap_common->lang('social_fbconfig_sdk_error') .''. $e->getMessage();
exit;
}
//check user is logged in facebook or not
if (!empty($user)) {
$this->sap_common->sap_script_logs('Facebook User ID : ' . $user['id'], $user_id);
try {
$_SESSION['sap_fb_user_cache'] = $user;
$this->_user_cache = $_SESSION['sap_fb_user_cache'];
$_SESSION['sap_fb_user_id'] = $user['id'];
$_SESSION['sap_fb_user_accounts'] = $this->sap_fetch_accounts();
// Start code to manage session from database
$sap_fb_sess_data = $this->settings->get_user_setting('sap_fb_sess_data');
// Checking if the grant extend is already done or not
if (!isset($sap_fb_sess_data[$fb_app_id])) {
$sess_data = array(
'sap_fb_user_cache' => $_SESSION['sap_fb_user_cache'],
'sap_fb_user_id' => $_SESSION['sap_fb_user_id'],
'sap_fb_user_accounts' => $_SESSION['sap_fb_user_accounts'],
'fb_' . $fb_app_id . '_code' => $_GET['code'],
'fb_' . $fb_app_id . '_access_token' => $this->grantaccessToken->getValue(),
'fb_' . $fb_app_id . '_user_id' => $fb_app_id,
'fb_' . $fb_app_id . '_state' => isset($_SESSION['fb_' . $fb_app_id . '_state']) ? $_SESSION['fb_' . $fb_app_id . '_state'] : '',
);
if ($fb_app_id) {
if (!empty($sap_fb_sess_data)) { // if rest options selected and give graph access then remove rest data
foreach ($sap_fb_sess_data as $k_app_id => $v_sess_data) {
if ($k_app_id == $v_sess_data['sap_fb_user_id']) {
unset($sap_fb_sess_data[$k_app_id]);
}
}
}
$sap_fb_sess_data[$fb_app_id] = $sess_data;
// Update session data to options
$this->settings->update_user_setting('sap_fb_sess_data', $sap_fb_sess_data);
$this->sap_common->sap_script_logs('Facebook Session Data Updated to Options',$user_id);
}
}
$_SESSION['display_fb_post_msg'] = 'Grant Extended Permission Successfully.';
$this->sap_common->sap_script_logs('Facebook Grant Extended Permission Successfully', $user_id);
} catch (FacebookApiException $e) {
$user = null;
$_SESSION['display_fb_post_msg'] = 'Facebook Exception : ' . $e->__toString();
$this->sap_common->sap_script_logs('Facebook Exception :' . $e->__toString(), $user_id);
}
}
$_SESSION['sap_active_tab'] = 'facebook';
header("Location:" . SAP_SITE_URL . "/settings/");
exit;
} else if (isset($_GET['wpw_auto_poster_fb_app_method']) && $_GET['wpw_auto_poster_fb_app_method'] == 'appmethod') {
if (isset($_GET['access_token']) && $_GET['access_token'] != '' && $_GET['wpw_fb_grant'] == 'true') {
$this->grantaccessToken = $_GET['access_token'];
try {
$this->facebook = new Facebook(array(
'app_id' => SAP_NEW_FB_APP_METHOD_ID,
'app_secret' => SAP_NEW_FB_APP_METHOD_SECRET,
'cookie' => true,
'default_graph_version' => SAP_NEW_FB_APP_VERSION,
));
$profileRequest = $this->facebook->get('/me?fields=name,first_name,last_name', $this->grantaccessToken);
$user = $profileRequest->getGraphNode()->asArray();
} catch (FacebookResponseException $e) {
echo $this->sap_common->lang('social_fbconfig_graph_error').''. $e->getMessage();
exit;
} catch (FacebookSDKException $e) {
echo $this->sap_common->lang('social_fbconfig_sdk_error').''. $e->getMessage();
exit;
}
if (!empty($user)) {
$this->sap_common->sap_script_logs('Facebook User ID : ' . $user['id'], $user_id);
try {
$_SESSION['sap_fb_user_cache'] = $user;
$this->_user_cache = $_SESSION['sap_fb_user_cache'];
$_SESSION['sap_fb_user_id'] = $user['id'];
$_SESSION['sap_fb_user_accounts'] = $this->sap_fetch_accounts();
$sap_fb_sess_data = $this->settings->get_user_setting('sap_fb_sess_data');
if (empty($sap_fb_sess_data)) {
$sap_fb_sess_data = array();
}
if (!isset($sap_fb_sess_data[$user['id']])) {
$sess_data = array(
'sap_fb_user_cache' => $_SESSION['sap_fb_user_cache'],
'sap_fb_user_id' => $_SESSION['sap_fb_user_id'],
'sap_fb_user_accounts' => $_SESSION['sap_fb_user_accounts'],
'fb_' . $user['id'] . '_code' => $_GET['code'],
'fb_' . $user['id'] . '_access_token' => $_GET['access_token'],
'fb_' . $user['id'] . '_user_id' => $user['id']
);
$key_user_id = strval($user['id']);
$sap_fb_sess_data[$key_user_id] = $sess_data;
// Update session data to options
$this->settings->update_user_setting('sap_fb_sess_data', $sap_fb_sess_data);
$this->sap_common->sap_script_logs('Facebook Session Data Updated to Options',$user_id);
}
$_SESSION['display_fb_post_msg'] = 'Grant Extended Permission Successfully.';
$this->sap_common->sap_script_logs('Facebook Grant Extended Permission Successfully.',$user_id);
} catch (FacebookApiException $e) {
//record logs exception generated
$this->sap_common->sap_script_logs('Facebook Exception : ' . $e->__toString(), $user_id);
//user is null
$user = null;
}
}
$_SESSION['sap_active_tab'] = 'facebook';
header("Location:" . SAP_SITE_URL . "/settings/");
exit;
} else if(isset($_GET['wpw_fb_grant']) && $_GET['wpw_fb_grant'] == 'false' && isset($_GET['error']) && $_GET['error'] != ''){
$this->flash->setFlash('Facebook error : ' . $_GET['error'], 'error' ,'',true);
$this->sap_common->sap_script_logs('Facebook Exception : '.$_GET['error'], $user_id);
$_SESSION['sap_active_tab'] = 'facebook';
header("Location:" . SAP_SITE_URL . "/settings/");
exit;
}
}
}
/**
* Facebook Login URL Using APP method
*
* Getting the login URL from Facebook.
* Facebook App method
*
* @package Social Auto Poster
* @since 1.0.0
*/
public function sap_auto_poster_get_fb_app_method_login_url() {
//load facebook class
$facebook = $this->sap_auto_poster_load_facebook_app_method(SAP_NEW_FB_APP_METHOD_ID);
//check facebook class is exis or not
if (!$facebook)
return false;
$redirect_URL = SAP_NEW_FB_APP_REDIRECT_URL;
$loginUrl = $this->helper->getLoginUrl($redirect_URL, $this->fbPermissions);
$loginUrl = $loginUrl . '&state=' . SAP_SITE_URL;
return $loginUrl;
}
/**
* Include Facebook Class
*
* Handles to load facebook class with the use of fix app id and secret
* Facebook App method
*
* @package Social Auto Poster
* @since 1.0.0
*/
public function sap_auto_poster_load_facebook_app_method($app_id = false) {
$sap_fb_options = $this->settings->get_user_setting('sap_facebook_options');
// Check facebook application id and application secret is not empty or not
if (!empty(SAP_NEW_FB_APP_METHOD_ID) && !empty(SAP_NEW_FB_APP_METHOD_SECRET)) {
$this->facebook = new Facebook(array(
'app_id' => SAP_NEW_FB_APP_METHOD_ID,
'app_secret' => SAP_NEW_FB_APP_METHOD_SECRET,
'cookie' => true,
'default_graph_version' => SAP_NEW_FB_APP_VERSION,
));
// Get redirect login helper
$this->helper = $this->facebook->getRedirectLoginHelper();
return true;
} else {
return false;
}
// Check facebook application id and application secret is not empty or not
}
/**
* Facebook Login URL
*
* Getting the login URL from Facebook.
*
* @package Social Auto Poster
* @since 1.0.0
*/
public function sap_get_fb_login_url($app_id = false) {
//load facebook class
$facebook = $this->sap_load_facebook($app_id);
if (!$facebook)
return false;
$portvalue = $this->common->is_ssl() ? 'https://' : 'http://';
$redirect_URL = $portvalue . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
$url_args = '?grant_fb=true&fb_app_id=' . $app_id;
$redirect_URL = $redirect_URL . $url_args;
$loginUrl = $this->helper->getLoginUrl($redirect_URL, $this->fbPermissions);
return $loginUrl;
}
/**
* User Data
*
* Getting the cached user data from the connected
* Facebook user (back end).
*
* @package Social Auto Poster
* @since 1.0.0
*/
public function sap_get_fb_user_data() {
if (!empty($this->_user_cache)) {
return $this->_user_cache;
}
}
/**
* Fetching Accounts
*
* Fetching all the associated accounts from the connected
* Facebook user (site admin).
*
* @package Social auto poster
* @since 1.0.0
*/
public function sap_fetch_accounts() {
$api = array();
$page_tokens = array();
$page_tokens = $this->sap_get_pages_tokens();
$page_tokens = isset($page_tokens['data']) ? $page_tokens['data'] : array();
$group_tokens = array();
$group_tokens = $this->sap_get_groups_tokens();
$group_tokens = !empty($group_tokens) ? $group_tokens : array();
// Taking user auth tokens
if (isset($_GET['wpw_auto_poster_fb_app_method']) && $_GET['wpw_auto_poster_fb_app_method'] == 'appmethod') {
$user_auth_tokens = $_SESSION['sap_fb_user_id'];
} else {
$user_auth_tokens = isset($_GET['fb_app_id']) ? $_GET['fb_app_id'] : '';
}
$api['auth_accounts'][$_SESSION['sap_fb_user_id']] = $this->_user_cache['name'] . " (" . $_SESSION['sap_fb_user_id'] . ")";
if (isset($_GET['wpw_auto_poster_fb_app_method']) && $_GET['wpw_auto_poster_fb_app_method'] == 'appmethod') {
$api['auth_tokens'][$_SESSION['sap_fb_user_id']] = $this->grantaccessToken;
} else {
$api['auth_tokens'][$_SESSION['sap_fb_user_id']] = $this->grantaccessToken->getValue();
}
foreach ($page_tokens as $ptk) {
if (!isset($ptk['id']) || !isset($ptk['access_token']))
continue;
$api['auth_tokens'][$ptk['id']] = $ptk['access_token'];
$api['auth_accounts'][$ptk['id']] = $ptk['name'];
}
//Remove this code due to group posting is not working from fb api 2.4.0 ( SAP V-1.8.0 )
// Creating user group data if user is administrator of that group
if (!empty($group_tokens)) {
foreach ($group_tokens as $gtk) {
if (isset($_GET['wpw_auto_poster_fb_app_method']) && $_GET['wpw_auto_poster_fb_app_method'] == 'appmethod') {
$api['auth_tokens'][$gtk['id']] = $this->grantaccessToken;
} else {
$api['auth_tokens'][$gtk['id']] = $this->grantaccessToken->getValue();
}
$api['auth_accounts'][$gtk['id']] = $gtk['name'];
}
}
return $api;
}
/**
* Get Group Tokens
*
* Fetching all the associated accounts from the connected
* Facebook user (site admin).
*
* @package Social auto poster
* @since 1.0.0
*/
public function sap_get_groups_tokens() {
try {
if (isset($_GET['wpw_fb_grant']) && $_GET['wpw_fb_grant'] == 'true' && $_GET['wpw_auto_poster_fb_app_method'] == 'appmethod') {
$this->facebook = new Facebook(array(
'app_id' => SAP_NEW_FB_APP_METHOD_ID,
'app_secret' => SAP_NEW_FB_APP_METHOD_SECRET,
'cookie' => true,
'default_graph_version' => SAP_NEW_FB_APP_VERSION,
));
$ret = $this->facebook->get('/me/groups/?admin_only=true', $this->grantaccessToken);
$ret = $ret->getDecodedBody();
} else {
//check facebook class is exist or not
$facebook = $this->sap_load_facebook($_SESSION['sap_fb_user_id']);
$ret = $this->facebook->get('/me/groups/?admin_only=true', $this->grantaccessToken->getValue());
$ret = $ret->getDecodedBody();
}
} catch (Exception $e) {
return false;
}
return $ret['data'];
}
/**
* Pages Tokens
*
* Getting the the tokens from all pages/accounts which
* are associated with the connected Facebook account
* so that the admin chan choose to which page/account
* he wants to post the submitted and approved reviews to.
*
* @package Social auto poster
* @since 1.0.0
*/
public function sap_get_pages_tokens() {
try {
if (isset($_GET['wpw_fb_grant']) && $_GET['wpw_fb_grant'] == 'true' && $_GET['wpw_auto_poster_fb_app_method'] == 'appmethod') {
$this->facebook = new Facebook(array(
'app_id' => SAP_NEW_FB_APP_METHOD_ID,
'app_secret' => SAP_NEW_FB_APP_METHOD_SECRET,
'cookie' => true,
'default_graph_version' => SAP_NEW_FB_APP_VERSION,
));
$ret = $this->facebook->get('/me/accounts/?limit=100', $this->grantaccessToken);
$retOrg = $ret;
$ret = $ret->getDecodedBody();
if( !empty( $ret ) && isset($ret['data']) && !empty($ret['paging']['next']) ) {
$paging_flag = true;
$fbEdgeData = $retOrg->getGraphEdge();
while( $paging_flag ) {
$responseData = $this->facebook->next($fbEdgeData);
if( !empty( $responseData ) ) {
$pagesArray = $responseData->asArray();
if( !empty( $pagesArray ) ){
$ret['data'] = array_merge($ret['data'], $pagesArray);
}
$metadata = $responseData->getMetaData();
if( empty( $metadata['paging']['next'] ) ) {
$paging_flag = false;
}
}
}
}
} else {
//check facebook class is exist or not
$facebook = $this->sap_load_facebook($_SESSION['sap_fb_user_id']);
$ret = $this->facebook->get('/me/accounts/', $this->grantaccessToken->getValue());
$retOrg = $ret;
$ret = $ret->getDecodedBody();
if( !empty( $ret ) && isset($ret['data']) && !empty($ret['paging']['next']) ) {
$paging_flag = true;
$fbEdgeData = $retOrg->getGraphEdge();
while( $paging_flag ) {
$responseData = $this->facebook->next($fbEdgeData);
if( !empty( $responseData ) ) {
$pagesArray = $responseData->asArray();
if( !empty( $pagesArray ) ){
$ret['data'] = array_merge($ret['data'], $pagesArray);
}
$metadata = $responseData->getMetaData();
if( empty( $metadata['paging']['next'] ) ) {
$paging_flag = false;
}
}
}
}
}
} catch (Exception $e) {
return false;
}
return $ret;
}
/**
* Fetching Facebook
*
* Fetching all the Facebook app and secret from database
* Facebook user (site admin).
*
* @package Social auto poster
* @since 1.0.0
*/
public function sap_get_fb_apps( $user_id = '' ) {
//Get facebook options from facebook
$sap_facebook_options = $this->settings->get_user_setting('sap_facebook_options', $user_id);
$fb_apps = array();
$fb_keys = !empty($sap_facebook_options['facebook_keys']) ? $sap_facebook_options['facebook_keys'] : array();
if (!empty($fb_keys)) {
foreach ($fb_keys as $fb_key_id => $fb_key_data) {
if (!empty($fb_key_data['app_id']) && !empty($fb_key_data['app_secret'])) {
$fb_apps[$fb_key_data['app_id']] = $fb_key_data['app_secret'];
}
} // End of for each
} // End of main if
return $fb_apps;
}
/**
* Get Social Auto poster Screen ID
*
* Handles to get social auto poster screen id
*
* @package Social Auto Poster
* @since 1.0.0
*/
public function sap_get_fb_accounts($data_type = false, $user_id = '' ) {
// Taking some defaults
$res_data = array();
// Get stored fb app grant data
$sap_fb_sess_data = $this->settings->get_user_setting('sap_fb_sess_data', $user_id);
if (is_array($sap_fb_sess_data) && !empty($sap_fb_sess_data)) {
foreach ($sap_fb_sess_data as $fb_sess_key => $fb_sess_data) {
$fb_sess_acc = isset($fb_sess_data['sap_fb_user_accounts']['auth_accounts']) ? $fb_sess_data['sap_fb_user_accounts']['auth_accounts'] : array();
$fb_sess_token = isset($fb_sess_data['sap_fb_user_accounts']['auth_tokens']) ? $fb_sess_data['sap_fb_user_accounts']['auth_tokens'] : array();
// Retrives only App Users
if ($data_type == 'all_app_users_with_name ') {
// Loop of account and merging with page id and app key
foreach ($fb_sess_keyacc as $fb_page_id => $fb_page_name) {
$res_data[$fb_sess_key][] = $fb_page_id . '|' . $fb_sess_key;
}
} elseif ($data_type == 'all_app_users_with_name') {
// Loop of account and merging with page id and app key
foreach ($fb_sess_acc as $fb_page_id => $fb_page_name) {
if ($fb_page_id != $fb_sess_key) {
$res_data[$fb_sess_key][$fb_page_id . '|' . $fb_sess_key] = $fb_page_name;
}
}
} elseif ($data_type == 'app_users') {
$res_data[$fb_sess_key] = (!empty($fb_sess_acc) && is_array($fb_sess_acc) ) ? array_keys($fb_sess_acc) : array();
} elseif ($data_type == 'all_auth_tokens') {
// Loop of tokens and merging with page id and app key
foreach ($fb_sess_token as $fb_sess_token_id => $fb_sess_token_data) {
$res_data[$fb_sess_token_id . '|' . $fb_sess_key] = $fb_sess_token_data;
}
} elseif ($data_type == 'auth_tokens') {
// Merging the array
$res_data = $res_data + $fb_sess_token;
} elseif ($data_type == 'all_accounts') {
// Loop of account and merging with page id and app key
foreach ($fb_sess_acc as $fb_page_id => $fb_page_name) {
$res_data[$fb_page_id . '|' . $fb_sess_key] = $fb_page_name;
}
} else {
// Merging the array
$res_data = $res_data + $fb_sess_acc;
}
}
}
return $res_data;
}
/**
* Reset Sessions
*
* Resetting the Facebook sessions when the admin clicks on
* its link within the settings page.
*
* @package Social Auto Poster
* @since 1.0.0
*/
public function sap_fb_reset_session() {
// Check if facebook reset user link is clicked and fb_reset_user is set to 1 and facebook app id is there
if (isset($_GET['fb_reset_user']) && $_GET['fb_reset_user'] == '1' && !empty($_GET['sap_fb_userid'])) {
$fb_app_id = $_GET['sap_fb_userid'];
unset($_SESSION['sap_fb_user_id']);
unset($_SESSION['sap_fb_user_cache']);
unset($_SESSION['sap_fb_user_accounts']);
unset($_SESSION['fb_' . $fb_app_id . '_code']);
unset($_SESSION['fb_' . $fb_app_id . '_access_token']);
unset($_SESSION['fb_' . $fb_app_id . '_user_id']);
unset($_SESSION['fb_' . $fb_app_id . '_state']);
//Getting stored fb app data
$sap_fb_sess_data = $this->settings->get_user_setting('sap_fb_sess_data');
// Getting facebook app users
$app_users = $this->sap_get_fb_accounts('all_app_users');
// Users need to flush from stored data
$reset_app_users = !empty($app_users[$fb_app_id]) ? $app_users[$fb_app_id] : array();
// Unset perticular app value data and update the option
if (isset($sap_fb_sess_data[$fb_app_id])) {
unset($sap_fb_sess_data[$fb_app_id]);
$this->settings->update_user_setting('sap_fb_sess_data', $sap_fb_sess_data);
$this->sap_common->sap_script_logs('Facebook ' . $fb_app_id . ' Account Reset Successfully.');
$_SESSION['sap_active_tab'] = 'facebook';
header("Location:" . SAP_SITE_URL . "/settings/");
exit;
}
}
}
/**
* Post to User Wall on Facebook
*
* Handles to post user wall on facebook
*
* @package Social Auto Poster
* @since 1.0.0
*/
public function sap_fb_post_to_userwall($post_id) {
global $proxy_url, $proxy_pupw;
$postflg = false;
$post = $this->posts->get_post($post_id, true);
$user_id = isset( $post->user_id ) ? $post->user_id : '';
// General setting
$sap_general_options = $this->settings->get_user_setting('sap_general_options',$user_id);
$link_timestamp = isset($sap_general_options['timestamp_link']) ? "?".time() : '';
//Getting facebook options
$sap_fb_options = $this->settings->get_user_setting('sap_facebook_options',$user_id);
//Getting stored fb app data
$sap_fb_sess_data = $this->settings->get_user_setting('sap_fb_sess_data', $user_id);
$global_share_post_type = (!empty($sap_fb_options['share_posting_type']) ) ? $sap_fb_options['share_posting_type'] : 'link_posting';
$sap_fb_posting_type = $global_share_post_type;
// check facebook method for posting
$facebook_auth_options = !empty($sap_fb_options['facebook_auth_options']) ? $sap_fb_options['facebook_auth_options'] : 'graph';
//Facebbok proxy setting
$proxy = array();
if (!empty($sap_fb_options['enable_proxy'])) {
if(!empty($sap_fb_options['proxy_url'])) {
$proxy_url = $sap_fb_options['proxy_url'];
}
if(!empty($sap_fb_options['proxy_username']) && !empty($sap_fb_options['proxy_password'])) {
$proxy_pupw = $sap_fb_options['proxy_username'].":".$sap_fb_options['proxy_password'];
}
}
if (!empty($sap_fb_sess_data)) {
$sap_fb_custom_msg = $this->posts->get_post_meta($post_id, '_sap_fb_post_msg');
$sap_fb_custom_accounts = $this->posts->get_post_meta($post_id, '_sap_fb_post_accounts');
$sap_fb_custom_image = $this->posts->get_post_meta($post_id, '_sap_fb_post_image');
$posting_type = $this->posts->get_post_meta($post_id, '_sap_fb_status');
$fb_image = !empty($sap_fb_options['fb_image']) ? $sap_fb_options['fb_image'] : '';
$sap_facebook_custom_link = $this->posts->get_post_meta($post_id, 'sap_facebook_custom_link');
$post_sap_fb_posting_type = $this->posts->get_post_meta($post_id, '_sap_fb_post_type');
if ( !empty( $post_sap_fb_posting_type ) ) {
$sap_fb_posting_type = $post_sap_fb_posting_type;
}
$sap_fb_user_id = !empty($sap_fb_options['fb_type_post_user']) ? $sap_fb_options['fb_type_post_user'] : '';
// Getting all facebook apps
$fb_apps = $this->sap_get_fb_apps( $user_id );
// Getting all stored facebook access token
$fb_access_token = $this->sap_get_fb_accounts('all_auth_tokens', $user_id);
// Facebook user id on whose wall the post will be posted
$fb_user_ids = '';
//check there is facebook user ids are set and not empty in metabox
if (!empty($sap_fb_custom_accounts)) {
//users from metabox
$fb_user_ids = $sap_fb_custom_accounts;
/**** Backward Compatibility Code Starts **** */
// If user account is selected in meta so creating data accoring to new method ( Will be helpfull when scheduling is done )
if (!empty($fb_user_ids)) {
$fb_first_app_key = !empty($sap_fb_options['facebook_keys'][0]['app_id']) ? $sap_fb_options['facebook_keys'][0]['app_id'] : '';
if (!empty($fb_first_app_key)) {
foreach ($fb_user_ids as $fb_user_key => $fb_user_data) {
if (strpos($fb_user_data, '|') === false) {
$fb_user_ids[$fb_user_key] = $fb_user_data . '|' . $fb_first_app_key;
}
}
}
}
/* * *** Backward Compatibility Code Ends **** */
}
//check facebook user ids are empty in metabox and set in settings page
if (empty($fb_user_ids) && !empty($sap_fb_user_id)) {
//users from settings
$fb_user_ids = $sap_fb_user_id;
} //end if
//convert user ids to single array
$post_to_users = (array) $fb_user_ids;
if (empty($fb_user_ids)) {
$this->flash->setFlash('Facebook user not selected', 'error' ,'',true);
$this->sap_common->sap_script_logs('Facebook error: User not selected for posting.', $user_id);
//return false
return false;
}
$message = !empty($sap_fb_custom_msg) ? $sap_fb_custom_msg : $post->body;
$postlink = !empty($post->share_link) ? $post->share_link : $sap_facebook_custom_link;
if(!empty($postlink)) {
$postlink = $postlink."".$link_timestamp;
}
$customlink = !empty($postlink) ? 'true' : 'false';
$postlink = $this->common->sap_script_short_post_link($postlink,$customlink,'fb','facebook', $user_id);
$message = html_entity_decode(strip_tags($message), ENT_QUOTES);
$posting_log = array();
//check post image is not empty then pass to facebook
if( !empty( $sap_fb_custom_image ) ){
$postimage = $sap_fb_custom_image;
}
elseif( isset($post->img) && $post->img != '0' && $post->img != '' ){
$postimage = $post->img;
}
else {
$postimage = $fb_image;
}
$posting_log['link'] = $postlink;
if (!empty($postimage)) {
$posting_log['image'] = SAP_IMG_URL . $postimage;
}
// facebook post character length limit 63,206 per post
if (!empty($message))
$message = $this->posts->sap_limit_character($message, 63206);
//Post feed
$posting_log['message'] = $message;
//Facebbok app version check and based on send data
if (!empty($sap_fb_options['fb_app_version']) && $sap_fb_options['fb_app_version'] >= 2.9) {
$posting_log = array(
'message' => $message,
'link' => $postlink,
);
}
// if Post Reviews to this Fan Page/Account option is set
if (!empty($post_to_users)) {
// Get facebook account details
$fb_accounts = $this->sap_get_fb_accounts(false, $user_id);
foreach ($post_to_users as $post_to) {
$send = $posting_log;
if (isset($send['name'])) {
unset($send['name']);
}
if ($facebook_auth_options == 'rest') {
if (isset($send['link']) && !empty($send['link'])) {
$send['link'] = urlencode($send['link']);
}
if (!empty($send['message'])) {
$send['message'] = urlencode($send['message']);
}
if (!empty($send['description'])) {
$send['description'] = urlencode($send['description']);
}
if (!empty($send['url'])) {
$send['url'] = urlencode($send['url']);
}
}
$fb_post_app_arr = explode('|', $post_to);
$fb_post_to_id = isset($fb_post_app_arr[0]) ? $fb_post_app_arr[0] : ''; // Facebook Posting account Id
$fb_post_app_id = isset($fb_post_app_arr[1]) ? $fb_post_app_arr[1] : ''; // Facebook App Id
$fb_post_app_sec = isset($fb_apps[$fb_post_app_id]) ? $fb_apps[$fb_post_app_id] : ''; // Facebook App Sec
// Load facebook class
if ($facebook_auth_options == 'graph') {
// Load facebook class
$facebook = $this->sap_load_facebook($fb_post_app_id, $user_id);
} else { // load facebook rest API class
$this->facebook = new Facebook(array(
'app_id' => SAP_NEW_FB_APP_METHOD_ID,
'app_secret' => SAP_NEW_FB_APP_METHOD_SECRET,
'cookie' => true,
'default_graph_version' => SAP_NEW_FB_APP_VERSION,
));
}
// Getting stored facebook app data
$fb_stored_app_data = isset($sap_fb_sess_data[$fb_post_app_id]) ? $sap_fb_sess_data[$fb_post_app_id] : array();
// Get user cache data
$user_cache_data = isset($fb_stored_app_data['sap_fb_user_cache']) ? $fb_stored_app_data['sap_fb_user_cache'] : array();
$posting_account_name = isset($fb_stored_app_data['sap_fb_user_accounts']['auth_accounts'][$fb_post_to_id]) ? $fb_stored_app_data['sap_fb_user_accounts']['auth_accounts'][$fb_post_to_id] : '';
$send['access_token'] = '';
if (isset($fb_access_token[$post_to])) {//check there is access token is set
$send['access_token'] = $fb_access_token[$post_to]; // most imp line
} //end if
//check accesstoken is not empty
if (!empty($send['access_token']) && !empty( $this->facebook ) ) {
$post_method = 'feed';
if ( $sap_fb_posting_type == 'image_posting' && !empty($postimage) && !empty($send['access_token'])) {
if (isset($send['link']))
unset($send['link']);
if (isset($send['actions']))
unset($send['actions']);
if (isset($send['description']))
unset($send['description']);
if (isset($send['name']))
unset($send['name']);
$post_method = 'photos';
$send['url'] = $send['image'];
}
try {
if ($facebook_auth_options == 'graph' || $facebook_auth_options == 'appmethod') {
$this->sap_common->sap_script_logs('Facebook posting begins with ' . $post_method . ' method.', $user_id);
//post to facebook user wall
$ret = $this->facebook->post('/' . $fb_post_to_id . '/' . $post_method . '/', $send, $send['access_token'], SAP_NEW_FB_APP_VERSION);
$response = $ret->getDecodedBody();
//check id is set in response and not empty
if (isset($response['id']) && !empty($response['id'])) {
$postflg = true;
$send['posted'] = 'success';
} else {
$send['posted'] = 'fail';
}
if ($postflg) {
$posting_log['account name'] = $posting_account_name;
$posting_log['link to post'] = 'https://www.facebook.com/' . $fb_post_to_id;
$this->logs->add_log('facebook', $posting_log, $posting_type, $user_id);
}
$this->flash->setFlash('Facebook : Post sucessfully posted on - ' . $posting_account_name, 'success','',true);
$this->sap_common->sap_script_logs('Facebook : Post sucessfully posted on - ' . $posting_account_name, $user_id);
//record logs for facebook data
$this->sap_common->sap_script_logs('Facebook post data : ' . var_export($send, true), $user_id);
}
} catch (Exception $e) {
$message = 'Facebook ' . $posting_account_name . ': ';
$postflg = false;
$this->sap_common->sap_script_logs('Facebook error : ' . $e->getMessage(), $user_id);
$this->flash->setFlash($message . $e->getMessage(), 'error' ,'',true);
} //end catch
} //end if to check accesstoken is not empty
} //end foreach
} //end if to check post_to is not empty
return $postflg;
} else {
$this->flash->setFlash('Facebook grant extended permissions not set.', 'error' ,'',true);
$this->sap_common->sap_script_logs('Facebook grant extended permissions not set.', $user_id);
}
}
/**
* Quick Post On facebook
*
* @package Social Auto Poster
* @since 1.0.0
*/
public function sap_quick_post_on_fb_post($post_id) {
global $global_user_id, $proxy_url, $proxy_pupw;
$postflg = false;
$status_meta_array = array();
$all_fb_users_with_name = array();
$quick_post = $this->quick_posts->get_post($post_id, true);
$video_uploaded = $quick_post->video;
$user_id = isset( $quick_post->user_id ) ? $quick_post->user_id : '';
//Getting facebook options
$sap_fb_options = $this->settings->get_user_setting('sap_facebook_options', $user_id);
//Getting stored fb app data
$sap_fb_sess_data = $this->settings->get_user_setting('sap_fb_sess_data', $user_id);
$global_share_post_type = (!empty($sap_fb_options['share_posting_type']) ) ? $sap_fb_options['share_posting_type'] : 'link_posting';
// check facebook method for posting
$facebook_auth_options = !empty($sap_fb_options['facebook_auth_options']) ? $sap_fb_options['facebook_auth_options'] : 'graph';
// General setting
$sap_general_options = $this->settings->get_user_setting('sap_general_options',$user_id);
$link_timestamp = isset($sap_general_options['timestamp_link']) ? "?".time() : '';
//Facebbok proxy setting
$proxy = array();
if (!empty($sap_fb_options['enable_proxy'])) {
if(!empty($sap_fb_options['proxy_url'])) {
$proxy_url = $sap_fb_options['proxy_url'];
}
if(!empty($sap_fb_options['proxy_username']) && !empty($sap_fb_options['proxy_password'])) {
$proxy_pupw = $sap_fb_options['proxy_username'].":".$sap_fb_options['proxy_password'];
}
}
if (!empty($sap_fb_sess_data)) {
$sap_networks_meta = $this->quick_posts->get_post_meta($post_id, 'sap_networks');
$sap_networks_accounts = !empty($sap_networks_meta['fb_accounts']) ? $sap_networks_meta['fb_accounts'] : array();
$posting_type = $this->posts->get_post_meta($post_id, '_sap_fb_status');
// Getting all facebook apps
$fb_apps = $this->sap_get_fb_apps($user_id);
// Getting all stored facebook access token
$fb_access_token = $this->sap_get_fb_accounts('all_auth_tokens',$user_id);
// Facebook user id on whose wall the post will be posted
$fb_user_ids = '';
//check there is facebook user ids are set and not empty in metabox
if (!empty($sap_networks_accounts)) {
//users from metabox
$fb_user_ids = $sap_networks_accounts;
/* * *** Backward Compatibility Code Starts **** */
// If user account is selected in meta so creating data accoring to new method ( Will be helpfull when scheduling is done )
if (!empty($fb_user_ids)) {
$fb_first_app_key = !empty($sap_fb_options['facebook_keys'][0]['app_id']) ? $sap_fb_options['facebook_keys'][0]['app_id'] : '';
if (!empty($fb_first_app_key)) {
foreach ($fb_user_ids as $fb_user_key => $fb_user_data) {
if (strpos($fb_user_data, '|') === false) {
$fb_user_ids[$fb_user_key] = $fb_user_data . '|' . $fb_first_app_key;
}
}
}
}
/* * *** Backward Compatibility Code Ends **** */
} //end if
//convert user ids to single array
$post_to_users = (array) $fb_user_ids;
$message = html_entity_decode(strip_tags($quick_post->message), ENT_QUOTES);
// facebook post character length limit 63,206 per post
if (!empty($message))
$message = $this->quick_posts->sap_limit_character($message, 63206);
$postlink = !empty($quick_post->share_link) ? $quick_post->share_link: '';
if(!empty($postlink)) {
$postlink = $postlink."".$link_timestamp;
}
$customlink = !empty($postlink) ? 'true' : 'false';
$postlink = $this->common->sap_script_short_post_link($postlink,$customlink,'fb','facebook', $user_id);
$posting_log = array();
//check post image is not empty then pass to facebook
$post_img = !empty($quick_post->image) ? $quick_post->image : $sap_fb_options['fb_image'];
$posting_log['link'] = $postlink;
if (!empty($post_img)) {
$posting_log['image'] = SAP_IMG_URL . $post_img;
}
//Post feed
$posting_log['message'] = $message;
//Facebbok app version check and based on send data
if (!empty($sap_fb_options['fb_app_version']) && $sap_fb_options['fb_app_version'] >= 2.9) {
$posting_log = array(
'message' => $message,
'link' => $postlink,
);
}
$fb_get_users_with_name = $this->sap_get_fb_accounts('all_app_users_with_name',$user_id);
if (!empty($fb_get_users_with_name)) {
foreach ($fb_get_users_with_name as $key => $value) {
if (is_array($value) && !empty($value)) {
foreach ($value as $app_id_key => $user_name_value) {
$all_fb_users_with_name[$app_id_key] = $user_name_value;
}
} else {
$all_fb_users_with_name[$key] = $value;
}
}
}
// if Post Reviews to this Fan Page/Account option is set
if (!empty($post_to_users)) {
// Get facebook account details
$fb_accounts = $this->sap_get_fb_accounts(false, $user_id);
foreach ($post_to_users as $post_to) {
$status_meta_key = isset($all_fb_users_with_name[$post_to]) ? $all_fb_users_with_name[$post_to] : $post_to;
$send = $posting_log;
if (isset($send['name'])) {
unset($send['name']);
}
if ($facebook_auth_options == 'rest') {
if (isset($send['link']) && !empty($send['link'])) {
$send['link'] = urlencode($send['link']);
}
if (!empty($send['message'])) {
$send['message'] = urlencode($send['message']);
}
if (!empty($send['description'])) {
$send['description'] = urlencode($send['description']);
}
}
$fb_post_app_arr = explode('|', $post_to);
$fb_post_to_id = isset($fb_post_app_arr[0]) ? $fb_post_app_arr[0] : ''; // Facebook Posting account Id
$fb_post_app_id = isset($fb_post_app_arr[1]) ? $fb_post_app_arr[1] : ''; // Facebook App Id
$fb_post_app_sec = isset($fb_apps[$fb_post_app_id]) ? $fb_apps[$fb_post_app_id] : ''; // Facebook App Sec
if ($facebook_auth_options == 'graph') {
// Load facebook class
$facebook = $this->sap_load_facebook($fb_post_app_id,$user_id);
} else { // load facebook class while Appmethod
$this->facebook = new Facebook(array(
'app_id' => SAP_NEW_FB_APP_METHOD_ID,
'app_secret' => SAP_NEW_FB_APP_METHOD_SECRET,
'cookie' => true,
'default_graph_version' => SAP_NEW_FB_APP_VERSION,
));
}
// Getting stored facebook app data
$fb_stored_app_data = isset($sap_fb_sess_data[$fb_post_app_id]) ? $sap_fb_sess_data[$fb_post_app_id] : array();
// Get user cache data
$user_cache_data = isset($fb_stored_app_data['sap_fb_user_cache']) ? $fb_stored_app_data['sap_fb_user_cache'] : array();
$posting_account_name = isset($fb_stored_app_data['sap_fb_user_accounts']['auth_accounts'][$fb_post_to_id]) ? $fb_stored_app_data['sap_fb_user_accounts']['auth_accounts'][$fb_post_to_id] : '';
$send['access_token'] = '';
if (isset($fb_access_token[$post_to])) {//check there is access token is set
$send['access_token'] = $fb_access_token[$post_to]; // most imp line
} //end if
//check accesstoken is not empty
if (!empty($send['access_token'])) {
$post_method = 'feed';
if ($global_share_post_type == 'image_posting' && !empty($post_img) && !empty($send['access_token'])) {
if (isset($send['link']))
unset($send['link']);
if (isset($send['actions']))
unset($send['actions']);
if (isset($send['description']))
unset($send['description']);
if (isset($send['name']))
unset($send['name']);
$post_method = 'photos';
$send['url'] = $send['image'];
}
$video_path = SAP_APP_PATH.'uploads/'.$video_uploaded;
if(!empty($video_uploaded) && file_exists($video_path)){
$post_method = 'videos';
$send['description'] = $send['message'];
$send['source'] = $this->facebook->videoToUpload($video_path);
unset($send['message']);
}
try {
if ($facebook_auth_options == 'graph' || $facebook_auth_options == 'appmethod') {
$this->sap_common->sap_script_logs('Facebook posting begins with ' . $post_method . ' method.', $user_id);
//post to facebook user wall
$ret = $this->facebook->post('/' . $fb_post_to_id . '/' . $post_method . '/', $send, $send['access_token'], SAP_NEW_FB_APP_VERSION);
$response = $ret->getDecodedBody();
//check id is set in response and not empty
if (isset($response['id']) && !empty($response['id'])) {
$postflg = true;
$send['posted'] = 'success';
} else {
$send['posted'] = 'fail';
}
if ($postflg) {
$posting_log['account name'] = $posting_account_name;
$posting_log['link to post'] = 'https://www.facebook.com/' . $fb_post_to_id;
$this->logs->add_log('facebook', $posting_log, $posting_type, $user_id);
$this->quick_posts->update_post_meta($post_id, "sap_fb_link_to_post", $posting_log['link to post'] );
}
$this->flash->setFlash('Facebook : Post sucessfully posted on - ' . $posting_account_name, 'success','',true);
$this->sap_common->sap_script_logs('Facebook : Post sucessfully posted on - ' . $posting_account_name, $user_id);
$this->sap_common->sap_script_logs('Facebook post data : ' . var_export($send, true), $user_id);
$status_meta_array[$status_meta_key] = array(
"status" => 'success'
);
}
} catch (Exception $e) {
$message = 'Facebook ' . $posting_account_name . ': ';
$this->sap_common->sap_script_logs('Facebook error : ' . $e->getMessage(), $user_id);
$postflg = false;
$this->flash->setFlash($message . $e->getMessage(), 'error','',true);
$status_meta_array[$status_meta_key] = array(
"status" => 'error',
"message" => $e->getMessage()
);
} //end catch
} //end if to check accesstoken is not empty
} //end foreach
$this->quick_posts->update_post_meta($post_id, "sap_fb_posting_error", $status_meta_array);
} //end if to check post_to is not empty
return $postflg;
} else {
$this->flash->setFlash('Facebook grant extended permissions not set.', 'error','',true);
$this->sap_common->sap_script_logs('Facebook grant extended permissions not set.', $user_id);
$status_meta_array[] = array(
"status" => 'error',
"message" => 'Facebook grant extended permissions not set.'
);
$this->quick_posts->update_post_meta($post_id, "sap_fb_posting_error", $status_meta_array);
}
}
/**
* FB get json response
*
* @package Social Auto Poster
* @since 1.0.0
*/
public function SAP_getFbJsonResponse($rawResponse) {
if ($rawResponse === FALSE) {
$this->error = $this->facebook->getError();
return FALSE;
}
$res = json_decode($rawResponse->getBody());
if (isset($res->error)) {
$this->error = $res->error->message;
if (isset($res->error->error_user_title)) {
$this->error .= "\nError Details : " . $res->error->error_user_title;
}
if (isset($res->error->error_user_msg)) {
$this->error .= " : " . $res->error->error_user_msg;
}
return false;
}
return $res;
}
}