diff options
author | diosmosis <diosmosis@users.noreply.github.com> | 2018-09-21 01:53:37 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-21 01:53:37 +0300 |
commit | 2d2abcc9576079a8496ad8bd4a038ba07cf1fb2b (patch) | |
tree | 511d4c06b004d8162fb3cd2480252c25caa13a63 /plugins/CoreAdminHome/Tasks.php | |
parent | a7f5d6478cfcff4cb2b9a19b40f2b526da8f1eea (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.php | 79 |
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); } /** |