From raeburn at source.lon-capa.org Mon Feb 25 12:43:42 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Mon, 25 Feb 2013 17:43:42 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /interface domainprefs.pm Message-ID: raeburn Mon Feb 25 17:43:42 2013 EDT Modified files: /loncom/interface domainprefs.pm Log: - Make &active_dc_picker() more generic so it can be used to generate a table of active Domain Coordinators either as radio button items (pick 1 of N), or as checkboxes (pick M of N). - Eliminate some code by including start and end args in call to lonnet::get_domain_roles in &get_active_dcs() - Eliminate duplicate code in &print_requestmail() with &print_requestmail() call. -------------- next part -------------- Index: loncom/interface/domainprefs.pm diff -u loncom/interface/domainprefs.pm:1.190 loncom/interface/domainprefs.pm:1.191 --- loncom/interface/domainprefs.pm:1.190 Sat Feb 2 02:48:47 2013 +++ loncom/interface/domainprefs.pm Mon Feb 25 17:43:41 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.190 2013/02/02 02:48:47 raeburn Exp $ +# $Id: domainprefs.pm,v 1.191 2013/02/25 17:43:41 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1926,35 +1926,16 @@ sub print_requestmail { my ($dom,$action,$settings,$rowtotal) = @_; - my ($now,$datatable,%dompersonnel, at domcoord, at currapproval,$rows); + my ($now,$datatable,%currapp,$rows); $now = time; - $rows = 0; - %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc'],$now,$now); - foreach my $server (keys(%dompersonnel)) { - foreach my $user (sort(keys(%{$dompersonnel{$server}}))) { - my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user); - if (!grep(/^$uname:$udom$/, at domcoord)) { - push(@domcoord,$uname.':'.$udom); - } - } - } if (ref($settings) eq 'HASH') { if (ref($settings->{'notify'}) eq 'HASH') { if ($settings->{'notify'}{'approval'} ne '') { - @currapproval = split(',',$settings->{'notify'}{'approval'}); - } - } - } - if (@currapproval) { - foreach my $dc (@currapproval) { - unless (grep(/^\Q$dc\E$/, at domcoord)) { - push(@domcoord,$dc); + map {$currapp{$_}=1;} split(/,/,$settings->{'notify'}{'approval'}); } } } - @domcoord = sort(@domcoord); - my $numinrow = 4; - my $numdc = @domcoord; + my $numinrow = 2; my $css_class = 'class="LC_odd_row"'; my $text; if ($action eq 'requestcourses') { @@ -1965,42 +1946,12 @@ $datatable = ''. ' '.$text.''. ' '; - if (@domcoord > 0) { - $datatable .= ''; - for (my $i=0; $i<$numdc; $i++) { - my $rem = $i%($numinrow); - if ($rem == 0) { - if ($i > 0) { - $datatable .= ''; - } - $datatable .= ''; - $rows ++; - } - my $check = ' '; - if (grep(/^\Q$domcoord[$i]\E$/, at currapproval)) { - $check = ' checked="checked" '; - } - my ($uname,$udom) = split(':',$domcoord[$i]); - my $fullname = &Apache::loncommon::plainname($uname,$udom); - if ($i == $numdc-1) { - my $colsleft = $numinrow-$rem; - if ($colsleft > 1) { - $datatable .= ''; - } - $datatable .= '
'; - } else { - $datatable .= ''; - } - } else { - $datatable .= ''; - } - $datatable .= '
'; + my ($numdc,$table,$rows) = &active_dc_picker($dom,$numinrow,'checkbox', + 'reqapprovalnotify',%currapp); + if ($numdc > 0) { + $datatable .= $table; } else { $datatable .= &mt('There are no active Domain Coordinators'); - $rows ++; } $datatable .=''; $$rowtotal += $rows; @@ -2155,8 +2106,7 @@ sub print_autocreate { my ($dom,$settings,$rowtotal) = @_; - my (%createon,%createoff); - my $curr_dc; + my (%createon,%createoff,%currhash); my @types = ('xml','req'); if (ref($settings) eq 'HASH') { foreach my $item (@types) { @@ -2169,7 +2119,9 @@ } } } - $curr_dc = $settings->{'xmldc'}; + if ($settings->{'xmldc'} ne '') { + $currhash{$settings->{'xmldc'}} = 1; + } } else { foreach my $item (@types) { $createoff{$item} = ' checked="checked" '; @@ -2177,6 +2129,7 @@ } } $$rowtotal += 2; + my $numinrow = 2; my $datatable=''. ''.&mt('Create pending official courses from XML files').''. ' '. ''; - my ($numdc,$dctable) = &active_dc_picker($dom,$curr_dc); + my ($numdc,$dctable,$rows) = &active_dc_picker($dom,$numinrow,'radio', + 'autocreate_xmldc',%currhash); if ($numdc > 1) { $datatable .= ''. &mt('Course creation processed as: (choose Dom. Coord.)'). ''.$dctable.''; - $$rowtotal ++ ; } else { $datatable .= $dctable.''; } + $$rowtotal += $rows; return $datatable; } @@ -8444,73 +8398,95 @@ sub get_active_dcs { my ($dom) = @_; - my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc']); + my $now = time; + my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc'],$now,$now); my %domcoords; my $numdcs = 0; my $now = time; foreach my $server (keys(%dompersonnel)) { foreach my $user (sort(keys(%{$dompersonnel{$server}}))) { my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user); - my ($end,$start) = split(':',$dompersonnel{$server}{$user}); - if (($end eq '') || ($end == 0) || ($end > $now)) { - if ($start <= $now) { - $domcoords{$uname.':'.$udom} = $dompersonnel{$server}{$user}; - } - } + $domcoords{$uname.':'.$udom} = $dompersonnel{$server}{$user}; } } return %domcoords; } sub active_dc_picker { - my ($dom,$curr_dc) = @_; + my ($dom,$numinrow,$inputtype,$name,%currhash) = @_; my %domcoords = &get_active_dcs($dom); - my @dcs = sort(keys(%domcoords)); - my $numdcs = scalar(@dcs); - my $datatable; - my $numinrow = 2; + my @domcoord = keys(%domcoords); + if (keys(%currhash)) { + foreach my $dc (keys(%currhash)) { + unless (exists($domcoords{$dc})) { + push(@domcoord,$dc); + } + } + } + @domcoord = sort(@domcoord); + my $numdcs = scalar(@domcoord); + my $rows = 0; + my $table; if ($numdcs > 1) { - $datatable = ''; - for (my $i=0; $i<@dcs; $i++) { + $table = '
'; + for (my $i=0; $i<@domcoord; $i++) { my $rem = $i%($numinrow); if ($rem == 0) { if ($i > 0) { - $datatable .= ''; + $table .= ''; } - $datatable .= ''; + $table .= ''; + $rows ++; } - my $check = ' '; - if ($curr_dc eq '') { - if (!$i) { - $check = ' checked="checked" '; + my $check = ''; + if ($inputtype eq 'radio') { + if (keys(%currhash) == 0) { + if (!$i) { + $check = ' checked="checked"'; + } + } elsif (exists($currhash{$domcoord[$i]})) { + $check = ' checked="checked"'; + } + } else { + if (exists($currhash{$domcoord[$i]})) { + $check = ' checked="checked"'; } - } elsif ($dcs[$i] eq $curr_dc) { - $check = ' checked="checked" '; } - if ($i == @dcs - 1) { + if ($i == @domcoord - 1) { my $colsleft = $numinrow - $rem; if ($colsleft > 1) { - $datatable .= ''; } - my ($dcname,$dcdom) = split(':',$dcs[$i]); - $datatable .= ''; } - $datatable .= '
'; + $table .= ''; } else { - $datatable .= ''; + $table .= ''; } } else { - $datatable .= ''; + $table .= ''; + } + my ($dcname,$dcdom) = split(':',$domcoord[$i]); + my $user = &Apache::loncommon::plainname($dcname,$dcdom); + $table .= '
'; - } elsif (@dcs) { - $datatable .= ''; + $table .= ''; + } elsif ($numdcs == 1) { + if ($inputtype eq 'radio') { + $table .= ''; + } else { + my $check; + if (exists($currhash{$domcoord[0]})) { + $check = ' checked="checked"'; + } + $table .= ''; + $rows ++; + } } - return ($numdcs,$datatable); + return ($numdcs,$table,$rows); } sub usersession_titles { From raeburn at source.lon-capa.org Wed Feb 27 14:48:53 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Wed, 27 Feb 2013 19:48:53 -0000 Subject: [LON-CAPA-cvs] cvs: doc /install/linux install.pl Message-ID: raeburn Wed Feb 27 19:48:53 2013 EDT Modified files: /doc/install/linux install.pl Log: - Improved locale checking for Debian. - Change in suggested commands to set locale LANG to en_US.UTF-8 in Debian and Ubuntu if LANG currently set to something else. Index: doc/install/linux/install.pl diff -u doc/install/linux/install.pl:1.24 doc/install/linux/install.pl:1.25 --- doc/install/linux/install.pl:1.24 Sun Jan 6 23:04:07 2013 +++ doc/install/linux/install.pl Wed Feb 27 19:48:53 2013 @@ -72,7 +72,7 @@ &mt('Stopping execution.')."\n"; exit; } else { - print LOG '$Id: install.pl,v 1.24 2013/01/06 23:04:07 raeburn Exp $'."\n"; + print LOG '$Id: install.pl,v 1.25 2013/02/27 19:48:53 raeburn Exp $'."\n"; } # @@ -339,13 +339,15 @@ my @data = <$fh>; chomp(@data); foreach my $item (@data) { - if ($item =~ /^\Q$langvar\E=\"([^\"]*)\"/) { + if ($item =~ /^\Q$langvar\E=\"?([^\"]*)\"?/) { my $default = $1; if ($default ne 'en_US.UTF-8') { if ($distro =~ /^debian/) { - $command = 'dpkg-reconfigure locales'; + $command = 'locale-gen en_US.UTF-8'."\n". + 'update-locale LANG=en_US.UTF-8'; } elsif ($distro =~ /^ubuntu/) { - $command = 'sudo set-language-env -E'; + $command = 'sudo locale-gen en_US.UTF-8'."\n". + 'sudo update-locale LANG=en_US.UTF-8'; } elsif ($distro =~ /^(suse|sles)/) { $command = 'yast language'; } else { From bisitz at source.lon-capa.org Thu Feb 28 06:16:12 2013 From: bisitz at source.lon-capa.org (bisitz) Date: Thu, 28 Feb 2013 11:16:12 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /html/adm/help/tex Portfolio_DeleteFile.tex Message-ID: bisitz Thu Feb 28 11:16:12 2013 EDT Modified files: /loncom/html/adm/help/tex Portfolio_DeleteFile.tex Log: Corrected help about deleting subdirectories in Portfolio Index: loncom/html/adm/help/tex/Portfolio_DeleteFile.tex diff -u loncom/html/adm/help/tex/Portfolio_DeleteFile.tex:1.2 loncom/html/adm/help/tex/Portfolio_DeleteFile.tex:1.3 --- loncom/html/adm/help/tex/Portfolio_DeleteFile.tex:1.2 Tue Nov 28 02:35:53 2006 +++ loncom/html/adm/help/tex/Portfolio_DeleteFile.tex Thu Feb 28 11:16:12 2013 @@ -1,11 +1,16 @@ \label{Portfolio_DeleteFile} -The portfolio allows you to delete some files. Locked files (files that have been handed in as solutions to a problem) cannot be deleted. Subdirectories cannot be deleted. To delete one or more files: +The portfolio allows you to delete some files. Locked files (files that have been handed in as solutions to a problem) cannot be deleted. + +Subdirectories can only be deleted if they are empty. +Enter the directory (See: Changing Directory \ref{Portfolio_ChangeDirectory}), delete the files if necessary (see below) and click \textbf{Delete Directory} to delete the current directory. + +To delete one or more files: \begin{enumerate} \item Check on the checkboxes next to the filenames you wish to delete. \item Once all files in the directory are checked press on the \textbf{delete checked files} button. -\item A confirmation screen will appear. Make sure that the filenames are correct. Press \textbf{Continue} to delete the file, and \textbf{cancel} to cancel the deletion of the file. +\item A confirmation screen will appear. Make sure that the filenames are correct. Press \textbf{Continue} to delete the file, and \textbf{Cancel} to cancel the deletion of the file. \end{enumerate} -File deletion cannot be undone +File deletion cannot be undone. From bisitz at source.lon-capa.org Thu Feb 28 09:52:26 2013 From: bisitz at source.lon-capa.org (bisitz) Date: Thu, 28 Feb 2013 14:52:26 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /html/adm/help/tex Portfolio_ShareFile_SetAccess.tex Message-ID: bisitz Thu Feb 28 14:52:26 2013 EDT Modified files: /loncom/html/adm/help/tex Portfolio_ShareFile_SetAccess.tex Log: - Wording - Consistent punctuation - Removed trailing blanks Index: loncom/html/adm/help/tex/Portfolio_ShareFile_SetAccess.tex diff -u loncom/html/adm/help/tex/Portfolio_ShareFile_SetAccess.tex:1.2 loncom/html/adm/help/tex/Portfolio_ShareFile_SetAccess.tex:1.3 --- loncom/html/adm/help/tex/Portfolio_ShareFile_SetAccess.tex:1.2 Tue Nov 28 02:35:53 2006 +++ loncom/html/adm/help/tex/Portfolio_ShareFile_SetAccess.tex Thu Feb 28 14:52:26 2013 @@ -4,11 +4,11 @@ You can set the public/password protected access by: \begin{enumerate} -\item setting the starting date and the ending date of when your file is to be publicly accessible. The ending date must be after the starting date. -\item If you wish to have the file public/password protected forever, click on \textbf{no end date}. -\item For password protected access, you must write a password. You can then give the password to anyone who you wish to share your files with -\item Click on the activate check box -\item press \textbf{Proceed} to make your files publicly available. +\item Set the starting date and the ending date of when your file is to be publicly accessible. The ending date must be after the starting date. +\item If you wish to have the file public/password protected forever, click on \textbf{no end date}. +\item For password protected access, you must provide a password. You can then give the password to anyone who you wish to share your files with. +\item Click on the activate check box. +\item Press \textbf{Proceed} to make your files publicly/password protected available. \end{enumerate} -The URL where this file can be accessed will be given to you. Copy this URL and give the URL to people you wish to share your files with +The URL where this file can be accessed will be given to you. Copy this URL and give the URL to people you wish to share your files with. From bisitz at source.lon-capa.org Thu Feb 28 10:01:57 2013 From: bisitz at source.lon-capa.org (bisitz) Date: Thu, 28 Feb 2013 15:01:57 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /html/adm/help/tex Portfolio_ShareFile_Conditional.tex Message-ID: bisitz Thu Feb 28 15:01:57 2013 EDT Modified files: /loncom/html/adm/help/tex Portfolio_ShareFile_Conditional.tex Log: - Improved/corrected wording - Added reference link to already referenced help file Index: loncom/html/adm/help/tex/Portfolio_ShareFile_Conditional.tex diff -u loncom/html/adm/help/tex/Portfolio_ShareFile_Conditional.tex:1.1 loncom/html/adm/help/tex/Portfolio_ShareFile_Conditional.tex:1.2 --- loncom/html/adm/help/tex/Portfolio_ShareFile_Conditional.tex:1.1 Tue Dec 12 17:46:36 2006 +++ loncom/html/adm/help/tex/Portfolio_ShareFile_Conditional.tex Thu Feb 28 15:01:57 2013 @@ -1,13 +1,17 @@ \label{Portfolio_ShareFile_Conditional} -You can also share file conditionally, that is only to a particular set of users. You can give access to all users of a particular domain, to users that are members of a course, or by specifying the user names. +You can also share files conditionally, that is only to a particular set of users. You can give access to all users of a particular domain, to users that are members of a course, or by specifying the user names. -For each file, you can create multiple conditions. You can set access to a combination of more than one domains, courses, or users. To change conditions: +For each file, you can create multiple conditions. You can set access to a combination of more than one domain, course, or user. + +To create conditions: \begin{enumerate} -\item Click on the link \underline{Change Conditions}. -\item Add a condition (user based, domain based, or course based) by specifying the number of conditions to add. +\item Click on the link \underline{Add conditional access} / \underline{Change Conditions}. +\item Add a condition (user based, domain based, or course based) by specifying the number of conditions to add. \item Press \textbf{Proceed}. -\item Depending on what condition you choose, a screen will appear that allows you to set the parameters of the condition. There is an input to specify the name of the domain/course/users that is allowed to access this file. Insert values for this parameter. -\item The process of setting, editing and stopping access is similar to setting the public/pass-phrase access. +\item Depending on what condition you choose, a screen will appear that allows you to set the parameters of the condition. +There is an input field to specify the name of the domain/course/users that is/are allowed to access this file. +Insert values for this parameter. +\item The process of setting, editing and stopping access is similar to setting the public/pass-phrase access (\ref{Portfolio_ShareFile_SetAccess}). \end{enumerate} From bisitz at source.lon-capa.org Thu Feb 28 10:16:52 2013 From: bisitz at source.lon-capa.org (bisitz) Date: Thu, 28 Feb 2013 15:16:52 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /html/adm/help/tex/de Portfolio_AddFiles.tex Portfolio_Catalog.tex Portfolio_ChangeDirectory.tex Portfolio_CreateDirectory.tex Portfolio_DeleteFile.tex Portfolio_FileAction.tex Portfolio_FileList.tex Portfolio_OpenFile.tex Portfolio_RenameFile.tex Portfolio_ShareFile.tex Portfolio_ShareFile_ChangeSetting.tex Portfolio_ShareFile_Conditional.tex Portfolio_ShareFile_SetAccess.tex Portfolio_ShareFile_StopAccess.tex Message-ID: bisitz Thu Feb 28 15:16:52 2013 EDT Added files: /loncom/html/adm/help/tex/de Portfolio_AddFiles.tex Portfolio_Catalog.tex Portfolio_ChangeDirectory.tex Portfolio_CreateDirectory.tex Portfolio_DeleteFile.tex Portfolio_FileAction.tex Portfolio_FileList.tex Portfolio_OpenFile.tex Portfolio_RenameFile.tex Portfolio_ShareFile.tex Portfolio_ShareFile_ChangeSetting.tex Portfolio_ShareFile_Conditional.tex Portfolio_ShareFile_SetAccess.tex Portfolio_ShareFile_StopAccess.tex Log: German Translation -------------- next part -------------- Index: loncom/html/adm/help/tex/de/Portfolio_AddFiles.tex +++ loncom/html/adm/help/tex/de/Portfolio_AddFiles.tex \label{Portfolio_AddFiles} Um Dateien hinzuzuf??gen, stellen Sie zun??chst sicher, dass Sie sich in dem richtigen Verzeichnis befinden (siehe: Verzeichnis erstellen \ref{Portfolio_CreateDirectory}, Verzeichnis wechseln \ref{Portfolio_ChangeDirectory}). Das aktuelle Verzeichnis, in dem Sie sich gerade befinden, wird oberhalb der Dateiliste angezeigt. Der vollst??ndige Pfad zum Verzeichnis wird ebenfalls gezeigt und beginnt mit dem Hauptverzeichnis "portfolio/". Wenn Sie sich in dem richtigen Verzeichnis befinden, gehen Sie wie folgt vor: \begin{enumerate} \item Klicken Sie auf \textbf{Durchsuchen...}, um die Datei, die Sie in den Portfolio-Bereich hochladen m??chten, in Ihrem lokalem Dateisystem zu finden. Sie k??nnen keine ganzen Verzeichnisse hochladen, nur einzelne Dateien. \item Klicken Sie auf \textbf{Hochladen}. \item Das Hochladen der Datei kann einen Moment dauern, wenn die Datei gro?? ist. Wenn der Hochladevorgang abgeschlossen ist, werden Sie ??ber den Erfolg informiert. Sie erhalten einen Link, um zur??ck zum Portfolio-Bereich zu gelangen. \end{enumerate} Index: loncom/html/adm/help/tex/de/Portfolio_Catalog.tex +++ loncom/html/adm/help/tex/de/Portfolio_Catalog.tex \label{Portfolio_Catalog} Durch Eintragen von Metadaten k??nnen Sie zus??tzliche Informationen zu hochgeladenen Dateien angeben. Diese Informationen dienen der Kategorisierung und zum besseren Auffinden in der Suche. Um Metadaten einer Datei zu erstellen oder zu ??ndern, klicken Sie auf \textbf{Metadaten} in der Zeile der Datei. Auf der folgenden Seite werden Sie gefragt, mit welchem Kurs Sie die Datei verkn??pfen m??chten. Sie k??nnen auch keine Verkn??pfung mit einem Kurs ausw??hlen. Nachdem Sie Ihre Wahl getroffen haben, klicken Sie auf \textbf{Verkn??pfe Ressource mit ausgew??hltem Kurs} Auf der n??chsten Seite k??nnen Sie dann verschiedene Informationen eintragen und zwar folgende: \begin{itemize} \item Autor - der/die Ersteller der Ressource \item Titel - der Titel der Ressource \item Thema - das Thema, auf das sich die Ressource sich bezieht \item Schl??sselw??rter - W??rter, die sich auf die Ressource beziehen, um eine Katalogisierung und ein einfaches Wiederauffinden in der Suche zu erm??glichen \item Kurzbeschreibung \item Notizen \item Niedrigstes Kursniveau - das niedrigste Schul-/Studiums-Niveau, das f??r den Leser dieser Ressource passend ist \item H??chstes Kursniveau - das h??chste Schul-/Studiums-Niveau, das f??r den Leser dieser Ressource passend ist \item Standards \end{itemize} Klicken Sie auf \textbf{Speichern}, um die eingegebenen/ge??nderten Informationen zu speichern. Um alle ??nderungen zu verwerfen, klicken Sie auf \textbf{??nderungen verwerfen und zur??ck zum Portfolio-Bereich}. Index: loncom/html/adm/help/tex/de/Portfolio_ChangeDirectory.tex +++ loncom/html/adm/help/tex/de/Portfolio_ChangeDirectory.tex \label{Portfolio_ChangeDirectory} Das aktuelle Verzeichnis, in dem Sie sich gerade befinden, wird Ihnen oberhalb der Dateiliste angezeigt. Der vollst??ndige Pfad zum Verzeichnis wird ebenfalls gezeigt und beginnt mit dem Hauptverzeichnis "portfolio/". Sie k??nnen auf jedes der in dem Pfad angezeigten Verzeichnisse klicken, um in der Verzeichnisstruktur entsprechend nach oben zu navigieren. Falls Sie ein Unterverzeichnis betreten m??chten, klicken Sie auf in der Dateiliste auf den Namen des Verzeichnisses. Index: loncom/html/adm/help/tex/de/Portfolio_CreateDirectory.tex +++ loncom/html/adm/help/tex/de/Portfolio_CreateDirectory.tex \label{Portfolio_CreateDirectory} Sie k??nnen Ihren Portfolio-Bereich durch Verwendung von Unterverzeichnissen organisieren. Um ein Unterverzeichnis zu erstellen, stellen Sie zun??chst sicher, dass Sie sich im richtigen Verzeichnis befinden (siehe: Verzeichnis wechseln \ref{Portfolio_ChangeDirectory}). Das aktuelle Verzeichnis, in dem Sie sich gerade befinden, wird oberhalb der Dateiliste angezeigt. Es handelt sich um einen Link mit dem Text "portfolio/". Wenn Sie sich in dem richtigen Verzeichnis befinden, gehen Sie wie folgt vor: \begin{enumerate} \item Schreiben Sie den Namen des neuen Unterverzeichnisses in das Eingabefeld mit der Bezeichnung "Unterverzeichnis im aktuellen Verzeichnis erstellen:". \item Klicken Sie auf \textbf{Unterverzeichnis erstellen} \item Ein neues Unterverzeichnis wird erstellt. Falls der eingegebene Name ung??ltige Zeichen enth??lt (z.B. Leerzeichen), werden diese durch einen Unterstrich ('\_') ersetzt. \item Klicken Sie auf \textbf{Fertig} \end{enumerate} Durch das Erstellen eines Verzeichnisses betreten Sie nicht automatisch in dieses Verzeichnis. Zum Betreten klicken Sie auf den Namen des gerade erstellten Verzeichnisses. Index: loncom/html/adm/help/tex/de/Portfolio_DeleteFile.tex +++ loncom/html/adm/help/tex/de/Portfolio_DeleteFile.tex \label{Portfolio_DeleteFile} Im Portfolio-Bereich k??nnen Sie manche Dateien l??schen. Gesperrte Dateien (Dateien, die als L??sung f??r eine Aufgabe eingereicht wurden), k??nnen nicht gel??scht werden. Unterverzeichnisse k??nnen nur gel??scht werden, wenn diese leer sind. Betreten Sie das Unterverzeichnis (siehe: Verzeichnis wechseln \ref{Portfolio_ChangeDirectory}), entfernen Sie die ggf. enthaltenen Dateien (siehe unten) und klicken Sie anschlie??end auf \textbf{Verzeichnis l??schen}, um das aktuelle Verzeichnis zu l??schen. Um eine oder mehrere Dateien zu l??schen, gehen Sie wie folgt vor: \begin{enumerate} \item W??hlen Sie mit Hilfe der Checkboxen die Dateien aus, die Sie l??schen m??chten. \item Nachdem Sie in dem aktuellen Verzeichnis alle gew??nschten Dateien ausgew??hlt haben, klicken Sie auf \textbf{Ausgew??hlte l??schen}. \item Es erscheint eine Seite zur Best??tigung der Aktion. Stellen Sie sicher, dass Sie die richtigen Dateien ausgew??hlt haben. Klicken Sie auf \textbf{Weiter}, um die Datei(en) zu l??schen bzw. \textbf{Abbrechen}, um den L??schvorgang abzubrechen. \end{enumerate} Das L??schen von Dateien kann nicht r??ckg??ngig gemacht werden. Index: loncom/html/adm/help/tex/de/Portfolio_FileAction.tex +++ loncom/html/adm/help/tex/de/Portfolio_FileAction.tex \label{Portfolio_FileAction} Es gibt mehrere Aktionen, die Sie auf eine Datei anwenden k??nnen. Sie k??nnen Dateien umbenennen (\ref{Portfolio_RenameFile}), Metadaten hinzuf??gen (\ref{Portfolio_Catalog}) und Dateien l??schen (\ref{Portfolio_DeleteFile}). Index: loncom/html/adm/help/tex/de/Portfolio_FileList.tex +++ loncom/html/adm/help/tex/de/Portfolio_FileList.tex \label{Portfolio_FileList} Die Dateiliste zeigt alle Dateien und Unterverzeichnisse, die sich in diesem Verzeichnis befinden. Ein Klick auf die Datei wird diese ??ffnen bzw. ein Herunterladen erm??glichen. Ein Klick auf ein Verzeichnis wechselt in dieses. Die Dateiliste bietet zudem verschiedene Aktionen. dies sind durch Icons erreichbar und zwar folgende: \begin{itemize} \item Verzeichnis: Bei diesem Eintrag handelt es sich um ein Verzeichnis. \item gesperrt: Falls Sie eine Datei f??r eine Aufgabe eingereicht haben, k??nnen Sie diese Datei nicht mehr l??schen oder umbenennen. \item Checkbox: Zum L??schen von Dateien w??hlen Sie alle zu l??schenden Dateien mit Hilfe der Checkboxen aus und klicken dann auf \textbf{Ausgew??hlte l??schen}. \item Umbenennen: Klicken Sie auf diesen Link, um die Datei umzubenennen (siehe: Datei umbenennen \ref{Portfolio_RenameFile}). \item Metadaten: Klicken Sie auf dieses Icon, um Metadaten zu der Datei hinzuzuf??gen oder zu ??ndern (siehe: Metadaten \ref{Portfolio_Catalog}) \end{itemize} Index: loncom/html/adm/help/tex/de/Portfolio_OpenFile.tex +++ loncom/html/adm/help/tex/de/Portfolio_OpenFile.tex \label{Portfolio_OpenFile} Um eine Datei zu ??ffnen, klicken Sie auf den Dateinamen in der Dateiliste. Wenn Sie die Datei dort nicht vorfinden, befinden Sie sich vielleicht im falschen Verzeichnis. Wechseln Sie also ggf. das Verzeichnis (siehe: Verzeichnis wechseln \ref{Portfolio_ChangeDirectory}). Index: loncom/html/adm/help/tex/de/Portfolio_RenameFile.tex +++ loncom/html/adm/help/tex/de/Portfolio_RenameFile.tex \label{Portfolio_RenameFile} Sie k??nnen nur nicht gesperrte Dateien umbenennen. Klicken Sie auf den \underline{Umbenennen}-Link in der Zeile der Datei, die Sie umbenennen m??chten. Sie erhalten auf einer neuen Seite ein Eingabefeld. Geben Sie hier den neuen Dateinamen ein. Achten Sie darauf, die Dateiendung mit einzugeben. Diese wird von Ihrem Betriebssystem verwendet, um die Datei passend ??ffnen zu k??nnen. Klicken Sie auf \textbf{Weiter}, um die Datei umzubenennen. Falls Sie die Datei doch nicht umbenennen wollen, klicken Sie auf \textbf{Abbrechen}. Ung??ltige Zeichen werden durch einen Unterstrich ('_') ersetzt. Index: loncom/html/adm/help/tex/de/Portfolio_ShareFile.tex +++ loncom/html/adm/help/tex/de/Portfolio_ShareFile.tex \label{Portfolio_ShareFile} Sie k??nnen anderen Nutzern Zugriff auf Ihre Dateien freischalten. Dies erreichen Sie durch Ver??ndern des Zugriffsstatus der entsprechenden Dateien. Der Status kann f??r gesperrte und nicht gesperrte Dateien ge??ndert werden. Es gibt drei verschiedene Status: \begin{itemize} \item ??ffentlicher Zugriff: Jeder kann Ihre Datei in LON-CAPA anschauen und/oder herunterladen. \item Privater Zugriff: Nur Sie alleine k??nnen die Datei anschauen und/oder herunterladen. \item Passwortgesch??tzter Zugriff: Um die Datei anschauen und/oder herunterladen zu k??nnen, muss das von Ihnen zuvor festgelegte Passwort eingegeben werden. \end{itemize} Um den Zugriffsstatus einer Datei zu ??ndern, klicken Sie in der Zeile des Dateinamens auf \underline{Status anzeigen/??ndern}. Index: loncom/html/adm/help/tex/de/Portfolio_ShareFile_ChangeSetting.tex +++ loncom/html/adm/help/tex/de/Portfolio_ShareFile_ChangeSetting.tex \label{Portfolio_ShareFile_ChangeSetting} \textbf{??ndern der Einstellungen f??r gemeinsamen Zugriff} Falls Sie die Zugriffseinstellungen f??r eine Datei ??ndern wollen, auf die ??ffentlich zugegriffen werden darf, gehen Sie wie folgt vor: \begin{enumerate} \item ??ndern Sie das Start- bzw. Enddatum des Zugriffs auf die Datei. \item W??hlen Sie die 'Aktualisieren'-Checkbox aus. \item Klicken Sie zum Aktualisieren der Einstellungen auf \textbf{Weiter}. \end{enumerate} Index: loncom/html/adm/help/tex/de/Portfolio_ShareFile_Conditional.tex +++ loncom/html/adm/help/tex/de/Portfolio_ShareFile_Conditional.tex \label{Portfolio_ShareFile_Conditional} Sie k??nnen Dateien auch bedingungsabh??ngig mit einer bestimmten Untermenge anderer Benutzer teilen. Sie k??nnen Zugriff erteilen f??r: \begin{itemize} \item alle Benutzer einer bestimmten Dom??ne \item Benutzer, die Teilnehmer in einem bestimmten Kurs sind \item bestimmte Benutzer durch Angabe der Benutzerkennungen \end{itemize} F??r jede Datei k??nnen Sie mehrere Bedingungen festlegen. Sie k??nnen also Zugriff auf eine Kombination von mehreren Dom??nen, Kursen und/oder Benutzern erteilen. Um die Bedingungen festzulegen bzw. zu ??ndern, gehen Sie wie folgt vor: \begin{enumerate} \item Klicken Sie auf den Link \underline{Bedingungsabh??ngigen Zugriff hinzuf??gen} / \underline{Bedingungen ??ndern}. \item F??gen Sie Bedingungen hinzu (Benutzer-basiert, Dom??nen-basiert oder Kurs-basiert), indem Sie die Anzahl der hinzuzuf??genden Bedingungen an entsprechender Stelle eintragen. \item Klicken Sie auf \textbf{Weiter}. \item Abh??ngig von der gew??hlten Bedingung wird eine Seite erscheinen, die Ihnen erm??glicht, die entsprechenden Parameter dieser Bedingung einzustellen. Es gibt ein Eingabefeld zur Angabe der Dom??ne / des Kurses / der Benutzer, f??r die der Zugriff auf die Datei erm??glicht werden soll. Tragen Sie die gew??nschten Werte ein. \end{enumerate} Das Einstellen, ??ndern und Beenden des Zugriffs ist ??hnlich wie beim ??ffentlichen/passwortgesch??tzten Zugriff (\ref{Portfolio_ShareFile_SetAccess}). Index: loncom/html/adm/help/tex/de/Portfolio_ShareFile_SetAccess.tex +++ loncom/html/adm/help/tex/de/Portfolio_ShareFile_SetAccess.tex \label{Portfolio_ShareFile_SetAccess} %\textbf{Festlegen von ??ffentlichem Zugriff / passwortgesch??tztem Zugriff} Sie k??nnen ??ffentlichen/passwortgesch??tzten Zugriff wie folgt festlegen: \begin{enumerate} \item Legen Sie das Start- und Enddatum fest, wann auf Ihre Datei ??ffentlich zugegriffen werden darf. Das Enddatum muss nach dem Startdatum liegen. \item Falls Sie den ??ffentlichen/passwortgesch??tzten Zugriff unbegrenzt festlegen m??chten, w??hlen Sie \textbf{Kein Enddatum}. \item F??r einen passwortgesch??tzten Zugriff m??ssen Sie ein Passwort eingeben. Sie k??nnen das Passwort dann allen mitteilen, mit denen Sie den Zugriff auf die Datei teilen wollen. \item W??hlen Sie die Aktivierungs-Checkbox aus. \item Klicken Sie auf \textbf{Weiter}, um Ihre Dateien ??ffentlich/passwortgesch??tzt zug??nglich zu machen. \end{enumerate} Die URL zu der Datei wird Ihnen mitgeteilt. Kopieren Sie diese URL und teilen Sie sie den Personen mit, mit denen Sie den Zugriff auf die Datei teilen wollen. Index: loncom/html/adm/help/tex/de/Portfolio_ShareFile_StopAccess.tex +++ loncom/html/adm/help/tex/de/Portfolio_ShareFile_StopAccess.tex \label{Portfolio_ShareFile_StopAccess} Falls Sie den ??ffentlichen oder passwortgesch??tzten Zugriff auf eine Datei nicht mehr anbieten m??chten und somit auf den privaten Zugriff zur??cksetzen m??chten, gehen Sie wie folgt vor: \begin{enumerate} \item W??hlen Sie die 'L??schen'-Checkbox aus \item Klicken Sie auf \textbf{Weiter}, um die Einstellungen zu aktualisieren \end{enumerate} From raeburn at source.lon-capa.org Thu Feb 28 23:17:31 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 01 Mar 2013 04:17:31 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /interface domainprefs.pm /lonnet/perl lonnet.pm Message-ID: raeburn Fri Mar 1 04:17:31 2013 EDT Modified files: /loncom/interface domainprefs.pm /loncom/lonnet/perl lonnet.pm Log: - Domain configuration to specify defaults for credits earned in a course (Course defaults) for official or unofficial courses. -------------- next part -------------- Index: loncom/interface/domainprefs.pm diff -u loncom/interface/domainprefs.pm:1.191 loncom/interface/domainprefs.pm:1.192 --- loncom/interface/domainprefs.pm:1.191 Mon Feb 25 17:43:41 2013 +++ loncom/interface/domainprefs.pm Fri Mar 1 04:17:15 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.191 2013/02/25 17:43:41 raeburn Exp $ +# $Id: domainprefs.pm,v 1.192 2013/03/01 04:17:15 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -417,7 +417,8 @@ if ($phase eq 'process') { &Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles); } elsif ($phase eq 'display') { - my $js = &recaptcha_js(); + my $js = &recaptcha_js(). + &credits_js(); if ((keys(%servers) > 1) || (keys(%existing) > 0)) { my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); @@ -2372,7 +2373,8 @@ } sub radiobutton_prefs { - my ($settings,$toggles,$defaultchecked,$choices,$itemcount) = @_; + my ($settings,$toggles,$defaultchecked,$choices,$itemcount,$onclick, + $additional) = @_; return unless ((ref($toggles) eq 'ARRAY') && (ref($defaultchecked) eq 'HASH') && (ref($choices) eq 'HASH')); @@ -2398,17 +2400,22 @@ } } } + if ($onclick) { + $onclick = ' onclick="'.$onclick.'"'; + } foreach my $item (@{$toggles}) { $css_class = $itemcount%2?' class="LC_odd_row"':''; $datatable .= - ''.$choices->{$item}. + ''. + ''.$choices->{$item}. ''. ''. ' '. - ''. + $checkedoff{$item}.' value="0"'.$onclick.' />'.&mt('No').''. + ''.$additional. + ''. ''; $itemcount ++; } @@ -2417,28 +2424,31 @@ sub print_coursedefaults { my ($position,$dom,$settings,$rowtotal) = @_; - my ($css_class,$datatable); + my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked, at toggles); my $itemcount = 1; + my %choices = &Apache::lonlocal::texthash ( + canuse_pdfforms => 'Course/Community users can create/upload PDF forms', + anonsurvey_threshold => 'Responder count needed before showing submissions for anonymous surveys', + coursecredits => 'Credits can be specified for courses', + ); if ($position eq 'top') { - my (%checkedon,%checkedoff,%choices,%defaultchecked, at toggles); - %choices = - &Apache::lonlocal::texthash ( - canuse_pdfforms => 'Course/Community users can create/upload PDF forms', - ); %defaultchecked = ('canuse_pdfforms' => 'off'); - @toggles = ('canuse_pdfforms',); + @toggles = ('canuse_pdfforms'); ($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked, \%choices,$itemcount); - $$rowtotal += $itemcount; } else { $css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; - my %choices = - &Apache::lonlocal::texthash ( - anonsurvey_threshold => 'Responder count needed before showing submissions for anonymous surveys', - ); - my $currdefresponder; + my ($currdefresponder,$def_official_credits,$def_unofficial_credits); + my $currusecredits = 0; if (ref($settings) eq 'HASH') { $currdefresponder = $settings->{'anonsurvey_threshold'}; + if (ref($settings->{'coursecredits'}) eq 'HASH') { + $def_official_credits = $settings->{'coursecredits'}->{'official'}; + $def_unofficial_credits = $settings->{'coursecredits'}->{'unofficial'}; + if (($def_official_credits ne '') || ($def_unofficial_credits ne '')) { + $currusecredits = 1; + } + } } if (!$currdefresponder) { $currdefresponder = 10; @@ -2446,13 +2456,41 @@ $currdefresponder = 1; } $datatable .= - ''.$choices{'anonsurvey_threshold'}. + ''. + $choices{'anonsurvey_threshold'}. ''. ''. ''. - ''; + ''."\n"; + $itemcount ++; + my $onclick = 'toggleCredits(this.form);'; + my $display = 'none'; + if ($currusecredits) { + $display = 'block'; + } + my $additional = '
'. + ''. + &mt('Default credits for official courses [_1]', + ''). + '
'. + ''. + &mt('Default credits for unofficial courses [_1]', + ''). + '
'."\n"; + %defaultchecked = ('coursecredits' => 'off'); + @toggles = ('coursecredits'); + my $current = { + 'coursecredits' => $currusecredits, + }; + (my $table,$itemcount) = + &radiobutton_prefs($current,\@toggles,\%defaultchecked, + \%choices,$itemcount,$onclick,$additional); + $datatable .= $table; } + $$rowtotal += $itemcount; return $datatable; } @@ -7811,7 +7849,6 @@ my ($dom,%domconfig) = @_; my ($resulttext,$errors,%changes,%defaultshash); my %defaultchecked = ('canuse_pdfforms' => 'off'); - my @offon = ('off','on'); my @toggles = ('canuse_pdfforms'); $defaultshash{'coursedefaults'} = {}; @@ -7828,7 +7865,7 @@ if (($domconfig{'coursedefaults'}{$item} eq '') && ($env{'form.'.$item} eq '0')) { $changes{$item} = 1; - } elsif ($domconfig{'coursdefaults'}{$item} ne $env{'form.'.$item}) { + } elsif ($domconfig{'coursedefaults'}{$item} ne $env{'form.'.$item}) { $changes{$item} = 1; } } elsif ($defaultchecked{$item} eq 'off') { @@ -7853,14 +7890,42 @@ $changes{'anonsurvey_threshold'} = 1; } } + my $officialcreds = $env{'form.official_credits'}; + $officialcreds =~ s/^[^\d\.]//g; + my $unofficialcreds = $env{'form.unofficial_credits'}; + $unofficialcreds =~ s/^[^\d\.]//g; + if (ref($domconfig{'coursedefaults'}{'coursecredits'} ne 'HASH') && + ($env{'form.coursecredits'} eq '1')) { + $changes{'coursecredits'} = 1; + } else { + if (($domconfig{'coursedefaults'}{'coursecredits'}{'official'} ne $officialcreds) || + ($domconfig{'coursedefaults'}{'coursecredits'}{'unofficial'} ne $unofficialcreds)) { + $changes{'coursecredits'} = 1; + } + } + $defaultshash{'coursedefaults'}{'coursecredits'} = { + official => $officialcreds, + unofficial => $unofficialcreds, + } } my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash, $dom); if ($putresult eq 'ok') { + my %domdefaults; if (keys(%changes) > 0) { - if ($changes{'canuse_pdfforms'}) { - my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); - $domdefaults{'canuse_pdfforms'}=$defaultshash{'coursedefaults'}{'canuse_pdfforms'}; + if (($changes{'canuse_pdfforms'}) || ($changes{'coursecredits'})) { + %domdefaults = &Apache::lonnet::get_domain_defaults($dom); + if ($changes{'canuse_pdfforms'}) { + $domdefaults{'canuse_pdfforms'}=$defaultshash{'coursedefaults'}{'canuse_pdfforms'}; + } + if ($changes{'coursecredits'}) { + if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') { + $domdefaults{'officialcredits'} = + $defaultshash{'coursedefaults'}{'coursecredits'}{'official'}; + $domdefaults{'unofficialcredits'} = + $defaultshash{'coursedefaults'}{'coursecredits'}{'unofficial'}; + } + } my $cachetime = 24*60*60; &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); } @@ -7873,7 +7938,22 @@ $resulttext .= '
  • '.&mt('Course/Community users can create/upload PDF forms set to "off"').'
  • '; } } elsif ($item eq 'anonsurvey_threshold') { - $resulttext .= '
  • '.&mt('Responder count required for display of anonymous survey submissions set to [_1].',$defaultshash{'coursedefaults'}{'anonsurvey_threshold'}).'
  • '; + $resulttext .= '
  • '.&mt('Responder count required for display of anonymous survey submissions set to [_1].',$defaultshash{'coursedefaults'}{'anonsurvey_threshold'}).'
  • '; + } elsif ($item eq 'coursecredits') { + if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') { + if (($domdefaults{'officialcredits'} eq '') && + ($domdefaults{'unofficialcredits'} eq '')) { + $resulttext .= '
  • '.&mt('Student credits not in use for courses in this domain').'
  • '; + } else { + $resulttext .= '
  • '.&mt('Student credits can be set per course by a Domain Coordinator, with the following defaults applying:').'
      '. + '
    • '.&mt('Official courses: [_1]',$defaultshash{'coursedefaults'}{'coursecredits'}{'official'}).'
    • '. + '
    • '.&mt('Unofficial courses: [_1]',$defaultshash{'coursedefaults'}{'coursecredits'}{'unofficial'}).'
    • '. + '
    '. + '
  • '; + } + } else { + $resulttext .= '
  • '.&mt('Student credits not in use for courses in this domain').'
  • '; + } } } $resulttext .= ''; @@ -9015,6 +9095,40 @@ } +sub credits_js { + return <<"END"; + + + +END + +} + sub captcha_phrases { return &Apache::lonlocal::texthash ( priv => 'Private key', Index: loncom/lonnet/perl/lonnet.pm diff -u loncom/lonnet/perl/lonnet.pm:1.1215 loncom/lonnet/perl/lonnet.pm:1.1216 --- loncom/lonnet/perl/lonnet.pm:1.1215 Thu Feb 14 16:52:11 2013 +++ loncom/lonnet/perl/lonnet.pm Fri Mar 1 04:17:31 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.1215 2013/02/14 16:52:11 raeburn Exp $ +# $Id: lonnet.pm,v 1.1216 2013/03/01 04:17:31 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2010,6 +2010,10 @@ foreach my $item ('canuse_pdfforms') { $domdefaults{$item} = $domconfig{'coursedefaults'}{$item}; } + if (ref($domconfig{'coursedefaults'}{'coursecredits'}) eq 'HASH') { + $domdefaults{'officialcredits'} = $domconfig{'coursedefaults'}{'coursecredits'}{'official'}; + $domdefaults{'unofficialcredits'} = $domconfig{'coursedefaults'}{'coursecredits'}{'unofficial'}; + } } if (ref($domconfig{'usersessions'}) eq 'HASH') { if (ref($domconfig{'usersessions'}{'remote'}) eq 'HASH') { @@ -7441,8 +7445,8 @@ } $response=&unescape(&reply('autovalidateinstcode:'.$cdom.':'. &escape($instcode).':'.&escape($owner),$homeserver)); - my ($outcome,$description) = map { &unescape($_); } split('&',$response,2); - return ($outcome,$description); + my ($outcome,$description,$defaultcredits) = map { &unescape($_); } split('&',$response,3); + return ($outcome,$description,$defaultcredits); } sub auto_create_password { @@ -8382,7 +8386,7 @@ sub modifystudent { my ($udom,$uname,$uid,$umode,$upass,$first,$middle,$last,$gene,$usec, $end,$start,$forceid,$desiredhome,$email,$type,$locktype,$cid, - $selfenroll,$context,$inststatus)=@_; + $selfenroll,$context,$inststatus,$credits)=@_; if (!$cid) { unless ($cid=$env{'request.course.id'}) { return 'not_in_class'; @@ -8397,12 +8401,14 @@ # students environment $uid = undef if (!$forceid); $reply = &modify_student_enrollment($udom,$uname,$uid,$first,$middle,$last, - $gene,$usec,$end,$start,$type,$locktype,$cid,$selfenroll,$context); + $gene,$usec,$end,$start,$type,$locktype, + $cid,$selfenroll,$context,$credits); return $reply; } sub modify_student_enrollment { - my ($udom,$uname,$uid,$first,$middle,$last,$gene,$usec,$end,$start,$type,$locktype,$cid,$selfenroll,$context) = @_; + my ($udom,$uname,$uid,$first,$middle,$last,$gene,$usec,$end,$start,$type, + $locktype,$cid,$selfenroll,$context,$credits) = @_; my ($cdom,$cnum,$chome); if (!$cid) { unless ($cid=$env{'request.course.id'}) { @@ -8449,7 +8455,7 @@ my %old_entry = &Apache::lonnet::get('classlist',[$user],$cdom,$cnum); my $reply=cput('classlist', {$user => - join(':',$end,$start,$uid,$usec,$fullname,$type,$locktype) }, + join(':',$end,$start,$uid,$usec,$fullname,$type,$locktype,$credits) }, $cdom,$cnum); if (($reply eq 'ok') || ($reply eq 'delayed')) { &devalidate_getsection_cache($udom,$uname,$cid); @@ -12645,7 +12651,9 @@ =item B<$context> role change context (shown in User Management Logs display in a course) -=item B<$inststatus> institutional status of user - : separated string of escaped status types +=item B<$inststatus> institutional status of user - : separated string of escaped status types + +=item B<$credits> Number of credits student will earn from this class - only needs to be supplied if value needs to be different from default credits for class. =back @@ -12690,6 +12698,8 @@ =item $context +=item $credits, number of credits student will earn from this class + =back From raeburn at source.lon-capa.org Thu Feb 28 23:37:39 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 01 Mar 2013 04:37:39 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /interface loncreatecourse.pm Message-ID: raeburn Fri Mar 1 04:37:39 2013 EDT Modified files: /loncom/interface loncreatecourse.pm Log: - Default credits in an official or unofficial course can be specified when creating a single course (otherwise domain defaults will apply). Index: loncom/interface/loncreatecourse.pm diff -u loncom/interface/loncreatecourse.pm:1.146 loncom/interface/loncreatecourse.pm:1.147 --- loncom/interface/loncreatecourse.pm:1.146 Thu Oct 4 13:41:10 2012 +++ loncom/interface/loncreatecourse.pm Fri Mar 1 04:37:39 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network # Create a course # -# $Id: loncreatecourse.pm,v 1.146 2012/10/04 13:41:10 bisitz Exp $ +# $Id: loncreatecourse.pm,v 1.147 2013/03/01 04:37:39 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -93,6 +93,7 @@ $crstype = 'Course'; } my $defdom=$env{'request.role.domain'}; + my %domdefaults = &Apache::lonnet::get_domain_defaults($defdom); my %host_servers = &Apache::lonnet::get_servers($defdom,'library'); my $course_home = '' + .'
    ('.$lt{'cred'}.')' + .&Apache::lonhtmlcommon::row_closure() + ); + } } - # Table: New Course / Clone Course $r->print(&Apache::lonhtmlcommon::row_headline() .'

    '.$lt{'crco'}.'

    ' @@ -560,6 +571,8 @@ my $ccdomain=&LONCAPA::clean_domain($env{'form.ccdomain'}); my $crstype = 'Community'; my ($enrollstart,$enrollend,$startaccess,$endaccess); + my %domdefaults = + &Apache::lonnet::get_domain_defaults($env{'request.role.domain'}); if ($env{'form.phase'} eq 'coursetwo') { $crstype='Course'; @@ -635,6 +648,11 @@ firstres => $env{'form.firstres'} }; + if (($crstype eq 'Course') && + ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'})) { + $args->{'defaultcredits'} = $env{'form.defaultcredits'}; + } + # # Verify data # From raeburn at source.lon-capa.org Thu Feb 28 23:49:15 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 01 Mar 2013 04:49:15 -0000 Subject: [LON-CAPA-cvs] cvs: loncom / lond /automation batchcreatecourse.pm /enrollment localenroll.pm /interface loncommon.pm loncoursequeueadmin.pm lonrequestcourse.pm Message-ID: raeburn Fri Mar 1 04:49:15 2013 EDT Modified files: /loncom/interface lonrequestcourse.pm loncoursequeueadmin.pm loncommon.pm /loncom/enrollment localenroll.pm /loncom lond /loncom/automation batchcreatecourse.pm Log: - Course credits for a particular institutional code can be provided as a third item returned by localenroll::validate_instcode() - Course credits can be specified for an official course (or retrieved from localenroll::validate_instcode) or an unofficial course as part of a course request - Credits earned for a course can also be different for a specific student (e.g., retrieved from institutional classlist data), or specified when CC adds a student to a course via the web GUI. -------------- next part -------------- Index: loncom/interface/lonrequestcourse.pm diff -u loncom/interface/lonrequestcourse.pm:1.65 loncom/interface/lonrequestcourse.pm:1.66 --- loncom/interface/lonrequestcourse.pm:1.65 Wed Aug 15 14:37:13 2012 +++ loncom/interface/lonrequestcourse.pm Fri Mar 1 04:48:59 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network # Request a course # -# $Id: lonrequestcourse.pm,v 1.65 2012/08/15 14:37:13 raeburn Exp $ +# $Id: lonrequestcourse.pm,v 1.66 2013/03/01 04:48:59 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -134,7 +134,11 @@ my $action = $env{'form.action'}; my $state = $env{'form.state'}; my (%states,%stored); - my ($jscript,$uname,$udom,$result,$warning); + my ($jscript,$uname,$udom,$result,$warning,$showcredits,$instcredits); + my %domdefs = &Apache::lonnet::get_domain_defaults($dom); + if ($domdefs{'officialcredits'} || $domdefs{'unofficialcredits'}) { + $showcredits = 1; + } $states{'display'} = ['details']; $states{'view'} = ['pick_request','details','cancel','removal']; @@ -180,7 +184,7 @@ $trail{'enrollment'} = 'Enrollment'; } - my ($page,$crumb,$newinstcode,$codechk,$checkedcode,$description) = + my ($page,$crumb,$newinstcode,$codechk,$checkedcode,$description) = &get_breadcrumbs($dom,$action,\$state,\%states,\%trail); if ($action eq 'display') { if (($dom eq $env{'request.role.domain'}) && (&Apache::lonnet::allowed('ccc',$dom))) { @@ -269,11 +273,11 @@ } } } - my %elements = &form_elements($dom); + (my $elements,$instcredits) = &form_elements($dom,$showcredits); my $elementsref = {}; - if (ref($elements{$action}) eq 'HASH') { - if (ref($elements{$action}{$state}) eq 'HASH') { - $elementsref = $elements{$action}{$state}; + if ((ref($elements) eq 'HASH') && (ref($elements->{$action}) eq 'HASH')) { + if (ref($elements->{$action}{$state}) eq 'HASH') { + $elementsref = $elements->{$action}{$state}; } } if (($state eq 'courseinfo') && ($env{'form.clonedom'} eq '')) { @@ -307,7 +311,7 @@ &request_administration($r,$action,$state,$page,\%states,$dom, $jscript,$loaditems,$crumb,$newinstcode, $codechk,$checkedcode,$description, - \@invalidcrosslist); + $showcredits,$instcredits,\@invalidcrosslist); } } else { $r->print(&header('Course/Community Requests').$crumb. @@ -320,7 +324,7 @@ &print_main_menu($r,\%can_request,\%states,$dom,$jscript,$loaditems,$crumb,\%request_domains); } else { &request_administration($r,$action,$state,$page,\%states,$dom,$jscript, - $loaditems,$crumb); + $loaditems,$crumb,'','','','',$showcredits); } } elsif ($action eq 'display') { if ($warning ne '') { @@ -331,7 +335,8 @@ &close_popup_form()); } else { &request_administration($r,$action,$state,$page,\%states,$dom,$jscript, - $loaditems,$crumb,'','','','','',$uname,$udom); + $loaditems,$crumb,'','','','',$showcredits,'','', + $uname,$udom); } } elsif ($action eq 'log') { if ($state eq 'crstype') { @@ -495,7 +500,8 @@ } sub form_elements { - my ($dom) = @_; + my ($dom,$showcredits) = @_; + my $instcredits; my %elements = ( new => { @@ -603,6 +609,15 @@ $extras{'loncapasec_'.$i} = 'text', } } + (my $outcome,my $desc,$instcredits) = + &Apache::lonnet::auto_validate_instcode(undef,$dom,$instcode); + if ($showcredits && $instcredits eq '') { + $extras{'coursecredits'} = 'text'; + } + } elsif ($env{'form.crstype'} eq 'unofficial') { + if ($showcredits) { + $extras{'coursecredits'} = 'text'; + } } my $crosslisttotal = $env{'form.crosslisttotal'}; if ($env{'form.addcrosslist'}) { @@ -648,7 +663,7 @@ } my %personnelhash = (%{$elements{'new'}{'personnel'}},%people); %{$elements{'new'}{'personnel'}} = %personnelhash; - return %elements; + return (\%elements,$instcredits);; } sub onload_action { @@ -854,8 +869,8 @@ sub request_administration { my ($r,$action,$state,$page,$states,$dom,$jscript,$loaditems,$crumb, - $newinstcode,$codechk,$checkedcode,$description,$invalidcrosslist, - $uname,$udom) = @_; + $newinstcode,$codechk,$checkedcode,$description,$showcredits, + $instcredits,$invalidcrosslist,$uname,$udom) = @_; my $js; if (($action eq 'new') || (($action eq 'view') && ($state eq 'pick_request'))) { $js = <print(&header($title,$js.$jscript,$loaditems,$jsextra).$crumb); &print_request_form($r,$action,$state,$page,$states,$dom,$newinstcode, - $codechk,$checkedcode,$description,$invalidcrosslist); + $codechk,$checkedcode,$description,$showcredits, + $instcredits,$invalidcrosslist); } elsif ($action eq 'view') { my $jsextra; my $formname = 'requestcrs'; @@ -951,9 +967,10 @@ } $r->print('

    '.$title.'

    '."\n".$form."\n". &print_review($dom,\@codetitles,\%cat_titles,\%cat_order, - \@code_order)."\n". + \@code_order,'','','','',$instcredits)."\n". ''."\n"); - my @excluded = &get_excluded_elements($dom,$states,'new','review'); + my @excluded = &get_excluded_elements($dom,$states,'new','review', + $showcredits); push(@excluded,'origcnum'); $r->print(&Apache::lonhtmlcommon::echo_form_input(\@excluded).'
    '); my $other = 'modify'; @@ -975,7 +992,8 @@ my ($result,$output) = &print_cancel_request($dom,$env{'form.origcnum'}); $r->print('

    '.$title.'

    '."\n".$form."\n". $output); - my @excluded = &get_excluded_elements($dom,$states,'view','cancel'); + my @excluded = &get_excluded_elements($dom,$states,'view','cancel', + $showcredits); $r->print(&Apache::lonhtmlcommon::echo_form_input(\@excluded).'
    '); my %navtxt = &Apache::lonlocal::texthash ( prev => 'Back', @@ -1052,7 +1070,8 @@ $r->print(&header($title,'','','',{ 'only_body' => 1}). $crumb."\n".'

    '.$header.'

    '. &print_review($dom,\@codetitles,\%cat_titles,\%cat_order, - \@code_order,$uname,$udom)."\n".''. + \@code_order,$uname,$udom,'','',$instcredits)."\n". + ''. &close_popup_form()); } $r->print(&Apache::loncommon::end_page()); @@ -1246,7 +1265,7 @@ sub print_request_form { my ($r,$action,$state,$page,$states,$dom,$newinstcode,$codechk,$checkedcode, - $description,$invalidcrosslist) = @_; + $description,$showcredits,$instcredits,$invalidcrosslist) = @_; my $formname = 'requestcrs'; my ($next,$prev,$message,$output,$codepicker,$crstype); $prev = $states->{$action}[$page-1]; @@ -1319,7 +1338,7 @@ } $r->print(&print_enrollment_menu($formname,$instcode,$dom,\@codetitles, \%cat_titles,\%cat_order,\@code_order, - $invalidcrosslist)); + $showcredits,$instcredits,$invalidcrosslist)); } elsif ($state eq 'personnel') { $r->print(&print_personnel_menu($dom,$formname,$crstype,$invalidcrosslist)); } elsif ($state eq 'review') { @@ -1435,7 +1454,7 @@ } else { $r->print('

    '.&mt('Review course request details before submission').'

    '); } - $r->print(&print_review($dom,\@codetitles,\%cat_titles,\%cat_order,\@code_order,'','',\@disallowed,\%disallowmsg). + $r->print(&print_review($dom,\@codetitles,\%cat_titles,\%cat_order,\@code_order,'','',\@disallowed,\%disallowmsg,$instcredits). ''); if ($crstype eq 'community') { $navtxt{'next'} = &mt('Submit community request'); @@ -1448,7 +1467,7 @@ \%cat_order,\@code_order); } my ($storeresult,$result) = &print_request_outcome($dom,\@codetitles, - \@code_order); + \@code_order,$instcredits); $r->print($result); if (($storeresult eq 'ok') || ($storeresult eq 'created')) { if ($storeresult eq 'ok') { @@ -1518,7 +1537,7 @@ $r->print('

    '.$links[0].'

    '); } } - my @excluded = &get_excluded_elements($dom,$states,$action,$state); + my @excluded = &get_excluded_elements($dom,$states,$action,$state,$showcredits); if ($state eq 'personnel') { push(@excluded,'persontotal'); } @@ -1615,18 +1634,19 @@ } sub get_excluded_elements { - my ($dom,$states,$action,$state) = @_; + my ($dom,$states,$action,$state,$showcredits) = @_; my @excluded = ('counter'); - my %elements = &form_elements($dom); + my ($elements,$instcredits) = &form_elements($dom,$showcredits); if (ref($states) eq 'HASH') { if (ref($states->{$action}) eq 'ARRAY') { my @items = @{$states->{$action}}; my $numitems = scalar(@items); if ($numitems) { for (my $i=$numitems-1; $i>=0; $i--) { - if (ref($elements{$action}) eq 'HASH') { - if (ref($elements{$action}{$items[$i]}) eq 'HASH') { - foreach my $key (keys(%{$elements{$action}{$items[$i]}})) { + if ((ref($elements) eq 'HASH') && + (ref($elements->{$action}) eq 'HASH')) { + if (ref($elements->{$action}{$items[$i]}) eq 'HASH') { + foreach my $key (keys(%{$elements->{$action}{$items[$i]}})) { push(@excluded,$key); } } @@ -1644,8 +1664,9 @@ sub print_enrollment_menu { my ($formname,$instcode,$dom,$codetitles,$cat_titles,$cat_order,$code_order, - $invalidcrosslist) =@_; - my ($sections,$autoenroll,$access_dates,$output,$hasauto); + $showcredits,$instcredits,$invalidcrosslist) =@_; + my ($sections,$autoenroll,$access_dates,$output,$hasauto,$hascredits, + $creditsrow,$domdefcredits); my $starttime = time; my $endtime = time+(6*30*24*60*60); # 6 months from now, approx @@ -1657,6 +1678,12 @@ 'start' => 'Start auto-enrollment', 'end' => 'End auto-enrollment', ); + if ($showcredits) { + unless ($env{'form.crstype'} eq 'community') { + my %domdefs = &Apache::lonnet::get_domain_defaults($dom); + $domdefcredits = $domdefs{$env{'form.crstype'}.'credits'}; + } + } if ($env{'form.crstype'} eq 'official') { if (&Apache::lonnet::auto_run('',$dom)) { $output = &show_invalid_crosslists($invalidcrosslist); @@ -1731,12 +1758,29 @@ &mt('No').'
    '. &Apache::lonhtmlcommon::row_closure(1). &date_setting_table($starttime,$endtime,$formname,'enroll', - $hasauto,%enrolltitles); + $hasauto,undef,%enrolltitles); + if ($showcredits) { + if ($instcredits) { + $creditsrow = &mt('[quant,_1,credit]',$instcredits); + } else { + $creditsrow = ''. + ''; + } + $hascredits = 1; + } + } + } elsif ($env{'form.crstype'} eq 'unofficial') { + if ($showcredits) { + $creditsrow = ''. + ''; + $hascredits = 1; } } my $access_dates = &date_setting_table($starttime,$endtime,$formname,'access',$hasauto, - %accesstitles); + $hascredits,%accesstitles); $output .= &Apache::lonhtmlcommon::start_pick_box(); if ($sections) { $output .= $sections; @@ -1755,7 +1799,15 @@ $output .= &Apache::lonhtmlcommon::row_headline('Access'). '

    '.$header.'

    '. &Apache::lonhtmlcommon::row_closure(1). - $access_dates + $access_dates; + } + if ($creditsrow) { + $output .= &Apache::lonhtmlcommon::row_headline('Credits'). + '

    '.&mt('Credits earned by students').'

    '. + &Apache::lonhtmlcommon::row_closure(1). + &Apache::lonhtmlcommon::row_title(&mt('Default credits')). + $creditsrow. + &Apache::lonhtmlcommon::row_closure(1); } return '
    '.&Apache::lonhtmlcommon::start_pick_box().$output. &Apache::lonhtmlcommon::end_pick_box().'
    '; @@ -1820,7 +1872,7 @@ } sub date_setting_table { - my ($starttime,$endtime,$formname,$prefix,$hasauto,%datetitles) = @_; + my ($starttime,$endtime,$formname,$prefix,$hasauto,$hascredits,%datetitles)=@_; my ($perpetual,$table); my $startform = &Apache::lonhtmlcommon::date_setter($formname,$prefix.'start', $starttime,'','','',1,'','','',1); @@ -1831,7 +1883,9 @@ $perpetual = ' '; - $closure = '1'; + unless ($hascredits) { + $closure = '1'; + } } my %help_item = ( @@ -2553,7 +2607,7 @@ sub print_review { my ($dom,$codetitles,$cat_titles,$cat_order,$code_order,$uname,$udom, - $disallowed,$disallowmsg) = @_; + $disallowed,$disallowmsg,$instcredits) = @_; my ($types,$typename) = &Apache::loncommon::course_types(); my ($owner,$ownername,$owneremail); if ($uname eq '' || $udom eq '') { @@ -2601,6 +2655,12 @@ } } } + $inst_headers .= ''.&mt('Credits').''; + if ($instcredits) { + $inst_values .= ''.$instcredits.''; + } else { + $inst_values .= ''.$env{'form.coursecredits'}.''; + } if (&Apache::lonnet::auto_run('',$dom)) { $enrollrow_title = &mt('Enrollment'); $enroll_headers = ''.&mt('Automatic Adds').''. @@ -2670,6 +2730,9 @@ $section_values .= $xlistinfo; } $section_values .= ''; + } elsif ($env{'form.crstype'} eq 'unofficial') { + $inst_headers .= ''.&mt('Credits').''; + $inst_values .= ''.$env{'form.coursecredits'}.''; } my %ctxt = &clone_text(); @@ -3165,9 +3228,9 @@ } sub print_request_outcome { - my ($dom,$codetitles,$code_order) = @_; + my ($dom,$codetitles,$code_order,$instcredits) = @_; my ($output,$cnum,$now,$req_notifylist,$crstype,$enrollstart,$enrollend, - %sections,%crosslistings,%personnel, at baduname, at missingdom,%domconfig,); + %sections,%crosslistings,%personnel, at baduname, at missingdom,%domconfig); my $sectotal = $env{'form.sectotal'}; my $crosslisttotal = 0; $cnum = $env{'form.cnum'}; @@ -3356,6 +3419,12 @@ if (exists($env{'form.instcode'})) { $instcode = $env{'form.instcode'}; } + my $credits; + if ($instcredits) { + $credits = $instcredits; + } elsif (exists($env{'form.coursecredits'})) { + $credits = $env{'form.coursecredits'}; + } my $clonecrs = ''; my $clonedom = ''; if (($env{'form.cloning'}) && @@ -3383,6 +3452,7 @@ cdescr => $env{'form.cdescr'}, crstype => $env{'form.crstype'}, instcode => $instcode, + defaultcredits => $credits, clonedom => $clonedom, clonecrs => $clonecrs, datemode => $env{'form.datemode'}, @@ -3829,7 +3899,15 @@ $cnum => $reqinfo{'instcode'}, }; &extract_instcode($dom,'instcode',$crscode,$cnum); + (undef,undef,my $instcredits) = + &Apache::lonnet::auto_validate_instcode(undef,$dom, + $reqinfo{'instcode'}); + if ($instcredits ne $reqinfo{'defaultcredits'}) { + $env{'form.coursecredits'} = $reqinfo{'defaultcredits'}; + } } + } elsif ($reqinfo{'crstype'} eq 'unofficial') { + $env{'form.coursecredits'} = $reqinfo{'defaultcredits'}; } my @currsec; if (ref($reqinfo{'sections'}) eq 'HASH') { Index: loncom/interface/loncoursequeueadmin.pm diff -u loncom/interface/loncoursequeueadmin.pm:1.34 loncom/interface/loncoursequeueadmin.pm:1.35 --- loncom/interface/loncoursequeueadmin.pm:1.34 Fri Jan 4 01:56:35 2013 +++ loncom/interface/loncoursequeueadmin.pm Fri Mar 1 04:48:59 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network # Utilities to administer domain course requests and course self-enroll requests # -# $Id: loncoursequeueadmin.pm,v 1.34 2013/01/04 01:56:35 raeburn Exp $ +# $Id: loncoursequeueadmin.pm,v 1.35 2013/03/01 04:48:59 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1352,6 +1352,9 @@ } $batchhash{'title'} = $details->{'cdescr'}; $batchhash{'coursecode'} = $details->{'instcode'}; + if ($domdefs->{'officialcredits'} || $domdefs->{'unofficialcredits'}) { + $batchhash{'defaultcredits'} = $details->{'defaultcredits'}; + } $batchhash{'emailenc'} = $emailenc; $batchhash{'adds'} = $details->{'autoadds'}; $batchhash{'drops'} = $details->{'autodrops'}; Index: loncom/interface/loncommon.pm diff -u loncom/interface/loncommon.pm:1.1115 loncom/interface/loncommon.pm:1.1116 --- loncom/interface/loncommon.pm:1.1115 Tue Feb 19 17:30:35 2013 +++ loncom/interface/loncommon.pm Fri Mar 1 04:48:59 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.1115 2013/02/19 17:30:35 raeburn Exp $ +# $Id: loncommon.pm,v 1.1116 2013/03/01 04:48:59 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -531,7 +531,8 @@ } sub coursebrowser_javascript { - my ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_; + my ($domainfilter,$sec_element,$formname,$role_element,$crstype, + $credits_element) = @_; my $wintitle = 'Course_Browser'; if ($crstype eq 'Community') { $wintitle = 'Community_Browser'; @@ -594,8 +595,9 @@ } $id_functions ENDSTDBRW - if (($sec_element ne '') || ($role_element ne '')) { - $output .= &setsec_javascript($sec_element,$formname,$role_element); + if (($sec_element ne '') || ($role_element ne '') || ($credits_element ne '')) { + $output .= &setsec_javascript($sec_element,$formname,$role_element, + $credits_element); } $output .= ' // ]]> @@ -752,7 +754,7 @@ } sub setsec_javascript { - my ($sec_element,$formname,$role_element) = @_; + my ($sec_element,$formname,$role_element,$credits_element) = @_; my (@courserolenames, at communityrolenames,$rolestr,$courserolestr, $communityrolestr); if ($role_element ne '') { @@ -847,6 +849,14 @@ } |; } + if ($credits_element) { + $setsections .= qq| +function setCredits(defaultcredits) { + document.$formname.$credits_element.value = defaultcredits; + return; +} +|; + } return $setsections; } @@ -13188,7 +13198,7 @@ } sub commit_standardrole { - my ($udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context) = @_; + my ($udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context,$credits) = @_; my ($output,$logmsg,$linefeed); if ($context eq 'auto') { $linefeed = "\n"; @@ -13197,7 +13207,7 @@ } if ($three eq 'st') { my $result = &commit_studentrole(\$logmsg,$udom,$uname,$url,$three,$start,$end, - $one,$two,$sec,$context); + $one,$two,$sec,$context,$credits); if (($result =~ /^error/) || ($result eq 'not_in_class') || ($result eq 'unknown_course') || ($result eq 'refused')) { $output = $logmsg.' '.&mt('Error: ').$result."\n"; @@ -13228,7 +13238,8 @@ } sub commit_studentrole { - my ($logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context) = @_; + my ($logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context, + $credits) = @_; my ($result,$linefeed,$oldsecurl,$newsecurl); if ($context eq 'auto') { $linefeed = "\n"; @@ -13275,7 +13286,11 @@ } } if (($expire_role_result eq 'ok') || ($secchange == 0)) { - $modify_section_result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,'','',$cid,'',$context); + $modify_section_result = + &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef, + undef,undef,undef,$sec, + $end,$start,'','',$cid, + '',$context,$credits); if ($modify_section_result =~ /^ok/) { if ($secchange == 1) { if ($sec eq '') { @@ -13544,6 +13559,9 @@ } else { $cenv{'internal.courseowner'} = $args->{'curruser'}; } + if ($args->{'defaultcredits'}) { + $cenv{'internal.defaultcredits'} = $args->{'defaultcredits'}; + } my @badclasses = (); # Used to accumulate sections/crosslistings that did not pass classlist access check for course owner. if ($args->{'crssections'}) { $cenv{'internal.sectionnums'} = ''; Index: loncom/enrollment/localenroll.pm diff -u loncom/enrollment/localenroll.pm:1.43 loncom/enrollment/localenroll.pm:1.44 --- loncom/enrollment/localenroll.pm:1.43 Fri Oct 14 17:13:25 2011 +++ loncom/enrollment/localenroll.pm Fri Mar 1 04:49:04 2013 @@ -1,6 +1,6 @@ # functions to glue school database system into Lon-CAPA for # automated enrollment -# $Id: localenroll.pm,v 1.43 2011/10/14 17:13:25 raeburn Exp $ +# $Id: localenroll.pm,v 1.44 2013/03/01 04:49:04 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -123,6 +123,8 @@ D A12345678 + + with the following at the top of the file @@ -147,6 +149,17 @@ If dates are to included in the XML file, they should be in the format YYYY:MM:DD:HH:MM:SS (: separators required). + The tag need only be used if the credits earned by the students will + be different from the default for the course. The course default is set when the + course is created and can be modifed by a Domain Coordinator via "View or + modify a course or community" on the DC's Main Menu screen. + + A value for should be the institutional status used for students, + and should be one of the types defined in inst_usertypes(). If no status + types are defined for the domain this tag can be omitted. If Autoupdate.pl + is enabled in your domain, updates to the institutional status set here + will be updated by Autoupdate.pl, should changes occur. + If there were 10 students in fs03nop590001, 5 students in fs03nop59o601, 8 students in fs03nop590602, and 2 students in fs03ost580002, then $$reply{'43551dedcd43febmsul1'} = 25 @@ -301,8 +314,14 @@ (c) an optional institutional username for the course owner. An array is returned containing (a) the result of the check for a valid -instcode, and (b) an (optional) course description. +instcode, (b) an (optional) course description, and (c) the default credits +earned by students when completing this course. If no institutional credits +value is available, the default credits for the course can be set via the +course request form, or via XML in a batch file, of via the web form used +by the Domain Coordinator to create new courses one at a time. + A valid instcode is confirmed by returning 'valid'. + If no course description is available, '' should be set as the value of the second item in the returned array. @@ -312,7 +331,8 @@ my ($dom,$instcode,$owner) = @_; my $outcome = ''; my $description = ''; - return ($outcome,$description); + my $credits = ''; + return ($outcome,$description,$credits); } =pod Index: loncom/lond diff -u loncom/lond:1.497 loncom/lond:1.498 --- loncom/lond:1.497 Fri Oct 5 15:19:18 2012 +++ loncom/lond Fri Mar 1 04:49:10 2013 @@ -2,7 +2,7 @@ # The LearningOnline Network # lond "LON Daemon" Server (port "LOND" 5663) # -# $Id: lond,v 1.497 2012/10/05 15:19:18 raeburn Exp $ +# $Id: lond,v 1.498 2013/03/01 04:49:10 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -61,7 +61,7 @@ my $status=''; my $lastlog=''; -my $VERSION='$Revision: 1.497 $'; #' stupid emacs +my $VERSION='$Revision: 1.498 $'; #' stupid emacs my $remoteVERSION; my $currenthostid="default"; my $currentdomainid; @@ -5014,9 +5014,10 @@ my ($dom,$instcode,$owner) = split(/:/, $tail); $instcode = &unescape($instcode); $owner = &unescape($owner); - my ($outcome,$description) = + my ($outcome,$description,$credits) = &localenroll::validate_instcode($dom,$instcode,$owner); - my $result = &escape($outcome).'&'.&escape($description); + my $result = &escape($outcome).'&'.&escape($description).'&'. + &escape($credits); &Reply($client, \$result, $userinput); return 1; Index: loncom/automation/batchcreatecourse.pm diff -u loncom/automation/batchcreatecourse.pm:1.37 loncom/automation/batchcreatecourse.pm:1.38 --- loncom/automation/batchcreatecourse.pm:1.37 Mon Jul 4 09:24:46 2011 +++ loncom/automation/batchcreatecourse.pm Fri Mar 1 04:49:15 2013 @@ -1,5 +1,5 @@ # -# $Id: batchcreatecourse.pm,v 1.37 2011/07/04 09:24:46 foxr Exp $ +# $Id: batchcreatecourse.pm,v 1.38 2013/03/01 04:49:15 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -56,6 +56,7 @@ # Underwater Basket Weaving # Course # ss05ubw101 +# 3 # msul1 # msu # /res/msu/ @@ -122,6 +123,7 @@ # Spartanx # # +# # # # @@ -253,7 +255,7 @@ my $xlist = 0; my $userkey = ''; my $role = ''; - my @items = ('title','optional_id','coursecode','coursehome','reshome','nonstandard','adds','drops','topmap','firstres','clonecrs','clonedom','datemode','dateshift','showphotos','setpolicy','setcontent','setkeys','keyauth','disresdis','disablechat','openall','notify_owner','notify_dc','crstype','crsquota'); + my @items = ('title','optional_id','coursecode','defaultcredits','coursehome','reshome','nonstandard','adds','drops','topmap','firstres','clonecrs','clonedom','datemode','dateshift','showphotos','setpolicy','setcontent','setkeys','keyauth','disresdis','disablechat','openall','notify_owner','notify_dc','crstype','crsquota'); my @possroles = qw(st ad ep ta in cc co); my @dateitems = ('enrollstart','enrollend','accessstart','accessend'); my @useritems = ('autharg','authtype','firstname','generation','lastname','middlename','studentID'); @@ -494,6 +496,7 @@ course_home => $details->{'coursehome'}, nonstandard => $details->{'nonstandard'}, crscode => $details->{'coursecode'}, + defaultcredits => $details->{'defaultcredits'}, crsquota => $details->{'crsquota'}, clonecourse => $details->{'clonecrs'}, clonedomain => $details->{'clonedom'}, @@ -611,8 +614,14 @@ 'cdom' => $crsudom, 'context' => 'createcourse', 'linefeed' => $linefeed, - 'role' => $details->{'users'}{$userkey}{'roles'}[0], + 'role' => $details->{'users'}{$userkey}{'roles'}[0], }; + if ($userargs->{'role'} eq 'st') { + if (exists($details->{'users'}{$userkey}{'credits'})) { + $userargs->{'credits'} = $details->{'users'}{$userkey}{'credits'}; + $userargs->{'credits'} =~ s/[^\d\.]//g; + } + } $outcome = &LONCAPA::Enrollment::create_newuser($userargs,$logmsg,$newusermsg,$enrollcount,$addresult,$longroles,\%courseinfo,$context); # now add other roles and other sections. if ($outcome eq 'ok') { @@ -643,7 +652,12 @@ if ($usec ne '') { $url .= '/'.$usec; } - $$output .= &Apache::loncommon::commit_studentrole(\$stulogmsg,$userdom,$username,$url,$curr_role,$start,$end,$crsudom,$crsunum,$usec,$context); + my $credits; + if (exists($details->{'users'}{$userkey}{'credits'})) { + $credits = $details->{'users'}{$userkey}{'credits'}; + $credits =~ s/[^\d\.]//g; + } + $$output .= &Apache::loncommon::commit_studentrole(\$stulogmsg,$userdom,$username,$url,$curr_role,$start,$end,$crsudom,$crsunum,$usec,$context,$credits); } elsif ($curr_role eq $ccrole) { $url = '/'.$crsudom.'/'.$crsunum; my $usec = ''; @@ -684,7 +698,12 @@ if ($usec ne '') { $url .= '/'.$usec; } - $$output .= &Apache::loncommon::commit_studentrole(\$stulogmsg,$userdom,$username,$url,$curr_role,$start,$end,$crsudom,$crsunum,$usec,$context); + my $credits; + if (exists($details->{'users'}{$userkey}{'credits'})) { + $credits = $details->{'users'}{$userkey}{'credits'}; + $credits =~ s/[^\d\.]//g; + } + $$output .= &Apache::loncommon::commit_studentrole(\$stulogmsg,$userdom,$username,$url,$curr_role,$start,$end,$crsudom,$crsunum,$usec,$context,$credits); } elsif ((grep(/^\Q$curr_role\E$/, at courseroles)) || ($curr_role =~ m{^cr/$match_domain/$match_username/[^/]+$})) { if (@{$details->{'users'}{$userkey}{$curr_role}{'usec'}} > 0) { From raeburn at source.lon-capa.org Thu Feb 28 23:55:35 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 01 Mar 2013 04:55:35 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /interface loncreateuser.pm lonpickcourse.pm lonuserutils.pm Message-ID: raeburn Fri Mar 1 04:55:35 2013 EDT Modified files: /loncom/interface lonuserutils.pm loncreateuser.pm lonpickcourse.pm Log: - Credits earned for a course can be different for a specific student (specify when CC or DC enrolls a single student or a CC uploads a classlist file. -------------- next part -------------- Index: loncom/interface/lonuserutils.pm diff -u loncom/interface/lonuserutils.pm:1.149 loncom/interface/lonuserutils.pm:1.150 --- loncom/interface/lonuserutils.pm:1.149 Tue Feb 19 17:30:35 2013 +++ loncom/interface/lonuserutils.pm Fri Mar 1 04:55:34 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utility functions for managing LON-CAPA user accounts # -# $Id: lonuserutils.pm,v 1.149 2013/02/19 17:30:35 raeburn Exp $ +# $Id: lonuserutils.pm,v 1.150 2013/03/01 04:55:34 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -399,6 +399,12 @@ $param{'curr_autharg'} = $curr_authfield; } + my $showcredits; + my %domdefaults = &Apache::lonnet::get_domain_defaults($domain); + if ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'}) { + $showcredits = 1; + } + my ($setsection_call,$setsections_js); my $finish = " vf.submit();\n"; if ($mode eq 'upload') { @@ -408,13 +414,14 @@ $setsection_call = 'setSections(document.'.$param{'formname'}.",'$crstype'".');'; $setsections_js = &setsections_javascript($param{'formname'},$groupslist, - $mode,'',$crstype); + $mode,'',$crstype,$showcredits); } else { $setsection_call = "'ok'"; } } elsif ($context eq 'domain') { $setsection_call = 'setCourse()'; - $setsections_js = &dc_setcourse_js($param{'formname'},$mode,$context); + $setsections_js = &dc_setcourse_js($param{'formname'},$mode, + $context,$showcredits); } $finish = " var checkSec = $setsection_call\n". " if (checkSec == 'ok') {\n". @@ -437,13 +444,16 @@ domain => 'The optional domain field was not specified.', continue => 'Continue adding users?', ); + if ($showcredits) { + $alert{'credits'} = &mt('The optional credits field was not specified'); + } if (($mode eq 'upload') && ($context eq 'domain')) { $alert{'inststatus'} = &mt('The optional affiliation field was not specified'); } my $function_name = <<"END"; $setsections_js -function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail,foundrole,founddomain,foundinststatus) { +function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail,foundrole,founddomain,foundinststatus,foundcredits) { END my ($authnum,%can_assign) = &Apache::loncommon::get_assignable_auth($domain); my $auth_checks; @@ -500,6 +510,7 @@ return; } } +/* regexp here to check for non \d \. in credits */ END } else { $auth_checks .= (<'.&mt('Domain Level').'
    ' @@ -950,8 +984,13 @@ } else { my ($cnum,$cdom) = &get_course_identity(); my $rowtitle = &mt('section'); - my $secbox = §ion_picker($cdom,$cnum,'Any',$rowtitle, - $permission,$context,'upload',$crstype); + my $defaultcredits; + if ($showcredits) { + $defaultcredits = &get_defaultcredits(); + } + my $secbox = §ion_picker($cdom,$cnum,'Any',$rowtitle,$permission, + $context,'upload',$crstype,$showcredits, + $defaultcredits); $Str .= $secbox .&Apache::lonhtmlcommon::row_closure(); my %lt; @@ -997,6 +1036,43 @@ return; } +sub get_defaultcredits { + my ($cdom,$cnum) = @_; + + if ($cdom eq '' || $cnum eq '') { + return unless ($env{'request.course.id'}); + $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + } + return unless(($cdom =~ /^$match_domain$/) && ($cnum =~ /^$match_courseid$/)); + my ($defaultcredits,$domdefcredits); + my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom); + if ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'}) { + my $instcode = $env{'course.'.$cdom.'_'.$cnum.'.internal.coursecode'}; + if ($instcode) { + $domdefcredits = $domdefaults{'officialcredits'}; + } else { + $domdefcredits = $domdefaults{'unofficialcredits'}; + } + } else { + return; + } + + if ($env{'request.course.id'} eq $cdom.'_'.$cnum) { + $defaultcredits = $env{'course.'.$cdom.'_'.$cnum.'.internal.defaultcredits'}; + } elsif (exists($env{'course.'.$cdom.'_'.$cnum.'.internal.defaultcredits'})) { + $defaultcredits = $env{'course.'.$cdom.'_'.$cnum.'.internal.defaultcredits'}; + } else { + my %crsinfo = + &Apache::lonnet::coursedescription("$cdom/$cnum",{'one_time' => 1}); + $defaultcredits = $crsinfo{'internal.defaultcredits'}; + } + if ($defaultcredits eq '') { + $defaultcredits = $domdefcredits; + } + return $defaultcredits; +} + sub forceid_change { my ($context) = @_; my $output = @@ -1018,7 +1094,7 @@ ############################################################### ############################################################### sub print_upload_manager_form { - my ($r,$context,$permission,$crstype) = @_; + my ($r,$context,$permission,$crstype,$showcredits) = @_; my $firstLine; my $datatoken; if (!$env{'form.datatoken'}) { @@ -1051,7 +1127,9 @@ 'domain_choice' => 'scalar', 'inststatus_choice' => 'scalar', }; - my $defdom = $env{'request.role.domain'}; + if ($showcredits) { + $col_setting_names->{'credits_choice'} = 'scalar'; + } if ($context eq 'course') { &Apache::loncommon::restore_course_settings('enrollment_upload', $col_setting_names); @@ -1059,6 +1137,7 @@ &Apache::loncommon::restore_settings($context,'user_upload', $col_setting_names); } + my $defdom = $env{'request.role.domain'}; # # Determine kerberos parameters as appropriate my ($krbdef,$krbdefdom) = @@ -1084,6 +1163,10 @@ ['role',&mt('Role'), $env{'form.role_choice'}], ['domain',&mt('Domain'), $env{'form.domain_choice'}], ['inststatus',&mt('Affiliation'), $env{'form.inststatus_choice'}]); + if ($showcredits) { + push(@field, + ['credits',&mt('Student Credits'), $env{'form.credits_choice'}]); + } if ($env{'form.upfile_associate'} eq 'reverse') { &Apache::loncommon::csv_print_samples($r,\@records); $i=&Apache::loncommon::csv_print_select_table($r,\@records, @@ -1101,7 +1184,7 @@ } } &print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear, - $context,$permission,$crstype); + $context,$permission,$crstype,$showcredits); } sub setup_date_selectors { @@ -1258,7 +1341,7 @@ } sub default_role_selector { - my ($context,$checkpriv,$crstype) = @_; + my ($context,$checkpriv,$crstype,$showcredits) = @_; my %customroles; my ($options,$coursepick,$cb_jscript); if ($context ne 'author') { @@ -1270,6 +1353,7 @@ 'grs' => "Section", 'exs' => "Existing sections", 'new' => "New section", + 'crd' => "Credits", ); $options = ''; + } $cb_jscript = - &Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'},'currsec','studentform','courserole','Course/Community'); + &Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'},'currsec','studentform','courserole','Course/Community',$credit_elem); $coursepick = &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row(). ''.$courseform.''.$lt{'rol'}.''. ''.$lt{'grs'}.''. + ''.$lt{'crd'}.''. &Apache::loncommon::end_data_table_header_row(). &Apache::loncommon::start_data_table_row()."\n". ''."\n". @@ -1316,7 +1406,7 @@ ''. ''. ''. - ''. + ''.$creditsinput. &Apache::loncommon::end_data_table_row(). &Apache::loncommon::end_data_table()."\n"; } @@ -1453,7 +1543,7 @@ sub print_userlist { my ($r,$mode,$permission,$context,$formname,$totcodes,$codetitles, - $idlist,$idlist_titles) = @_; + $idlist,$idlist_titles,$showcredits) = @_; my $format = $env{'form.output'}; if (! exists($env{'form.sortby'})) { $env{'form.sortby'} = 'username'; @@ -1529,7 +1619,7 @@ $r->print(§ion_group_filter($cnum,$cdom)); } $r->print('
    '. - &column_checkboxes($context,$mode,$formname). + &column_checkboxes($context,$mode,$formname,$showcredits). '
    '); if ($env{'form.phase'} eq '') { $r->print('
    '. @@ -1543,7 +1633,7 @@ &list_submit_button(&mt('Update Display'))."\n"); } - my @cols = &infocolumns($context,$mode); + my @cols = &infocolumns($context,$mode,$showcredits); if (!@cols) { $r->print('
    '. &mt('No user information selected for display.').''. @@ -1730,10 +1820,12 @@ my $usercount; if ($env{'form.action'} eq 'modifystudent') { ($usercount) = &show_users_list($r,$context,'view',$permission, - $env{'form.Status'},\%userlist,$keylist); + $env{'form.Status'},\%userlist,$keylist,'', + $showcredits); } else { ($usercount) = &show_users_list($r,$context,$env{'form.output'}, - $permission,$env{'form.Status'},\%userlist,$keylist); + $permission,$env{'form.Status'},\%userlist, + $keylist,'',$showcredits); } if (!$usercount) { $r->print('
    ' @@ -1854,12 +1946,12 @@ } sub infocolumns { - my ($context,$mode) = @_; + my ($context,$mode,$showcredits) = @_; my @cols; if (($mode eq 'pickauthor') || ($mode eq 'autoenroll')) { - @cols = &get_cols_array($context,$mode); + @cols = &get_cols_array($context,$mode,$showcredits); } else { - my @posscols = &get_cols_array($context,$mode); + my @posscols = &get_cols_array($context,$mode,$showcredits); if ($env{'form.phase'} ne '') { my @checkedcols = &Apache::loncommon::get_env_multiple('form.showcol'); foreach my $col (@checkedcols) { @@ -1875,7 +1967,7 @@ } sub get_cols_array { - my ($context,$mode) = @_; + my ($context,$mode,$showcredits) = @_; my @cols; if ($mode eq 'pickauthor') { @cols = ('username','fullname','status','email'); @@ -1893,6 +1985,9 @@ } push(@cols,'email'); if (($context eq 'course') && ($mode ne 'autoenroll')) { + if ($showcredits) { + push(@cols,'credits'); + } push(@cols,'lastlogin','clicker'); } if (($context eq 'course') && ($mode ne 'autoenroll') && @@ -1907,8 +2002,8 @@ } sub column_checkboxes { - my ($context,$mode,$formname) = @_; - my @cols = &get_cols_array($context,$mode); + my ($context,$mode,$formname,$showcredits) = @_; + my @cols = &get_cols_array($context,$mode,$showcredits); my @showncols = &Apache::loncommon::get_env_multiple('form.showcol'); my (%disabledchk,%unchecked); if ($env{'form.phase'} eq '') { @@ -1917,6 +2012,9 @@ $disabledchk{'role'} = 1; $unchecked{'photo'} = 1; $unchecked{'clicker'} = 1; + if ($showcredits) { + $unchecked{'credits'} = 1; + } } elsif ($context eq 'domain') { $unchecked{'extent'} = 1; } @@ -2012,6 +2110,7 @@ 'end' => "end date", 'status' => "status", 'role' => "role", + 'credits' => "credits", 'type' => "enroll type/action", 'email' => "e-mail address", 'photo' => "photo", @@ -2322,6 +2421,7 @@ $index->{'extent'} = &Apache::loncoursedata::CL_EXTENT(); $index->{'photo'} = &Apache::loncoursedata::CL_PHOTO(); $index->{'thumbnail'} = &Apache::loncoursedata::CL_THUMBNAIL(); + $index->{'credits'} = &Apache::loncoursedata::CL_CREDITS(); foreach my $key (keys(%{$index})) { $keylist->[$index->{$key}] = $key; } @@ -2370,7 +2470,8 @@ } sub show_users_list { - my ($r,$context,$mode,$permission,$statusmode,$userlist,$keylist,$formname)=@_; + my ($r,$context,$mode,$permission,$statusmode,$userlist,$keylist,$formname, + $showcredits)=@_; if ($formname eq '') { $formname = 'studentform'; } @@ -2385,6 +2486,9 @@ my @sortable = ('username','domain','id','fullname','start','end','email','role'); if ($context eq 'course') { push(@sortable,('section','groups','type')); + if ($showcredits) { + push(@sortable,'credits'); + } } else { push(@sortable,'extent'); } @@ -2395,11 +2499,12 @@ $sortby = 'username'; } my $setting = $env{'form.roletype'}; - my ($cid,$cdom,$cnum,$classgroups,$crstype); + my ($cid,$cdom,$cnum,$classgroups,$crstype,$defaultcredits); if ($context eq 'course') { $cid = $env{'request.course.id'}; $crstype = &Apache::loncommon::course_type(); ($cnum,$cdom) = &get_course_identity($cid); + $defaultcredits = $env{'course.'.$cid.'.internal.defaultcredits'}; ($classgroups) = &Apache::loncoursedata::get_group_memberships( $userlist,$keylist,$cdom,$cnum); if ($mode eq 'autoenroll') { @@ -2492,7 +2597,7 @@ $r->print(< END - my @cols = &infocolumns($context,$mode); + my @cols = &infocolumns($context,$mode,$showcredits); my %coltxt = &get_column_names($context); my %acttxt = &Apache::lonlocal::texthash( 'pr' => "Proceed", @@ -2794,6 +2899,11 @@ 'gif','thumbnail'); } } + if (($role eq 'st') && ($defaultcredits)) { + if ($userlist->{$user}->[$index{'credits'}] eq '') { + $userlist->{$user}->[$index{'credits'}] = $defaultcredits; + } + } } } my %emails = &Apache::loncommon::getemails($uname,$udom); @@ -2911,7 +3021,8 @@ $checkval .= ':'.$in{'section'}; if ($role eq 'st') { $checkval .= ':'.$in{'type'}.':'. - $in{'lockedtype'}; + $in{'lockedtype'}.':'. + $in{'credits'}; } } } @@ -3159,6 +3270,7 @@ chgdates => "Change starting/ending dates", chgsec => "Change section associated with user roles", ); + # FIXME Add an option to change credits for student roles. my ($output,$options,%choices); # FIXME Disable actions for now for roletype=course in domain context if ($context eq 'domain' && $setting eq 'course') { @@ -3286,11 +3398,13 @@ } sub date_section_selector { - my ($context,$permission,$crstype) = @_; + my ($context,$permission,$crstype,$showcredits) = @_; my $callingform = $env{'form.callingform'}; my $formname = 'dateselect'; my $groupslist = &get_groupslist(); - my $sec_js = &setsections_javascript($formname,$groupslist); + my $sec_js = + &setsections_javascript($formname,$groupslist,undef,undef,$crstype, + $showcredits); my $output = <<"END"; ENDJS - } sub processpick { @@ -281,6 +282,13 @@ my $cdom = $coursedescription{'domain'}; my $cnum = $coursedescription{'num'}; my $crstype = $coursedescription{'type'}; + my %domdefs = &Apache::lonnet::get_domain_defaults($cdom); + my ($showcredits,$credits); + if (($crstype ne 'Community') && + ($domdefs{'officialcredits'} || $domdefs{'unofficialcredits'})) { + $showcredits = 1; + $credits = $coursedescription{'internal.defaultcredits'}; + } my $sec_element = 'currsec'; my $grplist_element = 'groups'; my ($sections,$groups) = @@ -291,6 +299,7 @@ my $groupslist = join(',',@{$groups}); $output = qq| |; -; } return $output; } @@ -324,9 +342,10 @@ my $ccrolechk = ' '; my $menuchk = ' checked="checked" '; $r->print( - '
    ' - .''.&mt('Action').'' - .'
    ' - .'
    ' + $r->print('
    ' + .'' + .'
    ' ); } } @@ -891,7 +910,7 @@ $ccrole = 'cc'; } if (!$onlyown) { - $r->print(&mt('Searching ...').'
     
    '); + $r->print('
    '.&mt('Searching ...').'
    '); $r->rflush(); if (($filter->{'ownerfilter'} ne '') || ($filter->{'ownerdomfilter'} ne '')) { From raeburn at source.lon-capa.org Thu Feb 28 23:58:08 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 01 Mar 2013 04:58:08 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /interface loncoursedata.pm Message-ID: raeburn Fri Mar 1 04:58:08 2013 EDT Modified files: /loncom/interface loncoursedata.pm Log: - Records in classlist.db file can contain an additional item (credits), if credits are in use in the domain, and the credits earned by the particular student are different from the course default. Index: loncom/interface/loncoursedata.pm diff -u loncom/interface/loncoursedata.pm:1.193 loncom/interface/loncoursedata.pm:1.194 --- loncom/interface/loncoursedata.pm:1.193 Mon Oct 3 13:27:17 2011 +++ loncom/interface/loncoursedata.pm Fri Mar 1 04:58:08 2013 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: loncoursedata.pm,v 1.193 2011/10/03 13:27:17 raeburn Exp $ +# $Id: loncoursedata.pm,v 1.194 2013/03/01 04:58:08 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2291,12 +2291,13 @@ sub CL_STATUS { return 7; } sub CL_TYPE { return 8; } sub CL_LOCKEDTYPE { return 9; } -sub CL_GROUP { return 10; } -sub CL_PERMANENTEMAIL { return 11; } -sub CL_ROLE { return 12; } -sub CL_EXTENT { return 13; } -sub CL_PHOTO { return 14; } -sub CL_THUMBNAIL { return 15; } +sub CL_CREDITS { return 10; } +sub CL_GROUP { return 11; } +sub CL_PERMANENTEMAIL { return 12; } +sub CL_ROLE { return 13; } +sub CL_EXTENT { return 14; } +sub CL_PHOTO { return 15; } +sub CL_THUMBNAIL { return 16; } sub get_classlist { my ($cdom,$cnum) = @_; @@ -2316,9 +2317,9 @@ } my ($sname,$sdom) = split(/:/,$student); my @Values = split(/:/,$info); - my ($end,$start,$id,$section,$fullname,$type,$lockedtype); + my ($end,$start,$id,$section,$fullname,$type,$lockedtype,$credits); if (@Values > 2) { - ($end,$start,$id,$section,$fullname,$type,$lockedtype) = @Values; + ($end,$start,$id,$section,$fullname,$type,$lockedtype,$credits) = @Values; } else { # We have to get the data ourselves ($end,$start) = @Values; $section = &Apache::lonnet::getsection($sdom,$sname,$cid); @@ -2357,11 +2358,13 @@ $status='Future'; } $classlist{$student} = - [$sdom,$sname,$end,$start,$id,$section,$fullname,$status,$type,$lockedtype]; + [$sdom,$sname,$end,$start,$id,$section,$fullname,$status,$type, + $lockedtype,$credits]; } if (wantarray()) { return (\%classlist,['domain','username','end','start','id', - 'section','fullname','status','type','lockedtype']); + 'section','fullname','status','type', + 'lockedtype','credits']); } else { return \%classlist; } @@ -3091,7 +3094,8 @@ Returns a reference to a hash which contains: keys '$sname:$sdom' - values [$sdom,$sname,$end,$start,$id,$section,$fullname,$status,$type,$lockedtype] + values [$sdom,$sname,$end,$start,$id,$section,$fullname,$status,$type, + $lockedtype,$credits] The constant values CL_SDOM, CL_SNAME, CL_END, etc. can be used as indices into the returned list to future-proof clients against From raeburn at source.lon-capa.org Fri Mar 1 00:01:26 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 01 Mar 2013 05:01:26 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /interface lonmodifycourse.pm Message-ID: raeburn Fri Mar 1 05:01:26 2013 EDT Modified files: /loncom/interface lonmodifycourse.pm Log: - DC can modify course default credits value if domain configuration set to show credits for official or unofficial courses. -------------- next part -------------- Index: loncom/interface/lonmodifycourse.pm diff -u loncom/interface/lonmodifycourse.pm:1.59 loncom/interface/lonmodifycourse.pm:1.60 --- loncom/interface/lonmodifycourse.pm:1.59 Sat Jan 15 18:24:16 2011 +++ loncom/interface/lonmodifycourse.pm Fri Mar 1 05:01:26 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # handler for DC-only modifiable course settings # -# $Id: lonmodifycourse.pm,v 1.59 2011/01/15 18:24:16 raeburn Exp $ +# $Id: lonmodifycourse.pm,v 1.60 2013/03/01 05:01:26 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -39,18 +39,22 @@ use LONCAPA; sub get_dc_settable { - my ($type) = @_; + my ($type,$cdom) = @_; if ($type eq 'Community') { return ('courseowner'); } else { - return ('courseowner','coursecode','authtype','autharg'); + my @items = ('courseowner','coursecode','authtype','autharg'); + if (&showcredits($cdom)) { + push(@items,'defaultcredits'); + } + return @items; } } sub autoenroll_keys { - my $internals = ['coursecode','courseowner','authtype','autharg','autoadds','autodrops', - 'autostart','autoend','sectionnums','crosslistings', - 'co-owners']; + my $internals = ['coursecode','courseowner','authtype','autharg','defaultcredits', + 'autoadds','autodrops','autostart','autoend','sectionnums', + 'crosslistings','co-owners']; my $accessdates = ['default_enrollment_start_date','default_enrollment_end_date']; return ($internals,$accessdates); } @@ -114,6 +118,10 @@ || $type eq "autharg" || $type eq "coursecode" || $type eq "crosslistings") { $enrollvar{$type} = $settings{$item}; + } elsif ($type eq 'defaultcredits') { + if (&showcredits($cdom)) { + $enrollvar{$type} = $settings{$item}; + } } elsif ($type eq 'courseowner') { if ($settings{$item} =~ /^[^:]+:[^:]+$/) { $enrollvar{$type} = $settings{$item}; @@ -225,7 +233,11 @@ } else { $categorytitle = 'View/Modify Course Settings'; $setquota_text = &mt('Total disk space allocated for storage of portfolio files in all groups in a course.'); - $setparams_text = 'View/Modify course owner, institutional code, and default authentication'; + if (&showcredits($dom)) { + $setparams_text = 'View/Modify course owner, institutional code, and default authentication and credits'; + } else { + $setparams_text = 'View/Modify course owner, institutional code, and default authentication'; + } $cat_text = 'View/Modify catalog settings for course'; } my $anon_text = 'Responder threshold required to display anonymous survey submissions'; @@ -300,6 +312,9 @@ } else { $menu_html .= '
  • '.&mt('Course owner (permitted to assign Course Coordinator roles in the course).').'
  • '. '
  • '.&mt("Institutional code and default authentication (both required for auto-enrollment of students from institutional datafeeds).").'
  • '; + if (&showcredits($dom)) { + $menu_html .= '
  • '.&mt('Default credits earned by student on course completion.').'
  • '; + } } $menu_html .= '
  • '.$setquota_text.'
  • '. '
  • '.$anon_text.'
  • '."\n"; @@ -357,7 +372,7 @@ } my $cctitle = &Apache::lonnet::plaintext($ccrole,$type); my $dctitle = &Apache::lonnet::plaintext('dc'); - my @modifiable_params = &get_dc_settable($type); + my @modifiable_params = &get_dc_settable($type,$cdom); my ($internals,$accessdates) = &autoenroll_keys(); my @items; if ((ref($internals) eq 'ARRAY') && (ref($accessdates) eq 'ARRAY')) { @@ -389,9 +404,13 @@ ' '.$cdesc.''. '
    '."\n". '

    '.$lt{'cose'}.'

      '. - '
    • '.&mt('Settings modifiable by a [_1] via the [_2]Automated Enrollment Manager[_3] in a course.',$cctitle,'','').'
    • '. - '
    • '.&mt('Settings modifiable by a [_1] via [_2]View/Modify course owner, institutional code, and default authentication[_3].',$dctitle,'','')."\n". - '

    '. + '
  • '.&mt('Settings modifiable by a [_1] via the [_2]Automated Enrollment Manager[_3] in a course.',$cctitle,'','').'
  • '); + if (&showcredits($cdom)) { + $r->print('
  • '.&mt('Settings modifiable by a [_1] via [_2]View/Modify course owner, institutional code, and default authentication and credits[_3].',$dctitle,'','')."\n"); + } else { + $r->print('
  • '.&mt('Settings modifiable by a [_1] via [_2]View/Modify course owner, institutional code, and default authentication[_3].',$dctitle,'','')."\n"); + } + $r->print('
  • '. '

    '.$lt{'cour'}.'

    '.$disp_table.'

    '. ''.$lt{'back'}.''."\n". &hidden_form_elements(). @@ -639,14 +658,21 @@ &Apache::loncommon::help_open_topic('Modify_Course_Instcode'). ' '.&mt('Course Code'))."\n". ''. - &Apache::lonhtmlcommon::row_closure(). - &Apache::lonhtmlcommon::row_title( - &Apache::loncommon::help_open_topic('Modify_Course_Defaultauth'). - ' '.&mt('Default Authentication method'))."\n". - $authenitems."\n". - &Apache::lonhtmlcommon::row_closure(). - &Apache::lonhtmlcommon::row_title( - &Apache::loncommon::help_open_topic('Modify_Course_Owner'). + &Apache::lonhtmlcommon::row_closure()); + if (&showcredits($cdom)) { + $r->print(&Apache::lonhtmlcommon::row_title( + &Apache::loncommon::help_open_topic('Modify_Course_Credithours'). + ' '.&mt('Credits (students)'))."\n". + ''. + &Apache::lonhtmlcommon::row_closure()); + } + $r->print(&Apache::lonhtmlcommon::row_title( + &Apache::loncommon::help_open_topic('Modify_Course_Defaultauth'). + ' '.&mt('Default Authentication method'))."\n". + $authenitems."\n". + &Apache::lonhtmlcommon::row_closure(). + &Apache::lonhtmlcommon::row_title( + &Apache::loncommon::help_open_topic('Modify_Course_Owner'). ' '.&mt('Course Owner'))."\n"); } $r->print($ownertable."\n".&Apache::lonhtmlcommon::row_closure(1). @@ -657,7 +683,7 @@ } else { $r->print('javascript:verify_message(this.form);"'); } - $r->print('value="'.$lt{'gobt'}.'" />

    '); + $r->print(' value="'.$lt{'gobt'}.'" />

    '); return; } @@ -718,12 +744,15 @@ unless ($type eq 'Community') { push(@items,('internal.coursecode','internal.authtype','internal.autharg', 'internal.sectionnums','internal.crosslistings')); + if (&showcredits($cdom)) { + push(@items,'internal.defaultcredits'); + } } my %settings = &Apache::lonnet::get('environment',\@items,$cdom,$cnum); my $description = $settings{'description'}; - my ($ccrole,$response,$chgresponse,$nochgresponse,$reply,%currattr,%newattr,%cenv,%changed, - @changes, at nochanges, at sections, at xlists, at warnings); - my @modifiable_params = &get_dc_settable($type); + my ($ccrole,$response,$chgresponse,$nochgresponse,$reply,%currattr,%newattr, + %cenv,%changed, at changes, at nochanges, at sections, at xlists, at warnings); + my @modifiable_params = &get_dc_settable($type,$cdom); foreach my $param (@modifiable_params) { $currattr{$param} = $settings{'internal.'.$param}; } @@ -742,7 +771,7 @@ $sections[0] = $settings{'internal.sectionnums'}; } } - unless ($settings{'internal.crosslistings'} eq'') { + unless ($settings{'internal.crosslistings'} eq '') { if ($settings{'internal.crosslistings'} =~ m/,/) { @xlists = split/,/,$settings{'internal.crosslistings'}; } else { @@ -781,6 +810,12 @@ $changed{'code'} = 1; } } + + if (&showcredits($cdom) && exists($env{'form.defaultcredits'})) { + $newattr{'defaultcredits'} =~ s/[^\d\.]//g; + $newattr{'defaultcredits'}=$env{'form.defaultcredits'}; + } + } if ( exists($env{'form.courseowner'}) ) { @@ -1345,7 +1380,7 @@ $phase = $env{'form.phase'}; } my $js = qq| - + |; if ($phase eq 'setparms') { - $js .= qq| - -|; + $js .= $javascript_validations; } elsif ($phase eq 'courselist') { $js .= qq| - + +function hide_searching() { + if (document.getElementById('searching')) { + document.getElementById('searching').style.display = 'none'; + } + return; +} + |; } elsif ($phase eq 'setquota') { my $invalid = &mt('The quota you entered contained invalid characters.'); my $alert = &mt('You must enter a number'); my $regexp = '/^\s*(\d+\.?\d*|\.\d+)\s*$/'; $js .= <<"ENDSCRIPT"; - + ENDSCRIPT } elsif ($phase eq 'setanon') { my $invalid = &mt('The responder threshold you entered is invalid.'); my $alert = &mt('You must enter a positive integer.'); my $regexp = ' /^\s*\d+\s*$/'; $js .= <<"ENDSCRIPT"; - + ENDSCRIPT } + my $starthash; if ($env{'form.phase'} eq 'ccrole') { $starthash = { add_entries => {'onload' => "javascript:document.ccrole.submit();"}, }; + } elsif ($phase eq 'courselist') { + $starthash = { + add_entries => {'onload' => "hide_searching();"}, + }; } $r->print(&Apache::loncommon::start_page('View/Modify Course/Community Settings', - $js,$starthash)); + &Apache::lonhtmlcommon::scripttag($js), + $starthash)); my $bread_text = "View/Modify Courses/Communities"; if ($type eq 'Community') { $bread_text = 'Community Settings'; @@ -1497,6 +1541,7 @@ 'notifylist' => 'Course Coordinators to be notified of enrollment changes', 'sectionnums' => 'Course section number:LON-CAPA section', 'crosslistings' => 'Crosslisted class:LON-CAPA section', + 'defaultcredits' => 'Credits', ); } return %longtype; @@ -1507,11 +1552,19 @@ &Apache::lonhtmlcommon::echo_form_input(['gosearch','updater','coursecode', 'prevphase','numlocalcc','courseowner','login','coursequota','intarg', 'locarg','krbarg','krbver','counter','hidefromcat','usecategory', - 'threshold'])."\n". + 'threshold','defaultcredits'])."\n". ''; return $hidden_elements; } +sub showcredits { + my ($dom) = @_; + my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); + if ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'}) { + return 1; + } +} + sub handler { my $r = shift; if ($r->header_only) { From raeburn at source.lon-capa.org Fri Mar 1 00:10:09 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 01 Mar 2013 05:10:09 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /interface lonpopulate.pm Message-ID: raeburn Fri Mar 1 05:10:09 2013 EDT Modified files: /loncom/interface lonpopulate.pm Log: - Remve debug line. Index: loncom/interface/lonpopulate.pm diff -u loncom/interface/lonpopulate.pm:1.74 loncom/interface/lonpopulate.pm:1.75 --- loncom/interface/lonpopulate.pm:1.74 Mon Feb 11 02:39:11 2013 +++ loncom/interface/lonpopulate.pm Fri Mar 1 05:10:09 2013 @@ -1,5 +1,5 @@ # automated enrollment configuration handler -# $Id: lonpopulate.pm,v 1.74 2013/02/11 02:39:11 raeburn Exp $ +# $Id: lonpopulate.pm,v 1.75 2013/03/01 05:10:09 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -254,7 +254,6 @@ '); - print STDERR "action is ||$action|| and state is ||$state||\n"; foreach my $task (@{$tasksref}) { if (($task eq $action) && ($state eq 'choose')) { $r->print(' From raeburn at source.lon-capa.org Fri Mar 1 00:21:17 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 01 Mar 2013 05:21:17 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /enrollment Autoenroll.pl Enrollment.pm /interface lonpopulate.pm Message-ID: raeburn Fri Mar 1 05:21:17 2013 EDT Modified files: /loncom/enrollment Enrollment.pm Autoenroll.pl /loncom/interface lonpopulate.pm Log: - Set institutional status when auto-enrollment adds a new LON-CAPA user. - Store credits earned for a course in classlist.db for students for whom credits are different from course default. - Credits can be part of XML record for each student in course roster retrieved from institutional data course via customized localenroll.pm -------------- next part -------------- Index: loncom/enrollment/Enrollment.pm diff -u loncom/enrollment/Enrollment.pm:1.43 loncom/enrollment/Enrollment.pm:1.44 --- loncom/enrollment/Enrollment.pm:1.43 Fri Aug 20 21:44:59 2010 +++ loncom/enrollment/Enrollment.pm Fri Mar 1 05:20:01 2013 @@ -1,5 +1,5 @@ # Automated Enrollment manager -# $Id: Enrollment.pm,v 1.43 2010/08/20 21:44:59 raeburn Exp $ +# $Id: Enrollment.pm,v 1.44 2013/03/01 05:20:01 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,7 +38,9 @@ use strict; sub update_LC { - my ($dom,$crs,$adds,$drops,$startdate,$enddate,$authtype,$autharg,$classesref,$groupref,$logmsg,$newusermsg,$context,$phototypes) = @_; + my ($dom,$crs,$adds,$drops,$startdate,$enddate,$authtype,$autharg, + $showcredits,$defaultcredits,$classesref,$groupref,$logmsg,$newusermsg, + $context,$phototypes) = @_; # Get institutional code and title of this class my %courseinfo = (); &get_courseinfo($dom,$crs,\%courseinfo); @@ -53,6 +55,7 @@ my $status=&Apache::loncoursedata::CL_STATUS; my $type=&Apache::loncoursedata::CL_TYPE; my $lockedtype=&Apache::loncoursedata::CL_LOCKEDTYPE; + my $credidx=&Apache::loncoursedata::CL_CREDITS; my @localstudents = (); my @futurestudents = (); my @activestudents = (); @@ -203,7 +206,16 @@ unless ($uname eq '') { my %uidhash=&Apache::lonnet::idrget($dom,$uname); my @stuinfo = @{$enrollinfo{$uname}}; - my $access = ''; + my ($access,$added,$inststatus); + my $credits; + if ($showcredits) { + $credits = $stuinfo[$place{'credits'}]; + $credits =~ s/[^\d\.]//g; + if ($credits eq $defaultcredits) { + undef($credits); + } + } + $inststatus = $stuinfo[$place{inststatus}]; if (grep/^$uname$/, at localstudents) { # Check for studentID changes if ( ($uidhash{$uname}) && ($uidhash{$uname} !~ /error\:/) ) { @@ -231,25 +243,31 @@ if ($usec eq '') { $showsec = &mt('none'); } - $switchresult .= &mt("Section for [_1] switched from '[_2]' to '[_3]'.",$uname,$showoldsec,$showsec).$linefeed; + $switchresult .= &mt('Section for [_1] switched from [_2] to [_3].',$uname,$showoldsec,$showsec).$linefeed; if ($context eq 'automated') { - $$logmsg .= &mt("Section switch for [_1] from '[_2]' to '[_3]'.",$uname,$showoldsec,$usec).$linefeed; + $$logmsg .= &mt('Section switch for [_1] from [_2] to [_3].',$uname,$showoldsec,$usec).$linefeed; } $switchcount ++; } - &execute_add($context,'switchtype',$uname,$dom,$auth,$authparam,$first,$middle,$last,$gene,$pid,$usec,$end,$start,$emailenc,$cid,\$addresult,\$enrollcount,$linefeed,$logmsg); + &execute_add($context,'switchtype',$uname,$dom,$auth, + $authparam,$first,$middle,$last,$gene, + $pid,$usec,$end,$start,$emailenc, + $credits,$cid,\$addresult,\$enrollcount, + $linefeed,$logmsg); + $added = 1; } - } + } # Check for section changes if ($$currlist{$uname}[$sec] eq $stuinfo[ $place{groupID} ]) { # Check for access date changes for students with access starting in the future. if ( (grep/^$uname$/, at futurestudents) && ($$currlist{$uname}[$type] eq "auto") && ($adds == 1) ) { my $datechange = &datechange_check($$currlist{$uname}[$cstart],$$currlist{$uname}[$cend],$startdate,$enddate); if ($datechange) { - my $modify_access_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context); + my $modify_access_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits); $access = &showaccess($enddate,$startdate); if ($modify_access_result =~ /^ok/) { $$logmsg .= &mt('Change in access dates for [_1].',$uname).$access.$linefeed; + $added = 1; } else { $$logmsg .= &mt('Error when attempting to change start and/or end access dates for [_1] in section: [_2] -error [_3].',$uname,$stuinfo[$place{groupID}],$modify_access_result).$linefeed; } @@ -268,15 +286,16 @@ if ($expire_role_result eq 'ok') { my $modify_section_result; if (grep/^$uname$/, at activestudents) { - $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$$currlist{$uname}[$cend],$$currlist{$uname}[$cstart],'auto','',$cid,'',$context); + $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$$currlist{$uname}[$cend],$$currlist{$uname}[$cstart],'auto','',$cid,'',$context,$credits); } else { - $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context); + $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits); $access = &showaccess($enddate,$startdate); } if ($modify_section_result =~ /^ok/) { - $switchresult .= &mt("Section for [_1] switched from old section: '[_2]' to new section: '[_3]'.",$uname,$$currlist{$uname}[$sec],$stuinfo[ $place{groupID} ]).$access.$linefeed; + $switchresult .= &mt('Section for [_1] switched from old section: [_2] to new section: [_3].',$uname,$$currlist{$uname}[$sec],$stuinfo[ $place{groupID} ]).$access.$linefeed; + $added = 1; if ($context eq 'automated') { - $$logmsg .= &mt('Section switch for [_1] from [_2] to [_3]',$uname,$$currlist{$uname}[$sec],$stuinfo[ $place{groupID} ]).$linefeed; + $$logmsg .= &mt('Section switch for [_1] from [_2] to [_3].',$uname,$$currlist{$uname}[$sec],$stuinfo[ $place{groupID} ]).$linefeed; } $switchcount ++; } else { @@ -287,6 +306,21 @@ } } } +# Check for credits changes + if (($showcredits) && + ($$currlist{$uname}[$credidx] ne $credits) && (!$added)) { + my $modify_credits_result = + &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits); + if ($modify_credits_result =~ /^ok/) { + if ($credits ne '') { + $$logmsg .= &mt('Credits change for [_1] from [_2] to [_3].',$uname,$$currlist{$uname}[$credidx],$credits).$linefeed; + } else { + $$logmsg .= &mt('Credits change for [_1] from [_2] to course default [_3].',$uname,$$currlist{$uname}[$credidx],$defaultcredits).$linefeed; + } + } else { + $$logmsg .= &mt('Error when attempting to change credits for [_1] in section: [_2] -error [_3].',$uname,$stuinfo[$place{groupID}],$modify_credits_result).$linefeed; + } + } } else { # Check for changed usernames by checking studentIDs if ( ($stuinfo[ $place{studentID} ] ne '') && (grep/^$stuinfo[ $place{studentID} ]$/, at LCids) ) { @@ -302,7 +336,7 @@ $$logmsg .= &mt('Because of this student/employee ID conflict, the new username - [_1] - has not been added to the LON-CAPA classlist',$uname).$linefeed; } } elsif ($adds == 1) { - my ($auth,$authparam,$first,$middle,$last,$gene,$usec,$end,$start,$emailaddr,$pid,$emailenc); + my ($auth,$authparam,$first,$middle,$last,$gene,$usec,$end,$start,$emailaddr,$pid,$emailenc,$credithours); &prepare_add($authtype,$autharg,$enddate,$startdate,\@stuinfo,\%place,\$dom,\$uname,\$auth,\$authparam,\$first,\$middle,\$last,\$gene,\$usec,\$end,\$start,\$emailaddr,\$pid,\$emailenc); # Check for existing account in this LON-CAPA domain for this username my $uhome=&Apache::lonnet::homeserver($uname,$dom); @@ -326,11 +360,19 @@ 'cdom' => $dom, 'context' => $context, 'linefeed' => $linefeed, - 'role' => 'st' + 'inststatus' => $inststatus, + 'role' => 'st', }; + if ($credits) { + $args->{'credits'} = $credits; + } my $outcome = &create_newuser($args,$logmsg,$newusermsg,\$enrollcount,\$addresult,\%longroles,\%courseinfo,$context); } else { - &execute_add($context,'newstudent',$uname,$dom,$auth,$authparam,$first,$middle,$last,$gene,$pid,$usec,$end,$start,$emailenc,$cid,\$addresult,\$enrollcount,$linefeed,$logmsg); + &execute_add($context,'newstudent',$uname,$dom,$auth, + $authparam,$first,$middle,$last,$gene,$pid, + $usec,$end,$start,$emailenc,$credits, + $cid,\$addresult,\$enrollcount,$linefeed, + $logmsg); } if ($courseinfo{'showphoto'}) { my ($result,$resulttype) = @@ -473,6 +515,8 @@ my $context = $args->{'context'}; my $linefeed = $args->{'linefeed'}; my $role = $args->{'role'}; + my $inststatus = $args->{'inststatus'}; + my $credits = $args->{'credits'}; my $create_passwd = 0; my $authchk = ''; my $outcome; @@ -517,7 +561,7 @@ $outcome = $result; } } else { - $outcome=&Apache::lonnet::modifystudent($udom,$uname,$pid,$auth,$authparam,$first,$middle,$last,$gene,$usec,$end,$start,'',undef,$emailaddr,'auto','',$cid,'',$called_context); + $outcome=&Apache::lonnet::modifystudent($udom,$uname,$pid,$auth,$authparam,$first,$middle,$last,$gene,$usec,$end,$start,'',undef,$emailaddr,'auto','',$cid,'',$called_context,$inststatus,$credits); } if ($outcome eq 'ok') { my $access = &showaccess($end,$start); @@ -631,9 +675,11 @@ } sub execute_add { - my ($context,$caller,$uname,$dom,$auth,$authparam,$first,$middle,$last,$gene,$pid,$usec,$end,$start,$emailenc,$cid,$addresult,$enrollcount,$linefeed,$logmsg) = @_; + my ($context,$caller,$uname,$dom,$auth,$authparam,$first,$middle,$last, + $gene,$pid,$usec,$end,$start,$emailenc,$credits,$cid,$addresult, + $enrollcount,$linefeed,$logmsg) = @_; # Get the user's information and authentication - my %userenv = &Apache::lonnet::get('environment',['firstname','middlename','lastname','generation','id','critnotification','notification','permanentemail'],$dom,$uname); + my %userenv = &Apache::lonnet::get('environment',['firstname','middlename','lastname','generation','id','critnotification','notification','permanentemail','inststatus'],$dom,$uname); my ($tmp) = keys(%userenv); if ($tmp =~ /^(con_lost|error)/i) { %userenv = (); @@ -702,7 +748,11 @@ } # Assign the role of student in the course. - my $classlist_reply = &Apache::lonnet::modify_student_enrollment($dom,$uname,$pid,$first,$middle,$last,$gene,$usec,$end,$start,'auto','',$cid,'',$context); + my $classlist_reply = + &Apache::lonnet::modify_student_enrollment($dom,$uname,$pid,$first,$middle, + $last,$gene,$usec,$end,$start, + 'auto','',$cid,'',$context, + $credits); if ($classlist_reply eq 'ok') { my $access = &showaccess($end,$start); my $showsec = $usec; @@ -765,7 +815,7 @@ my $xmlfile = $tmpdir."/tmp/".$dom."_".$crs."_".$class."_classlist.xml"; my $uname = ''; my @state; - my @items = ('autharg','authtype','email','firstname','generation','lastname','middlename','studentID'); + my @items = ('autharg','authtype','email','firstname','generation','lastname','middlename','studentID','credits','inststatus'); my $p = HTML::Parser->new ( xml_mode => 1, @@ -856,7 +906,7 @@ my ($dom,$crs,$courseinfo) = @_; my $owner; if (defined($dom) && defined($crs)) { - my %settings = &Apache::lonnet::get('environment',['internal.coursecode','internal.showphoto','description'],$dom,$crs); + my %settings = &Apache::lonnet::get('environment',['internal.coursecode','internal.showphoto','description','internal.defaultcredits'],$dom,$crs); if ( defined($settings{'internal.coursecode'}) ) { $$courseinfo{'inst_code'} = $settings{'internal.coursecode'}; } @@ -866,6 +916,9 @@ if ( defined($settings{'internal.showphoto'}) ) { $$courseinfo{'showphoto'} = $settings{'internal.showphoto'}; } + if ( defined($settings{'internal.credithours'}) ) { + $$courseinfo{'defaultcredits'} = $settings{'internal.defaultcredits'}; + } } return; } @@ -883,6 +936,8 @@ middlename => 8, startdate => 9, studentID => 10, + credits => 11, + inststatus => 12, ); return %place; } Index: loncom/enrollment/Autoenroll.pl diff -u loncom/enrollment/Autoenroll.pl:1.32 loncom/enrollment/Autoenroll.pl:1.33 --- loncom/enrollment/Autoenroll.pl:1.32 Thu Aug 19 22:36:59 2010 +++ loncom/enrollment/Autoenroll.pl Fri Mar 1 05:20:01 2013 @@ -1,7 +1,7 @@ #!/usr/bin/perl # #Automated Enrollment script -# $Id: Autoenroll.pl,v 1.32 2010/08/19 22:36:59 raeburn Exp $ +# $Id: Autoenroll.pl,v 1.33 2013/03/01 05:20:01 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -54,7 +54,7 @@ my $run_enroll = 0; my $domsettings; my %domconfig = - &Apache::lonnet::get_dom('configuration',['autoenroll'],$dom); + &Apache::lonnet::get_dom('configuration',['autoenroll','coursedefaults'],$dom); if (ref($domconfig{'autoenroll'}) eq 'HASH') { $domsettings = $domconfig{'autoenroll'}; if ($domsettings->{'run'} eq '1') { @@ -74,6 +74,14 @@ my %enrollvar = (); my %reply = (); my %LC_code = (); + my ($showcredits,$domdefcredits); + if ((ref($domconfig{'coursedefaults'}) eq 'HASH') && + (ref($domconfig{'coursedefaults'}{'coursecredits'}) eq 'HASH')) { + if ($domconfig{'coursedefaults'}{'coursecredits'}{'official'}) { + $showcredits = 1; + $domdefcredits = $domconfig{'coursedefaults'}{'coursecredits'}{'official'}; + } + } foreach my $key (sort keys %courses) { my %args = ( one_time => 1, @@ -92,7 +100,7 @@ $enrollvar{$crs}{$item} = &HTML::Entities::decode($settings{$item}); } elsif ($item eq 'default_enrollment_start_date') { $enrollvar{$crs}{startdate} = $settings{$item}; - } elsif ($item eq 'default_enrollment_end_date') { + } elsif ($item eq 'default_enrollment_end_date') { $enrollvar{$crs}{enddate} = $settings{$item}; } } @@ -148,7 +156,11 @@ if ($reply{$crs} > 0) { if ( ($enrollvar{$crs}{autostart} < $timenow) && ( ($enrollvar{$crs}{autoend} > $timenow) || ($enrollvar{$crs}{autoend} == 0) ) ) { if (($enrollvar{$crs}{autoadds} == 1) || ($enrollvar{$crs}{autodrops} == 1)) { - my ($changecount,$response) = &LONCAPA::Enrollment::update_LC($dom,$crs,$enrollvar{$crs}{autoadds},$enrollvar{$crs}{autodrops},$enrollvar{$crs}{startdate},$enrollvar{$crs}{enddate},$enrollvar{$crs}{authtype},$enrollvar{$crs}{autharg},$affiliates{$crs},$LC_code{$crs},\$logmsg,\$newusermsg,'automated'); + my $defaultcredits = $domdefcredits; + if ($enrollvar{$crs}{defaultcredits}) { + $defaultcredits = $enrollvar{$crs}{defaultcredits}; + } + my ($changecount,$response) = &LONCAPA::Enrollment::update_LC($dom,$crs,$enrollvar{$crs}{autoadds},$enrollvar{$crs}{autodrops},$enrollvar{$crs}{startdate},$enrollvar{$crs}{enddate},$enrollvar{$crs}{authtype},$enrollvar{$crs}{autharg},$showcredits,$defaultcredits,$affiliates{$crs},$LC_code{$crs},\$logmsg,\$newusermsg,'automated'); print $fh &mt('Messages start for [_1]',$crs)."\n"; print $fh "$logmsg\n"; print $fh &mt('Messages end for [_1]',$crs)."\n"; Index: loncom/interface/lonpopulate.pm diff -u loncom/interface/lonpopulate.pm:1.75 loncom/interface/lonpopulate.pm:1.76 --- loncom/interface/lonpopulate.pm:1.75 Fri Mar 1 05:10:09 2013 +++ loncom/interface/lonpopulate.pm Fri Mar 1 05:21:17 2013 @@ -1,5 +1,5 @@ # automated enrollment configuration handler -# $Id: lonpopulate.pm,v 1.75 2013/03/01 05:10:09 raeburn Exp $ +# $Id: lonpopulate.pm,v 1.76 2013/03/01 05:21:17 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2726,12 +2726,25 @@ my %settings = &Apache::lonnet::get('environment', ['internal.coursecode','internal.sectionnums','internal.crosslistings', - 'internal.authtype','internal.autharg','internal.showphoto'], + 'internal.authtype','internal.autharg','internal.showphoto','internal.defaultcredits'], $dom,$crs); my $coursecode = $settings{'internal.coursecode'}; my $authtype = $settings{'internal.authtype'}; my $autharg = $settings{'internal.autharg'}; my $showphotos = $settings{'internal.showphoto'}; + my ($showcredits,$defaultcredits); + my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); + if ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'}) { + $showcredits = 1; + $defaultcredits = $settings{'internal.defaultcredits'}; + if ($defaultcredits eq '') { + if ($coursecode ne '') { + $defaultcredits = $domdefaults{'officialcredits'}; + } else { + $defaultcredits = $domdefaults{'unofficialcredits'}; + } + } + } my ($startaccess,$endaccess) = &get_dates_from_form(); if ( exists($env{'form.updateadds'}) ) { $updateadds = $env{'form.updateadds'}; @@ -2766,7 +2779,7 @@ ": ".$outcome); } if ($reply{$crs} > 0) { - ($changecount,$response) = &LONCAPA::Enrollment::update_LC($dom,$crs,$updateadds,$updatedrops,$startaccess,$endaccess,$authtype,$autharg,\@allcourses,\%LC_code,\$logmsg,\$newusermsg,"updatenow",\%phototypes); + ($changecount,$response) = &LONCAPA::Enrollment::update_LC($dom,$crs,$updateadds,$updatedrops,$startaccess,$endaccess,$authtype,$autharg,$showcredits,$defaultcredits,\@allcourses,\%LC_code,\$logmsg,\$newusermsg,"updatenow",\%phototypes); } else { $response = &mt('There was a problem retrieving institutional class list data for the course sections and crosslisted courses which contribute enrollment to this course.').' '. &mt('No updates have been carried out, and the roster remains unchanged.'); @@ -2811,6 +2824,7 @@ my $secidx=&Apache::loncoursedata::CL_SECTION; my $typeidx=&Apache::loncoursedata::CL_TYPE; my $lockedidx=&Apache::loncoursedata::CL_LOCKEDTYPE; + my $creditsidx=&Apache::loncoursedata::CL_CREDITS; &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['chgauto','chgmanual','lockchg','unlockchg']); my @typechglist = (&Apache::loncommon::get_env_multiple('form.chgauto'), @@ -2818,7 +2832,7 @@ my @lockchglist = (&Apache::loncommon::get_env_multiple('form.lockchg'), &Apache::loncommon::get_env_multiple('form.unlockchg')); - foreach my $student (sort @typechglist) { + foreach my $student (sort(@typechglist)) { my ($uname,$udom) = split(/:/,$student); my $sdata = $classlist->{$student}; my $section = $sdata->[$secidx]; @@ -2827,6 +2841,7 @@ my $end = $sdata->[$endidx]; my $type = $sdata->[$typeidx]; my $lock = $sdata->[$lockedidx]; + my $credits = $sdata->[$creditsidx]; my $newlock = $lock; $chgtotal ++; my $newtype = 'auto'; @@ -2843,7 +2858,12 @@ } elsif ($newtype eq '') { $newlock = '1'; } - my $modreply = &Apache::lonnet::modify_student_enrollment($udom,$uname,$uid,'','','','',$section,$end,$start,$newtype,$newlock,$cid,'','chgtype'); + my $modreply = + &Apache::lonnet::modify_student_enrollment($udom,$uname,$uid,'', + '','','',$section,$end, + $start,$newtype, + $newlock,$cid,'', + 'chgtype',$credits); if ($modreply eq 'ok') { $chgok ++; $chg{$student} = &mt("Changed to $change"); @@ -2865,6 +2885,7 @@ my $end = $sdata->[$endidx]; my $type = $sdata->[$typeidx]; my $lock = $sdata->[$lockedidx]; + my $credits = $sdata->[$creditsidx]; my $newlock = 1; my $oldlockname = &mt('unlocked'); my $newlockname = &mt('locked'); @@ -2875,7 +2896,7 @@ $newlockname = &mt('unlocked'); $oldlockname = &mt('locked'); } - my $lockreply = &Apache::lonnet::modify_student_enrollment($udom,$uname,$uid,'','','','',$section,$end,$start,$type,$newlock,$cid,'','chgtype'); + my $lockreply = &Apache::lonnet::modify_student_enrollment($udom,$uname,$uid,'','','','',$section,$end,$start,$type,$newlock,$cid,'','chgtype',$credits); if ($lockreply eq 'ok') { $lockok ++; $lockchg{$student} = &mt('Changed to [_1]',$newlockname); From raeburn at source.lon-capa.org Fri Mar 1 00:53:16 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 01 Mar 2013 05:53:16 -0000 Subject: [LON-CAPA-cvs] cvs: modules /msu localenroll.pm Message-ID: raeburn Fri Mar 1 05:53:16 2013 EDT Modified files: /modules/msu localenroll.pm Log: - Customization for msu domain. - Default credits for each official course retreived from SISInfo - Student's credits included in XML record for each student in classlists retrieved from RO. Index: modules/msu/localenroll.pm diff -u modules/msu/localenroll.pm:1.62 modules/msu/localenroll.pm:1.63 --- modules/msu/localenroll.pm:1.62 Thu Sep 20 19:12:37 2012 +++ modules/msu/localenroll.pm Fri Mar 1 05:53:15 2013 @@ -1,6 +1,6 @@ # functions to glue school database system into Lon-CAPA for # automated enrollment -# $Id: localenroll.pm,v 1.62 2012/09/20 19:12:37 raeburn Exp $ +# $Id: localenroll.pm,v 1.63 2013/03/01 05:53:15 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -137,9 +137,9 @@ $sem =~tr/a-z/A-Z/; $subj =~tr/a-z/A-Z/; $crse =~tr/a-z/A-Z/; - my $sth = $dbh->prepare("SELECT Pid,Pilot_Id,Student_Name FROM LONCAPA_ClassList WHERE Term_Code = '$sem' AND Subj_Code = '$subj' AND Crse_Code = '$crse' AND Sctn_Code = '$sec' ORDER BY Student_Name"); + my $sth = $dbh->prepare("SELECT Pid,Pilot_Id,Student_Name,Sctn_Crdt_Hours FROM LONCAPA_ClassList WHERE Term_Code = '$sem' AND Subj_Code = '$subj' AND Crse_Code = '$crse' AND Sctn_Code = '$sec' ORDER BY Student_Name"); $sth->execute(); - while ( my($pid,$pilot,$name) = $sth->fetchrow_array ) { + while ( my($pid,$pilot,$name,$credits) = $sth->fetchrow_array ) { if ($pilot =~ m/^\w{2,8}$/) { $pilotcount ++; $name =~ s/^\s+//; @@ -168,6 +168,8 @@ $middle $pid + $credits + Student |; } elsif ($pilot eq '') { @@ -435,6 +437,7 @@ my ($dom,$instcode,$owner) = @_; my $outcome = ''; my $description = ''; + my $credits = 0; my %longsem = ( fs => 'Fall', ss => 'Spring', @@ -532,6 +535,24 @@ if ($@) { $outcome = "There was a problem connecting to the SIS database, so the course number could not be validated."; } + if ($outcome eq 'valid') { + my $seqid = &semyr_to_seqid($term,$sem,$yr); + eval { + my $credsth = $dbh->prepare("SELECT Start_Term_Seq_Id,End_Term_Seq_Id,Credits FROM SISCRSD WHERE Subj_Code = '$subj' AND Crse_Code = '$crse'"); + $credsth->execute(); + while (my($start_seqid,$end_seqid,$creds) = $credsth->fetchrow_array) { + $start_seqid =~ s/^0//; + $end_seqid =~ s/^0//; + if (($seqid >= $start_seqid) && + ($seqid <= $end_seqid)) { + if ($creds > $credits) { + $credits = $creds; + } + } + } + $credsth->finish; + }; + } } } if ($dbflag) { @@ -542,7 +563,10 @@ } else { $outcome = "One or more of the combination of semester, year, subject and course number you provided do not conform to the format used at MSU."; } - return ($outcome,$description); + if (!$credits) { + undef($credits); + } + return ($outcome,$description,$credits); } sub crsreq_checks { From raeburn at source.lon-capa.org Fri Mar 1 13:09:19 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 01 Mar 2013 18:09:19 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /interface coursecatalog.pm Message-ID: raeburn Fri Mar 1 18:09:20 2013 EDT Modified files: /loncom/interface coursecatalog.pm Log: - Include totals for student credit hours, in DC view when "Show full details" checked, if credits enabled for official or unofficial courses. -------------- next part -------------- Index: loncom/interface/coursecatalog.pm diff -u loncom/interface/coursecatalog.pm:1.72 loncom/interface/coursecatalog.pm:1.73 --- loncom/interface/coursecatalog.pm:1.72 Wed Jan 23 15:23:19 2013 +++ loncom/interface/coursecatalog.pm Fri Mar 1 18:09:16 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for displaying the course catalog interface # -# $Id: coursecatalog.pm,v 1.72 2013/01/23 15:23:19 raeburn Exp $ +# $Id: coursecatalog.pm,v 1.73 2013/03/01 18:09:16 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -405,8 +405,6 @@ if (($env{'form.currcat_0'} ne '') && ($env{'form.currcat_0'} ne 'instcode::0')) { $catlinks .= $crumbsymbol; - } else { - $catlinks .= ''; } } } else { @@ -740,7 +738,6 @@ } else { $wasacctext .= &mt('where students had access ...'); } - $wasacctext .= '
    '; return $wasacctext; } @@ -946,10 +943,20 @@ } $output .= ''.&mt('Self-enroll (if permitted)').''; &Apache::loncommon::end_data_table_header_row(); - my %numbers; + my (%numbers,%creditsum); + my ($showcredits,$defofficial,$defunofficial); + my %domdefaults = &Apache::lonnet::get_domain_defaults($domain); + unless ($env{'form.currcat_0'} eq 'communities::0') { + if ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'}) { + $showcredits = 1; + $defofficial = $domdefaults{'officialcredits'}; + $defunofficial = $domdefaults{'unofficialcredits'}; + } + } my %courseinfo = &build_courseinfo_hash($courses,$knownuser,$domain,$details, $usersections,\@fields,\%fieldtitles, - $wasactiveon,\%numbers); + $wasactiveon,\%numbers,\%creditsum, + $showcredits,$defofficial,$defunofficial); my %Sortby; foreach my $course (sort(keys(%{$courses}))) { if ($env{'form.sortby'} eq 'code') { @@ -992,33 +999,51 @@ 'Previous' => 'Total previous students', 'courses' => 'Total unique codes and courses without codes', 'sections' => 'Total sections', - 'xlists' => 'Total cross-listings', + 'xlists' => 'Total cross-listings', ); + if ($showcredits) { + $lt{'cr_Active'} = &mt('Total current student credit hours'); + $lt{'cr_Future'} = &mt('Total future student credit hours'); + $lt{'cr_Previous'} = &mt('Total previous student credit hours'); + } if ($env{'form.currcat_0'} eq 'communities::0') { $lt{'courses'} = &mt('Total communities'); $lt{'Active'} = &mt('Total current members'); $lt{'Future'} = &mt('Total future members'); $lt{'Previous'} = &mt('Total previous members'); - } + } + my $colspan = 8; + if ($showcredits) { + $colspan = 4; + } $output .= ''. ' '. - ''. + ''. ''; foreach my $item ('courses','sections','xlists') { $output .= ''. - ''. + ''. ''. ''."\n"; } if (@fields > 0) { foreach my $status (@fields) { $output .= ''. - ''. + ''. ''. ''."\n"; } } - $output .= '
    '.$lt{$item}.''.$lt{$item}.' '.$numbers{$item}.'
    '.$lt{$status}.''.$lt{$status}.' '.$numbers{$status}.'
    '; + $output .= ''; + if ($showcredits) { + $output .= ''; + foreach my $status (@fields) { + $output .= ''. + ''. + ''; + } + $output .= '
    '.$lt{'cr_'.$status}.' '.$creditsum{$status}.'
    '; + } } } $output .= &Apache::loncommon::end_data_table(); @@ -1027,14 +1052,14 @@ sub build_courseinfo_hash { my ($courses,$knownuser,$domain,$details,$usersections,$fields,$fieldtitles, - $wasactiveon,$numbers) = @_; + $wasactiveon,$numbers,$creditsum,$showcredits,$defofficial,$defunofficial) = @_; my %courseinfo; my $now = time; my $gettotals; if ((keys(%{$courses}) > 0) && (&user_is_dc($domain)) && ($details)) { $gettotals = 1; } - my (%uniquecodes,$nocodes),; + my (%uniquecodes,$nocodes,$defcreds); foreach my $course (keys(%{$courses})) { my $descr; if (ref($courses->{$course}) eq 'HASH') { @@ -1116,6 +1141,16 @@ $showsyllabus = $coursehash{'showsyllabus'}; } $courseinfo{$course}{'showsyllabus'} = $showsyllabus; + if ($showcredits) { + if ($coursehash{'internal.defaultcredits'}) { + $courseinfo{$course}{'defaultcredits'} = $coursehash{'internal.defaultcredits'}; + } elsif ($instcode ne '') { + $courseinfo{$course}{'defaultcredits'} = $defofficial; + } else { + $courseinfo{$course}{'defaultcredits'} = $defunofficial; + } + $defcreds = $courseinfo{$course}{'defaultcredits'}; + } if (((defined($env{'form.coursenum'}) && ($cnum eq $env{'form.coursenum'}))) || ($knownuser && ($details == 1))) { my $milestone; @@ -1136,7 +1171,7 @@ } $courseinfo{$course}{'counts'} = &count_students($cdom,$cnum,$numsec,$fields,$fieldtitles,$gettotals, - $numbers,$milestone); + $numbers,$creditsum,$showcredits,$defcreds,$milestone); if ($instcode ne '') { $courseinfo{$course}{'autoenrollment'} = &autoenroll_info(\%coursehash,$now,$seclist,$xlist_items, @@ -1201,7 +1236,8 @@ } sub count_students { - my ($cdom,$cnum,$numsec,$fieldsref,$titlesref,$getcounts,$numbers,$wasactiveon) = @_; + my ($cdom,$cnum,$numsec,$fieldsref,$titlesref,$getcounts,$numbers,$creditsum, + $showcredits,$defcreds,$wasactiveon) = @_; my $countslist = ''. &mt('[quant,_1,section,sections,No sections]',$numsec).''; my (@fields,%titles,$showexpired); @@ -1216,23 +1252,42 @@ return; } my $classlist = &Apache::loncoursedata::get_classlist($cdom,$cnum); - my %student_count = ( + my (%student_count,%credit_count); + %student_count = ( Active => 0, Future => 0, Previous => 0, - ); + ); + if ($showcredits) { + %credit_count = ( + Active => 0, + Future => 0, + Previous => 0, + ); + } my %idx; $idx{'status'} = &Apache::loncoursedata::CL_STATUS(); $idx{'end'} = &Apache::loncoursedata::CL_END(); + $idx{'credits'} = &Apache::loncoursedata::CL_CREDITS(); while (my ($student,$data) = each(%$classlist)) { my $status = $data->[$idx{'status'}]; + my $credits = $data->[$idx{'credits'}]; + if ($credits eq '') { + $credits = $defcreds; + } if ($status eq 'Expired') { if (($showexpired) && ($data->[$idx{'end'}] >= $wasactiveon)) { $student_count{'Previous'} ++; + if ($showcredits) { + $credit_count{'Previous'} += $credits; + } } } else { $student_count{$status} ++; + if ($showcredits) { + $credit_count{$status} += $credits; + } } } if (@fields) { @@ -1241,6 +1296,9 @@ $countslist .= ''.$titles{$status}.': '. $student_count{$status}.'
    '; $numbers->{$status} += $student_count{$status}; + if ($showcredits) { + $creditsum->{$status} += $credit_count{$status}; + } } } return $countslist; From raeburn at source.lon-capa.org Fri Mar 1 16:17:26 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 01 Mar 2013 21:17:26 -0000 Subject: [LON-CAPA-cvs] cvs: loncom(version_2_11_X) /interface domainprefs.pm Message-ID: raeburn Fri Mar 1 21:17:26 2013 EDT Modified files: (Branch: version_2_11_X) /loncom/interface domainprefs.pm Log: - For 2.11. - Backport 1.191, 1.192 -------------- next part -------------- Index: loncom/interface/domainprefs.pm diff -u loncom/interface/domainprefs.pm:1.160.6.15 loncom/interface/domainprefs.pm:1.160.6.16 --- loncom/interface/domainprefs.pm:1.160.6.15 Sat Feb 2 02:54:04 2013 +++ loncom/interface/domainprefs.pm Fri Mar 1 21:17:24 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.160.6.15 2013/02/02 02:54:04 raeburn Exp $ +# $Id: domainprefs.pm,v 1.160.6.16 2013/03/01 21:17:24 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -210,13 +210,13 @@ 'quotas','autoenroll','autoupdate','autocreate', 'directorysrch','usercreation','usermodification', 'contacts','defaults','scantron','coursecategories', - 'serverstatuses','requestcourses','usersessions', - 'loadbalancing','requestauthor'],$dom); + 'serverstatuses','requestcourses','coursedefaults', + 'usersessions','loadbalancing','requestauthor'],$dom); my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll', 'autoupdate','autocreate','directorysrch','contacts', 'usercreation','usermodification','scantron', 'requestcourses','requestauthor','coursecategories', - 'serverstatuses','usersessions'); + 'serverstatuses','coursedefaults','usersessions'); my %existing; if (ref($domconfig{'loadbalancing'}) eq 'HASH') { %existing = %{$domconfig{'loadbalancing'}}; @@ -353,6 +353,12 @@ col3 => 'Specific IPs', }], }, + 'coursedefaults' => + {text => 'Course/Community defaults', + help => 'Domain_Configuration_Course_Defaults', + header => [{col1 => 'Defaults which can be overridden for each course by a DC', + col2 => 'Value',},], + }, 'usersessions' => {text => 'User session hosting/offloading', help => 'Domain_Configuration_User_Sessions', @@ -395,7 +401,8 @@ if ($phase eq 'process') { &Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles); } elsif ($phase eq 'display') { - my $js = &recaptcha_js(); + my $js = &recaptcha_js(). + &credits_js(); if ((keys(%servers) > 1) || (keys(%existing) > 0)) { my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); @@ -513,6 +520,8 @@ $output = &modify_quotas($dom,$action,%domconfig); } elsif ($action eq 'requestauthor') { $output = &modify_quotas($dom,$action,%domconfig); + } elsif ($action eq 'coursedefaults') { + $output = &modify_coursedefaults($dom,%domconfig); } elsif ($action eq 'usersessions') { $output = &modify_usersessions($dom,%domconfig); } elsif ($action eq 'loadbalancing') { @@ -671,8 +680,6 @@ '.&mt($item->{'header'}->[2]->{'col2'}).' '. &print_usersessions('bottom',$dom,$settings,\$rowtotal); $rowtotal ++; - } elsif ($action eq 'coursedefaults') { - $output .= &print_coursedefaults('bottom',$dom,$settings,\$rowtotal); } elsif ($action eq 'rolecolors') { $output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).' @@ -769,6 +776,8 @@ $output .= &print_helpsettings($dom,$confname,$settings,\$rowtotal); } elsif ($action eq 'loadbalancing') { $output .= &print_loadbalancing($dom,$settings,\$rowtotal); + } elsif ($action eq 'coursedefaults') { + $output .= &print_coursedefaults('bottom',$dom,$settings,\$rowtotal); } } $output .= ' @@ -1898,35 +1907,16 @@ sub print_requestmail { my ($dom,$action,$settings,$rowtotal) = @_; - my ($now,$datatable,%dompersonnel, at domcoord, at currapproval,$rows); + my ($now,$datatable,%currapp,$rows); $now = time; - $rows = 0; - %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc'],$now,$now); - foreach my $server (keys(%dompersonnel)) { - foreach my $user (sort(keys(%{$dompersonnel{$server}}))) { - my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user); - if (!grep(/^$uname:$udom$/, at domcoord)) { - push(@domcoord,$uname.':'.$udom); - } - } - } if (ref($settings) eq 'HASH') { if (ref($settings->{'notify'}) eq 'HASH') { if ($settings->{'notify'}{'approval'} ne '') { - @currapproval = split(',',$settings->{'notify'}{'approval'}); - } - } - } - if (@currapproval) { - foreach my $dc (@currapproval) { - unless (grep(/^\Q$dc\E$/, at domcoord)) { - push(@domcoord,$dc); + map {$currapp{$_}=1;} split(/,/,$settings->{'notify'}{'approval'}); } } } - @domcoord = sort(@domcoord); - my $numinrow = 4; - my $numdc = @domcoord; + my $numinrow = 2; my $css_class = 'class="LC_odd_row"'; my $text; if ($action eq 'requestcourses') { @@ -1937,42 +1927,12 @@ $datatable = ''. ' '.$text.''. ' '; - if (@domcoord > 0) { - $datatable .= ''; - for (my $i=0; $i<$numdc; $i++) { - my $rem = $i%($numinrow); - if ($rem == 0) { - if ($i > 0) { - $datatable .= ''; - } - $datatable .= ''; - $rows ++; - } - my $check = ' '; - if (grep(/^\Q$domcoord[$i]\E$/, at currapproval)) { - $check = ' checked="checked" '; - } - my ($uname,$udom) = split(':',$domcoord[$i]); - my $fullname = &Apache::loncommon::plainname($uname,$udom); - if ($i == $numdc-1) { - my $colsleft = $numinrow-$rem; - if ($colsleft > 1) { - $datatable .= ''; - } - $datatable .= '
    '; - } else { - $datatable .= ''; - } - } else { - $datatable .= ''; - } - $datatable .= '
    '; + my ($numdc,$table,$rows) = &active_dc_picker($dom,$numinrow,'checkbox', + 'reqapprovalnotify',%currapp); + if ($numdc > 0) { + $datatable .= $table; } else { $datatable .= &mt('There are no active Domain Coordinators'); - $rows ++; } $datatable .=''; $$rowtotal += $rows; @@ -2127,8 +2087,7 @@ sub print_autocreate { my ($dom,$settings,$rowtotal) = @_; - my (%createon,%createoff); - my $curr_dc; + my (%createon,%createoff,%currhash); my @types = ('xml','req'); if (ref($settings) eq 'HASH') { foreach my $item (@types) { @@ -2141,7 +2100,9 @@ } } } - $curr_dc = $settings->{'xmldc'}; + if ($settings->{'xmldc'} ne '') { + $currhash{$settings->{'xmldc'}} = 1; + } } else { foreach my $item (@types) { $createoff{$item} = ' checked="checked" '; @@ -2149,6 +2110,7 @@ } } $$rowtotal += 2; + my $numinrow = 2; my $datatable=''. ''.&mt('Create pending official courses from XML files').''. ' '. ''; - my ($numdc,$dctable) = &active_dc_picker($dom,$curr_dc); + my ($numdc,$dctable,$rows) = &active_dc_picker($dom,$numinrow,'radio', + 'autocreate_xmldc',%currhash); if ($numdc > 1) { $datatable .= ''. &mt('Course creation processed as: (choose Dom. Coord.)'). ''.$dctable.''; - $$rowtotal ++ ; } else { $datatable .= $dctable.''; } + $$rowtotal += $rows; return $datatable; } @@ -2390,7 +2353,8 @@ } sub radiobutton_prefs { - my ($settings,$toggles,$defaultchecked,$choices,$itemcount) = @_; + my ($settings,$toggles,$defaultchecked,$choices,$itemcount,$onclick, + $additional) = @_; return unless ((ref($toggles) eq 'ARRAY') && (ref($defaultchecked) eq 'HASH') && (ref($choices) eq 'HASH')); @@ -2416,17 +2380,22 @@ } } } + if ($onclick) { + $onclick = ' onclick="'.$onclick.'"'; + } foreach my $item (@{$toggles}) { $css_class = $itemcount%2?' class="LC_odd_row"':''; $datatable .= - ''.$choices->{$item}. + ''. + ''.$choices->{$item}. ''. ''. ' '. - ''. + $checkedoff{$item}.' value="0"'.$onclick.' />'.&mt('No').''. + ''.$additional. + ''. ''; $itemcount ++; } @@ -2435,28 +2404,31 @@ sub print_coursedefaults { my ($position,$dom,$settings,$rowtotal) = @_; - my ($css_class,$datatable); + my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked, at toggles); my $itemcount = 1; + my %choices = &Apache::lonlocal::texthash ( + canuse_pdfforms => 'Course/Community users can create/upload PDF forms', + anonsurvey_threshold => 'Responder count needed before showing submissions for anonymous surveys', + coursecredits => 'Credits can be specified for courses', + ); if ($position eq 'top') { - my (%checkedon,%checkedoff,%choices,%defaultchecked, at toggles); - %choices = - &Apache::lonlocal::texthash ( - canuse_pdfforms => 'Course/Community users can create/upload PDF forms', - ); %defaultchecked = ('canuse_pdfforms' => 'off'); - @toggles = ('canuse_pdfforms',); + @toggles = ('canuse_pdfforms'); ($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked, \%choices,$itemcount); - $$rowtotal += $itemcount; } else { $css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; - my %choices = - &Apache::lonlocal::texthash ( - anonsurvey_threshold => 'Responder count needed before showing submissions for anonymous surveys', - ); - my $currdefresponder; + my ($currdefresponder,$def_official_credits,$def_unofficial_credits); + my $currusecredits = 0; if (ref($settings) eq 'HASH') { $currdefresponder = $settings->{'anonsurvey_threshold'}; + if (ref($settings->{'coursecredits'}) eq 'HASH') { + $def_official_credits = $settings->{'coursecredits'}->{'official'}; + $def_unofficial_credits = $settings->{'coursecredits'}->{'unofficial'}; + if (($def_official_credits ne '') || ($def_unofficial_credits ne '')) { + $currusecredits = 1; + } + } } if (!$currdefresponder) { $currdefresponder = 10; @@ -2464,13 +2436,41 @@ $currdefresponder = 1; } $datatable .= - ''.$choices{'anonsurvey_threshold'}. + ''. + $choices{'anonsurvey_threshold'}. ''. ''. ''. - ''; + ''."\n"; + $itemcount ++; + my $onclick = 'toggleCredits(this.form);'; + my $display = 'none'; + if ($currusecredits) { + $display = 'block'; + } + my $additional = '
    '. + ''. + &mt('Default credits for official courses [_1]', + ''). + '
    '. + ''. + &mt('Default credits for unofficial courses [_1]', + ''). + '
    '."\n"; + %defaultchecked = ('coursecredits' => 'off'); + @toggles = ('coursecredits'); + my $current = { + 'coursecredits' => $currusecredits, + }; + (my $table,$itemcount) = + &radiobutton_prefs($current,\@toggles,\%defaultchecked, + \%choices,$itemcount,$onclick,$additional); + $datatable .= $table; } + $$rowtotal += $itemcount; return $datatable; } @@ -7829,7 +7829,6 @@ my ($dom,%domconfig) = @_; my ($resulttext,$errors,%changes,%defaultshash); my %defaultchecked = ('canuse_pdfforms' => 'off'); - my @offon = ('off','on'); my @toggles = ('canuse_pdfforms'); $defaultshash{'coursedefaults'} = {}; @@ -7846,7 +7845,7 @@ if (($domconfig{'coursedefaults'}{$item} eq '') && ($env{'form.'.$item} eq '0')) { $changes{$item} = 1; - } elsif ($domconfig{'coursdefaults'}{$item} ne $env{'form.'.$item}) { + } elsif ($domconfig{'coursedefaults'}{$item} ne $env{'form.'.$item}) { $changes{$item} = 1; } } elsif ($defaultchecked{$item} eq 'off') { @@ -7871,14 +7870,42 @@ $changes{'anonsurvey_threshold'} = 1; } } + my $officialcreds = $env{'form.official_credits'}; + $officialcreds =~ s/^[^\d\.]//g; + my $unofficialcreds = $env{'form.unofficial_credits'}; + $unofficialcreds =~ s/^[^\d\.]//g; + if (ref($domconfig{'coursedefaults'}{'coursecredits'} ne 'HASH') && + ($env{'form.coursecredits'} eq '1')) { + $changes{'coursecredits'} = 1; + } else { + if (($domconfig{'coursedefaults'}{'coursecredits'}{'official'} ne $officialcreds) || + ($domconfig{'coursedefaults'}{'coursecredits'}{'unofficial'} ne $unofficialcreds)) { + $changes{'coursecredits'} = 1; + } + } + $defaultshash{'coursedefaults'}{'coursecredits'} = { + official => $officialcreds, + unofficial => $unofficialcreds, + } } my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash, $dom); if ($putresult eq 'ok') { + my %domdefaults; if (keys(%changes) > 0) { - if ($changes{'canuse_pdfforms'}) { - my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); - $domdefaults{'canuse_pdfforms'}=$defaultshash{'coursedefaults'}{'canuse_pdfforms'}; + if (($changes{'canuse_pdfforms'}) || ($changes{'coursecredits'})) { + %domdefaults = &Apache::lonnet::get_domain_defaults($dom); + if ($changes{'canuse_pdfforms'}) { + $domdefaults{'canuse_pdfforms'}=$defaultshash{'coursedefaults'}{'canuse_pdfforms'}; + } + if ($changes{'coursecredits'}) { + if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') { + $domdefaults{'officialcredits'} = + $defaultshash{'coursedefaults'}{'coursecredits'}{'official'}; + $domdefaults{'unofficialcredits'} = + $defaultshash{'coursedefaults'}{'coursecredits'}{'unofficial'}; + } + } my $cachetime = 24*60*60; &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); } @@ -7892,6 +7919,21 @@ } } elsif ($item eq 'anonsurvey_threshold') { $resulttext .= '
  • '.&mt('Responder count required for display of anonymous survey submissions set to [_1].',$defaultshash{'coursedefaults'}{'anonsurvey_threshold'}).'
  • '; + } elsif ($item eq 'coursecredits') { + if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') { + if (($domdefaults{'officialcredits'} eq '') && + ($domdefaults{'unofficialcredits'} eq '')) { + $resulttext .= '
  • '.&mt('Student credits not in use for courses in this domain').'
  • '; + } else { + $resulttext .= '
  • '.&mt('Student credits can be set per course by a Domain Coordinator, with the following defaults applying:').'
      '. + '
    • '.&mt('Official courses: [_1]',$defaultshash{'coursedefaults'}{'coursecredits'}{'official'}).'
    • '. + '
    • '.&mt('Unofficial courses: [_1]',$defaultshash{'coursedefaults'}{'coursecredits'}{'unofficial'}).'
    • '. + '
    '. + '
  • '; + } + } else { + $resulttext .= '
  • '.&mt('Student credits not in use for courses in this domain').'
  • '; + } } } $resulttext .= ''; @@ -8416,73 +8458,94 @@ sub get_active_dcs { my ($dom) = @_; - my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc']); + my $now = time; + my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc'],$now,$now); my %domcoords; my $numdcs = 0; - my $now = time; foreach my $server (keys(%dompersonnel)) { foreach my $user (sort(keys(%{$dompersonnel{$server}}))) { my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user); - my ($end,$start) = split(':',$dompersonnel{$server}{$user}); - if (($end eq '') || ($end == 0) || ($end > $now)) { - if ($start <= $now) { - $domcoords{$uname.':'.$udom} = $dompersonnel{$server}{$user}; - } - } + $domcoords{$uname.':'.$udom} = $dompersonnel{$server}{$user}; } } return %domcoords; } sub active_dc_picker { - my ($dom,$curr_dc) = @_; + my ($dom,$numinrow,$inputtype,$name,%currhash) = @_; my %domcoords = &get_active_dcs($dom); - my @dcs = sort(keys(%domcoords)); - my $numdcs = scalar(@dcs); - my $datatable; - my $numinrow = 2; + my @domcoord = keys(%domcoords); + if (keys(%currhash)) { + foreach my $dc (keys(%currhash)) { + unless (exists($domcoords{$dc})) { + push(@domcoord,$dc); + } + } + } + @domcoord = sort(@domcoord); + my $numdcs = scalar(@domcoord); + my $rows = 0; + my $table; if ($numdcs > 1) { - $datatable = ''; - for (my $i=0; $i<@dcs; $i++) { + $table = '
    '; + for (my $i=0; $i<@domcoord; $i++) { my $rem = $i%($numinrow); if ($rem == 0) { if ($i > 0) { - $datatable .= ''; + $table .= ''; } - $datatable .= ''; + $table .= ''; + $rows ++; } - my $check = ' '; - if ($curr_dc eq '') { - if (!$i) { - $check = ' checked="checked" '; + my $check = ''; + if ($inputtype eq 'radio') { + if (keys(%currhash) == 0) { + if (!$i) { + $check = ' checked="checked"'; + } + } elsif (exists($currhash{$domcoord[$i]})) { + $check = ' checked="checked"'; + } + } else { + if (exists($currhash{$domcoord[$i]})) { + $check = ' checked="checked"'; } - } elsif ($dcs[$i] eq $curr_dc) { - $check = ' checked="checked" '; } - if ($i == @dcs - 1) { + if ($i == @domcoord - 1) { my $colsleft = $numinrow - $rem; if ($colsleft > 1) { - $datatable .= ''; } - my ($dcname,$dcdom) = split(':',$dcs[$i]); - $datatable .= ''; } - $datatable .= '
    '; + $table .= ''; } else { - $datatable .= ''; + $table .= ''; } } else { - $datatable .= ''; + $table .= ''; + } + my ($dcname,$dcdom) = split(':',$domcoord[$i]); + my $user = &Apache::loncommon::plainname($dcname,$dcdom); + $table .= '
    '; - } elsif (@dcs) { - $datatable .= ''; + $table .= ''; + } elsif ($numdcs == 1) { + if ($inputtype eq 'radio') { + $table .= ''; + } else { + my $check; + if (exists($currhash{$domcoord[0]})) { + $check = ' checked="checked"'; + } + $table .= ''; + $rows ++; + } } - return ($numdcs,$datatable); + return ($numdcs,$table,$rows); } sub usersession_titles { @@ -9011,6 +9074,40 @@ } +sub credits_js { + return <<"END"; + + + +END + +} + sub captcha_phrases { return &Apache::lonlocal::texthash ( priv => 'Private key', From raeburn at source.lon-capa.org Fri Mar 1 17:01:13 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 01 Mar 2013 22:01:13 -0000 Subject: [LON-CAPA-cvs] cvs: loncom(version_2_11_X) /interface loncommon.pm Message-ID: raeburn Fri Mar 1 22:01:13 2013 EDT Modified files: (Branch: version_2_11_X) /loncom/interface loncommon.pm Log: - For 2.11. - Backport 1.1115, 1.1116. Index: loncom/interface/loncommon.pm diff -u loncom/interface/loncommon.pm:1.1075.2.30 loncom/interface/loncommon.pm:1.1075.2.31 --- loncom/interface/loncommon.pm:1.1075.2.30 Mon Jan 28 15:52:51 2013 +++ loncom/interface/loncommon.pm Fri Mar 1 22:01:08 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.1075.2.30 2013/01/28 15:52:51 raeburn Exp $ +# $Id: loncommon.pm,v 1.1075.2.31 2013/03/01 22:01:08 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -528,7 +528,8 @@ } sub coursebrowser_javascript { - my ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_; + my ($domainfilter,$sec_element,$formname,$role_element,$crstype, + $credits_element) = @_; my $wintitle = 'Course_Browser'; if ($crstype eq 'Community') { $wintitle = 'Community_Browser'; @@ -591,8 +592,9 @@ } $id_functions ENDSTDBRW - if (($sec_element ne '') || ($role_element ne '')) { - $output .= &setsec_javascript($sec_element,$formname,$role_element); + if (($sec_element ne '') || ($role_element ne '') || ($credits_element ne '')) { + $output .= &setsec_javascript($sec_element,$formname,$role_element, + $credits_element); } $output .= ' // ]]> @@ -749,7 +751,7 @@ } sub setsec_javascript { - my ($sec_element,$formname,$role_element) = @_; + my ($sec_element,$formname,$role_element,$credits_element) = @_; my (@courserolenames, at communityrolenames,$rolestr,$courserolestr, $communityrolestr); if ($role_element ne '') { @@ -844,6 +846,14 @@ } |; } + if ($credits_element) { + $setsections .= qq| +function setCredits(defaultcredits) { + document.$formname.$credits_element.value = defaultcredits; + return; +} +|; + } return $setsections; } @@ -1029,6 +1039,12 @@ =item * $menuorder, the order of values in the first menu +=item * $onchangefirst, additional javascript call to execute for an onchange + event for the first tag + =back Below is an example of such a hash. Only the 'text', 'default', and @@ -1082,6 +1098,8 @@ $secondselectname, $hashref, $menuorder, + $onchangefirst, + $onchangesecond ) = @_; my $second = "document.$formname.$secondselectname"; my $first = "document.$formname.$firstselectname"; @@ -1138,7 +1156,7 @@ END # output the initial values for the selection lists - $result .= "\n"; my @order = sort(keys(%{$hashref})); if (ref($menuorder) eq 'ARRAY') { @order = @{$menuorder}; @@ -1151,7 +1169,11 @@ $result .= "\n"; my %select2 = %{$hashref->{$firstdefault}->{'select2'}}; $result .= $middletext; - $result .= "{$firstdefault}->{'default'}; my @secondorder = sort(keys(%select2)); @@ -13155,7 +13177,7 @@ } sub commit_standardrole { - my ($udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context) = @_; + my ($udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context,$credits) = @_; my ($output,$logmsg,$linefeed); if ($context eq 'auto') { $linefeed = "\n"; @@ -13164,7 +13186,7 @@ } if ($three eq 'st') { my $result = &commit_studentrole(\$logmsg,$udom,$uname,$url,$three,$start,$end, - $one,$two,$sec,$context); + $one,$two,$sec,$context,$credits); if (($result =~ /^error/) || ($result eq 'not_in_class') || ($result eq 'unknown_course') || ($result eq 'refused')) { $output = $logmsg.' '.&mt('Error: ').$result."\n"; @@ -13195,7 +13217,8 @@ } sub commit_studentrole { - my ($logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context) = @_; + my ($logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context, + $credits) = @_; my ($result,$linefeed,$oldsecurl,$newsecurl); if ($context eq 'auto') { $linefeed = "\n"; @@ -13242,7 +13265,11 @@ } } if (($expire_role_result eq 'ok') || ($secchange == 0)) { - $modify_section_result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,'','',$cid,'',$context); + $modify_section_result = + &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef, + undef,undef,undef,$sec, + $end,$start,'','',$cid, + '',$context,$credits); if ($modify_section_result =~ /^ok/) { if ($secchange == 1) { if ($sec eq '') { @@ -13511,6 +13538,9 @@ } else { $cenv{'internal.courseowner'} = $args->{'curruser'}; } + if ($args->{'defaultcredits'}) { + $cenv{'internal.defaultcredits'} = $args->{'defaultcredits'}; + } my @badclasses = (); # Used to accumulate sections/crosslistings that did not pass classlist access check for course owner. if ($args->{'crssections'}) { $cenv{'internal.sectionnums'} = ''; From raeburn at source.lon-capa.org Fri Mar 1 22:31:10 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Sat, 02 Mar 2013 03:31:10 -0000 Subject: [LON-CAPA-cvs] cvs: loncom(version_2_11_X) / lond Message-ID: raeburn Sat Mar 2 03:31:10 2013 EDT Modified files: (Branch: version_2_11_X) /loncom lond Log: - For 2.11 - backport 1.498. Index: loncom/lond diff -u loncom/lond:1.489.2.2 loncom/lond:1.489.2.3 --- loncom/lond:1.489.2.2 Sat Oct 6 14:44:50 2012 +++ loncom/lond Sat Mar 2 03:31:10 2013 @@ -2,7 +2,7 @@ # The LearningOnline Network # lond "LON Daemon" Server (port "LOND" 5663) # -# $Id: lond,v 1.489.2.2 2012/10/06 14:44:50 raeburn Exp $ +# $Id: lond,v 1.489.2.3 2013/03/02 03:31:10 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -60,7 +60,7 @@ my $status=''; my $lastlog=''; -my $VERSION='$Revision: 1.489.2.2 $'; #' stupid emacs +my $VERSION='$Revision: 1.489.2.3 $'; #' stupid emacs my $remoteVERSION; my $currenthostid="default"; my $currentdomainid; @@ -5104,9 +5104,10 @@ my ($dom,$instcode,$owner) = split(/:/, $tail); $instcode = &unescape($instcode); $owner = &unescape($owner); - my ($outcome,$description) = + my ($outcome,$description,$credits) = &localenroll::validate_instcode($dom,$instcode,$owner); - my $result = &escape($outcome).'&'.&escape($description); + my $result = &escape($outcome).'&'.&escape($description).'&'. + &escape($credits); &Reply($client, \$result, $userinput); return 1; From raeburn at source.lon-capa.org Sat Mar 2 10:34:18 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Sat, 02 Mar 2013 15:34:18 -0000 Subject: [LON-CAPA-cvs] cvs: loncom(version_2_11_X) /lonnet/perl lonnet.pm Message-ID: raeburn Sat Mar 2 15:34:18 2013 EDT Modified files: (Branch: version_2_11_X) /loncom/lonnet/perl lonnet.pm Log: - For 2.11 - Backport 1.1215, 1.1216. Index: loncom/lonnet/perl/lonnet.pm diff -u loncom/lonnet/perl/lonnet.pm:1.1172.2.18 loncom/lonnet/perl/lonnet.pm:1.1172.2.19 --- loncom/lonnet/perl/lonnet.pm:1.1172.2.18 Fri Feb 8 16:12:10 2013 +++ loncom/lonnet/perl/lonnet.pm Sat Mar 2 15:34:17 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.1172.2.18 2013/02/08 16:12:10 raeburn Exp $ +# $Id: lonnet.pm,v 1.1172.2.19 2013/03/02 15:34:17 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2004,8 +2004,9 @@ } } if (ref($domconfig{'coursedefaults'}) eq 'HASH') { - foreach my $item ('canuse_pdfforms') { - $domdefaults{$item} = $domconfig{'coursedefaults'}{$item}; + if (ref($domconfig{'coursedefaults'}{'coursecredits'}) eq 'HASH') { + $domdefaults{'officialcredits'} = $domconfig{'coursedefaults'}{'coursecredits'}{'official'}; + $domdefaults{'unofficialcredits'} = $domconfig{'coursedefaults'}{'coursecredits'}{'unofficial'}; } } if (ref($domconfig{'usersessions'}) eq 'HASH') { @@ -5050,9 +5051,11 @@ } sub set_arearole { - my ($trole,$area,$tstart,$tend,$domain,$username) = @_; + my ($trole,$area,$tstart,$tend,$domain,$username,$nolog) = @_; + unless ($nolog) { # log the associated role with the area - &userrolelog($trole,$username,$domain,$area,$tstart,$tend); + &userrolelog($trole,$username,$domain,$area,$tstart,$tend); + } return ('user.role.'.$trole.'.'.$area => $tstart.'.'.$tend); } @@ -5321,7 +5324,7 @@ my $area = '/'.$dcdom.'/'.$pickedcourse; my $spec = $role.'.'.$area; my %userroles = &set_arearole($role,$area,'','',$env{'user.domain'}, - $env{'user.name'}); + $env{'user.name'},1); my %ccrole = (); &standard_roleprivs(\%ccrole,$role,$dcdom,$spec,$pickedcourse,$area); my ($author,$adv)= &set_userprivs(\%userroles,\%ccrole); @@ -7399,8 +7402,8 @@ } $response=&unescape(&reply('autovalidateinstcode:'.$cdom.':'. &escape($instcode).':'.&escape($owner),$homeserver)); - my ($outcome,$description) = map { &unescape($_); } split('&',$response,2); - return ($outcome,$description); + my ($outcome,$description,$defaultcredits) = map { &unescape($_); } split('&',$response,3); + return ($outcome,$description,$defaultcredits); } sub auto_create_password { @@ -8340,7 +8343,7 @@ sub modifystudent { my ($udom,$uname,$uid,$umode,$upass,$first,$middle,$last,$gene,$usec, $end,$start,$forceid,$desiredhome,$email,$type,$locktype,$cid, - $selfenroll,$context,$inststatus)=@_; + $selfenroll,$context,$inststatus,$credits)=@_; if (!$cid) { unless ($cid=$env{'request.course.id'}) { return 'not_in_class'; @@ -8355,12 +8358,13 @@ # students environment $uid = undef if (!$forceid); $reply = &modify_student_enrollment($udom,$uname,$uid,$first,$middle,$last, - $gene,$usec,$end,$start,$type,$locktype,$cid,$selfenroll,$context); + $gene,$usec,$end,$start,$type,$locktype, + $cid,$selfenroll,$context,$credits); return $reply; } sub modify_student_enrollment { - my ($udom,$uname,$uid,$first,$middle,$last,$gene,$usec,$end,$start,$type,$locktype,$cid,$selfenroll,$context) = @_; + my ($udom,$uname,$uid,$first,$middle,$last,$gene,$usec,$end,$start,$type,$locktype,$cid,$selfenroll,$context,$credits) = @_; my ($cdom,$cnum,$chome); if (!$cid) { unless ($cid=$env{'request.course.id'}) { @@ -8407,7 +8411,7 @@ my %old_entry = &Apache::lonnet::get('classlist',[$user],$cdom,$cnum); my $reply=cput('classlist', {$user => - join(':',$end,$start,$uid,$usec,$fullname,$type,$locktype) }, + join(':',$end,$start,$uid,$usec,$fullname,$type,$locktype,$credits) }, $cdom,$cnum); if (($reply eq 'ok') || ($reply eq 'delayed')) { &devalidate_getsection_cache($udom,$uname,$cid); @@ -12602,7 +12606,9 @@ =item B<$context> role change context (shown in User Management Logs display in a course) -=item B<$inststatus> institutional status of user - : separated string of escaped status types +=item B<$inststatus> institutional status of user - : separated string of escaped status types + +=item B<$credits> Number of credits student will earn from this class - only needs to be supplied if value needs to be different from default credits for class. =back @@ -12647,6 +12653,8 @@ =item $context +=item $credits, number of credits student will earn from this class + =back From raeburn at source.lon-capa.org Sun Mar 3 20:46:31 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Mon, 04 Mar 2013 01:46:31 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /lonnet/perl lonnet.pm Message-ID: raeburn Mon Mar 4 01:46:31 2013 EDT Modified files: /loncom/lonnet/perl lonnet.pm Log: - Simple pages can have content open/close dates and other content style parameters. (cf. lonnet.pm rev. 1.529). Index: loncom/lonnet/perl/lonnet.pm diff -u loncom/lonnet/perl/lonnet.pm:1.1216 loncom/lonnet/perl/lonnet.pm:1.1217 --- loncom/lonnet/perl/lonnet.pm:1.1216 Fri Mar 1 04:17:31 2013 +++ loncom/lonnet/perl/lonnet.pm Mon Mar 4 01:46:31 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.1216 2013/03/01 04:17:31 raeburn Exp $ +# $Id: lonnet.pm,v 1.1217 2013/03/04 01:46:31 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -9940,7 +9940,7 @@ # if it is a non metadata possible uri return quickly if (($uri eq '') || (($uri =~ m|^/*adm/|) && - ($uri !~ m|^adm/includes|) && ($uri !~ m|/bulletinboard$|)) || + ($uri !~ m|^adm/includes|) && ($uri !~ m{/(smppg|bulletinboard)$})) || ($uri =~ m|/$|) || ($uri =~ m|/.meta$|) || ($uri =~ m{^/*uploaded/.+\.sequence$})) { return undef; } From raeburn at source.lon-capa.org Sun Mar 3 21:20:26 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Mon, 04 Mar 2013 02:20:26 -0000 Subject: [LON-CAPA-cvs] cvs: modules /msu localenroll.pm Message-ID: raeburn Mon Mar 4 02:20:26 2013 EDT Modified files: /modules/msu localenroll.pm Log: - Customized localenroll.pm for MSU - Coding style -- push() - Fix seqyr code determination for spring semesters. - Correct args passed to &semyr_to_seqid(). Index: modules/msu/localenroll.pm diff -u modules/msu/localenroll.pm:1.63 modules/msu/localenroll.pm:1.64 --- modules/msu/localenroll.pm:1.63 Fri Mar 1 05:53:15 2013 +++ modules/msu/localenroll.pm Mon Mar 4 02:20:25 2013 @@ -1,6 +1,6 @@ # functions to glue school database system into Lon-CAPA for # automated enrollment -# $Id: localenroll.pm,v 1.63 2013/03/01 05:53:15 raeburn Exp $ +# $Id: localenroll.pm,v 1.64 2013/03/04 02:20:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -137,7 +137,7 @@ $sem =~tr/a-z/A-Z/; $subj =~tr/a-z/A-Z/; $crse =~tr/a-z/A-Z/; - my $sth = $dbh->prepare("SELECT Pid,Pilot_Id,Student_Name,Sctn_Crdt_Hours FROM LONCAPA_ClassList WHERE Term_Code = '$sem' AND Subj_Code = '$subj' AND Crse_Code = '$crse' AND Sctn_Code = '$sec' ORDER BY Student_Name"); + my $sth = $dbh->prepare("SELECT Pid,Pilot_Id,Student_Name,Sctn_Crdt_Hours FROM LONCAPA_ClassList WHERE (Term_Code = '$sem' AND Subj_Code = '$subj' AND Crse_Code = '$crse' AND Sctn_Code = '$sec') ORDER BY Student_Name"); $sth->execute(); while ( my($pid,$pilot,$name,$credits) = $sth->fetchrow_array ) { if ($pilot =~ m/^\w{2,8}$/) { @@ -208,9 +208,9 @@ my $quotedterm = $dbh3->quote($term); my $sth = $dbh3->prepare( "SELECT Sctn_Code FROM SISCRSS WHERE Subj_Code = $quotedsubj AND Crse_Code= $quotedcrse AND Sctn_Code != '998' AND Sctn_Term_Code =$quotedterm "); $sth->execute(); - while ( my @row = $sth->fetchrow_array( ) ) { + while ( my @row = $sth->fetchrow_array() ) { if (!grep/^99/, at row) { - push @secs, @row; + push(@secs, at row); } } $sth->finish; @@ -273,7 +273,7 @@ if (($coowner !~ /\W/) && ($coownerdom eq $dom)) { # Is co-owner in CLIFMS for course? unless (grep(/^\Q$coowner\E$/, at netids)) { - push (@netids,$coowner); + push(@netids,$coowner); } } } @@ -383,7 +383,8 @@ if ($yr == 10) { $seqyr = '09'; } elsif ($yr =~ /^0(\d)$/) { - $seqyr = '0'. $1 - 1; + my $digit = $1 -1; + $seqyr = '0'.$digit; } else { $seqyr = $yr - 1; } @@ -495,7 +496,7 @@ } } unless ($outcome eq 'valid') { - $outcome = "There was no match in the MSU $database database to the combination of semester ($term), subject ($subj), course number ($crse) for the specified owner ($owner)."; + $outcome = "There was no match in the MSU $database database to the combination of semester ($term), subject ($subj), course number ($crse) for the specified owner ($ownername)."; } } } else { @@ -536,7 +537,7 @@ $outcome = "There was a problem connecting to the SIS database, so the course number could not be validated."; } if ($outcome eq 'valid') { - my $seqid = &semyr_to_seqid($term,$sem,$yr); + my $seqid = &semyr_to_seqid($term,$sem,$year); eval { my $credsth = $dbh->prepare("SELECT Start_Term_Seq_Id,End_Term_Seq_Id,Credits FROM SISCRSD WHERE Subj_Code = '$subj' AND Crse_Code = '$crse'"); $credsth->execute(); From raeburn at source.lon-capa.org Sun Mar 3 21:33:21 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Mon, 04 Mar 2013 02:33:21 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /interface coursecatalog.pm Message-ID: raeburn Mon Mar 4 02:33:21 2013 EDT Modified files: /loncom/interface coursecatalog.pm Log: - Wording changes. - Clarify what "count for past access" means for student counts and totals. Index: loncom/interface/coursecatalog.pm diff -u loncom/interface/coursecatalog.pm:1.73 loncom/interface/coursecatalog.pm:1.74 --- loncom/interface/coursecatalog.pm:1.73 Fri Mar 1 18:09:16 2013 +++ loncom/interface/coursecatalog.pm Mon Mar 4 02:33:21 2013 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for displaying the course catalog interface # -# $Id: coursecatalog.pm,v 1.73 2013/03/01 18:09:16 raeburn Exp $ +# $Id: coursecatalog.pm,v 1.74 2013/03/04 02:33:21 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -631,9 +631,9 @@ ' />'.$title.'
    '; if ($type eq 'Previous') { my %milestonetext = &Apache::lonlocal::texthash ( - accessend => 'prior to default end access date', - enrollend => 'prior to end date for auto-enrollment', - date => 'prior to specific date:', + accessend => 'immediately prior to default end access date', + enrollend => 'immediately prior to end date for auto-enrollment', + date => 'immediately prior to specific date:', ); my @statuses = &Apache::loncommon::get_env_multiple('form.showcounts'); $output .= ''; @@ -734,9 +734,9 @@ sub get_wasactive_text { my $wasacctext = ' -- '; if ($env{'form.currcat_0'} eq 'communities::0') { - $wasacctext .= &mt('where members had access ...'); + $wasacctext .= &mt('where member access status was current ...'); } else { - $wasacctext .= &mt('where students had access ...'); + $wasacctext .= &mt('where student access status was current ...'); } return $wasacctext; } From raeburn at source.lon-capa.org Sun Mar 3 23:57:26 2013 From: raeburn at source.lon-capa.org (raeburn) Date: Mon, 04 Mar 2013 04:57:26 -0000 Subject: [LON-CAPA-cvs] cvs: loncom / dns_checksums.tab Message-ID: raeburn Mon Mar 4 04:57:26 2013 EDT Modified files: /loncom dns_checksums.tab Log: - Update versions/checksums. -------------- next part -------------- Index: loncom/dns_checksums.tab diff -u loncom/dns_checksums.tab:1.12 loncom/dns_checksums.tab:1.13 --- loncom/dns_checksums.tab:1.12 Thu Feb 21 21:59:22 2013 +++ loncom/dns_checksums.tab Mon Mar 4 04:57:26 2013 @@ -36,11 +36,11 @@ /home/httpd/lib/perl/Apache/checkauthen.pm,1.13,4a31325417b9196434f025a68a41f8dfc1c291cb /home/httpd/lib/perl/Apache/chemresponse.pm,1.91,fceab4082552430f276f5645b7ba0156ce3b4c76 /home/httpd/lib/perl/Apache/classcalc.pm,1.31,aad53ea851a22e4f498f26adcabe9ab99bef7b33 -/home/httpd/lib/perl/Apache/coursecatalog.pm,1.72,0e26150f621e322582d971a0d73b1fdf5555478b +/home/httpd/lib/perl/Apache/coursecatalog.pm,1.74,b6d10751e5329d6e9cd371015e05c4ac618f20a6 /home/httpd/lib/perl/Apache/courseclassifier.pm,1.14,1f2a8074cef646f33b1cb35f0d1be4ae2bd93786 /home/httpd/lib/perl/Apache/courseprefs.pm,1.49.2.5,419cb3d333af7549d4e570c3065eeed30fc53c29 -/home/httpd/lib/perl/Apache/createaccount.pm,1.54,27bee4e138d4d6d126e4f62e5b5ec02f91ff4510 -/home/httpd/lib/perl/Apache/domainprefs.pm,1.160.6.15,2658be0afc707d3a48682cecd8f86b0f5804187f +/home/httpd/lib/perl/Apache/createaccount.pm,1.55,de06608d3abb502ccb08f50909ccd23d21bfdd15 +/home/httpd/lib/perl/Apache/domainprefs.pm,1.160.6.16,b64dec8b8b7161fdbeb2e1d0e59fc167f2ee1945 /home/httpd/lib/perl/Apache/domainstatus.pm,1.5,23aa762aa041344d88589a7d8728b2dfd5944c2a /home/httpd/lib/perl/Apache/drawimage.pm,1.10,cee975e8248e9159994c823391b4615aa350e9d9 /home/httpd/lib/perl/Apache/edit.pm,1.142,01755063e9ad2350b6e35486e853023e17427651 @@ -88,16 +88,16 @@ /home/httpd/lib/perl/Apache/lonchatfetch.pm,1.38,2b1661e96a388710b4e5f4d3ad98795c6b0ded6b /home/httpd/lib/perl/Apache/loncleanup.pm,1.19,9e4c37a5ce742c429702365f22071daafa7ffcf8 /home/httpd/lib/perl/Apache/lonclonecourse.pm,1.9,98c1d2666539fa4b3d50b80c6f41b7d0b8fef450 -/home/httpd/lib/perl/Apache/loncommon.pm,1.1075.2.30,face4b92404e4e194a085b0abf050ae40b2d628b +/home/httpd/lib/perl/Apache/loncommon.pm,1.1075.2.31,0d3572f444a81398b11b3a40a8c9bba4c25e50ee /home/httpd/lib/perl/Apache/loncommunicate.pm,1.47,596a9fcc00dd7901ab0c6d9b303637542aecf25c /home/httpd/lib/perl/Apache/lonconfigsettings.pm,1.21.4.2,248e9a214d98e7fc39bc2f4d1274843962177a1d /home/httpd/lib/perl/Apache/loncorrectproblemplot.pm,1.28.2.1,fc3b683a9c9467b84de2d3ad178e5553787b590c -/home/httpd/lib/perl/Apache/loncoursedata.pm,1.193,5845ffa790669753fc6edaddf2c9136703fbcc57 +/home/httpd/lib/perl/Apache/loncoursedata.pm,1.194,9324c1dae7a4ef9ffd9a57032f2a29cc7329393b /home/httpd/lib/perl/Apache/loncoursegroups.pm,1.115,ccbde5365090e0d2dea9a23e81722238efeeb534 -/home/httpd/lib/perl/Apache/loncoursequeueadmin.pm,1.34,4c1d92f1e0aff861eb18d0aadb51478edf467fff +/home/httpd/lib/perl/Apache/loncoursequeueadmin.pm,1.35,2e6706d4cd3669af46d55571696628ef815abae4 /home/httpd/lib/perl/Apache/loncourserespicker.pm,1.5,f651b5cd7d2950e07551dea42b093bb358079065 -/home/httpd/lib/perl/Apache/loncreatecourse.pm,1.146,a91814b836b6094b074aee0c8d0927454b7170da -/home/httpd/lib/perl/Apache/loncreateuser.pm,1.372,8d506ab95866e09dfa4212dd0262574a3f0000d5 +/home/httpd/lib/perl/Apache/loncreatecourse.pm,1.147,df0e1f5e863625127761e0d02a7c58e9fea5f192 +/home/httpd/lib/perl/Apache/loncreateuser.pm,1.375,8b51a222494bb23afa19be55f15598d5c2a0e54f /home/httpd/lib/perl/Apache/loncss.pm,1.9,9cddcb9422ad7d4e78a33783205600cd48526159 /home/httpd/lib/perl/Apache/londatecheck.pm,1.13,092e63ba952968ae7cfad4c32d6025e2b55cf41f /home/httpd/lib/perl/Apache/londefdef.pm,1.442,44a5caae93c3397755e6314070d8c743689258bd @@ -132,13 +132,13 @@ /home/httpd/lib/perl/Apache/lonmaxima.pm,1.30,bba519f6e69b61bd4d10034365b1bd32a4ec5335 /home/httpd/lib/perl/Apache/lonmenu.pm,1.369.2.37,4bcd7067541dac0443072340bf2dae7bb8fcab2e /home/httpd/lib/perl/Apache/lonmeta.pm,1.248,e660aa49aaef2869ebfabbcb1075cca32b78851e -/home/httpd/lib/perl/Apache/lonmodifycourse.pm,1.59,b04661a13c8c8963ace6b05c0f2a1ed2563007e6 +/home/httpd/lib/perl/Apache/lonmodifycourse.pm,1.60,7772b26d9251e888d04d6a0bd252ff0e18763ce3 /home/httpd/lib/perl/Apache/lonmsg.pm,1.234,0eb0f0976aece688edc5d828e05c95dc3ec2fa64 /home/httpd/lib/perl/Apache/lonmsgdisplay.pm,1.161,40bf3c3ea06ac135445e13ef4354d779c828a249 /home/httpd/lib/perl/Apache/lonmysql.pm,1.39,f03ed6ec05489a20a0e8a6188f71b6169beccd31 /home/httpd/lib/perl/Apache/lonnavdisplay.pm,1.22.4.1,6d91e4303cfa5a2a9da8b9936a414617ffdd0252 /home/httpd/lib/perl/Apache/lonnavmaps.pm,1.493,6f547c70877dacd0301cc4cdee424ff8f1766da3 -/home/httpd/lib/perl/Apache/lonnet.pm,1.1172.2.18,fd4a36dff90043ba647535ac00d64bf88332c5b7 +/home/httpd/lib/perl/Apache/lonnet.pm,1.1172.2.19,c10051059913eb48f89f1211717c01ebc8957943 /home/httpd/lib/perl/Apache/lonnoshib.pm,1.1,333834f9aeae740d3049d9caf5046e56febfb34d /home/httpd/lib/perl/Apache/lonnotify.pm,1.39,3b5f90e0983c89c3b698547c57ac034bab71c4a9 /home/httpd/lib/perl/Apache/lonpage.pm,1.100,6e527f12b41d3d1344f07614c007bc8b9a17725b @@ -148,11 +148,11 @@ /home/httpd/lib/perl/Apache/lonpercentage.pm,1.12,0548f3ee8cde877a5472ce4fa46530ae9e76b75d /home/httpd/lib/perl/Apache/lonpickauthor.pm,1.3,f55f754b7e02af84861af3216d61e4c24ac7e3db /home/httpd/lib/perl/Apache/lonpickcode.pm,1.15,059c2d7f98ab50e1af5e99eb4e7ba5479c8392d8 -/home/httpd/lib/perl/Apache/lonpickcourse.pm,1.103,e2dde76e48a0752b6525eb087148ac22211b7355 +/home/httpd/lib/perl/Apache/lonpickcourse.pm,1.106,7b11b39b6bc7a4cbf9a281f830d2d4d71c45d577 /home/httpd/lib/perl/Apache/lonpickstudent.pm,1.30,2b65b99b271f49922b027e956181abad60fb7fc5 /home/httpd/lib/perl/Apache/lonpickuser.pm,1.5,c47f5081194ae82d75a64170a95d02accf1fb00b /home/httpd/lib/perl/Apache/lonplot.pm,1.173,8fbd85333c6999899595f4d0b1f7059720f9f655 -/home/httpd/lib/perl/Apache/lonpopulate.pm,1.73,76dcacbe16c085cc70d42eae9c873ba9d92e5c5a +/home/httpd/lib/perl/Apache/lonpopulate.pm,1.76,d041a9958d0ef5c9a3b772e8d56ca9126b243c11 /home/httpd/lib/perl/Apache/lonpreferences.pm,1.196.4.9,f5dae3db3764a0708b03ca404fe03dd7cbe55f92 /home/httpd/lib/perl/Apache/lonprintout.pm,1.627.2.3,ebbec5578750cb0e900487041f4ac09c2974ccdb /home/httpd/lib/perl/Apache/lonproblemanalysis.pm,1.142.2.2,bdc3f2f277d94e2358c8d9e64119eb782e3bcc8b @@ -168,7 +168,7 @@ /home/httpd/lib/perl/Apache/lonratsrv.pm,1.42,5ed20af763a2fbc7f9af0f78b4a48c8c467862d4 /home/httpd/lib/perl/Apache/lonremote.pm,1.34,71db2975d2831e2016b235bd49d9c3f50a5ad1a8 /home/httpd/lib/perl/Apache/lonrep.pm,1.14,51213be6624cdbe1ab65aca25e536962c4158bdb -/home/httpd/lib/perl/Apache/lonrequestcourse.pm,1.65,0c33b7412df2ac2d0afcf3737bdc78e5dd4a1833 +/home/httpd/lib/perl/Apache/lonrequestcourse.pm,1.66,783562f13497442c9bc21612769e754f9baa9586 /home/httpd/lib/perl/Apache/lonretrieve.pm,1.50,6b6ea20f0c49b0dbc8040815432ab085a700ff12 /home/httpd/lib/perl/Apache/lonrights.pm,1.34,a23e3de85f0ed509cbcbea8b38bbf158a8b392c5 /home/httpd/lib/perl/Apache/lonroles.pm,1.269.2.7,bbd25699c8812fd085e320dddb5da710e60f4c51 @@ -206,7 +206,7 @@ /home/httpd/lib/perl/Apache/lonuploadedacc.pm,1.15,36cc7c95ca48fc6c74e317f4d949ba63f831dd49 /home/httpd/lib/perl/Apache/lonuploadrep.pm,1.11,326e9ff09afb940a9a38114c9ad107f2bc7fc33c /home/httpd/lib/perl/Apache/lonuserstate.pm,1.144,29fabe3740c03d530d1046a8218edad2520f8013 -/home/httpd/lib/perl/Apache/lonuserutils.pm,1.146,9491a5aaf2f1bc66bcc69099e26604c95ff01f56 +/home/httpd/lib/perl/Apache/lonuserutils.pm,1.150,7c9bf97849102cb849fea9bbf72a7290ca8c72ae /home/httpd/lib/perl/Apache/lonviewclasslist.pm,1.14,a1729ef8d4be38ae3e3281dbea1eda63bb4320b5 /home/httpd/lib/perl/Apache/lonwebdavacc.pm,1.1,ce3a3cc1b8443896bbe75f63e2085ce3c5b9c57d /home/httpd/lib/perl/Apache/lonwebdavauth.pm,1.2,3ed22710f779d43284f6c7aa7c1562a9a6cf3c06 @@ -244,14 +244,14 @@ /home/httpd/lib/perl/LONCAPA/Checksumming.pm,1.5,3072a15507a94e6e74f1afe5662f37ef55d2d5cc /home/httpd/lib/perl/LONCAPA/ConfigFileEdit.pm,1.4,557c8df56791147bf1cbf46670da0b46bef5f279 /home/httpd/lib/perl/LONCAPA/Configuration.pm,1.14,e2e2fd9bd1e36310a6672c4cef1fb112d144ff29 -/home/httpd/lib/perl/LONCAPA/Enrollment.pm,1.43,575c87ceadc3532c0193cd27168c4828654a32a3 +/home/httpd/lib/perl/LONCAPA/Enrollment.pm,1.44,2a8c8880dbc928ab0b1d2382c072860cf137b05b /home/httpd/lib/perl/LONCAPA/Firewall.pm,1.12,9f60bf371fe240dd35de3500fccb946b67dbed28 /home/httpd/lib/perl/LONCAPA/HashIterator.pm,1.2,b7f8eee1af94c1a30b0d3f75f759808b9b8a7687 /home/httpd/lib/perl/LONCAPA/LondConnection.pm,1.53,83dbb1c52e3895cc53668063fc03d69878ec40a5 /home/httpd/lib/perl/LONCAPA/LondTransaction.pm,1.9,b3bdce763bbcc98bdacf4ef63075335b380c486d /home/httpd/lib/perl/LONCAPA/Queue.pm,1.4,9a96f28d4843cd12e45c0f10e87cc7bb005c2de9 /home/httpd/lib/perl/LONCAPA/Stack.pm,1.4,d6c0c4d6a25143fd2bbc5538824aa51574059c11 -/home/httpd/lib/perl/LONCAPA/batchcreatecourse.pm,1.37,79a88ef4ad350a3dccf3353771e8be8726125768 +/home/httpd/lib/perl/LONCAPA/batchcreatecourse.pm,1.38,482727000b95f19f8f9f8e2113ddc55d3f5b708a /home/httpd/lib/perl/LONCAPA/lonauthcgi.pm,1.10,4031fc3205bdead78f7a8cef5d953fda90c1cb9a /home/httpd/lib/perl/LONCAPA/loncgi.pm,1.12,f578ba74ffa03f8a1010690ee77ce82bd9ef1efa /home/httpd/lib/perl/LONCAPA/lonlocal.pm,1.7,2c29fe15e28ae2826a90d5b34ec90b25ec3a29b1 @@ -260,10 +260,10 @@ /home/httpd/lib/perl/LONCAPA/map.pm,1.14,c257813fbda27e97a2d51c8491b1bf2bc8f7336c /home/httpd/lib/perl/Safe.pm,1.9,bc686b10767ff4a6a31df6ed11055c87266e186e /home/httpd/lib/perl/localauth-std.pm,1.7,f4ffd24e54ee67e4c052982acffdd54ad097327d -/home/httpd/lib/perl/localenroll-std.pm,1.43,5b71403ee8715164ac5cfad37cfc8c9affc23fd0 +/home/httpd/lib/perl/localenroll-std.pm,1.44,261b14039d1b02d997fdd2846a00c72e3158e193 /home/httpd/lib/perl/localstudentphoto-std.pm,1.7,1f527d7bdc33f13d18aad49b3cef1a1696b4f97a /home/httpd/perl/Autocreate.pl,1.19,a0136164912faf2f0cc21dc5f4aefa392eb7bf4f -/home/httpd/perl/Autoenroll.pl,1.32,2204ff41969632c1f829abb7d983145f18cb8d7e +/home/httpd/perl/Autoenroll.pl,1.33,cea122eb8dc6c5d1bfa7c1ab3afb61003b4cffc6 /home/httpd/perl/Autoupdate.pl,1.22,020e48cd397f228d9acf115e6dc0cdb575b49347 /home/httpd/perl/CrGenerate.pl,1.9,a20f78db3e189011d02772a0f1301e19698b50e8 /home/httpd/perl/CrGrant.pl,1.6,251f41bd3e53d04a6f0a13b3201c7b78c755a93f @@ -296,7 +296,7 @@ /home/httpd/perl/lcuserdel,1.16,6882842c8e034f3a11fd7fa3d1b95c3c44a56036 /home/httpd/perl/loncnew,1.100,1ea735502c435d7fa9eefdcc5bc6483548a6e092 /home/httpd/perl/loncron,1.98,3f51bfc18f512fe1f256c98edbcf404b5d330c73 -/home/httpd/perl/lond,1.489.2.2,5983f3ec7e6ce904f2cfeda5a683c0d4d486994c +/home/httpd/perl/lond,1.489.2.3,1ffd922397dfc323200bb656d99fc42b574ca99f /home/httpd/perl/lonmaxima,1.41,2d6896bd319a8c0b756e2a906b203df85b49dd70 /home/httpd/perl/lonmemcached,1.7,1aa57476b2bbc326f2b2af402a5f63ef627f38dc /home/httpd/perl/lonr,1.6,114de8a26ccd7bc2141ef922803a8efe20289b22