/**
   * Implementation of command pattern. Will be called by ScheduledInvocationManager for delayed
   * announcement notifications
   *
   * @param opaqueContext reference (context) for message
   */
  public void execute(String opaqueContext) {
    // get the message
    final Reference ref = entityManager.newReference(opaqueContext);

    // needed to access the message
    enableSecurityAdvisorToGetAnnouncement();

    final AnnouncementMessage msg = (AnnouncementMessage) ref.getEntity();
    final AnnouncementMessageHeader hdr = (AnnouncementMessageHeader) msg.getAnnouncementHeader();

    // read the notification options
    final String notification = msg.getProperties().getProperty("notificationLevel");

    int noti = NotificationService.NOTI_OPTIONAL;
    if ("r".equals(notification)) {
      noti = NotificationService.NOTI_REQUIRED;
    } else if ("n".equals(notification)) {
      noti = NotificationService.NOTI_NONE;
    }

    final Event delayedNotificationEvent =
        eventTrackingService.newEvent("annc.schInv.notify", msg.getReference(), true, noti);
    //		eventTrackingService.post(event);

    NotificationEdit notify = notificationService.addTransientNotification();

    super.notify(notify, delayedNotificationEvent);

    // since we build the notification by accessing the
    // message within the super class, can't remove the
    // SecurityAdvisor until this point
    // done with access, need to remove from stack
    disableSecurityAdvisor();
  }
