diff --git a/images/default-group-mm.png b/images/default-group-mm.png new file mode 100644 index 000000000..bfc8b335a Binary files /dev/null and b/images/default-group-mm.png differ diff --git a/images/hide_off.png b/images/hide_off.png new file mode 100644 index 000000000..d504ca2e2 Binary files /dev/null and b/images/hide_off.png differ diff --git a/images/hide_on.png b/images/hide_on.png new file mode 100644 index 000000000..960744c06 Binary files /dev/null and b/images/hide_on.png differ diff --git a/images/search_18.png b/images/search_18.png new file mode 100644 index 000000000..539739670 Binary files /dev/null and b/images/search_18.png differ diff --git a/images/show_all_off.png b/images/show_all_off.png new file mode 100644 index 000000000..cc96d28f0 Binary files /dev/null and b/images/show_all_off.png differ diff --git a/images/show_all_on.png b/images/show_all_on.png new file mode 100644 index 000000000..87a7710b5 Binary files /dev/null and b/images/show_all_on.png differ diff --git a/images/show_off.png b/images/show_off.png new file mode 100644 index 000000000..4bcf47123 Binary files /dev/null and b/images/show_off.png differ diff --git a/images/show_on.png b/images/show_on.png new file mode 100644 index 000000000..b8d1f5bac Binary files /dev/null and b/images/show_on.png differ diff --git a/include/acl.js b/include/acl.js new file mode 100644 index 000000000..a0a1f5dd8 --- /dev/null +++ b/include/acl.js @@ -0,0 +1,236 @@ +function ACL(backend_url, preset){ + that = this; + + that.url = backend_url; + + that.kp_timer = null; + + if (preset==undefined) preset = []; + that.allow_cid = (preset[0] || []); + that.allow_gid = (preset[1] || []); + that.deny_cid = (preset[2] || []); + that.deny_gid = (preset[3] || []); + that.group_uids = []; + that.nw = 4; //items per row. should be calulated from #acl-list.width + + that.list_content = $("#acl-list-content"); + that.item_tpl = unescape($(".acl-list-item[rel=acl-template]").html()); + that.showall = $("#acl-showall"); + + if (preset.length==0) that.showall.addClass("selected"); + + /*events*/ + that.showall.click(that.on_showall); + $(".acl-button-show").live('click', that.on_button_show); + $(".acl-button-hide").live('click', that.on_button_hide); + $("#acl-search").keypress(that.on_search); + $("#acl-wrapper").parents("form").submit(that.on_submit); + + /* startup! */ + that.get(0,100); +} + +ACL.prototype.on_submit = function(){ + aclfileds = $("#acl-fields").html(""); + $(that.allow_gid).each(function(i,v){ + aclfileds.append(""); + }); + $(that.allow_cid).each(function(i,v){ + aclfileds.append(""); + }); + $(that.deny_gid).each(function(i,v){ + aclfileds.append(""); + }); + $(that.deny_cid).each(function(i,v){ + aclfileds.append(""); + }); +} + +ACL.prototype.search = function(){ + var srcstr = $("#acl-search").val(); + that.list_content.html(""); + that.get(0,100, srcstr); +} + +ACL.prototype.on_search = function(event){ + if (that.kp_timer) clearTimeout(that.kp_timer); + that.kp_timer = setTimeout( that.search, 1000); +} + +ACL.prototype.on_showall = function(event){ + event.stopPropagation(); + if (that.showall.hasClass("selected")){ + return false; + } + that.showall.addClass("selected"); + + that.allow_cid = []; + that.allow_gid = []; + that.deny_cid = []; + that.deny_gid = []; + + that.updateview(); + + return false; +} + +ACL.prototype.on_button_show = function(event){ + event.stopPropagation(); + + /*that.showall.removeClass("selected"); + $(this).siblings(".acl-button-hide").removeClass("selected"); + $(this).toggleClass("selected");*/ + + that.set_allow($(this).parent().attr('id')); + + return false; +} +ACL.prototype.on_button_hide = function(event){ + event.stopPropagation(); + + /*that.showall.removeClass("selected"); + $(this).siblings(".acl-button-show").removeClass("selected"); + $(this).toggleClass("selected");*/ + + that.set_deny($(this).parent().attr('id')); + + return false; +} + +ACL.prototype.set_allow = function(itemid){ + type = itemid[0]; + id = parseInt(itemid.substr(1)); + switch(type){ + case "g": + if (that.allow_gid.indexOf(id)<0){ + that.allow_gid.push(id) + }else { + that.allow_gid.remove(id); + } + if (that.deny_gid.indexOf(id)>=0) that.deny_gid.remove(id); + break; + case "c": + if (that.allow_cid.indexOf(id)<0){ + that.allow_cid.push(id) + } else { + that.allow_cid.remove(id); + } + if (that.deny_cid.indexOf(id)>=0) that.deny_cid.remove(id); + break; + } + that.updateview(); +} + +ACL.prototype.set_deny = function(itemid){ + type = itemid[0]; + id = parseInt(itemid.substr(1)); + switch(type){ + case "g": + if (that.deny_gid.indexOf(id)<0){ + that.deny_gid.push(id) + } else { + that.deny_gid.remove(id); + } + if (that.allow_gid.indexOf(id)>=0) that.allow_gid.remove(id); + break; + case "c": + if (that.deny_cid.indexOf(id)<0){ + that.deny_cid.push(id) + } else { + that.deny_cid.remove(id); + } + if (that.allow_cid.indexOf(id)>=0) that.allow_cid.remove(id); + break; + } + that.updateview(); +} + +ACL.prototype.updateview = function(){ + if (that.allow_gid.length==0 && that.allow_cid.length==0 && + that.deny_gid.length==0 && that.deny_cid.length==0){ + that.showall.addClass("selected"); + /* jot acl */ + $('#jot-perms-icon').removeClass('lock').addClass('unlock'); + $('#jot-public').show(); + $('.profile-jot-net input').attr('disabled', false); + + } else { + that.showall.removeClass("selected"); + /* jot acl */ + $('#jot-perms-icon').removeClass('unlock').addClass('lock'); + $('#jot-public').hide(); + $('.profile-jot-net input').attr('disabled', 'disabled'); + } + + $("#acl-list-content .acl-list-item").each(function(){ + itemid = $(this).attr('id'); + type = itemid[0]; + id = parseInt(itemid.substr(1)); + + btshow = $(this).children(".acl-button-show").removeClass("selected"); + bthide = $(this).children(".acl-button-hide").removeClass("selected"); + + switch(type){ + case "g": + var uclass = ""; + if (that.allow_gid.indexOf(id)>=0){ + btshow.addClass("selected"); + bthide.removeClass("selected"); + uclass="groupshow"; + } + if (that.deny_gid.indexOf(id)>=0){ + btshow.removeClass("selected"); + bthide.addClass("selected"); + uclass="grouphide"; + } + + $(that.group_uids[id]).each(function(i,v){ + $("#c"+v).removeClass("groupshow grouphide").addClass(uclass); + }); + + break; + case "c": + if (that.allow_cid.indexOf(id)>=0){ + btshow.addClass("selected"); + bthide.removeClass("selected"); + } + if (that.deny_cid.indexOf(id)>=0){ + btshow.removeClass("selected"); + bthide.addClass("selected"); + } + } + + }); + +} + + +ACL.prototype.get = function(start,count, search){ + var postdata = { + start:start, + count:count, + search:search, + } + + $.ajax({ + type:'POST', + url: that.url, + data: postdata, + dataType: 'json', + success:that.populate + }); +} + +ACL.prototype.populate = function(data){ + var height = Math.ceil(data.tot / that.nw) * 42; + that.list_content.height(height); + $(data.items).each(function(){ + html = "
"+that.item_tpl+"
"; + html = html.format( this.photo, this.name, this.type, this.id, '', this.network ); + if (this.uids!=undefined) that.group_uids[this.id] = this.uids; + //console.log(html); + that.list_content.append(html); + }); + that.updateview(); +} + diff --git a/include/acl_selectors.php b/include/acl_selectors.php index c3e26082e..99de67d64 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -239,7 +239,7 @@ function populate_acl($user = null,$celeb = false) { array_walk($deny_gid,'fixacl'); } - $o = ''; + /*$o = ''; $o .= '
'; $o .= '
'; $o .= '
' . t('Visible To:') . '
' . t('everybody') . '
'; @@ -272,7 +272,20 @@ function populate_acl($user = null,$celeb = false) { $o .= '
' . "\r\n"; $o .= '
'; $o .= '
' . "\r\n"; - $o .= '
' . "\r\n"; + $o .= '
' . "\r\n";*/ + + $tpl = get_markup_template("acl_selector.tpl"); + $o = replace_macros($tpl, array( + '$showall'=> t("Visible to everybody"), + '$show' => t("show"), + '$hide' => t("don't show"), + '$allowcid' => json_encode($allow_cid), + '$allowgid' => json_encode($allow_gid), + '$denycid' => json_encode($deny_cid), + '$denygid' => json_encode($deny_gid), + )); + + return $o; } diff --git a/include/main.js b/include/main.js index 896c611d5..040e9695e 100644 --- a/include/main.js +++ b/include/main.js @@ -53,8 +53,11 @@ //console.log(id); }); + /* setup field_richtext */ + setupFieldRichtext(); + /* load tinyMCE if needed and setup field_richtext */ - if(typeof tinyMCE == "undefined") { + /*if(typeof tinyMCE == "undefined") { window.tinyMCEPreInit = { suffix:"", base: baseurl+"/library/tinymce/jscripts/tiny_mce/", @@ -62,8 +65,8 @@ }; $.getScript(baseurl +"/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js", setupFieldRichtext); } else { - setupFieldRichtext(); - } + }*/ + /* nav update event */ @@ -364,7 +367,6 @@ function setupFieldRichtext(){ }); } - /** * sprintf in javascript * "{0} and {1}".format('zero','uno'); @@ -377,3 +379,10 @@ String.prototype.format = function() { } return formatted; }; +// Array Remove +Array.prototype.remove = function(item) { + to=undefined; from=this.indexOf(item); + var rest = this.slice((to || from) + 1 || this.length); + this.length = from < 0 ? this.length + from : from; + return this.push.apply(this, rest); +}; diff --git a/mod/acl.php b/mod/acl.php new file mode 100644 index 000000000..cb5959a95 --- /dev/null +++ b/mod/acl.php @@ -0,0 +1,94 @@ + "g", + "photo" => "images/default-group-mm.png", + "name" => $g['name'], + "id" => intval($g['id']), + "uids" => array_map("intval", explode(",",$g['uids'])) + ); + } + + + $r = q("SELECT `id`, `name`, `micro`, `network` FROM `contact` + WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `notify` != '' + $sql_extra + ORDER BY `name` ASC ", + intval(local_user()) + ); + foreach($r as $g){ + $contacts[] = array( + "type" => "c", + "photo" => $g['micro'], + "name" => $g['name'], + "id" => intval($g['id']), + "network" => $g['network'] + ); + } + + + + + $items = array_merge($groups, $contacts); + + $o = array( + 'tot' => $tot, + 'start' => $start, + 'count' => $count, + 'items' => $items, + ); + + echo json_encode($o); + + killme(); +} + + diff --git a/view/acl_selector.tpl b/view/acl_selector.tpl new file mode 100644 index 000000000..3379f5764 --- /dev/null +++ b/view/acl_selector.tpl @@ -0,0 +1,24 @@ +
+ + $showall +
+
+
+
+ +
+ + + + diff --git a/view/head.tpl b/view/head.tpl index ff66997e7..f26e41b51 100644 --- a/view/head.tpl +++ b/view/head.tpl @@ -12,6 +12,8 @@ + +