skeeks\cms\models\behaviors\HasTrees::afterSaveTree PHP Method

afterSaveTree() public method

public afterSaveTree ( yii\db\AfterSaveEvent $event )
$event yii\db\AfterSaveEvent
    public function afterSaveTree($event)
    {
        if ($this->owner->_tree_ids === null) {
            return $this;
        }
        //Старые атрибуты
        $oldIds = (array) ArrayHelper::map($this->owner->elementTrees, $this->attributeTreeName, $this->attributeTreeName);
        $newIds = (array) $this->owner->treeIds;
        //Новые
        //Если старых не было, просто записать новые
        $writeIds = [];
        $deleteIds = [];
        if (!$oldIds) {
            $writeIds = $newIds;
        } else {
            foreach ($oldIds as $oldId) {
                //Старый элемент есть в новом массиве, его не трогаем он остается
                if (in_array($oldId, $newIds)) {
                } else {
                    $deleteIds[] = $oldId;
                    //Иначе его надо удалить.
                }
            }
            foreach ($newIds as $newId) {
                //Если новый элемент уже был, то ничего не делаем
                if (in_array($newId, $oldIds)) {
                } else {
                    $writeIds[] = $newId;
                    //Иначе запишем
                }
            }
        }
        //Есть элементы на удаление
        if ($deleteIds) {
            $elementTrees = $this->owner->getElementTrees()->andWhere([$this->attributeTreeName => $deleteIds])->limit(count($deleteIds))->all();
            foreach ($elementTrees as $elementTree) {
                $elementTree->delete();
            }
        }
        //Есть элементы на запись
        if ($writeIds) {
            $className = $this->elementTreesClassName;
            foreach ($writeIds as $treeId) {
                if ($treeId) {
                    $elementTree = new $className([$this->attributeElementName => $this->owner->id, $this->attributeTreeName => $treeId]);
                    $elementTree->save(false);
                }
            }
        }
        $this->owner->_tree_ids = null;
    }