Beispiel #1
0
 /**
  * Method to render the view.
  *
  * @return  string  The rendered view.
  *
  * @throws  RuntimeException
  */
 public function render()
 {
     $this->item = $this->model->getIssue();
     $user = JFactory::getUser();
     if ($this->item) {
         if (!in_array($this->item->access, $user->getAuthorisedViewLevels())) {
             throw new Exception(JText::_('JERROR_ALERTNOAUTHOR'), 403);
         }
         $this->canEditIssue = $this->model->canEdit($user, $this->item->id);
     }
     if ($this->getLayout() == null) {
         $this->setLayout('edit');
     }
     $this->form = $this->model->getForm();
     // Attachments
     $this->attachments = $this->model->getAttachments();
     $this->addToolbar();
     return parent::render();
 }
Beispiel #2
0
 /**
  * Method to render the view.
  *
  * @return  string  The rendered view.
  *
  * @throws  RuntimeException
  */
 public function render()
 {
     $this->item = $this->model->getIssue();
     $user = JFactory::getUser();
     $app = JFactory::getApplication();
     if ($this->item) {
         if (!in_array($this->item->access, $user->getAuthorisedViewLevels())) {
             if ($user->guest && $this->params->get('redirect_login', 1)) {
                 $app->enqueueMessage(JText::_('JGLOBAL_YOU_MUST_LOGIN_FIRST'), 'error');
                 $app->redirect(JRoute::_('index.php?option=com_users&view=login&return=' . base64_encode(JUri::getInstance()->toString()), '403'));
             } else {
                 throw new Exception(JText::_('JERROR_ALERTNOAUTHOR'), 403);
             }
         }
         $this->canEditIssue = $this->model->canEdit($user, $this->item->id);
         // Title
         if ($this->layout === 'edit') {
             $this->defaultTitle = JText::sprintf('COM_MONITOR_EDIT_ISSUE', $this->item->title);
         } else {
             $this->defaultTitle = $this->escape($this->item->title);
         }
         // Avatar
         if (JPluginHelper::isEnabled('user', 'cmavatar')) {
             // Include the CMAvatar plugin.
             require_once JPATH_PLUGINS . '/user/cmavatar/helper.php';
             $this->avatars = array();
             $this->avatars[$this->item->author_id] = PlgUserCMAvatarHelper::getAvatar($this->item->author_id);
         }
         // Buttons
         if ($this->getLayout() === 'default') {
             if ($this->canEditIssue) {
                 $this->buttons['edit'] = array('url' => 'index.php?option=com_monitor&task=issue.edit&id=' . $this->item->id, 'text' => 'JGLOBAL_EDIT', 'title' => 'JGLOBAL_EDIT', 'icon' => 'icon-pencil-2');
             }
             if ($this->params->get('enable_notifications', 1) && !$user->guest) {
                 $subscribed = $this->modelSubscription->isSubscriberIssue($this->item->id, $user->id);
                 $task = $subscribed ? 'unsubscribe' : 'subscribe';
                 $this->buttons['subscribe'] = array('url' => 'index.php?option=com_monitor&task=issue.' . $task . '&id=' . $this->item->id, 'text' => $subscribed ? 'COM_MONITOR_UNSUBSCRIBE_ISSUE' : 'COM_MONITOR_SUBSCRIBE_ISSUE', 'title' => $subscribed ? 'COM_MONITOR_UNSUBSCRIBE_ISSUE_DESC' : 'COM_MONITOR_SUBSCRIBE_ISSUE_DESC', 'icon' => $subscribed ? 'icon-star' : 'icon-star-empty');
             }
         }
     } else {
         $this->canEditIssue = $this->model->canEdit($user);
         $this->defaultTitle = JText::_('COM_MONITOR_CREATE_ISSUE');
     }
     $this->canDeleteComments = $user->authorise('comment.delete', 'com_monitor');
     $this->canEditComments = $user->authorise('comment.edit', 'com_monitor');
     $this->canEditOwnComments = $user->authorise('comment.edit.own', 'com_monitor');
     // Comments
     if ($this->modelComment) {
         $this->comments = $this->modelComment->getIssueComments($this->item->id);
         foreach ($this->comments as $comment) {
             // Avatars
             if ($this->avatars !== null) {
                 if (!isset($this->avatars[$comment->author_id])) {
                     $this->avatars[$comment->author_id] = PlgUserCMAvatarHelper::getAvatar($comment->author_id);
                 }
             }
             // Attachments
             $comment->attachments = $this->modelComment->getCommentAttachments($comment->id);
         }
         // Pagination
         $this->pagination = $this->modelComment->getPagination();
         // Ordering
         $this->listOrder = $this->escape($this->modelComment->getState()->get('list.ordering'));
         $this->listDir = $this->escape($this->modelComment->getState()->get('list.direction'));
     }
     $this->status = $this->model->getStatus();
     $this->defaultStatus = $this->model->getDefaultStatus();
     // Attachments
     $this->attachments = $this->model->getAttachments();
     // Process the content plugins.
     $dispatcher = JEventDispatcher::getInstance();
     JPluginHelper::importPlugin('content');
     if ($this->item && $this->getLayout() === 'default') {
         $dispatcher->trigger('onContentPrepare', array('com_monitor.issue', &$this->item, &$this->params, 0));
         $this->item->event = new stdClass();
         $results = $dispatcher->trigger('onContentAfterTitle', array('com_monitor.issue', &$this->item, &$this->params, 0));
         $this->item->event->afterDisplayTitle = trim(implode("\n", $results));
         $results = $dispatcher->trigger('onContentBeforeDisplay', array('com_monitor.issue', &$this->item, &$this->params, 0));
         $this->item->event->beforeDisplayContent = trim(implode("\n", $results));
         $results = $dispatcher->trigger('onContentAfterDisplay', array('com_monitor.issue', &$this->item, &$this->params, 0));
         $this->item->event->afterDisplayContent = trim(implode("\n", $results));
         if ($this->comments) {
             foreach ($this->comments as $comment) {
                 $dispatcher->trigger('onContentPrepare', array('com_monitor.comment', &$comment, &$this->params, 0));
             }
         }
     }
     return parent::render();
 }
 /**
  * Notifies all users who have subscribed to the project.
  *
  * @param   int    $projectId  ID of the project.
  * @param   JUser  $author     The user who created a new issue.
  * @param   int    $issueId    Direct link to the newly created issue.
  *
  * @return null
  */
 public function notifyProject($projectId, $author, $issueId)
 {
     // Get subscribing users.
     $query = $this->db->getQuery(true);
     $query->select('u.email, u.name, u.username')->from('#__monitor_subscriptions_projects AS s')->leftJoin('#__users AS u ON s.user_id = u.id')->where('s.item_id = ' . $projectId)->where('s.user_id != ' . $author->get('id'));
     $users = $this->db->setQuery($query)->loadObjectList();
     // Set values that are common for every notification mail.
     $authorName = $author->get('name', $author->get('username'));
     $issueLink = JRoute::_('index.php?option=com_monitor&view=issue&id=' . (int) $issueId, false);
     $unsubscribeLink = JRoute::_('index.php?option=com_monitor&task=project.unsubscribe&id=' . (int) $projectId, false);
     $baseUrl = JUri::getInstance()->toString(array('scheme', 'user', 'pass', 'host', 'port'));
     $modelIssue = new MonitorModelIssue($this->app, false);
     $modelIssue->setIssueId($issueId);
     $issue = $modelIssue->getIssue();
     $modelProject = new MonitorModelProject($this->app, false);
     $modelProject->setProjectId($projectId);
     $project = $modelProject->getProject();
     foreach ($users as $user) {
         $recipientName = empty($user->name) ? $user->username : $user->name;
         $subject = JText::sprintf('COM_MONITOR_MAIL_NOTIFICATION_PROJECT_HEADER', $project->name, $issue->title);
         $message = JText::sprintf('COM_MONITOR_MAIL_NOTIFICATION_PROJECT_TEXT', $recipientName, $authorName, $issue->title, $project->name, $baseUrl . $issueLink, $baseUrl . $unsubscribeLink);
         $mail = JFactory::getMailer();
         $mail->isHtml(false);
         $mail->setSubject($subject);
         $mail->setBody($message);
         $mail->addRecipient($user->email, $recipientName);
         $mail->Send();
     }
 }