[LON-CAPA-cvs] cvs: loncom / lond /auth rolesplain.tab /lonnet/perl lonnet.pm
raeburn
raeburn@source.lon-capa.org
Fri, 31 Jul 2009 02:20:23 -0000
This is a MIME encoded message
--raeburn1249006823
Content-Type: text/plain
raeburn Fri Jul 31 02:20:23 2009 EDT
Modified files:
/loncom lond
/loncom/lonnet/perl lonnet.pm
/loncom/auth rolesplain.tab
Log:
- Additional args for &lonnet::courseiddump().
- Can filter courses to only retrieve courses cloneable by requestor/owner of new course.
- Will retrieve information about allowed cloners (including courses for which cloning rights apply automatically because of active CC role).
- Term used for collaborative space changed from Group to Community.
- Coordinator role for Community simply called "Coordinator".
--raeburn1249006823
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20090731022023.txt"
Index: loncom/lond
diff -u loncom/lond:1.418 loncom/lond:1.419
--- loncom/lond:1.418 Wed Jul 29 22:32:39 2009
+++ loncom/lond Fri Jul 31 02:20:12 2009
@@ -2,7 +2,7 @@
# The LearningOnline Network
# lond "LON Daemon" Server (port "LOND" 5663)
#
-# $Id: lond,v 1.418 2009/07/29 22:32:39 raeburn Exp $
+# $Id: lond,v 1.419 2009/07/31 02:20:12 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -59,7 +59,7 @@
my $status='';
my $lastlog='';
-my $VERSION='$Revision: 1.418 $'; #' stupid emacs
+my $VERSION='$Revision: 1.419 $'; #' stupid emacs
my $remoteVERSION;
my $currenthostid="default";
my $currentdomainid;
@@ -3693,6 +3693,12 @@
# caller - if set to 'coursecatalog', courses set to be hidden
# from course catalog will be excluded from results (unless
# overridden by "showhidden".
+# cloner - escaped username:domain of course cloner (if picking course to#
+# clone).
+# cc_clone_list - escaped comma separated list of courses for which
+# course cloner has active CC role (and so can clone
+# automatically).
+# cloneonly - filter by courses for which cloner has rights to clone.
#
# $client - The socket open on the client.
# Returns:
@@ -3705,8 +3711,9 @@
my ($udom,$since,$description,$instcodefilter,$ownerfilter,$coursefilter,
$typefilter,$regexp_ok,$rtn_as_hash,$selfenrollonly,$catfilter,$showhidden,
- $caller) =split(/:/,$tail);
+ $caller,$cloner,$cc_clone_list,$cloneonly) =split(/:/,$tail);
my $now = time;
+ my ($cloneruname,$clonerudom,%cc_clone);
if (defined($description)) {
$description=&unescape($description);
} else {
@@ -3749,6 +3756,20 @@
if (defined($catfilter)) {
$catfilter=&unescape($catfilter);
}
+ if (defined($cloner)) {
+ $cloner = &unescape($cloner);
+ ($cloneruname,$clonerudom) = ($cloner =~ /^($LONCAPA::match_username):($LONCAPA::match_domain)$/);
+ }
+ if (defined($cc_clone_list)) {
+ $cc_clone_list = &unescape($cc_clone_list);
+ my @cc_cloners = split('&',$cc_clone_list);
+ foreach my $cid (@cc_cloners) {
+ my ($clonedom,$clonenum) = split(':',$cid);
+ next if ($clonedom ne $udom);
+ $cc_clone{$clonedom.'_'.$clonenum} = 1;
+ }
+ }
+
my $unpack = 1;
if ($description eq '.' && $instcodefilter eq '.' && $coursefilter eq '.' &&
$typefilter eq '.') {
@@ -3771,14 +3792,46 @@
$lasttime = $hashref->{$lasttime_key};
next if ($lasttime<$since);
}
+ my ($canclone,$valchange);
my $items = &Apache::lonnet::thaw_unescape($value);
if (ref($items) eq 'HASH') {
$is_hash = 1;
+ if (defined($clonerudom)) {
+ if ($items->{'cloners'}) {
+ my @cloneable = split(',',$items->{'cloners'});
+ if (@cloneable) {
+ if (grep(/^\*$/,@cloneable)) {
+ $canclone = 1;
+ } elsif (grep(/^\*:\Q$clonerudom\E$/,@cloneable)) {
+ $canclone = 1;
+ } elsif (grep(/^\Q$cloneruname\E:\Q$clonerudom\E$/,@cloneable)) {
+ $canclone = 1;
+ }
+ }
+ unless ($canclone) {
+ if ($cloneruname ne '' && $clonerudom ne '') {
+ if ($cc_clone{$unesc_key}) {
+ $canclone = 1;
+ $items->{'cloners'} .= ','.$cloneruname.':'.
+ $clonerudom;
+ $valchange = 1;
+ }
+ }
+ }
+ } elsif (defined($cloneruname)) {
+ if ($cc_clone{$unesc_key}) {
+ $canclone = 1;
+ $items->{'cloners'} = $cloneruname.':'.$clonerudom;
+ $valchange = 1;
+ }
+ }
+ }
if ($unpack || !$rtn_as_hash) {
$unesc_val{'descr'} = $items->{'description'};
$unesc_val{'inst_code'} = $items->{'inst_code'};
$unesc_val{'owner'} = $items->{'owner'};
$unesc_val{'type'} = $items->{'type'};
+ $unesc_val{'cloners'} = $items->{'cloners'};
}
$selfenroll_types = $items->{'selfenroll_types'};
$selfenroll_end = $items->{'selfenroll_end_date'};
@@ -3809,7 +3862,13 @@
}
} else {
next if ($catfilter ne '');
- next if ($selfenrollonly);
+ next if ($selfenrollonly);
+ if ((defined($clonerudom)) && (defined($cloneruname))) {
+ if ($cc_clone{$unesc_key}) {
+ $canclone = 1;
+ $val{'cloners'} = &escape($cloneruname.':'.$clonerudom);
+ }
+ }
$is_hash = 0;
my @courseitems = split(/:/,$value);
$lasttime = pop(@courseitems);
@@ -3818,6 +3877,9 @@
}
($val{'descr'},$val{'inst_code'},$val{'owner'},$val{'type'}) = @courseitems;
}
+ if ($cloneonly) {
+ next unless ($canclone);
+ }
my $match = 1;
if ($description ne '.') {
if (!$is_hash) {
@@ -3904,12 +3966,18 @@
if ($match == 1) {
if ($rtn_as_hash) {
if ($is_hash) {
- $qresult.=$key.'='.$value.'&';
+ if ($valchange) {
+ my $newvalue = &Apache::lonnet::freeze_escape($items);
+ $qresult.=$key.'='.$newvalue.'&';
+ } else {
+ $qresult.=$key.'='.$value.'&';
+ }
} else {
my %rtnhash = ( 'description' => &unescape($val{'descr'}),
'inst_code' => &unescape($val{'inst_code'}),
'owner' => &unescape($val{'owner'}),
'type' => &unescape($val{'type'}),
+ 'cloners' => &unescape($val{'cloners'}),
);
my $items = &Apache::lonnet::freeze_escape(\%rtnhash);
$qresult.=$key.'='.$items.'&';
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.1007 loncom/lonnet/perl/lonnet.pm:1.1008
--- loncom/lonnet/perl/lonnet.pm:1.1007 Sat Jul 25 15:25:18 2009
+++ loncom/lonnet/perl/lonnet.pm Fri Jul 31 02:20:17 2009
@@ -1,7 +1,7 @@
# The LearningOnline Network
# TCP networking package
#
-# $Id: lonnet.pm,v 1.1007 2009/07/25 15:25:18 raeburn Exp $
+# $Id: lonnet.pm,v 1.1008 2009/07/31 02:20:17 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2968,7 +2968,7 @@
sub courseiddump {
my ($domfilter,$descfilter,$sincefilter,$instcodefilter,$ownerfilter,
$coursefilter,$hostidflag,$hostidref,$typefilter,$regexp_ok,
- $selfenrollonly,$catfilter,$showhidden,$caller)=@_;
+ $selfenrollonly,$catfilter,$showhidden,$caller,$cloner,$cc_clone,$cloneonly)=@_;
my $as_hash = 1;
my %returnhash;
if (!$domfilter) { $domfilter=''; }
@@ -2987,7 +2987,8 @@
':'.&escape($coursefilter).':'.&escape($typefilter).
':'.&escape($regexp_ok).':'.$as_hash.':'.
&escape($selfenrollonly).':'.&escape($catfilter).':'.
- $showhidden.':'.$caller,$tryserver);
+ $showhidden.':'.$caller.':'.&escape($cloner).':'.
+ &escape($cc_clone).':'.$cloneonly,$tryserver);
my @pairs=split(/\&/,$rep);
foreach my $item (@pairs) {
my ($key,$value)=split(/\=/,$item,2);
@@ -3002,7 +3003,7 @@
for (my $i=0; $i<@responses; $i++) {
$returnhash{$key}{$items[$i]} = &unescape($responses[$i]);
}
- }
+ }
}
}
}
@@ -5934,8 +5935,8 @@
}
}
my %rolenames = (
- Course => 'std',
- Group => 'alt1',
+ Course => 'std',
+ Community => 'alt1',
);
if (defined($type) &&
defined($rolenames{$type}) &&
@@ -9694,7 +9695,7 @@
plaintext($short,$type,$cid,$forcedefault) : return value in %prp hash
(rolesplain.tab); plain text explanation of a user role term.
-$type is Course (default) or Group.
+$type is Course (default) or Community.
If $forcedefault evaluates to true, text returned will be default
text for $type. Otherwise, if this is a course, the text returned
will be a custom name for the role (if defined in the course's
Index: loncom/auth/rolesplain.tab
diff -u loncom/auth/rolesplain.tab:1.37 loncom/auth/rolesplain.tab:1.38
--- loncom/auth/rolesplain.tab:1.37 Sat Jul 25 23:16:09 2009
+++ loncom/auth/rolesplain.tab Fri Jul 31 02:20:22 2009
@@ -13,7 +13,7 @@
cm:No Role, Cumulative Privileges
su:Superuser
dc:Domain Coordinator
-cc:Course Coordinator:Community Coordinator
+cc:Course Coordinator:Coordinator
in:Instructor:Leader
ta:Teaching Assistant:Assistant Leader
ep:Exam Proctor
--raeburn1249006823--