From 8311cba002dfcaf1836530b978f944f7228ac004 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Wed, 21 Sep 2011 17:00:50 +0200 Subject: Replaced Smarty with STE and started the backend. --- index.php | 14 +- ratatoeskr/backend/main.php | 65 +++++++- ratatoeskr/cms_style/images/black_transparent.png | Bin 0 -> 178 bytes ratatoeskr/cms_style/images/login_bg.jpg | Bin 0 -> 66962 bytes ratatoeskr/cms_style/login.css | 119 +++++++++++++++ ratatoeskr/libs/.gitignore | 2 +- ratatoeskr/libs/INFO | 7 +- ratatoeskr/licenses/smarty | 165 --------------------- ratatoeskr/licenses/stupid_template_engine | 17 +++ ratatoeskr/main.php | 15 +- ratatoeskr/sys/init_ste.php | 46 ++++++ ratatoeskr/sys/load_smarty.php | 30 ---- ratatoeskr/sys/models.php | 4 +- ratatoeskr/sys/plugin_api.php | 12 +- ratatoeskr/sys/translation.php | 55 +++++++ ratatoeskr/templates/.htaccess | 0 .../src/systemtemplates/backend_login.html | 34 +++++ .../templates/systemtemplates/backend_login.html | 13 -- ratatoeskr/templates/usertemplates/foo.tpl | 14 -- ratatoeskr/tmp/smarty/.gitignore | 2 - ratatoeskr/tmp/smarty/INFO | 6 - ratatoeskr/translations/en.php | 7 +- 22 files changed, 362 insertions(+), 265 deletions(-) create mode 100644 ratatoeskr/cms_style/images/black_transparent.png create mode 100644 ratatoeskr/cms_style/images/login_bg.jpg create mode 100644 ratatoeskr/cms_style/login.css delete mode 100644 ratatoeskr/licenses/smarty create mode 100644 ratatoeskr/licenses/stupid_template_engine create mode 100644 ratatoeskr/sys/init_ste.php delete mode 100644 ratatoeskr/sys/load_smarty.php create mode 100644 ratatoeskr/sys/translation.php mode change 100644 => 100755 ratatoeskr/templates/.htaccess create mode 100755 ratatoeskr/templates/src/systemtemplates/backend_login.html delete mode 100644 ratatoeskr/templates/systemtemplates/backend_login.html delete mode 100644 ratatoeskr/templates/usertemplates/foo.tpl delete mode 100644 ratatoeskr/tmp/smarty/.gitignore delete mode 100644 ratatoeskr/tmp/smarty/INFO diff --git a/index.php b/index.php index 2d55787..50b9b6d 100644 --- a/index.php +++ b/index.php @@ -1,15 +1,5 @@ diff --git a/ratatoeskr/backend/main.php b/ratatoeskr/backend/main.php index e0adbdc..cd7bb35 100644 --- a/ratatoeskr/backend/main.php +++ b/ratatoeskr/backend/main.php @@ -9,17 +9,74 @@ * See "ratatoeskr/licenses/ratatoeskr" for more information. */ -require_once(dirname(__FILE__) . "/../sys/"); - - +require_once(dirname(__FILE__) . "/../sys/models.php"); +require_once(dirname(__FILE__) . "/../sys/pwhash.php"); $backend_subactions = url_action_subactions(array( "_default" => url_action_alias(array("login")), + "_prelude" => function(&$data, $url_now, &$url_next) + { + global $ratatoeskr_settings; + /* Check authentification */ + if(isset($_SESSION["uid"])) + { + try + { + $user = User::by_id($_SESSION["uid"]); + if($user->pwhash == $_SESSION["pwhash"]) + { + if(empty($user->language)) + { + $user->language = $ratatoeskr_settings["default_language"]; + $user->save(); + } + load_language($user->language); + + if($url_next[0] == "login") + $url_next = array("content", "write"); + return; /* Authentification successful, continue */ + } + else + unset($_SESSION["uid"]); + } + catch(DoesNotExistError $e) + { + unset($_SESSION["uid"]); + } + } + load_language(); + /* If we are here, user is not logged in... */ + $url_next = array("login"); + }, + "index" => url_action_alias(array("login")), "login" => url_action_simple(function($data) { + global $ste; + if(!empty($_POST["user"])) + { + try + { + $user = User::by_name($_POST["user"]); + if(!PasswordHash::validate($_POST["password"], $user->pwhash)) + throw new Exception(); + $_SESSION["uid"] = $user->get_id(); + $_SESSION["pwhash"] = $user->pwhash; + } + catch(Exception $e) + { + $ste->vars["login_failed"] = True; + } + + /* Login successful. Now redirect... */ + throw new Redirect(array("content", "write")); + } + echo $ste->exectemplate("systemtemplates/backend_login.html"); }), - + "content" => url_action_simple(function($data) + { + print "hi"; + }) )); ?> diff --git a/ratatoeskr/cms_style/images/black_transparent.png b/ratatoeskr/cms_style/images/black_transparent.png new file mode 100644 index 0000000..bfe2e3a Binary files /dev/null and b/ratatoeskr/cms_style/images/black_transparent.png differ diff --git a/ratatoeskr/cms_style/images/login_bg.jpg b/ratatoeskr/cms_style/images/login_bg.jpg new file mode 100644 index 0000000..e24fd8f Binary files /dev/null and b/ratatoeskr/cms_style/images/login_bg.jpg differ diff --git a/ratatoeskr/cms_style/login.css b/ratatoeskr/cms_style/login.css new file mode 100644 index 0000000..3e756ca --- /dev/null +++ b/ratatoeskr/cms_style/login.css @@ -0,0 +1,119 @@ +* { + font-family: sans-serif; + font-size: 10pt; +} + +body, html { + margin: 0px; + padding:0px; +} + +#main { + margin: 0px; + padding: 0px; + width: 100%; + height: 100%; + z-index: 1; + position: absolute; +} + +#background_image { + position: absolute; + left: 0px; + top:0px; + z-index: 0; + width: 100%; + height: 100%; + margin: 0px; + padding: 0px; +} + +#bar_top { + margin: 0px; + position: fixed; + top: 0px; + left: 0px; + width: 100%; + background: black; + padding: 3px 15px 3px; + color: #ddd; +} + +#bar_top strong { + color: white; +} + +#image_copyright { + margin: 0px; + position: fixed; + bottom: 0px; + left: 0px; + width: 100%; + background: black; + padding: 3px 15px 3px; + color: #ddd; +} + +#image_copyright a { + color: #ddd; + text-decoration: underline; +} + +#image_copyright a:hover { + color: white; +} + +.vcenter_outer { + position: absolute; + height: 100%; + display: table; + width: 100%; +} + +.vcenter_inner { + display: table-cell; + vertical-align: middle; + text-align: center; + width: 100%; +} + +#login_box { + position: relative; + padding: 15px 20px 15px; + margin-left: 25%; + width: 50%; + background: url(images/black_transparent.png) repeat; +} + +h1 { + font-size: 14pt; + color: white; +} + +#login_box p { + color: white; + text-align: left; + clear: both; +} + +#login_box p input { + float: right; +} + +#login_box p.loginbtn { + text-align: center; +} + +#login_box p.loginbtn input { + float: none; +} + +div.error { + position: relative; + width: 100%; + padding: 10px 0px 10px; + margin: none; + color: red; + text-align: center; + background: #fbb; +} diff --git a/ratatoeskr/libs/.gitignore b/ratatoeskr/libs/.gitignore index 1af7787..71dd7fe 100644 --- a/ratatoeskr/libs/.gitignore +++ b/ratatoeskr/libs/.gitignore @@ -1,2 +1,2 @@ -smarty +stupid_template_engine.php markdown.php diff --git a/ratatoeskr/libs/INFO b/ratatoeskr/libs/INFO index 5298ab2..e5c9364 100644 --- a/ratatoeskr/libs/INFO +++ b/ratatoeskr/libs/INFO @@ -1,11 +1,10 @@ This directory will hold some libraries Ratatöskr needs. -1. Smarty Template engine +1. Stupid Template Engine (STE) - Create a directory called "smarty" and place the content of the "libs" - directory there. + Place "stupid_template_engine.php" directly into this directory. - Smarty can be found here: + STE can be found here: 2. PHP Markdown diff --git a/ratatoeskr/licenses/smarty b/ratatoeskr/licenses/smarty deleted file mode 100644 index 02bbb60..0000000 --- a/ratatoeskr/licenses/smarty +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. \ No newline at end of file diff --git a/ratatoeskr/licenses/stupid_template_engine b/ratatoeskr/licenses/stupid_template_engine new file mode 100644 index 0000000..b220583 --- /dev/null +++ b/ratatoeskr/licenses/stupid_template_engine @@ -0,0 +1,17 @@ +Copyright (c) 2011 Kevin Chabowski + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS +IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/ratatoeskr/main.php b/ratatoeskr/main.php index 70a54cc..09f4d8d 100644 --- a/ratatoeskr/main.php +++ b/ratatoeskr/main.php @@ -12,14 +12,15 @@ require_once(dirname(__FILE__) . "/sys/db.php"); require_once(dirname(__FILE__) . "/sys/plugin_api.php"); require_once(dirname(__FILE__) . "/sys/models.php"); -require_once(dirname(__FILE__) . "/sys/load_smarty.php"); +require_once(dirname(__FILE__) . "/sys/init_ste.php"); +require_once(dirname(__FILE__) . "/sys/translation.php"); require_once(dirname(__FILE__) . "/sys/urlprocess.php"); -require_once(dirname(__FILE__) . "/frontend.php"); +#require_once(dirname(__FILE__) . "/frontend.php"); require_once(dirname(__FILE__) . "/backend/main.php"); function ratatoeskr() { - global $backend_subactions, $smarty; + global $backend_subactions, $ste, $url_handlers; session_start(); if(!CONFIG_FILLED_OUT) return setup(); @@ -37,14 +38,16 @@ function ratatoeskr() } /* Register URL handlers */ - register_url_handler("_default", "frontend_url_handler"); + #register_url_handler("_default", "frontend_url_handler"); register_url_handler("backend", $backend_subactions); - register_url_handler("_notfound", "e404handler"); + #register_url_handler("_notfound", "e404handler"); $urlpath = explode("/", $_GET["action"]); $rel_path_to_root = implode("/", array_merge(array("."), array_repeat("..", count($urlpath) - 1))); $data = array("rel_path_to_root" => $rel_path_to_root); - $smarty->assign("rel_path_to_root", $rel_path_to_root); + $ste->vars["rel_path_to_root"] = $rel_path_to_root; + + url_process($urlpath, $url_handlers, $data); } ?> diff --git a/ratatoeskr/sys/init_ste.php b/ratatoeskr/sys/init_ste.php new file mode 100644 index 0000000..567a32b --- /dev/null +++ b/ratatoeskr/sys/init_ste.php @@ -0,0 +1,46 @@ +register_tag( + "l10n_replace", + function($ste, $params, $sub) + { + $content = $sub($ste); + foreach($params as $name => $replace) + $content = str_replace("[[$name]]", $replace, $content); + return $content; + } +); +$ste->register_tag( + "capitalize", + function($ste, $params, $sub) + { + return ucwords($sub($ste)); + } +); + +?> diff --git a/ratatoeskr/sys/load_smarty.php b/ratatoeskr/sys/load_smarty.php deleted file mode 100644 index 43df957..0000000 --- a/ratatoeskr/sys/load_smarty.php +++ /dev/null @@ -1,30 +0,0 @@ -setTemplateDir(dirname(__FILE__) . "/../templates/"); - $smarty->setCompileDir(dirname(__FILE__) . "/../tmp/smartytemplates_c"); - $smarty->setCacheDir(dirname(__FILE__) . "/../tmp/smarty/cache"); - $smarty->setConfigDir(dirname(__FILE__) . "/../smarty_confdir"); - $smarty->left_delimiter = "{%"; - $smarty->right_delimiter = "%}"; -} - -?> diff --git a/ratatoeskr/sys/models.php b/ratatoeskr/sys/models.php index d8da3b0..21147fb 100644 --- a/ratatoeskr/sys/models.php +++ b/ratatoeskr/sys/models.php @@ -31,7 +31,7 @@ $imagetype_file_extensions = array( * Variable: $ratatoeskr_settings * The global object. For internal use. */ -$ratatoeskr_settings = new Settings("rw"); +$ratatoeskr_settings = NULL; /* * Class: DoesNotExistError @@ -911,6 +911,8 @@ class Settings implements Countable, ArrayAccess, IteratorAggregate public function getIterator() { return new SettingsIterator($this); } } +$ratatoeskr_settings = new Settings("rw"); + /* * Class: PluginKVStorage * A Key-Value-Storage for Plugins diff --git a/ratatoeskr/sys/plugin_api.php b/ratatoeskr/sys/plugin_api.php index 65e4c9c..6293c27 100644 --- a/ratatoeskr/sys/plugin_api.php +++ b/ratatoeskr/sys/plugin_api.php @@ -38,10 +38,10 @@ abstract class RatatoeskrPlugin * Variables: Protected variables * * $kvstorage - The Key-Value-Storage for the Plugin. - * $smarty - Access to the global smarty object. + * $ste - Access to the global STECore object. */ protected $kvstorage; - protected $smarty; + protected $ste; /* @@ -54,11 +54,11 @@ abstract class RatatoeskrPlugin */ public function __construct($id) { - global $smarty; + global $ste; $this->id = $id; $this->kvstorage = new PluginKVStorage($id); - $this->smarty = $smarty; + $this->ste = $ste; } /* @@ -70,7 +70,7 @@ abstract class RatatoeskrPlugin */ final public function get_id() { return $this->id; } final protected function get_additional_files_dir() { return dirname(dirname(__FILE__)) . "/plugin_extradata/" . $this->id; } - final protected function get_template_dir() { return dirname(dirname(__FILE__)) . "/templates/plugintemplates/" . $this->id; } + final protected function get_template_dir() { return dirname(dirname(__FILE__)) . "/templates/src/plugintemplates/" . $this->id; } /* * Function: register_url_handler @@ -85,7 +85,7 @@ abstract class RatatoeskrPlugin register_url_handler($name, array($this, $objfunction)); } - final protected function register_settings_page($get, $validate, $set, $structure) + /*final protected function register_settings_page($get, $validate, $set, $structure)*/ /* * Functions: Functions that are called at special events diff --git a/ratatoeskr/sys/translation.php b/ratatoeskr/sys/translation.php new file mode 100644 index 0000000..01f7c6d --- /dev/null +++ b/ratatoeskr/sys/translation.php @@ -0,0 +1,55 @@ +register_tag( + "get_translation", + function($ste, $params, $sub) + { + global $translation; + if((!isset($translation)) or empty($params["for"]) or (!isset($translation[$params["for"]]))) + return ""; + return $translation[$params["for"]]; + } + ); + define(TRANSLATION_PLUGIN_LOADED, True); +} + +/* + * Function: load_language + * Load a language (i.e. set the global $translation variable). + * + * Parameters: + * $lang - The language (2-Letter code, e.g. "en", "de", "it" ...) to load. NULL for default (from database). + */ +function load_language($lang=NULL) +{ + global $ratatoeskr_settings; + if($lang === NULL) + $lang = $ratatoeskr_settings["default_language"]; + + /* + * Because we will include an file defined by the $lang param, we will + * only allow alphabetic characters, so this function should not be + * vulnerable to LFI-Exploits... + */ + $lang = implode("", array_filter(str_split($lang, 1), "ctype_alpha")); + + require(dirname(__FILE__) . "/../translations/$lang.php"); + + $GLOBALS["translation"] = $translation; +} + +?> diff --git a/ratatoeskr/templates/.htaccess b/ratatoeskr/templates/.htaccess old mode 100644 new mode 100755 diff --git a/ratatoeskr/templates/src/systemtemplates/backend_login.html b/ratatoeskr/templates/src/systemtemplates/backend_login.html new file mode 100755 index 0000000..84b4cd9 --- /dev/null +++ b/ratatoeskr/templates/src/systemtemplates/backend_login.html @@ -0,0 +1,34 @@ + + + + + + Login - Ratatöskr + + + + +
+
Ratatöskr::Noctilucent clouds (v. 0.1)
+
+
+

