97fb6489
Yarik
test
|
1
|
<?php
|
50ed5626
Yarik
test
|
2
|
namespace frontend\controllers;
|
97fb6489
Yarik
test
|
3
|
|
50ed5626
Yarik
test
|
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
use common\models\Chat;
use common\models\Message;
use common\models\Project;
use common\modules\comment\models\CommentProject;
use Yii;
use common\models\LoginForm;
use frontend\models\PasswordResetRequestForm;
use frontend\models\ResetPasswordForm;
use frontend\models\SignupForm;
use frontend\models\ContactForm;
use frontend\models\Options;
use frontend\models\OptionValues;
use yii\base\InvalidParamException;
use yii\helpers\Html;
use yii\web\BadRequestHttpException;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use frontend\models\OptionsToValues;
use yii\validators\EmailValidator;
use common\models\User;
use yii\helpers\VarDumper;
use common\models\Page;
use frontend\models\Option;
use common\models\Social;
|
71ad29c4
Yarik
test
|
29
|
use yii\web\NotFoundHttpException;
|
97fb6489
Yarik
test
|
30
|
|
97fb6489
Yarik
test
|
31
|
/**
|
50ed5626
Yarik
test
|
32
|
* Site controller
|
97fb6489
Yarik
test
|
33
|
*/
|
50ed5626
Yarik
test
|
34
|
class TenderController extends Controller
|
97fb6489
Yarik
test
|
35
|
{
|
7e6d3f52
Administrator
24.02.16
|
36
|
|
50ed5626
Yarik
test
|
37
|
public $enableCsrfValidation = false;
|
97fb6489
Yarik
test
|
38
|
|
38a6e1dd
Yarik
test
|
39
|
/**
|
50ed5626
Yarik
test
|
40
|
* @inheritdoc
|
38a6e1dd
Yarik
test
|
41
|
*/
|
50ed5626
Yarik
test
|
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : NULL,
],
'verbs' => [
'class' => \yii\filters\VerbFilter::className(),
'actions' => [
'change-state' => [ 'post' ],
|
ce4a4468
Yarik
test
|
56
57
|
'offer-form' => [ 'post' ],
'offer' => [ 'post' ],
|
50ed5626
Yarik
test
|
58
59
60
61
62
63
64
65
66
67
68
69
70
|
],
],
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => [ 'change-state' ],
'allow' => true,
'roles' => [ '@' ],
],
],
],
];
|
38a6e1dd
Yarik
test
|
71
|
}
|
50ed5626
Yarik
test
|
72
|
|
38a6e1dd
Yarik
test
|
73
|
/**
|
ce4a4468
Yarik
test
|
74
75
76
|
* Redirect to search page.
*
* @return string
|
38a6e1dd
Yarik
test
|
77
|
*/
|
50ed5626
Yarik
test
|
78
79
80
|
public function actionIndex()
{
return $this->redirect([ 'search/project' ]);
|
38a6e1dd
Yarik
test
|
81
|
}
|
50ed5626
Yarik
test
|
82
83
84
|
public function actionView($tender_id)
{
|
ce4a4468
Yarik
test
|
85
86
87
|
/**
* @var Project $model
*/
|
50ed5626
Yarik
test
|
88
|
$model = Project::findOne($tender_id);
|
ce4a4468
Yarik
test
|
89
90
|
if(!empty($model)) {
$model->updateCounters(['view_count' => 1]);
|
71ad29c4
Yarik
test
|
91
92
|
} else {
throw new NotFoundHttpException(Yii::t('app', 'project_not_found'));
|
ce4a4468
Yarik
test
|
93
|
}
|
50ed5626
Yarik
test
|
94
95
96
97
|
return $this->render('view', [
'model' => $model,
]);
|
38a6e1dd
Yarik
test
|
98
|
}
|
50ed5626
Yarik
test
|
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
public function actionChangeState()
{
/**
* @var User $user
*/
$response = \Yii::$app->response;
$response->format = $response::FORMAT_JSON;
$user = \Yii::$app->user->identity;
$project_id = \Yii::$app->request->post('project_id');
$comment_id = \Yii::$app->request->post('comment_id');
$state = \Yii::$app->request->post('state');
if(empty( $project_id ) || empty( $comment_id ) || empty( $state )) {
return [ 'error' => 'project_id, comment_id, state должны быть отправлены в запросе' ];
}
/**
* @var Project $project
*/
$project = Project::findOne($project_id);
if(empty( $project )) {
|
b9a54f61
Yarik
test
|
119
|
return [ 'error' => 'Заказ не найден' ];
|
50ed5626
Yarik
test
|
120
|
}
|
25bd78f8
Yarik
test
|
121
122
123
|
// elseif($project->user_id != $user->id) {
// return [ 'error' => 'Вы можете менять статус только собственных проектов' ];
// }
|
50ed5626
Yarik
test
|
124
125
126
127
128
129
130
131
132
133
134
135
136
|
/**
* @var CommentProject $comment
*/
$comment = CommentProject::find()
->where([
'comment_id' => $comment_id,
'model' => $project->className(),
'model_id' => $project->project_id,
])
->one();
if(empty( $comment )) {
return [ 'error' => 'Данного предложения не существует' ];
}
|
25bd78f8
Yarik
test
|
137
|
if($project->user_id != $user->id && $comment->user_id != $user->id) {
|
b9a54f61
Yarik
test
|
138
|
return ['error' => 'Вы можете менять статус только своих предложений, либо предложений по своим заказам'];
|
25bd78f8
Yarik
test
|
139
140
|
}
if($comment->user_id == $user->id) {
|
50ed5626
Yarik
test
|
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
$comment->scenario = $comment::SCENARIO_OWNER;
} else {
$comment->scenario = $comment::SCENARIO_STATE;
}
if($comment->state == $comment::STATE_TRASH && $comment->scenario == $comment::SCENARIO_STATE) {
return [ 'error' => 'Исполнитель отменил данное предложение' ];
}
if($comment->state == $comment::STATE_DENY && $comment->scenario == $comment::SCENARIO_OWNER) {
return [ 'error' => 'Заказчик отменил Ваше предложение' ];
}
$comment->state = $state;
if(!$comment->validate()) {
return [ 'error' => 'Недопустимое значение state' ];
}
if($comment->changeState()) {
return [ 'message' => 'Автор оповещен о вашем решении' ];
} else {
return [ 'error' => 'Ошибка обновления.' ];
}
|
32ed90fd
Yarik
test
|
161
162
|
}
|
50ed5626
Yarik
test
|
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
public function actionOfferForm()
{
/**
* @var User $user
*/
$response = \Yii::$app->response;
$request = \Yii::$app->request;
$response->format = $response::FORMAT_JSON;
$user = \Yii::$app->user->identity;
$performer_id = $request->post('performer_id');
if(empty( $performer_id )) {
return [ 'error' => 'performer_id должен быть задан' ];
}
$projects = $user->getProjects()
->with('parent')
->all();
|
ce4a4468
Yarik
test
|
179
|
if(empty( $projects )) {
|
b9a54f61
Yarik
test
|
180
|
return [ 'error' => 'У Вас еще нету заказов' ];
|
50ed5626
Yarik
test
|
181
182
183
184
185
186
187
|
}
return [
'message' => $this->renderAjax('forms-modal-offer', [
'performer_id' => $performer_id,
'projects' => $projects,
]),
];
|
38a6e1dd
Yarik
test
|
188
|
}
|
50ed5626
Yarik
test
|
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
|
public function actionOffer()
{
/**
* @var User $user
* @var Project $project
* @var User $performer
* @var Chat $chat
*/
$response = \Yii::$app->response;
$request = \Yii::$app->request;
$response->format = $response::FORMAT_JSON;
$user = \Yii::$app->user->identity;
$project_id = $request->post('project_id');
$performer_id = $request->post('performer_id');
if(empty( $project_id ) || empty( $performer_id )) {
return [ 'error' => 'project_id и performer_id должны быть заданы' ];
}
$performer = User::find()
->where([ 'id' => $performer_id ])
->one();
if(empty( $performer )) {
return [ 'error' => 'Исполнитель не найден' ];
}
$project = Project::find()
->where([ 'project_id' => $project_id ])
->one();
if(empty( $project )) {
|
b9a54f61
Yarik
test
|
217
|
return [ 'error' => 'Заказ не найден' ];
|
50ed5626
Yarik
test
|
218
|
} elseif($project->user_id != $user->id) {
|
b9a54f61
Yarik
test
|
219
|
return [ 'error' => 'Вы можете предлагать только собственные заказы' ];
|
50ed5626
Yarik
test
|
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
|
}
$chat = $user->getChat($performer->id)
->one();
if(empty( $chat )) {
$chat = new Chat([
'form_user' => $user->id,
'to_user' => $performer->id,
]);
if(!$chat->save()) {
return [ 'error' => 'Не удалось создать чат' ];
}
}
$message = new Message([
'chat_id' => $chat->chat_id,
'user_id' => $user->id,
'status' => 1,
]);
|
b9a54f61
Yarik
test
|
237
|
$text = "<p>Здравствуйте, {$performer->name}!</p><p>Предлагаю Вам принять участие в " . Html::a('заказе', [
|
50ed5626
Yarik
test
|
238
239
240
241
242
243
244
245
246
|
'tender/view',
'tender_id' => $project->project_id,
]) . "</p>";
$message->text = $text;
if(!$message->save()) {
return [ 'error' => 'Не удалось отправить предложение' ];
} else {
return [ 'message' => 'Предложение успешно отправлено' ];
}
|
38a6e1dd
Yarik
test
|
247
|
}
|
38a6e1dd
Yarik
test
|
248
|
|
50ed5626
Yarik
test
|
249
|
}
|