Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Moumné <julien@piwik.org>2013-05-19 12:18:32 +0400
committerJulien Moumné <julien@piwik.org>2013-05-19 12:18:32 +0400
commit8a8ce3eccb13c11037b79112513bcbe6ef7e2ccf (patch)
tree83792550c0d26696acd9a48a2780fc435b822842
parent1ec86574db8537a1290043820455205e9863ad64 (diff)
ref #71, #3934 - segment selection for scheduled html, pdf & sms reports
-rw-r--r--core/ReportRenderer.php18
-rw-r--r--core/ReportRenderer/Html.php17
-rw-r--r--core/ReportRenderer/Pdf.php29
-rw-r--r--core/Updates/1.12-b16.php30
-rw-r--r--lang/en.php4
-rw-r--r--plugins/CoreHome/templates/html_report_header.tpl6
-rw-r--r--plugins/ImageGraph/API.php7
-rw-r--r--plugins/MobileMessaging/ReportRenderer/Exception.php2
-rw-r--r--plugins/MobileMessaging/ReportRenderer/Sms.php10
-rw-r--r--plugins/MobileMessaging/templates/SMSReport.tpl14
-rw-r--r--plugins/PDFReports/API.php73
-rw-r--r--plugins/PDFReports/Controller.php11
-rw-r--r--plugins/PDFReports/PDFReports.php74
-rw-r--r--plugins/PDFReports/templates/add.tpl19
-rw-r--r--plugins/PDFReports/templates/list.tpl12
-rw-r--r--plugins/PDFReports/templates/pdf.js2
-rw-r--r--plugins/SegmentEditor/API.php6
17 files changed, 282 insertions, 52 deletions
diff --git a/core/ReportRenderer.php b/core/ReportRenderer.php
index 0c0bc73243..131830a996 100644
--- a/core/ReportRenderer.php
+++ b/core/ReportRenderer.php
@@ -103,9 +103,10 @@ abstract class Piwik_ReportRenderer
* @param string $reportTitle
* @param string $prettyDate formatted date
* @param string $description
- * @param array $reportMetadata metadata for all reports
+ * @param array $reportMetadata metadata for all reports
+ * @param array $segment segment applied to all reports
*/
- abstract public function renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata);
+ abstract public function renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata, $segment);
/**
* Render the provided report.
@@ -215,7 +216,7 @@ abstract class Piwik_ReportRenderer
);
}
- public static function getStaticGraph($reportMetadata, $width, $height, $evolution)
+ public static function getStaticGraph($reportMetadata, $width, $height, $evolution, $segment)
{
$imageGraphUrl = $reportMetadata['imageGraphUrl'];
@@ -226,11 +227,12 @@ abstract class Piwik_ReportRenderer
$request = new Piwik_API_Request(
$imageGraphUrl .
- '&outputType=' . Piwik_ImageGraph_API::GRAPH_OUTPUT_PHP .
- '&format=original&serialize=0' .
- '&filter_truncate=' .
- '&width=' . $width .
- '&height=' . $height
+ '&outputType=' . Piwik_ImageGraph_API::GRAPH_OUTPUT_PHP .
+ '&format=original&serialize=0' .
+ '&filter_truncate=' .
+ '&width=' . $width .
+ '&height=' . $height .
+ ($segment != null ? '&segment=' . $segment['definition'] : '')
);
try {
diff --git a/core/ReportRenderer/Html.php b/core/ReportRenderer/Html.php
index 24339d2d57..1dab763f13 100644
--- a/core/ReportRenderer/Html.php
+++ b/core/ReportRenderer/Html.php
@@ -82,7 +82,7 @@ class Piwik_ReportRenderer_Html extends Piwik_ReportRenderer
$this->rendering .= $smarty->fetch(self::prefixTemplatePath("html_report_footer.tpl"));
}
- public function renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata)
+ public function renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata, $segment)
{
$smarty = new Piwik_Smarty();
$this->assignCommonParameters($smarty);
@@ -93,6 +93,13 @@ class Piwik_ReportRenderer_Html extends Piwik_ReportRenderer
$smarty->assign("description", $description);
$smarty->assign("reportMetadata", $reportMetadata);
+ // segment
+ $displaySegment = ($segment != null);
+ $smarty->assign("displaySegment", $displaySegment);
+ if ($displaySegment) {
+ $smarty->assign("segmentName", $segment['name']);
+ }
+
$this->rendering .= $smarty->fetch(self::prefixTemplatePath("html_report_header.tpl"));
}
@@ -139,7 +146,13 @@ class Piwik_ReportRenderer_Html extends Piwik_ReportRenderer
$smarty->assign("renderImageInline", $this->renderImageInline);
if ($this->renderImageInline) {
- $staticGraph = parent::getStaticGraph($reportMetadata, self::IMAGE_GRAPH_WIDTH, self::IMAGE_GRAPH_HEIGHT, $evolutionGraph);
+ $staticGraph = parent::getStaticGraph(
+ $reportMetadata,
+ self::IMAGE_GRAPH_WIDTH,
+ self::IMAGE_GRAPH_HEIGHT,
+ $evolutionGraph,
+ $processedReport['segment']
+ );
$smarty->assign("generatedImageGraph", base64_encode($staticGraph));
unset($generatedImageGraph);
}
diff --git a/core/ReportRenderer/Pdf.php b/core/ReportRenderer/Pdf.php
index d14b736507..a7e65d45c0 100644
--- a/core/ReportRenderer/Pdf.php
+++ b/core/ReportRenderer/Pdf.php
@@ -66,6 +66,7 @@ class Piwik_ReportRenderer_Pdf extends Piwik_ReportRenderer
private $displayGraph;
private $evolutionGraph;
private $displayTable;
+ private $segment;
private $reportColumns;
private $reportRowsMetadata;
private $currentPage = 0;
@@ -142,35 +143,51 @@ class Piwik_ReportRenderer_Pdf extends Piwik_ReportRenderer
return $this->TCPDF->Output(null, 'S');
}
- public function renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata)
+ public function renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata, $segment)
{
$reportTitle = $this->formatText($reportTitle);
$dateRange = $this->formatText(Piwik_Translate('General_DateRange') . " " . $prettyDate);
- //Setup Footer font and data
+ // footer
$this->TCPDF->SetFooterFont(array($this->reportFont, $this->reportFontStyle, $this->reportSimpleFontSize));
$this->TCPDF->SetFooterContent($reportTitle . " | " . $dateRange . " | ");
+ // add first page
$this->TCPDF->setPrintHeader(false);
- // $this->SetMargins($left = , $top, $right=-1, $keepmargins=true)
$this->TCPDF->AddPage(self::PORTRAIT);
$this->TCPDF->AddFont($this->reportFont, '', '', false);
$this->TCPDF->SetFont($this->reportFont, $this->reportFontStyle, $this->reportSimpleFontSize);
- //Image($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false) {
$this->TCPDF->Bookmark(Piwik_Translate('PDFReports_FrontPage'));
+
+ // logo
$this->TCPDF->Image(Piwik_API_API::getInstance()->getLogoUrl(true), $this->logoImagePosition[0], $this->logoImagePosition[1], 180 / $factor = 2, 0, $type = '', $link = '', $align = '', $resize = false, $dpi = 300);
$this->TCPDF->Ln(8);
+ // report title
$this->TCPDF->SetFont($this->reportFont, '', $this->reportHeaderFontSize + 5);
$this->TCPDF->SetTextColor($this->headerTextColor[0], $this->headerTextColor[1], $this->headerTextColor[2]);
$this->TCPDF->Cell(40, 210, $reportTitle);
$this->TCPDF->Ln(8 * 4);
+ // date and period
$this->TCPDF->SetFont($this->reportFont, '', $this->reportHeaderFontSize);
$this->TCPDF->SetTextColor($this->reportTextColor[0], $this->reportTextColor[1], $this->reportTextColor[2]);
$this->TCPDF->Cell(40, 210, $dateRange);
$this->TCPDF->Ln(8 * 20);
+
+ // description
$this->TCPDF->Write(1, $this->formatText($description));
+
+ // segment
+ if ($segment != null) {
+
+ $this->TCPDF->Ln();
+ $this->TCPDF->Ln();
+ $this->TCPDF->SetFont($this->reportFont, '', $this->reportHeaderFontSize - 2);
+ $this->TCPDF->SetTextColor($this->headerTextColor[0], $this->headerTextColor[1], $this->headerTextColor[2]);
+ $this->TCPDF->Write(1, $this->formatText(Piwik_Translate('PDFReports_CustomVisitorSegment') . ' ' . $segment['name']));
+ }
+
$this->TCPDF->Ln(8);
$this->TCPDF->SetFont($this->reportFont, '', $this->reportHeaderFontSize);
$this->TCPDF->Ln();
@@ -270,6 +287,7 @@ class Piwik_ReportRenderer_Pdf extends Piwik_ReportRenderer
$this->displayGraph = $processedReport['displayGraph'];
$this->evolutionGraph = $processedReport['evolutionGraph'];
$this->displayTable = $processedReport['displayTable'];
+ $this->segment = $processedReport['segment'];
list($this->report, $this->reportColumns) = self::processTableFormat($this->reportMetadata, $processedReport['reportData'], $processedReport['columns']);
$this->paintReportHeader();
@@ -388,7 +406,8 @@ class Piwik_ReportRenderer_Pdf extends Piwik_ReportRenderer
$this->reportMetadata,
$this->orientation == self::PORTRAIT ? self::IMAGE_GRAPH_WIDTH_PORTRAIT : self::IMAGE_GRAPH_WIDTH_LANDSCAPE,
self::IMAGE_GRAPH_HEIGHT,
- $this->evolutionGraph
+ $this->evolutionGraph,
+ $this->segment
);
$this->TCPDF->Image(
diff --git a/core/Updates/1.12-b16.php b/core/Updates/1.12-b16.php
new file mode 100644
index 0000000000..8ac3df70da
--- /dev/null
+++ b/core/Updates/1.12-b16.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ * @category Piwik
+ * @package Updates
+ */
+
+/**
+ * @package Updates
+ */
+class Piwik_Updates_1_12_b16 extends Piwik_Updates
+{
+ static function getSql($schema = 'Myisam')
+ {
+ return array(
+ // ignore existing column name error (1060)
+ 'ALTER TABLE ' . Piwik_Common::prefixTable('report')
+ . " ADD COLUMN idsegment INT(11) AFTER description" => 1060,
+ );
+ }
+
+ static function update()
+ {
+ Piwik_Updater::updateDatabase(__FILE__, self::getSql());
+ }
+}
diff --git a/lang/en.php b/lang/en.php
index 8f0d7d3b55..3fd3e38b80 100644
--- a/lang/en.php
+++ b/lang/en.php
@@ -2009,6 +2009,8 @@ And thank you for using Piwik!',
'PDFReports_CreateAndScheduleReport' => 'Create and Schedule a report',
'PDFReports_CancelAndReturnToReports' => 'Cancel and %sreturn to the list of reports%s',
'PDFReports_DescriptionOnFirstPage' => 'The report description will be displayed on the first page of the report.',
+ 'PDFReports_Segment_Help' => 'You can select an existing custom segment to apply to data in this email report. You may create and edit custom segments in your dashboard %s(click here to open)%s, then clicking on the "%s" box, then "%s".',
+ 'PDFReports_Segment_Deletion_Error' => 'This segment cannot be deleted, because it is used to generate the email report(s) %s. To delete this segment, you can first edit these reports so they don\'t use this segment.',
'PDFReports_WeeklyScheduleHelp' => 'Weekly schedule: report will be sent on Monday of each week.',
'PDFReports_MonthlyScheduleHelp' => 'Monthly schedule: report will be sent the first day of each month.',
'PDFReports_ReportHour' => 'Send report at',
@@ -2022,6 +2024,8 @@ And thank you for using Piwik!',
'PDFReports_EmailHello' => 'Hello,',
'PDFReports_PleaseFindAttachedFile' => 'Please find in attached file your %1$s report for %2$s.',
'PDFReports_PleaseFindBelow' => 'Please find below your %1$s report for %2$s.',
+ 'PDFReports_SegmentAppliedToReports' => 'The segment \'%s\' is applied to the reports.',
+ 'PDFReports_CustomVisitorSegment' => 'Custom Visitor Segment:',
'PDFReports_AreYouSureDeleteReport' => 'Are you sure you want to delete this report and its schedule?',
'PDFReports_ThereIsNoReportToManage' => 'There is no report to manage for website %s',
'PDFReports_MustBeLoggedIn' => 'You must be logged in to create and schedule custom reports.',
diff --git a/plugins/CoreHome/templates/html_report_header.tpl b/plugins/CoreHome/templates/html_report_header.tpl
index a8c289a060..ecca962ee1 100644
--- a/plugins/CoreHome/templates/html_report_header.tpl
+++ b/plugins/CoreHome/templates/html_report_header.tpl
@@ -15,6 +15,12 @@
{$description} - {'General_DateRange'|translate} {$prettyDate}
</p>
+{if $displaySegment}
+ <p style="color: rgb({$reportTitleTextColor});">
+ {'PDFReports_CustomVisitorSegment'|translate:"Piwik"} {$segmentName}
+ </p>
+{/if}
+
{if sizeof($reportMetadata) > 1}
<h2 style="color: rgb({$reportTitleTextColor}); font-size: {$reportTitleTextSize}pt;">
{'PDFReports_TableOfContent'|translate}
diff --git a/plugins/ImageGraph/API.php b/plugins/ImageGraph/API.php
index 916589e683..d80572bec0 100644
--- a/plugins/ImageGraph/API.php
+++ b/plugins/ImageGraph/API.php
@@ -129,7 +129,8 @@ class Piwik_ImageGraph_API
$backgroundColor = Piwik_ImageGraph_API::DEFAULT_BACKGROUND_COLOR,
$gridColor = Piwik_ImageGraph_API::DEFAULT_GRID_COLOR,
$idSubtable = false,
- $legendAppendMetric = true
+ $legendAppendMetric = true,
+ $segment = false
) {
Piwik::checkUserHasViewAccess($idSite);
@@ -296,7 +297,7 @@ class Piwik_ImageGraph_API
$apiModule,
$apiAction,
$labels,
- $segment = false,
+ $segment,
$plottedMetric,
$languageLoaded,
$idGoal,
@@ -352,7 +353,7 @@ class Piwik_ImageGraph_API
$date,
$apiModule,
$apiAction,
- $segment = false,
+ $segment,
$apiParameters = false,
$idGoal,
$languageLoaded,
diff --git a/plugins/MobileMessaging/ReportRenderer/Exception.php b/plugins/MobileMessaging/ReportRenderer/Exception.php
index 5fa5796895..c6cdacf36b 100644
--- a/plugins/MobileMessaging/ReportRenderer/Exception.php
+++ b/plugins/MobileMessaging/ReportRenderer/Exception.php
@@ -59,7 +59,7 @@ class Piwik_MobileMessaging_ReportRenderer_Exception extends Piwik_ReportRendere
return $this->rendering;
}
- public function renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata)
+ public function renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata, $segment)
{
// nothing to do
}
diff --git a/plugins/MobileMessaging/ReportRenderer/Sms.php b/plugins/MobileMessaging/ReportRenderer/Sms.php
index d492dc1281..734484f3bf 100644
--- a/plugins/MobileMessaging/ReportRenderer/Sms.php
+++ b/plugins/MobileMessaging/ReportRenderer/Sms.php
@@ -47,7 +47,7 @@ class Piwik_MobileMessaging_ReportRenderer_Sms extends Piwik_ReportRenderer
return $this->rendering;
}
- public function renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata)
+ public function renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata, $segment)
{
// nothing to do
}
@@ -121,6 +121,14 @@ class Piwik_MobileMessaging_ReportRenderer_Sms extends Piwik_ReportRenderer
$smarty->assign("siteHasECommerce", $siteHasECommerce);
$smarty->assign("displaySiteName", $processedReport['metadata']['action'] == 'getAll');
+ // segment
+ $segment = $processedReport['segment'];
+ $displaySegment = ($segment != null);
+ $smarty->assign("displaySegment", $displaySegment);
+ if ($displaySegment) {
+ $smarty->assign("segmentName", $segment['name']);
+ }
+
$this->rendering .= $smarty->fetch(PIWIK_USER_PATH . '/plugins/MobileMessaging/templates/SMSReport.tpl');
}
}
diff --git a/plugins/MobileMessaging/templates/SMSReport.tpl b/plugins/MobileMessaging/templates/SMSReport.tpl
index c74ea165c4..99ea815508 100644
--- a/plugins/MobileMessaging/templates/SMSReport.tpl
+++ b/plugins/MobileMessaging/templates/SMSReport.tpl
@@ -1,5 +1,9 @@
{strip}
- {$prettyDate}.{literal} {/literal}
+ {$prettyDate}
+ {if $displaySegment}
+ ,{literal} {/literal}{$segmentName}
+ {/if}
+ .{literal} {/literal}
{if empty($reportRows)}
{'CoreHome_ThereIsNoDataForThisReport'|translate}
@@ -14,7 +18,7 @@
{$rowMetrics.label}:{literal} {/literal}
{/if}
- {*visits*}
+ {*visits*}
{$rowMetrics.nb_visits} {'General_ColumnNbVisits'|translate}
{if $rowMetrics.visits_evolution != 0}
{literal} {/literal}({$rowMetrics.visits_evolution}%)
@@ -22,7 +26,7 @@
{if $rowMetrics.nb_visits != 0}
- {*actions*}
+ {*actions*}
,{literal} {/literal}
{$rowMetrics.nb_actions} {'General_ColumnNbActions'|translate}
{if $rowMetrics.actions_evolution != 0}
@@ -31,7 +35,7 @@
{if $isGoalPluginEnabled}
- {*goal metrics*}
+ {*goal metrics*}
{if $rowMetrics.nb_conversions != 0}
,{literal} {/literal}
@@ -47,7 +51,7 @@
{/if}
{/if}
- {*eCommerce metrics*}
+ {*eCommerce metrics*}
{if $siteHasECommerce[$rowMetadata.idsite]}
,{literal} {/literal}
diff --git a/plugins/PDFReports/API.php b/plugins/PDFReports/API.php
index aacba73e00..e65d6bbe36 100644
--- a/plugins/PDFReports/API.php
+++ b/plugins/PDFReports/API.php
@@ -76,10 +76,11 @@ class Piwik_PDFReports_API
* @param string $reportFormat 'pdf', 'html' or any other format provided via the PDFReports.getReportFormats hook
* @param array $reports array of reports
* @param array $parameters array of parameters
+ * @param int $idSegment Segment Identifier
*
* @return int idReport generated
*/
- public function addReport($idSite, $description, $period, $hour, $reportType, $reportFormat, $reports, $parameters)
+ public function addReport($idSite, $description, $period, $hour, $reportType, $reportFormat, $reports, $parameters, $idSegment = false)
{
Piwik::checkUserIsNotAnonymous();
Piwik::checkUserHasViewAccess($idSite);
@@ -87,7 +88,7 @@ class Piwik_PDFReports_API
$currentUser = Piwik::getCurrentUserLogin();
self::ensureLanguageSetForUser($currentUser);
- self::validateCommonReportAttributes($period, $hour, $description, $reportType, $reportFormat);
+ self::validateCommonReportAttributes($period, $hour, $description, $idSegment, $reportType, $reportFormat);
// report parameters validations
$parameters = self::validateReportParameters($reportType, $parameters);
@@ -108,6 +109,7 @@ class Piwik_PDFReports_API
'idsite' => $idSite,
'login' => $currentUser,
'description' => $description,
+ 'idsegment' => $idSegment,
'period' => $period,
'hour' => $hour,
'type' => $reportType,
@@ -134,7 +136,7 @@ class Piwik_PDFReports_API
*
* @see addReport()
*/
- public function updateReport($idReport, $idSite, $description, $period, $hour, $reportType, $reportFormat, $reports, $parameters)
+ public function updateReport($idReport, $idSite, $description, $period, $hour, $reportType, $reportFormat, $reports, $parameters, $idSegment = false)
{
Piwik::checkUserIsNotAnonymous();
Piwik::checkUserHasViewAccess($idSite);
@@ -146,7 +148,7 @@ class Piwik_PDFReports_API
$currentUser = Piwik::getCurrentUserLogin();
self::ensureLanguageSetForUser($currentUser);
- self::validateCommonReportAttributes($period, $hour, $description, $reportType, $reportFormat);
+ self::validateCommonReportAttributes($period, $hour, $description, $idSegment, $reportType, $reportFormat);
// report parameters validations
$parameters = self::validateReportParameters($reportType, $parameters);
@@ -157,6 +159,7 @@ class Piwik_PDFReports_API
Zend_Registry::get('db')->update(Piwik_Common::prefixTable('report'),
array(
'description' => $description,
+ 'idsegment' => $idSegment,
'period' => $period,
'hour' => $hour,
'type' => $reportType,
@@ -199,10 +202,11 @@ class Piwik_PDFReports_API
* @param int $idSite If specified, will filter reports that belong to a specific idsite
* @param string $period If specified, will filter reports that are scheduled for this period (day,week,month)
* @param int $idReport If specified, will filter the report that has the given idReport
+ * @param int $idSegment If specified, will filter the report that has the given idSegment
* @return array
* @throws Exception if $idReport was specified but the report wasn't found
*/
- public function getReports($idSite = false, $period = false, $idReport = false, $ifSuperUserReturnOnlySuperUserReports = false)
+ public function getReports($idSite = false, $period = false, $idReport = false, $ifSuperUserReturnOnlySuperUserReports = false, $idSegment = false)
{
Piwik::checkUserHasSomeViewAccess();
$cacheKey = (int)$idSite . '.' . (string)$period . '.' . (int)$idReport . '.' . (int)$ifSuperUserReturnOnlySuperUserReports;
@@ -235,6 +239,10 @@ class Piwik_PDFReports_API
$sqlWhere .= " AND idreport = ?";
$bind[] = $idReport;
}
+ if (!empty($idSegment)) {
+ $sqlWhere .= " AND idsegment = ?";
+ $bind[] = $idSegment;
+ }
// Joining with the site table to work around pre-1.3 where reports could still be linked to a deleted site
$reports = Piwik_FetchAll("SELECT *
@@ -330,6 +338,7 @@ class Piwik_PDFReports_API
$prettyDate = null;
$processedReports = array();
+ $segment = self::getSegment($report['idsegment']);
foreach ($reportMetadata as $action) {
$apiModule = $action['module'];
$apiAction = $action['action'];
@@ -361,9 +370,12 @@ class Piwik_PDFReports_API
$processedReport = Piwik_API_API::getInstance()->getProcessedReport(
$idSite, $period, $date, $apiModule, $apiAction,
- $segment = false, $apiParameters, $idGoal = false, $language
+ $segment != null ? $segment['definition'] : false,
+ $apiParameters, $idGoal = false, $language
);
+ $processedReport['segment'] = $segment;
+
// TODO add static method getPrettyDate($period, $date) in Piwik_Period
$prettyDate = $processedReport['prettyDate'];
@@ -409,7 +421,7 @@ class Piwik_PDFReports_API
list($reportSubject, $reportTitle) = self::getReportSubjectAndReportTitle(Piwik_Site::getNameFor($idSite), $report['reports']);
$filename = "$reportTitle - $prettyDate - $description";
- $reportRenderer->renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata);
+ $reportRenderer->renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata, $segment);
array_walk($processedReports, array($reportRenderer, 'renderReport'));
switch ($outputType) {
@@ -429,7 +441,8 @@ class Piwik_PDFReports_API
$report['metadata'],
Piwik_ReportRenderer_Html::IMAGE_GRAPH_WIDTH,
Piwik_ReportRenderer_Html::IMAGE_GRAPH_HEIGHT,
- $report['evolutionGraph']
+ $report['evolutionGraph'],
+ $segment
);
$additionalFile['mimeType'] = 'image/png';
$additionalFile['encoding'] = Zend_Mime::ENCODING_BASE64;
@@ -609,11 +622,12 @@ class Piwik_PDFReports_API
return Piwik_Common::json_encode($requestedReports);
}
- private static function validateCommonReportAttributes($period, $hour, &$description, $reportType, $reportFormat)
+ private static function validateCommonReportAttributes($period, $hour, &$description, &$idSegment, $reportType, $reportFormat)
{
self::validateReportPeriod($period);
self::validateReportHour($hour);
self::validateAndTruncateDescription($description);
+ self::validateIdSegment($idSegment);
self::validateReportType($reportType);
self::validateReportFormat($reportType, $reportFormat);
}
@@ -633,6 +647,22 @@ class Piwik_PDFReports_API
}
}
+ private static function validateIdSegment(&$idSegment)
+ {
+ if (empty($idSegment) || (is_numeric($idSegment) && $idSegment == 0)) {
+
+ $idSegment = null;
+
+ } elseif (!is_numeric($idSegment)) {
+
+ throw new Exception('Invalid segment identifier. Should be an integer.');
+
+ } elseif (self::getSegment($idSegment) == null) {
+
+ throw new Exception('Segment with id ' . $idSegment . ' does not exist or SegmentEditor is not activated.');
+ }
+ }
+
private static function validateReportType($reportType)
{
$reportTypes = array_keys(self::getReportTypes());
@@ -740,4 +770,29 @@ class Piwik_PDFReports_API
return $recipients;
}
+
+ /**
+ * @ignore
+ */
+ static public function getSegment($idSegment)
+ {
+ if (self::isSegmentEditorActivated() && !empty($idSegment)) {
+
+ $segment = Piwik_SegmentEditor_API::getInstance()->get($idSegment);
+
+ if ($segment) {
+ return $segment;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * @ignore
+ */
+ public static function isSegmentEditorActivated()
+ {
+ return Piwik_PluginsManager::getInstance()->isPluginActivated('SegmentEditor');
+ }
}
diff --git a/plugins/PDFReports/Controller.php b/plugins/PDFReports/Controller.php
index 32e879c66d..c91a527789 100644
--- a/plugins/PDFReports/Controller.php
+++ b/plugins/PDFReports/Controller.php
@@ -70,6 +70,17 @@ class Piwik_PDFReports_Controller extends Piwik_Controller
$view->language = Piwik_LanguagesManager::getLanguageCodeForCurrentUser();
+ $view->segmentEditorActivated = false;
+ if (Piwik_PDFReports_API::isSegmentEditorActivated()) {
+
+ $savedSegmentsById = array();
+ foreach (Piwik_SegmentEditor_API::getInstance()->getAll($this->idSite) as $savedSegment) {
+ $savedSegmentsById[$savedSegment['idsegment']] = $savedSegment['name'];
+ }
+ $view->savedSegmentsById = $savedSegmentsById;
+ $view->segmentEditorActivated = true;
+ }
+
echo $view->render();
}
}
diff --git a/plugins/PDFReports/PDFReports.php b/plugins/PDFReports/PDFReports.php
index 7c8075c172..fc718235f4 100644
--- a/plugins/PDFReports/PDFReports.php
+++ b/plugins/PDFReports/PDFReports.php
@@ -67,22 +67,23 @@ class Piwik_PDFReports extends Piwik_Plugin
public function getListHooksRegistered()
{
return array(
- 'TopMenu.add' => 'addTopMenu',
- 'TaskScheduler.getScheduledTasks' => 'getScheduledTasks',
- 'AssetManager.getJsFiles' => 'getJsFiles',
- 'PDFReports.getReportParameters' => 'getReportParameters',
- 'PDFReports.validateReportParameters' => 'validateReportParameters',
- 'PDFReports.getReportMetadata' => 'getReportMetadata',
- 'PDFReports.getReportTypes' => 'getReportTypes',
- 'PDFReports.getReportFormats' => 'getReportFormats',
- 'PDFReports.getRendererInstance' => 'getRendererInstance',
- 'PDFReports.getReportRecipients' => 'getReportRecipients',
- 'PDFReports.processReports' => 'processReports',
- 'PDFReports.allowMultipleReports' => 'allowMultipleReports',
- 'PDFReports.sendReport' => 'sendReport',
- 'template_reportParametersPDFReports' => 'template_reportParametersPDFReports',
- 'UsersManager.deleteUser' => 'deleteUserReport',
- 'SitesManager.deleteSite' => 'deleteSiteReport',
+ 'TopMenu.add' => 'addTopMenu',
+ 'TaskScheduler.getScheduledTasks' => 'getScheduledTasks',
+ 'AssetManager.getJsFiles' => 'getJsFiles',
+ 'PDFReports.getReportParameters' => 'getReportParameters',
+ 'PDFReports.validateReportParameters' => 'validateReportParameters',
+ 'PDFReports.getReportMetadata' => 'getReportMetadata',
+ 'PDFReports.getReportTypes' => 'getReportTypes',
+ 'PDFReports.getReportFormats' => 'getReportFormats',
+ 'PDFReports.getRendererInstance' => 'getRendererInstance',
+ 'PDFReports.getReportRecipients' => 'getReportRecipients',
+ 'PDFReports.processReports' => 'processReports',
+ 'PDFReports.allowMultipleReports' => 'allowMultipleReports',
+ 'PDFReports.sendReport' => 'sendReport',
+ 'template_reportParametersPDFReports' => 'template_reportParametersPDFReports',
+ 'UsersManager.deleteUser' => 'deleteUserReport',
+ 'SitesManager.deleteSite' => 'deleteSiteReport',
+ Piwik_SegmentEditor_API::DELETE_SEGMENT_EVENT => 'segmentDeletion',
);
}
@@ -323,18 +324,36 @@ class Piwik_PDFReports extends Piwik_Plugin
$attachmentName = $subject;
$mail->setFrom($fromEmailAddress, $fromEmailName);
+ $displaySegmentInfo = false;
+ $segmentInfo = null;
+ $segment = Piwik_PDFReports_API::getSegment($report['idsegment']);
+ if($segment != null) {
+ $displaySegmentInfo = true;
+ $segmentInfo = Piwik_Translate('PDFReports_SegmentAppliedToReports', $segment['name']);
+ }
+
switch ($report['format']) {
case 'html':
// Needed when using images as attachment with cid
$mail->setType(Zend_Mime::MULTIPART_RELATED);
$message .= "<br/>" . Piwik_Translate('PDFReports_PleaseFindBelow', array($periods[$report['period']], $reportTitle));
+
+ if($displaySegmentInfo) {
+ $message .= " " . $segmentInfo;
+ }
+
$mail->setBodyHtml($message . "<br/><br/>" . $contents);
break;
default:
case 'pdf':
$message .= "\n" . Piwik_Translate('PDFReports_PleaseFindAttachedFile', array($periods[$report['period']], $reportTitle));
+
+ if($displaySegmentInfo) {
+ $message .= " " . $segmentInfo;
+ }
+
$mail->setBodyText($message);
$mail->createAttachment(
$contents,
@@ -487,6 +506,28 @@ class Piwik_PDFReports extends Piwik_Plugin
}
}
+ /**
+ * @param Piwik_Event_Notification $notification notification object
+ */
+ function segmentDeletion($notification)
+ {
+ $idSegment = & $notification->getNotificationObject();
+ $reportsUsingSegment = Piwik_PDFReports_API::getInstance()->getReports(false, false, false, true, $idSegment);
+
+ if (count($reportsUsingSegment) > 0) {
+
+ $reportList = '';
+ $reportNameJoinText = ' ' . Piwik_Translate('General_And') . ' ';
+ foreach ($reportsUsingSegment as $report) {
+ $reportList .= '\'' . $report['description'] . '\'' . $reportNameJoinText;
+ }
+ $reportList = rtrim($reportList, $reportNameJoinText);
+
+ $errorMessage = Piwik_Translate('PDFReports_Segment_Deletion_Error', $reportList);
+ throw new Exception($errorMessage);
+ }
+ }
+
function addTopMenu()
{
Piwik_AddTopMenu(
@@ -555,6 +596,7 @@ class Piwik_PDFReports extends Piwik_Plugin
`idsite` INTEGER(11) NOT NULL,
`login` VARCHAR(100) NOT NULL,
`description` VARCHAR(255) NOT NULL,
+ `idsegment` INT(11),
`period` VARCHAR(10) NOT NULL,
`hour` tinyint NOT NULL default 0,
`type` VARCHAR(10) NOT NULL,
diff --git a/plugins/PDFReports/templates/add.tpl b/plugins/PDFReports/templates/add.tpl
index 2149863a57..d9c07cfb87 100644
--- a/plugins/PDFReports/templates/add.tpl
+++ b/plugins/PDFReports/templates/add.tpl
@@ -27,6 +27,25 @@
</div>
</td>
</tr>
+ {if $segmentEditorActivated}
+ <tr>
+ <td class="first">{'SegmentEditor_ChooseASegment'|translate} </td>
+ <td>
+ <select id='report_segment'>
+ <option value="">{'SegmentEditor_DefaultAllVisits'|translate}</option>
+ {foreach from=$savedSegmentsById key=savedSegmentId item=savedSegmentName}
+ <option value="{$savedSegmentId}">{$savedSegmentName}</option>
+ {/foreach}
+ </select>
+
+ <div class="entityInlineHelp">
+ {capture assign='SegmentEditor_DefaultAllVisits'}{'SegmentEditor_DefaultAllVisits'|translate}{/capture}
+ {capture assign='SegmentEditor_AddNewSegment'}{'SegmentEditor_AddNewSegment'|translate}{/capture}
+ {'PDFReports_Segment_Help'|translate:'<a href="./" target="_blank">':'</a>':$SegmentEditor_DefaultAllVisits:$SegmentEditor_AddNewSegment}
+ </div>
+ </td>
+ </tr>
+ {/if}
<tr>
<td class="first">{'PDFReports_EmailSchedule'|translate}</td>
<td>
diff --git a/plugins/PDFReports/templates/list.tpl b/plugins/PDFReports/templates/list.tpl
index a8368d9ba6..fc7a2ad173 100644
--- a/plugins/PDFReports/templates/list.tpl
+++ b/plugins/PDFReports/templates/list.tpl
@@ -36,7 +36,15 @@
{else}
{foreach from=$reports item=report}
<tr>
- <td class="first">{$report.description}</td>
+ <td class="first">
+ {$report.description}
+
+ {if $segmentEditorActivated and isset($report.idsegment)}
+ <div class="entityInlineHelp" style="font-size: 9pt;">
+ {$savedSegmentsById[$report.idsegment]}
+ </div>
+ {/if}
+ </td>
<td>{$periods[$report.period]}
<!-- Last sent on {$report.ts_last_sent} -->
</td>
@@ -63,7 +71,7 @@
</td>
<td>
{*download link*}
- <a href="{url module=API period=$report.period token_auth=$token_auth method='PDFReports.generateReport' date=$rawDate idReport=$report.idreport outputType=$downloadOutputType language=$language}"
+ <a href="{url module=API period=$report.period segment=null token_auth=$token_auth method='PDFReports.generateReport' idReport=$report.idreport outputType=$downloadOutputType language=$language}"
target="_blank" name="linkDownloadReport" id="{$report.idreport}" class="link_but">
<img src='{$reportFormatsByReportType[$report.type][$report.format]}' border="0"/>
{'General_Download'|translate}
diff --git a/plugins/PDFReports/templates/pdf.js b/plugins/PDFReports/templates/pdf.js
index 266c403adf..f6f3398a1e 100644
--- a/plugins/PDFReports/templates/pdf.js
+++ b/plugins/PDFReports/templates/pdf.js
@@ -30,6 +30,7 @@ function formSetEditReport(idReport) {
toggleReportType(report.type);
$('#report_description').html(report.description);
+ $('#report_segment').find('option[value=' + report.idsegment + ']').prop('selected', 'selected');
$('#report_type').find('option[value=' + report.type + ']').prop('selected', 'selected');
$('#report_period').find('option[value=' + report.period + ']').prop('selected', 'selected');
$('#report_hour').val(report.hour);
@@ -74,6 +75,7 @@ function initManagePdf() {
var apiParameters = getReportAjaxRequest(idReport, 'PDFReports.updateReport');
apiParameters.idReport = idReport;
apiParameters.description = $('#report_description').val();
+ apiParameters.idSegment = $('#report_segment').find('option:selected').val();
apiParameters.reportType = $('#report_type').find('option:selected').val();
apiParameters.reportFormat = $('[name=report_format].' + apiParameters.reportType + ' option:selected').val();
diff --git a/plugins/SegmentEditor/API.php b/plugins/SegmentEditor/API.php
index cacd742ae6..15915e1e72 100644
--- a/plugins/SegmentEditor/API.php
+++ b/plugins/SegmentEditor/API.php
@@ -16,6 +16,8 @@
*/
class Piwik_SegmentEditor_API
{
+ const DELETE_SEGMENT_EVENT = 'SegmentEditor.delete';
+
static private $instance = null;
/**
@@ -127,6 +129,10 @@ class Piwik_SegmentEditor_API
public function delete($idSegment)
{
$this->checkUserIsNotAnonymous();
+
+ // allow plugins using the segment to throw an exception or propagate the deletion
+ Piwik_PostEvent(self::DELETE_SEGMENT_EVENT, $idSegment);
+
$segment = $this->getSegmentOrFail($idSegment);
$db = Zend_Registry::get('db');
$db->delete(Piwik_Common::prefixTable('segment'), 'idsegment = ' . $idSegment);