// Извлекает из кук имя текущего пользователя и возвращает его, а также
// сохраняет в глобальной переменной forumUser;
var forumUser;
+var userStatus;
function getUserName() {
var cookietext =document.cookie;
var pos = cookietext.indexOf("sluser=");
var end = cookietext.indexOf(";",start);
if (end == -1) end=cookietext.length;
var value= cookietext.substring(start,end);
- forumUser = value;
- return decodeURIComponent(value);
+ forumUser = decodeURIComponent(value);
+ return forumUser;
}
//
// Шаблон страницы содержит два специальных тэга link с rel=forum-script
}
}
function showUser(username) {
- getBaseURLs();
if (!username) {
return ;
- }
+ }
+ userStatus = getUserRights(username);
var links=document.getElementsByTagName("a");
for (i=0;i<links.length;i++) {
if (links[i].className == "userurl") {
links[i].href=userListUrl+"/" + username;
}
links[i].appendChild(document.createTextNode(username));
+ links[i].className = userStatus;
} else if (links[i].href.substring(0,forumScriptUrl.length)==
forumScriptUrl && links[i].href.indexOf("login=")!=-1) {
while (links[i].childNodes.length>0) {
// указанного пользователя.
//
function getUserRights(user) {
- status="user";
+ var status="user";
var xhr=getXMLHttpRequest();
if(!xhr) return status;
-
+ // Strip http:// prefix from OpenID url
+ if (user.substring(0,7) == "http://") {
+ user=user.substring(7,user.length);
+ }
var hr=location.href.match(/^\w+:\/\/[^/]*\/([^?#]+)/);
if(hr==null) return status;
var depth=hr[1].split(/\//).length;
- var re=new RegExp("\n\[\s*(admins|moderators|banned)\s*\]\s*[^[]+\n"+user+"\n","m");
+ var re=new RegExp("\n\\\[\s*(admins|moderators|banned)\s*\\\]\s*[^[]*\n"+user+"\n","m");
for(var path="",i=0;i<depth;path+="../",i++) {
- xhr.open(GET, path+"perms.txt",false);
+ xhr.open("GET", path+"perms.txt",false);
xhr.send("");
if(xhr.status!=200) continue;
- var perms=("\n"+xhr.responsText+"\n").match(re);
+ var perms=("\n"+xhr.responseText+"\n").match(re);
if(perms!=null) {
if(perms[1]=="banned") return "banned";
if(perms[1]=="admins") return "admin";
- status=="moderator";
+ status="moderator";
+
}
- xhr.open(GET, path+".forum",false);
+ xhr.open("GET", path+".forum",false);
xhr.send("");
- if(xhr.status==403) break;
+ if(xhr.status==403 || xhr.status==200) break;
}
-
- return "user";
+ return status;
}
// Обработчик body onLoad
// Пробегается по странице и прячет все элементы
// управления, которые не разрешены данному пользователю
//
+function customizePage() {
+ getBaseURLs();
+ showUser(getUserName());
+ hideDeniedOperations();
+}
+// Заготовка на будущее
function hideDeniedOperations() {
- var user =getUserName();
- var rights;
- if (user) {
- rights = getUserRights;
+
+ var user = forumUser;
+ var rights = userStatus;
+ if (user && user.indexOf("http://")==0) {
+ user=user.substring(7,user.length);
}
if (rights == "admin") {
// Админу можно все
return;
- } else if (rights == "moderator") {
- // Убираем только администраторскую функцию setrights
- } else if (user) {
- // Убираем модераторские функции move и newforum
+ }
+ var links=document.getElementsByTagName("a");
+ var forms=document.getElementsByTagName("form");
+ // Убираем только администраторскую функцию setrights
+ for (i=0;i<links.length;i++) {
+ if (links[i].href.indexOf("setrights=") != -1) {
+ links[i].style.visibility="hidden";
+ }
+ }
+ for (i=0;i<forms.length;i++) {
+ if (forms[i].className == "foruminfo") {
+ var inputs = forms[i].getElementsByTagName("input");
+ for (j=0;j<inputs.length;j++) {
+ if (inputs[j].name == "setrights") {
+ inputs[j].style.visibility="hidden";
+ }
+ }
+ }
+ }
+ if (rights == "moderator") {
+ return;
+ }
+ for (i=0;i<forms.length;i++) {
+ if (forms[i].className == "foruminfo") {
+ forms[i].style.display="none";
+ } else if (forms[i].className == "msginfo"||
+ forms[i].className=="topicinfo") {
+ if (rights=="banned") {
+ forms[i].style.display="none";
+ } else {
+ var inputs = forms[i].getElementsByTagName("input");
+ var my_item = false;
+ for (j=0;j<inputs.length;j++) {
+ if (inputs[j].name == "move") {
+ inputs[j].style.visibility="hidden";
+ }
+ }
+ if (user) {
+ for (j=0;j<inputs.length;j++) {
+ if (inputs[j].name == "author") {
+ my_item = inputs[j].value == user;
+ break;
+ }
+ }
+ }
+ if (!my_item) {
+ for (j=0;j<inputs.length;j++) {
+ if (inputs[j].name == "edit" ||
+ inputs[j].name == "delete") {
+ inputs[j].style.visibility="hidden";
+ }
+ }
+ }
+ }
+ }
+ }
+ // Убираем все модераторские операции из ссылок
+ for (i=0;i<links.length;i++) {
+ if (links[i].href.indexOf("newforum=")!=-1 ||
+ links[i].href.indexOf("move=")!=-1) {
+ links[i].style.visibility="hidden";
+ }
- // Пробегаемся по всем репликам и там, где автор != user
- // убираем edit и delete
- } else {
- // Убираем вообще все, включая reply
- }
+ }
+ if (!forumUser || rights == "banned") {
+ for (i=0;i<links.length;i++) {
+ if (links[i].href.indexOf("newtopic=")!=-1 ||
+ links[i].href.indexOf("edit=")!=-1 ||
+ links[i].href.indexOf("delete=")!=-1||
+ (rights == "banned" && links[i].href.indexOf("reply=")!=-1)) {
+ links[i].style.visibility="hidden";
+ }
+ }
+ return;
+ }
+ // Убираем операции edit и delete для тех объектов, где юзер не
+ // автор
+
}