function test1() { $userOwner = new UserAccountModel(); $userOwner->setEmail("*****@*****.**"); $userOwner->setUsername("test2"); $userOwner->setPassword("password"); $user = new UserAccountModel(); $user->setEmail("*****@*****.**"); $user->setUsername("test"); $user->setPassword("password"); $userRepo = new UserAccountRepository(); $userRepo->create($user); $userRepo->create($userOwner); $site = new SiteModel(); $site->setTitle("Test"); $site->setSlug("test"); $siteRepo = new SiteRepository(); $siteRepo->create($site, $userOwner, array(), $this->getSiteQuotaUsedForTesting()); $userWatchesSiteRepo = new UserWatchesSiteRepository(); # Part 1: User does not watch site $t = $userWatchesSiteRepo->loadByUserAndSite($user, $site); $this->assertNull($t); $b = new UserWatchesSiteRepositoryBuilder(); $t = $b->fetchAll(); $this->assertEquals(1, count($t)); # Part 2: Watches! $userWatchesSiteRepo->startUserWatchingSite($user, $site); $t = $userWatchesSiteRepo->loadByUserAndSite($user, $site); $this->assertEquals($user->getId(), $t->getUserAccountId()); $this->assertEquals(true, $t->getIsWatching()); $this->assertEquals(true, $t->getIsWasOnceWatching()); $b = new UserWatchesSiteRepositoryBuilder(); $t = $b->fetchAll(); $this->assertEquals(2, count($t)); # Part 3: Stops Watching! $userWatchesSiteRepo->stopUserWatchingSite($user, $site); $t = $userWatchesSiteRepo->loadByUserAndSite($user, $site); $this->assertEquals(false, $t->getIsWatching()); $this->assertEquals(true, $t->getIsWasOnceWatching()); $b = new UserWatchesSiteRepositoryBuilder(); $t = $b->fetchAll(); $this->assertEquals(1, count($t)); }
function stopWatchingFromEmail($userid, $code, Request $request, Application $app) { $userRepo = new UserAccountRepository(); $user = $userRepo->loadByID($userid); if (!$user) { $app['monolog']->addError("Failed stop watching site from email - user not known"); die("NO"); // TODO } $userWatchesSiteStopRepo = new UserWatchesSiteStopRepository(); $userWatchesSiteStop = $userWatchesSiteStopRepo->loadByUserAccountIDAndSiteIDAndAccessKey($user->getId(), $app['currentSite']->getId(), $code); if (!$userWatchesSiteStop) { $app['monolog']->addError("Failed stop watching site from email - user " . $user->getId() . " - code wrong"); die("NO"); // TODO } $userWatchesSiteRepo = new UserWatchesSiteRepository(); $userWatchesSite = $userWatchesSiteRepo->loadByUserAndSite($user, $app['currentSite']); if (!$userWatchesSite || !$userWatchesSite->getIsWatching()) { $app['monolog']->addError("Failed stop watching site from email - user " . $user->getId() . " - not watching"); die("You don't watch this site"); // TODO } if ($request->request->get('action') == 'unwatch' && $request->request->get('CSFRToken') == $app['websession']->getCSFRToken()) { $userWatchesSiteRepo->stopUserWatchingSite($user, $app['currentSite']); // redirect here because if we didn't the twig global and $app vars would be wrong (the old state) // this is an easy way to get round that. $app['flashmessages']->addMessage("You have stopped watching this."); return $app->redirect('/'); } return $app['twig']->render('site/index/stopWatchingFromEmail.html.twig', array('user' => $user)); }
# ////////////// Features $siteFeaturesRepo = new repositories\SiteFeatureRepository($app); $app['currentSiteFeatures'] = new SiteFeaturesList($siteFeaturesRepo->getForSiteAsTree($app['currentSite'])); $app['twig']->addGlobal('currentSiteFeatures', $app['currentSiteFeatures']); $app['currentSiteFeatures']->setFeaturesOnSite($app['currentSite']); # ////////////// Permissions and Watch $userPermissionsRepo = new \repositories\UserPermissionsRepository($app['extensions']); // We do not check UserHasNoEditorPermissionsInSiteRepository(); because that is site mode only. // In Single Site mode sysadmins can remove this right. $app['currentUserPermissions'] = $userPermissionsRepo->getPermissionsForUserInSite($app['currentUser'], $app['currentSite'], false, true); # ////////////// User and their watch and perms $app['currentUserActions'] = new UserActionsSiteList($app['currentSite'], $app['currentUserPermissions']); $app['currentUserWatchesSite'] = false; if ($app['currentUser']) { $uwsr = new UserWatchesSiteRepository(); $uws = $uwsr->loadByUserAndSite($app['currentUser'], $app['currentSite']); $app['currentUserWatchesSite'] = $uws && $uws->getIsWatching(); } $app['twig']->addGlobal('currentUserActions', $app['currentUserActions']); $app['twig']->addGlobal('currentUserWatchesSite', $app['currentUserWatchesSite']); # ////////////// if not current user, let templates see what currentUser could do if (!$app['currentUser']) { // We don't pass $removeEditorPermissions here because that is about specific users being banned and this is potential users $app['anyVerifiedUserPermissions'] = $userPermissionsRepo->getPermissionsForAnyVerifiedUserInSite($app['currentSite'], false, true); $app['anyVerifiedUserActions'] = new UserActionsSiteList($app['currentSite'], $app['anyVerifiedUserPermissions']); $app['twig']->addGlobal('anyVerifiedUserActions', $app['anyVerifiedUserActions']); } # ////////////// Timezone $timezone = ""; if (isset($_GET['mytimezone']) && in_array($_GET['mytimezone'], $app['currentSite']->getCachedTimezonesAsList())) { setcookie("site" . $app['currentSite']->getId() . "timezone", $_GET['mytimezone'], time() + 60 * 60 * 24 * 365, '/', $CONFIG->webCommonSessionDomain, false, false);
/** * One event, 31 days from now, then 30 days, then 29 days, etc, only 1 email sent * @global type $CONFIG */ function test6() { global $CONFIG; $CONFIG->userWatchesPromptEmailSafeGapDays = 30; \TimeSource::mock(2013, 1, 1, 0, 0, 0); $user = new UserAccountModel(); $user->setEmail("*****@*****.**"); $user->setUsername("test"); $user->setPassword("password"); $userRepo = new UserAccountRepository(); $userRepo->create($user); $site = new SiteModel(); $site->setTitle("Test"); $site->setSlug("test"); $siteRepo = new SiteRepository(); $siteRepo->create($site, $user, array(), $this->getSiteQuotaUsedForTesting()); $event = new EventModel(); $start = \TimeSource::getDateTime(); $start->setDate(2013, 30, 9); $start->setTime(9, 0, 0); $event->setStartAt($start); $end = \TimeSource::getDateTime(); $end->setDate(2013, 30, 9); $end->setTime(12, 0, 0); $event->setEndAt($end); $eventRepo = new EventRepository(); $eventRepo->create($event, $site, $user); // User will watch site automatically in site->create() $userWatchesSiteRepo = new UserWatchesSiteRepository(); $userWatchesSite = $userWatchesSiteRepo->loadByUserAndSite($user, $site); #Before email sent! for ($day = 1; $day <= 29; $day++) { \TimeSource::mock(2013, $day, 8, 1, 0, 0); $userWatchesSite = $userWatchesSiteRepo->loadByUserAndSite($user, $site); $data = $userWatchesSite->getPromptEmailData($site, $eventRepo->loadLastNonDeletedNonImportedByStartTimeInSiteId($site->getId())); $this->assertFalse($data['moreEventsNeeded']); } #Email sent! \TimeSource::mock(2013, 30, 8, 1, 0, 0); $userWatchesSite = $userWatchesSiteRepo->loadByUserAndSite($user, $site); $data = $userWatchesSite->getPromptEmailData($site, $eventRepo->loadLastNonDeletedNonImportedByStartTimeInSiteId($site->getId())); $this->assertTrue($data['moreEventsNeeded']); $userWatchesSiteRepo->markPromptEmailSent($userWatchesSite, \TimeSource::getDateTime()); #After email sent \TimeSource::mock(2013, 31, 8, 1, 0, 0); $userWatchesSite = $userWatchesSiteRepo->loadByUserAndSite($user, $site); $data = $userWatchesSite->getPromptEmailData($site, $eventRepo->loadLastNonDeletedNonImportedByStartTimeInSiteId($site->getId())); $this->assertFalse($data['moreEventsNeeded']); for ($day = 1; $day <= 30; $day++) { \TimeSource::mock(2013, $day, 9, 1, 0, 0); $userWatchesSite = $userWatchesSiteRepo->loadByUserAndSite($user, $site); $data = $userWatchesSite->getPromptEmailData($site, $eventRepo->loadLastNonDeletedNonImportedByStartTimeInSiteId($site->getId())); $this->assertFalse($data['moreEventsNeeded']); } for ($day = 1; $day <= 31; $day++) { \TimeSource::mock(2013, $day, 10, 1, 0, 0); $userWatchesSite = $userWatchesSiteRepo->loadByUserAndSite($user, $site); $data = $userWatchesSite->getPromptEmailData($site, $eventRepo->loadLastNonDeletedNonImportedByStartTimeInSiteId($site->getId())); $this->assertFalse($data['moreEventsNeeded']); } for ($day = 1; $day <= 30; $day++) { \TimeSource::mock(2013, $day, 11, 1, 0, 0); $userWatchesSite = $userWatchesSiteRepo->loadByUserAndSite($user, $site); $data = $userWatchesSite->getPromptEmailData($site, $eventRepo->loadLastNonDeletedNonImportedByStartTimeInSiteId($site->getId())); $this->assertFalse($data['moreEventsNeeded']); } for ($day = 1; $day <= 31; $day++) { \TimeSource::mock(2013, $day, 12, 1, 0, 0); $userWatchesSite = $userWatchesSiteRepo->loadByUserAndSite($user, $site); $data = $userWatchesSite->getPromptEmailData($site, $eventRepo->loadLastNonDeletedNonImportedByStartTimeInSiteId($site->getId())); $this->assertFalse($data['moreEventsNeeded']); } }
public function markNotificationSent(\DateTime $checkTime) { $userWatchesSiteRepository = new UserWatchesSiteRepository(); $userWatchesSite = $userWatchesSiteRepository->loadByUserAndSite($this->userAccount, $this->site); $userWatchesSiteRepository->markNotifyEmailSent($userWatchesSite, $checkTime); }