Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
strategy:
fail-fast: false
matrix:
php-versions: ['8.1', '8.2', '8.3']
php-versions: ['8.1', '8.2', '8.3', '8.4', '8.5']

steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -53,7 +53,7 @@ jobs:
strategy:
fail-fast: false
matrix:
php-versions: ['8.1', '8.2', '8.3']
php-versions: ['8.1', '8.2', '8.3', '8.4', '8.5']

steps:
- uses: actions/checkout@v3
Expand All @@ -76,7 +76,7 @@ jobs:
strategy:
fail-fast: false
matrix:
php-versions: ['8.1', '8.2', '8.3']
php-versions: ['8.1', '8.2', '8.3', '8.4', '8.5']

steps:
- uses: actions/checkout@v3
Expand Down
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ To see full documentation visit the official [documentation](https://adrosoftwar

## Requirements

* PHP >= 8.1
* PHP >= 8.1 (tested through PHP 8.5)
* A [PSR-17 implementation](https://packagist.org/providers/psr/http-factory-implementation)
* A [PSR-18 implementation](https://packagist.org/providers/psr/http-client-implementation)

Expand Down Expand Up @@ -58,6 +58,11 @@ $circleSo = CircleSo::make('5up3r53cr3770k3n');
$me = $circleSo->me()->info();
```

The V1 client covers the complete published API surface, including communities,
members, spaces, space groups, posts, comments, messages, events, attendees,
subscriptions, charges, likes, tags, courses, topics, notifications, contacts,
profile fields, and flagged content.

## License

This package is licensed under the MIT License - see the [LICENSE](https://github.com/adrosoftware/circle-so-api-php-sdk/blob/main/LICENSE) file for details
Expand All @@ -69,4 +74,4 @@ This library is maintained by:

## Contributors

See all the contributors [here](https://github.com/adrosoftware/circle-so-api-php-sdk/graphs/contributors)
See all the contributors [here](https://github.com/adrosoftware/circle-so-api-php-sdk/graphs/contributors)
38 changes: 38 additions & 0 deletions docs/content/usage/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,41 @@ $member = $circleSo->members()->update(
skipInvitation: true // Optional
);
```

## V1 endpoint groups

The client exposes the complete published V1 resource set:

```php
$circleSo->communities();
$circleSo->spaceGroups();
$circleSo->spaceGroupMembers();
$circleSo->spaces();
$circleSo->spaceMembers();
$circleSo->posts();
$circleSo->comments();
$circleSo->members();
$circleSo->memberTags();
$circleSo->taggedMembers();
$circleSo->messages();
$circleSo->subscriptions();
$circleSo->events();
$circleSo->eventAttendees();
$circleSo->charges();
$circleSo->likes();
$circleSo->communityMemberSpaces();
$circleSo->profileFields();
$circleSo->courses();
$circleSo->notifications();
$circleSo->topics();
$circleSo->contacts();
$circleSo->flaggedContents();
```

Set a community once when making several scoped calls:

```php
$posts = $circleSo->posts()
->communityId(123)
->all(spaceId: 456);
```
30 changes: 19 additions & 11 deletions src/AbstractClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
use Http\Client\Common\Plugin\BaseUriPlugin;
use Http\Client\Common\Plugin\HeaderDefaultsPlugin;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\UriInterface;

abstract class AbstractClient
{
Expand All @@ -26,6 +27,8 @@ abstract class AbstractClient

protected ResponseTransformerInterface $responseTransformer;

private HeaderDefaultsPlugin $headerDefaultsPlugin;

public function __construct(
protected string $token,
protected ?Options $options = null,
Expand All @@ -36,20 +39,25 @@ public function __construct(
$this->responseFactory = $this->options->getResponseFactory();

$this->clientBuilder = $this->options->getClientBuilder();
$this->clientBuilder->addPlugin(new BaseUriPlugin($this->options->getUri()));
$this->clientBuilder->addPlugin(
new HeaderDefaultsPlugin([
'User-Agent' => $this->options->getUserAgent(),
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => "Token {$this->token}",
])
);
$this->headerDefaultsPlugin = new HeaderDefaultsPlugin([
'User-Agent' => $this->options->getUserAgent(),
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => "Token {$this->token}",
]);
}

public function getHttpClient(?UriInterface $baseUri = null): HttpMethodsClientInterface
{
return $this->clientBuilder->getHttpClient([
new BaseUriPlugin($baseUri ?? $this->options->getUri()),
$this->headerDefaultsPlugin,
]);
}

public function getHttpClient(): HttpMethodsClientInterface
public function uri(string $uri): UriInterface
{
return $this->clientBuilder->getHttpClient();
return $this->options->getUriFactory()->createUri($uri);
}

public function getResponseTransformer(): ResponseTransformerInterface
Expand Down
96 changes: 96 additions & 0 deletions src/CircleSo.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,30 @@

use AdroSoftware\CircleSoSdk\Contracts\InteractsWithEndpoints;
use AdroSoftware\CircleSoSdk\Endpoint\{
Charge\Charges,
Comment\Comments,
CommunityMemberSpace\CommunityMemberSpaces,
Community\Communities,
Contact\Contacts,
Course\Courses,
Event\Events,
EventAttendee\EventAttendees,
FlaggedContent\FlaggedContents,
Like\Likes,
Me\Me,
Member\Members,
MemberTag\MemberTag,
Message\Messages,
Notification\Notifications,
Post\Posts,
ProfileField\ProfileFields,
Space\Spaces,
SpaceGroup\SpaceGroups,
SpaceGroupMember\SpaceGroupMembers,
SpaceMember\SpaceMembers,
Subscription\Subscriptions,
TaggedMembers\TaggedMembers,
Topic\Topics,
};

final class CircleSo extends AbstractClient implements InteractsWithEndpoints
Expand Down Expand Up @@ -64,4 +80,84 @@ public function taggedMembers(): TaggedMembers
{
return new TaggedMembers($this);
}

public function spaceGroupMembers(): SpaceGroupMembers
{
return new SpaceGroupMembers($this);
}

public function spaceMembers(): SpaceMembers
{
return new SpaceMembers($this);
}

public function posts(): Posts
{
return new Posts($this);
}

public function comments(): Comments
{
return new Comments($this);
}

public function messages(): Messages
{
return new Messages($this);
}

public function subscriptions(): Subscriptions
{
return new Subscriptions($this);
}

public function events(): Events
{
return new Events($this);
}

public function eventAttendees(): EventAttendees
{
return new EventAttendees($this);
}

public function charges(): Charges
{
return new Charges($this);
}

public function likes(): Likes
{
return new Likes($this);
}

public function communityMemberSpaces(): CommunityMemberSpaces
{
return new CommunityMemberSpaces($this);
}

public function profileFields(): ProfileFields
{
return new ProfileFields($this);
}

public function notifications(): Notifications
{
return new Notifications($this);
}

public function topics(): Topics
{
return new Topics($this);
}

public function contacts(): Contacts
{
return new Contacts($this);
}

public function flaggedContents(): FlaggedContents
{
return new FlaggedContents($this);
}
}
8 changes: 6 additions & 2 deletions src/ClientBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,13 @@ public function addPlugin(Plugin $plugin): void
$this->plugins[] = $plugin;
}

public function getHttpClient(): HttpMethodsClientInterface
/** @param array<Plugin> $plugins */
public function getHttpClient(array $plugins = []): HttpMethodsClientInterface
{
$pluginClient = (new PluginClientFactory())->createClient($this->httpClient, $this->plugins);
$pluginClient = (new PluginClientFactory())->createClient(
$this->httpClient,
[...$this->plugins, ...$plugins],
);

return new HttpMethodsClient(
$pluginClient,
Expand Down
57 changes: 57 additions & 0 deletions src/Contracts/InteractsWithEndpoints.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,30 @@
namespace AdroSoftware\CircleSoSdk\Contracts;

use AdroSoftware\CircleSoSdk\Endpoint\{
Charge\Charges,
Comment\Comments,
Community\Communities,
CommunityMemberSpace\CommunityMemberSpaces,
Contact\Contacts,
Course\Courses,
Event\Events,
EventAttendee\EventAttendees,
FlaggedContent\FlaggedContents,
Like\Likes,
Me\Me,
Member\Members,
MemberTag\MemberTag,
Message\Messages,
Notification\Notifications,
Post\Posts,
ProfileField\ProfileFields,
Space\Spaces,
SpaceGroup\SpaceGroups,
SpaceGroupMember\SpaceGroupMembers,
SpaceMember\SpaceMembers,
Subscription\Subscriptions,
TaggedMembers\TaggedMembers,
Topic\Topics,
};

interface InteractsWithEndpoints
Expand All @@ -23,4 +42,42 @@ public function members(): Members;
public function memberTags(): MemberTag;

public function taggedMembers(): TaggedMembers;

public function courses(): Courses;

public function spaces(): Spaces;

public function spaceGroups(): SpaceGroups;

public function spaceGroupMembers(): SpaceGroupMembers;

public function spaceMembers(): SpaceMembers;

public function posts(): Posts;

public function comments(): Comments;

public function messages(): Messages;

public function subscriptions(): Subscriptions;

public function events(): Events;

public function eventAttendees(): EventAttendees;

public function charges(): Charges;

public function likes(): Likes;

public function communityMemberSpaces(): CommunityMemberSpaces;

public function profileFields(): ProfileFields;

public function notifications(): Notifications;

public function topics(): Topics;

public function contacts(): Contacts;

public function flaggedContents(): FlaggedContents;
}
Loading
Loading