Skip to content

Commit

Permalink
refs #1486 more refactoring, bugfixing, display report name is list o…
Browse files Browse the repository at this point in the history
…f all alerts
  • Loading branch information
tsteur committed Dec 20, 2013
1 parent 450e861 commit 853b18c
Show file tree
Hide file tree
Showing 7 changed files with 307 additions and 235 deletions.
21 changes: 20 additions & 1 deletion plugins/CustomAlerts/Controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,30 @@ public function index()
$view = new View('@CustomAlerts/index');
$this->setGeneralVariablesView($view);

$view->alerts = API::getInstance()->getAlerts(array($idSite));
$alerts = API::getInstance()->getAlerts(array($idSite));

foreach ($alerts as &$alert) {
$alert['reportName'] = $this->findReportName($idSite, $alert);
}

$view->alerts = $alerts;

return $view->render();
}

private function findReportName($idSite, $alert)
{
list($module, $action) = explode('.', $alert['report']);
$metadata = MetadataApi::getInstance()->getMetadata($idSite, $module, $action);

if (!empty($metadata)) {
$report = array_shift($metadata);
return $report['name'];
}

return $alert['report'];
}

public function addNewAlert()
{
$view = new View('@CustomAlerts/addNewAlert');
Expand Down
33 changes: 27 additions & 6 deletions plugins/CustomAlerts/CustomAlerts.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,24 +65,45 @@ public function getScheduledTasks(&$tasks)
{
$tasks[] = new ScheduledTask(
'Piwik\Plugins\CustomAlerts\Processor',
'processDailyAlerts',
null,
'processAlerts',
'day',
ScheduledTime::factory('daily')
);

$tasks[] = new ScheduledTask(
'Piwik\Plugins\CustomAlerts\Notifier',
'sendNewAlerts',
'day',
ScheduledTime::factory('daily')
);

$tasks[] = new ScheduledTask(
'Piwik\Plugins\CustomAlerts\Processor',
'processWeeklyAlerts',
null,
'processAlerts',
'week',
ScheduledTime::factory('weekly')
);

$tasks[] = new ScheduledTask(
'Piwik\Plugins\CustomAlerts\Notifier',
'sendNewAlerts',
'week',
ScheduledTime::factory('weekly')
);

$tasks[] = new ScheduledTask(
'Piwik\Plugins\CustomAlerts\Processor',
'processMonthlyAlerts',
null,
'processAlerts',
'month',
ScheduledTime::factory('monthly')
);

$tasks[] = new ScheduledTask(
'Piwik\Plugins\CustomAlerts\Notifier',
'sendNewAlerts',
'month',
ScheduledTime::factory('monthly')
);
}
}
?>
130 changes: 130 additions & 0 deletions plugins/CustomAlerts/Notifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
<?php

/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later
* @version $Id$
*
* @category Piwik_Plugins
* @package Piwik_Alerts
*/

namespace Piwik\Plugins\CustomAlerts;

use Piwik;
use Piwik\DataTable;
use Piwik\Date;
use Piwik\Db;
use Piwik\Plugins\UsersManager\API as UsersManagerApi;

/**
*
* @package Piwik_CustomAlerts
*/
class Notifier extends \Piwik\Plugin
{
/**
* Sends a list of the triggered alerts to
* $recipient.
*
* @param string $period
*/
public function sendNewAlerts($period)
{
$triggeredAlerts = API::getInstance()->getTriggeredAlerts($period, Date::today());

$alertsPerLogin = array();
foreach($triggeredAlerts as $triggeredAlert) {
$login = $triggeredAlert['login'];

if (!array_key_exists($login, $alertsPerLogin)) {
$alertsPerLogin[$login] = array();
}

$alertsPerLogin[$login][] = $triggeredAlert;
}

foreach ($alertsPerLogin as $login => $alerts) {
$recipient = $this->getEmailAddressFromLogin($login);
$this->sendAlertsPerEmailToRecipient($alerts, $recipient);
}
}

private function getEmailAddressFromLogin($login)
{
if (empty($login)) {
return '';
}

$user = UsersManagerApi::getInstance()->getUser($login);

if (empty($user) || empty($user['email'])) {
return '';
}

return $user['email'];
}

/**
* Returns the Alerts that were triggered in $format.
*
* @param array $triggeredAlerts
* @param string $format Can be 'html', 'tsv' or empty for php array
* @return array|string
*/
private function formatAlerts($triggeredAlerts, $format = null)
{
switch ($format) {
case 'html':
$view = new Piwik\View('@CustomAlerts/htmlTriggeredAlerts');
$view->triggeredAlerts = $triggeredAlerts;

return $view->render();

case 'tsv':
$tsv = '';
$showedTitle = false;
foreach ($triggeredAlerts as $alert) {
if (!$showedTitle) {
$showedTitle = true;
$tsv .= implode("\t", array_keys($alert)) . "\n";
}
$tsv .= implode("\t", array_values($alert)) . "\n";
}

return $tsv;
}

return $triggeredAlerts;
}

/**
* @param array $alerts
* @param string $recipient Email address
*/
private function sendAlertsPerEmailToRecipient($alerts, $recipient)
{
if (empty($recipient) || empty($alerts)) {
return;
}

$mail = new Piwik\Mail();
$mail->addTo($recipient);
$mail->setSubject('Piwik alert [' . Date::today() . ']');

$viewHtml = new Piwik\View('@CustomAlerts/alertHtmlMail');
$viewHtml->assign('triggeredAlerts', $this->formatAlerts($alerts, 'html'));
$mail->setBodyHtml($viewHtml->render());

$viewText = new Piwik\View('@CustomAlerts/alertTextMail');
$viewText->assign('triggeredAlerts', $this->formatAlerts($alerts, 'tsv'));
$viewText->setContentType('text/plain');
$mail->setBodyText($viewText->render());

$mail->send();
}

}
?>
Loading

0 comments on commit 853b18c

Please sign in to comment.