2000-12-27 10:05:13 +01:00
|
|
|
<?php
|
|
|
|
/**************************************************************************\
|
|
|
|
* phpGroupWare - Setup *
|
|
|
|
* http://www.phpgroupware.org *
|
|
|
|
* -------------------------------------------- *
|
|
|
|
* This program is free software; you can redistribute it and/or modify it *
|
|
|
|
* under the terms of the GNU General Public License as published by the *
|
|
|
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
|
|
|
* option) any later version. *
|
|
|
|
\**************************************************************************/
|
|
|
|
|
|
|
|
/* $Id$ */
|
|
|
|
|
|
|
|
class phpgw_setup
|
|
|
|
{
|
|
|
|
var $db;
|
|
|
|
|
2000-12-27 20:59:23 +01:00
|
|
|
function show_header($title = "",$nologoutbutton = False, $logoutfrom = "config")
|
2000-12-27 10:05:13 +01:00
|
|
|
{
|
|
|
|
global $phpgw_info, $PHP_SELF;
|
2000-12-31 10:50:16 +01:00
|
|
|
echo "<html>\n<head>\n";
|
|
|
|
echo " <title>phpGroupWare Setup"; if ($title != ""){echo " - ".$title;}; echo "</title>\n";
|
|
|
|
echo " <style type=\"text/css\"><!-- .link { color: #FFFFFF; } --></style>\n";
|
|
|
|
echo "</head>\n";
|
|
|
|
echo "<BODY BGCOLOR=\"FFFFFF\" margintop=\"0\" marginleft=\"0\" marginright=\"0\" marginbottom=\"0\">";
|
|
|
|
echo "<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"2\"><tr>";
|
|
|
|
echo " <td align=\"left\" bgcolor=\"486591\"> <font color=\"fefefe\">phpGroupWare version ".$phpgw_info["server"]["versions"]["phpgwapi"]." setup</font></td>";
|
|
|
|
echo " <td align=\"right\" bgcolor=\"486591\">";
|
|
|
|
if ($nologoutbutton) {
|
|
|
|
echo " </td>";
|
|
|
|
} else {
|
|
|
|
echo "<a href=\"".$PHP_SELF."?FormLogout=".$logoutfrom."\" class=\"link\">Logout</a> </td>";
|
|
|
|
}
|
|
|
|
echo "</tr></table>";
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
2000-12-31 10:50:16 +01:00
|
|
|
|
2000-12-27 20:59:23 +01:00
|
|
|
function login_form()
|
2000-12-27 10:05:13 +01:00
|
|
|
{
|
2000-12-27 20:59:23 +01:00
|
|
|
global $phpgw_info, $phpgw_domain, $PHP_SELF;
|
|
|
|
|
2000-12-27 10:05:13 +01:00
|
|
|
echo "<p><body bgcolor='#ffffff'>\n";
|
|
|
|
echo "<table border=\"0\" align=\"center\">\n";
|
2001-01-01 00:46:55 +01:00
|
|
|
if ($phpgw_info["setup"]["stage"]["header"] == "10"){
|
2000-12-27 11:39:34 +01:00
|
|
|
echo " <tr bgcolor=\"486591\">\n";
|
|
|
|
echo " <td colspan=\"2\"><font color=\"fefefe\"> <b>Setup/Config Admin Login</b></font></td>\n";
|
|
|
|
echo " </tr>\n";
|
2000-12-27 20:59:23 +01:00
|
|
|
echo " <tr bgcolor='#e6e6e6'><td colspan='2'><font color='#ff0000'>".$phpgw_info["setup"]["ConfigLoginMSG"]."</font></td></tr>\n";
|
2000-12-27 11:39:34 +01:00
|
|
|
echo " <tr bgcolor=\"e6e6e6\">\n";
|
2000-12-27 20:59:23 +01:00
|
|
|
echo " <td><form action='index.php' method='POST'>\n";
|
2000-12-27 11:39:34 +01:00
|
|
|
if (count($phpgw_domain) > 1){
|
2000-12-31 10:50:16 +01:00
|
|
|
echo " <table><tr><td>Domain: </td><td><input type=\"text\" name=\"FormDomain\" value=\"\"></td></tr>\n";
|
|
|
|
echo " <tr><td>Password: </td><td><input type=\"password\" name=\"FormPW\" value=\"\"></td></tr></table>\n";
|
2000-12-27 11:39:34 +01:00
|
|
|
}else{
|
|
|
|
reset($phpgw_domain);
|
|
|
|
$default_domain = each($phpgw_domain);
|
2000-12-31 10:50:16 +01:00
|
|
|
echo " <input type=\"password\" name=\"FormPW\" value=\"\">\n";
|
|
|
|
echo " <input type=\"hidden\" name=\"FormDomain\" value=\"".$default_domain[0]."\">\n";
|
2000-12-27 11:39:34 +01:00
|
|
|
}
|
2000-12-31 10:50:16 +01:00
|
|
|
echo " <input type=\"submit\" name=\"ConfigLogin\" value=\"Login\">\n";
|
2000-12-27 11:39:34 +01:00
|
|
|
echo " </form></td>\n";
|
|
|
|
echo " </tr>\n";
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
2000-12-27 11:39:34 +01:00
|
|
|
|
2000-12-27 10:05:13 +01:00
|
|
|
echo " <tr bgcolor=\"486591\">\n";
|
|
|
|
echo " <td colspan=\"2\"><font color=\"fefefe\"> <b>Header Admin Login</b></font></td>\n";
|
|
|
|
echo " </tr>\n";
|
2000-12-31 10:50:16 +01:00
|
|
|
echo " <tr bgcolor=\"#e6e6e6\"><td colspan=\"2\"><font color=\"#ff0000\">".$phpgw_info["setup"]["HeaderLoginMSG"]."</font></td></tr>\n";
|
2000-12-27 10:05:13 +01:00
|
|
|
echo " <tr bgcolor=\"e6e6e6\">\n";
|
2000-12-31 10:50:16 +01:00
|
|
|
echo " <td><form action=\"manageheader.php\" method=\"POST\">\n";
|
|
|
|
echo " <input type=\"password\" name=\"FormPW\" value=\"\">\n";
|
|
|
|
echo " <input type=\"submit\" name=\"HeaderLogin\" value=\"Login\">\n";
|
2000-12-27 10:05:13 +01:00
|
|
|
echo " </form></td>\n";
|
|
|
|
echo " </tr>\n";
|
|
|
|
|
|
|
|
echo "</table>\n";
|
|
|
|
echo "</body></html>\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
function check_header()
|
|
|
|
{
|
|
|
|
global $phpgw_domain, $phpgw_info;
|
2000-12-31 10:50:16 +01:00
|
|
|
if(!file_exists("../header.inc.php")) {
|
2000-12-27 10:05:13 +01:00
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage One";
|
2000-12-31 10:50:16 +01:00
|
|
|
return "1";
|
2000-12-27 10:05:13 +01:00
|
|
|
}else{
|
2000-12-27 11:39:34 +01:00
|
|
|
if (!isset($phpgw_info["server"]["header_admin_password"])){
|
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage One (No header admin password set)";
|
2000-12-31 10:50:16 +01:00
|
|
|
return "2";
|
|
|
|
}elseif (!isset($phpgw_domain)) {
|
2000-12-27 10:05:13 +01:00
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage One (Upgrade your header.inc.php)";
|
2000-12-31 10:50:16 +01:00
|
|
|
return "3";
|
|
|
|
}elseif ($phpgw_info["server"]["versions"]["header"] != $phpgw_info["server"]["versions"]["current_header"]) {
|
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage One (Upgrade your header.inc.php)";
|
|
|
|
return "3";
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
|
|
|
}
|
2001-01-02 09:11:00 +01:00
|
|
|
/* header.inc.php part settled. Moving to authentication */
|
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage One (Completed)";
|
|
|
|
return "10";
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
|
|
|
|
2000-12-27 10:30:43 +01:00
|
|
|
function generate_header()
|
|
|
|
{
|
2000-12-31 10:50:16 +01:00
|
|
|
global $setting, $phpgw_setup, $phpgw_info, $header_template;
|
2000-12-27 10:30:43 +01:00
|
|
|
|
2000-12-31 10:50:16 +01:00
|
|
|
$header_template->set_file(array("header" => "header.inc.php.template"));
|
2000-12-27 10:30:43 +01:00
|
|
|
while(list($k,$v) = each($setting)) {
|
2000-12-31 10:50:16 +01:00
|
|
|
$header_template->set_var(strtoupper($k),$v);
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
2000-12-31 10:50:16 +01:00
|
|
|
return $header_template->parse("out","header");
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
|
|
|
|
2000-12-27 20:59:23 +01:00
|
|
|
function auth($auth_type = "Config")
|
2000-12-27 10:05:13 +01:00
|
|
|
{
|
2000-12-27 20:59:23 +01:00
|
|
|
global $phpgw_domain, $phpgw_info, $HTTP_POST_VARS, $FormLogout, $ConfigLogin, $HeaderLogin, $FormDomain, $FormPW, $ConfigDomain, $ConfigPW, $HeaderPW;
|
2000-12-27 10:05:13 +01:00
|
|
|
if (isset($FormLogout)) {
|
2000-12-27 20:59:23 +01:00
|
|
|
if ($FormLogout == "config"){
|
|
|
|
setcookie("ConfigPW"); // scrub the old one
|
|
|
|
setcookie("ConfigDomain"); // scrub the old one
|
|
|
|
$phpgw_info["setup"]["ConfigLoginMSG"] = "You have sucessfully logged out";
|
|
|
|
return False;
|
|
|
|
}elseif($FormLogout == "header"){
|
|
|
|
setcookie("HeaderPW"); // scrub the old one
|
|
|
|
$phpgw_info["setup"]["HeaderLoginMSG"] = "You have sucessfully logged out";
|
2000-12-27 10:05:13 +01:00
|
|
|
return False;
|
|
|
|
}
|
2000-12-27 20:59:23 +01:00
|
|
|
} elseif (isset($ConfigPW)) {
|
|
|
|
if ($ConfigPW != $phpgw_domain[$ConfigDomain]["config_passwd"] && $auth_type == "Config") {
|
|
|
|
setcookie("ConfigPW"); // scrub the old one
|
|
|
|
setcookie("ConfigDomain"); // scrub the old one
|
|
|
|
$phpgw_info["setup"]["ConfigLoginMSG"] = "Invalid session cookie (cookies must be enabled)";
|
2000-12-27 10:05:13 +01:00
|
|
|
return False;
|
2000-12-27 20:59:23 +01:00
|
|
|
}else{
|
|
|
|
return True;
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
2000-12-27 20:59:23 +01:00
|
|
|
} elseif (isset($FormPW)) {
|
|
|
|
if (isset($ConfigLogin)){
|
|
|
|
if ($FormPW == $phpgw_domain[$FormDomain]["config_passwd"] && $auth_type == "Config") {
|
2001-01-01 00:46:55 +01:00
|
|
|
setcookie("HeaderPW"); // scrub the old one
|
2000-12-27 20:59:23 +01:00
|
|
|
setcookie("ConfigPW",$FormPW);
|
|
|
|
setcookie("ConfigDomain",$FormDomain);
|
|
|
|
$ConfigDomain = $FormDomain;
|
|
|
|
return True;
|
|
|
|
}else{
|
|
|
|
$phpgw_info["setup"]["ConfigLoginMSG"] = "Invalid password";
|
|
|
|
return False;
|
|
|
|
}
|
|
|
|
}elseif (isset($HeaderLogin)){
|
|
|
|
if ($FormPW == $phpgw_info["server"]["header_admin_password"] && $auth_type == "Header") {
|
|
|
|
setcookie("HeaderPW",$FormPW);
|
|
|
|
return True;
|
|
|
|
}else{
|
|
|
|
$phpgw_info["setup"]["HeaderLoginMSG"] = "Invalid password";
|
|
|
|
return False;
|
|
|
|
}
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
2001-01-01 00:46:55 +01:00
|
|
|
} elseif (isset($HeaderPW)) {
|
|
|
|
if ($HeaderPW != $phpgw_info["server"]["header_admin_password"] && $auth_type == "Header") {
|
|
|
|
setcookie("HeaderPW"); // scrub the old one
|
|
|
|
$phpgw_info["setup"]["HeaderLoginMSG"] = "Invalid session cookie (cookies must be enabled)";
|
|
|
|
return False;
|
|
|
|
}else{
|
|
|
|
return True;
|
|
|
|
}
|
2000-12-27 10:05:13 +01:00
|
|
|
} else {
|
|
|
|
return False;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function loaddb()
|
|
|
|
{
|
2000-12-27 20:59:23 +01:00
|
|
|
global $phpgw_info, $phpgw_domain, $ConfigDomain;
|
2000-12-27 10:05:13 +01:00
|
|
|
/* Database setup */
|
|
|
|
if (!isset($phpgw_info["server"]["api_inc"])) {
|
|
|
|
$phpgw_info["server"]["api_inc"] = $phpgw_info["server"]["server_root"]."/phpgwapi/inc";
|
|
|
|
}
|
2000-12-27 20:59:23 +01:00
|
|
|
include($phpgw_info["server"]["api_inc"] . "/phpgw_db_".$phpgw_domain[$ConfigDomain]["db_type"].".inc.php");
|
2000-12-27 10:05:13 +01:00
|
|
|
$this->db = new db;
|
2000-12-27 20:59:23 +01:00
|
|
|
$this->db->Host = $phpgw_domain[$ConfigDomain]["db_host"];
|
|
|
|
$this->db->Type = $phpgw_domain[$ConfigDomain]["db_type"];
|
|
|
|
$this->db->Database = $phpgw_domain[$ConfigDomain]["db_name"];
|
|
|
|
$this->db->User = $phpgw_domain[$ConfigDomain]["db_user"];
|
|
|
|
$this->db->Password = $phpgw_domain[$ConfigDomain]["db_pass"];
|
2000-12-27 10:05:13 +01:00
|
|
|
|
2001-01-02 09:25:02 +01:00
|
|
|
//$phpgw_schema_proc = new phpgw_schema_proc($phpgw_domain[$ConfigDomain]["db_type"]);
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function check_db()
|
|
|
|
{
|
|
|
|
global $phpgw_info;
|
|
|
|
$this->db->Halt_On_Error = "no";
|
|
|
|
$tables = $this->db->table_names();
|
|
|
|
if (is_array($tables) && count($tables) > 0){
|
|
|
|
/* tables exists. checking for post beta version */
|
|
|
|
$this->db->query("select * from applications");
|
|
|
|
while (@$this->db->next_record()) {
|
|
|
|
if ($this->db->f("app_name") == "admin"){$phpgw_info["setup"]["oldver"]["phpgwapi"] = $this->db->f("app_version");}
|
|
|
|
$phpgw_info["setup"]["oldver"][$this->db->f("app_name")] = $this->db->f("app_version");
|
|
|
|
$phpgw_info["setup"][$this->db->f("app_name")]["title"] = $this->db->f("app_title");
|
|
|
|
}
|
|
|
|
if (isset($phpgw_info["setup"]["oldver"]["phpgwapi"])){
|
|
|
|
if ($phpgw_info["setup"]["oldver"]["phpgwapi"] == $phpgw_info["server"]["versions"]["phpgwapi"]){
|
2001-01-01 12:50:35 +01:00
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage 1 (Tables Complete)";
|
2000-12-27 20:59:23 +01:00
|
|
|
return 10;
|
2000-12-27 10:05:13 +01:00
|
|
|
}else{
|
2001-01-01 12:50:35 +01:00
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage 1 (Tables need upgrading)";
|
2000-12-27 20:59:23 +01:00
|
|
|
return 4;
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
|
|
|
}else{
|
2001-01-01 12:50:35 +01:00
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage 1 (Tables appear to be pre-beta)";
|
2000-12-27 20:59:23 +01:00
|
|
|
return 2;
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
|
|
|
}else{
|
|
|
|
/* no tables, so checking if we can create them */
|
|
|
|
|
|
|
|
/* I cannot get either to work properly
|
|
|
|
$isdb = $this->db->connect("kljkjh", "localhost", "phpgroupware", "phpgr0upwar3");
|
|
|
|
*/
|
|
|
|
|
|
|
|
$db_rights = $this->db->query("CREATE TABLE phpgw_testrights ( testfield varchar(5) NOT NULL )");
|
2000-12-27 20:59:23 +01:00
|
|
|
$this->db->query("DROP TABLE phpgw_testrights");
|
2000-12-27 10:05:13 +01:00
|
|
|
|
|
|
|
if (isset($db_rights)){
|
|
|
|
//if (isset($isdb)){
|
2001-01-01 12:50:35 +01:00
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage 1 (Create tables)";
|
2000-12-27 20:59:23 +01:00
|
|
|
return 3;
|
2000-12-27 10:05:13 +01:00
|
|
|
}else{
|
2001-01-01 12:50:35 +01:00
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage 1 (Create Database)";
|
2000-12-27 20:59:23 +01:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function check_config()
|
|
|
|
{
|
|
|
|
global $phpgw_info;
|
|
|
|
$this->db->Halt_On_Error = "no";
|
2001-01-01 12:50:35 +01:00
|
|
|
if ($phpgw_info["setup"]["stage"]["db"] != 10){return "";}
|
|
|
|
|
|
|
|
$this->db->query("select config_value from config where config_name='freshinstall'");
|
|
|
|
$this->db->next_record();
|
|
|
|
$configed = $this->db->f("config_value");
|
|
|
|
if ($configed){
|
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage 2 (Needs Configuration)";
|
|
|
|
return 1;
|
|
|
|
}else{
|
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage 2 (Configuration OK)";
|
|
|
|
return 10;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function check_lang()
|
|
|
|
{
|
|
|
|
global $phpgw_info;
|
|
|
|
$this->db->Halt_On_Error = "no";
|
|
|
|
if ($phpgw_info["setup"]["stage"]["db"] != 10){return "";}
|
|
|
|
|
|
|
|
$this->db->query("select distinct lang from lang;");
|
|
|
|
if ($this->db->num_rows() == 0){
|
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage 3 (No languages installed)";
|
|
|
|
return 1;
|
|
|
|
}else{
|
|
|
|
while (@$this->db->next_record()) {
|
|
|
|
$phpgw_info["setup"]["installed_langs"][$this->db->f("lang")] = $this->db->f("lang");
|
|
|
|
}
|
|
|
|
reset ($phpgw_info["setup"]["installed_langs"]);
|
|
|
|
while (list ($key, $value) = each ($phpgw_info["setup"]["installed_langs"])) {
|
|
|
|
$sql = "select lang_name from languages where lang_id = '".$value."';";
|
|
|
|
$this->db->query($sql);
|
|
|
|
$this->db->next_record();
|
|
|
|
$phpgw_info["setup"]["installed_langs"][$value] = $this->db->f("lang_name");
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
2001-01-01 12:50:35 +01:00
|
|
|
$phpgw_info["setup"]["header_msg"] = "Stage 3 (Completed)";
|
|
|
|
return 10;
|
2000-12-27 10:05:13 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function app_setups($appname = ""){
|
|
|
|
global $phpgw_info;
|
|
|
|
$d = dir($phpgw_info["server"]["server_root"]);
|
|
|
|
while($entry=$d->read()) {
|
|
|
|
if (is_dir ($phpgw_info["server"]["server_root"]."/".$entry."/setup")){
|
|
|
|
echo $entry."<br>\n";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$d->close();
|
|
|
|
}
|
|
|
|
|
|
|
|
function execute_script($script, $appname = ""){
|
|
|
|
global $phpgw_info, $phpgw_domain;
|
|
|
|
if ($appname == ""){
|
|
|
|
$d = dir($phpgw_info["server"]["server_root"]);
|
|
|
|
while($entry=$d->read()) {
|
|
|
|
$f = $phpgw_info["server"]["server_root"]."/".$entry."/setup/version.inc.php";
|
|
|
|
if (file_exists ($f)){
|
|
|
|
include($f);
|
|
|
|
}else{
|
|
|
|
$phpgw_info["server"]["versions"][$entry] = $phpgw_info["setup"]["currentver"]["phpgwapi"];
|
|
|
|
}
|
|
|
|
|
|
|
|
$f = $phpgw_info["server"]["server_root"]."/".$entry."/setup/".$script.".inc.php";
|
|
|
|
if (file_exists ($f)){include($f);}
|
|
|
|
}
|
|
|
|
$d->close();
|
|
|
|
}else{
|
|
|
|
$f = $phpgw_info["server"]["server_root"]."/".$appname."/setup/".$script.".inc.php";
|
|
|
|
if (file_exists ($f)){include($f);}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function update_app_version($appname, $tableschanged = True){
|
|
|
|
global $phpgw_info;
|
|
|
|
if ($tableschanged == True){$phpgw_info["setup"]["tableschanged"] = True;}
|
|
|
|
$this->db->query("update applications set app_version='".$phpgw_info["setup"]["currentver"]["phpgwapi"]."' where app_name='".$appname."'");
|
|
|
|
}
|
|
|
|
|
|
|
|
function manage_tables(){
|
|
|
|
global $phpgw_domain, $phpgw_info;
|
|
|
|
if ($phpgw_info["setup"]["currentver"]["phpgwapi"] == "drop"){
|
|
|
|
$this->execute_script("droptables");
|
|
|
|
}
|
|
|
|
if ($phpgw_info["setup"]["currentver"]["phpgwapi"] == "new") {
|
|
|
|
$this->execute_script("newtables");
|
|
|
|
$this->execute_script("common_default_records");
|
|
|
|
$this->execute_script("lang");
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($phpgw_info["setup"]["currentver"]["phpgwapi"] == "oldversion") {
|
|
|
|
$phpgw_info["setup"]["currentver"]["phpgwapi"] = $phpgw_info["setup"]["oldver"]["phpgwapi"];
|
|
|
|
$this->execute_script("upgradetables");
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Not yet implemented
|
|
|
|
if (!$phpgw_info["setup"]["tableschanged"] == True){
|
|
|
|
echo " <tr bgcolor=\"e6e6e6\">\n";
|
|
|
|
echo " <td>No table changes were needed. The script only updated your version setting.</td>\n";
|
|
|
|
echo " </tr>\n";
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
}
|
|
|
|
}
|
2001-01-01 00:46:55 +01:00
|
|
|
?>
|