more fixes

v1.18.x
Baris Soner Usakli 11 years ago
parent 6da6baa213
commit 426d3e871f

@ -15,37 +15,25 @@ define(function() {
switch (action) { switch (action) {
case 'pin': case 'pin':
if (!$this.hasClass('active')) { if (!$this.hasClass('active')) {
socket.emit('topics.pin', { socket.emit('topics.pin', tid, Topics.pin);
tid: tid
}, Topics.pin);
} else { } else {
socket.emit('topics.unpin', { socket.emit('topics.unpin', tid, Topics.unpin);
tid: tid
}, Topics.unpin);
} }
break; break;
case 'lock': case 'lock':
if (!$this.hasClass('active')) { if (!$this.hasClass('active')) {
socket.emit('topics.lock', { socket.emit('topics.lock', tid, Topics.lock);
tid: tid
}, Topics.lock);
} else { } else {
socket.emit('topics.unlock', { socket.emit('topics.unlock', tid, Topics.unlock);
tid: tid
}, Topics.unlock);
} }
break; break;
case 'delete': case 'delete':
if (!$this.hasClass('active')) { if (!$this.hasClass('active')) {
socket.emit('topics.delete', { socket.emit('topics.delete', tid, Topics.setDeleted);
tid: tid
}, Topics.setDeleted);
} else { } else {
socket.emit('topics.restore', { socket.emit('topics.restore', tid, Topics.restore);
tid: tid
}, Topics.restore);
} }
break; break;
@ -116,8 +104,12 @@ define(function() {
} }
} }
Topics.setDeleted = function(response) { Topics.setDeleted = function(err, response) {
if (response.status === 'ok') { if(err) {
return app.alert(err.message);
}
if (response && response.tid) {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="delete"]'); var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="delete"]');
$(btnEl).addClass('active'); $(btnEl).addClass('active');
@ -125,8 +117,12 @@ define(function() {
} }
}; };
Topics.restore = function(response) { Topics.restore = function(err, response) {
if (response.status === 'ok') { if(err) {
return app.alert(err.message);
}
if (response && response.tid) {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="delete"]'); var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="delete"]');
$(btnEl).removeClass('active'); $(btnEl).removeClass('active');
@ -134,16 +130,24 @@ define(function() {
} }
}; };
Topics.lock = function(response) { Topics.lock = function(err, response) {
if (response.status === 'ok') { if(err) {
return app.alert(err.message);
}
if (response && response.tid) {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="lock"]'); var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="lock"]');
$(btnEl).addClass('active'); $(btnEl).addClass('active');
} }
}; };
Topics.unlock = function(response) { Topics.unlock = function(err, response) {
if (response.status === 'ok') { if(err) {
return app.alert(err.message);
}
if (response && response.tid) {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="lock"]'); var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="lock"]');
$(btnEl).removeClass('active'); $(btnEl).removeClass('active');
@ -151,16 +155,24 @@ define(function() {
}; };
Topics.unpin = function(response) { Topics.unpin = function(err, response) {
if (response.status === 'ok') { if(err) {
return app.alert(err.message);
}
if (response && response.tid) {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="pin"]'); var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="pin"]');
$(btnEl).removeClass('active'); $(btnEl).removeClass('active');
} }
}; };
Topics.pin = function(response) { Topics.pin = function(err, response) {
if (response.status === 'ok') { if(err) {
return app.alert(err.message);
}
if (response && response.tid) {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="pin"]'); var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="pin"]');
$(btnEl).addClass('active'); $(btnEl).addClass('active');

@ -52,16 +52,14 @@ define(['composer'], function(composer) {
if (thread_state.deleted !== '1') { if (thread_state.deleted !== '1') {
bootbox.confirm('Are you sure you want to delete this thread?', function(confirm) { bootbox.confirm('Are you sure you want to delete this thread?', function(confirm) {
if (confirm) { if (confirm) {
socket.emit('topics.delete', { socket.emit('topics.delete', tid);
tid: tid
}, null);
} }
}); });
} else { } else {
bootbox.confirm('Are you sure you want to restore this thread?', function(confirm) { bootbox.confirm('Are you sure you want to restore this thread?', function(confirm) {
if (confirm) socket.emit('topics.restore', { if (confirm) {
tid: tid socket.emit('topics.restore', tid);
}, null); }
}); });
} }
return false; return false;
@ -69,26 +67,18 @@ define(['composer'], function(composer) {
$('.lock_thread').on('click', function(e) { $('.lock_thread').on('click', function(e) {
if (thread_state.locked !== '1') { if (thread_state.locked !== '1') {
socket.emit('topics.lock', { socket.emit('topics.lock', tid);
tid: tid
}, null);
} else { } else {
socket.emit('topics.unlock', { socket.emit('topics.unlock', tid);
tid: tid
}, null);
} }
return false; return false;
}); });
$('.pin_thread').on('click', function(e) { $('.pin_thread').on('click', function(e) {
if (thread_state.pinned !== '1') { if (thread_state.pinned !== '1') {
socket.emit('topics.pin', { socket.emit('topics.pin', tid);
tid: tid
}, null);
} else { } else {
socket.emit('topics.unpin', { socket.emit('topics.unpin', tid);
tid: tid
}, null);
} }
return false; return false;
}); });
@ -629,45 +619,47 @@ define(['composer'], function(composer) {
}); });
socket.on('event:topic_deleted', function(data) { socket.on('event:topic_deleted', function(data) {
if (data.tid === tid && data.status === 'ok') { if (data && data.tid === tid) {
set_locked_state(true); set_locked_state(true);
set_delete_state(true); set_delete_state(true);
} }
}); });
socket.on('event:topic_restored', function(data) { socket.on('event:topic_restored', function(data) {
if (data.tid === tid && data.status === 'ok') { if (data && data.tid === tid) {
set_locked_state(false); set_locked_state(false);
set_delete_state(false); set_delete_state(false);
} }
}); });
socket.on('event:topic_locked', function(data) { socket.on('event:topic_locked', function(data) {
if (data.tid === tid && data.status === 'ok') { if (data && data.tid === tid) {
set_locked_state(true, 1); set_locked_state(true, 1);
} }
}); });
socket.on('event:topic_unlocked', function(data) { socket.on('event:topic_unlocked', function(data) {
if (data.tid === tid && data.status === 'ok') { if (data && data.tid === tid) {
set_locked_state(false, 1); set_locked_state(false, 1);
} }
}); });
socket.on('event:topic_pinned', function(data) { socket.on('event:topic_pinned', function(data) {
if (data.tid === tid && data.status === 'ok') { if (data && data.tid === tid) {
set_pinned_state(true, 1); set_pinned_state(true, 1);
} }
}); });
socket.on('event:topic_unpinned', function(data) { socket.on('event:topic_unpinned', function(data) {
if (data.tid === tid && data.status === 'ok') { if (data && data.tid === tid) {
set_pinned_state(false, 1); set_pinned_state(false, 1);
} }
}); });
socket.on('event:topic_moved', function(data) { socket.on('event:topic_moved', function(data) {
if (data && data.tid > 0) ajaxify.go('topic/' + data.tid); if (data && data.tid > 0) {
ajaxify.go('topic/' + data.tid);
}
}); });
socket.on('event:post_edited', function(data) { socket.on('event:post_edited', function(data) {

@ -55,19 +55,19 @@ define(function() {
$('#mark-allread-btn').on('click', function() { $('#mark-allread-btn').on('click', function() {
var btn = $(this); var btn = $(this);
socket.emit('topics.markAllRead', {}, function(success) { socket.emit('topics.markAllRead', function(err) {
if (success) { if(err) {
btn.remove(); return app.alertError('There was an error marking topics read!');
$('#topics-container').empty();
$('#category-no-topics').removeClass('hidden');
app.alertSuccess('All topics marked as read!');
$('#numUnreadBadge')
.removeClass('badge-important')
.addClass('badge-inverse')
.html('0');
} else {
app.alertError('There was an error marking topics read!');
} }
btn.remove();
$('#topics-container').empty();
$('#category-no-topics').removeClass('hidden');
app.alertSuccess('All topics marked as read!');
$('#numUnreadBadge')
.removeClass('badge-important')
.addClass('badge-inverse')
.html('0');
}); });
}); });

@ -5,7 +5,11 @@ var topics = require('../topics'),
SocketTopics.post = function(socket, data, callback) { SocketTopics.post = function(socket, data, callback) {
if (socket.uid < 1 && parseInt(meta.config.allowGuestPosting, 10) === 0) { if(!data) {
return callback(new Error('Invalid data'));
}
if (!socket.uid && !parseInt(meta.config.allowGuestPosting, 10)) {
socket.emit('event:alert', { socket.emit('event:alert', {
title: 'Post Unsuccessful', title: 'Post Unsuccessful',
message: 'You don&apos;t seem to be logged in, so you cannot reply.', message: 'You don&apos;t seem to be logged in, so you cannot reply.',
@ -58,7 +62,7 @@ SocketTopics.post = function(socket, data, callback) {
type: 'success', type: 'success',
timeout: 2000 timeout: 2000
}); });
callback(); callback(null);
} }
}); });
}; };
@ -68,122 +72,59 @@ SocketTopics.postcount = function(socket, tid, callback) {
}; };
SocketTopics.markAllRead = function(socket, data, callback) { SocketTopics.markAllRead = function(socket, data, callback) {
topics.markAllRead(socket.uid, function(err, success) { topics.markAllRead(socket.uid, function(err) {
if (!err && success) {
callback(true);
index.server.sockets.in('uid_' + socket.uid).emit('event:unread.updateCount', 0);
} else {
callback(false);
}
});
};
SocketTopics.delete = function(socket, data, callback) {
threadTools.privileges(data.tid, socket.uid, function(err, privileges) {
if(err) { if(err) {
return callback(err); return callback(err);
} }
if(!privileges.editable) { index.server.sockets.in('uid_' + socket.uid).emit('event:unread.updateCount', 0);
return callback(new Error('not-allowed'));
}
threadTools.delete(data.tid, socket.uid, function(err) { callback(null);
if(err) {
return callback(err);
}
module.parent.exports.emitTopicPostStats();
callback(null, 'topic.delete', {
status: 'ok',
tid: data.tid
});
});
}); });
}; };
SocketTopics.restore = function(socket, data, callback) { function doTopicAction(action, socket, tid, callback) {
threadTools.privileges(data.tid, socket.uid, function(err, privileges) { if(!tid) {
if(err) { return callback(new Error('Invalid tid'));
return callback(err); }
}
if(!privileges.editable) {
return callback(new Error('not-allowed'));
}
threadTools.restore(data.tid, socket.uid, function(err) {
if(err) {
return callback(err);
}
module.parent.exports.emitTopicPostStats();
callback(null, 'topic.restore', {
status: 'ok',
tid: data.tid
});
});
});
};
SocketTopics.lock = function(socket, data, callback) { threadTools.privileges(tid, socket.uid, function(err, privileges) {
threadTools.privileges(data.tid, socket.uid, function(err, privileges) {
if(err) { if(err) {
return callback(err); return callback(err);
} }
if (!privileges.editable) { if(!privileges || !privileges.editable) {
return callback(new Error('not-allowed')); return callback(new Error('not-allowed'));
} }
threadTools.lock(data.tid, callback); if(threadTools[action]) {
}); threadTools[action](tid, socket.uid, callback);
};
SocketTopics.unlock = function(socket, data, callback) {
threadTools.privileges(data.tid, socket.uid, function(err, privileges) {
if(err) {
return callback(err);
} }
if (!privileges.editable) {
return callback(new Error('not-allowed'));
}
threadTools.unlock(data.tid, callback);
}); });
}; }
SocketTopics.pin = function(socket, data, callback) { SocketTopics.delete = function(socket, tid, callback) {
threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { doTopicAction('delete', socket, tid, callback);
if(err) { };
return callback(err);
}
if (!privileges.editable) { SocketTopics.restore = function(socket, tid, callback) {
return callback(new Error('not-allowed')); doTopicAction('restore', socket, tid, callback);
} };
threadTools.pin(data.tid, callback); SocketTopics.lock = function(socket, tid, callback) {
}); doTopicAction('lock', socket, tid, callback);
}; };
SocketTopics.unpin = function(socket, data, callback) { SocketTopics.unlock = function(socket, tid, callback) {
threadTools.privileges(data.tid, socket.uid, function(err, privileges) { doTopicAction('unlock', socket, tid, callback);
if(err) { };
return callback(err);
}
if (!privileges.editable) { SocketTopics.pin = function(socket, tid, callback) {
return callback(new Error('not-allowed')); doTopicAction('pin', socket, tid, callback);
} };
threadTools.unpin(data.tid, callback); SocketTopics.unpin = function(socket, tid, callback) {
}); doTopicAction('unpin', socket, tid, callback);
}; };
SocketTopics.createTopicFromPosts = function(socket, data, callback) { SocketTopics.createTopicFromPosts = function(socket, data, callback) {

@ -66,13 +66,16 @@ var winston = require('winston'),
events.logTopicDelete(uid, tid); events.logTopicDelete(uid, tid);
websockets.emitTopicPostStats();
websockets.in('topic_' + tid).emit('event:topic_deleted', { websockets.in('topic_' + tid).emit('event:topic_deleted', {
tid: tid, tid: tid
status: 'ok'
}); });
if (callback) { if (callback) {
callback(null); callback(null, {
tid: tid
});
} }
} }
@ -83,9 +86,10 @@ var winston = require('winston'),
events.logTopicRestore(uid, tid); events.logTopicRestore(uid, tid);
websockets.emitTopicPostStats();
websockets.in('topic_' + tid).emit('event:topic_restored', { websockets.in('topic_' + tid).emit('event:topic_restored', {
tid: tid, tid: tid
status: 'ok'
}); });
topics.getTopicField(tid, 'title', function(err, title) { topics.getTopicField(tid, 'title', function(err, title) {
@ -93,75 +97,69 @@ var winston = require('winston'),
}); });
if(callback) { if(callback) {
callback(null); callback(null, {
tid:tid
});
} }
} }
ThreadTools.lock = function(tid, callback) { ThreadTools.lock = function(tid, uid, callback) {
topics.setTopicField(tid, 'locked', 1); topics.setTopicField(tid, 'locked', 1);
websockets.in('topic_' + tid).emit('event:topic_locked', { websockets.in('topic_' + tid).emit('event:topic_locked', {
tid: tid, tid: tid
status: 'ok'
}); });
if (callback) { if (callback) {
callback({ callback(null, {
status: 'ok',
tid: tid tid: tid
}); });
} }
} }
ThreadTools.unlock = function(tid, callback) { ThreadTools.unlock = function(tid, uid, callback) {
topics.setTopicField(tid, 'locked', 0); topics.setTopicField(tid, 'locked', 0);
websockets.in('topic_' + tid).emit('event:topic_unlocked', { websockets.in('topic_' + tid).emit('event:topic_unlocked', {
tid: tid, tid: tid
status: 'ok'
}); });
if (callback) { if (callback) {
callback({ callback(null, {
status: 'ok',
tid: tid tid: tid
}); });
} }
} }
ThreadTools.pin = function(tid, callback) { ThreadTools.pin = function(tid, uid, callback) {
topics.setTopicField(tid, 'pinned', 1); topics.setTopicField(tid, 'pinned', 1);
topics.getTopicField(tid, 'cid', function(err, cid) { topics.getTopicField(tid, 'cid', function(err, cid) {
db.sortedSetAdd('categories:' + cid + ':tid', Math.pow(2, 53), tid); db.sortedSetAdd('categories:' + cid + ':tid', Math.pow(2, 53), tid);
}); });
websockets.in('topic_' + tid).emit('event:topic_pinned', { websockets.in('topic_' + tid).emit('event:topic_pinned', {
tid: tid, tid: tid
status: 'ok'
}); });
if (callback) { if (callback) {
callback({ callback(null, {
status: 'ok',
tid: tid tid: tid
}); });
} }
} }
ThreadTools.unpin = function(tid, callback) { ThreadTools.unpin = function(tid, uid, callback) {
topics.setTopicField(tid, 'pinned', 0); topics.setTopicField(tid, 'pinned', 0);
topics.getTopicFields(tid, ['cid', 'lastposttime'], function(err, topicData) { topics.getTopicFields(tid, ['cid', 'lastposttime'], function(err, topicData) {
db.sortedSetAdd('categories:' + topicData.cid + ':tid', topicData.lastposttime, tid); db.sortedSetAdd('categories:' + topicData.cid + ':tid', topicData.lastposttime, tid);
}); });
websockets.in('topic_' + tid).emit('event:topic_unpinned', { websockets.in('topic_' + tid).emit('event:topic_unpinned', {
tid: tid, tid: tid
status: 'ok'
}); });
if (callback) { if (callback) {
callback({ callback(null, {
status: 'ok',
tid: tid tid: tid
}); });
} }
@ -175,9 +173,7 @@ var winston = require('winston'),
db.sortedSetAdd('categories:' + cid + ':tid', topicData.lastposttime, tid, function(err, result) { db.sortedSetAdd('categories:' + cid + ':tid', topicData.lastposttime, tid, function(err, result) {
if(err) { if(err) {
return callback({ return callback(err);
status: 'error'
});
} }
topics.setTopicField(tid, 'cid', cid); topics.setTopicField(tid, 'cid', cid);
@ -193,10 +189,7 @@ var winston = require('winston'),
categories.incrementCategoryFieldBy(oldCid, 'topic_count', -1); categories.incrementCategoryFieldBy(oldCid, 'topic_count', -1);
categories.incrementCategoryFieldBy(cid, 'topic_count', 1); categories.incrementCategoryFieldBy(cid, 'topic_count', 1);
callback({ callback(null);
status: 'ok'
});
}); });
}); });
}); });

