/** * 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(); }
/** * 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; }