/**
  * Send notification about new classified added
  *
  * @param  Request        $request    Request object
  * @param  ClassifiedUser $user       Classified user
  * @param  Announcement   $classified Announcement
  * @return void
  */
 public function sendNotificationEmail(Request $request, ClassifiedUser $user, Announcement $classified)
 {
     $emailService = $this->container->get('email');
     $router = $this->container->get('router');
     $em = $this->container->get('em');
     $templatesService = $this->container->get('newscoop.templates.service');
     $placeholdersService = $this->container->get('newscoop.placeholders.service');
     $preferencesService = $this->container->get('preferences');
     $smarty = $templatesService->getSmarty();
     $smarty->assign('user', new \MetaUser($user->getNewscoopUser()));
     $smarty->assign('classified', $classified);
     $smarty->assign('created', $classified->getCreatedAt()->format('Y-m-d H:i:s'));
     $smarty->assign('editLink', $request->getUriForPath($router->generate('ahs_advertsplugin_admin_editad', array('id' => $classified->getId()))));
     try {
         $message = $templatesService->fetchTemplate("_ahs_adverts/email_classified_notify.tpl");
     } catch (\Exception $e) {
         throw new NotFoundHttpException("Could not load template: _ahs_adverts/email_classified_notify.tpl");
     }
     $emailService->send($placeholdersService->get('subject'), $message, array($preferencesService->AdvertsNotificationEmail));
 }
 /**
  * @Route("/classifieds/add", name="ahs_advertsplugin_default_add", options={"expose"=true})
  */
 public function addAction(Request $request)
 {
     $session = $request->getSession();
     $userService = $this->get('user');
     $templatesService = $this->get('newscoop.templates.service');
     $cacheService = \Zend_Registry::get('container')->get('newscoop.cache');
     $systemPreferences = $this->get('system_preferences_service');
     $adsService = $this->get('ahs_adverts_plugin.ads_service');
     $translator = $this->get('translator');
     $em = $this->container->get('em');
     $newscoopUser = $userService->getCurrentUser();
     $limitExhausted = false;
     $isValid = true;
     if (!$newscoopUser) {
         return new RedirectResponse($this->container->get('zend_router')->assemble(array('controller' => '', 'action' => 'auth'), 'default') . '?_target_path=' . $this->generateUrl('ahs_advertsplugin_default_add'));
     }
     // create announcement user
     $user = $em->getRepository('AHS\\AdvertsPluginBundle\\Entity\\User')->findOneBy(array('newscoopUserId' => $newscoopUser->getId()));
     $activeAnnouncementsCount = $em->getRepository('AHS\\AdvertsPluginBundle\\Entity\\Announcement')->createQueryBuilder('a')->select('count(a)')->where('a.announcementStatus = true')->andWhere('a.user = :user')->andWhere('a.removed = false')->setParameter('user', $user)->getQuery()->getSingleScalarResult();
     $announcement = new Announcement();
     $publicationService = $this->container->get('newscoop_newscoop.publication_service');
     $form = $this->createForm(new FrontAnnouncementType(), $announcement, array('translator' => $translator, 'config' => $this->container->getParameter('purifier')));
     $categories = $this->getCategories();
     if ($session->has('announcement_id')) {
         $session->remove('announcement_id');
     }
     $errors = array();
     if ($systemPreferences->AdvertsMaxClassifiedsPerUserEnabled) {
         if ((int) $activeAnnouncementsCount >= (int) $systemPreferences->AdvertsMaxClassifiedsPerUser && !$session->get('ahs_adverts_nolimit')) {
             $limitExhausted = true;
             $errors[]['message'] = $translator->trans('ads.error.maxClassifieds', array('{{ count }}' => $systemPreferences->AdvertsMaxClassifiedsPerUser));
         }
     }
     if ($session->get('ahs_adverts_cantadd')) {
         $limitExhausted = true;
         $errors[]['message'] = $translator->trans('ads.error.cantaddclassifieds');
     }
     if ($request->isMethod('POST') && !$limitExhausted) {
         $form->bind($request);
         if ($form->isValid()) {
             if (!$user) {
                 $user = new User();
                 $user->setNewscoopUser($newscoopUser);
                 $em->persist($user);
             }
             $announcement->setUser($user);
             $announcement->setPublication($publicationService->getPublication());
             $systemPreferences = $this->get('system_preferences_service');
             // set valid date
             $announcement->extendFor($systemPreferences->AdvertsValidTime);
             // set anouncement default status
             if ($systemPreferences->AdvertsReviewStatus == '1') {
                 $announcement->setIsActive(false);
             }
             $em->persist($announcement);
             $em->flush();
             $cacheService->clearNamespace('announcements');
             $this->savePhotosInAnnouncement($announcement, $request);
             if ($systemPreferences->AdvertsEnableNotify == "1") {
                 $this->get('dispatcher')->dispatch('classifieds.modified', new GenericEvent($this, array('announcement' => $announcement, 'notification' => array($request, $user))));
             }
             if ($session->has('ahs_adverts_nolimit')) {
                 $session->remove('ahs_adverts_nolimit');
             }
             if ($session->has('announcement_photos')) {
                 $session->remove('announcement_photos');
             }
             return new RedirectResponse($this->generateUrl('ahs_advertsplugin_default_show', array('id' => $announcement->getId())));
         } else {
             $isValid = false;
         }
     }
     if ($session->has('ahs_adverts_nolimit')) {
         $session->remove('ahs_adverts_nolimit');
     }
     if ($session->has('ahs_adverts_cantadd')) {
         $session->remove('ahs_adverts_cantadd');
     }
     if ($isValid) {
         $session->set('announcement_photos', array());
     }
     return new Response($templatesService->fetchTemplate('_ahs_adverts/add.tpl', array('announcement' => $announcement, 'categories' => $categories, 'form' => $form->createView(), 'form_path' => $this->generateUrl('ahs_advertsplugin_default_add'), 'type' => 'add', 'errors' => $errors)), 200, array('Content-Type' => 'text/html'));
 }