/** * @before _secure */ public function create() { $this->_create(); $view = $this->getActionView(); if (RM::type() == 'POST') { $img = null; // give preference to uploaded image $img = $this->_upload('image', 'images', ['extension' => 'jpe?g|gif|bmp|png|tif']); if (!$img) { $img_url = RM::post("image_url"); $img = Shared\Utils::downloadImage($img_url); } if (!$img) { return $view->set('message', 'Failed to upload the image'); } $expiry = RM::post('expiry'); $campaign = new \Ad(['user_id' => RM::post('advert_id'), 'title' => RM::post('title'), 'description' => RM::post('description'), 'org_id' => $this->org->_id, 'url' => RM::post('url'), 'preview_url' => RM::post('preview_url'), 'category' => \Ad::setCategories(RM::post('category')), 'image' => $img, 'type' => RM::post('type', 'article'), 'device' => RM::post('device', ['all']), 'live' => false]); $visibility = RM::post('visibility', 'public'); if ($visibility === "private") { $campaign->meta = ['private' => true]; } $permission = RM::post('permission', false); if ($permission == "yes") { $campaign->meta = ['permission' => true]; } if ($expiry) { $campaign->expiry = $expiry; } try { if ($campaign->type === "video") { $url = RM::post('videoUrl'); $ytdl = new Downloader($url); $campaign->getMeta()['processing'] = true; $campaign->getMeta()['videoUrl'] = $ytdl->getUrl(); } } catch (\Exception $e) { // Invalid URL return $view->set("errors", ['videoUrl' => ["Pass a valid youtube video URL"]]); } if (!$campaign->validate()) { return $view->set("errors", $campaign->errors); } $campaign->save(); $models = RM::post('model'); $comm_desc = RM::post('comm_desc'); $revenue = RM::post('revenue'); $rate = RM::post('rate'); $coverage = RM::post('coverage'); foreach ($models as $key => $value) { $commission = new \Commission(['ad_id' => $campaign->_id, 'description' => $comm_desc[$key], 'model' => $value, 'rate' => $this->currency($rate[$key]), 'revenue' => $this->currency($revenue[$key]), 'coverage' => $coverage[$key]]); $commission->save(); } Registry::get("session")->set('$flashMessage', 'Campaign Created successfully!!'); $this->redirect("/campaign/manage.html"); } }
/** * Process the Meta table for campaign urls and create the * campaign from the corresponding URL */ protected function importCampaigns() { $metas = \Meta::all(['prop = ?' => 'campImport']); $users = []; $orgs = []; foreach ($metas as $m) { $user = Usr::find($users, $m->propid, ['_id', 'org_id', 'email', 'meta']); $org = \Organization::find($orgs, $user->org_id); $categories = \Category::all(['org_id' => $org->_id], ['_id', 'name']); $categories = array_values($categories); $category = $categories[array_rand($categories)]; // fetch ad info foreach URL $advert_id = $m->value['advert_id']; $comm = $m->value['campaign'] ?? $org->meta; if (!isset($comm['model']) || !isset($comm['rate'])) { continue; } $urls = $m->value['urls']; foreach ($urls as $url) { $ad = \Ad::first(['org_id' => $org->_id, 'url' => $url]); if ($ad) { continue; } // already crawled URL may be due to failed cron earlier $data = Utils::fetchCampaign($url); $image = Utils::downloadImage($data['image']); if (!$image) { $image = ''; } $ad = new \Ad(['user_id' => $advert_id, 'org_id' => $org->_id, 'title' => $data['title'], 'description' => $data['description'], 'url' => $url, 'image' => $image, 'category' => [$category->_id], 'type' => 'article', 'live' => false, 'device' => ['ALL']]); if ($ad->validate()) { $ad->save(); $rev = $comm['revenue'] ?? 1.25 * (double) $comm['rate']; $commission = new \Commission(['ad_id' => $ad->_id, 'model' => $comm['model'], 'rate' => $comm['rate'], 'revenue' => round($rev, 6), 'coverage' => ['ALL']]); $commission->save(); } else { var_dump($ad->getErrors()); } } $msg = 'Campaigns imported for the user: ' . $user->email; $this->log($msg); $m->delete(); } }