Commit 50ed5626f27742c7a9e749a8674d21004bd82c1e

Authored by Yarik
1 parent 32ed90fd

test

common/models/Project.php
@@ -31,6 +31,7 @@ @@ -31,6 +31,7 @@
31 * @property ProjectSpecialization[] $projectSpecializations 31 * @property ProjectSpecialization[] $projectSpecializations
32 * @property Specialization[] $specializations 32 * @property Specialization[] $specializations
33 * @property Currency $budgetCurrency 33 * @property Currency $budgetCurrency
  34 + * @property Project $parent
34 */ 35 */
35 class Project extends \yii\db\ActiveRecord 36 class Project extends \yii\db\ActiveRecord
36 { 37 {
frontend/controllers/TenderController.php
1 <?php 1 <?php
2 -namespace frontend\controllers; 2 + namespace frontend\controllers;
3 3
4 -use common\models\Project;  
5 -use common\modules\comment\models\CommentProject;  
6 -use Yii;  
7 -use common\models\LoginForm;  
8 -use frontend\models\PasswordResetRequestForm;  
9 -use frontend\models\ResetPasswordForm;  
10 -use frontend\models\SignupForm;  
11 -use frontend\models\ContactForm;  
12 -use frontend\models\Options;  
13 -use frontend\models\OptionValues;  
14 -use yii\base\InvalidParamException;  
15 -use yii\web\BadRequestHttpException;  
16 -use yii\web\Controller;  
17 -use yii\filters\VerbFilter;  
18 -use yii\filters\AccessControl;  
19 -use frontend\models\OptionsToValues;  
20 -use yii\validators\EmailValidator;  
21 -use common\models\User;  
22 -use yii\helpers\VarDumper;  
23 -use common\models\Page;  
24 -use frontend\models\Option;  
25 -use common\models\Social; 4 + use common\models\Chat;
  5 + use common\models\Message;
  6 + use common\models\Project;
  7 + use common\modules\comment\models\CommentProject;
  8 + use Yii;
  9 + use common\models\LoginForm;
  10 + use frontend\models\PasswordResetRequestForm;
  11 + use frontend\models\ResetPasswordForm;
  12 + use frontend\models\SignupForm;
  13 + use frontend\models\ContactForm;
  14 + use frontend\models\Options;
  15 + use frontend\models\OptionValues;
  16 + use yii\base\InvalidParamException;
  17 + use yii\helpers\Html;
  18 + use yii\web\BadRequestHttpException;
  19 + use yii\web\Controller;
  20 + use yii\filters\VerbFilter;
  21 + use yii\filters\AccessControl;
  22 + use frontend\models\OptionsToValues;
  23 + use yii\validators\EmailValidator;
  24 + use common\models\User;
  25 + use yii\helpers\VarDumper;
  26 + use common\models\Page;
  27 + use frontend\models\Option;
  28 + use common\models\Social;
26 29
27 -  
28 -/**  
29 - * Site controller  
30 - */  
31 -class TenderController extends Controller  
32 -{  
33 -  
34 - public $enableCsrfValidation = false;  
35 - /**  
36 - * @inheritdoc  
37 - */  
38 - public function actions()  
39 - {  
40 - return [  
41 - 'error' => [  
42 - 'class' => 'yii\web\ErrorAction',  
43 - ],  
44 - 'captcha' => [  
45 - 'class' => 'yii\captcha\CaptchaAction',  
46 - 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,  
47 - ],  
48 - 'verbs' => [  
49 - 'class' => \yii\filters\VerbFilter::className(),  
50 - 'actions' => [  
51 - 'change-state' => ['post'],  
52 - ],  
53 - ],  
54 - 'access' => [  
55 - 'class' => AccessControl::className(),  
56 - 'rules' => [  
57 - [  
58 - 'actions' => ['change-state'],  
59 - 'allow' => true,  
60 - 'roles' => [ '@' ],  
61 - ],  
62 - ],  
63 - ],  
64 - ];  
65 - }  
66 /** 30 /**
67 - * Displays homepage.  
68 - *  
69 - * @return mixed 31 + * Site controller
70 */ 32 */
71 - public function actionIndex()  
72 - {  
73 - return $this->redirect(['search/project']);  
74 - }  
75 -  
76 - public function actionView($tender_id) 33 + class TenderController extends Controller
77 { 34 {
78 - $model = Project::findOne($tender_id);  
79 35
80 - return $this->render('view',[  
81 - 'model' => $model  
82 - ]);  
83 - } 36 + public $enableCsrfValidation = false;
84 37
85 - public function actionChangeState()  
86 - {  
87 - /**  
88 - * @var User $user  
89 - */  
90 - $response = \Yii::$app->response;  
91 - $response->format = $response::FORMAT_JSON;  
92 - $user = \Yii::$app->user->identity;  
93 - $project_id = \Yii::$app->request->post('project_id');  
94 - $comment_id = \Yii::$app->request->post('comment_id');  
95 - $state = \Yii::$app->request->post('state');  
96 - if(empty($project_id) || empty($comment_id) || empty($state)) {  
97 - return ['error' => 'project_id, comment_id, state ะดะพะปะถะฝั‹ ะฑั‹ั‚ัŒ ะพั‚ะฟั€ะฐะฒะปะตะฝั‹ ะฒ ะทะฐะฟั€ะพัะต'];  
98 - }  
99 /** 38 /**
100 - * @var Project $project 39 + * @inheritdoc
101 */ 40 */
102 - $project = Project::findOne($project_id);  
103 - if(empty($project)) {  
104 - return ['error' => 'ะŸั€ะพะตะบั‚ ะฝะต ะฝะฐะนะดะตะฝ'];  
105 - } elseif($project->user_id != $user->id) {  
106 - return ['error' => 'ะ’ั‹ ะผะพะถะตั‚ะต ะผะตะฝัั‚ัŒ ัั‚ะฐั‚ัƒั ั‚ะพะปัŒะบะพ ัะพะฑัั‚ะฒะตะฝะฝั‹ั… ะฟั€ะพะตะบั‚ะพะฒ']; 41 + public function actions()
  42 + {
  43 + return [
  44 + 'error' => [
  45 + 'class' => 'yii\web\ErrorAction',
  46 + ],
  47 + 'captcha' => [
  48 + 'class' => 'yii\captcha\CaptchaAction',
  49 + 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : NULL,
  50 + ],
  51 + 'verbs' => [
  52 + 'class' => \yii\filters\VerbFilter::className(),
  53 + 'actions' => [
  54 + 'change-state' => [ 'post' ],
  55 + ],
  56 + ],
  57 + 'access' => [
  58 + 'class' => AccessControl::className(),
  59 + 'rules' => [
  60 + [
  61 + 'actions' => [ 'change-state' ],
  62 + 'allow' => true,
  63 + 'roles' => [ '@' ],
  64 + ],
  65 + ],
  66 + ],
  67 + ];
107 } 68 }
  69 +
108 /** 70 /**
109 - * @var CommentProject $comment 71 + * Displays homepage.
  72 + * @return mixed
110 */ 73 */
111 - $comment = CommentProject::find()->where(['comment_id' => $comment_id, 'model' => $project->className(), 'model_id' => $project->project_id])->one();  
112 - if(empty($comment)) {  
113 - return ['error' => 'ะ”ะฐะฝะฝะพะณะพ ะฟั€ะตะดะปะพะถะตะฝะธั ะฝะต ััƒั‰ะตัั‚ะฒัƒะตั‚']; 74 + public function actionIndex()
  75 + {
  76 + return $this->redirect([ 'search/project' ]);
114 } 77 }
115 - if($comment->user_id == \Yii::$app->user->getId()) {  
116 - $comment->scenario = $comment::SCENARIO_OWNER;  
117 - } else {  
118 - $comment->scenario = $comment::SCENARIO_STATE;  
119 - }  
120 - if($comment->state == $comment::STATE_TRASH && $comment->scenario == $comment::SCENARIO_STATE) {  
121 - return ['error' => 'ะ˜ัะฟะพะปะฝะธั‚ะตะปัŒ ะพั‚ะผะตะฝะธะป ะดะฐะฝะฝะพะต ะฟั€ะตะดะปะพะถะตะฝะธะต']; 78 +
  79 + public function actionView($tender_id)
  80 + {
  81 + $model = Project::findOne($tender_id);
  82 +
  83 + return $this->render('view', [
  84 + 'model' => $model,
  85 + ]);
122 } 86 }
123 - if($comment->state == $comment::STATE_DENY && $comment->scenario == $comment::SCENARIO_OWNER) {  
124 - return ['error' => 'ะ—ะฐะบะฐะทั‡ะธะบ ะพั‚ะผะตะฝะธะป ะ’ะฐัˆะต ะฟั€ะตะดะปะพะถะตะฝะธะต']; 87 +
  88 + public function actionChangeState()
  89 + {
  90 + /**
  91 + * @var User $user
  92 + */
  93 + $response = \Yii::$app->response;
  94 + $response->format = $response::FORMAT_JSON;
  95 + $user = \Yii::$app->user->identity;
  96 + $project_id = \Yii::$app->request->post('project_id');
  97 + $comment_id = \Yii::$app->request->post('comment_id');
  98 + $state = \Yii::$app->request->post('state');
  99 + if(empty( $project_id ) || empty( $comment_id ) || empty( $state )) {
  100 + return [ 'error' => 'project_id, comment_id, state ะดะพะปะถะฝั‹ ะฑั‹ั‚ัŒ ะพั‚ะฟั€ะฐะฒะปะตะฝั‹ ะฒ ะทะฐะฟั€ะพัะต' ];
  101 + }
  102 + /**
  103 + * @var Project $project
  104 + */
  105 + $project = Project::findOne($project_id);
  106 + if(empty( $project )) {
  107 + return [ 'error' => 'ะŸั€ะพะตะบั‚ ะฝะต ะฝะฐะนะดะตะฝ' ];
  108 + } elseif($project->user_id != $user->id) {
  109 + return [ 'error' => 'ะ’ั‹ ะผะพะถะตั‚ะต ะผะตะฝัั‚ัŒ ัั‚ะฐั‚ัƒั ั‚ะพะปัŒะบะพ ัะพะฑัั‚ะฒะตะฝะฝั‹ั… ะฟั€ะพะตะบั‚ะพะฒ' ];
  110 + }
  111 + /**
  112 + * @var CommentProject $comment
  113 + */
  114 + $comment = CommentProject::find()
  115 + ->where([
  116 + 'comment_id' => $comment_id,
  117 + 'model' => $project->className(),
  118 + 'model_id' => $project->project_id,
  119 + ])
  120 + ->one();
  121 + if(empty( $comment )) {
  122 + return [ 'error' => 'ะ”ะฐะฝะฝะพะณะพ ะฟั€ะตะดะปะพะถะตะฝะธั ะฝะต ััƒั‰ะตัั‚ะฒัƒะตั‚' ];
  123 + }
  124 + if($comment->user_id == \Yii::$app->user->getId()) {
  125 + $comment->scenario = $comment::SCENARIO_OWNER;
  126 + } else {
  127 + $comment->scenario = $comment::SCENARIO_STATE;
  128 + }
  129 + if($comment->state == $comment::STATE_TRASH && $comment->scenario == $comment::SCENARIO_STATE) {
  130 + return [ 'error' => 'ะ˜ัะฟะพะปะฝะธั‚ะตะปัŒ ะพั‚ะผะตะฝะธะป ะดะฐะฝะฝะพะต ะฟั€ะตะดะปะพะถะตะฝะธะต' ];
  131 + }
  132 + if($comment->state == $comment::STATE_DENY && $comment->scenario == $comment::SCENARIO_OWNER) {
  133 + return [ 'error' => 'ะ—ะฐะบะฐะทั‡ะธะบ ะพั‚ะผะตะฝะธะป ะ’ะฐัˆะต ะฟั€ะตะดะปะพะถะตะฝะธะต' ];
  134 + }
  135 +
  136 + $comment->state = $state;
  137 + if(!$comment->validate()) {
  138 + return [ 'error' => 'ะะตะดะพะฟัƒัั‚ะธะผะพะต ะทะฝะฐั‡ะตะฝะธะต state' ];
  139 + }
  140 + if($comment->changeState()) {
  141 + return [ 'message' => 'ะะฒั‚ะพั€ ะพะฟะพะฒะตั‰ะตะฝ ะพ ะฒะฐัˆะตะผ ั€ะตัˆะตะฝะธะธ' ];
  142 + } else {
  143 + return [ 'error' => 'ะžัˆะธะฑะบะฐ ะพะฑะฝะพะฒะปะตะฝะธั.' ];
  144 + }
125 } 145 }
126 146
127 - $comment->state = $state;  
128 - if(!$comment->validate()) {  
129 - return ['error' => 'ะะตะดะพะฟัƒัั‚ะธะผะพะต ะทะฝะฐั‡ะตะฝะธะต state']; 147 + public function actionOfferForm()
  148 + {
  149 + /**
  150 + * @var User $user
  151 + */
  152 + $response = \Yii::$app->response;
  153 + $request = \Yii::$app->request;
  154 + $response->format = $response::FORMAT_JSON;
  155 + $user = \Yii::$app->user->identity;
  156 + $performer_id = $request->post('performer_id');
  157 + if(empty( $performer_id )) {
  158 + return [ 'error' => 'performer_id ะดะพะปะถะตะฝ ะฑั‹ั‚ัŒ ะทะฐะดะฐะฝ' ];
  159 + }
  160 + $projects = $user->getProjects()
  161 + ->with('parent')
  162 + ->all();
  163 + if(empty($projects)) {
  164 + return ['error' => 'ะฃ ะ’ะฐั ะตั‰ะต ะฝะตั‚ัƒ ะฟั€ะพะตะบั‚ะพะฒ'];
  165 + }
  166 + return [
  167 + 'message' => $this->renderAjax('forms-modal-offer', [
  168 + 'performer_id' => $performer_id,
  169 + 'projects' => $projects,
  170 + ]),
  171 + ];
130 } 172 }
131 - if($comment->changeState()) {  
132 - return ['message' => 'ะะฒั‚ะพั€ ะพะฟะพะฒะตั‰ะตะฝ ะพ ะฒะฐัˆะตะผ ั€ะตัˆะตะฝะธะธ'];  
133 - } else {  
134 - return ['error' => 'ะžัˆะธะฑะบะฐ ะพะฑะฝะพะฒะปะตะฝะธั.']; 173 +
  174 + public function actionOffer()
  175 + {
  176 + /**
  177 + * @var User $user
  178 + * @var Project $project
  179 + * @var User $performer
  180 + * @var Chat $chat
  181 + */
  182 + $response = \Yii::$app->response;
  183 + $request = \Yii::$app->request;
  184 + $response->format = $response::FORMAT_JSON;
  185 + $user = \Yii::$app->user->identity;
  186 + $project_id = $request->post('project_id');
  187 + $performer_id = $request->post('performer_id');
  188 + if(empty( $project_id ) || empty( $performer_id )) {
  189 + return [ 'error' => 'project_id ะธ performer_id ะดะพะปะถะฝั‹ ะฑั‹ั‚ัŒ ะทะฐะดะฐะฝั‹' ];
  190 + }
  191 + $performer = User::find()
  192 + ->where([ 'id' => $performer_id ])
  193 + ->one();
  194 + if(empty( $performer )) {
  195 + return [ 'error' => 'ะ˜ัะฟะพะปะฝะธั‚ะตะปัŒ ะฝะต ะฝะฐะนะดะตะฝ' ];
  196 + }
  197 + $project = Project::find()
  198 + ->where([ 'project_id' => $project_id ])
  199 + ->one();
  200 + if(empty( $project )) {
  201 + return [ 'error' => 'ะŸั€ะพะตะบั‚ ะฝะต ะฝะฐะนะดะตะฝ' ];
  202 + } elseif($project->user_id != $user->id) {
  203 + return [ 'error' => 'ะ’ั‹ ะผะพะถะตั‚ะต ะฟั€ะตะดะปะฐะณะฐั‚ัŒ ั‚ะพะปัŒะบะพ ัะพะฑัั‚ะฒะตะฝะฝั‹ะต ะฟั€ะพะตะบั‚ั‹' ];
  204 + }
  205 + $chat = $user->getChat($performer->id)
  206 + ->one();
  207 + if(empty( $chat )) {
  208 + $chat = new Chat([
  209 + 'form_user' => $user->id,
  210 + 'to_user' => $performer->id,
  211 + ]);
  212 + if(!$chat->save()) {
  213 + return [ 'error' => 'ะะต ัƒะดะฐะปะพััŒ ัะพะทะดะฐั‚ัŒ ั‡ะฐั‚' ];
  214 + }
  215 + }
  216 + $message = new Message([
  217 + 'chat_id' => $chat->chat_id,
  218 + 'user_id' => $user->id,
  219 + 'status' => 1,
  220 + ]);
  221 + $text = "<p>ะ—ะดั€ะฐะฒัั‚ะฒัƒะนั‚ะต, {$user->name}!</p><p>ะŸั€ะตะดะปะฐะณะฐัŽ ะ’ะฐะผ ะฟั€ะธะฝัั‚ัŒ ัƒั‡ะฐัั‚ะธะต ะฒ " . Html::a('ะขะตะฝะดะตั€ะต', [
  222 + 'tender/view',
  223 + 'tender_id' => $project->project_id,
  224 + ]) . "</p>";
  225 + $message->text = $text;
  226 + if(!$message->save()) {
  227 + return [ 'error' => 'ะะต ัƒะดะฐะปะพััŒ ะพั‚ะฟั€ะฐะฒะธั‚ัŒ ะฟั€ะตะดะปะพะถะตะฝะธะต' ];
  228 + } else {
  229 + return [ 'message' => 'ะŸั€ะตะดะปะพะถะตะฝะธะต ัƒัะฟะตัˆะฝะพ ะพั‚ะฟั€ะฐะฒะปะตะฝะพ' ];
  230 + }
135 } 231 }
136 - }  
137 232
138 -} 233 + }
frontend/views/layouts/company.php
@@ -153,7 +153,7 @@ @@ -153,7 +153,7 @@
153 </div> 153 </div>
154 </div> 154 </div>
155 <div class="performance-vacancy-sidebar-comm style"><?= count($this->params[ 'company' ]->comments) ?> ะพั‚ะทั‹ะฒะพะฒ</div> 155 <div class="performance-vacancy-sidebar-comm style"><?= count($this->params[ 'company' ]->comments) ?> ะพั‚ะทั‹ะฒะพะฒ</div>
156 - <a href="#" class="performance-vacancy-sidebar-write style">ะฝะฐะฟะธัะฐั‚ัŒ ะพั‚ะทั‹ะฒ</a> 156 + <?= Html::a('ะฝะฐะฟะธัะฐั‚ัŒ ะพั‚ะทั‹ะฒ', ['company/review', 'company_id' => $this->params['company']->id], ['class' => 'performance-vacancy-sidebar-write style']) ?>
157 </div> 157 </div>
158 <div class="performer-vacancy-sidebar-img style"><?= Html::img($this->params[ 'company' ]->userInfo->image); ?></div> 158 <div class="performer-vacancy-sidebar-img style"><?= Html::img($this->params[ 'company' ]->userInfo->image); ?></div>
159 <div class="performer-vacancy-sidebar-all style"> 159 <div class="performer-vacancy-sidebar-all style">
frontend/views/layouts/performer.php
@@ -20,8 +20,11 @@ @@ -20,8 +20,11 @@
20 <div class="box-wr"> 20 <div class="box-wr">
21 <div class="box-all"> 21 <div class="box-all">
22 <div class="blog-buttons-wr style"> 22 <div class="blog-buttons-wr style">
23 - <a class="blog-buttons-offer" href="#">ะŸั€ะตะดะปะพะถะธั‚ัŒ<br>ะฟั€ะพะตะบั‚</a>  
24 - <?= Html::a('ะŸั€ะตะดะปะพะถะธั‚ัŒ ะฟั€ะพะตะบั‚', Url::toRoute([ 23 + <?= Html::a('ะŸั€ะตะดะปะพะถะธั‚ัŒ ะฟั€ะพะตะบั‚', [ '#' ], [
  24 + 'class' => 'blog-buttons-offer',
  25 + 'data-performer-id' => $this->params[ 'user' ]->id,
  26 + ]) ?>
  27 + <?= Html::a('ะะฐะฟะธัะฐั‚ัŒ ัะพะพะฑั‰ะตะฝะธะต', Url::toRoute([
25 'chat/message', 28 'chat/message',
26 'user_id' => $this->params[ 'user' ]->id, 29 'user_id' => $this->params[ 'user' ]->id,
27 ]), [ 'class' => 'blog-buttons-write' ]) ?> 30 ]), [ 'class' => 'blog-buttons-write' ]) ?>
@@ -132,7 +135,10 @@ @@ -132,7 +135,10 @@
132 </div> 135 </div>
133 </div> 136 </div>
134 <div class="performance-vacancy-sidebar-comm style"><?= count($this->params[ 'user' ]->comments) ?> ะพั‚ะทั‹ะฒะพะฒ</div> 137 <div class="performance-vacancy-sidebar-comm style"><?= count($this->params[ 'user' ]->comments) ?> ะพั‚ะทั‹ะฒะพะฒ</div>
135 - <a href="#" class="performance-vacancy-sidebar-write style">ะฝะฐะฟะธัะฐั‚ัŒ ะพั‚ะทั‹ะฒ</a> 138 + <?= Html::a('ะฝะฐะฟะธัะฐั‚ัŒ ะพั‚ะทั‹ะฒ', [
  139 + 'performer/review',
  140 + 'performer_id' => $this->params[ 'user' ]->id,
  141 + ], [ 'class' => 'performance-vacancy-sidebar-write style' ]) ?>
136 </div> 142 </div>
137 <div class="performer-vacancy-sidebar-img style"> 143 <div class="performer-vacancy-sidebar-img style">
138 <?= Html::img($this->params[ 'user' ]->userInfo->image); ?> 144 <?= Html::img($this->params[ 'user' ]->userInfo->image); ?>
frontend/views/tender/forms-modal-offer.php 0 โ†’ 100644
  1 +<?php
  2 + /**
  3 + * @var int $performer_id
  4 + * @var User $user
  5 + * @var Project[] $projects
  6 + */
  7 + use common\models\Project;
  8 + use common\models\User;
  9 +
  10 +?>
  11 +<script>
  12 + $(document).ready(
  13 + function()
  14 + {
  15 + jQuery('.off_list').jScrollPane(
  16 + {
  17 + showArrows : true, autoReinitialise : true, autoReinitialiseDelay : 200,
  18 + scrollbarWidth : 25, arrowSize : 25
  19 + }
  20 + );
  21 +
  22 + $('.off_list').hide();
  23 + $('.main_item, .arrow.up').click(
  24 + function()
  25 + {
  26 + $('.off_list').toggle()
  27 + }
  28 + );
  29 +
  30 + var listOffer = $('.list-form-offer li');
  31 + var listOfferLength = listOffer.length;
  32 +
  33 + $(listOffer[listOfferLength - 1]).addClass('act-offer-li');
  34 + function activeOf()
  35 + {
  36 + var title1 = $('.act-offer-li').find('.title1').text();
  37 + var title2 = $('.act-offer-li').find('.title2').text();
  38 + $('#off_value').val($('.act-offer-li').data('project-id'));
  39 +
  40 + $('.main_item .pr_title').empty().text(title1)
  41 + $('.main_item span').empty().text(title2)
  42 + }
  43 +
  44 + activeOf();
  45 +
  46 + listOffer.click(
  47 + function()
  48 + {
  49 + var thisOfInd = $(this).index();
  50 + var actOfInd = $('.act-offer-li').index();
  51 + listOffer.removeClass('act-offer-li');
  52 + $(this).addClass('act-offer-li');
  53 +
  54 + if(thisOfInd != actOfInd)
  55 + {
  56 + activeOf();
  57 + $('.off_list').hide();
  58 + }
  59 + }
  60 + );
  61 + $(document).on('click', '#off_submit', function(e) {
  62 + e.preventDefault();
  63 + var project_id = $('#off_value').val();
  64 + var performer_id = $('#off_value').data('performer-id');
  65 + if(project_id && performer_id) {
  66 + $.post(
  67 + '/tender/offer',
  68 + {
  69 + project_id: project_id,
  70 + performer_id: performer_id
  71 + },
  72 + function(data) {
  73 + if(data.error) {
  74 + $('#overlay, .forms-modal-hide').remove();
  75 + alert(data.error);
  76 + } else {
  77 + $('#overlay, .forms-modal-hide').remove();
  78 + alert(data.message);
  79 + }
  80 + }
  81 + ).fail(
  82 + function() {
  83 + $('#overlay, .forms-modal-hide').remove();
  84 + alert('ะะตะธะทะฒะตัั‚ะฝะฐั ะพัˆะธะฑะบะฐ');
  85 + }
  86 + )
  87 + $(document).off('click', '#off_submit');
  88 + return false;
  89 + }
  90 + });
  91 + }
  92 + )
  93 +</script>
  94 +
  95 +<div id="modal_form_offer">
  96 + <div class="closed-form"></div>
  97 + <div class="form-resume-wr offer">
  98 + <div class="form-resume-sub style">ะŸั€ะตะดะปะพะถะธั‚ัŒ ะฟั€ะพะตะบั‚</div>
  99 + <form action="" class="offer-project">
  100 + <input type="hidden" id="off_value" data-performer-id="<?=$performer_id?>">
  101 + <label>ะ’ั‹ะฑั€ะฐั‚ัŒ ะฟั€ะพะตะบั‚</label>
  102 + <div class="list_item title">
  103 + <div class="main_item">
  104 + <div class="pr_title"></div>
  105 + <span></span>
  106 + </div>
  107 + <div class="arrow up"></div>
  108 + <div class="off_list">
  109 + <ul class="content list-form-offer">
  110 + <?php
  111 + foreach($projects as $project) {
  112 + ?>
  113 + <li data-project-id="<?= $project->project_id ?>">
  114 + <div class="title1"><?= $project->name ?></div>
  115 + <?php
  116 + if(!empty( $project->parent )) {
  117 + ?>
  118 + <div class="title2">ะŸะพะดั€ัะด: <?= $project->parent->name ?></div>
  119 + <?php
  120 + }
  121 + ?>
  122 + </li>
  123 + <?php
  124 + }
  125 + ?>
  126 + </ul>
  127 + </div>
  128 + </div>
  129 +
  130 +
  131 + <input id="off_submit" type="submit" value="ะŸั€ะตะดะปะพะถะธั‚ัŒ">
  132 + </form>
  133 + <div class="res_form_line"></div>
  134 + </div>
  135 +</div>
frontend/web/js/forms.js
@@ -69,38 +69,6 @@ $(document).ready( @@ -69,38 +69,6 @@ $(document).ready(
69 ) 69 )
70 } 70 }
71 71
72 - function addToOffer()  
73 - {  
74 - $.post(  
75 - "/site/forms-modal-offer", function(data)  
76 - {  
77 - $('.forms-modal-hide').append(data)  
78 - }  
79 - )  
80 - .fail(  
81 - function()  
82 - {  
83 - $('#overlay, .forms-modal-hide').remove();  
84 - alert(txtErrorModal)  
85 - }  
86 - )  
87 - .done(  
88 - function()  
89 - {  
90 - var newMarg = $(window).scrollTop();  
91 - $('#overlay').fadeIn(  
92 - 400, function()  
93 - {  
94 - $('body').css({overflowY : 'hidden'})  
95 - $('.forms-modal-hide>div')  
96 - .css({display : 'block', marginTop : -230 + newMarg})  
97 - .animate({opacity : 1, top : '50%'}, 200);  
98 - }  
99 - );  
100 - }  
101 - )  
102 - }  
103 -  
104 function addContacts() 72 function addContacts()
105 { 73 {
106 $.post( 74 $.post(
@@ -483,12 +451,58 @@ $(document).ready( @@ -483,12 +451,58 @@ $(document).ready(
483 451
484 452
485 //offer 453 //offer
  454 + function addToOffer(performer_id)
  455 + {
  456 + $.post(
  457 + "/tender/offer-form",
  458 + {
  459 + performer_id: performer_id
  460 + } ,
  461 + function(data)
  462 + {
  463 + if(data.error) {
  464 + $('#overlay, .forms-modal-hide').remove();
  465 + alert(data.error);
  466 + } else {
  467 + $('.forms-modal-hide').append(data.message);
  468 + }
  469 + }
  470 + )
  471 + .fail(
  472 + function()
  473 + {
  474 + $('#overlay, .forms-modal-hide').remove();
  475 + alert(txtErrorModal)
  476 + }
  477 + )
  478 + .done(
  479 + function()
  480 + {
  481 + var newMarg = $(window).scrollTop();
  482 + $('#overlay').fadeIn(
  483 + 400, function()
  484 + {
  485 + $('body').css({overflowY : 'hidden'})
  486 + $('.forms-modal-hide>div')
  487 + .css({display : 'block', marginTop : -230 + newMarg})
  488 + .animate({opacity : 1, top : '50%'}, 200);
  489 + }
  490 + );
  491 + }
  492 + )
  493 + }
486 $('a.get-project, .blog-buttons-offer').click( 494 $('a.get-project, .blog-buttons-offer').click(
487 function(e) 495 function(e)
488 { 496 {
489 - e.preventDefault()  
490 - addRemoveBlocks()  
491 - addToOffer() 497 + e.preventDefault();
  498 + var performer_id;
  499 + performer_id = $(this).data('performer-id');
  500 + if(!performer_id) {
  501 + return false;
  502 + } else {
  503 + addRemoveBlocks();
  504 + addToOffer(performer_id);
  505 + }
492 } 506 }
493 ) 507 )
494 508