From 6013017ffd60020e024372c28540790b9bad91ab Mon Sep 17 00:00:00 2001
From: Julian Lam <julian@designcreateplay.com>
Date: Thu, 16 May 2013 11:23:57 -0400
Subject: [PATCH 1/4] fixing bug where the favourites star was still shaded in
 if an anon tried to favourite a post

---
 public/templates/topic.tpl | 11 +++++++++--
 src/posts.js               |  9 +++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/public/templates/topic.tpl b/public/templates/topic.tpl
index ed08976290..365004038c 100644
--- a/public/templates/topic.tpl
+++ b/public/templates/topic.tpl
@@ -280,7 +280,8 @@
 			'event:rep_up', 'event:rep_down', 'event:new_post', 'api:get_users_in_room',
 			'event:topic_deleted', 'event:topic_restored', 'event:topic:locked',
 			'event:topic_unlocked', 'event:topic_pinned', 'event:topic_unpinned',
-			'event:topic_moved', 'event:post_edited', 'event:post_deleted', 'event:post_restored'
+			'event:topic_moved', 'event:post_edited', 'event:post_deleted', 'event:post_restored',
+			'api:posts.favourite'
 		]);
 		socket.on('api:get_users_in_room', function(users) {
 			var anonymous = users.anonymous,
@@ -370,6 +371,13 @@
 			});
 		});
 
+		socket.on('api:posts.favourite', function(data) {
+			if (data.status !== 'ok' && data.pid) {
+				var favEl = document.querySelector('.post_rep_' + data.pid).nextSibling;
+				if (favEl) favEl.className = 'icon-star-empty';
+			}
+		});
+
 		socket.on('event:post_deleted', function(data) {
 			if (data.pid) toggle_post_delete_state(data.pid, true);
 		});
@@ -420,7 +428,6 @@
 					pid = ids[0],
 					uid = ids[1];
 
-				
 				if (thread_state.locked !== '1') {
 					if (this.children[1].className == 'icon-star-empty') {
 						this.children[1].className = 'icon-star';
diff --git a/src/posts.js b/src/posts.js
index e14f67e889..42a98c83e8 100644
--- a/src/posts.js
+++ b/src/posts.js
@@ -277,6 +277,11 @@ marked.setOptions({
 				type: 'error',
 				timeout: 5000
 			});
+
+			socket.emit('api:posts.favourite', {
+				status: 'error',
+				pid: pid
+			});
 			return;
 		}
 
@@ -293,6 +298,10 @@ marked.setOptions({
 					if (room_id) {
 						io.sockets.in(room_id).emit('event:rep_up', {uid: uid !== uid_of_poster ? uid_of_poster : 0, pid: pid});
 					}
+
+					socket.emit('api:posts.favourite', {
+						status: 'ok'
+					});
 				}
 			});
 		});

From 9d5f6364ade6dc0082765e79487988b58c6a4394 Mon Sep 17 00:00:00 2001
From: Baris Usakli <barisusakli@gmail.com>
Date: Thu, 16 May 2013 11:53:27 -0400
Subject: [PATCH 2/4] removed console.logs

---
 public/src/app.js  | 1 +
 src/routes/user.js | 6 ++----
 src/user.js        | 2 +-
 3 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/public/src/app.js b/public/src/app.js
index a82c730ee2..b8d2afd710 100644
--- a/public/src/app.js
+++ b/public/src/app.js
@@ -36,6 +36,7 @@ var socket,
 				$('#disconnect-modal').show();
 				$('#reload-button').on('click',function(){
 					$('#disconnect-modal').hide();
+					console.log(window.location.href);
 					window.location.reload();
 				});
 			});
diff --git a/src/routes/user.js b/src/routes/user.js
index caff2c837d..6e74a88653 100644
--- a/src/routes/user.js
+++ b/src/routes/user.js
@@ -101,8 +101,6 @@ var user = require('./../user.js'),
 			var allowedTypes = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'];
 			var type = req.files.userPhoto.type;
 			
