Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
This commit is contained in:
Maxence Lange 2021-04-20 11:59:19 -01:00
parent 7e0eb8fb49
commit cd81b7970d
137 changed files with 801 additions and 234 deletions

8
composer.lock generated
View file

@ -12,12 +12,12 @@
"source": {
"type": "git",
"url": "https://github.com/daita/my-small-php-tools.git",
"reference": "30f9cff1d215854ed440dcaaafc2964cfa7aad3b"
"reference": "7d25743c2cd79521df3e3353a9358ec3931c6ad1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/daita/my-small-php-tools/zipball/30f9cff1d215854ed440dcaaafc2964cfa7aad3b",
"reference": "30f9cff1d215854ed440dcaaafc2964cfa7aad3b",
"url": "https://api.github.com/repos/daita/my-small-php-tools/zipball/7d25743c2cd79521df3e3353a9358ec3931c6ad1",
"reference": "7d25743c2cd79521df3e3353a9358ec3931c6ad1",
"shasum": ""
},
"require": {
@ -45,7 +45,7 @@
"issues": "https://github.com/daita/my-small-php-tools/issues",
"source": "https://github.com/daita/my-small-php-tools/tree/master"
},
"time": "2021-03-27T14:04:08+00:00"
"time": "2021-04-19T21:42:37+00:00"
}
],
"packages-dev": [],

View file

