Modified: rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave.js URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave.js?rev=1346029&r1=1346028&r2=1346029&view=diff ============================================================================== --- rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave.js (original) +++ rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave.js Mon Jun 4 16:39:01 2012 @@ -23,6 +23,9 @@ var rave = rave || (function () { var context = ""; var clientMessages = {}; var openAjaxHub; + // variable to store whether or not some + // UI actions should be propagated back to the server + var pageEditor = true; /** * Separate sub-namespace for isolating UI functions and state management @@ -469,7 +472,7 @@ var rave = rave || (function () { // don't persist the collapse / restore state if we are in // mobile mode because we defaulted all widgets to collapsed // when initially rendering the mobile view - if (rave.isMobile()) { + if (rave.isMobile() || !rave.isPageEditor()) { rave.doWidgetUiCollapse(functionArgs); } else { rave.api.rest.saveWidgetCollapsedState(functionArgs); @@ -1036,6 +1039,16 @@ var rave = rave || (function () { } } + function initPageEditorStatus(status){ + if(status != "undefined"){ + this.pageEditor = status; + } + } + + function isPageEditor(){ + return this.pageEditor; + } + /** * Public API */ @@ -1292,6 +1305,20 @@ var rave = rave || (function () { /** * Registers a new popup definition */ - registerPopup:ui.registerPopup + registerPopup:ui.registerPopup, + + /** + * Set if user of a page has editing permission + * Used to stop sending UI events back to the server, rather + * than actually implementing any permission rules + * (which are set on the server) + */ + initPageEditorStatus:initPageEditorStatus, + + /** + * Returns a boolean indicating if the user + * should be treated as an page editor or not + */ + isPageEditor:isPageEditor } })();
Modified: rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave_api.js URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave_api.js?rev=1346029&r1=1346028&r2=1346029&view=diff ============================================================================== --- rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave_api.js (original) +++ rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave_api.js Mon Jun 4 16:39:01 2012 @@ -489,7 +489,7 @@ rave.api = rave.api || (function() { } }).error(handleError); } - + function updateSharedPageStatus(args){ $.post(rave.getContext() + path + "page/" + args.pageId + "/sharestatus", {"shareStatus": args.shareStatus}, @@ -505,6 +505,22 @@ rave.api = rave.api || (function() { }).error(handleError); } + function updatePageEditingStatus(args){ + $.post(rave.getContext() + path + "page/" + args.pageId + "/editstatus", + {"userId": args.userId, + "isEditor": args.isEditor}, + function(result) { + if (result.error) { + handleRpcError(result); + } + else { + if (typeof args.successCallback == 'function') { + args.successCallback(result); + } + } + }).error(handleError); + } + return { moveWidget : moveWidgetOnPage, addWidgetToPage : addWidgetToPage, @@ -520,7 +536,8 @@ rave.api = rave.api || (function() { searchUsers : searchUsers, addMemberToPage : addMemberToPage, removeMemberFromPage : removeMemberFromPage, - updateSharedPageStatus : updateSharedPageStatus + updateSharedPageStatus : updateSharedPageStatus, + updatePageEditingStatus: updatePageEditingStatus }; })(); Modified: rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave_layout.js URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave_layout.js?rev=1346029&r1=1346028&r2=1346029&view=diff ============================================================================== --- rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave_layout.js (original) +++ rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave_layout.js Mon Jun 4 16:39:01 2012 @@ -136,9 +136,12 @@ rave.layout = rave.layout || (function() var username; var userId; var pageId; - var existingSharers = new Array(); + var existingSharers; function setDefaults(username, userId, pageId, pageStatus){ + if(this.existingSharers == "undefined" || this.existingSharers == null){ + this.existingSharers = {}; + } this.username = username; this.userId = userId; this.pageId = pageId; @@ -147,21 +150,35 @@ rave.layout = rave.layout || (function() }; } - function addExistingMember(member){ - existingSharers.push(member); + function addExistingMember(member, isEditor){ + if(this.existingSharers == "undefined" || this.existingSharers == null){ + this.existingSharers = {}; + } + this.existingSharers[member] = isEditor; } function removeExistingMember(member){ - existingSharers.splice( $.inArray(member, existingSharers), 1 ); + delete this.existingSharers[member]; } function isUserAlreadyAdded(username){ - if($.inArray(username, existingSharers) == -1){ - return false; + for(member in this.existingSharers){ + if(username == member){ + return true; + } } - else{ - return true; + return false; + } + + function isUserEditor(username){ + for(member in this.existingSharers){ + if(username == member){ + if(this.existingSharers[member] == true){ + return true; + } + } } + return false; } function removeMemberFromPage(userId, username){ @@ -176,6 +193,7 @@ rave.layout = rave.layout || (function() rave.api.rpc.removeMemberFromPage({pageId: this.pageId, userId: userId, successCallback: function(result) { rave.layout.searchHandler.removeExistingMember(username); + $('#pageEditorStatusHolder'+userId).empty(); $('#shareButtonHolder'+userId).empty(); $('#shareButtonHolder'+userId) .append( @@ -191,7 +209,7 @@ rave.layout = rave.layout || (function() // reload as page has been removed document.location.href='/'; }else{ - alert("(" + username + ") " + rave.getClientMessage("revoke.share")); + alert("(" + username + ") " + rave.getClientMessage("revoke.share")); } } }); @@ -215,15 +233,68 @@ rave.layout = rave.layout || (function() userId+", '" + username+"');") .text(rave.getClientMessage("common.remove")) ) - $('#shareButtonHolder'+userId).show(); + $('#shareButtonHolder'+userId).show(); + $('#pageEditorStatusHolder'+userId).empty(); + $('#pageEditorStatusHolder'+userId) + .append( + $("<a/>") + .attr("href", "#") + .attr("id", userId) + .attr("onclick", "rave.layout.searchHandler.addEditingRightsToMember("+userId+", '"+username+"');") + .text(rave.getClientMessage("common.add")) + ) alert("(" + username + ") " + rave.getClientMessage("create.share")); } }); } } - + + function removeEditingRightsFromMember(userId, username){ + var answer = confirm(rave.getClientMessage("revoke.editing.user.confirm") + " ("+username+")"); + if(answer){ + $('#pageEditorStatusHolder'+userId).hide(); + rave.api.rpc.updatePageEditingStatus({pageId: this.pageId, userId: userId, isEditor: false, + successCallback: function(result) { + rave.layout.searchHandler.existingSharers[username] = false; + $('#pageEditorStatusHolder'+userId).empty(); + $('#pageEditorStatusHolder'+userId) + .append( + $("<a/>") + .attr("href", "#") + .attr("id", userId) + .attr("onclick", "rave.layout.searchHandler.addEditingRightsToMember("+userId+", '"+username+"');") + .text(rave.getClientMessage("common.add")) + ) + $('#pageEditorStatusHolder'+userId).show(); + } + }); + } + } + + function addEditingRightsToMember(userId, username){ + var answer = confirm(rave.getClientMessage("grant.editing.user.confirm") + " ("+username+")"); + if(answer){ + $('#pageEditorStatusHolder'+userId).hide(); + rave.api.rpc.updatePageEditingStatus({pageId: this.pageId, userId: userId, isEditor: true, + successCallback: function(result) { + rave.layout.searchHandler.existingSharers[username] = true; + $('#pageEditorStatusHolder'+userId).empty(); + $('#pageEditorStatusHolder'+userId) + .append( + $("<a/>") + .attr("href", "#") + .attr("id", userId) + .attr("onclick", "rave.layout.searchHandler.removeEditingRightsFromMember("+userId+", '"+username+"');") + .text(rave.getClientMessage("common.remove")) + ) + $('#pageEditorStatusHolder'+userId).show(); + } + }); + } + } + function acceptShare(){ - $('#confirmSharePageDialog').modal('hide'); + $('#confirmSharePageDialog').modal('hide'); rave.api.rpc.updateSharedPageStatus({pageId: rave.layout.searchHandler.pageId, shareStatus: 'accepted', successCallback: function(result) { //notification here? @@ -232,7 +303,7 @@ rave.layout = rave.layout || (function() } function declineShare(){ - $('#confirmSharePageDialog').modal('hide'); + $('#confirmSharePageDialog').modal('hide'); rave.api.rpc.updateSharedPageStatus({pageId: rave.layout.searchHandler.pageId, shareStatus: 'refused', successCallback: function(result) { document.location.href='/'; @@ -241,7 +312,7 @@ rave.layout = rave.layout || (function() } function confirmPageShare(){ - $("#confirmSharePageDialog").modal('show'); + $("#confirmSharePageDialog").modal('show'); } function init() { @@ -279,7 +350,7 @@ rave.layout = rave.layout || (function() var $pagingDiv = $('#shareSearchListPaging'); $pagingDiv.empty(); if(userResults.result.pageSize < userResults.result.totalResults){ - $pagingDiv.append('<ul id="pagingul" class="paging" style="margin-left: 0;">'); + $pagingDiv.append('<div class="pagination"><ul id="pagingul" >'); if(userResults.result.currentPage > 1){ offset = (userResults.result.currentPage - 2) * userResults.result.pageSize; $('#pagingul').append('<li><a href="#" onclick="rave.api.rpc.getUsers({offset: ' + @@ -288,7 +359,7 @@ rave.layout = rave.layout || (function() } for(var i=1;i<=userResults.result.numberOfPages;i++){ if(i == userResults.result.currentPage){ - $('#pagingul').append('<li><span class="currentPage">'+i+'</span></li>'); + $('#pagingul').append('<li class="active"><a href="#">'+i+'</a></li>'); }else{ offset = (i - 1) * userResults.result.pageSize; $('#pagingul').append('<li><a href="#" onclick="rave.api.rpc.getUsers({offset: ' + @@ -302,6 +373,7 @@ rave.layout = rave.layout || (function() offset + ', successCallback: function(result)' + ' {rave.layout.searchHandler.dealWithUserResults(result);}});">></a></li>'); } + $pagingDiv.append('</ul></div>') } } @@ -349,6 +421,14 @@ rave.layout = rave.layout || (function() .text(rave.getClientMessage("common.sharing")) ) ) + .append( + $("<td/>") + .addClass("booleancell") + .append( + $("<b/>") + .text(rave.getClientMessage("common.editing.auth")) + ) + ) ) .append( $("<tbody/>") @@ -369,6 +449,10 @@ rave.layout = rave.layout || (function() $("<td/>") .attr("id", "shareButtonHolder" + this.entityId) ) + .append( + $("<td/>") + .attr("id", "pageEditorStatusHolder" + this.entityId) + ) ) if(this.username != rave.layout.searchHandler.username){ @@ -382,6 +466,26 @@ rave.layout = rave.layout || (function() .attr("onclick", "rave.layout.searchHandler.removeMemberFromPage("+this.entityId+", '"+this.username+"');") .text(rave.getClientMessage("common.remove")) ) + if(rave.layout.searchHandler.isUserEditor(this.username)){ + $('#pageEditorStatusHolder'+this.entityId) + .append( + $("<a/>") + .attr("href", "#") + .attr("id", this.entityId) + .attr("onclick", "rave.layout.searchHandler.removeEditingRightsFromMember("+this.entityId+", '"+this.username+"');") + .text(rave.getClientMessage("common.remove")) + ) + } + else{ + $('#pageEditorStatusHolder'+this.entityId) + .append( + $("<a/>") + .attr("href", "#") + .attr("id", this.entityId) + .attr("onclick", "rave.layout.searchHandler.addEditingRightsToMember("+this.entityId+", '"+this.username+"');") + .text(rave.getClientMessage("common.add")) + ) + } }else{ $('#shareButtonHolder'+this.entityId) .append( @@ -390,7 +494,7 @@ rave.layout = rave.layout || (function() .attr("id", this.entityId) .attr("onclick", "rave.layout.searchHandler.addMemberToPage("+this.entityId+", '"+this.username+"');") .text(rave.getClientMessage("common.add")) - ) + ) } } @@ -404,8 +508,11 @@ rave.layout = rave.layout || (function() addExistingMember : addExistingMember, removeExistingMember : removeExistingMember, isUserAlreadyAdded : isUserAlreadyAdded, + isUserEditor : isUserEditor, addMemberToPage : addMemberToPage, removeMemberFromPage : removeMemberFromPage, + addEditingRightsToMember: addEditingRightsToMember, + removeEditingRightsFromMember : removeEditingRightsFromMember, confirmPageShare : confirmPageShare, acceptShare : acceptShare, declineShare : declineShare Modified: rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave_opensocial.js URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave_opensocial.js?rev=1346029&r1=1346028&r2=1346029&view=diff ============================================================================== --- rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave_opensocial.js (original) +++ rave/branches/model_interfaces/rave-portal-resources/src/main/webapp/script/rave_opensocial.js Mon Jun 4 16:39:01 2012 @@ -168,7 +168,9 @@ rave.opensocial = rave.opensocial || (fu }; gadget.savePreferences = function (userPrefs) { this.userPrefs = userPrefs; - rave.api.rest.saveWidgetPreferences({regionWidgetId:this.regionWidgetId, userPrefs:userPrefs}); + if(rave.isPageEditor()){ + rave.api.rest.saveWidgetPreferences({regionWidgetId:this.regionWidgetId, userPrefs:userPrefs}); + } // re-render the gadget in the same view if the gadget is not collapsed renderGadgetViewIfNotCollapsed(rave.opensocial.getCurrentView(this.regionWidgetId), this); }; @@ -326,7 +328,9 @@ rave.opensocial = rave.opensocial || (fu // update the memory prefs object regionWidget.userPrefs[prefName] = prefValue; // persist it to database - rave.api.rest.saveWidgetPreference({regionWidgetId:widgetId, userPref:{prefName:prefName, prefValue:prefValue}}); + if(rave.isPageEditor()){ + rave.api.rest.saveWidgetPreference({regionWidgetId:widgetId, userPref:{prefName:prefName, prefValue:prefValue}}); + } } /** Modified: rave/branches/model_interfaces/rave-portal/src/main/dist/LICENSE URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-portal/src/main/dist/LICENSE?rev=1346029&r1=1346028&r2=1346029&view=diff ============================================================================== --- rave/branches/model_interfaces/rave-portal/src/main/dist/LICENSE (original) +++ rave/branches/model_interfaces/rave-portal/src/main/dist/LICENSE Mon Jun 4 16:39:01 2012 @@ -204,7 +204,7 @@ =============================================================================== -The Apache Rave (inclubating) distribution includes a number of subcomponents +The Apache Rave distribution includes a number of subcomponents with separate copyright notices and license terms. Your use of the code for the these subcomponents is subject to the terms and conditions of the following licenses. @@ -2018,33 +2018,15 @@ The following licenses relate to subcomp not already included above. =============================================================================== =============================================================================== -The following components come under Apache Software License 2.0 +The following components come under Apache License 2.0 =============================================================================== dwr-2.0.5 - Containing Project URL: http://directwebremoting.org/ - - /* - * Copyright 2005 Joe Walker - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - enyo.js enyo.css +OpenAjaxManagedHub-all.js +google-collections-1.0-rc2.jar -/* Enyo v2.0.0 | Copyright 2011-2012 Hewlett-Packard Development Company, L.P. | enyojs.com | enyojs.com/license */ - =============================================================================== The following components are MIT Licensed =============================================================================== @@ -2442,30 +2424,6 @@ s5 "As of version 1.1, the technology itself has been explicitly released into the Public Domain, so there are no restrictions whatsoever on its use or reuse (nor can there ever be)" - -=============================================================================== -The following components come under Apache Software License 2.0 -=============================================================================== - - -google-collections-1.0-rc2.jar - Containing Project URL: http://code.google.com/p/google-collections/ - -/* - * Copyright (C) 2009 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ =============================================================================== The following components are BSD Licensed Modified: rave/branches/model_interfaces/rave-portal/src/main/dist/NOTICE URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-portal/src/main/dist/NOTICE?rev=1346029&r1=1346028&r2=1346029&view=diff ============================================================================== --- rave/branches/model_interfaces/rave-portal/src/main/dist/NOTICE (original) +++ rave/branches/model_interfaces/rave-portal/src/main/dist/NOTICE Mon Jun 4 16:39:01 2012 @@ -7,6 +7,18 @@ The Apache Software Foundation (http://w This product includes software (Bootstrap) developed at Twitter (http://www.twitter.com/). +This product includes software (Direct Web Remoting) which is released under the Apache License 2.0 and is +Copyright 2005 Joe Walker (http://directwebremoting.org). + +This product includes software (Enyo 2.0.0) which is released under the Apache License 2.0 and is +Copyright 2011-2012 Hewlett-Packard Development Company, L.P. (http://enyojs.com). + +This product includes software (OpenAjax Managed Hub) which is released under the Apache License 2.0 and is +Copyright 2006 OpenAjax Alliance (http://www.openajax.org). + +This product includes software (Google Collections) which is released under the Apache License 2.0 and is +Copyright (C) 2009 Google Inc. (http://code.google.com/p/google-collections/). + Java compilation software for JSP pages is provided by Eclipse, which is open source software. The original software and related information is available at http://www.eclipse.org. Modified: rave/branches/model_interfaces/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/service/impl/WookieWidgetService.java URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/service/impl/WookieWidgetService.java?rev=1346029&r1=1346028&r2=1346029&view=diff ============================================================================== --- rave/branches/model_interfaces/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/service/impl/WookieWidgetService.java (original) +++ rave/branches/model_interfaces/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/service/impl/WookieWidgetService.java Mon Jun 4 16:39:01 2012 @@ -63,26 +63,27 @@ public class WookieWidgetService impleme */ public Widget[] getWidgets() throws WookieConnectorException{ connectorService = getWookieConnectorService(wookieServerUrl, wookieApiKey, null); - Collection<org.apache.wookie.connector.framework.Widget> widgets = connectorService.getAvailableWidgets().values(); - ArrayList<Widget> raveWidgets = new ArrayList<Widget>(); - for (org.apache.wookie.connector.framework.Widget wookieWidget: widgets){ - Widget widget = new Widget(); - widget.setUrl(wookieWidget.getIdentifier()); - widget.setDescription(wookieWidget.getDescription()); - widget.setTitle(wookieWidget.getTitle()); - widget.setThumbnailUrl(wookieWidget.getIcon().toString()); - raveWidgets.add(widget); - } - return raveWidgets.toArray(new Widget[raveWidgets.size()]); + Collection<org.apache.wookie.connector.framework.Widget> widgets = connectorService.getAvailableWidgets().values(); + ArrayList<Widget> raveWidgets = new ArrayList<Widget>(); + for (org.apache.wookie.connector.framework.Widget wookieWidget: widgets){ + Widget widget = new Widget(); + widget.setUrl(wookieWidget.getIdentifier()); + widget.setDescription(wookieWidget.getDescription()); + widget.setTitle(wookieWidget.getName()); + widget.setThumbnailUrl(wookieWidget.getIcon().toString()); + widget.setAuthor(wookieWidget.getAuthor()); + raveWidgets.add(widget); + } + return raveWidgets.toArray(new Widget[raveWidgets.size()]); } public Widget getWidget(String url) throws WookieConnectorException{ - for (Widget widget: getWidgets()){ - if (widget.getUrl().equalsIgnoreCase(url)){ - return widget; - } - } - return null; + for (Widget widget: getWidgets()){ + if (widget.getUrl().equalsIgnoreCase(url)){ + return widget; + } + } + return null; } /**
