--- loncom/interface/lonsimplepage.pm 2003/02/10 16:22:28 1.4
+++ loncom/interface/lonsimplepage.pm 2020/09/08 23:54:40 1.105
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Simple Page Editor
#
-# $Id: lonsimplepage.pm,v 1.4 2003/02/10 16:22:28 www Exp $
+# $Id: lonsimplepage.pm,v 1.105 2020/09/08 23:54:40 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -31,141 +31,374 @@ package Apache::lonsimplepage;
use strict;
use Apache::Constants qw(:common);
use Apache::loncommon;
+use Apache::lontemplate;
use Apache::lonnet;
-use Apache::lontexconvert;
+use Apache::lonhtmlgateway;
+use Apache::lonlocal;
+use Apache::lonprintout;
+use Apache::lonxml;
+use Apache::longroup;
+use Apache::lonnavmaps();
+use HTML::Entities();
+use LONCAPA;
+
+sub get_db_name {
+ my ($url,$marker,$cdom,$cnum) = @_;
+ my ($udom,$uname,$timemark)=(split(m{/},$url))[2,3,4];
+ if ($marker eq '') {
+ $marker = $timemark;
+ }
+ if (($cdom eq '') || ($cnum eq '')) {
+ $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ }
+ my $db_name;
+
+ if ($cdom && $cnum && ($udom eq $cdom) && ($uname eq $cnum)) {
+ $marker =~ s/\W//g;
+ $db_name = 'grppage_'.$marker;
+ } else {
+ $marker=~s/\D//g;
+ $db_name = 'smppage_'.$marker;
+ }
+ return if (!defined($marker));
+ return $db_name;
+}
sub handler {
my $r = shift;
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
return OK if $r->header_only;
-
+ my $target=$env{'form.grade_target'};
# ------------------------------------------------------------ Print the screen
- $r->print(<
-
-The LearningOnline Network with CAPA
-
-ENDDOCUMENT
- my (undef,undef,undef,undef,$marker)=split(/\//,$r->uri);
+ if ($target eq 'tex') {
+ $r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}));
+ }
+
# Is this even in a course?
- unless ($ENV{'request.course.id'}) {
- $r->print('Not in a course');
+ unless ($env{'request.course.id'}) {
+ if ($target ne 'tex') {
+ &Apache::loncommon::simple_error_page($r,'','Not in a course');
+ } else {
+ $r->print('\textbf{Not in a course}\end{document}');
+ }
return OK;
}
- $marker=~s/\D//g;
+ my $marker = (split(m{/},$r->uri))[4];
+ my $db_name = &get_db_name($r->uri,$marker);
- unless ($marker) {
- $r->print('Invalid call');
- return OK;
+ my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
+ my ($group,$group_desc);
+
+ my %curr_group = ();
+ my %groupinfo = ();
+ if ($db_name =~ /^grppage_/) {
+ $group = $marker;
+ $group =~ s/\W//g;
+ my %curr_groups = &Apache::longroup::coursegroups($dom,$crs,$group);
+ if (!%curr_groups) {
+ &Apache::loncommon::simple_error_page($r,'','Invalid group name');
+ return OK;
+ }
+ %groupinfo =
+ &Apache::longroup::get_group_settings($curr_groups{$group});
+ $group_desc = &unescape($groupinfo{'description'});
}
- my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
- my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
+ if (!$db_name) {
+ &Apache::loncommon::simple_error_page($r,'','Invalid call');
+ return OK;
+ }
# --------------------------------------------------------- The syllabus fields
- my %syllabusfields=(
+ my %syllabusfields=&Apache::lonlocal::texthash(
'aaa_title' => 'Page Title',
- 'bbb_content' => 'Content',
+ 'bbb_content' => ($target eq 'tex'?'':'Content'),
'ccc_webreferences' => 'Web References');
+ if ($group ne '') {
+ $syllabusfields{'abb_links'} = &mt('Available Group Tools');
+ }
-# --------------------------------------------------------------- Force Student
+
+# ------------------------------------------------------------ Get query string
&Apache::loncommon::get_unprocessed_cgi
- ($ENV{'QUERY_STRING'},['forcestudent']);
- my $forcestudent='';
- if ($ENV{'form.forcestudent'}) { $forcestudent='student'; };
+ ($ENV{'QUERY_STRING'},['forceedit','todocs',
+ 'register','ref']);
+# --------------------------------------------------------------- Force Student
+ my ($forceedit,$forcestudent);
+ $forceedit = $env{'form.forceedit'};
+ if (!$forceedit) {
+ $forcestudent=1;
+ }
+
+ my $refarg;
+ if ($env{'form.ref'}) {
+ $refarg = '&ref='.$env{'form.ref'};
+ }
+
+ my %syllabus=&Apache::lonnet::dump($db_name,$dom,$crs);
- my %syllabus=&Apache::lonnet::dump('smppage_'.$marker,$dom,$crs);
-
# --------------------------------------- There is such a user, get environment
+ my ($registered,$group_view_perm,$group_edit_perm,$group_home_view,
+ $group_home_edit,$has_group_access);
+ my $brcrum = [];
+ if ($group eq '') {
+ $registered = $env{'form.register'};
+ } else {
+ unless ($env{'form.ref'} eq 'grouplist') {
+ $registered = $env{'form.register'};
+ }
+ $group_view_perm =
+ &Apache::lonnet::allowed('vcg',$env{'request.course.id'}.
+ ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));
+ $group_edit_perm =
+ &Apache::lonnet::allowed('mdg',$env{'request.course.id'}.
+ ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));
+ $group_home_view = &Apache::lonnet::allowed('vgh',
+ $env{'request.course.id'}.'/'.$group);
+ $group_home_edit = &Apache::lonnet::allowed('mgh',
+ $env{'request.course.id'}.'/'.$group);
+ if ($group_view_perm || $group_edit_perm || $group_home_view ||
+ $group_home_edit || &Apache::longroup::check_group_access($group)) {
+ $has_group_access = 1;
+ if (($env{'form.ref'} eq 'grouplist') && ($target ne 'tex') &&
+ (!$registered)) {
+ $brcrum = &grouppage_breadcrumbs($dom,$crs,$group,$group_desc);
+ }
+ }
+ }
+
+ if ($target ne 'tex') {
+ my $title = ($group eq '')? 'Simple Course Page':'Simple Group Page';
+ my $start_page =
+ &Apache::loncommon::start_page($title,undef,
+ {'domain' => $dom,
+ 'group' => $group,
+ 'bread_crumbs' => $brcrum,
+ 'force_register' => $registered,
+ });
+ $r->print($start_page);
+ }
- $r->print(&Apache::loncommon::bodytag
- ("Course Page",$forcestudent,'','',$dom));
+ if ($group ne '') {
+ if ($has_group_access) {
+ if ((!$group_home_edit) && (!$group_home_view) &&
+ (!$group_view_perm) && (!$group_edit_perm)) {
+ $r->print(&Apache::longroup::display_group_links($r,$env{'form.grade_target'},$group,
+ 'view',$refarg,undef,undef,%groupinfo));
+ if ($env{'form.grade_target'} ne 'tex') {
+ $r->print(&Apache::loncommon::end_page());
+ } else {
+ $r->print('\end{document}');
+ }
+ return OK;
+ }
+ } else {
+ my $msg =
+ &mt('You do not currently have rights to view this group.');
+ if ($target ne 'tex') {
+ $r->print(''.$msg.'
'.
+ &Apache::loncommon::end_page());
+ } else {
+ $r->print('\textbf{'.$msg.'}\end{document}');
+ }
+ return OK;
+ }
+ my ($blocked,$blocktext) =
+ &Apache::loncommon::blocking_status('groups');
+ if ($blocked) {
+ $r->print($blocktext);
+ $r->print(&Apache::loncommon::end_page());
+ return OK;
+ }
+ }
+
+ my $allowed;
+
+ if ($group ne '') {
+ $allowed = $group_edit_perm;
+ if (!$allowed) {
+ $allowed = $group_home_edit;
+ }
+ } else {
+ $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
+ }
+
+ if ($forcestudent or $target eq 'tex') { $allowed=0; }
- my $allowed=&Apache::lonnet::allowed('srm',$ENV{'request.course.id'});
+ if (($env{'form.uploaddoc.filename'} and $target ne 'tex') &&
+ ($env{'form.storeupl'}) && ($allowed)) {
+ if ($env{'form.uploaddoc.filename'}=~/\.(gif|jpg|png|jpeg)$/i) {
+ if ($syllabus{'uploaded.photourl'}) {
+ &Apache::lonnet::removeuploadedurl($syllabus{'uploaded.photourl'});
+ }
+ if ($group ne '') {
+ $syllabus{'uploaded.photourl'}=&Apache::lonnet::userfileupload(
+ 'uploaddoc','coursedoc',
+ "grouppage/$group");
+ } else {
+ $syllabus{'uploaded.photourl'}=
+ &Apache::lonnet::userfileupload('uploaddoc','coursedoc',
+ "simplepage/$marker");
+ }
+ }
+ $syllabus{'uploaded.lastmodified'}=time;
+ &Apache::lonnet::put($db_name,\%syllabus,$dom,$crs);
+ }
+# if ($allowed && $env{'form.delupl'}) {
+# if ($syllabus{'uploaded.photourl'}) {
+# &Apache::lonnet::removeuploadedurl($syllabus{'uploaded.photourl'});
+# delete($syllabus{'uploaded.photourl'});
+# &Apache::lonnet::del('simplepage',['uploaded.photourl']);
+# }
+# }
+ if (($allowed) && ($env{'form.storesyl'})) {
+ foreach my $syl_field (keys(%syllabusfields)) {
+ my $field=$env{'form.'.$syl_field};
+ chomp($field);
+ my $gateway = Apache::lonhtmlgateway->new();
+ $field = $gateway->process_incoming_html($field,1);
+ $syllabus{$syl_field}=$field;
+ }
+ $syllabus{'uploaded.lastmodified'}=time;
+ &Apache::lonnet::put($db_name,\%syllabus,$dom,$crs);
+ }
- if ($forcestudent) { $allowed=0; }
-
- if ($allowed) {
- $r->print(
- 'Show Public View'.
- &Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView').'
');
- }
- if (($ENV{'form.uploaddoc.filename'}) &&
- ($ENV{'form.storeupl'}) && ($allowed)) {
- if ($ENV{'form.uploaddoc.filename'}=~/\.(gif|jpg|png|jpeg)$/) {
- $syllabus{'uploaded.photourl'}=
- &Apache::lonnet::userfileupload('uploaddoc',1);
- }
- $syllabus{'uploaded.lastmodified'}=time;
- &Apache::lonnet::put('smppage_'.$marker,\%syllabus,$dom,$crs);
- }
- if (($allowed) && ($ENV{'form.storesyl'})) {
- foreach (keys %syllabusfields) {
- my $field=$ENV{'form.'.$_};
- $field=~s/\s+$//s;
- $field=&Apache::lonfeedback::clear_out_html($field,1);
- $syllabus{$_}=$field;
- }
- $syllabus{'uploaded.lastmodified'}=time;
- &Apache::lonnet::put('smppage_'.$marker,\%syllabus,$dom,$crs);
- }
+#---Print help Text
+ if($target ne 'tex'){
+ if ($allowed) {
+ $r->print(&Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes',&mt('Help with filling in text boxes')));
+ }
+ }
# ---------------------------------------------------------------- Get syllabus
- if (($syllabus{'uploaded.lastmodified'}) || ($allowed)) {
- if ($syllabus{'uploaded.photourl'}) {
- $r->print('');
- }
- if ($allowed) {
- $r->print(
- '
');
+ }
+
+ if ($allowed) {
+ &Apache::lontemplate::print_start_template($r, &mt('Upload a Photo'),'LC_Box');
+ $r->print($image);
+ $r->print("
");
+ $r->print(
+ ''.
+ ''.
+ ''.
+ '');
+ &Apache::lontemplate::print_end_template($r);
+
+
+# if ($syllabus{'uploaded.photourl'}) {
+# $r->print('');
+# }
+ }
+ #Image in Student view and printout.
+ else {
+ $r->print($image);
+ }
+
+ my $links_handler = sub {
+ my ($r, $field, $message, $group, $data_ref, $fields_ref, $target, $allowed) = @_;
+ if ($group ne '') {
+ my %data = %{$data_ref};
+ my %fields = %{$fields_ref};
+ $r->print('
');
+ $r->print(&Apache::longroup::display_group_links($r,$target,$group,'edit',
+ $refarg,undef,undef,%groupinfo));
+ $r->print('
');
+ }
+ };
+ my $title_handler = sub {};
+ my %custom_handlers = (
+ 'abb_links' => $links_handler,
+ 'aaa_title' => $title_handler
+ );
+ &Apache::lontemplate::print_template_fields($r, \%syllabus, \%syllabusfields,
+ $target, $allowed, Apache::lontemplate->RICH_TEXT_DETECT_HTML, \%custom_handlers, $group);
+
+ if ($allowed && ($env{'form.grade_target'} ne 'tex')) {
+ $r->print(&Apache::lonhtmlcommon::htmlareaselectactive().
+ '');
+ }
+
+ } else {
+ if ($group ne '') {
+ $r->print(&Apache::longroup::display_group_links($r,$target,$group,'view',$refarg,undef,undef,%groupinfo));
+ } else {
+ my $text=&mt('No page information provided.');
+ if ($target ne 'tex') {
+ $r->print(''.$text.'
');
+ } else {
+ $r->print($text)
+ }
+ }
+ }
+ if ($env{'form.grade_target'} ne 'tex') {
+ $r->print(&Apache::loncommon::end_page());
} else {
- $r->print('No page information provided.
');
+ $r->print('\end{document}');
}
- $r->print('