Search in sources :

Example 16 with CalendarManager

use of org.olat.commons.calendar.CalendarManager in project OpenOLAT by OpenOLAT.

the class DENManager method getDENEvents.

/**
 * Returns all generated Events for this course and node
 * @param courseId
 * @param sourseNodeId
 * @return List of all KalendarEvent in this date enrollment
 */
protected List<KalendarEvent> getDENEvents(Long courseId, String sourceNodeId) {
    List<KalendarEvent> denEvents = new ArrayList<KalendarEvent>();
    ICourse course = CourseFactory.loadCourse(courseId);
    CalendarManager calManager = CoreSpringFactory.getImpl(CalendarManager.class);
    Kalendar cal = calManager.getCourseCalendar(course).getKalendar();
    Collection<KalendarEvent> colEvents = cal.getEvents();
    for (KalendarEvent event : colEvents) {
        String eventSourceNodeId = event.getSourceNodeId();
        if (eventSourceNodeId != null) {
            if (eventSourceNodeId.equals(sourceNodeId))
                denEvents.add(event);
        }
    }
    return denEvents;
}
Also used : CalendarManager(org.olat.commons.calendar.CalendarManager) Kalendar(org.olat.commons.calendar.model.Kalendar) ArrayList(java.util.ArrayList) KalendarEvent(org.olat.commons.calendar.model.KalendarEvent) ICourse(org.olat.course.ICourse)

Example 17 with CalendarManager

use of org.olat.commons.calendar.CalendarManager in project OpenOLAT by OpenOLAT.

the class DENManager method persistDENSettings.

/**
 * Persists settings of the date enrollment
 * @param lstEvents
 * @param course
 * @param denNode
 */
public void persistDENSettings(List<KalendarEvent> lstEvents, OLATResourceable ores, DENCourseNode denNode) {
    ICourse course = CourseFactory.loadCourse(ores);
    CalendarManager calManager = CoreSpringFactory.getImpl(CalendarManager.class);
    Kalendar cal = calManager.getCourseCalendar(course).getKalendar();
    String sourceNode = denNode.getIdent();
    // remove deleted events
    Collection<KalendarEvent> allEvents = new ArrayList<KalendarEvent>(cal.getEvents());
    for (KalendarEvent event : allEvents) {
        if (event.getSourceNodeId() != null) {
            if (event.getSourceNodeId().equals(sourceNode) && !lstEvents.contains(event)) {
                removeDateInUserCalendar(event);
                calManager.removeEventFrom(cal, event);
            }
        }
    }
    for (KalendarEvent newEvent : lstEvents) {
        createKalendarEventLinks(course, denNode, newEvent);
        KalendarEvent oldEvent = cal.getEvent(newEvent.getID(), newEvent.getRecurrenceID());
        // new event?
        if (oldEvent != null) {
            // event is already in the calendar so first remove it
            calManager.removeEventFrom(cal, oldEvent);
        }
        // now add the event to the course calendar
        calManager.addEventTo(cal, newEvent);
        // update event in user calendars
        addDateInUserCalendar(newEvent);
    }
}
Also used : CalendarManager(org.olat.commons.calendar.CalendarManager) Kalendar(org.olat.commons.calendar.model.Kalendar) ArrayList(java.util.ArrayList) KalendarEvent(org.olat.commons.calendar.model.KalendarEvent) ICourse(org.olat.course.ICourse)

Example 18 with CalendarManager

use of org.olat.commons.calendar.CalendarManager in project OpenOLAT by OpenOLAT.

the class DENManager method doEnroll.

/**
 * Enrolls an user into a specific calendar event
 * @param identity
 * @param event
 * @param course
 * @param courseNode
 * @param allowOverfill
 * @return status
 */
