public function save($memberId) { $values = $this->getValues(); foreach ($values as $key => $value) { $profile = Doctrine::getTable('Profile')->retrieveByName($key); if (!$profile) { continue; } $memberProfile = Doctrine::getTable('MemberProfile')->retrieveByMemberIdAndProfileId($memberId, $profile->getId()); if (!$memberProfile) { $memberProfile = new MemberProfile(); $memberProfile->setMemberId($memberId); $memberProfile->setProfileId($profile->getId()); } $memberProfile->setPublicFlag($memberProfile->getProfile()->getDefaultPublicFlag()); if (isset($value['public_flag'])) { $memberProfile->setPublicFlag($value['public_flag']); } $memberProfile->save(); if ($profile->isMultipleSelect()) { $children = $memberProfile->getNode()->getChildren(); if (count($children) < count($value['value'])) { $n = count($value['value']) - count($children); for ($i = 0; $i < $n; ++$i) { $childProfile = new MemberProfile(); $childProfile->setMemberId($memberId); $childProfile->setProfileId($profile->getId()); $childProfile->getNode()->insertAsLastChildOf($memberProfile); $childProfile->save(); } } $children = $memberProfile->getNode()->getChildren(); if ('date' === $profile->getFormType()) { foreach ($children as $child) { $child->setValue(null); $child->save(); } $_values = array_map('intval', explode('-', $value['value'])); $options = $profile->getProfileOption(); foreach ($_values as $i => $value) { $children[$i]->setValue($value); $children[$i]->save(); } } else { foreach ($children as $child) { $child->setProfileOptionId(null); $child->save(); } foreach ($value['value'] as $i => $v) { $children[$i]->setProfileOptionId($v); $children[$i]->save(); } } } else { $memberProfile->setValue($value['value']); } $children = $memberProfile->getNode()->getChildren(); foreach ($children as $child) { if ('' === $child->_get('value') && is_null($child->get('profile_option_id'))) { $child->getNode()->delete(); } } $memberProfile->save(); } return true; }
public function createChild(Doctrine_Record $parent, $memberId, $profileId, $optionIds, $values = array()) { $parent->clearChildren(); foreach ($optionIds as $i => $optionId) { $childProfile = new MemberProfile(); $childProfile->setMemberId($memberId); $childProfile->setProfileId($profileId); $childProfile->setProfileOptionId($optionId); if (isset($values[$i])) { $childProfile->setValue($values[$i]); } $childProfile->getNode()->insertAsLastChildOf($parent); $childProfile->save(); } }