Esempio n. 1
0
File: kb.php Progetto: Hildy/cerb5
 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;
     }
 }
Esempio n. 2
0
 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();
     }
 }
Esempio n. 3
0
 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");
         }
     }
 }