You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
cosmopet.ae/wp-content/plugins copy 2/contactsheets-lite/includes/class-wpsslc-google-api-fun...

619 lines
17 KiB

<?php
/**
* Main ContactsheetsLite\WPSSLC_Google_API namespace.
*
* @since 1.0.0
* @package contactsheets-lite
*/
namespace ContactsheetsLite;
/**
* WPSSLC Google API Method Class
*
* @since 1.0.0
*/
class WPSSLC_Google_API_Functions extends \WPSSLC_Google_API {
/**
* Google Sheet Object
*
* @var object
* @since 1.0.0
*/
private static $instance_service = null;
/**
* Google Drive Object
*
* @var object
* @since 1.0.0
*/
private static $instance_drive = null;
/**
* Primary class constructor.
*
* @since 1.0.0
*/
public function __construct() {
if ( self::checkcredenatials() ) {
self::loadobject();
}
}
/**
* Load Google API Library.
*
* @since 1.0.0
*/
public function loadobject() {
self::$instance_service = self::get_client_object();
self::$instance_drive = self::get_drive_object();
}
/**
* Include Google API Library.
*
* @since 1.0.0
*/
public function wpsslc_load_library() {
if ( ! function_exists( 'composerRequired7e59b00b8fddc8385312f117ab4f39c' ) ) {
require_once WPSSLC_DIR . 'lib/vendor/autoload.php';
}
}
/**
* Generate Google Sheet Object.
*
* @since 1.0.0
*/
public function get_client_object() {
if ( null === self::$instance_service ) {
$client = self::getClient();
self::$instance_service = new \Google_Service_Sheets( $client );
}
return self::$instance_service;
}
/**
* Regenerate Google Sheet Object.
*
* @since 1.0.0
*/
public function refreshobject() {
self::$instance_service = null;
self::get_client_object();
}
/**
* Regenerate Google Drive Object.
*
* @since 1.0.0
*/
public function get_drive_object() {
if ( null === self::$instance_drive ) {
$client = self::getClient();
self::$instance_drive = new \Google_Service_Drive( $client );
}
return self::$instance_drive;
}
/**
* Check Google Credenatials.
*
* @since 1.0.0
*/
public function checkcredenatials() {
$wpsslc_google_settings_value = self::wpsslc_option( 'wpssc_google_settings' );
$clientid = isset( $wpsslc_google_settings_value[0] ) ? $wpsslc_google_settings_value[0] : '';
$clientsecert = isset( $wpsslc_google_settings_value[1] ) ? $wpsslc_google_settings_value[1] : '';
$auth_token = isset( $wpsslc_google_settings_value[2] ) ? $wpsslc_google_settings_value[2] : '';
if ( empty( $clientid ) || empty( $clientsecert ) || empty( $auth_token ) ) {
return false;
} else {
try {
if ( self::getClient() ) {
return true;
} else {
return false;
}
} catch ( Exception $e ) {
return false;
}
}
}
/**
* Get meta vlaue.
*
* @param object $key plugin meta key.
* @param string $type boolean value.
* @param int $form_id .
*/
public static function wpsslc_option( $key = '', $type = '', $form_id = '' ) {
$value = '';
$wpsslc_old_keys = self::wpsslc_old_option_keys();
$wpsslc_old_post_keys = self::wpsslc_old_post_option_keys();
$postmetas = get_post_meta( $form_id );
$wpsslc_oldmeta_keys = array_keys( $wpsslc_old_keys );
if ( in_array( $key, $wpsslc_oldmeta_keys, true ) ) {
self::wpsslc_database_update();
}
if ( array_key_exists( $key, $wpsslc_old_keys ) ) {
$value = parent::wpsslc_option( $key, $type );
}
if ( ! empty( $form_id ) && array_key_exists( $key, $wpsslc_old_post_keys ) && isset( $postmetas[ $key ] ) ) {
$value = get_post_meta( $form_id, $key );
} elseif ( ! empty( $form_id ) && isset( $postmetas[ $wpsslc_old_post_keys[ $key ] ] ) ) {
$value = get_post_meta( $form_id, $wpsslc_old_post_keys[ $key ] );
}
return $value;
}
/**
* Update meta value.
*
* @param object $key plugin meta key.
* @param string $value plugin meta value.
*/
public static function wpsslc_update_option( $key = '', $value = '' ) {
$wpsslc_old_keys = self::wpsslc_old_option_keys();
$wpsslc_oldmeta_keys = array_keys( $wpsslc_old_keys );
if ( in_array( $key, $wpsslc_oldmeta_keys, true ) ) {
self::wpsslc_database_update();
}
$value = parent::wpsslc_update_option( $key, $value );
return $value;
}
/**
* Update database.
*/
public static function wpsslc_database_update() {
$wpsslc_is_updated = self::wpsslc_option( 'wpssc_database_updated' );
$wpsslc_old_keys = self::wpsslc_old_option_keys();
global $wpdb;
if ( 'yes' !== $wpsslc_is_updated ) {
$table_name = $wpdb->prefix;
$table_name = $table_name . 'options';
foreach ( $wpsslc_old_keys as $newkey => $oldkey ) {
// @codingStandardsIgnoreStart
$sql = $wpdb->prepare( "UPDATE `$table_name` SET `option_name`=%s WHERE `option_name`=%s", $newkey, $oldkey ); // db call ok.
$result = $wpdb->get_results( $sql );
// @codingStandardsIgnoreEnd
}
self::wpsslc_update_option( 'wpssc_database_updated', 'yes' );
}
}
/**
* Return old option keys.
*
* @return array
*/
public static function wpsslc_old_option_keys() {
return array(
'wpssc_google_settings' => 'advc_cf_google_settings',
'wpssc_google_accessToken' => 'contactsheets_google_accessToken',
);
}
/**
* Return old post meta option keys.
*
* @return array
*/
public static function wpsslc_old_post_option_keys() {
return array(
'wpssc_cf_settings' => 'advc_cf_settings',
'wpssc_active_headers' => 'contactsheets_active_headers',
);
}
/**
* Generate token for the user and refresh the token if it's expired.
*
* @param int $flag for getting error code.
* @return array
*/
public function getClient( $flag = 0 ) {
$this->wpsslc_load_library();
$wpsslc_google_settings_value = self::wpsslc_option( 'wpssc_google_settings' );
$clientid = isset( $wpsslc_google_settings_value[0] ) ? $wpsslc_google_settings_value[0] : '';
$clientsecert = isset( $wpsslc_google_settings_value[1] ) ? $wpsslc_google_settings_value[1] : '';
$auth_token = isset( $wpsslc_google_settings_value[2] ) ? $wpsslc_google_settings_value[2] : '';
$client = new \Google_Client();
$client->setApplicationName( 'WPSyncSheets Lite For Contact Form 7 - Contact Form 7 Google Spreadsheet Addon' );
$client->setScopes( \Google_Service_Sheets::SPREADSHEETS_READONLY );
$client->setScopes( \Google_Service_Drive::DRIVE_METADATA_READONLY );
$client->addScope( \Google_Service_Sheets::SPREADSHEETS );
$client->setClientId( $clientid );
$client->setClientSecret( $clientsecert );
$client->setRedirectUri( esc_html( admin_url( 'admin.php?page=wpsyncsheets-contact-form-7' ) ) );
$client->setAccessType( 'offline' );
$client->setApprovalPrompt( 'force' );
// Load previously authorized credentials from a database.
try {
if ( empty( $auth_token ) ) {
$auth_url = $client->createAuthUrl();
return $auth_url;
}
$wpsslc_accesstoken = self::wpsslc_option( 'wpssc_google_accessToken' );
if ( ! empty( $wpsslc_accesstoken ) ) {
$accesstoken = json_decode( $wpsslc_accesstoken, true );
} else {
if ( empty( $auth_token ) ) {
$auth_url = $client->createAuthUrl();
return $auth_url;
} else {
$authcode = trim( $auth_token );
// Exchange authorization code for an access token.
$accesstoken = $client->fetchAccessTokenWithAuthCode( $authcode );
// Store the credentials to disk.
parent::wpsslc_update_option( 'wpssc_google_accessToken', wp_json_encode( $accesstoken ) );
}
}
// Check for invalid token.
if ( is_array( $accesstoken ) && isset( $accesstoken['error'] ) && ! empty( $accesstoken['error'] ) ) {
if ( $flag ) {
return $accesstoken['error'];
}
return false;
}
$client->setAccessToken( $accesstoken );
// Refresh the token if it's expired.
if ( $client->isAccessTokenExpired() ) {
// save refresh token to some variable.
$refreshtokensaved = $client->getRefreshToken();
$client->fetchAccessTokenWithRefreshToken( $client->getRefreshToken() );
// pass access token to some variable.
$accesstokenupdated = $client->getAccessToken();
// append refresh token.
$accesstokenupdated['refresh_token'] = $refreshtokensaved;
// Set the new acces token.
$accesstoken = $refreshtokensaved;
parent::wpsslc_update_option( 'wpssc_google_accessToken', wp_json_encode( $accesstokenupdated ) );
$accesstoken = json_decode( wp_json_encode( $accesstokenupdated ), true );
$client->setAccessToken( $accesstoken );
}
} catch ( Exception $e ) {
if ( $flag ) {
return $e->getMessage();
} else {
return false;
}
}
return $client;
}
/**
* Fetch Spreadsheet list from Google Drive.
*
* @param array $sheetarray Spreadsheet array.
* @since 1.0.0
*
* @return array.
*/
public function get_spreadsheet_listing( $sheetarray = array() ) {
$opt_params = array(
'fields' => 'nextPageToken, files(id, name, mimeType)',
'q' => "mimeType='application/vnd.google-apps.spreadsheet' and trashed = false",
);
$results = self::$instance_drive->files->listFiles( $opt_params );
if ( count( $results->getFiles() ) === 0 ) {
$sheetarray['new'] = __( 'Create New', 'wpssc' );
} else {
foreach ( $results->getFiles() as $file ) {
$sheetarray[ $file->getId() ] = $file->getName();
}
$sheetarray['new'] = __( 'Create New Spreadsheet', 'wpssc' );
}
return $sheetarray;
}
/**
* Retrieve the list of sheets from the Google Spreadsheet.
*
* @param string $spreadsheetid Spreadsheet id.
* @since 1.0.0
*
* @return object.
*/
public function get_sheet_listing( $spreadsheetid = '' ) {
self::refreshobject();
return parent::get_sheets( self::$instance_service, $spreadsheetid );
}
/**
* Fetch row from Google Sheet.
*
* @param array $spreadsheetid Spreadsheet ID.
* @param array $sheetname Sheet Name.
* @since 1.0.0
*
* @return object.
*/
public function get_row_list( $spreadsheetid, $sheetname ) {
self::refreshobject();
$param = array();
$param['spreadsheetid'] = trim( $spreadsheetid );
$param['sheetname'] = trim( $sheetname );
return parent::get_values( self::$instance_service, $param );
}
/**
* Create sheet array.
*
* @param object $response_object google sheet object.
* @since 1.0.0
*
* @return array.
*/
public function get_sheet_list( $response_object ) {
$sheets = array();
foreach ( $response_object->getSheets() as $key => $value ) {
$sheets[ $value['properties']['title'] ] = $value['properties']['sheetId'];
}
return $sheets;
}
/**
* Create insertDimension Object.
*
* @param array $param contains sheetid,startindex,endindex.
* @since 1.0.0
*
* @return object.
*/
public function insertdimensionobject( $param = array() ) {
$requests = new \Google_Service_Sheets_Request(
array(
'insertDimension' => array(
'range' => array(
'sheetId' => $param['sheetid'],
'dimension' => 'ROWS',
'startIndex' => $param['startindex'],
'endIndex' => $param['endindex'],
),
),
)
);
$batchupdaterequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest(
array(
'requests' => $requests,
)
);
return $batchupdaterequest;
}
/**
* Create moveDimension Object.
*
* @param array $param contains sheetid,startindex,endindex,destinationIndex.
* @since 1.0.0
*
* @return object.
*/
public function moveDimensionrequests( $param = array() ) {
$requests = new \Google_Service_Sheets_Request(
array(
'moveDimension' => array(
'source' => array(
'dimension' => 'COLUMNS',
'sheetId' => $param['sheetid'],
'startIndex' => $param['startindex'],
'endIndex' => $param['endindex'],
),
'destinationIndex' => $param['destindex'],
),
)
);
return $requests;
}
/**
* Create deleteDimension Object.
*
* @param array $param contains sheetid,startindex,endindex.
* @since 1.0.0
*
* @return object.
*/
public function deleteDimensionrequests( $param = array() ) {
$requests = new \Google_Service_Sheets_Request(
array(
'deleteDimension' => array(
'range' => array(
'sheetId' => $param['sheetid'],
'dimension' => 'COLUMNS',
'startIndex' => $param['startindex'],
'endIndex' => $param['endindex'],
),
),
)
);
return $requests;
}
/**
* Create insertDimension Object.
*
* @param array $param contains sheetid,startindex,endindex.
* @since 1.0.0
*
* @return object.
*/
public function insertdimensionrequests( $param = array() ) {
$requests = new \Google_Service_Sheets_Request(
array(
'insertDimension' => array(
'range' => array(
'sheetId' => $param['sheetid'],
'dimension' => 'COLUMNS',
'startIndex' => $param['startindex'],
'endIndex' => $param['endindex'],
),
),
)
);
return $requests;
}
/**
* Update batch requests.
*
* @param array $param contains requests.
* @since 1.0.0
*
* @return object.
*/
public function updatebachrequests( $param = array() ) {
$batchupdaterequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest(
array(
'requests' => $param['requestarray'],
)
);
$requestobject['spreadsheetid'] = $param['spreadsheetid'];
$requestobject['requestbody'] = $batchupdaterequest;
return parent::batchupdate( self::$instance_service, $requestobject );
}
/**
* Freeze Row Object
*
* @param int $sheetid Sheet ID.
* @param int $wpsslc_freeze 0 - Unfreeze Row, 1 - Freeze Row.
* @since 1.0.0
*
* @return object.
*/
public function freezeobject( $sheetid = 0, $wpsslc_freeze = 0 ) {
$requestbody = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest(
array(
'requests' => array(
'updateSheetProperties' => array(
'properties' => array(
'sheetId' => $sheetid,
'gridProperties' => array(
'frozenRowCount' => $wpsslc_freeze,
),
),
'fields' => 'gridProperties.frozenRowCount',
),
),
)
);
return $requestbody;
}
/**
* Google_Service_Sheets_Spreadsheet Object
*
* @param string $spreadsheetname Spreadsheet Name.
* @param string $sheetname Sheet Name.
* @since 1.0.0
*
* @return object.
*/
public function newspreadsheetobject( $spreadsheetname = '', $sheetname = '' ) {
$requestbody = new \Google_Service_Sheets_Spreadsheet(
array(
'properties' => array(
'title' => $spreadsheetname,
),
'sheets' => array(
'properties' => array(
'title' => $sheetname,
),
),
)
);
return $requestbody;
}
/**
* Prepare parameter array.
*
* @param string $spreadsheetid Spreadsheet Name.
* @param string $range Sheet Name.
* @param array $requestbody requestbody param.
* @param array $params array.
* @since 1.0.0
*
* @return array.
*/
public function setparamater( $spreadsheetid = '', $range = '', $requestbody = array(), $params = array() ) {
$param = array();
$param['spreadsheetid'] = $spreadsheetid;
$param['range'] = $range;
$param['requestbody'] = $requestbody;
$param['params'] = $params;
return $param;
}
/**
* Create Google_Service_Sheets_ValueRange Object.
*
* @param array $values_data Values Array.
* @since 1.0.0
*
* @return object.
*/
public function valuerangeobject( $values_data = array() ) {
$requestbody = new \Google_Service_Sheets_ValueRange( array( 'values' => $values_data ) );
return $requestbody;
}
/**
* Create Google_Service_Sheets_ClearValuesRequest Object.
*
* @since 1.0.0
*
* @return object.
*/
public function clearobject() {
$requestbody = new \Google_Service_Sheets_ClearValuesRequest();
return $requestbody;
}
/**
* Insert new column, Freeze first row to google spreadsheet.
*
* @param array $param contains spreadsheetid,requestbody.
* @since 1.0.0
*
* @return object.
*/
public function formatsheet( $param = array() ) {
return parent::batchupdate( self::$instance_service, $param );
}
/**
* Update entry to google sheet.
*
* @param array $param contains spreadsheetid, range, requestbody, params.
* @since 1.0.0
*
* @return object.
*/
public function updateentry( $param = array() ) {
return parent::update_entry( self::$instance_service, $param );
}
/**
* Append entry to google sheet.
*
* @param array $param contains spreadsheetid, range, requestbody, params.
* @since 1.0.0
*
* @return object.
*/
public function appendentry( $param = array() ) {
return parent::append_entry( self::$instance_service, $param );
}
/**
* Create new spreadsheet in Google Drive.
*
* @param array $requestbody requestbody object.
* @since 1.0.0
*
* @return object.
*/
public function createspreadsheet( $requestbody = array() ) {
return parent::create_spreadsheet( self::$instance_service, $requestbody );
}
/**
* Clear Sheet Value.
*
* @param array $param spreadsheetid,sheetname,requestbody.
* @since 1.0.0
*
* @return object.
*/
public function clear( $param = array() ) {
return parent::clearsheet( self::$instance_service, $param );
}
}