@ -6,7 +6,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -6,7 +6,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Vinicius Cubas Brand <vinicius@eita.org.br>
* @author Daniel Tygel <dtygel@eita.org.br>
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Vinicius Cubas Brand <vinicius@eita.org.br>
* @author Daniel Tygel <dtygel@eita.org.br>
*
@ -37,15 +37,18 @@ namespace OCA\Circles\AppInfo;
use Closure;
use OC;
use OCA\Circles\Api\v1\Circles;
use OCA\Circles\Events\AddingCircleMemberEvent;
use OCA\Circles\Events\CircleMemberAddedEvent;
use OCA\Circles\Exceptions\GSStatusException;
use OCA\Circles\GlobalScale\GSMount\MountProvider;
use OCA\Circles\Handlers\WebfingerHandler;
use OCA\Circles\Listeners\Files\MemberAdded as ListenerFilesMemberAdded;
use OCA\Circles\Listeners\Files\AddingMember as ListenerFilesAddingMember;
use OCA\Circles\Listeners\Files\MemberAdded as ListenerFilesMemberAdded;
use OCA\Circles\Listeners\GroupCreated;
use OCA\Circles\Listeners\GroupDeleted;
use OCA\Circles\Listeners\GroupMemberAdded;
use OCA\Circles\Listeners\GroupMemberRemoved;
use OCA\Circles\Listeners\UserCreated;
use OCA\Circles\Listeners\UserDeleted;
use OCA\Circles\Notification\Notifier;
use OCA\Circles\Service\ConfigService;
@ -58,10 +61,13 @@ use OCP\AppFramework\Bootstrap\IBootstrap;
use OCP\AppFramework\Bootstrap\IRegistrationContext;
use OCP\AppFramework\IAppContainer;
use OCP\AppFramework\QueryException;
use OCP\Group\Events\GroupCreatedEvent;
use OCP\Group\Events\GroupDeletedEvent;
use OCP\Group\Events\UserAddedEvent;
use OCP\Group\Events\UserRemovedEvent;
use OCP\IServerContainer;
use OCP\User\Events\UserCreatedEvent;
use OCP\User\Events\UserDeletedEvent;
use OCP\Util;
use Throwable;
@ -109,9 +115,18 @@ class Application extends App implements IBootstrap {
*/
public function register(IRegistrationContext $context): void {
$context->registerCapability(Capabilities::class);
$context->registerEventListener(UserDeletedEvent::class, UserDeleted::class);
$context->registerEventListener(GroupDeletedEvent::class, GroupDeleted::class);
// User Events
$context->registerEventListener(UserCreatedEvent::class, UserCreated::class);
$context->registerEventListener(UserDeletedEvent::class, UserDeleted::class);
// Group Events
$context->registerEventListener(GroupCreatedEvent::class, GroupCreated::class);
$context->registerEventListener(GroupDeletedEvent::class, GroupDeleted::class);
$context->registerEventListener(UserAddedEvent::class, GroupMemberAdded::class);
$context->registerEventListener(UserRemovedEvent::class, GroupMemberRemoved::class);
// Local Events (for Files/Shares management)
$context->registerEventListener(AddingCircleMemberEvent::class, ListenerFilesAddingMember::class);
$context->registerEventListener(CircleMemberAddedEvent::class, ListenerFilesMemberAdded::class);

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Vinicius Cubas Brand <vinicius@eita.org.br>
* @author Daniel Tygel <dtygel@eita.org.br>
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -148,7 +148,7 @@ class CirclesList extends Base {
* @throws UnknownRemoteException
* @throws UserTypeNotFoundException
* @throws FederatedItemException
* @throws MemberNotFoundException
* @throws MemberNotFoundException
* @throws SingleCircleNotFoundException
*/
protected function execute(InputInterface $input, OutputInterface $output): int {

View file

@ -196,10 +196,12 @@ class CirclesTest extends Base {
$this->loadConfiguration();
if (!$this->input->getOption('skip-setup')) {
$this->t('Initialisation');
if (!$this->input->getOption('skip-init')) {
$this->t('Initialisation Nextcloud');
$this->initEnvironment();
}
$this->t('Initialisation Circles App');
$this->reloadCirclesApp();
$this->configureCirclesApp();
$this->confirmVersion();
@ -219,14 +221,14 @@ class CirclesTest extends Base {
$this->t('Adding local users and moderators');
$this->addLocalMemberByUserId();
$this->addLocalMemberBySingleId();
$this->addLocalMemberUsingMember();
$this->levelLocalMemberToModerator();
$this->addRemoteMemberUsingModerator();
$this->addRemoteMemberUsingRemoteMember();
$this->levelRemoteMemberToAdmin();
$this->addRemoteMemberUsingRemoteAdmin();
// $this->addLocalMemberBySingleId();
// $this->addLocalMemberUsingMember();
// $this->levelLocalMemberToModerator();
// $this->addRemoteMemberUsingModerator();
// $this->addRemoteMemberUsingRemoteMember();
// $this->levelRemoteMemberToAdmin();
// $this->addRemoteMemberUsingRemoteAdmin();
//
}
@ -260,11 +262,21 @@ class CirclesTest extends Base {
* @throws ItemNotFoundException
*/
private function initEnvironment() {
$this->p('Disabling Password Policy App:');
foreach ($this->getInstances() as $instanceId) {
$this->occ($instanceId, 'app:disable password_policy', false, false);
$this->pm($instanceId);
}
$this->r();
foreach ($this->getInstances() as $instance) {
$this->p('Creating users on ' . $instance);
foreach ($this->getConfigArray($instance, 'users') as $userId) {
$this->pm($userId);
$this->occ($instance, 'user:add ' . $userId, false, false);
$this->occ(
$instance, 'user:add --password-from-env ' . $userId, false, false,
['OC_PASS' => 'testtest']
);
}
$this->r();
@ -402,7 +414,7 @@ class CirclesTest extends Base {
$compareToOwnerBasedOn = new Circle();
$compareToOwnerBasedOn->setConfig(Circle::CFG_SINGLE)
->setName('user:' . $userId . ':{CIRCLEID}')
->setDisplayName('user:' . $userId . ':{CIRCLEID}');
->setDisplayName($userId);
$compareToOwner = new Member();
$compareToOwner->setUserId($userId)
@ -420,10 +432,10 @@ class CirclesTest extends Base {
$compareTo->setOwner($compareToOwner)
->setConfig(Circle::CFG_SINGLE)
->setName('user:' . $userId . ':{CIRCLEID}')
->setDisplayName('user:' . $userId . ':{CIRCLEID}');
->setDisplayName($userId);
$this->confirmCircleData($circle, $compareTo);
$this->r(true, $circle->getId());
$this->r(true, $circle->getSingleId());
}
$this->p('Checking Single Circle for <comment>Circles App</comment>');
@ -432,7 +444,7 @@ class CirclesTest extends Base {
$compareToOwnerBasedOn = new Circle();
$compareToOwnerBasedOn->setConfig(Circle::CFG_SINGLE | Circle::CFG_ROOT)
->setName('app:circles:{CIRCLEID}')
->setDisplayName('app:circles:{CIRCLEID}');
->setDisplayName('circles');
$compareToOwner = new Member();
$compareToOwner->setUserId(Application::APP_ID)
@ -450,10 +462,10 @@ class CirclesTest extends Base {
$compareTo->setOwner($compareToOwner)
->setConfig(Circle::CFG_SINGLE | Circle::CFG_ROOT)
->setName('app:circles:{CIRCLEID}')
->setDisplayName('app:circles:{CIRCLEID}');
->setDisplayName('circles');
$this->confirmCircleData($circle, $compareTo);
$this->r(true, $circle->getId());
$this->r(true, $circle->getSingleId());
foreach ($this->getConfigArray($instanceId, 'groups') as $groupId => $members) {
$this->p('Checking Circle for <comment>' . $groupId . '@' . $instance . '</comment>');
@ -485,7 +497,7 @@ class CirclesTest extends Base {
->setDisplayName($groupId);
$this->confirmCircleData($circle, $compareTo);
$this->r(true, $circle->getId());
$this->r(true, $circle->getSingleId());
}
$this->output->writeln('');
@ -551,49 +563,49 @@ class CirclesTest extends Base {
$localInstanceId = 'global-scale-1';
$name = self::$TEST_CIRCLES[0];
$owner = $this->getInstanceUsers($localInstanceId)[1];
$dataCreatedCircle001 = $this->occ($localInstanceId, 'circles:manage:create ' . $owner . ' ' . $name);
$dataCreatedCircle001 = $this->occ($localInstanceId, 'circles:manage:create --type user ' . $owner . ' ' . $name);
/** @var Circle $createdCircle */
$createdCircle = $this->deserialize($dataCreatedCircle001, Circle::class);
$this->circles[$localInstanceId][$createdCircle->getName()] = $createdCircle;
$this->r(true, $createdCircle->getId());;
$this->r(true, $createdCircle->getSingleId());;
$this->p('Comparing data returned at creation');
if ($createdCircle->getId() === '' || $createdCircle->getOwner()->getId() === '') {
if ($createdCircle->getSingleId() === '' || $createdCircle->getOwner()->getId() === '') {
throw new InvalidItemException('empty id or owner.member_id');
}
$knownOwner = new Member();
$knownOwner->importFromIFederatedUser($this->federatedUsers[$localInstanceId][$owner]);
$knownOwner->setCircleId($createdCircle->getId());
$knownOwner->setCircleId($createdCircle->getSingleId());
$knownOwner->setLevel(Member::LEVEL_OWNER);
$knownOwner->setStatus(Member::STATUS_MEMBER);
$knownOwner->setId($createdCircle->getOwner()->getId());
$compareTo = new Circle();
$compareTo->setOwner($knownOwner)
->setId($createdCircle->getId())
->setSingleId($createdCircle->getSingleId())
->setInitiator($knownOwner)
->setConfig(Circle::CFG_CIRCLE)
->setName($name)
->setDisplayName($name);
echo json_encode($createdCircle, JSON_PRETTY_PRINT);
$this->confirmCircleData($createdCircle, $compareTo, 'circle', true);
$this->r();
$this->p('Comparing local stored data');
$dataCircle = $this->occ($localInstanceId, 'circle:manage:details ' . $createdCircle->getId());
$dataCircle = $this->occ($localInstanceId, 'circle:manage:details ' . $createdCircle->getSingleId());
/** @var Circle $tmpCircle */
$tmpCircle = $this->deserialize($dataCircle, Circle::class);
$this->confirmCircleData($tmpCircle, $createdCircle);
$this->r(true, $tmpCircle->getId());
$this->r(true, $tmpCircle->getSingleId());
$links = $this->getConfigArray('global-scale-1', 'remote');
foreach ($this->getInstances(false) as $instanceId) {
$this->p('Comparing data stored on ' . $instanceId);
$dataCircle =
$this->occ($instanceId, 'circle:manage:details ' . $createdCircle->getId(), false);
$this->occ($instanceId, 'circle:manage:details ' . $createdCircle->getSingleId(), false);
if ($instanceId === $localInstanceId || $links[$instanceId] === 'GlobalScale') {
/** @var Circle $tmpCircle */
@ -602,7 +614,7 @@ class CirclesTest extends Base {
$createdCircle->setInitiator(null)
->getOwner()->setBasedOn(null);
$this->confirmCircleData($tmpCircle, $createdCircle);
$this->r(true, $tmpCircle->getId());
$this->r(true, $tmpCircle->getSingleId());
} else {
if (is_null($dataCircle)) {
$this->r(true, 'empty');
@ -622,20 +634,14 @@ class CirclesTest extends Base {
private function addLocalMemberByUserId() {
$this->p('Adding local user as member, based on userId');
$localInstanceId = 'global-scale-1';
$name = self::$TEST_CIRCLES[0];
$userId = $this->getInstanceUsers($localInstanceId)[4];
$circle = $this->getCircleByName($localInstanceId, $name);
$dataAddedMember =
$this->occ(
$localInstanceId, 'circles:members:add ' . $circle->getId() . ' ' . $userId . ' --type user'
);
/** @var Member $addedMember */
$addedMember = $this->deserialize($dataAddedMember, Member::class);
$instanceId = 'global-scale-1';
$circleName = self::$TEST_CIRCLES[0];
$member = $this->getInstanceUsers($instanceId)[2];
$addedMember = $this->processMemberAdd($instanceId, $circleName, $member, 'user');
$this->r(true, $addedMember->getId());;
// check test4
// check test2
}
@ -655,7 +661,7 @@ class CirclesTest extends Base {
$user = $userCircle->getOwner();
$dataAddedMember =
$this->occ(
$localInstanceId, 'circles:members:add ' . $circle->getId() . ' ' . $user->getSingleId()
$localInstanceId, 'circles:members:add ' . $circle->getSingleId() . ' ' . $user->getSingleId()
);
/** @var Member $addedMember */
$addedMember = $this->deserialize($dataAddedMember, Member::class);
@ -666,8 +672,23 @@ class CirclesTest extends Base {
private function addLocalMemberUsingMember() {
// fail
$this->p('Adding local member using local Member');
$localInstanceId = 'global-scale-1';
$initiator = $this->getInstanceUsers($localInstanceId)[6];
$member = $this->getInstanceUsers($localInstanceId)[6];
$circleName = self::$TEST_CIRCLES[0];
$circle = $this->getCircleByName($localInstanceId, $circleName);
$userId = $this->getInstanceUsers($localInstanceId)[6];
$userCircle = $this->getCircleByName($localInstanceId, 'user:' . $userId);
$user = $userCircle->getOwner();
$dataAddedMember =
$this->occ(
$localInstanceId, 'circles:members:add ' . $circle->getSingleId() . ' ' . $user->getSingleId()
);
/** @var Member $addedMember */
$addedMember = $this->deserialize($dataAddedMember, Member::class);
$this->r(true, $addedMember->getId());;
}
private function levelLocalMemberToModerator() {
@ -720,13 +741,13 @@ class CirclesTest extends Base {
}
private function removeLocalMemberUsingRemoteMember() {
// fail
// fail
}
private function removeLocalMemberUsingRemoteAdmin() {
}
private function removeRemoteMemberUsingRemoteMember() {
// fail
}
@ -753,11 +774,11 @@ class CirclesTest extends Base {
if (empty($params)) {
$params = [
'CIRCLEID' => $circle->getId()
'CIRCLEID' => $circle->getSingleId()
];
}
$this->compare($compareTo->getId(), $circle->getId(), $prefix . '.id', $params);
$this->compare($compareTo->getSingleId(), $circle->getSingleId(), $prefix . '.id', $params);
$this->compare($compareTo->getName(), $circle->getName(), $prefix . '.name', $params);
$this->compare(
$compareTo->getDisplayName(), $circle->getDisplayName(), $prefix . '.displayName', $params
@ -772,7 +793,7 @@ class CirclesTest extends Base {
if ($owner === null) {
throw new Exception('empty owner');
}
if ($owner->getCircleId() !== $circle->getId()) {
if ($owner->getCircleId() !== $circle->getSingleId()) {
throw new Exception($prefix . '.owner.circleId is different than ' . $prefix . '.id');
}
$this->confirmMemberData($owner, $compareToOwner, 'owner', false, $params);
@ -785,7 +806,7 @@ class CirclesTest extends Base {
throw new Exception('empty initiator');
}
$initiator = $circle->getInitiator();
if ($initiator->getCircleId() !== $circle->getId()) {
if ($initiator->getCircleId() !== $circle->getSingleId()) {
throw new Exception($prefix . '.initiator.circleId is different than ' . $prefix . '.id');
}
$this->confirmMemberData($initiator, $compareToInitiator, 'owner', false, $params);
@ -1003,6 +1024,7 @@ class CirclesTest extends Base {
* @param string $cmd
* @param bool $exceptionOnFail
* @param bool $jsonAsOutput
* @param array $env
*
* @return array
* @throws ItemNotFoundException
@ -1012,7 +1034,8 @@ class CirclesTest extends Base {
string $instance,
string $cmd,
bool $exceptionOnFail = true,
bool $jsonAsOutput = true
bool $jsonAsOutput = true,
array $env = []
): ?array {
$configInstance = $this->getConfigInstance($instance);
$path = $this->get('path', $configInstance);
@ -1023,7 +1046,7 @@ class CirclesTest extends Base {
$command = array_merge($command, ['--output=json']);
}
$process = new Process($command);
$process->run();
$process->run(null, $env);
if ($exceptionOnFail && !$process->isSuccessful()) {
throw new Exception(implode(' ', $command) . ' failed');
@ -1081,5 +1104,36 @@ class CirclesTest extends Base {
}
}
/**
* @param string $instanceId
* @param string $circleName
* @param string $userId
* @param string $type
*
* @return Member
* @throws CircleNotFoundException
* @throws InvalidItemException
* @throws ItemNotFoundException
*/
private function processMemberAdd(string $instanceId, string $circleName, string $userId, string $type
): Member {
$circle = $this->getCircleByName($instanceId, $circleName);
$dataAddedMember =
$this->occ(
$instanceId, 'circles:members:add ' . $circle->getSingleId() . ' ' . $userId . ' --type ' . $type
);
/** @var Member $addedMember */
$addedMember = $this->deserialize($dataAddedMember, Member::class);
echo 'ADDEDMEMBER: ' . json_encode($addedMember, JSON_PRETTY_PRINT) . "\n";
$federatedUser = $this->federatedUsers[$instanceId][$userId];
echo 'FEDERATEDUER: ' . json_encode($federatedUser, JSON_PRETTY_PRINT) . "\n";
return $addedMember;
}
}

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -6,7 +6,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Vinicius Cubas Brand <vinicius@eita.org.br>
* @author Daniel Tygel <dtygel@eita.org.br>
*

View file

@ -278,6 +278,9 @@ class CircleRequest extends CircleRequestBuilder {
if ($circle->getConfig() > 0) {
$qb->limitToConfig($circle->getConfig());
}
if ($circle->getSource() > 0) {
$qb->limitToSource($circle->getSource());
}
if ($circle->hasOwner()) {
$aliasOwner = $qb->generateAlias(CoreRequestBuilder::CIRCLE, CoreRequestBuilder::OWNER);
@ -303,13 +306,12 @@ class CircleRequest extends CircleRequestBuilder {
/**
* @param Circle $circle
*/
public function delete(Circle $circle) {
public function delete(Circle $circle): void {
$qb = $this->getCircleDeleteSql();
$qb->limitToUniqueId($circle->getSingleId());
$qb->execute();
}
}

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*
@ -214,6 +214,13 @@ class CoreRequestBuilder extends NC22ExtendedQueryBuilder {
$this->limitToDBFieldInt('config', $config);
}
/**
* @param int $source
*/
public function limitToSource(int $source): void {
$this->limitToDBFieldInt('source', $source);
}
/**
* @param int $config
*/

View file

@ -7,7 +7,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -6,7 +6,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -6,7 +6,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -6,7 +6,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -133,6 +133,30 @@ class MemberRequest extends MemberRequestBuilder {
}
/**
* @param IFederatedUser $federatedUser
*/
public function deleteFederatedUser(IFederatedUser $federatedUser): void {
$qb = $this->getMemberDeleteSql();
$qb->limitToSingleId($federatedUser->getSingleId());
$qb->execute();
}
/**
* @param IFederatedUser $federatedUser
* @param Circle $circle
*/
public function deleteFederatedUserFromCircle(IFederatedUser $federatedUser, Circle $circle): void {
$qb = $this->getMemberDeleteSql();
$qb->limitToSingleId($federatedUser->getSingleId());
$qb->limitToCircleId($circle->getSingleId());
$qb->execute();
}
/**
* @param Circle $circle
*/

View file

@ -69,12 +69,13 @@ class MembershipRequest extends MembershipRequestBuilder {
public function update(Membership $membership) {
$qb = $this->getMembershipUpdateSql();
$qb->set('level', $qb->createNamedParameter($membership->getLevel()));
$qb->set('parent', $qb->createNamedParameter($membership->getInheritanceLast()));
$qb->set('inheritance_last', $qb->createNamedParameter($membership->getInheritanceLast()));
$qb->set('inheritance_first', $qb->createNamedParameter($membership->getInheritanceFirst()));
$qb->set(
'path',
'inheritance_path',
$qb->createNamedParameter(json_encode($membership->getInheritancePath(), JSON_UNESCAPED_SLASHES))
);
$qb->set('depth', $qb->createNamedParameter($membership->getInheritanceDepth()));
$qb->set('inheritance_depth', $qb->createNamedParameter($membership->getInheritanceDepth()));
$qb->limitToSingleId($membership->getSingleId());
$qb->limitToCircleId($membership->getCircleId());

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

View file

@ -5,7 +5,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2017
* @license GNU AGPL version 3 or any later version
*

View file

@ -9,7 +9,7 @@ declare(strict_types=1);
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@pontapreta.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @license GNU AGPL version 3 or any later version
*

Some files were not shown because too many files have changed in this diff Show more