I need to be able to use your level setting 0-5 with the pages to be able to prevent users from editing pages without permissions. I found the most convenient place to put this admin function was in the current implementation of the print_IndexPage function. I also added a function print_SetLevel to page template. I also added a configuration variable $AdminCertifiesAllUsers to Settings.pl. When set to 1, all new users (with default level 0) can not do anything - i.e. the admin has to set their level to 1-5 for them to create pages and edit existing ones.
PageTemplate.pl:
# rws print_IndexPage changed to list article/article-parent/content-restrictions/userlevels-below-edit-denied
sub print_IndexPage() {
my $ns = shift;
my $temp1 = sprintf($txt{'77'}, $ns);
print qq~<h1>$temp1:</h1><ul>~;
my @pageslist = &db_GetIndexOfPages($ns);
my $level;
my $temp1;
my $isadmin = &is_Admin($AuthUser);
# rws created.print_SetLevel
sub print_SetLevel() {
my $level = shift;
my $page = shift;
my $ns=shift;
if($ns eq "$DefaultNameSpace"){
&db_load_PageData($page);
&db_store_PageData($page, 'article', ''); # force create always
&db_store_PageData($page, 'article/content-restrictions', ''); # force create always
&db_store_PageData($page, 'article/content-restrictions/userlevels-below-edit-denied', "$level");
&db_flush_PageData($page);
}
if($ns eq "$UserNameSpace"){
&db_load_UserData($page);
&db_store_UserData($page, 'userprofile', ''); # force create always
&db_store_UserData($page, 'userprofile/user-level', "$level");
&db_flush_UserData($page);
}
print qq~<b>$txt{'107'} $page $txt{'108'} $level.</b> <a href="$WikiURL?action=index&ns=$ns">$txt{'109'}</a>~;
}
English.pl:
#changed verbage for 47 to better suit general situation.
$txt{'47'} = 'You do not have permissions to access this page!'; # if page edit is attempted -rws
# added to english.pl for admin level setting: rws
$txt{'105'} = 'Level';
$txt{'106'} = 'Set Level';
$txt{'107'} = 'Access level for';
$txt{'108'} = 'has been set to';
$txt{'109'} = 'Refresh List';
mxwiki.pl:
# rws added page access level switch
} elsif ($form{'action'} eq 'setpglevel'){
print_PageHeader();
&print_SetLevel($form{'level'},$form{'page'},$form{'ns'});
print_PageFooter();
# added above right before the following code (for reference only):
} else {
for my $key ( keys %form ) {
my $value = $form{$key};
print "$key => $value\n";
}
# The above was for the admin level setting of user and site within the Index functionality.
# The following is for disallowing new users to do anything until the admin sets the level:
Settings.pl:
$AdminCertifiesAllUsers = 1; # 0 - disabled, 1 - enabled, new users can't do anything until admin raises their level to 1 or higher (rws).
UserAuth.pl:
#modified this existing function (2nd to last line):
sub can_edit(){
my $username = shift;
my $pagename = shift;
my ($ns, $name) = &get_page_namespace($pagename);
if (!(&namespace_exists($ns))) {return 0;}
if (&is_Admin($username)) {return 1;}
if ($pagename =~ m/(.+)[\/].+[\/].*/) {return 0;}
if (-e "$Database/global/sitelock") {return 0;}
if (!(&db_PageExists($pagename))) {return 1;}
my $pagel = &db_get_PageData($pagename, 'article/content-restrictions/userlevels-below-edit-denied');
my $userl;
if (&db_get_PageData($pagename, 'article/type') eq 'complete_original_work') {
if ($AuthUser eq &db_get_PageData($pagename, 'article/original-author')) {return 1;} else {return 0;}
}
if ($username eq '') {$userl = 0;} else {$userl = &get_userlevel($username);}
if ($ns eq $UserNameSpace) {
if ($AuthUser ne $name) {return 0;} else {return 1;}
}
I need to be able to use your level setting 0-5 with the pages to be able to prevent users from editing pages without permissions. I found the most convenient place to put this admin function was in the current implementation of the print_IndexPage function. I also added a function print_SetLevel to page template. I also added a configuration variable $AdminCertifiesAllUsers to Settings.pl. When set to 1, all new users (with default level 0) can not do anything - i.e. the admin has to set their level to 1-5 for them to create pages and edit existing ones.
PageTemplate.pl:
# rws print_IndexPage changed to list article/article-parent/content-restrictions/userlevels-below-edit-denied
sub print_IndexPage() {
my $ns = shift;
my $temp1 = sprintf($txt{'77'}, $ns);
print qq~<h1>$temp1:</h1><ul>~;
my @pageslist = &db_GetIndexOfPages($ns);
my $level;
my $temp1;
my $isadmin = &is_Admin($AuthUser);
foreach $page (@pageslist){
if($ns eq '$DefaultNameSpace'){
&db_load_PageData($page);
$level = &db_get_PageData($page, 'article/content-restrictions/userlevels-below-edit-denied');
}elsif($ns eq '$UserNameSpace'){
&db_load_UserData($page);
$level = &db_get_UserData($page, 'userprofile/user-level');
}
if($level eq "") {$level=0;}
print qq~<li><a href="$WikiURL?page=$ns:$page">$page</a> <i>($txt{'105'}:$level) ~;
if($isadmin>0){
print qq~ $txt{'106'}: <a href="$WikiURL?action=setpglevel&level=0&page=$page&ns=$ns">0</a> | <a href="$WikiURL?action=setpglevel&level=1&page=$page&ns=$ns">1</a> | <a href="$WikiURL?action=setpglevel&level=2&page=$page&ns=$ns">2</a> | <a href="$WikiURL?action=setpglevel&level=3&page=$page&ns=$ns">3</a> | <a href="$WikiURL?action=setpglevel&level=4&page=$page&ns=$ns">4</a> | <a href="$WikiURL?action=setpglevel&level=5&page=$page&ns=$ns">5</a> | ~;
}
print qq~</i></li>~;
}
print qq~</ul>~;
}
# rws created.print_SetLevel
sub print_SetLevel() {
my $level = shift;
my $page = shift;
my $ns=shift;
if($ns eq "$DefaultNameSpace"){
&db_load_PageData($page);
&db_store_PageData($page, 'article', ''); # force create always
&db_store_PageData($page, 'article/content-restrictions', ''); # force create always
&db_store_PageData($page, 'article/content-restrictions/userlevels-below-edit-denied', "$level");
&db_flush_PageData($page);
}
if($ns eq "$UserNameSpace"){
&db_load_UserData($page);
&db_store_UserData($page, 'userprofile', ''); # force create always
&db_store_UserData($page, 'userprofile/user-level', "$level");
&db_flush_UserData($page);
}
print qq~<b>$txt{'107'} $page $txt{'108'} $level.</b> <a href="$WikiURL?action=index&ns=$ns">$txt{'109'}</a>~;
}
English.pl:
#changed verbage for 47 to better suit general situation.
$txt{'47'} = 'You do not have permissions to access this page!'; # if page edit is attempted -rws
# added to english.pl for admin level setting: rws
$txt{'105'} = 'Level';
$txt{'106'} = 'Set Level';
$txt{'107'} = 'Access level for';
$txt{'108'} = 'has been set to';
$txt{'109'} = 'Refresh List';
mxwiki.pl:
# rws added page access level switch
} elsif ($form{'action'} eq 'setpglevel'){
print_PageHeader();
&print_SetLevel($form{'level'},$form{'page'},$form{'ns'});
print_PageFooter();
# added above right before the following code (for reference only):
} else {
for my $key ( keys %form ) {
my $value = $form{$key};
print "$key => $value\n";
}
# The above was for the admin level setting of user and site within the Index functionality.
# The following is for disallowing new users to do anything until the admin sets the level:
Settings.pl:
$AdminCertifiesAllUsers = 1; # 0 - disabled, 1 - enabled, new users can't do anything until admin raises their level to 1 or higher (rws).
PageTemplate.pl:
#modified this existing function:
sub print_NewPageForm() {
# rws modified.
if ($AuthUser eq '') {$userlevel = 0;} else {$userlevel = &get_userlevel($AuthUser);}
if($AdminCertifiesAllUsers==1 && $userlevel==0) {
print $txt{'47'};
}else{
print qq~<h1></h1><p>
<form method="get" action="$WikiURL?action=edit">
$txt{'89'} <input type="text" name="page" size="40" value="$txt{'91'}">
<br><br><input type="submit" name="submit" value="$txt{'90'}" />
</form>
</p>~;
}
}
UserAuth.pl:
#modified this existing function (2nd to last line):
sub can_edit(){
my $username = shift;
my $pagename = shift;
my ($ns, $name) = &get_page_namespace($pagename);
if (!(&namespace_exists($ns))) {return 0;}
if (&is_Admin($username)) {return 1;}
if ($pagename =~ m/(.+)[\/].+[\/].*/) {return 0;}
if (-e "$Database/global/sitelock") {return 0;}
if (!(&db_PageExists($pagename))) {return 1;}
my $pagel = &db_get_PageData($pagename, 'article/content-restrictions/userlevels-below-edit-denied');
my $userl;
if (&db_get_PageData($pagename, 'article/type') eq 'complete_original_work') {
if ($AuthUser eq &db_get_PageData($pagename, 'article/original-author')) {return 1;} else {return 0;}
}
if ($username eq '') {$userl = 0;} else {$userl = &get_userlevel($username);}
if ($ns eq $UserNameSpace) {
if ($AuthUser ne $name) {return 0;} else {return 1;}
}
if($AdminCertifiesAllUsers==1 && $userl==0) {return 0;} #rws added.
return ($userl >= $pagel);
}
I think that's it. Hope I didn't forget anything. :-)
There is a small bug:
UserNameSpace and DefaultNameSpace should have double quotes, not single in the if($ns eq statements. Corrected below.
sub print_IndexPage() {
my $ns = shift;
my $temp1 = sprintf($txt{'77'}, $ns);
print qq~<h1>$temp1:</h1><ul>~;
my @pageslist = &db_GetIndexOfPages($ns);
my $level;
my $temp1;
my $isadmin = &is_Admin($AuthUser);
print "\n<!-- $ns, $DefaultNameSpace, $UserNameSpace -->\n";
foreach $page (@pageslist){
if($ns eq "$DefaultNameSpace"){
&db_load_PageData($page);
$level = &db_get_PageData($page, 'article/content-restrictions/userlevels-below-edit-denied');
}elsif($ns eq "$UserNameSpace"){
&db_load_UserData($page);
$level = &db_get_UserData($page, 'userprofile/user-level');
}
if($level eq "") {$level=0;}
print qq~<li><a href="$WikiURL?page=$ns:$page">$page</a> <i>($txt{'105'}:$level) ~;
if($isadmin>0){
print qq~ $txt{'106'}: <a href="$WikiURL?action=setpglevel&level=0&page=$page&ns=$ns">0</a> | <a href="$WikiURL?action=setpglevel&level=1&page=$page&ns=$ns">1</a> | <a href="$WikiURL?action=setpglevel&level=2&page=$page&ns=$ns">2</a> | <a href="$WikiURL?action=setpglevel&level=3&page=$page&ns=$ns">3</a> | <a href="$WikiURL?action=setpglevel&level=4&page=$page&ns=$ns">4</a> | <a href="$WikiURL?action=setpglevel&level=5&page=$page&ns=$ns">5</a> | ~;
}
print qq~</i></li>~;
}
print qq~</ul>~;
}