@ -75,19 +75,24 @@ var async = require('async'),
return callback(new Error('no-privileges')); return callback(new Error('no-privileges'));
} else if (!cid) { } else if (!cid) {
return callback(new Error('invalid-cid')); return callback(new Error('invalid-cid'));
} else if (!title || title.length < parseInt(meta.config.minimumTitleLength, 10)) { }
if (title) {
title = title.trim();
}
if (!title || title.length < parseInt(meta.config.minimumTitleLength, 10)) {
return callback(new Error('title-too-short'), null); return callback(new Error('title-too-short'), null);
} else if(title.length > parseInt(meta.config.maximumTitleLength, 10)) { } else if(title.length > parseInt(meta.config.maximumTitleLength, 10)) {
return callback(new Error('title-too-long'), null); return callback(new Error('title-too-long'), null);
} else if (!content || content.length < meta.config.miminumPostLength) {
return callback(new Error('content-too-short'), null);
} }
if (content) { if (content) {
content = content.trim(); content = content.trim();
} }
if (title) {
title = title.trim(); if (!content || content.length < meta.config.miminumPostLength) {
return callback(new Error('content-too-short'), null);
} }
user.getUserField(uid, 'lastposttime', function(err, lastposttime) { user.getUserField(uid, 'lastposttime', function(err, lastposttime) {
@ -888,7 +893,7 @@ var async = require('async'),
Topics.markAllRead = function(uid, callback) { Topics.markAllRead = function(uid, callback) {
db.getSetMembers('topics:tid', function(err, tids) { db.getSetMembers('topics:tid', function(err, tids) {
if (err) { if (err) {
return callback(err, null); return callback(err);
} }
if (tids && tids.length) { if (tids && tids.length) {
@ -897,7 +902,7 @@ var async = require('async'),
} }
} }
callback(null, true); callback(null);
}); });
} }

Loading…
Cancel
Save