Skip to content

Commit

Permalink
Move wpcom/v2/publicize/connections endpoint to publicize package
Browse files Browse the repository at this point in the history
  • Loading branch information
manzoorwanijk committed Dec 13, 2024
1 parent 36d84a3 commit 64dae1c
Show file tree
Hide file tree
Showing 8 changed files with 574 additions and 23 deletions.
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 projects/packages/publicize/src/class-connection-fields.php
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'];
}
}
3 changes: 3 additions & 0 deletions projects/packages/publicize/src/class-publicize-assets.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

namespace Automattic\Jetpack\Publicize;

use Automattic\Jetpack\Publicize\Rest_Endpoints\Connections_Controller;

/**
* Publicize_Assets class.
*/
Expand All @@ -17,5 +19,6 @@ class Publicize_Assets {
*/
public static function configure() {
Publicize_Script_Data::configure();
new Connections_Controller();
}
}
2 changes: 1 addition & 1 deletion projects/packages/publicize/src/class-publicize-base.php
Original file line number Diff line number Diff line change
Expand Up @@ -608,7 +608,7 @@ public function get_username( $service_name, $connection ) {
* @param object|array $connection The Connection object (WordPress.com) or array (Jetpack).
* @return string
*/
private function get_profile_picture( $connection ) {
public function get_profile_picture( $connection ) {
$cmeta = $this->get_connection_meta( $connection );

if ( isset( $cmeta['profile_picture'] ) ) {
Expand Down
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() )
);
}
}
Loading

0 comments on commit 64dae1c

Please sign in to comment.