function watch($slug, Request $request, Application $app)
 {
     if (!$this->build($slug, $request, $app)) {
         $app->abort(404, "Area does not exist.");
     }
     if ($request->request->get('action') && $request->request->get('CSFRToken') == $app['websession']->getCSFRToken()) {
         $repo = new UserWatchesAreaRepository();
         if ($request->request->get('action') == 'watch') {
             $repo->startUserWatchingArea($app['currentUser'], $this->parameters['area']);
             $app['flashmessages']->addMessage("Watching!");
         } else {
             if ($request->request->get('action') == 'unwatch') {
                 $repo->stopUserWatchingArea($app['currentUser'], $this->parameters['area']);
                 $app['flashmessages']->addMessage("No longer watching");
             }
         }
         // redirect here because if we didn't the  $this->parameters vars would be wrong (the old state)
         // this is an easy way to get round that. Also it's nice UI to go back to the area page.
         return $app->redirect('/area/' . $this->parameters['area']->getSlugForURL());
     }
     $repo = new \repositories\UserNotificationPreferenceRepository();
     $this->parameters['preferences'] = array();
     foreach ($app['extensions']->getExtensionsIncludingCore() as $extension) {
         if (!isset($this->parameters['preferences'][$extension->getId()])) {
             $this->parameters['preferences'][$extension->getId()] = array();
         }
         foreach ($extension->getUserNotificationPreferenceTypes() as $type) {
             $userPref = $repo->load($app['currentUser'], $extension->getId(), $type);
             $this->parameters['preferences'][$extension->getId()][$type] = array('email' => $userPref->getIsEmail());
         }
     }
     return $app['twig']->render('site/area/watch.html.twig', $this->parameters);
 }
 protected function actionThingsToDoAfterGetUser(Application $app, UserAccountModel $user)
 {
     // events
     $uaerepo = new UserAtEventRepository();
     $eventsAdded = false;
     foreach ($this->parameters['afterGetUserAddEvents'] as $event) {
         if ($event->getIsAllowedForAfterGetUser()) {
             $uae = $uaerepo->loadByUserAndEventOrInstanciate($user, $event);
             if (!$uae->getIsPlanAttending() && !$uae->getIsPlanMaybeAttending()) {
                 $uae->setIsPlanMaybeAttending(true);
                 $uaerepo->save($uae);
                 $eventsAdded = true;
             }
         }
     }
     if ($eventsAdded) {
         $app['flashmessages']->addMessage("Check out your personal calendar for events you are interested in!");
         // TODO add link
     }
     // areas
     $uwarepo = new UserWatchesAreaRepository();
     foreach ($this->parameters['afterGetUserAddAreas'] as $area) {
         if ($area->getIsAllowedForAfterGetUser()) {
             $uwarepo->startUserWatchingArea($user, $area);
         }
     }
     // reset
     $app['websession']->setArray("afterGetUserAddEvents", array());
     $app['websession']->setArray("afterGetUserAddAreas", array());
 }