<?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; function show_header($title = "",$nologoutbutton = False, $logoutfrom = "config") { global $phpgw_info, $PHP_SELF; 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>"; } function login_form() { global $phpgw_info, $phpgw_domain, $PHP_SELF; echo "<p><body bgcolor='#ffffff'>\n"; echo "<table border=\"0\" align=\"center\">\n"; if ($phpgw_info["setup"]["stage"]["header"] == "10"){ echo " <tr bgcolor=\"486591\">\n"; echo " <td colspan=\"2\"><font color=\"fefefe\"> <b>Setup/Config Admin Login</b></font></td>\n"; echo " </tr>\n"; echo " <tr bgcolor='#e6e6e6'><td colspan='2'><font color='#ff0000'>".$phpgw_info["setup"]["ConfigLoginMSG"]."</font></td></tr>\n"; echo " <tr bgcolor=\"e6e6e6\">\n"; echo " <td><form action='index.php' method='POST'>\n"; if (count($phpgw_domain) > 1){ 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"; }else{ reset($phpgw_domain); $default_domain = each($phpgw_domain); echo " <input type=\"password\" name=\"FormPW\" value=\"\">\n"; echo " <input type=\"hidden\" name=\"FormDomain\" value=\"".$default_domain[0]."\">\n"; } echo " <input type=\"submit\" name=\"ConfigLogin\" value=\"Login\">\n"; echo " </form></td>\n"; echo " </tr>\n"; } echo " <tr bgcolor=\"486591\">\n"; echo " <td colspan=\"2\"><font color=\"fefefe\"> <b>Header Admin Login</b></font></td>\n"; echo " </tr>\n"; echo " <tr bgcolor=\"#e6e6e6\"><td colspan=\"2\"><font color=\"#ff0000\">".$phpgw_info["setup"]["HeaderLoginMSG"]."</font></td></tr>\n"; echo " <tr bgcolor=\"e6e6e6\">\n"; 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"; echo " </form></td>\n"; echo " </tr>\n"; echo "</table>\n"; echo "</body></html>\n"; } function check_header() { global $phpgw_domain, $phpgw_info; if(!file_exists("../header.inc.php")) { $phpgw_info["setup"]["header_msg"] = "Stage One"; return "1"; }else{ if (!isset($phpgw_info["server"]["header_admin_password"])){ $phpgw_info["setup"]["header_msg"] = "Stage One (No header admin password set)"; return "2"; }elseif (!isset($phpgw_domain)) { $phpgw_info["setup"]["header_msg"] = "Stage One (Upgrade your header.inc.php)"; 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"; } } /* header.inc.php part settled. Moving to authentication */ $phpgw_info["setup"]["header_msg"] = "Stage One (Completed)"; return "10"; } function generate_header() { global $setting, $phpgw_setup, $phpgw_info, $header_template; $header_template->set_file(array("header" => "header.inc.php.template")); while(list($k,$v) = each($setting)) { $header_template->set_var(strtoupper($k),$v); } return $header_template->parse("out","header"); } function auth($auth_type = "Config") { global $phpgw_domain, $phpgw_info, $HTTP_POST_VARS, $FormLogout, $ConfigLogin, $HeaderLogin, $FormDomain, $FormPW, $ConfigDomain, $ConfigPW, $HeaderPW; if (isset($FormLogout)) { 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"; return False; } } 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)"; return False; }else{ return True; } } elseif (isset($FormPW)) { if (isset($ConfigLogin)){ if ($FormPW == $phpgw_domain[$FormDomain]["config_passwd"] && $auth_type == "Config") { setcookie("HeaderPW"); // scrub the old one 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; } } } 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; } } else { return False; } } function loaddb() { global $phpgw_info, $phpgw_domain, $ConfigDomain; /* Database setup */ if (!isset($phpgw_info["server"]["api_inc"])) { $phpgw_info["server"]["api_inc"] = $phpgw_info["server"]["server_root"]."/phpgwapi/inc"; } include($phpgw_info["server"]["api_inc"] . "/class.db_".$phpgw_domain[$ConfigDomain]["db_type"].".inc.php"); $this->db = new db; $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"]; // $phpgw_schema_proc = new phpgw_schema_proc($phpgw_domain[$ConfigDomain]["db_type"]); } 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"]){ $phpgw_info["setup"]["header_msg"] = "Stage 1 (Tables Complete)"; return 10; }else{ $phpgw_info["setup"]["header_msg"] = "Stage 1 (Tables need upgrading)"; return 4; } }else{ $phpgw_info["setup"]["header_msg"] = "Stage 1 (Tables appear to be pre-beta)"; return 2; } }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 )"); $this->db->query("DROP TABLE phpgw_testrights"); if (isset($db_rights)){ //if (isset($isdb)){ $phpgw_info["setup"]["header_msg"] = "Stage 1 (Create tables)"; return 3; }else{ $phpgw_info["setup"]["header_msg"] = "Stage 1 (Create Database)"; return 1; } } } function check_config() { global $phpgw_info; $this->db->Halt_On_Error = "no"; 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"); } $phpgw_info["setup"]["header_msg"] = "Stage 3 (Completed)"; return 10; } } function get_template_list(){ global $phpgw_info; $d = dir($phpgw_info["server"]["server_root"]."/phpgwapi/templates"); $list["user_choice"]["name"] = "user_choice"; $list["user_choice"]["title"] = "Users Choice"; while($entry=$d->read()) { if ($entry != "CVS" && $entry != "." && $entry != ".."){ $list[$entry]["name"] = $entry; $f = $phpgw_info["server"]["server_root"]."/phpgwapi/templates/".$entry."/details.inc.php"; if (file_exists ($f)){ include($f); $list[$entry]["title"] = "Use ".$phpgw_info["template"][$entry]["title"]."interface"; }else{ $list[$entry]["title"] = $entry; } } } $d->close(); reset ($list); return $list; } 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 app_status($appname = ""){ global $phpgw_info; $this->get_versions(); reset ($phpgw_info["server"]["versions"]); $this->db->query("select * from applications"); while ($this->db->next_record()){ $phpgw_info["server"]["current_versions"][$this->db->f("app_name")] = $this->db->f("app_version"); } while (list($key, $value) = each ($phpgw_info["server"]["versions"])){ if ($key != "header" && $key != "current_header" && $key != "" && $key != "mcrypt"){ if (!isset($phpgw_info["server"]["current_versions"][$key])){ $phpgw_info["server"]["current_versions"][$key] = "new"; $phpgw_info["setup"][$key]["status"] = "new"; }elseif ($value != $phpgw_info["server"]["current_versions"][$key]){ $phpgw_info["setup"][$key]["status"] = "upgrade"; }else{ $phpgw_info["setup"][$key]["status"] = "current"; } echo "phpgw_info[setup][$key][status]: ".$phpgw_info["setup"][$key]["status"]."<br>"; } } } function execute_script($script, $order = ""){ global $phpgw_info, $phpgw_domain, $current_config, $newsetting, $phpgw_setup, $SERVER_NAME; if ($order != "" && gettype($order) != "array"){ $order = array($order); } if ($order == ""){$order = array();} /* First include the ordered setup script file */ reset ($order); while (list (, $appname) = each ($order)){ $f = $phpgw_info["server"]["server_root"]."/".$appname."/setup/".$script.".inc.php"; if (file_exists($f)) {include($f);} $completed_scripts[$appname] = True; } /* Then add the rest */ $d = dir($phpgw_info["server"]["server_root"]); while ($entry=$d->read()){ if ($entry != "" && $completed_scripts[$entry] != True){ $f = $phpgw_info["server"]["server_root"]."/".$entry."/setup/".$script.".inc.php"; if (file_exists($f)) {include($f);} } } } function get_versions(){ global $phpgw_info, $phpgw_domain, $current_config, $newsetting, $phpgw_setup, $SERVER_NAME; $d = dir($phpgw_info["server"]["server_root"]); while($entry=$d->read()) { $f = $phpgw_info["server"]["server_root"]."/".$entry."/version.inc.php"; if (file_exists ($f)){include($f); } } $d->close(); } 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($appname=""){ 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"; } */ } } ?>