Files
IPB/applications/nexus/sources/Hosting/Account.php
T
2025-12-19 05:44:59 -08:00

457 lines
8.8 KiB
PHP

<?php
/**
* @brief Hosting Account Model
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
* @copyright (c) Invision Power Services, Inc.
* @license https://www.invisioncommunity.com/legal/standards/
* @package Invision Community
* @subpackage Nexus
* @since 6 Aug 2014
*/
namespace IPS\nexus\Hosting;
/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
exit;
}
/**
* Account Account Model
*/
class _Account extends \IPS\Patterns\ActiveRecord
{
/* !ActiveRecord */
/**
* @brief [ActiveRecord] Multiton Store
*/
protected static $multitons;
/**
* @brief [ActiveRecord] Database Table
*/
public static $databaseTable = 'nexus_hosting_accounts';
/**
* @brief [ActiveRecord] ID Database Column
*/
public static $databaseColumnId = 'ps_id';
/**
* Construct ActiveRecord from database row
*
* @param array $data Row from database table
* @param bool $updateMultitonStoreIfExists Replace current object in multiton store if it already exists there?
* @return static
*/
public static function constructFromData( $data, $updateMultitonStoreIfExists = TRUE )
{
/* Initiate an object */
$classname = 'IPS\\nexus\Hosting\\' . ucfirst( \IPS\nexus\Hosting\Server::load( $data['account_server'] )->type ) . '\\Account';
$obj = new $classname;
$obj->_new = FALSE;
/* Import data */
foreach ( $data as $k => $v )
{
if( static::$databasePrefix )
{
$k = \substr( $k, \strlen( static::$databasePrefix ) );
}
$obj->_data[ $k ] = $v;
}
$obj->changed = array();
/* Return */
return $obj;
}
/**
* Set Default Values
*
* @return void
*/
public function setDefaultValues()
{
/* Set a random password */
$password = '';
foreach ( range( 1, 20 ) as $j )
{
do
{
$chr = rand( 33, 122 );
}
while ( in_array( $chr, array( 38, 43, 47, 64, 92, 93, 94 ) ) );
$password .= chr( $chr );
}
$this->password = $password;
/* By default the account exists */
$this->exists = TRUE;
}
/**
* Set Server
*
* @param \IPS\nexus\Hosting\Server $server The server
* @return void
*/
public function set_server( \IPS\nexus\Hosting\Server $server )
{
$this->_data['account_server'] = $server->id;
}
/**
* Get Server
*
* @return \IPS\nexus\Hosting\Server
*/
public function get_server()
{
return \IPS\nexus\Hosting\Server::load( $this->_data['account_server'] );
}
/**
* Set Domain
*
* @param string $domain The domain
* @return void
*/
public function set_domain( $domain )
{
$this->_data['account_domain'] = mb_strtolower( $domain );
}
/**
* Get Domain
*
* @return string
*/
public function get_domain()
{
return $this->_data['account_domain'];
}
/**
* Set Username
*
* @param string $username The username
* @return void
*/
public function set_username( $username )
{
$this->_data['account_username'] = $username;
}
/**
* Get Username
*
* @return string
*/
public function get_username()
{
return $this->_data['account_username'];
}
/**
* Set Password
*
* @param string $password The password
* @return void
*/
public function set_password( $password )
{
$this->_data['account_password'] = \IPS\Text\Encrypt::fromPlaintext( $password )->tag();
}
/**
* Get Password
*
* @return string
*/
public function get_password()
{
return \IPS\Text\Encrypt::fromTag( $this->_data['account_password'] )->decrypt();
}
/**
* Set If Account Exists
*
* @param bool $exists If the account exists
* @return void
*/
public function set_exists( $exists )
{
$this->_data['account_exists'] = intval( $exists );
}
/**
* Get If Account Exists
*
* @return bool
*/
public function get_exists()
{
return (bool) $this->_data['account_exists'];
}
/**
* Get Purchase
*
* @return \IPS\nexus\Purchase
*/
public function purchase()
{
return \IPS\nexus\Purchase::load( $this->_data['ps_id'] );
}
/* !Account */
/**
* Get FTP Link
*
* @return \IPS\Http\Url
*/
public function ftpLink()
{
return \IPS\Http\Url::external( 'ftp://' . $this->username . ':' . urlencode( $this->password ) . '@' . $this->server->hostname );
}
/* !abstract */
/**
* Create
*
* @param \IPS\nexus\Package\Hosting $package The package
* @param \IPS\nexus\Customer $customer The customer
* @return void
*/
public function create( \IPS\nexus\Package\Hosting $package, \IPS\nexus\Customer $customer )
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Get diskspace allowance (in bytes)
*
* @return int|NULL
*/
public function diskspaceAllowance()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Get diskspace currently in use (in bytes)
*
* @return int
*/
public function diskspaceInUse()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Get monthly bandwidth allowance (in bytes)
*
* @return int|NULL
*/
public function monthlyBandwidthAllowance()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Get bandwidth used this month (in bytes)
*
* @return int
*/
public function bandwidthUsedThisMonth()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Get max FTP accounts
*
* @return int|NULL
*/
public function maxFtpAccounts()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Get max databases
*
* @return int|NULL
*/
public function maxDatabases()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Get max email accounts
*
* @return int|NULL
*/
public function maxEmailAccounts()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Get max mailing lists
*
* @return int|NULL
*/
public function maxMailingLists()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Get max subdomains
*
* @return int|NULL
*/
public function maxSubdomains()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Get max parked domains
*
* @return int|NULL
*/
public function maxParkedDomains()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Get max addon domains
*
* @return int|NULL
*/
public function maxAddonDomains()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Has SSH access?
*
* @return int|NULL
*/
public function hasSSHAccess()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Get Control Panel Link
*
* @return \IPS\Http\Url
*/
public function controlPanelLink()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Change Domain
*
* @param string $domain New Domain
* @param bool $keepOld If true, will park this domain, keeping the old domain as the main domain (rather than just changing the main domain)
* @return void
*/
public function changeDomain( $domain, $park=FALSE )
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Edit Priviledges
*
* @param array $values Values from form
* @return void
*/
public function edit( $values )
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Change bandwidth limit
*
* @param float $newLimit New Limit (in bytes)
* @param string|NULL $username Username. Only needed if has been changed on server but not locally
* @return void
*/
public function changeBandwidthLimit( $newLimit, $username = NULL )
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Change Password
*
* @param string $newPassword New Password
* @param string|NULL $username Username. Only needed if has been changed on server but not locally
* @return void
*/
public function changePassword( $newPassword, $username = NULL )
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Park a domain
*
* @param string $domain Domain to be parked
* @return void
*/
public function parkDomain( $domain )
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Suspend
*
* @return void
*/
public function suspend()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Unsuspend
*
* @return void
*/
public function unsuspend()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
/**
* Terminate
*
* @return void
*/
public function terminate()
{
throw new \IPS\nexus\Hosting\Exception( $this, 'DUMMY_SERVER' );
}
}