public function saveImpressionsAction(Request $request)
 {
     $this->_throwUnsupportedMethodIfNotPost($request);
     $form = $this->createForm(new TrackerFormType());
     $form->bind($request);
     // invalid form
     if (!$form->isValid()) {
         $this->_throwHttpException(400, 'Invalid form');
     }
     $impressions = $request->get('impressions', array());
     if (!\count($impressions)) {
         return new Response('Empty impressions', 200);
         //$this->_throwHttpException(400, 'Empty impressions');
     }
     $trackerFactory = $this->get('factory.statistics.dailyTracker');
     $trackersUsed = array();
     // add impressions to daily trackers
     foreach ($impressions as $_encodedImpression) {
         $decodedImpression = StatisticParameters::decodeParameters($_encodedImpression);
         // no statisic type parameter, or invalid type
         if (!$decodedImpression->has(StatisticParameters::TYPE) || !StatisticTypes::isValidType($decodedImpression->get(StatisticParameters::TYPE))) {
             // lets skip this for now.
             continue;
         }
         if (!isset($trackersUsed[$decodedImpression->get(StatisticParameters::TYPE)])) {
             $trackersUsed[$decodedImpression->get(StatisticParameters::TYPE)] = $trackerFactory->getTrackerByType($decodedImpression->get(StatisticParameters::TYPE));
         }
         $tracker = $trackersUsed[$decodedImpression->get(StatisticParameters::TYPE)];
         if ($data = $tracker->createDataFromParameters($decodedImpression)) {
             //                 $em = $this->getDoctrine()->getEntityManager('statistics');
             //                 $em->persist($data);
             //                 $em->flush();
             //                 return $this->render('::base.ajaxDebugger.html.twig');
             //                 var_dump($data); exit;
             $tracker->add($data);
         }
     }
     // batch save the impressions
     foreach ($trackersUsed as $tracker) {
         try {
             $tracker->batchSave();
         } catch (\Exception $e) {
             // log this exception
         }
     }
     return new Response('Impressions saved', 200);
 }
 private function _initializeTypes()
 {
     static $hasInitialized = false;
     if (!$hasInitialized) {
         foreach (StatisticTypes::getTrackerClasses() as $_type => $_class) {
             if (!\class_exists($_class)) {
                 throw TrackerException::trackerClassDoesNotExist($_class);
             }
             $_tracker = new $_class();
             if (!$_tracker instanceof Tracker) {
                 throw TrackerException::invalidTrackerClass($_tracker);
             }
             // inject dependencies
             $_tracker->setDoctrine($this->doctrine);
             $this->trackers[$_type] = $_tracker;
         }
         $hasInitialized = true;
     }
 }
    const INSTITUTION_MEDICAL_CENTER = 3;
    // statistic type for items appearing as search results
    const SEARCH_RESULT_ITEM = 4;
    private static $types = array();
    private static $trackerClasses = array();
    private static $typesByRoutes = array();
    public static function isValidType($type)
    {
        return \array_key_exists($type, self::$types);
    }
    public static function getTypes()
    {
        return static::$types;
    }
    public static function getTrackerClasses()
    {
        return static::$trackerClasses;
    }
    public static function getTypeByRoute($route)
    {
        return isset(static::$typesByRoutes[$route]) ? static::$typesByRoutes[$route] : null;
    }
    public static function _initializeTypes()
    {
        static::$types = array(self::ADVERTISEMENT => 'Advertisement', self::INSTITUTION => 'Institution', self::INSTITUTION_MEDICAL_CENTER => 'Institution Medical Center', self::SEARCH_RESULT_ITEM => 'Search Results Item');
        static::$trackerClasses = array(StatisticTypes::ADVERTISEMENT => '\\HealthCareAbroad\\StatisticsBundle\\Services\\Trackers\\AdvertisementTracker', StatisticTypes::INSTITUTION => '\\HealthCareAbroad\\StatisticsBundle\\Services\\Trackers\\InstitutionTracker', StatisticTypes::INSTITUTION_MEDICAL_CENTER => '\\HealthCareAbroad\\StatisticsBundle\\Services\\Trackers\\InstitutionMedicalCenterTracker', StatisticTypes::SEARCH_RESULT_ITEM => '\\HealthCareAbroad\\StatisticsBundle\\Services\\Trackers\\SearchResultItemTracker');
        static::$typesByRoutes = array('frontend_institution_multipleCenter_profile' => self::INSTITUTION, 'frontend_institution_singleCenter_profile' => self::INSTITUTION, 'frontend_institutionMedicalCenter_profile' => self::INSTITUTION_MEDICAL_CENTER);
    }
}
StatisticTypes::_initializeTypes();