commit 2e771bd19aa4ec59e7c531af8e6af5ddf9f2332f
parent 5ed65a06ff8cc4253eb6a52e2b9678948e063372
Author: markseu <mark2011@mayberg.se>
Date: Sun, 15 May 2016 18:35:10 +0200
System update (web interface settings)
Diffstat:
8 files changed, 498 insertions(+), 435 deletions(-)
diff --git a/content/1-home/page.txt b/content/1-home/page.txt
@@ -3,4 +3,4 @@ Title: Home
---
Your website works!
-You can now [edit this page] or use your text editor.
-\ No newline at end of file
+You can [edit this page] or use your text editor.
+\ No newline at end of file
diff --git a/system/plugins/language-de.txt b/system/plugins/language-de.txt
@@ -3,7 +3,7 @@
Language: de
LanguageDescription: Deutsch
LanguageAuthor: David Fehrmann
-LanguageVersion: 0.6.4
+LanguageVersion: 0.6.5
BlogBy: von
BlogFilter: Blog:
@@ -29,10 +29,8 @@ SearchQuery: Suche:
SearchResultsNone: Bitte einen Suchbegriff eingeben.
SearchResultsEmpty: Keine Treffer für diese Suchanfrage.
SearchButton: Suchen
-WebinterfaceInstallationTitle: Willkommen
-WebinterfaceInstallationSitename: Webseite:
-WebinterfaceInstallationAuthor: Name:
-WebinterfaceInstallationHomePage: ---\nTitle: Home\n---\nDeine Webseite funktioniert!\n\nDu kannst [edit - diese Seite bearbeiten] oder einen Texteditor benutzen.
+WebinterfaceInstallationTitle: Hallo
+WebinterfaceInstallationHomePage: Deine Webseite funktioniert!\n\nDu kannst [edit - diese Seite bearbeiten] oder einen Texteditor benutzen.
WebinterfaceLoginTitle: Yellow
WebinterfaceLoginEmail: E-Mail:
WebinterfaceLoginPassword: Kennwort:
@@ -73,7 +71,7 @@ WebinterfaceRecoverStatusExpire: Benutzerkonto kann nicht wiederhergestellt werd
WebinterfaceWelcomeSubject: Willkommen
WebinterfaceWelcomeMessage: Hallo @usershort, dein Benutzerkonto wurde erstellt. Viel Spass beim Bearbeiten der Webseite.
WebinterfaceInformationSubject: Willkommen zurück
-WebinterfaceInformationMessage: Hallo @usershort, dein Benutzerkonto wurde wiederhergestellt. Viel Spass beim Bearbeiten der Webseite.
+WebinterfaceInformationMessage: Hallo @usershort, dein Benutzerkonto wurde geändert. Viel Spass beim Bearbeiten der Webseite.
WebinterfaceOkButton: Ok
WebinterfaceCancelButton: Abbruch
WebinterfaceCreateButton: Erzeugen
@@ -85,6 +83,9 @@ WebinterfaceDelete: -
WebinterfaceCreateTitle: Neue Seite
WebinterfaceDeleteTitle: Seite löschen
WebinterfaceMarkdownHelp: Markdown
+WebinterfaceSettingsTitle: Einstellungen
+WebinterfaceSettingsChangeEmail: Email ändern
+WebinterfaceSettingsChangePassword: Kennwort ändern
WebinterfaceUserHelp: Hilfe
WebinterfaceUserLogout: Abmelden
WikiFilter: Wiki:
diff --git a/system/plugins/language-en.txt b/system/plugins/language-en.txt
@@ -3,7 +3,7 @@
Language: en
LanguageDescription: English
LanguageAuthor: Mark Seuffert
-LanguageVersion: 0.6.4
+LanguageVersion: 0.6.5
BlogBy: by
BlogFilter: Blog:
@@ -29,10 +29,8 @@ SearchQuery: Search:
SearchResultsNone: Enter a search term.
SearchResultsEmpty: No results found.
SearchButton: Search
-WebinterfaceInstallationTitle: Welcome
-WebinterfaceInstallationSitename: Website:
-WebinterfaceInstallationAuthor: Name:
-WebinterfaceInstallationHomePage: ---\nTitle: Home\n---\nYour website works!\n\nYou can now [edit this page] or use your text editor.
+WebinterfaceInstallationTitle: Hello
+WebinterfaceInstallationHomePage: Your website works!\n\nYou can [edit this page] or use your text editor.
WebinterfaceLoginTitle: Yellow
WebinterfaceLoginEmail: Email:
WebinterfaceLoginPassword: Password:
@@ -73,7 +71,7 @@ WebinterfaceRecoverStatusExpire: User account can not be recovered. Link has exp
WebinterfaceWelcomeSubject: Welcome
WebinterfaceWelcomeMessage: Hi @usershort, your user account has been created. Have fun editing the website.
WebinterfaceInformationSubject: Welcome back
-WebinterfaceInformationMessage: Hi @usershort, your user account has been recovered. Have fun editing the website.
+WebinterfaceInformationMessage: Hi @usershort, your user account has been changed. Have fun editing the website.
WebinterfaceOkButton: Ok
WebinterfaceCancelButton: Cancel
WebinterfaceCreateButton: Create
@@ -85,6 +83,9 @@ WebinterfaceDelete: -
WebinterfaceCreateTitle: New page
WebinterfaceDeleteTitle: Delete page
WebinterfaceMarkdownHelp: Markdown
+WebinterfaceSettingsTitle: Settings
+WebinterfaceSettingsChangeEmail: Change your email
+WebinterfaceSettingsChangePassword: Change your password
WebinterfaceUserHelp: Help
WebinterfaceUserLogout: Logout
WikiFilter: Wiki:
diff --git a/system/plugins/language-fr.txt b/system/plugins/language-fr.txt
@@ -3,7 +3,7 @@
Language: fr
LanguageDescription: Français
LanguageAuthor: Juh Nibreh
-LanguageVersion: 0.6.4
+LanguageVersion: 0.6.5
BlogBy: par
BlogFilter: Blog:
@@ -29,10 +29,8 @@ SearchQuery: Rechercher:
SearchResultsNone: Entrez un mot dans le champ de recherche.
SearchResultsEmpty: Pas de résultats.
SearchButton: Rechercher
-WebinterfaceInstallationTitle: Bienvenue
-WebinterfaceInstallationSitename: Site web:
-WebinterfaceInstallationAuthor: Nom:
-WebinterfaceInstallationHomePage: ---\nTitle: Home\n---\nVotre site web fonctionne!\n\nVous pouvez [edit - modifier cette page] ou utiliser un éditeur de texte.
+WebinterfaceInstallationTitle: Bonjour
+WebinterfaceInstallationHomePage: Votre site web fonctionne!\n\nVous pouvez [edit - modifier cette page] ou utiliser un éditeur de texte.
WebinterfaceLoginTitle: Yellow
WebinterfaceLoginEmail: Email:
WebinterfaceLoginPassword: Mot de passe:
@@ -73,7 +71,7 @@ WebinterfaceRecoverStatusExpire: Le compte ne peut pas être restauré. Le lien
WebinterfaceWelcomeSubject: Bienvenue
WebinterfaceWelcomeMessage: Bonjour @usershort, votre compte utilisateur a bien été créé. Amusez-vous bien en éditant le site web.
WebinterfaceInformationSubject: Bienvenue à nouveau
-WebinterfaceInformationMessage: Bonjour @usershort, votre compte utilisateur a bien été restauré. Amusez-vous bien en éditant le site web.
+WebinterfaceInformationMessage: Bonjour @usershort, votre compte utilisateur a bien été changé. Amusez-vous bien en éditant le site web.
WebinterfaceOkButton: Ok
WebinterfaceCancelButton: Annuler
WebinterfaceCreateButton: Créer
@@ -85,6 +83,9 @@ WebinterfaceDelete: -
WebinterfaceCreateTitle: Nouvelle page
WebinterfaceDeleteTitle: Supprimer page
WebinterfaceMarkdownHelp: Markdown
+WebinterfaceSettingsTitle: Paramètres
+WebinterfaceSettingsChangeEmail: Changez email
+WebinterfaceSettingsChangePassword: Changez mot de passe
WebinterfaceUserHelp: Aide
WebinterfaceUserLogout: Déconnexion
WikiFilter: Wiki:
diff --git a/system/plugins/language.php b/system/plugins/language.php
@@ -5,7 +5,7 @@
// Language plugin
class YellowLanguage
{
- const Version = "0.6.4";
+ const Version = "0.6.5";
var $yellow; //access to API
// Handle initialisation
diff --git a/system/plugins/webinterface.css b/system/plugins/webinterface.css
@@ -1,4 +1,4 @@
-/* Yellow web interface 0.6.6 */
+/* Yellow web interface 0.6.7 */
.yellow-bar { position:relative; overflow:hidden; height:2em; margin-bottom:10px; }
.yellow-bar-left { display:block; float:left; }
@@ -20,8 +20,8 @@
.yellow-pane p { margin:0.5em; }
.yellow-pane ul { list-style:none; margin:0 0.5em; padding:0; }
.yellow-pane div { overflow:hidden; }
-.yellow-cancel { display:block; float:right; padding:0 0.5em; color:#bbb; }
-.yellow-cancel:hover { text-decoration:none; color:#000; }
+.yellow-close { display:block; float:right; padding:0 0.5em; color:#bbb; }
+.yellow-close:hover { text-decoration:none; color:#000; }
.yellow-arrow { position:absolute; top:0; left:0; }
.yellow-arrow:after, .yellow-arrow:before {
position:absolute;
@@ -91,7 +91,7 @@
#yellow-pane-login { text-align:center; white-space:nowrap; }
#yellow-pane-login h1 { margin:0 1em; font-size:2em; }
-#yellow-pane-login input { width:15em; box-sizing:border-box; }
+#yellow-pane-login .yellow-form-control { width:15em; box-sizing:border-box; }
#yellow-pane-login .yellow-btn { width:15em; margin:1em 1em 0.5em 0; }
#yellow-pane-login-fields { width:15em; text-align:left; margin:0 auto; }
#yellow-pane-login-buttons { margin:0.5em 0; }
@@ -99,7 +99,7 @@
#yellow-pane-signup { text-align:center; white-space:nowrap; }
#yellow-pane-signup h1 { margin:0 1em; font-size:2em; }
-#yellow-pane-signup input { width:15em; box-sizing:border-box; }
+#yellow-pane-signup .yellow-form-control { width:15em; box-sizing:border-box; }
#yellow-pane-signup .yellow-btn { width:15em; margin:1em 1em 0.5em 0; }
#yellow-pane-signup-status { margin:0.5em 0; display:inline-block; }
#yellow-pane-signup-fields { width:15em; text-align:left; margin:0 auto; }
@@ -107,18 +107,26 @@
#yellow-pane-recover { text-align:center; white-space:nowrap; }
#yellow-pane-recover h1 { margin:0 1em; font-size:2em; }
-#yellow-pane-recover input { width:15em; box-sizing:border-box; }
+#yellow-pane-recover .yellow-form-control { width:15em; box-sizing:border-box; }
#yellow-pane-recover .yellow-btn { width:15em; margin:1em 1em 0.5em 0; }
#yellow-pane-recover-status { margin:0.5em 0; display:inline-block; }
#yellow-pane-recover-fields-first, #yellow-pane-recover-fields-second { width:15em; text-align:left; margin:0 auto; }
#yellow-pane-recover-buttons { margin-top:-0.5em; }
+#yellow-pane-settings { text-align:center; white-space:nowrap; }
+#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-fields { width:15em; text-align:left; margin:0 auto; }
+#yellow-pane-settings-buttons p { margin-top:0; margin-bottom:0; }
+
#yellow-pane-edit { }
#yellow-pane-edit h1 { margin:0 0 10px 0; font-size:1.5em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#yellow-pane-edit-page { padding:5px; outline:none; resize:none; }
#yellow-pane-edit-buttons { margin-top:5px; }
#yellow-pane-edit-buttons input { margin-right:10px; }
#yellow-pane-edit-help { float:right; }
+
#yellow-pane-user { cursor:pointer; }
#yellow-pane-user a { text-decoration:none; }
#yellow-pane-user a:hover { text-decoration:underline; }
diff --git a/system/plugins/webinterface.js b/system/plugins/webinterface.js
@@ -4,89 +4,59 @@
// Yellow API
var yellow =
{
- version: "0.6.6",
+ version: "0.6.7",
action: function(text) { yellow.webinterface.action(text); },
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); },
- webinterface:{}, toolbox:{}, page:{}, config:{}, text:{}
+ onIntervall: function() { yellow.webinterface.updateIntervall(); }
}
// Yellow web interface
yellow.webinterface =
{
- loaded: false, //web interface loaded? (boolean)
- intervalId: 0, //timer interval ID
paneId: 0, //visible pane ID
paneType: 0, //visible pane type
+ intervalId: 0, //timer interval ID
- // Initialise web interface
- init: function()
- {
- this.intervalId = setInterval("yellow.webinterface.load()", 1);
- yellow.toolbox.addEvent(document, "click", yellow.onClick);
- yellow.toolbox.addEvent(document, "keydown", yellow.onKeydown);
- yellow.toolbox.addEvent(window, "resize", yellow.onResize);
- },
-
- // Load web interface
- load: function()
- {
- var body = document.getElementsByTagName("body")[0];
- if(body && body.firstChild && !this.loaded)
- {
- this.loaded = true;
- if(yellow.config.webinterfaceLocation)
- {
- if(yellow.debug) console.log("yellow.webinterface.load email:"+yellow.config.userEmail+" "+yellow.config.userName);
- if(yellow.config.userEmail)
- {
- this.createBar("yellow-bar", true, body.firstChild);
- this.createPane("yellow-pane-edit", true, body.firstChild);
- this.createPane("yellow-pane-user", true, body.firstChild);
- yellow.toolbox.addEvent(document.getElementById("yellow-pane-edit-page"), "keyup", yellow.onUpdate);
- yellow.toolbox.addEvent(document.getElementById("yellow-pane-edit-page"), "change", yellow.onUpdate);
- } else {
- this.createBar("yellow-bar", false, body.firstChild);
- this.createPane("yellow-pane-login", false, body.firstChild);
- this.createPane("yellow-pane-signup", false, body.firstChild);
- this.createPane("yellow-pane-recover", false, body.firstChild);
- yellow.action(yellow.page.loginAction);
- }
- }
- clearInterval(this.intervalId);
- }
- },
-
- // Execute action
+ // Handle action
action: function(text)
{
+ if(yellow.config.debug) console.log("yellow.webinterface.action action:"+text);
switch(text)
{
- case "login": this.togglePane("yellow-pane-login"); break;
- case "logout": yellow.toolbox.submitForm({"action":"logout"}); break;
- case "signup": this.togglePane("yellow-pane-signup", "signup"); break;
- case "confirm": this.togglePane("yellow-pane-signup", "confirm"); break;
- case "approve": this.togglePane("yellow-pane-signup", "approve"); break;
- case "recover": this.togglePane("yellow-pane-recover", "recover"); break;
- case "create": this.togglePane("yellow-pane-edit", "create", true); break;
- case "edit": this.togglePane("yellow-pane-edit", "edit", true); break;
- case "delete": this.togglePane("yellow-pane-edit", "delete", true); break;
- case "user": this.togglePane("yellow-pane-user"); break;
+ 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 "close": this.hidePane(this.paneId); break;
+ case "help": this.hidePane(this.paneId); location.href = this.getText("UserHelpUrl", "yellow"); break;
}
},
// Create bar
- createBar: function(id, normal, elementReference)
+ createBar: function(barId)
{
- if(yellow.debug) console.log("yellow.webinterface.createBar id:"+id);
+ if(yellow.config.debug) console.log("yellow.webinterface.createBar id:"+barId);
var elementBar = document.createElement("div");
elementBar.className = "yellow-bar";
- elementBar.setAttribute("id", id);
- if(normal)
+ elementBar.setAttribute("id", barId);
+ if(barId=="yellow-bar")
+ {
+ yellow.toolbox.addEvent(document, "click", yellow.onClick);
+ yellow.toolbox.addEvent(document, "keydown", yellow.onKeydown);
+ yellow.toolbox.addEvent(window, "resize", yellow.onResize);
+ }
+ if(yellow.config.userName)
{
elementBar.innerHTML =
"<div class=\"yellow-bar-left\">"+
@@ -95,21 +65,27 @@ yellow.webinterface =
"<div class=\"yellow-bar-right\">"+
"<a href=\"#\" onclick=\"yellow.action('create'); return false;\" id=\"yellow-pane-create-link\">"+this.getText("Create")+"</a>"+
"<a href=\"#\" onclick=\"yellow.action('delete'); return false;\" id=\"yellow-pane-delete-link\">"+this.getText("Delete")+"</a>"+
- "<a href=\"#\" onclick=\"yellow.action('user'); return false;\" id=\"yellow-pane-user-link\">"+yellow.config.userName+"</a>"+
+ "<a href=\"#\" onclick=\"yellow.action('user'); return false;\" id=\"yellow-pane-user-link\">"+yellow.toolbox.encodeHtml(yellow.config.userName)+"</a>"+
"</div>";
}
- yellow.toolbox.insertBefore(elementBar, elementReference);
+ yellow.toolbox.insertBefore(elementBar, document.getElementsByTagName("body")[0].firstChild);
+ return elementBar;
},
// Create pane
- createPane: function(paneId, bubble, elementReference)
+ createPane: function(paneId, paneType)
{
- if(yellow.debug) console.log("yellow.webinterface.createPane id:"+paneId);
+ if(yellow.config.debug) console.log("yellow.webinterface.createPane id:"+paneId);
var elementPane = document.createElement("div");
elementPane.className = "yellow-pane";
elementPane.setAttribute("id", paneId);
elementPane.style.display = "none";
- if(bubble)
+ if(paneId=="yellow-pane-edit")
+ {
+ yellow.toolbox.addEvent(elementPane, "keyup", yellow.onUpdate);
+ yellow.toolbox.addEvent(elementPane, "change", yellow.onUpdate);
+ }
+ if(paneId=="yellow-pane-edit" || paneId=="yellow-pane-user")
{
var elementArrow = document.createElement("span");
elementArrow.className = "yellow-arrow";
@@ -118,16 +94,17 @@ yellow.webinterface =
}
var elementDiv = document.createElement("div");
elementDiv.setAttribute("id", paneId+"-content");
- if(paneId == "yellow-pane-login")
+ switch(paneId)
{
- elementDiv.innerHTML =
+ case "yellow-pane-login":
+ elementDiv.innerHTML =
"<form method=\"post\">"+
- "<a href=\"#\" onclick=\"yellow.action('close'); return false;\" class=\"yellow-cancel\">x</a>"+
+ "<a href=\"#\" onclick=\"yellow.action('close'); return false;\" class=\"yellow-close\">x</a>"+
"<h1>"+this.getText("LoginTitle")+"</h1>"+
"<div id=\"yellow-pane-login-fields\">"+
"<input type=\"hidden\" name=\"action\" value=\"login\" />"+
- "<p><label for=\"email\">"+this.getText("LoginEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"email\" maxlength=\"64\" value=\""+yellow.config.loginEmail+"\" /></p>"+
- "<p><label for=\"password\">"+this.getText("LoginPassword")+"</label><br /><input class=\"yellow-form-control\" type=\"password\" name=\"password\" id=\"password\" maxlength=\"64\" value=\""+yellow.config.loginPassword+"\" /></p>"+
+ "<p><label for=\"yellow-pane-login-email\">"+this.getText("LoginEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"yellow-pane-login-email\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(yellow.config.loginEmail)+"\" /></p>"+
+ "<p><label for=\"yellow-pane-login-password\">"+this.getText("LoginPassword")+"</label><br /><input class=\"yellow-form-control\" type=\"password\" name=\"password\" id=\"yellow-pane-login-password\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(yellow.config.loginPassword)+"\" /></p>"+
"<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("LoginButton")+"\" /></p>"+
"</div>"+
"<div id=\"yellow-pane-login-buttons\">"+
@@ -135,44 +112,62 @@ yellow.webinterface =
"<p><a href=\"#\" onclick=\"yellow.action('signup'); return false;\">"+this.getText("LoginSignup")+"</a><p>"+
"</div>"+
"</form>";
- } else if(paneId == "yellow-pane-signup") {
- elementDiv.innerHTML =
+ break;
+ case "yellow-pane-signup":
+ elementDiv.innerHTML =
"<form method=\"post\">"+
- "<a href=\"#\" onclick=\"yellow.action('close'); return false;\" class=\"yellow-cancel\">x</a>"+
+ "<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.loginStatus+"\">"+this.getText("SignupStatus", "", yellow.page.loginStatus)+"</div>"+
+ "<div id=\"yellow-pane-signup-status\" class=\""+yellow.page.status+"\">"+this.getText("SignupStatus", "", yellow.page.status)+"</div>"+
"<div id=\"yellow-pane-signup-fields\">"+
"<input type=\"hidden\" name=\"action\" value=\"signup\" />"+
- "<p><label for=\"name\">"+this.getText("SignupName")+"</label><br /><input class=\"yellow-form-control\" name=\"name\" id=\"name\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("Name"))+"\" /></p>"+
- "<p><label for=\"email\">"+this.getText("SignupEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"email\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("Email"))+"\" /></p>"+
- "<p><label for=\"password\">"+this.getText("SignupPassword")+"</label><br /><input class=\"yellow-form-control\" type=\"password\" name=\"password\" id=\"password\" maxlength=\"64\" value=\"\" /></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>"+
"<div id=\"yellow-pane-signup-buttons\">"+
"<p><input class=\"yellow-btn\" type=\"button\" onclick=\"yellow.action('close'); return false;\" value=\""+this.getText("OkButton")+"\" /></p>"+
"</div>"+
"</form>";
- } else if(paneId == "yellow-pane-recover") {
- elementDiv.innerHTML =
+ break;
+ case "yellow-pane-recover":
+ elementDiv.innerHTML =
"<form method=\"post\">"+
- "<a href=\"#\" onclick=\"yellow.action('close'); return false;\" class=\"yellow-cancel\">x</a>"+
+ "<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.loginStatus+"\">"+this.getText("RecoverStatus", "", yellow.page.loginStatus)+"</div>"+
+ "<div id=\"yellow-pane-recover-status\" class=\""+yellow.page.status+"\">"+this.getText("RecoverStatus", "", yellow.page.status)+"</div>"+
"<div id=\"yellow-pane-recover-fields-first\">"+
"<input type=\"hidden\" name=\"action\" value=\"recover\" />"+
- "<p><label for=\"email\">"+this.getText("RecoverEmail")+"</label><br /><input class=\"yellow-form-control\" name=\"email\" id=\"email\" maxlength=\"64\" value=\""+yellow.toolbox.encodeHtml(this.getRequest("Email"))+"\" /></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("RecoverButton")+"\" /></p>"+
"</div>"+
"<div id=\"yellow-pane-recover-fields-second\">"+
- "<p><label for=\"password\">"+this.getText("RecoverPassword")+"</label><br /><input class=\"yellow-form-control\" type=\"password\" name=\"password\" id=\"password\" maxlength=\"64\" value=\"\" /></p>"+
- "<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("RecoverButton")+"\" /></p>"+
+ "<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>"+
+ "<p><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("OkButton")+"\" /></p>"+
"</div>"+
"<div id=\"yellow-pane-recover-buttons\">"+
"<p><input class=\"yellow-btn\" type=\"button\" onclick=\"yellow.action('close'); return false;\" value=\""+this.getText("OkButton")+"\" /></p>"+
"</div>"+
"</form>";
- } else if(paneId == "yellow-pane-edit") {
- elementDiv.innerHTML =
+ break;
+ case "yellow-pane-settings":
+ elementDiv.innerHTML =
+ "<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-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><input class=\"yellow-btn\" type=\"submit\" value=\""+this.getText("OkButton")+"\" /></p>"+
+ "</div>"+
+ "</form>";
+ break;
+ case "yellow-pane-edit":
+ elementDiv.innerHTML =
"<form method=\"post\">"+
"<h1 id=\"yellow-pane-edit-title\">"+this.getText("Edit")+"</h1>"+
"<textarea id=\"yellow-pane-edit-page\" class=\"yellow-form-control\" name=\"rawdataedit\"></textarea>"+
@@ -182,91 +177,162 @@ yellow.webinterface =
"<a href=\""+this.getText("MarkdownHelpUrl", "yellow")+"\" target=\"_blank\" id=\"yellow-pane-edit-help\">"+this.getText("MarkdownHelp")+"</a>" +
"</div>"+
"</form>";
- } else if(paneId == "yellow-pane-user") {
- elementDiv.innerHTML =
- "<p>"+yellow.config.userEmail+"</p>"+
- "<p><a href=\""+this.getText("UserHelpUrl", "yellow")+"\" onclick=\"yellow.action('user'); return true;\">"+this.getText("UserHelp")+"</a></p>" +
+ break;
+ case "yellow-pane-user":
+ elementDiv.innerHTML =
+ "<p>"+yellow.toolbox.encodeHtml(yellow.config.userEmail)+"</p>"+
+ "<p><a href=\"#\" onclick=\"yellow.action('settings'); return false;\">"+this.getText("SettingsTitle")+"</a></p>" +
+ "<p><a href=\"#\" onclick=\"yellow.action('help'); return false;\">"+this.getText("UserHelp")+"</a></p>" +
"<p><a href=\"#\" onclick=\"yellow.action('logout'); return false;\">"+this.getText("UserLogout")+"</a></p>";
+ break;
}
elementPane.appendChild(elementDiv);
- yellow.toolbox.insertAfter(elementPane, elementReference);
+ yellow.toolbox.insertAfter(elementPane, document.getElementsByTagName("body")[0].firstChild);
+ return elementPane;
},
// Update pane
updatePane: function(paneId, paneType, init)
{
- if(yellow.debug) console.log("yellow.webinterface.updatePane id:"+paneId);
- if(paneId == "yellow-pane-login")
+ switch(paneId)
{
- if(!yellow.config.loginExtra)
- {
- document.getElementById("yellow-pane-login-buttons").style.display = "none";
- }
- } else if(paneId == "yellow-pane-signup") {
- switch(paneType)
- {
- case "signup": text = this.getText("SignupStatus", "", yellow.page.loginStatus); break;
- case "confirm": text = this.getText("ConfirmStatus", "", yellow.page.loginStatus); break;
- case "approve": text = this.getText("ApproveStatus", "", yellow.page.loginStatus); break;
- }
- document.getElementById("yellow-pane-signup-status").innerHTML = yellow.toolbox.encodeHtml(text);
- if(yellow.page.loginStatus=="next" || yellow.page.loginStatus=="done" || yellow.page.loginStatus=="expire")
- {
- document.getElementById("yellow-pane-signup-fields").style.display = "none";
- } else {
- document.getElementById("yellow-pane-signup-buttons").style.display = "none";
- }
- } else if(paneId == "yellow-pane-recover") {
- if(yellow.page.loginStatus=="next" || yellow.page.loginStatus=="done" || yellow.page.loginStatus=="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"))
+ case "yellow-pane-login":
+ if(!yellow.config.loginButtons)
{
- document.getElementById("yellow-pane-recover-fields-first").style.display = "none";
+ document.getElementById("yellow-pane-login-buttons").style.display = "none";
+ }
+ break;
+ case "yellow-pane-signup":
+ if(yellow.page.status=="next" || yellow.page.status=="done" || yellow.page.status=="expire")
+ {
+ document.getElementById("yellow-pane-signup-fields").style.display = "none";
} else {
- document.getElementById("yellow-pane-recover-fields-second").style.display = "none";
+ document.getElementById("yellow-pane-signup-buttons").style.display = "none";
}
- }
- } else if(paneId == "yellow-pane-edit") {
- if(init)
- {
- var title = yellow.page.title;
- var string = yellow.page.rawDataEdit;
switch(paneType)
{
- case "create": title = this.getText("CreateTitle"); string = yellow.page.rawDataNew; break;
- case "delete": title = this.getText("DeleteTitle"); break;
+ 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-edit-title").innerHTML = yellow.toolbox.encodeHtml(title);
- 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)
- {
- var key, className;
- switch(action)
+ 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")
{
- case "create": key = "CreateButton"; className = "yellow-btn yellow-btn-create"; break;
- case "edit": key = "EditButton"; className = "yellow-btn yellow-btn-edit"; break;
- case "delete": key = "DeleteButton"; className = "yellow-btn yellow-btn-delete"; break;
+ 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"))
+ {
+ document.getElementById("yellow-pane-recover-fields-first").style.display = "none";
+ } else {
+ document.getElementById("yellow-pane-recover-fields-second").style.display = "none";
+ }
}
- document.getElementById("yellow-pane-edit-send").value = this.getText(key);
- document.getElementById("yellow-pane-edit-send").className = className;
- } else {
- document.getElementById("yellow-pane-edit-send").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;
+ break;
+ case "yellow-pane-edit":
+ if(init)
+ {
+ var title = yellow.page.title;
+ var string = yellow.page.rawDataEdit;
+ switch(paneType)
+ {
+ case "create": title = this.getText("CreateTitle"); string = yellow.page.rawDataNew; break;
+ case "delete": title = this.getText("DeleteTitle"); break;
+ }
+ document.getElementById("yellow-pane-edit-title").innerHTML = yellow.toolbox.encodeHtml(title);
+ 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)
+ {
+ var key, className;
+ switch(action)
+ {
+ case "create": key = "CreateButton"; className = "yellow-btn yellow-btn-create"; break;
+ case "edit": key = "EditButton"; className = "yellow-btn yellow-btn-edit"; break;
+ case "delete": key = "DeleteButton"; className = "yellow-btn yellow-btn-delete"; break;
+ }
+ document.getElementById("yellow-pane-edit-send").value = this.getText(key);
+ document.getElementById("yellow-pane-edit-send").className = className;
+ } else {
+ document.getElementById("yellow-pane-edit-send").style.display = "none";
+ }
+ break;
+ }
+ },
+
+ // 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)
+ {
+ 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);
+ var paneHeight = yellow.toolbox.getWindowHeight() - paneTop - yellow.toolbox.getOuterHeight(elementBar);
+ switch(paneId)
+ {
+ case "yellow-pane-login":
+ case "yellow-pane-signup":
+ case "yellow-pane-recover":
+ case "yellow-pane-settings":
+ yellow.toolbox.setOuterTop(document.getElementById(paneId), paneTop);
+ yellow.toolbox.setOuterWidth(document.getElementById(paneId), paneWidth);
+ break;
+ case "yellow-pane-edit":
+ yellow.toolbox.setOuterTop(document.getElementById("yellow-pane-edit"), paneTop);
+ yellow.toolbox.setOuterHeight(document.getElementById("yellow-pane-edit"), paneHeight);
+ yellow.toolbox.setOuterWidth(document.getElementById("yellow-pane-edit"), paneWidth);
+ yellow.toolbox.setOuterWidth(document.getElementById("yellow-pane-edit-page"), yellow.toolbox.getWidth(document.getElementById("yellow-pane-edit")));
+ var height1 = yellow.toolbox.getHeight(document.getElementById("yellow-pane-edit"));
+ 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 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);
+ break;
+ case "yellow-pane-user":
+ yellow.toolbox.setOuterTop(document.getElementById("yellow-pane-user"), paneTop);
+ yellow.toolbox.setOuterHeight(document.getElementById("yellow-pane-user"), paneHeight, true);
+ yellow.toolbox.setOuterLeft(document.getElementById("yellow-pane-user"), paneWidth - yellow.toolbox.getOuterWidth(document.getElementById("yellow-pane-user")), true);
+ var elementLink = document.getElementById("yellow-pane-user-link");
+ var position = yellow.toolbox.getOuterLeft(elementLink) + yellow.toolbox.getOuterWidth(elementLink)/2;
+ position -= yellow.toolbox.getOuterLeft(document.getElementById("yellow-pane-user"));
+ yellow.toolbox.setOuterLeft(document.getElementById("yellow-pane-user-arrow"), position);
+ break;
}
},
// Send pane
sendPane: function(paneId, paneType)
{
- if(yellow.debug) console.log("yellow.webinterface.sendPane id:"+paneId);
- if(paneId == "yellow-pane-edit")
+ if(yellow.config.debug) console.log("yellow.webinterface.sendPane id:"+paneId);
+ if(paneId=="yellow-pane-edit")
{
var action = this.getPaneAction(paneId, paneType);
if(action)
@@ -279,38 +345,35 @@ yellow.webinterface =
} else {
this.hidePane(paneId);
}
+ } else {
+ yellow.toolbox.submitForm({"action":paneType});
}
},
// Show or hide pane
- togglePane: function(paneId, paneType, modal)
+ showPane: function(paneId, paneType, modal)
{
if(this.paneId!=paneId || this.paneType!=paneType)
{
this.hidePane(this.paneId);
- this.showPane(paneId, paneType, modal);
- } else {
- this.hidePane(paneId);
- }
- },
-
- // Show pane
- showPane: function(paneId, paneType, modal)
- {
- var element = document.getElementById(paneId);
- if(!yellow.toolbox.isVisible(element))
- {
- if(yellow.debug) console.log("yellow.webinterface.showPane id:"+paneId);
- element.style.display = "block";
- if(modal)
+ var element = document.getElementById(paneId);
+ if(!element) element = this.createPane(paneId, paneType);
+ if(!yellow.toolbox.isVisible(element))
{
- yellow.toolbox.addClass(document.body, "yellow-body-modal-open");
- yellow.toolbox.addValue("meta[name=viewport]", "content", ", maximum-scale=1, user-scalable=0");
+ if(yellow.config.debug) console.log("yellow.webinterface.showPane id:"+paneId);
+ element.style.display = "block";
+ if(modal)
+ {
+ yellow.toolbox.addClass(document.body, "yellow-body-modal-open");
+ 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.paneId = paneId;
- this.paneType = paneType;
- this.resizePane(paneId);
- this.updatePane(paneId, paneType, true);
+ } else {
+ this.hidePane(this.paneId);
}
},
@@ -320,7 +383,7 @@ yellow.webinterface =
var element = document.getElementById(paneId);
if(yellow.toolbox.isVisible(element))
{
- if(yellow.debug) console.log("yellow.webinterface.hidePane id:"+paneId);
+ if(yellow.config.debug) console.log("yellow.webinterface.hidePane id:"+paneId);
yellow.toolbox.removeClass(document.body, "yellow-body-modal-open");
yellow.toolbox.removeValue("meta[name=viewport]", "content", ", maximum-scale=1, user-scalable=0");
element.style.display = "none";
@@ -357,61 +420,16 @@ yellow.webinterface =
// Hide all panes on ESC key
hidePanesOnKeydown: function(keycode)
{
- if(keycode == 27) this.hidePanes();
- },
-
- // Resize panes where needed
- resizePane: function(paneId)
- {
- if(document.getElementById("yellow-bar"))
- {
- var elementBar = document.getElementById("yellow-bar");
- var paneTop = yellow.toolbox.getOuterTop(elementBar) + yellow.toolbox.getOuterHeight(elementBar);
- var paneWidth = yellow.toolbox.getOuterWidth(elementBar, true);
- var paneHeight = yellow.toolbox.getWindowHeight() - paneTop - yellow.toolbox.getOuterHeight(elementBar);
- switch(paneId)
- {
- case "yellow-pane-login":
- case "yellow-pane-signup":
- case "yellow-pane-recover":
- yellow.toolbox.setOuterTop(document.getElementById(paneId), paneTop);
- yellow.toolbox.setOuterWidth(document.getElementById(paneId), paneWidth);
- break;
- case "yellow-pane-edit":
- yellow.toolbox.setOuterTop(document.getElementById("yellow-pane-edit"), paneTop);
- yellow.toolbox.setOuterHeight(document.getElementById("yellow-pane-edit"), paneHeight);
- yellow.toolbox.setOuterWidth(document.getElementById("yellow-pane-edit"), paneWidth);
- yellow.toolbox.setOuterWidth(document.getElementById("yellow-pane-edit-page"), yellow.toolbox.getWidth(document.getElementById("yellow-pane-edit")));
- var height1 = yellow.toolbox.getHeight(document.getElementById("yellow-pane-edit"));
- 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 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);
- break;
- case "yellow-pane-user":
- yellow.toolbox.setOuterTop(document.getElementById("yellow-pane-user"), paneTop);
- yellow.toolbox.setOuterHeight(document.getElementById("yellow-pane-user"), paneHeight, true);
- yellow.toolbox.setOuterLeft(document.getElementById("yellow-pane-user"), paneWidth - yellow.toolbox.getOuterWidth(document.getElementById("yellow-pane-user")), true);
- var elementLink = document.getElementById("yellow-pane-user-link");
- var position = yellow.toolbox.getOuterLeft(elementLink) + yellow.toolbox.getOuterWidth(elementLink)/2;
- position -= yellow.toolbox.getOuterLeft(document.getElementById("yellow-pane-user"));
- yellow.toolbox.setOuterLeft(document.getElementById("yellow-pane-user-arrow"), position);
- break;
- }
- if(yellow.debug) console.log("yellow.webinterface.resizePane bar:"+elementBar.offsetWidth+"/"+elementBar.offsetHeight);
- }
+ if(keycode==27) this.hidePanes();
},
// Return pane action
getPaneAction: function(paneId, paneType)
{
var action = "";
- if(paneId == "yellow-pane-edit")
+ if(paneId=="yellow-pane-edit")
{
- if(!yellow.page.userRestrictions)
+ if(!yellow.config.userRestrictions)
{
var string = document.getElementById("yellow-pane-edit-page").value;
switch(paneType)
@@ -425,6 +443,22 @@ yellow.webinterface =
}
return action;
},
+
+ // Return pane languages
+ getPaneLanguages: function(paneId)
+ {
+ var languages = "";
+ if(yellow.toolbox.getLength(yellow.config.serverLanguages)>1)
+ {
+ 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 />";
+ }
+ languages += "</p>";
+ }
+ return languages;
+ },
// Return request string
getRequest: function(key, prefix)
@@ -515,6 +549,12 @@ yellow.toolbox =
return e.keyCode
},
+ // Return element length
+ getLength: function(element)
+ {
+ return Object.keys ? Object.keys(element).length : 0;
+ },
+
// Set element width/height in pixel, including padding and border
setOuterWidth: function(element, width, maxWidth)
{
@@ -727,4 +767,4 @@ yellow.toolbox =
}
}
-yellow.webinterface.init();
-\ No newline at end of file
+yellow.webinterface.intervalId = setInterval("yellow.onIntervall()", 1);
diff --git a/system/plugins/webinterface.php b/system/plugins/webinterface.php
@@ -5,12 +5,14 @@
// Web interface plugin
class YellowWebinterface
{
- const Version = "0.6.6";
+ const Version = "0.6.7";
var $yellow; //access to API
var $active; //web interface is active? (boolean)
- var $loginAction; //web interface login action
- var $loginStatus; //web interface login status
+ var $userEmail; //web interface user
+ var $userLanguage; //web interface user language
var $userRestrictions; //web interface user can change page? (boolean)
+ var $action; //web interface action
+ var $status; //web interface status
var $users; //web interface users
var $merge; //web interface merge
var $rawDataSource; //raw data of page for comparison
@@ -40,20 +42,10 @@ class YellowWebinterface
function onRequest($serverScheme, $serverName, $base, $location, $fileName)
{
$statusCode = 0;
- if($this->checkRequest($location))
+ if($this->checkRequest($location, $fileName))
{
list($serverScheme, $serverName, $base, $location, $fileName) = $this->updateRequestInformation();
$statusCode = $this->processRequest($serverScheme, $serverName, $base, $location, $fileName);
- } else {
- $activeLocation = $this->yellow->config->get("webinterfaceLocation");
- if(rtrim($location, '/') == rtrim($activeLocation, '/'))
- {
- $statusCode = 301;
- $location = $this->yellow->lookup->normaliseUrl(
- $this->yellow->config->get("webinterfaceServerScheme"),
- $this->yellow->config->get("webinterfaceServerName"), $base, $activeLocation);
- $this->yellow->sendStatus($statusCode, $location);
- }
}
return $statusCode;
}
@@ -67,16 +59,12 @@ class YellowWebinterface
{
if(empty($this->rawDataSource)) $this->rawDataSource = $page->rawData;
if(empty($this->rawDataEdit)) $this->rawDataEdit = $page->rawData;
- if($page->statusCode == 424)
- {
- $title = $this->yellow->toolbox->createTextTitle($page->location);
- $this->rawDataEdit = $this->getRawDataNew($title);
- }
- } else {
- if(empty($this->loginAction)) $this->loginAction = "login";
- if(empty($this->loginStatus)) $this->loginStatus = "none";
- if($this->loginStatus == "error") $this->loginAction = "error";
+ if($page->statusCode == 424) $this->rawDataEdit = $this->getRawDataNew($page->location);
}
+ if(empty($this->userLanguage)) $this->userLanguage = $page->get("language");
+ if(empty($this->action)) $this->action = $this->isUser() ? "none" : "login";
+ if(empty($this->status)) $this->status = "none";
+ if($this->status == "error") $this->action = "error";
}
}
@@ -107,7 +95,6 @@ class YellowWebinterface
$output .= "yellow.page = ".json_encode($this->getPageData()).";\n";
$output .= "yellow.config = ".json_encode($this->getConfigData()).";\n";
$output .= "yellow.text = ".json_encode($this->getTextData()).";\n";
- if(defined("DEBUG") && DEBUG>=1) $output .= "yellow.debug = ".json_encode(DEBUG).";\n";
$output .= "// ]]>\n";
$output .= "</script>\n";
}
@@ -184,10 +171,10 @@ 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 "settings": $statusCode = $this->processRequestSettings($serverScheme, $serverName, $base, $location, $fileName); break;
case "create": $statusCode = $this->processRequestCreate($serverScheme, $serverName, $base, $location, $fileName); break;
case "edit": $statusCode = $this->processRequestEdit($serverScheme, $serverName, $base, $location, $fileName); break;
case "delete": $statusCode = $this->processRequestDelete($serverScheme, $serverName, $base, $location, $fileName); break;
- case "install": $statusCode = $this->processRequestInstall($serverScheme, $serverName, $base, $location, $fileName); break;
}
} else {
switch($_REQUEST["action"])
@@ -202,7 +189,9 @@ class YellowWebinterface
if($statusCode == 0)
{
$statusCode = $this->yellow->processRequest($serverScheme, $serverName, $base, $location, $fileName, false);
- if($this->loginAction == "fail") $this->yellow->page->error(500, "Login failed, [please log in](javascript:yellow.action('login');)!");
+ $fileNameConfig = $this->yellow->config->get("configDir").$this->yellow->config->get("configFile");
+ if($this->action == "off") $this->yellow->page->error(500, "Please configure webmaster email in file '$fileNameConfig'!");
+ if($this->action == "fail") $this->yellow->page->error(500, "Login failed, [please log in](javascript:yellow.action('login');)!");
}
return $statusCode;
}
@@ -218,7 +207,7 @@ class YellowWebinterface
if($this->yellow->isRequestContentDirectory($location))
{
$statusCode = 301;
- $location = $this->yellow->lookup->isFileLocation($location) ? "$location/" : "/".$this->yellow->getRequestLanguage()."/";
+ $location = $this->yellow->lookup->isFileLocation($location) ? "$location/" : "/".$this->yellow->getRequestLanguage(true)."/";
$location = $this->yellow->lookup->normaliseUrl($serverScheme, $serverName, $base, $location);
$this->yellow->sendStatus($statusCode, $location);
} else {
@@ -234,7 +223,7 @@ class YellowWebinterface
function processRequestLogin($serverScheme, $serverName, $base, $location, $fileName)
{
$statusCode = 0;
- $home = $this->users->getHome();
+ $home = $this->users->getHome($this->userEmail);
if(substru($location, 0, strlenu($home)) == $home)
{
$statusCode = 303;
@@ -252,8 +241,8 @@ class YellowWebinterface
function processRequestLogout($serverScheme, $serverName, $base, $location, $fileName)
{
$statusCode = 302;
+ $this->userEmail = "";
$this->users->destroyCookie("login");
- $this->users->email = "";
$location = $this->yellow->lookup->normaliseUrl(
$this->yellow->config->get("serverScheme"),
$this->yellow->config->get("serverName"),
@@ -265,25 +254,25 @@ class YellowWebinterface
// Process request for user signup
function processRequestSignup($serverScheme, $serverName, $base, $location, $fileName)
{
- $this->loginAction = "signup";
- $this->loginStatus = "ok";
+ $this->action = "signup";
+ $this->status = "ok";
$name = trim(preg_replace("/[^\pL\d\-\. ]/u", "-", $_REQUEST["name"]));
$email = trim($_REQUEST["email"]);
$password = trim($_REQUEST["password"]);
- if(empty($name) || empty($email) || empty($password)) $this->loginStatus = "incomplete";
- if($this->loginStatus == "ok") $this->loginStatus = $this->getUserAccount($email, $password, $this->loginAction);
- if($this->loginStatus == "ok" && !$this->isExtra()) $this->loginStatus = "next";
- if($this->loginStatus == "ok" && $this->users->isExisting($email)) $this->loginStatus = "next";
- if($this->loginStatus == "ok")
+ if(empty($name) || empty($email) || empty($password)) $this->status = "incomplete";
+ if($this->status == "ok") $this->status = $this->getUserAccount($email, $password, $this->action);
+ if($this->status == "ok" && !$this->users->isWebmaster()) $this->status = "next";
+ if($this->status == "ok" && $this->users->isExisting($email)) $this->status = "next";
+ if($this->status == "ok")
{
$fileNameUser = $this->yellow->config->get("configDir").$this->yellow->config->get("webinterfaceUserFile");
- $this->loginStatus = $this->users->update($fileNameUser, $email, $password, $name, "", "unconfirmed") ? "ok" : "error";
- if($this->loginStatus == "error") $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
+ $this->status = $this->users->update($fileNameUser, $email, $password, $name, "", "unconfirmed") ? "ok" : "error";
+ if($this->status == "error") $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
}
- if($this->loginStatus == "ok")
+ if($this->status == "ok")
{
- $this->loginStatus = $this->sendMail($serverScheme, $serverName, $base, $email, "confirm") ? "next" : "error";
- if($this->loginStatus == "error") $this->yellow->page->error(500, "Can't send email on this server!");
+ $this->status = $this->sendMail($serverScheme, $serverName, $base, $email, "confirm") ? "next" : "error";
+ if($this->status == "error") $this->yellow->page->error(500, "Can't send email on this server!");
}
$statusCode = $this->yellow->processRequest($serverScheme, $serverName, $base, $location, $fileName, false);
return $statusCode;
@@ -292,20 +281,20 @@ class YellowWebinterface
// Process request to confirm user signup
function processRequestConfirm($serverScheme, $serverName, $base, $location, $fileName)
{
- $this->loginAction = "confirm";
- $this->loginStatus = "ok";
+ $this->action = "confirm";
+ $this->status = "ok";
$email = $_REQUEST["email"];
- $this->loginStatus = $this->getUserRequest($email, $_REQUEST["action"], $_REQUEST["expire"], $_REQUEST["id"]);
- if($this->loginStatus == "ok")
+ $this->status = $this->getUserRequest($email, $_REQUEST["action"], $_REQUEST["expire"], $_REQUEST["id"]);
+ if($this->status == "ok")
{
$fileNameUser = $this->yellow->config->get("configDir").$this->yellow->config->get("webinterfaceUserFile");
- $this->loginStatus = $this->users->update($fileNameUser, $email, "", "", "", "unapproved") ? "ok" : "error";
- if($this->loginStatus == "error") $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
+ $this->status = $this->users->update($fileNameUser, $email, "", "", "", "unapproved") ? "ok" : "error";
+ if($this->status == "error") $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
}
- if($this->loginStatus == "ok")
+ if($this->status == "ok")
{
- $this->loginStatus = $this->sendMail($serverScheme, $serverName, $base, $email, "approve") ? "done" : "error";
- if($this->loginStatus == "error") $this->yellow->page->error(500, "Can't send email on this server!");
+ $this->status = $this->sendMail($serverScheme, $serverName, $base, $email, "approve") ? "done" : "error";
+ if($this->status == "error") $this->yellow->page->error(500, "Can't send email on this server!");
}
$statusCode = $this->yellow->processRequest($serverScheme, $serverName, $base, $location, $fileName, false);
return $statusCode;
@@ -314,20 +303,20 @@ class YellowWebinterface
// Process request to approve user signup
function processRequestApprove($serverScheme, $serverName, $base, $location, $fileName)
{
- $this->loginAction = "approve";
- $this->loginStatus = "ok";
+ $this->action = "approve";
+ $this->status = "ok";
$email = $_REQUEST["email"];
- $this->loginStatus = $this->getUserRequest($email, $_REQUEST["action"], $_REQUEST["expire"], $_REQUEST["id"]);
- if($this->loginStatus == "ok")
+ $this->status = $this->getUserRequest($email, $_REQUEST["action"], $_REQUEST["expire"], $_REQUEST["id"]);
+ if($this->status == "ok")
{
$fileNameUser = $this->yellow->config->get("configDir").$this->yellow->config->get("webinterfaceUserFile");
- $this->loginStatus = $this->users->update($fileNameUser, $email, "", "", "", "active") ? "ok" : "error";
- if($this->loginStatus == "error") $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
+ $this->status = $this->users->update($fileNameUser, $email, "", "", "", "active") ? "ok" : "error";
+ if($this->status == "error") $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
}
- if($this->loginStatus == "ok")
+ if($this->status == "ok")
{
- $this->loginStatus = $this->sendMail($serverScheme, $serverName, $base, $email, "welcome") ? "done" : "error";
- if($this->loginStatus == "error") $this->yellow->page->error(500, "Can't send email on this server!");
+ $this->status = $this->sendMail($serverScheme, $serverName, $base, $email, "welcome") ? "done" : "error";
+ if($this->status == "error") $this->yellow->page->error(500, "Can't send email on this server!");
}
$statusCode = $this->yellow->processRequest($serverScheme, $serverName, $base, $location, $fileName, false);
return $statusCode;
@@ -336,42 +325,67 @@ class YellowWebinterface
// Process request to recover password
function processRequestRecover($serverScheme, $serverName, $base, $location, $fileName)
{
- $this->loginAction = "recover";
- $this->loginStatus = "ok";
+ $this->action = "recover";
+ $this->status = "ok";
$email = trim($_REQUEST["email"]);
$password = trim($_REQUEST["password"]);
if(empty($_REQUEST["id"]))
{
- if(!filter_var($email, FILTER_VALIDATE_EMAIL)) $this->loginStatus = "invalid";
- if($this->loginStatus == "ok" && !$this->isExtra()) $this->loginStatus = "next";
- if($this->loginStatus == "ok" && !$this->users->isExisting($email)) $this->loginStatus = "next";
- if($this->loginStatus == "ok")
+ if(!filter_var($email, FILTER_VALIDATE_EMAIL)) $this->status = "invalid";
+ if($this->status == "ok" && !$this->users->isWebmaster()) $this->status = "next";
+ if($this->status == "ok" && !$this->users->isExisting($email)) $this->status = "next";
+ if($this->status == "ok")
{
- $this->loginStatus = $this->sendMail($serverScheme, $serverName, $base, $email, "recover") ? "next" : "error";
- if($this->loginStatus == "error") $this->yellow->page->error(500, "Can't send email on this server!");
+ $this->status = $this->sendMail($serverScheme, $serverName, $base, $email, "recover") ? "next" : "error";
+ if($this->status == "error") $this->yellow->page->error(500, "Can't send email on this server!");
}
} else {
- $this->loginStatus = $this->getUserRequest($email, $_REQUEST["action"], $_REQUEST["expire"], $_REQUEST["id"]);
- if($this->loginStatus == "ok")
+ $this->status = $this->getUserRequest($email, $_REQUEST["action"], $_REQUEST["expire"], $_REQUEST["id"]);
+ if($this->status == "ok")
{
- if(empty($password)) $this->loginStatus = "password";
- if($this->loginStatus == "ok") $this->loginStatus = $this->getUserAccount($email, $password, $this->loginAction);
- if($this->loginStatus == "ok")
+ if(empty($password)) $this->status = "password";
+ if($this->status == "ok") $this->status = $this->getUserAccount($email, $password, $this->action);
+ if($this->status == "ok")
{
$fileNameUser = $this->yellow->config->get("configDir").$this->yellow->config->get("webinterfaceUserFile");
- $this->loginStatus = $this->users->update($fileNameUser, $email, $password) ? "ok" : "error";
- if($this->loginStatus == "error") $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
+ $this->status = $this->users->update($fileNameUser, $email, $password) ? "ok" : "error";
+ if($this->status == "error") $this->yellow->page->error(500, "Can't write file '$fileNameUser'!");
}
- if($this->loginStatus == "ok")
+ if($this->status == "ok")
{
- $this->loginStatus = $this->sendMail($serverScheme, $serverName, $base, $email, "information") ? "done" : "error";
- if($this->loginStatus == "error") $this->yellow->page->error(500, "Can't send email on this server!");
+ $this->userEmail = "";
+ $this->users->destroyCookie("login");
+ $this->status = $this->sendMail($serverScheme, $serverName, $base, $email, "information") ? "done" : "error";
+ if($this->status == "error") $this->yellow->page->error(500, "Can't send email on this server!");
}
}
}
$statusCode = $this->yellow->processRequest($serverScheme, $serverName, $base, $location, $fileName, false);
return $statusCode;
}
+
+ // Process request to change settings
+ function processRequestSettings($serverScheme, $serverName, $base, $location, $fileName)
+ {
+ $statusCode = 0;
+ if($this->getUserAccount($this->userEmail, "", "settings") == "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'!");
+ }
+ }
+ return $statusCode;
+ }
// Process request to create page
function processRequestCreate($serverScheme, $serverName, $base, $location, $fileName)
@@ -460,7 +474,7 @@ class YellowWebinterface
function processRequestInstall($serverScheme, $serverName, $base, $location, $fileName)
{
$statusCode = 0;
- if($this->yellow->config->get("installationMode") && !$this->yellow->isStaticFile($location, $fileName, false))
+ if($this->yellow->config->get("installationMode"))
{
$fileName = $this->yellow->config->get("configDir")."page-installation.txt";
$this->yellow->pages->pages["root/"] = array();
@@ -469,7 +483,7 @@ class YellowWebinterface
$this->yellow->page->parseData($this->getRawDataInstallation($fileName, $this->yellow->getRequestLanguage()), false, 404);
$this->yellow->page->parserSafeMode = false;
$this->yellow->page->parseContent();
- $author = trim($_REQUEST["author"]);
+ $name = trim(preg_replace("/[^\pL\d\-\. ]/u", "-", $_REQUEST["name"]));
$email = trim($_REQUEST["email"]);
$password = trim($_REQUEST["password"]);
$language = trim($_REQUEST["language"]);
@@ -477,26 +491,26 @@ class YellowWebinterface
if($status == "install")
{
$status = "ok";
- $fileNamePage = $this->yellow->lookup->findFileFromLocation("/");
- $rawData = strreplaceu("\\n", "\n", $this->yellow->text->getText("webinterfaceInstallationHomePage", "en"));
- if($this->yellow->toolbox->readFile($fileNamePage)==$rawData && $language!="en")
+ $fileNameHome = $this->yellow->lookup->findFileFromLocation("/");
+ $fileData = strreplaceu("\r\n", "\n", $this->yellow->toolbox->readFile($fileNameHome));
+ if($fileData==$this->getRawDataHome("en") && $language!="en")
{
- $rawData = strreplaceu("\\n", "\n", $this->yellow->text->getText("webinterfaceInstallationHomePage", $language));
- $status = $this->yellow->toolbox->createFile($fileNamePage, $rawData) ? "ok" : "error";
- if($status == "error") $this->yellow->page->error(500, "Can't write file '$fileNamePage'!");
+ $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($this->getUserAccount($email, $password, "install") == "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, $author, $language, "active", "/") ? "ok" : "error";
+ $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'!");
@@ -516,13 +530,13 @@ class YellowWebinterface
// Send mail to web interface user
function sendMail($serverScheme, $serverName, $base, $email, $action)
{
- if($action=="welcome" || $action == "information")
+ if($action=="welcome" || $action=="information")
{
$url = "$serverScheme://$serverName$base/";
} else {
- $expire = time()+60*60*24*30;
- $id = $this->users->createRequestId($email, $action, $expire);
- $url = "$serverScheme://$serverName$base"."/action:$action/email:$email/expire:$expire/id:$id";
+ $expire = time()+60*60*24;
+ $id = $this->users->createUserRequestId($email, $action, $expire);
+ $url = "$serverScheme://$serverName$base"."/action:$action/email:$email/expire:$expire/id:$id/";
}
if($action == "approve")
{
@@ -554,18 +568,18 @@ class YellowWebinterface
}
// Check web interface request
- function checkRequest($location)
+ function checkRequest($location, $fileName)
{
+ if($this->yellow->toolbox->getServerScheme()==$this->yellow->config->get("webinterfaceServerScheme") &&
+ $this->yellow->toolbox->getServerName()==$this->yellow->config->get("webinterfaceServerName"))
+ {
+ $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"] = "install";
- } else {
- if($this->yellow->toolbox->getServerScheme()==$this->yellow->config->get("webinterfaceServerScheme") &&
- $this->yellow->toolbox->getServerName()==$this->yellow->config->get("webinterfaceServerName"))
- {
- $locationLength = strlenu($this->yellow->config->get("webinterfaceLocation"));
- $this->active = substru($location, 0, $locationLength) == $this->yellow->config->get("webinterfaceLocation");
- }
+ $_REQUEST["action"] = $this->yellow->isStaticFile($location, $fileName, false) ? "" : "install";
+ $this->active = false;
}
return $this->yellow->config->get("installationMode") || $this->isActive();
}
@@ -580,51 +594,62 @@ class YellowWebinterface
if($this->users->checkUser($email, $password))
{
$this->users->createCookie("login", $email);
- $this->users->email = $email;
+ $this->userEmail = $email;
+ $this->userLanguage = $this->getUserLanguage($email);
$this->userRestrictions = $this->getUserRestrictions($email, $location, $fileName);
} else {
- $this->loginAction = "fail";
+ $this->action = "fail";
}
} else if(isset($_COOKIE["login"])) {
list($email, $session) = explode(',', $_COOKIE["login"], 2);
if($this->users->checkCookie($email, $session))
{
- $this->users->email = $email;
+ $this->userEmail = $email;
+ $this->userLanguage = $this->getUserLanguage($email);
$this->userRestrictions = $this->getUserRestrictions($email, $location, $fileName);
} else {
- $this->loginAction = "fail";
+ $this->action = "fail";
}
}
+ if(!$this->users->getNumber() && !$this->users->isWebmaster()) $this->action = "off";
return $this->isUser();
}
+
+ // Return user language
+ function getUserLanguage($email)
+ {
+ $language = $this->users->getLanguage($email);
+ if(!$this->yellow->text->isLanguage($language)) $language = $this->yellow->config->get("language");
+ return $language;
+ }
// Return user account request
function getUserRequest($email, $action, $expire, $id)
{
- $loginStatus = $this->users->checkRequest($email, $action, $expire, $id) ? "ok" : "done";
- if($loginStatus=="done" && $expire<=time()) $loginStatus = "expire";
- return $loginStatus;
+ $status = $this->users->checkUserRequest($email, $action, $expire, $id) ? "ok" : "done";
+ if($status=="done" && $expire<=time()) $status = "expire";
+ return $status;
}
// Return user account changes
function getUserAccount($email, $password, $action)
{
- $loginStatus = NULL;
+ $status = NULL;
foreach($this->yellow->plugins->plugins as $key=>$value)
{
if(method_exists($value["obj"], "onUserAccount"))
{
- $loginStatus = $value["obj"]->onUserAccount($email, $password, $action, $status, $this->users);
- if(!is_null($loginStatus)) break;
+ $status = $value["obj"]->onUserAccount($email, $password, $action, $status, $this->users);
+ if(!is_null($status)) break;
}
}
- if(is_null($loginStatus))
+ if(is_null($status))
{
- $loginStatus = "ok";
- if(strlenu($password)<$this->yellow->config->get("webinterfaceUserPasswordMinLength")) $loginStatus = "weak";
- if(!filter_var($email, FILTER_VALIDATE_EMAIL)) $loginStatus = "invalid";
+ $status = "ok";
+ if(!empty($password) && strlenu($password)<$this->yellow->config->get("webinterfaceUserPasswordMinLength")) $status = "weak";
+ if(!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) $status = "invalid";
}
- return $loginStatus;
+ return $status;
}
// Return user restrictions to change page
@@ -642,7 +667,7 @@ class YellowWebinterface
if(is_null($userRestrictions))
{
$userRestrictions = !is_dir(dirname($fileName)) || strlenu(basename($fileName))>128;
- $userRestrictions |= substru($location, 0, strlenu($this->users->getHome())) != $this->users->getHome();
+ $userRestrictions |= substru($location, 0, strlenu($this->users->getHome($email))) != $this->users->getHome($email);
}
return $userRestrictions;
}
@@ -715,7 +740,7 @@ class YellowWebinterface
if(!$ok) $page->error(500, "Page '".$page->get("title")."' can not be created!");
}
}
- if($this->getUserRestrictions($this->users->email, $page->location, $page->fileName))
+ if($this->getUserRestrictions($this->userEmail, $page->location, $page->fileName))
{
$page->error(500, "Page '".$page->get("title")."' is not allowed!");
}
@@ -752,7 +777,7 @@ class YellowWebinterface
}
}
}
- if($this->getUserRestrictions($this->users->email, $page->location, $page->fileName))
+ if($this->getUserRestrictions($this->userEmail, $page->location, $page->fileName))
{
$page->error(500, "Page '".$page->get("title")."' is not allowed!");
}
@@ -768,10 +793,9 @@ class YellowWebinterface
$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=\"sitename\">".$this->yellow->text->get("webinterfaceInstallationSitename")."</label><br /><input class=\"form-control\" type=\"text\" name=\"sitename\" id=\"sitename\" value=\"".$this->yellow->config->getHtml("sitename")."\"></p>\n";
- $fileData .= "<p><label for=\"author\">".$this->yellow->text->get("webinterfaceInstallationAuthor")."</label><br /><input class=\"form-control\" type=\"text\" maxlength=\"64\" name=\"author\" id=\"author\" value=\"\"></p>\n";
- $fileData .= "<p><label for=\"email\">".$this->yellow->text->get("webinterfaceLoginEmail")."</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("webinterfaceLoginPassword")."</label><br /><input class=\"form-control\" type=\"password\" maxlength=\"64\" name=\"password\" id=\"password\" value=\"\"></p>\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>";
@@ -789,8 +813,15 @@ class YellowWebinterface
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($title = "")
+ function getRawDataNew($location = "")
{
$fileName = $this->yellow->lookup->findFileFromLocation($this->yellow->page->location);
$fileName = $this->yellow->lookup->findFileNew($fileName,
@@ -799,10 +830,14 @@ class YellowWebinterface
$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(), " "), $fileData);
- $fileData = preg_replace("/@username/i", $this->users->getName(), $fileData);
- $fileData = preg_replace("/@userlanguage/i", $this->users->getLanguage(), $fileData);
- if(!empty($title)) $fileData = $this->updateDataTitle($fileData, $title);
+ $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);
+ if(!empty($location))
+ {
+ $title = $this->yellow->toolbox->createTextTitle($location);
+ $fileData = $this->updateDataTitle($fileData, $title);
+ }
return $fileData;
}
@@ -816,15 +851,13 @@ class YellowWebinterface
$data["rawDataSource"] = $this->rawDataSource;
$data["rawDataEdit"] = $this->rawDataEdit;
$data["rawDataNew"] = $this->getRawDataNew();
- $data["userRestrictions"] = $this->userRestrictions;
$data["pageFile"] = $this->yellow->page->get("pageFile");
$data["parserSafeMode"] = $this->yellow->page->parserSafeMode;
- $data["statusCode"] = $this->yellow->page->statusCode;
- } else {
- $data["loginAction"] = $this->loginAction;
- $data["loginStatus"] = $this->loginStatus;
- if($this->loginAction != "none") $data = array_merge($data, $this->getRequestData());
}
+ if($this->action != "none") $data = array_merge($data, $this->getRequestData());
+ $data["action"] = $this->action;
+ $data["status"] = $this->status;
+ $data["statusCode"] = $this->yellow->page->statusCode;
return $data;
}
@@ -834,21 +867,28 @@ class YellowWebinterface
$data = $this->yellow->config->getData("", "Location");
if($this->isUser())
{
- $data["userEmail"] = $this->users->email;
- $data["userName"] = $this->users->getName();
- $data["userLanguage"] = $this->users->getLanguage();
- $data["userStatus"] = $this->users->getStatus();
- $data["userHome"] = $this->users->getHome();
+ $data["userEmail"] = $this->userEmail;
+ $data["userName"] = $this->users->getName($this->userEmail);
+ $data["userLanguage"] = $this->users->getLanguage($this->userEmail);
+ $data["userStatus"] = $this->users->getStatus($this->userEmail);
+ $data["userHome"] = $this->users->getHome($this->userEmail);
+ $data["userRestrictions"] = $this->userRestrictions;
$data["serverScheme"] = $this->yellow->config->get("serverScheme");
$data["serverName"] = $this->yellow->config->get("serverName");
$data["serverBase"] = $this->yellow->config->get("serverBase");
$data["serverTime"] = $this->yellow->config->get("serverTime");
- $data["serverLanguages"] = $this->yellow->text->getLanguages();
+ $data["serverLanguages"] = array();
+ foreach($this->yellow->text->getLanguages() as $language)
+ {
+ $data["serverLanguages"][$language] = $this->yellow->text->getTextHtml("languageDescription", $language);
+ }
+ $data["serverVersion"] = YellowCore::Version;
} else {
$data["loginEmail"] = $this->yellow->config->get("loginEmail");
$data["loginPassword"] = $this->yellow->config->get("loginPassword");
- $data["loginExtra"] = intval($this->isExtra());
+ $data["loginButtons"] = intval($this->users->isWebmaster());
}
+ if(defined("DEBUG") && DEBUG>=1) $data["debug"] = DEBUG;
return $data;
}
@@ -875,7 +915,7 @@ class YellowWebinterface
$data = array();
foreach($_REQUEST as $key=>$value)
{
- if($key == "password") continue;
+ if($key=="login" || $key=="password") continue;
$data["request".ucfirst($key)] = trim($value);
}
return $data;
@@ -896,11 +936,9 @@ class YellowWebinterface
// Return text strings
function getTextData()
{
- $language = $this->isUser() ? $this->users->getLanguage() : $this->yellow->page->get("language");
- if(!$this->yellow->text->isLanguage($language)) $language = $this->yellow->config->get("language");
- $textLanguage = array_merge($this->yellow->text->getData("language", $language));
- $textWebinterface = array_merge($this->yellow->text->getData("webinterface", $language));
- $textYellow = array_merge($this->yellow->text->getData("yellow", $language));
+ $textLanguage = array_merge($this->yellow->text->getData("language", $this->userLanguage));
+ $textWebinterface = array_merge($this->yellow->text->getData("webinterface", $this->userLanguage));
+ $textYellow = array_merge($this->yellow->text->getData("yellow", $this->userLanguage));
return array_merge($textLanguage, $textWebinterface, $textYellow);
}
@@ -914,22 +952,16 @@ class YellowWebinterface
return $text;
}
- // Check if web interface request
- function isActive()
- {
- return $this->active;
- }
-
- // Check if extra login features
- function isExtra()
+ // Check if user is logged in
+ function isUser()
{
- return strposu($this->yellow->config->get("email"), '@') !== false;
+ return !empty($this->userEmail);
}
- // Check if user is logged in
- function isUser()
+ // Check if web interface request
+ function isActive()
{
- return !empty($this->users->email);
+ return $this->active;
}
}
@@ -938,7 +970,6 @@ class YellowUsers
{
var $yellow; //access to API
var $users; //registered users
- var $email; //current user
function __construct($yellow)
{
@@ -954,7 +985,7 @@ class YellowUsers
foreach($this->yellow->toolbox->getTextLines($fileData) as $line)
{
if(preg_match("/^\#/", $line)) continue;
- preg_match("/^(.*?)\s*:\s*(.*?),\s*(.*?),\s*(.*?),\s*(.*?),\s*(.*?)\s*$/", $line, $matches);
+ preg_match("/^\s*(.*?)\s*:\s*(.*?),\s*(.*?),\s*(.*?),\s*(.*?),\s*(.*?)\s*$/", $line, $matches);
if(!empty($matches[1]) && !empty($matches[2]) && !empty($matches[3]) && !empty($matches[4]) &&
!empty($matches[5]) && !empty($matches[6]))
{
@@ -994,7 +1025,7 @@ class YellowUsers
$fileData = $this->yellow->toolbox->readFile($fileName);
foreach($this->yellow->toolbox->getTextLines($fileData) as $line)
{
- preg_match("/^(.*?)\s*:\s*(.*?),\s*(.*?),\s*(.*?),\s*(.*?),\s*(.*?)\s*$/", $line, $matches);
+ preg_match("/^\s*(.*?)\s*:\s*(.*?),\s*(.*?),\s*(.*?),\s*(.*?),\s*(.*?)\s*$/", $line, $matches);
if(!empty($matches[1]) && $matches[1]==$email)
{
$fileDataNew .= "$email: $hash,$name,$language,$status,$home\n";
@@ -1056,75 +1087,51 @@ class YellowUsers
}
// Check user request
- function checkRequest($email, $action, $expire, $id)
+ function checkUserRequest($email, $action, $expire, $id)
{
switch($action)
{
- case "confirm": $status = "unconfirmed"; break;
- case "approve": $status = "unapproved"; break;
- case "recover": $status = "active"; break;
+ case "confirm": $status = "unconfirmed"; break;
+ case "approve": $status = "unapproved"; break;
+ default: $status = "active"; break;
}
return $this->isExisting($email) && $this->users[$email]["status"]==$status && $expire>time() &&
$this->yellow->toolbox->verifyHash($this->users[$email]["hash"].$action.$expire, "sha256", $id);
}
// Create user request ID
- function createRequestId($email, $action, $expire)
+ function createUserRequestId($email, $action, $expire)
{
return $this->yellow->toolbox->createHash($this->users[$email]["hash"].$action.$expire, "sha256");
}
- // Retun user login information, TODO: this is an obsolete function and will be removed soon
- function getUserInfo($email, $password, $name, $language, $home)
- {
- $algorithm = $this->yellow->config->get("webinterfaceUserHashAlgorithm");
- $cost = $this->yellow->config->get("webinterfaceUserHashCost");
- $hash = $this->yellow->toolbox->createHash($password, $algorithm, $cost);
- if(!empty($hash))
- {
- $email = strreplaceu(',', '-', $email);
- $hash = strreplaceu(',', '-', $hash);
- $name = strreplaceu(',', '-', empty($name) ? $this->yellow->config->get("sitename") : $name);
- $language = strreplaceu(',', '-', empty($language) ? $this->yellow->config->get("language") : $language);
- $status = strreplaceu(',', '-', empty($status) ? $this->yellow->config->get("webinterfaceUserStatus") : $status);
- $home = strreplaceu(',', '-', empty($home) ? $this->yellow->config->get("webinterfaceUserHome") : $home);
- $user = "$email: $hash,$name,$language,$status,$home\n";
- }
- return $user;
- }
-
// Return user hash
function getHash($email = "")
{
- if(empty($email)) $email = $this->email;
return $this->isExisting($email) ? $this->users[$email]["hash"] : "";
}
// Return user name
function getName($email = "")
{
- if(empty($email)) $email = $this->email;
return $this->isExisting($email) ? $this->users[$email]["name"] : "";
}
// Return user language
function getLanguage($email = "")
{
- if(empty($email)) $email = $this->email;
return $this->isExisting($email) ? $this->users[$email]["language"] : "";
}
// Return user status
function getStatus($email = "")
{
- if(empty($email)) $email = $this->email;
return $this->isExisting($email) ? $this->users[$email]["status"] : "";
}
// Return user home
function getHome($email = "")
{
- if(empty($email)) $email = $this->email;
return $this->isExisting($email) ? $this->users[$email]["home"] : "";
}
@@ -1133,6 +1140,12 @@ class YellowUsers
{
return count($this->users);
}
+
+ // Check if web master exists
+ function isWebmaster()
+ {
+ return strposu($this->yellow->config->get("email"), '@') !== false;
+ }
// Check if user exists
function isExisting($email)