104 lines
3.6 KiB
PHP
104 lines
3.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file classes/task/StatisticsReport.php
|
|
*
|
|
* Copyright (c) 2013-2021 Simon Fraser University
|
|
* Copyright (c) 2003-2021 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class StatisticsReport
|
|
*
|
|
* @ingroup tasks
|
|
*
|
|
* @brief Class responsible to send the monthly statistics report.
|
|
*/
|
|
|
|
namespace PKP\task;
|
|
|
|
use APP\core\Application;
|
|
use DateTimeImmutable;
|
|
use Illuminate\Support\Facades\Bus;
|
|
use PKP\db\DAORegistry;
|
|
use PKP\jobs\notifications\StatisticsReportMail;
|
|
use PKP\jobs\notifications\StatisticsReportNotify;
|
|
use PKP\mail\Mailer;
|
|
use PKP\notification\managerDelegate\EditorialReportNotificationManager;
|
|
use PKP\notification\NotificationSubscriptionSettingsDAO;
|
|
use PKP\notification\PKPNotification;
|
|
use PKP\scheduledTask\ScheduledTask;
|
|
use PKP\security\Role;
|
|
|
|
class StatisticsReport extends ScheduledTask
|
|
{
|
|
/** @var array List of roles that might be notified */
|
|
private $_roleIds = [Role::ROLE_ID_MANAGER, Role::ROLE_ID_SUB_EDITOR];
|
|
|
|
/**
|
|
* @copydoc ScheduledTask::getName()
|
|
*/
|
|
public function getName(): string
|
|
{
|
|
return __('admin.scheduledTask.statisticsReport');
|
|
}
|
|
|
|
/**
|
|
* @copydoc ScheduledTask::executeActions()
|
|
*/
|
|
public function executeActions(): bool
|
|
{
|
|
$contextDao = Application::get()->getContextDAO();
|
|
$dateStart = new DateTimeImmutable('first day of previous month midnight');
|
|
$dateEnd = new DateTimeImmutable('first day of this month midnight');
|
|
|
|
$jobs = [];
|
|
for ($contexts = $contextDao->getAll(true); $context = $contexts->next();) {
|
|
if (!$context->getData('editorialStatsEmail')) {
|
|
continue;
|
|
}
|
|
|
|
/** @var NotificationSubscriptionSettingsDAO $notificationSubscriptionSettingsDao */
|
|
$notificationSubscriptionSettingsDao = DAORegistry::getDAO('NotificationSubscriptionSettingsDAO');
|
|
$editorialReportNotificationManager = new EditorialReportNotificationManager(PKPNotification::NOTIFICATION_TYPE_EDITORIAL_REPORT);
|
|
$editorialReportNotificationManager->initialize(
|
|
$context
|
|
);
|
|
|
|
$userIdsToNotify = $notificationSubscriptionSettingsDao->getSubscribedUserIds(
|
|
[NotificationSubscriptionSettingsDAO::BLOCKED_NOTIFICATION_KEY],
|
|
[PKPNotification::NOTIFICATION_TYPE_EDITORIAL_REPORT],
|
|
[$context->getId()],
|
|
$this->_roleIds
|
|
);
|
|
|
|
foreach ($userIdsToNotify->chunk(PKPNotification::NOTIFICATION_CHUNK_SIZE_LIMIT) as $notifyUserIds) {
|
|
$notifyJob = new StatisticsReportNotify(
|
|
$notifyUserIds,
|
|
$editorialReportNotificationManager
|
|
);
|
|
$jobs[] = $notifyJob;
|
|
}
|
|
|
|
$userIdsToMail = $notificationSubscriptionSettingsDao->getSubscribedUserIds(
|
|
[NotificationSubscriptionSettingsDAO::BLOCKED_NOTIFICATION_KEY, NotificationSubscriptionSettingsDAO::BLOCKED_EMAIL_NOTIFICATION_KEY],
|
|
[PKPNotification::NOTIFICATION_TYPE_EDITORIAL_REPORT],
|
|
[$context->getId()],
|
|
$this->_roleIds
|
|
);
|
|
|
|
foreach ($userIdsToMail->chunk(Mailer::BULK_EMAIL_SIZE_LIMIT) as $mailUserIds) {
|
|
$mailJob = new StatisticsReportMail(
|
|
$mailUserIds,
|
|
$context->getId(),
|
|
$dateStart,
|
|
$dateEnd
|
|
);
|
|
$jobs[] = $mailJob;
|
|
}
|
|
}
|
|
|
|
Bus::batch($jobs)->dispatch();
|
|
return true;
|
|
}
|
|
}
|