[LON-CAPA-cvs] cvs: loncom /lti ltiutils.pm
raeburn
raeburn at source.lon-capa.org
Wed May 30 13:22:30 EDT 2018
raeburn Wed May 30 17:22:30 2018 EDT
Modified files:
/loncom/lti ltiutils.pm
Log:
- Bug 6754 LON-CAPA as LTI Provider
- Add documentation.
- Seed rand() in create_passwd routine.
Index: loncom/lti/ltiutils.pm
diff -u loncom/lti/ltiutils.pm:1.11 loncom/lti/ltiutils.pm:1.12
--- loncom/lti/ltiutils.pm:1.11 Mon May 28 23:26:04 2018
+++ loncom/lti/ltiutils.pm Wed May 30 17:22:30 2018
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Utility functions for managing LON-CAPA LTI interactions
#
-# $Id: ltiutils.pm,v 1.11 2018/05/28 23:26:04 raeburn Exp $
+# $Id: ltiutils.pm,v 1.12 2018/05/30 17:22:30 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -38,6 +38,7 @@
use Apache::lonuserutils;
use Apache::lonenc();
use Apache::longroup();
+use Apache::lonlocal;
use Math::Round();
use LONCAPA qw(:DEFAULT :match);
@@ -573,6 +574,13 @@
}
}
+#
+# LON-CAPA as LTI Provider
+#
+# Obtain a list of course personnel and students from
+# the LTI Consumer which launched this instance.
+#
+
sub get_roster {
my ($id,$url,$ckey,$secret) = @_;
my %ltiparams = (
@@ -631,6 +639,13 @@
return;
}
+#
+# LON-CAPA as LTI Provider
+#
+# Passback a grade for a user to the LTI Consumer which originally
+# provided the lis_result_sourcedid
+#
+
sub send_grade {
my ($id,$url,$ckey,$secret,$scoretype,$total,$possible) = @_;
my $score;
@@ -671,6 +686,16 @@
}
}
+#
+# LON-CAPA as LTI Provider
+#
+# Create a new user in LON-CAPA. If the domain's configuration
+# includes rules for format of "official" usernames, those rules
+# will apply when determining if a user is to be created. In
+# additional if institutional user information is available that
+# will be used when creating a new user account.
+#
+
sub create_user {
my ($ltiref,$uname,$udom,$domdesc,$data,$alerts,$rulematch,$inst_results,
$curr_rules,$got_rules) = @_;
@@ -768,8 +793,17 @@
return $result;
}
+#
+# LON-CAPA as LTI Provider
+#
+# Create a password for a new user if the authentication
+# type to assign to new users created following LTI launch is
+# to be LON-CAPA "internal".
+#
+
sub create_passwd {
my $passwd = '';
+ srand( time() ^ ($$ + ($$ << 15)) ); # Seed rand.
my @letts = ("a".."z");
for (my $i=0; $i<8; $i++) {
my $lettnum = int(rand(2));
@@ -788,8 +822,20 @@
return ($passwd);
}
+#
+# LON-CAPA as LTI Provider
+#
+# Enroll a user in a LON-CAPA course, with the specified role and (optional)
+# section. If this is a self-enroll case, i.e., a user launched the LTI tool
+# in the Consumer, user privs will be added to the user's environment for
+# the new role.
+#
+# If this is a self-enroll case, a Course Coordinator role will only be assigned
+# if the current user is also the course owner.
+#
+
sub enrolluser {
- my ($udom,$uname,$role,$cdom,$cnum,$sec,$start,$end) = @_;
+ my ($udom,$uname,$role,$cdom,$cnum,$sec,$start,$end,$selfenroll) = @_;
my $enrollresult;
my $area = "/$cdom/$cnum";
if (($role ne 'cc') && ($role ne 'co') && ($sec ne '')) {
@@ -801,16 +847,68 @@
$enrollresult =
&Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,
undef,undef,$sec,$end,$start,
- 'ltienroll',undef,$cdom.'_'.$cnum,undef,
- 'ltienroll','',$instcid);
+ 'ltienroll',undef,$cdom.'_'.$cnum,
+ $selfenroll,'ltienroll','',$instcid);
} elsif ($role =~ /^(cc|in|ta|ep)$/) {
$enrollresult =
&Apache::lonnet::assignrole($udom,$uname,$area,$role,$end,$start,
- undef,undef,'ltienroll');
+ undef,$selfenroll,'ltienroll');
+ }
+ if ($enrollresult eq 'ok') {
+ if ($selfenroll) {
+ my (%userroles,%newrole,%newgroups);
+ &Apache::lonnet::standard_roleprivs(\%newrole,$role,$cdom,$spec,$cnum,
+ $area);
+ &Apache::lonnet::set_userprivs(\%userroles,\%newrole,\%newgroups);
+ $userroles{'user.role.'.$spec} = $start.'.'.$end;
+ &Apache::lonnet::appenv(\%userroles,[$role,'cm']);
+ }
}
return $enrollresult;
}
+#
+# LON-CAPA as LTI Provider
+#
+# Batch addition of users following LTI launch by a user
+# with LTI Instructor status.
+#
+# A list of users is obtained by a call to get_roster()
+# if the calling Consumer support the LTI extension:
+# Context Memberships Service.
+#
+# If a user included in the retrieved list does not currently
+# have a user account in LON-CAPA, an account will be created.
+#
+# If a user already has an account, and the same role and
+# section assigned (currently active), then no change will
+# be made for that user.
+#
+# Information available for new users (besides username and)
+# role) may include: first name, last name, full name (from
+# which middle name will be extracted), permanent e-mail address,
+# and lis_result_sourcedid (for passback of grades).
+#
+# If grades are to be passed back, the passback url will be
+# the same as for the current user's session.
+#
+# The roles which may be assigned will be determined from the
+# LTI roles included in the retrieved roster, and the mapping
+# of LTI roles to LON-CAPA roles configured for this LTI Consumer
+# in the domain configuration.
+#
+# Course Coordinator roles will only be assigned if the current
+# user is also the course owner.
+#
+# The domain configuration for the corresponding Consumer can include
+# a section to assign to LTI users. If the roster includes students
+# any existing student roles with a different section will be expired,
+# and a role in the LTI section will be assigned.
+#
+# For non-student rules (excluding Course Coordinator) a role will be
+# assigned with the LTI section )or no section, if one is not rquired.
+#
+
sub batchaddroster {
my ($item) = @_;
return unless(ref($item) eq 'HASH');
@@ -1015,6 +1113,27 @@
return;
}
+#
+# LON-CAPA as LTI Provider
+#
+# Gather a list of available LON-CAPA roles derived
+# from a comma separated list of LTI roles.
+#
+# Which LON-CAPA roles are assignable by the current user
+# and how LTI roles map to LON-CAPA roles (as defined in
+# the domain configuration for the specific Consumer) are
+# factored in when compiling the list of available roles.
+#
+# Inputs: 3
+# $rolestr - comma separated list of LTI roles.
+# $allowedroles - reference to array of assignable LC roles
+# $maproles - ref to HASH of mapping of LTI roles to LC roles
+#
+# Outputs: 2
+# (a) reference to array of available LC roles.
+# (b) reference to array of LTI roles.
+#
+
sub get_lc_roles {
my ($rolestr,$allowedroles,$maproles) = @_;
my (@ltiroles, at lcroles);
@@ -1055,6 +1174,15 @@
return (\@lcroles,\@ltiroles);
}
+#
+# LON-CAPA as LTI Provider
+#
+# Compares current start and dates for a user's role
+# with dates to apply for the same user/role to
+# determine if there is a change between the current
+# ones and the updated ones.
+#
+
sub datechange_check {
my ($oldstart,$oldend,$startdate,$enddate) = @_;
my $datechange = 0;
@@ -1073,6 +1201,13 @@
return $datechange;
}
+#
+# LON-CAPA as LTI Provider
+#
+# Store the URL used by a specific LTI Consumer to process grades passed back
+# by an LTI Provider.
+#
+
sub store_passbackurl {
my ($ltinum,$pburl,$cdom,$cnum) = @_;
my %history = &Apache::lonnet::restore($ltinum,'passbackurl',$cdom,$cnum);
More information about the LON-CAPA-cvs
mailing list