Пример #1
0
  private void syncSiteMembershipsOnceThenSchedule(
      Map payload, Site site, boolean isTrustedConsumer, boolean isEmailTrustedConsumer)
      throws LTIException {

    if (isTrustedConsumer) return;

    M_log.debug("synchSiteMembershipsOnceThenSchedule");

    if (!ServerConfigurationService.getBoolean(SakaiBLTIUtil.INCOMING_ROSTER_ENABLED, false)) {
      M_log.info("LTI Memberships synchronization disabled.");
      return;
    }

    final String membershipsUrl = (String) payload.get("ext_ims_lis_memberships_url");

    if (!BasicLTIUtil.isNotBlank(membershipsUrl)) {
      M_log.info("LTI Memberships extension is not supported.");
      return;
    }

    if (M_log.isDebugEnabled()) M_log.debug("Memberships URL: " + membershipsUrl);

    final String membershipsId = (String) payload.get("ext_ims_lis_memberships_id");

    if (!BasicLTIUtil.isNotBlank(membershipsId)) {
      M_log.info("No memberships id supplied. Memberships will NOT be synchronized.");
      return;
    }

    final String siteId = site.getId();

    // If this site has already been scheduled, then we do nothing.
    if (ltiService.getMembershipsJob(siteId) != null) {
      if (M_log.isDebugEnabled()) {
        M_log.debug(
            "Site '" + siteId + "' already scheduled for memberships sync. Doing nothing ...");
      }
      return;
    }

    final String oauth_consumer_key = (String) payload.get(OAuth.OAUTH_CONSUMER_KEY);

    // This is non standard. Moodle's core LTI plugin does not currently do memberships and
    // a fix for this has been proposed at https://tracker.moodle.org/browse/MDL-41724. I don't
    // think this will ever become core and the first time memberships will appear in core lti
    // is with LTI2. At that point this code will be replaced with standard LTI2 JSON type stuff.

    String lms = (String) payload.get("ext_lms");
    final String callbackType =
        (BasicLTIUtil.isNotBlank(lms) && lms.equals("moodle-2"))
            ? "ext-moodle-2"
            : (String) payload.get(BasicLTIConstants.LTI_VERSION);

    (new Thread(
            new Runnable() {

              public void run() {

                long then = 0L;

                if (M_log.isDebugEnabled()) {
                  M_log.debug("Starting memberships sync.");
                  then = (new Date()).getTime();
                }

                siteMembershipsSynchroniser.synchroniseSiteMemberships(
                    siteId,
                    membershipsId,
                    membershipsUrl,
                    oauth_consumer_key,
                    isEmailTrustedConsumer,
                    callbackType);

                if (M_log.isDebugEnabled()) {
                  long now = (new Date()).getTime();
                  M_log.debug(
                      "Memberships sync finished. It took " + ((now - then) / 1000) + " seconds.");
                }
              }
            },
            "org.sakaiproject.blti.ProviderServlet.MembershipsSync"))
        .start();

    ltiService.insertMembershipsJob(
        siteId, membershipsId, membershipsUrl, oauth_consumer_key, callbackType);
  }