# The LearningOnline Network # Documents # # $Id: londocs.pm,v 1.548 2013/05/21 13:01:36 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # LON-CAPA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ # package Apache::londocs; use strict; use Apache::Constants qw(:common :http); use Apache::imsexport; use Apache::lonnet; use Apache::loncommon; use Apache::lonhtmlcommon; use LONCAPA::map(); use Apache::lonratedt(); use Apache::lonxml; use Apache::lonclonecourse; use Apache::lonnavmaps; use Apache::lonnavdisplay(); use Apache::lonextresedit(); use HTML::Entities; use HTML::TokeParser; use GDBM_File; use Apache::lonlocal; use Cwd; use LONCAPA qw(:DEFAULT :match); my $iconpath; my %hash; my $hashtied; my %alreadyseen=(); my $hadchanges; my %help=(); sub mapread { my ($coursenum,$coursedom,$map)=@_; return &LONCAPA::map::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'. $map); } sub storemap { my ($coursenum,$coursedom,$map,$contentchg)=@_; my $report; if (($contentchg) && ($map =~ /^default/)) { $report = 1; } my ($outtext,$errtext)= &LONCAPA::map::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'. $map,1,$report); if ($errtext) { return ($errtext,2); } $hadchanges=1; return ($errtext,0); } sub authorhosts { my %outhash=(); my $home=0; my $other=0; foreach my $key (keys(%env)) { if ($key=~/^user\.role\.(au|ca)\.(.+)$/) { my $role=$1; my $realm=$2; my ($start,$end)=split(/\./,$env{$key}); if (($start) && ($start>time)) { next; } if (($end) && (time>$end)) { next; } my ($ca,$cd); if ($1 eq 'au') { $ca=$env{'user.name'}; $cd=$env{'user.domain'}; } else { ($cd,$ca)=($realm=~/^\/($match_domain)\/($match_username)$/); } my $allowed=0; my $myhome=&Apache::lonnet::homeserver($ca,$cd); my @ids=&Apache::lonnet::current_machine_ids(); foreach my $id (@ids) { if ($id eq $myhome) { $allowed=1; last; } } if ($allowed) { $home++; $outhash{'home_'.$ca.':'.$cd}=1; } else { $outhash{'otherhome_'.$ca.':'.$cd}=$myhome; $other++; } } } return ($home,$other,%outhash); } sub clean { my ($title)=@_; $title=~s/[^\w\/\!\$\%\^\*\-\_\=\+\;\:\,\\\|\`\~]+/\_/gs; return $title; } sub dumpcourse { my ($r) = @_; my $crstype = &Apache::loncommon::course_type(); $r->print(&Apache::loncommon::start_page('Dump '.$crstype.' Content to Authoring Space')."\n". &Apache::lonhtmlcommon::breadcrumbs('Dump '.$crstype.' Content to Authoring Space')."\n"); $r->print(&startContentScreen('tools')); my ($home,$other,%outhash)=&authorhosts(); unless ($home) { $r->print(&endContentScreen()); return ''; } my $origcrsid=$env{'request.course.id'}; my %origcrsdata=&Apache::lonnet::coursedescription($origcrsid); if (($env{'form.authorspace'}) && ($env{'form.authorfolder'}=~/\w/)) { # Do the dumping unless ($outhash{'home_'.$env{'form.authorspace'}}) { $r->print(&endContentScreen()); return ''; } my ($ca,$cd)=split(/\:/,$env{'form.authorspace'}); $r->print('