%PDF- %PDF-
| Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Mail/ |
| Current File : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Mail/ShareCreatedMail.php |
<?php
/**
* This file is part of the Passwords App
* created by Marius David Wieschollek
* and licensed under the AGPL.
*/
namespace OCA\Passwords\Mail;
use OC_Defaults;
use OCA\Passwords\Services\LoggingService;
use OCA\Passwords\Services\UserService;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\IUser;
use OCP\Mail\IMailer;
/**
* Class ShareCreatedMail
*
* @package OCA\Passwords\Mail
*/
class ShareCreatedMail extends AbstractMail {
const MAIL_ID = 'share.created';
const MAIL_TYPE = 'shares';
/**
* @var UserService
*/
protected UserService $userService;
/**
* ShareCreatedMail constructor.
*
* @param IMailer $mailer
* @param OC_Defaults $defaults
* @param LoggingService $logger
* @param UserService $userService
* @param IURLGenerator $urlGenerator
*/
public function __construct(
IMailer $mailer,
OC_Defaults $defaults,
LoggingService $logger,
UserService $userService,
IURLGenerator $urlGenerator
) {
$this->userService = $userService;
parent::__construct($mailer, $defaults, $logger, $urlGenerator);
}
/**
* @param IUser $user
* @param IL10N $localisation
* @param mixed ...$parameters
*/
public function send(IUser $user, IL10N $localisation, ...$parameters): void {
[$owners] = $parameters;
[$passwordCount, $body] = $this->getBody($localisation, $owners);
$title = $this->getTitle($localisation, $passwordCount);
$template = $this->getTemplate();
$template->addHeading($title);
$template->addBodyText($body);
$template->addBodyButton(
$localisation->t('View passwords shared with me'),
$this->urlGenerator->linkToRouteAbsolute('passwords.page.index').'#/shared/0'
);
$this->sendMessage($user, $title, $template);
}
/**
* @param IL10N $localisation
* @param int $passwordCount
*
* @return string
*/
protected function getTitle(IL10N $localisation, int $passwordCount): string {
return $localisation->n(
'A password was shared with you on %s',
'Several passwords were shared with you on %s',
$passwordCount,
[$this->defaults->getName()]
);
}
/**
* @param IL10N $localisation
* @param array $owners
*
* @return array
*/
protected function getBody(IL10N $localisation, array $owners): array {
$ownerCount = count($owners);
if($ownerCount === 1) {
[$passwordCount, $body] = $this->getSingleOwnerBody($localisation, $owners);
} else {
[$passwordCount, $body] = $this->getMultiOwnerBody($localisation, $owners, $ownerCount);
}
$body .= ' '.$localisation->t('Open the passwords app to see '.($passwordCount === 1 ? 'it.':'them.'));
return [$passwordCount, $body];
}
/**
* @param IL10N $localisation
* @param array $owners
*
* @return array
*/
protected function getSingleOwnerBody(IL10N $localisation, array $owners): array {
$ownerId = key($owners);
$owner = $this->userService->getUserName($ownerId);
$passwordCount = $owners[ $ownerId ];
$body = $localisation->n('%s shared a password with you.', '%s shared %s passwords with you.', $passwordCount, [$owner, $passwordCount]);
return [$passwordCount, $body];
}
/**
* @param IL10N $localisation
* @param array $owners
* @param int $ownerCount
*
* @return array
*/
protected function getMultiOwnerBody(IL10N $localisation, array $owners, int $ownerCount): array {
$params = [];
$passwordCount = 0;
foreach($owners as $ownerId => $amount) {
if(count($params) < 4) $params[] = $this->userService->getUserName($ownerId);
$passwordCount += $amount;
}
$params = array_reverse($params);
array_unshift($params, $passwordCount, $ownerCount - 2);
$text = ($ownerCount > 2 ? '%5$s, %4$s':'%4$s').' and '.($ownerCount > 3 ? '%2$s others':'%3$s').' shared %1$s passwords with you.';
$body = $localisation->t($text, $params);
return [$passwordCount, $body];
}
}