public DENStatus doEnroll(final Identity identity, final KalendarEvent event, final OLATResourceable ores, final DENCourseNode courseNode, final boolean allowOverfill) {
    final DENStatus status = new DENStatus();
    ICourse course = CourseFactory.loadCourse(ores);
    CalendarManager calManager = CoreSpringFactory.getImpl(CalendarManager.class);
    final Kalendar cal = calManager.getCourseCalendar(course).getKalendar();
    OLATResourceable calRes = calManager.getOresHelperFor(cal);
    // reload calendar events
    final List<KalendarEvent> denEvents = getDENEvents(ores.getResourceableId(), courseNode.getIdent());
    CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(calRes, new SyncerExecutor() {

        public void execute() {
            boolean error = false;
            // try to find choosen calendar event in the reloaded event list
            KalendarEvent reloadEvent = event;
            for (Iterator<KalendarEvent> iterator = denEvents.iterator(); iterator.hasNext(); ) {
                KalendarEvent kalendarEvent = iterator.next();
                if (event.getID().equals(kalendarEvent.getID())) {
                    reloadEvent = kalendarEvent;
                    break;
                } else if (!iterator.hasNext()) {
                    // cannot find reloaded calendar event
                    status.setEnrolled(false);
                    status.setErrorMessage(DENStatus.ERROR_GENERAL);
                    error = true;
                }
            }
            Collection<KalendarEvent> collEvents = cal.getEvents();
            // check if date is already full
            if (!error && !allowOverfill && isDateFull(reloadEvent)) {
                status.setEnrolled(false);
                status.setErrorMessage(DENStatus.ERROR_FULL);
                error = true;
            }
            // check if identity is already enrolled
            if (!error && isAlreadyEnrolled(identity, collEvents, courseNode)) {
                status.setEnrolled(false);
                status.setErrorMessage(DENStatus.ERROR_ALREADY_ENROLLED);
                error = true;
            }
            // enroll in event
            if (!error) {
                if (reloadEvent.getParticipants() != null && reloadEvent.getParticipants().length > 0) {
                    int currLength = reloadEvent.getParticipants().length;
                    // one to add
                    String[] partsNew = new String[currLength + 1];
                    String[] partsOld = reloadEvent.getParticipants();
                    for (int i = 0; i < partsOld.length; i++) {
                        partsNew[i] = partsOld[i];
                    }
                    partsNew[partsNew.length - 1] = identity.getName();
                    reloadEvent.setParticipants(partsNew);
                } else {
                    String[] partsNew = new String[] { identity.getName() };
                    reloadEvent.setParticipants(partsNew);
                }
                // save calendar event
                boolean successfullyDone = calManager.updateEventAlreadyInSync(cal, reloadEvent);
                if (!successfullyDone) {
                    status.setEnrolled(false);
                    status.setErrorMessage(DENStatus.ERROR_PERSISTING);
                }
                status.setEnrolled(true);
            }
        }
    });
    // success
    return status;
}
Also used : CalendarManager(org.olat.commons.calendar.CalendarManager) Kalendar(org.olat.commons.calendar.model.Kalendar) OLATResourceable(org.olat.core.id.OLATResourceable) Iterator(java.util.Iterator) KalendarEvent(org.olat.commons.calendar.model.KalendarEvent) Collection(java.util.Collection) ICourse(org.olat.course.ICourse) SyncerExecutor(org.olat.core.util.coordinate.SyncerExecutor)

Example 19 with CalendarManager

use of org.olat.commons.calendar.CalendarManager in project OpenOLAT by OpenOLAT.

the class DENManager method removeDateInUserCalendar.

/**
 * Removes this event in all calendars of enrolled users
 * @param oldEvent
 */
private void removeDateInUserCalendar(KalendarEvent oldEvent) {
    String[] participants = oldEvent.getParticipants();
    // no users to update, cancel
    if (participants == null)
        return;
    BaseSecurity manager = BaseSecurityManager.getInstance();
    CalendarManager calManager = CoreSpringFactory.getImpl(CalendarManager.class);
    for (String participant : participants) {
        Identity identity = manager.findIdentityByName(participant);
        if (identity != null) {
            Kalendar userCal = calManager.getPersonalCalendar(identity).getKalendar();
            List<KalendarEvent> userEvents = new ArrayList<>();
            userEvents.addAll(userCal.getEvents());
            for (KalendarEvent userEvent : userEvents) {
                String sourceNodeId = userEvent.getSourceNodeId();
                if (sourceNodeId != null && sourceNodeId.equals(oldEvent.getSourceNodeId())) {
                    calManager.removeEventFrom(userCal, userEvent);
                }
            }
        }
    }
}
Also used : CalendarManager(org.olat.commons.calendar.CalendarManager) Kalendar(org.olat.commons.calendar.model.Kalendar) ArrayList(java.util.ArrayList) KalendarEvent(org.olat.commons.calendar.model.KalendarEvent) Identity(org.olat.core.id.Identity) BaseSecurity(org.olat.basesecurity.BaseSecurity)

