/** * get an object value * * @param string $name : the name of the value to get * @param string $parameters (optional) : parameters for the value to get * @return multidimentionnal array : the object values structure * @access public */ function getValue($name, $parameters = '') { global $cms_language; $params = $this->getParamsValues(); $name = $name !== 0 ? $name : "0"; switch ($name) { case 'ids': $ids = array(); foreach (array_keys($this->_subfieldValues) as $subFieldID) { if (is_object($this->_subfieldValues[$subFieldID])) { $ids[] = $this->_subfieldValues[$subFieldID]->getValue(); } } return $ids; break; case 'values': return $this->_subfieldValues; break; case 'count': return sizeof($this->_subfieldValues); break; default: if (sensitiveIO::isPositiveInteger($name) || $name === "0") { if (!is_object($this->_subfieldValues[$name])) { return ''; } switch ($parameters) { case 'id': return $this->_subfieldValues[$name]->getValue(); break; case 'label': //load user/group $userGroup = $params['isGroup'] ? CMS_profile_usersGroupsCatalog::getByID($this->_subfieldValues[$name]->getValue()) : CMS_profile_usersCatalog::getByID($this->_subfieldValues[$name]->getValue()); if (is_object($userGroup) && !$userGroup->hasError()) { return $params['isGroup'] ? io::htmlspecialchars($userGroup->getLabel()) : io::htmlspecialchars($userGroup->getFirstName() . ' ' . $userGroup->getLastName()); } return ''; break; case 'email': //load user/group $userGroup = $params['isGroup'] ? CMS_profile_usersGroupsCatalog::getByID($this->_subfieldValues[$name]->getValue()) : CMS_profile_usersCatalog::getByID($this->_subfieldValues[$name]->getValue()); if (is_object($userGroup) && !$userGroup->hasError()) { return $params['isGroup'] ? '' : io::htmlspecialchars($userGroup->getEmail()); } return ''; break; } } else { if (!isset($this->_subfieldValues[0]) || !is_object($this->_subfieldValues[0])) { return ''; } switch ($name) { case 'label': //load user/group $userGroup = $params['isGroup'] ? CMS_profile_usersGroupsCatalog::getByID($this->_subfieldValues[0]->getValue()) : CMS_profile_usersCatalog::getByID($this->_subfieldValues[0]->getValue()); if (is_object($userGroup) && !$userGroup->hasError()) { return $params['isGroup'] ? io::htmlspecialchars($userGroup->getLabel()) : io::htmlspecialchars($userGroup->getFirstName() . ' ' . $userGroup->getLastName()); } return ''; break; case 'email': //load user/group $userGroup = $params['isGroup'] ? CMS_profile_usersGroupsCatalog::getByID($this->_subfieldValues[0]->getValue()) : CMS_profile_usersCatalog::getByID($this->_subfieldValues[0]->getValue()); if (is_object($userGroup) && !$userGroup->hasError()) { return $params['isGroup'] ? '' : io::htmlspecialchars($userGroup->getEmail()); } return ''; break; case 'id': return $this->_subfieldValues[0]->getValue(); break; default: return parent::getValue($name, $parameters); break; } } break; } }
if ($userId) { $user = CMS_profile_usersCatalog::getByID($userId); if (!$user || $user->hasError()) { $user = false; } } if (is_a($group, "CMS_profile_usersGroup") && is_a($user, "CMS_profile_user")) { //Get current user groups ids $userGroupIds = CMS_profile_usersGroupsCatalog::getGroupsOfUser($user, true, true); //first reset profile clearances $user->resetClearances(); //then loop through user groups foreach ($userGroupIds as $userGroupId) { if ($userGroupId == $groupId) { //remove user to group $oldGroup = CMS_profile_usersGroupsCatalog::getByID($groupId); if ($oldGroup->removeUser($user)) { $oldGroup->writeToPersistence(); } } else { //add group to user $user->addGroup($userGroupId); } } //then write user profile into persistence $user->writeToPersistence(); $log = new CMS_log(); $log->logMiscAction(CMS_log::LOG_ACTION_PROFILE_USER_EDIT, $cms_user, "User : "******" (remove group to user)"); } else { $cms_message = $cms_language->getMessage(MESSAGE_PAGE_USER_OR_GROUP_UNKNOWN); }
/** * Add a given group to user * * @param mixed $group : the group to add or the group id to add * @return boolean * @access public */ function addGroup($group) { if (sensitiveIO::isPositiveInteger($group)) { //instanciate group to add $group = CMS_profile_usersGroupsCatalog::getByID($group); } if (!is_a($group, 'CMS_profile_usersGroup')) { $this->raiseError('Invalid group value to add : ' . $group); return false; } return $group->addToUserAndWriteToPersistence($this); }
/** * 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; }