Index: administration/src/main/resources/XWiki/XWikiGroupSheet.xml =================================================================== --- administration/src/main/resources/XWiki/XWikiGroupSheet.xml (revision 29916) +++ administration/src/main/resources/XWiki/XWikiGroupSheet.xml (working copy) @@ -24,113 +24,186 @@ false #set($interface = $xwiki.rightsmanager.defaultUi) #set($mainwk = $context.isMainWiki()) +#set($groupDoc = $doc) +#if($doc.fullName == 'Main.UsersDirectory') + #set($groupDoc = $xwiki.getDocument('XWiki.XWikiAllGroup')) +#end +#macro(hasEditGroupRight) + #set($hasEditGroupRight = false) + #if($hasAdmin && $doc.getObject('XWiki.XWikiGroups', false)) + #set($hasEditGroupRight = true) + #end +#end +#hasEditGroupRight() ## display the new interface #if($interface == "new") -$xwiki.jsfx.use("js/xwiki/usersandgroups/usersandgroups.js", true) -$xwiki.ssfx.use("js/xwiki/usersandgroups/usersandgroups.css") -$xwiki.jsfx.use("js/xwiki/table/livetable.js", true) -$xwiki.ssfx.use("js/xwiki/table/livetable.css", true) -#set($columnOptions = { - "member" : {'link': 'auto', 'type': 'text'}, - "_actions" : { - 'actions': ['delete'], - 'actionCallbacks': {'delete': 'table.deleteRow(i);'}, - 'ajaxActions': {'delete': true} - } -}) -#if($hasAdmin && $context.action == 'inline') - #set($columns = ['member', '_actions']) -#else - #set($columns = ['member']) -#end -#livetable("groupusers", $columns, $columnOptions, {'url' : "${doc.getURL()}?xpage=getgroupmembers", 'translationPrefix' : 'xe.admin.groups.', 'javascriptName' : 'editgrouptable'}) -## -## -## -#if($context.action == "inline") - <div id="addNewMember"> - <table> - <tr><td class="addlabel">$msg.get("xe.admin.groups.addUser") #if(!$mainwk)</td> - <td><select name="wiki" onchange="changeWiki(this);"> - <option value="local" selected="selected">$msg.get("xe.admin.local")</option> - <option value="global">$msg.get("xe.admin.global")</option> - </select></td> - #else <input type="hidden" name="wiki" value="local" /></td> #end - <td> - <input id="userSuggest" type="text" size="30" name="newMember" autocomplete="off" onfocus="window.createSuggest(this, 'user');"/> - </td> - <td> - <input type="button" id="addNewUser" class="button" value="$msg.get('xe.admin.groups.addUser.submit')" onclick="addNewMember('user', $('userSuggest').value);"/> - </td> - </tr> - <tr> - <td class="addlabel">$msg.get("xe.admin.groups.addGroup") #if(!$mainwk)</td> - <td><select name="wiki" onchange="changeWiki(this);"> - <option value="local" selected="selected">$msg.get("xe.admin.local")</option> - <option value="global">$msg.get("xe.admin.global")</option> - </select></td> - #else <input type="hidden" name="wiki" value="local" /></td> #end - <td> - <input id="groupSuggest" type="text" size="30" name="newMember" autocomplete="off" onfocus="window.createSuggest(this, 'group');"/> - </td> - <td> - <input type="button" id="addNewGroup" class="button" value="$msg.get('xe.admin.groups.addGroup.submit')" onclick="addNewMember('group', $('groupSuggest').value);"/> - </td> - </tr> - <tr><td colspan="3" id="errMsg"></td></tr> - </table> - </div> -{pre} -<script type="text/javascript"> -// <![CDATA[ -window.addNewMember = function(uorg, name) -{ - //url = adduorg - if(name) - { - var url = "$doc.getURL("view")" + "?xpage=adduorg" + "&" + "uorg=" + uorg + "&" + "name=" + name; - new Ajax.Request(url, - { - method: 'get', - onSuccess: function(transport) { - $('userSuggest').value = ""; - $('groupSuggest').value = ""; + $xwiki.jsfx.use("js/xwiki/usersandgroups/usersandgroups.js", true) + $xwiki.ssfx.use("js/xwiki/usersandgroups/usersandgroups.css") + $xwiki.jsfx.use("js/xwiki/table/livetable.js", true) + $xwiki.ssfx.use("js/xwiki/table/livetable.css", true) + ## + ## + #if($context.action == 'inline' && $hasEditGroupRight) + <div id="addNewMember"> + <table> + <tr> + <td class="addlabel">$msg.get("xe.admin.groups.addUser") + #if(!$mainwk) + </td> + <td><select name="wiki" onchange="changeWiki(this);"> + <option value="local" selected="selected">$msg.get("xe.admin.local")</option> + <option value="global">$msg.get("xe.admin.global")</option> + </select> + </td> + #else + <input type="hidden" name="wiki" value="local" /></td> + #end + <td> + <input id="userSuggest" type="text" size="30" name="newMember" autocomplete="off" /> + </td> + <td> + <input type="button" id="addNewUser" class="button" value="$msg.get('xe.admin.groups.addUser.submit')" /> + </td> + </tr> + <tr> + <td class="addlabel">$msg.get("xe.admin.groups.addGroup") + #if(!$mainwk) + </td> + <td><select name="wiki" onchange="changeWiki(this);"> + <option value="local" selected="selected">$msg.get("xe.admin.local")</option> + <option value="global">$msg.get("xe.admin.global")</option> + </select> + </td> + #else + <input type="hidden" name="wiki" value="local" /></td> + #end + <td> + <input id="groupSuggest" type="text" size="30" name="newMember" autocomplete="off" /> + </td> + <td> + <input type="button" id="addNewGroup" class="button" value="$msg.get('xe.admin.groups.addGroup.submit')" /> + </td> + </tr> + <tr><td colspan="3" id="errMsg"></td></tr> + </table> + </div><br /> + ## + ## + {pre} + <script type="text/javascript"> + // <![CDATA[ + if (typeof XWiki == "undefined") { + var XWiki = {}; + } - var nr = parseInt(transport.responseText); - if(nr == 0) $('errMsg').innerHTML = "$msg.get('xe.admin.groups.addUser.duplicate')"; - else { - var end = editgrouptable.limit; - var start = editgrouptable.lastOffset; - editgrouptable.clearCache(); - if(start < 1) start = 1; - editgrouptable.getRows(start, end, start, end); - } - } - }); + Object.extend(XWiki, { + groupmanager : { + /* + ** Initialize Group Manager javascript widgets (called on document load). + */ + userSuggest: null, + + groupSuggest: null, + + init: function() { + if (XWiki.contextaction != 'view') { + this.initSuggestWidget(); + this.initAddNewMemberWidget(); + } + }, + initSuggestWidget: function() { + if($('userSuggest')){ + $('userSuggest').observe('focus', this.createSuggest.bind(this, $('userSuggest'), 'user', true)); + } + if($('groupSuggest')){ + $('groupSuggest').observe('focus', this.createSuggest.bind(this, $('groupSuggest'), 'group', false)); + } + }, + initAddNewMemberWidget: function() { + if($('addNewUser')){ + $('addNewUser').observe('click', this.addNewMember.bind(this, 'user', $('userSuggest'))); + } + if($('addNewGroup')){ + $('addNewGroup').observe('click', this.addNewMember.bind(this, 'group', $('groupSuggest'))); + } + }, + createSuggest: function(input, uorg, suggestObj) { + //clear the errors + $('errMsg').innerHTML = ""; + + suggesturl = "${doc.getURL()}?xpage=uorgsuggest&classname=XWiki.XWikiUsers&wiki=local"; + + //if(suggesturl.indexOf("&" + "uorg=") > 0) + // suggesturl = suggesturl.substring(0, suggesturl.indexOf("&" + "uorg=")); + + if(uorg == "user"){ + suggesturl += "&" + "uorg=user" + "&"; + }else{ + suggesturl += "&" + "uorg=group" + "&"; + } + // input.id = input.id; + return new ajaxSuggest(input, { script: suggesturl, varname:'input' } ); + }, + addNewMember: function(uorg, input) { + if(input) { + var url = "${doc.getURL()}?xpage=adduorg" + "&" + "uorg=" + uorg + "&" + "name=" + input.value; + new Ajax.Request(url, { + method: 'get', + onSuccess: function(transport) { + $('userSuggest').value = ""; + $('groupSuggest').value = ""; + + var nr = parseInt(transport.responseText); + if(nr == 0){ + if(uorg == "user"){ + $('errMsg').innerHTML = "$msg.get('xe.admin.groups.addUser.duplicate')"; + }else{ + $('errMsg').innerHTML = "$msg.get('xe.admin.groups.addGroup.duplicate')"; + } + }else{ + var end = editgrouptable.limit; + var start = editgrouptable.lastOffset; + editgrouptable.clearCache(); + if(start < 1) + start = 1; + editgrouptable.getRows(start, end, start, end); + } + } + }); + } + } + } + }); + XWiki.groupmanager.init(); + // ]]> + </script> + {/pre} + ## + ## + #end + ## + ## + #set($columnOptions = { + "member" : {'link': 'auto', 'type': 'text'}, + '_avatar' : { 'type' : 'none', 'link' : 'none', 'html' : 'true', 'sortable' : false }, + 'email' : { 'type' : 'text' }, + 'company' : { 'type' : 'text' }, + 'phone' : { 'type' : 'text', 'sortable' : false }, + "_actions" : { + 'actions': ['delete'], + 'actionCallbacks': {'delete': 'table.deleteRow(i);'}, + 'ajaxActions': {'delete': true} } -} - //create new ajax suggest - suggesturl = "$doc.getURL()" + "?xpage=uorgsuggest" + "&" + "classname=XWiki.XWikiUsers" + "&" + "wiki=local"; - - window.createSuggest = function(input, uorg) - { - if(suggesturl.indexOf("&" + "uorg=") > 0) suggesturl = suggesturl.substring(0, suggesturl.indexOf("&" + "uorg=")); - if(uorg == "user") - suggesturl += "&" + "uorg=user" + "&"; - else - suggesturl += "&" + "uorg=group" + "&"; - - //clear the errors - $('errMsg').innerHTML = ""; - return new ajaxSuggest(input, { script: suggesturl, varname:'input' } ); -} -// ]]> -</script> -{/pre} -#end -## -## -## + }) + #if($hasAdmin && $context.action == 'inline' && $hasEditGroupRight) + #set($columns = ['_avatar', 'member', 'email', 'company', 'phone', '_actions']) + #else + #set($columns = ['_avatar', 'member', 'email', 'company', 'phone']) + #end + #livetable("groupusers", $columns, $columnOptions, {'url' : "${groupDoc.getURL()}?xpage=getgroupmembers", 'translationPrefix' : 'xe.admin.groups.', 'javascriptName' : 'editgrouptable'}) + ## + ## + ## #else ## stable interface 1 $doc.name @@ -157,11 +230,11 @@ #set($totalPages = ($allObjects.size() - 1) / $itemsPerPage) #set($crtPageNumber = $startAt / $itemsPerPage) #set($objects = $allObjects.subList($startAt, $endAt)) -#if($context.action == "inline") +#if($context.action == "inline" && $hasEditGroupRight) #warning($msg.get("userdeletioncannotbecanceled")) #set($redirect = $xwiki.getRequestURL()) {table} -<span class="floatleft">$msg.get("xe.admin.groups.members")</span> <a id="adduser" href="$doc.getURL("objectadd","classname=XWiki.XWikiGroups&amp;xredirect=$redirect")" title="$msg.get("addusertogroup")"><span class="hidden">($msg.get("add"))</span></a> | +<span class="floatleft">$msg.get("xe.admin.groups.members")</span> <a id="adduser" href="$doc.getURL("objectadd","classname=XWiki.XWikiGroups&amp;xredirect=$redirect")" title="$msg.get("addusertogroup")"><span class="hidden">($msg.get("add"))</span></a> | #foreach($obj in $objects) $doc.display("member", $obj) | <a class="deletelink" href="$doc.getURL("objectremove", "classname=XWiki.XWikiGroups&amp;classid=${obj.number}&amp;xredirect=${doc.getURL('inline')}")" title="$msg.get("removethisuserfromgroup")">$msg.get("delete")</a> #end ##foreach Index: panels/src/main/resources/Panels/QuickLinks.xml =================================================================== --- panels/src/main/resources/Panels/QuickLinks.xml (revision 29916) +++ panels/src/main/resources/Panels/QuickLinks.xml (working copy) @@ -103,6 +103,7 @@ #panelheader($msg.get("xe.panels.quicklinks")) * [$msg.get("xe.panels.quicklinks.dashboard")>Main.Dashboard] <a href="$xwiki.getURL('Main.WebRss', 'view', 'xpage=plain')"><img src="$xwiki.getSkinFile('icons/xwiki/rss-medium.png')" alt="(RSS)" title="RSS feed for wiki updates" class="icon rss"/></a> * [$msg.get("xe.panels.quicklinks.index")>Main.AllDocs] +* [$msg.get("xe.panels.quicklinks.usersdirectory")>Main.UsersDirectory] * [$msg.get("xe.panels.quicklinks.blog")>Blog.WebHome] <a href="$xwiki.getURL('Blog.GlobalBlogRss', 'view', 'xpage=plain')"><img src="$xwiki.getSkinFile('icons/xwiki/rss-medium.png')" alt="(RSS)" title="RSS feed for blog posts" class="icon rss"/></a> * [$msg.get("xe.panels.quicklinks.sandbox")>Sandbox.WebHome] #if ($xwiki.hasAdminRights())