Exemple #1
0
 /**
  * @before _secure
  */
 public function campaigns()
 {
     $this->seo(array("title" => "Campaigns"));
     $view = $this->getActionView();
     $limit = RM::get("limit", 20);
     $page = RM::get("page", 1);
     $category = RM::get("category", []);
     $keyword = RM::get("keyword", '');
     $query = ["live = ?" => true, "org_id = ?" => $this->org->_id];
     $query["meta.private"] = ['$ne' => true];
     $today = date('Y-m-d');
     if (count($category) > 0) {
         // if you want AND query instead of OR query then replace '$in' --> '$all'
         $query["category"] = ['$in' => Ad::setCategories($category)];
     }
     if ($keyword) {
         $query["title"] = Utils::mongoRegex($keyword);
     }
     switch (RM::get("action")) {
         case 'trending':
             $ads = \Ad::all($query, [], 'modified', 'desc');
             $fields = Shared\Services\User::fields('Ad');
             $ids = array_keys($ads);
             $ads = Ad::objectArr($ads, $fields);
             $limit = $count = 30;
             $clickCol = Registry::get("MongoDB")->clicks;
             $results = $clickCol->aggregate([['$match' => ['adid' => ['$in' => Db::convertType($ids, 'id')], 'is_bot' => false, 'created' => Db::dateQuery(RM::get("start", $today), RM::get("end", $today))]], ['$project' => ['adid' => 1, '_id' => 1]], ['$group' => ['_id' => '$adid', 'count' => ['$sum' => 1]]], ['$sort' => ['count' => -1]], ['$limit' => $limit]]);
             $ans = [];
             foreach ($results as $r) {
                 $a = (object) $r;
                 $key = Utils::getMongoID($a->_id);
                 $ans[$key] = $ads[$key];
             }
             $ads = $ans;
             break;
         default:
             $count = \Ad::count($query);
             $ads = \Ad::all($query, [], 'modified', 'desc', $limit, $page);
             break;
     }
     //private campaigns
     $query["meta.private"] = true;
     $query["meta.access"] = ['$in' => [$this->user->id]];
     $pads = \Ad::all($query, [], 'modified', 'desc');
     $categories = \Category::all(["org_id = ?" => $this->org->_id], ['name', '_id']);
     $user = $this->user;
     $model = null;
     $rate = null;
     if (array_key_exists("campaign", $user->meta)) {
         $model = $user->meta["campaign"]["model"];
         $rate = $user->meta["campaign"]["rate"];
     }
     $view->set(['limit' => $limit, 'page' => $page, 'count' => $count, 'ads' => $ads, 'model' => $model, 'rate' => $rate, 'categories' => $categories, 'coverage' => $category, 'tdomains' => \Shared\Services\User::trackingLinks($this->user, $this->org), 'keyword' => $keyword, 'pads' => $pads]);
 }
Exemple #2
0
 /**
  * @before _secure
  * @after _cleanUp
  */
 public function campaign($id = null)
 {
     $view = $this->getActionView();
     $org = $this->_org;
     $active = RequestMethods::get('active', 1);
     $fields = ['_id', 'title', 'description', 'image', 'url', 'device', 'expiry', 'created'];
     $commFields = ['model', 'rate', 'revenue', 'coverage'];
     if ($id) {
         $campaign = Ad::first(['_id' => $id, 'org_id' => $org->_id], $fields);
     } else {
         $campaign = null;
     }
     if ($id && !$campaign) {
         return $this->failure('30');
     }
     $type = RequestMethods::type();
     switch ($type) {
         case 'GET':
             if (!$id) {
                 // display list of campaigns
                 $ads = Ad::all(['org_id' => $org->_id, 'live' => $active], $fields);
                 $ads = Ad::objectArr($ads, $fields);
                 $results = [];
                 foreach ($ads as $id => $a) {
                     $arr = Utils::toArray($a);
                     $comms = Commission::all(['ad_id' => $a->_id], $commFields);
                     $arr['commissions'] = Ad::objectArr($comms, $commFields);
                     $results[$id] = (object) $arr;
                 }
                 $data = ['campaigns' => $results];
                 $view->set('data', $data);
             } else {
                 $ads = Ad::objectArr($campaign, $fields);
                 $campaign = array_shift($ads);
                 $comm = Commission::all(['ad_id' => $campaign->_id], $commFields);
                 $data = ['campaign' => $campaign, 'commissions' => Commission::objectArr($comm, $commFields)];
                 $view->set('data', $data);
             }
             break;
         case 'POST':
             if ($id) {
                 // edit a particular campaign
             } else {
                 // create a new campaign
                 $fields = ['title', 'description', 'url', 'expiry', 'category', 'device', 'user_id'];
                 $img = RequestMethods::post('image');
                 // contains image url
                 $campaign = new Ad(['org_id' => $org->_id, 'type' => 'article', 'image' => Utils::media($img, 'download')]);
                 foreach ($fields as $f) {
                     $campaign->{$f} = RequestMethods::post($f);
                 }
                 $view->set('success', false);
                 $visibility = RequestMethods::post('visibility', 'public');
                 if ($visibility === 'private') {
                     $campaign->getMeta()['private'] = true;
                 }
                 $opts = ['devices' => array_keys(Shared\Markup::devices()), 'advertisers' => $org->users('advertiser', false)];
                 if (true) {
                     // $campaign->save();
                     $arr = ArrayMethods::reArray($_POST['commissions']);
                     var_dump($arr);
                     var_dump($_POST['commissions']);
                     $view->set('success', true);
                 } else {
                     $data = ['errors' => $campaign->errors];
                     $view->set('data', $data);
                 }
             }
             break;
         case 'DELETE':
             $message = $campaign->delete();
             $view->set($message);
             break;
     }
 }