diff options
author | matt <matt@59fd770c-687e-43c8-a1e3-f5a4ff64c105> | 2010-08-27 00:06:22 +0400 |
---|---|---|
committer | matt <matt@59fd770c-687e-43c8-a1e3-f5a4ff64c105> | 2010-08-27 00:06:22 +0400 |
commit | c7a3cc929c1e5c8d7a38b6686e5c577b6253ccc4 (patch) | |
tree | 9ba300a73aac022cdc4be1ba6448cdde52412052 | |
parent | dd363fe6ee8772d1cc9097e1375e4963dbde16ee (diff) |
Refs #1538 Merging r2989 from trunk
-rw-r--r-- | lang/en.php | 4 | ||||
-rw-r--r-- | plugins/PDFReports/API.php | 110 | ||||
-rw-r--r-- | plugins/PDFReports/Controller.php | 2 | ||||
-rw-r--r-- | plugins/PDFReports/PDFReports.php | 89 | ||||
-rw-r--r-- | plugins/PDFReports/templates/list.tpl | 4 | ||||
-rw-r--r-- | plugins/PDFReports/templates/pdf.js | 10 | ||||
-rw-r--r-- | plugins/SitesManager/templates/SitesManager.tpl | 2 | ||||
-rw-r--r-- | themes/default/images/email.png | bin | 0 -> 754 bytes |
8 files changed, 130 insertions, 91 deletions
diff --git a/lang/en.php b/lang/en.php index eaeb45a4b1..3f385e94f2 100644 --- a/lang/en.php +++ b/lang/en.php @@ -18,6 +18,7 @@ $translations = array( 'General_Unknown' => 'Unknown', 'General_Required' => '%s required', 'General_NotValid' => '%s is not valid', + 'General_Id' => 'Id', 'General_Error' => 'Error', 'General_Warning' => 'Warning', 'General_BackToHomepage' => 'Back to Piwik homepage', @@ -690,7 +691,6 @@ $translations = array( 'SitesManager_AddSite' => 'Add a new website', 'SitesManager_NotFound' => 'No websites found for', 'SitesManager_AliasUrlHelp' => "It is recommended, but not required, to specify the various URLs, one per line, that your visitors use to access this website.\nAlias URLs for a website will not appear in the Referrers > Websites report.\nNote that it is not necessary to specify the URLs with and without 'www' as Piwik automatically considers both.", - 'SitesManager_Id' => 'Id', 'SitesManager_Urls' => 'URLs', 'SitesManager_MenuSites' => 'Websites', 'SitesManager_DeleteConfirm_js' => 'Are you sure you want to delete the website %s?', @@ -1169,7 +1169,9 @@ $translations = array( 'Widgetize_PluginDescription' => 'The plugin makes it very easy to export any Piwik Widget in your Blog, Website or on Igoogle and Netvibes!', 'PDFReports_PluginDescription' => 'Create and download your custom PDF reports, and have them emailed daily, weekly or monthly.', 'PDFReports_ManagePdfReports' => 'Manage PDF Reports', + 'PDFReports_EmailReports' => 'Email Reports', 'PDFReports_PDF' => 'PDF', + 'PDFReports_SendReportNow' => 'Send Report now', 'PDFReports_EmailSchedule' => 'Email Schedule', 'PDFReports_SendReportTo' => 'Send report to', 'PDFReports_SentToMe' => 'Send to me', diff --git a/plugins/PDFReports/API.php b/plugins/PDFReports/API.php index fb9ee78b7d..d4343efe05 100644 --- a/plugins/PDFReports/API.php +++ b/plugins/PDFReports/API.php @@ -103,6 +103,7 @@ class Piwik_PDFReports_API ), "idreport = '$idReport'" ); + self::$cache = array(); } /** @@ -122,8 +123,12 @@ class Piwik_PDFReports_API ), "idreport = '$idReport'" ); + self::$cache = array(); } + // static cache storing reports + public static $cache = array(); + /** * Returns the list of PDF reports matching the passed parameters * @@ -135,6 +140,12 @@ class Piwik_PDFReports_API */ public function getReports($idSite = false, $period = false, $idReport = false, $ifSuperUserReturnOnlySuperUserReports = false) { + $cacheKey = (int)$idSite .'.'. (string)$period .'.'. (int)$idReport .'.'. (int)$ifSuperUserReturnOnlySuperUserReports; + if(isset(self::$cache[$cacheKey])) + { + return self::$cache[$cacheKey]; + } + $sqlWhere = ''; $bind = array(); @@ -175,6 +186,9 @@ class Piwik_PDFReports_API { throw new Exception("Requested PDF report couldn't be found."); } + // static cache + self::$cache[$cacheKey] = $reports; + return $reports; } @@ -287,6 +301,78 @@ class Piwik_PDFReports_API ); } } + + public function sendEmailReport($idReport, $idSite) + { + $reports = $this->getReports($idSite, $period = false, $idReport); + $report = reset($reports); + list($outputFilename, $prettyDate, $websiteName) = + Piwik_PDFReports_API::getInstance()->generateReport( + $idReport, + Piwik_Date::now()->subPeriod(1, $report['period']), + $idSite, + $outputType = Piwik_PDFReports_API::OUTPUT_PDF_SAVE_ON_DISK + ); + + + $emails = self::getEmailsFromString($report['additional_emails']); + if($report['email_me'] == 1) + { + $emails[] = Piwik::getCurrentUserEmail(); + } + $this->sendReportEmailPdfAttached($emails, $outputFilename, $prettyDate, $websiteName, $report); + } + + protected function sendReportEmailPdfAttached($emails, $outputFilename, $prettyDate, $websiteName, $report) + { + $periods = self::getPeriodToFrequency(); + $message = Piwik_Translate('PDFReports_EmailHello'); + $message .= "\n" . Piwik_Translate('PDFReports_PleaseFindAttachedFile', array($periods[$report['period']], $websiteName)); + $subject = "Reports " . $websiteName . " - ".$prettyDate; + + if(!file_exists($outputFilename)) + { + throw new Exception("The PDF file wasn't found in $outputFilename"); + } + $filename = basename($outputFilename); + $handle = fopen($outputFilename, "r"); + $contents = fread($handle, filesize($outputFilename)); + fclose($handle); + + $mail = new Piwik_Mail(); + $mail->setSubject($subject); + $mail->setBodyText($message); + $fromEmailName = Piwik_Translate('PDFReports_PiwikReports'); + $fromEmailAddress = Zend_Registry::get('config')->General->noreply_email_address; + $mail->setFrom($fromEmailAddress, $fromEmailName); + $mail->createAttachment( $contents, + 'application/pdf', + Zend_Mime::DISPOSITION_INLINE, + Zend_Mime::ENCODING_BASE64, + $filename + ); + + foreach ($emails as $email) + { + $mail->addTo($email); + + try { + $mail->send(); + } catch(Exception $e) { + throw new Exception("An error occured while sending the PDF Report ". + " to ". implode(', ',$mail->getRecipients()). ". Error was '". $e->getMessage()."'"); + } + $mail->clearRecipients(); + } + // Update flag in DB + Zend_Registry::get('db')->update( Piwik_Common::prefixTable('pdf'), + array( 'ts_last_sent' => Piwik_Date::now()->getDatetime() ), + "idreport = " . $report['idreport'] + ); + + // Remove PDF file + unlink($outputFilename); + } private function checkAdditionalEmails($additionalEmails) { @@ -294,7 +380,7 @@ class Piwik_PDFReports_API { return ''; } - $additionalEmails = Piwik_PDFReports::getEmailsFromString($additionalEmails); + $additionalEmails = self::getEmailsFromString($additionalEmails); foreach($additionalEmails as &$email) { $email = trim($email); @@ -306,6 +392,17 @@ class Piwik_PDFReports_API $additionalEmails = implode(',',$additionalEmails); return $additionalEmails; } + + static protected function getEmailsFromString($additionalEmails) + { + if(empty($additionalEmails)) + { + return array(); + } + $additionalEmails = explode(',', trim($additionalEmails)); + $additionalEmails = array_filter($additionalEmails, 'strlen'); + return $additionalEmails; + } private function checkDescription($description) { @@ -341,5 +438,14 @@ class Piwik_PDFReports_API throw new Exception(Piwik_Translate("Period schedule must be one of the following: " . implode(', ', $availablePeriods))); } } - + + static public function getPeriodToFrequency() + { + $periods = array( + 'day' => Piwik_Translate('General_Daily'), + 'week' => Piwik_Translate('General_Weekly'), + 'month' => Piwik_Translate('General_Monthly'), + ); + return $periods; + } } diff --git a/plugins/PDFReports/Controller.php b/plugins/PDFReports/Controller.php index d96092a374..e662214f58 100644 --- a/plugins/PDFReports/Controller.php +++ b/plugins/PDFReports/Controller.php @@ -39,7 +39,7 @@ class Piwik_PDFReports_Controller extends Piwik_Controller $view->newColumnAfter = round(count($availableReports) / $columnsCount); $view->reportsByCategory = $reportsByCategory; $view->reportsJSON = json_encode($reportsById); - $view->periods = Piwik_PDFReports::getPeriodToFrequency(); + $view->periods = Piwik_PDFReports_API::getPeriodToFrequency(); $view->reports = $reports; echo $view->render(); } diff --git a/plugins/PDFReports/PDFReports.php b/plugins/PDFReports/PDFReports.php index ccad1722a4..9d7b5c5a2e 100644 --- a/plugins/PDFReports/PDFReports.php +++ b/plugins/PDFReports/PDFReports.php @@ -68,77 +68,15 @@ class Piwik_PDFReports extends Piwik_Plugin // For each, generate the file and send the message with the attached report foreach($reportsToGenerate as $report) { - list($outputFilename, $prettyDate, $websiteName) = - Piwik_PDFReports_API::getInstance()->generateReport( - $report['idreport'], - Piwik_Date::now()->subPeriod(1, $period), - $report['idsite'], - $outputType = Piwik_PDFReports_API::OUTPUT_PDF_SAVE_ON_DISK - ); - - $emails = self::getEmailsFromString($report['additional_emails']); - if($report['email_me'] == 1) - { - $emails[] = Piwik::getCurrentUserEmail(); - } - $this->sendReportEmail($emails, $outputFilename, $prettyDate, $websiteName, $report); + Piwik_PDFReports_API::sendEmailReport( $report['idreport'], + $report['idsite'], + $period); } } - - function sendReportEmail($emails, $outputFilename, $prettyDate, $websiteName, $report) - { - $periods = self::getPeriodToFrequency(); - $message = Piwik_Translate('PDFReports_EmailHello'); - $message .= "\n" . Piwik_Translate('PDFReports_PleaseFindAttachedFile', array($periods[$report['period']], $websiteName)); - $subject = "Reports " . $websiteName . " - ".$prettyDate; - - if(!file_exists($outputFilename)) - { - throw new Exception("The PDF file wasn't found in $outputFilename"); - } - $filename = basename($outputFilename); - $handle = fopen($outputFilename, "r"); - $contents = fread($handle, filesize($outputFilename)); - fclose($handle); - - $mail = new Piwik_Mail(); - $mail->setSubject($subject); - $mail->setBodyText($message); - $fromEmailName = Piwik_Translate('PDFReports_PiwikReports'); - $fromEmailAddress = Zend_Registry::get('config')->General->noreply_email_address; - $mail->setFrom($fromEmailAddress, $fromEmailName); - $mail->createAttachment( $contents, - 'application/pdf', - Zend_Mime::DISPOSITION_INLINE, - Zend_Mime::ENCODING_BASE64, - $filename - ); - - foreach ($emails as $email) - { - $mail->addTo($email); - - try { - $mail->send(); - } catch(Exception $e) { - throw new Exception("An error occured while sending the PDF Report ". - " to ". implode(', ',$mail->getRecipients()). ". Error was '". $e->getMessage()."'"); - } - $mail->clearRecipients(); - } - // Update flag in DB - Zend_Registry::get('db')->update( Piwik_Common::prefixTable('pdf'), - array( 'ts_last_sent' => Piwik_Date::now()->getDatetime() ), - "idreport = " . $report['idreport'] - ); - - // Remove PDF file - unlink($outputFilename); - } function addTopMenu() { - Piwik_AddTopMenu( 'PDFReports_PDF', array('module' => 'PDFReports', 'action' => 'index'), true, 13); + Piwik_AddTopMenu( 'PDFReports_EmailReports', array('module' => 'PDFReports', 'action' => 'index'), true, 13); } function install() @@ -172,24 +110,5 @@ class Piwik_PDFReports extends Piwik_Plugin } } - static public function getPeriodToFrequency() - { - $periods = array( - 'day' => Piwik_Translate('General_Daily'), - 'week' => Piwik_Translate('General_Weekly'), - 'month' => Piwik_Translate('General_Monthly'), - ); - return $periods; - } - static public function getEmailsFromString($additionalEmails) - { - if(empty($additionalEmails)) - { - return array(); - } - $additionalEmails = explode(',', trim($additionalEmails)); - $additionalEmails = array_filter($additionalEmails, 'strlen'); - return $additionalEmails; - } }
\ No newline at end of file diff --git a/plugins/PDFReports/templates/list.tpl b/plugins/PDFReports/templates/list.tpl index c7c5c4c3fd..3d00193d02 100644 --- a/plugins/PDFReports/templates/list.tpl +++ b/plugins/PDFReports/templates/list.tpl @@ -36,7 +36,9 @@ <!-- Last sent on {$report.ts_last_sent} --> </td> <td>{if $report.email_me == 1}{$currentUserEmail}{/if} - {$report.additional_emails|replace:",":" "}</td> + {$report.additional_emails|replace:",":" "} + <br/><a href='#' idreport='{$report.idreport}' name='linkEmailNow' class="link_but" style='margin-top:3px'><img border=0 src='themes/default/images/email.png'> {'PDFReports_SendReportNow'|translate}</a> + </td> <td><a href="{url module=API token_auth=$token_auth method='PDFReports.generateReport' idSite=$idSite date=$date idReport=$report.idreport outputType=$pdfDownloadOutputType}" target="_blank" name="linkDownloadReport" id="{$report.idreport}" class="link_but"><img src='plugins/UserSettings/images/plugins/pdf.gif' border="0" /> {'General_Download'|translate}</a></td> <td><a href='#' name="linkEditReport" id="{$report.idreport}" class="link_but"><img src='themes/default/images/ico_edit.png' border="0" /> {'General_Edit'|translate}</a></td> <td><a href='#' name="linkDeleteReport" id="{$report.idreport}" class="link_but"><img src='themes/default/images/ico_delete.png' border="0" /> {'General_Delete'|translate}</a></td> diff --git a/plugins/PDFReports/templates/pdf.js b/plugins/PDFReports/templates/pdf.js index 9d7f5ae907..19a0afa5f6 100644 --- a/plugins/PDFReports/templates/pdf.js +++ b/plugins/PDFReports/templates/pdf.js @@ -76,6 +76,16 @@ function initManagePdf() return false; }); + // Email now + $('a[name=linkEmailNow]').click(function(){ + var idReport = $(this).attr('idreport'); + var ajaxRequest = piwikHelper.getStandardAjaxConf(); + parameters = getPDFAjaxRequest(idReport, 'PDFReports.sendEmailReport'); + parameters.idReport = idReport; + ajaxRequest.data = parameters; + $.ajax( ajaxRequest ); + }); + // Delete PDF $('a[name=linkDeleteReport]').click(function(){ var idReport = $(this).attr('id'); diff --git a/plugins/SitesManager/templates/SitesManager.tpl b/plugins/SitesManager/templates/SitesManager.tpl index 801841fb48..5ab46099b6 100644 --- a/plugins/SitesManager/templates/SitesManager.tpl +++ b/plugins/SitesManager/templates/SitesManager.tpl @@ -88,7 +88,7 @@ vertical-align:middle; <table class="admin" id="editSites" border=1 cellpadding="10"> <thead> <tr> - <th>{'SitesManager_Id'|translate}</th> + <th>{'General_Id'|translate}</th> <th>{'General_Name'|translate}</th> <th>{'SitesManager_Urls'|translate}</th> <th>{'SitesManager_ExcludedIps'|translate}</th> diff --git a/themes/default/images/email.png b/themes/default/images/email.png Binary files differnew file mode 100644 index 0000000000..4a6c5d396a --- /dev/null +++ b/themes/default/images/email.png |