/** * Set user by xml definition. Return XML * * @access public * @param string $xmlInput XML definition to define user properties * @return boolean True on success, false on failure */ function setSoapValues($domdocument) { $view = CMS_view::getInstance(); $contactData = new CMS_contactData(); $currentPassword = ''; $newGroups = array(); foreach ($domdocument->childNodes as $childNode) { if ($childNode->nodeType == XML_ELEMENT_NODE) { switch ($childNode->tagName) { case 'contactData': foreach ($childNode->childNodes as $cdChildNode) { if ($cdChildNode->nodeType == XML_ELEMENT_NODE) { if (!$contactData->setValue($cdChildNode->tagName, $cdChildNode->nodeValue)) { $view->addError('Invalid value for contactData tag ' . $cdChildNode->tagName . ' and value ' . $cdChildNode->nodeValue); return false; } } elseif ($cdChildNode->nodeType == XML_TEXT_NODE && trim($cdChildNode->nodeValue)) { $view->addError('Unknown xml content contactData tag ' . $cdChildNode->nodeValue . ' to process.'); return false; } } break; case 'groups': foreach ($childNode->childNodes as $groupChildNode) { if ($groupChildNode->nodeType == XML_ELEMENT_NODE) { $group = CMS_profile_usersGroupsCatalog::getByID($groupChildNode->nodeValue); if ($group && !$group->hasError()) { $newGroups[$group->getGroupId()] = $group->getGroupId(); } else { $view->addError('Unknown group ID ' . $groupChildNode->nodeValue . '.'); return false; } } elseif ($cdChildNode->nodeType == XML_TEXT_NODE && trim($cdChildNode->nodeValue)) { $view->addError('Unknown xml content contactData tag ' . $cdChildNode->nodeValue . ' to process.'); return false; } } break; default: if (!$this->setValue($childNode->tagName, $childNode->nodeValue)) { $view->addError('Invalid value for tag ' . $childNode->tagName . ' and value ' . $childNode->nodeValue); return false; } if ($childNode->tagName == 'password') { $currentPassword = $childNode->nodeValue; } break; } } elseif ($childNode->nodeType == XML_TEXT_NODE && trim($childNode->nodeValue)) { $view->addError('Unknown xml content tag ' . $childNode->nodeValue . ' to process.'); return false; } } // Check user required fields. if ($this->hasError()) { $view->addError('Values to set are invalid.'); return false; } if ($currentPassword == $this->getValue('login')) { $view->addError('Login and password must be different.'); return false; } if ($this->getValue('login') && $contactData->getValue('email')) { // Save contact data object if ($contactData->writeToPersistence() && $this->setValue('contactData', $contactData)) { // Get current user groups ids $userGroupIds = CMS_profile_usersGroupsCatalog::getGroupsOfUser($this, true, true); // First reset profile clearances $this->resetClearances(); // Second, loop through user groups to remove group foreach ($userGroupIds as $oldGroupId) { if (!in_array($oldGroupId, $newGroups)) { // Remove user to group $oldGroup = CMS_profile_usersGroupsCatalog::getByID($oldGroupId); if (!$oldGroup->removeUser($this) || !$oldGroup->writeToPersistence()) { $view->addError('Error deleting user\'s group : ' . $oldGroupId); return false; } } } // Third, loop through user groups to add groups foreach ($newGroups as $newGroupId) { if (!in_array($newGroupId, $userGroupIds)) { $newGroup = CMS_profile_usersGroupsCatalog::getByID($newGroupId); if ($newGroup && !$newGroup->hasError()) { // Add group to user $this->addGroup($newGroupId); } else { $view->addError('Error adding user\'s group : ' . $newGroupId); return false; } } } //Clear polymod cache //CMS_cache::clearTypeCacheByMetas('polymod', array('resource' => 'users')); CMS_cache::clearTypeCache('polymod'); return true; } else { $view->addError('Error saving contactData.'); return false; } } else { $view->addError('Missing values to set user. Check the login, password and email.'); } return false; }