'
.&Apache::loncommon::help_open_menu('Navigation Screen',
'Navigation_Screen',undef,'RAT')
.' '.&mt('Tools:').' '
.'
$form_start
+ $form_param
$form_common
$selectbox
$form_end
-
+
$removelink
$cutlink
$copylink
-
END
-
}
# Figure out what kind of a resource this is
my ($extension)=($url=~/\.(\w+)$/);
@@ -2400,21 +3223,26 @@ END
if ($rpicknum) {
$rpckchk = ' checked="checked"';
}
- my $formname = 'edit_rpick_'.$orderidx;
+ my $formname = 'edit_randompick_'.$orderidx;
$rand_pick_text =
''."\n".
+$form_param."\n".
$form_common."\n".
-' '.&mt('Randomly Pick').' ';
+' '.&mt('Randomly Pick').'';
if ($rpicknum ne '') {
$rand_pick_text .= ': '.$rpicknum.' ';
}
- $rand_pick_text .= ' ';
+ $rand_pick_text .= ''.
+ $form_end;
my $ro_set=
((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i?' checked="checked"':'');
+ my $formname = 'edit_rorder_'.$orderidx;
$rand_order_text =
-$form_start.
-$form_common.'
- '.&mt('Random Order').' ';
+''."\n".
+$form_param."\n".
+$form_common."\n".
+' '.&mt('Random Order').' '.
+$form_end;
}
} elsif ($supplementalflag && !$allowed) {
$url .= ($url =~ /\?/) ? '&':'?';
@@ -2443,7 +3271,7 @@ $form_common.'
$forceedit,
undef,$symb,
&escape($env{'form.folderpath'}),
- $renametitle);
+ $renametitle,'','',1);
if ($jscall) {
$editlink = ''.&mt('Edit').' '."\n";
@@ -2488,16 +3316,20 @@ $form_common.'
((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="checked"':'');
my $hidtext=
((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="checked"':'');
+ my $formhidden = 'edit_hiddenresource_'.$orderidx;
+ my $formurlhidden = 'edit_encrypturl_'.$orderidx;
$line.=(<
- $form_start
+
+ $form_param
$form_common
- $lt{'hd'}
+ $lt{'hd'}
$form_end
- $form_start
+
+ $form_param
$form_common
- $lt{'ec'}
+ $lt{'ec'}
$form_end
$rand_pick_text
@@ -2508,26 +3340,122 @@ ENDPARMS
return $line;
}
-sub newmap_suffix {
- my ($area,$container,$coursedom,$coursenum) = @_;
- my ($prefix,$idtype,$errtext,$locknotfreed);
- $prefix = 'docs';
- if ($area eq 'supplemental') {
- $prefix = 'supp';
+sub action_restrictions {
+ my ($cnum,$cdom,$url,$folderpath,$currgroups) = @_;
+ my %denied = (
+ cut => 0,
+ copy => 0,
+ remove => 0,
+ );
+ if ($url=~ m{^/res/.+\.(page|sequence)$}) {
+ # no copy for published maps
+ $denied{'copy'} = 1;
+ } elsif ($url=~m{^/res/lib/templates/}) {
+ $denied{'copy'} = 1;
+ $denied{'cut'} = 1;
+ } elsif ($url eq "/uploaded/$cdom/$cnum/group_allfolders.sequence") {
+ if ($folderpath =~ /^default&[^\&]+$/) {
+ if ((ref($currgroups) eq 'HASH') && (keys(%{$currgroups}) > 0)) {
+ $denied{'remove'} = 1;
+ }
+ $denied{'cut'} = 1;
+ $denied{'copy'} = 1;
+ }
+ } elsif ($url =~ m{^\Q/uploaded/$cdom/$cnum/group_folder_\E(\w+)\.sequence$}) {
+ my $group = $1;
+ if ($folderpath =~ /^default&[^\&]+\&group_allfolders\&[^\&]+$/) {
+ if ((ref($currgroups) eq 'HASH') && (exists($currgroups->{$group}))) {
+ $denied{'remove'} = 1;
+ }
+ }
+ $denied{'cut'} = 1;
+ $denied{'copy'} = 1;
+ } elsif ($url =~ m{^\Q/adm/$cdom/$cnum/\E(\w+)/smppg$}) {
+ my $group = $1;
+ if ($folderpath =~ /^default&[^\&]+\&group_allfolders\&[^\&]+\&\Qgroup_folder_$group\E\&[^\&]+$/) {
+ if ((ref($currgroups) eq 'HASH') && (exists($currgroups->{$group}))) {
+ my %groupsettings = &Apache::longroup::get_group_settings($currgroups->{$group});
+ if (keys(%groupsettings) > 0) {
+ $denied{'remove'} = 1;
+ }
+ $denied{'cut'} = 1;
+ $denied{'copy'} = 1;
+ }
+ }
+ } elsif ($folderpath =~ /^default&[^\&]+\&group_allfolders\&[^\&]+\&group_folder_(\w+)\&/) {
+ my $group = $1;
+ if ($url =~ /group_boards_\Q$group\E/) {
+ if ((ref($currgroups) eq 'HASH') && (exists($currgroups->{$group}))) {
+ my %groupsettings = &Apache::longroup::get_group_settings($currgroups->{$group});
+ if (keys(%groupsettings) > 0) {
+ if (ref($groupsettings{'functions'}) eq 'HASH') {
+ if ($groupsettings{'functions'}{'discussion'} eq 'on') {
+ $denied{'remove'} = 1;
+ }
+ }
+ }
+ $denied{'cut'} = 1;
+ $denied{'copy'} = 1;
+ }
+ }
+ }
+ return %denied;
+}
+
+sub new_timebased_suffix {
+ my ($dom,$num,$type,$area,$container) = @_;
+ my ($prefix,$namespace,$idtype,$errtext,$locknotfreed);
+ if ($type eq 'paste') {
+ $prefix = $type;
+ $namespace = 'courseeditor';
+ } elsif ($type eq 'map') {
+ $prefix = 'docs';
+ if ($area eq 'supplemental') {
+ $prefix = 'supp';
+ }
+ $prefix .= $container;
+ $namespace = 'uploadedmaps';
+ } else {
+ $prefix = $type;
+ $namespace = 'templated';
}
- $prefix .= $container;
$idtype = 'concat';
my ($suffix,$freedlock,$error) =
- &Apache::lonnet::get_timebased_id($prefix,'num','uploadedmaps',
- $coursedom,$coursenum);
+ &Apache::lonnet::get_timebased_id($prefix,'num',$namespace,$dom,$num);
if (!$suffix) {
- $errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new folder/page.');
+ if ($type eq 'paste') {
+ $errtext = &mt('Failed to acquire a unique timestamp-based suffix when adding to the paste buffer.');
+ } elsif ($type eq 'map') {
+ $errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new folder/page.');
+ } elsif ($type eq 'smppg') {
+ $errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new simple page.');
+ } else {
+ $errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new bulletin board.');
+ }
if ($error) {
$errtext .= ' '.$error;
}
}
if ($freedlock ne 'ok') {
- $locknotfreed = ''.&mt('There was a problem removing a lockfile. This will prevent creation of additional folders or composite pages in this course. Please contact the domain coordinator for your LON-CAPA domain.').'
';
+ $locknotfreed =
+ ''.
+ &mt('There was a problem removing a lockfile.').' ';
+ if ($type eq 'paste') {
+ &mt('This will prevent use of the paste buffer until th next log-in.');
+ } elsif ($type eq 'map') {
+ &mt('This will prevent creation of additional folders or composite pages in this course.');
+ } elsif ($type eq 'smppg') {
+ $locknotfreed .=
+ &mt('This will prevent creation of additional simple pages in this course.');
+ } else {
+ $locknotfreed .=
+ &mt('This will prevent creation of additional bulletin boards in this course.');
+ }
+ unless ($type eq 'paste') {
+ $locknotfreed .=
+ ' '.&mt('Please contact the domain coordinator for your LON-CAPA domain.');
+ }
+ $locknotfreed .= '
';
}
return ($suffix,$errtext,$locknotfreed);
}
@@ -2627,7 +3555,7 @@ sub checkonthis {
$r->print(''.&mt('connection down').' ');
} elsif ($result eq 'not_found') {
unless ($url=~/\$/) {
- $r->print(''.&mt('not found').' ');
+ $r->print(''.&mt('not found').' ');
} else {
$r->print(''.&mt('unable to verify variable URL').' ');
}
@@ -2673,7 +3601,7 @@ sub list_symbs {
$r->print(&Apache::loncommon::start_data_table_row().
' '.$res->compTitle().' '.
''.$res->symb().' '.
- &Apache::loncommon::start_data_table_row());
+ &Apache::loncommon::end_data_table_row());
$count ++;
}
if (!$count) {
@@ -2683,6 +3611,7 @@ sub list_symbs {
}
$r->print(&Apache::loncommon::end_data_table());
}
+ $r->print(&endContentScreen());
}
@@ -2713,6 +3642,7 @@ sub verifycontent {
}
&untiehash();
$r->print(''.&mt('Done').'
');
+ $r->print(&endContentScreen());
}
@@ -2792,7 +3722,7 @@ sub checkversions {
if ($env{'form.timerange'} eq 'all') {
# show all documents
$header=&mt('All Documents in '.$crstype);
- $allsel=1;
+ $allsel=' selected="selected"';
foreach my $key (keys(%hash)) {
if ($key=~/^ids\_(\/res\/.+)$/) {
my $src=$1;
@@ -2813,19 +3743,19 @@ sub checkversions {
.&mt('seconds');
if ($env{'form.timerange'}==-1) {
$seltext='since start of course';
- $startsel='selected';
+ $startsel=' selected="selected"';
$env{'form.timerange'}=time;
}
$starttime=time-$env{'form.timerange'};
if ($env{'form.timerange'}==2592000) {
$seltext=&mt('during the last month').' ('.&Apache::lonlocal::locallocaltime($starttime).')';
- $monthsel='selected';
+ $monthsel=' selected="selected"';
} elsif ($env{'form.timerange'}==604800) {
$seltext=&mt('during the last week').' ('.&Apache::lonlocal::locallocaltime($starttime).')';
- $weeksel='selected';
+ $weeksel=' selected="selected"';
} elsif ($env{'form.timerange'}==86400) {
$seltext=&mt('since yesterday').' ('.&Apache::lonlocal::locallocaltime($starttime).')';
- $daysel='selected';
+ $daysel=' selected="selected"';
}
$header=&mt('Content changed').' '.$seltext;
} else {
@@ -2863,11 +3793,11 @@ sub checkversions {
$lt{'cd'}
-$lt{'al'}
-$lt{'st'}
-$lt{'lm'}
-$lt{'lw'}
-$lt{'sy'}
+$lt{'al'}
+$lt{'st'}
+$lt{'lm'}
+$lt{'lw'}
+$lt{'sy'}
@@ -2883,111 +3813,93 @@ $lt{'sc'}:
-
ENDHEADERS
#number of columns for version history
- my $num_ver_col = 1;
$r->print(
- &Apache::loncommon::start_data_table().
- &Apache::loncommon::start_data_table_header_row().
- ''.&mt('Resources').' '.
- "$lt{'mr'} ".
- "$lt{'ve'} ".
- "$lt{'vu'} ".
- ''.&mt('History').' '.
- '');
+ &Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row().
+ ''.&mt('Resources').' '.
+ "$lt{'mr'} ".
+ "$lt{'ve'} ".
+ "$lt{'vu'} ".
+ ''.&mt('History').' '.
+ &Apache::loncommon::end_data_table_header_row()
+ );
foreach my $key (sort(keys(%changes))) {
#excludes not versionable problems from resource version history:
- if ($changes{$key}>$starttime && $key !~ /^\/res\/lib\/templates/) {
- my ($root,$extension)=($key=~/^(.*)\.(\w+)$/);
- my $currentversion=&Apache::lonnet::getversion($key);
- if ($currentversion<0) {
- $currentversion=''.&mt('Could not be determined.').' ';
- }
- my $linkurl=&Apache::lonnet::clutter($key);
+ next unless ($changes{$key}>$starttime && $key !~ /^\/res\/lib\/templates/);
+ my ($root,$extension)=($key=~/^(.*)\.(\w+)$/);
+ my $currentversion=&Apache::lonnet::getversion($key);
+ if ($currentversion<0) {
+ $currentversion=''.&mt('Could not be determined.').' ';
+ }
+ my $linkurl=&Apache::lonnet::clutter($key);
$r->print(
- &Apache::loncommon::end_data_table_header_row().
&Apache::loncommon::start_data_table_row().
- ''.&Apache::lonnet::gettitle($linkurl).' '.
+ ''.&Apache::lonnet::gettitle($linkurl).' '.
''.$linkurl.' '.
- ''.$currentversion.' ('.
+ ' '.$currentversion.' ('.
&Apache::lonlocal::locallocaltime(&Apache::lonnet::metadata($root.'.'.$extension,'lastrevisiondate')).') '.
- '');
-# Used in course
- my $usedversion=$hash{'version_'.$linkurl};
- if (($usedversion) && ($usedversion ne 'mostrecent')) {
- if($usedversion != $currentversion){
+ ' '
+ );
+ # Used in course
+ my $usedversion=$hash{'version_'.$linkurl};
+ if (($usedversion) && ($usedversion ne 'mostrecent')) {
+ if ($usedversion != $currentversion) {
$r->print(''.$usedversion.' ');
- }else{
+ } else {
$r->print($usedversion);
}
- } else {
- $r->print($currentversion);
- }
- $r->print(' ');
-# Set version
- $r->print(&Apache::loncommon::select_form($setversions{$linkurl},
- 'set_version_'.$linkurl,
- {'select_form_order' =>
- ['',1..$currentversion,'mostrecent'],
- '' => '',
- 'mostrecent' => &mt('most recent'),
- map {$_,$_} (1..$currentversion)}));
- my $lastold=1;
- for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {
- my $url=$root.'.'.$prevvers.'.'.$extension;
- if (&Apache::lonnet::metadata($url,'lastrevisiondate')<
- $starttime) {
- $lastold=$prevvers;
- }
- }
- #
- # Code to figure out how many version entries should go in
- # each of the four columns
- my $entries_per_col = 0;
- my $num_entries = ($currentversion-$lastold);
- if ($num_entries % $num_ver_col == 0) {
- $entries_per_col = $num_entries/$num_ver_col;
} else {
- $entries_per_col = $num_entries/$num_ver_col + 1;
+ $r->print($currentversion);
}
- my $entries_count = 0;
- $r->print(' ');
- my $cols_output = 1;
- for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) {
- my $url=$root.'.'.$prevvers.'.'.$extension;
- $r->print(''.&mt('Version').' '.$prevvers.' ('.
- &Apache::lonlocal::locallocaltime(
- &Apache::lonnet::metadata($url,
- 'lastrevisiondate')
- ).
- ')');
- if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') {
- $r->print(' '.&mt('Diffs').' ');
- }
- $r->print(' ');
- if (++$entries_count % $entries_per_col == 0) {
- $r->print(' ');
- if ($cols_output != $num_ver_col) {
- $r->print('');
- $cols_output++;
- }
- }
- }
- while($cols_output++ < $num_ver_col) {
- $r->print(' ');
+ $r->print(' ');
+ # Set version
+ $r->print(&Apache::loncommon::select_form(
+ $setversions{$linkurl},
+ 'set_version_'.$linkurl,
+ {'select_form_order' => ['',1..$currentversion,'mostrecent'],
+ '' => '',
+ 'mostrecent' => &mt('most recent'),
+ map {$_,$_} (1..$currentversion)}));
+ my $lastold=1;
+ for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {
+ my $url=$root.'.'.$prevvers.'.'.$extension;
+ if (&Apache::lonnet::metadata($url,'lastrevisiondate')<$starttime) {
+ $lastold=$prevvers;
+ }
+ }
+ $r->print(' ');
+ # List all available versions
+ $r->print('');
+ for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) {
+ my $url=$root.'.'.$prevvers.'.'.$extension;
+ $r->print(
+ ''
+ .''
+ .&mt('Version [_1]',$prevvers).' '
+ .' ('.&Apache::lonlocal::locallocaltime(
+ &Apache::lonnet::metadata($url,'lastrevisiondate'))
+ .')');
+ if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') {
+ $r->print(
+ ' &').
+ '" target="diffs">'.&mt('Diffs').' ');
}
- }
+ $r->print(' ');
+ }
+ $r->print(' '.&Apache::loncommon::end_data_table_row());
}
- $r->print(''.&Apache::loncommon::end_data_table_row().
- &Apache::loncommon::end_data_table().
- ' ');
+ $r->print(
+ &Apache::loncommon::end_data_table().
+ ' '.
+ ''
+ );
&untiehash();
+ $r->print(&endContentScreen());
}
sub mark_hash_old {
@@ -3149,8 +4061,9 @@ sub handler {
'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages');
$help{'Group Portfolio'} = &Apache::loncommon::help_open_topic('Docs_About_Group_Files');
$help{'Caching'} = &Apache::loncommon::help_open_topic('Caching');
-
-
+ $help{'Course Roster'} = &Apache::loncommon::help_open_topic('Docs_Course_Roster');
+ $help{'Web Page'} = &Apache::loncommon::help_open_topic('Docs_Web_Page');
+
my $allowed;
# URI is /adm/supplemental when viewing supplemental docs in non-edit mode.
unless ($r->uri eq '/adm/supplemental') {
@@ -3206,7 +4119,7 @@ sub handler {
# supplementalflag=0: show standard documents
# toolsflag=1: show utilities
-
+ $env{'form.folderpath'} = &unescape($env{'form.folderpath'});
my $supplementalflag=($env{'form.folderpath'}=~/^supplemental/);
if (($env{'form.folderpath'}=~/^default/) || ($env{'form.folderpath'} eq "")) {
$supplementalflag=0;
@@ -3227,84 +4140,32 @@ sub handler {
# Do we directly jump somewhere?
- if ($env{'form.command'} eq 'direct') {
- my ($mapurl,$id,$resurl);
+ if (($env{'form.command'} eq 'direct') || ($env{'form.command'} eq 'directnav')) {
if ($env{'form.symb'} ne '') {
- ($mapurl,$id,$resurl) = &Apache::lonnet::decode_symb($env{'form.symb'});
- if ($resurl=~/\.(sequence|page)$/) {
- $mapurl=$resurl;
- } elsif ($resurl eq 'adm/navmaps') {
- $mapurl=$env{'course.'.$env{'request.course.id'}.'.url'};
- }
- my $mapresobj;
- my $navmap = Apache::lonnavmaps::navmap->new();
- if (ref($navmap)) {
- $mapresobj = $navmap->getResourceByUrl($mapurl);
- }
- $mapurl=~s{^.*/([^/]+)\.(\w+)$}{$1};
- my $type=$2;
- my $path;
- if (ref($mapresobj)) {
- my $pcslist = $mapresobj->map_hierarchy();
- if ($pcslist ne '') {
- foreach my $pc (split(/,/,$pcslist)) {
- next if ($pc <= 1);
- my $res = $navmap->getByMapPc($pc);
- if (ref($res)) {
- my $thisurl = $res->src();
- $thisurl=~s{^.*/([^/]+)\.\w+$}{$1};
- my $thistitle = $res->title();
- $path .= '&'.
- &Apache::lonhtmlcommon::entity_encode($thisurl).'&'.
- &Apache::lonhtmlcommon::entity_encode($thistitle).
- ':'.$res->randompick().
- ':'.$res->randomout().
- ':'.$res->encrypted().
- ':'.$res->randomorder().
- ':'.$res->is_page();
- }
- }
- }
- $path =~ s/^\&//;
- my $maptitle = $mapresobj->title();
- if ($mapurl eq 'default') {
- $maptitle = 'Main Course Documents';
- }
- $path .= (($path ne '')? '&' : '').
- &Apache::lonhtmlcommon::entity_encode($mapurl).'&'.
- &Apache::lonhtmlcommon::entity_encode($maptitle).
- ':'.$mapresobj->randompick().
- ':'.$mapresobj->randomout().
- ':'.$mapresobj->encrypted().
- ':'.$mapresobj->randomorder().
- ':'.$mapresobj->is_page();
- } else {
- my $maptitle = &Apache::lonnet::gettitle($mapurl);
- my $ispage = (($type eq 'page')? 1 : '');
- if ($mapurl eq 'default') {
- $maptitle = 'Main Course Documents';
- }
- $path = &Apache::lonhtmlcommon::entity_encode($mapurl).'&'.
- &Apache::lonhtmlcommon::entity_encode($maptitle).':::::'.$ispage;
- }
- unless ($mapurl eq 'default') {
- $path = 'default&'.
- &Apache::lonhtmlcommon::entity_encode('Main Course Documents').
- ':::::&'.$path;
- }
- $env{'form.folderpath'}=$path;
+ $env{'form.folderpath'}=
+ &Apache::loncommon::symb_to_docspath($env{'form.symb'});
+ &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} =>
+ $env{'form.command'}.'_'.$env{'form.symb'}});
} elsif ($env{'form.supppath'} ne '') {
$env{'form.folderpath'}=$env{'form.supppath'};
+ &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} =>
+ $env{'form.command'}.'_'.$env{'form.supppath'}});
}
} elsif ($env{'form.command'} eq 'editdocs') {
- $env{'form.folderpath'} = 'default&'.
- &Apache::lonhtmlcommon::entity_encode('Main Course Content').
- ':::::';
+ $env{'form.folderpath'} = 'default&'.
+ &escape(&mt('Main '.$crstype.' Content').':::::');
+ &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => $env{'form.command'}});
} elsif ($env{'form.command'} eq 'editsupp') {
- $env{'form.folderpath'} = 'default&'.
- &Apache::lonhtmlcommon::entity_encode('Supplemental Content');
+ $env{'form.folderpath'} = 'supplemental&'.
+ &escape('Supplemental Content');
+ &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => '/adm/supplemental'});
+ } elsif ($env{'form.command'} eq 'contents') {
+ &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => '/adm/navmaps'});
+ } elsif ($env{'form.command'} eq 'home') {
+ &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => '/adm/menu'});
}
+
# Where do we store these for when we come back?
my $stored_folderpath='docs_folderpath';
if ($supplementalflag) {
@@ -3315,6 +4176,9 @@ sub handler {
if ((!$env{'form.folderpath'}) && $allowed) {
&Apache::loncommon::restore_course_settings($stored_folderpath,
{'folderpath' => 'scalar'});
+ unless (&unescape($env{'form.folderpath'}) =~ m{^(default|supplemental)&}) {
+ undef($env{'form.folderpath'});
+ }
}
# If we are not allowed to make changes, all we can see are supplemental docs
@@ -3334,8 +4198,8 @@ sub handler {
if ($supplementalflag) {
$env{'form.folderpath'}=&supplemental_base();
} else {
- $env{'form.folderpath'}='default'.&escape(&mt('Main '.$crstype.' Documents')).
- ':::::';
+ $env{'form.folderpath'}='default'.&escape(&mt('Main '.$crstype.' Content').
+ ':::::');
}
}
@@ -3360,8 +4224,7 @@ sub handler {
if ($env{'form.folder'} eq '' ||
$env{'form.folder'} eq 'supplemental') {
$folderpath='default&'.
- &escape(&mt('Main '.$crstype.' Documents')).
- ':::::';
+ &escape(&mt('Main '.$crstype.' Content').':::::');
}
}
$containertag = ' ';
@@ -3418,9 +4281,7 @@ sub handler {
onload => "javascript:resize_scrollbox('contentscroll','1','1');",
};
}
- if ($env{'docs.markedcopy_url'}) {
- $script .= &paste_popup_js();
- }
+ $script .= &paste_popup_js();
my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'.
&mt('Switch server?');
@@ -3446,7 +4307,6 @@ sub handler {
} else {
&Apache::lonhtmlcommon::add_breadcrumb({
href=>"/adm/coursedocs",text=>"$crstype Contents"});
-
$r->print(&Apache::loncommon::start_page("$crstype Contents", $script,
{'add_entries' => $addentries}
)
@@ -3517,9 +4377,6 @@ sub handler {
} elsif ((!$showdoc) && (!$uploadphase)) {
# -----------------------------------------------------------------------------
my %lt=&Apache::lonlocal::texthash(
- 'uplm' => 'Upload a new main '.lc($crstype).' document',
- 'upls' => 'Upload a new supplemental '.lc($crstype).' document',
- 'impp' => 'Import a document',
'copm' => 'All documents out of a published map into this folder',
'upfi' => 'Upload File',
'upld' => 'Import Content',
@@ -3529,21 +4386,20 @@ sub handler {
'impm' => 'Import from Assembled Map',
'selm' => 'Select Map',
'load' => 'Load Map',
- 'reco' => 'Recover Deleted Documents',
'newf' => 'New Folder',
'newp' => 'New Composite Page',
- 'extr' => 'External Resource',
'syll' => 'Syllabus',
'navc' => 'Table of Contents',
'sipa' => 'Simple Course Page',
'sipr' => 'Simple Problem',
+ 'webp' => 'Blank Web Page (editable)',
'drbx' => 'Drop Box',
'scuf' => 'External Scores (handgrade, upload, clicker)',
'bull' => 'Discussion Board',
'mypi' => 'My Personal Information Page',
'grpo' => 'Group Portfolio',
'rost' => 'Course Roster',
- 'abou' => 'Personal Information Page for a User',
+ 'abou' => 'Personal Information Page for a User',
'imsf' => 'IMS Import',
'imsl' => 'Import IMS package',
'cms' => 'Origin of IMS package',
@@ -3551,9 +4407,6 @@ sub handler {
'file' => 'File',
'title' => 'Title',
'comment' => 'Comment',
- 'url' => 'URL',
- 'prev' => 'Preview',
- 'lnk' => 'Add Link',
'parse' => 'Upload embedded images/multimedia files if HTML file',
);
# -----------------------------------------------------------------------------
@@ -3654,7 +4507,10 @@ SEDFFORM
if ($folder eq '') {
$folder='default';
}
- &update_paste_buffer($coursenum,$coursedom,$folder);
+ my $output = &update_paste_buffer($coursenum,$coursedom,$folder);
+ if ($output) {
+ $r->print($output);
+ }
$r->print(<
@@ -3792,7 +4648,6 @@ NAMFORM
NASOFORM
-
my $newrosterform=(<
@@ -3804,6 +4659,27 @@ NASOFORM
NROSTFORM
+ my $newwebpage;
+ if ($folder =~ /^default_?(\d*)$/) {
+ $newwebpage = "/uploaded/$coursedom/$coursenum/docs/";
+ if ($1) {
+ $newwebpage .= $1;
+ } else {
+ $newwebpage .= 'default';
+ }
+ $newwebpage .= '/new.html';
+ }
+ my $newwebpageform =(<
+
+ $pathitem
+
+
+ $help{'Web Page'}
+
+NWEBFORM
+
+
my $specialdocumentsform;
my @specialdocumentsforma;
my $gradingform;
@@ -3862,6 +4738,7 @@ NGFFORM
{' '=>$newsylform},
{' '=>$newnavform},
{' '=>$newsmppageform},
+ {' '=>$newwebpageform},
);
$specialdocumentsform = &create_form_ul(&create_list_elements(@specialdocumentsforma));
@@ -3999,12 +4876,34 @@ SNSFORM
SNAMFORM
+ my $supwebpage;
+ if ($folder =~ /^supplemental_?(\d*)$/) {
+ $supwebpage = "/uploaded/$coursedom/$coursenum/supplemental/";
+ if ($1) {
+ $supwebpage .= $1;
+ } else {
+ $supwebpage .= 'default';
+ }
+ $supwebpage .= '/new.html';
+ }
+ my $supwebpageform =(<
+
+ $pathitem
+
+
+ $help{'Web Page'}
+
+SWEBFORM
+
my @specialdocs = (
{' '
=>$supnewsylform},
{' '
=>$supnewaboutmeform},
+ {' '=>$supwebpageform},
+
);
my @supimportdoc = (
{' '
@@ -4224,7 +5123,7 @@ sub generate_admin_menu {
foreach my $aurole (keys(%outhash)) {
unless(grep(/^\Q$outhash{$aurole}\E/,@hosts)) {
push(@hosts,$outhash{$aurole});
- }
+ }
}
if (@hosts == 1) {
my $switchto = '/adm/switchserver?otherserver='.$hosts[0].
@@ -4288,21 +5187,22 @@ sub generate_admin_menu {
}
sub generate_edit_table {
- my ($tid,$orderhash_ref,$to_show,$iconpath,$jumpto,$readfile) = @_;
+ my ($tid,$orderhash_ref,$to_show,$iconpath,$jumpto,$readfile,
+ $need_save,$copyfolder) = @_;
return unless(ref($orderhash_ref) eq 'HASH');
my %orderhash = %{$orderhash_ref};
my $form;
my $activetab;
my $active;
- if($env{'form.active'} ne ''){
+ if (($env{'form.active'} ne '') && ($env{'form.active'} ne 'aa')) {
$activetab = $env{'form.active'};
}
my $backicon = $iconpath.'clickhere.gif';
- my $backtext = &mt('Exit');
+ my $backtext = &mt('Exit Editor');
$form = ''.
'
'."\n".
''.
- ''.
+ ' '.
' '.$backtext.' '."\n".
''.
@@ -4337,7 +5237,35 @@ sub generate_edit_table {
$form .= ''."\n";
if ($to_show ne '') {
- $form .= '
'.$to_show.'
'."\n";
+ my $saveform;
+ if ($need_save) {
+ my $button = &mt('Make changes');
+ my $path;
+ if ($env{'form.folderpath'}) {
+ $path =
+ &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
+ }
+ $saveform = <<"END";
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+END
+ }
+ $form .= '
'.$to_show.'
'.$saveform."\n";
}
foreach my $field (keys(%orderhash)){
if($field ne '00'){
@@ -4359,7 +5287,6 @@ sub generate_edit_table {
sub editing_js {
my ($udom,$uname,$supplementalflag) = @_;
- my $now = time();
my %lt = &Apache::lonlocal::texthash(
p_mnf => 'Name of New Folder',
t_mnf => 'New Folder',
@@ -4370,6 +5297,7 @@ sub editing_js {
p_msb => 'Title for the Problem',
p_mdb => 'Title for the Drop Box',
p_mbb => 'Title for the Discussion Board',
+ p_mwp => 'Title for Web Page',
p_mab => "Enter user:domain for User's Personal Information Page",
p_mab2 => 'Personal Information Page of ',
p_mab_alrt1 => 'Not a valid user:domain',
@@ -4387,6 +5315,8 @@ sub editing_js {
imscms => 'You must select which Course Management System was the source of the IMS package',
invurl => 'Invalid URL',
titbl => 'Title is blank',
+ more => '(More ...)',
+ less => '(Less ...)',
);
my $crstype = &Apache::loncommon::course_type();
@@ -4395,12 +5325,29 @@ sub editing_js {
if (&HTML::Entities::decode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.folderpath'}) =~ /\:1$/) {
$main_container_page = 1;
}
- my $toplevelmain = 'default&Main%20'.$crstype.'%20Documents%3A%3A%3A%3A%3A';
+ my $toplevelmain =
+ &escape(&mt('Main '.$crstype.' Content').':::::');
my $toplevelsupp = &supplemental_base();
- my $backtourl = '/adm/navmaps';
- if ($supplementalflag) {
+ my $backtourl;
+ if ($env{'docs.exit.'.$env{'request.course.id'}} =~ /^direct_(.+)$/) {
+ my $caller = $1;
+ if ($caller =~ /^supplemental/) {
+ $backtourl = '/adm/supplemental?folderpath='.&escape($caller);
+ } else {
+ my ($map,$id,$res)=&Apache::lonnet::decode_symb($caller);
+ $res = &Apache::lonnet::clutter($res);
+ if (&Apache::lonnet::is_on_map($res)) {
+ $backtourl = &HTML::Entities::encode(&Apache::lonnet::clutter($res),'<>&"').'?symb='.
+ &HTML::Entities::encode($caller,'<>&"');
+ }
+ }
+ } elsif ($env{'docs.exit.'.$env{'request.course.id'}} eq '/adm/menu') {
+ $backtourl = '/adm/menu';
+ } elsif ($supplementalflag) {
$backtourl = '/adm/supplemental';
+ } else {
+ $backtourl = '/adm/navmaps';
}
my $fieldsets = "'ext','doc'";
@@ -4441,11 +5388,26 @@ function makesmppage() {
var title=prompt('$lt{"p_msp"}');
if (title) {
this.document.forms.newsmppg.importdetail.value=
- escape(title)+'=/adm/$udom/$uname/$now/smppg';
+ escape(title)+'=/adm/$udom/$uname/new/smppg';
this.document.forms.newsmppg.submit();
}
}
+function makewebpage(type) {
+ var title=prompt('$lt{"p_mwp"}');
+ var formname;
+ if (type == 'supp') {
+ formname = this.document.forms.supwebpage;
+ } else {
+ formname = this.document.forms.newwebpage;
+ }
+ if (title) {
+ var webpage = formname.importdetail.value;
+ formname.importdetail.value = escape(title)+'='+webpage;
+ formname.submit();
+ }
+}
+
function makesmpproblem() {
var title=prompt('$lt{"p_msb"}');
if (title) {
@@ -4468,7 +5430,7 @@ function makebulboard() {
var title=prompt('$lt{"p_mbb"}');
if (title) {
this.document.forms.newbul.importdetail.value=
- escape(title)+'=/adm/$udom/$uname/$now/bulletinboard';
+ escape(title)+'=/adm/$udom/$uname/new/bulletinboard';
this.document.forms.newbul.submit();
}
}
@@ -4539,7 +5501,7 @@ function makeims(imsform) {
function changename(folderpath,index,oldtitle) {
var title=prompt('$lt{"p_chn"}',oldtitle);
if (title) {
-this.document.forms.renameform.markcopy.value=-1;
+this.document.forms.renameform.markcopy.value='';
this.document.forms.renameform.title.value=title;
this.document.forms.renameform.cmd.value='rename_'+index;
this.document.forms.renameform.folderpath.value=folderpath;
@@ -4547,61 +5509,260 @@ this.document.forms.renameform.submit();
}
}
-function removeres(folderpath,index,oldtitle,skip_confirm) {
-if (skip_confirm || confirm('$lt{"p_rmr1"}\\n\\n$lt{"p_rmr2a"} "'+oldtitle+'" $lt{"p_rmr2b"}')) {
-this.document.forms.renameform.markcopy.value=-1;
-this.document.forms.renameform.cmd.value='del_'+index;
-this.document.forms.renameform.folderpath.value=folderpath;
-this.document.forms.renameform.submit();
-}
-}
-
-function cutres(folderpath,index,oldtitle,container,folder,skip_confirm) {
-if (skip_confirm || confirm('$lt{"p_ctr1a"}\\n$lt{"p_ctr1b"}\\n\\n$lt{"p_ctr2a"} "'+oldtitle+'" $lt{"p_ctr2b"}')) {
-this.document.forms.renameform.cmd.value='cut_'+index;
-this.document.forms.renameform.markcopy.value=index;
-this.document.forms.renameform.copyfolder.value=folder+'.'+container;
-this.document.forms.renameform.folderpath.value=folderpath;
-this.document.forms.renameform.submit();
-}
-}
-
-function markcopy(folderpath,index,oldtitle,container,folder) {
-this.document.forms.renameform.markcopy.value=index;
-this.document.forms.renameform.copyfolder.value=folder+'.'+container;
-this.document.forms.renameform.folderpath.value=folderpath;
-this.document.forms.renameform.submit();
-}
-
function updatePick(targetform,index,caller) {
- var pickitem = document.getElementById('rpick_'+index);
- var picknumitem = document.getElementById('rpicknum_'+index);
+ var pickitem;
+ var picknumitem;
+ var picknumtext;
+ if (index == 'all') {
+ pickitem = document.getElementById('randompickall');
+ picknumitem = document.getElementById('rpicknumall');
+ picknumtext = document.getElementById('rpicktextall');
+ } else {
+ pickitem = document.getElementById('randompick_'+index);
+ picknumitem = document.getElementById('rpicknum_'+index);
+ picknumtext = document.getElementById('randompicknum_'+index);
+ }
if (pickitem.checked) {
var picknum=prompt('$lt{"rpck"}',picknumitem.value);
if (picknum == '' || picknum == null) {
if (caller == 'check') {
pickitem.checked=false;
- return;
+ if (index == 'all') {
+ picknumtext.innerHTML = '';
+ if (caller == 'link') {
+ propagateState(targetform,'rpicknum');
+ }
+ } else {
+ checkForSubmit(targetform,'randompick','settings');
+ }
}
} else {
picknum.toString();
var regexdigit=/^\\d+\$/;
if (regexdigit.test(picknum)) {
picknumitem.value = picknum;
- targetform.changeparms.value='randompick';
- targetform.submit();
+ if (index == 'all') {
+ picknumtext.innerHTML = '
'+picknum+' ';
+ if (caller == 'link') {
+ propagateState(targetform,'rpicknum');
+ }
+ } else {
+ picknumtext.innerHTML = '
'+picknum+' ';
+ checkForSubmit(targetform,'randompick','settings');
+ }
} else {
if (caller == 'check') {
- pickitem.checked=false;
+ if (index == 'all') {
+ picknumtext.innerHTML = '';
+ if (caller == 'link') {
+ propagateState(targetform,'rpicknum');
+ }
+ } else {
+ pickitem.checked=false;
+ checkForSubmit(targetform,'randompick','settings');
+ }
}
return;
}
}
} else {
- picknumitem.value = 0;
- targetform.changeparms.value='randompick';
- targetform.submit();
+ picknumitem.value = '';
+ picknumtext.innerHTML = '';
+ if (index == 'all') {
+ if (caller == 'link') {
+ propagateState(targetform,'rpicknum');
+ }
+ } else {
+ checkForSubmit(targetform,'randompick','settings');
+ }
+ }
+}
+
+function propagateState(form,param) {
+ if (document.getElementById(param+'all')) {
+ var setcheck = 0;
+ var rpick = 0;
+ if (param == 'rpicknum') {
+ if (document.getElementById('randompickall')) {
+ if (document.getElementById('randompickall').checked) {
+ if (document.getElementById('rpicknumall')) {
+ rpick = document.getElementById('rpicknumall').value;
+ }
+ }
+ }
+ } else {
+ if (document.getElementById(param+'all').checked) {
+ setcheck = 1;
+ }
+ }
+ var allidxlist;
+ if ((param == 'remove') || (param == 'cut') || (param == 'copy')) {
+ if (document.getElementById('all'+param+'idx')) {
+ allidxlist = document.getElementById('all'+param+'idx').value;
+ }
+ var actions = new Array ('remove','cut','copy');
+ for (var i=0; i
1) {
+ for (var i=0; i 0) {
+ document.getElementById('randompicknum_'+allidxs[i]).innerHTML = ': '+rpick+' ';
+ } else {
+ document.getElementById('randompicknum_'+allidxs[i]).innerHTML = '';
+ }
+ }
+ }
+ } else {
+ if (setcheck == 1) {
+ document.getElementById(param+'_'+allidxs[i]).checked = true;
+ } else {
+ document.getElementById(param+'_'+allidxs[i]).checked = false;
+ if (param == 'randompick') {
+ document.getElementById('randompicknum_'+allidxs[i]).innerHTML = '';
+ }
+ }
+ }
+ }
+ }
+ if (setcheck == 1) {
+ if ((param == 'remove') || (param == 'cut') || (param == 'copy')) {
+ var actions = new Array('copy','cut','remove');
+ for (var i=0; i 1) {
+ for (var j=0; j$lt{'more'}';
+ } else {
+ document.getElementById('more'+caller).innerHTML = '';
+ }
+ if (caller == 'actions') {
+ setClass(value);
+ setBoxes(value);
+ }
+ }
+ var showButton = multiSettings();
+ if (showButton != 1) {
+ showButton = multiActions();
+ }
+ if (document.getElementById('multisave')) {
+ if (showButton == 1) {
+ document.getElementById('multisave').style.display='block';
+ } else {
+ document.getElementById('multisave').style.display='none';
+ }
+ }
+ resize_scrollbox('contentscroll','1','1');
+ return;
+}
+
+function toggleCheckUncheck(caller,more) {
+ if (more == 1) {
+ document.getElementById('more'+caller).innerHTML = ' $lt{'less'} ';
+ document.getElementById('allfields'+caller).style.display='block';
+ } else {
+ document.getElementById('more'+caller).innerHTML = ' $lt{'more'} ';
+ document.getElementById('allfields'+caller).style.display='none';
+ }
+ resize_scrollbox('contentscroll','1','1');
+}
+
+function multiSettings() {
+ var inuse = 0;
+ var settingsform = document.togglemultsettings;
+ if (settingsform.showmultpick.length > 1) {
+ for (var i=0; i 1) {
+ for (var i=0; i 0) {
+ form.multichange.value = numchanges;
+ }
+ }
+ var dosettings = multiSettings();
+ if (dosettings == 1) {
+ form.allencrypturl.value = '';
+ form.allhiddenresource.value = '';
+ form.changeparms.value = 'all';
+ var allidxlist = document.cumulativesettings.allidx.value;
+ if ((allidxlist != '') && (allidxlist != null)) {
+ var allidxs = allidxlist.split(',');
+ if (allidxs.length > 1) {
+ for (var i=0; i 0) || (dosettings == 1)) {
+ form.submit();
+ return true;
+ }
+ return false;
+}
+
+function setClass(value) {
+ var cutclass = 'LC_docs_cut';
+ var copyclass = 'LC_docs_copy';
+ var removeclass = 'LC_docs_remove';
+ var cutreg = new RegExp("\\\\b"+cutclass+"\\\\b");
+ var copyreg = new RegExp("\\\\b"+copyclass+"\\\\b");
+ var removereg = new RegExp("\\\\"+removeclass+"\\\\b");
+ var links = document.getElementsByTagName('a');
+ for (var i=0; i