/** * @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(); } }
/** * статистика по дням по кампании * * @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); }
/** * Удалить кампанию * * @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); }
/** * вернуть деньги с баланса кампании на счёт юзера * * @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); }); }