version 1.1297, 2015/12/10 16:26:56
|
version 1.1300, 2016/01/31 21:25:57
|
Line 1551 sub homeserver {
|
Line 1551 sub homeserver {
|
return 'no_host'; |
return 'no_host'; |
} |
} |
|
|
# ------------------------------------- Find the usernames behind a list of IDs |
# ----- Find the usernames behind a list of student/employee IDs or clicker IDs |
|
|
sub idget { |
sub idget { |
my ($udom,@ids)=@_; |
my ($udom,$idsref,$namespace)=@_; |
my %returnhash=(); |
my %returnhash=(); |
|
my @ids=(); |
|
if (ref($idsref) eq 'ARRAY') { |
|
@ids = @{$idsref}; |
|
} else { |
|
return %returnhash; |
|
} |
|
if ($namespace eq '') { |
|
$namespace = 'ids'; |
|
} |
|
|
my %servers = &get_servers($udom,'library'); |
my %servers = &get_servers($udom,'library'); |
foreach my $tryserver (keys(%servers)) { |
foreach my $tryserver (keys(%servers)) { |
my $idlist=join('&',@ids); |
my $idlist=join('&', map { &escape($_); } @ids); |
$idlist=~tr/A-Z/a-z/; |
if ($namespace eq 'ids') { |
my $reply=&reply("idget:$udom:".$idlist,$tryserver); |
$idlist=~tr/A-Z/a-z/; |
|
} |
|
my $reply; |
|
if ($namespace eq 'ids') { |
|
$reply=&reply("idget:$udom:".$idlist,$tryserver); |
|
} else { |
|
$reply=&reply("getdom:$udom:$namespace:$idlist",$tryserver); |
|
} |
my @answer=(); |
my @answer=(); |
if (($reply ne 'con_lost') && ($reply!~/^error\:/)) { |
if (($reply ne 'con_lost') && ($reply!~/^error\:/)) { |
@answer=split(/\&/,$reply); |
@answer=split(/\&/,$reply); |
Line 1569 sub idget {
|
Line 1585 sub idget {
|
my $i; |
my $i; |
for ($i=0;$i<=$#ids;$i++) { |
for ($i=0;$i<=$#ids;$i++) { |
if ($answer[$i]) { |
if ($answer[$i]) { |
$returnhash{$ids[$i]}=$answer[$i]; |
$returnhash{$ids[$i]}=&unescape($answer[$i]); |
} |
} |
} |
} |
} |
} |
return %returnhash; |
return %returnhash; |
} |
} |
|
|
Line 1587 sub idrget {
|
Line 1603 sub idrget {
|
return %returnhash; |
return %returnhash; |
} |
} |
|
|
# ------------------------------- Store away a list of names and associated IDs |
# Store away a list of names and associated student/employee IDs or clicker IDs |
|
|
sub idput { |
sub idput { |
my ($udom,%ids)=@_; |
my ($udom,$idsref,$uhom,$namespace)=@_; |
my %servers=(); |
my %servers=(); |
|
my %ids=(); |
|
my %byid = (); |
|
if (ref($idsref) eq 'HASH') { |
|
%ids=%{$idsref}; |
|
} |
|
if ($namespace eq '') { |
|
$namespace = 'ids'; |
|
} |
foreach my $uname (keys(%ids)) { |
foreach my $uname (keys(%ids)) { |
&cput('environment',{'id'=>$ids{$uname}},$udom,$uname); |
&cput('environment',{'id'=>$ids{$uname}},$udom,$uname); |
my $uhom=&homeserver($uname,$udom); |
if ($uhom eq '') { |
|
$uhom=&homeserver($uname,$udom); |
|
} |
if ($uhom ne 'no_host') { |
if ($uhom ne 'no_host') { |
my $id=&escape($ids{$uname}); |
|
$id=~tr/A-Z/a-z/; |
|
my $esc_unam=&escape($uname); |
my $esc_unam=&escape($uname); |
if ($servers{$uhom}) { |
if ($namespace eq 'ids') { |
$servers{$uhom}.='&'.$id.'='.$esc_unam; |
my $id=&escape($ids{$uname}); |
|
$id=~tr/A-Z/a-z/; |
|
my $esc_unam=&escape($uname); |
|
$servers{$uhom}.=$id.'='.$esc_unam.'&'; |
} else { |
} else { |
$servers{$uhom}=$id.'='.$esc_unam; |
my @currids = split(/,/,$ids{$uname}); |
|
foreach my $id (@currids) { |
|
$byid{$uhom}{$id} .= $uname.','; |
|
} |
|
} |
|
} |
|
} |
|
if ($namespace eq 'clickers') { |
|
foreach my $server (keys(%byid)) { |
|
if (ref($byid{$server}) eq 'HASH') { |
|
foreach my $id (keys(%{$byid{$server}})) { |
|
$byid{$server} =~ s/,$//; |
|
$servers{$uhom}.=&escape($id).'='.&escape($byid{$server}).'&'; |
|
} |
} |
} |
} |
} |
} |
} |
foreach my $server (keys(%servers)) { |
foreach my $server (keys(%servers)) { |
&critical('idput:'.$udom.':'.$servers{$server},$server); |
$servers{$server} =~ s/\&$//; |
|
if ($namespace eq 'ids') { |
|
&critical('idput:'.$udom.':'.$servers{$server},$server); |
|
} else { |
|
&critical('updateclickers:'.$udom.':add:'.$servers{$server},$server); |
|
} |
} |
} |
} |
} |
|
|
# ---------------------------------------- Delete unwanted IDs from ids.db file |
# ------------- Delete unwanted student/employee IDs or clicker IDs from domain |
|
|
sub iddel { |
sub iddel { |
my ($udom,$idshashref,$uhome)=@_; |
my ($udom,$idshashref,$uhome,$namespace)=@_; |
my %result=(); |
my %result=(); |
unless (ref($idshashref) eq 'HASH') { |
my %ids=(); |
|
my %byid = (); |
|
if (ref($idshashref) eq 'HASH') { |
|
%ids=%{$idshashref}; |
|
} else { |
return %result; |
return %result; |
} |
} |
|
if ($namespace eq '') { |
|
$namespace = 'ids'; |
|
} |
my %servers=(); |
my %servers=(); |
while (my ($id,$uname) = each(%{$idshashref})) { |
while (my ($id,$unamestr) = each(%ids)) { |
my $uhom; |
if ($namespace eq 'ids') { |
if ($uhome) { |
my $uhom = $uhome; |
$uhom = $uhome; |
if ($uhom eq '') { |
} else { |
$uhom=&homeserver($unamestr,$udom); |
$uhom=&homeserver($uname,$udom); |
} |
} |
if ($uhom ne 'no_host') { |
if ($uhom ne 'no_host') { |
|
if ($servers{$uhom}) { |
|
$servers{$uhom}.='&'.&escape($id); |
$servers{$uhom}.='&'.&escape($id); |
} else { |
} |
$servers{$uhom}=&escape($id); |
} else { |
|
my @curritems = split(/,/,$ids{$id}); |
|
foreach my $uname (@curritems) { |
|
my $uhom = $uhome; |
|
if ($uhom eq '') { |
|
$uhom=&homeserver($uname,$udom); |
|
} |
|
if ($uhom ne 'no_host') { |
|
$byid{$uhom}{$id} .= $uname.','; |
|
} |
|
} |
|
} |
|
} |
|
if ($namespace eq 'clickers') { |
|
foreach my $server (keys(%byid)) { |
|
if (ref($byid{$server}) eq 'HASH') { |
|
foreach my $id (keys(%{$byid{$server}})) { |
|
$byid{$server}{$id} =~ s/,$//; |
|
$servers{$server}.=&escape($id).'='.&escape($byid{$server}{$id}).'&'; |
|
} |
} |
} |
} |
} |
} |
} |
foreach my $server (keys(%servers)) { |
foreach my $server (keys(%servers)) { |
$result{$server} = &critical('iddel:'.$udom.':'.$servers{$server},$uhome); |
$servers{$server} =~ s/\&$//; |
|
if ($namespace eq 'ids') { |
|
$result{$server} = &critical('iddel:'.$udom.':'.$servers{$server},$uhome); |
|
} elsif ($namespace eq 'clickers') { |
|
$result{$server} = &critical('updateclickers:'.$udom.':del:'.$servers{$server},$server); |
|
} |
} |
} |
return %result; |
return %result; |
} |
} |
|
|
|
# ----- Update clicker ID-to-username look-ups in clickers.db on library server |
|
|
|
sub updateclickers { |
|
my ($udom,$action,$idshashref,$uhome,$critical) = @_; |
|
my %clickers; |
|
if (ref($idshashref) eq 'HASH') { |
|
%clickers=%{$idshashref}; |
|
} else { |
|
return; |
|
} |
|
my $items=''; |
|
foreach my $item (keys(%clickers)) { |
|
$items.=&escape($item).'='.&escape($clickers{$item}).'&'; |
|
} |
|
$items=~s/\&$//; |
|
my $request = "updateclickers:$udom:$action:$items"; |
|
if ($critical) { |
|
return &critical($request,$uhome); |
|
} else { |
|
return &reply($request,$uhome); |
|
} |
|
} |
|
|
# ------------------------------dump from db file owned by domainconfig user |
# ------------------------------dump from db file owned by domainconfig user |
sub dump_dom { |
sub dump_dom { |
my ($namespace, $udom, $regexp) = @_; |
my ($namespace, $udom, $regexp) = @_; |
Line 2980 sub can_edit_resource {
|
Line 3077 sub can_edit_resource {
|
$forceedit = 1; |
$forceedit = 1; |
} |
} |
$cfile = $resurl; |
$cfile = $resurl; |
|
} elsif ($resurl =~ m{^/adm/wrapper/adm/$cdom/$cnum/\d+/exttools?$}) { |
|
$incourse = 1; |
|
if ($env{'form.forceedit'}) { |
|
$forceview = 1; |
|
} else { |
|
$forceedit = 1; |
|
} |
|
$cfile = $resurl; |
} elsif ($resurl =~ m{^/?adm/viewclasslist$}) { |
} elsif ($resurl =~ m{^/?adm/viewclasslist$}) { |
$incourse = 1; |
$incourse = 1; |
if ($env{'form.forceedit'}) { |
if ($env{'form.forceedit'}) { |
Line 3004 sub can_edit_resource {
|
Line 3109 sub can_edit_resource {
|
$forceedit = 1; |
$forceedit = 1; |
} |
} |
$cfile = $resurl; |
$cfile = $resurl; |
|
} elsif (($resurl =~ m{^/adm/wrapper/adm/$cdom/$cnum/\d+/exttools?$}) && ($env{'form.folderpath'} =~ /^supplemental/)) { |
|
$incourse = 1; |
|
if ($env{'form.forceedit'}) { |
|
$forceview = 1; |
|
} else { |
|
$forceedit = 1; |
|
} |
|
$cfile = $resurl; |
} elsif (($resurl eq '/adm/extresedit') && ($symb || $env{'form.folderpath'})) { |
} elsif (($resurl eq '/adm/extresedit') && ($symb || $env{'form.folderpath'})) { |
$incourse = 1; |
$incourse = 1; |
$forceview = 1; |
$forceview = 1; |
Line 3013 sub can_edit_resource {
|
Line 3126 sub can_edit_resource {
|
$cfile = &clutter($res); |
$cfile = &clutter($res); |
} else { |
} else { |
$cfile = $env{'form.suppurl'}; |
$cfile = $env{'form.suppurl'}; |
$cfile =~ s{^http://}{}; |
my $escfile = &unescape($cfile); |
$cfile = '/adm/wrapper/ext/'.$cfile; |
if ($escfile =~ m{^/adm/$cdom/$cnum/\d+/exttools?$}) { |
|
$cfile = '/adm/wrapper'.$escfile; |
|
} else { |
|
$escfile =~ s{^http://}{}; |
|
$cfile = &escape("/adm/wrapper/ext/$escfile"); |
|
} |
} |
} |
} elsif ($resurl =~ m{^/?adm/viewclasslist$}) { |
} elsif ($resurl =~ m{^/?adm/viewclasslist$}) { |
if ($env{'form.forceedit'}) { |
if ($env{'form.forceedit'}) { |
Line 8792 sub modifyuser {
|
Line 8910 sub modifyuser {
|
'current user id "'.$uidhash{$uname}.'".'; |
'current user id "'.$uidhash{$uname}.'".'; |
} |
} |
} else { |
} else { |
&idput($udom,($uname => $uid)); |
&idput($udom,{$uname => $uid},$uhome,'ids'); |
} |
} |
} |
} |
# -------------------------------------------------------------- Add names, etc |
# -------------------------------------------------------------- Add names, etc |
Line 10219 sub resdata {
|
Line 10337 sub resdata {
|
return undef; |
return undef; |
} |
} |
|
|
|
sub get_domain_ltitools { |
|
my ($cdom) = @_; |
|
my %ltitools; |
|
my ($result,$cached)=&is_cached_new('ltitools',$cdom); |
|
if (defined($cached)) { |
|
if (ref($result) eq 'HASH') { |
|
%ltitools = %{$result}; |
|
} |
|
} else { |
|
my %domconfig = &get_dom('configuration',['ltitools'],$cdom); |
|
if (ref($domconfig{'ltitools'}) eq 'HASH') { |
|
%ltitools = %{$domconfig{'ltitools'}}; |
|
} |
|
my $cachetime = 24*60*60; |
|
&do_cache_new('ltitools',$cdom,\%ltitools,$cachetime); |
|
} |
|
return %ltitools; |
|
} |
|
|
sub get_numsuppfiles { |
sub get_numsuppfiles { |
my ($cnum,$cdom,$ignorecache)=@_; |
my ($cnum,$cdom,$ignorecache)=@_; |
my $hashid=$cnum.':'.$cdom; |
my $hashid=$cnum.':'.$cdom; |
Line 10673 sub metadata {
|
Line 10810 sub metadata {
|
# if it is a non metadata possible uri return quickly |
# if it is a non metadata possible uri return quickly |
if (($uri eq '') || |
if (($uri eq '') || |
(($uri =~ m|^/*adm/|) && |
(($uri =~ m|^/*adm/|) && |
($uri !~ m|^adm/includes|) && ($uri !~ m{/(smppg|bulletinboard)$})) || |
($uri !~ m|^adm/includes|) && ($uri !~ m{/(smppg|bulletinboard|exttools?)$})) || |
($uri =~ m|/$|) || ($uri =~ m|/.meta$|) || ($uri =~ m{^/*uploaded/.+\.sequence$})) { |
($uri =~ m|/$|) || ($uri =~ m|/.meta$|) || ($uri =~ m{^/*uploaded/.+\.sequence$})) { |
return undef; |
return undef; |
} |
} |
Line 12206 sub clutter {
|
Line 12343 sub clutter {
|
# &logthis("Got a blank emb style"); |
# &logthis("Got a blank emb style"); |
} |
} |
} |
} |
|
} elsif ($thisfn =~ m{^/adm/$match_domain/$match_courseid/\d+/exttools?$}) { |
|
$thisfn='/adm/wrapper'.$thisfn; |
} |
} |
return $thisfn; |
return $thisfn; |
} |
} |
Line 13148 the answer, and also caches if there is
|
Line 13287 the answer, and also caches if there is
|
|
|
=item * |
=item * |
X<idget()> |
X<idget()> |
B<idget($udom,@ids)>: find the usernames behind a list of IDs |
B<idget($udom,$idsref,$namespace)>: find the usernames behind either |
(IDs are a unique resource in a domain, there must be only 1 ID per |
a list of student/employee IDs or clicker IDs |
username, and only 1 username per ID in a specific domain) (returns |
(student/employee IDs are a unique resource in a domain, there must be |
hash: id=>name,id=>name) |
only 1 ID per username, and only 1 username per ID in a specific domain). |
|
clickerIDs are not necessarily unique, as students might share clickers. |
|
(returns hash: id=>name,id=>name) |
|
|
=item * |
=item * |
X<idrget()> |
X<idrget()> |
Line 13160 usernames (returns hash: name=>id,name=>
|
Line 13301 usernames (returns hash: name=>id,name=>
|
|
|
=item * |
=item * |
X<idput()> |
X<idput()> |
B<idput($udom,%ids)>: store away a list of names and associated IDs |
B<idput($udom,$idsref,$uhome,$namespace)>: store away a list of |
|
names and associated student/employee IDs or clicker IDs. |
|
|
|
=item * |
|
X<iddel()> |
|
B<iddel($udom,$idshashref,$uhome,$namespace)>: delete unwanted |
|
student/employee ID or clicker ID username look-ups from domain. |
|
The homeserver ($uhome) and namespace ($namespace) are optional. |
|
If no $uhome is provided, it will be determined usig &homeserver() |
|
for each user. If no $namespace is provided, the default is ids. |
|
|
|
=item * |
|
X<updateclickers()> |
|
B<updateclickers($udom,$action,$idshashref,$uhome,$critical)>: update |
|
clicker ID-to-username look-ups in clickers.db on library server. |
|
Permitted actions are add or del (i.e., add or delete). The |
|
clickers.db contains clickerID as keys (escaped), and each corresponding |
|
value is an escaped comma-separated list of usernames (for whom the |
|
library server is the homeserver), who registered that particular ID. |
|
If $critical is true, the update will be sent via &critical, otherwise |
|
&reply() will be used. |
|
|
=item * |
=item * |
X<rolesinit()> |
X<rolesinit()> |