-MathJax provides rendered equations whose source code can be extracted in TeX and MathML formats by right clicking the equation.
-
-
-
+
$text
$construction
@@ -774,7 +784,11 @@ sub verify_and_change_domcoord {
}
my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Block access to Authoring Space').' ',''.$status.' '));
$message=&Apache::loncommon::confirmwrapper($message);
- &print_main_menu($r,$message);
+ if ($env{'form.returnurl'}) {
+ &do_redirect($r,$env{'form.returnurl'},$message);
+ } else {
+ &print_main_menu($r,$message);
+ }
}
#################################################################
@@ -788,7 +802,7 @@ sub lockwarning {
my $textbottom=&mt('Changing roles or logging out may result in data corruption.');
my ($num,%which)=&Apache::lonnet::get_locks();
my $which='';
- foreach my $id (keys %which) {
+ foreach my $id (keys(%which)) {
$which.=''.$which{$id}.' ';
}
my $change=&mt('Override');
@@ -1218,7 +1232,7 @@ sub verify_and_change_colors {
);
my $message='';
- foreach my $item (keys %colortypes) {
+ foreach my $item (keys(%colortypes)) {
my $color=$env{'form.'.$item};
if (!($color =~ /^#/)) {
$color = '#' . $color;
@@ -1249,7 +1263,7 @@ sub verify_and_change_colors {
# password handler subroutines #
######################################################
sub passwordchanger {
- my ($r,$errormessage,$caller,$mailtoken) = @_;
+ my ($r,$errormessage,$caller,$mailtoken,$timelimit,$extrafields) = @_;
# This function is a bit of a mess....
# Passwords are encrypted using londes.js (DES encryption)
$errormessage = ($errormessage || '');
@@ -1261,6 +1275,12 @@ sub passwordchanger {
$r->print(Apache::loncommon::start_page('Personal Data'));
$r->print(Apache::lonhtmlcommon::breadcrumbs('Change Password'));
}
+ my ($blocked,$blocktext) =
+ &Apache::loncommon::blocking_status('passwd');
+ if ($blocked) {
+ $r->print(''.$blocktext.'
');
+ return;
+ }
if ((!defined($caller)) || ($caller eq 'preferences')) {
$user = $env{'user.name'};
$domain = $env{'user.domain'};
@@ -1268,42 +1288,42 @@ sub passwordchanger {
$caller = 'preferences';
}
} elsif ($caller eq 'reset_by_email') {
- my %data = &Apache::lonnet::tmpget($mailtoken);
- if (keys(%data) == 0) {
- $r->print(
- ''
- .&mt('Sorry, the URL you provided to complete the reset of your password was invalid. Either the token included in the URL has been deleted or the URL you provided was invalid. Please submit a [_1]new request[_2] for a password reset, and follow the link to the new URL included in the e-mail that will be sent to you, to allow you to enter a new password.'
- ,'',' ')
- .'
'
- );
- return;
- }
- if (defined($data{time})) {
- if (time - $data{'time'} < 7200) {
- $user = $data{'username'};
- $domain = $data{'domain'};
- $currentpass = $data{'temppasswd'};
- } else {
- $r->print(
- ''
- .&mt('Sorry, the token generated when you requested'
- .' a password reset has expired.')
- .'
'
- );
- return;
- }
+ my %data = &Apache::lonnet::tmpget($mailtoken);
+ if (keys(%data) == 0) {
+ $r->print(
+ ''
+ .&mt('Sorry, the URL you provided to complete the reset of your password was invalid. Either the token included in the URL has been deleted or the URL you provided was invalid. Please submit a [_1]new request[_2] for a password reset, and follow the link to the new URL included in the e-mail that will be sent to you, to allow you to enter a new password.'
+ ,'',' ')
+ .'
'
+ );
+ return;
+ }
+ if (defined($data{time})) {
+ if (time - $data{'time'} < $timelimit) {
+ $user = $data{'username'};
+ $domain = $data{'domain'};
+ $currentpass = $data{'temppasswd'};
} else {
$r->print(
''
- .&mt('Sorry, the URL generated when you requested reset of'
- .' your password contained incomplete information.')
+ .&mt('Sorry, the token generated when you requested'
+ .' a password reset has expired.')
.'
'
);
return;
}
- if (&Apache::lonnet::domain($domain) eq '') {
- $domain = $r->dir_config('lonDefDomain');
- }
+ } else {
+ $r->print(
+ ''
+ .&mt('Sorry, the URL generated when you requested reset of'
+ .' your password contained incomplete information.')
+ .'
'
+ );
+ return;
+ }
+ if (&Apache::lonnet::domain($domain) eq '') {
+ $domain = $r->dir_config('lonDefDomain');
+ }
} else {
$r->print(
''
@@ -1317,9 +1337,9 @@ sub passwordchanger {
return if ($currentauth !~ /^(unix|internal):/);
#
# Generate keys
- my ($lkey_cpass ,$ukey_cpass ) = &des_keys();
- my ($lkey_npass1,$ukey_npass1) = &des_keys();
- my ($lkey_npass2,$ukey_npass2) = &des_keys();
+ my ($lkey_cpass ,$ukey_cpass ) = &Apache::loncommon::des_keys();
+ my ($lkey_npass1,$ukey_npass1) = &Apache::loncommon::des_keys();
+ my ($lkey_npass2,$ukey_npass2) = &Apache::loncommon::des_keys();
# Store the keys in the log files
my $lonhost = $r->dir_config('lonHostID');
my $logtoken=Apache::lonnet::reply('tmpput:'
@@ -1342,7 +1362,7 @@ sub passwordchanger {
my $jsh=Apache::File->new($include."/londes.js");
$r->print(<$jsh>);
}
- $r->print(&jscript_send($caller));
+ $r->print(&jscript_send($caller,$extrafields));
$r->print(<
ENDFORM
- $r->print(&server_form($logtoken,$caller,$mailtoken));
- $r->print(&client_form($caller,\%hexkey,$currentpass,$domain));
+ $r->print(&server_form($logtoken,$caller,$mailtoken,$extrafields));
+ $r->print(&client_form($caller,\%hexkey,$currentpass,$domain,$extrafields));
#
return;
}
sub jscript_send {
- my ($caller) = @_;
+ my ($caller,$extrafields) = @_;
my $output = qq|
|;
}
sub client_form {
- my ($caller,$hexkey,$currentpass,$defdom) = @_;
+ my ($caller,$hexkey,$currentpass,$defdom,$extrafields) = @_;
my %lt=&Apache::lonlocal::texthash(
'email' => 'E-mail Address',
'username' => 'Username',
@@ -1415,34 +1439,40 @@ sub client_form {
my $output = '
+ENDSCREEN
+ }
+}
+
+sub change_authoring_settings {
+ my $r = shift;
+ my $user = $env{'user.name'};
+ my $domain = $env{'user.domain'};
+ my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au','ca','aa']);
+ if (keys(%author_roles) > 0) {
+ my %ausettings=('environment.nocodemirror' => '');
+ if ($env{'form.cmoff'}) { $ausettings{'environment.nocodemirror'}='yes'; }
+ &Apache::lonnet::put('environment',\%ausettings);
+ &Apache::lonnet::appenv({'environment.nocodemirror' => $ausettings{'environment.nocodemirror'}});
+ my $status='';
+ if ($ausettings{'environment.nocodemirror'} eq 'yes') {
+ $status=&mt('on');
+ } else {
+ $status=&mt('off');
+ }
+ my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Deactivate CodeMirror in Authoring Space').' ',''.$status.' '));
+ $message=&Apache::loncommon::confirmwrapper($message);
+ if ($env{'form.returnurl'}) {
+ &do_redirect($r,$env{'form.returnurl'},$message);
+ } else {
+ &print_main_menu($r,$message);
+ }
+ }
+}
+
sub lockednameschanger {
my $r = shift;
&Apache::lonhtmlcommon::add_breadcrumb(
@@ -2116,6 +2223,18 @@ push(@{ $menu[4]->{items} }, {
});
}
+
+ my %author_coauthor_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au','ca','aa']);
+ if (keys(%author_coauthor_roles) > 0) {
+ push(@{ $menu[4]->{items} }, {
+ linktext => 'Authoring Space Configuration',
+ url => '/adm/preferences?action=authorsettings',
+ permission => 'F',
+ icon => 'codemirror.png',
+ linktitle => 'Settings for your authoring space.',
+ });
+ }
+
if (&can_toggle_debug()) {
push(@{ $menu[4]->{items} }, {
linktext => 'Toggle Debug Messages (Currently '.($env{'user.debug'} ? 'on)' : 'off)'),
@@ -2153,10 +2272,22 @@ sub handler {
['action','wysiwyg','returnurl','refpage']);
#
Apache::lonhtmlcommon::clear_breadcrumbs();
- my ($brlink,$brtxt,$brhelp);
+ my ($brlink,$brtxt,$brhelp,$ended);
if (($env{'form.action'} eq 'changerolespref') && ($env{'form.returnurl'} eq '/adm/roles')) {
$brlink ='/adm/roles';
$brtxt = 'User Roles';
+ } elsif ((($env{'form.action'} eq 'changedomcoord') ||
+ ($env{'form.action'} eq 'authorsettings')) &&
+ (($env{'form.returnurl'} =~ m{^/(priv/|res($|/))}) ||
+ ($env{'form.returnurl'} eq '/adm/createuser'))) {
+ $brlink = $env{'form.returnurl'};
+ if ($env{'form.returnurl'} eq '/adm/createuser') {
+ $brtxt = 'User Management';
+ } elsif ($env{'form.returnurl'} =~ m{^/res($\/)}) {
+ $brtxt = 'Browse published resources';
+ } else {
+ $brtxt = 'Authoring Space';
+ }
} else {
$brlink ='/adm/preferences';
$brtxt = 'Set User Preferences';
@@ -2167,15 +2298,17 @@ sub handler {
text => $brtxt,
help => $brhelp,});
if(!exists $env{'form.action'}) {
- &print_main_menu($r);
+ &print_main_menu($r);
+ $ended = 1;
}elsif($env{'form.action'} eq 'changepass'){
&passwordchanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_pass'){
- &verify_and_change_password($r);
+ &verify_and_change_password($r,'preferences','',\$ended);
}elsif($env{'form.action'} eq 'changescreenname'){
&screennamechanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_screenname'){
&verify_and_change_screenname($r);
+ $ended = 1;
}elsif($env{'form.action'} eq 'changemsgforward'){
&msgforwardchanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_msgforward'){
@@ -2184,38 +2317,47 @@ sub handler {
&colorschanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_colors'){
&verify_and_change_colors($r);
+ $ended = 1;
}elsif($env{'form.action'} eq 'changelanguages'){
&languagechanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_languages'){
&verify_and_change_languages($r);
+ $ended = 1;
}elsif($env{'form.action'} eq 'changewysiwyg'){
&wysiwygchanger($r);
}elsif($env{'form.action'} eq 'set_wysiwyg'){
&verify_and_change_wysiwyg($r);
+ $ended = 1;
}elsif($env{'form.action'} eq 'changediscussions'){
&discussionchanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_discussion'){
&verify_and_change_discussion($r);
+ $ended = 1;
}elsif($env{'form.action'} eq 'changerolespref'){
&rolesprefchanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_rolespref'){
&verify_and_change_rolespref($r);
+ $ended = 1;
}elsif($env{'form.action'} eq 'changetexenginepref'){
&texenginechanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_texengine'){
&verify_and_change_texengine($r);
+ $ended = 1;
}elsif($env{'form.action'} eq 'changeicons'){
&iconchanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_icons'){
&verify_and_change_icons($r);
+ $ended = 1;
}elsif($env{'form.action'} eq 'changeclicker'){
&clickerchanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_clicker'){
&verify_and_change_clicker($r);
+ $ended = 1;
}elsif($env{'form.action'} eq 'changedomcoord'){
&domcoordchanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_domcoord'){
&verify_and_change_domcoord($r);
+ $ended = 1;
}elsif($env{'form.action'} eq 'lockwarning'){
&lockwarning($r);
}elsif($env{'form.action'} eq 'verify_and_change_locks'){
@@ -2224,22 +2366,29 @@ sub handler {
&coursedisplaychanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_coursepage'){
&verify_and_change_coursepage($r);
+ $ended = 1;
+ }elsif($env{'form.action'} eq 'authorsettings'){
+ &author_space_settings($r);
+ }elsif($env{'form.action'} eq 'change_authoring_settings'){
+ &change_authoring_settings($r);
+ $ended = 1;
}elsif($env{'form.action'} eq 'debugtoggle'){
if (&can_toggle_debug()) {
&toggle_debug();
}
&print_main_menu($r);
+ $ended = 1;
} elsif ($env{'form.action'} eq 'changelockednames') {
&lockednameschanger($r);
} elsif ($env{'form.action'} eq 'verify_and_change_lockednames') {
&verify_and_change_lockednames($r);
+ $ended = 1;
}
# Properly end the HTML page of all preference pages
# started in each sub routine
# Exception: print_main_menu has its own end_page call
- unless (!exists $env{'form.action'} ||
- $env{'form.action'} eq 'debugtoggle') {
+ unless ($ended) {
$r->print(&Apache::loncommon::end_page());
}
@@ -2312,5 +2461,16 @@ sub updateable_userinfo {
return %updateable;
}
+sub do_redirect {
+ my ($r,$url,$msg) = @_;
+ $r->print(
+ &Apache::loncommon::start_page('Switching Server ...',undef,
+ {'redirect' => [0.5,$url]}).
+ '
'."\n".
+ "$msg\n".
+ &Apache::loncommon::end_page());
+ return;
+}
+
1;
__END__