Merge pull request #864 from fabrixxm/acl_automention

Acl automention
This commit is contained in:
fabrixxm 2014-01-03 06:09:12 -08:00
commit b0e8dbc4da
6 changed files with 68 additions and 17 deletions

View File

@ -1,6 +1,7 @@
<?php <?php
require_once("include/contact_selectors.php"); require_once("include/contact_selectors.php");
require_once("include/features.php");
/** /**
* *
@ -329,6 +330,9 @@ function populate_acl($user = null,$celeb = false) {
'$allowgid' => json_encode($perms['allow_gid']), '$allowgid' => json_encode($perms['allow_gid']),
'$denycid' => json_encode($perms['deny_cid']), '$denycid' => json_encode($perms['deny_cid']),
'$denygid' => json_encode($perms['deny_gid']), '$denygid' => json_encode($perms['deny_gid']),
'$features' => array(
"aclautomention"=>(feature_enabled($user,"aclautomention")?"true":"false")
),
)); ));
@ -474,14 +478,15 @@ function acl_lookup(&$a, $out_type = 'json') {
"name" => $g['name'], "name" => $g['name'],
"id" => intval($g['id']), "id" => intval($g['id']),
"uids" => array_map("intval", explode(",",$g['uids'])), "uids" => array_map("intval", explode(",",$g['uids'])),
"link" => '' "link" => '',
"forum" => '0'
); );
} }
} }
if ($type=='' || $type=='c'){ if ($type=='' || $type=='c'){
$r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact` $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, forum FROM `contact`
WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 AND `notify` != '' WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 AND `notify` != ''
$sql_extra2 $sql_extra2
ORDER BY `name` ASC ", ORDER BY `name` ASC ",
@ -541,6 +546,7 @@ function acl_lookup(&$a, $out_type = 'json') {
"network" => $g['network'], "network" => $g['network'],
"link" => $g['url'], "link" => $g['url'],
"nick" => ($g['attag']) ? $g['attag'] : $g['nick'], "nick" => ($g['attag']) ? $g['attag'] : $g['nick'],
"forum" => $g['forum']
); );
} }
} }

View File

@ -30,6 +30,7 @@ function get_features() {
t('Post Composition Features'), t('Post Composition Features'),
array('richtext', t('Richtext Editor'), t('Enable richtext editor')), array('richtext', t('Richtext Editor'), t('Enable richtext editor')),
array('preview', t('Post Preview'), t('Allow previewing posts and comments before publishing them')), array('preview', t('Post Preview'), t('Allow previewing posts and comments before publishing them')),
array('aclautomention', t('Auto-mention Forums'), t('Add/remove mention when a fourm page is selected/deselected in ACL window.')),
), ),
// Network sidebar widgets // Network sidebar widgets

View File

@ -617,7 +617,6 @@ function fetch_xrd_links($url) {
if(! function_exists('validate_url')) { if(! function_exists('validate_url')) {
function validate_url(&$url) { function validate_url(&$url) {
// no naked subdomains (allow localhost for tests) // no naked subdomains (allow localhost for tests)
if(strpos($url,'.') === false && strpos($url,'/localhost/') === false) if(strpos($url,'.') === false && strpos($url,'/localhost/') === false)
return false; return false;

View File

@ -1,7 +1,8 @@
function ACL(backend_url, preset){ function ACL(backend_url, preset, automention){
that = this; that = this;
that.url = backend_url; that.url = backend_url;
that.automention = automention;
that.kp_timer = null; that.kp_timer = null;
@ -26,10 +27,45 @@ function ACL(backend_url, preset){
$("#acl-search").keypress(that.on_search); $("#acl-search").keypress(that.on_search);
$("#acl-wrapper").parents("form").submit(that.on_submit); $("#acl-wrapper").parents("form").submit(that.on_submit);
/* add/remove mentions */
that.element = $("#profile-jot-text");
that.htmlelm = that.element.get()[0];
/* startup! */ /* startup! */
that.get(0,100); that.get(0,100);
} }
ACL.prototype.remove_mention = function(id) {
if (!that.aclautomention) return;
var nick = that.data[id].nick;
var searchText = "@"+nick+"+"+id+" ";
if (tinyMCE.activeEditor===null) {
start = that.element.val().indexOf(searchText);
if ( start<0) return;
end = start+searchText.length;
that.element.setSelection(start,end).replaceSelectedText('').collapseSelection(false);
} else {
start = tinyMCE.activeEditor.getContent({format : 'raw'}).search( searchText );
if ( start<0 ) return;
txt = tinyMCE.activeEditor.getContent();
newtxt = txt.replace(searchText, '');
tinyMCE.activeEditor.setContent(newtxt);
}
}
ACL.prototype.add_mention = function(id) {
if (!that.aclautomention) return;
var nick = that.data[id].nick;
var searchText = "@"+nick+"+"+id+" ";
if (tinyMCE.activeEditor===null) {
if ( that.element.val().indexOf( searchText) >= 0 ) return;
that.element.val( searchText + that.element.val() );
} else {
if ( tinyMCE.activeEditor.getContent({format : 'raw'}).search(searchText) >= 0 ) return;
tinyMCE.activeEditor.dom.add(tinyMCE.activeEditor.getBody(), 'span', {}, searchText);
}
}
ACL.prototype.on_submit = function(){ ACL.prototype.on_submit = function(){
aclfileds = $("#acl-fields").html(""); aclfileds = $("#acl-fields").html("");
$(that.allow_gid).each(function(i,v){ $(that.allow_gid).each(function(i,v){
@ -105,7 +141,8 @@ ACL.prototype.on_button_hide = function(event){
ACL.prototype.set_allow = function(itemid){ ACL.prototype.set_allow = function(itemid){
type = itemid[0]; type = itemid[0];
id = parseInt(itemid.substr(1)); id = parseInt(itemid.substr(1));
switch(type){ switch(type){
case "g": case "g":
if (that.allow_gid.indexOf(id)<0){ if (that.allow_gid.indexOf(id)<0){
@ -118,8 +155,10 @@ ACL.prototype.set_allow = function(itemid){
case "c": case "c":
if (that.allow_cid.indexOf(id)<0){ if (that.allow_cid.indexOf(id)<0){
that.allow_cid.push(id) that.allow_cid.push(id)
if (that.data[id].forum=="1") that.add_mention(id);
} else { } else {
that.allow_cid.remove(id); that.allow_cid.remove(id);
if (that.data[id].forum=="1") that.remove_mention(id);
} }
if (that.deny_cid.indexOf(id)>=0) that.deny_cid.remove(id); if (that.deny_cid.indexOf(id)>=0) that.deny_cid.remove(id);
break; break;
@ -129,7 +168,8 @@ ACL.prototype.set_allow = function(itemid){
ACL.prototype.set_deny = function(itemid){ ACL.prototype.set_deny = function(itemid){
type = itemid[0]; type = itemid[0];
id = parseInt(itemid.substr(1)); id = parseInt(itemid.substr(1));
switch(type){ switch(type){
case "g": case "g":
if (that.deny_gid.indexOf(id)<0){ if (that.deny_gid.indexOf(id)<0){
@ -140,6 +180,7 @@ ACL.prototype.set_deny = function(itemid){
if (that.allow_gid.indexOf(id)>=0) that.allow_gid.remove(id); if (that.allow_gid.indexOf(id)>=0) that.allow_gid.remove(id);
break; break;
case "c": case "c":
if (that.data[id].forum=="1") that.remove_mention(id);
if (that.deny_cid.indexOf(id)<0){ if (that.deny_cid.indexOf(id)<0){
that.deny_cid.push(id) that.deny_cid.push(id)
} else { } else {
@ -151,9 +192,13 @@ ACL.prototype.set_deny = function(itemid){
that.update_view(); that.update_view();
} }
ACL.prototype.is_show_all = function() {
return (that.allow_gid.length==0 && that.allow_cid.length==0 &&
that.deny_gid.length==0 && that.deny_cid.length==0);
}
ACL.prototype.update_view = function(){ ACL.prototype.update_view = function(){
if (that.allow_gid.length==0 && that.allow_cid.length==0 && if (this.is_show_all()){
that.deny_gid.length==0 && that.deny_cid.length==0){
that.showall.addClass("selected"); that.showall.addClass("selected");
/* jot acl */ /* jot acl */
$('#jot-perms-icon').removeClass('lock').addClass('unlock'); $('#jot-perms-icon').removeClass('lock').addClass('unlock');
@ -246,17 +291,20 @@ ACL.prototype.get = function(start,count, search){
ACL.prototype.populate = function(data){ ACL.prototype.populate = function(data){
var height = Math.ceil(data.tot / that.nw) * 42; var height = Math.ceil(data.tot / that.nw) * 42;
that.list_content.height(height); that.list_content.height(height);
that.data = {};
$(data.items).each(function(){ $(data.items).each(function(){
html = "<div class='acl-list-item {4} {5}' title='{6}' id='{2}{3}'>"+that.item_tpl+"</div>"; html = "<div class='acl-list-item {4} {5} type{2}' title='{6}' id='{2}{3}'>"+that.item_tpl+"</div>";
html = html.format(this.photo, this.name, this.type, this.id, '', this.network, this.link); html = html.format(this.photo, this.name, this.type, this.id, (this.forum=='1'?'forum':''), this.network, this.link);
if (this.uids!=undefined) that.group_uids[this.id] = this.uids; if (this.uids!=undefined) that.group_uids[this.id] = this.uids;
//console.log(html); //console.log(html);
that.list_content.append(html); that.list_content.append(html);
that.data[this.id] = this;
}); });
$(".acl-list-item img[data-src]", that.list_content).each(function(i, el){ $(".acl-list-item img[data-src]", that.list_content).each(function(i, el){
// Add src attribute for images with a data-src attribute // Add src attribute for images with a data-src attribute
$(el).attr('src', $(el).data("src")); $(el).attr('src', $(el).data("src"));
}); });
that.update_view(); that.update_view();
} }

View File

@ -89,7 +89,7 @@ ACPopup.prototype._search = function(){
}); });
} }
ACPopup.prototype.add = function(label, value){ ACPopup.prototype.add = function(label, value){
var that=this; var that=this;
var elm = $("<div class='acpopupitem' title='"+value+"'>"+label+"</div>"); var elm = $("<div class='acpopupitem' title='"+value+"'>"+label+"</div>");
elm.click(function(e){ elm.click(function(e){

View File

@ -1,8 +1,4 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
<div id="acl-wrapper"> <div id="acl-wrapper">
<input id="acl-search"> <input id="acl-search">
<a href="#" id="acl-showall">{{$showall}}</a> <a href="#" id="acl-showall">{{$showall}}</a>
@ -24,7 +20,8 @@ $(document).ready(function() {
if(typeof acl=="undefined"){ if(typeof acl=="undefined"){
acl = new ACL( acl = new ACL(
baseurl+"/acl", baseurl+"/acl",
[ {{$allowcid}},{{$allowgid}},{{$denycid}},{{$denygid}} ] [ {{$allowcid}},{{$allowgid}},{{$denycid}},{{$denygid}} ],
{{$features.aclautomention}}
); );
} }
}); });