Edit File by line
/home/zeestwma/ceyloniy.../wp-conte.../plugins/wpforms-.../src/Integrat.../Square/Admin
File: Connect.php
}
[500] Fix | Delete
[501] Fix | Delete
return is_array( $locations ) ? $locations : [ $locations ];
[502] Fix | Delete
}
[503] Fix | Delete
[504] Fix | Delete
/**
[505] Fix | Delete
* Fetch Square seller account from Square.
[506] Fix | Delete
*
[507] Fix | Delete
* @since 1.9.5
[508] Fix | Delete
*
[509] Fix | Delete
* @param string $mode Square mode.
[510] Fix | Delete
*
[511] Fix | Delete
* @return array|null
[512] Fix | Delete
*/
[513] Fix | Delete
private function fetch_account( string $mode ) {
[514] Fix | Delete
[515] Fix | Delete
$connection = Connection::get( $mode );
[516] Fix | Delete
[517] Fix | Delete
if ( ! $connection ) {
[518] Fix | Delete
return null;
[519] Fix | Delete
}
[520] Fix | Delete
[521] Fix | Delete
$api = new Api( $connection );
[522] Fix | Delete
[523] Fix | Delete
$merchant = $api->get_merchant( $connection->get_merchant_id() );
[524] Fix | Delete
[525] Fix | Delete
if ( ! $merchant ) {
[526] Fix | Delete
return null;
[527] Fix | Delete
}
[528] Fix | Delete
[529] Fix | Delete
return $merchant->jsonSerialize();
[530] Fix | Delete
}
[531] Fix | Delete
[532] Fix | Delete
/**
[533] Fix | Delete
* Fetch new connection credentials.
[534] Fix | Delete
*
[535] Fix | Delete
* @since 1.9.5
[536] Fix | Delete
*
[537] Fix | Delete
* @param string $state Unique ID to safely fetch connection data.
[538] Fix | Delete
*
[539] Fix | Delete
* @return array
[540] Fix | Delete
*/
[541] Fix | Delete
private function fetch_new_connection( string $state ): array {
[542] Fix | Delete
[543] Fix | Delete
$connection = [];
[544] Fix | Delete
$response = wp_remote_post(
[545] Fix | Delete
$this->get_server_url() . '/oauth/square-connect',
[546] Fix | Delete
[
[547] Fix | Delete
'body' => [
[548] Fix | Delete
'action' => 'credentials',
[549] Fix | Delete
'state' => $state,
[550] Fix | Delete
],
[551] Fix | Delete
'timeout' => 30,
[552] Fix | Delete
]
[553] Fix | Delete
);
[554] Fix | Delete
[555] Fix | Delete
if ( ! is_wp_error( $response ) && wp_remote_retrieve_response_code( $response ) === 200 ) {
[556] Fix | Delete
$body = json_decode( wp_remote_retrieve_body( $response ), true );
[557] Fix | Delete
$connection = is_array( $body ) ? $body : [];
[558] Fix | Delete
}
[559] Fix | Delete
[560] Fix | Delete
return $connection;
[561] Fix | Delete
}
[562] Fix | Delete
[563] Fix | Delete
/**
[564] Fix | Delete
* Fetch refresh connection credentials.
[565] Fix | Delete
*
[566] Fix | Delete
* @since 1.9.5
[567] Fix | Delete
*
[568] Fix | Delete
* @param string $token The refresh token.
[569] Fix | Delete
* @param string $mode Square mode.
[570] Fix | Delete
*
[571] Fix | Delete
* @return array|WP_Error
[572] Fix | Delete
*/
[573] Fix | Delete
private function fetch_refresh_connection( string $token, string $mode ) {
[574] Fix | Delete
[575] Fix | Delete
$response = wp_remote_post(
[576] Fix | Delete
$this->get_server_url() . '/oauth/square-connect',
[577] Fix | Delete
[
[578] Fix | Delete
'body' => [
[579] Fix | Delete
'action' => 'refresh',
[580] Fix | Delete
'live_mode' => absint( $mode === Environment::PRODUCTION ),
[581] Fix | Delete
'token' => $token,
[582] Fix | Delete
],
[583] Fix | Delete
'timeout' => 30,
[584] Fix | Delete
]
[585] Fix | Delete
);
[586] Fix | Delete
[587] Fix | Delete
if ( wp_remote_retrieve_response_code( $response ) !== 200 ) {
[588] Fix | Delete
return new WP_Error();
[589] Fix | Delete
}
[590] Fix | Delete
[591] Fix | Delete
$body = json_decode( wp_remote_retrieve_body( $response ), true );
[592] Fix | Delete
[593] Fix | Delete
if ( ! is_array( $body ) ) {
[594] Fix | Delete
return new WP_Error();
[595] Fix | Delete
}
[596] Fix | Delete
[597] Fix | Delete
if ( ! empty( $body['success'] ) ) {
[598] Fix | Delete
return $body;
[599] Fix | Delete
}
[600] Fix | Delete
[601] Fix | Delete
$error_message = empty( $body['message'] ) ? '' : wp_kses_post( $body['message'] );
[602] Fix | Delete
[603] Fix | Delete
return new WP_Error( 'refresh_connection_fail', $error_message );
[604] Fix | Delete
}
[605] Fix | Delete
[606] Fix | Delete
/**
[607] Fix | Delete
* Retrieve active business locations with processing capability.
[608] Fix | Delete
*
[609] Fix | Delete
* @since 1.9.5
[610] Fix | Delete
*
[611] Fix | Delete
* @param array $locations Locations.
[612] Fix | Delete
*
[613] Fix | Delete
* @return array
[614] Fix | Delete
*/
[615] Fix | Delete
private function active_locations_filter( array $locations ): array {
[616] Fix | Delete
[617] Fix | Delete
$active_locations = [];
[618] Fix | Delete
[619] Fix | Delete
if ( empty( $locations ) ) {
[620] Fix | Delete
return $active_locations;
[621] Fix | Delete
}
[622] Fix | Delete
[623] Fix | Delete
foreach ( $locations as $location ) {
[624] Fix | Delete
if (
[625] Fix | Delete
! $location instanceof Location ||
[626] Fix | Delete
$location->getStatus() !== LocationStatus::ACTIVE ||
[627] Fix | Delete
! is_array( $location->getCapabilities() ) ||
[628] Fix | Delete
! in_array( LocationCapability::CREDIT_CARD_PROCESSING, $location->getCapabilities(), true )
[629] Fix | Delete
) {
[630] Fix | Delete
continue;
[631] Fix | Delete
}
[632] Fix | Delete
[633] Fix | Delete
$location_id = $location->getId();
[634] Fix | Delete
[635] Fix | Delete
$active_locations[ $location_id ] = [
[636] Fix | Delete
'id' => $location_id,
[637] Fix | Delete
'name' => $location->getName(),
[638] Fix | Delete
'currency' => $location->getCurrency(),
[639] Fix | Delete
];
[640] Fix | Delete
}
[641] Fix | Delete
[642] Fix | Delete
return $active_locations;
[643] Fix | Delete
}
[644] Fix | Delete
[645] Fix | Delete
/**
[646] Fix | Delete
* Set/update location things: ID and currency.
[647] Fix | Delete
*
[648] Fix | Delete
* @since 1.9.5
[649] Fix | Delete
*
[650] Fix | Delete
* @param array $locations Active locations.
[651] Fix | Delete
* @param string $mode Square mode.
[652] Fix | Delete
*/
[653] Fix | Delete
private function set_location( array $locations, string $mode ) {
[654] Fix | Delete
[655] Fix | Delete
$connection = Connection::get( $mode );
[656] Fix | Delete
$stored_location_id = Helpers::get_location_id( $mode );
[657] Fix | Delete
[658] Fix | Delete
// Location ID was not set previously or saved ID is not available now.
[659] Fix | Delete
if ( empty( $stored_location_id ) || ! isset( $locations[ $stored_location_id ] ) ) {
[660] Fix | Delete
$stored_location_id = Helpers::array_key_first( $locations );
[661] Fix | Delete
[662] Fix | Delete
// Set a new location ID.
[663] Fix | Delete
Helpers::set_locataion_id( $stored_location_id, $mode );
[664] Fix | Delete
}
[665] Fix | Delete
[666] Fix | Delete
// Set location currency for connection.
[667] Fix | Delete
// In this case, we can make sure that location currency is matched with WPForms currency.
[668] Fix | Delete
if ( $connection !== null ) {
[669] Fix | Delete
$connection->set_currency( $locations[ $stored_location_id ]['currency'] )->save();
[670] Fix | Delete
}
[671] Fix | Delete
}
[672] Fix | Delete
[673] Fix | Delete
/**
[674] Fix | Delete
* Reset location ID and currency if no locations are received.
[675] Fix | Delete
*
[676] Fix | Delete
* @since 1.9.5
[677] Fix | Delete
*
[678] Fix | Delete
* @param string $mode Square mode.
[679] Fix | Delete
*/
[680] Fix | Delete
private function reset_location( string $mode ) {
[681] Fix | Delete
[682] Fix | Delete
Helpers::set_locataion_id( '', $mode );
[683] Fix | Delete
[684] Fix | Delete
$connection = Connection::get( $mode );
[685] Fix | Delete
[686] Fix | Delete
if ( ! $connection ) {
[687] Fix | Delete
return;
[688] Fix | Delete
}
[689] Fix | Delete
[690] Fix | Delete
$connection->set_currency( '' )->save();
[691] Fix | Delete
}
[692] Fix | Delete
[693] Fix | Delete
/**
[694] Fix | Delete
* Get cached business locations or fetch it from Square.
[695] Fix | Delete
*
[696] Fix | Delete
* @since 1.9.5
[697] Fix | Delete
*
[698] Fix | Delete
* @param string $mode Square mode.
[699] Fix | Delete
*
[700] Fix | Delete
* @return array
[701] Fix | Delete
*/
[702] Fix | Delete
public function get_connected_locations( string $mode ): array {
[703] Fix | Delete
[704] Fix | Delete
$mode = Helpers::validate_mode( $mode );
[705] Fix | Delete
$locations = Transient::get( 'wpforms_square_active_locations_' . $mode );
[706] Fix | Delete
[707] Fix | Delete
if ( empty( $locations ) ) {
[708] Fix | Delete
$locations = $this->prepare_locations( $mode );
[709] Fix | Delete
}
[710] Fix | Delete
[711] Fix | Delete
return $locations;
[712] Fix | Delete
}
[713] Fix | Delete
[714] Fix | Delete
/**
[715] Fix | Delete
* Get cached Square seller account or fetch it from Square.
[716] Fix | Delete
*
[717] Fix | Delete
* @since 1.9.5
[718] Fix | Delete
*
[719] Fix | Delete
* @param string $mode Square mode.
[720] Fix | Delete
*
[721] Fix | Delete
* @return array|null
[722] Fix | Delete
*/
[723] Fix | Delete
public function get_connected_account( string $mode ) {
[724] Fix | Delete
[725] Fix | Delete
$mode = Helpers::validate_mode( $mode );
[726] Fix | Delete
$account = Transient::get( 'wpforms_square_account_' . $mode );
[727] Fix | Delete
[728] Fix | Delete
if ( empty( $account['id'] ) ) {
[729] Fix | Delete
[730] Fix | Delete
$account_id = $this->get_connected_account_id( $mode );
[731] Fix | Delete
[732] Fix | Delete
if ( ! $account_id ) {
[733] Fix | Delete
return null;
[734] Fix | Delete
}
[735] Fix | Delete
[736] Fix | Delete
$account = $this->fetch_account( $mode );
[737] Fix | Delete
[738] Fix | Delete
if ( empty( $account['id'] ) || $account['id'] !== $account_id ) {
[739] Fix | Delete
return null;
[740] Fix | Delete
}
[741] Fix | Delete
[742] Fix | Delete
Transient::set( 'wpforms_square_account_' . $mode, $account );
[743] Fix | Delete
}
[744] Fix | Delete
[745] Fix | Delete
return $account;
[746] Fix | Delete
}
[747] Fix | Delete
[748] Fix | Delete
/**
[749] Fix | Delete
* Retrieve saved Square seller account ID from DB.
[750] Fix | Delete
*
[751] Fix | Delete
* @since 1.9.5
[752] Fix | Delete
*
[753] Fix | Delete
* @param string $mode Square mode.
[754] Fix | Delete
*
[755] Fix | Delete
* @return string
[756] Fix | Delete
*/
[757] Fix | Delete
public function get_connected_account_id( string $mode ): string {
[758] Fix | Delete
[759] Fix | Delete
$connection = Connection::get( $mode );
[760] Fix | Delete
$account_id = $connection ? $connection->get_merchant_id() : '';
[761] Fix | Delete
[762] Fix | Delete
/**
[763] Fix | Delete
* Filter the connected account ID.
[764] Fix | Delete
*
[765] Fix | Delete
* @since 1.9.5
[766] Fix | Delete
*
[767] Fix | Delete
* @param string $account_id Square account ID.
[768] Fix | Delete
* @param string $mode Square mode.
[769] Fix | Delete
*/
[770] Fix | Delete
return (string) apply_filters( 'wpforms_square_admin_connect_get_connected_account_id', $account_id, $mode ); // phpcs:ignore WPForms.PHP.ValidateHooks.InvalidHookName
[771] Fix | Delete
}
[772] Fix | Delete
[773] Fix | Delete
/**
[774] Fix | Delete
* Retrieve the connect URL.
[775] Fix | Delete
*
[776] Fix | Delete
* @since 1.9.5
[777] Fix | Delete
*
[778] Fix | Delete
* @param string $mode Square mode.
[779] Fix | Delete
*
[780] Fix | Delete
* @return string
[781] Fix | Delete
*/
[782] Fix | Delete
public function get_connect_url( string $mode ): string {
[783] Fix | Delete
[784] Fix | Delete
$mode = Helpers::validate_mode( $mode );
[785] Fix | Delete
[786] Fix | Delete
return add_query_arg(
[787] Fix | Delete
[
[788] Fix | Delete
'action' => 'init',
[789] Fix | Delete
'live_mode' => absint( $mode === Environment::PRODUCTION ),
[790] Fix | Delete
'state' => uniqid( '', true ),
[791] Fix | Delete
'site_url' => rawurlencode( Helpers::get_settings_page_url() ),
[792] Fix | Delete
'scopes' => implode( ' ', $this->get_scopes() ),
[793] Fix | Delete
],
[794] Fix | Delete
$this->get_server_url() . '/oauth/square-connect'
[795] Fix | Delete
);
[796] Fix | Delete
}
[797] Fix | Delete
[798] Fix | Delete
/**
[799] Fix | Delete
* Retrieve the disconnect URL.
[800] Fix | Delete
*
[801] Fix | Delete
* @since 1.9.5
[802] Fix | Delete
*
[803] Fix | Delete
* @param string $mode Square mode.
[804] Fix | Delete
*
[805] Fix | Delete
* @return string
[806] Fix | Delete
*/
[807] Fix | Delete
public function get_disconnect_url( string $mode ): string {
[808] Fix | Delete
[809] Fix | Delete
$mode = Helpers::validate_mode( $mode );
[810] Fix | Delete
$action = 'wpforms_square_disconnect';
[811] Fix | Delete
$url = add_query_arg(
[812] Fix | Delete
[
[813] Fix | Delete
'action' => $action,
[814] Fix | Delete
'live_mode' => absint( $mode === Environment::PRODUCTION ),
[815] Fix | Delete
],
[816] Fix | Delete
Helpers::get_settings_page_url()
[817] Fix | Delete
);
[818] Fix | Delete
[819] Fix | Delete
return wp_nonce_url( $url, $action );
[820] Fix | Delete
}
[821] Fix | Delete
[822] Fix | Delete
/**
[823] Fix | Delete
* Retrieve a connect server URL.
[824] Fix | Delete
*
[825] Fix | Delete
* @since 1.9.5
[826] Fix | Delete
*
[827] Fix | Delete
* @return string
[828] Fix | Delete
*/
[829] Fix | Delete
public function get_server_url(): string {
[830] Fix | Delete
[831] Fix | Delete
if ( defined( 'WPFORMS_SQUARE_LOCAL_CONNECT_SERVER' ) && WPFORMS_SQUARE_LOCAL_CONNECT_SERVER ) {
[832] Fix | Delete
return home_url();
[833] Fix | Delete
}
[834] Fix | Delete
[835] Fix | Delete
return self::WPFORMS_URL;
[836] Fix | Delete
}
[837] Fix | Delete
[838] Fix | Delete
/**
[839] Fix | Delete
* Retrieve the connection scopes (permissions).
[840] Fix | Delete
*
[841] Fix | Delete
* @since 1.9.5
[842] Fix | Delete
*
[843] Fix | Delete
* @return array
[844] Fix | Delete
*/
[845] Fix | Delete
public function get_scopes(): array {
[846] Fix | Delete
[847] Fix | Delete
/**
[848] Fix | Delete
* Filter the connection scopes.
[849] Fix | Delete
*
[850] Fix | Delete
* @since 1.9.5
[851] Fix | Delete
*
[852] Fix | Delete
* @param array $scopes The connection scopes.
[853] Fix | Delete
*/
[854] Fix | Delete
return (array) apply_filters( // phpcs:ignore WPForms.PHP.ValidateHooks.InvalidHookName
[855] Fix | Delete
'wpforms_square_admin_connect_get_scopes',
[856] Fix | Delete
[
[857] Fix | Delete
'MERCHANT_PROFILE_READ',
[858] Fix | Delete
'PAYMENTS_READ',
[859] Fix | Delete
'PAYMENTS_WRITE',
[860] Fix | Delete
'ORDERS_READ',
[861] Fix | Delete
'ORDERS_WRITE',
[862] Fix | Delete
'CUSTOMERS_READ',
[863] Fix | Delete
'CUSTOMERS_WRITE',
[864] Fix | Delete
'SUBSCRIPTIONS_READ',
[865] Fix | Delete
'SUBSCRIPTIONS_WRITE',
[866] Fix | Delete
'ITEMS_READ',
[867] Fix | Delete
'ITEMS_WRITE',
[868] Fix | Delete
'INVOICES_WRITE',
[869] Fix | Delete
'INVOICES_READ',
[870] Fix | Delete
'PAYMENTS_WRITE_ADDITIONAL_RECIPIENTS',
[871] Fix | Delete
]
[872] Fix | Delete
);
[873] Fix | Delete
}
[874] Fix | Delete
}
[875] Fix | Delete
[876] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function