Advertisement
Guest User

NodeBB search.js

a guest
Sep 28th, 2016
1,457
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. 'use strict';
  3.  
  4. var async = require('async');
  5.  
  6. var meta = require('../meta');
  7. var plugins = require('../plugins');
  8. var search = require('../search');
  9. var categories = require('../categories');
  10. var pagination = require('../pagination');
  11. var helpers = require('./helpers');
  12.  
  13.  
  14. var searchController = {};
  15.  
  16. searchController.search = function(req, res, next) {
  17.     if (!plugins.hasListeners('filter:search.query')) {
  18.         return next();
  19.     }
  20.  
  21.     if (!req.user && parseInt(meta.config.allowGuestSearching, 10) !== 1) {
  22.         return helpers.notAllowed(req, res);
  23.     }
  24.  
  25.     var page = Math.max(1, parseInt(req.query.page, 10)) || 1;
  26.     if (req.query.categories && !Array.isArray(req.query.categories)) {
  27.         req.query.categories = [req.query.categories];
  28.     }
  29.  
  30.     var data = {
  31.         query: req.params.term,
  32.         searchIn: req.query.in || 'posts',
  33.         postedBy: req.query.by,
  34.         categories: req.query.categories,
  35.         searchChildren: req.query.searchChildren,
  36.         replies: req.query.replies,
  37.         repliesFilter: req.query.repliesFilter,
  38.         timeRange: req.query.timeRange,
  39.         timeFilter: req.query.timeFilter,
  40.         sortBy: req.query.sortBy,
  41.         sortDirection: req.query.sortDirection,
  42.         page: page,
  43.         uid: req.uid,
  44.         qs: req.query
  45.     };
  46.  
  47.     async.parallel({
  48.         categories: async.apply(buildCategories, req.uid),
  49.         search: async.apply(search.search, data)
  50.     }, function(err, results) {
  51.         if (err) {
  52.             return next(err);
  53.         }
  54.         var searchData = results.search;
  55.         searchData.categories = results.categories;
  56.         searchData.categoriesCount = results.categories.length;
  57.         searchData.pagination = pagination.create(page, searchData.pageCount, req.query);
  58.         searchData.showAsPosts = !req.query.showAs || req.query.showAs === 'posts';
  59.         searchData.showAsTopics = req.query.showAs === 'topics';
  60.         searchData.title = '[[global:header.search]]';
  61.         searchData.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[global:search]]'}]);
  62.         searchData.expandSearch = !req.params.term;
  63.         searchData.expandSearch = false;
  64.         res.render('search', searchData);
  65.     });
  66. };
  67.  
  68. function buildCategories(uid, callback) {
  69.     categories.getCategoriesByPrivilege('cid:0:children', uid, 'read', function(err, categories) {
  70.         if (err) {
  71.             return callback(err);
  72.         }
  73.  
  74.         var categoriesData = [
  75.             {value: 'all', text: '[[unread:all_categories]]'},
  76.             {value: 'watched', text: '[[category:watched-categories]]'}
  77.         ];
  78.  
  79.         categories = categories.filter(function(category) {
  80.             return category && !category.link && !parseInt(category.parentCid, 10);
  81.         });
  82.  
  83.         categories.forEach(function(category) {
  84.             recursive(category, categoriesData, '');
  85.         });
  86.         callback(null, categoriesData);
  87.     });
  88. }
  89.  
  90.  
  91. function recursive(category, categoriesData, level) {
  92.     if (category.link) {
  93.         return;
  94.     }
  95.  
  96.     var bullet = level ? '• ' : '';
  97.  
  98.     categoriesData.push({
  99.         value: category.cid,
  100.         text: level + bullet + category.name
  101.     });
  102.  
  103.     category.children.forEach(function(child) {
  104.         recursive(child, categoriesData, '    ' + level);
  105.     });
  106. }
  107.  
  108. module.exports = searchController;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement