mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-11-03 20:45:58 +01:00 
			
		
		
		
	fixing issue where navigating to a non-existant category_id caused NodeBB
to crash
This commit is contained in:
		@@ -11,6 +11,9 @@
 | 
				
			|||||||
	<link href="{cssSrc}" rel="stylesheet" media="screen">
 | 
						<link href="{cssSrc}" rel="stylesheet" media="screen">
 | 
				
			||||||
	<link href="{relative_path}/vendor/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" media="screen">
 | 
						<link href="{relative_path}/vendor/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" media="screen">
 | 
				
			||||||
	<link rel="stylesheet" href="{relative_path}/vendor/fontawesome/css/font-awesome.min.css">
 | 
						<link rel="stylesheet" href="{relative_path}/vendor/fontawesome/css/font-awesome.min.css">
 | 
				
			||||||
 | 
						<script>
 | 
				
			||||||
 | 
							var RELATIVE_PATH = "{relative_path}";
 | 
				
			||||||
 | 
						</script>
 | 
				
			||||||
	<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
 | 
						<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
 | 
				
			||||||
	<script type="text/javascript" src="{relative_path}/vendor/jquery/js/jquery-ui-1.10.3.custom.min.js"></script>
 | 
						<script type="text/javascript" src="{relative_path}/vendor/jquery/js/jquery-ui-1.10.3.custom.min.js"></script>
 | 
				
			||||||
	<script type="text/javascript" src="{relative_path}/vendor/bootstrap/js/bootstrap.min.js"></script>
 | 
						<script type="text/javascript" src="{relative_path}/vendor/bootstrap/js/bootstrap.min.js"></script>
 | 
				
			||||||
@@ -19,7 +22,6 @@
 | 
				
			|||||||
	<script src="{relative_path}/vendor/requirejs/require.js"></script>
 | 
						<script src="{relative_path}/vendor/requirejs/require.js"></script>
 | 
				
			||||||
	<script src="{relative_path}/vendor/bootbox/bootbox.min.js"></script>
 | 
						<script src="{relative_path}/vendor/bootbox/bootbox.min.js"></script>
 | 
				
			||||||
	<script>
 | 
						<script>
 | 
				
			||||||
		var RELATIVE_PATH = "{relative_path}";
 | 
					 | 
				
			||||||
		require.config({
 | 
							require.config({
 | 
				
			||||||
			baseUrl: "{relative_path}/src/modules",
 | 
								baseUrl: "{relative_path}/src/modules",
 | 
				
			||||||
			waitSeconds: 3
 | 
								waitSeconds: 3
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,11 +10,7 @@ var	RDB = require('./redis.js'),
 | 
				
			|||||||
	Categories.getCategoryById = function(category_id, current_user, callback) {
 | 
						Categories.getCategoryById = function(category_id, current_user, callback) {
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		Categories.getCategoryData(category_id, function(err, categoryData) {
 | 
							Categories.getCategoryData(category_id, function(err, categoryData) {
 | 
				
			||||||
			
 | 
								if (err) return callback(err);
 | 
				
			||||||
			if(err) {
 | 
					 | 
				
			||||||
				callback(false);
 | 
					 | 
				
			||||||
				return;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			var category_name = categoryData.name,
 | 
								var category_name = categoryData.name,
 | 
				
			||||||
				category_slug = categoryData.slug;
 | 
									category_slug = categoryData.slug;
 | 
				
			||||||
@@ -75,7 +71,7 @@ var	RDB = require('./redis.js'),
 | 
				
			|||||||
						categoryData.show_sidebar = 'hidden';
 | 
											categoryData.show_sidebar = 'hidden';
 | 
				
			||||||
						categoryData.no_topics_message = 'show';
 | 
											categoryData.no_topics_message = 'show';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						callback(categoryData);
 | 
											callback(null, categoryData);
 | 
				
			||||||
					});
 | 
										});
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					async.parallel([getTopics, getModerators, getActiveUsers], function(err, results) {
 | 
										async.parallel([getTopics, getModerators, getActiveUsers], function(err, results) {
 | 
				
			||||||
@@ -83,7 +79,7 @@ var	RDB = require('./redis.js'),
 | 
				
			|||||||
						categoryData.moderator_block_class = results[1].length > 0 ? '' : 'none';
 | 
											categoryData.moderator_block_class = results[1].length > 0 ? '' : 'none';
 | 
				
			||||||
						categoryData.moderators = results[1];
 | 
											categoryData.moderators = results[1];
 | 
				
			||||||
						categoryData.active_users = results[2];
 | 
											categoryData.active_users = results[2];
 | 
				
			||||||
						callback(categoryData);
 | 
											callback(null, categoryData);
 | 
				
			||||||
					});
 | 
										});
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -341,7 +337,10 @@ var	RDB = require('./redis.js'),
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Categories.getCategoryData = function(cid, callback) {
 | 
						Categories.getCategoryData = function(cid, callback) {
 | 
				
			||||||
		RDB.hgetall('category:' + cid, callback);
 | 
							RDB.exists('category:' + cid, function(err, exists) {
 | 
				
			||||||
 | 
								if (exists) RDB.hgetall('category:' + cid, callback);
 | 
				
			||||||
 | 
								else callback(new Error('No category found!'));
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	Categories.getCategoryFields = function(cid, fields, callback) {
 | 
						Categories.getCategoryFields = function(cid, fields, callback) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,7 +67,12 @@
 | 
				
			|||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Feed.updateCategory = function(cid) {
 | 
						Feed.updateCategory = function(cid) {
 | 
				
			||||||
		categories.getCategoryById(cid, 0, function(categoryData) {
 | 
							categories.getCategoryById(cid, 0, function(err, categoryData) {
 | 
				
			||||||
 | 
								if (err) {
 | 
				
			||||||
 | 
									console.log('Error: Could not update RSS feed for category ' + cid);
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			var location = '/category/' + categoryData.category_id + '/' + categoryData.category_name,
 | 
								var location = '/category/' + categoryData.category_id + '/' + categoryData.category_name,
 | 
				
			||||||
				xml_url = '/category' + cid + '.rss';
 | 
									xml_url = '/category' + cid + '.rss';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -209,11 +209,8 @@ var express = require('express'),
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			var category_url = cid + (req.params.slug ? '/' + req.params.slug : '');
 | 
								var category_url = cid + (req.params.slug ? '/' + req.params.slug : '');
 | 
				
			||||||
			categories.getCategoryById(cid, 0, function(returnData) {
 | 
								categories.getCategoryById(cid, 0, function(err, returnData) {
 | 
				
			||||||
				if(!returnData) {
 | 
									if(err) return res.redirect('404');
 | 
				
			||||||
					res.redirect('404');
 | 
					 | 
				
			||||||
					return;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
				res.send(
 | 
									res.send(
 | 
				
			||||||
					app.build_header(res) +
 | 
										app.build_header(res) +
 | 
				
			||||||
@@ -379,8 +376,9 @@ var express = require('express'),
 | 
				
			|||||||
					});
 | 
										});
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case 'category' :
 | 
								case 'category' :
 | 
				
			||||||
					categories.getCategoryById(req.params.id, uid, function(data) {
 | 
										categories.getCategoryById(req.params.id, uid, function(err, data) {
 | 
				
			||||||
						res.json(data);
 | 
											if (!err) res.json(data);
 | 
				
			||||||
 | 
											else res.send(404);
 | 
				
			||||||
					}, req.params.id, uid);
 | 
										}, req.params.id, uid);
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case 'recent' :
 | 
								case 'recent' :
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user