-
Notifications
You must be signed in to change notification settings - Fork 800
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move wpcom/v2/publicize/connections endpoint to publicize package
- Loading branch information
1 parent
36d84a3
commit 64dae1c
Showing
8 changed files
with
574 additions
and
23 deletions.
There are no files selected for viewing
4 changes: 4 additions & 0 deletions
4
...ects/packages/publicize/changelog/update-move-wpcom-v2-publicize-connections-to-publicize
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
Significance: patch | ||
Type: changed | ||
|
||
Moved wpcom/v2/publicize/connections endpoint to publicize package |
170 changes: 170 additions & 0 deletions
170
projects/packages/publicize/src/class-connection-fields.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,170 @@ | ||
<?php | ||
/** | ||
* Publicize Connection Fields class. | ||
* | ||
* @package automattic/jetpack-publicize | ||
*/ | ||
|
||
namespace Automattic\Jetpack\Publicize; | ||
|
||
/** | ||
* Publicize Connection Fields class. | ||
*/ | ||
class Connection_Fields { | ||
|
||
/** | ||
* Get the publicize instance - properly typed | ||
* | ||
* @return Publicize | ||
*/ | ||
protected static function publicize() { | ||
/** | ||
* Publicize instance. | ||
* | ||
* @var Publicize $publicize | ||
*/ | ||
global $publicize; | ||
|
||
if ( ! $publicize && function_exists( 'publicize_init' ) ) { | ||
// @phan-suppress-next-line PhanUndeclaredFunction - phan is dumb not to see the function_exists check | ||
publicize_init(); | ||
} | ||
|
||
return $publicize; | ||
} | ||
|
||
/** | ||
* Get the meta of a connection. | ||
* | ||
* @param array|object $connection The connection. | ||
* @return array | ||
*/ | ||
public static function get_connection_meta( $connection ) { | ||
|
||
return self::publicize()->get_connection_meta( $connection ); | ||
} | ||
|
||
/** | ||
* Get the ID of a connection. | ||
* | ||
* @param array $connection The connection. | ||
* @return string | ||
*/ | ||
public static function get_connection_id( $connection ) { | ||
return (string) self::publicize()->get_connection_id( $connection ); | ||
} | ||
|
||
/** | ||
* Returns a display name for the Connection | ||
* | ||
* @param string $service_name 'facebook', 'twitter', etc. | ||
* @param object|array $connection The Connection object (WordPress.com) or array (Jetpack). | ||
* @return string | ||
*/ | ||
public static function get_display_name( $service_name, $connection ) { | ||
return self::publicize()->get_display_name( $service_name, $connection ); | ||
} | ||
|
||
/** | ||
* Returns the external handle for the Connection. | ||
* | ||
* @param string $service_name 'facebook', 'linkedin', etc. | ||
* @param object|array $connection The Connection object (WordPress.com) or array (Jetpack). | ||
* @return string | ||
*/ | ||
public static function get_external_handle( $service_name, $connection ) { | ||
$cmeta = self::get_connection_meta( $connection ); | ||
|
||
switch ( $service_name ) { | ||
case 'mastodon': | ||
return $cmeta['external_display'] ?? ''; | ||
|
||
case 'bluesky': | ||
case 'threads': | ||
return $cmeta['external_name'] ?? ''; | ||
|
||
case 'instagram-business': | ||
return $cmeta['connection_data']['meta']['username'] ?? ''; | ||
|
||
default: | ||
return ''; | ||
} | ||
} | ||
|
||
/** | ||
* Returns the external ID for the Connection. | ||
* | ||
* @param object|array $connection The Connection object (WordPress.com) or array (Jetpack). | ||
* @return string | ||
*/ | ||
public static function get_external_id( $connection ) { | ||
$connection_meta = self::get_connection_meta( $connection ); | ||
|
||
return $connection_meta['external_id'] ?? ''; | ||
} | ||
|
||
/** | ||
* Returns an external URL to the Connection's profile | ||
* | ||
* @param string $service_name 'facebook', 'twitter', etc. | ||
* @param object|array $connection The Connection object (WordPress.com) or array (Jetpack). | ||
* @return false|string False on failure. URL on success. | ||
*/ | ||
public static function get_profile_link( $service_name, $connection ) { | ||
return self::publicize()->get_profile_link( $service_name, $connection ); | ||
} | ||
|
||
/** | ||
* Returns a profile picture for the Connection | ||
* | ||
* @param object|array $connection The Connection object (WordPress.com) or array (Jetpack). | ||
* @return string | ||
*/ | ||
public static function get_profile_picture( $connection ) { | ||
return self::publicize()->get_profile_picture( $connection ); | ||
} | ||
|
||
/** | ||
* Returns a display name for the Service | ||
* | ||
* @param string $service_name 'facebook', 'twitter', etc. | ||
* @return string | ||
*/ | ||
public static function get_service_label( $service_name ) { | ||
return self::publicize()->get_service_label( $service_name ); | ||
} | ||
|
||
/** | ||
* Returns whether the Connection is shared | ||
* | ||
* @param array $connection The Connection object (WordPress.com) or array (Jetpack). | ||
* @return bool | ||
*/ | ||
public static function is_shared( $connection ) { | ||
return empty( self::get_user_id( $connection ) ); | ||
} | ||
|
||
/** | ||
* Returns the status for the Connection | ||
* | ||
* @param array $connection The Connection object (WordPress.com) or array (Jetpack). | ||
* @return string | ||
*/ | ||
public static function get_status( $connection ) { | ||
return $connection['status'] ?? 'ok'; | ||
} | ||
|
||
/** | ||
* Returns the user ID for the Connection | ||
* | ||
* @param array $connection The Connection object (WordPress.com) or array (Jetpack). | ||
* @return int | ||
*/ | ||
public static function get_user_id( $connection ) { | ||
$connection_meta = self::get_connection_meta( $connection ); | ||
|
||
$connection_data = $connection_meta['connection_data']; | ||
|
||
return (int) $connection_data['user_id']; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
88 changes: 88 additions & 0 deletions
88
projects/packages/publicize/src/rest-endpoints/class-base-controller.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
<?php | ||
/** | ||
* Base Controller class. | ||
* | ||
* @package automattic/jetpack-publicize | ||
*/ | ||
|
||
namespace Automattic\Jetpack\Publicize\Rest_Endpoints; | ||
|
||
use Automattic\Jetpack\Status\Host; | ||
use WP_Error; | ||
use WP_REST_Controller; | ||
use WP_REST_Request; | ||
use WP_REST_Response; | ||
|
||
/** | ||
* Base controller for Publicize endpoints. | ||
*/ | ||
abstract class Base_Controller extends WP_REST_Controller { | ||
|
||
/** | ||
* Constructor. | ||
*/ | ||
public function __construct() { | ||
$this->wpcom_is_wpcom_only_endpoint = true; | ||
} | ||
|
||
/** | ||
* Check if we are on WPCOM. | ||
* | ||
* @return bool | ||
*/ | ||
public static function is_wpcom() { | ||
return ( new Host() )->is_wpcom_simple(); | ||
} | ||
|
||
/** | ||
* Filters out data based on ?_fields= request parameter | ||
* | ||
* @param array $item Item to prepare. | ||
* @param WP_REST_Request $request Full details about the request. | ||
* | ||
* @return WP_REST_Response filtered item | ||
*/ | ||
public function prepare_item_for_response( $item, $request ) { | ||
if ( ! is_callable( array( $this, 'get_fields_for_response' ) ) ) { | ||
return rest_ensure_response( $item ); | ||
} | ||
|
||
$fields = $this->get_fields_for_response( $request ); | ||
|
||
$response_data = array(); | ||
foreach ( $item as $field => $value ) { | ||
if ( in_array( $field, $fields, true ) ) { | ||
$response_data[ $field ] = $value; | ||
} | ||
} | ||
|
||
return rest_ensure_response( $response_data ); | ||
} | ||
|
||
/** | ||
* Verify that user can access Publicize data | ||
* | ||
* @return true|WP_Error | ||
*/ | ||
public function get_items_permission_check() { | ||
global $publicize; | ||
|
||
if ( ! $publicize ) { | ||
return new WP_Error( | ||
'publicize_not_available', | ||
__( 'Sorry, Jetpack Social is not available on your site right now.', 'jetpack-publicize-pkg' ), | ||
array( 'status' => rest_authorization_required_code() ) | ||
); | ||
} | ||
|
||
if ( $publicize->current_user_can_access_publicize_data() ) { | ||
return true; | ||
} | ||
|
||
return new WP_Error( | ||
'invalid_user_permission_publicize', | ||
__( 'Sorry, you are not allowed to access Jetpack Social data on this site.', 'jetpack-publicize-pkg' ), | ||
array( 'status' => rest_authorization_required_code() ) | ||
); | ||
} | ||
} |
Oops, something went wrong.