| 
									
										
										
										
											2014-11-15 23:22:57 -05:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | const nconf = require('nconf'); | 
					
						
							|  |  |  | const validator = require('validator'); | 
					
						
							|  |  |  | const winston = require('winston'); | 
					
						
							|  |  |  | const querystring = require('querystring'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const user = require('../user'); | 
					
						
							|  |  |  | const privileges = require('../privileges'); | 
					
						
							|  |  |  | const categories = require('../categories'); | 
					
						
							|  |  |  | const plugins = require('../plugins'); | 
					
						
							|  |  |  | const meta = require('../meta'); | 
					
						
							|  |  |  | const middleware = require('../middleware'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const helpers = module.exports; | 
					
						
							| 
									
										
										
										
											2014-11-15 23:22:57 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-20 08:51:04 -04:00
										 |  |  | helpers.noScriptErrors = function (req, res, error, httpStatus) { | 
					
						
							|  |  |  | 	if (req.body.noscript !== 'true') { | 
					
						
							|  |  |  | 		return res.status(httpStatus).send(error); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	const middleware = require('../middleware'); | 
					
						
							|  |  |  | 	const httpStatusString = httpStatus.toString(); | 
					
						
							| 
									
										
										
										
											2017-07-20 08:51:04 -04:00
										 |  |  | 	middleware.buildHeader(req, res, function () { | 
					
						
							|  |  |  | 		res.status(httpStatus).render(httpStatusString, { | 
					
						
							|  |  |  | 			path: req.path, | 
					
						
							| 
									
										
										
										
											2018-01-31 15:20:17 -05:00
										 |  |  | 			loggedIn: req.loggedIn, | 
					
						
							| 
									
										
										
										
											2017-07-20 08:51:04 -04:00
										 |  |  | 			error: error, | 
					
						
							| 
									
										
										
										
											2017-09-11 15:37:18 -04:00
										 |  |  | 			returnLink: true, | 
					
						
							| 
									
										
										
										
											2017-07-20 08:51:04 -04:00
										 |  |  | 			title: '[[global:' + httpStatusString + '.title]]', | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 13:53:05 -04:00
										 |  |  | helpers.validFilters = { '': true, new: true, watched: true, unreplied: true }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-18 14:37:32 -04:00
										 |  |  | helpers.terms = { | 
					
						
							|  |  |  | 	daily: 'day', | 
					
						
							|  |  |  | 	weekly: 'week', | 
					
						
							|  |  |  | 	monthly: 'month', | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | helpers.buildQueryString = function (cid, filter, term) { | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	const qs = {}; | 
					
						
							| 
									
										
										
										
											2018-06-18 14:37:32 -04:00
										 |  |  | 	if (cid) { | 
					
						
							|  |  |  | 		qs.cid = cid; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if (filter) { | 
					
						
							|  |  |  | 		qs.filter = filter; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if (term) { | 
					
						
							|  |  |  | 		qs.term = term; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	return Object.keys(qs).length ? '?' + querystring.stringify(qs) : ''; | 
					
						
							| 
									
										
										
										
											2018-06-18 14:37:32 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | helpers.buildFilters = function (url, filter, query) { | 
					
						
							| 
									
										
										
										
											2017-10-19 13:53:05 -04:00
										 |  |  | 	return [{ | 
					
						
							|  |  |  | 		name: '[[unread:all-topics]]', | 
					
						
							| 
									
										
										
										
											2018-06-18 14:37:32 -04:00
										 |  |  | 		url: url + helpers.buildQueryString(query.cid, '', query.term), | 
					
						
							| 
									
										
										
										
											2017-10-19 13:53:05 -04:00
										 |  |  | 		selected: filter === '', | 
					
						
							|  |  |  | 		filter: '', | 
					
						
							|  |  |  | 	}, { | 
					
						
							|  |  |  | 		name: '[[unread:new-topics]]', | 
					
						
							| 
									
										
										
										
											2018-06-18 14:37:32 -04:00
										 |  |  | 		url: url + helpers.buildQueryString(query.cid, 'new', query.term), | 
					
						
							| 
									
										
										
										
											2017-10-19 13:53:05 -04:00
										 |  |  | 		selected: filter === 'new', | 
					
						
							|  |  |  | 		filter: 'new', | 
					
						
							|  |  |  | 	}, { | 
					
						
							|  |  |  | 		name: '[[unread:watched-topics]]', | 
					
						
							| 
									
										
										
										
											2018-06-18 14:37:32 -04:00
										 |  |  | 		url: url + helpers.buildQueryString(query.cid, 'watched', query.term), | 
					
						
							| 
									
										
										
										
											2017-10-19 13:53:05 -04:00
										 |  |  | 		selected: filter === 'watched', | 
					
						
							|  |  |  | 		filter: 'watched', | 
					
						
							|  |  |  | 	}, { | 
					
						
							|  |  |  | 		name: '[[unread:unreplied-topics]]', | 
					
						
							| 
									
										
										
										
											2018-06-18 14:37:32 -04:00
										 |  |  | 		url: url + helpers.buildQueryString(query.cid, 'unreplied', query.term), | 
					
						
							| 
									
										
										
										
											2017-10-19 13:53:05 -04:00
										 |  |  | 		selected: filter === 'unreplied', | 
					
						
							|  |  |  | 		filter: 'unreplied', | 
					
						
							|  |  |  | 	}]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-18 14:37:32 -04:00
										 |  |  | helpers.buildTerms = function (url, term, query) { | 
					
						
							|  |  |  | 	return [{ | 
					
						
							|  |  |  | 		name: '[[recent:alltime]]', | 
					
						
							|  |  |  | 		url: url + helpers.buildQueryString(query.cid, query.filter, ''), | 
					
						
							|  |  |  | 		selected: term === 'alltime', | 
					
						
							|  |  |  | 		term: 'alltime', | 
					
						
							|  |  |  | 	}, { | 
					
						
							|  |  |  | 		name: '[[recent:day]]', | 
					
						
							|  |  |  | 		url: url + helpers.buildQueryString(query.cid, query.filter, 'daily'), | 
					
						
							|  |  |  | 		selected: term === 'day', | 
					
						
							|  |  |  | 		term: 'day', | 
					
						
							|  |  |  | 	}, { | 
					
						
							|  |  |  | 		name: '[[recent:week]]', | 
					
						
							|  |  |  | 		url: url + helpers.buildQueryString(query.cid, query.filter, 'weekly'), | 
					
						
							|  |  |  | 		selected: term === 'week', | 
					
						
							|  |  |  | 		term: 'week', | 
					
						
							|  |  |  | 	}, { | 
					
						
							|  |  |  | 		name: '[[recent:month]]', | 
					
						
							|  |  |  | 		url: url + helpers.buildQueryString(query.cid, query.filter, 'monthly'), | 
					
						
							|  |  |  | 		selected: term === 'month', | 
					
						
							|  |  |  | 		term: 'month', | 
					
						
							|  |  |  | 	}]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | helpers.notAllowed = function (req, res, error) { | 
					
						
							| 
									
										
										
										
											2016-06-22 14:58:46 -04:00
										 |  |  | 	plugins.fireHook('filter:helpers.notAllowed', { | 
					
						
							|  |  |  | 		req: req, | 
					
						
							|  |  |  | 		res: res, | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 		error: error, | 
					
						
							| 
									
										
										
										
											2017-02-18 15:05:36 -07:00
										 |  |  | 	}, function (err) { | 
					
						
							| 
									
										
										
										
											2016-07-11 13:03:47 +03:00
										 |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return winston.error(err); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-04-26 12:59:01 -04:00
										 |  |  | 		if (req.loggedIn || req.uid === -1) { | 
					
						
							| 
									
										
										
										
											2016-06-22 14:58:46 -04:00
										 |  |  | 			if (res.locals.isAPI) { | 
					
						
							|  |  |  | 				res.status(403).json({ | 
					
						
							|  |  |  | 					path: req.path.replace(/^\/api/, ''), | 
					
						
							| 
									
										
										
										
											2018-01-31 15:20:17 -05:00
										 |  |  | 					loggedIn: req.loggedIn, | 
					
						
							| 
									
										
										
										
											2016-12-02 14:05:54 +03:00
										 |  |  | 					error: error, | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 					title: '[[global:403.title]]', | 
					
						
							| 
									
										
										
										
											2016-06-22 14:58:46 -04:00
										 |  |  | 				}); | 
					
						
							|  |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2017-05-12 17:53:23 -04:00
										 |  |  | 				middleware.buildHeader(req, res, function () { | 
					
						
							|  |  |  | 					res.status(403).render('403', { | 
					
						
							|  |  |  | 						path: req.path, | 
					
						
							| 
									
										
										
										
											2018-01-31 15:20:17 -05:00
										 |  |  | 						loggedIn: req.loggedIn, | 
					
						
							| 
									
										
										
										
											2017-05-12 17:53:23 -04:00
										 |  |  | 						error: error, | 
					
						
							|  |  |  | 						title: '[[global:403.title]]', | 
					
						
							|  |  |  | 					}); | 
					
						
							| 
									
										
										
										
											2016-06-22 14:58:46 -04:00
										 |  |  | 				}); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-02-18 14:32:35 -07:00
										 |  |  | 		} else if (res.locals.isAPI) { | 
					
						
							| 
									
										
										
										
											2019-02-15 16:41:49 -05:00
										 |  |  | 			req.session.returnTo = req.url.replace(/^\/api/, ''); | 
					
						
							| 
									
										
										
										
											2017-02-18 14:32:35 -07:00
										 |  |  | 			res.status(401).json('not-authorized'); | 
					
						
							| 
									
										
										
										
											2014-11-15 23:22:57 -05:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2019-02-15 16:41:49 -05:00
										 |  |  | 			req.session.returnTo = req.url; | 
					
						
							| 
									
										
										
										
											2017-02-18 14:32:35 -07:00
										 |  |  | 			res.redirect(nconf.get('relative_path') + '/login'); | 
					
						
							| 
									
										
										
										
											2014-11-15 23:22:57 -05:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-06-22 14:58:46 -04:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-11-15 23:22:57 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | helpers.redirect = function (res, url) { | 
					
						
							| 
									
										
										
										
											2015-03-09 18:22:44 -04:00
										 |  |  | 	if (res.locals.isAPI) { | 
					
						
							| 
									
										
										
										
											2017-07-05 11:36:35 -04:00
										 |  |  | 		res.set('X-Redirect', encodeURI(url)).status(200).json(url); | 
					
						
							| 
									
										
										
										
											2015-03-09 18:22:44 -04:00
										 |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2016-03-20 15:11:32 -05:00
										 |  |  | 		res.redirect(nconf.get('relative_path') + encodeURI(url)); | 
					
						
							| 
									
										
										
										
											2015-03-09 18:22:44 -04:00
										 |  |  | 	} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | helpers.buildCategoryBreadcrumbs = async function (cid) { | 
					
						
							|  |  |  | 	const breadcrumbs = []; | 
					
						
							| 
									
										
										
										
											2014-12-11 22:55:00 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	while (parseInt(cid, 10)) { | 
					
						
							|  |  |  | 		/* eslint-disable no-await-in-loop */ | 
					
						
							|  |  |  | 		const data = await categories.getCategoryFields(cid, ['name', 'slug', 'parentCid', 'disabled', 'isSection']); | 
					
						
							|  |  |  | 		if (!data.disabled && !data.isSection) { | 
					
						
							| 
									
										
										
										
											2016-04-21 11:40:40 -04:00
										 |  |  | 			breadcrumbs.unshift({ | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 				text: String(data.name), | 
					
						
							|  |  |  | 				url: nconf.get('relative_path') + '/category/' + data.slug, | 
					
						
							| 
									
										
										
										
											2016-04-21 11:40:40 -04:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 		cid = data.parentCid; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if (meta.config.homePageRoute && meta.config.homePageRoute !== 'categories') { | 
					
						
							| 
									
										
										
										
											2015-01-29 01:06:48 -05:00
										 |  |  | 		breadcrumbs.unshift({ | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 			text: '[[global:header.categories]]', | 
					
						
							|  |  |  | 			url: nconf.get('relative_path') + '/categories', | 
					
						
							| 
									
										
										
										
											2014-12-11 22:55:00 -05:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-01-29 01:06:48 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	breadcrumbs.unshift({ | 
					
						
							|  |  |  | 		text: '[[global:home]]', | 
					
						
							|  |  |  | 		url: nconf.get('relative_path') + '/', | 
					
						
							| 
									
										
										
										
											2015-01-29 01:06:48 -05:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return breadcrumbs; | 
					
						
							| 
									
										
										
										
											2015-01-29 01:06:48 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | helpers.buildBreadcrumbs = function (crumbs) { | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	const breadcrumbs = [ | 
					
						
							| 
									
										
										
										
											2015-01-29 01:06:48 -05:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			text: '[[global:home]]', | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 			url: nconf.get('relative_path') + '/', | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2015-01-29 01:06:48 -05:00
										 |  |  | 	]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 	crumbs.forEach(function (crumb) { | 
					
						
							| 
									
										
										
										
											2015-01-29 01:06:48 -05:00
										 |  |  | 		if (crumb) { | 
					
						
							|  |  |  | 			if (crumb.url) { | 
					
						
							|  |  |  | 				crumb.url = nconf.get('relative_path') + crumb.url; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			breadcrumbs.push(crumb); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-12-11 22:55:00 -05:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2015-01-29 01:06:48 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return breadcrumbs; | 
					
						
							| 
									
										
										
										
											2014-12-11 22:55:00 -05:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-11-15 23:22:57 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | helpers.buildTitle = function (pageTitle) { | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	const titleLayout = meta.config.titleLayout || '{pageTitle} | {browserTitle}'; | 
					
						
							| 
									
										
										
										
											2015-09-23 01:59:13 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	const browserTitle = validator.escape(String(meta.config.browserTitle || meta.config.title || 'NodeBB')); | 
					
						
							| 
									
										
										
										
											2015-09-23 01:59:13 -04:00
										 |  |  | 	pageTitle = pageTitle || ''; | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	const title = titleLayout.replace('{pageTitle}', () => pageTitle).replace('{browserTitle}', () => browserTitle); | 
					
						
							| 
									
										
										
										
											2015-09-23 01:59:13 -04:00
										 |  |  | 	return title; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | helpers.getCategories = async function (set, uid, privilege, selectedCid) { | 
					
						
							|  |  |  | 	const cids = await categories.getCidsByPrivilege(set, uid, privilege); | 
					
						
							|  |  |  | 	return await getCategoryData(cids, uid, selectedCid); | 
					
						
							| 
									
										
										
										
											2018-08-17 16:39:50 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | helpers.getCategoriesByStates = async function (uid, selectedCid, states) { | 
					
						
							|  |  |  | 	let cids = await user.getCategoriesByStates(uid, states); | 
					
						
							| 
									
										
										
										
											2019-09-26 21:55:49 -04:00
										 |  |  | 	cids = await privileges.categories.filterCids('topics:read', cids, uid); | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	return await getCategoryData(cids, uid, selectedCid); | 
					
						
							| 
									
										
										
										
											2018-12-14 16:24:17 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | helpers.getWatchedCategories = async function (uid, selectedCid) { | 
					
						
							|  |  |  | 	let cids = await user.getWatchedCategories(uid); | 
					
						
							|  |  |  | 	cids = await privileges.categories.filterCids('read', cids, uid); | 
					
						
							|  |  |  | 	return await getCategoryData(cids, uid, selectedCid); | 
					
						
							| 
									
										
										
										
											2018-08-17 16:39:50 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | async function getCategoryData(cids, uid, selectedCid) { | 
					
						
							| 
									
										
										
										
											2018-08-17 16:39:50 -04:00
										 |  |  | 	if (selectedCid && !Array.isArray(selectedCid)) { | 
					
						
							|  |  |  | 		selectedCid = [selectedCid]; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-09-20 17:21:32 -04:00
										 |  |  | 	const categoryFields = ['cid', 'order', 'name', 'slug', 'icon', 'link', 'color', 'bgColor', 'parentCid', 'image', 'imageClass']; | 
					
						
							|  |  |  | 	let categoryData = await categories.getCategoriesFields(cids, categoryFields); | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	categoryData = categoryData.filter(category => category && !category.link); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-20 19:04:47 -04:00
										 |  |  | 	categories.getTree(categoryData); | 
					
						
							|  |  |  | 	const categoriesData = categories.buildForSelectCategories(categoryData); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 	let selectedCategory = []; | 
					
						
							|  |  |  | 	const selectedCids = []; | 
					
						
							| 
									
										
										
										
											2019-09-20 19:04:47 -04:00
										 |  |  | 	categoriesData.forEach(function (category) { | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | 		category.selected = selectedCid ? selectedCid.includes(String(category.cid)) : false; | 
					
						
							|  |  |  | 		if (category.selected) { | 
					
						
							|  |  |  | 			selectedCategory.push(category); | 
					
						
							|  |  |  | 			selectedCids.push(category.cid); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	selectedCids.sort((a, b) => a - b); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (selectedCategory.length > 1) { | 
					
						
							|  |  |  | 		selectedCategory = { | 
					
						
							|  |  |  | 			icon: 'fa-plus', | 
					
						
							|  |  |  | 			name: '[[unread:multiple-categories-selected]]', | 
					
						
							|  |  |  | 			bgColor: '#ddd', | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 	} else if (selectedCategory.length === 1) { | 
					
						
							|  |  |  | 		selectedCategory = selectedCategory[0]; | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		selectedCategory = undefined; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-11-03 13:06:21 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-20 17:21:32 -04:00
										 |  |  | 	return { | 
					
						
							| 
									
										
										
										
											2019-09-20 19:04:47 -04:00
										 |  |  | 		categories: categoriesData, | 
					
						
							| 
									
										
										
										
											2019-09-20 17:21:32 -04:00
										 |  |  | 		selectedCategory: selectedCategory, | 
					
						
							|  |  |  | 		selectedCids: selectedCids, | 
					
						
							|  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2016-11-03 13:06:21 +03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2019-07-03 12:48:26 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-14 16:27:58 -04:00
										 |  |  | helpers.getHomePageRoutes = async function (uid) { | 
					
						
							|  |  |  | 	let cids = await categories.getAllCidsFromSet('categories:cid'); | 
					
						
							|  |  |  | 	cids = await privileges.categories.filterCids('find', cids, uid); | 
					
						
							|  |  |  | 	const categoryData = await categories.getCategoriesFields(cids, ['name', 'slug']); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	const categoryRoutes = categoryData.map(function (category) { | 
					
						
							|  |  |  | 		return { | 
					
						
							|  |  |  | 			route: 'category/' + category.slug, | 
					
						
							|  |  |  | 			name: 'Category: ' + category.name, | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	const routes = [ | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			route: 'categories', | 
					
						
							|  |  |  | 			name: 'Categories', | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			route: 'unread', | 
					
						
							|  |  |  | 			name: 'Unread', | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			route: 'recent', | 
					
						
							|  |  |  | 			name: 'Recent', | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			route: 'top', | 
					
						
							|  |  |  | 			name: 'Top', | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			route: 'popular', | 
					
						
							|  |  |  | 			name: 'Popular', | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	].concat(categoryRoutes, [ | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			route: 'custom', | 
					
						
							|  |  |  | 			name: 'Custom', | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	]); | 
					
						
							|  |  |  | 	const data = await plugins.fireHook('filter:homepage.get', { routes: routes }); | 
					
						
							|  |  |  | 	return data.routes; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 23:17:43 -04:00
										 |  |  | require('../promisify')(helpers); |