-			console.log(req.files.userPhoto);
-
 			if(allowedTypes.indexOf(type) === -1) {
 				res.send({
 					error: 'Allowed image types are png, jpg and gif!'
@@ -284,9 +282,9 @@ var user = require('./../user.js'),
 		
 				user.getUserData(uid, function(data) {
 					if(data) {
-						console.log(data.joindate);
+
 						data.joindate = utils.relativeTime(data.joindate);
-						console.log(data.joindate);
+
 						if(!data.birthday)
 							data.age = '';
 						else
diff --git a/src/user.js b/src/user.js
index e378f40bb4..6cc5a39dbc 100644
--- a/src/user.js
+++ b/src/user.js
@@ -80,7 +80,7 @@ var config = require('../config.js'),
 		for(var i=0,ii=fields.length; i<ii; ++i) {
 			key = fields[i];
 			if(data[key] !== undefined) {
-				console.log(data[key]);
+
 				User.setUserField(uid, key, data[key]);
 				
 				if(key === 'email') {

From 34432773d664a8e3862d0eca373e90aa97acc684 Mon Sep 17 00:00:00 2001
From: Baris Usakli <barisusakli@gmail.com>
Date: Thu, 16 May 2013 12:13:39 -0400
Subject: [PATCH 3/4] fix crash when you go to /topics/nonexistant

---
 public/src/templates.js |  7 +++++++
 src/posts.js            |  6 ++++++
 src/topics.js           |  6 ++++++
 src/webserver.js        | 20 ++++++++++++++++++++
 4 files changed, 39 insertions(+)

diff --git a/public/src/templates.js b/public/src/templates.js
index 3c0f40531d..c2b75a4779 100644
--- a/public/src/templates.js
+++ b/public/src/templates.js
@@ -40,6 +40,7 @@ var templates = {};
 		for (var t in templatesToLoad) {
 			(function(file) {
 				$.get('/templates/' + file + '.tpl?v=' + timestamp, function(html) {
+		
 					var template = function() {
 						this.toString = function() {
 							return this.html;
@@ -168,6 +169,12 @@ function load_template(callback, url, template) {
 
 	jQuery.get(API_URL + url, function(data) {
 
+		console.log(data);
+		if(!data) {
+			window.location.href = '/403';
+			return;
+		}
+
 		var tpl = templates.get_custom_map(url);
 		
 		if (tpl == false && !templates[url]) {
diff --git a/src/posts.js b/src/posts.js
index 42a98c83e8..9b56403f68 100644
--- a/src/posts.js
+++ b/src/posts.js
@@ -12,6 +12,7 @@ marked.setOptions({
 (function(Posts) {
 
 	Posts.get = function(callback, tid, current_user, start, end) {
+
 		if (start == null) start = 0;
 		if (end == null) end = start + 10;
 
@@ -74,6 +75,11 @@ marked.setOptions({
 		// get all data for thread in asynchronous fashion
 		RDB.lrange('tid:' + tid + ':posts', start, end, function(err, pids) {
 			RDB.handle(err);
+
+			if(pids.length === 0){
+				callback(false);
+				return;
+			}
 			
 			var content = [], uid = [], timestamp = [], pid = [], post_rep = [], editor = [], editTime = [], deleted = [];
 
diff --git a/src/topics.js b/src/topics.js
index ead41792d1..0e2efd92d5 100644
--- a/src/topics.js
+++ b/src/topics.js
@@ -20,6 +20,12 @@ var	RDB = require('./redis.js'),
 		var range_var = (category_id) ? 'categories:' + category_id + ':tid'  : 'topics:tid';
 
 		RDB.smembers(range_var, function(err, tids) {
+			
+			if(tids.length === 0) {
+				callback(false);
+				return;
+			}
+
 			var title = [],
 				uid = [],
 				timestamp = [],
diff --git a/src/webserver.js b/src/webserver.js
index 3de6acdc98..4202bfb575 100644
--- a/src/webserver.js
+++ b/src/webserver.js
@@ -154,26 +154,46 @@ var express = require('express'),
 				break;
 			case 'topic' :
 					posts.get(function(data) {
+						if(!data) {
+							res.send(false);
+							return;
+						}
 						res.send(JSON.stringify(data));
 					}, req.params.id, (req.user) ? req.user.uid : 0);
 				break;
 			case 'category' :
 					topics.get(function(data) {
+						if(!data) {
+							res.send(false);
+							return;
+						}
 						res.send(JSON.stringify(data));
 					}, req.params.id, (req.user) ? req.user.uid : 0);
 				break;
 			case 'latest' :
 					topics.get(function(data) {
+						if(!data) {
+							res.send(false);
+							return;
+						}
 						res.send(JSON.stringify(data));
 					});
 				break;
 			case 'popular' :
 					topics.get(function(data) {
+						if(!data) {
+							res.send(false);
+							return;
+						}
 						res.send(JSON.stringify(data));
 					});
 				break;
 			case 'active' :
 					topics.get(function(data) {
+						if(!data) {
+							res.send(false);
+							return;
+						}
 						res.send(JSON.stringify(data));
 					});
 				break;

From 96df6abe85d720ef978ff3eeb9ba64301af6cab7 Mon Sep 17 00:00:00 2001
From: Baris Usakli <barisusakli@gmail.com>
Date: Thu, 16 May 2013 12:21:13 -0400
Subject: [PATCH 4/4] broken posts

---
 src/posts.js | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/src/posts.js b/src/posts.js
index 9b56403f68..2c74859dcb 100644
--- a/src/posts.js
+++ b/src/posts.js
@@ -75,12 +75,7 @@ marked.setOptions({
 		// get all data for thread in asynchronous fashion
 		RDB.lrange('tid:' + tid + ':posts', start, end, function(err, pids) {
 			RDB.handle(err);
-
-			if(pids.length === 0){
-				callback(false);
-				return;
-			}
-			
+	
 			var content = [], uid = [], timestamp = [], pid = [], post_rep = [], editor = [], editTime = [], deleted = [];
 
 			for (var i=0, ii=pids.length; i<ii; i++) {