Esempio n. 1
0
 /**
  * Update activity feed (load more entries)
  *
  * @return  string
  */
 public function updateFeed()
 {
     $objAC = $this->model->table('Activity');
     $filters = array();
     $total = $objAC->getActivities($this->model->get('id'), $filters, 1, $this->_uid);
     $limit = intval($this->params->get('limit', 25));
     $filters['limit'] = Request::getVar('limit', $limit);
     if ($start = Request::getVar('recorded')) {
         $filters['recorded'] = $start;
         $filters['sortby'] = 'recorded';
         $filters['sortdir'] = 'ASC';
     }
     $activities = $objAC->getActivities($this->model->get('id'), $filters, 0, $this->_uid);
     // In this case, we're expecting JSON output
     // @TODO: Move to API
     if (isset($filters['recorded'])) {
         $data = new stdClass();
         $data->activities = array();
         if (count($activities)) {
             $objM = new \Components\Projects\Tables\Blog($this->_database);
             $objC = new \Components\Projects\Tables\Comment($this->_database);
             $objTD = new \Components\Projects\Tables\Todo($this->_database);
             $shown = array();
             // Loop through activities
             foreach ($activities as $a) {
                 if (in_array($a->id, $shown)) {
                     continue;
                 }
                 $shown[] = $a->id;
                 // Is this a comment?
                 $class = $a->class ? $a->class : 'activity';
                 // Display hyperlink
                 if ($a->highlighted && $a->url) {
                     $a->activity = str_replace($a->highlighted, '<a href="' . $a->url . '">' . $a->highlighted . '</a>', $a->activity);
                 }
                 // Set vars
                 $ebody = '';
                 $eid = $a->id;
                 $etbl = 'activity';
                 $deletable = 0;
                 $parent = 0;
                 $comments = null;
                 // Get blog entry
                 if ($class == 'blog') {
                     $blog = $objM->getEntries($a->projectid, $bfilters = array('activityid' => $a->id), $a->referenceid);
                     if (!$blog) {
                         continue;
                     }
                     $ebody = $this->drawBodyText($blog[0]->blogentry);
                     $eid = $a->referenceid;
                     $etbl = 'blog';
                     $deletable = 1;
                 } elseif ($class == 'todo') {
                     $todo = $objTD->getTodos($a->projectid, $tfilters = array('activityid' => $a->id), $a->referenceid);
                     if (!$todo) {
                         continue;
                     }
                     $content = $todo[0]->details ? $todo[0]->details : $todo[0]->content;
                     $ebody = $this->drawBodyText($content);
                     $eid = $a->referenceid;
                     $etbl = 'todo';
                 } else {
                     if ($a->class == 'quote') {
                         $comment = $objC->getComments(NULL, 'blog', $a->id);
                         if (!$comment) {
                             continue;
                         }
                         $objM->load($comment->itemid);
                         $content = $comment->comment;
                         $ebody = $this->drawBodyText($content);
                         $eid = $a->referenceid;
                         $etbl = 'quote';
                         $parent = $objM->activityid;
                     }
                 }
                 // Get/parse & save item preview if available
                 $preview = empty($this->miniView) ? $this->getItemPreview($class, $a) : '';
                 // Is user allowed to delete item?
                 $deletable = empty($this->miniView) && $deletable && $this->model->access('content') && ($a->userid == $this->_uid or $this->model->access('manager')) ? 1 : 0;
                 $prep = array('activity' => $a, 'eid' => $eid, 'etbl' => $etbl, 'body' => $ebody, 'deletable' => $deletable, 'comments' => $comments, 'class' => $class, 'preview' => $preview, 'parent' => $parent);
                 if ($a->class == 'quote') {
                     $prep['body'] = $this->view('_comment', 'activity')->set('option', $this->_option)->set('model', $this->model)->set('activity', $prep)->set('uid', $this->_uid)->set('comment', $comment)->set('edit', true)->loadTemplate();
                 } else {
                     $prep['body'] = $this->view('_activity', 'activity')->set('option', $this->_option)->set('model', $this->model)->set('activity', $prep)->set('uid', $this->_uid)->loadTemplate();
                 }
                 $data->activities[] = $prep;
             }
         }
         ob_clean();
         header('Content-type: text/plain');
         echo json_encode($data);
         exit;
     }
     $activities = $this->_prepActivities($activities, $filters, $limit);
     $view = $this->view('default', 'activity')->set('option', $this->_option)->set('model', $this->model)->set('filters', $filters)->set('limit', $limit)->set('total', $activities)->set('activities', $activities)->set('uid', $this->_uid)->set('database', $this->_database)->set('title', $this->_area['title']);
     return $view->loadTemplate();
 }
Esempio n. 2
0
 /**
  * Delete blog entry
  *
  * @return     void, redirect
  */
 protected function _delete()
 {
     // Check permission
     if (!$this->model->access('content')) {
         throw new Exception(Lang::txt('ALERTNOTAUTH'), 403);
         return;
     }
     // Incoming
     $tbl = trim(Request::getVar('tbl', 'activity'));
     $eid = Request::getInt('eid', 0);
     // Are we deleting a blog entry?
     if ($tbl == 'blog') {
         $objM = new \Components\Projects\Tables\Blog($this->_database);
         if ($eid && $objM->load($eid)) {
             // Get associated commenting activities
             $objC = new \Components\Projects\Tables\Comment($this->_database);
             $activities = $objC->collectActivities($eid, $tbl);
             $activities[] = $objM->activityid;
             // Delete blog entry
             if ($objM->deletePost()) {
                 $this->_msg = Lang::txt('PLG_PROJECTS_BLOG_ENTRY_DELETED');
                 // Delete all associated comments
                 $comments = $objC->deleteComments($eid, $tbl);
                 // Delete all associated activities
                 foreach ($activities as $a) {
                     $objAA = $this->model->table('Activity');
                     $objAA->loadActivity($a, $this->model->get('id'));
                     $objAA->deleteActivity();
                 }
             }
         }
     }
     // Are we deleting activity?
     if ($tbl == 'activity') {
         $objAA = $this->model->table('Activity');
         $objAA->loadActivity($eid, $this->model->get('id'));
         if ($this->model->access('content') || $objAA->userid == $this->_uid) {
             // Get associated commenting activities
             $objC = new \Components\Projects\Tables\Comment($this->_database);
             $activities = $objC->collectActivities($eid, $tbl);
             if ($objAA->deleteActivity()) {
                 $this->_msg = Lang::txt('PLG_PROJECTS_BLOG_ENTRY_DELETED');
                 // Delete all associated comments
                 $comments = $objC->deleteComments($eid, $tbl);
                 // Delete all associated activities
                 foreach ($activities as $a) {
                     $objAA = $this->model->table('Activity');
                     $objAA->loadActivity($a, $this->model->get('id'));
                     $objAA->deleteActivity();
                 }
             }
         } else {
             // unauthorized
             $this->setError(Lang::txt('COM_PROJECTS_ERROR_ACTION_NOT_AUTHORIZED'));
         }
     }
     // Pass error or success message
     if ($this->getError()) {
         \Notify::message($this->getError(), 'error', 'projects');
     } elseif (!empty($this->_msg)) {
         \Notify::message($this->_msg, 'success', 'projects');
     }
     // Redirect
     App::redirect(Route::url($this->model->link('feed')));
     return;
 }