public function runUpdateUser(framework\Request $request) { try { $user = entities\User::getB2DBTable()->selectByID($request['user_id']); if ($user instanceof entities\User) { if (!$user->isConfirmedMemberOfScope(framework\Context::getScope())) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => $this->getI18n()->__('This user is not a confirmed member of this scope'))); } if (!empty($request['username'])) { $testuser = entities\User::getByUsername($request['username']); if (!$testuser instanceof entities\User || $testuser->getID() == $user->getID()) { $user->setUsername($request['username']); } else { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => $this->getI18n()->__('This username is already taken'))); } } $password_changed = false; if ($request['password_action'] == 'change' && $request['new_password_1'] && $request['new_password_2']) { if ($request['new_password_1'] == $request['new_password_2']) { $user->setPassword($request['new_password_1']); $password_changed = true; } else { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => $this->getI18n()->__('Please enter the new password twice'))); } } elseif ($request['password_action'] == 'random') { $random_password = entities\User::createPassword(); $user->setPassword($random_password); $password_changed = true; } if (isset($request['realname'])) { $user->setRealname($request['realname']); } $return_options = array(); try { if ($group = entities\Group::getB2DBTable()->selectById($request['group'])) { if ($user->getGroupID() != $group->getID()) { $groups = array($user->getGroupID(), $group->getID()); $return_options['update_groups'] = array('ids' => array(), 'membercounts' => array()); } $user->setGroup($group); } } catch (\Exception $e) { throw new \Exception($this->getI18n()->__('Invalid user group')); } $existing_teams = array_keys($user->getTeams()); $new_teams = array(); $new_clients = array(); $user->clearTeams(); try { foreach ($request->getParameter('teams', array()) as $team_id => $team) { if ($team = entities\Team::getB2DBTable()->selectById($team_id)) { $new_teams[] = $team_id; $user->addToTeam($team); } } } catch (\Exception $e) { throw new \Exception($this->getI18n()->__('One or more teams were invalid')); } try { $user->clearClients(); foreach ($request->getParameter('clients', array()) as $client_id => $client) { if ($client = entities\Client::getB2DBTable()->selectById($client_id)) { $new_clients[] = $client_id; $user->addToClient($client); } } } catch (\Exception $e) { throw new \Exception($this->getI18n()->__('One or more clients were invalid')); } if (isset($request['nickname'])) { $user->setBuddyname($request['nickname']); } if (isset($request['email'])) { $user->setEmail($request['email']); } if (isset($request['homepage'])) { $user->setHomepage($request['homepage']); } if (framework\Context::getScope()->isDefault()) { $user->setActivated((bool) $request['activated']); $user->setEnabled((bool) $request['enabled']); } $user->save(); if (isset($groups)) { foreach ($groups as $group_id) { if (!$group_id) { continue; } $return_options['update_groups']['ids'][] = $group_id; $return_options['update_groups']['membercounts'][$group_id] = entities\Group::getB2DBTable()->selectById($group_id)->getNumberOfMembers(); } } if ($new_teams != $existing_teams) { $new_team_ids = array_diff($new_teams, $existing_teams); $existing_team_ids = array_diff($existing_teams, $new_teams); $teams_to_update = array_merge($new_team_ids, $existing_team_ids); $return_options['update_teams'] = array('ids' => array(), 'membercounts' => array()); foreach ($teams_to_update as $team_id) { $return_options['update_teams']['ids'][] = $team_id; $return_options['update_teams']['membercounts'][$team_id] = entities\Team::getB2DBTable()->selectById($team_id)->getNumberOfMembers(); } } $template_options = array('user' => $user); if (isset($random_password)) { $template_options['random_password'] = $random_password; } $return_options['content'] = $this->getComponentHTML('configuration/finduser_row', $template_options); $return_options['title'] = $this->getI18n()->__('User updated!'); if ($password_changed) { $return_options['message'] = $this->getI18n()->__('The password was changed'); } return $this->renderJSON($return_options); } } catch (\Exception $e) { $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => $this->getI18n()->__('This user could not be updated: %message', array('%message' => $e->getMessage())))); } $this->getResponse()->setHttpStatus(400); return $this->renderJSON(array('error' => $this->getI18n()->__('This user could not be updated'))); }
public function listen_registerUser(framework\Event $event) { if ($this->isActivationNeeded() && $this->isOutgoingNotificationsEnabled()) { $user = $event->getSubject(); $password = User::createPassword(8); $user->setPassword($password); $user->setActivated(false); $user->save(); if ($user->getEmail()) { // The following line is included for the i18n parser to pick up the translatable string: // __('User account registered with The Bug Genie'); $subject = 'User account registered with The Bug Genie'; $link_to_activate = $this->generateURL('activate', array('user' => str_replace('.', '%2E', $user->getUsername()), 'key' => $user->getActivationKey())); $parameters = compact('user', 'password', 'link_to_activate'); $messages = $this->getTranslatedMessages('registeruser', $parameters, array($user), $subject); foreach ($messages as $message) { $this->sendMail($message); } } $event->setProcessed(); } }
public function runAccountPickUsername(framework\Request $request) { if (entities\User::isUsernameAvailable($request['selected_username'])) { $user = $this->getUser(); $user->setUsername($request['selected_username']); $user->setOpenIdLocked(false); $user->setPassword(entities\User::createPassword()); $user->save(); $this->getResponse()->setCookie('tbg3_username', $user->getUsername()); $this->getResponse()->setCookie('tbg3_password', $user->getPassword()); framework\Context::setMessage('username_chosen', true); $this->forward($this->getRouting()->generate('account')); } framework\Context::setMessage('error', $this->getI18n()->__('Could not pick the username "%username"', array('%username' => $request['selected_username']))); $this->forward($this->getRouting()->generate('account')); }