public function processFormAttributes() { $formVars = $this->usePostVars ? $_POST : $_GET; if (isset($formVars[EMBConst::FIELDNAME_PAGEBEHAVIOR])) { $labelsField = $this->getFieldName('labels'); $labelsHash = $this->getFieldName('labelsHash'); $oldValueField = $this->getFieldName('old_' . $this->attribute); $itemBeforeField = $this->getFieldName('itemBefore'); $menuItemsField = $this->getFieldName($this->attribute); $oldLabelsHash = isset($formVars[$labelsHash]) ? $formVars[$labelsHash] : null; $oldValue = isset($formVars[$oldValueField]) ? $formVars[$oldValueField] : null; list($oldMenuId, $oldMenuitemId, $oldInsertBefore) = $this->decodeAttributeValue($oldValue); list($newMenuId, $newItemId) = explode(EMBDropDownList::KEYS_SEPARATOR, $formVars[$menuItemsField]); $newInsertBefore = !empty($formVars[$itemBeforeField]) ? true : false; $newValue = $newMenuId . EMBDropDownList::KEYS_SEPARATOR . $newItemId . EMBDropDownList::KEYS_SEPARATOR . $newInsertBefore; $newLabels = isset($formVars[$labelsField]) ? $formVars[$labelsField] : null; $newLabelsHash = $this->getLabelsHash($newLabels); $menuChanged = $newMenuId != $oldMenuId; $labelsChanged = $newLabelsHash != $oldLabelsHash; $valueChanged = $newValue != $oldValue; if ($valueChanged) { $this->getOwner()->setAttribute($this->attribute, $newValue); if ($menuChanged) { $this->initMenuData($oldValue); //load with old values if (!empty($this->_menu) && !empty($this->_menuitemId)) { $nestedConfig = $this->_menu->nestedconfig; $this->_menu->nestedconfig = EMBNestedConfigUtil::removeId($nestedConfig, $this->_menuitemId); $this->_menu->save(); } } $this->initMenuData(); //load with new values if (!empty($this->_menu)) { $nestedConfig = $this->_menu->nestedconfig; if ($oldValue == null) { $newItem = $this->createMenuItem(array('labels' => $newLabels, 'url' => $this->getOwner()->getActionView())); $newItem->save(); } else { $newItem = $this->_menuItem; if (!empty($newItem)) { if ($labelsChanged && !empty($newItem)) { $newItem->labels = $newLabels; $newItem->url = $this->getOwner()->getActionView(); $newItem->save(); } elseif (Yii::app()->createUrl($this->getOwner()->getActionView()) != $newItem->url) { $newItem->url = $this->getOwner()->getActionView(); $newItem->save(); } } } if (!empty($newItem)) { if ($newInsertBefore) { $this->_menu->nestedconfig = EMBNestedConfigUtil::moveBefore($nestedConfig, $newItemId, $newItem->itemid); } else { $this->_menu->nestedconfig = EMBNestedConfigUtil::moveAfter($nestedConfig, $newItemId, $newItem->itemid); } $this->_menu->save(); } } } else { if ($labelsChanged) { $this->initMenuData(); //load with new values if (!empty($this->_menuItem)) { $this->_menuItem->labels = $newLabels; $this->_menuItem->url = $this->getOwner()->getActionView(); $this->_menuItem->save(); } } } } }