diff --git a/classes/class-grid.php b/classes/class-grid.php index 84bbedd..f382b30 100644 --- a/classes/class-grid.php +++ b/classes/class-grid.php @@ -7,44 +7,65 @@ if( ! defined( 'OSHELPERS' ) ) { } class OpenSim_Grid { - private $grid_status; + private static $grid_stats; private $grid_info; private $grid_info_card; - private $grid_status_card; + private $grid_stats_card; public function __construct() { - // $this->grid_status = $this->get_grid_status(); + // $this->grid_stats = $this->get_grid_stats(); // $this->grid_info = $this->get_grid_info(); // $this->grid_info_card = $this->get_grid_info_card(); - // $this->grid_status_card = $this->get_grid_status_card(); + // $this->grid_stats_card = $this->get_grid_stats_card(); } public static function get_grid_info( $grid_uri = false, $args = array() ) { $info = array(); - - if( ! $grid_uri ) { - $info = array_filter( array_merge( - $info, - array( - OpenSim::get_option( 'GridInfoService.gridname' ), - 'Login URI' => OpenSim::hop( OpenSim::get_option( 'Hypergrid.HomeURI' ) ), - ) - ) ); - // $info = OpenSim::get_option( 'GridInfoService' ); - // $login_uri = OpenSim::get_option( 'Hypergrid.HomeURI' ); + $HomeURI = OpenSim::get_option( 'Hypergrid.HomeURI' ); + if( ! $grid_uri || $grid_uri === $HomeURI ) { + $is_local_grid = true; + // Default, get login_uri from config, query grid for live grid_info + $grid_uri = OpenSim::get_option( 'Hypergrid.HomeURI' ); } else { + $is_local_grid = false; + // External grid lookup, not yet implemented $info = array( 'Grid Name' => 'External Grid, not implemented.', ); + return false; } - $info = array_filter( $info ); + // Fetch live info from grid using $login_uri/get_grid_info and parse xml result in array + // Example xml result: + $xml_url = $grid_uri . '/get_grid_info'; try { - if( empty( $info ) ) { - throw new Exception( 'No grid info found.' ); - } + $xml = simplexml_load_file( $xml_url ); } catch( Exception $e ) { - return $e; + $xml = false; + } + if( ! $xml ) { + $info = array( + 'online' => false, + 'login' => $grid_uri, + ); + } else { + $info['online'] = true; + try { + $array = (array) $xml; + if( ! $array ) { + throw new Exception( 'Error parsing grid info.' ); + } + $info = array_merge( $info, $array ); + } catch( Exception $e ) { + return $e; + } + } + + if( $is_local_grid ) { + $config_info = OpenSim::get_option( 'GridInfoService' ); + if( is_array( $config_info ) ) { + $info = array_merge( $config_info, $info ); + } } return $info; @@ -59,7 +80,7 @@ class OpenSim_Grid { $title = $args['title']; } else { $title = array_values( $info )[0]; - if( is_numeric( array_keys( $info )[0] ) ) { + if( is_numeric( array_keys( $info )[0] ) || ( isset($args['hide_first']) && $args['hide_first'] === true ) ) { $hide_first = 'hidden d-none'; } } @@ -107,73 +128,89 @@ class OpenSim_Grid { * Get grid information as a card */ public static function grid_info_card( $grid_uri = false, $args = array() ) { - $info = self::get_grid_info( $grid_uri, $args ); - if( ! $info || OpenSim::is_error( $info ) ) { + $grid_info = self::get_grid_info( $grid_uri, $args ); + if( ! $grid_info || OpenSim::is_error( $grid_info ) ) { return false; } + + $info = array( + _('Grid Name') => $grid_info['gridname'], + _('Login URI') => OpenSim::hop( $grid_info['login'] ), + ); + $title = false; if( ! empty( $args['title'])) { + error_log('using args title = ' . print_r($args['title'], true)); $title = $args['title'] === true ? _( 'Grid Information' ) : $args['title']; + } else { + $title = _( 'Grid Information' ); } - - return self::array_to_card( 'grid-info', $info, $title ); + return self::array_to_card( 'grid-info', $info, array( + 'title' => $title, + ) ); } - // public function get_grid_status() { - // $status = OpenSim::get_grid_status(); - // return $status; - // } + public static function grid_stats_card( $args = null ) { + $grid_stats = self::get_grid_stats( $args ); + error_log( __METHOD__ . ' info = ' . print_r( $grid_stats, true ) ); - // public function get_grid_info() { - // $info = OpenSim::get_grid_info(); - // return $info; - // } - - // public function get_grid_info_card() { - // $info = $this->get_grid_info(); - // $html = ''; - // if( ! empty( $info ) ) { - // $html .= '
'; - // $html .= '
'; - // $html .= '
' . _('Grid Info') . '
'; - // $html .= '
'; - // $html .= '
'; - // $html .= OpenSim::array2table( $info, 'gridinfo' ); - // $html .= '
'; - // $html .= '
'; - // } - // return $html; - // } - - public static function grid_status_card( $grid_uri = null, $args = null ) { - $info = self::grid_status( $grid_uri, $args ); - if( ! $info || OpenSim::is_error( $info ) ) { + if( ! $grid_stats || OpenSim::is_error( $info ) ) { + error_log( __METHOD__ . ' grid stats empty or error' ); return false; } - return self::array_to_card( 'grid-status', $info ); + + $title = false; + if( ! empty( $args['title'])) { + error_log('using args title = ' . print_r($args['title'], true)); + $title = $args['title'] === true ? _( 'Grid Information' ) : $args['title']; + } else { + $title = _( 'Grid Status' ); + } + + return self::array_to_card( 'grid-status', $grid_stats, array( + 'title' => $title, + ) ); } - public static function grid_status( $grid_url = null ) { - // DEBUG - Fake data for debugging purpose - $info = array( - _('Status') => _('Grid Online'), - _('Members') => 113, - _('Active Members (30 days)') => 6, - _('Members in world') => 0, - _('Active users (30 days)') => 33, - _('Total users in world') => 0, - _('Regions') => 22, - _('Total area') => '1.44 km²', - ); - return $info; - // End DEBUG + public static function get_grid_stats( $args = null ) { + $grid_info = self::get_grid_info(); + $grid_uri = $grid_info['login']; + error_log('grid_uri = ' . print_r($grid_uri, true)); + + // DEBUG - Fake data for debugging purpose + $labels = array( + 'status' => _('Status'), + 'members' => _('Members'), + 'active_members' => _('Active Members (30 days)'), + 'members_in_world' => _('Members in world'), + 'active_users' => _('Active users (30 days)'), + 'total_users' => _('Total users in world'), + 'regions' => _('Regions'), + 'total_area' => _('Total area'), + ); + $values = array_map( function( $label ) { + return 'TBD'; + }, $labels ); + + $values = array( + 'status' => $grid_info['online'] ? _('Online') : _('Offline'), + ); + $labels = array_intersect_key( $labels, $values ); + error_log('labels = ' . print_r($labels, true)); + + // $values['status'] = $grid_info['online'] ? _('Online') : _('Offline'); + $stats = array_combine( $labels, $values ); global $OpenSimDB; // If db is not yet configured, calls to $OpenSimDB would crash otherwise if ( ! $OpenSimDB ) { - return false; + $stats['error'] = _('Database not configured.'); } + return $stats; + // End DEBUG + + // $status = wp_cache_get( 'gridstatus', 'w4os' ); // if ( false === $status ) { @@ -185,7 +222,7 @@ class OpenSim_Grid { // // $host = $urlinfo['0']; // // $port = $urlinfo['1']; // // $fp = @fsockopen( $host, $port, $errno, $errstr, 1.0 ); - // $gridonline = w4os_grid_status(); + // $gridonline = w4os_grid_stats(); // // if ($fp) { // // $gridonline = __("Yes", 'w4os' ); diff --git a/classes/class-page.php b/classes/class-page.php index af1fe76..d8be259 100644 --- a/classes/class-page.php +++ b/classes/class-page.php @@ -27,11 +27,11 @@ class OpenSim_Page { $html = ''; switch( $id ) { case 'left': - // $html = OpenSim_Grid::grid_status_card(); + // $html = OpenSim_Grid::grid_stats_card(); break; case 'right': $html .= OpenSim_Grid::grid_info_card(); - $html .= OpenSim_Grid::grid_status_card(); + $html .= OpenSim_Grid::grid_stats_card(); break; default: break; diff --git a/install.php b/install.php index f2432f6..19b2e01 100644 --- a/install.php +++ b/install.php @@ -16,7 +16,7 @@ if ( __FILE__ !== $_SERVER['SCRIPT_FILENAME'] ) { } require_once( __DIR__ . '/classes/init.php' ); // Common to all main scripts -require_once( __DIR__ . '/classes/class-page.php' ); // Specific, because we generate the page +require_once( __DIR__ . '/classes/class-page.php' ); // Specific, because we generate a page require_once( __DIR__ . '/classes/class-form.php' ); // Specific, because we use forms class OpenSim_Install extends OpenSim_Page { @@ -239,8 +239,8 @@ class OpenSim_Install extends OpenSim_Page { // OpenSim::notify( _('Configuration file loaded successfully.'), 'success' ); // TODO: copy the temp file to the final location on success. - // return true; - throw new OpenSim_Error( _('The robust_test_config routine is not finished yet, but so far, so good.' ) ); + return true; + // throw new OpenSim_Error( _('The robust_test_config routine is not finished yet, but so far, so good.' ) ); } public function process_form_installation() { diff --git a/migration/class-migration.php b/migration/class-migration.php new file mode 100644 index 0000000..f869e9f --- /dev/null +++ b/migration/class-migration.php @@ -0,0 +1,63 @@ + array( + 'OPENSIM_GRID_NAME' => 'Const.BaseURL', + 'OPENSIM_LOGIN_URI' => array ( 'Const.BaseURL', 'Const.PublicPort' ), + 'OPENSIM_MAIL_SENDER' => array( $this, 'mail_sender' ), + 'ROBUST_DB' => 'OpenSim.ini::DatabaseService.ConnectionString', + 'OPENSIM_DB' => 'DatabaseService.ConnectionString', + // 'OPENSIM_DB_HOST' => $robust_db['host'], + // 'OPENSIM_DB_PORT' => $robust_db['port'] ?? null, + // 'OPENSIM_DB_NAME' => $robust_db['name'], + // 'OPENSIM_DB_USER' => $robust_db['user'], + // 'OPENSIM_DB_PASS' => $robust_db['pass'], + 'SEARCH_REGISTRARS' => array( $this, 'search_registrars' ), + // 'ROBUST_CONSOLE' => $console, + 'CURRENCY_HELPER_URL' => 'GridInfoService.economy', + 'CURRENCY_DB' => '', + 'CURRENCY_DB_HOST' => 'MoneyServer.ini::MySql.hostname', + 'CURRENCY_DB_NAME' => 'MoneyServer.ini::MySql.database', + 'CURRENCY_DB_USER' => 'MoneyServer.ini::MySql.username', + 'CURRENCY_DB_PASS' => 'MoneyServer.ini::MySql.password', + 'CURRENCY_DB_PORT' => 'MoneyServer.ini::MySql.port', + // 'CURRENCY_HELPER_PATH' => '', + 'CURRENCY_MONEY_TBL' => '', + 'CURRENCY_PROVIDER' => '', + 'CURRENCY_RATE' => '', + 'CURRENCY_RATE_PER' => '', + 'CURRENCY_SCRIPT_KEY' => '', + 'CURRENCY_TRANSACTION_TBL' => '', + 'CURRENCY_USE_MONEYSERVER' => '', + 'HYPEVENTS_URL' => '', + 'MUTE_DB_HOST' => '', + 'MUTE_DB_NAME' => '', + 'MUTE_DB_PASS' => '', + 'MUTE_DB_USER' => '', + 'MUTE_LIST_TBL' => '', + 'OFFLINE_DB' => '', + 'OFFLINE_DB_HOST' => '', + 'OFFLINE_DB_NAME' => '', + 'OFFLINE_DB_PASS' => '', + 'OFFLINE_DB_PORT' => '', + 'OFFLINE_DB_USER' => '', + 'OFFLINE_MESSAGE_TBL' => '', + 'OPENSIM_GRID_LOGO_URL' => '', + 'OPENSIM_USE_UTC_TIME' => '', + 'SEARCH_DB' => '', + 'SEARCH_DB_HOST' => '', + 'SEARCH_DB_NAME' => '', + 'SEARCH_DB_PASS' => '', + 'SEARCH_DB_PORT' => '', + 'SEARCH_DB_USER' => '', + 'SEARCH_TABLE_EVENTS' => '', + ); +}