+ + $login_failed + +
+ +
+
+
+

:

+

:

+

+
+
+ +
+ + diff --git a/ratatoeskr/templates/systemtemplates/backend_login.html b/ratatoeskr/templates/systemtemplates/backend_login.html deleted file mode 100644 index 24738d2..0000000 --- a/ratatoeskr/templates/systemtemplates/backend_login.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - Login - Ratatöskr - - - - - - diff --git a/ratatoeskr/templates/usertemplates/foo.tpl b/ratatoeskr/templates/usertemplates/foo.tpl deleted file mode 100644 index af1564c..0000000 --- a/ratatoeskr/templates/usertemplates/foo.tpl +++ /dev/null @@ -1,14 +0,0 @@ -<{*HEADER -Ratatoeskr template -DO NOT REMOVE THIS COMMENT! ------BEGIN META----- -{ - "Content-Type": "text/html", - "ACL": { - "users": ["foo"], - "groups": [], - "rights": {"users": ["read", "write", "delete"], "groups": ["read"], "others": ["read"]} - }, "author": "Kevin Chabowski" -} ------END META----- -/HEADER*}> diff --git a/ratatoeskr/tmp/smarty/.gitignore b/ratatoeskr/tmp/smarty/.gitignore deleted file mode 100644 index ee31da6..0000000 --- a/ratatoeskr/tmp/smarty/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -cache -templates_c diff --git a/ratatoeskr/tmp/smarty/INFO b/ratatoeskr/tmp/smarty/INFO deleted file mode 100644 index fe980f1..0000000 --- a/ratatoeskr/tmp/smarty/INFO +++ /dev/null @@ -1,6 +0,0 @@ -Temp / Cache dir for smarty -needs two subdirectories: "templates_c" and "cache". The server needs full file -access (rwx) to both of them. Usually you can do this by set the group to -"apache" or "nobody" and then `chmod 775`, or if you do not have the rights to -set the group: `chmod 777`, but this usually not a good idea (because everyone -can now see this files), so only do this if you can not set the group. diff --git a/ratatoeskr/translations/en.php b/ratatoeskr/translations/en.php index c7bcf06..20c87b9 100644 --- a/ratatoeskr/translations/en.php +++ b/ratatoeskr/translations/en.php @@ -1,7 +1,12 @@ "username", + "password" => "password", + "login_form_header" => "Login", + "login_form_button" => "Login", + "login_background_image" => "Background image: [[FILENAME]] by [[AUTHOR]]. License: [[LICENSE]]", + "login_failed" => "Login failed." ); ?> -- cgit v1.2.3-54-g00ecf