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:
authordiosmosis <diosmosis@users.noreply.github.com>2018-09-21 01:53:37 +0300
committerGitHub <noreply@github.com>2018-09-21 01:53:37 +0300
commit2d2abcc9576079a8496ad8bd4a038ba07cf1fb2b (patch)
tree511d4c06b004d8162fb3cd2480252c25caa13a63 /plugins/CoreAdminHome/Tasks.php
parenta7f5d6478cfcff4cb2b9a19b40f2b526da8f1eea (diff)
Send email if no tracked data within N days. (#13363)
* Remember user who created a site. * Send email if no tracked data within N days. * Add test and get to pass. * Fixes after manual tests of emails * Bump version & change column name to creator_login. * Email tweaks. * Rename Site::getCreationUserFor * Modify Site:: access methiod name * Applying PR feedback. * Move email HTML content generation logic to separate class in DI. * tweak translations * Apply PR review feedback. * Couple more tweaks. * Make tracking code check a one time task + and save timetable when removing inactive tasks. * Update save call. * Apply more PR feedback. * small performance tweak and put the site name in quotes * Fixing tests. * Update expected file.
Diffstat (limited to 'plugins/CoreAdminHome/Tasks.php')
-rw-r--r--plugins/CoreAdminHome/Tasks.php79
1 files changed, 79 insertions, 0 deletions
diff --git a/plugins/CoreAdminHome/Tasks.php b/plugins/CoreAdminHome/Tasks.php
index b4542d23a7..719aa6b40d 100644
--- a/plugins/CoreAdminHome/Tasks.php
+++ b/plugins/CoreAdminHome/Tasks.php
@@ -8,20 +8,30 @@
*/
namespace Piwik\Plugins\CoreAdminHome;
+use Piwik\API\Request;
use Piwik\ArchiveProcessor\Rules;
use Piwik\Archive\ArchivePurger;
+use Piwik\Config;
use Piwik\DataAccess\ArchiveTableCreator;
use Piwik\Date;
use Piwik\Db;
use Piwik\Http;
use Piwik\Option;
+use Piwik\Plugins\CoreAdminHome\Emails\JsTrackingCodeMissingEmail;
use Piwik\Plugins\CoreAdminHome\Tasks\ArchivesToPurgeDistributedList;
+use Piwik\Plugins\SitesManager\SitesManager;
+use Piwik\Scheduler\Schedule\Daily;
+use Piwik\Scheduler\Schedule\Monthly;
+use Piwik\Scheduler\Schedule\SpecificTime;
+use Piwik\Settings\Storage\Backend\MeasurableSettingsTable;
+use Piwik\Tests\Framework\Mock\Site;
use Piwik\Tracker\Visit\ReferrerSpamFilter;
use Psr\Log\LoggerInterface;
use Piwik\SettingsPiwik;
class Tasks extends \Piwik\Plugin\Tasks
{
+ const TRACKING_CODE_CHECK_FLAG = 'trackingCodeExistsCheck';
/**
* @var ArchivePurger
*/
@@ -52,6 +62,75 @@ class Tasks extends \Piwik\Plugin\Tasks
if(SettingsPiwik::isInternetEnabled() === true){
$this->weekly('updateSpammerBlacklist');
}
+
+ $this->scheduleTrackingCodeReminderChecks();
+ }
+
+ private function scheduleTrackingCodeReminderChecks()
+ {
+ $daysToTrackedVisitsCheck = (int) Config::getInstance()->General['num_days_before_tracking_code_reminder'];
+ if ($daysToTrackedVisitsCheck <= 0) {
+ return;
+ }
+
+ // add check for a site's tracked visits
+ $sites = Request::processRequest('SitesManager.getAllSites');
+
+ foreach ($sites as $site) {
+ $createdTime = Date::factory($site['ts_created']);
+ $scheduledTime = $createdTime->addDay($daysToTrackedVisitsCheck)->setTime('02:00:00');
+
+ // we don't want to run this check for every site in an install when this code is introduced,
+ // so if the site is over 2 * $daysToTrackedVisitsCheck days old, assume the check has run.
+ $isSiteOld = $createdTime->isEarlier(Date::today()->subDay($daysToTrackedVisitsCheck * 2));
+
+ if ($isSiteOld || $this->hasTrackingCodeReminderRun($site['idsite'])) {
+ continue;
+ }
+
+ $schedule = new SpecificTime($scheduledTime->getTimestamp());
+ $this->custom($this, 'checkSiteHasTrackedVisits', $site['idsite'], $schedule);
+ }
+ }
+
+ public function checkSiteHasTrackedVisits($idSite)
+ {
+ $this->rememberTrackingCodeReminderRan($idSite);
+
+ if (!SitesManager::hasTrackedAnyTraffic($idSite)) {
+ return;
+ }
+
+ // site is still empty after N days, so send an email to the user that created the site
+ $creatingUser = Site::getCreatorLoginFor($idSite);
+ if (empty($creatingUser)) {
+ return;
+ }
+
+ $user = Request::processRequest('UsersManager.getUser', [
+ 'userLogin' => $creatingUser,
+ ]);
+ if (empty($user['email'])) {
+ return;
+ }
+
+ $email = new JsTrackingCodeMissingEmail($user['login'], $user['email'], $idSite);
+ $email->send();
+ }
+
+ private function hasTrackingCodeReminderRun($idSite)
+ {
+ $table = new MeasurableSettingsTable($idSite, 'CoreAdminHome');
+ $settings = $table->load();
+ return !empty($settings[self::TRACKING_CODE_CHECK_FLAG]);
+ }
+
+ private function rememberTrackingCodeReminderRan($idSite)
+ {
+ $table = new MeasurableSettingsTable($idSite, 'CoreAdminHome');
+ $settings = $table->load();
+ $settings[self::TRACKING_CODE_CHECK_FLAG] = 1;
+ $table->save($settings);
}
/**