Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Verified Commit 1074bc5f authored by Nivesh Krishna's avatar Nivesh Krishna
Browse files

on demand migration of rainloop data

parent 36be17d6
Loading
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ use OCA\EcloudAccounts\Service\LDAPConnectionService;
use OCP\User\Events\BeforeUserDeletedEvent;
use OCP\User\Events\UserChangedEvent;
use OCA\EcloudAccounts\Listeners\UserChangedListener;
use OCA\EcloudAccounts\Listeners\UserAddedToBetaGroupListener;


class Application extends App implements IBootstrap {
	public const APP_ID = 'ecloud-accounts';
@@ -46,6 +48,8 @@ class Application extends App implements IBootstrap {
	public function register(IRegistrationContext $context): void {
		$context->registerEventListener(BeforeUserDeletedEvent::class, BeforeUserDeletedListener::class);
		$context->registerEventListener(UserChangedEvent::class, UserChangedListener::class);
		$context->registerEventListener(UserAddedEvent::class, UserAddedToBetaGroupListener::class);

	}

	public function boot(IBootContext $context): void {
+65 −0
Original line number Diff line number Diff line
<?php

declare(strict_types=1);

namespace OCA\EcloudAccounts\Listeners;

use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\Group\Events\UserAddedEvent;
use OCP\IUser;
use OCP\IConfig;


class UserAddedToBetaGroupListener implements IEventListener {

	private $config;

	public function __construct(
        IConfig $config
	) {
        $this->config = $config;
	}

	public function handle(Event $event): void {
		if (!($event instanceof UserAddedEvent)) {
			return;
		}

		$user = $event->getUser();
		$group = $event->getGroup();

        $betaGroup = $this->config->getSystemValue("beta_group_name");

        if ($group->GID() !== $betaGroup) return;
		
        $this->migrateRainloopData($user);

	}

    private function migrateRainloopData(IUser $user): void {

        $dir = \rtrim(\trim(\OC::$server->getSystemConfig()->getValue('datadirectory', '')), '\\/');
		$dir_snappy = $dir . '/appdata_snappymail/';
		$dir_rainloop = $dir . '/rainloop-storage/_data_/_default_/storage/cfg/';
		$iterator = new \RecursiveIteratorIterator(
			new \RecursiveDirectoryIterator($dir_rainloop, \RecursiveDirectoryIterator::SKIP_DOTS),
			\RecursiveIteratorIterator::SELF_FIRST
		);
		foreach ($iterator as $item) {
			$target = $dir_snappy . $iterator->getSubPathname();
			if (\preg_match('@/plugins/([^/])@', $target, $match)) {
				$rainloop_plugins[$match[1]] = $match[1];
			} else if (!\strpos($target, '/cache/')) {
				if ($item->isDir()) {
					\is_dir($target) || \mkdir($target, 0755, true);
				} else if (\file_exists($target)) {
					$result[] = "skipped: {$target}";
				} else {
					\copy($item, $target);
					$result[] = "copied : {$target}";
				}
			}
		}
    }
}