[dd-ctl] [nc] Add patches while they land upstream
See: https://github.com/nextcloud/mail/pull/6908Xnet-DigitalDemocratic-main-patch-41273
parent
38cc2a0564
commit
74b209b55b
|
@ -1,3 +1,9 @@
|
||||||
# Generate .orig and .patch files with ./dd-ctl genpatches
|
# Generate .orig and .patch files with ./dd-ctl genpatches
|
||||||
# file license author source
|
# file license author source
|
||||||
nginx.conf AGPL-3.0-or-later https://github.com/nextcloud/ https://raw.githubusercontent.com/nextcloud/docker/522559eefdd56d2e49259c3b0f4a0e92882cdb87/.examples/docker-compose/with-nginx-proxy/postgres/fpm/web/nginx.conf
|
nginx.conf AGPL-3.0-or-later https://github.com/nextcloud/ https://raw.githubusercontent.com/nextcloud/docker/522559eefdd56d2e49259c3b0f4a0e92882cdb87/.examples/docker-compose/with-nginx-proxy/postgres/fpm/web/nginx.conf
|
||||||
|
#nc_mail/appinfo.xml AGPL-3.0-or-later https://github.com/nextcloud/ https://raw.githubusercontent.com/MaadixNet/mail/feature/occ-account-update-command/appinfo/info.xml
|
||||||
|
#nc_mail/lib/Command/UpdateAccount.php AGPL-3.0-or-later https://github.com/nextcloud/ https://raw.githubusercontent.com/MaadixNet/mail/feature/occ-account-update-command/lib/Command/UpdateAccount.php
|
||||||
|
#nc_mail/lib/Db/MailAccountMapper.php AGPL-3.0-or-later https://github.com/nextcloud/ https://raw.githubusercontent.com/MaadixNet/mail/feature/occ-account-update-command/lib/Db/MailAccountMapper.php
|
||||||
|
nc_mail/appinfo/info.xml AGPL-3.0-or-later https://github.com/nextcloud/ https://raw.githubusercontent.com/nextcloud/mail/v1.12.8/appinfo/info.xml
|
||||||
|
nc_mail/lib/Command/UpdateAccount.php AGPL-3.0-or-later https://github.com/nextcloud/ https://raw.githubusercontent.com/nextcloud/mail/v1.12.8/lib/Command/UpdateAccount.php
|
||||||
|
nc_mail/lib/Db/MailAccountMapper.php AGPL-3.0-or-later https://github.com/nextcloud/ https://raw.githubusercontent.com/nextcloud/mail/v1.12.8/lib/Db/MailAccountMapper.php
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
<?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>mail</id>
|
||||||
|
<name>Mail</name>
|
||||||
|
<summary>💌 A mail app for Nextcloud</summary>
|
||||||
|
<description><![CDATA[**💌 A mail app for Nextcloud**
|
||||||
|
|
||||||
|
- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.
|
||||||
|
- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.
|
||||||
|
- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.
|
||||||
|
- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://horde.org) libraries.
|
||||||
|
- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!
|
||||||
|
]]></description>
|
||||||
|
<version>1.12.8</version>
|
||||||
|
<licence>agpl</licence>
|
||||||
|
<author>Greta Doçi</author>
|
||||||
|
<author homepage="https://github.com/nextcloud/groupware">Nextcloud Groupware Team</author>
|
||||||
|
<namespace>Mail</namespace>
|
||||||
|
<documentation>
|
||||||
|
<user>https://github.com/nextcloud/mail/blob/main/doc/user.md</user>
|
||||||
|
<admin>https://github.com/nextcloud/mail/blob/main/doc/admin.md</admin>
|
||||||
|
<developer>https://github.com/nextcloud/mail/blob/main/doc/developer.md</developer>
|
||||||
|
</documentation>
|
||||||
|
<category>social</category>
|
||||||
|
<category>office</category>
|
||||||
|
<website>https://github.com/nextcloud/mail#readme</website>
|
||||||
|
<bugs>https://github.com/nextcloud/mail/issues</bugs>
|
||||||
|
<repository type="git">https://github.com/nextcloud/mail.git</repository>
|
||||||
|
<screenshot>https://user-images.githubusercontent.com/1374172/79554966-278e1600-809f-11ea-82ea-7a0d72a2704f.png</screenshot>
|
||||||
|
<dependencies>
|
||||||
|
<php min-version="7.3" max-version="8.0" />
|
||||||
|
<nextcloud min-version="21" max-version="24" />
|
||||||
|
</dependencies>
|
||||||
|
<background-jobs>
|
||||||
|
<job>OCA\Mail\BackgroundJob\CleanupJob</job>
|
||||||
|
<job>OCA\Mail\BackgroundJob\OutboxWorkerJob</job>
|
||||||
|
</background-jobs>
|
||||||
|
<repair-steps>
|
||||||
|
<post-migration>
|
||||||
|
<step>OCA\Mail\Migration\AddMissingDefaultTags</step>
|
||||||
|
<step>OCA\Mail\Migration\AddMissingMessageIds</step>
|
||||||
|
<step>OCA\Mail\Migration\FixCollectedAddresses</step>
|
||||||
|
<step>OCA\Mail\Migration\FixBackgroundJobs</step>
|
||||||
|
<step>OCA\Mail\Migration\MakeItineraryExtractorExecutable</step>
|
||||||
|
<step>OCA\Mail\Migration\ProvisionAccounts</step>
|
||||||
|
<step>OCA\Mail\Migration\RepairMailTheads</step>
|
||||||
|
</post-migration>
|
||||||
|
</repair-steps>
|
||||||
|
<commands>
|
||||||
|
<command>OCA\Mail\Command\AddMissingTags</command>
|
||||||
|
<command>OCA\Mail\Command\CleanUp</command>
|
||||||
|
<command>OCA\Mail\Command\CreateAccount</command>
|
||||||
|
<command>OCA\Mail\Command\CreateTagMigrationJobEntry</command>
|
||||||
|
<command>OCA\Mail\Command\DeleteAccount</command>
|
||||||
|
<command>OCA\Mail\Command\DiagnoseAccount</command>
|
||||||
|
<command>OCA\Mail\Command\ExportAccount</command>
|
||||||
|
<command>OCA\Mail\Command\ExportAccountThreads</command>
|
||||||
|
<command>OCA\Mail\Command\SyncAccount</command>
|
||||||
|
<command>OCA\Mail\Command\TrainAccount</command>
|
||||||
|
<command>OCA\Mail\Command\Thread</command>
|
||||||
|
<command>OCA\Mail\Command\UpdateAccount</command>
|
||||||
|
</commands>
|
||||||
|
<settings>
|
||||||
|
<admin>OCA\Mail\Settings\AdminSettings</admin>
|
||||||
|
</settings>
|
||||||
|
<navigations>
|
||||||
|
<navigation>
|
||||||
|
<name>Mail</name>
|
||||||
|
<route>mail.page.index</route>
|
||||||
|
<icon>mail.svg</icon>
|
||||||
|
<order>3</order>
|
||||||
|
</navigation>
|
||||||
|
</navigations>
|
||||||
|
</info>
|
|
@ -0,0 +1,154 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
|
||||||
|
* @author Maadix
|
||||||
|
*
|
||||||
|
* Mail
|
||||||
|
*
|
||||||
|
* This code is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3,
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* 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, version 3,
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace OCA\Mail\Command;
|
||||||
|
|
||||||
|
use OCA\Mail\Db\MailAccountMapper;
|
||||||
|
use OCP\Security\ICrypto;
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
|
class UpdateAccount extends Command {
|
||||||
|
public const ARGUMENT_USER_ID = 'user-id';
|
||||||
|
public const ARGUMENT_EMAIL = 'email';
|
||||||
|
public const ARGUMENT_IMAP_HOST = 'imap-host';
|
||||||
|
public const ARGUMENT_IMAP_PORT = 'imap-port';
|
||||||
|
public const ARGUMENT_IMAP_SSL_MODE = 'imap-ssl-mode';
|
||||||
|
public const ARGUMENT_IMAP_USER = 'imap-user';
|
||||||
|
public const ARGUMENT_IMAP_PASSWORD = 'imap-password';
|
||||||
|
public const ARGUMENT_SMTP_HOST = 'smtp-host';
|
||||||
|
public const ARGUMENT_SMTP_PORT = 'smtp-port';
|
||||||
|
public const ARGUMENT_SMTP_SSL_MODE = 'smtp-ssl-mode';
|
||||||
|
public const ARGUMENT_SMTP_USER = 'smtp-user';
|
||||||
|
public const ARGUMENT_SMTP_PASSWORD = 'smtp-password';
|
||||||
|
|
||||||
|
/** @var mapper */
|
||||||
|
private $mapper;
|
||||||
|
|
||||||
|
/** @var ICrypto */
|
||||||
|
private $crypto;
|
||||||
|
|
||||||
|
public function __construct(MailAccountMapper $mapper, ICrypto $crypto) {
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
$this->mapper = $mapper;
|
||||||
|
$this->crypto = $crypto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function configure() {
|
||||||
|
$this->setName('mail:account:update');
|
||||||
|
$this->setDescription('Update a user\'s IMAP account');
|
||||||
|
$this->addArgument(self::ARGUMENT_USER_ID, InputArgument::REQUIRED);
|
||||||
|
$this->addArgument(self::ARGUMENT_EMAIL, InputArgument::REQUIRED);
|
||||||
|
|
||||||
|
$this->addOption(self::ARGUMENT_IMAP_HOST, '', InputOption::VALUE_OPTIONAL);
|
||||||
|
$this->addOption(self::ARGUMENT_IMAP_PORT, '', InputOption::VALUE_OPTIONAL);
|
||||||
|
$this->addOption(self::ARGUMENT_IMAP_SSL_MODE, '', InputOption::VALUE_OPTIONAL);
|
||||||
|
$this->addOption(self::ARGUMENT_IMAP_USER, '', InputOption::VALUE_OPTIONAL);
|
||||||
|
$this->addOption(self::ARGUMENT_IMAP_PASSWORD, '', InputOption::VALUE_OPTIONAL);
|
||||||
|
|
||||||
|
$this->addOption(self::ARGUMENT_SMTP_HOST, '', InputOption::VALUE_OPTIONAL);
|
||||||
|
$this->addOption(self::ARGUMENT_SMTP_PORT, '', InputOption::VALUE_OPTIONAL);
|
||||||
|
$this->addOption(self::ARGUMENT_SMTP_SSL_MODE, '', InputOption::VALUE_OPTIONAL);
|
||||||
|
$this->addOption(self::ARGUMENT_SMTP_USER, '', InputOption::VALUE_OPTIONAL);
|
||||||
|
$this->addOption(self::ARGUMENT_SMTP_PASSWORD, '', InputOption::VALUE_OPTIONAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output): int {
|
||||||
|
$userId = $input->getArgument(self::ARGUMENT_USER_ID);
|
||||||
|
$email = $input->getArgument(self::ARGUMENT_EMAIL);
|
||||||
|
|
||||||
|
$imapHost = $input->getOption(self::ARGUMENT_IMAP_HOST);
|
||||||
|
$imapPort = $input->getOption(self::ARGUMENT_IMAP_PORT);
|
||||||
|
$imapSslMode = $input->getOption(self::ARGUMENT_IMAP_SSL_MODE);
|
||||||
|
$imapUser = $input->getOption(self::ARGUMENT_IMAP_USER);
|
||||||
|
$imapPassword = $input->getOption(self::ARGUMENT_IMAP_PASSWORD);
|
||||||
|
|
||||||
|
$smtpHost = $input->getOption(self::ARGUMENT_SMTP_HOST);
|
||||||
|
$smtpPort = $input->getOption(self::ARGUMENT_SMTP_PORT);
|
||||||
|
$smtpSslMode = $input->getOption(self::ARGUMENT_SMTP_SSL_MODE);
|
||||||
|
$smtpUser = $input->getOption(self::ARGUMENT_SMTP_USER);
|
||||||
|
$smtpPassword = $input->getOption(self::ARGUMENT_SMTP_PASSWORD);
|
||||||
|
|
||||||
|
$mailAccount = $this->mapper->findByUserIdAndEmail($userId, $email);
|
||||||
|
|
||||||
|
if ($mailAccount) {
|
||||||
|
//INBOUND
|
||||||
|
if ($input->getOption(self::ARGUMENT_IMAP_HOST)) {
|
||||||
|
$mailAccount->setInboundHost($imapHost);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($input->getOption(self::ARGUMENT_IMAP_PORT)) {
|
||||||
|
$mailAccount->setInboundPort((int) $imapPort);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($input->getOption(self::ARGUMENT_IMAP_SSL_MODE)) {
|
||||||
|
$mailAccount->setInboundSslMode($imapSslMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($input->getOption(self::ARGUMENT_IMAP_PASSWORD)) {
|
||||||
|
$mailAccount->setInboundPassword($this->crypto->encrypt($imapPassword));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($input->getOption(self::ARGUMENT_SMTP_USER)) {
|
||||||
|
$mailAccount->setInboundUser($imapUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
// OUTBOUND
|
||||||
|
|
||||||
|
if ($input->getOption(self::ARGUMENT_SMTP_HOST)) {
|
||||||
|
$mailAccount->setOutboundHost($smtpHost);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($input->getOption(self::ARGUMENT_SMTP_PORT)) {
|
||||||
|
$mailAccount->setOutboundPort((int) $smtpPort);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($input->getOption(self::ARGUMENT_SMTP_SSL_MODE)) {
|
||||||
|
$mailAccount->setOutboundSslMode($smtpSslMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($input->getOption(self::ARGUMENT_SMTP_PASSWORD)) {
|
||||||
|
$mailAccount->setOutboundPassword($this->crypto->encrypt($smtpPassword));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($input->getOption(self::ARGUMENT_SMTP_USER)) {
|
||||||
|
$mailAccount->setOutboundUser($smtpUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->mapper->save($mailAccount);
|
||||||
|
|
||||||
|
$output->writeln("<info>Account $email for user $userId succesfully updated </info>");
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
$output->writeln("<info>No Email Account $email found for user $userId </info>");
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,188 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
|
||||||
|
* @author Christoph Wurst <wurst.christoph@gmail.com>
|
||||||
|
* @author Lukas Reschke <lukas@owncloud.com>
|
||||||
|
* @author Thomas Müller <thomas.mueller@tmit.eu>
|
||||||
|
*
|
||||||
|
* Mail
|
||||||
|
*
|
||||||
|
* This code is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3,
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* 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, version 3,
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace OCA\Mail\Db;
|
||||||
|
|
||||||
|
use OCP\AppFramework\Db\DoesNotExistException;
|
||||||
|
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||||
|
use OCP\AppFramework\Db\QBMapper;
|
||||||
|
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||||
|
use OCP\IDBConnection;
|
||||||
|
use OCP\IUser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @template-extends QBMapper<MailAccount>
|
||||||
|
*/
|
||||||
|
class MailAccountMapper extends QBMapper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param IDBConnection $db
|
||||||
|
*/
|
||||||
|
public function __construct(IDBConnection $db) {
|
||||||
|
parent::__construct($db, 'mail_accounts');
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Finds an Mail Account by id
|
||||||
|
*
|
||||||
|
* @param string $userId
|
||||||
|
* @param int $accountId
|
||||||
|
*
|
||||||
|
* @return MailAccount
|
||||||
|
*
|
||||||
|
* @throws DoesNotExistException
|
||||||
|
*/
|
||||||
|
public function find(string $userId, int $accountId): MailAccount {
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
$query = $qb
|
||||||
|
->select('*')
|
||||||
|
->from($this->getTableName())
|
||||||
|
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId)))
|
||||||
|
->andWhere($qb->expr()->eq('id', $qb->createNamedParameter($accountId)));
|
||||||
|
|
||||||
|
return $this->findEntity($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds an mail account by id
|
||||||
|
*
|
||||||
|
* @return MailAccount
|
||||||
|
* @throws DoesNotExistException
|
||||||
|
*/
|
||||||
|
public function findById(int $id): MailAccount {
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
$query = $qb
|
||||||
|
->select('*')
|
||||||
|
->from($this->getTableName())
|
||||||
|
->where($qb->expr()->eq('id', $qb->createNamedParameter($id)));
|
||||||
|
|
||||||
|
return $this->findEntity($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds all Mail Accounts by user id existing for this user
|
||||||
|
*
|
||||||
|
* @param string $userId the id of the user that we want to find
|
||||||
|
*
|
||||||
|
* @return MailAccount[]
|
||||||
|
*/
|
||||||
|
public function findByUserId(string $userId): array {
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
$query = $qb
|
||||||
|
->select('*')
|
||||||
|
->from($this->getTableName())
|
||||||
|
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId)));
|
||||||
|
|
||||||
|
return $this->findEntities($query);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Finds an mail account by user id and email address
|
||||||
|
*
|
||||||
|
* @return MailAccount
|
||||||
|
* @throws DoesNotExistException
|
||||||
|
*/
|
||||||
|
public function findByUserIdAndEmail(string $userId, string $email): MailAccount {
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
$query = $qb
|
||||||
|
->select('*')
|
||||||
|
->from($this->getTableName())
|
||||||
|
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR), IQueryBuilder::PARAM_STR))
|
||||||
|
->andWhere($qb->expr()->eq('email', $qb->createNamedParameter($email, IQueryBuilder::PARAM_STR), IQueryBuilder::PARAM_STR));
|
||||||
|
|
||||||
|
return $this->findEntity($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws DoesNotExistException
|
||||||
|
* @throws MultipleObjectsReturnedException
|
||||||
|
*/
|
||||||
|
public function findProvisionedAccount(IUser $user): MailAccount {
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
|
||||||
|
$query = $qb
|
||||||
|
->select('*')
|
||||||
|
->from($this->getTableName())
|
||||||
|
->where(
|
||||||
|
$qb->expr()->eq('user_id', $qb->createNamedParameter($user->getUID())),
|
||||||
|
$qb->expr()->isNotNull('provisioning_id')
|
||||||
|
);
|
||||||
|
|
||||||
|
return $this->findEntity($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves an User Account into the database
|
||||||
|
*
|
||||||
|
* @param MailAccount $account
|
||||||
|
*
|
||||||
|
* @return MailAccount
|
||||||
|
*/
|
||||||
|
public function save(MailAccount $account): MailAccount {
|
||||||
|
if ($account->getId() === null) {
|
||||||
|
return $this->insert($account);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->update($account);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteProvisionedAccounts(int $provisioningId): void {
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
|
||||||
|
$delete = $qb->delete($this->getTableName())
|
||||||
|
->where($qb->expr()->eq('provisioning_id', $qb->createNamedParameter($provisioningId, IQueryBuilder::PARAM_INT)));
|
||||||
|
|
||||||
|
$delete->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteProvisionedAccountsByUid(string $uid): void {
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
|
||||||
|
$delete = $qb->delete($this->getTableName())
|
||||||
|
->where(
|
||||||
|
$qb->expr()->eq('user_id', $qb->createNamedParameter($uid)),
|
||||||
|
$qb->expr()->isNotNull('provisioning_id')
|
||||||
|
);
|
||||||
|
|
||||||
|
$delete->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAllAccounts(): array {
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
$query = $qb
|
||||||
|
->select('*')
|
||||||
|
->from($this->getTableName());
|
||||||
|
|
||||||
|
return $this->findEntities($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAllUserIdsWithAccounts(): array {
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
$query = $qb
|
||||||
|
->selectDistinct('user_id')
|
||||||
|
->from($this->getTableName());
|
||||||
|
|
||||||
|
return $this->findEntities($query);
|
||||||
|
}
|
||||||
|
}
|
6
dd-ctl
6
dd-ctl
|
@ -306,6 +306,12 @@ setup_nextcloud(){
|
||||||
EOF
|
EOF
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Temporary patch while upstream lands our changes
|
||||||
|
# See: https://github.com/nextcloud/mail/pull/6908
|
||||||
|
for f in appinfo/info.xml lib/Command/UpdateAccount.php lib/Db/MailAccountMapper.php; do
|
||||||
|
install -m 0644 -o 82 -g 82 "dd-apps/docker/nextcloud/nc_mail/$f" "${SRC_FOLDER}/nextcloud/custom_apps/mail/$f"
|
||||||
|
done
|
||||||
|
|
||||||
# Custom forms
|
# Custom forms
|
||||||
docker exec dd-apps-nextcloud-app apk add git npm composer
|
docker exec dd-apps-nextcloud-app apk add git npm composer
|
||||||
docker exec -u www-data dd-apps-nextcloud-app rm -rf /var/www/html/custom_apps/forms
|
docker exec -u www-data dd-apps-nextcloud-app rm -rf /var/www/html/custom_apps/forms
|
||||||
|
|
Loading…
Reference in New Issue