Example #1
0
 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);
                 }
             }
         }
     }
 }