Esempio n. 1
0
 /**
  * @param Campaign $campaign
  *
  * @throws \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
  */
 private function checkPermissions(Campaign $campaign)
 {
     if ($this->getUser()->getType() !== User::TYPE_ADVERTISER) {
         throw new AccessDeniedHttpException();
     }
     if ($this->getUser() !== $campaign->getUser()) {
         throw new AccessDeniedHttpException();
     }
 }
Esempio n. 2
0
 /**
  * статистика по дням по кампании
  *
  * @param Campaign $campaign id кампании
  *
  * @Rest\Get("billing/spendings/{campaign_id}", requirements={"campaign_id"="\d+"})
  * @ParamConverter("campaign", class="VifeedCampaignBundle:Campaign",
  *                  options={"id" = "campaign_id", "repository_method" = "findWithoutFilter"})
  * @ApiDoc(
  *     section="Billing statistics API",
  *     requirements={
  *       {"name"="campaign_id", "dataType"="integer", "requirement"="\d+", "description"="id кампании"}
  *     },
  *     parameters={
  *       {"name"="date_from", "dataType"="date", "format"="YYYY-MM-DD", "required"=true},
  *       {"name"="date_to", "dataType"="date", "format"="YYYY-MM-DD", "required"=true}
  *     },
  *     statusCodes={
  *         200="Returned when successful",
  *         400="Returned when date_from or date_to is not correct",
  *         403="Returned when the user is not authorized to use this method",
  *         404="Returned when campaign is not found"
  *     }
  * )
  *
  * @throws \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
  *
  * @return \Symfony\Component\HttpFoundation\Response
  */
 public function getBillingSpendingsByCampaignAction(Campaign $campaign)
 {
     if ($this->getUser()->getType() !== User::TYPE_ADVERTISER) {
         throw new AccessDeniedHttpException();
     }
     if ($this->getUser() !== $campaign->getUser()) {
         throw new AccessDeniedHttpException();
     }
     $dates = $this->getRequestedDates();
     $data = ['stats' => [], 'total_views' => 0, 'total_paid_views' => 0, 'total_charged' => 0, 'total_kpi' => 0];
     $statsManager = $this->container->get('vifeed.videoview.stats_manager');
     $stats = $statsManager->getDailyStatsByCampaigns($campaign, $dates['date_from'], $dates['date_to']);
     foreach ($stats as &$row) {
         unset($row['campaign_id']);
         $row['charged'] += 0;
         // если не было списаний, то приходит null
         $row['kpi'] = $row['paid_views'] > 0 ? round($row['views'] / $row['paid_views'], 2) : 0;
         $data['total_views'] += $row['views'];
         $data['total_paid_views'] += $row['paid_views'];
         $data['total_charged'] += $row['charged'];
     }
     $data['stats'] = $stats;
     $data['total_kpi'] = $data['total_paid_views'] > 0 ? round($data['total_views'] / $data['total_paid_views'], 2) : 0;
     $view = new View($data);
     return $this->handleView($view);
 }
Esempio n. 3
0
 /**
  * Удалить кампанию
  *
  * @param Campaign $campaign
  *
  * @Rest\Delete("campaigns/{id}", requirements={"id"="\d+"})
  * @ParamConverter("campaign", class="VifeedCampaignBundle:Campaign")
  * @ApiDoc(
  *     section="Campaign API",
  *     requirements={
  *       {"name"="id", "dataType"="integer", "requirement"="\d+", "description"="id кампании"}
  *     },
  *     statusCodes={
  *         204="Returned when successful",
  *         403="Returned when the user is not authorized to use this method",
  *         404="Returned when campaign not found"
  *     }
  * )
  *
  * @return Response
  */
 public function deleteCampaignAction(Campaign $campaign)
 {
     if ($campaign->getUser() != $this->getUser()) {
         throw new AccessDeniedHttpException('Можно удалять только свои кампании');
     }
     $this->tagManager->deleteTagging($campaign);
     $this->em->remove($campaign);
     $this->em->flush();
     $view = new View('', 204);
     return $this->handleView($view);
 }
Esempio n. 4
0
 /**
  * вернуть деньги с баланса кампании на счёт юзера
  *
  * @param Campaign $campaign
  */
 public function transferMoneyBackToUser(Campaign $campaign)
 {
     $this->em->transactional(function (EntityManager $em) use($campaign) {
         $em->getRepository('VifeedUserBundle:User')->updateBalance($campaign->getUser(), $campaign->getBalance());
         $campaign->setBalance(0);
         $em->persist($campaign);
     });
 }