function writeResponse(DevblocksHttpResponse $response) { $tpl = DevblocksPlatform::getTemplateService(); $tpl_path = dirname(dirname(dirname(__FILE__))) . '/templates/'; $umsession = UmPortalHelper::getSession(); $active_user = $umsession->getProperty('sc_login', null); $stack = $response->path; array_shift($stack); // kb // KB Roots $sKbRoots = DAO_CommunityToolProperty::get(UmPortalHelper::getCode(), self::PARAM_KB_ROOTS, ''); $kb_roots = !empty($sKbRoots) ? unserialize($sKbRoots) : array(); $kb_roots_str = '0'; if (!empty($kb_roots)) { $kb_roots_str = implode(',', array_keys($kb_roots)); } switch (array_shift($stack)) { case 'search': @($q = DevblocksPlatform::importGPC($_REQUEST['q'], 'string', '')); $tpl->assign('q', $q); if (null == ($view = UmScAbstractViewLoader::getView('', UmSc_KbArticleView::DEFAULT_ID))) { $view = new UmSc_KbArticleView(); } $view->name = ""; $view->params = array(array(DevblocksSearchCriteria::GROUP_OR, new DevblocksSearchCriteria(SearchFields_KbArticle::TITLE, DevblocksSearchCriteria::OPER_FULLTEXT, $q), new DevblocksSearchCriteria(SearchFields_KbArticle::CONTENT, DevblocksSearchCriteria::OPER_FULLTEXT, $q)), new DevblocksSearchCriteria(SearchFields_KbArticle::TOP_CATEGORY_ID, 'in', array_keys($kb_roots))); UmScAbstractViewLoader::setView($view->id, $view); $tpl->assign('view', $view); $tpl->display("devblocks:cerberusweb.kb:support_center/kb/search_results.tpl:portal_" . UmPortalHelper::getCode()); break; case 'article': if (empty($kb_roots)) { return; } $id = intval(array_shift($stack)); list($articles, $count) = DAO_KbArticle::search(array(new DevblocksSearchCriteria(SearchFields_KbArticle::ID, '=', $id), new DevblocksSearchCriteria(SearchFields_KbArticle::TOP_CATEGORY_ID, 'in', array_keys($kb_roots))), -1, 0, null, null, false); if (!isset($articles[$id])) { break; } $article = DAO_KbArticle::get($id); $tpl->assign('article', $article); @($article_list = $umsession->getProperty(self::SESSION_ARTICLE_LIST, array())); if (!empty($article) && !isset($article_list[$id])) { DAO_KbArticle::update($article->id, array(DAO_KbArticle::VIEWS => ++$article->views)); $article_list[$id] = $id; $umsession->setProperty(self::SESSION_ARTICLE_LIST, $article_list); } $categories = DAO_KbCategory::getWhere(); $tpl->assign('categories', $categories); $cats = DAO_KbArticle::getCategoriesByArticleId($id); $breadcrumbs = array(); foreach ($cats as $cat_id) { if (!isset($breadcrumbs[$cat_id])) { $breadcrumbs[$cat_id] = array(); } $pid = $cat_id; while ($pid) { $breadcrumbs[$cat_id][] = $pid; $pid = $categories[$pid]->parent_id; } $breadcrumbs[$cat_id] = array_reverse($breadcrumbs[$cat_id]); // Remove any breadcrumbs not in this SC profile $pid = reset($breadcrumbs[$cat_id]); if (!isset($kb_roots[$pid])) { unset($breadcrumbs[$cat_id]); } } $tpl->assign('breadcrumbs', $breadcrumbs); $tpl->display("devblocks:cerberusweb.kb:support_center/kb/article.tpl:portal_" . UmPortalHelper::getCode()); break; default: case 'browse': @($root = intval(array_shift($stack))); $tpl->assign('root_id', $root); $categories = DAO_KbCategory::getWhere(); $tpl->assign('categories', $categories); $tree_map = DAO_KbCategory::getTreeMap(0); // Remove other top-level categories if (is_array($tree_map[0])) { foreach ($tree_map[0] as $child_id => $count) { if (!isset($kb_roots[$child_id])) { unset($tree_map[0][$child_id]); } } } // Remove empty categories if (is_array($tree_map[0])) { foreach ($tree_map as $node_id => $children) { foreach ($children as $child_id => $count) { if (empty($count)) { @($pid = $categories[$child_id]->parent_id); unset($tree_map[$pid][$child_id]); unset($tree_map[$child_id]); } } } } $tpl->assign('tree', $tree_map); // Breadcrumb // [TODO] API-ize inside Model_KbTree ? $breadcrumb = array(); $pid = $root; while (0 != $pid) { $breadcrumb[] = $pid; $pid = $categories[$pid]->parent_id; } $tpl->assign('breadcrumb', array_reverse($breadcrumb)); $tpl->assign('mid', @intval(ceil(count($tree_map[$root]) / 2))); // Articles if (null == ($view = UmScAbstractViewLoader::getView('', UmSc_KbArticleView::DEFAULT_ID))) { $view = new UmSc_KbArticleView(); } if (!empty($root)) { $view->params = array(new DevblocksSearchCriteria(SearchFields_KbArticle::CATEGORY_ID, '=', $root), new DevblocksSearchCriteria(SearchFields_KbArticle::TOP_CATEGORY_ID, 'in', array_keys($kb_roots))); } else { // Most Popular Articles $view->params = array(new DevblocksSearchCriteria(SearchFields_KbArticle::TOP_CATEGORY_ID, 'in', array_keys($kb_roots))); } $view->name = ""; $view->renderSortBy = SearchFields_KbArticle::VIEWS; $view->renderSortAsc = false; $view->renderPage = 0; $view->renderLimit = 10; UmScAbstractViewLoader::setView($view->id, $view); $tpl->assign('view', $view); $tpl->display("devblocks:cerberusweb.kb:support_center/kb/index.tpl:portal_" . UmPortalHelper::getCode()); break; } }
function viewSortByAction(DevblocksHttpRequest $request) { @($view_id = DevblocksPlatform::importGPC($_REQUEST['id'], 'string', '')); @($sort_by = DevblocksPlatform::importGPC($_REQUEST['sort_by'], 'string', '')); if (null != ($view = UmScAbstractViewLoader::getView('', $view_id))) { $fields = $view->getColumns(); if (isset($fields[$sort_by])) { if (0 == strcasecmp($view->renderSortBy, $sort_by)) { // clicked same col? $view->renderSortAsc = !(bool) $view->renderSortAsc; // flip order } else { $view->renderSortBy = $sort_by; $view->renderSortAsc = true; } $view->renderPage = 0; UmScAbstractViewLoader::setView($view->id, $view); } $view->render(); } }
function writeResponse(DevblocksHttpResponse $response) { $tpl = DevblocksPlatform::getTemplateService(); $tpl_path = dirname(dirname(dirname(dirname(__FILE__)))) . '/templates/'; $umsession = UmPortalHelper::getSession(); $active_user = $umsession->getProperty('sc_login', null); $stack = $response->path; array_shift($stack); // history $mask = array_shift($stack); if (empty($mask)) { // Open Tickets if (null == ($open_view = UmScAbstractViewLoader::getView('', 'sc_history_open'))) { $open_view = new UmSc_TicketHistoryView(); $open_view->id = 'sc_history_open'; } // Lock to current visitor and open tickets $open_view->params = array(new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_FIRST_WROTE_ID, '=', $active_user->id), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CLOSED, '=', 0), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_DELETED, '=', 0)); $open_view->name = ""; $open_view->renderSortBy = SearchFields_Ticket::TICKET_UPDATED_DATE; $open_view->renderSortAsc = false; $open_view->renderLimit = 10; UmScAbstractViewLoader::setView($open_view->id, $open_view); $tpl->assign('open_view', $open_view); // Closed Tickets if (null == ($closed_view = UmScAbstractViewLoader::getView('', 'sc_history_closed'))) { $closed_view = new UmSc_TicketHistoryView(); $closed_view->id = 'sc_history_closed'; } // Lock to current visitor and closed tickets $closed_view->params = array(new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_FIRST_WROTE_ID, '=', $active_user->id), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CLOSED, '=', 1), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_DELETED, '=', 0)); $closed_view->name = ""; $closed_view->renderSortBy = SearchFields_Ticket::TICKET_UPDATED_DATE; $closed_view->renderSortAsc = false; $closed_view->renderLimit = 10; UmScAbstractViewLoader::setView($closed_view->id, $closed_view); $tpl->assign('closed_view', $closed_view); $tpl->display("file:{$tpl_path}portal/sc/module/history/index.tpl"); } elseif ('search' == $mask) { @($q = DevblocksPlatform::importGPC($_REQUEST['q'], 'string', '')); $tpl->assign('q', $q); if (null == ($view = UmScAbstractViewLoader::getView('', 'sc_history_search'))) { $view = new UmSc_TicketHistoryView(); $view->id = 'sc_history_search'; } $view->name = ""; $view->view_columns = array(SearchFields_Ticket::TICKET_MASK, SearchFields_Ticket::TICKET_SUBJECT, SearchFields_Ticket::TICKET_UPDATED_DATE, SearchFields_Ticket::TICKET_CLOSED); $view->params = array(array(DevblocksSearchCriteria::GROUP_OR, new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_MESSAGE_CONTENT, DevblocksSearchCriteria::OPER_FULLTEXT, $q), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_MASK, DevblocksSearchCriteria::OPER_LIKE, $q . '%')), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_FIRST_WROTE_ID, '=', $active_user->id), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_DELETED, '=', 0)); UmScAbstractViewLoader::setView($view->id, $view); $tpl->assign('view', $view); $tpl->display("file:{$tpl_path}portal/sc/module/history/search_results.tpl"); } else { // Secure retrieval (address + mask) list($tickets) = DAO_Ticket::search(array(), array(new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_MASK, '=', $mask), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_FIRST_WROTE_ID, '=', $active_user->id)), 1, 0, null, null, false); $ticket = array_shift($tickets); // Security check (mask compare) if (0 == strcasecmp($ticket[SearchFields_Ticket::TICKET_MASK], $mask)) { $messages = DAO_Ticket::getMessagesByTicket($ticket[SearchFields_Ticket::TICKET_ID]); $messages = array_reverse($messages, true); $tpl->assign('ticket', $ticket); $tpl->assign('messages', $messages); $tpl->display("file:{$tpl_path}portal/sc/module/history/display.tpl"); } } }