// Извлекает из кук имя текущего пользователя и возвращает его, а также
// сохраняет в глобальной переменной forumUser;
var forumUser;
+var userStatus;
function getUserName() {
var cookietext =document.cookie;
var pos = cookietext.indexOf("sluser=");
if (end == -1) end=cookietext.length;
var value= cookietext.substring(start,end);
forumUser = value;
- return unescape(value);
+ return decodeURIComponent(value);
}
//
// Шаблон страницы содержит два специальных тэга link с rel=forum-script
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) {
}
}
}
+
//
// Добывает с сервера информацию о модераторах данного форума и
// возвращает user, moderator или admin в зависисмости от статуса
// указанного пользователя.
//
function getUserRights(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");
+ for(var path="",i=0;i<depth;path+="../",i++) {
+ xhr.open("GET", path+"perms.txt",false);
+ xhr.send("");
+ if(xhr.status!=200) continue;
+
+ 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";
+ }
+
+ xhr.open("GET", path+".forum",false);
+ xhr.send("");
+ if(xhr.status==403 || xhr.status==200) break;
+ }
+
+ return status;
}
+
// Обработчик body onLoad
// Пробегается по странице и прячет все элементы
// управления, которые не разрешены данному пользователю
// позиционируем форму под текущей ссылкой.
return false;
}
+
+/**
+* Создаёт объект XMLHttpRequest, предварительно уничтожая существующий,
+* если такой существует.
+*/
+function getXMLHttpRequest()
+{
+ try {
+ return xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
+ } catch (e) {
+ try {
+ return new ActiveXObject("Microsoft.XMLHTTP");
+ } catch (E) {
+ if (typeof XMLHttpRequest!='undefined')
+ return new XMLHttpRequest();
+ }
+ }
+
+ return false;
+}
+