Sindbad~EG File Manager
<?php
if (!defined('ABSPATH'))
exit;
include_once ( plugin_dir_path(__FILE__) . 'vendor/autoload.php' );
class wpfgsc_googlesheet {
private $token;
private $spreadsheet;
private $worksheet;
//const redirect = 'urn:ietf:wg:oauth:2.0:oob';
/////=========desktop app
// const clientId_desk = '1075324102277-drjc21uouvq2d0l7hlgv3bmm67er90mc.apps.googleusercontent.com';
//const clientSecret_desk = 'RFM9hElCqJMsXyc8YNjhf9Zs';
/////=========web app
// const clientId_web = '1075324102277-mdac3ljkp964kie3usoc8qj28laen2tb.apps.googleusercontent.com';
// const clientSecret_web = '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';
/////=========desktop app
const clientId_desk = '343006833383-c73msaal124n0psi2fqb5q30u8j2p495.apps.googleusercontent.com';
const clientSecret_desk = 'k5ThyeLrjEZi0wOhqHhKoWdq';
/////=========web app
const clientId_web = '343006833383-ajjmvck7167u5omiu6kflkmpd7455mo3.apps.googleusercontent.com';
const clientSecret_web = 'wjSapQopzEaql23EbFNF1Bjk';
private static $instance;
public function __construct() {
}
public static function setInstance(Google_Client $instance = null) {
self::$instance = $instance;
}
public static function getInstance() {
if (is_null(self::$instance)) {
throw new LogicException("Invalid Client");
}
return self::$instance;
}
//constructed on call
public static function preauth($access_code) {
$newClientSecret = get_option('is_new_client_secret_wpformsgsc');
$clientId = ($newClientSecret == 1) ? wpfgsc_googlesheet::clientId_web : wpfgsc_googlesheet::clientId_desk;
$clientSecret = ($newClientSecret == 1) ? wpfgsc_googlesheet::clientSecret_web : wpfgsc_googlesheet::clientSecret_desk;
$client = new Google_Client();
$client->setClientId($clientId);
$client->setClientSecret($clientSecret);
$client->setRedirectUri('https://oauth.gsheetconnector.com');
//$client->setRedirectUri(wpfgsc_googlesheet::redirect);
$client->setScopes(Google_Service_Sheets::SPREADSHEETS);
$client->setScopes(Google_Service_Drive::DRIVE_METADATA_READONLY);
$client->setAccessType('offline');
$client->fetchAccessTokenWithAuthCode($access_code);
$tokenData = $client->getAccessToken();
wpfgsc_googlesheet::updateToken($tokenData);
}
public static function updateToken($tokenData) {
$expires_in = isset($tokenData['expires_in']) ? intval($tokenData['expires_in']) : 0;
$tokenData['expire'] = time() + $expires_in;
try {
if(isset($tokenData['scope'])){
$permission = explode(" ", $tokenData['scope']);
if((in_array("https://www.googleapis.com/auth/drive.metadata.readonly",$permission)) && (in_array("https://www.googleapis.com/auth/spreadsheets",$permission))) {
update_option('wpform_gs_verify', 'valid');
}else{
update_option('wpform_gs_verify', 'invalid-auth');
}
}
$tokenJson = json_encode($tokenData);
update_option('wpform_gs_token', $tokenJson);
} catch (Exception $e) {
Wpform_gs_Connector_Utility::gs_debug_log("Token write fail! - " . $e->getMessage());
}
}
public function auth() {
$tokenData = json_decode(get_option('wpform_gs_token'), true);
if (!isset($tokenData['refresh_token']) || empty($tokenData['refresh_token'])) {
throw new LogicException("Auth, Invalid OAuth2 access token");
exit();
}
try {
$newClientSecret = get_option('is_new_client_secret_wpformsgsc');
$clientId = ($newClientSecret == 1) ? wpfgsc_googlesheet::clientId_web : wpfgsc_googlesheet::clientId_desk;
$clientSecret = ($newClientSecret == 1) ? wpfgsc_googlesheet::clientSecret_web : wpfgsc_googlesheet::clientSecret_desk;
$client = new Google_Client();
$client->setClientId($clientId);
$client->setClientSecret($clientSecret);
$client->setScopes(Google_Service_Sheets::SPREADSHEETS);
$client->setScopes(Google_Service_Drive::DRIVE_METADATA_READONLY);
// $client->setScopes(Google_Service_Oauth2::USERINFO_EMAIL);
$client->refreshToken($tokenData['refresh_token']);
$client->setAccessType('offline');
wpfgsc_googlesheet::updateToken($tokenData);
self::setInstance($client);
} catch (Exception $e) {
throw new LogicException("Auth, Error fetching OAuth2 access token, message: " . $e->getMessage());
exit();
}
}
//preg_match is a key of error handle in this case
public function setSpreadsheetId($id) {
$this->spreadsheet = $id;
}
public function getSpreadsheetId() {
return $this->spreadsheet;
}
public function setWorkTabId($id) {
$this->worksheet = $id;
}
public function getWorkTabId() {
return $this->worksheet;
}
public function add_row( $data ) {
try {
$client = self::getInstance();
$service = new Google_Service_Sheets($client);
$spreadsheetId = $this->getSpreadsheetId();
$work_sheets = $service->spreadsheets->get($spreadsheetId);
if (!empty($work_sheets) && !empty($data)) {
foreach ($work_sheets as $sheet) {
$properties = $sheet->getProperties();
$sheet_id = $properties->getSheetId();
$worksheet_id = $this->getWorkTabId();
if ($sheet_id == $worksheet_id) {
$worksheet_id = $properties->getTitle();
$worksheetCell = $service->spreadsheets_values->get($spreadsheetId, $worksheet_id . "!1:1");
$insert_data = array();
if (isset($worksheetCell->values[0])) {
$insert_data_index = 0;
foreach ($worksheetCell->values[0] as $k => $name) {
if ($insert_data_index == 0) {
if (isset($data[$name]) && $data[$name] != '') {
$insert_data[] = $data[$name];
} else {
$insert_data[] = '';
}
} else {
if (isset($data[$name]) && $data[$name] != '') {
$insert_data[] = $data[$name];
} else {
$insert_data[] = '';
}
}
$insert_data_index++;
}
}
$range_new = $worksheet_id;
// Create the value range Object
$valueRange = new Google_Service_Sheets_ValueRange();
// set values of inserted data
$valueRange->setValues(["values" => $insert_data]);
// Add two values
// Then you need to add configuration
$conf = ["valueInputOption" => "USER_ENTERED"];
// append the spreadsheet(add new row in the sheet)
$result = $service->spreadsheets_values->append($spreadsheetId, $range_new, $valueRange, $conf);
}
}
}
} catch (Exception $e) {
return null;
exit();
}
}
//get all the spreadsheets
public function get_spreadsheets() {
$all_sheets = array();
try {
$client = self::getInstance();
$service = new Google_Service_Drive($client);
$optParams = array(
'q' => "mimeType='application/vnd.google-apps.spreadsheet'"
);
$results = $service->files->listFiles($optParams);
foreach ($results->files as $spreadsheet) {
if (isset($spreadsheet['kind']) && $spreadsheet['kind'] == 'drive#file') {
$all_sheets[] = array(
'id' => $spreadsheet['id'],
'title' => $spreadsheet['name'],
);
}
}
} catch (Exception $e) {
return null;
exit();
}
return $all_sheets;
}
//get worksheets title
public function get_worktabs($spreadsheet_id) {
$work_tabs_list = array();
try {
$client = self::getInstance();
$service = new Google_Service_Sheets($client);
$work_sheets = $service->spreadsheets->get($spreadsheet_id);
foreach ($work_sheets as $sheet) {
$properties = $sheet->getProperties();
$work_tabs_list[] = array(
'id' => $properties->getSheetId(),
'title' => $properties->getTitle(),
);
}
} catch (Exception $e) {
return null;
exit();
}
return $work_tabs_list;
}
/*******************************************************************************/
/******************************** VERSION 3.1 *********************************/
/*******************************************************************************/
/**
* GFGSC_googlesheet::get_sheet_name
* get WorkSheet Name
* @since 3.1
* @param string $spreadsheet_id
* @param string $tab_id
* @retun string $tab_name
**/
public function get_sheet_name( $spreadsheet_id, $tab_id ) {
$all_sheet_data = get_option( 'wpforms_gs_sheetId' );
$tab_name = "";
foreach( $all_sheet_data as $spreadsheet ) {
if( $spreadsheet['id'] == $spreadsheet_id ) {
$tabs = $spreadsheet['tabId'];
foreach( $tabs as $name => $id ) {
if( $id == $tab_id ) {
$tab_name = $name;
}
}
}
}
return $tab_name;
}
/**
* GFGSC_googlesheet::get_sheet_name
* get SpreadSheet Name
* @since 3.1
* @param string $spreadsheet_id
* @retun string $spreadsheetName
**/
public function get_spreadsheet_name( $spreadsheet_id ) {
$all_sheet_data = get_option( 'wpforms_gs_sheetId' );
$spreadsheetName = "";
foreach( $all_sheet_data as $spreadsheet_name => $spreadsheet ) {
if( $spreadsheet['id'] == $spreadsheet_id ) {
$spreadsheetName = $spreadsheet_name;
}
}
return $spreadsheetName;
}
/**
* GFGSC_googlesheet::get_header_row
* Send row data to sheet
* @since 3.1
* @param string $spreadsheet_id
* @param string $tab_id
* @retun array $header_cells
**/
public function get_header_row( $spreadsheet_id, $tab_id ) {
$header_cells = array();
try {
$client = $this->getInstance();
if( ! $client ) {
return false;
}
$service = new Google_Service_Sheets($client);
$work_sheets = $service->spreadsheets->get($spreadsheet_id);
if( $work_sheets ) {
foreach ($work_sheets as $sheet) {
$properties = $sheet->getProperties();
$work_sheet_id = $properties->getSheetId();
if( $work_sheet_id == $tab_id ) {
$tab_title = $properties->getTitle();
$header_row = $service->spreadsheets_values->get($spreadsheet_id, $tab_title . "!1:1");
$header_row_values = $header_row->getValues();
if( isset( $header_row_values[0] ) && $header_row_values[0] ) {
$header_cells = $header_row_values[0];
}
}
}
}
}
catch (Exception $e) {
//echo $e->getMessage();
$header_cells = array();
return $header_cells;
}
return $header_cells;
}
/**
* GFGSC_googlesheet::hex_color_to_google_rgb
* Function to convert hex to rgb for google
* @since 3.1
* @param string $hex
* @retun array $rgba
**/
function hex_color_to_google_rgb($hex) {
$rgb_return = array();
$hex = str_replace('#', '', $hex);
$length = strlen($hex);
$rgb['red'] = hexdec($length == 6 ? substr($hex, 0, 2) : ($length == 3 ? str_repeat(substr($hex, 0, 1), 2) : 0));
$rgb['green'] = hexdec($length == 6 ? substr($hex, 2, 2) : ($length == 3 ? str_repeat(substr($hex, 1, 1), 2) : 0));
$rgb['blue'] = hexdec($length == 6 ? substr($hex, 4, 2) : ($length == 3 ? str_repeat(substr($hex, 2, 1), 2) : 0));
foreach( $rgb as $key => $clr ) {
$rgb_return[$key] = $clr / 255;
}
return $rgb_return;
}
/**
* GFGSC_googlesheet::sync_with_google_account
* Fetch Spreadsheets
* @since 3.1
**/
public function sync_with_google_account() {
return;
$return_ajax = false;
if ( isset( $_POST['isajax'] ) && $_POST['isajax'] == 'yes' ) {
check_ajax_referer( 'gf-ajax-nonce', 'security' );
$init = sanitize_text_field( $_POST['isinit'] );
$return_ajax = true;
}
include_once( GS_CONNECTOR_PRO_ROOT . '/lib/google-sheets.php');
$worksheet_array = array();
$sheetdata = array();
$doc = new GFGSC_googlesheet();
$doc->auth();
$spreadsheetFeed = $doc->get_spreadsheets();
if( ! $spreadsheetFeed ) {
return false;
}
foreach ( $spreadsheetFeed as $sheetfeeds ) {
$sheetId = $sheetfeeds['id'];
$sheetname = $sheetfeeds['title'];
$worksheetFeed = $doc->get_worktabs( $sheetId );
foreach ( $worksheetFeed as $worksheet ) {
$tab_id = $worksheet['id'];
$tab_name = $worksheet['title'];
$worksheet_array[] = $tab_name;
$worksheet_ids[$tab_name] = $tab_id;
}
$sheetId_array[$sheetname] = array(
"id" => $sheetId,
"tabId" => $worksheet_ids
);
unset( $worksheet_ids );
$sheetdata[$sheetname] = $worksheet_array;
unset( $worksheet_array );
}
update_option( 'wpforms_gs_sheetId', $sheetId_array );
update_option( 'gfgs_feeds', $sheetdata );
if ( $return_ajax == true ) {
if ( $init == 'yes' ) {
wp_send_json_success( array( "success" => 'yes' ) );
}
else {
wp_send_json_success( array( "success" => 'no' ) );
}
}
}
/**
* GFGSC_googlesheet::gsheet_get_google_account
* Get Google Account
* @since 3.1
* @retun $user
**/
public function gsheet_get_google_account() {
try {
$client = $this->getInstance();
if( ! $client ) {
return false;
}
$service = new Google_Service_Oauth2($client);
$user = $service->userinfo->get();
}
catch (Exception $e) {
Wpform_gs_Connector_Utility::gs_debug_log( __METHOD__ . " Error in fetching user info: \n " . $e->getMessage() );
return false;
}
return $user;
}
/**
* GFGSC_googlesheet::gsheet_get_google_account_email
* Get Google Account Email
* @since 3.1
* @retun string $email
**/
public function gsheet_get_google_account_email() {
$google_account = $this->gsheet_get_google_account();
if( $google_account ) {
return $google_account->email;
}
else {
return "";
}
}
/**
* GFGSC_googlesheet::gsheet_print_google_account_email
* Get Google Account Email
* @since 3.1
* @retun string $google_account
**/
public function gsheet_print_google_account_email() {
try{
$google_account = get_option("wpgs_email_account");
$google_sheet = new wpfgsc_googlesheet();
$google_sheet->auth();
$email = $google_sheet->gsheet_get_google_account_email();
update_option("wpgs_email_account", $email);
return $email;
}catch(Exception $e){
return false;
}
}
/**
* Generate token for the user and refresh the token if it's expired.
*
* @return array
*/
public static function getClient_auth( $flag = 0, $gscwpforms_clientId='', $gscwpforms_clientSecert=''){
$gscwpforms_client = new Google_Client();
$gscwpforms_client->setApplicationName('Manage wpforms Forms with Google Spreadsheet');
$gscwpforms_client->setScopes(Google_Service_Sheets::SPREADSHEETS_READONLY);
$gscwpforms_client->setScopes(Google_Service_Drive::DRIVE_METADATA_READONLY);
$gscwpforms_client->addScope(Google_Service_Sheets::SPREADSHEETS);
$gscwpforms_client->addScope( 'https://www.googleapis.com/auth/userinfo.email' );
//$gscwpforms_client->addScope( 'https://www.googleapis.com/auth/userinfo.profile' );
$gscwpforms_client->setClientId($gscwpforms_clientId);
$gscwpforms_client->setClientSecret($gscwpforms_clientSecert);
$gscwpforms_client->setRedirectUri( esc_html( admin_url( 'admin.php?page=wpform-google-sheet-config' ) ) );
$gscwpforms_client->setAccessType('offline');
$gscwpforms_client->setApprovalPrompt('force');
try{
if(empty( $gscwpforms_auth_token )){
$gscwpforms_auth_url = $gscwpforms_client->createAuthUrl();
return $gscwpforms_auth_url;
}
if ( !empty( $gscwpforms_gscwpforms_accessToken ) ) {
$gscwpforms_accessToken = json_decode($gscwpforms_gscwpforms_accessToken, true);
} else {
if ( empty( $gscwpforms_auth_token ) ) {
$gscwpforms_auth_url = $gscwpforms_client->createAuthUrl();
return $gscwpforms_auth_url;
}
}
$gscwpforms_client->setAccessToken( $gscwpforms_accessToken );
// Refresh the token if it's expired.
if ($gscwpforms_client->isAccessTokenExpired()) {
// save refresh token to some variable
$gscwpforms_refreshTokenSaved = $gscwpforms_client->getRefreshToken();
$gscwpforms_client->fetchAccessTokenWithRefreshToken($gscwpforms_client->getRefreshToken());
// pass access token to some variable
$gscwpforms_accessTokenUpdated = $gscwpforms_client->getAccessToken();
// append refresh token
$gscwpforms_accessTokenUpdated['refresh_token'] = $gscwpforms_refreshTokenSaved;
//Set the new acces token
$gscwpforms_accessToken = $gscwpforms_refreshTokenSaved;
gscwpforms::gscwpforms_update_option('wpformssheets_google_accessToken', json_encode( $gscwpforms_accessTokenUpdated ) );
$gscwpforms_accessToken = json_decode( json_encode( $gscwpforms_accessTokenUpdated ), true);
$gscwpforms_client->setAccessToken($gscwpforms_accessToken);
}
}catch( Exception $e ){
if( $flag ){
return $e->getMessage();
}else{
return false;
}
}
return $gscwpforms_client;
}
public static function revokeToken_auto($access_code){
$newClientSecret = get_option('is_new_client_secret_wpformsgsc');
$clientId = ($newClientSecret == 1) ? wpfgsc_googlesheet::clientId_web : wpfgsc_googlesheet::clientId_desk;
$clientSecret = ($newClientSecret == 1) ? wpfgsc_googlesheet::clientSecret_web : wpfgsc_googlesheet::clientSecret_desk;
$client = new Google_Client();
$client->setClientId( $clientId );
$client->setClientSecret( $clientSecret );
$tokendecode = json_decode($access_code);
$token = $tokendecode->access_token;
$client->revokeToken( $token );
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists