initial implementation of demo organization provider

This commit is contained in:
Jonathan Treffler 2024-11-03 02:13:10 +01:00
parent 9d2d0a7988
commit 429ca86ce9
5 changed files with 180 additions and 0 deletions

21
appinfo/info.xml Normal file
View file

@ -0,0 +1,21 @@
<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>demo_organization_provider</id>
<name>Demo Organization Provider</name>
<summary></summary>
<description><![CDATA[]]></description>
<version>1.0.0</version>
<licence>agpl</licence>
<author mail="mail@jonathan-treffler.de">Jonathan Treffler</author>
<namespace>DemoOrganizationProvider</namespace>
<category>files</category>
<bugs>https://git.verdigado.com/verdigado-public/demo_organization_provider/issues</bugs>
<dependencies>
<php min-version="8.2" />
<database>pgsql</database>
<database>sqlite</database>
<database>mysql</database>
<nextcloud min-version="30" max-version="30"/>
</dependencies>
</info>

8
appinfo/routes.php Normal file
View file

@ -0,0 +1,8 @@
<?php
return [
'resources' => [
],
'routes' => [
]
];

View file

@ -0,0 +1,28 @@
<?php
namespace OCA\DemoOrganizationProvider\AppInfo;
use OCP\AppFramework\App;
use OCP\AppFramework\Bootstrap\IBootstrap;
use OCP\AppFramework\Bootstrap\IRegistrationContext;
use OCP\AppFramework\Bootstrap\IBootContext;
use OCA\OrganizationFolders\Events\RegisterOrganizationProviderEvent;
use OCA\DemoOrganizationProvider\Listener\RegisterOrganizationProviderListener;
class Application extends App implements IBootstrap {
public const APP_ID = 'demo_organization_provider';
public function __construct() {
parent::__construct(self::APP_ID);
}
public function register(IRegistrationContext $context): void {
$context->registerEventListener(RegisterOrganizationProviderEvent::class, RegisterOrganizationProviderListener::class);
}
public function boot(IBootContext $context): void {
}
}

View file

@ -0,0 +1,25 @@
<?php
declare(strict_types=1);
namespace OCA\DemoOrganizationProvider\Listener;
use OCA\DemoOrganizationProvider\OrganizationProviders\DemoOrganizationProvider;
use OCA\OrganizationFolders\Events\RegisterOrganizationProviderEvent;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use Psr\Container\ContainerInterface;
class RegisterOrganizationProviderListener implements IEventListener {
public function __construct(private ContainerInterface $container) {}
public function handle(Event $event): void {
if ($event instanceof RegisterOrganizationProviderEvent) {
$organizationProviderManager = $event->getOrganizationProviderManager();
$organizationProviderManager->registerOrganizationProvider(new DemoOrganizationProvider());
}
}
}

View file

@ -0,0 +1,98 @@
<?php
declare(strict_types=1);
namespace OCA\DemoOrganizationProvider\OrganizationProviders;
use OCA\OrganizationFolders\Model\Organization;
use OCA\OrganizationFolders\Model\OrganizationRole;
use OCA\OrganizationFolders\Errors\OrganizationNotFound;
use OCA\OrganizationFolders\Errors\OrganizationRoleNotFound;
class DemoOrganizationProvider extends \OCA\OrganizationFolders\OrganizationProvider\OrganizationProvider {
protected $id = "demo";
private const DEMO_ORGANIZATIONS = [1, 2, 11, 12, 13, 21, 22];
/**
* @return Organization
* @throws OrganizationNotFound
*/
public function getOrganization(int $id): Organization {
if(in_array($id, self::DEMO_ORGANIZATIONS)) {
return new Organization($id, (string)$id);
} else {
throw new OrganizationNotFound("demo", $id);
}
}
/**
* @return Organization[]
*/
public function getSubOrganizations(?int $parentOrganizationId = null): array {
if(is_null($parentOrganizationId)) {
return [
new Organization(1, "1"),
new Organization(2, "2"),
];
} else if ($parentOrganizationId === 1) {
return [
new Organization(11, "11"),
new Organization(12, "12"),
new Organization(13, "13"),
];
} else if ($parentOrganizationId === 2) {
return [
new Organization(21, "21"),
new Organization(22, "22"),
];
} else {
return [];
}
}
/**
* @return OrganizationRole
* @throws OrganizationRoleNotFound
*/
public function getRole(string $id): OrganizationRole {
[$organizationIdString, $roleNumberString] = explode("_", $id, 2);
$organizationId = (int)$organizationIdString;
$roleNumber = (int)$roleNumberString;
if(in_array($organizationId, self::DEMO_ORGANIZATIONS)) {
if($roleNumber >= 1 && $roleNumber <= 3) {
return new OrganizationRole(
id: $id,
organizationId: $organizationId,
friendlyName: "Role " . $roleNumber . " of org " . $organizationId,
membersGroup: $id
);
}
}
throw new OrganizationRoleNotFound("demo", $id);
}
/**
* @return OrganizationRole[]
*/
public function getRolesOfOrganization(int $organizationId): array {
if(in_array($organizationId, self::DEMO_ORGANIZATIONS)) {
$result = [];
for($i = 1; $i <= 3; $i++) {
$result[] = new OrganizationRole(
id: $organizationId . "_" . $i,
organizationId: $organizationId,
friendlyName: "Role " . $i . " of org " . $organizationId,
membersGroup: $organizationId . "_" . $i
);
}
return $result;
} else {
return [];
}
}
}