Author: vdegtyarev Date: Wed Jul 24 09:56:25 2013 New Revision: 1506476 URL: http://svn.apache.org/r1506476 Log: OPENMEETINGS-714 is fixed
Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/daos/AppointmentDao.java openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/management/MeetingMemberLogic.java openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/calendar/Appointment.java openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/calendar/MeetingMember.java openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.java openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/calendar/MeetingMemberDialog.java Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/daos/AppointmentDao.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/daos/AppointmentDao.java?rev=1506476&r1=1506475&r2=1506476&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/daos/AppointmentDao.java (original) +++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/daos/AppointmentDao.java Wed Jul 24 09:56:25 2013 @@ -51,8 +51,10 @@ import org.apache.openmeetings.persisten import org.apache.openmeetings.persistence.beans.calendar.MeetingMember; import org.apache.openmeetings.persistence.beans.room.Room; import org.apache.openmeetings.persistence.beans.user.User; +import org.apache.openmeetings.persistence.beans.user.User.Type; import org.apache.openmeetings.utils.math.CalendarPatterns; import org.apache.openmeetings.utils.math.TimezoneUtil; +import org.apache.openmeetings.web.app.WebSession; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -260,26 +262,14 @@ public class AppointmentDao { } public Appointment update(Appointment a, Long userId) { - a.setUserId(usersDao.get(userId)); + User u = usersDao.get(userId); + a.setUserId(u); Room r = a.getRoom(); if (r.getRooms_id() == null) { r.setName(a.getAppointmentName()); r.setNumberOfPartizipants(cfgDao.getConfValue("calendar.conference.rooms.default.size", Long.class, "50")); } roomDao.update(r, userId); - if (a.getMeetingMember() != null){ - for (MeetingMember mm : a.getMeetingMember()){ - if (mm.getMeetingMemberId() == null){ - if (mm.getUserid().getUser_id() == null){ - User u = mm.getUserid(); - em.persist(u); - } - em.persist(mm); - } else { - em.merge(mm); - } - } - } if (a.getAppointmentId() == null) { a.setStarttime(new Date()); em.persist(a); @@ -287,6 +277,29 @@ public class AppointmentDao { a.setUpdatetime(new Date()); a = em.merge(a); } + // update meeting members + List<MeetingMember> mmList = a.getMeetingMember(); + if ( mmList != null){ + for (MeetingMember mm : mmList){ + Long usrId = mm.getUserid().getUser_id(); + if (usrId == null){ + usrId = userManager.addUser(mm.getUserid()); + } + //TODO base url should be changed + String urlPostfix = ""; + if (mm.getUserid().getType() == Type.contact) { + urlPostfix = "swf"; + } else { + urlPostfix = "#room/" + r.getRooms_id(); + } + + meetingMemberLogic.addMeetingMemberInvitation( + mm, a, WebSession.get().getBaseUrl() + urlPostfix, + u.getUser_id(), timezoneUtil.getTimezoneByUser(u), u.getOmTimeZone(), + u.getFirstname() + " " + u.getLastname() + ); + } + } return a; } Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/management/MeetingMemberLogic.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/management/MeetingMemberLogic.java?rev=1506476&r1=1506475&r2=1506476&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/management/MeetingMemberLogic.java (original) +++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/calendar/management/MeetingMemberLogic.java Wed Jul 24 09:56:25 2013 @@ -191,7 +191,122 @@ public class MeetingMemberLogic { } return null; } + + /** + * @author vasya + * @param meetingMember + * @param appointment + * @param baseUrl + * @param meeting_organizer + * @param timezone + * @param jNameInternalTimeZone + * @param invitorName + * @return + */ + public Long addMeetingMemberInvitation(MeetingMember member, + Appointment appointment, String baseUrl, Long meeting_organizer, + TimeZone timezone, OmTimeZone omTimeZone, String invitorName) { + + try { + Boolean isInvitor = member.getInvitor(); + + Long invitationId = null; + + if (appointment.getRemind() == null) { + log.error("Appointment has no assigned ReminderType!"); + return null; + } + + log.debug(":::: addMeetingMemberInvitation ..... " + + appointment.getRemind().getTypId()); + + String subject = formatSubject(member.getUserid().getLanguage_id(), appointment, timezone); + + String message = formatMessage(member.getUserid().getLanguage_id(), appointment, timezone, + invitorName); + + // appointment.getRemind().getTypId() == 1 will not receive emails + + if (appointment.getRemind().getTypId() == 2) { + log.debug("Invitation for Appointment : simple email"); + + Invitations invitation = invitationManager + .addInvitationLink( + new Long(2), // userlevel + member.getFirstname() + " " + member.getLastname(), // username + message, + baseUrl, // baseURl + member.getUserid().getAdresses().getEmail(), // email + subject, // subject + appointment.getRoom().getRooms_id(), // room_id + "public", + appointment.getIsPasswordProtected(), // passwordprotected + appointment.getPassword(), // invitationpass + 2, // valid type + appointment.getAppointmentStarttime(), // valid from + appointment.getAppointmentEndtime(), // valid to + meeting_organizer, // created by + baseUrl, + member.getUserid().getLanguage_id(), + true, // really send mail sendMail + appointment.getAppointmentStarttime(), + appointment.getAppointmentEndtime(), + appointment.getAppointmentId(), + invitorName, + omTimeZone); + + invitationId = invitation.getInvitations_id(); + + } else if (appointment.getRemind().getTypId() == 3) { + log.debug("Reminder for Appointment : iCal mail"); + + System.out.println("### SENDING iCAL EMAIL"); + + invitationId = invitationManager + .addInvitationIcalLink( + new Long(2), // userlevel + member.getFirstname() + " " + member.getLastname(), // username + message, + baseUrl, // baseURl + member.getUserid().getAdresses().getEmail(), // email + subject, // subject + appointment.getRoom().getRooms_id(), // room_id + "public", + appointment.getIsPasswordProtected(), // passwordprotected + appointment.getPassword(), // invitationpass + 2, // valid + appointment.getAppointmentStarttime(), // valid from + appointment.getAppointmentEndtime(), // valid to + meeting_organizer, // created by + appointment.getAppointmentId(), isInvitor, + member.getUserid().getLanguage_id(), timezone, + appointment.getAppointmentId(), + invitorName); + + } + + // Setting InvitationId within MeetingMember + + if (invitationId != null) { + Invitations invi = invitationManager + .getInvitationbyId(invitationId); + + member.setInvitation(invi); + + updateMeetingMember(member); + + } + + return invitationId; + + } catch (Exception err) { + log.error("[addMeetingMember]", err); + } + return null; + } + + private String formatSubject(Long language_id, Appointment point, TimeZone timezone) { try { Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/calendar/Appointment.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/calendar/Appointment.java?rev=1506476&r1=1506475&r2=1506476&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/calendar/Appointment.java (original) +++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/calendar/Appointment.java Wed Jul 24 09:56:25 2013 @@ -24,6 +24,7 @@ import java.util.Date; import java.util.List; import java.util.TimeZone; +import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -174,7 +175,7 @@ public class Appointment implements Seri @Element(data=true, required=false) private String icalId; - @OneToMany(fetch = FetchType.LAZY) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "appointment_id") private List<MeetingMember> meetingMember; Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/calendar/MeetingMember.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/calendar/MeetingMember.java?rev=1506476&r1=1506475&r2=1506476&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/calendar/MeetingMember.java (original) +++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/calendar/MeetingMember.java Wed Jul 24 09:56:25 2013 @@ -21,6 +21,7 @@ package org.apache.openmeetings.persiste import java.io.Serializable; import java.util.Date; +import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -50,7 +51,7 @@ public class MeetingMember implements Se @Element(data=true) private Long meetingMemberId; - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name="user_id", nullable=true) @ForeignKey(enabled = true) @Element(name="userid", data=true, required=false) Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java?rev=1506476&r1=1506475&r2=1506476&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java (original) +++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java Wed Jul 24 09:56:25 2013 @@ -70,6 +70,7 @@ public class WebSession extends Abstract private SimpleDateFormat ISO8601FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); private DateFormat sdf; private Dashboard dashboard; + private String baseUrl = null; public WebSession(Request request) { super(request); @@ -206,6 +207,14 @@ public class WebSession extends Abstract return d; } + public String getBaseUrl() { + return baseUrl; + } + + public void setBaseUrl(String baseUrl){ + this.baseUrl = baseUrl; + } + private void initDashboard() { DashboardContext dashboardContext = getDashboardContext(); //FIXME check title etc. Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.java?rev=1506476&r1=1506475&r2=1506476&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.java (original) +++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.java Wed Jul 24 09:56:25 2013 @@ -142,6 +142,7 @@ public class MainPage extends BaseInited WebSession.get().setArea(null); } }); + // This code is required to detect OM proxy url add(new AbstractDefaultAjaxBehavior() { private static final long serialVersionUID = 1L; @@ -154,6 +155,7 @@ public class MainPage extends BaseInited @Override protected void respond(AjaxRequestTarget target) { StringValue baseUrl = getRequestCycle().getRequest().getRequestParameters().getParameterValue("baseUrl"); + WebSession.get().setBaseUrl(baseUrl.toString()); } }); } Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java?rev=1506476&r1=1506475&r2=1506476&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java (original) +++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java Wed Jul 24 09:56:25 2013 @@ -105,7 +105,7 @@ public class AppointmentDialog extends A feedback = new FeedbackPanel("feedback"); form = new AppointmentForm("appForm", model); add(form); - addAttendees = new MeetingMemberDialog("addAttendees", WebSession.getString(812), getModel(), this); + addAttendees = new MeetingMemberDialog("addAttendees", WebSession.getString(812), model, form.get("attendeeContainer")); add(addAttendees); } Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/calendar/MeetingMemberDialog.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/calendar/MeetingMemberDialog.java?rev=1506476&r1=1506475&r2=1506476&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/calendar/MeetingMemberDialog.java (original) +++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/user/calendar/MeetingMemberDialog.java Wed Jul 24 09:56:25 2013 @@ -32,6 +32,7 @@ import org.apache.openmeetings.persisten import org.apache.openmeetings.web.app.Application; import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.util.UserAutoCompleteTextField; +import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.html.form.Form; @@ -57,7 +58,7 @@ public class MeetingMemberDialog extends private final List<User> attendeesToRemove = new ArrayList<User>(); DialogButton send = new DialogButton(WebSession.getString(175)); private DialogButton cancel = new DialogButton(WebSession.getString(219)); - private AppointmentDialog appDialog; + private Component attendeeContainer; @SuppressWarnings("unused") private User userBeingSearched = null; //Model object for UserAutoCompleteTextField, accessible via PropertyModel @@ -66,9 +67,9 @@ public class MeetingMemberDialog extends return 500; } - public MeetingMemberDialog(String id, String string, IModel<Appointment> model, AppointmentDialog appDialog ) { + public MeetingMemberDialog(String id, String string, IModel<Appointment> model, Component attendeeContainer ) { super(id, string, model); - this.appDialog = appDialog; + this.attendeeContainer = attendeeContainer; formUsers = new Form<User>("formUsers"); formUsers.add(feedbackDialog.setOutputMarkupId(true)); @@ -211,6 +212,7 @@ public class MeetingMemberDialog extends mm.setDeleted(false); if (u.getType() == Type.contact){ mm.setInvitor(false); + u.setLanguage_id(WebSession.getLanguage()); } else { boolean invitor = (WebSession.getUserId() == u.getUser_id() ? true : false); mm.setInvitor(invitor); @@ -222,6 +224,6 @@ public class MeetingMemberDialog extends } } app.setMeetingMember(meetingMembers); - target.add(appDialog.getForm()); + target.add(attendeeContainer); } }