Пример #2
0
  @WebMethod
  @Path("/getSubmissionsForAssignment")
  @Produces("text/plain")
  @GET
  public String getSubmissionsForAssignment(
      @WebParam(name = "sessionId", partName = "sessionId") @QueryParam("sessionId")
          String sessionId,
      @WebParam(name = "assignmentId", partName = "assignmentId") @QueryParam("assignmentId")
          String assignmentId) {
    try {

      Session s = establishSession(sessionId);
      Assignment assign = assignmentService.getAssignment(assignmentId);
      List subs = assignmentService.getSubmissions(assign);

      // build the xml
      LOG.debug("about to start building xml doc");
      Document dom = Xml.createDocument();
      Node all = dom.createElement("submissions");
      dom.appendChild(all);

      for (int i = 0; i < subs.size(); i++) {

        AssignmentSubmission thisSub = (AssignmentSubmission) subs.get(i);
        LOG.debug("got submission" + thisSub);
        Element uElement = dom.createElement("submission");
        uElement.setAttribute("feedback-comment", thisSub.getFeedbackComment());
        uElement.setAttribute("feedback-text", thisSub.getFeedbackText());
        uElement.setAttribute("grade", thisSub.getGrade());
        uElement.setAttribute("status", thisSub.getStatus());
        uElement.setAttribute("submitted-text", thisSub.getSubmittedText());
        List submitters = thisSub.getSubmitterIds();
        for (int q = 0; q < submitters.size(); q++) {
          uElement.setAttribute("submitter-id", (String) submitters.get(q));
        }

        List submissions = thisSub.getSubmittedAttachments();
        // Element attachments = dom.createElement("attachment");
        for (int q = 0; q < submissions.size(); q++) {
          // Element attachments = dom.createElement("attachment");
          Reference ref = (Reference) submissions.get(q);
          Entity ent = ref.getEntity();
          uElement.setAttribute("attachment-url", ent.getUrl());
          // all.appendChild();
        }

        all.appendChild(uElement);
      }
      String retVal = Xml.writeDocumentToString(dom);
      return retVal;
    } catch (Exception e) {
      LOG.error(
          "WS getSubmissionsForAssignment(): " + e.getClass().getName() + " : " + e.getMessage());
    }

    return "<submissions />";
  }
  @Override
  protected String plainTextContent(Event event) {
    StringBuilder buf = new StringBuilder();
    String newline = "\n\r";

    // get the message
    Reference ref = entityManager.newReference(event.getResource());
    AnnouncementMessage msg = (AnnouncementMessage) ref.getEntity();
    AnnouncementMessageHeader hdr = (AnnouncementMessageHeader) msg.getAnnouncementHeader();

    // use either the configured site, or if not configured, the site (context) of the resource
    String siteId = (getSite() != null) ? getSite() : ref.getContext();

    String url = ServerConfigurationService.getPortalUrl() + "/site/" + siteId;

    // get a site title
    String title = siteId;
    try {
      Site site = siteService.getSite(siteId);
      title = site.getTitle();
    } catch (Exception ignore) {

    }

    // Now build up the message text.
    if (AnnouncementService.SECURE_ANNC_ADD.equals(event.getEvent())) {
      buf.append(
          FormattedText.convertFormattedTextToPlaintext(
              rb.getFormattedMessage("noti.header.add", new Object[] {title, url})));

    } else {
      buf.append(
          FormattedText.convertFormattedTextToPlaintext(
              rb.getFormattedMessage("noti.header.update", new Object[] {title, url})));
    }

    buf.append(" " + rb.getString("at_date") + " ");
    buf.append(hdr.getDate().toStringLocalFull());
    buf.append(newline);
    buf.append(FormattedText.convertFormattedTextToPlaintext(msg.getBody()));
    buf.append(newline);

    // add any attachments
    List attachments = hdr.getAttachments();
    if (attachments.size() > 0) {
      buf.append(newline + rb.getString("Attachments") + newline);
      for (Iterator iAttachments = attachments.iterator(); iAttachments.hasNext(); ) {
        Reference attachment = (Reference) iAttachments.next();
        String attachmentTitle =
            attachment.getProperties().getPropertyFormatted(ResourceProperties.PROP_DISPLAY_NAME);
        buf.append(attachmentTitle + ": " + attachment.getUrl() + newline);
      }
    }

    return buf.toString();
  }
  /**
   * Format the announcement notification from address.
   *
   * @param event The event that matched criteria to cause the notification.
   * @return the announcement notification from address.
   */
  protected String getFromAddress(Event event) {
    Reference ref = EntityManager.newReference(event.getResource());

    // SAK-14831, yorkadam, make site title reflected in 'From:' name instead of default
    // ServerConfigurationService.getString("ui.service", "Sakai");
    String siteId = (getSite() != null) ? getSite() : ref.getContext();
    String title = "";
    try {
      Site site = SiteService.getSite(siteId);
      title = site.getTitle();
    } catch (Exception ignore) {
    }

    String userEmail = "no-reply@" + ServerConfigurationService.getServerName();
    String userDisplay = ServerConfigurationService.getString("ui.service", "Sakai");
    // String no_reply = "From: \"" + userDisplay + "\" <" + userEmail + ">";
    // String no_reply_withTitle = "From: \"" + title + "\" <" + userEmail + ">";
    String from = "From: Sakai"; // fallback value
    if (title != null && !title.equals("")) {
      from = "From: \"" + title + "\" <" + userEmail + ">";
    } else {
      String fromVal = getFrom(event); // should not return null but better safe than sorry
      if (fromVal != null) {
        from = fromVal;
      }
    }

    // get the message
    AnnouncementMessage msg = (AnnouncementMessage) ref.getEntity();
    String userId = msg.getAnnouncementHeader().getFrom().getDisplayId();

    // checks if "from" email id has to be included? and whether the notification is a delayed
    // notification?. SAK-13512
    // SAK-20988 - emailFromReplyable@org.sakaiproject.event.api.NotificationService is deprecated
    boolean notificationEmailFromReplyable =
        ServerConfigurationService.getBoolean("notify.email.from.replyable", false);
    if (notificationEmailFromReplyable && from.contains("no-reply@") && userId != null) {
      try {
        User u = UserDirectoryService.getUser(userId);
        userDisplay = u.getDisplayName();
        userEmail = u.getEmail();
        if ((userEmail != null) && (userEmail.trim().length()) == 0) userEmail = null;

      } catch (UserNotDefinedException e) {
      }

      // some fallback positions
      if (userEmail == null) userEmail = "no-reply@" + ServerConfigurationService.getServerName();
      if (userDisplay == null)
        userDisplay = ServerConfigurationService.getString("ui.service", "Sakai");
      from = "From: \"" + userDisplay + "\" <" + userEmail + ">";
    }

    return from;
  }
  /** @inheritDoc */
  protected String htmlContent(Event event) {
    StringBuilder buf = new StringBuilder();
    String newline = "<br />\n";

    // get the message
    Reference ref = EntityManager.newReference(event.getResource());
    AnnouncementMessage msg = (AnnouncementMessage) ref.getEntity();
    AnnouncementMessageHeader hdr = (AnnouncementMessageHeader) msg.getAnnouncementHeader();

    // use either the configured site, or if not configured, the site (context) of the resource
    String siteId = (getSite() != null) ? getSite() : ref.getContext();

    // get a site title
    String title = siteId;
    String url = ServerConfigurationService.getPortalUrl() + "/site/" + siteId;
    try {
      Site site = SiteService.getSite(siteId);
      title = site.getTitle();
      url = site.getUrl(); // Might have a better URL.
    } catch (Exception ignore) {
      M_log.warn("Failed to load site: " + siteId + " for: " + event.getResource());
    }

    // Now build up the message text.
    if (AnnouncementService.SECURE_ANNC_ADD.equals(event.getEvent())) {
      buf.append(rb.getFormattedMessage("noti.header.add", new Object[] {title, url}));
    } else {
      buf.append(rb.getFormattedMessage("noti.header.update", new Object[] {title, url}));
    }
    buf.append(" " + rb.getString("at_date") + " ");
    buf.append(hdr.getDate().toStringLocalFull());
    buf.append(newline);

    // add any attachments
    List<Reference> attachments = hdr.getAttachments();
    if (attachments.size() > 0) {
      buf.append(newline + rb.getString("Attachments") + newline);
      for (Iterator<Reference> iAttachments = attachments.iterator(); iAttachments.hasNext(); ) {
        Reference attachment = (Reference) iAttachments.next();
        String attachmentTitle =
            attachment.getProperties().getPropertyFormatted(ResourceProperties.PROP_DISPLAY_NAME);
        buf.append("<a href=\"" + attachment.getUrl() + "\">");
        buf.append(attachmentTitle);
        buf.append("</a>" + newline);
      }
    }

    return buf.toString();
  }
  /** @inheritDoc */
  public void notify(Notification notification, Event event) {
    // get the message
    Reference ref = EntityManager.newReference(event.getResource());
    AnnouncementMessageEdit msg = (AnnouncementMessageEdit) ref.getEntity();
    AnnouncementMessageHeader hdr = (AnnouncementMessageHeader) msg.getAnnouncementHeader();

    // do not do notification for hidden (draft) messages
    if (hdr.getDraft()) return;

    // Put here since if release date after now, do not notify
    // since scheduled notification has been set.
    Time now = TimeService.newTime();

    if (now.after(hdr.getDate())) {
      super.notify(notification, event);
    }
  }
