commit d611025b69453ef75daa1fc9b0abc21cee96cef8
parent 2e771bd19aa4ec59e7c531af8e6af5ddf9f2332f
Author: markseu <mark2011@mayberg.se>
Date: Thu, 2 Jun 2016 17:31:42 +0200
System update (refactoring)
Diffstat:
3 files changed, 299 insertions(+), 260 deletions(-)
diff --git a/system/plugins/webinterface.css b/system/plugins/webinterface.css
@@ -1,4 +1,4 @@
-/* Yellow web interface 0.6.7 */
+/* Yellow web interface 0.6.8 */
.yellow-bar { position:relative; overflow:hidden; height:2em; margin-bottom:10px; }
.yellow-bar-left { display:block; float:left; }
@@ -117,8 +117,9 @@
#yellow-pane-settings h1 { margin:0 1em; font-size:2em; }
#yellow-pane-settings .yellow-form-control { width:15em; box-sizing:border-box; }
#yellow-pane-settings .yellow-btn { width:15em; margin:1em 1em 0.5em 0; }
+#yellow-pane-settings-status { margin:0.5em 0; display:inline-block; }
#yellow-pane-settings-fields { width:15em; text-align:left; margin:0 auto; }
-#yellow-pane-settings-buttons p { margin-top:0; margin-bottom:0; }
+#yellow-pane-settings-buttons { margin-top:-0.5em; }
#yellow-pane-edit { }
#yellow-pane-edit h1 { margin:0 0 10px 0; font-size:1.5em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
diff --git a/system/plugins/webinterface.js b/system/plugins/webinterface.js
@@ -4,45 +4,58 @@
// Yellow API
var yellow =
{
- version: "0.6.7",
- action: function(text) { yellow.webinterface.action(text); },
+ version: "0.6.8",
+ action: function(action) { yellow.webinterface.action(action, "none"); },
+ onLoad: function() { yellow.webinterface.loadInterface(); },
onClick: function(e) { yellow.webinterface.hidePanesOnClick(yellow.toolbox.getEventElement(e)); },
onKeydown: function(e) { yellow.webinterface.hidePanesOnKeydown(yellow.toolbox.getEventKeycode(e)); },
- onResize: function() { yellow.webinterface.resizePane(yellow.webinterface.paneId); },
- onUpdate: function() { yellow.webinterface.updatePane(yellow.webinterface.paneId, yellow.webinterface.paneType); },
- onIntervall: function() { yellow.webinterface.updateIntervall(); }
+ onUpdate: function() { yellow.webinterface.updatePane(yellow.webinterface.paneId, yellow.webinterface.paneAction, yellow.webinterface.paneStatus); },
+ onResize: function() { yellow.webinterface.resizePane(yellow.webinterface.paneId, yellow.webinterface.paneAction, yellow.webinterface.paneStatus); }
}
// Yellow web interface
yellow.webinterface =
{
paneId: 0, //visible pane ID
- paneType: 0, //visible pane type
+ paneAction: 0, //current pane action
+ paneStatus: 0, //current pane status
intervalId: 0, //timer interval ID
// Handle action
- action: function(text)
+ action: function(action, status)
{
- if(yellow.config.debug) console.log("yellow.webinterface.action action:"+text);
- switch(text)
+ if(yellow.config.debug) console.log("yellow.webinterface.action action:"+action+" status:"+status);
+ switch(action)
{
- case "login": this.showPane("yellow-pane-login"); break;
- case "logout": this.sendPane("yellow-pane-logout", "logout"); break;
- case "signup": this.showPane("yellow-pane-signup", "signup"); break;
- case "confirm": this.showPane("yellow-pane-signup", "confirm"); break;
- case "approve": this.showPane("yellow-pane-signup", "approve"); break;
- case "recover": this.showPane("yellow-pane-recover", "recover"); break;
- case "settings": this.showPane("yellow-pane-settings", "settings"); break;
- case "create": this.showPane("yellow-pane-edit", "create", true); break;
- case "edit": this.showPane("yellow-pane-edit", "edit", true); break;
- case "delete": this.showPane("yellow-pane-edit", "delete", true); break;
- case "user": this.showPane("yellow-pane-user"); break;
- case "send": this.sendPane(this.paneId, this.paneType); break;
+ case "login": this.showPane("yellow-pane-login", action, status); break;
+ case "logout": this.sendPane("yellow-pane-logout", action); break;
+ case "signup": this.showPane("yellow-pane-signup", action, status); break;
+ case "confirm": this.showPane("yellow-pane-signup", action, status); break;
+ case "approve": this.showPane("yellow-pane-signup", action, status); break;
+ case "recover": this.showPane("yellow-pane-recover", action, status); break;
+ case "settings": this.showPane("yellow-pane-settings", action, status); break;
+ case "create": this.showPane("yellow-pane-edit", action, status, true); break;
+ case "edit": this.showPane("yellow-pane-edit", action, status, true); break;
+ case "delete": this.showPane("yellow-pane-edit", action, status, true); break;
+ case "user": this.showPane("yellow-pane-user", action, status); break;
+ case "send": this.sendPane(this.paneId, this.paneAction); break;
case "close": this.hidePane(this.paneId); break;
case "help": this.hidePane(this.paneId); location.href = this.getText("UserHelpUrl", "yellow"); break;
}
},
+ // Initialise interface
+ loadInterface: function()
+ {
+ var body = document.getElementsByTagName("body")[0];
+ if(body && body.firstChild && !document.getElementById("yellow-bar"))
+ {
+ this.createBar("yellow-bar");
+ this.action(yellow.page.action, yellow.page.status);
+ clearInterval(this.intervalId);
+ }
+ },
+
// Create bar
createBar: function(barId)
{
@@ -73,7 +86,7 @@ yellow.webinterface =
},
// Create pane
- createPane: function(paneId, paneType)
+ createPane: function(paneId, paneAction, paneStatus)
{
if(yellow.config.debug) console.log("yellow.webinterface.createPane id:"+paneId);
var elementPane = document.createElement("div");
@@ -118,11 +131,11 @@ yellow.webinterface =
"<form method=\"post\">"+
"<a href=\"#\" onclick=\"yellow.action('close'); return false;\" class=\"yellow-close\">x</a>"+
"<h1>"+this.getText("SignupTitle")+"</h1>"+
- "<div id=\"yellow-pane-signup-status\" class=\""+yellow.page.status+"\">"+this.getText("SignupStatus", "", yellow.page.status)+"</div>"+
+ "<div id=\"yellow-pane-signup-status\" class=\""+paneStatus+"\">"+this.getText(paneAction+"Status", "", paneStatus)+"</div>"+
"<div id=\"yellow-pane-signup-fields\">"+
"<input type=\"hidden\" name=\"action\" value=\"signup\" />"+
- "<p><label for=\"yellow-pane-signup-name\">"+this.getText("SignupName")+"</label><br /><input class=\"yellow-form-control\" name=\"name\" id=\"yellow-pane-signup-name\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("Name"))+"\" /></p>"+
- "<p><label for=\"yellow-pane-signup-email\">"+this.getText("SignupEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"yellow-pane-signup-email\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("Email"))+"\" /></p>"+
+ "<p><label for=\"yellow-pane-signup-name\">"+this.getText("SignupName")+"</label><br /><input class=\"yellow-form-control\" name=\"name\" id=\"yellow-pane-signup-name\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("name"))+"\" /></p>"+
+ "<p><label for=\"yellow-pane-signup-email\">"+this.getText("SignupEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"yellow-pane-signup-email\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("email"))+"\" /></p>"+
"<p><label for=\"yellow-pane-signup-password\">"+this.getText("SignupPassword")+"</label><br /><input class=\"yellow-form-control\" type=\"password\" name=\"password\" id=\"yellow-pane-signup-password\" maxlength=\"64\" value=\"\" /></p>"+
"<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("SignupButton")+"\" /></p>"+
"</div>"+
@@ -136,11 +149,11 @@ yellow.webinterface =
"<form method=\"post\">"+
"<a href=\"#\" onclick=\"yellow.action('close'); return false;\" class=\"yellow-close\">x</a>"+
"<h1>"+this.getText("RecoverTitle")+"</h1>"+
- "<div id=\"yellow-pane-recover-status\" class=\""+yellow.page.status+"\">"+this.getText("RecoverStatus", "", yellow.page.status)+"</div>"+
+ "<div id=\"yellow-pane-recover-status\" class=\""+paneStatus+"\">"+this.getText("RecoverStatus", "", paneStatus)+"</div>"+
"<div id=\"yellow-pane-recover-fields-first\">"+
"<input type=\"hidden\" name=\"action\" value=\"recover\" />"+
- "<p><label for=\"yellow-pane-recover-email\">"+this.getText("RecoverEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"yellow-pane-recover-email\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("Email"))+"\" /></p>"+
- "<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("RecoverButton")+"\" /></p>"+
+ "<p><label for=\"yellow-pane-recover-email\">"+this.getText("RecoverEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"yellow-pane-recover-email\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("email"))+"\" /></p>"+
+ "<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("OkButton")+"\" /></p>"+
"</div>"+
"<div id=\"yellow-pane-recover-fields-second\">"+
"<p><label for=\"yellow-pane-recover-password\">"+this.getText("RecoverPassword")+"</label><br /><input class=\"yellow-form-control\" type=\"password\" name=\"password\" id=\"yellow-pane-recover-password\" maxlength=\"64\" value=\"\" /></p>"+
@@ -156,14 +169,16 @@ yellow.webinterface =
"<form method=\"post\">"+
"<a href=\"#\" onclick=\"yellow.action('close'); return false;\" class=\"yellow-close\">x</a>"+
"<h1 id=\"yellow-pane-settings-title\">"+this.getText("SettingsTitle")+"</h1>"+
+ "<div id=\"yellow-pane-settings-status\" class=\""+paneStatus+"\">"+this.getText(paneAction+"Status", "", paneStatus)+"</div>"+
"<div id=\"yellow-pane-settings-fields\">"+
"<input type=\"hidden\" name=\"action\" value=\"settings\" />"+
- "<p><label for=\"yellow-pane-settings-name\">"+this.getText("SignupName")+"</label><br /><input class=\"yellow-form-control\" name=\"name\" id=\"yellow-pane-settings-name\" maxlength=\"64\" value=\"\" /></p>"+
- "<div id=\"yellow-pane-settings-buttons\">"+
- "<p><a href=\"#\" onclick=\"yellow.action('recover'); return false;\">"+this.getText("SettingsChangePassword")+"</a><p>"+
- "</div>"+this.getPaneLanguages(paneId)+
+ "<p><label for=\"yellow-pane-settings-name\">"+this.getText("SignupName")+"</label><br /><input class=\"yellow-form-control\" name=\"name\" id=\"yellow-pane-settings-name\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("name"))+"\" /></p>"+
+ this.getLanguages(paneId)+
"<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("OkButton")+"\" /></p>"+
"</div>"+
+ "<div id=\"yellow-pane-settings-buttons\">"+
+ "<p><input class=\"yellow-btn\" type=\"button\" onclick=\"yellow.action('close'); return false;\" value=\""+this.getText("OkButton")+"\" /></p>"+
+ "</div>"+
"</form>";
break;
case "yellow-pane-edit":
@@ -192,8 +207,9 @@ yellow.webinterface =
},
// Update pane
- updatePane: function(paneId, paneType, init)
+ updatePane: function(paneId, paneAction, paneStatus, init)
{
+ if(yellow.config.debug) console.log("yellow.webinterface.updatePane id:"+paneId);
switch(paneId)
{
case "yellow-pane-login":
@@ -203,49 +219,48 @@ yellow.webinterface =
}
break;
case "yellow-pane-signup":
- if(yellow.page.status=="next" || yellow.page.status=="done" || yellow.page.status=="expire")
+ if(paneStatus=="next" || paneStatus=="done" || paneStatus=="expire")
{
document.getElementById("yellow-pane-signup-fields").style.display = "none";
} else {
document.getElementById("yellow-pane-signup-buttons").style.display = "none";
}
- switch(paneType)
- {
- case "signup": text = this.getText("SignupStatus", "", yellow.page.status); break;
- case "confirm": text = this.getText("ConfirmStatus", "", yellow.page.status); break;
- case "approve": text = this.getText("ApproveStatus", "", yellow.page.status); break;
- }
- document.getElementById("yellow-pane-signup-status").innerHTML = yellow.toolbox.encodeHtml(text);
break;
case "yellow-pane-recover":
- if(yellow.page.status=="next" || yellow.page.status=="done" || yellow.page.status=="expire")
+ if(paneStatus=="next" || paneStatus=="done" || paneStatus=="expire")
{
document.getElementById("yellow-pane-recover-fields-first").style.display = "none";
document.getElementById("yellow-pane-recover-fields-second").style.display = "none";
} else {
document.getElementById("yellow-pane-recover-buttons").style.display = "none";
- if(this.getRequest("Id"))
+ if(this.getRequest("id"))
{
document.getElementById("yellow-pane-recover-fields-first").style.display = "none";
} else {
document.getElementById("yellow-pane-recover-fields-second").style.display = "none";
}
}
- if(yellow.config.userEmail)
- {
- document.getElementById("yellow-pane-recover-email").value = yellow.config.userEmail;
- }
break;
case "yellow-pane-settings":
- document.getElementById("yellow-pane-settings-name").value = yellow.config.userName;
- document.getElementById("yellow-pane-settings-"+yellow.config.userLanguage).checked = true;
+ if(paneStatus=="next" || paneStatus=="done" || paneStatus=="expire")
+ {
+ document.getElementById("yellow-pane-settings-fields").style.display = "none";
+ } else {
+ document.getElementById("yellow-pane-settings-buttons").style.display = "none";
+ }
+ if(paneStatus=="none")
+ {
+ document.getElementById("yellow-pane-settings-status").innerHTML = yellow.toolbox.encodeHtml(yellow.config.serverVersion);
+ document.getElementById("yellow-pane-settings-name").value = yellow.config.userName;
+ document.getElementById("yellow-pane-settings-"+yellow.config.userLanguage).checked = true;
+ }
break;
case "yellow-pane-edit":
if(init)
{
var title = yellow.page.title;
var string = yellow.page.rawDataEdit;
- switch(paneType)
+ switch(paneAction)
{
case "create": title = this.getText("CreateTitle"); string = yellow.page.rawDataNew; break;
case "delete": title = this.getText("DeleteTitle"); break;
@@ -254,11 +269,11 @@ yellow.webinterface =
document.getElementById("yellow-pane-edit-page").value = string;
yellow.toolbox.setCursorPosition(document.getElementById("yellow-pane-edit-page"), 0);
}
- var action = this.getPaneAction(paneId, paneType)
- if(action)
+ paneAction = this.getPaneAction(paneId, paneAction)
+ if(paneAction)
{
var key, className;
- switch(action)
+ switch(paneAction)
{
case "create": key = "CreateButton"; className = "yellow-btn yellow-btn-create"; break;
case "edit": key = "EditButton"; className = "yellow-btn yellow-btn-edit"; break;
@@ -273,22 +288,9 @@ yellow.webinterface =
}
},
- // Update timer intervall
- updateIntervall: function()
- {
- var body = document.getElementsByTagName("body")[0];
- if(body && body.firstChild && !document.getElementById("yellow-bar"))
- {
- this.createBar("yellow-bar");
- this.action(yellow.page.action);
- clearInterval(this.intervalId);
- }
- },
-
// Resize pane
- resizePane: function(paneId)
+ resizePane: function(paneId, paneAction, paneStatus)
{
- if(yellow.config.debug) console.log("yellow.webinterface.resizePane id:"+paneId);
var elementBar = document.getElementById("yellow-bar");
var paneTop = yellow.toolbox.getOuterTop(elementBar) + yellow.toolbox.getOuterHeight(elementBar);
var paneWidth = yellow.toolbox.getOuterWidth(elementBar, true);
@@ -311,7 +313,7 @@ yellow.webinterface =
var height2 = yellow.toolbox.getOuterHeight(document.getElementById("yellow-pane-edit-content"));
var height3 = yellow.toolbox.getOuterHeight(document.getElementById("yellow-pane-edit-page"));
yellow.toolbox.setOuterHeight(document.getElementById("yellow-pane-edit-page"), height1 - height2 + height3);
- var elementLink = document.getElementById("yellow-pane-"+this.paneType+"-link");
+ var elementLink = document.getElementById("yellow-pane-"+paneAction+"-link");
var position = yellow.toolbox.getOuterLeft(elementLink) + yellow.toolbox.getOuterWidth(elementLink)/2;
position -= yellow.toolbox.getOuterLeft(document.getElementById("yellow-pane-edit")) + 1;
yellow.toolbox.setOuterLeft(document.getElementById("yellow-pane-edit-arrow"), position);
@@ -328,36 +330,14 @@ yellow.webinterface =
}
},
- // Send pane
- sendPane: function(paneId, paneType)
- {
- if(yellow.config.debug) console.log("yellow.webinterface.sendPane id:"+paneId);
- if(paneId=="yellow-pane-edit")
- {
- var action = this.getPaneAction(paneId, paneType);
- if(action)
- {
- var params = {};
- params.action = action;
- params.rawdatasource = yellow.page.rawDataSource;
- params.rawdataedit = document.getElementById("yellow-pane-edit-page").value;
- yellow.toolbox.submitForm(params, true);
- } else {
- this.hidePane(paneId);
- }
- } else {
- yellow.toolbox.submitForm({"action":paneType});
- }
- },
-
// Show or hide pane
- showPane: function(paneId, paneType, modal)
+ showPane: function(paneId, paneAction, paneStatus, modal)
{
- if(this.paneId!=paneId || this.paneType!=paneType)
+ if(this.paneId!=paneId || this.paneAction!=paneAction)
{
this.hidePane(this.paneId);
var element = document.getElementById(paneId);
- if(!element) element = this.createPane(paneId, paneType);
+ if(!element) element = this.createPane(paneId, paneAction, paneStatus);
if(!yellow.toolbox.isVisible(element))
{
if(yellow.config.debug) console.log("yellow.webinterface.showPane id:"+paneId);
@@ -368,9 +348,10 @@ yellow.webinterface =
yellow.toolbox.addValue("meta[name=viewport]", "content", ", maximum-scale=1, user-scalable=0");
}
this.paneId = paneId;
- this.paneType = paneType;
- this.resizePane(paneId);
- this.updatePane(paneId, paneType, true);
+ this.paneAction = paneAction;
+ this.paneStatus = paneStatus;
+ this.resizePane(paneId, paneAction, paneStatus);
+ this.updatePane(paneId, paneAction, paneStatus, true);
}
} else {
this.hidePane(this.paneId);
@@ -388,7 +369,8 @@ yellow.webinterface =
yellow.toolbox.removeValue("meta[name=viewport]", "content", ", maximum-scale=1, user-scalable=0");
element.style.display = "none";
this.paneId = 0;
- this.paneType = 0;
+ this.paneAction = 0;
+ this.paneStatus = 0;
}
},
@@ -423,29 +405,49 @@ yellow.webinterface =
if(keycode==27) this.hidePanes();
},
+ // Send pane
+ sendPane: function(paneId, paneAction)
+ {
+ if(yellow.config.debug) console.log("yellow.webinterface.sendPane id:"+paneId);
+ if(paneId=="yellow-pane-edit")
+ {
+ paneAction = this.getPaneAction(paneId, paneAction);
+ if(paneAction)
+ {
+ var params = {};
+ params.action = paneAction;
+ params.rawdatasource = yellow.page.rawDataSource;
+ params.rawdataedit = document.getElementById("yellow-pane-edit-page").value;
+ yellow.toolbox.submitForm(params, true);
+ } else {
+ this.hidePane(paneId);
+ }
+ } else {
+ yellow.toolbox.submitForm({"action":paneAction});
+ }
+ },
+
// Return pane action
- getPaneAction: function(paneId, paneType)
+ getPaneAction: function(paneId, paneAction)
{
- var action = "";
if(paneId=="yellow-pane-edit")
{
- if(!yellow.config.userRestrictions)
+ var string = document.getElementById("yellow-pane-edit-page").value;
+ var paneActionOld = paneAction;
+ switch(paneAction)
{
- var string = document.getElementById("yellow-pane-edit-page").value;
- switch(paneType)
- {
- case "create": action = "create"; break;
- case "edit": action = string ? "edit" : "delete"; break;
- case "delete": action = "delete"; break;
- }
- if(yellow.page.statusCode==424 && paneType!="delete") action = "create";
+ case "create": paneAction = "create"; break;
+ case "edit": paneAction = string ? "edit" : "delete"; break;
+ case "delete": paneAction = "delete"; break;
}
+ if(yellow.page.statusCode==424 && paneActionOld!="delete") paneAction = "create";
+ if(yellow.config.userRestrictions) paneAction = "";
}
- return action;
+ return paneAction;
},
- // Return pane languages
- getPaneLanguages: function(paneId)
+ // Return language selection
+ getLanguages: function(paneId)
{
var languages = "";
if(yellow.toolbox.getLength(yellow.config.serverLanguages)>1)
@@ -453,7 +455,8 @@ yellow.webinterface =
languages += "<p>";
for(var language in yellow.config.serverLanguages)
{
- languages += "<label for=\""+paneId+"-"+language+"\"><input type=\"radio\" name=\"language\" id=\""+paneId+"-"+language+"\" value=\""+language+"\"> "+yellow.config.serverLanguages[language]+"</label><br />";
+ var checked = language==this.getRequest("language") ? " checked=\"checked\"" : "";
+ languages += "<label for=\""+paneId+"-"+language+"\"><input type=\"radio\" name=\"language\" id=\""+paneId+"-"+language+"\" value=\""+language+"\""+checked+"> "+yellow.config.serverLanguages[language]+"</label><br />";
}
languages += "</p>";
}
@@ -464,7 +467,7 @@ yellow.webinterface =
getRequest: function(key, prefix)
{
if(!prefix) prefix = "request";
- key = prefix + key;
+ key = prefix + key.charAt(0).toUpperCase() + key.slice(1);
return (key in yellow.page) ? yellow.page[key] : "";
},
@@ -473,7 +476,7 @@ yellow.webinterface =
{
if(!prefix) prefix = "webinterface";
if(!postfix) postfix = ""
- key = prefix + key + postfix.charAt(0).toUpperCase() + postfix.slice(1);
+ key = prefix + key.charAt(0).toUpperCase() + key.slice(1) + postfix.charAt(0).toUpperCase() + postfix.slice(1);
return (key in yellow.text) ? yellow.text[key] : "["+key+"]";
}
}
@@ -767,4 +770,4 @@ yellow.toolbox =
}
}
-yellow.webinterface.intervalId = setInterval("yellow.onIntervall()", 1);
+yellow.webinterface.intervalId = setInterval("yellow.onLoad()", 1);
diff --git a/system/plugins/webinterface.php b/system/plugins/webinterface.php
@@ -5,7 +5,7 @@
// Web interface plugin
class YellowWebinterface
{
- const Version = "0.6.7";
+ const Version = "0.6.8";
var $yellow; //access to API
var $active; //web interface is active? (boolean)
var $userEmail; //web interface user
@@ -13,6 +13,7 @@ class YellowWebinterface
var $userRestrictions; //web interface user can change page? (boolean)
var $action; //web interface action
var $status; //web interface status
+ var $installation; //web interface installation
var $users; //web interface users
var $merge; //web interface merge
var $rawDataSource; //raw data of page for comparison
@@ -22,6 +23,7 @@ class YellowWebinterface
function onLoad($yellow)
{
$this->yellow = $yellow;
+ $this->installation = new YellowInstallation($yellow);
$this->users = new YellowUsers($yellow);
$this->merge = new YellowMerge($yellow);
$this->yellow->config->setDefault("webinterfaceServerScheme", $this->yellow->config->get("serverScheme"));
@@ -42,9 +44,10 @@ class YellowWebinterface
function onRequest($serverScheme, $serverName, $base, $location, $fileName)
{
$statusCode = 0;
- if($this->checkRequest($location, $fileName))
+ if($this->yellow->config->get("installationMode"))
{
- list($serverScheme, $serverName, $base, $location, $fileName) = $this->updateRequestInformation();
+ $statusCode = $this->installation->processRequest($serverScheme, $serverName, $base, $location, $fileName);
+ } else if($this->checkRequest($location)) {
$statusCode = $this->processRequest($serverScheme, $serverName, $base, $location, $fileName);
}
return $statusCode;
@@ -107,6 +110,7 @@ class YellowWebinterface
list($name, $command) = $args;
switch($command)
{
+ case "clean": $statusCode = $this->cleanCommand($args); break;
case "user": $statusCode = $this->userCommand($args); break;
default: $statusCode = 0;
}
@@ -118,6 +122,15 @@ class YellowWebinterface
{
return "user [EMAIL PASSWORD NAME LANGUAGE STATUS HOME]\n";
}
+
+ // Clean user accounts
+ function cleanCommand($args)
+ {
+ $fileNameUser = $this->yellow->config->get("configDir").$this->yellow->config->get("webinterfaceUserFile");
+ $statusCode = $this->users->clean($fileNameUser) ? 200 : 500;
+ if($statusCode == 500) echo "ERROR cleaning configuration: Can't write file '$fileNameUser'!\n";
+ return status;
+ }
// Update user account
function userCommand($args)
@@ -160,7 +173,8 @@ class YellowWebinterface
function processRequest($serverScheme, $serverName, $base, $location, $fileName)
{
$statusCode = 0;
- if($this->isActive() && $this->checkUser($location, $fileName))
+ list($serverScheme, $serverName, $base, $location, $fileName) = $this->updateRequestInformation();
+ if($this->checkUser($location, $fileName))
{
switch($_REQUEST["action"])
{
@@ -183,7 +197,6 @@ class YellowWebinterface
case "confirm": $statusCode = $this->processRequestConfirm($serverScheme, $serverName, $base, $location, $fileName); break;
case "approve": $statusCode = $this->processRequestApprove($serverScheme, $serverName, $base, $location, $fileName); break;
case "recover": $statusCode = $this->processRequestRecover($serverScheme, $serverName, $base, $location, $fileName); break;
- case "install": $statusCode = $this->processRequestInstall($serverScheme, $serverName, $base, $location, $fileName); break;
}
}
if($statusCode == 0)
@@ -367,22 +380,23 @@ class YellowWebinterface
// Process request to change settings
function processRequestSettings($serverScheme, $serverName, $base, $location, $fileName)
{
- $statusCode = 0;
- if($this->getUserAccount($this->userEmail, "", "settings") == "ok")
+ $this->action = "settings";
+ $this->status = $this->getUserAccount($this->userEmail, "", $this->action);
+ if($this->status == "ok")
{
$name = trim(preg_replace("/[^\pL\d\-\. ]/u", "-", $_REQUEST["name"]));
$language = trim($_REQUEST["language"]);
$fileNameUser = $this->yellow->config->get("configDir").$this->yellow->config->get("webinterfaceUserFile");
- if($this->users->update($fileNameUser, $this->userEmail, "", $name, $language))
- {
- $statusCode = 303;
- $location = $this->yellow->lookup->normaliseUrl($serverScheme, $serverName, $base, $location);
- $this->yellow->sendStatus($statusCode, $location);
- } else {
- $statusCode = 500;
- $this->yellow->processRequest($serverScheme, $serverName, $base, $location, $fileName, false);
- $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
- }
+ $this->status = $this->users->update($fileNameUser, $this->userEmail, "", $name, $language) ? "done" : "error";
+ if($this->status == "error") $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
+ }
+ if($this->status == "done")
+ {
+ $statusCode = 303;
+ $location = $this->yellow->lookup->normaliseUrl($serverScheme, $serverName, $base, $location);
+ $this->yellow->sendStatus($statusCode, $location);
+ } else {
+ $statusCode = $this->yellow->processRequest($serverScheme, $serverName, $base, $location, $fileName, false);
}
return $statusCode;
}
@@ -470,63 +484,6 @@ class YellowWebinterface
return $statusCode;
}
- // Process request to install
- function processRequestInstall($serverScheme, $serverName, $base, $location, $fileName)
- {
- $statusCode = 0;
- if($this->yellow->config->get("installationMode"))
- {
- $fileName = $this->yellow->config->get("configDir")."page-installation.txt";
- $this->yellow->pages->pages["root/"] = array();
- $this->yellow->page = new YellowPage($this->yellow);
- $this->yellow->page->setRequestInformation($serverScheme, $serverName, $base, $location, $fileName);
- $this->yellow->page->parseData($this->getRawDataInstallation($fileName, $this->yellow->getRequestLanguage()), false, 404);
- $this->yellow->page->parserSafeMode = false;
- $this->yellow->page->parseContent();
- $name = trim(preg_replace("/[^\pL\d\-\. ]/u", "-", $_REQUEST["name"]));
- $email = trim($_REQUEST["email"]);
- $password = trim($_REQUEST["password"]);
- $language = trim($_REQUEST["language"]);
- $status = trim($_REQUEST["status"]);
- if($status == "install")
- {
- $status = "ok";
- $fileNameHome = $this->yellow->lookup->findFileFromLocation("/");
- $fileData = strreplaceu("\r\n", "\n", $this->yellow->toolbox->readFile($fileNameHome));
- if($fileData==$this->getRawDataHome("en") && $language!="en")
- {
- $status = $this->yellow->toolbox->createFile($fileNameHome, $this->getRawDataHome($language)) ? "ok" : "error";
- if($status == "error") $this->yellow->page->error(500, "Can't write file '$fileNameHome'!");
- }
- }
- if($status == "ok")
- {
- if(!empty($email) && !empty($password) && $this->getUserAccount($email, $password, "install") == "ok")
- {
- $fileNameUser = $this->yellow->config->get("configDir").$this->yellow->config->get("webinterfaceUserFile");
- $status = $this->users->update($fileNameUser, $email, $password, $name, $language, "active", "/") ? "ok" : "error";
- if($status == "error") $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
- }
- }
- if($status == "ok")
- {
- if($this->yellow->config->get("sitename") == "Yellow") $_REQUEST["sitename"] = $name;
- $fileNameConfig = $this->yellow->config->get("configDir").$this->yellow->config->get("configFile");
- $status = $this->yellow->config->update($fileNameConfig, $this->getInstallationData()) ? "done" : "error";
- if($status == "error") $this->yellow->page->error(500, "Can't write file '$fileNameConfig'!");
- }
- if($status == "done")
- {
- $statusCode = 303;
- $location = $this->yellow->lookup->normaliseUrl($serverScheme, $serverName, $base, $location);
- $this->yellow->sendStatus($statusCode, $location);
- } else {
- $statusCode = $this->yellow->sendPage();
- }
- }
- return $statusCode;
- }
-
// Send mail to web interface user
function sendMail($serverScheme, $serverName, $base, $email, $action)
{
@@ -568,7 +525,7 @@ class YellowWebinterface
}
// Check web interface request
- function checkRequest($location, $fileName)
+ function checkRequest($location)
{
if($this->yellow->toolbox->getServerScheme()==$this->yellow->config->get("webinterfaceServerScheme") &&
$this->yellow->toolbox->getServerName()==$this->yellow->config->get("webinterfaceServerName"))
@@ -576,12 +533,7 @@ class YellowWebinterface
$locationLength = strlenu($this->yellow->config->get("webinterfaceLocation"));
$this->active = substru($location, 0, $locationLength) == $this->yellow->config->get("webinterfaceLocation");
}
- if($this->yellow->config->get("installationMode"))
- {
- $_REQUEST["action"] = $this->yellow->isStaticFile($location, $fileName, false) ? "" : "install";
- $this->active = false;
- }
- return $this->yellow->config->get("installationMode") || $this->isActive();
+ return $this->isActive();
}
// Check web interface user
@@ -784,42 +736,6 @@ class YellowWebinterface
return $page;
}
- // Return raw data for installation page
- function getRawDataInstallation($fileName, $language)
- {
- $fileData = $this->yellow->toolbox->readFile($fileName);
- if(empty($fileData))
- {
- $this->yellow->text->setLanguage($language);
- $fileData = "---\nTitle:".$this->yellow->text->get("webinterfaceInstallationTitle")."\nLanguage:$language\nNavigation:navigation\n---\n";
- $fileData .= "<form class=\"installation-form\" action=\"".$this->yellow->page->getLocation()."\" method=\"post\">\n";
- $fileData .= "<p><label for=\"name\">".$this->yellow->text->get("webinterfaceSignupName")."</label><br /><input class=\"form-control\" type=\"text\" maxlength=\"64\" name=\"name\" id=\"name\" value=\"\"></p>\n";
- $fileData .= "<p><label for=\"email\">".$this->yellow->text->get("webinterfaceSignupEmail")."</label><br /><input class=\"form-control\" type=\"text\" maxlength=\"64\" name=\"email\" id=\"email\" value=\"\"></p>\n";
- $fileData .= "<p><label for=\"password\">".$this->yellow->text->get("webinterfaceSignupPassword")."</label><br /><input class=\"form-control\" type=\"password\" maxlength=\"64\" name=\"password\" id=\"password\" value=\"\"></p>\n";
- if(count($this->yellow->text->getLanguages()) > 1)
- {
- $fileData .= "<p>";
- foreach($this->yellow->text->getLanguages() as $language)
- {
- $checked = $language==$this->yellow->text->language ? " checked=\"checked\"" : "";
- $fileData .= "<label for=\"$language\"><input type=\"radio\" name=\"language\" id=\"$language\" value=\"$language\"$checked> ".$this->yellow->text->getTextHtml("languageDescription", $language)."</label><br />";
- }
- $fileData .= "</p>\n";
- }
- $fileData .= "<input class=\"btn\" type=\"submit\" value=\"".$this->yellow->text->get("webinterfaceOkButton")."\" />\n";
- $fileData .= "<input type=\"hidden\" name=\"status\" value=\"install\" />\n";
- $fileData .= "</form>\n";
- }
- return $fileData;
- }
-
- // Return raw data for home page
- function getRawDataHome($language)
- {
- $rawData = "---\nTitle: Home\n---\n".strreplaceu("\\n", "\n", $this->yellow->text->getText("webinterfaceInstallationHomePage", $language));
- return $rawData;
- }
-
// Return raw data for new page
function getRawDataNew($location = "")
{
@@ -827,18 +743,18 @@ class YellowWebinterface
$fileName = $this->yellow->lookup->findFileNew($fileName,
$this->yellow->config->get("webinterfaceNewFile"), $this->yellow->config->get("configDir"),
$this->yellow->config->get("template"));
- $fileData = $this->yellow->toolbox->readFile($fileName);
- $fileData = preg_replace("/@datetime/i", date("Y-m-d H:i:s"), $fileData);
- $fileData = preg_replace("/@date/i", date("Y-m-d"), $fileData);
- $fileData = preg_replace("/@usershort/i", strtok($this->users->getName($this->userEmail), " "), $fileData);
- $fileData = preg_replace("/@username/i", $this->users->getName($this->userEmail), $fileData);
- $fileData = preg_replace("/@userlanguage/i", $this->users->getLanguage($this->userEmail), $fileData);
+ $rawData = $this->yellow->toolbox->readFile($fileName);
+ $rawData = preg_replace("/@datetime/i", date("Y-m-d H:i:s"), $rawData);
+ $rawData = preg_replace("/@date/i", date("Y-m-d"), $rawData);
+ $rawData = preg_replace("/@usershort/i", strtok($this->users->getName($this->userEmail), " "), $rawData);
+ $rawData = preg_replace("/@username/i", $this->users->getName($this->userEmail), $rawData);
+ $rawData = preg_replace("/@userlanguage/i", $this->users->getLanguage($this->userEmail), $rawData);
if(!empty($location))
{
$title = $this->yellow->toolbox->createTextTitle($location);
- $fileData = $this->updateDataTitle($fileData, $title);
+ $rawData = $this->updateDataTitle($rawData, $title);
}
- return $fileData;
+ return $rawData;
}
// Return page data including login information
@@ -882,7 +798,7 @@ class YellowWebinterface
{
$data["serverLanguages"][$language] = $this->yellow->text->getTextHtml("languageDescription", $language);
}
- $data["serverVersion"] = YellowCore::Version;
+ $data["serverVersion"] = "Yellow ".YellowCore::Version;
} else {
$data["loginEmail"] = $this->yellow->config->get("loginEmail");
$data["loginPassword"] = $this->yellow->config->get("loginPassword");
@@ -892,23 +808,6 @@ class YellowWebinterface
return $data;
}
- // Return installation data
- function getInstallationData()
- {
- $data = array();
- foreach($_REQUEST as $key=>$value)
- {
- if(!$this->yellow->config->isExisting($key)) continue;
- $data[$key] = trim($value);
- }
- $data["# serverScheme"] = $this->yellow->toolbox->getServerScheme();
- $data["# serverName"] = $this->yellow->toolbox->getServerName();
- $data["# serverBase"] = $this->yellow->toolbox->getServerBase();
- $data["# serverTime"] = $this->yellow->toolbox->getServerTime();
- $data["installationMode"] = "0";
- return $data;
- }
-
// Return request strings
function getRequestData()
{
@@ -964,6 +863,127 @@ class YellowWebinterface
return $this->active;
}
}
+
+// Yellow installation
+class YellowInstallation
+{
+ var $yellow; //access to API
+
+ function __construct($yellow)
+ {
+ $this->yellow = $yellow;
+ }
+
+ // Process request to install
+ function processRequest($serverScheme, $serverName, $base, $location, $fileName)
+ {
+ $statusCode = 0;
+ if(!$this->yellow->isStaticFile($location, $fileName, false))
+ {
+ $fileName = $this->yellow->config->get("configDir")."page-installation.txt";
+ $this->yellow->pages->pages["root/"] = array();
+ $this->yellow->page = new YellowPage($this->yellow);
+ $this->yellow->page->setRequestInformation($serverScheme, $serverName, $base, $location, $fileName);
+ $this->yellow->page->parseData($this->getRawDataWelcome($fileName, $this->yellow->getRequestLanguage()), false, 404);
+ $this->yellow->page->parserSafeMode = false;
+ $this->yellow->page->parseContent();
+ $name = trim(preg_replace("/[^\pL\d\-\. ]/u", "-", $_REQUEST["name"]));
+ $email = trim($_REQUEST["email"]);
+ $password = trim($_REQUEST["password"]);
+ $language = trim($_REQUEST["language"]);
+ $status = trim($_REQUEST["status"]);
+ if($status == "install")
+ {
+ $status = "ok";
+ $fileNameHome = $this->yellow->lookup->findFileFromLocation("/");
+ $fileData = strreplaceu("\r\n", "\n", $this->yellow->toolbox->readFile($fileNameHome));
+ if($fileData==$this->getRawDataHome("en") && $language!="en")
+ {
+ $status = $this->yellow->toolbox->createFile($fileNameHome, $this->getRawDataHome($language)) ? "ok" : "error";
+ if($status == "error") $this->yellow->page->error(500, "Can't write file '$fileNameHome'!");
+ }
+ }
+ if($status == "ok")
+ {
+ if(!empty($email) && !empty($password))
+ {
+ $fileNameUser = $this->yellow->config->get("configDir").$this->yellow->config->get("webinterfaceUserFile");
+ $status = $this->yellow->plugins->get("webinterface")->users->update($fileNameUser, $email, $password, $name, $language) ? "ok" : "error";
+ if($status == "error") $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
+ }
+ }
+ if($status == "ok")
+ {
+ if($this->yellow->config->get("sitename") == "Yellow") $_REQUEST["sitename"] = $name;
+ $fileNameConfig = $this->yellow->config->get("configDir").$this->yellow->config->get("configFile");
+ $status = $this->yellow->config->update($fileNameConfig, $this->getConfigData()) ? "done" : "error";
+ if($status == "error") $this->yellow->page->error(500, "Can't write file '$fileNameConfig'!");
+ }
+ if($status == "done")
+ {
+ $statusCode = 303;
+ $location = $this->yellow->lookup->normaliseUrl($serverScheme, $serverName, $base, $location);
+ $this->yellow->sendStatus($statusCode, $location);
+ } else {
+ $statusCode = $this->yellow->sendPage();
+ }
+ }
+ return $statusCode;
+ }
+
+ // Return raw data for welcome page
+ function getRawDataWelcome($fileName, $language)
+ {
+ $rawData = $this->yellow->toolbox->readFile($fileName);
+ if(empty($rawData))
+ {
+ $this->yellow->text->setLanguage($language);
+ $rawData = "---\nTitle:".$this->yellow->text->get("webinterfaceInstallationTitle")."\nLanguage:$language\nNavigation:navigation\n---\n";
+ $rawData .= "<form class=\"installation-form\" action=\"".$this->yellow->page->getLocation()."\" method=\"post\">\n";
+ $rawData .= "<p><label for=\"name\">".$this->yellow->text->get("webinterfaceSignupName")."</label><br /><input class=\"form-control\" type=\"text\" maxlength=\"64\" name=\"name\" id=\"name\" value=\"\"></p>\n";
+ $rawData .= "<p><label for=\"email\">".$this->yellow->text->get("webinterfaceSignupEmail")."</label><br /><input class=\"form-control\" type=\"text\" maxlength=\"64\" name=\"email\" id=\"email\" value=\"\"></p>\n";
+ $rawData .= "<p><label for=\"password\">".$this->yellow->text->get("webinterfaceSignupPassword")."</label><br /><input class=\"form-control\" type=\"password\" maxlength=\"64\" name=\"password\" id=\"password\" value=\"\"></p>\n";
+ if(count($this->yellow->text->getLanguages()) > 1)
+ {
+ $rawData .= "<p>";
+ foreach($this->yellow->text->getLanguages() as $language)
+ {
+ $checked = $language==$this->yellow->text->language ? " checked=\"checked\"" : "";
+ $rawData .= "<label for=\"$language\"><input type=\"radio\" name=\"language\" id=\"$language\" value=\"$language\"$checked> ".$this->yellow->text->getTextHtml("languageDescription", $language)."</label><br />";
+ }
+ $rawData .= "</p>\n";
+ }
+ $rawData .= "<input class=\"btn\" type=\"submit\" value=\"".$this->yellow->text->get("webinterfaceOkButton")."\" />\n";
+ $rawData .= "<input type=\"hidden\" name=\"status\" value=\"install\" />\n";
+ $rawData .= "</form>\n";
+ }
+ return $rawData;
+ }
+
+ // Return raw data for home page
+ function getRawDataHome($language)
+ {
+ $rawData = "---\nTitle: Home\n---\n".strreplaceu("\\n", "\n", $this->yellow->text->getText("webinterfaceInstallationHomePage", $language));
+ return $rawData;
+ }
+
+ // Return configuration data
+ function getConfigData()
+ {
+ $data = array();
+ foreach($_REQUEST as $key=>$value)
+ {
+ if(!$this->yellow->config->isExisting($key)) continue;
+ $data[$key] = trim($value);
+ }
+ $data["# serverScheme"] = $this->yellow->toolbox->getServerScheme();
+ $data["# serverName"] = $this->yellow->toolbox->getServerName();
+ $data["# serverBase"] = $this->yellow->toolbox->getServerBase();
+ $data["# serverTime"] = $this->yellow->toolbox->getServerTime();
+ $data["installationMode"] = "0";
+ return $data;
+ }
+}
// Yellow users
class YellowUsers
@@ -995,6 +1015,21 @@ class YellowUsers
}
}
+ // Clean users in file
+ function clean($fileName)
+ {
+ $fileData = $this->yellow->toolbox->readFile($fileName);
+ foreach($this->yellow->toolbox->getTextLines($fileData) as $line)
+ {
+ preg_match("/^\s*(.*?)\s*:\s*(.*?),\s*(.*?),\s*(.*?),\s*(.*?),\s*(.*?)\s*$/", $line, $matches);
+ if(empty($matches[5]) || $matches[5]=="active" || $matches[5]=="inactive")
+ {
+ $fileDataNew .= $line;
+ }
+ }
+ return $this->yellow->toolbox->createFile($fileName, $fileDataNew);
+ }
+
// Update users in file
function update($fileName, $email, $password = "", $name = "", $language = "", $status = "", $home = "")
{