Pushing the new v3.x.x series WHMCS WebsitePanel module
This commit is contained in:
parent
bb873be496
commit
a9263bc903
17 changed files with 1895 additions and 1707 deletions
26
WebsitePanel.WHMCSModule/changelog.html
Normal file
26
WebsitePanel.WHMCSModule/changelog.html
Normal file
|
@ -0,0 +1,26 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>WHMCS WebsitePanel Server Module / Addons</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>WHMCS WebsitePanel Server Module</h1>
|
||||
<p style="color: #FF0000">DO NOT CONTACT WHMCS FOR SUPPORT WITH THIS MODULE</p>
|
||||
<h3>Changelog / Updates</h3>
|
||||
<p>2-23-2014 (v3.0.2)</p>
|
||||
<ul>
|
||||
<li>HTTP communications now support GZIP compression (enabled by default)</li>
|
||||
</ul>
|
||||
<p>2-22-2014 (v3.0.1)</p>
|
||||
<ul>
|
||||
<li>Usage calculation now works with multiple WebsitePanel ES installations</li>
|
||||
<li>Large amount of refactoring</li>
|
||||
<li>Addon hooks (WSP Addons and WSP Client Sync) now execute only when the addon is activated</li>
|
||||
<li>Improved logging</li>
|
||||
<li>Client area "one-click login" is now a POST form instead of a link. Credentials are no longer passed through a standard HREF link</li>
|
||||
<li>Admin area "one-click login" is now a link directly to the WebsitePanel account rather than a login link to WebsitePanel</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
|
@ -1,6 +0,0 @@
|
|||
04/16/2013 (1.3)
|
||||
* Some refactoring done
|
||||
|
||||
01/29/2013 (1.2)
|
||||
* WebsitePanel addons no longer require the storage of the Enterprise Server credentials
|
||||
* Error codes are not properly resolved to their text responses
|
14
WebsitePanel.WHMCSModule/how-to-upgrade.html
Normal file
14
WebsitePanel.WHMCSModule/how-to-upgrade.html
Normal file
|
@ -0,0 +1,14 @@
|
|||
<title>WHMCS WebsitePanel Server Module / Addons</title>
|
||||
<h1>WHMCS WebsitePanel Server Module</h1>
|
||||
<p style="color: #FF0000">DO NOT CONTACT WHMCS FOR SUPPORT WITH THIS MODULE</p>
|
||||
<h3>Update from the previous available version... (The version prior to 2-23-2014)</h3>
|
||||
<ol>
|
||||
<li><strong>Backup all files / directories before deleting!!</strong></li>
|
||||
<li> Delete includes/hooks/websitepanel_sync.php</li>
|
||||
<li>Delete includes/hooks/websitepanel_addons.php</li>
|
||||
<li> Delete modules/servers/websitepanel</li>
|
||||
<li>Delete modules/addons/websitepanel_sync</li>
|
||||
<li>Delete modules/addons/websitepanel_addons</li>
|
||||
<li>Upload the contents of the ZIP to your WHMCS root</li>
|
||||
</ol>
|
||||
<p>All new files should have version 3.x.x listed in their headers</p>
|
|
@ -1,137 +0,0 @@
|
|||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/**
|
||||
* WebsitePanel Addons Hook
|
||||
*
|
||||
* @author Christopher York
|
||||
* @package WebsitePanel Addons Hook
|
||||
* @version v1.0
|
||||
* @link http://www.websitepanel.net/
|
||||
*/
|
||||
|
||||
/**
|
||||
* websitepanel_addons_AddonActivation
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_addons_AddonActivation($params)
|
||||
{
|
||||
// Sanity check to make sure the associated service is WebsitePanel based product
|
||||
// And that the addon purchased has an associated WebsitePanel addon
|
||||
$results = full_query("SELECT h.id AS `id` FROM `tblhosting` AS h, `mod_wspaddons` AS w, `tblservers` AS s WHERE h.id = {$params['serviceid']} AND h.server = s.id AND s.type = 'websitepanel' AND w.whmcs_id = {$params['addonid']}");
|
||||
if (mysql_num_rows($results) > 0)
|
||||
{
|
||||
// Include the WebsitePanel ES Class
|
||||
require_once(ROOTDIR . '/modules/servers/websitepanel/websitepanel.class.php');
|
||||
require_once(ROOTDIR . '/modules/servers/websitepanel/websitepanel.functions.php');
|
||||
|
||||
// Retrieve the WebsitePanel Addons module settings
|
||||
$modSettings = websitepanel_addons_GetSettings();
|
||||
$srvSettings = websitepanel_GetServerSettings();
|
||||
if (empty($modSettings['serverhost']) || empty($modSettings['serverport']) || empty($srvSettings['username']) || empty($srvSettings['password']))
|
||||
{
|
||||
// The module is disabled or has not yet been configured - stop
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the associated WebsitePanel username from WHMCS
|
||||
$results = select_query('tblhosting', 'username', array('id' => $params['serviceid']));
|
||||
$username = mysql_fetch_array($results);
|
||||
$username = $username['username'];
|
||||
if (empty($username))
|
||||
{
|
||||
// The username is required - if missing we cannot continue
|
||||
return;
|
||||
}
|
||||
|
||||
// Create the WebsitePanel object instance
|
||||
$wsp = new WebsitePanel($srvSettings['username'], $srvSettings['password'], $modSettings['serverhost'], $modSettings['serverport'], (($modSettings['serversecured']) == 'on' ? TRUE : FALSE));
|
||||
|
||||
// Grab the user's details from WebsitePanel in order to get the user's id
|
||||
$user = $wsp->getUserByUsername($username);
|
||||
if (empty($user))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the user's current WebsitePanel hosting space Id (Hosting Plan)
|
||||
$package = $wsp->getUserPackages($user['UserId']);
|
||||
$packageId = $package['PackageId'];
|
||||
if (empty($packageId))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the associated WebsitePanel addon id
|
||||
$results = select_query('mod_wspaddons', 'wsp_id,is_ipaddress', array('whmcs_id' => $params['addonid']));
|
||||
$addon = mysql_fetch_array($results);
|
||||
$addonPlanId = $addon['wsp_id'];
|
||||
$addonIsIpAddress = $addon['is_ipaddress'];
|
||||
|
||||
// Add the Addon Plan to the customer's WebsitePanel package / hosting space
|
||||
$results = $wsp->addPackageAddonById($packageId, $addonPlanId);
|
||||
|
||||
// Check the results to verify that the addon has been successfully allocated
|
||||
if ($results['Result'] > 0)
|
||||
{
|
||||
// If this addon is an IP address addon - attempt to randomly allocate an IP address to the customer's hosting space
|
||||
if ($addonIsIpAddress)
|
||||
{
|
||||
$wsp->packageAllocateIpAddress($packageId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Addon Activation - WebsitePanel */
|
||||
add_hook('AddonActivation', 1, 'websitepanel_addons_AddonActivation');
|
||||
|
||||
/* Addon Activation - WebsitePanel */
|
||||
add_hook('AddonActivated', 1, 'websitepanel_addons_AddonActivation');
|
||||
|
||||
/**
|
||||
* websitepanel_addons_GetSettings
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_addons_GetSettings()
|
||||
{
|
||||
$settings = array();
|
||||
|
||||
// Retrieve the settings from the modules configuration table
|
||||
$results = select_query('tbladdonmodules', 'setting,value', array('module' => 'websitepanel_addons'));
|
||||
while (($row = mysql_fetch_array($results)) != false)
|
||||
{
|
||||
$settings[$row[0]] = $row[1];
|
||||
}
|
||||
return $settings;
|
||||
}
|
|
@ -1,114 +0,0 @@
|
|||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/**
|
||||
* WebsitePanel Sync Hook
|
||||
*
|
||||
* @author Christopher York
|
||||
* @package WebsitePanel Sync Hook
|
||||
* @version v1.0
|
||||
* @link http://www.websitepanel.net/
|
||||
*/
|
||||
|
||||
/**
|
||||
* websitepanel_sync_ClientEdit
|
||||
*
|
||||
* @access public
|
||||
* @param array $params
|
||||
*/
|
||||
function websitepanel_sync_ClientEdit($params)
|
||||
{
|
||||
// Sanity check - Check if client has any active WebsitePanel hosting packages
|
||||
$results = full_query("SELECT h.userid AS `userid` FROM `tblhosting` AS h, `tblservers` AS s WHERE h.userid = {$params['userid']} AND h.server = s.id AND s.type = 'websitepanel'");
|
||||
if (mysql_num_rows($results) > 0)
|
||||
{
|
||||
// Include the WebsitePanel ES Class
|
||||
require_once(ROOTDIR . '/modules/servers/websitepanel/websitepanel.class.php');
|
||||
require_once(ROOTDIR . '/modules/servers/websitepanel/websitepanel.functions.php');
|
||||
|
||||
// Retrieve the WebsitePanel Addons module settings
|
||||
$modSettings = websitepanel_sync_GetSettings();
|
||||
$srvSettings = websitepanel_GetServerSettings();
|
||||
if (empty($modSettings['serverhost']) || empty($modSettings['serverport']) || empty($srvSettings['username']) || empty($srvSettings['password']))
|
||||
{
|
||||
// The module is disabled or has not yet been configured - stop
|
||||
return;
|
||||
}
|
||||
|
||||
// Create the WebsitePanel object instance
|
||||
$wsp = new WebsitePanel($srvSettings['username'], $srvSettings['password'], $modSettings['serverhost'], $modSettings['serverport'], (($modSettings['serversecured']) == 'on' ? TRUE : FALSE));
|
||||
|
||||
// Get all WSP users with the old email
|
||||
$items = (array)$wsp->getUsersPagedRecursive(1, 'Email', $params['olddata']['email'], 0, 0, '');
|
||||
|
||||
// Load / parse the XML response
|
||||
$xml = simplexml_load_string($items['any']);
|
||||
$rootPath = $xml->NewDataSet;
|
||||
|
||||
// Total number of elements to update
|
||||
$total = $rootPath->Table->Column1;
|
||||
|
||||
// Begin updating WebsitePanel accounts
|
||||
for ($i = 0; $i < $total; $i++)
|
||||
{
|
||||
// Set the current root element and get the users details from WebsitePanel
|
||||
// We cannot use the details provided by the get_users_paged_recursive method as it does not return all the required elements to fully update the user
|
||||
$currentRoot = $rootPath->Table1->$i;
|
||||
$userDetails = (array)$wsp->getUserByUsername($currentRoot->Username);
|
||||
|
||||
// Update the current user
|
||||
$wsp->updateUserDetails($userDetails['RoleId'], (($userDetails['RoleId'] == 2) ? 'Reseller' : 'User'), $userDetails['StatusId'], $userDetails['Status'], $userDetails['LoginStatusId'], $userDetails['LoginStatus'], $userDetails['FailedLogins'], $userDetails['UserId'], $userDetails['OwnerId'], $userDetails['Created'], $userDetails['Changed'], $userDetails['IsDemo'], $userDetails['IsPeer'], $currentRoot->Comments, $userDetails['Username'], $userDetails['Password'], $params['firstname'], $params['lastname'], $params['email'], $params['phonenumber'], $params['postcode'], '', '', '', '', $params['country'], $params['address1'] . (!empty($params['address2']) ? " {$params['address2']}" : ''), $params['city'], $params['state'], TRUE, $params['companyname'], (($userDetails['RoleId'] == 2) ? TRUE : FALSE));
|
||||
|
||||
// Add log entry to client log
|
||||
logactivity("WebsitePanel Sync - Account {$currentRoot->Username} contact details updated successfully", $params['userid']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Update Client Contact Details - WebsitePanel */
|
||||
add_hook('ClientEdit', 1, 'websitepanel_sync_ClientEdit');
|
||||
|
||||
/**
|
||||
* websitepanel_addons_GetSettings
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_sync_GetSettings()
|
||||
{
|
||||
$settings = array();
|
||||
|
||||
// Retrieve the settings from the modules configuration table
|
||||
$results = select_query('tbladdonmodules', 'setting,value', array('module' => 'websitepanel_sync'));
|
||||
while (($row = mysql_fetch_array($results)) != false)
|
||||
{
|
||||
$settings[$row['setting']] = $row['value'];
|
||||
}
|
||||
return $settings;
|
||||
}
|
|
@ -0,0 +1,128 @@
|
|||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
// WebsitePanel server module core files
|
||||
require_once(ROOTDIR. '/modules/servers/websitepanel/enterpriseserver.php');
|
||||
|
||||
/**
|
||||
* WebsitePanel Enterprise Server Client
|
||||
*
|
||||
* @author Christopher York
|
||||
* @link http://www.websitepanel.net/
|
||||
* @access public
|
||||
* @name websitepanel_EnterpriseServer
|
||||
* @version 3.0.2
|
||||
* @package WHMCS
|
||||
* @final
|
||||
*/
|
||||
|
||||
/**
|
||||
* Handles activating and adding client addons to WebsitePanel
|
||||
*
|
||||
* @access public
|
||||
* @param array $params WHMCS parameters
|
||||
* @throws Exception
|
||||
*/
|
||||
function websitepanel_addons_AddonActivation($params)
|
||||
{
|
||||
// WHMCS server parameters & package parameters
|
||||
$userId = $params['userid'];
|
||||
$serviceId = $params['serviceid'];
|
||||
$addonId = $params['addonid'];
|
||||
|
||||
$result = full_query("SELECT h.username AS username, s.ipaddress AS serverip, s.hostname AS serverhostname, s.secure AS serversecure, s.username AS serverusername, s.password AS serverpassword, p.configoption6 AS configoption6, h.id AS serviceid FROM `tblhosting` AS h, `tblservers` AS s, `tblproducts` AS p, `mod_wspaddons` AS w WHERE h.packageid = p.id AND w.whmcs_id = {$addonId} AND h.id = {$serviceId} AND h.server = s.id AND s.type = 'websitepanel'");
|
||||
if (mysql_num_rows($result) > 0)
|
||||
{
|
||||
// Get the results of the query
|
||||
$row = mysql_fetch_assoc($result);
|
||||
|
||||
// Start processing the users addon
|
||||
$username = $row['username'];
|
||||
$serverUsername = $row['serverusername'];
|
||||
$serverPassword = decrypt($row['serverpassword']);
|
||||
$serverPort = $row['configoption6'];
|
||||
$serverHost = empty($row['serverhostname']) ? $row['serverip'] : $row['serverhostname'];
|
||||
$serverSecure = $row['serversecure'] == 'on' ? TRUE : FALSE;
|
||||
|
||||
try
|
||||
{
|
||||
// Create the WebsitePanel Enterprise Server Client object instance
|
||||
$wsp = new websitepanel_EnterpriseServer($serverUsername, $serverPassword, $serverHost, $serverPort, $serverSecure);
|
||||
|
||||
// Get the user's details from WebsitePanel - We need the UserId
|
||||
$user = $wsp->getUserByUsername($username);
|
||||
if (empty($user))
|
||||
{
|
||||
throw new Exception("User {$username} does not exist - Cannot allocate addon for unknown user");
|
||||
}
|
||||
|
||||
// Get the user's package details from WebsitePanel - We need the PackageId
|
||||
$package = $wsp->getUserPackages($user['UserId']);
|
||||
$packageId = $package['PackageId'];
|
||||
|
||||
// Get the associated WebsitePanel addon id
|
||||
$results = select_query('mod_wspaddons', 'wsp_id,is_ipaddress', array('whmcs_id' => $addonId));
|
||||
$addon = mysql_fetch_array($results);
|
||||
$addonPlanId = $addon['wsp_id'];
|
||||
$addonIsIpAddress = $addon['is_ipaddress'];
|
||||
|
||||
// Add the Addon Plan to the customer's WebsitePanel package / hosting space
|
||||
$results = $wsp->addPackageAddonById($packageId, $addonPlanId);
|
||||
|
||||
// Check the results to verify that the addon has been successfully allocated
|
||||
if ($results['Result'] > 0)
|
||||
{
|
||||
// If this addon is an IP address addon - attempt to randomly allocate an IP address to the customer's hosting space
|
||||
if ($addonIsIpAddress)
|
||||
{
|
||||
$wsp->allocatePackageIPAddresses($packageId);
|
||||
}
|
||||
|
||||
// Add log entry to client log
|
||||
logactivity("WebsitePanel Addon - Account {$username} addon successfully completed - Addon ID: {$addonId}", $userId);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Add log entry to client log
|
||||
throw new Exception("Unknown", $results['Result']);
|
||||
}
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
// Error message to log / return
|
||||
$errorMessage = "websitepanel_addons_AddonActivation Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}, Service ID: {$serviceId})";
|
||||
|
||||
// Log to WHMCS
|
||||
logactivity($errorMessage, $userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Addon Activation - WebsitePanel */
|
||||
add_hook('AddonActivation', 1, 'websitepanel_addons_AddonActivation');
|
|
@ -1,197 +1,195 @@
|
|||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/**
|
||||
* WebsitePanel Addons Addon Module
|
||||
*
|
||||
* @author Christopher York
|
||||
* @package WebsitePanel Addons Addon Module
|
||||
* @version v1.0
|
||||
* @link http://www.websitepanel.net/
|
||||
*/
|
||||
|
||||
/**
|
||||
* websitepanel_addons_config
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_addons_config()
|
||||
{
|
||||
$configarray = array('name' => 'WebsitePanel Addons Automation',
|
||||
'description' => 'Automates WHMCS product addons with WebsitePanel',
|
||||
'version' => '1.2',
|
||||
'author' => 'Christopher York',
|
||||
'fields' => array('serverhost' => array('FriendlyName', 'Enterprise Server Host', 'Type' => 'text', 'Size' => 25, 'Description' => 'Enterprise Server hostname / IP address', 'Default' => '127.0.0.1'),
|
||||
'serverport' => array('FriendlyName', 'Enterprise Server Port', 'Type' => 'text', 'Size' => 4, 'Description' => 'Enterprise Server port', 'Default' => 9002),
|
||||
'serversecured' => array('FriendlyName', 'Use Secured Connection', 'Type' => 'yesno', 'Description' => 'Tick to use SSL secured connection'),
|
||||
)
|
||||
);
|
||||
return $configarray;
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_addons_activate
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_addons_activate()
|
||||
{
|
||||
// Create the WebsitePanel Addons table
|
||||
$query = "CREATE TABLE `mod_wspaddons` (
|
||||
`whmcs_id` int(11) NOT NULL,
|
||||
`wsp_id` int(11) NOT NULL,
|
||||
`is_ipaddress` bit(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`whmcs_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
|
||||
$result = full_query($query);
|
||||
|
||||
// Check the results to verify that the table has been created properly
|
||||
if (!$result)
|
||||
{
|
||||
return array('status' => 'error', 'description' => 'There was an error while activating the module');
|
||||
}
|
||||
else
|
||||
{
|
||||
return array('status' => 'success', 'description' => 'The module has been activated successfully');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_addons_deactivate
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_addons_deactivate()
|
||||
{
|
||||
// Drop the WebsitePanel Addons table
|
||||
$result = full_query('DROP TABLE `mod_wspaddons`');
|
||||
|
||||
// Check the results to verify that the table has been created properly
|
||||
if (!$result)
|
||||
{
|
||||
return array('status' => 'error', 'description' => 'There was an error while deactiviting the module');
|
||||
}
|
||||
else
|
||||
{
|
||||
return array('status' => 'success', 'description' => 'The module has been deactivated successfully');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_addons_upgrade
|
||||
*
|
||||
* @param $vars array
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_addons_upgrade($vars)
|
||||
{
|
||||
|
||||
$version = $vars['version'];
|
||||
|
||||
// Adjust the table name and remove the WebsitePanel credentials
|
||||
if ($version < 1.2)
|
||||
{
|
||||
full_query('RENAME TABLE `tblwspaddons` TO `mod_wspaddons`');
|
||||
full_query("DELETE FROM `tbladdonmodules` WHERE `module` = 'websitepanel_addons' AND `setting` = 'username'");
|
||||
full_query("DELETE FROM `tbladdonmodules` WHERE `module` = 'websitepanel_addons' AND `setting` = 'password'");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_addons_output
|
||||
*
|
||||
* @access public
|
||||
* @return mixed
|
||||
*/
|
||||
function websitepanel_addons_output($params)
|
||||
{
|
||||
// Delete the requested WebsitePanel addon
|
||||
if (isset($_GET['action']) && $_GET['action'] == 'delete')
|
||||
{
|
||||
delete_query('mod_wspaddons', array('whmcs_id' => $_GET['id']));
|
||||
}
|
||||
|
||||
// Add the requested WebsitePanel addon
|
||||
if ($_POST && isset($_POST['action']) && $_POST['action'] == 'add')
|
||||
{
|
||||
// Sanity check to make sure the WHMCS addon ID exists
|
||||
$results = select_query('tbladdons', 'id', array('id' => $_POST['whmcs_id']));
|
||||
if (mysql_num_rows($results) > 0)
|
||||
{
|
||||
$results = select_query('mod_wspaddons', 'whmcs_id', array('whmcs_id' => $_POST['whmcs_id']));
|
||||
if (mysql_num_rows($results) > 0)
|
||||
{
|
||||
echo '<p><div style="margin:0 0 -5px 0;padding: 10px;background-color: #FBEEEB;border: 1px dashed #cc0000;font-weight: bold;color: #cc0000;font-size:14px;text-align: center;-moz-border-radius: 10px;-webkit-border-radius: 10px;-o-border-radius: 10px;border-radius: 10px;">Duplicate WHMCS Addon ID. The WHMCS Addon ID Is Assigned To Another WebsitePanel Addon.</div></p>';
|
||||
}
|
||||
else
|
||||
{
|
||||
insert_query('mod_wspaddons', array('whmcs_id' => $_POST['whmcs_id'], 'wsp_id' => $_POST['wsp_id'], 'is_ipaddress' => $_POST['is_ipaddress']));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo '<p><div style="margin:0 0 -5px 0;padding: 10px;background-color: #FBEEEB;border: 1px dashed #cc0000;font-weight: bold;color: #cc0000;font-size:14px;text-align: center;-moz-border-radius: 10px;-webkit-border-radius: 10px;-o-border-radius: 10px;border-radius: 10px;">WHMCS Addon Not Found! Check The ID And Try Again.</div></p>';
|
||||
}
|
||||
}
|
||||
|
||||
// Get all the assigned addons and display them to the user
|
||||
$results = full_query('SELECT a.name AS `name`, a.id AS `whmcs_id`, w.wsp_id AS `wsp_id` FROM `tbladdons` AS a, `mod_wspaddons` AS w WHERE w.whmcs_id = a.id');
|
||||
|
||||
// Build the table / data grid
|
||||
echo '<div class="tablebg">';
|
||||
echo '<table class="datatable" width="100%" border="0" cellspacing="1" cellpadding="3">';
|
||||
echo '<tr><th>Addon Name</th><th>WHMCS ID</th><th>WebsitePanel ID</th><th></th></tr>';
|
||||
if (mysql_num_rows($results) > 0)
|
||||
{
|
||||
while (($row = mysql_fetch_array($results)) != false)
|
||||
{
|
||||
echo "<tr><td>{$row['name']}</td><td>{$row['whmcs_id']}</td><td>{$row['wsp_id']}</td><td><a href=\"{$params['modulelink']}&action=delete&id={$row['whmcs_id']}\" onclick=\"return confirm('Are you sure you want to delete this addon?');\">Delete</td></td></tr>";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo '<tr><td colspan="4">No Addon Data Found</td></tr>';
|
||||
}
|
||||
echo '</table></div>';
|
||||
|
||||
// Build the add addon form
|
||||
echo '<p><strong>Add WebsitePanel Addon</strong></p>';
|
||||
echo "<form action=\"{$params['modulelink']}\" method=\"POST\">";
|
||||
echo '<input type="hidden" name="action" id="action" value="add">';
|
||||
echo '<table class="form" "width="100%" border="0" cellspacing="2" cellpadding="3">';
|
||||
echo '<tr><td class="fieldlabel">WHMCS Addon ID</td><td class="fieldarea"><input type="text" name="whmcs_id" id="whmcs_id"></td></tr>';
|
||||
echo '<tr><td class="fieldlabel">WebsitePanel Addon ID</td><td class="fieldarea"><input type="text" name="wsp_id" id="wsp_id"></td></tr>';
|
||||
echo '<tr><td class="fieldlabel">Dedicated IP Addon</td><td class="fieldarea"><input type="checkbox" name="is_ipaddress" id="is_ipaddress" value="1"></td></tr>';
|
||||
echo '<tr><td colspan="2" class="fieldarea"><input type="submit" name="submit" id="submit" value="Submit"></td></tr>';
|
||||
echo '</form></table>';
|
||||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/**
|
||||
* WebsitePanel Enterprise Server Client
|
||||
* For the ASPnix WebsitePanel system only - Only tested against the ASPnix WebsitePanel system
|
||||
*
|
||||
* @author Christopher York
|
||||
* @link http://www.websitepanel.net/
|
||||
* @access public
|
||||
* @name websitepanel_EnterpriseServer
|
||||
* @version 3.0.2
|
||||
* @package WHMCS
|
||||
* @final
|
||||
*/
|
||||
|
||||
/**
|
||||
* websitepanel_addons_config
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_addons_config()
|
||||
{
|
||||
return array('name' => 'WebsitePanel Addons Automation',
|
||||
'description' => 'Automates WHMCS product addons with WebsitePanel Addons',
|
||||
'version' => '3.0.1',
|
||||
'author' => 'Christopher York');
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_addons_activate
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_addons_activate()
|
||||
{
|
||||
// Create the WebsitePanel Addons table
|
||||
$query = "CREATE TABLE IF NOT EXISTS `mod_wspaddons` (
|
||||
`whmcs_id` int(11) NOT NULL,
|
||||
`wsp_id` int(11) NOT NULL,
|
||||
`is_ipaddress` bit(1) NOT NULL DEFAULT b'0',
|
||||
PRIMARY KEY (`whmcs_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
|
||||
$result = full_query($query);
|
||||
|
||||
// Check the results to verify that the table has been created properly
|
||||
if (!$result)
|
||||
{
|
||||
return array('status' => 'error', 'description' => 'There was an error while activating the module');
|
||||
}
|
||||
else
|
||||
{
|
||||
return array('status' => 'success', 'description' => 'The module has been activated successfully');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_addons_deactivate
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_addons_deactivate()
|
||||
{
|
||||
// Drop the WebsitePanel Addons table
|
||||
$result = full_query('DROP TABLE `mod_wspaddons`');
|
||||
|
||||
// Check the results to verify that the table has been created properly
|
||||
if (!$result)
|
||||
{
|
||||
return array('status' => 'error', 'description' => 'There was an error while deactiviting the module');
|
||||
}
|
||||
else
|
||||
{
|
||||
return array('status' => 'success', 'description' => 'The module has been deactivated successfully');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_addons_upgrade
|
||||
*
|
||||
* @param $vars array
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_addons_upgrade($vars)
|
||||
{
|
||||
// Module versions
|
||||
$version = $vars['version'];
|
||||
|
||||
// Adjust the table name and remove the WebsitePanel credentials
|
||||
if ($version < 1.2)
|
||||
{
|
||||
full_query('RENAME TABLE `tblwspaddons` TO `mod_wspaddons`');
|
||||
full_query("DELETE FROM `tbladdonmodules` WHERE `module` = 'websitepanel_addons' AND `setting` = 'username'");
|
||||
full_query("DELETE FROM `tbladdonmodules` WHERE `module` = 'websitepanel_addons' AND `setting` = 'password'");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays the WebsitePanel Addons module output
|
||||
*
|
||||
* @access public
|
||||
* @return mixed
|
||||
*/
|
||||
function websitepanel_addons_output($params)
|
||||
{
|
||||
// Delete the requested WebsitePanel addon
|
||||
if (isset($_GET['action']) && $_GET['action'] == 'delete')
|
||||
{
|
||||
delete_query('mod_wspaddons', array('whmcs_id' => $_GET['id']));
|
||||
}
|
||||
|
||||
// Add the requested WebsitePanel addon
|
||||
if ($_POST && isset($_POST['action']) && $_POST['action'] == 'add')
|
||||
{
|
||||
// Sanity check to make sure the WHMCS addon ID exists
|
||||
$results = select_query('tbladdons', 'id', array('id' => $_POST['whmcs_id']));
|
||||
if (mysql_num_rows($results) > 0)
|
||||
{
|
||||
$results = select_query('mod_wspaddons', 'whmcs_id', array('whmcs_id' => $_POST['whmcs_id']));
|
||||
if (mysql_num_rows($results) > 0)
|
||||
{
|
||||
echo '<p><div style="margin:0 0 -5px 0;padding: 10px;background-color: #FBEEEB;border: 1px dashed #cc0000;font-weight: bold;color: #cc0000;font-size:14px;text-align: center;-moz-border-radius: 10px;-webkit-border-radius: 10px;-o-border-radius: 10px;border-radius: 10px;">Duplicate WHMCS Addon ID. The WHMCS Addon ID Is Assigned To Another WebsitePanel Addon.</div></p>';
|
||||
}
|
||||
else
|
||||
{
|
||||
insert_query('mod_wspaddons', array('whmcs_id' => $_POST['whmcs_id'], 'wsp_id' => $_POST['wsp_id'], 'is_ipaddress' => $_POST['is_ipaddress']));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo '<p><div style="margin:0 0 -5px 0;padding: 10px;background-color: #FBEEEB;border: 1px dashed #cc0000;font-weight: bold;color: #cc0000;font-size:14px;text-align: center;-moz-border-radius: 10px;-webkit-border-radius: 10px;-o-border-radius: 10px;border-radius: 10px;">WHMCS Addon Not Found! Check The ID And Try Again.</div></p>';
|
||||
}
|
||||
}
|
||||
|
||||
// Get all the assigned addons and display them to the user
|
||||
$results = full_query('SELECT a.name AS `name`, a.id AS `whmcs_id`, w.wsp_id AS `wsp_id` FROM `tbladdons` AS a, `mod_wspaddons` AS w WHERE w.whmcs_id = a.id');
|
||||
|
||||
// Build the table / data grid
|
||||
echo '<div class="tablebg">';
|
||||
echo '<table class="datatable" width="100%" border="0" cellspacing="1" cellpadding="3">';
|
||||
echo '<tr><th>Addon Name</th><th>WHMCS ID</th><th>WebsitePanel ID</th><th></th></tr>';
|
||||
if (mysql_num_rows($results) > 0)
|
||||
{
|
||||
while (($row = mysql_fetch_array($results)) != false)
|
||||
{
|
||||
echo "<tr><td>{$row['name']}</td><td>{$row['whmcs_id']}</td><td>{$row['wsp_id']}</td><td><a href=\"{$params['modulelink']}&action=delete&id={$row['whmcs_id']}\" onclick=\"return confirm('Are you sure you want to delete this addon?');\">Delete</td></td></tr>";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo '<tr><td colspan="4">No Addon Data Found</td></tr>';
|
||||
}
|
||||
echo '</table></div>';
|
||||
|
||||
// Build the add addon form
|
||||
echo '<p><strong>Add WebsitePanel Addon</strong></p>';
|
||||
echo "<form action=\"{$params['modulelink']}\" method=\"POST\">";
|
||||
echo '<input type="hidden" name="action" id="action" value="add">';
|
||||
echo '<table class="form" "width="100%" border="0" cellspacing="2" cellpadding="3">';
|
||||
echo '<tr><td class="fieldlabel">WHMCS Addon ID</td><td class="fieldarea"><input type="text" name="whmcs_id" id="whmcs_id"></td></tr>';
|
||||
echo '<tr><td class="fieldlabel">WebsitePanel Addon ID</td><td class="fieldarea"><input type="text" name="wsp_id" id="wsp_id"></td></tr>';
|
||||
echo '<tr><td class="fieldlabel">Dedicated IP Addon</td><td class="fieldarea"><input type="checkbox" name="is_ipaddress" id="is_ipaddress" value="1"></td></tr>';
|
||||
echo '<tr><td colspan="2" class="fieldarea"><input type="submit" name="submit" id="submit" value="Submit"></td></tr>';
|
||||
echo '</form></table>';
|
||||
}
|
|
@ -0,0 +1,136 @@
|
|||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
// WebsitePanel server module core files
|
||||
require_once(ROOTDIR. '/modules/servers/websitepanel/enterpriseserver.php');
|
||||
|
||||
/**
|
||||
* WebsitePanel WHMCS WebsitePanel / WHMCS Client Contact Details Sync
|
||||
*
|
||||
* @author Christopher York
|
||||
* @link http://www.websitepanel.net/
|
||||
* @access public
|
||||
* @name websitepanel
|
||||
* @version 3.0.2
|
||||
* @package WHMCS
|
||||
*/
|
||||
|
||||
/**
|
||||
* Handles updating WebsitePanel account details when a client or administrator updates a client's details
|
||||
*
|
||||
* @access public
|
||||
* @param array $params WHMCS parameters
|
||||
* @throws Exception
|
||||
*/
|
||||
function websitepanel_sync_ClientEdit($params)
|
||||
{
|
||||
// WHMCS server parameters & package parameters
|
||||
$userId = $params['userid'];
|
||||
$serviceId = 0;
|
||||
|
||||
// Query for the users WebsitePanel accounts - If they do not have any, just ignore the request
|
||||
$result = full_query("SELECT h.username AS username, s.ipaddress AS serverip, s.hostname AS serverhostname, s.secure AS serversecure, s.username AS serverusername, s.password AS serverpassword, p.configoption6 AS configoption6, h.id AS serviceid FROM `tblhosting` AS h, `tblservers` AS s, `tblproducts` AS p WHERE h.userid = {$userId} AND h.packageid = p.id AND h.server = s.id AND s.type = 'websitepanel' AND h.domainstatus IN ('Active', 'Suspended')");
|
||||
while (($row = mysql_fetch_array($result)) != false)
|
||||
{
|
||||
// Start updating the users account details
|
||||
$serviceId = $row['serviceid'];
|
||||
$username = $row['username'];
|
||||
$serverUsername = $row['serverusername'];
|
||||
$serverPassword = decrypt($row['serverpassword']);
|
||||
$serverPort = $row['configoption6'];
|
||||
$serverHost = empty($row['serverhostname']) ? $row['serverip'] : $row['serverhostname'];
|
||||
$serverSecure = $row['serversecure'] == 'on' ? TRUE : FALSE;
|
||||
$clientsDetails = $params;
|
||||
|
||||
try
|
||||
{
|
||||
// Create the WebsitePanel Enterprise Server Client object instance
|
||||
$wsp = new websitepanel_EnterpriseServer($serverUsername, $serverPassword, $serverHost, $serverPort, $serverSecure);
|
||||
|
||||
// Get the user's details from WebsitePanel - We need the username
|
||||
$user = $wsp->getUserByUsername($username);
|
||||
if (empty($user))
|
||||
{
|
||||
throw new Exception("User {$username} does not exist - Cannot update account details for unknown user");
|
||||
}
|
||||
|
||||
// Update the user's account details using the previous details + WHMCS's details (address, city, state etc.)
|
||||
$userParams = array('RoleId' => $user['RoleId'],
|
||||
'Role' => $user['Role'],
|
||||
'StatusId' => $user['StatusId'],
|
||||
'Status' => $user['Status'],
|
||||
'LoginStatusId' => $user['LoginStatusId'],
|
||||
'LoginStatus' => $user['LoginStatus'],
|
||||
'FailedLogins' => $user['FailedLogins'],
|
||||
'UserId' => $user['UserId'],
|
||||
'OwnerId' => $user['OwnerId'],
|
||||
'IsPeer' => $user['IsPeer'],
|
||||
'Created' => $user['Created'],
|
||||
'Changed' => $user['Changed'],
|
||||
'IsDemo' => $user['IsDemo'],
|
||||
'Comments' => $user['Comments'],
|
||||
'LastName' => $clientsDetails['lastname'],
|
||||
'Username' => $user['Username'],
|
||||
'Password' => $user['Password'],
|
||||
'FirstName' => $clientsDetails['firstname'],
|
||||
'Email' => $clientsDetails['email'],
|
||||
'PrimaryPhone' => $clientsDetails['phonenumber'],
|
||||
'Zip' => $clientsDetails['postcode'],
|
||||
'InstantMessenger' => '',
|
||||
'Fax' => '',
|
||||
'SecondaryPhone' => '',
|
||||
'SecondaryEmail' => '',
|
||||
'Country' => $clientsDetails['country'],
|
||||
'Address' => $clientsDetails['address1'],
|
||||
'City' => $clientsDetails['city'],
|
||||
'State' => $clientsDetails['state'],
|
||||
'HtmlMail' => $user['HtmlMail'],
|
||||
'CompanyName' => $clientsDetails['companyname'],
|
||||
'EcommerceEnabled' => $user['EcommerceEnabled'],
|
||||
'SubscriberNumber' => '');
|
||||
|
||||
// Execute the UpdateUserDetails method
|
||||
$wsp->updateUserDetails($userParams);
|
||||
|
||||
// Add log entry to client log
|
||||
logactivity("WebsitePanel Sync - Account {$username} contact details updated successfully", $userId);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
// Error message to log / return
|
||||
$errorMessage = "websitepanel_sync_ClientEdit Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}, Service ID: {$serviceId})";
|
||||
|
||||
// Log to WHMCS
|
||||
logactivity($errorMessage, $userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Update Client Contact Details - WebsitePanel */
|
||||
add_hook('ClientEdit', 1, 'websitepanel_sync_ClientEdit');
|
|
@ -1,77 +1,73 @@
|
|||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/**
|
||||
* WebsitePanel Sync Addon Module
|
||||
*
|
||||
* @author Christopher York
|
||||
* @package WebsitePanel Sync Addon Module
|
||||
* @version v1.0
|
||||
* @link http://www.websitepanel.net/
|
||||
*/
|
||||
|
||||
/**
|
||||
* websitepanel_sync_config
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_sync_config()
|
||||
{
|
||||
$configarray = array('name' => 'WebsitePanel Sync Automation',
|
||||
'description' => 'Syncs WHMCS client details / contact changes with WebsitePanel',
|
||||
'version' => '1.2',
|
||||
'author' => 'Christopher York',
|
||||
'fields' => array('serverhost' => array('FriendlyName', 'Enterprise Server Host', 'Type' => 'text', 'Size' => 25, 'Description' => 'Enterprise Server hostname / IP address', 'Default' => '127.0.0.1'),
|
||||
'serverport' => array('FriendlyName', 'Enterprise Server Port', 'Type' => 'text', 'Size' => 4, 'Description' => 'Enterprise Server port', 'Default' => 9002),
|
||||
'serversecured' => array('FriendlyName', 'Use Secured Connection', 'Type' => 'yesno', 'Description' => 'Tick to use SSL secured connection'),
|
||||
)
|
||||
);
|
||||
return $configarray;
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_addons_upgrade
|
||||
*
|
||||
* @param $vars array
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_sync_upgrade($vars)
|
||||
{
|
||||
|
||||
$version = $vars['version'];
|
||||
|
||||
// Remove the WebsitePanel credentials
|
||||
if ($version < 1.2)
|
||||
{
|
||||
full_query("DELETE FROM `tbladdonmodules` WHERE `module` = 'websitepanel_sync' AND `setting` = 'username'");
|
||||
full_query("DELETE FROM `tbladdonmodules` WHERE `module` = 'websitepanel_sync' AND `setting` = 'password'");
|
||||
}
|
||||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/**
|
||||
* WebsitePanel WHMCS WebsitePanel / WHMCS Client Contact Details Sync
|
||||
*
|
||||
* @author Christopher York
|
||||
* @link http://www.websitepanel.net/
|
||||
* @access public
|
||||
* @name websitepanel
|
||||
* @version 3.0.2
|
||||
* @package WHMCS
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns the WebsitePanel Sync configuration options
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_sync_config()
|
||||
{
|
||||
return array('name' => 'WebsitePanel Sync Automation',
|
||||
'description' => 'Syncs WHMCS client details / contact changes with WebsitePanel accounts',
|
||||
'version' => '3.0.1',
|
||||
'author' => 'Christopher York');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the WebsitePanel Sync configuration options
|
||||
*
|
||||
* @param $vars array WHMCS parameters
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_sync_upgrade($vars)
|
||||
{
|
||||
// Module version
|
||||
$version = $vars['version'];
|
||||
|
||||
// Remove the WebsitePanel credentials
|
||||
if ($version < 1.2)
|
||||
{
|
||||
full_query("DELETE FROM `tbladdonmodules` WHERE `module` = 'websitepanel_sync' AND `setting` = 'username'");
|
||||
full_query("DELETE FROM `tbladdonmodules` WHERE `module` = 'websitepanel_sync' AND `setting` = 'password'");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
<br />
|
||||
<form action="{$websitepanel_url}/default.aspx?pid=Login" method="POST" target="_blank"><input type="hidden" value="{$username}" name="user"><input type="hidden" value="{$password}" name="password"><input type="submit" value="{$LANG.websitepanel_clientarea_oneclicklogin}"></form>
|
|
@ -0,0 +1,502 @@
|
|||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/**
|
||||
* WebsitePanel Enterprise Server Client
|
||||
* For the ASPnix WebsitePanel system only - Only tested against the ASPnix WebsitePanel system
|
||||
*
|
||||
* @author Christopher York
|
||||
* @link http://www.websitepanel.net/
|
||||
* @access public
|
||||
* @name websitepanel_EnterpriseServer
|
||||
* @version 3.0.2
|
||||
* @package WHMCS
|
||||
* @final
|
||||
*/
|
||||
final class websitepanel_EnterpriseServer
|
||||
{
|
||||
/**
|
||||
* WebsitePanel user account statuses / states
|
||||
*
|
||||
* @access public
|
||||
* @var string
|
||||
*/
|
||||
const USERSTATUS_ACTIVE = 'Active';
|
||||
const USERSTATUS_SUSPENDED = 'Suspended';
|
||||
const USERSTATUS_CANCELLED = 'Cancelled';
|
||||
const USERSTATUS_PENDING = 'Pending';
|
||||
|
||||
/**
|
||||
* WebsitePanel usage calculation types
|
||||
*
|
||||
* @access public
|
||||
* @var int
|
||||
*/
|
||||
const USAGE_DISKSPACE = 0;
|
||||
const USAGE_BANDWIDTH = 1;
|
||||
|
||||
/**
|
||||
* Enterprise Server username
|
||||
*
|
||||
* @access private
|
||||
* @var string
|
||||
*/
|
||||
private $_username;
|
||||
|
||||
/**
|
||||
* Enterprise Server password
|
||||
*
|
||||
* @access private
|
||||
* @var string
|
||||
*/
|
||||
private $_password;
|
||||
|
||||
/**
|
||||
* Enterprise Server URL / address (without the port)
|
||||
*
|
||||
* @access private
|
||||
* @var string
|
||||
*/
|
||||
private $_host;
|
||||
|
||||
/**
|
||||
* Enterprise Server TCP port
|
||||
*
|
||||
* @access private
|
||||
* @var int
|
||||
*/
|
||||
private $_port;
|
||||
|
||||
/**
|
||||
* Use SSL (HTTPS) for Enterprise Server communications
|
||||
*
|
||||
* @access private
|
||||
* @var boolean
|
||||
*/
|
||||
private $_secured;
|
||||
|
||||
/**
|
||||
* SoapClient WSDL caching
|
||||
*
|
||||
* @access private
|
||||
* @var boolean
|
||||
*/
|
||||
private $_caching;
|
||||
|
||||
/**
|
||||
* SoapClient HTTP compression
|
||||
*
|
||||
* @access private
|
||||
* @var boolean
|
||||
*/
|
||||
private $_compression;
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @access public
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @param string $host
|
||||
* @param int $port
|
||||
* @param boolean $secured
|
||||
* @param boolean $caching
|
||||
* @param boolean $compression
|
||||
*/
|
||||
function __construct($username, $password, $host, $port = 9002, $secured = FALSE, $caching = FALSE, $compression = TRUE)
|
||||
{
|
||||
$this->_username = $username;
|
||||
$this->_password = $password;
|
||||
$this->_host = $host;
|
||||
$this->_port = $port;
|
||||
$this->_secured = $secured;
|
||||
$this->_caching = $caching;
|
||||
$this->_compression = $compression;
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "CreateUserWizard" method
|
||||
*
|
||||
* @param array $params CreateUserWizard method parameters
|
||||
* @throws Exception
|
||||
* @return int
|
||||
*/
|
||||
public function createUserWizard($params)
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->execute('esPackages.asmx', 'CreateUserWizard', $params)->CreateUserWizardResult;
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("ChangeUserStatus Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "UpdateUser" method
|
||||
*
|
||||
* @access private
|
||||
* @param array $params
|
||||
* @throws Exception
|
||||
* @return int
|
||||
*/
|
||||
public function updateUserDetails($params)
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->execute('esUsers.asmx', 'UpdateUser', array('user' => $params))->UpdateUserResult;
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("UpdateUser Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "DeleteUser" method
|
||||
*
|
||||
* @access public
|
||||
* @param int $userId User's WebsitePanel userId
|
||||
* @throws Exception
|
||||
* @return int
|
||||
*/
|
||||
public function deleteUser($userId)
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->execute('esUsers.asmx', 'DeleteUser', array('userId' => $userId))->DeleteUserResult;
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("ChangeUserStatus Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "GetUserByUsername" method
|
||||
*
|
||||
* @access public
|
||||
* @param string $username Websitepanel username
|
||||
* @throws Exception
|
||||
* @return array
|
||||
*/
|
||||
public function getUserByUsername($username)
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->convertArray($this->execute('esUsers.asmx', 'GetUserByUsername', array('username' => $username))->GetUserByUsernameResult);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("GetUserByUsername Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()})", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "ChangeUserStatus" method
|
||||
*
|
||||
* @access public
|
||||
* @param int $userId User's WebsitePanel userId
|
||||
* @param string $status Account status (Active, Suspended, Cancelled, Pending)
|
||||
* @throws Exception
|
||||
* @return int
|
||||
*/
|
||||
public function changeUserStatus($userId, $status)
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->execute('esUsers.asmx', 'ChangeUserStatus', array('userId' => $userId, 'status' => $status))->ChangeUserStatusResult;
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("ChangeUserStatus Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "ChangeUserPassword" method
|
||||
*
|
||||
* @access public
|
||||
* @param int $userId User's WebsitePanel userId
|
||||
* @param string $password User's new password
|
||||
* @throws Exception
|
||||
* @return int
|
||||
*/
|
||||
public function changeUserPassword($userId, $password)
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->execute('esUsers.asmx', 'ChangeUserPassword', array('userId' => $userId, 'password' => $password))->ChangeUserPasswordResult;
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("ChangeUserPassword Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "GetMyPackages" method
|
||||
*
|
||||
* @access public
|
||||
* @param int $userId User's WebsitePanel userId
|
||||
* @throws Exception
|
||||
* @return array
|
||||
*/
|
||||
public function getUserPackages($userId)
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->convertArray($this->execute('esPackages.asmx', 'GetMyPackages', array('userId' => $userId))->GetMyPackagesResult->PackageInfo);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("GetMyPackages Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "GetUsersPagedRecursive" method
|
||||
*
|
||||
* @access public
|
||||
* @param unknown $userId Users's WebsitePanel userId
|
||||
* @param unknown $filterColumn Column value to filter against
|
||||
* @param unknown $filterValue Filter value
|
||||
* @param unknown $statusId Users's account status id
|
||||
* @param unknown $roleId User's account role id
|
||||
* @param unknown $sortColumn Column value to sort against
|
||||
* @param number $startRow Start value
|
||||
* @param string $maximumRows Maximum rows to return
|
||||
* @throws Exception
|
||||
* @return object
|
||||
*/
|
||||
public function getUsersPagedRecursive($userId, $filterColumn, $filterValue, $statusId, $roleId, $sortColumn, $startRow = 0, $maximumRows = PHP_INT_MAX)
|
||||
{
|
||||
try
|
||||
{
|
||||
$result = (array)$this->execute('esUsers.asmx', 'GetUsersPagedRecursive', array('userId' => $userId, 'filterColumn' => $filterColumn, 'filterValue' => $filterValue, 'statusId' => $statusId, 'roleId' => $roleId, 'sortColumn' => $sortColumn, 'startRow' => $startRow, 'maximumRows' => $maximumRows))->GetUsersPagedRecursiveResult;
|
||||
return $this->convertArray($result['any'], TRUE);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("GetUsersPagedRecursive Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "UpdatePackageLiteral" method
|
||||
*
|
||||
* @access public
|
||||
* @param int $packageId Package's WebsitePanel packageId
|
||||
* @param int $statusId Package's status id
|
||||
* @param int $planId Package's WebsitePanel planid
|
||||
* @param string $purchaseDate Package's purchase date
|
||||
* @param string $packageName Package's name
|
||||
* @param string $packageComments Package's comments
|
||||
* @throws Exception
|
||||
* @return array
|
||||
*/
|
||||
public function updatePackageLiteral($packageId, $statusId, $planId, $purchaseDate, $packageName, $packageComments)
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->convertArray($this->execute('esPackages.asmx', 'UpdatePackageLiteral', array('packageId' => $packageId, 'statusId' => $statusId, 'planId' => $planId, 'purchaseDate' => $purchaseDate, 'packageName' => $packageName, 'packageComments' => $packageComments))->UpdatePackageLiteralResult);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("UpdatePackageLiteral Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "AddPackageAddonById" method
|
||||
*
|
||||
* @access public
|
||||
* @param unknown $packageId WebsitePanel package Id
|
||||
* @param unknown $addonPlanId WebsitePanel addon id
|
||||
* @param number $quantity Number of addons to add :)
|
||||
* @throws Exception
|
||||
* @return array
|
||||
*/
|
||||
public function addPackageAddonById($packageId, $addonPlanId, $quantity = 1)
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->convertArray($this->execute('esPackages.asmx', 'AddPackageAddonById', array('packageId' => $packageId, 'addonPlanId' => $addonPlanId, 'quantity' => $quantity))->AddPackageAddonByIdResult);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("AddPackageAddonById Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "GetPackageBandwidth" method
|
||||
*
|
||||
* @access public
|
||||
* @param unknown $packageId WebsitePanel package id
|
||||
* @param unknown $startDate Calculation start date
|
||||
* @param unknown $endDate Calculation end date
|
||||
* @throws Exception
|
||||
* @return object
|
||||
*/
|
||||
public function getPackageBandwidthUsage($packageId, $startDate, $endDate)
|
||||
{
|
||||
try
|
||||
{
|
||||
$result = (array)$this->execute('esPackages.asmx', 'GetPackageBandwidth', array('packageId' => $packageId, 'startDate' => $startDate, 'endDate' => $endDate))->GetPackageBandwidthResult;
|
||||
return $this->convertArray($result['any'], TRUE);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("GetPackageBandwidth Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "GetPackageDiskspace" method
|
||||
*
|
||||
* @access public
|
||||
* @param unknown $packageId WebsitePanel package id
|
||||
* @throws Exception
|
||||
* @return object
|
||||
*/
|
||||
public function getPackageDiskspaceUsage($packageId)
|
||||
{
|
||||
try
|
||||
{
|
||||
$result = (array)$this->execute('esPackages.asmx', 'GetPackageDiskspace', array('packageId' => $packageId))->GetPackageDiskspaceResult;
|
||||
return $this->convertArray($result['any'], TRUE);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("GetPackageDiskspace Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the "AllocatePackageIPAddresses" method
|
||||
*
|
||||
* @access public
|
||||
* @param int $packageId WebsitePanel package id
|
||||
* @param string $groupName WebsitePanel IP address group name
|
||||
* @param string $pool WebsitePanel IP address pool
|
||||
* @param int $addressesNumber Number of IP addresses to allocate
|
||||
* @param string $allocateRandom Allocate randomly
|
||||
* @throws Exception
|
||||
* @return object
|
||||
*/
|
||||
public function allocatePackageIPAddresses($packageId, $groupName = 'Web', $pool = 'WebSites', $addressesNumber = 1, $allocateRandom = TRUE)
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->convertArray($this->execute('esServers.asmx', 'AllocatePackageIPAddresses', array('packageId' => $packageId, 'groupName' => $groupName, 'pool' => $pool, 'addressesNumber' => $addressesNumber, 'allocateRandom' => $allocateRandom))->AllocatePackageIPAddressesResult);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("AllocatePackageIPAddresses Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()}", $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the WebsitePanel error code to a friendly human-readable message
|
||||
*
|
||||
* @access public
|
||||
* @param int $code WebsitePanel error code
|
||||
* @return string
|
||||
*/
|
||||
public static function getFriendlyError($code)
|
||||
{
|
||||
$errors = array(-100 => 'Username not available, already in use',
|
||||
-101 => 'Username not found, invalid username',
|
||||
-102 => 'User\'s account has child accounts',
|
||||
-300 => 'Hosting package could not be found',
|
||||
-301 => 'Hosting package has child hosting spaces',
|
||||
-501 => 'The sub-domain belongs to an existing hosting space that does not allow sub-domains to be created',
|
||||
-502 => 'The domain or sub-domain exists in another hosting space / user account',
|
||||
-511 => 'Instant alias is enabled, but not configured',
|
||||
-601 => 'The website already exists on the target hosting space or server',
|
||||
-700 => 'The email domain already exists on the target hosting space or server',
|
||||
-1100 => 'User already exists');
|
||||
|
||||
// Find the error and return it, else a general error will do!
|
||||
if (array_key_exists($code, $errors))
|
||||
{
|
||||
return $errors[$code];
|
||||
}
|
||||
else
|
||||
{
|
||||
return "An unknown error occured (Code: {$code}). Please reference WebsitePanel BusinessErrorCodes for further information";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the request on the Enterprise Server and returns the results
|
||||
*
|
||||
* @param unknown $service
|
||||
* @param unknown $method
|
||||
* @param unknown $params
|
||||
* @throws Exception
|
||||
*/
|
||||
private function execute($service, $method, $params)
|
||||
{
|
||||
// Set the Enterprise Server full URL
|
||||
$host = (($this->_secured) ? 'https' : 'http') . "://{$this->_host}:{$this->_port}/{$service}?WSDL";
|
||||
try
|
||||
{
|
||||
// Create the SoapClient
|
||||
$client = new SoapClient($host, array('login' => $this->_username, 'password' => $this->_password, 'compression' => (($this->_compression) ? (SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP) : ''), 'cache_wsdl' => ($this->_caching) ? 1 : 0));
|
||||
|
||||
// Execute the request and process the results
|
||||
return call_user_func(array($client, $method), $params);
|
||||
}
|
||||
catch (SoapFault $e)
|
||||
{
|
||||
throw new Exception("SOAP Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()})");
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception("General Fault: (Code: {$e->getCode()}, Message: {$e->getMessage()})");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts an object or an XML string to an array
|
||||
*
|
||||
* @access private
|
||||
* @param mixed $value Object or an XML string
|
||||
* @param boolean $loadXml Loads the string into the SimpleXML object
|
||||
* @return array
|
||||
*/
|
||||
private function convertArray($value, $loadXml = FALSE)
|
||||
{
|
||||
// This is silly, but it works, and it works very well for what we are doing :)
|
||||
return json_decode(json_encode(($loadXml ? simplexml_load_string($value) : $value)), TRUE);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,146 @@
|
|||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/**
|
||||
* WebsitePanel WHMCS Server Module Shared Funcitons
|
||||
*
|
||||
* @author Christopher York
|
||||
* @link http://www.websitepanel.net/
|
||||
* @access public
|
||||
* @name websitepanel
|
||||
* @version 3.0.2
|
||||
* @package WHMCS
|
||||
*/
|
||||
|
||||
/**
|
||||
* Calculate the bandwidth calculation starting date based on when the customer signed up
|
||||
*
|
||||
* @access public
|
||||
* @param string $startDate Customer registration date (starting date)
|
||||
* @return string
|
||||
*/
|
||||
function websitepanel_CreateBandwidthDate($startDate)
|
||||
{
|
||||
$dateExploded = explode('-', $startDate);
|
||||
$currentYear = date('Y');
|
||||
$currentMonth = date('m');
|
||||
$newDate = "{$currentYear}-{$currentMonth}-{$dateExploded[2]}";
|
||||
|
||||
$dateDiff = time() - strtotime('+1 hour', strtotime($newDate));
|
||||
$fullDays = floor($dateDiff / (60 * 60 * 24));
|
||||
if ($fullDays < 0)
|
||||
{
|
||||
return date('Y-m-d', strtotime('-1 month', strtotime($newDate)));
|
||||
}
|
||||
else
|
||||
{
|
||||
return $newDate;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the total usage of the provided WebsitePanel usage tables
|
||||
* Each websitepanel provider / service calculates its own disk and bandwidth usage, total all provided tables and return
|
||||
*
|
||||
* @access public
|
||||
* @param array $usageTables Usage tables (each service provides its own usage breakdown)
|
||||
* @param int $usageType WebsitePanel usage type (websitepanel_EnterpriseServer::USAGE_*)
|
||||
* @return int
|
||||
*/
|
||||
function websitepanel_CalculateUsage($usageTables, $usageType)
|
||||
{
|
||||
$totalUsage = 0;
|
||||
foreach ($usageTables['NewDataSet']['Table'] as $table)
|
||||
{
|
||||
switch ($usageType)
|
||||
{
|
||||
case websitepanel_EnterpriseServer::USAGE_BANDWIDTH:
|
||||
$totalUsage += $table['MegaBytesTotal'];
|
||||
break;
|
||||
|
||||
case websitepanel_EnterpriseServer::USAGE_DISKSPACE:
|
||||
$totalUsage += $table['Diskspace'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $totalUsage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the WebsitePanel language file
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function websitepanel_LoadClientLanguage()
|
||||
{
|
||||
global $CONFIG, $_LANG, $smarty;
|
||||
|
||||
// Attempt to load the client's language
|
||||
$selectedLanguage = !empty($_SESSION['Language']) ? $_SESSION['Language'] : $CONFIG['Language'];
|
||||
|
||||
// For the admin area
|
||||
if (defined('ADMINAREA'))
|
||||
{
|
||||
$result = select_query('tbladmins', 'language', array('id' => (int)$_SESSION['adminid']));
|
||||
$results = mysql_fetch_assoc($result);
|
||||
$selectedLanguage = !empty($results['language']) ? $results['language'] : 'english';
|
||||
}
|
||||
|
||||
// Load the language file
|
||||
$languageFile = dirname(__FILE__) . "/lang/{$selectedLanguage}.php";
|
||||
if (file_exists($languageFile))
|
||||
{
|
||||
require_once($languageFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Load the default (English) language file
|
||||
require_once(dirname(__FILE__) . '/lang/english.php');
|
||||
}
|
||||
|
||||
// Process the module language entries
|
||||
if (is_array($_MOD_LANG))
|
||||
{
|
||||
foreach ($_MOD_LANG as $key => $value)
|
||||
{
|
||||
if (empty($_LANG[$key]))
|
||||
{
|
||||
$_LANG[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add to the template
|
||||
if (isset($smarty))
|
||||
{
|
||||
$smarty->assign('LANG', $_LANG);
|
||||
}
|
||||
|
||||
return $_MOD_LANG;
|
||||
}
|
|
@ -1,60 +1,42 @@
|
|||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/**
|
||||
* WebsitePanel Server Module - WebsitePanel Business Error Codes
|
||||
*
|
||||
* @author Christopher York
|
||||
* @package WebsitePanel Server Module - WebsitePanel Business Error Codes
|
||||
* @version v1.0
|
||||
* @link http://www.websitepanel.net/
|
||||
*/
|
||||
|
||||
/**
|
||||
* Common error codes encountered while using the WebsitePanel Server Module
|
||||
* These are not all the Enterprise Server error codes, only the ones I have encountered using the API
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_GetEnterpriseServerErrors()
|
||||
{
|
||||
$esErrorCodes = array(-100 => 'User already exists',
|
||||
-101 => 'User not found',
|
||||
-102 => 'User has child user accounts',
|
||||
-300 => 'Hosting package could not be found',
|
||||
-301 => 'Hosting package has child hosting spaces',
|
||||
-501 => 'The sub-domain belongs to an existing hosting space that does not allow sub-domains to be created',
|
||||
-502 => 'The domain or sub-domain exists within another hosting space',
|
||||
-511 => 'Instant alias is enabled, but not configured',
|
||||
-601 => 'The website already exists on the target hosting space',
|
||||
-700 => 'The email domain already exists on the target hosting space',
|
||||
-1100 => 'User already exists');
|
||||
return $esErrorCodes;
|
||||
}
|
||||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
/**
|
||||
* WebsitePanel WHMCS Server Module Client Area Language
|
||||
*
|
||||
* @author Christopher York
|
||||
* @link http://www.websitepanel.net/
|
||||
* @access public
|
||||
* @name websitepanel
|
||||
* @version 3.0.0
|
||||
* @package WHMCS
|
||||
*/
|
||||
$_MOD_LANG['websitepanel_clientarea_oneclicklogin'] = 'Login to Control Panel (One-Click Login)';
|
||||
$_MOD_LANG['websitepanel_adminarea_gotowebsitepanelaccount'] = 'View Account in WebsitePanel';
|
|
@ -1,438 +0,0 @@
|
|||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/**
|
||||
* WebsitePanel Server Module - Enterprise Server Wrapper
|
||||
*
|
||||
* @author Christopher York
|
||||
* @package WebsitePanel Server Module - WebsitePanel Enterprise Server Wrapper
|
||||
* @version v1.0
|
||||
* @link http://www.websitepanel.net/
|
||||
*/
|
||||
|
||||
class WebsitePanel
|
||||
{
|
||||
/**
|
||||
* WebsitePanel Enteprise Server service file names
|
||||
*
|
||||
* @access private
|
||||
* @var string
|
||||
*/
|
||||
const SERVICEFILE_PACKAGES = 'esPackages.asmx';
|
||||
const SERVICEFILE_USERS = 'esUsers.asmx';
|
||||
const SERVICEFILE_SERVERS = 'esServers.asmx';
|
||||
|
||||
/**
|
||||
* WebsitePanel account states
|
||||
*
|
||||
* @access public
|
||||
* @var string
|
||||
*/
|
||||
const USERSTATUS_ACTIVE = 'Active';
|
||||
const USERSTATUS_SUSPENDED = 'Suspended';
|
||||
const USERSTATUS_CANCELLED = 'Cancelled';
|
||||
const USERSTATUS_PENDING = 'Pending';
|
||||
|
||||
/**
|
||||
* WebsitePanel usage calculation
|
||||
*
|
||||
* @access public
|
||||
* @var int
|
||||
*/
|
||||
const USAGE_DISKSPACE = 0;
|
||||
const USAGE_BANDWIDTH = 1;
|
||||
|
||||
/**
|
||||
* WebsitePanel IP address pools
|
||||
*
|
||||
* @access public
|
||||
* @var string
|
||||
*/
|
||||
const IPADDRESS_POOL_WEB = 'Web';
|
||||
|
||||
/**
|
||||
* WebsitePanel IP address groups
|
||||
*
|
||||
* @access public
|
||||
* @var string
|
||||
*/
|
||||
const IPADDRESS_GROUP_WEBSITES = 'WebSites';
|
||||
|
||||
/**
|
||||
* Enterprise Server username
|
||||
*
|
||||
* @access private
|
||||
* @var string
|
||||
*/
|
||||
private $_esUsername = 'serveradmin';
|
||||
|
||||
/**
|
||||
* Enterprise Server password
|
||||
*
|
||||
* @access private
|
||||
* @var string
|
||||
*/
|
||||
private $_esPassword;
|
||||
|
||||
/**
|
||||
* Enterprise Server URL / address (without the port)
|
||||
*
|
||||
* @access private
|
||||
* @var string
|
||||
*/
|
||||
private $_esServerUrl;
|
||||
|
||||
/**
|
||||
* Enterprise Server TCP port
|
||||
*
|
||||
* @access private
|
||||
* @var int
|
||||
*/
|
||||
private $_esServerPort = 9002;
|
||||
|
||||
/**
|
||||
* Use SSL (HTTPS) for Enterprise Server communications
|
||||
*
|
||||
* @access private
|
||||
* @var boolean
|
||||
*/
|
||||
private $_esUseSsl = false;
|
||||
|
||||
/**
|
||||
* WebsitePanel class constructor
|
||||
*
|
||||
* @access public
|
||||
* @param string $esUsername Enterprise Server username
|
||||
* @param string $esPassword Enterprise Server password
|
||||
* @param string $esServerUrl Enterprise Server URL / address (without the port)
|
||||
* @param int $esServerPort Enterprise Server TCP port
|
||||
* @param boolean $useSsl Use SSL (HTTPS) for Enterprise Server communications
|
||||
*/
|
||||
public function __construct($esUsername, $esPassword, $esServerUrl, $esServerPort = 9002, $useSsl = FALSE)
|
||||
{
|
||||
$this->_esUsername = $esUsername;
|
||||
$this->_esPassword = $esPassword;
|
||||
$this->_esServerUrl = $esServerUrl;
|
||||
$this->_esServerPort = $esServerPort;
|
||||
$this->_esUseSsl = $useSsl;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::CreateAccount()
|
||||
*
|
||||
* @param string $username Account username
|
||||
* @param string $password Account password
|
||||
* @param string $roleId Account role id
|
||||
* @param string $firstName Account holders firstname
|
||||
* @param string $lastName Account holders lastname
|
||||
* @param string $email Account holders email address
|
||||
* @param string $planId WebsitePanel plan id
|
||||
* @param integer $parentPackageId Parent space / package id
|
||||
* @param string $domainName Account domain name
|
||||
* @param string $hostName Website hostname (if createWebsite is TRUE)
|
||||
* @param bool $htmlMail Send HTML email
|
||||
* @param bool $sendAccountLetter Send WebsitePanel "Account Summary" letter
|
||||
* @param bool $sendPackageLetter Send WebsitePanel "Hosting Space Summary" letter
|
||||
* @param bool $createPackage Create hostingspace / package on user creation
|
||||
* @param bool $tempDomain Create temporary domain on hostingspace / package creation
|
||||
* @param bool $createWebSite Create Website on hostingspace / package creation
|
||||
* @param bool $createFtpAccount Create FTP account on hostingspace / package creation
|
||||
* @param string $ftpAcountName FTP account name to create (if createFtpAccount is TRUE)
|
||||
* @param bool $createMailAccount Create default mail account on hostingspace / package creation
|
||||
* @param bool $createZoneRecord Create domain DNS zone record (if createMailAccount OR createWebSite are TRUE)
|
||||
* @return int
|
||||
*/
|
||||
public function createUserWizard($username, $password, $roleId, $firstName, $lastName, $email, $planId, $parentPackageId, $domainName, $hostName, $htmlMail = TRUE, $sendAccountLetter = TRUE, $sendPackageLetter = TRUE, $createPackage = TRUE, $tempDomain = FALSE, $createWebSite = FALSE, $createFtpAccount = FALSE, $ftpAcountName = '', $createMailAccount = FALSE, $createZoneRecord = FALSE)
|
||||
{
|
||||
$params = array();
|
||||
foreach (get_defined_vars() as $key => $value)
|
||||
{
|
||||
if ($key == 'params')
|
||||
continue;
|
||||
|
||||
$params[$key] = $value;
|
||||
}
|
||||
return $this->executeServerMethod(WebsitePanel::SERVICEFILE_PACKAGES, 'CreateUserWizard', $params)->CreateUserWizardResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::UpdateUserDetails()
|
||||
*
|
||||
* @access public
|
||||
* @param int $RoleId Account role id
|
||||
* @param string $Role Account role
|
||||
* @param int $StatusId Account status id
|
||||
* @param string $Status Account status
|
||||
* @param int $UserId Account user id
|
||||
* @param int $OwnerId Account owner id
|
||||
* @param string $Created Account creation date
|
||||
* @param string $Changed Account changed date
|
||||
* @param bool $IsDemo Demo account
|
||||
* @param bool $IsPeer Peer account
|
||||
* @param string $Comments Account comments
|
||||
* @param string $Username Account username
|
||||
* @param string $Password Account password
|
||||
* @param string $FirstName Account holders firstname
|
||||
* @param string $LastName Account holders lastname
|
||||
* @param string $Email Account holders email address
|
||||
* @param string $PrimaryPhone Account holders phone number
|
||||
* @param string $Zip Account holders postal code
|
||||
* @param string $InstantMessenger Account holders IM
|
||||
* @param string $Fax Account holders fax number
|
||||
* @param string $SecondaryPhone Account holders secondary phone number
|
||||
* @param string $SecondaryEmail Account holders secondary email
|
||||
* @param string $Country Account holders country
|
||||
* @param string $Address Account holders physical address
|
||||
* @param string $City Account holders city
|
||||
* @param string $State Account holders state
|
||||
* @param bool $HtmlMail Send HTML email
|
||||
* @param string $CompanyName Account holders Company name
|
||||
* @param bool $EcommerceEnabled Ecommerce enabled
|
||||
* @return void
|
||||
*/
|
||||
public function updateUserDetails($RoleId, $Role, $StatusId, $Status, $LoginStatusId, $LoginStatus, $FailedLogins, $UserId, $OwnerId, $Created, $Changed, $IsDemo, $IsPeer, $Comments, $Username, $Password, $FirstName, $LastName, $Email, $PrimaryPhone, $Zip, $InstantMessenger, $Fax, $SecondaryPhone, $SecondaryEmail, $Country, $Address, $City, $State, $HtmlMail, $CompanyName, $EcommerceEnabled)
|
||||
{
|
||||
$params = array();
|
||||
foreach (get_defined_vars() as $key => $value)
|
||||
{
|
||||
if ($key == 'params')
|
||||
continue;
|
||||
|
||||
$params[$key] = $value;
|
||||
}
|
||||
return $this->executeServerMethod(WebsitePanel::SERVICEFILE_USERS, 'UpdateUser', array('user' => $params))->UpdateUserResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::DeleteUser()
|
||||
*
|
||||
* @access public
|
||||
* @param int $userid User id
|
||||
* @return int
|
||||
*/
|
||||
public function deleteUser($userId)
|
||||
{
|
||||
return $this->executeServerMethod(WebsitePanel::SERVICEFILE_USERS, 'DeleteUser', array('userId' => $userId))->DeleteUserResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::GetUserByUsername()
|
||||
*
|
||||
* @access public
|
||||
* @param string $username Username
|
||||
* @return array
|
||||
*/
|
||||
public function getUserByUsername($username)
|
||||
{
|
||||
return (array)$this->executeServerMethod(WebsitePanel::SERVICEFILE_USERS, 'GetUserByUsername', array('username' => $username))->GetUserByUsernameResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::ChangeUserStatus()
|
||||
*
|
||||
* @param int $userId User id
|
||||
* @param string $status Account status (Active, Suspended, Cancelled, Pending)
|
||||
* @return int
|
||||
*/
|
||||
public function changeUserStatus($userId, $status)
|
||||
{
|
||||
return $this->executeServerMethod(WebsitePanel::SERVICEFILE_USERS, 'ChangeUserStatus', array('userId' => $userId, 'status' => $status))->ChangeUserStatusResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::ChangeUserPassword()
|
||||
*
|
||||
* @access public
|
||||
* @param int $userId User id
|
||||
* @param string $password New password
|
||||
* @return int
|
||||
*/
|
||||
public function changeUserPassword($userId, $password)
|
||||
{
|
||||
return $this->executeServerMethod(WebsitePanel::SERVICEFILE_USERS, 'ChangeUserPassword', array('userId' => $userId, 'password' => $password))->ChangeUserPasswordResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::GetUserPackages()
|
||||
*
|
||||
* @access public
|
||||
* @param int $userid User id
|
||||
* @return array
|
||||
*/
|
||||
public function getUserPackages($userid)
|
||||
{
|
||||
return (array)$this->executeServerMethod(WebsitePanel::SERVICEFILE_PACKAGES, 'GetMyPackages', array('userId' => $userid))->GetMyPackagesResult->PackageInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::getUsersPagedRecursive()
|
||||
*
|
||||
* @param int $userId User id
|
||||
* @param string $filterColumn Column name to filter on
|
||||
* @param string $filterValue Filter value
|
||||
* @param int $statusId Status id
|
||||
* @param int $roleId Role id
|
||||
* @param string $sortColumn Column name to sort on
|
||||
* @param int $startRow Row to start at
|
||||
* @param int $maximumRows Maximum rows to return
|
||||
*/
|
||||
public function getUsersPagedRecursive($userId, $filterColumn, $filterValue, $statusId, $roleId, $sortColumn, $startRow = 0, $maximumRows = 999)
|
||||
{
|
||||
$params = array();
|
||||
foreach (get_defined_vars() as $key => $value)
|
||||
{
|
||||
if ($key == 'params')
|
||||
continue;
|
||||
|
||||
$params[$key] = $value;
|
||||
}
|
||||
return $this->executeServerMethod(WebSitePanel::SERVICEFILE_USERS, 'GetUsersPagedRecursive', $params)->GetUsersPagedRecursiveResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::UpdatePackageLiteral()
|
||||
*
|
||||
* @access public
|
||||
* @param int $packageId Package id
|
||||
* @param int $statusId Status id
|
||||
* @param int $planId Plan id
|
||||
* @param string $purchaseDate Purchase date
|
||||
* @param string $packageName Package name
|
||||
* @param string $packageComments Package comments
|
||||
* @return array
|
||||
*/
|
||||
public function updatePackageLiteral($packageId, $statusId, $planId, $purchaseDate, $packageName, $packageComments)
|
||||
{
|
||||
$params = array();
|
||||
foreach (get_defined_vars() as $key => $value)
|
||||
{
|
||||
if ($key == 'params')
|
||||
continue;
|
||||
|
||||
$params[$key] = $value;
|
||||
}
|
||||
return (array)$this->executeServerMethod(WebsitePanel::SERVICEFILE_PACKAGES, 'UpdatePackageLiteral', $params)->UpdatePackageLiteralResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::addPackageAddonById()
|
||||
*
|
||||
* @access public
|
||||
* @param mixed $packageId Package id
|
||||
* @param mixed $addonPlanId Addon plan od
|
||||
* @param integer $quantity Quantity
|
||||
* @return array
|
||||
*/
|
||||
public function addPackageAddonById($packageId, $addonPlanId, $quantity = 1)
|
||||
{
|
||||
return (array)$this->executeServerMethod(WebsitePanel::SERVICEFILE_PACKAGES, 'AddPackageAddonById', array('packageId' => $packageId, 'addonPlanId' => $addonPlanId, 'quantity' => $quantity))->AddPackageAddonByIdResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::GetSpaceBandwidthUsage()
|
||||
*
|
||||
* @access public
|
||||
* @param int $packageId Package id
|
||||
* @param string $startDate Start date
|
||||
* @param string $endDate Ending date
|
||||
* @return object
|
||||
*/
|
||||
public function getSpaceBandwidthUsage($packageId, $startDate, $endDate)
|
||||
{
|
||||
return $this->executeServerMethod(WebsitePanel::SERVICEFILE_PACKAGES, 'GetPackageBandwidth', array('packageId' => $packageId, 'startDate' => $startDate, 'endDate' => $endDate))->GetPackageBandwidthResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::GetSpaceDiskspaceUsage()
|
||||
*
|
||||
* @access private
|
||||
* @param int $packageId Package Id
|
||||
* @return object
|
||||
*/
|
||||
public function getSpaceDiskspaceUsage($packageId)
|
||||
{
|
||||
return $this->executeServerMethod(WebsitePanel::SERVICEFILE_PACKAGES, 'GetPackageDiskspace', array('packageId' => $packageId))->GetPackageDiskspaceResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* WebsitePanel::packageAllocateIpAddress()
|
||||
*
|
||||
* @param mixed $packageId Package id
|
||||
* @param mixed $groupName Group name
|
||||
* @param mixed $pool Address pool
|
||||
* @param integer $addressesNumber Number of IP addresses
|
||||
* @param bool $allocateRandom Allocate IP addresses randomly
|
||||
* @return object
|
||||
*/
|
||||
public function packageAllocateIpAddress($packageId, $groupName = WebsitePanel::IPADDRESS_POOL_WEB, $pool = WebsitePanel::IPADDRESS_GROUP_WEBSITES, $addressesNumber = 1, $allocateRandom = TRUE)
|
||||
{
|
||||
$params = array();
|
||||
foreach (get_defined_vars() as $key => $value)
|
||||
{
|
||||
if ($key == 'params')
|
||||
continue;
|
||||
|
||||
$params[$key] = $value;
|
||||
}
|
||||
return $this->executeServerMethod(WebsitePanel::SERVICEFILE_SERVERS, 'AllocatePackageIPAddresses', $params)->AllocatePackageIPAddressesResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the requested Enterprise Server method / parameters and returns the results
|
||||
*
|
||||
* @access private
|
||||
* @param string $serviceFile Enterprise Server service filename
|
||||
* @param string $serviceMethod Enterprise Server service method name
|
||||
* @param array $methodParameters Method parameters
|
||||
* @throws Exception
|
||||
* @return object
|
||||
*/
|
||||
private function executeServerMethod($serviceFile, $serviceMethod, $methodParameters = array())
|
||||
{
|
||||
$esUrl = (($this->_esUseSsl ? "https" : "http") . "://{$this->_esServerUrl}:{$this->_esServerPort}/{$serviceFile}?WSDL");
|
||||
$soapParams = array('login' => $this->_esUsername,
|
||||
'password' => $this->_esPassword,
|
||||
'cache_wsdl' => WSDL_CACHE_NONE // WSDL caching is an annoying nightmare - we will disable it
|
||||
);
|
||||
try
|
||||
{
|
||||
$client = new SoapClient($esUrl, $soapParams);
|
||||
$result = $client->$serviceMethod($methodParameters);
|
||||
if (is_soap_fault($result))
|
||||
{
|
||||
throw new Exception($result->faultstring);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,197 +0,0 @@
|
|||
<?php if (!defined('WHMCS')) exit('ACCESS DENIED');
|
||||
// Copyright (c) 2012, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/**
|
||||
* websitepanel Server Module - websitepanel Helper Functions
|
||||
*
|
||||
* @author Christopher York
|
||||
* @package websitepanel Server Module - websitepanel Helper Functions
|
||||
* @version v1.0
|
||||
* @link http://www.websitepanel.net/
|
||||
*/
|
||||
|
||||
/**
|
||||
* websitepanel_GetErrorMessage()
|
||||
*
|
||||
* @access public
|
||||
* @param int $code
|
||||
* @return mixed
|
||||
*/
|
||||
function websitepanel_GetErrorMessage($code)
|
||||
{
|
||||
// Error codes
|
||||
$esErrorCodes = array();
|
||||
|
||||
// Include the common / known error codes
|
||||
require_once(ROOTDIR . '/modules/servers/websitepanel/websitepanel.errorcodes.php');
|
||||
$esErrorCodes = websitepanel_GetEnterpriseServerErrors();
|
||||
|
||||
// Check if the error code exists, if not return the code
|
||||
if (array_key_exists($code, $esErrorCodes))
|
||||
{
|
||||
return $esErrorCodes[$code];
|
||||
}
|
||||
else
|
||||
{
|
||||
return $code;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_CreateBandwidthDate()
|
||||
*
|
||||
* @access public
|
||||
* @param mixed $date
|
||||
* @return date
|
||||
*/
|
||||
function websitepanel_CreateBandwidthDate($date)
|
||||
{
|
||||
$dateExploded = explode('-', $date);
|
||||
$currentYear = date('Y');
|
||||
$currentMonth = date('m');
|
||||
$newDate = "{$currentYear}-{$currentMonth}-{$dateExploded[2]}";
|
||||
|
||||
$dateDiff = time() - strtotime('+1 hour', strtotime($newDate));
|
||||
$fullDays = floor($dateDiff / (60 * 60 * 24));
|
||||
if ($fullDays < 0)
|
||||
{
|
||||
return date('Y-m-d', strtotime('-1 month', strtotime($newDate)));
|
||||
}
|
||||
else
|
||||
{
|
||||
return $newDate;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_CalculateBandwidthUsage()
|
||||
*
|
||||
* @access public
|
||||
* @param mixed $params
|
||||
* @param mixed $packageId
|
||||
* @param mixed $startDate
|
||||
* @return int
|
||||
*/
|
||||
function websitepanel_CalculateBandwidthUsage($params, $packageId, $startDate)
|
||||
{
|
||||
// Create the ASPnix websitepanel_EnterpriseServer class object
|
||||
$wsp = new WebsitePanel($params['serverusername'], $params['serverpassword'], $params['serverip'], $params['configoption6'], $params['serversecure']);
|
||||
|
||||
try
|
||||
{
|
||||
$result = $wsp->getSpaceBandwidthUsage($packageId, $startDate, date('Y-m-d', time()));
|
||||
return websitepanel_CalculateUsage($result, WebsitePanel::USAGE_BANDWIDTH);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
// Do nothing, just catch the Exception to keep PHP from exploding :)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_CalculateDiskspaceUsage()
|
||||
*
|
||||
* @access public
|
||||
* @param mixed $params
|
||||
* @param mixed $packageId
|
||||
* @return int
|
||||
*/
|
||||
function websitepanel_CalculateDiskspaceUsage($params, $packageId)
|
||||
{
|
||||
// Create the ASPnix websitepanel_EnterpriseServer class object
|
||||
$wsp = new WebsitePanel($params['serverusername'], $params['serverpassword'], $params['serverip'], $params['configoption6'], $params['serversecure']);
|
||||
|
||||
try
|
||||
{
|
||||
$result = $wsp->getSpaceDiskspaceUsage($packageId);
|
||||
return websitepanel_CalculateUsage($result, WebsitePanel::USAGE_DISKSPACE);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
// Do nothing, just catch the Exception to keep PHP from exploding :)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_CalculateUsage()
|
||||
*
|
||||
* @access public
|
||||
* @param mixed $result
|
||||
* @param int $usageType
|
||||
* @return int
|
||||
*/
|
||||
function websitepanel_CalculateUsage($result, $usageType)
|
||||
{
|
||||
// Process results
|
||||
$xml = simplexml_load_string($result->any);
|
||||
$total = 0;
|
||||
if (count($xml->NewDataSet->Table) > 0)
|
||||
{
|
||||
foreach ($xml->NewDataSet->Table as $table)
|
||||
{
|
||||
switch ($usageType)
|
||||
{
|
||||
case WebsitePanel::USAGE_BANDWIDTH:
|
||||
$total = $total + $table[0]->MegaBytesTotal;
|
||||
break;
|
||||
|
||||
case WebsitePanel::USAGE_DISKSPACE:
|
||||
$total = $total + $table[0]->Diskspace;
|
||||
break;
|
||||
|
||||
default:
|
||||
$total = $total + $table[0]->MegaBytesTotal;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $total;
|
||||
}
|
||||
|
||||
/**
|
||||
* websitepanel_GetServerSettings
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
function websitepanel_GetServerSettings()
|
||||
{
|
||||
$settings = array('username' => '', 'password' => '');
|
||||
|
||||
// Retrieve the settings from the modules configuration table
|
||||
$results = select_query('tblservers', 'username,password', array('type' => 'websitepanel'));
|
||||
if (mysql_num_rows($results) != 0)
|
||||
{
|
||||
$row = mysql_fetch_array($results, MYSQL_ASSOC);
|
||||
$settings['username'] = $row['username'];
|
||||
$settings['password'] = decrypt($row['password']);
|
||||
}
|
||||
return $settings;
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -1,19 +0,0 @@
|
|||
Extract the "includes" and "modules" directories into the root of your WHMCS installation
|
||||
Overwrite any files that already exists
|
||||
|
||||
To enable addon automation...
|
||||
1. WHMCS Admin -> Setup -> Addon Modules -> "WebsitePanel Addons Automation" -> Activate
|
||||
2. Select "Configure"
|
||||
3. Enter your WebsitePanel Enterprise Server details
|
||||
4. WHMCS Admin -> Addons -> "WebsitePanel Addons"
|
||||
5. Enter your addons here. You can get the WHMCS addon ID by clicking the edit icon on the product addon and extracting the &id=x from the URL (x being the WHMCS Addon ID)
|
||||
You can retrieve your WebsitePanel addon ID by clicking the hosting addon and extracting the PlanID=x from the URL (x being the WebsitePanel Addon ID)
|
||||
6. If this is a Dedicated IP address addon, check the Dedicated IP Address box to allow the module to auto-allocate an IP address.
|
||||
|
||||
What does not work?
|
||||
- Quantities, only a single addon => addon can be allocated
|
||||
- Terminating / Suspending Addons, I've ran out of time on what I can do currently
|
||||
- When an IP address is allocated WebsitePanel does not return back what IP was allocated, so WHMCS is not updated which what IP has been allocated to his / her package at this time.
|
||||
- A single user => single package is the only way the WebsitePanel server module works. I have no plans on making this work any other way.
|
||||
|
||||
DO NOT CONTACT WHMCS FOR SUPPORT WITH THIS MODULE - THIS IS NOT DEVELOPED BY WHMCS AND HAS NO AFFILIATION WITH WHMCS OR WHMCS.COM.
|
Loading…
Add table
Add a link
Reference in a new issue