예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 /**
  * 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);
 }
예제 #3
0
 /**
  * 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;
 }
예제 #4
0
 public function saveFeature($feature)
 {
     $this->dbService->updateObject($feature);
 }