@ -1,6 +1,5 @@
'use strict' ;
define ( 'admin/manage/category' , [
'uploader' ,
'iconSelect' ,
@ -8,8 +7,7 @@ define('admin/manage/category', [
'autocomplete' ,
'translator' ,
'categorySelector' ,
'benchpress' ,
] , function ( uploader , iconSelect , colorpicker , autocomplete , translator , categorySelector , Benchpress ) {
] , function ( uploader , iconSelect , colorpicker , autocomplete , translator , categorySelector ) {
var Category = { } ;
var modified _categories = { } ;
@ -21,11 +19,7 @@ define('admin/manage/category', [
$ ( '#category-selector' ) . on ( 'change' , function ( ) {
var val = $ ( this ) . val ( ) ;
if ( val === 'global' ) {
ajaxify . go ( 'admin/manage/privileges' ) ;
} else {
ajaxify . go ( 'admin/manage/categories/' + $ ( this ) . val ( ) + window . location . hash ) ;
}
ajaxify . go ( 'admin/manage/categories/' + $ ( this ) . val ( ) + window . location . hash ) ;
} ) ;
function enableColorPicker ( idx , inputEl ) {
@ -105,7 +99,7 @@ define('admin/manage/category', [
} ) ;
$ ( '.copy-settings' ) . on ( 'click' , function ( ) {
selectCategoryM odal( function ( cid ) {
categorySelector. m odal( function ( cid ) {
socket . emit ( 'admin.categories.copySettingsFrom' , { fromCid : cid , toCid : ajaxify . data . category . cid } , function ( err ) {
if ( err ) {
return app . alertError ( err . message ) ;
@ -174,8 +168,6 @@ define('admin/manage/category', [
$ ( 'button[data-action="setParent"]' ) . removeClass ( 'hide' ) ;
} ) ;
} ) ;
Category . setupPrivilegeTable ( ) ;
} ;
function modified ( el ) {
@ -213,102 +205,12 @@ define('admin/manage/category', [
} ) ;
}
Category . setupPrivilegeTable = function ( ) {
$ ( '.privilege-table-container' ) . on ( 'change' , 'input[type="checkbox"]' , function ( ) {
var checkboxEl = $ ( this ) ;
var privilege = checkboxEl . parent ( ) . attr ( 'data-privilege' ) ;
var state = checkboxEl . prop ( 'checked' ) ;
var rowEl = checkboxEl . parents ( 'tr' ) ;
var member = rowEl . attr ( 'data-group-name' ) || rowEl . attr ( 'data-uid' ) ;
var isPrivate = parseInt ( rowEl . attr ( 'data-private' ) || 0 , 10 ) ;
var isGroup = rowEl . attr ( 'data-group-name' ) !== undefined ;
if ( member ) {
if ( isGroup && privilege === 'groups:moderate' && ! isPrivate && state ) {
bootbox . confirm ( '[[admin/manage/categories:alert.confirm-moderate]]' , function ( confirm ) {
if ( confirm ) {
Category . setPrivilege ( member , privilege , state , checkboxEl ) ;
} else {
checkboxEl . prop ( 'checked' , ! checkboxEl . prop ( 'checked' ) ) ;
}
} ) ;
} else {
Category . setPrivilege ( member , privilege , state , checkboxEl ) ;
}
} else {
app . alertError ( '[[error:invalid-data]]' ) ;
}
} ) ;
$ ( '.privilege-table-container' ) . on ( 'click' , '[data-action="search.user"]' , Category . addUserToPrivilegeTable ) ;
$ ( '.privilege-table-container' ) . on ( 'click' , '[data-action="search.group"]' , Category . addGroupToPrivilegeTable ) ;
$ ( '.privilege-table-container' ) . on ( 'click' , '[data-action="copyToChildren"]' , Category . copyPrivilegesToChildren ) ;
$ ( '.privilege-table-container' ) . on ( 'click' , '[data-action="copyPrivilegesFrom"]' , Category . copyPrivilegesFromCategory ) ;
Category . exposeAssumedPrivileges ( ) ;
} ;
Category . refreshPrivilegeTable = function ( ) {
socket . emit ( 'admin.categories.getPrivilegeSettings' , ajaxify . data . category . cid , function ( err , privileges ) {
if ( err ) {
return app . alertError ( err . message ) ;
}
Benchpress . parse ( 'admin/partials/categories/privileges' , {
privileges : privileges ,
} , function ( html ) {
translator . translate ( html , function ( html ) {
$ ( '.privilege-table-container' ) . html ( html ) ;
Category . exposeAssumedPrivileges ( ) ;
} ) ;
} ) ;
} ) ;
} ;
Category . exposeAssumedPrivileges = function ( ) {
/ *
If registered - users has a privilege enabled , then all users and groups of that privilege
should be assumed to have that privilege as well , even if not set in the db , so reflect
this arrangement in the table
* /
var privs = [ ] ;
$ ( '.privilege-table tr[data-group-name="registered-users"] td input[type="checkbox"]' ) . parent ( ) . each ( function ( idx , el ) {
if ( $ ( el ) . find ( 'input' ) . prop ( 'checked' ) ) {
privs . push ( el . getAttribute ( 'data-privilege' ) ) ;
}
} ) ;
for ( var x = 0 , numPrivs = privs . length ; x < numPrivs ; x += 1 ) {
var inputs = $ ( '.privilege-table tr[data-group-name]:not([data-group-name="registered-users"],[data-group-name="guests"]) td[data-privilege="' + privs [ x ] + '"] input' ) ;
inputs . each ( function ( idx , el ) {
if ( ! el . checked ) {
el . indeterminate = true ;
}
} ) ;
}
} ;
Category . setPrivilege = function ( member , privilege , state , checkboxEl ) {
socket . emit ( 'admin.categories.setPrivilege' , {
cid : ajaxify . data . category . cid ,
privilege : privilege ,
set : state ,
member : member ,
} , function ( err ) {
if ( err ) {
return app . alertError ( err . message ) ;
}
checkboxEl . replaceWith ( '<i class="fa fa-spin fa-spinner"></i>' ) ;
Category . refreshPrivilegeTable ( ) ;
} ) ;
} ;
Category . launchParentSelector = function ( ) {
var categories = ajaxify . data . allCategories . filter ( function ( category ) {
return category && ! category . disabled && parseInt ( category . cid , 10 ) !== parseInt ( ajaxify . data . category . cid , 10 ) ;
} ) ;
selectCategoryM odal( categories , function ( parentCid ) {
categorySelector . modal ( categories , function ( parentCid ) {
var payload = { } ;
payload [ ajaxify . data . category . cid ] = {
@ -332,117 +234,5 @@ define('admin/manage/category', [
} ) ;
} ;
Category . addUserToPrivilegeTable = function ( ) {
var modal = bootbox . dialog ( {
title : '[[admin/manage/categories:alert.find-user]]' ,
message : '<input class="form-control input-lg" placeholder="[[admin/manage/categories:alert.user-search]]" />' ,
show : true ,
} ) ;
modal . on ( 'shown.bs.modal' , function ( ) {
var inputEl = modal . find ( 'input' ) ;
autocomplete . user ( inputEl , function ( ev , ui ) {
socket . emit ( 'admin.categories.setPrivilege' , {
cid : ajaxify . data . category . cid ,
privilege : [ 'find' , 'read' , 'topics:read' ] ,
set : true ,
member : ui . item . user . uid ,
} , function ( err ) {
if ( err ) {
return app . alertError ( err . message ) ;
}
Category . refreshPrivilegeTable ( ) ;
modal . modal ( 'hide' ) ;
} ) ;
} ) ;
} ) ;
} ;
Category . addGroupToPrivilegeTable = function ( ) {
var modal = bootbox . dialog ( {
title : '[[admin/manage/categories:alert.find-group]]' ,
message : '<input class="form-control input-lg" placeholder="[[admin/manage/categories:alert.group-search]]" />' ,
show : true ,
} ) ;
modal . on ( 'shown.bs.modal' , function ( ) {
var inputEl = modal . find ( 'input' ) ;
autocomplete . group ( inputEl , function ( ev , ui ) {
socket . emit ( 'admin.categories.setPrivilege' , {
cid : ajaxify . data . category . cid ,
privilege : [ 'groups:find' , 'groups:read' , 'groups:topics:read' ] ,
set : true ,
member : ui . item . group . name ,
} , function ( err ) {
if ( err ) {
return app . alertError ( err . message ) ;
}
Category . refreshPrivilegeTable ( ) ;
modal . modal ( 'hide' ) ;
} ) ;
} ) ;
} ) ;
} ;
Category . copyPrivilegesToChildren = function ( ) {
socket . emit ( 'admin.categories.copyPrivilegesToChildren' , ajaxify . data . category . cid , function ( err ) {
if ( err ) {
return app . alertError ( err . message ) ;
}
app . alertSuccess ( 'Privileges copied!' ) ;
} ) ;
} ;
Category . copyPrivilegesFromCategory = function ( ) {
selectCategoryModal ( function ( cid ) {
socket . emit ( 'admin.categories.copyPrivilegesFrom' , { toCid : ajaxify . data . category . cid , fromCid : cid } , function ( err ) {
if ( err ) {
return app . alertError ( err . message ) ;
}
ajaxify . refresh ( ) ;
} ) ;
} ) ;
} ;
function selectCategoryModal ( categories , callback ) {
if ( typeof categories === 'function' ) {
callback = categories ;
categories = ajaxify . data . allCategories ;
}
Benchpress . parse ( 'admin/partials/categories/select-category' , {
categories : categories ,
} , function ( html ) {
translator . translate ( html , function ( html ) {
var modal = bootbox . dialog ( {
title : '[[modules:composer.select_category]]' ,
message : html ,
buttons : {
save : {
label : '[[global:select]]' ,
className : 'btn-primary' ,
callback : submit ,
} ,
} ,
} ) ;
categorySelector . init ( modal . find ( '[component="category-selector"]' ) ) ;
function submit ( ev ) {
ev . preventDefault ( ) ;
var selectedCategory = categorySelector . getSelectedCategory ( ) ;
if ( selectedCategory ) {
callback ( selectedCategory . cid ) ;
modal . modal ( 'hide' ) ;
}
return false ;
}
modal . find ( 'form' ) . on ( 'submit' , submit ) ;
} ) ;
} ) ;
}
return Category ;
} ) ;