KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > cms > registration > action > RegisterAction


1 package com.dotmarketing.cms.registration.action;
2
3 import java.util.Date JavaDoc;
4 import java.util.List JavaDoc;
5
6 import javax.servlet.http.HttpServletRequest JavaDoc;
7 import javax.servlet.http.HttpServletResponse JavaDoc;
8
9 import org.apache.commons.beanutils.BeanUtils;
10 import org.apache.commons.logging.LogFactory;
11 import org.apache.struts.Globals;
12 import org.apache.struts.action.ActionErrors;
13 import org.apache.struts.action.ActionForm;
14 import org.apache.struts.action.ActionForward;
15 import org.apache.struts.action.ActionMapping;
16 import org.apache.struts.action.ActionMessage;
17 import org.apache.struts.action.ActionMessages;
18 import org.apache.struts.actions.DispatchAction;
19
20 import com.dotmarketing.beans.Host;
21 import com.dotmarketing.beans.UserProxy;
22 import com.dotmarketing.cms.factories.PublicAddressFactory;
23 import com.dotmarketing.cms.factories.PublicCompanyFactory;
24 import com.dotmarketing.cms.factories.PublicEncryptionFactory;
25 import com.dotmarketing.cms.factories.PublicRoleFactory;
26 import com.dotmarketing.cms.factories.PublicUserFactory;
27 import com.dotmarketing.cms.login.factories.LoginFactory;
28 import com.dotmarketing.factories.EmailFactory;
29 import com.dotmarketing.factories.HostFactory;
30 import com.dotmarketing.factories.InodeFactory;
31 import com.dotmarketing.factories.UserProxyFactory;
32 import com.dotmarketing.portlets.categories.model.Category;
33 import com.dotmarketing.util.Config;
34 import com.dotmarketing.util.Logger;
35 import com.dotmarketing.util.UtilMethods;
36 import com.dotmarketing.util.WebKeys;
37 import com.liferay.portal.ejb.RoleLocalManagerUtil;
38 import com.liferay.portal.ejb.UserLocalManagerUtil;
39 import com.liferay.portal.model.Address;
40 import com.liferay.portal.model.Role;
41 import com.liferay.portal.model.User;
42 //import com.dotmarketing.cms.registration.factories.ExtUserFactory;
43
//import com.dotmarketing.portlets.usermanager.model.ExtUser;
44
import com.dotmarketing.cms.registration.struts.RegistrationForm;
45 import com.dotmarketing.portlets.organization.factories.OrganizationFactory;
46 import com.dotmarketing.portlets.organization.model.Organization;
47
48 public class RegisterAction extends DispatchAction
49 {
50     @SuppressWarnings JavaDoc("unchecked")
51     public ActionForward unspecified(ActionMapping mapping, ActionForm lf,
52             HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response)
53     throws Exception JavaDoc
54     {
55         RegistrationForm registrationForm = (RegistrationForm) lf;
56         
57         //Copy the variable from the bean to the form
58
long userProxyInode = registrationForm.getUserProxyInode();
59         if (request.getAttribute("userProxyInode") != null) {
60             userProxyInode = (Long JavaDoc) request.getAttribute("userProxyInode");
61         }
62         UserProxy userProxy = UserProxyFactory.getUserProxy(userProxyInode);
63         String JavaDoc userID = userProxy.getUserId();
64         
65         //long extUserInode = registrationForm.getExtUserInode();
66
//String userID = registrationForm.getUserID();
67

68         //Load the variables to save
69
User user = retrieveMember(userID,lf,request,response);
70         
71         //ExtUser extUser = ExtUserFactory.getExtUserByInode(extUserInode);
72

73 // ExtUser extUser = (ExtUser) InodeFactory.getChildOfClass(userProxy,ExtUser.class);
74

75         Address address = retrieveAddress(userID,lf,request,response);
76         Organization organization = (Organization) InodeFactory.getParentOfClass(userProxy,Organization.class);
77         
78         //Copy the attributes
79
BeanUtils.copyProperties(registrationForm,user);
80         
81 // BeanUtils.copyProperties(registrationForm,extUser);
82
BeanUtils.copyProperties(registrationForm, userProxy);
83         
84         BeanUtils.copyProperties(registrationForm,address);
85         registrationForm.setOrganizationInodeAux(organization.getInode());
86         registrationForm.setOrganizationTitle(organization.getTitle());
87         registrationForm.setUserProxyInode(userProxy.getInode());
88         if (userProxyInode > 0 && organization.getInode() == 0) {
89             registrationForm.setNoOrganization(true);
90         }
91         
92         //Find user categories
93
if (userProxyInode > 0) {
94             String JavaDoc[] selectCatsString = new String JavaDoc[0];
95             List JavaDoc<Category> categories = InodeFactory.getParentsOfClass(userProxy,Category.class);
96             selectCatsString = new String JavaDoc[categories.size()];
97             for(int i = 0;i < categories.size();i++)
98             {
99                 selectCatsString[i] = Long.toString(categories.get(i).getInode());
100             }
101             registrationForm.setCategory(selectCatsString);
102             
103             registrationForm.setPassword("XXXXXXXX");
104             registrationForm.setVerifyPassword("XXXXXXXX");
105             registrationForm.setPassChanged(false);
106         } else {
107             registrationForm.setPassChanged(true);
108             registrationForm.setCategory(new String JavaDoc[0]);
109         }
110         
111         //Variables from event registration
112
if (request.getAttribute("from") != null)
113             registrationForm.setFrom((String JavaDoc)request.getAttribute("from"));
114         if (request.getAttribute("referrer") != null)
115         {
116             registrationForm.setReferrer((String JavaDoc)request.getAttribute("referrer"));
117         }
118         else
119         {
120             registrationForm.setReferrer("/home/index.dot");
121         }
122         
123         
124         return mapping.findForward("open");
125     }
126     
127     /**
128      * Login the user a redirects to registration to prefill the registration fields
129      * @param mapping
130      * @param lf
131      * @param request
132      * @param response
133      * @return
134      * @throws Exception
135      */

136     public ActionForward findMe(ActionMapping mapping, ActionForm lf, HttpServletRequest JavaDoc request,HttpServletResponse JavaDoc response) throws Exception JavaDoc
137     {
138         RegistrationForm registrationForm = (RegistrationForm) lf;
139         
140         if (LoginFactory.doLogin(registrationForm.getFindMeEmailAddress(), registrationForm.getFindMePassword(), false, request, response)) {
141             User user = PublicUserFactory.getUserByEmail(registrationForm.getFindMeEmailAddress());
142             UserProxy proxy = UserProxyFactory.getUserProxy(user);
143             registrationForm.setUserProxyInode(proxy.getInode());
144             if (request.getParameter("from") != null)
145             {
146                 request.setAttribute("from",request.getParameter("from"));
147             }
148             if (request.getParameter("referrer") != null)
149             {
150                 request.setAttribute("referrer",request.getParameter("referrer"));
151             }
152             return unspecified (mapping, lf, request, response);
153         }
154         
155         ActionErrors errors = new ActionErrors();
156         errors.add(Globals.MESSAGE_KEY, new ActionMessage("error.user.not.found"));
157         saveMessages(request, errors);
158         registrationForm.setFindMePassword("");
159         
160         return mapping.findForward("open");
161     }
162     
163     @SuppressWarnings JavaDoc("unchecked")
164     public ActionForward saveRegistration(ActionMapping mapping, ActionForm lf, HttpServletRequest JavaDoc request,
165             HttpServletResponse JavaDoc response) throws Exception JavaDoc {
166         //Made the casting to the actualy form class
167
RegistrationForm registrationForm = (RegistrationForm) lf;
168         //Validate form
169
//Validate if the user fill the password and confirm password
170
ActionErrors ae;
171         ae = registrationForm.validateRegistry(request);
172         
173         if(registrationForm.getUserProxyInode() == 0)
174         {
175             if(!validateUniqueEmail(registrationForm.getEmailAddress()))
176             {
177                 ae.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.forgotPasswordClickHere","javascript:forgotPassword()"));
178                 //ae.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("studer.form.unique","Email"));
179
//request.setAttribute("forgotPassword",true);
180
}
181         }
182         
183         if ((ae != null) && (ae.size() > 0))
184         {
185             saveMessages(request, ae);
186             ActionForward af = mapping.findForward("fail");
187             return af;
188         }
189         //End Validate form
190

191         //Save the Organization in the DB
192
//Copy the variable from the bean to the form
193
//String userID = registrationForm.getUserID();
194
//long extUserInode = registrationForm.getExtUserInode();
195
long userProxyInode = registrationForm.getUserProxyInode();
196         //Load the variables to save
197
//ExtUser extUser = ExtUserFactory.getExtUserByInode(extUserInode);
198
UserProxy userProxy = UserProxyFactory.getUserProxy(userProxyInode);
199         String JavaDoc userID = userProxy.getUserId();
200         User user = retrieveMember(userID,lf,request,response);
201         String JavaDoc lastPassword = user.getPassword();
202         
203 // ExtUser extUser = (ExtUser) InodeFactory.getChildOfClass(userProxy,ExtUser.class);
204

205         Address address = retrieveAddress(userID,lf,request,response);
206         
207         //Copy the attributes
208
BeanUtils.copyProperties(user,registrationForm);
209         
210 // BeanUtils.copyProperties(extUser,registrationForm);
211
BeanUtils.copyProperties(userProxy, registrationForm);
212         
213         BeanUtils.copyProperties(address,registrationForm);
214         
215         //Save the new values
216
user.setPasswordEncrypted(true);
217         String JavaDoc newEncryptedPassword = PublicEncryptionFactory.digestString(user.getPassword());
218         
219         if (registrationForm.isPassChanged()) {
220             user.setPassword(newEncryptedPassword);
221         } else {
222             user.setPassword(lastPassword);
223         }
224         
225         boolean isNew = user.isNew();
226         user.setNew(false);
227         saveMember(user);
228         
229         //If is new set the default roles
230
if (isNew)
231         {
232             String JavaDoc companyId = PublicCompanyFactory.getDefaultCompanyId();
233             String JavaDoc defaultRole = Config.getStringProperty("CMS_VIEWER_ROLE");
234             
235             Role role = RoleLocalManagerUtil.getRoleByName(companyId,defaultRole);
236             PublicRoleFactory.addRoleToUser(role.getRoleId(),user);
237         }
238         
239         saveAddress(user,address);
240         //userProxy
241
userProxy.setUserId(user.getUserId());
242         UserProxyFactory.saveUserProxy(userProxy);
243         //ExtUser
244

245 // ExtUserFactory.saveExtUser(extUser);
246

247         //Relation userProxy - extUser
248

249 // userProxy.addChild(extUser);
250

251         //update the inodes in the form, for the confirmation page
252
registrationForm.setUserProxyInode(userProxy.getInode());
253         
254         //Delete the old categories
255
if (userProxy.getInode() != 0)
256         {
257             List JavaDoc<Category> categories = InodeFactory.getParentsOfClass(userProxy,Category.class);
258             for(int i = 0;i < categories.size();i++)
259             {
260                 categories.get(i).deleteChild(userProxy);
261             }
262         }
263         
264         //Save the new categories
265
String JavaDoc[] arr = registrationForm.getCategory();
266         if (arr != null)
267         {
268             for (int i = 0; i < arr.length; i++)
269             {
270                 Category node = (Category) InodeFactory.getInode(arr[i],Category.class);
271                 node.addChild(userProxy);
272             }
273         }
274         
275         //Delete the old organizations
276
if (userProxy.getInode() != 0)
277         {
278             List JavaDoc<Organization> organizations = InodeFactory.getParentsOfClass(userProxy,Organization.class);
279             for(int i = 0;i < organizations.size();i++)
280             {
281                 organizations.get(i).deleteChild(userProxy);
282             }
283         }
284         
285         
286         //Save the new organization
287
if (!registrationForm.isNoOrganization())
288         {
289             long organizationInode = registrationForm.getOrganizationInodeAux();
290             if (organizationInode != 0)
291             {
292                 Organization organization = (Organization) OrganizationFactory.getOrganization(organizationInode);
293                 organization.addChild(userProxy);
294             }
295         }
296         
297         
298         //Load the parameters needed to fill the confirm page
299
confirm(mapping,lf,request,response);
300         
301         //Log in the user into system
302
if (isNew)
303             LoginFactory.doLogin(registrationForm.getEmailAddress(), registrationForm.getPassword(), false, request, response);
304         
305         //make the redirect
306
ae.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("registration.confirmation"));
307         saveMessages(request, ae);
308         return mapping.findForward("confirmation");
309     }
310     
311     public void confirm(ActionMapping mapping, ActionForm lf, HttpServletRequest JavaDoc request,HttpServletResponse JavaDoc response)
312     throws Exception JavaDoc
313     {
314         RegistrationForm registrationForm = (RegistrationForm) lf;
315         long organizationInode = registrationForm.getOrganizationInodeAux();
316         Organization organization = OrganizationFactory.getOrganization(organizationInode);
317         //Copy the variable from the bean to the form
318
String JavaDoc title = organization.getTitle();
319         String JavaDoc street1 = organization.getStreet1();
320         String JavaDoc street2 = organization.getStreet2();
321         String JavaDoc city = organization.getCity();
322         String JavaDoc state = organization.getState();
323         String JavaDoc zip = organization.getZip();
324         String JavaDoc phone = organization.getPhone();
325         String JavaDoc fax = organization.getFax();
326         organizationInode = organization.getInode();
327         //Set the variable in the form;
328
registrationForm.setOrganizationTitle(title);
329         registrationForm.setOrganizationStreet1(street1);
330         registrationForm.setOrganizationStreet2(street2);
331         registrationForm.setOrganizationCity(city);
332         registrationForm.setOrganizationState(state);
333         registrationForm.setOrganizationZip(zip);
334         registrationForm.setOrganizationPhone(phone);
335         registrationForm.setOrganizationFax(fax);
336         registrationForm.setOrganizationInodeAux(organizationInode);
337     }
338     
339     public void cancel(ActionMapping mapping, ActionForm lf, HttpServletRequest JavaDoc request,HttpServletResponse JavaDoc response)
340     throws Exception JavaDoc
341     {
342         /*RegistrationForm registrationForm = (RegistrationForm) lf;
343          String referrer = registrationForm.getReferrer();
344          response.sendRedirect(referrer);*/

345         String JavaDoc referrer = "/home/index.dot";
346         response.sendRedirect(referrer);
347     }
348     
349     public void finish(ActionMapping mapping, ActionForm lf, HttpServletRequest JavaDoc request,HttpServletResponse JavaDoc response)
350     throws Exception JavaDoc
351     {
352         RegistrationForm registrationForm = (RegistrationForm) lf;
353         String JavaDoc referrer = "";
354         if (request.getSession().getAttribute(WebKeys.REDIRECT_AFTER_LOGIN) != null)
355         {
356             String JavaDoc redir = (String JavaDoc) request.getSession().getAttribute(WebKeys.REDIRECT_AFTER_LOGIN);
357             request.getSession().removeAttribute(WebKeys.REDIRECT_AFTER_LOGIN);
358             LogFactory.getLog(this.getClass()).info("redirecting after account creation: " + redir);
359             referrer = redir;
360         }
361         else
362         {
363             referrer = registrationForm.getReferrer();
364         }
365         
366         response.sendRedirect(referrer);
367     }
368     
369     private User retrieveMember(String JavaDoc userId,ActionForm form, HttpServletRequest JavaDoc req, HttpServletResponse JavaDoc res) throws Exception JavaDoc
370     {
371         RegistrationForm registrationForm = (RegistrationForm) form;
372         String JavaDoc companyId = PublicCompanyFactory.getDefaultCompanyId();
373         User member = new User();
374         
375         if (UtilMethods.isSet(userId))
376         {
377             member = UserLocalManagerUtil.getUserById(companyId, userId);
378         }
379         else
380         {
381             member = PublicUserFactory.getInstance();
382             member.setCompanyId(companyId);
383             member.setActive(true);
384             member.setSkinId("01");
385             member.setCreateDate(new Date JavaDoc());
386             member.setGreeting("Welcome, "+ registrationForm.getFirstName()+" "+ registrationForm.getLastName()+"!");
387             member.setMiddleName("");
388             member.setNickName("");
389             member.setNew(true);
390             member.setLanguageId("en_US");
391             member.setTimeZoneId("US/Eastern");
392             member.setResolution("1024x768");
393             member.setRefreshRate("900");
394             member.setLayoutIds("");
395         }
396         return member;
397     }
398     
399     private boolean validateUniqueEmail(String JavaDoc emailAddress)
400     {
401         String JavaDoc companyId = PublicCompanyFactory.getDefaultCompanyId();
402         boolean returnValue = true;
403         User member = null;
404         if (UtilMethods.isSet(emailAddress))
405         {
406             try
407             {
408                 member = UserLocalManagerUtil.getUserByEmailAddress(companyId,emailAddress);
409             }
410             catch(Exception JavaDoc ex)
411             {
412                 Logger.debug(this,ex.toString());
413             }
414         }
415         if(!(member == null))
416         {
417             returnValue = false;
418         }
419         return returnValue;
420     }
421     
422     private void saveMember(User user) throws Exception JavaDoc
423     {
424         PublicUserFactory.save(user);
425     }
426     
427     private Address retrieveAddress(String JavaDoc userID,ActionForm form, HttpServletRequest JavaDoc req, HttpServletResponse JavaDoc res) throws Exception JavaDoc
428     {
429         String JavaDoc companyId = PublicCompanyFactory.getDefaultCompanyId();
430         
431         Address address = null;
432         if (UtilMethods.isSet(userID))
433         {
434             address = (Address) PublicAddressFactory.getAddressesByUserId(userID).get(0);
435         }
436         else
437         {
438             address = PublicAddressFactory.getInstance();
439             address.setCompanyId(companyId);
440         }
441         return address;
442     }
443     
444     private void saveAddress(User user,Address address)
445     {
446         address.setUserId(user.getUserId());
447         PublicAddressFactory.save(address);
448     }
449     
450     public ActionForward forgotPassword(ActionMapping mapping, ActionForm lf, HttpServletRequest JavaDoc request,HttpServletResponse JavaDoc response) throws Exception JavaDoc
451     {
452         RegistrationForm form = (RegistrationForm) lf;
453         //if we have some errors
454
ActionErrors aes = form.validate(mapping, request);
455         
456         if(aes != null && aes.size() > 0){
457             saveMessages(request, aes);
458             return mapping.findForward("fail");
459         }
460         User user = PublicUserFactory.getUserByEmail(form.getEmailAddress());
461         if(user.isNew()){
462             aes= new ActionErrors();
463             aes.add(Globals.ERROR_KEY, new ActionMessage("error.forgotPasswordUserNotFound"));
464             saveMessages(request, aes);
465             return mapping.findForward("fail");
466         }
467         String JavaDoc pass = PublicEncryptionFactory.getRandomPassword();
468         user.setPassword(PublicEncryptionFactory.digestString(pass));
469         PublicUserFactory.save(user);
470         Host host = HostFactory.getCurrentHost(request);
471         EmailFactory.sendForgotPassword(user, pass, host.getInode());
472         
473         aes = new ActionErrors();
474         aes.add(Globals.ERROR_KEY, new ActionMessage("error.forgotPasswordMailSend"));
475         saveMessages(request, aes);
476                 
477         ActionForward af = mapping.findForward("fail");
478         return af;
479     }
480     
481 }
Popular Tags