/** * Autocomplete wiki title. * @param integer $ign ignore suggests from wiki page id * @param string $q */ public function actionWikiSuggest($ign = '', $q = '') { Yii::$app->response->format = Response::FORMAT_JSON; $query = Wiki::find()->andFilterWhere(['like', 'title', $q])->orderBy('title')->limit(10); if ($ign) { /** @var $wiki Wiki */ $wiki = $this->findModel(Wiki::className(), $ign); $children = $wiki->getChildrenAll(function ($query) { $query->select('id'); }); $childrenIds = array_map(function ($child) { return $child->id; }, $children); $query->where(['!=', 'id', $wiki->id])->andWhere(['not in', 'id', $childrenIds]); } $wikis = $query->all(); return array_map(function (Wiki $wiki) { return ['id' => $wiki->id, 'text' => $wiki->title]; }, $wikis); }
/** * @inheritdoc */ public function rules() { return [['mode', 'required', 'message' => 'Select how to delete pages.'], ['mode', 'integer'], ['mode', 'in', 'range' => [self::DELETE_CHILDREN, self::DELETE_MOVEUP, self::DELETE_MOVEID]], ['mode', 'validateMode'], ['parentId', 'integer'], ['parentId', 'exist', 'when' => function (DeleteWiki $model) { return $model->mode == self::DELETE_MOVEID; }, 'targetClass' => Wiki::className(), 'targetAttribute' => ['parentId' => 'id']]]; }
/** * @return ActiveQuery */ public function getWiki() { return $this->hasOne(Wiki::className(), ['id' => 'wiki_id']); }