/** * @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]); }
/** * @before _secure * @after _csrfToken */ public function edit($id) { $c = \Ad::first(["_id = ?" => $id, "org_id = ?" => $this->org->_id]); if (!$c) { $this->redirect("/campaign/manage.html"); } $this->seo(['title' => sprintf("Edit: %s", $c->title), 'description' => 'Edit the campaign']); $view = $this->getActionView(); $categories = \Category::all(['org_id' => $this->org->id], ['_id', 'name']); if (RM::type() === 'DELETE') { $this->_commissionDel($c, $view); } if (RM::type() === 'POST') { $action = RM::post("action"); switch ($action) { case 'targeting': $campaign = $c; $campaign->device = RM::post('device', $campaign->device); $visibility = RM::post('visibility', 'public'); if ($visibility === "private") { $campaign->getMeta()['private'] = true; } else { unset($campaign->getMeta()['private']); } $permission = RM::post('permission', false); if ($permission == "yes") { $campaign->getMeta()['permission'] = true; } else { unset($campaign->getMeta()['permission']); } $campaign->save(); $view->set("message", "Campaign updated!!"); break; case 'adedit': $c->category = \Ad::setCategories(RM::post('category')); $c->title = RM::post('title'); $c->url = RM::post("url"); $c->description = RM::post('description'); $c->device = RM::post('device', ['all']); $expiry = RM::post('expiry'); if ($expiry) { $c->expiry = $expiry; } if (!$c->validate()) { $view->set("errors", $c->errors); $view->set("message", "Validation Failed"); } else { $c->save(); $view->set("message", "Campaign updated!!"); } break; case 'imageUpload': $message = "Image Updated Successfully!!"; $img = ' '; $imgUrl = RM::post("imageUrl"); if ($_FILES['image']['name']) { $img = Utils::media('image', 'upload'); } else { if ($imgUrl) { $img = Utils::media($imgUrl, 'download'); } } if (strlen($img) > 4) { // to check if media was uploaded successfully Utils::media($c->image, 'remove'); } else { $img = $c->image; $message = "Please Upload a valid Image!!"; } $c->image = $img; $c->save(); $view->set("message", $message); break; case 'commadd': case 'commedit': $cid = RM::post('cid'); if ($cid) { $comm = Commission::first(["id" => $cid, "ad_id" => $c->_id]); } else { $comm = new \Commission(['ad_id' => $c->_id, 'live' => true]); } $comm->model = RM::post('model'); $comm->description = RM::post('description'); $comm->rate = $this->currency(RM::post('rate')); $comm->revenue = $this->currency(RM::post('revenue')); $comm->coverage = RM::post('coverage', ['ALL']); if ($comm->validate()) { $comm->save(); $view->set("message", "Commission updated!!"); } else { $view->set("errors", $comm->errors); $view->set("message", "Validation Failed"); } break; } } $comms = \Commission::all(["ad_id = ?" => $c->_id]); $view->set("c", $c)->set('categories', $categories)->set('advertisers', User::all(["org_id = ?" => $this->org->id, "type = ?" => "advertiser"], ["id", "name"]))->set("comms", $comms); }