public function eventUpdateTags($event) { $partner = $this->owner; if ($data = Yii::$app->request->post($partner->formName())) { // FIXME foreach ($this->tagTypes as $type) { $key = $type . 'Str'; if (isset($data[$key])) { $tags = $this->parseTagsStr($data[$key]); $partner_tags = $partner->{$type}; // Remove foreach ($partner_tags as $partner_tag) { if (!in_array($partner_tag->name, $tags)) { $partner->unlink('tags', $partner_tag, true); $partner_tag->gc(); } } // Add existing $mtags = Tag::find()->where(['name' => $tags])->{$type}()->all(); foreach ($mtags as $mtag) { if (!in_array($mtag, $partner_tags)) { $partner->link('tags', $mtag); } unset($tags[array_search($mtag->name, $tags)]); } // Add new foreach ($tags as $tag) { $mtag = new Tag(); $mtag->name = $tag; if ($type == 'personalTags') { $mtag->setToPersonal(); } $mtag->save(); $partner->link('tags', $mtag); } } } } }