Пример #7
0
  public ContentResource wrap(final ContentResource content) {
    if (!isFiltered(content)) {
      return content;
    }
    Reference contentRef = entityManager.newReference(content.getReference());
    Reference siteRef = entityManager.newReference(contentRef.getContext());
    Entity entity = siteRef.getEntity();

    String addHtml = content.getProperties().getProperty(ResourceProperties.PROP_ADD_HTML);

    String skinRepo = getSkinRepo();
    String siteSkin = getSiteSkin(entity);

    final boolean detectHtml = addHtml == null || addHtml.equals("auto");
    String title = getTitle(content);
    final String header = MessageFormat.format(headerTemplate, skinRepo, siteSkin, title);
    final String footer = footerTemplate;

    return new WrappedContentResource(content, header, footer, detectHtml);
  }
  /**
   * Format the announcement notification subject line.
   *
   * @param event The event that matched criteria to cause the notification.
   * @return the announcement notification subject line.
   */
  protected String getSubject(Event event) {
    // get the message
    Reference ref = EntityManager.newReference(event.getResource());
    AnnouncementMessage msg = (AnnouncementMessage) ref.getEntity();
    AnnouncementMessageHeader hdr = (AnnouncementMessageHeader) msg.getAnnouncementHeader();

    // use either the configured site, or if not configured, the site (context) of the resource
    String siteId = (getSite() != null) ? getSite() : ref.getContext();

    // get a site title
    String title = siteId;
    try {
      Site site = SiteService.getSite(siteId);
      title = site.getTitle();
    } catch (Exception ignore) {
    }

    // use the message's subject
    return rb.getFormattedMessage("noti.subj", new Object[] {title, hdr.getSubject()});
  }