/** * Resets a user's password * @return boolean whether the user was found */ public function resetPassword($email, $notify = true) { if (is_string($email)) { $fields = array('email' => $email); $user = $this->dbService->getByField($fields, $this->userClass); if ($user == null) { return false; } } else { $user = $email; $email = $user->email; } // store it, then create a URL that will directly auth that ticket, letting them login and // change their password $user->ticket = $this->generateTicket($email); $this->dbService->updateObject($user); //exit("Updating user ".print_r($user, true)." to $new_pass"); $ticketLogin = build_url('user', 'edit', '', true) . '?ticket=' . $user->ticket . '&user='******'password-reset', $email); if ($notify) { include_once 'Zend/Mail.php'; $msg = "Hi {$user->username},\n\r"; $msg .= "A request was made to reset your password. To do so, please follow the following URL and reset it.\r\n"; $msg .= "Login at {$ticketLogin}\r\n"; $mail = new Zend_Mail(); $mail->setBodyText($msg); $mail->setFrom(za()->getConfig('from_email'), za()->getConfig('name')); $mail->addTo($email); $mail->setSubject('Your account password'); $mail->send(); } return true; }
/** * Make a user an admin * * @param NovemberUser $user */ public function setUserRole(CrmUser $user, $role = null) { if (!$role) { $role = User::ROLE_USER; } $user->role = $role; $this->trackerService->track('set-role', $role . '_user-' . $user->id . '_by-' . za()->getUser()->getId()); $this->dbService->updateObject($user); }
/** * Saves an issue to the database * * @param array|Issue $params */ public function saveIssue($params, $doNotify = true) { $issue = null; $sendNotification = false; if (is_array($params)) { $existingId = ifset($params, 'id'); } else { $existingId = $params->id; } if (!$existingId) { $sendNotification = true; } $oldIssue = null; // If there's an existing one, save it in the history if ($existingId) { $oldIssue = $this->getIssue($existingId); $this->versioningService->createVersion($oldIssue); } // If saving a new one, we want to $issue = $this->dbService->saveObject($params, 'Issue'); // Okay, now check if it's on a project or not $project = null; if (!$issue->projectid) { // Get the project $client = $this->clientService->getClient($issue->clientid); if (!$client) { throw new Exception("No client exists with ID {$issue->clientid}"); } $project = $this->clientService->getClientSupportProject($client); if (!$project) { throw new Exception("Missing client details for request {$issue->title}"); } $issue->projectid = $project->id; $this->dbService->updateObject($issue); } else { $project = $this->projectService->getProject($issue->projectid); } // make sure it's assigned to someone if (!mb_strlen($issue->userid)) { if (!$project) { $project = $this->projectService->getProject($issue->projectid); } $issue->userid = $project->manager; $this->dbService->updateObject($issue); } // Check to see if the assignee has a watch, if not, add one $assignedTo = $this->userService->getByName($issue->userid); if ($assignedTo) { $existing = $this->notificationService->getWatch($assignedTo, $issue->id, 'Issue'); if (!$existing) { $this->notificationService->createWatch($assignedTo, $issue->id, 'Issue'); } } $this->log->debug("Saving request, notify {$issue->userid} = " . $sendNotification); $this->trackerService->track('create-issue', $issue->id); // now send a notification to those users in the // group assigned to the project the issue was just saved against. if ($sendNotification && $doNotify) { // create and assign a task to whoever was assigned to the issue // by default if ($assignedTo && false) { // Create the task $task = new Task(); $task->projectid = $issue->projectid; $task->userid = array($assignedTo->username); $task->title = 'Respond to request "' . $issue->title . '"'; $task->description = "Please investigate this request:\r\n\r\n" . $issue->description; $task->category = 'Support'; $task->due = date('Y-m-d H:i:s', strtotime('+2 days')); // $task = $this->projectService->saveTask($task, false, true); // $this->itemLinkService->linkItems($issue, $task); } $this->log->debug("Notifying users about new request {$issue->title}"); $this->notifyOfNewIssue($issue); // Add a watch for the current user. Note that it might be null if // this issue is created from an email $user = za()->getUser(); if ($user) { $this->notificationService->createWatch($user, $issue->id, 'Issue'); } } if ($issue->status == Issue::STATUS_CLOSED) { // remove notifications $subscribers = $this->notificationService->getSubscribers($issue); foreach ($subscribers as $username => $item) { $user = $this->userService->getUserByField('username', $username); if ($user) { $this->notificationService->removeWatch($user, $issue->id, 'Issue'); } } } // See if the status has changed and notify the creator if ($oldIssue != null && $oldIssue->status != $issue->status && $doNotify) { try { $this->notifyOfUpdatedIssue($oldIssue, $issue); } catch (Exception $e) { $this->log->warn("Failed to notify of request update"); } } return $issue; }
public function saveFeature($feature) { $this->dbService->updateObject($feature); }