示例#1
0
 /**
  * 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;
 }