read()) { if (!ereg("setup",$entry)) { $f = PHPGW_SERVER_ROOT . '/' . $entry . '/setup/setup.inc.php'; if (file_exists ($f)) { include($f); $setup_info[$entry]['filename'] = $f; } } } $d->close(); // echo "
"; echo var_dump($setup_info); echo ""; exit; return $setup_info; } function get_db_versions($setup_info = "") { global $phpgw_info; $this->db->Halt_On_Error = "no"; $tables = $this->db->table_names(); while(list($key,$val) = @each($tables)) { $tname[] = $val['table_name']; } $newapps = $this->isinarray('phpgw_applications',$tname); $oldapps = $this->isinarray('applications',$tname); if ( ( is_array($tables) ) && ( count($tables) > 0 ) && ( $newapps || $oldapps ) ) { /* one of these tables exists. checking for post/pre beta version */ if ($newapps) { $this->db->query("select * from phpgw_applications"); while (@$this->db->next_record()) { $setup_info[$this->db->f('app_name')]['currentver'] = $this->db->f('app_version'); $setup_info[$this->db->f('app_name')]['enabled'] = $this->db->f('app_enabled'); } // This is to catch old setup installs that did not have phpgwapi listed as an app if (!$setup_info['phpgwapi']['currentver']) { $setup_info['phpgwapi']['currentver'] = $setup_info['admin']['currentver']; $setup_info['phpgwapi']['enabled'] = $setup_info['admin']['enabled']; //var_dump($setup_info['phpgwapi']);exit; $this->register_app('phpgwapi'); } } elseif ($oldapps) { $this->db->query('select * from applications'); while (@$this->db->next_record()) { if ($this->db->f('app_name') == 'admin') { $setup_info['phpgwapi']['currentver'] = $this->db->f('app_version'); } $setup_info[$this->db->f('app_name')]['currentver'] = $this->db->f('app_version'); } } } //echo print_r($setup_info);exit; return $setup_info; } /* app status values: U Upgrade required/available R upgrade in pRogress C upgrade Completed successfully D Dependency failure F upgrade Failed V Version mismatch at end of upgrade (Not used, proposed only) M Missing files at start of upgrade (Not used, proposed only) */ function compare_versions($setup_info) { global $phpgw_info, $phpgw_domain, $current_config, $newsetting, $SERVER_NAME; reset ($setup_info); while (list ($key, $value) = each ($setup_info)) { //echo '
"; echo var_dump($setup_info); echo ""; return $setup_info; } function check_depends($setup_info) { global $phpgw_info, $phpgw_domain, $current_config, $newsetting, $SERVER_NAME; reset ($setup_info); /* Run the list of apps */ while (list ($key, $value) = each ($setup_info)) { /* Does this app have any depends */ if (isset($value['depends'])) { /* If so find out which apps it depends on */ while (list ($depkey, $depvalue) = each ($value['depends'])) { /* I set this to False until we find a compatible version of this app */ $setup_info['depends'][$depkey]['status'] = False; /* Now we loop thru the versions looking for a compatible version */ while (list ($depskey, $depsvalue) = each ($value['depends'][$depkey]['versions'])) { $major = $this->get_major($setup_info[$value['depends'][$depkey]['appname']]['currentver']); //echo $major; if ($major == $depsvalue) //if ($setup_info[$value['depends'][$depkey]['appname']]['currentver'] == $depsvalue ) { $setup_info['depends'][$depkey]['status'] = True; } else { } } } /* Finally I will loop thru the dependencies again look for apps that still have a failure status */ /* If we find one we set the apps overall status as a dependency failure */ reset ($value['depends']); while (list ($depkey, $depvalue) = each ($value['depends'])) { if ($setup_info['depends'][$depkey]['status'] == False) { // Only set this if it has not already failed to upgrade - Milosch if (!( ($setup_info[$key]['status'] == 'F') || ($setup_info[$key]['status'] == 'C') )) { $setup_info[$key]['status'] = 'D'; } } } } } return $setup_info; } 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 check_db() { global $phpgw_info,$setup_info; $this->db->Halt_On_Error = "no"; //echo '
'.var_dump($setup_info).'';exit; if (isset($setup_info['phpgwapi']['currentver'])) { $setup_info = $this->get_db_versions($setup_info); } //echo '
'.var_dump($setup_info).'';exit; if (isset($setup_info['phpgwapi']['currentver'])) { if ($setup_info['phpgwapi']['currentver'] == $setup_info['phpgwapi']['version']) { $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 { /* no tables, so checking if we can create them */ $this->db->query('CREATE TABLE phpgw_testrights ( testfield varchar(5) NOT NULL )'); if (! $this->db->Errno) { //if (isset($isdb)){ $this->db->query('DROP TABLE phpgw_testrights'); $phpgw_info['setup']['header_msg'] = 'Stage 3 (Install Applications)'; 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 '';} // Since 0.9.10pre6 config table is named as phpgw_config $config_table = 'config'; $ver = explode('.',$phpgw_info['server']['versions']['phpgwapi']); if(ereg("([0-9]+)(pre)([0-9]+)",$ver[2],$regs)) { if(($regs[1] == '10') && ($regs[3] >= '6')) { $config_table = 'phpgw_config'; } } @$this->db->query("select config_value from $config_table 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 check_app_tables @abstract Verify that all of an app's tables exist in the db @param $appname @param $any optional, set to True to see if any of the apps tables are installed */ function check_app_tables($appname,$any=False) { global $setup_info,$DEBUG; if($setup_info[$appname]['tables']) { // Make a copy, else we send some callers into an infinite loop $copy = $setup_info; $this->db->Halt_On_Error = "no"; $tablenames = $this->db->table_names(); while(list($key,$val) = @each($tablenames)) { $tables[] = $val['table_name']; } while(list($key,$val) = @each($copy[$appname]['tables'])) { if ($DEBUG) { echo '