name, $b->name );
return $temp;
}
function name_cmp_d( $a, $b )
{
$temp = strnatcasecmp( $b->name, $a->name );
return $temp;
}
function SortTable( &$table, $sortColumn, $sortDirection )
{
if ( $sortColumn == NULL || $sortDirection == NULL )
return;
// uasort and uksort are used here because tables are associative arrays and these two sort functions will maintain
// the key for each item in the list.
if ( $sortDirection === ASCENDING_SORT_DIRECTION )
if ( $sortColumn === NAME_SORT_COLUMN )
uasort( $table, 'name_cmp_a');
else
uksort ( $table, 'key_cmp_a' );
else
if ( $sortColumn === NAME_SORT_COLUMN )
uasort( $table, 'name_cmp_d' );
else
uksort ( $table, 'key_cmp_d' );
}
////// Users //////
// User Table record type
class UserTableRecord
{
var $name;
var $description;
var $groups;
function UserTableRecord( $name, $description )
{
$this->name = $name;
$this->description = $description;
$this->groups = array();
}
}
// User data is unicode data - use the appropriate parser
function userRecParser( $text )
{
global $currKey;
$currKey = "";
// Process current element
$name = getUnicodeValue( 'Name', $text );
if ( empty( $name ) )
return NULL;
$fullName = getUnicodeValue( 'FullName', $text );
$description = getUnicodeValue( 'Description', $text );
$currKey = $name;
return new UserTableRecord( $fullName, $description );
}
// Function which gets user data
function GetUserDataFromDB( $targetGroup, $targetRole, &$targetTable )
{
global $site;
global $userSortColumn;
global $userSortDirection;
// Call server to get comprehensive list of users.
$targetTable = array();
$users = $site->EnumerateUsers( $targetGroup, $targetRole, false );
$buffer = "";
$chunk = "";
do {
$chunkSize = $users->Read( $chunk, 4096 );
$buffer = $buffer.$chunk;
} while ( $chunkSize != 0 );
// Parse XML in $buffer
parseUnicodeData( $buffer, $targetTable, 'User', 'userRecParser' );
SortTable( $targetTable, $userSortColumn, $userSortDirection );
}
$userSortDirection = DEFAULT_SORT_DIRECTION;
function SetUserSortDirection( $sortDirection )
{
global $userSortDirection;
$userSortDirection = $sortDirection;
}
$userSortColumm = NAME_SORT_COLUMN;
function SetUserSortColumn( $sortColumn )
{
global $userSortColumn;
$userSortColumn = $sortColumn;
}
$userData = NULL;
function GetUserData()
{
global $userData;
if ( $userData == NULL )
GetUserDataFromDB( "", "", $userData );
return $userData;
}
function GetUsers()
{
$users = GetUserData();
return array_keys( $users );
}
function DeleteUser( $userID )
{
global $site;
global $userData;
// Validate
$users = GetUserData();
if ( empty( $userID ) || !array_key_exists( $userID, $users ) )
return false;
// Delete the user.
$userToDelete = new MgStringCollection();
$userToDelete->Add( $userID );
$site->DeleteUsers( $userToDelete );
// Update local userData array
// Note that this is done rather than calling EnumerateUsers, again, because EnumerateUsers may take some time
// to execute.
$oldUserData = array();
CopyArray( $userData, $oldUserData );
$userData = array();
foreach ( $oldUserData as $key => $val )
{
if ( $key != $userID )
$userData[ $key ] = $val;
}
return true;
}
function LoadUserTable( &$targetTable, $firstIndex, $lastIndex, $includeGroups )
{
$targetTable = array();
$users = GetUserData();
$iUser = -1;
foreach ( $users as $key => $val )
{
$iUser++;
if ( $iUser < $firstIndex )
continue;
if ( $iUser > $lastIndex )
break;
$targetTable[ $key ] = $val;
if ( $includeGroups )
$val->groups = GetGroupMemberships( $key );
}
}
function GetDataForUser( $userKey, $includeGroups )
{
$users = GetUserData();
if ( !array_key_exists( $userKey, $users ) )
return NULL;
$userVal = $users[ $userKey ];
if ( $includeGroups )
$userVal->groups = GetGroupMemberships( $userKey );
return $userVal;
}
function GetGroupMemberships( $userKey )
{
GetGroupDataFromDB( $userKey, "", $groupMemberships );
$temp = array_keys ( $groupMemberships );
// usort is used here because this is not an associative array and we need the keys to be reassigned; i.e. we want
// $temp[0] to be the first item in the sorted list.
usort( $temp, "strnatcasecmp" );
return $temp;
}
////// Groups //////
// Group Table record type
class GroupTableRecord
{
var $description;
var $users;
// Print contents
function GroupTableRecord( $description )
{
$this->description = $description;
$this->users = array();
}
}
// Group data is unicode data - use the appropriate parser
function groupRecParser( $text )
{
global $currKey;
$currKey = "";
// Process current element
$name = getUnicodeValue( 'Name', $text );
if ( empty( $name ) )
return NULL;
$description = getUnicodeValue( 'Description', $text );
$currKey = $name;
return new GroupTableRecord( $description );
}
$groupSortColumn = ID_SORT_COLUMN;
$groupSortDirection = DEFAULT_SORT_DIRECTION;
function SetGroupSortDirection( $sortDirection )
{
global $groupSortDirection;
$groupSortDirection = $sortDirection;
}
function GetGroupDataFromDB( $targetUser, $targetRole, &$targetTable )
{
global $site;
global $groupSortColumn;
global $groupSortDirection;
// Call server to get comprehensive list of users.
$groups = $site->EnumerateGroups( $targetUser, $targetRole );
$buffer = "";
$chunk = "";
do {
$chunkSize = $groups->Read( $chunk, 4096 );
$buffer = $buffer.$chunk;
} while ( $chunkSize != 0 );
// Parse XML in $buffer
parseUnicodeData( $buffer, $targetTable, 'Group', 'groupRecParser' );
SortTable( $targetTable, $groupSortColumn, $groupSortDirection );
}
$groupData = NULL;
function GetGroupData()
{
global $groupData;
if ( $groupData == NULL )
GetGroupDataFromDB( "", "", $groupData );
return $groupData;
}
function GetGroups()
{
$groups = GetGroupData();
return array_keys( $groups );
}
function DeleteGroup( $groupName )
{
global $site;
global $groupData;
// Validate
$groups = GetGroupData();
if ( empty( $groupName ) || !array_key_exists( $groupName, $groups ) )
return false;
// Delete the group
$groupToDelete = new MgStringCollection();
$groupToDelete->Add( $groupName );
$site->DeleteGroups( $groupToDelete );
// Update local groupData array
// Note that this is done rather than calling EnumerateGroups, again, because EnumerateGroups may take some time
// to execute.
$oldGroupData = array();
CopyArray( $groupData, $oldGroupData );
$groupData = array();
foreach ( $oldGroupData as $key => $val )
{
if ( $key != $groupName )
$groupData[ $key ] = $val;
}
return true;
}
function LoadGroupTable( &$targetTable, $firstIndex, $lastIndex, $includeUsers )
{
$targetTable = array();
$groups = GetGroupData();
$iGroup = -1;
foreach ( $groups as $key => $val )
{
$iGroup++;
if ( $iGroup < $firstIndex )
continue;
if ( $iGroup > $lastIndex )
break;
$targetTable[ $key ] = $val;
if ( $includeUsers )
$val->users = GetUserMembers( $key );
}
}
function GetDataForGroup( $groupKey, $includeUsers )
{
$groups = GetGroupData();
if ( !array_key_exists( $groupKey, $groups ) )
return NULL;
$groupVal = $groups[ $groupKey ];
if ( $includeUsers )
$groupVal->users = GetUserMembers( $groupKey );
return $groupVal;
}
function GetUserMembers( $groupKey )
{
GetUserDataFromDB( $groupKey, "", $userMemberships );
$temp = array_keys ( $userMemberships );
// usort is used here because this is not an associative array and we need the keys to be reassigned; i.e. we want
// $temp[0] to be the first item in the sorted list.
usort( $temp, "strnatcasecmp" );
return $temp;
}
////// Roles //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Fixed roles for V1.0
define( 'ADMIN_ROLE', MgRole::Administrator );
define( 'AUTHOR_ROLE', MgRole::Author );
define( 'VIEWER_ROLE', MgRole::Viewer );
// Function which builds a user table.
function GetRoles( $targetUser, $targetGroup, &$targetList )
{
global $site;
// Call server to get comprehensive list of roles.
$roles = $site->EnumerateRoles( $targetUser, $targetGroup );
// Build list
$targetList = array();
$numRoles = $roles->GetCount();
for ( $i = 0; $i < $numRoles; $i++ )
{
$targetList[] = $roles->GetItem( $i );
}
}
////// UsersOrGroupsByRole //////////////////////////////////////////////////////////////////////////////////
function GetUsersOrGroupsByRole( $bUser, $targetRole, &$targetList )
{
$targetTable = array();
if ( $bUser )
GetUserDataFromDB( "", $targetRole, $targetTable );
else
GetGroupDataFromDB( "", $targetRole, $targetTable );
$targetList = array_keys( $targetTable );
}
////// RolesTables ////////////////////////////////////////////////////////////////////////////////////////////////////
// UserRoles Table record type
class UserRolesTableRecord
{
var $name;
var $adminOn;
var $adminFromGroups;
var $authorOn;
var $authorFromGroups;
}
// Function which builds a userRoles table.
function LoadUserRolesTable( &$targetTable, $firstIndex, $lastIndex )
{
GetUsersOrGroupsByRole( true, ADMIN_ROLE, $usersWithAdminRole );
GetUsersOrGroupsByRole( false, ADMIN_ROLE, $groupsWithAdminRole );
GetUsersOrGroupsByRole( true, AUTHOR_ROLE, $usersWithAuthorRole );
GetUsersOrGroupsByRole( false, AUTHOR_ROLE, $groupsWithAuthorRole );
$targetTable = array();
LoadUserTable( $userTable, $firstIndex, $lastIndex, true );
foreach ( $userTable as $userKey => $userVal )
{
// Create record for role data
$userRolesRec = new UserRolesTableRecord();
$targetTable[ $userKey ] = $userRolesRec;
$userRolesRec->name = $userVal->name;
if ( in_array( $userKey, $usersWithAdminRole ) )
$userRolesRec->adminOn = true;
else
$userRolesRec->adminOn = false;
$userRolesRec->adminFromGroups = array();
$i = 0;
foreach ( $userVal->groups as $groupKey )
{
if ( in_array( $groupKey, $groupsWithAdminRole ) )
{
$userRolesRec->adminFromGroups[$i] = $groupKey;
$i++;
}
}
if ( in_array( $userKey, $usersWithAuthorRole ) )
$userRolesRec->authorOn = true;
else
$userRolesRec->authorOn = false;
$userRolesRec->authorFromGroups = array();
$i = 0;
foreach ( $userVal->groups as $groupKey )
{
if ( in_array( $groupKey, $groupsWithAuthorRole ) )
{
$userRolesRec->authorFromGroups[$i] = $groupKey;
$i++;
}
}
}
}
// GroupRoles Table record type
class GroupRolesTableRecord
{
var $adminOn;
var $authorOn;
}
// Function which builds a userRoles table.
function LoadGroupRolesTable( &$targetTable, $firstIndex, $lastIndex )
{
GetUsersOrGroupsByRole( false, ADMIN_ROLE, $groupsWithAdminRole );
GetUsersOrGroupsByRole( false, AUTHOR_ROLE, $groupsWithAuthorRole );
$targetTable = array();
LoadGroupTable( $groupTable, $firstIndex, $lastIndex, false );
foreach ( $groupTable as $groupKey => $groupVal )
{
// Create record for role data
$groupRolesRec = new GroupRolesTableRecord();
$targetTable[ $groupKey ] = $groupRolesRec;
// For each role, record the group's role permission
if ( in_array( $groupKey, $groupsWithAdminRole ) )
$groupRolesRec->adminOn = true;
else
$groupRolesRec->adminOn = false;
if ( in_array( $groupKey, $groupsWithAuthorRole ) )
$groupRolesRec->authorOn = true;
else
$groupRolesRec->authorOn = false;
}
}
////// Servers //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Services
define( 'CLIENT_SERVICE', "ClientService");
define( 'DRAWING_SERVICE', "DrawingService");
define( 'FEATURE_SERVICE', "FeatureService");
define( 'MAPPING_SERVICE', "MappingService");
define( 'RENDERING_SERVICE', "RenderingService");
define( 'TILE_SERVICE', "TileService");
define( 'RESOURCE_SERVICE', "ResourceService");
define( 'SITE_SERVICE', "SiteService");
$allPossibleSiteServerServices = array();
$allPossibleSiteServerServices[0] = CLIENT_SERVICE;
$allPossibleSiteServerServices[1] = DRAWING_SERVICE;
$allPossibleSiteServerServices[2] = FEATURE_SERVICE;
$allPossibleSiteServerServices[3] = MAPPING_SERVICE;
$allPossibleSiteServerServices[4] = RENDERING_SERVICE;
$allPossibleSiteServerServices[5] = RESOURCE_SERVICE;
$allPossibleSiteServerServices[6] = SITE_SERVICE;
$allPossibleSiteServerServices[7] = TILE_SERVICE;
$allPossibleSupportServerServices = array();
$allPossibleSupportServerServices[0] = MAPPING_SERVICE;
$allPossibleSupportServerServices[1] = RENDERING_SERVICE;
$allPossibleSupportServerServices[2] = TILE_SERVICE;
// Server Table record type
class ServerTableRecord
{
var $name;
var $description;
var $poweredUp;
var $version;
var $online;
var $services;
function ServerTableRecord( $name, $description )
{
$this->name = $name;
$this->description = $description;
$this->poweredUp = false;
$this->version = "";
$this->online = false;
$this->services = array();
$this->services[ DRAWING_SERVICE ] = false;
$this->services[ FEATURE_SERVICE ] = false;
$this->services[ MAPPING_SERVICE ] = false;
$this->services[ RENDERING_SERVICE ] = false;
$this->services[ TILE_SERVICE ] = false;
}
}
// The server list is unicode data - use appropriate parser
function serverRecParser( $text )
{
global $currKey;
$currKey = "";
// Process current element
$ipAddress = getUnicodeValue( 'IpAddress', $text );
if ( empty( $ipAddress ) )
return NULL;
$name = getUnicodeValue( 'Name', $text );
$description = getUnicodeValue( 'Description', $text );
$currKey = $ipAddress;
return new ServerTableRecord( $name, $description );
}
function GetServerDataFromDB( &$targetTable )
{
global $site;
global $userInfo;
$targetTable = array();
// Put Site Server in $targetTable.
$serverRec = new ServerTableRecord( "Site Server", "" );
$serverKey = $site->GetCurrentSiteAddress();
$targetTable[ $serverKey ] = $serverRec;
$dbData = $site->EnumerateServers();
$buffer = "";
$chunk = "";
do {
$chunkSize = $dbData->Read( $chunk, 4096 );
$buffer = $buffer.$chunk;
} while ( $chunkSize != 0 );
// Parse XML in $buffer
parseUnicodeData( $buffer, $supportServers, 'Server', 'serverRecParser' );
// Add support servers to target table.
foreach( $supportServers as $key => $val )
$targetTable[ $key ] = $val;
// Get values for Online and Services fields
foreach ( $targetTable as $key => $val )
{
try
{
$serverAdmin = new MgServerAdmin();
$serverAdmin->Open( $key, $userInfo );
$val->services = GetOptionalServerServices( $serverAdmin );
$val->online = GetOnline( $serverAdmin );
$val->version = GetVersion( $serverAdmin );
$val->poweredUp = true;
}
catch ( MgException $e )
{
$val->poweredUp = false;
}
if ( $serverAdmin != NULL )
$serverAdmin->Close();
}
}
$serverData = NULL;
function GetServerData()
{
global $serverData;
if ( $serverData == NULL )
GetServerDataFromDB( $serverData );
return $serverData;
}
function ReloadServerData()
{
global $serverData;
GetServerDataFromDB( $serverData );
}
function GetServers()
{
$servers = GetServerData();
return array_keys( $servers );
}
function GetServerName( $serverAddress )
{
$name = "";
$servers = GetServerData();
if ( array_key_exists( $serverAddress, $servers ) )
$name = $servers[ $serverAddress ]->name;
return $name;
}
function GetServerCount()
{
$servers = GetServerData();
return sizeof( $servers );
}
function DeleteServer( $serverAddress )
{
global $site;
global $serverData;
// Validate
$servers = GetServerData();
if ( empty( $serverAddress ) || !array_key_exists( $serverAddress, $servers ) )
return false;
// Delete the server.
$serverRec = GetDataForServer( $serverAddress );
if ( $serverRec == NULL )
return false;
$serverName = $serverRec->name;
$site->RemoveServer( $serverName );
// Update local serverData array
// Note that this is done rather than calling EnumerateServers, again, because EnumerateServers may take some time
// to execute.
$oldServerData = array();
CopyArray( $serverData, $oldServerData );
$serverData = array();
foreach ( $oldServerData as $key => $val )
{
if ( $key != $serverAddress )
$serverData[ $key ] = $val;
}
return true;
}
function LoadServerTable( &$targetTable, $firstIndex, $lastIndex )
{
$targetTable = array();
$servers = GetServerData();
$iServer = -1;
foreach ( $servers as $key => $val )
{
$iServer++;
if ( $iServer < $firstIndex )
continue;
if ( $iServer > $lastIndex )
break;
$targetTable[ $key ] = $val;
}
}
function GetDataForServer( $serverKey )
{
$servers = GetServerData();
if ( !array_key_exists( $serverKey, $servers ) )
return NULL;
else
return $servers[ $serverKey ];
}
function GetOptionalServerServices( $serverAdmin )
{
$services = array();
$services[ DRAWING_SERVICE ] = false;
$services[ FEATURE_SERVICE ] = false;
$services[ MAPPING_SERVICE ] = false;
$services[ RENDERING_SERVICE ] = false;
$services[ TILE_SERVICE ] = false;
$props = $serverAdmin->GetConfigurationProperties( MgConfigProperties::HostPropertiesSection );
$prop = $props->GetItem( MgConfigProperties::HostPropertyDrawingService );
if ( $prop->GetValue() == "1" )
$services[ DRAWING_SERVICE ] = true;
$prop = $props->GetItem( MgConfigProperties::HostPropertyFeatureService );
if ( $prop->GetValue() == "1" )
$services[ FEATURE_SERVICE ] = true;
$prop = $props->GetItem( MgConfigProperties::HostPropertyMappingService );
if ( $prop->GetValue() == "1" )
$services[ MAPPING_SERVICE ] = true;
$prop = $props->GetItem( MgConfigProperties::HostPropertyRenderingService );
if ( $prop->GetValue() == "1" )
$services[ RENDERING_SERVICE ] = true;
$prop = $props->GetItem( MgConfigProperties::HostPropertyTileService );
if ( $prop->GetValue() == "1" )
$services[ TILE_SERVICE ] = true;
return $services;
}
function SetOptionalServerServices( $serverAdmin, $services )
{
$props = new MgPropertyCollection();
if ( $services[ DRAWING_SERVICE ] )
$propVal = "1";
else
$propVal = "0";
$prop = new MgStringProperty( MgConfigProperties::HostPropertyDrawingService, $propVal );
$props->Add( $prop );
if ( $services[ FEATURE_SERVICE ] )
$propVal = "1";
else
$propVal = "0";
$prop = new MgStringProperty( MgConfigProperties::HostPropertyFeatureService, $propVal );
$props->Add( $prop );
if ( $services[ MAPPING_SERVICE ] )
$propVal = "1";
else
$propVal = "0";
$prop = new MgStringProperty( MgConfigProperties::HostPropertyMappingService, $propVal );
$props->Add( $prop );
if ( $services[ RENDERING_SERVICE ] )
$propVal = "1";
else
$propVal = "0";
$prop = new MgStringProperty( MgConfigProperties::HostPropertyRenderingService, $propVal );
$props->Add( $prop );
if ( $services[ TILE_SERVICE ] )
$propVal = "1";
else
$propVal = "0";
$prop = new MgStringProperty( MgConfigProperties::HostPropertyTileService, $propVal );
$props->Add( $prop );
// Disable Service manipulation from Site Admin
// $serverAdmin->SetConfigurationProperties( MgConfigProperties::HostPropertiesSection, $props );
}
function GetOnline( $serverAdmin )
{
return $serverAdmin->IsOnline();
}
function SetOnline( $serverAdmin, $online )
{
if ( $online )
$serverAdmin->BringOnline();
else
$serverAdmin->TakeOffline();
}
function GetVersion( $serverAdmin )
{
$infoProps = $serverAdmin->GetInformationProperties();
$versionProp = $infoProps->GetItem( MgServerInformationProperties::ServerVersion );
return $versionProp->GetValue();
}
function GetUnmanagedDataMappings( $serverAdmin )
{
$mappings = array();
$props = $serverAdmin->GetConfigurationProperties( MgConfigProperties::UnmanagedDataMappingsSection );
for ( $i = 0; $i < $props->GetCount(); $i++)
{
$prop = $props->GetItem($i);
$mappings[$prop->GetName()] = $prop->GetValue();
}
return $mappings;
}
// if $mappingName already exists, then that mapping is updated
// if $mappingName does NOT exist, it is added
function SetUnmanagedDataMapping( $serverAdmin, $mappingName, $location )
{
$props = new MgPropertyCollection();
$prop = new MgStringProperty( $mappingName, $location );
$props->Add( $prop );
$serverAdmin->SetConfigurationProperties( MgConfigProperties::UnmanagedDataMappingsSection, $props );
}
function DeleteUnmanagedDataMapping( $serverAdmin, $mappingName )
{
$success = false;
$props = new MgPropertyCollection();
$prop = new MgStringProperty( $mappingName, "" ); // value doesn't matter
$props->Add( $prop );
$serverAdmin->RemoveConfigurationProperties( MgConfigProperties::UnmanagedDataMappingsSection, $props );
$success = true;
return $success;
}
function LoadMappingTable( &$targetTable, $table, $firstIndex, $lastIndex )
{
$targetTable = array();
$iMapping = -1;
foreach ( $table as $key => $val )
{
$iMapping++;
if ( $iMapping < $firstIndex )
continue;
if ( $iMapping > $lastIndex )
break;
$targetTable[ $key ] = $val;
}
}
////// Properties //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class GeneralPropsRecord
{
var $displayName;
var $displayNamePropStr;
var $locale;
var $localePropStr;
var $defaultMessageLocale;
var $defaultMessageLocalePropStr;
var $localizationResourcesPath;
var $localizationResourcesPathPropStr;
var $tcpIpMtu;
var $tcpIpMtuPropStr;
var $tempPath;
var $tempPathPropStr;
var $fdoPath;
var $fdoPathPropStr;
var $email;
var $emailPropStr;
var $connectionTimeOut;
var $connectionTimeOutPropStr;
var $connectionTimerInt;
var $connectionTimerIntPropStr;
function GeneralPropsRecord()
{
$this->displayName = "";
$this->displayNamePropStr = MgConfigProperties::GeneralPropertyDisplayName;
$this->locale = "";
$this->localePropStr = MgConfigProperties::GeneralPropertyLocale;
$this->defaultMessageLocale = "";
$this->defaultMessageLocalePropStr = MgConfigProperties::GeneralPropertyDefaultMessageLocale;
$this->localizationResourcesPath = "";
$this->localizationResourcesPathPropStr = MgConfigProperties::GeneralPropertyResourcesPath;
$this->tcpIpMtu = "";
$this->tcpIpMtuPropStr = MgConfigProperties::GeneralPropertyTcpIpMtu;
$this->tempPath = "";
$this->tempPathPropStr = MgConfigProperties::GeneralPropertyTempPath;
$this->fdoPath = "";
$this->fdoPathPropStr = MgConfigProperties::GeneralPropertyFdoPath;
$this->email = "";
$this->emailPropStr = MgConfigProperties::AdministrativeConnectionPropertyEmail;
$this->connectionTimeOut = 0;
$this->connectionTimeOutPropStr = MgConfigProperties::GeneralPropertyConnectionTimeout;
$this->connectionTimerInt = 0;
$this->connectionTimerIntPropStr = MgConfigProperties::GeneralPropertyConnectionTimerInterval;
}
function GetProps( $serverAdmin )
{
$props = $serverAdmin->GetConfigurationProperties( MgConfigProperties::GeneralPropertiesSection );
$prop = $props->GetItem( $this->displayNamePropStr );
$this->displayName = $prop->GetValue();
$prop = $props->GetItem( $this->localePropStr );
$this->locale = $prop->GetValue();
$prop = $props->GetItem( $this->defaultMessageLocalePropStr );
$this->defaultMessageLocale = $prop->GetValue();
$prop = $props->GetItem( $this->localizationResourcesPathPropStr );
$this->localizationResourcesPath = $prop->GetValue();
CleanUpPath( $this->localizationResourcesPath );
$prop = $props->GetItem( $this->tcpIpMtuPropStr );
$this->tcpIpMtu = $prop->GetValue();
$prop = $props->GetItem( $this->tempPathPropStr );
$this->tempPath = $prop->GetValue();
CleanUpPath( $this->tempPath );
$prop = $props->GetItem( $this->fdoPathPropStr );
$this->fdoPath = $prop->GetValue();
CleanUpPath( $this->fdoPath );
$prop = $props->GetItem( $this->connectionTimeOutPropStr );
$this->connectionTimeOut = $prop->GetValue();
$prop = $props->GetItem( $this->connectionTimerIntPropStr );
$this->connectionTimerInt = $prop->GetValue();
$props = $serverAdmin->GetConfigurationProperties( MgConfigProperties::AdministrativeConnectionPropertiesSection );
$prop = $props->GetItem( $this->emailPropStr );
$this->email = $prop->GetValue();
}
function ValidateProps()
{
global $errInvalidServerDefaultLocale;
global $errInvalidServerLocalizationResourcesPath;
global $errInvalidServerTcpIpMtu;
global $errInvalidServerTempPath;
global $errInvalidServerFdoPath;
global $errInvalidConnectionTimeOut;
global $errInvalidConnectionTimerInt;
global $errInvalidServiceRegistrationTimerInt;
if ( empty( $this->defaultMessageLocale ) )
throw new Exception( $errInvalidServerDefaultLocale );
if ( empty( $this->localizationResourcesPath ) )
throw new Exception( $errInvalidServerLocalizationResourcesPath );
if ( $this->tcpIpMtu < 0 )
throw new Exception( $errInvalidServerTcpIpMtu );
if ( empty( $this->tempPath ) )
throw new Exception( $errInvalidServerTempPath );
if ( empty( $this->fdoPath ) )
throw new Exception( $errInvalidServerFdoPath );
if ( $this->connectionTimeOut <= 0 )
throw new Exception( $errInvalidConnectionTimeOut );
if ( $this->connectionTimerInt < 0 )
throw new Exception( $errInvalidConnectionTimerInt );
}
function SetProps( $serverAdmin )
{
$props = new MgPropertyCollection();
$prop = new MgStringProperty( $this->displayNamePropStr , $this->displayName );
$props->Add( $prop );
$prop = new MgStringProperty( $this->localePropStr , $this->locale );
$props->Add( $prop );
$prop = new MgStringProperty( $this->defaultMessageLocalePropStr , $this->defaultMessageLocale );
$props->Add( $prop );
$prop = new MgStringProperty( $this->localizationResourcesPathPropStr, $this->localizationResourcesPath );
$props->Add( $prop );
$prop = new MgStringProperty( $this->tcpIpMtuPropStr, $this->tcpIpMtu );
$props->Add( $prop );
$prop = new MgStringProperty( $this->tempPathPropStr, $this->tempPath );
$props->Add( $prop );
$prop = new MgStringProperty( $this->fdoPathPropStr, $this->fdoPath );
$props->Add( $prop );
$prop = new MgStringProperty( $this->connectionTimeOutPropStr, $this->connectionTimeOut );
$props->Add( $prop );
$prop = new MgStringProperty( $this->connectionTimerIntPropStr, $this->connectionTimerInt );
$props->Add( $prop );
$serverAdmin->SetConfigurationProperties( MgConfigProperties::GeneralPropertiesSection, $props );
$props->Clear();
$prop = new MgStringProperty( $this->emailPropStr, $this->email );
$props->Add( $prop );
$serverAdmin->SetConfigurationProperties( MgConfigProperties::AdministrativeConnectionPropertiesSection, $props );
}
}
class ConnectionPropsRecord
{
var $connStr;
var $propSectionStr;
var $maxConns;
var $maxConnsPropStr;
var $port;
var $portPropStr;
var $queueSize;
var $queueSizePropStr;
var $threadPoolSize;
var $threadPoolSizePropStr;
function ConnectionPropsRecord( $connStr, $propSectionStr, $maxConnsPropStr, $portPropStr, $queueSizePropStr, $threadPoolSizePropStr )
{
$this->connStr = $connStr;
$this->propSectionStr = $propSectionStr;
$this->maxConns = 0;
$this->maxConnsPropStr = $maxConnsPropStr;
$this->port = 0;
$this->portPropStr = $portPropStr;
$this->queueSize = 0;
$this->queueSizePropStr = $queueSizePropStr;
$this->threadPoolSize = 0;
$this->threadPoolSizePropStr = $threadPoolSizePropStr;
}
function GetProps( $serverAdmin )
{
$props = $serverAdmin->GetConfigurationProperties( $this->propSectionStr );
$prop = $props->GetItem( $this->maxConnsPropStr );
$this->maxConns = $prop->GetValue();
$prop = $props->GetItem( $this->portPropStr );
$this->port = $prop->GetValue();
$prop = $props->GetItem( $this->queueSizePropStr );
$this->queueSize = $prop->GetValue();
$prop = $props->GetItem( $this->threadPoolSizePropStr );
$this->threadPoolSize = $prop->GetValue();
}
function ValidateProps()
{
global $errInvalidServerMaxConns;
global $errInvalidServerConnQueueSize;
global $errInvalidServerConnThreadPoolSize;
if ( $this->maxConns < 1 )
throw new Exception( sprintf( $errInvalidServerMaxConns, $this->connStr ) );
if ( $this->queueSize < 1 )
throw new Exception( sprintf( $errInvalidServerConnQueueSize, $this->connStr ) );
if ( $this->threadPoolSize < 1 )
throw new Exception( sprintf( $errInvalidServerConnThreadPoolSize, $this->connStr ) );
}
function SetProps( $serverAdmin )
{
$props = new MgPropertyCollection();
$prop = new MgStringProperty( $this->maxConnsPropStr, $this->maxConns );
$props->Add( $prop );
$prop = new MgStringProperty( $this->portPropStr, $this->port );
$props->Add( $prop );
$prop = new MgStringProperty( $this->queueSizePropStr, $this->queueSize );
$props->Add( $prop );
$prop = new MgStringProperty( $this->threadPoolSizePropStr, $this->threadPoolSize );
$props->Add( $prop );
$serverAdmin->SetConfigurationProperties( $this->propSectionStr, $props );
}
}
class FeatureServicePropsRecord
{
var $enabled;
var $dataConnTimeOut;
var $dataConnTimeOutPropStr;
var $dataConnTimerInt;
var $dataConnTimerIntPropStr;
var $dataConnPoolSize;
var $dataConnPoolSizePropStr;
var $dataConnPoolSizeCustom;
var $dataConnPoolSizeCustomPropStr;
var $dataCacheSize;
var $dataCacheSizePropStr;
function FeatureServicePropsRecord()
{
$this->enabled = true;
$this->enabledID = "featureServiceEnabled";
$this->dataConnPoolSize = 1;
$this->dataConnPoolSizePropStr = MgConfigProperties::FeatureServicePropertyDataConnectionPoolSize;
$this->dataConnPoolSizeID = "featureDataConnPoolSize";
$this->dataConnPoolSizeCustom = "";
$this->dataConnPoolSizeCustomPropStr = MgConfigProperties::FeatureServicePropertyDataConnectionPoolSizeCustom;
$this->dataConnPoolSizeCustomID = "featureDataConnPoolSizeCustom";
$this->dataConnTimeOut = 0;
$this->dataConnTimeOutPropStr = MgConfigProperties::FeatureServicePropertyDataConnectionTimeout;
$this->dataConnTimeOutID = "featureDataConnTimeOut";
$this->dataConnTimerInt = 0;
$this->dataConnTimerIntPropStr = MgConfigProperties::FeatureServicePropertyDataConnectionTimerInterval;
$this->dataConnTimerIntID = "featureDataConnTimerInt";
$this->dataCacheSize = 0;
$this->dataCacheSizePropStr = MgConfigProperties::FeatureServicePropertyDataCacheSize;
$this->dataCacheSizeID = "featureDataConnCacheSize";
}
function GetProps( $serverAdmin )
{
$props = $serverAdmin->GetConfigurationProperties( MgConfigProperties::FeatureServicePropertiesSection );
$prop = $props->GetItem( $this->dataConnPoolSizePropStr );
$this->dataConnPoolSize = $prop->GetValue();
$prop = $props->GetItem( $this->dataConnPoolSizeCustomPropStr );
$this->dataConnPoolSizeCustom = $prop->GetValue();
$prop = $props->GetItem( $this->dataConnTimeOutPropStr );
$this->dataConnTimeOut = $prop->GetValue();
$prop = $props->GetItem( $this->dataConnTimerIntPropStr );
$this->dataConnTimerInt = $prop->GetValue();
$prop = $props->GetItem( $this->dataCacheSizePropStr );
$this->dataCacheSize = $prop->GetValue();
}
function ValidateProps()
{
global $errInvalidFeatureDataConnPoolSize;
global $errInvalidFeatureDataConnPoolSizeCustom;
global $errInvalidFeatureDataConnTimeOut;
global $errInvalidFeatureDataConnTimerInt;
global $errInvalidFeatureDataCacheSize;
if ( $this->dataConnPoolSize <= 0 )
throw new Exception( $errInvalidFeatureDataConnPoolSize );
if ( $this->dataConnTimeOut <= 0 )
throw new Exception( $errInvalidFeatureDataConnTimeOut );
if ( $this->dataConnTimerInt < 0 )
throw new Exception( $errInvalidFeatureDataConnTimerInt );
if ( $this->dataCacheSize < 1 )
throw new Exception( $errInvalidFeatureDataCacheSize );
}
function SetProps( $serverAdmin )
{
$props = new MgPropertyCollection();
$prop = new MgStringProperty( $this->dataConnPoolSizePropStr, $this->dataConnPoolSize );
$props->Add( $prop );
$prop = new MgStringProperty( $this->dataConnPoolSizeCustomPropStr, $this->dataConnPoolSizeCustom );
$props->Add( $prop );
$prop = new MgStringProperty( $this->dataConnTimeOutPropStr, $this->dataConnTimeOut );
$props->Add( $prop );
$prop = new MgStringProperty( $this->dataConnTimerIntPropStr, $this->dataConnTimerInt );
$props->Add( $prop );
$prop = new MgStringProperty( $this->dataCacheSizePropStr, $this->dataCacheSize );
$props->Add( $prop );
$serverAdmin->SetConfigurationProperties( MgConfigProperties::FeatureServicePropertiesSection, $props );
}
}
class ResourceServicePropsRecord
{
var $enabled;
var $dataFileTrashFolder;
var $dataFileTrashFolderPropStr;
var $libraryDataFileFolder;
var $libraryDataFileFolderPropStr;
var $libraryRepositoryFolder;
var $libraryRepositoryFolderPropStr;
var $sessionDataFileFolder;
var $sessionDataFileFolderPropStr;
var $sessionRepositoryFolder;
var $sessionRepositoryFolderPropStr;
var $siteRepositoryFolder;
var $siteRepositoryFolderPropStr;
var $resourceSchemaFolder;
var $resourceSchemaFolderPropStr;
var $repositoryCheckpointsTimerInterval;
var $repositoryCheckpointsTimerIntervalPropStr;
var $packagesPath;
var $packagesPathPropStr;
function ResourceServicePropsRecord()
{
$this->enabled = true;
$this->dataFileTrashFolder = "";
$this->dataFileTrashFolderPropStr = MgConfigProperties::ResourceServicePropertyResourceDataFileTrashFolderName;
$this->libraryDataFileFolder = "";
$this->libraryDataFileFolderPropStr = MgConfigProperties::ResourceServicePropertyLibraryResourceDataFilePath;
$this->libraryRepositoryFolder = "";
$this->libraryRepositoryFolderPropStr = MgConfigProperties::ResourceServicePropertyLibraryRepositoryPath;
$this->sessionDataFileFolder = "";
$this->sessionDataFileFolderPropStr = MgConfigProperties::ResourceServicePropertySessionResourceDataFilePath;
$this->sessionRepositoryFolder = "";
$this->sessionRepositoryFolderPropStr = MgConfigProperties::ResourceServicePropertySessionRepositoryPath;
$this->siteRepositoryFolder = "";
$this->siteRepositoryFolderPropStr = MgConfigProperties::ResourceServicePropertySiteRepositoryPath;
$this->resourceSchemaFolder = "";
$this->resourceSchemaFolderPropStr = MgConfigProperties::ResourceServicePropertyResourceSchemaFilePath;
$this->repositoryCheckpointsTimerInterval = 0;
$this->repositoryCheckpointsTimerIntervalPropStr = MgConfigProperties::ResourceServicePropertyRepositoryCheckpointsTimerInterval;
$this->packagesPath = "";
$this->packagesPathPropStr = MgConfigProperties::ResourceServicePropertyPackagesPath;
}
function GetProps( $serverAdmin )
{
$props = $serverAdmin->GetConfigurationProperties( MgConfigProperties::ResourceServicePropertiesSection );
$prop = $props->GetItem( $this->dataFileTrashFolderPropStr );
$this->dataFileTrashFolder = $prop->GetValue();
CleanUpPath( $this->dataFileTrashFolder );
$prop = $props->GetItem( $this->libraryDataFileFolderPropStr );
$this->libraryDataFileFolder = $prop->GetValue();
CleanUpPath( $this->libraryDataFileFolder );
$prop = $props->GetItem( $this->libraryRepositoryFolderPropStr );
$this->libraryRepositoryFolder = $prop->GetValue();
CleanUpPath( $this->libraryRepositoryFolder );
$prop = $props->GetItem( $this->sessionDataFileFolderPropStr );
$this->sessionDataFileFolder = $prop->GetValue();
CleanUpPath( $this->sessionDataFileFolder );
$prop = $props->GetItem( $this->sessionRepositoryFolderPropStr );
$this->sessionRepositoryFolder = $prop->GetValue();
CleanUpPath( $this->sessionRepositoryFolder );
$prop = $props->GetItem( $this->siteRepositoryFolderPropStr );
$this->siteRepositoryFolder = $prop->GetValue();
CleanUpPath( $this->siteRepositoryFolder );
$prop = $props->GetItem( $this->resourceSchemaFolderPropStr );
$this->resourceSchemaFolder = $prop->GetValue();
CleanUpPath( $this->resourceSchemaFolder );
$prop = $props->GetItem( $this->repositoryCheckpointsTimerIntervalPropStr );
$this->repositoryCheckpointsTimerInterval = $prop->GetValue();
$prop = $props->GetItem( $this->packagesPathPropStr );
$this->packagesPath = $prop->GetValue();
CleanUpPath( $this->packagesPath );
$props = $serverAdmin->GetConfigurationProperties( MgConfigProperties::GeneralPropertiesSection );
}
function ValidateProps()
{
global $errInvalidResourceDataFileTrashFolder;
global $errInvalidResourceLibraryDataFileFolder;
global $errInvalidResourceLibraryRepositoryFolder;
global $errInvalidResourceSessionDataFileFolder;
global $errInvalidResourceSessionRepositoryFolder;
global $errInvalidResourceSiteRepositoryFolder;
global $errInvalidResourceResourceSchemaFolder;
global $errInvalidRepositoryCheckpointsTimerInterval;
global $errInvalidPackagesPath;
if ( empty( $this->dataFileTrashFolder ) )
throw new Exception( $errInvalidResourceDataFileTrashFolder );
if ( empty ($this->libraryDataFileFolder) )
throw new Exception( $errInvalidResourceLibraryDataFileFolder );
if ( empty ($this->libraryRepositoryFolder) )
throw new Exception( $errInvalidResourceLibraryRepositoryFolder );
if ( empty( $this->sessionDataFileFolder ) )
throw new Exception( $errInvalidResourceSessionDataFileFolder );
if ( empty( $this->sessionRepositoryFolder ) )
throw new Exception( $errInvalidResourceSessionRepositoryFolder );
if ( empty( $this->siteRepositoryFolder ) )
throw new Exception( $errInvalidResourceSiteRepositoryFolder );
if ( empty( $this->resourceSchemaFolder ) )
throw new Exception( $errInvalidResourceResourceSchemaFolder );
if ( $this->repositoryCheckpointsTimerInterval < 0 )
throw new Exception( $errInvalidRepositoryCheckpointsTimerInterval );
if ( empty( $this->packagesPath ) )
throw new Exception( $errInvalidPackagesPath );
}
function SetProps( $serverAdmin )
{
$props = new MgPropertyCollection();
$prop = new MgStringProperty( $this->dataFileTrashFolderPropStr, $this->dataFileTrashFolder );
$props->Add( $prop );
$prop = new MgStringProperty( $this->libraryDataFileFolderPropStr, $this->libraryDataFileFolder );
$props->Add( $prop );
$prop = new MgStringProperty( $this->libraryRepositoryFolderPropStr, $this->libraryRepositoryFolder );
$props->Add( $prop );
$prop = new MgStringProperty( $this->sessionDataFileFolderPropStr, $this->sessionDataFileFolder );
$props->Add( $prop );
$prop = new MgStringProperty( $this->sessionRepositoryFolderPropStr, $this->sessionRepositoryFolder );
$props->Add( $prop );
$prop = new MgStringProperty( $this->siteRepositoryFolderPropStr, $this->siteRepositoryFolder );
$props->Add( $prop );
$prop = new MgStringProperty( $this->resourceSchemaFolderPropStr, $this->resourceSchemaFolder );
$props->Add( $prop );
$prop = new MgStringProperty( $this->repositoryCheckpointsTimerIntervalPropStr, $this->repositoryCheckpointsTimerInterval );
$props->Add( $prop );
$prop = new MgStringProperty( $this->packagesPathPropStr, $this->packagesPath );
$props->Add( $prop );
$serverAdmin->SetConfigurationProperties( MgConfigProperties::ResourceServicePropertiesSection, $props );
}
}
class TileServicePropsRecord
{
var $enabled;
var $tileCachePath;
var $tileCachePathPropStr;
function TileServicePropsRecord()
{
$this->enabled = true;
$this->tileCachePath = "";
$this->tileCachePathPropStr = MgConfigProperties::TileServicePropertyTileCachePath;
}
function GetProps( $serverAdmin )
{
$props = $serverAdmin->GetConfigurationProperties( MgConfigProperties::TileServicePropertiesSection );
$prop = $props->GetItem( $this->tileCachePathPropStr );
$this->tileCachePath = $prop->GetValue();
CleanUpPath( $this->tileCachePath );
}
function ValidateProps()
{
global $errInvalidTileCachePath;
if ( empty( $this->tileCachePath ) )
throw new Exception( $errInvalidTileCachePath );
}
function SetProps( $serverAdmin )
{
$props = new MgPropertyCollection();
$prop = new MgStringProperty( $this->tileCachePathPropStr, $this->tileCachePath );
$props->Add( $prop );
$serverAdmin->SetConfigurationProperties( MgConfigProperties::TileServicePropertiesSection, $props );
}
}
class SiteServicePropsRecord
{
var $enabled;
var $sessionTimeout;
var $sessionTimeoutPropStr;
var $sessionTimerInt;
var $sessionTimerIntPropStr;
function SiteServicePropsRecord()
{
$this->enabled = true;
$this->sessionTimeout = 0;
$this->sessionTimeoutPropStr = MgConfigProperties::SiteServicePropertySessionTimeout;
$this->sessionTimerInt = 0;
$this->sessionTimerIntPropStr = MgConfigProperties::SiteServicePropertySessionTimerInterval;
}
function GetProps( $serverAdmin )
{
$props = $serverAdmin->GetConfigurationProperties( MgConfigProperties::SiteServicePropertiesSection );
$prop = $props->GetItem( $this->sessionTimeoutPropStr );
$this->sessionTimeout = $prop->GetValue();
$prop = $props->GetItem( $this->sessionTimerIntPropStr );
$this->sessionTimerInt = $prop->GetValue();
}
function ValidateProps()
{
global $errInvalidSessionTimeOut;
global $errInvalidSessionTimerInt;
if ( $this->sessionTimeout <= 0 )
throw new Exception( $errInvalidSessionTimeOut );
if ( $this->sessionTimerInt <= 0 )
throw new Exception( $errInvalidSessionTimerInt );
}
function SetProps( $serverAdmin )
{
$props = new MgPropertyCollection();
$prop = new MgStringProperty( $this->sessionTimeoutPropStr, $this->sessionTimeout );
$props->Add( $prop );
$prop = new MgStringProperty( $this->sessionTimerIntPropStr, $this->sessionTimerInt );
$props->Add( $prop );
$serverAdmin->SetConfigurationProperties( MgConfigProperties::SiteServicePropertiesSection, $props );
}
}
////// Logs //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Logs
define( 'ACTIVE_LOGS', "ActiveLogs" );
define( 'ACCESS_LOG', MgLogFileType::Access );
define( 'ADMIN_LOG', MgLogFileType::Admin );
define( 'AUTHENTICATION_LOG', MgLogFileType::Authentication );
define( 'ERROR_LOG', MgLogFileType::Error );
define( 'SESSION_LOG', MgLogFileType::Session );
define( 'TRACE_LOG', MgLogFileType::Trace );
define( 'COMMA_DELIMITER', "Comma" );
define( 'TAB_DELIMITER', "Tab" );
define( 'SPACE_DELIMITER', "Space" );
define( 'NO_DELIMITER', "None" );
$logDelimiters = array();
$logDelimiters[ COMMA_DELIMITER ] = ',';
$logDelimiters[ TAB_DELIMITER ] = "\\t";
$logDelimiters[ SPACE_DELIMITER ] = " ";
$logDelimiters[ NO_DELIMITER ] = "";
define( 'ARCHIVE_NONE', "None" );
define( 'ARCHIVE_DAILY', "Day" );
define( 'ARCHIVE_MONTHLY', "Month" );
define( 'ARCHIVE_YEARLY', "Year" );
$archiveFrequencies[ ARCHIVE_NONE ] = "";
$archiveFrequencies[ ARCHIVE_DAILY ] = "%d";
$archiveFrequencies[ ARCHIVE_MONTHLY ] = "%m";
$archiveFrequencies[ ARCHIVE_YEARLY ] = "%y";
$allLogs = array();
$allLogs[0] = ACCESS_LOG;
$allLogs[1] = ADMIN_LOG;
$allLogs[2] = AUTHENTICATION_LOG;
$allLogs[3] = ERROR_LOG;
$allLogs[4] = SESSION_LOG;
$allLogs[5] = TRACE_LOG;
define( 'AVERAGEOPTIME_PARM', "AVERAGEOPTIME" );
define( 'CLIENT_PARM', "CLIENT" );
define( 'CLIENTIP_PARM', "CLIENTIP" );
define( 'DURATION_PARM', "DURATION" );
define( 'ENDTIME_PARM', "ENDTIME" );
define( 'ERROR_PARM', "ERROR" );
define( 'INFO_PARM', "INFO" );
define( 'OPID_PARM', "OPID" );
define( 'OPSFAILED_PARM', "OPSFAILED" );
define( 'OPSPROCESSED_PARM', "OPSPROCESSED" );
define( 'OPSRECEIVED_PARM', "OPSRECEIVED" );
define( 'STACKTRACE_PARM', "STACKTRACE" );
define( 'STARTTIME_PARM', "STARTTIME" );
define( 'USER_PARM', "USER" );
$allLogParms = array();
$allLogParms[0] = AVERAGEOPTIME_PARM;
$allLogParms[1] = CLIENT_PARM;
$allLogParms[2] = CLIENTIP_PARM;
$allLogParms[3] = DURATION_PARM;
$allLogParms[4] = ENDTIME_PARM;
$allLogParms[5] = ERROR_PARM;
$allLogParms[6] = INFO_PARM;
$allLogParms[7] = OPID_PARM;
$allLogParms[8] = OPSFAILED_PARM;
$allLogParms[9] = OPSPROCESSED_PARM;
$allLogParms[10] = OPSRECEIVED_PARM;
$allLogParms[11] = STACKTRACE_PARM;
$allLogParms[12] = STARTTIME_PARM;
$allLogParms[13] = USER_PARM;
$allAccessLogParms = array();
$allAccessLogParms[0] = CLIENT_PARM;
$allAccessLogParms[1] = CLIENTIP_PARM;
$allAccessLogParms[2] = OPID_PARM;
$allAccessLogParms[3] = USER_PARM;
$allAdminLogParms = array();
$allAdminLogParms[0] = CLIENT_PARM;
$allAdminLogParms[1] = CLIENTIP_PARM;
$allAdminLogParms[2] = OPID_PARM;
$allAdminLogParms[3] = USER_PARM;
$allAuthenticationLogParms = array();
$allAuthenticationLogParms[0] = CLIENT_PARM;
$allAuthenticationLogParms[1] = CLIENTIP_PARM;
$allAuthenticationLogParms[2] = USER_PARM;
$allErrorLogParms = array();
$allErrorLogParms[0] = CLIENT_PARM;
$allErrorLogParms[1] = CLIENTIP_PARM;
$allErrorLogParms[2] = ERROR_PARM;
$allErrorLogParms[3] = STACKTRACE_PARM;
$allErrorLogParms[4] = USER_PARM;
$allSessionLogParms = array();
$allSessionLogParms[0] = CLIENT_PARM;
$allSessionLogParms[1] = CLIENTIP_PARM;
$allSessionLogParms[2] = USER_PARM;
$allSessionLogParms[3] = STARTTIME_PARM;
$allSessionLogParms[4] = ENDTIME_PARM;
$allSessionLogParms[5] = OPSFAILED_PARM;
$allSessionLogParms[6] = OPSRECEIVED_PARM;
$allSessionLogParms[7] = AVERAGEOPTIME_PARM;
$allTraceLogParms = array();
$allTraceLogParms[0] = INFO_PARM;
class LogPropsRecord
{
var $enabled;
var $filename;
var $allPossibleParms;
var $parmsSelected;
var $parmsNotSelected;
var $propSectionStr;
var $enabledPropStr;
var $filenamePropStr;
var $parmsPropStr;
function LogPropsRecord( $propSectionStr, $enabledPropStr, $filenamePropStr, $parmsPropStr, $allPossibleParms )
{
$this->propSectionStr = $propSectionStr;
$this->enabledPropStr = $enabledPropStr;
$this->filenamePropStr = $filenamePropStr;
$this->parmsPropStr = $parmsPropStr;
$this->enabled = false;
$this->filename = "";
$this->parmsSelected = array();
$this->parmsNotSelected = array();
CopyArray( $allPossibleParms, $this->allPossibleParms );
}
function GetProps( $serverAdmin )
{
$props = $serverAdmin->GetConfigurationProperties( $this->propSectionStr );
$prop = $props->GetItem( $this->enabledPropStr );
if ( $prop->GetValue() == "1" )
$this->enabled = true;
else
$this->enabled = false;
$prop = $props->GetItem( $this->filenamePropStr );
$this->filename = $prop->GetValue();
CleanUpPath( $this->filename );
$prop = $props->GetItem( $this->parmsPropStr );
$parmsStr = $prop->GetValue();
$this->parmsSelected = array();
$i = 0;
$parm = strtok( $parmsStr, "," );
while ( $parm !== false )
{
$parm = trim( $parm );
$this->parmsSelected[$i] = $parm;
$i++;
$parm = strtok(",");
}
$this->parmsNotSelected = array_diff( $this->allPossibleParms, $this->parmsSelected );
}
function ValidateProps()
{
global $errInvalidLogFilename;
if ( $this->enabled && empty( $this->filename ) )
throw new Exception( $errInvalidLogFilename );
}
function SetProps( $serverAdmin )
{
$props = new MgPropertyCollection();
if ( $this->enabled )
$propVal = "1";
else
$propVal = "0";
$prop = new MgStringProperty( $this->enabledPropStr, $propVal );
$props->Add( $prop );
$prop = new MgStringProperty( $this->filenamePropStr, $this->filename );
$props->Add( $prop );
$separator = "";
$parmStr = "";
foreach ( $this->parmsSelected as $parm )
{
$parmStr = $parmStr.$separator.$parm;
$separator = ", ";
}
$prop = new MgStringProperty( $this->parmsPropStr, $parmStr );
$props->Add( $prop );
$serverAdmin->SetConfigurationProperties( $this->propSectionStr, $props );
}
}
define( 'ACTIVE_LOG_STATUS', "Active" );
define( 'ARCHIVE_LOG_STATUS', "Archive" );
class LogFileRecord
{
var $type;
var $status;
function LogFileRecord( $type, $status )
{
$this->type = $type;
$this->status = $status;
}
}
$allLogFiles = NULL;
function GetAllLogFiles( $serverAdmin )
{
global $allLogFiles;
if ( $allLogFiles == NULL )
{
$allLogFiles = array();
$mgLogFilesPropertyCollection = $serverAdmin->EnumerateLogs();
$numLogFiles = $mgLogFilesPropertyCollection->GetCount();
for ( $i = 0; $i < $numLogFiles; $i+=3 )
{
$logFileName = "";
$logFileType = "";
$logFileStatus = "";
for ( $j = 0; $j < 3; $j++ )
{
$logFilePropName = $mgLogFilesPropertyCollection->GetItem( $i+$j )->GetName();
$logFilePropVal = $mgLogFilesPropertyCollection->GetItem( $i+$j )->GetValue();
if ( $logFilePropName == "LogNameProperty" )
$logFileName = $logFilePropVal;
else
if ( $logFilePropName == "LogTypeProperty" )
{
if ( $logFilePropVal == 'Access Log' )
$logFileType = ACCESS_LOG;
else
if ( $logFilePropVal == 'Admin Log' )
$logFileType = ADMIN_LOG;
else
if ( $logFilePropVal == 'Authentication Log' )
$logFileType = AUTHENTICATION_LOG;
else
if ( $logFilePropVal == 'Error Log' )
$logFileType = ERROR_LOG;
else
if ( $logFilePropVal == 'Session Log' )
$logFileType = SESSION_LOG;
else
if ( $logFilePropVal == 'Trace Log' )
$logFileType = TRACE_LOG;
}
else
if ( $logFilePropName == "LogStatusProperty" )
$logFileStatus = $logFilePropVal;
if ( !empty( $logFileName ) && !empty( $logFileType ) && !empty( $logFileStatus ) )
$allLogFiles[ $logFileName ] = new LogFileRecord( $logFileType, $logFileStatus );
}
}
}
return $allLogFiles;
}
function GetLogFiles( $serverAdmin, $targetLogType )
{
$allLogs = GetAllLogFiles( $serverAdmin );
$logFiles = array();
if ( $targetLogType == ACTIVE_LOGS )
{
foreach ( $allLogs as $logFileName => $logFileRec )
{
if ( $logFileRec->status == ACTIVE_LOG_STATUS )
$logFiles[] = $logFileName;
}
}
else
{
foreach ( $allLogs as $logFileName => $logFileRec )
{
if ( $logFileRec->status == ARCHIVE_LOG_STATUS && $logFileRec->type == $targetLogType )
$logFiles[] = $logFileName;
}
}
return $logFiles;
}
function GetActiveLogFilename( $serverAdmin, $targetLogType )
{
$allLogs = GetAllLogFiles( $serverAdmin );
$filename = "";
foreach ( $allLogs as $logFileName => $logFileRec )
{
if ( $logFileRec->status == ACTIVE_LOG_STATUS && $logFileRec->type == $targetLogType )
{
$filename = $logFileName;
break;
}
}
return $filename;
}
function LoadLogFileTable( &$targetTable, $firstIndex, $lastIndex, $serverAdmin, $targetLogType )
{
$allLogs = GetAllLogFiles( $serverAdmin );
$logFiles = GetLogFiles( $serverAdmin, $targetLogType );
// Load the table
$targetTable = array();
for ( $i = $firstIndex; $i <= $lastIndex; $i++ )
{
$logFileName = $logFiles[ $i ];
$targetTable[ $logFileName ] = $allLogs[ $logFileName ];
}
}
////// Packages //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Package Table record type
class PackageTableRecord
{
var $status;
function PackageTableRecord( $serverAdmin, $packageName )
{
global $errCannotGetPackageStatus;
$this->status = "";
try
{
$statusInfo = $serverAdmin->GetPackageStatus( $packageName );
$this->status = ( $statusInfo != NULL ) ? $statusInfo->GetStatusMessage() : "";
}
catch ( MgException $e )
{
$this->status = sprintf( $errCannotGetPackageStatus, $e->GetMessage() );
}
}
}
function GetPackagesFromDB( &$targetList )
{
global $site;
global $userInfo;
$serverAdmin = new MgServerAdmin();
$serverAdmin->Open( $userInfo );
// Call server to get comprehensive list of packages.
$packages = $serverAdmin->EnumeratePackages();
$serverAdmin->Close();
// Load table
$targetList = array();
$numPackages = $packages != NULL ? $packages->GetCount() : 0 ;
for ( $i = 0; $i < $numPackages; $i++ )
{
$targetList[] = $packages->GetItem( $i );
}
}
$packageList = NULL;
function GetPackageList()
{
global $packageList;
if ( $packageList == NULL )
GetPackagesFromDB( $packageList );
return $packageList;
}
function GetPackageCount()
{
$packages = GetPackageList();
return sizeof( $packages );
}
function DeletePackage( $packageName )
{
global $site;
global $userInfo;
global $packageList;
// Validate
$packages = GetPackageList();
if ( empty( $packageName ) || !in_array( $packageName, $packages ) )
return false;
// Delete the package
$serverAdmin = new MgServerAdmin();
$serverAdmin->Open( $userInfo );
$serverAdmin->DeletePackage( $packageName );
$serverAdmin->Close();
// Update local packageList array.
// Note that this is done rather than calling EnumeratePackages, again, because EnumeratePackages may take some time
// to execute.
$oldPackageList = array();
CopyArray( $packageList, $oldPackageList );
$packageList = array();
foreach ( $oldPackageList as $val )
{
if ( $val != $packageName )
$packageList[] = $val;
}
return true;
}
function LoadPackageTable( &$targetTable, $firstIndex, $lastIndex )
{
global $site;
global $userInfo;
$targetTable = array();
$packages = GetPackageList();
$serverAdmin = new MgServerAdmin();
$serverAdmin->Open( $userInfo );
$iPackage = -1;
foreach ( $packages as $val )
{
$iPackage++;
if ( $iPackage < $firstIndex )
continue;
if ( $iPackage > $lastIndex )
break;
$targetTable[ $val ] = new PackageTableRecord( $serverAdmin, $val );
}
$serverAdmin->Close();
}
////// WMS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
define( 'WMS_NAME_ITEM', "Service.Name");
define( 'WMS_TITLE_ITEM', "Service.Title");
define( 'WMS_FEES_ITEM', "Service.Fees");
define( 'WMS_ABSTRACT_ITEM', "Service.Abstract");
define( 'WMS_ACCESS_CONSTRAINTS_ITEM', "Service.AccessConstraints");
define( 'WMS_KEYWORDS_ITEM', "Service.Keywords");
define( 'WMS_SERVER_NAME_ITEM', "SERVER_NAME");
define( 'WMS_SCRIPT_NAME_ITEM', "SCRIPT_NAME");
define( 'WMS_CONTACT_NAME_ITEM', "Service.Contact.Name");
define( 'WMS_CONTACT_ORGANIZATION_ITEM', "Service.Contact.Organization");
define( 'WMS_CONTACT_POSITION_ITEM', "Service.Contact.Position");
define( 'WMS_CONTACT_ADDRESS_TYPE_ITEM', "Service.Contact.Address.Type");
define( 'WMS_CONTACT_ADDRESS_STREET_ITEM', "Service.Contact.Address.Street");
define( 'WMS_CONTACT_ADDRESS_CITY_ITEM', "Service.Contact.Address.City");
define( 'WMS_CONTACT_ADDRESS_STATE_PROV_ITEM', "Service.Contact.Address.StateProv");
define( 'WMS_CONTACT_ADDRESS_POST_CODE_ITEM', "Service.Contact.Address.PostCode");
define( 'WMS_CONTACT_ADDRESS_COUNTRY_ITEM', "Service.Contact.Address.Country");
define( 'WMS_CONTACT_PHONE_ITEM', "Service.Contact.Phone");
define( 'WMS_CONTACT_FAX_ITEM', "Service.Contact.Fax");
define( 'WMS_CONTACT_EMAIL_ITEM', "Service.Contact.Email");
$wmsServiceMetadataItems = array(
WMS_NAME_ITEM,
WMS_TITLE_ITEM,
WMS_FEES_ITEM,
WMS_ABSTRACT_ITEM,
WMS_ACCESS_CONSTRAINTS_ITEM,
WMS_KEYWORDS_ITEM,
WMS_SERVER_NAME_ITEM,
WMS_SCRIPT_NAME_ITEM,
WMS_CONTACT_NAME_ITEM,
WMS_CONTACT_ORGANIZATION_ITEM,
WMS_CONTACT_POSITION_ITEM,
WMS_CONTACT_ADDRESS_TYPE_ITEM,
WMS_CONTACT_ADDRESS_STREET_ITEM,
WMS_CONTACT_ADDRESS_CITY_ITEM,
WMS_CONTACT_ADDRESS_STATE_PROV_ITEM,
WMS_CONTACT_ADDRESS_POST_CODE_ITEM,
WMS_CONTACT_ADDRESS_COUNTRY_ITEM,
WMS_CONTACT_PHONE_ITEM,
WMS_CONTACT_FAX_ITEM,
WMS_CONTACT_EMAIL_ITEM );
class WMSPropsRecord
{
var $serviceMetadata;
var $keywords;
function WMSPropsRecord()
{
global $wmsServiceMetadataItems;
$this->serviceMetadata = array();
$this->keywords = array();
foreach ( $wmsServiceMetadataItems as $item )
$this->serviceMetadata[ $item ] = "";
}
function GetProps()
{
global $site;
global $userInfo;
global $errInvalidWMSFile;
// Get WMS reader
$serverAdmin = new MgServerAdmin();
$serverAdmin->Open( $userInfo );
$wmsReader = $serverAdmin->GetDocument( 'Wms:OgcWmsService.config' );
$serverAdmin->Close();
// Get WMS metadata
$wmsData = "";
$chunk = "";
do {
$chunkSize = $wmsReader->Read( $chunk, 4096 );
$wmsData = $wmsData.$chunk;
} while ( $chunkSize != 0 );
foreach ( $this->serviceMetadata as $serviceItem => $serviceVal )
{
$this->serviceMetadata[ $serviceItem ] = "";
$itemPos = strpos( $wmsData, $serviceItem );
if ( $itemPos === false )
throw new Exception( $errInvalidWMSFile );
$valStartPos = strpos( $wmsData, '>', $itemPos );
$valEndPos = strpos( $wmsData, '', $itemPos );
if ( $valStartPos === false || $valEndPos === false || $valStartPos >= $valEndPos )
throw new Exception( $errInvalidWMSFile );
$this->serviceMetadata[ $serviceItem ] = substr( $wmsData, $valStartPos + 1, $valEndPos - $valStartPos - 1 );
}
$this->keywords = array();
if ( !empty( $this->serviceMetadata[ WMS_KEYWORDS_ITEM ] ) )
{
$keywordsStr = $this->serviceMetadata[ WMS_KEYWORDS_ITEM ];
$keywordStart = strpos( $keywordsStr, '- ' );
$keywordEnd = strpos( $keywordsStr, '
' );
while ( $keywordStart !== false && $keywordEnd !== false && ($keywordStart + 6) < $keywordEnd )
{
$keywordStart += 6; // Length of '- '
$this->keywords[] = substr( $keywordsStr, $keywordStart, $keywordEnd - $keywordStart );
$keywordEnd += 7; // Length of '
'
$keywordStart = strpos( $keywordsStr, '- ', $keywordEnd );
$keywordEnd = strpos( $keywordsStr, '
', $keywordEnd );
}
}
}
function ValidateProps()
{
$xmlReservedChars = '"\'&<>\\';
foreach ( $this->serviceMetadata as $item => $val )
if ( strcspn( $val, $xmlReservedChars ) != strlen( $val ) )
throw new Exception ( "Value ".$val." contains invalid character(s) (\"'&<>\\)." );
}
function SetProps()
{
global $site;
global $userInfo;
global $errInvalidWMSFile;
// Get WMS reader
$serverAdmin = new MgServerAdmin();
$serverAdmin->Open( $userInfo );
$wmsReader = $serverAdmin->GetDocument( 'Wms:OgcWmsService.config' );
// Set WMS metadata
$wmsData = "";
$chunk = "";
do {
$chunkSize = $wmsReader->Read( $chunk, 4096 );
$wmsData = $wmsData.$chunk;
} while ( $chunkSize != 0 );
$keywordsStr = "";
foreach( $this->keywords as $keyword )
$keywordsStr = $keywordsStr.'- '.$keyword.'
';
$this->serviceMetadata[ WMS_KEYWORDS_ITEM ] = $keywordsStr;
foreach ( $this->serviceMetadata as $serviceItem => $serviceVal )
{
$itemPos = strpos( $wmsData, $serviceItem );
if ( $itemPos === false )
throw new Exception( $errInvalidWMSFile );
$valStartPos = strpos( $wmsData, '>', $itemPos );
$valEndPos = strpos( $wmsData, '', $itemPos );
if ( $valStartPos === false || $valEndPos === false || $valStartPos >= $valEndPos )
throw new Exception( $errInvalidWMSFile );
$wmsData = substr_replace( $wmsData, $serviceVal, $valStartPos + 1, $valEndPos - $valStartPos - 1 );
}
// Save wms config
$wmsByteSource = new MgByteSource( $wmsData, strlen( $wmsData ) );
$wmsByteSource->SetMimeType( $wmsReader->GetMimeType() );
$serverAdmin->SetDocument( 'Wms:OgcWmsService.config', $wmsByteSource->GetReader() );
$serverAdmin->Close();
}
}
////// WFS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
define( 'WFS_NAME_ITEM', "Service.Name");
define( 'WFS_TITLE_ITEM', "Service.Title");
define( 'WFS_FEES_ITEM', "Service.Fees");
define( 'WFS_ABSTRACT_ITEM', "Service.Abstract");
define( 'WFS_ACCESS_CONSTRAINTS_ITEM', "Service.AccessConstraints");
define( 'WFS_KEYWORDS_ITEM', "Service.Keywords");
define( 'WFS_SERVER_NAME_ITEM', "SERVER_NAME");
define( 'WFS_SCRIPT_NAME_ITEM', "SCRIPT_NAME");
define( 'WFS_CONTACT_NAME_ITEM', "Service.Contact.Name");
define( 'WFS_CONTACT_ORGANIZATION_ITEM', "Service.Contact.Organization");
define( 'WFS_CONTACT_POSITION_ITEM', "Service.Contact.Position");
define( 'WFS_CONTACT_ADDRESS_TYPE_ITEM', "Service.Contact.Address.Type");
define( 'WFS_CONTACT_ADDRESS_STREET_ITEM', "Service.Contact.Address.Street");
define( 'WFS_CONTACT_ADDRESS_CITY_ITEM', "Service.Contact.Address.City");
define( 'WFS_CONTACT_ADDRESS_STATE_PROV_ITEM', "Service.Contact.Address.StateProv");
define( 'WFS_CONTACT_ADDRESS_POST_CODE_ITEM', "Service.Contact.Address.PostCode");
define( 'WFS_CONTACT_ADDRESS_COUNTRY_ITEM', "Service.Contact.Address.Country");
define( 'WFS_CONTACT_PHONE_ITEM', "Service.Contact.Phone");
define( 'WFS_CONTACT_FAX_ITEM', "Service.Contact.Fax");
define( 'WFS_CONTACT_EMAIL_ITEM', "Service.Contact.Email");
$wfsServiceMetadataItems = array(
WFS_NAME_ITEM,
WFS_TITLE_ITEM,
WFS_FEES_ITEM,
WFS_ABSTRACT_ITEM,
WFS_ACCESS_CONSTRAINTS_ITEM,
WFS_KEYWORDS_ITEM,
WFS_SERVER_NAME_ITEM,
WFS_SCRIPT_NAME_ITEM,
WFS_CONTACT_NAME_ITEM,
WFS_CONTACT_ORGANIZATION_ITEM,
WFS_CONTACT_POSITION_ITEM,
WFS_CONTACT_ADDRESS_TYPE_ITEM,
WFS_CONTACT_ADDRESS_STREET_ITEM,
WFS_CONTACT_ADDRESS_CITY_ITEM,
WFS_CONTACT_ADDRESS_STATE_PROV_ITEM,
WFS_CONTACT_ADDRESS_POST_CODE_ITEM,
WFS_CONTACT_ADDRESS_COUNTRY_ITEM,
WFS_CONTACT_PHONE_ITEM,
WFS_CONTACT_FAX_ITEM,
WFS_CONTACT_EMAIL_ITEM);
class WFSPropsRecord
{
var $serviceMetadata;
var $keywords;
function WFSPropsRecord()
{
global $wfsServiceMetadataItems;
$this->serviceMetadata = array();
$this->keywords = array();
foreach ( $wfsServiceMetadataItems as $item )
$this->serviceMetadata[ $item ] = "";
}
function GetProps()
{
global $site;
global $userInfo;
global $errInvalidWFSFile;
// Get WFS reader
$serverAdmin = new MgServerAdmin();
$serverAdmin->Open( $userInfo );
$wfsReader = $serverAdmin->GetDocument( 'Wfs:OgcWfsService.config' );
$serverAdmin->Close();
// Get WFS metadata
$wfsData = "";
$chunk = "";
do {
$chunkSize = $wfsReader->Read( $chunk, 4096 );
$wfsData = $wfsData.$chunk;
} while ( $chunkSize != 0 );
foreach ( $this->serviceMetadata as $serviceItem => $serviceVal )
{
$this->serviceMetadata[ $serviceItem ] = "";
$itemPos = strpos( $wfsData, $serviceItem );
if ( $itemPos === false )
throw new Exception( $errInvalidWFSFile );
$valStartPos = strpos( $wfsData, '>', $itemPos );
$valEndPos = strpos( $wfsData, '', $itemPos );
if ( $valStartPos === false || $valEndPos === false || $valStartPos >= $valEndPos )
throw new Exception( $errInvalidWFSFile );
$this->serviceMetadata[ $serviceItem ] = substr( $wfsData, $valStartPos + 1, $valEndPos - $valStartPos - 1 );
}
$this->keywords = array();
if ( !empty( $this->serviceMetadata[ WFS_KEYWORDS_ITEM ] ) )
{
$keywordsStr = $this->serviceMetadata[ WFS_KEYWORDS_ITEM ];
$keywordStart = strpos( $keywordsStr, '- ' );
$keywordEnd = strpos( $keywordsStr, '
' );
while ( $keywordStart !== false && $keywordEnd !== false && ($keywordStart + 6) < $keywordEnd )
{
$keywordStart += 6; // Length of '- '
$this->keywords[] = substr( $keywordsStr, $keywordStart, $keywordEnd - $keywordStart );
$keywordEnd += 7; // Length of '
'
$keywordStart = strpos( $keywordsStr, '- ', $keywordEnd );
$keywordEnd = strpos( $keywordsStr, '
', $keywordEnd );
}
}
}
function ValidateProps()
{
$xmlReservedChars = '"\'&<>\\';
foreach ( $this->serviceMetadata as $item => $val )
if ( strcspn( $val, $xmlReservedChars ) != strlen( $val ) )
throw new Exception ( "Value ".$val." contains invalid character(s) (\"'&<>\\)." );
}
function SetProps()
{
global $site;
global $userInfo;
global $errInvalidWFSFile;
// Get WFS reader
$serverAdmin = new MgServerAdmin();
$serverAdmin->Open( $userInfo );
$wfsReader = $serverAdmin->GetDocument( 'Wfs:OgcWfsService.config' );
// Set WFS metadata
$wfsData = "";
$chunk = "";
do {
$chunkSize = $wfsReader->Read( $chunk, 4096 );
$wfsData = $wfsData.$chunk;
} while ( $chunkSize != 0 );
$keywordsStr = "";
foreach( $this->keywords as $keyword )
$keywordsStr = $keywordsStr.'- '.$keyword.'
';
$this->serviceMetadata[ WFS_KEYWORDS_ITEM ] = $keywordsStr;
foreach ( $this->serviceMetadata as $serviceItem => $serviceVal )
{
$itemPos = strpos( $wfsData, $serviceItem );
if ( $itemPos === false )
throw new Exception( $errInvalidWFSFile );
$valStartPos = strpos( $wfsData, '>', $itemPos );
$valEndPos = strpos( $wfsData, '', $itemPos );
if ( $valStartPos === false || $valEndPos === false || $valStartPos >= $valEndPos )
throw new Exception( $errInvalidWFSFile );
$wfsData = substr_replace( $wfsData, $serviceVal, $valStartPos + 1, $valEndPos - $valStartPos - 1 );
}
// Save wfs config
$wfsByteSource = new MgByteSource( $wfsData, strlen( $wfsData ) );
$wfsByteSource->SetMimeType( $wfsReader->GetMimeType() );
$serverAdmin->SetDocument( 'Wfs:OgcWfsService.config', $wfsByteSource->GetReader() );
$serverAdmin->Close();
}
}
?>