mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 19:15:58 +01:00 
			
		
		
		
	some work on deleting posts, and allowing a mod to edit a post
This commit is contained in:
		| @@ -201,8 +201,14 @@ footer.footer { | |||||||
| 		text-align: center; | 		text-align: center; | ||||||
| 		font-size: 12px; | 		font-size: 12px; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	li { | 	li { | ||||||
| 		padding-bottom: 15px; | 		padding-bottom: 15px; | ||||||
|  |  | ||||||
|  | 		&.deleted { | ||||||
|  | 			-moz-opacity: 0.30; | ||||||
|  | 			opacity: 0.30;			 | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	.profile-block, .post-block { | 	.profile-block, .post-block { | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ | |||||||
|  |  | ||||||
| <ul id="post-container" class="post-container container"> | <ul id="post-container" class="post-container container"> | ||||||
| <!-- BEGIN posts --> | <!-- BEGIN posts --> | ||||||
| <li class="row"> | <li class="row {posts.deleted-class}"> | ||||||
| 	<div class="span1 profile-image-block visible-desktop"> | 	<div class="span1 profile-image-block visible-desktop"> | ||||||
| 		<!--<i class="icon-spinner icon-spin icon-2x pull-left"></i>--> | 		<!--<i class="icon-spinner icon-spin icon-2x pull-left"></i>--> | ||||||
| 		<a href="/users/{posts.username}"> | 		<a href="/users/{posts.username}"> | ||||||
| @@ -218,15 +218,19 @@ | |||||||
| 		}); | 		}); | ||||||
|  |  | ||||||
|         $('.post-container').delegate('.delete', 'click', function(e) { |         $('.post-container').delegate('.delete', 'click', function(e) { | ||||||
|             var pid = ($(this).attr('id') || $(this.parentNode).attr('id')).split('_')[1]; |             var	pid = ($(this).attr('id') || $(this.parentNode).attr('id')).split('_')[1]; | ||||||
|             alert('delete clicked post id '+pid); |             	confirmDel = confirm('Delete this post?'); | ||||||
|  |  | ||||||
|  |             if (confirmDel) { | ||||||
|  |             	socket.emit('api:posts.delete', { pid: pid }); | ||||||
|  |             } | ||||||
|         });  |         });  | ||||||
|  |  | ||||||
| 		ajaxify.register_events([ | 		ajaxify.register_events([ | ||||||
| 			'event:rep_up', 'event:rep_down', 'event:new_post', 'api:get_users_in_room', | 			'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_deleted', 'event:topic_restored', 'event:topic:locked', | ||||||
| 			'event:topic_unlocked', 'event:topic_pinned', 'event:topic_unpinned', | 			'event:topic_unlocked', 'event:topic_pinned', 'event:topic_unpinned', | ||||||
| 			'event:topic_moved', 'event:post_edited' | 			'event:topic_moved', 'event:post_edited', 'event:post_deleted', 'event:post_restored' | ||||||
| 		]); | 		]); | ||||||
| 		socket.on('api:get_users_in_room', function(users) { | 		socket.on('api:get_users_in_room', function(users) { | ||||||
| 			var anonymous = users.anonymous, | 			var anonymous = users.anonymous, | ||||||
| @@ -315,6 +319,11 @@ | |||||||
| 			}); | 			}); | ||||||
| 		}); | 		}); | ||||||
|  |  | ||||||
|  | 		socket.on('event:post_deleted', function(data) { | ||||||
|  | 			console.log(data); | ||||||
|  | 			if (data.pid) set_post_delete_state(data.pid, true); | ||||||
|  | 		}); | ||||||
|  |  | ||||||
| 		function adjust_rep(value, pid, uid) { | 		function adjust_rep(value, pid, uid) { | ||||||
| 			var post_rep = jQuery('.post_rep_' + pid), | 			var post_rep = jQuery('.post_rep_' + pid), | ||||||
| 				user_rep = jQuery('.user_rep_' + uid); | 				user_rep = jQuery('.user_rep_' + uid); | ||||||
| @@ -485,5 +494,9 @@ | |||||||
| 				thread_state.pinned = '0'; | 				thread_state.pinned = '0'; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		function set_post_delete_state(pid, deleted) { | ||||||
|  | 			console.log('SETTING DELETE STATE: ', pid, deleted); | ||||||
|  | 		} | ||||||
| 	})(); | 	})(); | ||||||
| </script> | </script> | ||||||
							
								
								
									
										45
									
								
								src/posts.js
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								src/posts.js
									
									
									
									
									
								
							| @@ -43,7 +43,8 @@ marked.setOptions({ | |||||||
| 					'display_moderator_tools': (uid == current_user || viewer_data.reputation >= config.privilege_thresholds.manage_content) ? 'show' : 'none', | 					'display_moderator_tools': (uid == current_user || viewer_data.reputation >= config.privilege_thresholds.manage_content) ? 'show' : 'none', | ||||||
| 					'edited-class': post_data.editor[i] !== null ? '' : 'none', | 					'edited-class': post_data.editor[i] !== null ? '' : 'none', | ||||||
| 					'editor': post_data.editor[i] !== null ? user_data[post_data.editor[i]].username : '', | 					'editor': post_data.editor[i] !== null ? user_data[post_data.editor[i]].username : '', | ||||||
| 					'relativeEditTime': post_data.editTime !== null ? utils.relativeTime(post_data.editTime[i]) : '' | 					'relativeEditTime': post_data.editTime !== null ? utils.relativeTime(post_data.editTime[i]) : '', | ||||||
|  | 					'deleted-class': post_data.deleted[i] === '1' ? 'deleted' : '' | ||||||
| 				}); | 				}); | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| @@ -65,7 +66,7 @@ marked.setOptions({ | |||||||
| 		RDB.lrange('tid:' + tid + ':posts', start, end, function(err, pids) { | 		RDB.lrange('tid:' + tid + ':posts', start, end, function(err, pids) { | ||||||
| 			RDB.handle(err); | 			RDB.handle(err); | ||||||
| 			 | 			 | ||||||
| 			var content = [], uid = [], timestamp = [], pid = [], post_rep = [], editor = [], editTime = []; | 			var content = [], uid = [], timestamp = [], pid = [], post_rep = [], editor = [], editTime = [], deleted = []; | ||||||
|  |  | ||||||
| 			for (var i=0, ii=pids.length; i<ii; i++) { | 			for (var i=0, ii=pids.length; i<ii; i++) { | ||||||
| 				content.push('pid:' + pids[i] + ':content'); | 				content.push('pid:' + pids[i] + ':content'); | ||||||
| @@ -74,6 +75,7 @@ marked.setOptions({ | |||||||
| 				post_rep.push('pid:' + pids[i] + ':rep'); | 				post_rep.push('pid:' + pids[i] + ':rep'); | ||||||
| 				editor.push('pid:' + pids[i] + ':editor'); | 				editor.push('pid:' + pids[i] + ':editor'); | ||||||
| 				editTime.push('pid:' + pids[i] + ':edited'); | 				editTime.push('pid:' + pids[i] + ':edited'); | ||||||
|  | 				deleted.push('pid:' + pids[i] + ':deleted'); | ||||||
| 				pid.push(pids[i]); | 				pid.push(pids[i]); | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| @@ -95,6 +97,7 @@ marked.setOptions({ | |||||||
| 				.get('tid:' + tid + ':pinned') | 				.get('tid:' + tid + ':pinned') | ||||||
| 				.mget(editor) | 				.mget(editor) | ||||||
| 				.mget(editTime) | 				.mget(editTime) | ||||||
|  | 				.mget(deleted) | ||||||
| 				.exec(function(err, replies) { | 				.exec(function(err, replies) { | ||||||
| 					post_data = { | 					post_data = { | ||||||
| 						pid: pids, | 						pid: pids, | ||||||
| @@ -103,7 +106,8 @@ marked.setOptions({ | |||||||
| 						timestamp: replies[2], | 						timestamp: replies[2], | ||||||
| 						reputation: replies[3], | 						reputation: replies[3], | ||||||
| 						editor: replies[10], | 						editor: replies[10], | ||||||
| 						editTime: replies[11] | 						editTime: replies[11], | ||||||
|  | 						deleted: replies[12] | ||||||
| 					}; | 					}; | ||||||
|  |  | ||||||
| 					thread_data = { | 					thread_data = { | ||||||
| @@ -291,19 +295,40 @@ marked.setOptions({ | |||||||
| 	Posts.edit = function(uid, pid, content) { | 	Posts.edit = function(uid, pid, content) { | ||||||
| 		RDB.mget(['pid:' + pid + ':tid', 'pid:' + pid + ':uid'], function(err, results) { | 		RDB.mget(['pid:' + pid + ':tid', 'pid:' + pid + ':uid'], function(err, results) { | ||||||
| 			var	tid = results[0], | 			var	tid = results[0], | ||||||
| 				author = results[1]; | 				author = results[1], | ||||||
|  | 				success = function() { | ||||||
|  | 					RDB.set('pid:' + pid + ':content', content); | ||||||
|  | 					RDB.set('pid:' + pid + ':edited', new Date().getTime()); | ||||||
|  | 					RDB.set('pid:' + pid + ':editor', uid); | ||||||
|  |  | ||||||
| 			if (uid === author) { | 					io.sockets.in('topic_' + tid).emit('event:post_edited', { pid: pid, content: marked(content || '') }); | ||||||
| 				RDB.set('pid:' + pid + ':content', content); | 				}; | ||||||
| 				RDB.set('pid:' + pid + ':edited', new Date().getTime()); |  | ||||||
| 				RDB.set('pid:' + pid + ':editor', uid); |  | ||||||
|  |  | ||||||
| 				io.sockets.in('topic_' + tid).emit('event:post_edited', { pid: pid, content: marked(content || '') }); | 			if (uid === author) success(); | ||||||
|  | 			else { | ||||||
|  | 				user.getUserField(uid, 'reputation', function(reputation) { | ||||||
|  | 					if (reputation >= config.privilege_thresholds.manage_content) success(); | ||||||
|  | 				}); | ||||||
| 			} | 			} | ||||||
| 		}); | 		}); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	Posts.delete = function(uid, pid) { | 	Posts.delete = function(uid, pid) { | ||||||
| 		return 'elephants'; | 		RDB.mget(['pid:' + pid + ':tid', 'pid:' + pid + ':uid'], function(err, results) { | ||||||
|  | 			var	tid = results[0], | ||||||
|  | 				author = results[1], | ||||||
|  | 				success = function() { | ||||||
|  | 					RDB.set('pid:' + pid + ':deleted', 1); | ||||||
|  |  | ||||||
|  | 					io.sockets.in('topic_' + tid).emit('event:post_deleted', { pid: pid }); | ||||||
|  | 				}; | ||||||
|  |  | ||||||
|  | 			if (uid === author) success(); | ||||||
|  | 			else { | ||||||
|  | 				user.getUserField(uid, 'reputation', function(reputation) { | ||||||
|  | 					if (reputation >= config.privilege_thresholds.manage_content) success(); | ||||||
|  | 				}); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
| 	} | 	} | ||||||
| }(exports)); | }(exports)); | ||||||
| @@ -222,6 +222,14 @@ var	SocketIO = require('socket.io').listen(global.server,{log:false}), | |||||||
| 		socket.on('api:posts.edit', function(data) { | 		socket.on('api:posts.edit', function(data) { | ||||||
| 			modules.posts.edit(uid, data.pid, data.content); | 			modules.posts.edit(uid, data.pid, data.content); | ||||||
| 		}); | 		}); | ||||||
|  |  | ||||||
|  | 		socket.on('api:posts.delete', function(data) { | ||||||
|  | 			modules.posts.delete(uid, data.pid); | ||||||
|  | 		}); | ||||||
|  |  | ||||||
|  | 		socket.on('api:posts.restore', function(data) { | ||||||
|  | 			modules.posts.restore(uid, data.pid); | ||||||
|  | 		}); | ||||||
| 	}); | 	}); | ||||||
| 	 | 	 | ||||||
| }(SocketIO)); | }(SocketIO)); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user