File Source: MembersInvite.java
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. The ASF licenses this file to You
4 * under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License. For additional information regarding
15 * copyright in this work, please see the NOTICE file in the top level
16 * directory of this distribution.
17 */
18
19 package org.apache.roller.weblogger.ui.struts2.editor;
20
21 import org.apache.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23 import org.apache.roller.weblogger.WebloggerException;
24 import org.apache.roller.weblogger.config.WebloggerConfig;
25 import org.apache.roller.weblogger.business.WebloggerFactory;
26 import org.apache.roller.weblogger.business.UserManager;
27 import org.apache.roller.weblogger.pojos.WeblogPermission;
28 import org.apache.roller.weblogger.pojos.User;
29 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
30 import org.apache.roller.weblogger.util.MailUtil;
31
32
33 /**
34 * Allows website admin to invite new members to website.
35 *
36 * TODO: handle 'disabled' result
37 */
38 public class MembersInvite extends UIAction {
39
/*
P/P * Method: org.apache.roller.weblogger.ui.struts2.editor.MembersInvite__static_init
*
* Postconditions:
* init'ed(log)
*/
40 private static Log log = LogFactory.getLog(MembersInvite.class);
41
42 // user being invited
43 private String userName = null;
44
45 // permissions being given to user
46 private String permissionsMask = null;
47
48
/*
P/P * Method: void org.apache.roller.weblogger.ui.struts2.editor.MembersInvite()
*
* Postconditions:
* this.actionName == &"invite"
* this.desiredMenu == &"editor"
* this.pageTitle == &"inviteMember.title"
* this.permissionsMask == null
* this.userName == null
*/
49 public MembersInvite() {
50 this.actionName = "invite";
51 this.desiredMenu = "editor";
52 this.pageTitle = "inviteMember.title";
53 }
54
55
56 // admin perms required
57 public short requiredWeblogPermissions() {
/*
P/P * Method: short requiredWeblogPermissions()
*
* Presumptions:
* init'ed(org.apache.roller.weblogger.pojos.WeblogPermission.ADMIN)
*
* Postconditions:
* return_value == org.apache.roller.weblogger.pojos.WeblogPermission.ADMIN
* (soft) init'ed(return_value)
*/
58 return WeblogPermission.ADMIN;
59 }
60
61
62 public String execute() {
63
64 // if group blogging is disabled then you can't change permissions
/*
P/P * Method: String execute()
*
* Preconditions:
* (soft) log != null
*
* Postconditions:
* return_value in Addr_Set{&"input",&"success"}
*
* Test Vectors:
* org.apache.roller.weblogger.config.WebloggerConfig:getBooleanProperty(...)@65: {1}, {0}
*/
65 if (!WebloggerConfig.getBooleanProperty("groupblogging.enabled")) {
66 // TODO: i18n
67 addError("invitations disabled");
68 return SUCCESS;
69 }
70
71 log.debug("Showing weblog inivitation form");
72
73 return INPUT;
74 }
75
76
77 /**
78 * Save the new invitation and notify the user.
79 */
80 public String save() {
81
82 // if group blogging is disabled then you can't change permissions
/*
P/P * Method: String save()
*
* Preconditions:
* (soft) log != null
* (soft) init'ed(this.permissionsMask)
* (soft) init'ed(this.userName)
*
* Presumptions:
* org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@91 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@131 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@91 != null
* org.apache.roller.weblogger.ui.struts2.editor.MembersInvite:getActionWeblog(...)@122 != null
*
* Postconditions:
* return_value in Addr_Set{&"success",&"input"}
*
* Test Vectors:
* org.apache.roller.weblogger.business.UserManager:getPermissions(...)@113: Addr_Set{null}, Inverse{null}
* org.apache.roller.weblogger.business.UserManager:getUserByUserName(...)@96: Inverse{null}, Addr_Set{null}
* org.apache.roller.weblogger.config.WebloggerConfig:getBooleanProperty(...)@83: {1}, {0}
* org.apache.roller.weblogger.pojos.WeblogPermission:isPending(...)@115: {0}, {1}
* org.apache.roller.weblogger.ui.struts2.editor.MembersInvite:hasActionErrors(...)@107: {0}, {1}
* org.apache.roller.weblogger.ui.struts2.editor.MembersInvite:hasActionErrors(...)@128: {1}, {0}
* org.apache.roller.weblogger.util.MailUtil:isMailConfigured(...)@135: {0}, {1}
*/
83 if (!WebloggerConfig.getBooleanProperty("groupblogging.enabled")) {
84 // TODO: i18n
85 addError("invitations disabled");
86 return SUCCESS;
87 }
88
89 log.debug("Attempting to process weblog invitation");
90
91 UserManager umgr = WebloggerFactory.getWeblogger().getUserManager();
92
93 // user being invited
94 User user = null;
95 try {
96 user = umgr.getUserByUserName(getUserName());
97 if (user == null) {
98 addError("inviteMember.error.userNotFound");
99 }
100 } catch(WebloggerException ex) {
101 log.error("Error looking up user by id - "+getUserName(), ex);
102 // TODO: i18n
103 addError("Error looking up invitee");
104 }
105
106 // if we already have an error then bail now
107 if(hasActionErrors()) {
108 return INPUT;
109 }
110
111 // check for existing permissions or invitation
112 try {
113 WeblogPermission perms = umgr.getPermissions(getActionWeblog(), user);
114
115 if (perms != null && perms.isPending()) {
116 addError("inviteMember.error.userAlreadyInvited");
117 } else if (perms != null) {
118 addError("inviteMember.error.userAlreadyMember");
119 }
120
121 } catch (WebloggerException ex) {
122 log.error("Error looking up permissions for weblog - "+getActionWeblog().getHandle(), ex);
123 // TODO: i18n
124 addError("Error checking existing permissions");
125 }
126
127 // if no errors then send the invitation
128 if(!hasActionErrors()) try {
129
130 umgr.inviteUser(getActionWeblog(), user, Short.parseShort(getPermissionsMask()));
131 WebloggerFactory.getWeblogger().flush();
132
133 addMessage("inviteMember.userInvited");
134
135 if (MailUtil.isMailConfigured()) try {
136 MailUtil.sendWeblogInvitation(getActionWeblog(), user);
137 } catch (WebloggerException e) {
138 // TODO: this should be an error except that struts2 misbehaves
139 // when we chain this action to the next one thinking that an error
140 // means that validation broke during the chain
141 addMessage("error.untranslated", e.getMessage());
142 }
143
144 log.debug("Invitation successfully recorded");
145
146 return SUCCESS;
147
148 } catch (Exception ex) {
149 log.error("Error creating user invitation", ex);
150 // TODO: i18n
151 addError("Error creating user invitation");
152 }
153
154 log.debug("Invitation had errors, giving user another chance");
155
156 return INPUT;
157 }
158
159
160 public String getUserName() {
/*
P/P * Method: String getUserName()
*
* Preconditions:
* init'ed(this.userName)
*
* Postconditions:
* return_value == this.userName
* init'ed(return_value)
*/
161 return userName;
162 }
163
164 public void setUserName(String userId) {
/*
P/P * Method: void setUserName(String)
*
* Postconditions:
* this.userName == userId
* init'ed(this.userName)
*/
165 this.userName = userId;
166 }
167
168 public String getPermissionsMask() {
/*
P/P * Method: String getPermissionsMask()
*
* Preconditions:
* init'ed(this.permissionsMask)
*
* Postconditions:
* return_value == this.permissionsMask
* init'ed(return_value)
*/
169 return permissionsMask;
170 }
171
172 public void setPermissionsMask(String permission) {
/*
P/P * Method: void setPermissionsMask(String)
*
* Postconditions:
* this.permissionsMask == permission
* init'ed(this.permissionsMask)
*/
173 this.permissionsMask = permission;
174 }
175
176 }
SofCheck Inspector Build Version : 2.18479
| MembersInvite.java |
2009-Jan-02 14:25:08 |
| MembersInvite.class |
2009-Sep-04 03:12:45 |