Browse Source

Delete groups from settings when they are deleted

Signed-off-by: Joas Schilling <coding@schilljs.com>
pull/5483/head
Joas Schilling 5 years ago
parent
commit
a564828c88
No known key found for this signature in database GPG Key ID: 7076EA9751AACDDA
  1. 3
      lib/AppInfo/Application.php
  2. 65
      lib/Listener/GroupDeletedListener.php

3
lib/AppInfo/Application.php

@ -45,6 +45,7 @@ use OCA\Talk\Flow\Operation;
use OCA\Talk\Listener\BeforeUserLoggedOutListener;
use OCA\Talk\Listener\CSPListener;
use OCA\Talk\Listener\FeaturePolicyListener;
use OCA\Talk\Listener\GroupDeletedListener;
use OCA\Talk\Listener\GroupMembershipListener;
use OCA\Talk\Listener\RestrictStartingCalls as RestrictStartingCallsListener;
use OCA\Talk\Listener\UserDeletedListener;
@ -72,6 +73,7 @@ use OCP\AppFramework\Bootstrap\IRegistrationContext;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Collaboration\Resources\IProviderManager;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Group\Events\GroupDeletedEvent;
use OCP\Group\Events\UserAddedEvent;
use OCP\Group\Events\UserRemovedEvent;
use OCP\IServerContainer;
@ -97,6 +99,7 @@ class Application extends App implements IBootstrap {
$context->registerEventListener(AddContentSecurityPolicyEvent::class, CSPListener::class);
$context->registerEventListener(AddFeaturePolicyEvent::class, FeaturePolicyListener::class);
$context->registerEventListener(GroupDeletedEvent::class, GroupDeletedListener::class);
$context->registerEventListener(UserDeletedEvent::class, UserDeletedListener::class);
$context->registerEventListener(UserAddedEvent::class, GroupMembershipListener::class);
$context->registerEventListener(UserRemovedEvent::class, GroupMembershipListener::class);

65
lib/Listener/GroupDeletedListener.php

@ -0,0 +1,65 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2020 Joas Schilling <coding@schilljs.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Talk\Listener;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\Group\Events\GroupDeletedEvent;
use OCP\IConfig;
class GroupDeletedListener implements IEventListener {
/** @var IConfig */
private $config;
public function __construct(IConfig $config) {
$this->config = $config;
}
public function handle(Event $event): void {
if (!($event instanceof GroupDeletedEvent)) {
// Unrelated
return;
}
$gid = $event->getGroup()->getGID();
$this->removeGroupFromConfig('sip_bridge_groups', $gid);
$this->removeGroupFromConfig('start_conversations', $gid);
$this->removeGroupFromConfig('allowed_groups', $gid);
}
protected function removeGroupFromConfig(string $configKey, string $removeGroupId): void {
$json = $this->config->getAppValue('spreed', $configKey, '[]');
$array = json_decode($json, true);
$gids = \is_array($array) ? $array : [];
$gids = array_filter($gids, static function($gid) use ($removeGroupId) {
return $gid !== $removeGroupId;
});
$this->config->setAppValue('spreed', $configKey, json_encode($gids));
}
}
Loading…
Cancel
Save