Example 20 with CalendarManager

use of org.olat.commons.calendar.CalendarManager in project OpenOLAT by OpenOLAT.

the class DENManager method cancelEnroll.

/**
 * Deletes the already enrolled user from the date
 * @param identity
 * @param event
 * @param course
 * @param userCourseEnv
 * @return status
 */
public DENStatus cancelEnroll(Identity identity, KalendarEvent event, OLATResourceable ores) {
    DENStatus status = new DENStatus();
    ICourse course = CourseFactory.loadCourse(ores);
    CalendarManager calManager = CoreSpringFactory.getImpl(CalendarManager.class);
    Kalendar cal = calManager.getCourseCalendar(course).getKalendar();
    // check if identity is enrolled
    if (!isEnrolledInDate(identity, event)) {
        status.setCancelled(false);
        status.setErrorMessage(DENStatus.ERROR_NOT_ENROLLED);
    }
    // cancel enroll in calendar entry
    if (event.getParticipants() != null) {
        int currLength = event.getParticipants().length;
        if (currLength > 0) {
            // more than one are enrolled
            // one to delete
            List<String> partsNew = new ArrayList<>(currLength);
            String[] partsOld = event.getParticipants();
            String identityName = identity.getName();
            for (String partOld : partsOld) {
                if (!partOld.equals(identityName)) {
                    partsNew.add(partOld);
                }
            }
            event.setParticipants(partsNew.toArray(new String[partsNew.size()]));
        }
        // save calendar event
        boolean successfullyDone = calManager.updateEventFrom(cal, event);
        if (!successfullyDone) {
            status.setCancelled(false);
            status.setErrorMessage(DENStatus.ERROR_PERSISTING);
            return status;
        }
    } else {
        // no one to cancel
        status.setCancelled(false);
        status.setErrorMessage(DENStatus.ERROR_GENERAL);
        return status;
    }
    status.setCancelled(true);
    // delete date from the users calendar
    Kalendar userCal = calManager.getPersonalCalendar(identity).getKalendar();
    Collection<KalendarEvent> userEvents = userCal.getEvents();
    String sourceNodeId = event.getSourceNodeId();
    for (KalendarEvent userEvent : userEvents) {
        String eventSourceNodeId = userEvent.getSourceNodeId();
        if (eventSourceNodeId != null && eventSourceNodeId.equals(sourceNodeId)) {
            calManager.removeEventFrom(userCal, userEvent);
            break;
        }
    }
    // success
    return status;
}
Also used : CalendarManager(org.olat.commons.calendar.CalendarManager) Kalendar(org.olat.commons.calendar.model.Kalendar) ArrayList(java.util.ArrayList) KalendarEvent(org.olat.commons.calendar.model.KalendarEvent) ICourse(org.olat.course.ICourse)

Aggregations

CalendarManager (org.olat.commons.calendar.CalendarManager)28 KalendarEvent (org.olat.commons.calendar.model.KalendarEvent)20 ArrayList (java.util.ArrayList)12 Kalendar (org.olat.commons.calendar.model.Kalendar)12 ICourse (org.olat.course.ICourse)12 KalendarRenderWrapper (org.olat.commons.calendar.ui.components.KalendarRenderWrapper)10 CalendarUserConfiguration (org.olat.commons.calendar.model.CalendarUserConfiguration)6 Identity (org.olat.core.id.Identity)6 Calendar (java.util.Calendar)4 Date (java.util.Date)4 BaseSecurity (org.olat.basesecurity.BaseSecurity)4 UserRequest (org.olat.core.gui.UserRequest)4 OLATResourceable (org.olat.core.id.OLATResourceable)4 CourseGroupManager (org.olat.course.groupsandrights.CourseGroupManager)4 BusinessGroup (org.olat.group.BusinessGroup)4 RestSecurityHelper.getUserRequest (org.olat.restapi.security.RestSecurityHelper.getUserRequest)4 IOException (java.io.IOException)2 URISyntaxException (java.net.URISyntaxException)2 Collection (java.util.Collection)2 Iterator (java.util.Iterator)2