Search in sources :

Example 56 with SubscriptionInfo

use of org.olat.core.commons.services.notifications.SubscriptionInfo in project openolat by klemens.

the class ForumNotificationsHandler method createSubscriptionInfo.

/**
 * @see org.olat.core.commons.services.notifications.NotificationsHandler#createSubscriptionInfo(org.olat.core.commons.services.notifications.Subscriber,
 *      java.util.Locale, java.util.Date)
 */
@Override
public SubscriptionInfo createSubscriptionInfo(final Subscriber subscriber, Locale locale, Date compareDate) {
    try {
        Publisher p = subscriber.getPublisher();
        Date latestNews = p.getLatestNewsDate();
        SubscriptionInfo si;
        // there could be news for me, investigate deeper
        if (NotificationsManager.getInstance().isPublisherValid(p) && compareDate.before(latestNews)) {
            String businessControlString = "";
            Long forumKey = Long.valueOf(0);
            try {
                forumKey = Long.parseLong(p.getData());
            } catch (NumberFormatException e) {
                logError("Could not parse forum key!", e);
                NotificationsManager.getInstance().deactivate(p);
                return NotificationsManager.getInstance().getNoSubscriptionInfo();
            }
            if ("CourseModule".equals(p.getResName())) {
                RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(OresHelper.createOLATResourceableInstance(p.getResName(), p.getResId()), false);
                if (re.getRepositoryEntryStatus().isClosed() || re.getRepositoryEntryStatus().isUnpublished()) {
                    return NotificationsManager.getInstance().getNoSubscriptionInfo();
                }
            }
            final List<Message> mInfos = ForumManager.getInstance().getNewMessageInfo(forumKey, compareDate);
            final Translator translator = Util.createPackageTranslator(ForumNotificationsHandler.class, locale);
            businessControlString = p.getBusinessPath() + "[Message:";
            si = new SubscriptionInfo(subscriber.getKey(), p.getType(), getTitleItem(p, translator), null);
            for (Message mInfo : mInfos) {
                String title = mInfo.getTitle();
                Identity creator = mInfo.getCreator();
                Identity modifier = mInfo.getModifier();
                Date modDate = mInfo.getLastModified();
                String name;
                if (modifier != null) {
                    if (modifier.equals(creator) && StringHelper.containsNonWhitespace(mInfo.getPseudonym())) {
                        name = mInfo.getPseudonym();
                    } else {
                        name = NotificationHelper.getFormatedName(modifier);
                    }
                } else if (StringHelper.containsNonWhitespace(mInfo.getPseudonym())) {
                    name = mInfo.getPseudonym();
                } else if (mInfo.isGuest()) {
                    name = translator.translate("anonymous.poster");
                } else {
                    name = NotificationHelper.getFormatedName(creator);
                }
                final String descKey = "notifications.entry" + (mInfo.getCreationDate().equals(mInfo.getLastModified()) ? "" : ".modified");
                final String desc = translator.translate(descKey, new String[] { title, name });
                String urlToSend = null;
                String businessPath = null;
                if (p.getBusinessPath() != null) {
                    businessPath = businessControlString + mInfo.getKey().toString() + "]";
                    urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath);
                }
                SubscriptionListItem subListItem = new SubscriptionListItem(desc, urlToSend, businessPath, modDate, ForumHelper.CSS_ICON_CLASS_MESSAGE);
                si.addSubscriptionListItem(subListItem);
            }
        } else {
            si = NotificationsManager.getInstance().getNoSubscriptionInfo();
        }
        return si;
    } catch (Exception e) {
        log.error("Error while creating forum's notifications from publisher with key:" + subscriber.getKey(), e);
        checkPublisher(subscriber.getPublisher());
        return NotificationsManager.getInstance().getNoSubscriptionInfo();
    }
}
Also used : SubscriptionInfo(org.olat.core.commons.services.notifications.SubscriptionInfo) Publisher(org.olat.core.commons.services.notifications.Publisher) RepositoryEntry(org.olat.repository.RepositoryEntry) Date(java.util.Date) SubscriptionListItem(org.olat.core.commons.services.notifications.model.SubscriptionListItem) Translator(org.olat.core.gui.translator.Translator) Identity(org.olat.core.id.Identity)

Aggregations

SubscriptionInfo (org.olat.core.commons.services.notifications.SubscriptionInfo)56 Publisher (org.olat.core.commons.services.notifications.Publisher)44 SubscriptionListItem (org.olat.core.commons.services.notifications.model.SubscriptionListItem)38 Date (java.util.Date)36 Translator (org.olat.core.gui.translator.Translator)30 TitleItem (org.olat.core.commons.services.notifications.model.TitleItem)28 Identity (org.olat.core.id.Identity)24 RepositoryEntry (org.olat.repository.RepositoryEntry)18 ArrayList (java.util.ArrayList)10 Subscriber (org.olat.core.commons.services.notifications.Subscriber)10 OLATResourceable (org.olat.core.id.OLATResourceable)10 ICourse (org.olat.course.ICourse)10 NotificationsHandler (org.olat.core.commons.services.notifications.NotificationsHandler)8 Locale (java.util.Locale)6 FileInfo (org.olat.core.commons.modules.bc.FileInfo)6 MetaInfo (org.olat.core.commons.modules.bc.meta.MetaInfo)6 NotificationsManager (org.olat.core.commons.services.notifications.NotificationsManager)6 SubscriptionItem (org.olat.core.commons.services.notifications.SubscriptionItem)6 NoSubscriptionInfo (org.olat.core.commons.services.notifications.model.NoSubscriptionInfo)6 AssertException (org.olat.core.logging.AssertException)6