Commit 588209fc4e908d01ae885a6bf4127ae0d7b987a8
1 parent
47559a4b
test
Showing
14 changed files
with
949 additions
and
425 deletions
Show diff stats
backend/views/blog/articles.php
common/models/Gallery.php
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | -namespace common\models; | |
| 3 | + namespace common\models; | |
| 4 | 4 | |
| 5 | -use Yii; | |
| 6 | -use yii\behaviors\BlameableBehavior; | |
| 7 | -use yii\behaviors\TimestampBehavior; | |
| 8 | -use yii\db\Expression; | |
| 5 | + use Yii; | |
| 6 | + use yii\behaviors\BlameableBehavior; | |
| 7 | + use yii\behaviors\TimestampBehavior; | |
| 8 | + use yii\db\Expression; | |
| 9 | 9 | |
| 10 | -/** | |
| 11 | - * This is the model class for table "gallery". | |
| 12 | - * | |
| 13 | - * @property integer $gallery_id | |
| 14 | - * @property integer $user_id | |
| 15 | - * @property string $name | |
| 16 | - * @property string $date_add | |
| 17 | - * @property integer $user_add_id | |
| 18 | - * @property string $cover | |
| 19 | - * @property integer $type | |
| 20 | - * @property string $photo | |
| 21 | - */ | |
| 22 | -class Gallery extends \yii\db\ActiveRecord | |
| 23 | -{ | |
| 24 | 10 | /** |
| 25 | - * @inheritdoc | |
| 11 | + * This is the model class for table "gallery". | |
| 12 | + * @property integer $gallery_id | |
| 13 | + * @property integer $user_id | |
| 14 | + * @property string $name | |
| 15 | + * @property string $date_add | |
| 16 | + * @property integer $user_add_id | |
| 17 | + * @property string $cover | |
| 18 | + * @property integer $type | |
| 19 | + * @property string $photo | |
| 26 | 20 | */ |
| 27 | - public static function tableName() | |
| 21 | + class Gallery extends \yii\db\ActiveRecord | |
| 28 | 22 | { |
| 29 | - return 'gallery'; | |
| 30 | - } | |
| 31 | 23 | |
| 32 | - /** | |
| 33 | - * @inheritdoc | |
| 34 | - */ | |
| 35 | - public function behaviors() | |
| 36 | - { | |
| 37 | - return [ | |
| 38 | - [ | |
| 39 | - 'class' => BlameableBehavior::className(), | |
| 40 | - 'createdByAttribute' => 'user_id', | |
| 41 | - 'updatedByAttribute' => false, | |
| 42 | - ], | |
| 43 | - [ | |
| 44 | - 'class' => TimestampBehavior::className(), | |
| 45 | - 'createdAtAttribute' => 'date_add', | |
| 46 | - 'updatedAtAttribute' => false, | |
| 47 | - 'value' => new Expression('NOW()'), | |
| 48 | - ], | |
| 49 | - ]; | |
| 50 | - } | |
| 24 | + /** | |
| 25 | + * @inheritdoc | |
| 26 | + */ | |
| 27 | + public static function tableName() | |
| 28 | + { | |
| 29 | + return 'gallery'; | |
| 30 | + } | |
| 51 | 31 | |
| 52 | - /** | |
| 53 | - * @inheritdoc | |
| 54 | - */ | |
| 55 | - public function rules() | |
| 56 | - { | |
| 57 | - return [ | |
| 58 | - [['name'], 'required'], | |
| 59 | - [['type'], 'integer'], | |
| 60 | - [['photo'], 'string'], | |
| 61 | - [['name', 'cover'], 'string', 'max' => 255], | |
| 62 | - ]; | |
| 63 | - } | |
| 32 | + /** | |
| 33 | + * @inheritdoc | |
| 34 | + */ | |
| 35 | + public function behaviors() | |
| 36 | + { | |
| 37 | + return [ | |
| 38 | + [ | |
| 39 | + 'class' => BlameableBehavior::className(), | |
| 40 | + 'createdByAttribute' => 'user_id', | |
| 41 | + 'updatedByAttribute' => false, | |
| 42 | + ], | |
| 43 | + [ | |
| 44 | + 'class' => TimestampBehavior::className(), | |
| 45 | + 'createdAtAttribute' => 'date_add', | |
| 46 | + 'updatedAtAttribute' => false, | |
| 47 | + 'value' => new Expression('NOW()'), | |
| 48 | + ], | |
| 49 | + ]; | |
| 50 | + } | |
| 64 | 51 | |
| 65 | - /** | |
| 66 | - * @inheritdoc | |
| 67 | - */ | |
| 68 | - public function attributeLabels() | |
| 69 | - { | |
| 70 | - return [ | |
| 71 | - 'gallery_id' => Yii::t('app', 'Gallery ID'), | |
| 72 | - 'user_id' => Yii::t('app', 'User ID'), | |
| 73 | - 'name' => Yii::t('app', 'Название'), | |
| 74 | - 'date_add' => Yii::t('app', 'Дата добавления'), | |
| 75 | - 'user_add_id' => Yii::t('app', 'User Add ID'), | |
| 76 | - 'cover' => Yii::t('app', 'Фото главное'), | |
| 77 | - 'type' => Yii::t('app', 'Вид галереи'), | |
| 78 | - 'photo' => Yii::t('app', 'Фото галереи'), | |
| 79 | - ]; | |
| 52 | + /** | |
| 53 | + * @inheritdoc | |
| 54 | + */ | |
| 55 | + public function rules() | |
| 56 | + { | |
| 57 | + return [ | |
| 58 | + [ | |
| 59 | + [ 'name' ], | |
| 60 | + 'required', | |
| 61 | + ], | |
| 62 | + [ | |
| 63 | + [ 'type' ], | |
| 64 | + 'integer', | |
| 65 | + ], | |
| 66 | + [ | |
| 67 | + [ 'photo' ], | |
| 68 | + 'string', | |
| 69 | + ], | |
| 70 | + [ | |
| 71 | + [ | |
| 72 | + 'name', | |
| 73 | + 'cover', | |
| 74 | + ], | |
| 75 | + 'string', | |
| 76 | + 'max' => 255, | |
| 77 | + ], | |
| 78 | + ]; | |
| 79 | + } | |
| 80 | + | |
| 81 | + /** | |
| 82 | + * @inheritdoc | |
| 83 | + */ | |
| 84 | + public function attributeLabels() | |
| 85 | + { | |
| 86 | + return [ | |
| 87 | + 'gallery_id' => Yii::t('app', 'Gallery ID'), | |
| 88 | + 'user_id' => Yii::t('app', 'User ID'), | |
| 89 | + 'name' => Yii::t('app', 'Название'), | |
| 90 | + 'date_add' => Yii::t('app', 'Дата добавления'), | |
| 91 | + 'user_add_id' => Yii::t('app', 'User Add ID'), | |
| 92 | + 'cover' => Yii::t('app', 'Фото главное'), | |
| 93 | + 'type' => Yii::t('app', 'Вид галереи'), | |
| 94 | + 'photo' => Yii::t('app', 'Фото галереи'), | |
| 95 | + ]; | |
| 96 | + } | |
| 80 | 97 | } |
| 81 | -} | ... | ... |
| 1 | +<?php | |
| 2 | + | |
| 3 | +namespace common\models; | |
| 4 | + | |
| 5 | +use Yii; | |
| 6 | +use yii\base\Model; | |
| 7 | +use yii\data\ActiveDataProvider; | |
| 8 | +use common\models\Portfolio; | |
| 9 | + | |
| 10 | +/** | |
| 11 | + * PortfolioSearch represents the model behind the search form about `common\models\Portfolio`. | |
| 12 | + */ | |
| 13 | +class PortfolioSearch extends Portfolio | |
| 14 | +{ | |
| 15 | + /** | |
| 16 | + * @inheritdoc | |
| 17 | + */ | |
| 18 | + public function rules() | |
| 19 | + { | |
| 20 | + return [ | |
| 21 | + [['portfolio_id', 'user_id', 'user_add_id', 'view_count', 'gallery_id'], 'integer'], | |
| 22 | + [['name', 'link', 'date_add', 'city', 'street', 'house', 'description', 'cover'], 'safe'], | |
| 23 | + ]; | |
| 24 | + } | |
| 25 | + | |
| 26 | + /** | |
| 27 | + * @inheritdoc | |
| 28 | + */ | |
| 29 | + public function scenarios() | |
| 30 | + { | |
| 31 | + // bypass scenarios() implementation in the parent class | |
| 32 | + return Model::scenarios(); | |
| 33 | + } | |
| 34 | + | |
| 35 | + /** | |
| 36 | + * Creates data provider instance with search query applied | |
| 37 | + * | |
| 38 | + * @param array $params | |
| 39 | + * | |
| 40 | + * @return ActiveDataProvider | |
| 41 | + */ | |
| 42 | + public function search($params) | |
| 43 | + { | |
| 44 | + $query = Portfolio::find(); | |
| 45 | + | |
| 46 | + // add conditions that should always apply here | |
| 47 | + | |
| 48 | + $dataProvider = new ActiveDataProvider([ | |
| 49 | + 'query' => $query, | |
| 50 | + ]); | |
| 51 | + | |
| 52 | + $this->load($params); | |
| 53 | + | |
| 54 | + if (!$this->validate()) { | |
| 55 | + // uncomment the following line if you do not want to return any records when validation fails | |
| 56 | + // $query->where('0=1'); | |
| 57 | + return $dataProvider; | |
| 58 | + } | |
| 59 | + | |
| 60 | + // grid filtering conditions | |
| 61 | + $query->andFilterWhere([ | |
| 62 | + 'portfolio_id' => $this->portfolio_id, | |
| 63 | + 'user_id' => $this->user_id, | |
| 64 | + 'date_add' => $this->date_add, | |
| 65 | + 'user_add_id' => $this->user_add_id, | |
| 66 | + 'view_count' => $this->view_count, | |
| 67 | + 'gallery_id' => $this->gallery_id, | |
| 68 | + ]); | |
| 69 | + | |
| 70 | + $query->andFilterWhere(['like', 'name', $this->name]) | |
| 71 | + ->andFilterWhere(['like', 'link', $this->link]) | |
| 72 | + ->andFilterWhere(['like', 'city', $this->city]) | |
| 73 | + ->andFilterWhere(['like', 'street', $this->street]) | |
| 74 | + ->andFilterWhere(['like', 'house', $this->house]) | |
| 75 | + ->andFilterWhere(['like', 'description', $this->description]) | |
| 76 | + ->andFilterWhere(['like', 'cover', $this->cover]); | |
| 77 | + | |
| 78 | + return $dataProvider; | |
| 79 | + } | |
| 80 | +} | ... | ... |
common/models/Team.php
| ... | ... | @@ -79,6 +79,14 @@ |
| 79 | 79 | [ |
| 80 | 80 | 'experience_from', |
| 81 | 81 | ], |
| 82 | + 'integer', | |
| 83 | + 'max' => 2016, | |
| 84 | + 'min' => 1950, | |
| 85 | + ], | |
| 86 | + [ | |
| 87 | + [ | |
| 88 | + 'experience_from', | |
| 89 | + ], | |
| 82 | 90 | 'safe', |
| 83 | 91 | ], |
| 84 | 92 | [ |
| ... | ... | @@ -94,6 +102,11 @@ |
| 94 | 102 | 'string', |
| 95 | 103 | 'max' => 255, |
| 96 | 104 | ], |
| 105 | + [ | |
| 106 | + ['experience_from'], | |
| 107 | + 'default', | |
| 108 | + 'value' => date('Y'), | |
| 109 | + ], | |
| 97 | 110 | ]; |
| 98 | 111 | } |
| 99 | 112 | |
| ... | ... | @@ -124,4 +137,9 @@ |
| 124 | 137 | return $this->hasOne(Department::className(), [ 'department_id' => 'department_id' ]); |
| 125 | 138 | } |
| 126 | 139 | |
| 140 | + public function getUser() | |
| 141 | + { | |
| 142 | + return $this->lastname. ' ' . $this->firstname . ' ' . $this->middlename; | |
| 143 | + } | |
| 144 | + | |
| 127 | 145 | } | ... | ... |
common/models/TeamSearch.php
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | -namespace common\models; | |
| 4 | - | |
| 5 | -use Yii; | |
| 6 | -use yii\base\Model; | |
| 7 | -use yii\data\ActiveDataProvider; | |
| 8 | -use common\models\Team; | |
| 9 | - | |
| 10 | -/** | |
| 11 | - * TeamSearch represents the model behind the search form about `common\models\Team`. | |
| 12 | - */ | |
| 13 | -class TeamSearch extends Team | |
| 14 | -{ | |
| 15 | - /** | |
| 16 | - * @inheritdoc | |
| 17 | - */ | |
| 18 | - public function rules() | |
| 19 | - { | |
| 20 | - return [ | |
| 21 | - [['team_id', 'user_id', 'department_id', 'user_add_id', 'experience_from'], 'integer'], | |
| 22 | - [['firstname', 'lastname', 'middlename', 'link', 'position', 'date_add', 'photo', 'country_id'], 'safe'], | |
| 23 | - ]; | |
| 24 | - } | |
| 3 | + namespace common\models; | |
| 25 | 4 | |
| 26 | - /** | |
| 27 | - * @inheritdoc | |
| 28 | - */ | |
| 29 | - public function scenarios() | |
| 30 | - { | |
| 31 | - // bypass scenarios() implementation in the parent class | |
| 32 | - return Model::scenarios(); | |
| 33 | - } | |
| 5 | + use Yii; | |
| 6 | + use yii\base\Model; | |
| 7 | + use yii\data\ActiveDataProvider; | |
| 8 | + use common\models\Team; | |
| 34 | 9 | |
| 35 | 10 | /** |
| 36 | - * Creates data provider instance with search query applied | |
| 37 | - * | |
| 38 | - * @param array $params | |
| 39 | - * | |
| 40 | - * @return ActiveDataProvider | |
| 11 | + * TeamSearch represents the model behind the search form about `common\models\Team`. | |
| 41 | 12 | */ |
| 42 | - public function search($params) | |
| 13 | + class TeamSearch extends Team | |
| 43 | 14 | { |
| 44 | - $query = Team::find(); | |
| 45 | 15 | |
| 46 | - // add conditions that should always apply here | |
| 16 | + public $user; | |
| 47 | 17 | |
| 48 | - $dataProvider = new ActiveDataProvider([ | |
| 49 | - 'query' => $query, | |
| 50 | - ]); | |
| 18 | + public $department; | |
| 51 | 19 | |
| 52 | - $this->load($params); | |
| 20 | + public $experience_from_from; | |
| 53 | 21 | |
| 54 | - if (!$this->validate()) { | |
| 55 | - // uncomment the following line if you do not want to return any records when validation fails | |
| 56 | - // $query->where('0=1'); | |
| 57 | - return $dataProvider; | |
| 22 | + public $experience_from_to; | |
| 23 | + | |
| 24 | + /** | |
| 25 | + * @inheritdoc | |
| 26 | + */ | |
| 27 | + public function rules() | |
| 28 | + { | |
| 29 | + return [ | |
| 30 | + [ | |
| 31 | + [ | |
| 32 | + 'team_id', | |
| 33 | + 'user_id', | |
| 34 | + 'department_id', | |
| 35 | + 'user_add_id', | |
| 36 | + 'experience_from', | |
| 37 | + 'experience_from_from', | |
| 38 | + 'experience_from_to', | |
| 39 | + ], | |
| 40 | + 'integer', | |
| 41 | + ], | |
| 42 | + [ | |
| 43 | + [ | |
| 44 | + 'experience_from_from', | |
| 45 | + ], | |
| 46 | + 'default', | |
| 47 | + 'value' => 0, | |
| 48 | + ], | |
| 49 | + [ | |
| 50 | + [ | |
| 51 | + 'experience_from_to', | |
| 52 | + ], | |
| 53 | + 'default', | |
| 54 | + 'value' => 100, | |
| 55 | + ], | |
| 56 | + [ | |
| 57 | + [ | |
| 58 | + 'department', | |
| 59 | + 'firstname', | |
| 60 | + 'lastname', | |
| 61 | + 'user', | |
| 62 | + 'middlename', | |
| 63 | + 'link', | |
| 64 | + 'position', | |
| 65 | + 'date_add', | |
| 66 | + 'photo', | |
| 67 | + 'country_id', | |
| 68 | + ], | |
| 69 | + 'safe', | |
| 70 | + ], | |
| 71 | + ]; | |
| 58 | 72 | } |
| 59 | 73 | |
| 60 | - // grid filtering conditions | |
| 61 | - $query->andFilterWhere([ | |
| 62 | - 'team_id' => $this->team_id, | |
| 63 | - 'user_id' => $this->user_id, | |
| 64 | - 'department_id' => $this->department_id, | |
| 65 | - 'date_add' => $this->date_add, | |
| 66 | - 'user_add_id' => $this->user_add_id, | |
| 67 | - 'experience_from' => $this->experience_from, | |
| 68 | - ]); | |
| 69 | - | |
| 70 | - $query->andFilterWhere(['like', 'firstname', $this->firstname]) | |
| 71 | - ->andFilterWhere(['like', 'lastname', $this->lastname]) | |
| 72 | - ->andFilterWhere(['like', 'middlename', $this->middlename]) | |
| 73 | - ->andFilterWhere(['like', 'link', $this->link]) | |
| 74 | - ->andFilterWhere(['like', 'position', $this->position]) | |
| 75 | - ->andFilterWhere(['like', 'photo', $this->photo]) | |
| 76 | - ->andFilterWhere(['like', 'country_id', $this->country_id]); | |
| 77 | - | |
| 78 | - return $dataProvider; | |
| 74 | + /** | |
| 75 | + * @inheritdoc | |
| 76 | + */ | |
| 77 | + public function scenarios() | |
| 78 | + { | |
| 79 | + // bypass scenarios() implementation in the parent class | |
| 80 | + return Model::scenarios(); | |
| 81 | + } | |
| 82 | + | |
| 83 | + /** | |
| 84 | + * Creates data provider instance with search query applied | |
| 85 | + * | |
| 86 | + * @param array $params | |
| 87 | + * | |
| 88 | + * @return ActiveDataProvider | |
| 89 | + */ | |
| 90 | + public function search($params) | |
| 91 | + { | |
| 92 | + $query = Team::find(); | |
| 93 | + | |
| 94 | + // add conditions that should always apply here | |
| 95 | + | |
| 96 | + $dataProvider = new ActiveDataProvider([ | |
| 97 | + 'query' => $query, | |
| 98 | + ]); | |
| 99 | + | |
| 100 | + $this->load($params); | |
| 101 | + | |
| 102 | + if(!$this->validate()) { | |
| 103 | + // uncomment the following line if you do not want to return any records when validation fails | |
| 104 | + // $query->where('0=1'); | |
| 105 | + return $dataProvider; | |
| 106 | + } | |
| 107 | + | |
| 108 | + $query->joinWith(Department::tableName()); | |
| 109 | + | |
| 110 | + $dataProvider->setSort([ | |
| 111 | + 'attributes' => [ | |
| 112 | + 'team_id', | |
| 113 | + 'position', | |
| 114 | + 'country_id', | |
| 115 | + 'user' => [ | |
| 116 | + 'asc' => [ | |
| 117 | + 'lastname' => SORT_ASC, | |
| 118 | + 'firstname' => SORT_ASC, | |
| 119 | + 'middlename' => SORT_ASC, | |
| 120 | + ], | |
| 121 | + 'desc' => [ | |
| 122 | + 'lastname' => SORT_DESC, | |
| 123 | + 'firstname' => SORT_DESC, | |
| 124 | + 'middlename' => SORT_DESC, | |
| 125 | + ], | |
| 126 | + ], | |
| 127 | + 'link' => [ | |
| 128 | + 'asc' => [ | |
| 129 | + 'link' => SORT_DESC, | |
| 130 | + ], | |
| 131 | + 'desc' => [ | |
| 132 | + 'link' => SORT_ASC, | |
| 133 | + ], | |
| 134 | + ], | |
| 135 | + 'department' => [ | |
| 136 | + 'asc' => [ | |
| 137 | + Department::tableName() . '.name' => SORT_ASC, | |
| 138 | + ], | |
| 139 | + 'desc' => [ | |
| 140 | + Department::tableName() . '.name' => SORT_DESC, | |
| 141 | + ], | |
| 142 | + ], | |
| 143 | + 'experience_from' => [ | |
| 144 | + 'asc' => [ | |
| 145 | + 'experience_from' => SORT_DESC, | |
| 146 | + ], | |
| 147 | + 'desc' => [ | |
| 148 | + 'experience_from' => SORT_ASC, | |
| 149 | + ], | |
| 150 | + ], | |
| 151 | + ], | |
| 152 | + ]); | |
| 153 | + | |
| 154 | + // grid filtering conditions | |
| 155 | + $query->andFilterWhere([ | |
| 156 | + 'team_id' => $this->team_id, | |
| 157 | + 'user_id' => $this->user_id, | |
| 158 | + 'department_id' => $this->department_id, | |
| 159 | + 'date_add' => $this->date_add, | |
| 160 | + 'user_add_id' => $this->user_add_id, | |
| 161 | + ]); | |
| 162 | + | |
| 163 | + $query->andFilterWhere([ | |
| 164 | + 'between', | |
| 165 | + 'experience_from', | |
| 166 | + $this->experience_from_to ? ( date('Y') - $this->experience_from_to ) : ( date('Y') - 100 ), | |
| 167 | + $this->experience_from_from ? ( date('Y') - $this->experience_from_from ) : date('Y'), | |
| 168 | + ]); | |
| 169 | + | |
| 170 | + if(!empty( $this->link ) || $this->link === '0') { | |
| 171 | + $query->andFilterWhere([ | |
| 172 | + $this->link ? '>' : '=', | |
| 173 | + 'char_length(link)', | |
| 174 | + 0, | |
| 175 | + ]); | |
| 176 | + } | |
| 177 | + | |
| 178 | + $query->andFilterWhere([ | |
| 179 | + 'like', | |
| 180 | + 'firstname', | |
| 181 | + $this->firstname, | |
| 182 | + ]) | |
| 183 | + ->andFilterWhere([ | |
| 184 | + 'like', | |
| 185 | + 'lastname', | |
| 186 | + $this->lastname, | |
| 187 | + ]) | |
| 188 | + ->andFilterWhere([ | |
| 189 | + 'like', | |
| 190 | + 'middlename', | |
| 191 | + $this->middlename, | |
| 192 | + ]) | |
| 193 | + ->andFilterWhere([ | |
| 194 | + 'like', | |
| 195 | + 'position', | |
| 196 | + $this->position, | |
| 197 | + ]) | |
| 198 | + ->andFilterWhere([ | |
| 199 | + 'like', | |
| 200 | + 'photo', | |
| 201 | + $this->photo, | |
| 202 | + ]) | |
| 203 | + ->andFilterWhere([ | |
| 204 | + 'like', | |
| 205 | + 'country_id', | |
| 206 | + $this->country_id, | |
| 207 | + ]) | |
| 208 | + ->andFilterWhere([ | |
| 209 | + 'or', | |
| 210 | + [ | |
| 211 | + 'like', | |
| 212 | + 'lastname', | |
| 213 | + $this->user, | |
| 214 | + ], | |
| 215 | + [ | |
| 216 | + 'like', | |
| 217 | + 'firstname', | |
| 218 | + $this->user, | |
| 219 | + ], | |
| 220 | + [ | |
| 221 | + 'like', | |
| 222 | + 'middlename', | |
| 223 | + $this->user, | |
| 224 | + ], | |
| 225 | + ]) | |
| 226 | + ->andFilterWhere([ | |
| 227 | + 'like', | |
| 228 | + 'department.name', | |
| 229 | + $this->department, | |
| 230 | + ]); | |
| 231 | + | |
| 232 | + return $dataProvider; | |
| 233 | + } | |
| 79 | 234 | } |
| 80 | -} | ... | ... |
common/models/Vacancy.php
| ... | ... | @@ -68,10 +68,15 @@ |
| 68 | 68 | 'string', |
| 69 | 69 | ], |
| 70 | 70 | [ |
| 71 | - ['employmentInput'], | |
| 71 | + [ 'employmentInput' ], | |
| 72 | 72 | 'safe', |
| 73 | 73 | ], |
| 74 | 74 | [ |
| 75 | + [ 'view_count' ], | |
| 76 | + 'default', | |
| 77 | + 'value' => 0, | |
| 78 | + ], | |
| 79 | + [ | |
| 75 | 80 | [ |
| 76 | 81 | 'name', |
| 77 | 82 | 'link', |
| ... | ... | @@ -90,16 +95,16 @@ |
| 90 | 95 | public function attributeLabels() |
| 91 | 96 | { |
| 92 | 97 | return [ |
| 93 | - 'vacancy_id' => Yii::t('app', 'Vacancy ID'), | |
| 94 | - 'user_id' => Yii::t('app', 'User ID'), | |
| 95 | - 'name' => Yii::t('app', 'Название'), | |
| 96 | - 'link' => Yii::t('app', 'URL'), | |
| 97 | - 'date_add' => Yii::t('app', 'Дата добавления'), | |
| 98 | - 'user_add_id' => Yii::t('app', 'User Add ID'), | |
| 99 | - 'view_count' => Yii::t('app', 'Количество просмотров'), | |
| 100 | - 'user_name' => Yii::t('app', 'Контактное лицо'), | |
| 101 | - 'city' => Yii::t('app', 'Город'), | |
| 102 | - 'description' => Yii::t('app', 'Описание'), | |
| 98 | + 'vacancy_id' => Yii::t('app', 'Vacancy ID'), | |
| 99 | + 'user_id' => Yii::t('app', 'User ID'), | |
| 100 | + 'name' => Yii::t('app', 'Название'), | |
| 101 | + 'link' => Yii::t('app', 'URL'), | |
| 102 | + 'date_add' => Yii::t('app', 'Дата добавления'), | |
| 103 | + 'user_add_id' => Yii::t('app', 'User Add ID'), | |
| 104 | + 'view_count' => Yii::t('app', 'Количество просмотров'), | |
| 105 | + 'user_name' => Yii::t('app', 'Контактное лицо'), | |
| 106 | + 'city' => Yii::t('app', 'Город'), | |
| 107 | + 'description' => Yii::t('app', 'Описание'), | |
| 103 | 108 | 'employmentInput' => Yii::t('app', 'Вид занятости'), |
| 104 | 109 | ]; |
| 105 | 110 | } | ... | ... |
| 1 | +<?php | |
| 2 | + | |
| 3 | +namespace common\models; | |
| 4 | + | |
| 5 | +use Yii; | |
| 6 | +use yii\base\Model; | |
| 7 | +use yii\data\ActiveDataProvider; | |
| 8 | +use common\models\Vacancy; | |
| 9 | + | |
| 10 | +/** | |
| 11 | + * VacancySearch represents the model behind the search form about `common\models\Vacancy`. | |
| 12 | + */ | |
| 13 | +class VacancySearch extends Vacancy | |
| 14 | +{ | |
| 15 | + /** | |
| 16 | + * @inheritdoc | |
| 17 | + */ | |
| 18 | + public function rules() | |
| 19 | + { | |
| 20 | + return [ | |
| 21 | + [['vacancy_id', 'user_id', 'user_add_id', 'view_count'], 'integer'], | |
| 22 | + [['name', 'link', 'date_add', 'user_name', 'city', 'description'], 'safe'], | |
| 23 | + ]; | |
| 24 | + } | |
| 25 | + | |
| 26 | + /** | |
| 27 | + * @inheritdoc | |
| 28 | + */ | |
| 29 | + public function scenarios() | |
| 30 | + { | |
| 31 | + // bypass scenarios() implementation in the parent class | |
| 32 | + return Model::scenarios(); | |
| 33 | + } | |
| 34 | + | |
| 35 | + /** | |
| 36 | + * Creates data provider instance with search query applied | |
| 37 | + * | |
| 38 | + * @param array $params | |
| 39 | + * | |
| 40 | + * @return ActiveDataProvider | |
| 41 | + */ | |
| 42 | + public function search($params) | |
| 43 | + { | |
| 44 | + $query = Vacancy::find(); | |
| 45 | + | |
| 46 | + // add conditions that should always apply here | |
| 47 | + | |
| 48 | + $dataProvider = new ActiveDataProvider([ | |
| 49 | + 'query' => $query, | |
| 50 | + ]); | |
| 51 | + | |
| 52 | + $this->load($params); | |
| 53 | + | |
| 54 | + if (!$this->validate()) { | |
| 55 | + // uncomment the following line if you do not want to return any records when validation fails | |
| 56 | + // $query->where('0=1'); | |
| 57 | + return $dataProvider; | |
| 58 | + } | |
| 59 | + | |
| 60 | + // grid filtering conditions | |
| 61 | + $query->andFilterWhere([ | |
| 62 | + 'vacancy_id' => $this->vacancy_id, | |
| 63 | + 'user_id' => $this->user_id, | |
| 64 | + 'date_add' => $this->date_add, | |
| 65 | + 'user_add_id' => $this->user_add_id, | |
| 66 | + 'view_count' => $this->view_count, | |
| 67 | + ]); | |
| 68 | + | |
| 69 | + $query->andFilterWhere(['like', 'name', $this->name]) | |
| 70 | + ->andFilterWhere(['like', 'link', $this->link]) | |
| 71 | + ->andFilterWhere(['like', 'user_name', $this->user_name]) | |
| 72 | + ->andFilterWhere(['like', 'city', $this->city]) | |
| 73 | + ->andFilterWhere(['like', 'description', $this->description]); | |
| 74 | + | |
| 75 | + return $dataProvider; | |
| 76 | + } | |
| 77 | +} | ... | ... |
console/migrations/m160208_091942_vacancies.php
| ... | ... | @@ -15,7 +15,7 @@ class m160208_091942_vacancies extends Migration |
| 15 | 15 | 'link' => $this->string(255), |
| 16 | 16 | 'date_add' => $this->timestamp(), |
| 17 | 17 | 'user_add_id' => $this->integer(), |
| 18 | - 'view_count' => $this->integer(), | |
| 18 | + 'view_count' => $this->integer()->defaultValue(0), | |
| 19 | 19 | 'user_name' => $this->string(255), |
| 20 | 20 | 'city' => $this->string(255), |
| 21 | 21 | 'description' => $this->text(), | ... | ... |
frontend/controllers/AccountsController.php
| ... | ... | @@ -20,11 +20,13 @@ |
| 20 | 20 | use common\models\UserPayment; |
| 21 | 21 | use common\models\UserSpecialization; |
| 22 | 22 | use common\models\Vacancy; |
| 23 | + use common\models\VacancySearch; | |
| 23 | 24 | use Yii; |
| 24 | 25 | use common\models\User; |
| 25 | 26 | use common\models\UserInfo; |
| 26 | 27 | |
| 27 | 28 | use yii\filters\AccessControl; |
| 29 | + use yii\filters\VerbFilter; | |
| 28 | 30 | use yii\web\Controller; |
| 29 | 31 | use yii\web\NotFoundHttpException; |
| 30 | 32 | |
| ... | ... | @@ -49,9 +51,59 @@ |
| 49 | 51 | ], |
| 50 | 52 | ], |
| 51 | 53 | ], |
| 54 | + 'verbs' => [ | |
| 55 | + 'class' => VerbFilter::className(), | |
| 56 | + 'actions' => [ | |
| 57 | + 'team-delete' => [ 'POST' ], | |
| 58 | + ], | |
| 59 | + ], | |
| 52 | 60 | ]; |
| 53 | 61 | } |
| 54 | 62 | |
| 63 | + public function actionAddSkills() | |
| 64 | + { | |
| 65 | + $user = \Yii::$app->user->identity; | |
| 66 | + if(!empty( \Yii::$app->request->post() )) { | |
| 67 | + Fields::saveFieldData(Yii::$app->request->post('Fields'), \Yii::$app->user->identity->id, User::className(), 'ru'); | |
| 68 | + } | |
| 69 | + return $this->render('add-skills', [ 'user' => $user ]); | |
| 70 | + } | |
| 71 | + | |
| 72 | + public function actionBlog() | |
| 73 | + { | |
| 74 | + return $this->render('blog'); | |
| 75 | + } | |
| 76 | + | |
| 77 | + public function actionBlogCreate() | |
| 78 | + { | |
| 79 | + $blog = new Blog(); | |
| 80 | + $post = \Yii::$app->request->post(); | |
| 81 | + if($blog->load($post) && $blog->save()) { | |
| 82 | + return $this->redirect([ | |
| 83 | + 'blog-update', | |
| 84 | + [ 'id' => $blog->blog_id ], | |
| 85 | + ]); | |
| 86 | + } else { | |
| 87 | + return $this->render('_blog_form', [ 'blog' => $blog ]); | |
| 88 | + } | |
| 89 | + } | |
| 90 | + | |
| 91 | + public function actionBlogUpdate($id) | |
| 92 | + { | |
| 93 | + $blog = Blog::findOne($id); | |
| 94 | + $post = \Yii::$app->request->post(); | |
| 95 | + if($blog->load($post) && $blog->save()) { | |
| 96 | + return $this->redirect('blog'); | |
| 97 | + } else { | |
| 98 | + return $this->render('_blog_form', [ 'blog' => $blog ]); | |
| 99 | + } | |
| 100 | + } | |
| 101 | + | |
| 102 | + public function actionBookmarks() | |
| 103 | + { | |
| 104 | + return $this->render('bookmarks'); | |
| 105 | + } | |
| 106 | + | |
| 55 | 107 | public function actionCabinet() |
| 56 | 108 | { |
| 57 | 109 | |
| ... | ... | @@ -81,9 +133,120 @@ |
| 81 | 133 | |
| 82 | 134 | } |
| 83 | 135 | |
| 84 | - public function actionBookmarks() | |
| 136 | + public function actionContacts() | |
| 85 | 137 | { |
| 86 | - return $this->render('bookmarks'); | |
| 138 | + $user_info = UserInfo::find() | |
| 139 | + ->where([ 'user_id' => \Yii::$app->user->getId() ]) | |
| 140 | + ->one(); | |
| 141 | + if(empty( $user_info )) { | |
| 142 | + $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]); | |
| 143 | + } | |
| 144 | + if(!empty( \Yii::$app->request->post() )) { | |
| 145 | + Fields::saveFieldData(Yii::$app->request->post('Fields'), \Yii::$app->user->identity->id, User::className(), 'ru'); | |
| 146 | + $user_info->load(\Yii::$app->request->post()); | |
| 147 | + $user_info->save(); | |
| 148 | + } | |
| 149 | + return $this->render('contacts', [ 'user_info' => $user_info ]); | |
| 150 | + } | |
| 151 | + | |
| 152 | + public function actionDescription() | |
| 153 | + { | |
| 154 | + $user_info = UserInfo::find() | |
| 155 | + ->where([ 'user_id' => \Yii::$app->user->getId() ]) | |
| 156 | + ->one(); | |
| 157 | + if(empty( $user_info )) { | |
| 158 | + $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]); | |
| 159 | + } | |
| 160 | + $post = \Yii::$app->request->post(); | |
| 161 | + if(!empty( $post )) { | |
| 162 | + $user_info->load($post); | |
| 163 | + $user_info->save(); | |
| 164 | + } | |
| 165 | + return $this->render('description', [ 'user_info' => $user_info ]); | |
| 166 | + } | |
| 167 | + | |
| 168 | + public function actionEmployment() | |
| 169 | + { | |
| 170 | + $post = \Yii::$app->request->post(); | |
| 171 | + if(!empty( $post )) { | |
| 172 | + $job = [ ]; | |
| 173 | + for($i = 0; $i < count($post[ 'Job' ]); $i++) { | |
| 174 | + $job[ $i ] = new Job([ | |
| 175 | + 'user_id' => \Yii::$app->user->getId(), | |
| 176 | + 'current' => 0, | |
| 177 | + ]); | |
| 178 | + } | |
| 179 | + if(Job::loadMultiple($job, $post)) { | |
| 180 | + $job[ 0 ]->current = 1; | |
| 181 | + if(Job::validateMultiple($job)) { | |
| 182 | + Job::deleteAll([ 'user_id' => \Yii::$app->user->getId() ]); | |
| 183 | + foreach($job as $onejob) { | |
| 184 | + $onejob->save(false); | |
| 185 | + } | |
| 186 | + } | |
| 187 | + } | |
| 188 | + } else { | |
| 189 | + $job = Job::find() | |
| 190 | + ->where([ 'user_id' => \Yii::$app->user->getId() ]) | |
| 191 | + ->orderBy([ 'current' => SORT_DESC ]) | |
| 192 | + ->all(); | |
| 193 | + if(empty( $job )) { | |
| 194 | + $job[] = new Job([ | |
| 195 | + 'user_id' => \Yii::$app->user->getId(), | |
| 196 | + 'current' => 0, | |
| 197 | + ]); | |
| 198 | + } | |
| 199 | + if(!$job[ 0 ]->current) { | |
| 200 | + array_unshift($job, new Job([ | |
| 201 | + 'user_id' => \Yii::$app->user->getId(), | |
| 202 | + 'current' => 1, | |
| 203 | + ])); | |
| 204 | + } | |
| 205 | + } | |
| 206 | + return $this->render('employment', [ 'job' => $job ]); | |
| 207 | + } | |
| 208 | + | |
| 209 | + public function actionGallery() | |
| 210 | + { | |
| 211 | + | |
| 212 | + } | |
| 213 | + | |
| 214 | + public function actionGalleryCreate() | |
| 215 | + { | |
| 216 | + $gallery = new Gallery(); | |
| 217 | + $user = \Yii::$app->user->identity; | |
| 218 | + $post = \Yii::$app->request->post(); | |
| 219 | + if($gallery->load($post) && $gallery->save()) { | |
| 220 | + Fields::saveFieldData(Yii::$app->request->post('Fields'), $gallery->gallery_id, Gallery::className(), 'ru'); | |
| 221 | + return $this->redirect([ | |
| 222 | + 'gallery-update', | |
| 223 | + 'id' => $gallery->gallery_id, | |
| 224 | + ]); | |
| 225 | + } else { | |
| 226 | + return $this->render('_gallery_form', [ | |
| 227 | + 'gallery' => $gallery, | |
| 228 | + 'user' => $user, | |
| 229 | + ]); | |
| 230 | + } | |
| 231 | + } | |
| 232 | + | |
| 233 | + public function actionGalleryUpdate($id) | |
| 234 | + { | |
| 235 | + $gallery = Gallery::findOne($id); | |
| 236 | + $user = \Yii::$app->user->identity; | |
| 237 | + $post = \Yii::$app->request->post(); | |
| 238 | + if($gallery->load($post) && $gallery->save()) { | |
| 239 | + Fields::saveFieldData(Yii::$app->request->post('Fields'), \Yii::$app->user->identity->id, User::className(), 'ru'); | |
| 240 | + return $this->redirect([ | |
| 241 | + 'gallery-update', | |
| 242 | + 'id' => $gallery->gallery_id, | |
| 243 | + ]); | |
| 244 | + } else { | |
| 245 | + return $this->render('_gallery_form', [ | |
| 246 | + 'gallery' => $gallery, | |
| 247 | + 'user' => $user, | |
| 248 | + ]); | |
| 249 | + } | |
| 87 | 250 | } |
| 88 | 251 | |
| 89 | 252 | public function actionGeneral() |
| ... | ... | @@ -119,34 +282,9 @@ |
| 119 | 282 | ]); |
| 120 | 283 | } |
| 121 | 284 | |
| 122 | - public function actionBlog() | |
| 123 | - { | |
| 124 | - return $this->render('blog'); | |
| 125 | - } | |
| 126 | - | |
| 127 | - public function actionBlogCreate() | |
| 128 | - { | |
| 129 | - $blog = new Blog(); | |
| 130 | - $post = \Yii::$app->request->post(); | |
| 131 | - if($blog->load($post) && $blog->save()) { | |
| 132 | - return $this->redirect([ | |
| 133 | - 'blog-update', | |
| 134 | - [ 'id' => $blog->blog_id ], | |
| 135 | - ]); | |
| 136 | - } else { | |
| 137 | - return $this->render('_blog_form', [ 'blog' => $blog ]); | |
| 138 | - } | |
| 139 | - } | |
| 140 | - | |
| 141 | - public function actionBlogUpdate($id) | |
| 285 | + public function actionGetForm($lastindex) | |
| 142 | 286 | { |
| 143 | - $blog = Blog::findOne($id); | |
| 144 | - $post = \Yii::$app->request->post(); | |
| 145 | - if($blog->load($post) && $blog->save()) { | |
| 146 | - return $this->redirect('blog'); | |
| 147 | - } else { | |
| 148 | - return $this->render('_blog_form', [ 'blog' => $blog ]); | |
| 149 | - } | |
| 287 | + return $this->renderAjax('_job_form', [ 'index' => $lastindex + 1 ]); | |
| 150 | 288 | } |
| 151 | 289 | |
| 152 | 290 | public function actionPortfolio() |
| ... | ... | @@ -214,176 +352,6 @@ |
| 214 | 352 | ]); |
| 215 | 353 | } |
| 216 | 354 | |
| 217 | - /** | |
| 218 | - * $user User | |
| 219 | - */ | |
| 220 | - public function actionSetting() | |
| 221 | - { | |
| 222 | - $user = \Yii::$app->user->identity; | |
| 223 | - $post = \Yii::$app->request->post('User'); | |
| 224 | - if(!empty( $post )) { | |
| 225 | - if(empty( $post[ 'new_password' ] )) { | |
| 226 | - $user->addError('new_password', 'Введите новый пароль'); | |
| 227 | - } else { | |
| 228 | - $user->new_password = $post[ 'new_password' ]; | |
| 229 | - } | |
| 230 | - if(empty( $post[ 'old_password' ] )) { | |
| 231 | - $user->addError('old_password', 'Введите новый пароль'); | |
| 232 | - } else { | |
| 233 | - $user->old_password = $post[ 'old_password' ]; | |
| 234 | - } | |
| 235 | - if(empty( $post[ 'password_reply' ] ) || $post[ 'password_reply' ] !== $post[ 'new_password' ]) { | |
| 236 | - $user->addError('password_reply', 'Неправильный повтор пароля'); | |
| 237 | - } else { | |
| 238 | - $user->password_reply = $post[ 'password_reply' ]; | |
| 239 | - } | |
| 240 | - if(!$user->hasErrors()) { | |
| 241 | - if($user->validatePassword($user->old_password)) { | |
| 242 | - $user->setPassword($user->new_password); | |
| 243 | - $user->generateAuthKey(); | |
| 244 | - if($user->save()) { | |
| 245 | - \Yii::$app->session->setFlash('passwordupdate', 'Пароль успешно обновлен'); | |
| 246 | - } | |
| 247 | - } else { | |
| 248 | - $user->addError('old_password', 'Неправильный старый пароль'); | |
| 249 | - } | |
| 250 | - } | |
| 251 | - } | |
| 252 | - return $this->render('setting', [ 'user' => $user ]); | |
| 253 | - } | |
| 254 | - | |
| 255 | - public function actionContacts() | |
| 256 | - { | |
| 257 | - $user_info = UserInfo::find() | |
| 258 | - ->where([ 'user_id' => \Yii::$app->user->getId() ]) | |
| 259 | - ->one(); | |
| 260 | - if(empty( $user_info )) { | |
| 261 | - $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]); | |
| 262 | - } | |
| 263 | - if(!empty( \Yii::$app->request->post() )) { | |
| 264 | - Fields::saveFieldData(Yii::$app->request->post('Fields'), \Yii::$app->user->identity->id, User::className(), 'ru'); | |
| 265 | - $user_info->load(\Yii::$app->request->post()); | |
| 266 | - $user_info->save(); | |
| 267 | - } | |
| 268 | - return $this->render('contacts', [ 'user_info' => $user_info ]); | |
| 269 | - } | |
| 270 | - | |
| 271 | - public function actionService() | |
| 272 | - { | |
| 273 | - $user = \Yii::$app->user->identity; | |
| 274 | - $user_info = UserInfo::find() | |
| 275 | - ->where([ 'user_id' => \Yii::$app->user->getId() ]) | |
| 276 | - ->one(); | |
| 277 | - if(empty( $user_info )) { | |
| 278 | - $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]); | |
| 279 | - } | |
| 280 | - $specialization = Specialization::find() | |
| 281 | - ->select([ | |
| 282 | - 'specialization_name', | |
| 283 | - 'specialization_id', | |
| 284 | - ]) | |
| 285 | - ->indexBy('specialization_id') | |
| 286 | - ->asArray() | |
| 287 | - ->column(); | |
| 288 | - $payment = Payment::find() | |
| 289 | - ->select([ | |
| 290 | - 'name', | |
| 291 | - 'payment_id', | |
| 292 | - ]) | |
| 293 | - ->indexBy('payment_id') | |
| 294 | - ->asArray() | |
| 295 | - ->column(); | |
| 296 | - $post = \Yii::$app->request->post(); | |
| 297 | - if(!empty( $post )) { | |
| 298 | - $user_info->load($post); | |
| 299 | - $user_info->validate(); | |
| 300 | - if(!$user_info->hasErrors()) { | |
| 301 | - $user_info->save(); | |
| 302 | - $user->load($post); | |
| 303 | - $user->unlinkAll('specializations', true); | |
| 304 | - foreach($user->specializationInput as $one_specialization) { | |
| 305 | - $user->link('specializations', Specialization::findOne($one_specialization)); | |
| 306 | - } | |
| 307 | - $user->unlinkAll('payments', true); | |
| 308 | - foreach($user->paymentInput as $one_payment) { | |
| 309 | - $user->link('payments', Payment::findOne($one_payment)); | |
| 310 | - } | |
| 311 | - } | |
| 312 | - } | |
| 313 | - return $this->render('service', [ | |
| 314 | - 'user' => $user, | |
| 315 | - 'user_info' => $user_info, | |
| 316 | - 'specialization' => $specialization, | |
| 317 | - 'payment' => $payment, | |
| 318 | - ]); | |
| 319 | - } | |
| 320 | - | |
| 321 | - public function actionAddSkills() | |
| 322 | - { | |
| 323 | - $user = \Yii::$app->user->identity; | |
| 324 | - if(!empty( \Yii::$app->request->post() )) { | |
| 325 | - Fields::saveFieldData(Yii::$app->request->post('Fields'), \Yii::$app->user->identity->id, User::className(), 'ru'); | |
| 326 | - } | |
| 327 | - return $this->render('add-skills', [ 'user' => $user ]); | |
| 328 | - } | |
| 329 | - | |
| 330 | - public function actionDescription() | |
| 331 | - { | |
| 332 | - $user_info = UserInfo::find() | |
| 333 | - ->where([ 'user_id' => \Yii::$app->user->getId() ]) | |
| 334 | - ->one(); | |
| 335 | - if(empty( $user_info )) { | |
| 336 | - $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]); | |
| 337 | - } | |
| 338 | - $post = \Yii::$app->request->post(); | |
| 339 | - if(!empty( $post )) { | |
| 340 | - $user_info->load($post); | |
| 341 | - $user_info->save(); | |
| 342 | - } | |
| 343 | - return $this->render('description', [ 'user_info' => $user_info ]); | |
| 344 | - } | |
| 345 | - | |
| 346 | - public function actionEmployment() | |
| 347 | - { | |
| 348 | - $post = \Yii::$app->request->post(); | |
| 349 | - if(!empty( $post )) { | |
| 350 | - $job = [ ]; | |
| 351 | - for($i = 0; $i < count($post[ 'Job' ]); $i++) { | |
| 352 | - $job[ $i ] = new Job([ | |
| 353 | - 'user_id' => \Yii::$app->user->getId(), | |
| 354 | - 'current' => 0, | |
| 355 | - ]); | |
| 356 | - } | |
| 357 | - if(Job::loadMultiple($job, $post)) { | |
| 358 | - $job[ 0 ]->current = 1; | |
| 359 | - if(Job::validateMultiple($job)) { | |
| 360 | - Job::deleteAll([ 'user_id' => \Yii::$app->user->getId() ]); | |
| 361 | - foreach($job as $onejob) { | |
| 362 | - $onejob->save(false); | |
| 363 | - } | |
| 364 | - } | |
| 365 | - } | |
| 366 | - } else { | |
| 367 | - $job = Job::find() | |
| 368 | - ->where([ 'user_id' => \Yii::$app->user->getId() ]) | |
| 369 | - ->orderBy([ 'current' => SORT_DESC ]) | |
| 370 | - ->all(); | |
| 371 | - if(empty( $job )) { | |
| 372 | - $job[] = new Job([ | |
| 373 | - 'user_id' => \Yii::$app->user->getId(), | |
| 374 | - 'current' => 0, | |
| 375 | - ]); | |
| 376 | - } | |
| 377 | - if(!$job[ 0 ]->current) { | |
| 378 | - array_unshift($job, new Job([ | |
| 379 | - 'user_id' => \Yii::$app->user->getId(), | |
| 380 | - 'current' => 1, | |
| 381 | - ])); | |
| 382 | - } | |
| 383 | - } | |
| 384 | - return $this->render('employment', [ 'job' => $job ]); | |
| 385 | - } | |
| 386 | - | |
| 387 | 355 | public function actionProjects() |
| 388 | 356 | { |
| 389 | 357 | return $this->render('projects'); |
| ... | ... | @@ -532,47 +500,92 @@ |
| 532 | 500 | ]); |
| 533 | 501 | } |
| 534 | 502 | |
| 535 | - public function actionGallery() | |
| 536 | - { | |
| 537 | - | |
| 538 | - } | |
| 539 | - | |
| 540 | - public function actionGalleryCreate() | |
| 503 | + public function actionService() | |
| 541 | 504 | { |
| 542 | - $gallery = new Gallery(); | |
| 543 | 505 | $user = \Yii::$app->user->identity; |
| 506 | + $user_info = UserInfo::find() | |
| 507 | + ->where([ 'user_id' => \Yii::$app->user->getId() ]) | |
| 508 | + ->one(); | |
| 509 | + if(empty( $user_info )) { | |
| 510 | + $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]); | |
| 511 | + } | |
| 512 | + $specialization = Specialization::find() | |
| 513 | + ->select([ | |
| 514 | + 'specialization_name', | |
| 515 | + 'specialization_id', | |
| 516 | + ]) | |
| 517 | + ->indexBy('specialization_id') | |
| 518 | + ->asArray() | |
| 519 | + ->column(); | |
| 520 | + $payment = Payment::find() | |
| 521 | + ->select([ | |
| 522 | + 'name', | |
| 523 | + 'payment_id', | |
| 524 | + ]) | |
| 525 | + ->indexBy('payment_id') | |
| 526 | + ->asArray() | |
| 527 | + ->column(); | |
| 544 | 528 | $post = \Yii::$app->request->post(); |
| 545 | - if($gallery->load($post) && $gallery->save()) { | |
| 546 | - Fields::saveFieldData(Yii::$app->request->post('Fields'), $gallery->gallery_id, Gallery::className(), 'ru'); | |
| 547 | - return $this->redirect([ | |
| 548 | - 'gallery-update', | |
| 549 | - 'id' => $gallery->gallery_id, | |
| 550 | - ]); | |
| 551 | - } else { | |
| 552 | - return $this->render('_gallery_form', [ | |
| 553 | - 'gallery' => $gallery, | |
| 554 | - 'user' => $user, | |
| 555 | - ]); | |
| 529 | + if(!empty( $post )) { | |
| 530 | + $user_info->load($post); | |
| 531 | + $user_info->validate(); | |
| 532 | + if(!$user_info->hasErrors()) { | |
| 533 | + $user_info->save(); | |
| 534 | + $user->load($post); | |
| 535 | + $user->unlinkAll('specializations', true); | |
| 536 | + foreach($user->specializationInput as $one_specialization) { | |
| 537 | + $user->link('specializations', Specialization::findOne($one_specialization)); | |
| 538 | + } | |
| 539 | + $user->unlinkAll('payments', true); | |
| 540 | + foreach($user->paymentInput as $one_payment) { | |
| 541 | + $user->link('payments', Payment::findOne($one_payment)); | |
| 542 | + } | |
| 543 | + } | |
| 556 | 544 | } |
| 545 | + return $this->render('service', [ | |
| 546 | + 'user' => $user, | |
| 547 | + 'user_info' => $user_info, | |
| 548 | + 'specialization' => $specialization, | |
| 549 | + 'payment' => $payment, | |
| 550 | + ]); | |
| 557 | 551 | } |
| 558 | 552 | |
| 559 | - public function actionGalleryUpdate($id) | |
| 553 | + /** | |
| 554 | + * $user User | |
| 555 | + */ | |
| 556 | + public function actionSetting() | |
| 560 | 557 | { |
| 561 | - $gallery = Gallery::findOne($id); | |
| 562 | 558 | $user = \Yii::$app->user->identity; |
| 563 | - $post = \Yii::$app->request->post(); | |
| 564 | - if($gallery->load($post) && $gallery->save()) { | |
| 565 | - Fields::saveFieldData(Yii::$app->request->post('Fields'), \Yii::$app->user->identity->id, User::className(), 'ru'); | |
| 566 | - return $this->redirect([ | |
| 567 | - 'gallery-update', | |
| 568 | - 'id' => $gallery->gallery_id, | |
| 569 | - ]); | |
| 570 | - } else { | |
| 571 | - return $this->render('_gallery_form', [ | |
| 572 | - 'gallery' => $gallery, | |
| 573 | - 'user' => $user, | |
| 574 | - ]); | |
| 559 | + $post = \Yii::$app->request->post('User'); | |
| 560 | + if(!empty( $post )) { | |
| 561 | + if(empty( $post[ 'new_password' ] )) { | |
| 562 | + $user->addError('new_password', 'Введите новый пароль'); | |
| 563 | + } else { | |
| 564 | + $user->new_password = $post[ 'new_password' ]; | |
| 565 | + } | |
| 566 | + if(empty( $post[ 'old_password' ] )) { | |
| 567 | + $user->addError('old_password', 'Введите новый пароль'); | |
| 568 | + } else { | |
| 569 | + $user->old_password = $post[ 'old_password' ]; | |
| 570 | + } | |
| 571 | + if(empty( $post[ 'password_reply' ] ) || $post[ 'password_reply' ] !== $post[ 'new_password' ]) { | |
| 572 | + $user->addError('password_reply', 'Неправильный повтор пароля'); | |
| 573 | + } else { | |
| 574 | + $user->password_reply = $post[ 'password_reply' ]; | |
| 575 | + } | |
| 576 | + if(!$user->hasErrors()) { | |
| 577 | + if($user->validatePassword($user->old_password)) { | |
| 578 | + $user->setPassword($user->new_password); | |
| 579 | + $user->generateAuthKey(); | |
| 580 | + if($user->save()) { | |
| 581 | + \Yii::$app->session->setFlash('passwordupdate', 'Пароль успешно обновлен'); | |
| 582 | + } | |
| 583 | + } else { | |
| 584 | + $user->addError('old_password', 'Неправильный старый пароль'); | |
| 585 | + } | |
| 586 | + } | |
| 575 | 587 | } |
| 588 | + return $this->render('setting', [ 'user' => $user ]); | |
| 576 | 589 | } |
| 577 | 590 | |
| 578 | 591 | public function actionTeam() |
| ... | ... | @@ -648,9 +661,22 @@ |
| 648 | 661 | } |
| 649 | 662 | } |
| 650 | 663 | |
| 664 | + public function actionTeamDelete($id) | |
| 665 | + { | |
| 666 | + Team::findOne($id) | |
| 667 | + ->delete(); | |
| 668 | + $this->redirect('team'); | |
| 669 | + } | |
| 670 | + | |
| 651 | 671 | public function actionVacancy() |
| 652 | 672 | { |
| 653 | - $this->render('vacancy'); | |
| 673 | + $searchModel = new VacancySearch(); | |
| 674 | + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); | |
| 675 | + | |
| 676 | + return $this->render('vacancy', [ | |
| 677 | + 'searchModel' => $searchModel, | |
| 678 | + 'dataProvider' => $dataProvider, | |
| 679 | + ]); | |
| 654 | 680 | } |
| 655 | 681 | |
| 656 | 682 | public function actionVacancyCreate() |
| ... | ... | @@ -721,9 +747,11 @@ |
| 721 | 747 | ]); |
| 722 | 748 | } |
| 723 | 749 | |
| 724 | - public function actionGetForm($lastindex) | |
| 750 | + public function actionVacancyDelete($id) | |
| 725 | 751 | { |
| 726 | - return $this->renderAjax('_job_form', [ 'index' => $lastindex + 1 ]); | |
| 752 | + Vacancy::findOne($id) | |
| 753 | + ->delete(); | |
| 754 | + $this->redirect('vacancy'); | |
| 727 | 755 | } |
| 728 | 756 | |
| 729 | 757 | /** | ... | ... |
frontend/views/accounts/_job_form.php
| ... | ... | @@ -3,6 +3,7 @@ |
| 3 | 3 | * @var integer $index |
| 4 | 4 | */ |
| 5 | 5 | use common\models\Job; |
| 6 | + use yii\helpers\Html; | |
| 6 | 7 | use yii\jui\DatePicker; |
| 7 | 8 | use yii\widgets\ActiveForm; |
| 8 | 9 | |
| ... | ... | @@ -30,6 +31,7 @@ |
| 30 | 31 | echo $form->field ($model, '[' . $index . ']complete_count') |
| 31 | 32 | ->label ('из них реализовано') |
| 32 | 33 | ->input ('number'); |
| 34 | + echo Html::button('Удалить', ['class' => 'remove_job_button']); | |
| 33 | 35 | echo "</div></div>"; |
| 34 | 36 | $form->end (); |
| 35 | 37 | ?> | ... | ... |
frontend/views/accounts/employment.php
| ... | ... | @@ -25,9 +25,9 @@ |
| 25 | 25 | echo $form->field ($current, '[0]link') |
| 26 | 26 | ->label ('Ссылка на компанию на сайте МФП') |
| 27 | 27 | ->textInput (); |
| 28 | - echo $form->field ($current, '[0]date_start') | |
| 28 | + echo $form->field ($current, '[0]date_start', ['options' => ['class' => 'test2class']]) | |
| 29 | 29 | ->label ('Дата начала работы') |
| 30 | - ->widget (DatePicker::className (), ['language' => 'ru', 'dateFormat' => 'dd-MM-yyyy']); | |
| 30 | + ->widget (DatePicker::className (), ['options' => ['class' => 'testclass'], 'language' => 'ru', 'dateFormat' => 'dd-MM-yyyy', 'clientOptions' => ['changeYear' => true, 'yearRange' => 'c-20:c', 'changeMonth' => true]]); | |
| 31 | 31 | echo $form->field ($current, '[0]position') |
| 32 | 32 | ->label ('Должность') |
| 33 | 33 | ->textInput (); |
| ... | ... | @@ -67,6 +67,7 @@ |
| 67 | 67 | echo $form->field ($job_model, '['. ($index + 1) .']complete_count') |
| 68 | 68 | ->label ('из них реализовано') |
| 69 | 69 | ->input ('number'); |
| 70 | + echo Html::button('Удалить', ['class' => 'remove_job_button']); | |
| 70 | 71 | echo "</div>"; |
| 71 | 72 | } |
| 72 | 73 | ?> |
| ... | ... | @@ -82,11 +83,20 @@ |
| 82 | 83 | $(document).on('click', '#add_job_button', function() { |
| 83 | 84 | var inputs = $('.prev_job_inputs').last(); |
| 84 | 85 | var name = $(inputs).find('input, textarea').first().attr('name'); |
| 85 | - var lastindex = regexp.exec(name)[1]; | |
| 86 | + var result = regexp.exec(name); | |
| 87 | + var lastindex; | |
| 88 | + if(result != null) { | |
| 89 | + lastindex = result[1]; | |
| 90 | + } else { | |
| 91 | + lastindex = 1; | |
| 92 | + } | |
| 86 | 93 | $.get('/accounts/get-form', { lastindex: lastindex }, function(data) { |
| 87 | 94 | $('.prev_job_container').append($(data).find('.ajax-loaded').first().html()); |
| 88 | 95 | $(data).filter('script').appendTo('body'); |
| 89 | 96 | }); |
| 90 | 97 | }); |
| 98 | + $(document).on('click', '.remove_job_button', function() { | |
| 99 | + $(this).parents('.prev_job_inputs').remove(); | |
| 100 | + }); | |
| 91 | 101 | }); |
| 92 | 102 | </script> | ... | ... |
frontend/views/accounts/portfolio.php
| 1 | 1 | <?php |
| 2 | -use common\models\Option; | |
| 3 | -use yii\helpers\Html; | |
| 4 | -use yii\widgets\ActiveForm; | |
| 5 | -use \common\widgets\MultiLangForm; | |
| 2 | + /** | |
| 3 | + * @var PortfolioSearch $searchModel | |
| 4 | + * @var ActiveDataProvider $dataProvider | |
| 5 | + */ | |
| 6 | + use common\models\PortfolioSearch; | |
| 7 | + use yii\data\ActiveDataProvider; | |
| 8 | + use yii\grid\ActionColumn; | |
| 9 | + use yii\grid\GridView; | |
| 10 | + use yii\helpers\Html; | |
| 6 | 11 | |
| 7 | - $this->title = 'Мой профиль'; | |
| 8 | - $this->params['breadcrumbs'][] = $this->title; | |
| 12 | + $this->title = 'Портфолио'; | |
| 13 | + $this->params[ 'breadcrumbs' ][] = $this->title; | |
| 9 | 14 | ?> |
| 10 | -<h1><?= $this->title ?></h1> | |
| 11 | 15 | \ No newline at end of file |
| 16 | +<h1><?= $this->title ?></h1> | |
| 17 | +<p> | |
| 18 | + <?= Html::a(Yii::t('app', 'Добавить'), [ 'vacancy-create' ], [ 'class' => 'btn btn-success' ]) ?> | |
| 19 | +</p> | |
| 20 | +<?= GridView::widget([ | |
| 21 | + 'dataProvider' => $dataProvider, | |
| 22 | + 'filterModel' => $searchModel, | |
| 23 | + 'columns' => [ | |
| 24 | + [ | |
| 25 | + 'attribute' => 'vacancy_id', | |
| 26 | + 'label' => 'ID', | |
| 27 | + ], | |
| 28 | + 'name', | |
| 29 | + 'view_count', | |
| 30 | + [ | |
| 31 | + 'class' => ActionColumn::className(), | |
| 32 | + 'buttons' => [ | |
| 33 | + 'update' => function($url, $model, $key) { | |
| 34 | + return Html::a('Update', [ | |
| 35 | + 'vacancy-update', | |
| 36 | + 'id' => $model->vacancy_id, | |
| 37 | + ]); | |
| 38 | + }, | |
| 39 | + 'delete' => function($url, $model, $key) { | |
| 40 | + return Html::a('Delete', [ | |
| 41 | + 'vacancy-delete', | |
| 42 | + 'id' => $model->vacancy_id, | |
| 43 | + ], [ | |
| 44 | + 'title' => 'Удалить', | |
| 45 | + 'aria-label' => 'Удалить', | |
| 46 | + 'data-confirm' => 'Вы уверены, что хотите удалить этот элемент?', | |
| 47 | + 'data-method' => 'post', | |
| 48 | + 'data-pjax' => '0', | |
| 49 | + ]); | |
| 50 | + }, | |
| 51 | + ], | |
| 52 | + 'template' => '{update} {delete}', | |
| 53 | + ], | |
| 54 | + ], | |
| 55 | +]); ?> | ... | ... |
frontend/views/accounts/team.php
| ... | ... | @@ -7,58 +7,101 @@ |
| 7 | 7 | use yii\data\ActiveDataProvider; |
| 8 | 8 | use yii\grid\GridView; |
| 9 | 9 | use yii\helpers\Html; |
| 10 | + use yii\widgets\ActiveField; | |
| 10 | 11 | |
| 11 | 12 | $this->title = 'Команда'; |
| 12 | 13 | $this->params[ 'breadcrumbs' ][] = $this->title; |
| 13 | 14 | ?> |
| 14 | - <h1><?= $this->title ?></h1> | |
| 15 | - <p> | |
| 16 | - <?= Html::a(Yii::t('app', 'Добавить'), [ 'team-create' ], [ 'class' => 'btn btn-success' ]) ?> | |
| 17 | - </p> | |
| 15 | +<h1><?= $this->title ?></h1> | |
| 16 | +<p> | |
| 17 | + <?= Html::a(Yii::t('app', 'Добавить'), [ 'team-create' ], [ 'class' => 'btn btn-success' ]) ?> | |
| 18 | +</p> | |
| 18 | 19 | <?= GridView::widget([ |
| 19 | 20 | 'dataProvider' => $dataProvider, |
| 20 | 21 | 'filterModel' => $searchModel, |
| 21 | 22 | 'columns' => [ |
| 22 | 23 | [ |
| 23 | 24 | 'attribute' => 'team_id', |
| 24 | - 'label' => 'ID', | |
| 25 | + 'label' => 'ID', | |
| 25 | 26 | ], |
| 26 | 27 | [ |
| 27 | - 'value' => function($model, $key, $index, $column) { | |
| 28 | - return $model->lastname.' '.$model->firstname.' '.$model->middlename; | |
| 29 | - }, | |
| 30 | - 'label' => 'ФИО', | |
| 28 | + 'attribute' => 'user', | |
| 29 | + 'label' => 'ФИО', | |
| 31 | 30 | ], |
| 32 | 31 | [ |
| 33 | - 'value' => function($model, $key, $index, $column) { | |
| 34 | - return \Yii::$app->formatter->asBoolean(!empty($model->link)); | |
| 35 | - }, | |
| 36 | - 'label' => 'Участник МФП', | |
| 32 | + 'attribute' => 'link', | |
| 33 | + 'format' => 'boolean', | |
| 34 | + 'label' => 'Участник МФП', | |
| 35 | + 'filter' => [ | |
| 36 | + 1 => 'Да', | |
| 37 | + 0 => 'Нет', | |
| 38 | + ], | |
| 37 | 39 | ], |
| 38 | 40 | [ |
| 39 | - 'attribute' => 'department.name', | |
| 40 | - 'label' => 'Отдел компании', | |
| 41 | + 'attribute' => 'department', | |
| 42 | + 'value' => 'department.name', | |
| 43 | + 'label' => 'Отдел компании', | |
| 41 | 44 | ], |
| 42 | 45 | [ |
| 43 | - 'value' => function($model, $key, $index, $column) { | |
| 46 | + 'attribute' => 'experience_from', | |
| 47 | + 'value' => function($model, $key, $index, $column) { | |
| 44 | 48 | return \Yii::$app->formatter->asDate(time(), 'yyyy') - $model->experience_from; |
| 45 | 49 | }, |
| 46 | - 'label' => 'Опыт, лет', | |
| 50 | + 'label' => 'Опыт, лет', | |
| 51 | + 'filter' => "<div class=\"input-group input-group-xs input-daterange\">" . (new ActiveField([ | |
| 52 | + 'template' => '{input}', | |
| 53 | + 'inputOptions' => [ | |
| 54 | + 'style' => 'width:auto', | |
| 55 | + 'class' => 'form-control', | |
| 56 | + 'min' => '0', | |
| 57 | + 'max' => '100', | |
| 58 | + ], | |
| 59 | + 'options' => [ | |
| 60 | + 'tag' => 'span', | |
| 61 | + 'class' => '', | |
| 62 | + ], | |
| 63 | + 'model' => $searchModel, | |
| 64 | + 'attribute' => 'experience_from_from', | |
| 65 | + ]))->input('number') . " | |
| 66 | +<span class=\"input-group-addon kv-field-separator\"> | |
| 67 | +<i class=\"glyphicon glyphicon-resize-horizontal\"></i> | |
| 68 | +</span>" . (new ActiveField([ | |
| 69 | + 'template' => '{input}', | |
| 70 | + 'inputOptions' => [ | |
| 71 | + 'style' => 'width:auto', | |
| 72 | + 'class' => 'form-control', | |
| 73 | + 'min' => '0', | |
| 74 | + 'max' => '100', | |
| 75 | + ], | |
| 76 | + 'options' => [ | |
| 77 | + 'tag' => 'span', | |
| 78 | + 'class' => '', | |
| 79 | + ], | |
| 80 | + 'model' => $searchModel, | |
| 81 | + 'attribute' => 'experience_from_to', | |
| 82 | + ]))->input('number') . " | |
| 83 | +</div>", | |
| 47 | 84 | ], |
| 48 | - 'team_id', | |
| 49 | - 'user_id', | |
| 50 | - 'firstname', | |
| 51 | - 'lastname', | |
| 52 | - 'middlename', | |
| 53 | - // 'link', | |
| 54 | - // 'position', | |
| 55 | - // 'department_id', | |
| 56 | - // 'date_add', | |
| 57 | - // 'user_add_id', | |
| 58 | - // 'photo', | |
| 59 | - // 'country_id', | |
| 60 | - // 'experience_from', | |
| 85 | + 'position', | |
| 86 | + 'country_id', | |
| 61 | 87 | |
| 62 | - [ 'class' => 'yii\grid\ActionColumn' ], | |
| 88 | + [ | |
| 89 | + 'class' => 'yii\grid\ActionColumn', | |
| 90 | + 'buttons' => [ | |
| 91 | + 'update' => function($url, $model, $key) { | |
| 92 | + return Html::a('Update', ['team-update', 'id' => $model->team_id]); | |
| 93 | + }, | |
| 94 | + 'delete' => function($url, $model, $key) { | |
| 95 | + return Html::a('Delete', ['team-delete', 'id' => $model->team_id], [ | |
| 96 | + 'title' => 'Удалить', | |
| 97 | + 'aria-label' => 'Удалить', | |
| 98 | + 'data-confirm' => 'Вы уверены, что хотите удалить этот элемент?', | |
| 99 | + 'data-method' => 'post', | |
| 100 | + 'data-pjax' => '0', | |
| 101 | + ]); | |
| 102 | + }, | |
| 103 | + ], | |
| 104 | + 'template' => '{update} {delete}' | |
| 105 | + ], | |
| 63 | 106 | ], |
| 64 | -]); ?> | |
| 65 | 107 | \ No newline at end of file |
| 108 | +]); ?> | ... | ... |
| 1 | +<?php | |
| 2 | + /** | |
| 3 | + * @var VacancySearch $searchModel | |
| 4 | + * @var ActiveDataProvider $dataProvider | |
| 5 | + */ | |
| 6 | + use common\models\VacancySearch; | |
| 7 | + use yii\data\ActiveDataProvider; | |
| 8 | + use yii\grid\ActionColumn; | |
| 9 | + use yii\grid\GridView; | |
| 10 | + use yii\helpers\Html; | |
| 11 | + | |
| 12 | + $this->title = 'Вакансии'; | |
| 13 | + $this->params[ 'breadcrumbs' ][] = $this->title; | |
| 14 | +?> | |
| 15 | +<h1><?= $this->title ?></h1> | |
| 16 | +<p> | |
| 17 | + <?= Html::a(Yii::t('app', 'Добавить'), [ 'vacancy-create' ], [ 'class' => 'btn btn-success' ]) ?> | |
| 18 | +</p> | |
| 19 | +<?= GridView::widget([ | |
| 20 | + 'dataProvider' => $dataProvider, | |
| 21 | + 'filterModel' => $searchModel, | |
| 22 | + 'columns' => [ | |
| 23 | + [ | |
| 24 | + 'attribute' => 'vacancy_id', | |
| 25 | + 'label' => 'ID', | |
| 26 | + ], | |
| 27 | + 'name', | |
| 28 | + 'view_count', | |
| 29 | + [ | |
| 30 | + 'class' => ActionColumn::className(), | |
| 31 | + 'buttons' => [ | |
| 32 | + 'update' => function($url, $model, $key) { | |
| 33 | + return Html::a('Update', ['vacancy-update', 'id' => $model->vacancy_id]); | |
| 34 | + }, | |
| 35 | + 'delete' => function($url, $model, $key) { | |
| 36 | + return Html::a('Delete', ['vacancy-delete', 'id' => $model->vacancy_id], [ | |
| 37 | + 'title' => 'Удалить', | |
| 38 | + 'aria-label' => 'Удалить', | |
| 39 | + 'data-confirm' => 'Вы уверены, что хотите удалить этот элемент?', | |
| 40 | + 'data-method' => 'post', | |
| 41 | + 'data-pjax' => '0', | |
| 42 | + ]); | |
| 43 | + }, | |
| 44 | + ], | |
| 45 | + 'template' => '{update} {delete}' | |
| 46 | + ] | |
| 47 | + ] | |
| 48 | +]); ?> | ... | ... |