protected function findModel($id) { if (($model = Promotion::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } }
public function save() { if (!$this->validate()) { return false; } $db = \Yii::$app->db; $transaction = $db->beginTransaction(); try { $promotion = new Promotion(); $promotion->user_id = \Yii::$app->user->getId(); $promotion->url = $this->url; $promotion->page_id = VKApi::getGroupIdByUrl($this->url); $promotion->status = Promotion::NOT_MODERATED; $promotion->save(); if ($this->hasLikeQuery()) { $likeTask = new Task(); $likeTask->service_id = Service::LIKE_VK; $likeTask->promotion_id = $promotion->id; $likeTask->task = json_encode($this->getLikeQuery()); $likeTask->save(); } if ($this->hasRepostQuery()) { $likeTask = new Task(); $likeTask->service_id = Service::REPOST_VK; $likeTask->promotion_id = $promotion->id; $likeTask->task = json_encode($this->getRepostQuery()); $likeTask->save(); } if ($this->hasCommentQuery()) { $likeTask = new Task(); $likeTask->service_id = Service::COMMENT_VK; $likeTask->promotion_id = $promotion->id; $likeTask->task = json_encode($this->getCommentQuery()); $likeTask->save(); } $transaction->commit(); } catch (Exception $e) { $transaction->rollBack(); return false; } return true; }
/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Promotion::find()->where(['status' => [Promotion::NOT_MODERATED]]); $dataProvider = new ActiveDataProvider(['query' => $query, 'sort' => ['defaultOrder' => ['id' => SORT_DESC]], 'pagination' => ['pageSize' => 20]]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } $query->andFilterWhere(['id' => $this->id, 'user_id' => $this->user_id, 'page_id' => $this->page_id, 'status' => $this->status]); $query->andFilterWhere(['like', 'url', $this->url]); return $dataProvider; }
public function actionGo() { $groups = Promotion::findAll(['status' => Promotion::MODERATED]); foreach ($groups as $group) { $wall = VKApi::getWallPosts($group->page_id); if ($wall) { $parsingPeriod = mktime(strftime('-1 hour', time())); foreach ($wall as $post) { //если пост подходит по времени if ($post['date'] > $parsingPeriod) { //формирум урл поста https://vk.com/feed?w=wall-57424472_71791 $dbPost = new Post(); $dbPost->post_id = $post['id']; $dbPost->promotion_id = $group->page_id; $dbPost->save(); $postUrl = 'https://vk.com/feed?w=wall' . $group->page_id . '_' . $post['id']; //получаем таски $tasks = Task::findAll(['promotion_id' => $group->id]); foreach ($tasks as $task) { $taskArr = json_decode($task->task); //дописываем в урл и цену лайков $taskArr['task']['url'] = $postUrl; $taskArr['task']['cost'] = $task->service->minimum_likes_per_task; //получаем цену таска $pricePerOne = $task->service->price_per_one_task; $priceAll = $pricePerOne * $taskArr['task']['members_count']; //списываем деньги с пользователя к которому он относится $user = $group->user; if ($user->money - $priceAll >= 0) { $user->money -= $priceAll; $user->save(); //если хватило то отсылаем таск $this->setTask($taskArr); } } } } } usleep(335000); } }
/** * @return \yii\db\ActiveQuery */ public function getPromotion() { return $this->hasOne(Promotion::className(), ['id' => 'promotion_id']); }
$this->title = 'Orders'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="order-index"> <h1><?php echo Html::encode($this->title); ?> </h1> <?php // echo $this->render('_search', ['model' => $searchModel]); ?> <?php echo GridView::widget(['dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [['attribute' => 'status', 'format' => 'text', 'filter' => \backend\modules\task\models\db\Order::getStatuses(), 'value' => function ($model) { return \common\models\db\Promotion::getStatuses()[$model->status]; }], ['attribute' => 'url', 'format' => 'raw', 'value' => function ($model) { return '<a href="' . $model->url . '" target=_blank>' . $model->url . '</a>'; }], ['class' => \yii\grid\DataColumn::className(), 'header' => 'Действия', 'format' => 'html', 'value' => function ($model, $index, $widget) { $apply = Html::a("<span class='glyphicon glyphicon-plus'></span>", Yii::$app->urlManager->createUrl(['autopromotion/order/apply', 'id' => $model->id]), ['class' => 'btn btn-default', 'title' => 'Принять']); $rejected = Html::a("<span class='glyphicon glyphicon-minus'></span>", Yii::$app->urlManager->createUrl(['autopromotion/ajax/rejected', 'id' => $model->id]), ['class' => 'btn btn-default view-rejected-modal', 'title' => 'Отклонить']); $buttons = ''; if ($model->status == \common\models\db\Promotion::NOT_MODERATED) { $buttons = $apply . $rejected; } return $buttons; }]]]); ?> <div id="modal-window-rejected" class="well modal-window-rejected"> <div class="content"> <a class="close-modal-rejected btn btn-default pull-right" href="#">x</a>
public function actionViewAll() { $userId = \Yii::$app->user->getId(); $provider = new ActiveDataProvider(['query' => Promotion::find()->where(['user_id' => $userId]), 'sort' => ['defaultOrder' => ['id' => SORT_DESC]], 'pagination' => ['pageSize' => 20]]); return $this->render('index', ['provider' => $provider]); }