public function Tinhte_XenTag_execute(XenForo_DataWriter $dw)
 {
     if ($dw->isChanged('tags')) {
         return;
     }
     /** @var Tinhte_XenTag_XenForo_DataWriter_Discussion_Thread $dw */
     if (empty($this->_data['actions']['tinhte_xentag'])) {
         return;
     }
     $data = $this->_data['actions']['tinhte_xentag'];
     if (empty($data['remove']) && empty($data['add']) && empty($data['replace']) && empty($data['remove_all'])) {
         return;
     }
     /** @var XenForo_Model_Tag $tagModel */
     $tagModel = $dw->getModelFromCache('XenForo_Model_Tag');
     $tagger = $tagModel->getTagger('thread');
     $tagger->setContent($dw->get('thread_id'))->setPermissionsFromContext($dw->getMergedData(), $dw->Tinhte_XenTag_getForumData());
     if (!empty($data['remove'])) {
         $tagTexts = $tagModel->splitTags($data['remove']);
         $tagger->removeTags($tagTexts, false);
     }
     if (!empty($data['add'])) {
         $tagTexts = $tagModel->splitTags($data['add']);
         $tagger->addTags($tagTexts);
     }
     if (!empty($data['replace'])) {
         $tagTexts = $tagModel->splitTags($data['replace']);
         $tagger->setTags($tagTexts, false);
     } elseif (!empty($data['remove_all'])) {
         $tagger->setTags(array(), false);
     }
     $tagger->save();
 }