Skip to content

Commit e389d73

Browse files
authored
Merge pull request #82 from packagist/suborganization-rename
Add suborganization API and deprecated subrepository API
2 parents 2f24c2a + da7a9df commit e389d73

17 files changed

+1033
-142
lines changed

README.md

+126-125
Large diffs are not rendered by default.

src/Api/Projects.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
namespace PrivatePackagist\ApiClient\Api;
1111

1212
/**
13-
* @deprecated Use the Subrepositories API instead
13+
* @deprecated Use the Suborganizations API instead
1414
*/
1515
class Projects extends Subrepositories
1616
{

src/Api/Projects/MirroredRepositories.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
namespace PrivatePackagist\ApiClient\Api\Projects;
1111

1212
/**
13-
* @deprecated Use Subrepositories\MirroredRepositories instead
13+
* @deprecated Use \PrivatePackagist\ApiClient\Api\Suborganizations\MirroredRepositories instead
1414
*/
1515
class MirroredRepositories extends \PrivatePackagist\ApiClient\Api\Subrepositories\MirroredRepositories
1616
{

src/Api/Projects/Packages.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
namespace PrivatePackagist\ApiClient\Api\Projects;
1111

1212
/**
13-
* @deprecated Use Subrepositories\Packages instead
13+
* @deprecated Use \PrivatePackagist\ApiClient\Api\Suborganizations\Packages instead
1414
*/
1515
class Packages extends \PrivatePackagist\ApiClient\Api\Subrepositories\Packages
1616
{

src/Api/Suborganizations.php

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?php
2+
3+
/**
4+
* (c) Packagist Conductors GmbH <[email protected]>
5+
*
6+
* For the full copyright and license information, please view the LICENSE
7+
* file that was distributed with this source code.
8+
*/
9+
10+
namespace PrivatePackagist\ApiClient\Api;
11+
12+
use PrivatePackagist\ApiClient\Exception\InvalidArgumentException;
13+
14+
class Suborganizations extends AbstractApi
15+
{
16+
public function all()
17+
{
18+
return $this->get('/suborganizations/');
19+
}
20+
21+
public function show($suborganizationName)
22+
{
23+
return $this->get(sprintf('/suborganizations/%s/', $suborganizationName));
24+
}
25+
26+
public function create($name)
27+
{
28+
return $this->post('/suborganizations/', ['name' => $name]);
29+
}
30+
31+
public function remove($suborganizationName)
32+
{
33+
return $this->delete(sprintf('/suborganizations/%s/', $suborganizationName));
34+
}
35+
36+
public function listTeams($suborganizationName)
37+
{
38+
return $this->get(sprintf('/suborganizations/%s/teams/', $suborganizationName));
39+
}
40+
41+
public function addOrEditTeams($suborganizationName, array $teams)
42+
{
43+
foreach ($teams as $team) {
44+
if (!isset($team['id'])) {
45+
throw new InvalidArgumentException('Parameter "id" is required.');
46+
}
47+
48+
if (!isset($team['permission'])) {
49+
throw new InvalidArgumentException('Parameter "permission" is required.');
50+
}
51+
}
52+
53+
return $this->post(sprintf('/suborganizations/%s/teams/', $suborganizationName), $teams);
54+
}
55+
56+
public function removeTeam($suborganizationName, $teamId)
57+
{
58+
return $this->delete(sprintf('/suborganizations/%s/teams/%s/', $suborganizationName, $teamId));
59+
}
60+
61+
public function listTokens($suborganizationName)
62+
{
63+
return $this->get(sprintf('/suborganizations/%s/tokens/', $suborganizationName));
64+
}
65+
66+
public function createToken($suborganizationName, array $tokenData)
67+
{
68+
return $this->post(sprintf('/suborganizations/%s/tokens/', $suborganizationName), $tokenData);
69+
}
70+
71+
public function removeToken($suborganizationName, $tokenId)
72+
{
73+
return $this->delete(sprintf('/suborganizations/%s/tokens/%s/', $suborganizationName, $tokenId));
74+
}
75+
76+
public function regenerateToken($suborganizationName, $tokenId, array $confirmation)
77+
{
78+
if (!isset($confirmation['IConfirmOldTokenWillStopWorkingImmediately'])) {
79+
throw new InvalidArgumentException('Confirmation is required to regenerate the Composer repository token.');
80+
}
81+
82+
return $this->post(sprintf('/suborganizations/%s/tokens/%s/regenerate', $suborganizationName, $tokenId), $confirmation);
83+
}
84+
85+
public function packages()
86+
{
87+
return new Suborganizations\Packages($this->client);
88+
}
89+
90+
public function mirroredRepositories()
91+
{
92+
return new Suborganizations\MirroredRepositories($this->client);
93+
}
94+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
3+
/**
4+
* (c) Packagist Conductors GmbH <[email protected]>
5+
*
6+
* For the full copyright and license information, please view the LICENSE
7+
* file that was distributed with this source code.
8+
*/
9+
10+
namespace PrivatePackagist\ApiClient\Api\Suborganizations;
11+
12+
use PrivatePackagist\ApiClient\Api\AbstractApi;
13+
use PrivatePackagist\ApiClient\Exception\InvalidArgumentException;
14+
15+
class MirroredRepositories extends AbstractApi
16+
{
17+
public function all($suborganizationName)
18+
{
19+
return $this->get(sprintf('/suborganizations/%s/mirrored-repositories/', $suborganizationName));
20+
}
21+
22+
public function add($suborganizationName, array $mirroredRepositories)
23+
{
24+
foreach ($mirroredRepositories as $mirroredRepository) {
25+
if (!isset($mirroredRepository['id'], $mirroredRepository['mirroringBehavior'])) {
26+
throw new InvalidArgumentException('The "id" and the "mirroringBehavior" are required to add a mirrored repository to a project');
27+
}
28+
}
29+
30+
return $this->post(sprintf('/suborganizations/%s/mirrored-repositories/', $suborganizationName), $mirroredRepositories);
31+
}
32+
33+
public function show($suborganizationName, $mirroredRepositoryId)
34+
{
35+
return $this->get(sprintf('/suborganizations/%s/mirrored-repositories/%s/', $suborganizationName, $mirroredRepositoryId));
36+
}
37+
38+
public function edit($suborganizationName, $mirroredRepositoryId, $mirroringBehavior)
39+
{
40+
return $this->put(sprintf('/suborganizations/%s/mirrored-repositories/%s/', $suborganizationName, $mirroredRepositoryId), [
41+
'mirroringBehavior' => $mirroringBehavior,
42+
]);
43+
}
44+
45+
public function remove($suborganizationName, $mirroredRepositoryId)
46+
{
47+
return $this->delete(sprintf('/suborganizations/%s/mirrored-repositories/%s/', $suborganizationName, $mirroredRepositoryId));
48+
}
49+
50+
public function listPackages($suborganizationName, $mirroredRepositoryId)
51+
{
52+
return $this->get(sprintf('/suborganizations/%s/mirrored-repositories/%s/packages/', $suborganizationName, $mirroredRepositoryId));
53+
}
54+
55+
public function addPackages($suborganizationName, $mirroredRepositoryId, array $packages)
56+
{
57+
return $this->post(sprintf('/suborganizations/%s/mirrored-repositories/%s/packages/', $suborganizationName, $mirroredRepositoryId), $packages);
58+
}
59+
60+
public function removePackages($suborganizationName, $mirroredRepositoryId)
61+
{
62+
return $this->delete(sprintf('/suborganizations/%s/mirrored-repositories/%s/packages/', $suborganizationName, $mirroredRepositoryId));
63+
}
64+
}

src/Api/Suborganizations/Packages.php

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
3+
/**
4+
* (c) Packagist Conductors GmbH <[email protected]>
5+
*
6+
* For the full copyright and license information, please view the LICENSE
7+
* file that was distributed with this source code.
8+
*/
9+
10+
namespace PrivatePackagist\ApiClient\Api\Suborganizations;
11+
12+
use PrivatePackagist\ApiClient\Api\AbstractApi;
13+
use PrivatePackagist\ApiClient\Exception\InvalidArgumentException;
14+
use PrivatePackagist\ApiClient\Payload\CustomPackageConfig;
15+
use PrivatePackagist\ApiClient\Payload\VcsPackageConfig;
16+
17+
class Packages extends AbstractApi
18+
{
19+
public function all($suborganizationName, array $filters = [])
20+
{
21+
if (isset($filters['origin']) && !in_array($filters['origin'], \PrivatePackagist\ApiClient\Api\Packages::AVAILABLE_ORIGINS, true)) {
22+
throw new InvalidArgumentException('Filter "origin" has to be one of: "' . implode('", "', \PrivatePackagist\ApiClient\Api\Packages::AVAILABLE_ORIGINS) . '".');
23+
}
24+
25+
return $this->get(sprintf('/suborganizations/%s/packages/', $suborganizationName), $filters);
26+
}
27+
28+
public function show($suborganizationName, $packageIdOrName)
29+
{
30+
return $this->get(sprintf('/suborganizations/%s/packages/%s', $suborganizationName, $packageIdOrName));
31+
}
32+
33+
public function createVcsPackage($suborganizationName, $url, $credentialId = null, $type = 'vcs', $defaultSuborganizationAccess = null)
34+
{
35+
$data = new VcsPackageConfig($url, $credentialId, $type, $defaultSuborganizationAccess);
36+
37+
return $this->post(sprintf('/suborganizations/%s/packages/', $suborganizationName), $data->toParameters());
38+
}
39+
40+
public function createCustomPackage($suborganizationName, $customJson, $credentialId = null, $defaultSuborganizationAccess = null)
41+
{
42+
$data = new CustomPackageConfig($customJson, $credentialId, $defaultSuborganizationAccess);
43+
44+
return $this->post(sprintf('/suborganizations/%s/packages/', $suborganizationName), $data->toParameters());
45+
}
46+
47+
public function editVcsPackage($suborganizationName, $packageIdOrName, $url, $credentialId = null, $type = 'vcs', $defaultSuborganizationAccess = null)
48+
{
49+
$data = new VcsPackageConfig($url, $credentialId, $type, $defaultSuborganizationAccess);
50+
51+
return $this->put(sprintf('/suborganizations/%s/packages/%s/', $suborganizationName, $packageIdOrName), $data->toParameters());
52+
}
53+
54+
public function editCustomPackage($suborganizationName, $packageIdOrName, $customJson, $credentialId = null, $defaultSuborganizationAccess = null)
55+
{
56+
$data = new CustomPackageConfig($customJson, $credentialId, $defaultSuborganizationAccess);
57+
58+
return $this->put(sprintf('/suborganizations/%s/packages/%s/', $suborganizationName, $packageIdOrName), $data->toParameters());
59+
}
60+
61+
public function remove($suborganizationName, $packageIdOrName)
62+
{
63+
return $this->delete(sprintf('/suborganizations/%s/packages/%s/', $suborganizationName, $packageIdOrName));
64+
}
65+
66+
public function listDependents($suborganizationName, $packageIdOrName)
67+
{
68+
return $this->get(sprintf('/suborganizations/%s/packages/%s/dependents/', $suborganizationName, $packageIdOrName));
69+
}
70+
}

src/Api/Subrepositories.php

+3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111

1212
use PrivatePackagist\ApiClient\Exception\InvalidArgumentException;
1313

14+
/**
15+
* @deprecated Use the Suborganizations API instead
16+
*/
1417
class Subrepositories extends AbstractApi
1518
{
1619
public function all()

src/Api/Subrepositories/MirroredRepositories.php

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
use PrivatePackagist\ApiClient\Api\AbstractApi;
1313
use PrivatePackagist\ApiClient\Exception\InvalidArgumentException;
1414

15+
/**
16+
* @deprecated Use \PrivatePackagist\ApiClient\Api\Suborganizations\MirroredRepositories instead
17+
*/
1518
class MirroredRepositories extends AbstractApi
1619
{
1720
public function all($subrepositoryName)

src/Api/Subrepositories/Packages.php

+3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
use PrivatePackagist\ApiClient\Payload\CustomPackageConfig;
1515
use PrivatePackagist\ApiClient\Payload\VcsPackageConfig;
1616

17+
/**
18+
* @deprecated Use \PrivatePackagist\ApiClient\Api\Suborganizations\Packages instead
19+
*/
1720
class Packages extends AbstractApi
1821
{
1922
public function all($subrepositoryName, array $filters = [])

src/Api/Teams.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public function create(string $name, TeamPermissions $permissions): array
2525
'permissions' => [
2626
'canEditTeamPackages' => (bool) $permissions->canEditTeamPackages,
2727
'canAddPackages' => (bool) $permissions->canAddPackages,
28-
'canCreateSubrepositories' => (bool) $permissions->canCreateSubrepositories,
28+
'canCreateSuborganizations' => $permissions->canCreateSuborganizations || $permissions->canCreateSubrepositories,
2929
'canViewVendorCustomers' => (bool) $permissions->canViewVendorCustomers,
3030
'canManageVendorCustomers' => (bool) $permissions->canManageVendorCustomers,
3131
],
@@ -46,7 +46,7 @@ public function edit($teamId, string $name, TeamPermissions $permissions): array
4646
'permissions' => [
4747
'canEditTeamPackages' => (bool) $permissions->canEditTeamPackages,
4848
'canAddPackages' => (bool) $permissions->canAddPackages,
49-
'canCreateSubrepositories' => (bool) $permissions->canCreateSubrepositories,
49+
'canCreateSuborganizations' => $permissions->canCreateSuborganizations || $permissions->canCreateSubrepositories,
5050
'canViewVendorCustomers' => (bool) $permissions->canViewVendorCustomers,
5151
'canManageVendorCustomers' => (bool) $permissions->canManageVendorCustomers,
5252
],

src/Client.php

+11-2
Original file line numberDiff line numberDiff line change
@@ -74,19 +74,28 @@ public function customers()
7474
}
7575

7676
/**
77-
* @deprecated Use Client::subrepositories instead
77+
* @deprecated Use Client::suborganizations instead
7878
*/
79-
#[\Deprecated('Use Client::subrepositories instead', '1.16.1')]
79+
#[\Deprecated('Use Client::suborganizations instead', '1.16.1')]
8080
public function projects()
8181
{
8282
return new Api\Subrepositories($this, $this->responseMediator);
8383
}
8484

85+
/**
86+
* @deprecated Use Client::suborganizations instead
87+
*/
88+
#[\Deprecated('Use Client::suborganizations instead', '1.38.0')]
8589
public function subrepositories()
8690
{
8791
return new Api\Subrepositories($this, $this->responseMediator);
8892
}
8993

94+
public function suborganizations()
95+
{
96+
return new Api\Suborganizations($this, $this->responseMediator);
97+
}
98+
9099
public function organization()
91100
{
92101
return new Api\Organization($this, $this->responseMediator);

src/TeamPermissions.php

+14-3
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,23 @@ final class TeamPermissions
1313
{
1414
public const PERMISSION_CAN_EDIT_TEAM_PACKAGES = 1 << 0;
1515
public const PERMISSION_CAN_ADD_PACKAGES = 1 << 1;
16+
/** @deprecated Use PERMISSION_CAN_CREATE_SUBORGANIZATIONS instead */
17+
#[\Deprecated('Use TeamPermissions::PERMISSION_CAN_CREATE_SUBORGANIZATIONS instead', '1.38.0')]
1618
public const PERMISSION_CAN_CREATE_SUBREPOSITORIES = 1 << 2;
19+
public const PERMISSION_CAN_CREATE_SUBORGANIZATIONS = 1 << 2;
1720
public const PERMISSION_CAN_VIEW_VENDOR_CUSTOMERS = 1 << 3;
1821
public const PERMISSION_CAN_MANAGE_VENDOR_CUSTOMERS = 1 << 4;
1922

2023
/** @var bool */
2124
public $canEditTeamPackages = false;
2225
/** @var bool */
2326
public $canAddPackages = false;
24-
/** @var bool */
27+
/**
28+
* @var bool
29+
* @deprecated Use $canCreateSuborganizations instead
30+
*/
2531
public $canCreateSubrepositories = false;
32+
public $canCreateSuborganizations = false;
2633
/** @var bool */
2734
public $canViewVendorCustomers = false;
2835
/** @var bool */
@@ -33,18 +40,22 @@ public static function fromFlags(int $flags): self
3340
$permissions = new self;
3441
$permissions->canEditTeamPackages = ($flags & self::PERMISSION_CAN_EDIT_TEAM_PACKAGES) > 0;
3542
$permissions->canAddPackages = ($flags & self::PERMISSION_CAN_ADD_PACKAGES) > 0;
36-
$permissions->canCreateSubrepositories = ($flags & self::PERMISSION_CAN_CREATE_SUBREPOSITORIES) > 0;
43+
$permissions->canCreateSubrepositories = ($flags & self::PERMISSION_CAN_CREATE_SUBORGANIZATIONS) > 0;
44+
$permissions->canCreateSuborganizations = ($flags & self::PERMISSION_CAN_CREATE_SUBORGANIZATIONS) > 0;
3745
$permissions->canViewVendorCustomers = ($flags & self::PERMISSION_CAN_VIEW_VENDOR_CUSTOMERS) > 0;
3846
$permissions->canManageVendorCustomers = ($flags & self::PERMISSION_CAN_MANAGE_VENDOR_CUSTOMERS) > 0;
3947
return $permissions;
4048
}
4149

4250
public static function fromTeamResponse(array $team): self
4351
{
52+
$canCreateSuborganizations = isset($team['permissions']['canCreateSuborganizations']) && $team['permissions']['canCreateSuborganizations'] || isset($team['permissions']['canCreateSubrepositories']) && $team['permissions']['canCreateSubrepositories'];
53+
4454
$permissions = new self;
4555
$permissions->canEditTeamPackages = isset($team['permissions']['canEditTeamPackages']) && $team['permissions']['canEditTeamPackages'];
4656
$permissions->canAddPackages = isset($team['permissions']['canAddPackages']) && $team['permissions']['canAddPackages'];
47-
$permissions->canCreateSubrepositories = isset($team['permissions']['canCreateSubrepositories']) && $team['permissions']['canCreateSubrepositories'];
57+
$permissions->canCreateSubrepositories = $canCreateSuborganizations;
58+
$permissions->canCreateSuborganizations = $canCreateSuborganizations;
4859
$permissions->canViewVendorCustomers = isset($team['permissions']['canViewVendorCustomers']) && $team['permissions']['canViewVendorCustomers'];
4960
$permissions->canManageVendorCustomers = isset($team['permissions']['canManageVendorCustomers']) && $team['permissions']['canManageVendorCustomers'];
5061
return $permissions;

0 commit comments

Comments
 (0)