@ -13,34 +13,28 @@ marked.setOptions({
( function ( Posts ) {
Posts . get = function ( callback , tid , current _user , start , end ) {
if ( start == null ) start = 0 ;
if ( end == null ) end = - 1 ; //start + 10;
var post _data , user _data , thread _data , vote _data , viewer_data ;
var post _data , user _data , thread _data , vote _data , privileges ;
getTopicPosts ( ) ;
get ViewerData ( ) ;
get Privileges ( ) ;
//compile thread after all data is asynchronously called
function generateThread ( ) {
if ( ! post _data || ! user _data || ! thread _data || ! vote _data || ! viewer_data ) return ;
if ( ! post _data || ! user _data || ! thread _data || ! vote _data || ! privileges ) return ;
var posts = [ ] ,
main _posts = [ ] ,
manage _content = (
viewer _data . reputation >= config . privilege _thresholds . manage _content ||
viewer _data . isModerator ||
viewer _data . isAdministrator
) ;
main _posts = [ ] ;
for ( var i = 0 , ii = post _data . pid . length ; i < ii ; i ++ ) {
var uid = post _data . uid [ i ] ,
pid = post _data . pid [ i ] ;
if ( post _data . deleted [ i ] === null || ( post _data . deleted [ i ] === '1' && manage_content ) || current _user === uid ) {
if ( post _data . deleted [ i ] === null || ( post _data . deleted [ i ] === '1' && privileges. view _deleted ) || current _user === uid ) {
var post _obj = {
'pid' : pid ,
'uid' : uid ,
@ -53,7 +47,7 @@ marked.setOptions({
'gravatar' : user _data [ uid ] . picture || 'http://www.gravatar.com/avatar/d41d8cd98f00b204e9800998ecf8427e' ,
'signature' : user _data [ uid ] . signature ,
'fav_star_class' : vote _data [ pid ] ? 'icon-star' : 'icon-star-empty' ,
'display_moderator_tools' : ( uid == current _user || manage_content || viewer _data . isModerator ) ? 'show' : 'none' ,
'display_moderator_tools' : ( uid == current _user || privileges. editable ) ? 'show' : 'none' ,
'edited-class' : post _data . editor [ i ] !== null ? '' : 'none' ,
'editor' : post _data . editor [ i ] !== null ? user _data [ post _data . editor [ i ] ] . username : '' ,
'relativeEditTime' : post _data . editTime !== null ? utils . relativeTime ( post _data . editTime [ i ] ) : '' ,
@ -73,7 +67,7 @@ marked.setOptions({
'deleted' : parseInt ( thread _data . deleted ) || 0 ,
'pinned' : parseInt ( thread _data . pinned ) || 0 ,
'topic_id' : tid ,
'expose_tools' : manage_content ? 1 : 0 ,
'expose_tools' : privileges. editable ? 1 : 0 ,
'posts' : posts ,
'main_posts' : main _posts
} ) ;
@ -159,40 +153,23 @@ marked.setOptions({
} ) ;
}
function getViewerData ( ) {
async . parallel ( [
function ( callback ) {
user . getUserField ( current _user , 'reputation' , function ( reputation ) {
viewer _data = viewer _data || { } ;
viewer _data . reputation = reputation ;
callback ( null ) ;
} ) ;
} ,
function ( callback ) {
RDB . get ( 'tid:' + tid + ':cid' , function ( err , cid ) {
user . isModerator ( current _user , cid , function ( isMod ) {
viewer _data = viewer _data || { } ;
viewer _data . isModerator = isMod ;
callback ( null ) ;
} ) ;
} )
} ,
function ( callback ) {
user . isAdministrator ( current _user , function ( isAdmin ) {
viewer _data = viewer _data || { } ;
viewer _data . isAdministrator = isAdmin ;
callback ( null ) ;
} ) ;
}
] , function ( err ) {
function getPrivileges ( ) {
topics . privileges ( tid , current _user , function ( user _privs ) {
privileges = user _privs ;
generateThread ( ) ;
} ) ;
}
}
Posts . editable = function ( uid , p id, callback ) {
Posts . privileges = function ( pid , uid , callback ) {
async . parallel ( [
function ( next ) {
Posts . get _tid _by _pid ( pid , function ( tid ) {
topics . privileges ( tid , uid , function ( privileges ) {
next ( null , privileges ) ;
} ) ;
} ) ;
} ,
function ( next ) {
RDB . get ( 'pid:' + pid + ':uid' , function ( err , author ) {
if ( author && parseInt ( author ) > 0 ) next ( null , author === uid ) ;
@ -202,23 +179,12 @@ marked.setOptions({
user . getUserField ( uid , 'reputation' , function ( reputation ) {
next ( null , reputation >= config . privilege _thresholds . manage _content ) ;
} ) ;
} ,
function ( next ) {
Posts . get _tid _by _pid ( pid , function ( tid ) {
RDB . get ( 'tid:' + tid + ':cid' , function ( err , cid ) {
user . isModerator ( uid , cid , function ( isMod ) {
next ( null , isMod ) ;
} ) ;
} ) ;
} ) ;
} , function ( next ) {
user . isAdministrator ( uid , function ( isAdmin ) {
next ( null , isAdmin ) ;
} ) ;
}
] , function ( err , results ) {
// If any return true, allow the edit
if ( results . indexOf ( true ) !== - 1 ) callback ( true ) ;
callback ( {
editable : results [ 0 ] . editable || ( results . slice ( 1 ) . indexOf ( true ) !== - 1 ? true : false ) ,
view _deleted : results [ 0 ] . view _deleted || ( results . slice ( 1 ) . indexOf ( true ) !== - 1 ? true : false )
} ) ;
} ) ;
}
@ -462,8 +428,8 @@ marked.setOptions({
} ) ;
} ;
Posts . editable( uid , pid , function ( editable ) {
if ( editable) success ( ) ;
Posts . privileges( pid , uid , function ( privileges ) {
if ( privileges. editable) success ( ) ;
} ) ;
}
@ -476,8 +442,8 @@ marked.setOptions({
} ) ;
} ;
Posts . editable( uid , pid , function ( editable ) {
if ( editable) success ( ) ;
Posts . privileges( pid , uid , function ( privileges ) {
if ( privileges. editable) success ( ) ;
} ) ;
}
@ -490,8 +456,8 @@ marked.setOptions({
} ) ;
} ;
Posts . editable( uid , pid , function ( editable ) {
if ( editable) success ( ) ;
Posts . privileges( pid , uid , function ( privileges ) {
if ( privileges. editable) success ( ) ;
} ) ;
}
} ( exports ) ) ;