1 WCF
.ACL
={};WCF
.ACL
.List
=Class
.extend({_categoryName
:"",_container
:null,_containerElements
:{},_objectID
:0,_objectTypeID
:null,_options
:{},_proxy
:null,_search
:null,_values
:{group
:{},user
:{}},init:function(g
,i
,d
,b
,c
,j
){this._objectID
=b
||0;this._objectTypeID
=i
;this._categoryName
=d
;if(c
===undefined){c
=true}this._values
={group
:{},user
:{}};this._proxy
=new WCF
.Action
.Proxy({showLoadingOverlay
:false,success
:$.proxy(this._success
,this)});this._container
=$(g
).hide().addClass("aclContainer");var f
=this._container
.children("dd");var a
=$('<ul class="aclList container" />').appendTo(f
);var k
=$('<input type="text" class="long" placeholder="'+WCF
.Language
.get("wcf.acl.search."+(!c
?"user.":"")+"description")+'" />').appendTo(f
);var e
=$('<ul class="aclPermissionList container" />').hide().appendTo(f
);this._containerElements
={aclList
:a
,denyAll
:null,grantAll
:null,permissionList
:e
,searchInput
:k
};this._search
=new WCF
.Search
.User(k
,$.proxy(this.addObject
,this),c
);var l
=this._container
.parents("form:eq(0)");l
.submit($.proxy(this.submit
,this));var h
=l
.find("input[type=reset]:eq(0)");if(h
.length
){h
.click($.proxy(this._reset
,this))}if(j
){this._success(j
)}else{this._loadACL()}},_reset:function(){this._values
={group
:{},user
:{}};this._containerElements
.aclList
.empty();this._containerElements
.searchInput
.val("");this._containerElements
.permissionList
.hide().find("input[type=checkbox]").prop("checked",false)},_loadACL:function(){this._proxy
.setOption("data",{actionName
:"loadAll",className
:"wcf\\data\\acl\\option\\ACLOptionAction",parameters
:{categoryName
:this._categoryName
,objectID
:this._objectID
,objectTypeID
:this._objectTypeID
}});this._proxy
.sendRequest()},addObject:function(b
){var a
=this._createListItem(b
.objectID
,b
.label
,b
.type
);this._savePermissions();this._containerElements
.aclList
.children("li").removeClass("active");a
.addClass("active");this._search
.addExcludedSearchValue(b
.label
);this._containerElements
.permissionList
.find("input[type=checkbox]").prop("checked",false);this._containerElements
.searchInput
.val("");this._containerElements
.permissionList
.show();WCF
.DOMNodeInsertedHandler
.execute()},_createListItem:function(d
,a
,c
){var b
=$('<li><span class="icon icon16 icon-'+(c
==="group"?"group":"user")+'" /> <span>'+a
+"</span></li>").appendTo(this._containerElements
.aclList
);b
.data("objectID",d
).data("type",c
).data("label",a
).click($.proxy(this._click
,this));$('<span class="icon icon16 icon-remove jsTooltip pointer" title="'+WCF
.Language
.get("wcf.global.button.delete")+'" />').click($.proxy(this._removeItem
,this)).appendTo(b
);return b
},_removeItem:function(d
){var b
=$(d
.currentTarget
).parent();var a
=b
.data("type");var c
=b
.data("objectID");this._search
.removeExcludedSearchValue(b
.data("label"));b
.remove();if(this._values
[a
][c
]){delete this._values
[a
][c
]}this._selectFirstEntry()},_selectFirstEntry:function(){var a
=this._containerElements
.aclList
.children("li:eq(0)");if(a
.length
){this._select(a
,false)}else{this._reset()}},_success:function(g
,f
,l
){if(!$.getLength(g
.returnValues
.options
)){return}var i
=0;var n
={};for(var h
in g
.returnValues
.options
){var a
=g
.returnValues
.options
[h
];var j
=$("<li><span>"+a
.label
+"</span></li>").data("optionID",h
).data("optionName",a
.optionName
);var d
=$('<input type="checkbox" id="grant'+h
+'" />').appendTo(j
).wrap('<label for="grant'+h
+'" class="jsTooltip" title="'+WCF
.Language
.get("wcf.acl.option.grant")+'" />');var b
=$('<input type="checkbox" id="deny'+h
+'" />').appendTo(j
).wrap('<label for="deny'+h
+'" class="jsTooltip" title="'+WCF
.Language
.get("wcf.acl.option.deny")+'" />');d
.data("type","grant").data("optionID",h
).change($.proxy(this._change
,this));b
.data("type","deny").data("optionID",h
).change($.proxy(this._change
,this));if(!n
[a
.categoryName
]){n
[a
.categoryName
]=[]}if(a
.categoryName
===""){j
.appendTo(this._containerElements
.permissionList
)}else{n
[a
.categoryName
].push(j
)}i
++}if(i
>1){var j
=$('<li class="aclFullAccess"><span>'+WCF
.Language
.get("wcf.acl.option.fullAccess")+"</span></li>").prependTo(this._containerElements
.permissionList
);this._containerElements
.grantAll
=$('<input type="checkbox" id="grantAll" />').appendTo(j
).wrap('<label for="grantAll" class="jsTooltip" title="'+WCF
.Language
.get("wcf.acl.option.grant")+'" />');this._containerElements
.denyAll
=$('<input type="checkbox" id="denyAll" />').appendTo(j
).wrap('<label for="denyAll" class="jsTooltip" title="'+WCF
.Language
.get("wcf.acl.option.deny")+'" />');this._containerElements
.grantAll
.data("type","grant").change($.proxy(this._changeAll
,this));this._containerElements
.denyAll
.data("type","deny").change($.proxy(this._changeAll
,this))}if($.getLength(n
)){for(var e
in n
){var c
=n
[e
];if(g
.returnValues
.categories
[e
]){$('<li class="aclCategory">'+g
.returnValues
.categories
[e
]+"</li>").appendTo(this._containerElements
.permissionList
)}for(var m
=0,k
=c
.length
;m
<k
;m
++){c
[m
].appendTo(this._containerElements
.permissionList
)}}}this._parseData(g
,"group");this._parseData(g
,"user");this._container
.show();this._selectFirstEntry()},_parseData:function(c
,a
){if(!$.getLength(c
.returnValues
[a
].option
)){return}for(var b
in c
.returnValues
[a
].label
){this._createListItem(b
,c
.returnValues
[a
].label
[b
],a
);this._search
.addExcludedSearchValue(c
.returnValues
[a
].label
[b
])}this._values
[a
]=c
.returnValues
[a
].option
;WCF
.DOMNodeInsertedHandler
.execute()},_click:function(b
){var a
=$(b
.currentTarget
);if(a
.hasClass("active")){return}this._select(a
,true)},_select:function(b
,a
){if(a
){this._savePermissions()}this._containerElements
.aclList
.children("li").removeClass("active");b
.addClass("active");this._setupPermissions(b
.data("type"),b
.data("objectID"))},_change:function(d
){var c
=$(d
.currentTarget
);var b
=c
.data("optionID");var a
=c
.data("type");if(c
.is(":checked")){if(a
==="deny"){$("#grant"+b
).prop("checked",false);if(this._containerElements
.grantAll
!==null){this._containerElements
.grantAll
.prop("checked",false)}}else{$("#deny"+b
).prop("checked",false);if(this._containerElements
.denyAll
!==null){this._containerElements
.denyAll
.prop("checked",false)}}}else{if(a
==="deny"&&this._containerElements
.denyAll
!==null){this._containerElements
.denyAll
.prop("checked",false)}else{if(a
==="grant"&&this._containerElements
.grantAll
!==null){this._containerElements
.grantAll
.prop("checked",false)}}}var e
=true;this._containerElements
.permissionList
.find("input[type=checkbox]").each(function(g
,h
){var f
=$(h
);if(f
.data("type")===a
&&f
.attr("id")!==a
+"All"){if(!f
.is(":checked")){e
=false;return false}}});if(a
=="deny"){if(this._containerElements
.denyAll
!==null){if(e
){this._containerElements
.denyAll
.prop("checked",true)}else{this._containerElements
.denyAll
.prop("checked",false)}}}else{if(this._containerElements
.grantAll
!==null){if(e
){this._containerElements
.grantAll
.prop("checked",true)}else{this._containerElements
.grantAll
.prop("checked",false)}}}},_changeAll:function(c
){var b
=$(c
.currentTarget
);var a
=b
.data("type");if(b
.is(":checked")){if(a
==="deny"){this._containerElements
.grantAll
.prop("checked",false);this._containerElements
.permissionList
.find("input[type=checkbox]").each(function(e
,f
){var d
=$(f
);if(d
.data("type")==="deny"&&d
.attr("id")!=="denyAll"){d
.prop("checked",true).trigger("change")}})}else{this._containerElements
.denyAll
.prop("checked",false);this._containerElements
.permissionList
.find("input[type=checkbox]").each(function(e
,f
){var d
=$(f
);if(d
.data("type")==="grant"&&d
.attr("id")!=="grantAll"){d
.prop("checked",true).trigger("change")}})}}else{if(a
==="deny"){this._containerElements
.grantAll
.prop("checked",false);this._containerElements
.permissionList
.find("input[type=checkbox]").each(function(e
,f
){var d
=$(f
);if(d
.data("type")==="deny"&&d
.attr("id")!=="denyAll"){d
.prop("checked",false).trigger("change")}})}else{this._containerElements
.denyAll
.prop("checked",false);this._containerElements
.permissionList
.find("input[type=checkbox]").each(function(e
,f
){var d
=$(f
);if(d
.data("type")==="grant"&&d
.attr("id")!=="grantAll"){d
.prop("checked",false).trigger("change")}})}}},_setupPermissions:function(b
,c
){this._containerElements
.permissionList
.find("input[type='checkbox']").prop("checked",false);if(this._values
[b
]&&this._values
[b
][c
]){for(var a
in this._values
[b
][c
]){if(this._values
[b
][c
][a
]==1){$("#grant"+a
).prop("checked",true).trigger("change")}else{$("#deny"+a
).prop("checked",true).trigger("change")}}}this._containerElements
.permissionList
.show()},_savePermissions:function(){var c
=this._containerElements
.aclList
.find("li.active");if(!c
.length
){return}var d
=c
.data("objectID");var a
=c
.data("type");this._values
[a
][d
]={};var b
=this;this._containerElements
.permissionList
.find("input[type='checkbox']").each(function(e
,i
){var h
=$(i
);if(h
.attr("id")!="grantAll"&&h
.attr("id")!="denyAll"){var g
=(h
.data("type")==="deny")?0:1;var f
=h
.data("optionID");if(h
.is(":checked")){b
._values
[a
][d
][f
]=g
;h
.prop("checked",false)}else{if(b
._values
[a
]&&b
._values
[a
][d
]&&b
._values
[a
][d
][f
]&&b
._values
[a
][d
][f
]==g
){delete b
._values
[a
][d
][f
]}}}})},submit:function(a
){this._savePermissions();this._save("group");this._save("user")},_save:function(a
){if($.getLength(this._values
[a
])){var b
=this._container
.parents("form:eq(0)");for(var e
in this._values
[a
]){var d
=this._values
[a
][e
];for(var c
in d
){$('<input type="hidden" name="aclValues['+a
+"]["+e
+"]["+c
+']" value="'+d
[c
]+'" />').appendTo(b
)}}}}});