Parallels Business Automation Standard 4.5 Software Development Kit PBAS 45 SDK EN

User Manual: parallels Business Automation Standard - 4.5 - Software Development Kit Free User Guide for Parallels Business Automation Software, Manual

Open the PDF directly: View PDF PDF.
Page Count: 395

DownloadParallels Business Automation Standard - 4.5 Software Development Kit PBAS 45 SDK EN
Open PDF In BrowserView PDF
Parallels

Parallels Business
Automation Standard
Software Development Kit
Release 4.5. Revision 1.12

(c) 1999-2014

Copyright Notice
Parallels IP Holdings GmbH
Vordergasse 59
8200 Schaffhausen
Switzerland
Tel: + 41 52 632 0411
Fax: + 41 52 672 2010
Copyright © 1999-2014 Parallels IP Holdings GmbH. and its affiliates. All rights reserved.
This product is protected by United States and international copyright laws. The product's underlying
technology, patents, and trademarks are listed at http://www.parallels.com/trademarks
Microsoft, Windows, Windows Server, Windows NT, Windows Vista, and MS-DOS are registered
trademarks of Microsoft Corporation.
Linux is a registered trademark of Linus Torvalds.
Mac is a registered trademark of Apple, Inc.
All other marks and names mentioned herein may be trademarks of their respective owners.

Contents
Preface

7

Typographical Conventions .......................................................................................................................... 7
Feedback ....................................................................................................................................................... 8
Shell Prompts in Command Examples.......................................................................................................... 8
General Conventions..................................................................................................................................... 9

XML API

10

Introduction to Parallels Business Automation - Standard XML API ........................................................ 11
HSPC/API ................................................................................................................................................... 16
session_open .................................................................................................................................... 16
session_close ................................................................................................................................... 17
HSPC/API/HP............................................................................................................................................. 18
check_app_compat .......................................................................................................................... 18
check_license_compat ..................................................................................................................... 19
get_categorized_plan_list ................................................................................................................ 20
get_extended_plan_info................................................................................................................... 21
get_full_extended_plan_info ........................................................................................................... 29
get_plan_promotion_list .................................................................................................................. 30
get_promotion.................................................................................................................................. 30
get_sellable_plan_list ...................................................................................................................... 31
validate_plesk_login ........................................................................................................................ 32
HSPC/API/Billing....................................................................................................................................... 33
calculate_order ................................................................................................................................ 33
get_hosting_target_list..................................................................................................................... 47
place_order ...................................................................................................................................... 48
create_offline_payment ................................................................................................................... 54
get_order_details ............................................................................................................................. 56
get_extended_attr_list ...................................................................................................................... 56
get_account_subscr .......................................................................................................................... 57
subscr_auth ...................................................................................................................................... 57
get_subscr_info................................................................................................................................ 58
create_custom_invoice .................................................................................................................... 95
get_account_campaigns ................................................................................................................... 96
HSPC/API/Account .................................................................................................................................... 97
create_customer ............................................................................................................................... 97
create_domain_contact .................................................................................................................... 99
create_reseller ................................................................................................................................ 100
get_account_info ........................................................................................................................... 101
get_domain_contact_list ................................................................................................................ 104
get_reseller_terms.......................................................................................................................... 104
validate_password ......................................................................................................................... 104
get_extended_attr_list .................................................................................................................... 105
get_person_list ............................................................................................................................... 106
HSPC/API/Person ..................................................................................................................................... 108
auth_person.................................................................................................................................... 108
get_person_info ............................................................................................................................. 111
HSPC/API/Domain ................................................................................................................................... 112
check_domain_list ......................................................................................................................... 112
check_domain_name_syntax ......................................................................................................... 113
get_domain_list ............................................................................................................................. 113
validate_ns_list .............................................................................................................................. 114

save_contact .................................................................................................................................. 115
validate_domain_data .................................................................................................................... 116
HSPC/API/Mailer ..................................................................................................................................... 117
send ................................................................................................................................................ 117
HSPC/API/PP ........................................................................................................................................... 118
get_saved_paymethod_list............................................................................................................. 118
get_plugin_list ............................................................................................................................... 119
get_layout_hash ............................................................................................................................. 119
get_redirect_hash ........................................................................................................................... 120
pay ................................................................................................................................................. 121
get_status ....................................................................................................................................... 122
HSPC/API/Fraud ...................................................................................................................................... 122
get_warning_newpaymethod ......................................................................................................... 122
get_resume_newpaymethod .......................................................................................................... 123
get_safe_description ...................................................................................................................... 123
HSPC/API/Config..................................................................................................................................... 124
get_provider_config....................................................................................................................... 124
HSPC/API/Campaign ............................................................................................................................... 128
get_campaign ................................................................................................................................. 128
get_account_campaigns ................................................................................................................. 129
HSPC/API/SSL ......................................................................................................................................... 129
get_cert_form ................................................................................................................................ 129
validate_cert_form ......................................................................................................................... 130
get_parsed_csr_data....................................................................................................................... 131

Online Store Integration and Customization

132

Online Store Structure .............................................................................................................................. 132
Deploying Online Store ............................................................................................................................ 133
Store Installation on Remote Server .............................................................................................. 133
Open Store, Switch between Old and New Stores .................................................................................... 137
Configuring Redirect URLs to Integrate the Store with Existing Website ............................................... 138
Example 1. Redirect URL to the Store Tab ................................................................................... 140
Example 2. Pass Domain Lookup Data to the Store with Redirect URL ...................................... 141
Store Customization .................................................................................................................................. 143
Changing Store Layout, Styles and Images ................................................................................... 143
Customizing Store by Means of Configuration Parameters........................................................... 145
Integrating with 3rd Party Applications. Kayako Chat .................................................................. 148
Customizing Store Localization .................................................................................................... 151
Updating Third-Party Libraries................................................................................................................. 153
Updating jQuery ............................................................................................................................ 153
Updating Symfony Components.................................................................................................... 155

User Interface Customization

157

Screens Customization Overview ............................................................................................................. 157
Template Based Customization ................................................................................................................ 162
Customizing Vendor Control Center (PCC/RCC) .................................................................................... 162
Components Repository ................................................................................................................ 162
Screen Aliases Based Customization in Control Centers .............................................................. 169
Customizing Customer Control Panel....................................................................................................... 171
Control Panel Screen Structure...................................................................................................... 171
Control Panel Top Frame and Tabs Customization ....................................................................... 175
Customizing Main Frame .............................................................................................................. 176
Customizing Control Panel Dashboard.......................................................................................... 177
Control Panel Screens Customization Using Screen IDs .............................................................. 189
Customizing Help Bar in Control Panel ........................................................................................ 198
Adding New Fields to Accounts Registration Form ................................................................................. 199
Extended Attributes Objects .......................................................................................................... 200

Custom Extended Attribute Code Samples ................................................................................... 200
Extending E-Mail Notification Templates ................................................................................................ 203
Placeholder Creation Tools ........................................................................................................... 204
Custom Placeholders Samples ....................................................................................................... 211
Creating Placeholders for Custom Extended Attributes ................................................................ 214
Customizing Language Packs ................................................................................................................... 215
Language Pack Customization Tools ............................................................................................ 215
Language Pack Customization Sample.......................................................................................... 219

Integration with External Helpdesk

222

External Helpdesk API ............................................................................................................................. 222

Adding New Language Pack

225

Parallels Business Automation - Standard Translation Capabilities ......................................................... 226
Preparing Directories and Files for New Language Pack ......................................................................... 227
Translating Interface ................................................................................................................................. 228
Translating General Labels and Messages..................................................................................... 229
Translating ToolTips for Menu Items............................................................................................ 233
Translating the On-Screen Hints ................................................................................................... 233
Translating Help Files ................................................................................................................... 234

Plug-Ins Development

236

Plug-Ins Toolkit Methods ......................................................................................................................... 237
Anti-Fraud Plug-ins .................................................................................................................................. 238
Graphical Representation .............................................................................................................. 240
Middle Tier Module....................................................................................................................... 244
Post-Installation Configuration Script ........................................................................................... 250
Anti-Fraud Manager Value Structure ............................................................................................ 251
Component repository configuration files ..................................................................................... 252
Anti-Fraud Plug-In Package Structure ........................................................................................... 252
Payment Plug-Ins Development ............................................................................................................... 253
Payment Plug-Ins Types ................................................................................................................ 253
Payment Plug-In Packaging........................................................................................................... 255
Payment Plug-In Modules and Their Name Spaces ...................................................................... 258
Implementation Details.................................................................................................................. 260
Payment Method Plug-Ins ............................................................................................................. 261
Payment Processing Plug-Ins ........................................................................................................ 267
Creating a New Promotion Plug-In........................................................................................................... 287
Introductory Notes About Promotion Plug-Ins .............................................................................. 288
Promotion Plug-Ins Objects and Their Naming Conventions ....................................................... 290
Web Interface Module ................................................................................................................... 291
Middle Tier Module....................................................................................................................... 292
Registering a Promotion Plug-In ................................................................................................... 297
Domain Registration Plug-In Development Tools .................................................................................... 299
Domain Plug-In Namespaces ........................................................................................................ 299
HSPC::MT::Plugin::DM Methods ................................................................................................. 299
HSPC::Plugin::DM Methods ......................................................................................................... 317
Required Toolkit Methods ............................................................................................................. 323
Creating a New DNS Plug-In ................................................................................................................... 326
Introductory Notes About DNS Plug-In ........................................................................................ 326
Registering a DNS Plug-In ............................................................................................................ 328
Web Interface Module ................................................................................................................... 329
Middle Tier Module....................................................................................................................... 337
SSL Certificate Plug-In Developmet Tools .............................................................................................. 340
SSL Certificate Plug-In Namespaces............................................................................................. 340
Middle Tier Module....................................................................................................................... 341

Graphical Presentation Module ..................................................................................................... 349
Building New Plug-In ............................................................................................................................... 355

Tools

358
Bulk Domain Registration / Transfer ........................................................................................................ 358
Credit Card Import .................................................................................................................................... 358
Bank Accounts Import .............................................................................................................................. 359
Migration from Parallels Plesk Billing ..................................................................................................... 359
Bulk Parallels Plesk Domains / Clients Resolving ................................................................................... 359
Script Checking Domain Renewal Date Using WHOIS Information ....................................................... 359
Cleaning Tool ........................................................................................................................................... 360
DNS Synchronization Tool ....................................................................................................................... 361
Parallels Virtuozzo Containers Integration ............................................................................................... 361
Virtuozzo Templates Installing Tool ............................................................................................. 362
Tools for Actions Execution over/in Container ............................................................................. 364
Using Data Import and Export Command Line Tools .............................................................................. 365
Exporting Data into XML Files ..................................................................................................... 366
Importing Billing Data in the Form of XML File .......................................................................... 372
Importing Subscriptions Using XML API ..................................................................................... 374
Examples of XML Files Used for Billing Data Import ................................................................. 375
Example of XML File for Traffic Classes Import ......................................................................... 382
Example of XML File for Traffic Statistics Import ....................................................................... 384
Import-Data Script ......................................................................................................................... 387

Changes Description

390

Index

391

7

CHAPTER 1

Preface
In This Chapter
Typographical Conventions .................................................................................................. 7
Feedback ............................................................................................................................... 8
Shell Prompts in Command Examples .................................................................................. 8
General Conventions ............................................................................................................. 9

Typographical Conventions
Before you start using this guide, it is important to understand the documentation conventions
used in it.
The following kinds of formatting in the text identify special information.
Formatting convention

Type of Information

Example

Special Bold

Items you must select, such Go to the System tab.
as menu options, command
buttons, or items in a list.
Titles of chapters, sections, Read the Basic Administration
and subsections.
chapter.

Italics

Used to emphasize the The system supports the so
importance of a point, to called wildcard character
introduce a term or to search.
designate a command line
placeholder, which is to be
replaced with a real name or
value.

Monospace

The names of commands, The license file is located in
files, directories, and domain the
http://docs/common/
names.
licenses directory.

Preface
Preformatted

On-screen computer output in # ls –al /files
total 14470
your command-line sessions;
source code in XML, C++, or
other
programming
languages.

Preformatted Bold

What you type, contrasted # cd /root/rpms/php
with on-screen computer
output.

CAPITALS

Names of
keyboard.

KEY+KEY

Key combinations for which CTRL+P, ALT+F4
the user must press and hold
down one key and then press
another.

keys

on

8

the SHIFT, CTRL, ALT

Feedback
If you have found a mistake in this guide, or if you have suggestions or ideas on how to improve
this
guide,
please
send
your
feedback
using
the
online
form
at
http://www.parallels.com/en/support/usersdoc/. Please include in your report the guide's title,
chapter and section titles, and the fragment of text in which you have found an error.

Shell Prompts in Command
Examples
Command line examples throughout this guide presume that you are using the Bourne-again
shell (bash). Whenever a command can be run as a regular user, we will display it with a dollar
sign prompt. When a command is meant to be run as root, we will display it with a hash mark
prompt:
Bourne-again shell prompt

$

Bourne-again shell root prompt

#

Preface

9

General Conventions
Be aware of the following conventions used in this book.


Chapters in this guide are divided into sections, which, in turn, are subdivided into
subsections. For example, Documentation Conventions is a section, and General Conventions
is a subsection.



When following steps or using examples, be sure to type double-quotes ("), left singlequotes (`), and right single-quotes (') exactly as shown.



The key referred to as RETURN is labeled ENTER on some keyboards.

The root path usually includes the /bin, /sbin, /usr/bin and /usr/sbin directories, so
the steps in this book show the commands in these directories without absolute path names.
Steps that use commands in other, less common, directories show the absolute paths in the
examples.

10

CHAPTER 2

XML API
XML API has been developed to become primary point of integration with external shopping
carts, billing, and accounting systems and other third-party components.

In This Chapter
Introduction to Parallels Business Automation - Standard XML API .................................. 11
HSPC/API ............................................................................................................................. 16
HSPC/API/HP ....................................................................................................................... 18
HSPC/API/Billing ................................................................................................................. 33
HSPC/API/Account .............................................................................................................. 97
HSPC/API/Person ................................................................................................................. 108
HSPC/API/Domain ............................................................................................................... 112
HSPC/API/Mailer ................................................................................................................. 117
HSPC/API/PP........................................................................................................................ 118
HSPC/API/Fraud................................................................................................................... 122
HSPC/API/Config ................................................................................................................. 124
HSPC/API/Campaign............................................................................................................ 128
HSPC/API/SSL ..................................................................................................................... 129

XML API

11

Introduction to Parallels Business
Automation - Standard XML API
Parallels Business Automation - Standard XML API Gate is based on SOAP protocol, currently
maintained by World Wide Web Consortium at http://www.w3c.org and supported by most of
modern programming languages as framework for messages exchange and remote method calls.
Parallels Business Automation - Standard XML API Gate is implemented as mod_perl handler
and inherits from SOAP::Transport::HTTP::Apache, i.e. is based on the functionality
provided by SOAP::Lite module available from CPAN. Please, refer to SOAP::Lite
documentation for general information and this section provides implementation details and
examples.
Module namespaces are package names with '::' included are replaced with '/' - see examples
below.
Security
There are two different strategies used by Parallels Business Automation - Standard XML API
Gate in defining security requirements:


For requests coming from a local machine (directly to backend server without involving
frontend, i.e. originating from the same address space and using http://localhost:8080 or
https://localhost:8443 as Parallels Business Automation - Standard XML API Gate proxy
URL).



For requests coming from remote machines (using frontend for proxying requests to
backend).

Safe packages and methods:


local requests: all packages are considered safe and all their methods are public



remote requests: only packages with namespace starting with HSPC/API are considered as
safe

Authentication and sessions handling:


local requests: authentication by password is possible, but not required, authentication is
possible by account number only,



remote requests: authentication by password is required.

Authentication is done with call to session_open() interface in HSPC/API (on page 16)
namespace and relies on functionality provided by Security Manager.
Interfaces in HSPC/API namespace:
session_open()
Parameters: account_no, e-mail, password
Performs authentication with given parameters (required for remote requests and optional
for local, except for account_no or server_name) and initializes session.

XML API

12

If account_no is set to 0, first account which user has roles in is chosen automatically,
but in this case e-mail and password must be set as well.
If server_name is passed and account_no is empty or missing, account_no is
located by vendor's server name located in server_name parameter.
Returns either unique value to be used as HSPC-SID in next requests (see examples of
clients) or SOAP fault envelope with error message.
session_close()
Performs cleanup of session identified by HSPC-SID header.
Returns undef or SOAP fault envelope with error message.
Configuration
Parallels Business Automation - Standard XML API Gate intended for requests from both
local and remote machines is pre-configured at /hspc/xml-api location.
backend
/etc/hspcd/conf/hspc_xml-api.conf

SetHandler perl-script
PerlHandler HSPC::XMLAPI
Order Allow,Deny
Allow from all


frontend
/etc/httpd/conf/hspc_frontend.conf:

XML API

13


...
SSLEngine on
...

Order Deny,Allow
Allow from all



Order Deny,Allow
Deny from all


Security limitation is set by explicitly allowing /hspc/xml-api location for HTTPS
connections and denying for HTTP connections, so that plain text SOAP envelopes couldn't be
read by intruders.
Parallels Business Automation - Standard XML API Gate could be opened at another locations
as well by configuring backend and frontend server in the same way as described above, i.e. by
adding more Location blocks to backend and frontend servers' configurations.
Servers
Exported methods of packages providing API through Parallels Business Automation - Standard
XML API Gate should rely on the following rules:


in order to be available for remote requests, a package name should start from
HSPC::API:: prefix and have its version set:

our $VERSION = 1.0;



first parameter of each call to exported method is always package name, not reference or
whatever;



$ENV{session} is valid only for requests including session ID returned by
session_open() call, i.e. could be valid for local and always valid for remote requests;



$ENV{security_obj} is valid only for requests including session ID and contains valid
account and user IDs identified by call to session_open() (on page 16);



die with error message to immediately return it in SOAP fault envelope with message as
description, using the call like this:
## return fault with:
## - error code 'ErrorCode'
## - error message
die HSPC::API->fault('ErrorCode', 'Error description.');

Notes for HSPstore:
If error code starts with the User prefix, its description is shown to PHP Store visitor, so it
must be localized:
die HSPC::API->fault('UserPassword', string('passwords_do_not_match'));

If error code does not start with the User prefix, its description is not shown to PHP Store
visitor and is only logged to vendor's local log file, so it must not be localized:

XML API

14

die HSPC::API->fault('AuthenRequired', 'Authentication required.');

feel free to return any data structures that you can theoretically serialize to XML - and do not
expect an object to arrive at remote side by just returning its blessed reference (guess why it's
just ridiculous).
Examples
HSPC/Test.pm (local requests):
package HSPC::Test;
use strict;
use Data::Dumper;
## returns dump of parameters list, including class name
sub method {
return Dumper(\@_);
}
1;

HSPC/API/Test.pm (remote requests):
package HSPC::API::Test;
use strict;
our $VERSION = 1.0;
## gets/sets parameter with key passed as a parameter
sub param {
my (undef, $key, $value) = @_;
return defined $value
? $ENV{session}->{$key} = $value
: $ENV{session}->{$key};
}
1;

Clients
In order to initialize stable communication with Parallels Business Automation - Standard XML
API Gate, first call session_open() in HSPC/API (on page 16) namespace to receive
HSPC-SID value and then add HSPC-SID to either HTTP or SOAP headers to each request
before sending SOAP envelope.
Examples
local.pl:

use SOAP::Lite;
use strict;
my $result = SOAP::Lite
->proxy('http://127.0.0.1:8080/hspc/xml-api') ## Gate URL
->ns('HSPC/Test') ## package namespace
->method ## method name
('param1', {param2 => 'test', param3 => [1, 2, 3]}, 0); ## parameters
print $result->fault
? 'Fault: ' . $result->faultstring
: 'Result: ' . $result->result;

local.php:
call(
'method', // method name
array ("param1", array ("param2" => "test", "param3" => array (1, 2, 3)),
0), // parameters
'HSPC/Test' // package namespace

XML API
);
if ($client->fault)
die("Fault: {$client->faultstring}");
echo $result;
?>

remote.pl:
use strict;
use SOAP::Lite;
my $client = SOAP::Lite
->proxy('https://192.168.0.100/hspc/xml-api')
->on_fault(sub {die 'Fault: ' . $_[1]->faultstring});
## pass authentication and receive session ID
my $sid = $client->ns('HSPC/API/1.0')->session_open({
email => 'email@provider.com', password => 'password'
})->result->{session_id};
## put session ID to outgoing requests' HTTP headers
$client->transport->http_request->header('HSPC-SID' => $sid);
## make session-dependent calls
$client->ns('HSPC/API/Test/1.0');
$client->param('key' => 'value');
print $client->param('key')->result;
$client->ns('HSPC/API/1.0')->session_close;

remote.php
call('session_open', array (
array ('email' => 'root@provider.com', 'password' => '1q2w3e')
), 'HSPC/API/1.0');
$sid = $sid_result['session_id'];
if ($client->fault)
die("Fault: {$client->faultstring}");
## put session ID to outgoing requests' SOAP headers $client>setHeaders("$sid");
## make session-dependent calls
$client->call('param', array ('key', 'value'), 'HSPC/API/Test/1.0');
if ($client->fault)
die("Fault: {$client->faultstring}");
echo $client->call('param', array ('key'), 'HSPC/API/Test/1.0') . "\n";
if ($client->fault)
die("Fault: {$client->faultstring}");
$client->call('session_close', undef, 'HSPC/API/1.0');
if ($client->fault)
die("Fault: {$client->faultstring}"); ?>

15

XML API

16

HSPC/API
session_open
The function opens session with Parallels Business Automation - Standard XML API server.
The input parameters composition depends on the store installation: (local, i.e. Store is installed
on the same server as Parallels Business Automation - Standard or remote, i.e., the Store
installed on a remote server).
In the function call the namespace must be followed by API version number, e.g. HSPC/API/1.0
Note: Session ID returned by session_open must be included in HTTP Headers or SOAP
Headers for all the other methods called in the frame of each session.
Parameters:
account_id

ID of a vendor account a session is to be
opened for. This parameter is to be passed in
case of a local Store installation. Optional
parameter in case server_name is specified.

server_name

Vendor server name used for authentication.
This parameter is to be passed in case of a local
Store installation. Optional parameter in case
account_id is specified.

email

Registered person e-mail. Parameter is to be
specified in case of the Store remote
installation together with the password
parameter.

password

Registered person password. Parameter is to be
specified in case of the Store remote
installation together with the email parameter.

Returns: {
account_id

=>

session_id

=> }

Parameter

Means

account_id

The numerical identifier of an account a
session has been opened for. Account ID is
returned in any case, a vendor account ID is
then used by the other Store API functions.

session_id

The identifier of the opened session.

XML API

17

Common SOAP Faults codes:
UserError

Mandatory parameter missing from SOAP
method call

WrongParams

Invalid method parameters

No specific SOAP Faults codes.

session_close
The function closes session.
In the method call the namespace must be followed by API version number, e.g. HSPC/API/1.0
The function usage is not necessary but recommended.
No parameters.
No return value.
Common SOAP Faults codes:
UserError

Mandatory parameter missing from SOAP
method call

WrongParams

Invalid method parameters

No specific codes.

XML API

18

HSPC/API/HP
check_app_compat
The function checks applications compatibility in Plesk and Virtuozzo Container hosting plans.
Parameters:
hp_sid

Hosting plan series key

app_list

The list of application templates IDs.

os_tmpl

Optional parameter: ID of OS template
selected for a hosing plan. If not passed, then
the method will return the result as if OS
template with the lowest ID (from OSes
included in hosting plan) was passed as
os_tmpl.

Returns: result => 1 on success or Fault
SOAP Faults codes:
HPNoApplicationSupport

Hosting plan passed as an argument does not
support an application.

UserAppIncompat

Application(s) passed are incompatible with
each other.

XML API

check_license_compat
The function checks licenses compatibility in hosting plans.
Parameters:
hp_sid

Hosting plan series key

lic_list

The list of licenses IDs

Returns: result => 1 on success or Fault
SOAP Faults codes:
HPNoLicClassSupport

Hosting plan does not support at least one
license

HPBaseLicConflict

Base licenses specified are incompatible.

HPNoBaseForAddon

No base license has been specified for an addon license.

19

XML API

20

get_categorized_plan_list
The method returns the list of hosting plans grouped by categories. Only the basic information is
returned.
The method is similar to get_sellable_plan_list (on page 31). Input parameters are
the same, but output parameters differ: the list of returned hosting plans is grouped by
categories.
Parameters:
type_id

Optional parameter: The ID of hosting plan
type. Only hosting plans of the type specified
will be returned.

promo_id

Optional parameter: ID of promotion to be
applied to hosting plans prices.

account_id

Optional parameter: ID of account the prices
are to be calculated for.

sb_sid

Optional parameter: Trial site ID. The
parameter is predefined on redirect from
Sitebuilder.

sb_node

Optional parameter:Sitebuilder node numeric
ID assigned in PBAS.

Returns: plan_list => HP list
SOAP Faults codes:
HPProviderNotAllowed

Provider account ID is used to get hosting
plan details. Only customer or reseller account
ID is allowed as parameter.

XML API

21

get_extended_plan_info
The function returns extended information about a hosting plan. Extended information is all the
data not shown in hosting plans listing.
Parameters:
hp_sid

Optional parameter: Hosting plan series key. If
not specified, the information about default
domain hosting plan will be returned.

promo_id

Optional parameter: The ID of promotion to be
applied to hosting plan prices.

account_id

Optional parameter: ID of account the prices
are to be calculated for.

period

Optional parameter: Subscription period the
discounts are to be calculated for.

for_trial

Optional parameter: If this parameter is
specified then zero prices for add-ons (custom
attributes, applications, etc.) will be returned.

os_tmpl

Optional parameter: ID of OS template
selected for a hosing plan. If not passed, then
the method will return the result as if OS
template with the lowest ID (from OSes
included in hosting plan) was passed as
os_tmpl.

Returns: EXTENDED_HP_INFO (on page 22)
SOAP Faults codes:
HPNoTrial

The for_trial parameter has been specified, but
a hosting plan does not support trial periods.

HPNotFound

The hosting plan specified is not found.

HPNoDefaultDMPlan

Hosting plan series key is not specified and
default domain hosting plan does exist.

HPProviderNotAllowed

Provider account ID is used to get hosting plan
details. Only customer or reseller account ID is
allowed as parameter.

XML API

22

Example of EXTENDED_HP_INFO Hash
$VAR1 = {
'dns_hosting' => {
'is_unlim' => '0',
'included_value' => '5',
'max_value' => '10',
'overuse_rate' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' =>
'1.00',
'is_complimentary' => '0'
},
'price' => '439182056',
'full_discount_period' => undef,
'promo_name' => undef
}
},
'assigned_dm_plan' => '2',
'is_trial' => '0',
'vendor_id' => '1',
'name' => 'Domain Registration Support',
'provider_id' => '1',
'description' => '',
'question_list' => [
{
'question' => 'How do you like services
included in your subscription?',
'answer' => undef,
'id' => '1'
}
],
'custom_attribute_list' => [
{
'is_exclusive' => '1',
'cat_name' => 'Support'
'description' => 'Attribute
description'
'cat_id' => '1'
'cat_sort_order' => '1'
'option_list' => [
{
'is_default' => '0',
'sort_order' =>
'17',
'name' => 'Support
by phone',
'is_included' =>
'0',
'upgrade_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',

XML API

'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' => '50.0000',
'is_complimentary' => '0'
},
'price' => '437640876',
'full_discount_period' => undef,
'promo_name' => undef
},
'setup_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' => '20.0000',
'is_complimentary' => '0'
},
'price' => '382151368',
'full_discount_period' => undef,
'promo_name' => undef
},
'subscr_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,

23

XML API

24

'price_original' => {
'price' => '50.0000',
'is_complimentary' => '0'
},
'price' => '440264964',
'full_discount_period' => undef,
'promo_name' => undef
},
'id' => '17'
},
{
'is_default' => '0',
'sort_order' =>
'18',
'name' => 'ICQ
Consultant',
'is_included' =>
'0',
'upgrade_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,

'price_original' => {
'price' => '30.0000',
'is_complimentary' => '0'
},
'price' => '438862184',
'full_discount_period' => undef,
'promo_name' => undef
},
'setup_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,

XML API

'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' => '20.0000',
'is_complimentary' => '0'
},
'price' => '440650072',
'full_discount_period' => undef,
'promo_name' => undef
},
'subscr_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' => '30.0000',
'is_complimentary' => '0'
},
'price' => '439183520',
'full_discount_period' => undef,
'promo_name' => undef
},
'id' => '18'
}
],
'sort_order' => '0',
'is_required' => '0',
'name' => 'Miscellaneous',
'id' => '6'
}
],
'summary' => '',
'fee_list' => [
{
'setup_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,

25

XML API
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' =>
'10.0000',
'is_complimentary' => '0'
},
'price' => '440550508',
'full_discount_period' => undef,
'promo_name' => undef
},
'subscr_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' =>
'5.0000',
'is_complimentary' => '0'
},
'price' => '440553148',
'full_discount_period' => undef,
'promo_name' => undef
},
'period' => '2592000'
},
{
'setup_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' =>
'20.0000',
'is_complimentary' => '0'
},
'price' => '439338076',
'full_discount_period' => undef,
'promo_name' => undef
},
'subscr_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' =>
'10.0000',
'is_complimentary' => '0'
},
'price' => '440307792',
'full_discount_period' => undef,

26

XML API
'promo_name' => undef
},
'period' => '7776000'
},
{
'setup_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' =>
'30.0000',
'is_complimentary' => '0'
},
'price' => '439238836',
'full_discount_period' => undef,
'promo_name' => undef
},
'subscr_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' =>
'15.0000',
'is_complimentary' => '0'
},
'price' => '440439372',
'full_discount_period' => undef,
'promo_name' => undef
},
'period' => '15552000'
},
{
'setup_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' =>
'40.0000',
'is_complimentary' => '0'
},
'price' => '438988552',
'full_discount_period' => undef,
'promo_name' => undef
},
'subscr_fee' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',

27

XML API
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' =>
'20.0000',
'is_complimentary' => '0'
},
'price' => '440380584',
'full_discount_period' => undef,
'promo_name' => undef
},
'period' => '31104000'
}
],
'id' => '21',
'category' => undef,
'type' => {
'summary' => 'Miscellaneous hosting plans designed for
selling any arbitrary services. It gives highest flexibility together with
Custom Attributes and Questionnaire.',
'name' => 'Miscellaneous',
'id' => '7',
'description' => ''
},
'qos_list' => [
{
'is_unlim' => '0',
'incl_amount' => '5',
'max_amount' => '10',
'overuse_rate' => {
'is_discount' => '0',
'promo_period' => undef,
'promo_percent' => undef,
'is_promo' => '0',
'discount_percent' => undef,
'discount_amount' => undef,
'promo_amount' => undef,
'price_original' => {
'price' =>
'1.00',
'is_complimentary' => '0'
},
'price' => '439020192',
'full_discount_period' => undef,
'promo_name' => undef
},
'id' => '4000',
'name' => 'Number of domains with DNS hosting
provided',
'is_metered' => '0',
'short_name' => 'numdnshosting',
'units' => 'domain(s)',
'is_rateable' => '1',
'multiplier' => '1'
}
],
'series_key' => '3'
};

28

XML API

29

get_full_extended_plan_info
The method returns extended information about a hosting plan. Extended information is all the
data not shown in hosting plans listing.
The method is similar to the get_extended_plan_info (on page 21).
The difference between these methods is: the get_extended_plan_info method returns
resources and applications for a specified OS. The get_full_extended_plan_info
method returns resources and applications for all OSes enabled for a hosting plan.
Parameters:
hp_sid

Optional parameter: Hosting plan series key. If
not specified, the information about default
domain hosting plan will be returned.

promo_id

Optional parameter: The ID of promotion to be
applied to hosting plan prices.

account_id

Optional parameter: ID of account the prices
are to be calculated for.

period

Optional parameter: Subscription period the
discounts are to be calculated for.

for_trial

Optional parameter: If this parameter is
specified then zero prices for add-ons (custom
attributes, applications, etc.) will be returned.

os_tmpl

Optional parameter: ID of OS template
selected for a hosing plan. If not passed, then
the method will return the result as if OS
template with the lowest ID (from OSes
included in hosting plan) was passed as
os_tmpl.

Returns: EXTENDED_HP_INFO (on page 22)
SOAP Faults codes:
HPNoTrial

The for_trial parameter has been specified, but
a hosting plan does not support trial periods.

HPNotFound

The hosting plan specified is not found.

HPNoDefaultDMPlan

Hosting plan series key is not specified and
default domain hosting plan does exist.

HPProviderNotAllowed

Provider account ID is used to get hosting plan
details. Only customer or reseller account ID is
allowed as parameter.

XML API

get_plan_promotion_list
The function returns the list of promotions applicable to a hosting plan.
Parameters:
hp_sid

Hosting plan series key.

Returns: PROMOTION list
SOAP Faults codes:
HPNoPromoFound

No promotions are applied to a hosting plan.

get_promotion
The function returns information about a promotion by a promotion ID.
Parameters:
promo_id

Promotion ID.

Returns: PROMOTION:
SOAP Faults codes:
HPNoPromoSeriesFound

No promotion with ID specified exists.

30

XML API

get_sellable_plan_list
The function returns the list of hosting plans for sale. The base information only is returned.
Parameters:
type_id

Optional parameter: The ID of hosting plan
type. Only hosting plans of the type specified
will be returned.

promo_id

Optional parameter: ID of promotion to be
applied to hosting plans prices.

account_id

Optional parameter: ID of account the prices
are to be calculated for.

sb_sid

Optional parameter: Trial site ID. The
parameter is predefined on redirect from
Sitebuilder.

sb_node

Optional parameter: Sitebuilder
numeric ID assigned in PBAS.

node

Returns: plan_list => HP list
SOAP Faults codes:
HPProviderNotAllowed

Provider account ID is used to get hosting
plan details. Only customer or reseller account
ID is allowed as parameter.

31

XML API

validate_plesk_login
The function checks Plesk Administrator login, password, and forward URL.
Parameters:
login

Optional parameter: Plesk Administrator
login.

password

Optional parameter: Plesk Administrator
password.

forward_url

Optional parameter: Plesk forwarding URL.

Returns: result => 1 on success, Fault otherwise
SOAP Faults codes:
PleskLoginInvalid

Plesk Administrator login invalid.

PleskPasswordInvalid

Plesk Administrator password invalid.

UserPleskForwardURLInvalid

Plesk forwarding URL invalid.

32

XML API

HSPC/API/Billing
calculate_order
The function calculates prices in an order.
Parameters:
account_id

ID of account the prices are to be calculated for.

hp_sid

Optional parameter: Hosting plan series key.

hp_id

Optional parameter: Hosting plan ID.

period

Optional parameter in case a period is trial (for_trial
parameter is specified) or if a domain hosting plan is
purchased. Subscription period.

promo_id

Optional parameter: The ID of promotion to be applied to
hosting plan prices.

domain_hash

Optional parameter: The list of domains.

app_list

Optional parameter: The list of application templates IDs.

attribute_list

The list of custom attributes.

sb_plan

Optional parameter: The parameter is to be used only if
Sitebuilder service is included in a hosting plan.
If a Sitebuilder site already exists, the Sitebuilder site alias
must be passed. If a new Sitebuilder site is to be created,
the 'new' value must be passed.

33

XML API

license_list

Optional parameter: List of licenses included in a hosting
plan. The list of licences is presented as the following
hash:
'license_list' => {
'plugin_1' => {
'SITEBUILDER' => {
'feature_list' => [
'500_SITES',
'1YR_PREMIUM_SUPPORT_PACK',
'MULTI_SERVER_CAPABILITY',
'1YR_EMAIL_SUPPORT_PACK'
]
},
'PLESK_75_RELOADED' => {
'addon_list' => {
'PLESK_BATTLEFIELD' => {
'feature_list' => [
'5_BATTLEFIELD_SERVERS'
]
},
'PLESK_CS_GAMESERVER' => {
'feature_list' => []
}
},
'feature_list' => [
'100_DOMAINS',
'TROUBLE_TICKETING_SYSTEM',
'1YR_PREMIUM_SUPPORT_PACK',
'COLDFUSION',
'INEXPENSIVE_SERVER',
'EXPENSIVE_SERVER'
]
}
}
}

login

Optional parameter: The list can include three parameters:


password




login
forwarding URL

The parameters composition depends upon hosting plan
type.
answer_list

The list of answers on a hosting plan questionnaire. Each
answer is a list consisting of a question ID and an answer
string.

qos_list

Optional parameter. The list of billable resources
presented as the following hash:
{
'res_id_1003'
=>
{'res_id'
=>
'1003','value' => '2','multiplier' => '1'},
'res_id_1012'
=>
{'res_id'
=>
'1012','value' => '1','multiplier' => '1'},
...

34

XML API

}
Where:
res_id - is a resource numerical identifier assigned in the
Parallels Business Automation - Standard database
multiplier - is a resource units

value - is an additional resource value ordered over the
included value.
Returns: ORDER (on page 37).
SOAP Faults codes:
AFMdenied

Anti-Fraud Manager has stopped an order.

AuthzError

Authorization error.

DomainRequired

Hosting plan requires a domain registration, but no
domains were registered.

HPNoApps

Applications specified are not supported by a hosting
plan.

HPNoDomainAction

A domain operation specified is not supported.

HPNoDomainAvailable

A domain name is not available for registration.

HPNoDomainReg

Hosting plan does not support domain registration.

HPNoDomainSubscrAllowed

No more domains allowed for a hosting plan. Allowed
limit for domains registration is used up.

HPNoLicClasses

Licenses specified are not supported by a hosting plan.

HPNoSB

Sitebuilder service specified is not supported by a hosting
plan.

HPNoSecureWhois

A domain hosting plan does not support secure whois
service.

HPNoTransferDomainAvailab A domain specified is not available for transfer in a
le
particular hosting plan.
HPNoTrial

Hosting plan does not support trial periods.

HPSBErrors

Errors connected with Sitebuilder site have occurred
during order processing.

InvalidDomain

Invalid domain name was specified.

NoOrderForProvider

Provider tries to place order for themselves.

35

XML API

NoPointerAllowed

Domain pointer operation is not available for a domain
specified.

NoQuestion

No question exists in a hosting plan for an answer
specified.

NoSubdomain

Subdomain creation is not available for a domain
specified.

OrderFailed

Order creation error.

SubscrNotFound

A subscription a domain registration is to be added to
does not exist.

TLDNoSuchPeriod

A domain registration period specified does not
supported for a TLD.

UserNoVPSPasswd

No password specified for Container.

UserVPSPasswdWeak

Container password does not meet the password strength
requirements.

NoHPSidOrID

Hosting plan sid or id is not set.

NOPersonId

Require person_id but not set in request

36

XML API

37

Examples of ORDER Hash
Example 1:
$VAR1 = {
'time_stamp' => '2006-08-07 10:34:59',
'doc_balance_print' => '15.0000',
'detail_list' => [
{
'count' => undef,
'period' => '0',
'taxfree_amount' => '10.0000',
'quantity' => undef,
'taxfree_gross_amount'

=>

'10.0000',
'duration' => '0',
'discount' => '0.00',
'rate' => '10.000001',
'amount' => '10.0000',
'unit' => '0',
'comment'

=>

'Dedicated

Server

hosting plan setup fee',
'gross_amount' => '10.0000',
'multiplier' => undef
},
{
'count' => '1.000000',
'period' => '2592000',
'taxfree_amount' => '5.0000',
'quantity' => undef,
'taxfree_gross_amount' => '5.0000',

XML API

38

'duration' => '0',
'discount' => '0.00',
'rate' => '5.000001',
'amount' => '5.0000',
'unit' => '0',
'comment'
hosting plan subscription fee',

=>

'Dedicated

Server

'gross_amount' => '5.0000',
'multiplier' => undef
}
],
'rperiod' => '2592000',
'order_type' => '100',
'doc_status_txt' => 'open',
'plan_type' => '3',
'added_by_account' => '3',
'bhp_id' => '1',
'doc_total' => '15.0000',
'id' => '354057',
'doc_balance' => '15.0000',
'doc_subtotal_print' => '15.0000',
'subscr_end_date' => undef,
'period' => '2592000',
'is_tax_included' => undef,
'name' => 'order',
'doc_subscr_prices' => undef,
'description'

=>

Hosting',
'plan_id' => '1',

'Order

on

purchase

Dedicated

XML API

'doc_type' => 'OR'
};

Example 2:

39

XML API

40

$VAR1 = {
'doc_balance_print' => '0.0000',
'time_stamp' => '2007-12-14 16:04:12',
'detail_list' => [
{
'count' => undef,
'period' => '0',
'taxfree_amount' => '5.0000',
'quantity' => '',
'taxfree_gross_amount' => '5.0000',
'duration' => '',
'discount' => '0.00',
'rate' => '4.240000',
'amount' => '4.2400',
'unit' => '',
'comment' => 'Virtuozzo Container with lics hosting plan setup
fee',
'gross_amount' => '4.2400',
'multiplier' => undef
},
{
'count' => '1.000000',
'period' => '2592000',
'taxfree_amount' => '5.0000',
'quantity' => '',
'taxfree_gross_amount' => '5.0000',
'duration' => '1 month(s)',
'discount' => '0.00',
'rate' => '4.240000',
'amount' => '4.2300',
'unit' => '',
'comment' => 'Virtuozzo Container with lics hosting plan
subscription fee',
'gross_amount' => '4.2400',
'multiplier' => undef
},
{
'count' => '1.000000',
'period' => '31104000',
'taxfree_amount' => '10.0000',
'quantity' => '',
'taxfree_gross_amount' => '10.0000',
'duration' => '1 year(s)',
'discount' => '0.00',
'rate' => '8.470000',
'amount' => '8.4800',
'unit' => '',
'comment' => 'Domain testdomain.com registration for 1 year',
'gross_amount' => '8.4700',
'multiplier' => undef
},
{
'count' => '1.000000',
'period' => '0',

XML API

41

'taxfree_amount' => '123.0000',
'quantity' => '',
'taxfree_gross_amount' => '123.0000',
'duration' => '',
'discount' => '0.00',
'rate' => '104.240000',
'amount' => '104.2400',
'unit' => '',
'comment' => 'Workgroup Administrator Control Panel setup fee',
'gross_amount' => '104.2400',
'multiplier' => undef
},
{
'count' => '1.000000',
'period' => '2592000',
'taxfree_amount' => '11.0000',
'quantity' => '',
'taxfree_gross_amount' => '11.0000',
'duration' => '1 month(s)',
'discount' => '0.00',
'rate' => '9.320000',
'amount' => '9.3200',
'unit' => '',
'comment' => 'Workgroup Administrator Control Panel monthly
fee',
'gross_amount' => '9.3200',
'multiplier' => undef
},
{
'count' => '1.000000',
'period' => '0',
'taxfree_amount' => '33.0000',
'quantity' => '',
'taxfree_gross_amount' => '33.0000',
'duration' => '',
'discount' => '0.00',
'rate' => '27.970000',
'amount' => '27.9600',
'unit' => '',
'comment' => 'Php As3 setup fee',
'gross_amount' => '27.9700',
'multiplier' => undef
},
{
'count' => '1.000000',
'period' => '2592000',
'taxfree_amount' => '21.0000',
'quantity' => '',
'taxfree_gross_amount' => '21.0000',
'duration' => '1 month(s)',
'discount' => '0.00',
'rate' => '17.800000',
'amount' => '17.8000',
'unit' => '',
'comment' => 'Php As3 monthly fee',

XML API

'gross_amount' => '17.8000',
'multiplier' => undef
},
{
'count' => '1.000000',
'period' => '0',
'taxfree_amount' => '23.0000',
'quantity' => '',
'taxfree_gross_amount' => '23.0000',
'duration' => '',
'discount' => '0.00',
'rate' => '19.490000',
'amount' => '19.4900',
'unit' => '',
'comment' => 'Psa Sb Publish As3 setup fee',
'gross_amount' => '19.4900',
'multiplier' => undef
},
{
'count' => '1.000000',
'period' => '2592000',
'taxfree_amount' => '3.0000',
'quantity' => '',
'taxfree_gross_amount' => '3.0000',
'duration' => '1 month(s)',
'discount' => '0.00',
'rate' => '2.540000',
'amount' => '2.5500',
'unit' => '',
'comment' => 'Psa Sb Publish As3 monthly fee',
'gross_amount' => '2.5400',
'multiplier' => undef
},
{
'count' => undef,
'period' => '0',
'taxfree_amount' => '5.0000',
'quantity' => '',
'taxfree_gross_amount' => '5.0000',
'duration' => '',
'discount' => '0.00',
'rate' => '4.240000',
'amount' => '4.2300',
'unit' => '',
'comment' => '512 MB DDR setup fee',
'gross_amount' => '4.2400',
'multiplier' => undef
},
{
'count' => '1.000000',
'period' => '2592000',
'taxfree_amount' => '6.0000',
'quantity' => '',
'taxfree_gross_amount' => '6.0000',
'duration' => '1 month(s)',

42

XML API

'discount' => '0.00',
'rate' => '5.080000',
'amount' => '5.0900',
'unit' => '',
'comment' => '512 MB DDR monthly fee',
'gross_amount' => '5.0800',
'multiplier' => undef
},
{
'count' => undef,
'period' => '0',
'taxfree_amount' => '2.0000',
'quantity' => '',
'taxfree_gross_amount' => '2.0000',
'duration' => '',
'discount' => '0.00',
'rate' => '1.690000',
'amount' => '1.6900',
'unit' => '',
'comment' => '80 GB setup fee',
'gross_amount' => '1.6900',
'multiplier' => undef
},
{
'count' => '1.000000',
'period' => '2592000',
'taxfree_amount' => '2.0000',
'quantity' => '',
'taxfree_gross_amount' => '2.0000',
'duration' => '1 month(s)',
'discount' => '0.00',
'rate' => '1.690000',
'amount' => '1.7000',
'unit' => '',
'comment' => '80 GB monthly fee',
'gross_amount' => '1.6900',
'multiplier' => undef
},
{
'count' => undef,
'period' => '2592000',
'taxfree_amount' => '8.0000',
'quantity' => '2',
'taxfree_gross_amount' => '8.0000',
'duration' => '1 month(s)',
'discount' => '0.00',
'rate' => '3.390000',
'amount' => '6.7800',
'unit' => 'domain',
'comment' => 'Number of domains with
monthly fee',
'gross_amount' => '6.7800',
'multiplier' => '1.000000'
},
{

DNS

hosting

43

provided

XML API

'count' => undef,
'period' => '2592000',
'taxfree_amount' => '2.0000',
'quantity' => '1',
'taxfree_gross_amount' => '2.0000',
'duration' => '1 month(s)',
'discount' => '0.00',
'rate' => '1.690000',
'amount' => '1.6900',
'unit' => 'ip(s)',
'comment' => 'Number of Static IP addresses monthly fee',
'gross_amount' => '1.6900',
'multiplier' => '1.000000'
},
{
'count' => undef,
'period' => '0',
'taxfree_amount' => '2.0000',
'quantity' => '',
'taxfree_gross_amount' => '2.0000',
'duration' => '',
'discount' => '0.00',
'rate' => '1.690000',
'amount' => '1.7000',
'unit' => '',
'comment' => 'Plesk 7.5 Plus setup fee',
'gross_amount' => '1.6900',
'multiplier' => undef
},
{
'count' => undef,
'period' => '2592000',
'taxfree_amount' => '3.0000',
'quantity' => '1',
'taxfree_gross_amount' => '3.0000',
'duration' => '1 month(s)',
'discount' => '0.00',
'rate' => '2.540000',
'amount' => '2.5400',
'unit' => '',
'comment' => 'Plesk 7.5 Plus monthly fee',
'gross_amount' => '2.5400',
'multiplier' => undef
},
{
'count' => undef,
'period' => '0',
'taxfree_amount' => '2.0000',
'quantity' => '',
'taxfree_gross_amount' => '2.0000',
'duration' => '',
'discount' => '0.00',
'rate' => '1.690000',
'amount' => '1.6900',
'unit' => '',

44

XML API

'comment' => 'Unlimited Domains w/1 yr SUS (Plesk 7.5
setup fee',
'gross_amount' => '1.6900',
'multiplier' => undef
},
{
'count' => undef,
'period' => '2592000',
'taxfree_amount' => '3.0000',
'quantity' => '1',
'taxfree_gross_amount' => '3.0000',
'duration' => '1 month(s)',
'discount' => '0.00',
'rate' => '2.540000',
'amount' => '2.5500',
'unit' => '',
'comment' => 'Unlimited Domains w/1 yr SUS (Plesk 7.5
monthly fee',
'gross_amount' => '2.5400',
'multiplier' => undef
},
{
'count' => undef,
'period' => '0',
'taxfree_amount' => '5.0000',
'quantity' => '',
'taxfree_gross_amount' => '5.0000',
'duration' => '',
'discount' => '0.00',
'rate' => '4.240000',
'amount' => '4.2300',
'unit' => '',
'comment' => '1 yr E-mail Support Package (Plesk 7.5 Plus)
fee',
'gross_amount' => '4.2400',
'multiplier' => undef
},
{
'count' => undef,
'period' => '2592000',
'taxfree_amount' => '4.0000',
'quantity' => '1',
'taxfree_gross_amount' => '4.0000',
'duration' => '1 month(s)',
'discount' => '0.00',
'rate' => '3.390000',
'amount' => '3.3900',
'unit' => '',
'comment' => '1 yr E-mail Support Package (Plesk 7.5
monthly fee',
'gross_amount' => '3.3900',
'multiplier' => undef
},
{
'count' => undef,

45

Plus)

Plus)

setup

Plus)

XML API

'period' => '0',
'taxfree_amount' => '0.0000',
'quantity' => '',
'taxfree_gross_amount' => '0.0000',
'duration' => '',
'discount' => '0.00',
'rate' => '0.000000',
'amount' => '42.4100',
'unit' => '',
'comment' => '+ NDS 18.00 %',
'gross_amount' => '42.4100',
'multiplier' => undef
}
],
'rperiod' => '2592000',
'subscr_id' => '240',
'order_type' => '100',
'doc_date' => '2007-12-14 16:03:26',
'doc_subtotal' => '235.5900',
'subscriptions' => [
{
'ar_doc_id' => '745',
'subscr_status' => '1',
'applied' => '1',
'start_date' => '2007-12-14 16:03:56',
'id' => '240'
},
{
'ar_doc_id' => '745',
'subscr_status' => '1',
'applied' => '1',
'start_date' => '2007-12-14 16:04:06',
'id' => '241'
}
],
'added_by_account' => '2',
'doc_status_txt' => 'ds_completed',
'plan_type' => '1',
'plan_type_txt' => 'Virtuozzo Container',
'domain' => 'testdomain.com',
'bhp_id' => '314',
'doc_balance' => '0.0000',
'doc_total' => '278.0000',
'id' => '745',
'provider_tax_ex_number' => '',
'doc_subtotal_print' => '235.5900',
'period' => '2592000',
'subscr_end_date' => undef,
'is_tax_included' => '1',
'name' => 'order',
'order_id' => '745',
'doc_num' => '1336',
'description' => 'Order on the Container creation',
'plan_id' => '314',
'doc_type' => 'OR',

46

XML API

47

'added_by_ip' => '10.30.64.209',
'plan_name' => 'Virtuozzo Container with lics'
};

get_hosting_target_list
The function returns the list of subscriptions (that already exist for an account) with not fully
used resources, which allows creating hosting in the range of these remaining resources.
Parameters:
account_id

Account ID.

Returns: {hosting_target_list => {id => ID, name => STRING, plan_name => STRING,
sites_available => NUMBER} }
SOAP Faults codes:
No specific codes.

XML API

place_order
The function places order.
Parameters:
account_id

ID of account the prices are to be calculated for.

hp_sid

Hosting plan series key.

period

Optional parameter in case a period is trial (for_trial
parameter is specified) or if a domain hosting plan is
purchased. Subscription period.

campaign

Optional parameter. ID of campaign (Marketing Director >
Campaign Manager > Campaigns). When user is redirected
to store via a Campaign link, redirector adds
HSPC_MM= parameter to store URL.
Example:
Redirect To URL: http://mystore.host.com
Campaign ID: 25
Redirection
is
done
to
URL
http://mystore.host.com?HSPC_MM=25
In this way store gets campaign ID.
When order is placed, campaign ID must be send back to
the server, to add this order to campaign report.

promo_id

Optional parameter: The ID of promotion to be applied to
hosting plan prices.

48

XML API

domain_hash

The list of domains. Each domain in this list is presented
by the following hash:
{'domain1' => {
domain_name => 'example.com' -- self-explanatory
dm_action => 'register_new' -- action over domain
period => 2, -- registration period in years
whois_privacy => 1|0 -- use whois privacy yes|no
is_manual => 1| 0 -- use manual registration yes|no. Use
when importing domain subscription.
expire_time => Expiration date for domain. Use when
importing domains. Format: Use any string parsable by
Date::Manip (which is, well, just about anything).
contact_hash => {admin => 45, billing => 0, owner =>
undef} -- mapping of contact types to use for domain to
contact IDs. If contact id is 'undef' or '0', it will be created
on the basis of account contact information
create_site

=> 1|0 - create site for this domain or no.

hosting_destination => 56 - Subscription number, for
which this domain is bought.
is_default => 1|0 -- If 1, this domain is specified as the
default one in the order.
ns_list => [[HOSTNAME, IP], [HOSTNAME, IP], ...] -list of nameservers for domain. If present,
no DNS hosting service will be provided.
},
'domain2' => { ... },
ext_data => { purpose of domaun usage => 'Business', ... }
-- any additional information required by a registrar. This
parameter is always the only one in the hash.
}
app_list

The list of application templates IDs.

49

XML API

attribute_list

The list of custom attributes.

sb_plan

Optional parameter: The parameter is to be used only if
Sitebuilder service is included in a hosting plan.
If a Sitebuilder site already exists, the Sitebuilder site alias
must be passed. If a new Sitebuilder site is to be created,
the 'new' value must be passed.

license_list

List of licenses included in a hosting plan.

login

The list can include three parameters:
password
login
forwarding URL
The parameters composition depends upon hosting plan
type.

answer_list

The list of answers on a hosting plan questionnaire. Each
answer is a list consisting of a question ID and an answer
string.

for_trial

If an order is for trial period.

initiator_email

E-mail of a person that has added an order.

initiator_ip

IP address of a person that has added an order.

description

Optional parameter. Order description.

50

XML API

is_free

1 - yes or 0 - no. Optional parameter that can be used by
provider only. The parameter specifies whether an order
should be free (1) or not (0). If yes, the balance of an order
created on a subscription import is adjusted to zero, that is
a special 'balance correction' string is added to an order.
This parameter can be used, for example if a provider
wants to import a a subscription or a number of
subscriptions into Parallels Business Automation Standard and it is necessary that a corresponding orders to
be generated for these subscriptions will be of a zero
amount.
Note: Only provider is allowed to use the is_free
parameter. If this parameter is used by a reseller, this will
result in SOAP fault (see the list of SOAP Fault Codes
below this table).

ext_data

List of extended attributes

qos_list

Optional parameter. The list of billable resources
presented as the following hash:
{
'res_id_1003'
=>
{'res_id'
=>
'1003','value' => '2','multiplier' => '1'},
'res_id_1012'
=>
{'res_id'
=>
'1012','value' => '1','multiplier' => '1'},
...
}
Where:
res_id - is a resource numerical identifier assigned in the
Parallels Business Automation - Standard database
multiplier - is a resource units
value - is an additional
included value.

resource value ordered over the

Returns: ORDER (on page 37).
SOAP Faults codes:
AFMdenied

Anti-Fraud Manager has stopped an order.

AuthzError

Authorization error.

DomainRequired

Hosting plan requires a domain registration, but no
domains were registered.

HPNoApps

Applications specified are not supported by a hosting
plan.

51

XML API

HPNoDomainAction

A domain operation specified is not supported.

HPNoDomainAvailable

A domain name is not available for registration.

HPNoDomainReg

Hosting plan does not support domain registration.

HPNoDomainSubscrAllowed

No more domains allowed for a hosting plan. Allowed
limit for domains registration is used up.

HPNoLicClasses

Licenses specified are not supported by a hosting plan.

HPNoSB

Parallels Sitebuilder service specified is not supported by
a hosting plan.

HPNoSecureWhois

A domain hosting plan does not support secure whois
service.

HPNoTransferDomainAvailab A domain specified is not available for transfer in a
le
particular hosting plan.
HPNoTrial

Hosting plan does not support trial periods.

HPSBErrors

Errors connected with Parallels Sitebuilder site have
occurred during order processing.

InvalidDomain

Invalid domain name was specified.

NoOrderForProvider

Provider tries to place order for themselves.

NoPointerAllowed

Domain pointer operation is not available for a domain
specified.

NoQuestion

No question exists in a hosting plan for an answer
specified.

NoSubdomain

Subdomain creation is not available for a domain
specified.

OrderFailed

Order creation error.

OrderFreeDenied

The is_free parameter is used not by provider (for
example, reseller tries to create a free order).

OrderExtData

Extended attribute addition error.

SubscrNotFound

A subscription a domain registration is to be added to
does not exist.

TLDNoSuchPeriod

A domain registration period specified does not
supported for a TLD.

UserNoVPSPasswd

No password specified for Container.

52

XML API

UserVPSPasswdWeak

Container password does not meet the password strength
requirements.

53

XML API

54

create_offline_payment
This function allows creating an offline payment and, at the same moment, applying this
payment to a number of documents.
Note: The payment created by this function can be applied to documents with Open or Overdue
status. The payment can be applied only to the following types of documents: Order, Invoice,
Debit Adjustment, and Payment Request. A payment can be applied only to documents assigned
to an account a payment was issued for.
Parameters:
amount

A payment total amount.

account_id

ID of account a payment is issued for.

ref_num

A payment reference number.

doc_list

Optional parameter. List of IDs of documents a payment
is to be applied to.

adjust_error_fatal

Optional parameter that defines the function behavior in
case of error, depending of a value assigned to this
parameter :
If 1, then any error that occurs will stop payment
processing and produce SOAP fault DocAdjustError.
Errors will be placed into SOAP details.
If 0, then in case errors occur, the function will keep
trying to pay documents, but all the errors will be
returned.

Returns:
{ result => 1 } if no errors occurred, and offline payment has been placed successfully.
or
{ result => 0, error_info => ARRAYREF } if adjust_error_fatal=0 and some
errors occurred.

Example of returned value:
{
'error_info' => [
{
'error_message' => 'Document 103 has been paid',
'document' => '103',
'error_code' => 'DocPaid'

XML API
}
],
'result' => '0'
};

SOAP Faults codes:
DocAdjustError

Error adjusting documents!

Document type specific errors:
DocInvalidAccount

Document %DOCID% was not added by the account
trying to pay for it.

DocPaid

Document %DOCID% has been paid

DocNotOpen

Document %DOCID% is not open

DocWrongType

Document %DOCID% is of an inappropriate type.

Example of Test Code for create_offline_payment Function
#!/usr/bin/perl
use strict;
use SOAP::Lite;
use Data::Dumper;
my $client = SOAP::Lite
->proxy('https://hspc_mn_server_name/hspc/xml-api')
->on_fault(sub {die 'Fault: '.$_[1]->faultstring.' '.$_[1]->faultcode.'
'.$_[1]->faultdetail});
my $sid = $client->ns('HSPC/API/1.0')->session_open(
{
email => 'someuser@somehost', password => 'somepassword'
}
)->result->{session_id};
$client->transport->http_request->header('HSPC-SID' => $sid);
my %h = (
amount => 5,
account_id => 2,
ref_num => 'test offline payment',
doc_list => [103],
adjust_error_fatal => 1,
);
my $obj = $client->ns('HSPC/API/Billing/1.0')->create_offline_payment(%h)>result;
print "\nResult: " . Dumper($obj);
$client->ns('HSPC/API/1.0')->session_close;

55

XML API

56

get_order_details
This function allows getting the full information about an order by an order ID.
Parameters:
order_id

An order numerical identifier assigned in the
Parallels Business Automation - Standard database.

doc_num

An order reference number (optional).

Returns: ORDER (on page 37), see Example 2.
Note: The function can be used to get details of other types of documents, for example, invoice.
To use the function this way, a document ID is to be passed. In this case, th parameter name
remains the same, order_id.
SOAP Faults codes:
OrderNotFound

Order not found. This means that no order with the
ID specified.

AuthzError

Access Denied.

get_extended_attr_list
The function returns extended attributes available for a particular hosting plan type.
Parameters:
order_type

Order type: corresponds to a hosting plan type, the
parameter value (constant) is a hosting plan code used
in Store.

Returns value: [ { view_name=>, title=>, value=>, type=> }, .. ]
SOAP Faults codes:
No specific codes.

XML API

57

get_account_subscr
The function returns the list of account subscriptions.
Parameters:
account_id

ID of account the list of subscriptions is requested.

Returns an array of hashes:
{'plan_type_txt' => STRING, 'plan_type' => INT, 'status' => STRING, 'plan_name' =>
STRING, 'subscr_name' => STRING, 'subscr_id' => ID }
SOAP Faults codes:
MissingAccount

No accounts with passed ID has been found.

AccessDenied

Function is called by a person not logged in or
logged in with insufficient permissions. Access to
account information is denied.

AccountAccessDenied

Access to account information is denied in case a
reseller uses this function, but account belongs to
another reseller. Another match is the situation when
a user is logged in and requests information about
account that does not belong to him/her.

subscr_auth
The function authorizes an account against subscription ID.
Parameters:
account_id

ID of account the list of subscriptions is requested.

subscr_id

ID of subscription.

Returns:
is_authorized => 1 or 0
SOAP Faults codes:
SubscrNotFound

No subscription with ID passed.

AuthzError

Subscription belongs to another account or in case a
reseller uses this function, to another reseller.

XML API

get_subscr_info
The function returns full subscription information.
Parameters:
subscr_id

ID of subscription.

account_id

Optional parameter. ID of account subscription belongs
to.

If account_id is provided, subscription is verified for belonging to the account.
Returns:
Various outputs depending on Subscription type, see examples (on page 62).
In general, the following parameters are returned.
All subscriptions:
Common output fields for all subscription types:
id

ID of subscription.

name

Subscription name.

account_no

ID of account.

status_txt

Subscription status in text form ( Active, On Hold,
etc.).

status

ID of subscription status.

prev_status

Subscription previous status ID.

plan_type

Hosting plan ID.

plan_type_txt

Hosting plan type in text.

plan_id

Hosting plan ID.

plan_sid

Hosting plan series key.

plan_name

Hosting plan name in text.

create_order_id

ID of order placed for subscription.

period

Subscription period duration (given in seconds).

next_period

If subscription has been renewed, next subscription
period.

58

XML API

renewal_policy

Renewal policy code:


0 - Do not generate renewal order automatically;



1 - Generate renewal order automatically and try to
pay it.



2. - Generate renewal order automatically and do
not to pay it.

trial_period

If subscription is trial, then trial period duration in
seconds is returned.

custom_subscr_fee

Custom subscription fee (if such has been set for
subscription).

start_date

Subscription start date.

end_date

Subscription end date.

grace_date

If subscription is in Graced status, the grace period start
date.

expiration_date

Subscription expiration date.

termination_date

If subscription has been terminated, subscription
termination date is returned.

goaway_date

If subscription has been deleted, the deletion date is
returned.

Common returned parameters for all subscription types except for Domain registration ones:
prom_id

If promotion has been applied to subscription,
promotion ID is returned.

prom_start_date

Promotion period start date (if promotion has been
applied).

prom_end_date

Promotion period end date (if promotion has been
applied).

res_info

All resources included in subscription.

bm_attr

Custom attributes assigned to subscription (if any).

questions

Questions specified (Questionnaire) for subscription, if
any.

assigned_domains

Domains assigned to subscription, if any.

The following subscription types have some extra output fields:
Domain registration subscription returned parameters:

59

XML API

domain

Hash containing information about domain zone.

regdomain

Hash containing information about domain registration.

Virtuozzo Container subscription:
platform_id

ID of Container platform:


-1 - Unknown



0 - All



1 - Linux Vz2.0



3 - Linux Vz3.x




4 - Windows Vz3.x
5 - Linux Vz3.x EM64T



6 - Linux Vz3.x IA64



100 - Non-VZ



201 - Plesk for Unix



202 - Plesk for Windows

platform

Platform name in text form.

traf_class

Traffic class ID, if such has been configured for
subscription.

app_resources

Applications available for subscription.

is_root_access

If root access allowed for Container.

ve_id

Container ID.

ve

Container name.

Plesk Client subscription:
traf_class

Traffic class ID, if such has been configured for
subscription.

plesk_client

Hash containing information about Plesk client (ID,
node, status, etc.)

platform_id

Plesk platform ID (name as for Virtuozzo Container
subscription.

platform

Plesk platform name in text form.

app_resources

Applications available for subscription.

Plesk Domain subscription:

60

XML API

traf_class

Traffic class ID, if such has been configured for
subscription.

plesk_domain

Hash containing information about Plesk domain (ID,
node, status, etc.)

platform_id

Plesk platform ID (name as for Virtuozzo Container
subscription.

platform

Plesk platform name in text form.

app_resources

Applications available for subscription.

Plesk Dedicated Server subscription:
hw_id

Server ID assigned in Parallels Business Automation.

server_properties

Hash
containing
configuration.

information

about

server

Dedicated Server subscription:
platform_id

Server platform ID (name as for Virtuozzo Container
subscription.

platform

Platform name in text form.

traf_class

Traffic class ID, if such has been configured for
subscription.

server_properties

Hash
containing
configuration.

hw_id

Server ID assigned in Parallels Business Automation.

information

about

server

SOAP Faults codes:
SubscrNotFound

No subscription with ID passed.

AuthzError

Subscription belongs to another account or in case a
reseller uses this function, to another reseller.

61

XML API

62

Example of get_subscr_info Returned Values
Examples of get_subscr_info function output depending on a subscription type are presented in
this topic.
Dedicated server
{
'goaway_date' => undef,
'prom_start_date' => '2007-09-10 08:54:12',
'trial_period' => '0',
'traf_class' => undef,
'plan_type' => '3',
'plan_type_txt' => 'Dedicated Server',
'account_no' => '3',
'renewal_policy' => '1',
'assigned_domains' => [],
'id' => '7',
'bm_attr' => [
{
'group_id' => '1',
'group_name' => 'Hard Disk',
'bm_attr_id' => '2',
'name' => '80 GB',
'subscr_id' => '7',
'is_complimentary' => '0'
},
{
'group_id' => '2',
'group_name' => 'Memory',
'bm_attr_id' => '5',
'name' => '512 MB DDR',
'subscr_id' => '7',
'is_complimentary' => '0'
},
{
'group_id' => '3',
'group_name' => 'Processor',
'bm_attr_id' => '8',
'name' => 'AMD Athlon64 3000',
'subscr_id' => '7',
'is_complimentary' => '0'
},
{
'group_id' => '5',
'group_name' => 'Operating System',
'bm_attr_id' => '14',
'name' => 'Windows Server 2003',
'subscr_id' => '7',
'is_complimentary' => '0'
}
],
'period' => '2592000',
'prom_id' => '0',
'name' => 'DS1234',
'questions' => [],
'prom_end_date' => undef,
'custom_subscr_fee' => undef,
'is_traffic_overused' => '0',
'end_date' => '2008-11-30 00:00:00',
'plan_name' => 'DS',
'next_period' => '2592000',
'base_date' => '2000-01-30 00:00:00',
'res_info' => [
{

XML API
'short_name' => 'numstaticip',
'is_unlim' => '0',
'is_advanced' => '0',
'id' => '7',
'value' => '1',
'name' => 'Number of Static IP addresses',
'is_domain' => '0',
'is_countable' => '1',
'max_value' => '1048576',
'overuse_rate' => '0.000000',
'is_ve_related' => '0',
'is_metered' => '0',
'res_id' => '201',
'is_reducible' => '1',
'multiplier' => '1',
'units' => 'ip(s)'
},
{
'short_name' => 'numdnshosting',
'is_unlim' => '0',
'id' => '7',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of domains with DNS hosting
provided',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1048576',
'is_metered' => '0',
'res_id' => '208',
'is_reducible' => '0',
'units' => 'domain',
'multiplier' => '1'
}
],
'server_properties' => {
'port' => '',
'identification' => 'DS1234',
'switch_id' => '0',
'ipaddresses' => [
'12.13.14.15',
'12.13.14.16'
],
'comment' => 'test dedicated',
'switch' => undef,
'rack' => undef,
'id' => '3',
'attributes' => [
{
'attr_id' => '6',
'name' => '1024 MB DDR'
},
{
'attr_id' => '11',
'name' => 'VIRUS
Protection'
},
{
'attr_id' => '3',
'name' => '120 GB'
},
{
'attr_id' => '13',
'name' => 'ROOT Access'
},

63

XML API
{
'attr_id' => '9',
'name' => 'Dual Intel Xeon
D 2.8 GHz'
},
{
'attr_id' => '12',
'name' => 'Development
Tools'
},
{
'attr_id' => '15',
'name' => 'Fedora Linux'
}
],
'form_factor' => '45'
},
'plan_sid' => '16',
'status' => '1',
'is_upgrade' => undef,
'is_notify' => undef,
'prev_status' => '10',
'create_order_id' => '31',
'status_txt' => 'active',
'grace_date' => '2008-05-14 08:48:21',
'billable_items' => [],
'start_date' => '2007-09-10 08:54:12',
'platform' => 'Non-VZ',
'termination_date' => undef,
'hw_id' => '3',
'expiration_date' => '2008-10-26 00:00:00',
'plan_id' => '16',
'platform_id' => '100'
};

Miscellaneous Subscription
{
'goaway_date' => undef,
'prom_start_date' => '2008-04-29 11:25:58',
'trial_period' => '0',
'plan_type' => '7',
'plan_type_txt' => 'Miscellaneous',
'account_no' => '2',
'renewal_policy' => '1',
'assigned_domains' => [
'fdgfdgdfg.com'
],
'id' => '166',
'bm_attr' => [],
'period' => '2592000',
'prom_id' => '0',
'name' => 'Miscellaneous (34)',
'questions' => [
{
'question' => 'Question 1',
'value' => 'answer 1',
'question_id' => '1',
'hp_id' => '238',
'subscr_id' => '166'
},
{
'question' => 'Question 2',
'value' => 'answer 2',
'question_id' => '2',
'hp_id' => '238',
'subscr_id' => '166'
},

64

XML API
{
'question' => 'Question 3',
'value' => 'answer 3',
'question_id' => '3',
'hp_id' => '238',
'subscr_id' => '166'
}
],
'prom_end_date' => undef,
'custom_subscr_fee' => undef,
'end_date' => '2008-05-29 00:00:00',
'plan_name' => 'Misc 21',
'next_period' => '7776000',
'base_date' => '2008-05-29 00:00:00',
'res_info' => [
{
'short_name' => 'numdnshosting',
'is_unlim' => '0',
'is_advanced' => '0',
'id' => '166',
'value' => '10',
'name' => 'Number of domains with DNS hosting
provided',
'is_domain' => '0',
'is_countable' => '1',
'max_value' => '1048576',
'overuse_rate' => '1.000000',
'is_ve_related' => '0',
'is_metered' => '0',
'res_id' => '4000',
'is_reducible' => '0',
'multiplier' => '1',
'units' => 'domain'
}
],
'plan_sid' => '127',
'status' => '1',
'is_upgrade' => undef,
'is_notify' => undef,
'prev_status' => '3',
'create_order_id' => '922',
'status_txt' => 'active',
'grace_date' => undef,
'billable_items' => [],
'start_date' => '2008-04-29 11:25:58',
'termination_date' => undef,
'expiration_date' => undef,
'plan_id' => '241'
};

Plesk Client Subscription
{
'goaway_date' => '2008-03-08 00:00:00',
'prom_start_date' => '2007-12-21 13:31:32',
'trial_period' => '0',
'traf_class' => undef,
'plan_type' => '10',
'plan_type_txt' => 'Plesk Client',
'account_no' => '4',
'renewal_policy' => '0',
'assigned_domains' => [
'sub-cli-2.com'
],
'id' => '36',
'bm_attr' => [],
'period' => '2592000',
'prom_id' => '0',

65

XML API
'name' => 'Dr. John Lector (4-1047)',
'questions' => [],
'app_resources' => [],
'prom_end_date' => undef,
'plesk_client' => {
'status' => '0',
'status_txt' => 'active',
'subscr_id' => '36',
'hw_id' => '1',
'id' => '244',
'plesk_status' => '0',
'plesk_id' => '26',
'plesk_name' => 'Dr. John Lector (4-1047)'
},
'custom_subscr_fee' => undef,
'is_traffic_overused' => '0',
'end_date' => '2008-02-21 13:37:43',
'plan_name' => 'PC Win Uniq HN',
'next_period' => '2592000',
'base_date' => '2007-12-21 13:37:43',
'res_info' => [
{
'short_name' => 'pc_diskquota',
'is_unlim' => '0',
'is_advanced' => '0',
'id' => '36',
'value' => '100',
'name' => 'Disk space quota',
'is_domain' => '0',
'is_countable' => '1',
'max_value' => '1024000',
'overuse_rate' => '0.000000',
'is_ve_related' => '0',
'is_metered' => '0',
'res_id' => '1300',
'is_reducible' => '0',
'multiplier' => '1048576',
'units' => 'MB'
},
{
'short_name' => 'pc_numwebusers',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of web users',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1302',
'is_reducible' => '0',
'units' => 'users',
'multiplier' => '1'
},
{
'short_name' => 'pc_nummailbox',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of mailboxes',
'is_ve_related' => '0',

66

XML API
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1304',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pc_mailboxquota',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Mailbox quota',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '102400',
'is_metered' => '0',
'res_id' => '1305',
'is_reducible' => '0',
'units' => 'MB',
'multiplier' => '1048576'
},
{
'short_name' => 'pc_nummailredir',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of mail redirects',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1306',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pc_nummailgrp',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of mail groups',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1307',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pc_nummailautoresp',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',

67

XML API
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of mail autoresponders',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1308',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pc_nummaillist',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of mailing lists',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1309',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pc_numwebapp',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of web applications',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1310',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pc_numsubdomains',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of subdomains',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1311',
'is_reducible' => '0',
'units' => 'subdomains',
'multiplier' => '1'
},

68

XML API
{
'short_name' => 'pc_numdomains',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '2',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of domains',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1312',
'is_reducible' => '0',
'units' => 'domains',
'multiplier' => '1'
},
{
'short_name' => 'pc_numips',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '0',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of IP',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1313',
'is_reducible' => '0',
'units' => 'ip(s)',
'multiplier' => '1'
},
{
'short_name' => 'pc_mysqldbquota',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '100',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'mysql database quota',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1024000',
'is_metered' => '0',
'res_id' => '1321',
'is_reducible' => '0',
'units' => 'MB',
'multiplier' => '1048576'
},
{
'short_name' => 'pc_micsqldbquota',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '100',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'microsoft sql database quota',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1024000',
'is_metered' => '0',

69

XML API
'res_id' => '1322',
'is_reducible' => '0',
'units' => 'MB',
'multiplier' => '1048576'
},
{
'short_name' => 'pc_micsqlnumdb',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'maximum number of microsoft sql serever
databases',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1024',
'is_metered' => '0',
'res_id' => '1323',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pc_sslshlinksnumber',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'maximum number of shared ssl links',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1000',
'is_metered' => '0',
'res_id' => '1324',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pc_subftpusers',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Maximum number of FTP subaccounts',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1000',
'is_metered' => '0',
'res_id' => '1325',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pc_fpseusers',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',

70

XML API

71

'is_domain' => '0',
'name' => 'Maximum number of Microsoft FrontPage
subaccounts',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1000',
'is_metered' => '0',
'res_id' => '1326',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pc_numodbc',
'is_unlim' => '1',
'id' => '36',
'is_advanced' => '0',
'value' => '0',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Maximum number of ODBC connections',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '0',
'is_metered' => '0',
'res_id' => '1327',
'is_reducible' => '1',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pc_numiispools',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Maximum number of IIS application pools',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1024',
'is_metered' => '0',
'res_id' => '1331',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pc_mysqlnumdb',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'maximum number of MySQL databases',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1024',
'is_metered' => '0',
'res_id' => '1332',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{

XML API
'short_name' => 'pc_numdomainalias',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'maximum number of domain aliases',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1333',
'is_reducible' => '0',
'units' => 'alias(es)',
'multiplier' => '1'
},
{
'short_name' => 'pc_totalmailbquota',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Total mailboxes quota',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '102400',
'is_metered' => '0',
'res_id' => '1334',
'is_reducible' => '0',
'units' => 'MB',
'multiplier' => '1048576'
},
{
'short_name' => 'numdnshosting',
'is_unlim' => '0',
'id' => '36',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of domains with DNS hosting
provided',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1048576',
'is_metered' => '0',
'res_id' => '1335',
'is_reducible' => '0',
'units' => 'domain',
'multiplier' => '1'
},
{
'short_name' => 'pc_numcfdsn',
'is_unlim' => '1',
'id' => '36',
'is_advanced' => '0',
'value' => '0',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Maximum number of ColdFusion DSN
connections',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '0',

72

XML API
'is_metered' => '0',
'res_id' => '1336',
'is_reducible' => '1',
'units' => 'unit',
'multiplier' => '1'
}
],
'plan_sid' => '49',
'status' => '11',
'is_upgrade' => undef,
'is_notify' => undef,
'add_params' => '76',
'prev_status' => '10',
'create_order_id' => '151',
'billable_items' => [],
'grace_date' => '2008-03-08 00:00:00',
'status_txt' => 'expired',
'start_date' => '2007-12-21 13:31:32',
'platform' => 'Plesk for Windows',
'termination_date' => undef,
'expiration_date' => '2009-03-08 00:00:00',
'plan_id' => '51',
'platform_id' => '202'
};

Plesk Domain Subscription
{
'goaway_date' => undef,
'prom_start_date' => '2008-03-03 12:35:00',
'trial_period' => '0',
'traf_class' => undef,
'plan_type_txt' => 'Plesk Domain',
'plan_type' => '9',
'account_no' => '5',
'renewal_policy' => '0',
'assigned_domains' => [
'hadelen.com'
],
'id' => '90',
'bm_attr' => [],
'period' => '31104000',
'prom_id' => '0',
'name' => 'hadelen.com',
'questions' => [],
'app_resources' => [],
'prom_end_date' => undef,
'custom_subscr_fee' => undef,
'is_traffic_overused' => '0',
'end_date' => '2009-11-14 00:00:00',
'plan_name' => 'PD check webmail',
'next_period' => '31104000',
'base_date' => '2009-11-14 00:00:00',
'res_info' => [
{
'short_name' => 'pd_diskquota',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '100',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Disk space quota',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1024000',
'is_metered' => '0',
'res_id' => '1200',

73

XML API
'is_reducible' => '0',
'units' => 'MB',
'multiplier' => '1048576'
},
{
'short_name' => 'pd_numwebusers',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of web users',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1202',
'is_reducible' => '0',
'units' => 'users',
'multiplier' => '1'
},
{
'short_name' => 'pd_nummailbox',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of mailboxes',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1204',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pd_mailboxquota',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Mailbox quota',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '102400',
'is_metered' => '0',
'res_id' => '1205',
'is_reducible' => '0',
'units' => 'MB',
'multiplier' => '1048576'
},
{
'short_name' => 'pd_nummailredir',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of mail redirects',

74

XML API
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1206',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pd_nummailgrp',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of mail groups',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1207',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pd_nummailautoresp',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of mail autoresponders',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1208',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pd_nummaillist',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of mailing lists',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1209',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pd_numwebapp',
'is_unlim' => '0',
'id' => '90',

75

XML API
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of web applications',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1210',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pd_numsubdomains',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of subdomains',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1211',
'is_reducible' => '0',
'units' => 'subdomains',
'multiplier' => '1'
},
{
'short_name' => 'pd_ip',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '0',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Dedicated IPs',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1',
'is_metered' => '0',
'res_id' => '1212',
'is_reducible' => '0',
'units' => 'IP',
'multiplier' => '1'
},
{
'short_name' => 'pd_harddiskquota',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '100',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Hard disk space quota',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1024000',
'is_metered' => '0',
'res_id' => '1219',
'is_reducible' => '0',
'units' => 'MB',
'multiplier' => '1048576'

76

XML API
},
{
'short_name' => 'pd_numdomainalias',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '0',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Maximum number of domain aliases',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '1220',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pd_mysqldbquota',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '100',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Mysql database quota',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1024000',
'is_metered' => '0',
'res_id' => '1221',
'is_reducible' => '0',
'units' => 'MB',
'multiplier' => '1048576'
},
{
'short_name' => 'pd_micsqldbquota',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '100',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Microsoft sql database quota',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1024000',
'is_metered' => '0',
'res_id' => '1222',
'is_reducible' => '0',
'units' => 'MB',
'multiplier' => '1048576'
},
{
'short_name' => 'pd_micsqlnumdb',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Maximum number of microsoft sql serever
databases',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',

77

XML API
'max_value' => '1024',
'is_metered' => '0',
'res_id' => '1223',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pd_sslshlinksnumber',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Maximum number of shared ssl links',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1000',
'is_metered' => '0',
'res_id' => '1224',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pd_mysqlnumdb',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Maximum number of MySQL databases',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1024',
'is_metered' => '0',
'res_id' => '1225',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pd_totalmailboxquota',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Total mailboxes quota',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '102400',
'is_metered' => '0',
'res_id' => '1226',
'is_reducible' => '0',
'units' => 'MB',
'multiplier' => '1048576'
},
{
'short_name' => 'numdnshosting',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',

78

XML API
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of domains with DNS hosting
provided',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1048576',
'is_metered' => '0',
'res_id' => '1227',
'is_reducible' => '0',
'units' => 'domain',
'multiplier' => '1'
},
{
'short_name' => 'pd_subftpusers',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Maximum number of FTP subaccounts',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1000',
'is_metered' => '0',
'res_id' => '1228',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pd_fpseusers',
'is_unlim' => '0',
'id' => '90',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Maximum number of Microsoft FrontPage
subaccounts',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '1000',
'is_metered' => '0',
'res_id' => '1229',
'is_reducible' => '0',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'pd_numodbc',
'is_unlim' => '1',
'id' => '90',
'is_advanced' => '0',
'value' => '0',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Maximum number of ODBC connections',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '0',
'is_metered' => '0',
'res_id' => '1230',
'is_reducible' => '1',
'units' => 'unit',
'multiplier' => '1'

79

XML API
},
{
'short_name' => 'pd_numcfdsn',
'is_unlim' => '1',
'id' => '90',
'is_advanced' => '0',
'value' => '0',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Maximum number of ColdFusion DSN
connections',
'is_ve_related' => '0',
'overuse_rate' => '0.000000',
'max_value' => '0',
'is_metered' => '0',
'res_id' => '1231',
'is_reducible' => '1',
'units' => 'unit',
'multiplier' => '1'
}
],
'plan_sid' => '113',
'status' => '1',
'is_upgrade' => undef,
'is_notify' => undef,
'add_params' => '90',
'prev_status' => '3',
'create_order_id' => '424',
'status_txt' => 'active',
'grace_date' => undef,
'billable_items' => [],
'start_date' => '2008-03-03 12:35:00',
'platform' => 'Plesk for Windows',
'plesk_domain' => {
'status' => '0',
'hw_id' => '10',
'subscr_id' => '90',
'plesk_status' => '0',
'plesk_id' => '102',
'plesk_ip' => '10.26.0.97',
'status_txt' => 'active',
'id' => '206',
'plesk_name' => 'hadelen.com'
},
'termination_date' => undef,
'expiration_date' => undef,
'plan_id' => '113',
'platform_id' => '202'
};

Virtuozzo Container Subscription
{
'goaway_date' => undef,
'prom_start_date' => '2008-03-31 13:09:36',
'is_root_access' => '1',
'trial_period' => '0',
'traf_class' => undef,
'plan_type_txt' => 'Container',
'plan_type' => '1',
'account_no' => '3',
'renewal_policy' => '1',
'assigned_domains' => [
'app.ssl.lmtest.ru'
],
'id' => '129',
'bm_attr' => [],
'period' => '2592000',

80

XML API
'prom_id' => '0',
'name' => 'Plesk',
'questions' => [],
'app_resources' => [
{
'name' => 'Majordomo with Autoresponder',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'autoresponder-majordomo-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '0',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'Awstats Fc4',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'awstats-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '1',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'Jdk Fc4',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'jdk-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '0',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'Jre Fc4',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'jre-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '0',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'Mod Perl Fc4',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'mod_perl-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '1',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'Mod Ssl Fc4',
'is_upgrade' => '0',

81

XML API
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'mod_ssl-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '1',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'Mysql Fc4',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'mysql-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '1',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'Openwebmail Fc4',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'openwebmail-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '0',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'Php Fc4',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'php-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '1',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'Phpmyadmin Fc4',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'phpmyadmin-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '1',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'PostgreSQL',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'postgresql-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '0',
'type' => '1',
'id' => '129',

82

XML API
'cid' => '1'
},
{
'name' => 'Proftpd Fc4',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'proftpd-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '0',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'Psa Fc4',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'psa-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '1',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'SSH 3.1',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'ssh',
'subscr_fee' => '0.00',
'is_complementary' => '1',
'type' => '4',
'id' => '129',
'cid' => '3'
},
{
'name' => 'Usermin Fc4',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'usermin-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '0',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'Webmin Fc4',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',
'app_key' => 'webmin-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '0',
'type' => '1',
'id' => '129',
'cid' => '1'
},
{
'name' => 'ZendOptimizer',
'is_upgrade' => '0',
'is_notify' => '0',
'setup_fee' => '0.00',

83

XML API
'app_key' => 'zend-optimizer-fc4',
'subscr_fee' => '0.00',
'is_complementary' => '0',
'type' => '1',
'id' => '129',
'cid' => '1'
}
],
'prom_end_date' => undef,
'custom_subscr_fee' => undef,
'is_traffic_overused' => '0',
'end_date' => '2008-06-01 08:18:06',
'plan_name' => '99026 test',
've_id' => '1027',
'next_period' => '2592000',
'base_date' => '2008-05-01 08:18:06',
'res_info' => [
{
'short_name' => 'numstaticip',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of Static IP addresses',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '1048576',
'is_metered' => '0',
'res_id' => '25',
'is_reducible' => '0',
'units' => 'ip(s)',
'multiplier' => '1'
},
{
'short_name' => 'nummailbox',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '0',
'value' => '1024',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of mailboxes',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '1048576',
'is_metered' => '0',
'res_id' => '38',
'is_reducible' => '0',
'units' => 'mailbox',
'multiplier' => '1'
},
{
'short_name' => 'numwebsites',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of websites',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '1048576',
'is_metered' => '0',
'res_id' => '69',

84

XML API
'is_reducible' => '0',
'units' => 'website',
'multiplier' => '1'
},
{
'short_name' => 'numdbs',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of databases',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '1048576',
'is_metered' => '0',
'res_id' => '72',
'is_reducible' => '0',
'units' => 'database',
'multiplier' => '1'
},
{
'short_name' => 'numbks',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of backups',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '1048576',
'is_metered' => '0',
'res_id' => '74',
'is_reducible' => '0',
'units' => 'backup',
'multiplier' => '1'
},
{
'short_name' => 'sizebks',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '0',
'value' => '100',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Total size of all backups',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '1048576',
'is_metered' => '0',
'res_id' => '76',
'is_reducible' => '0',
'units' => 'MB',
'multiplier' => '1048576'
},
{
'short_name' => 'numdnshosting',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '0',
'value' => '1',
'is_countable' => '1',
'is_domain' => '0',

85

XML API
'name' => 'Number of domains with DNS hosting
provided',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '1048576',
'is_metered' => '0',
'res_id' => '100',
'is_reducible' => '0',
'units' => 'domain',
'multiplier' => '1'
},
{
'short_name' => 'kmemsize',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '10800',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Size of unswappable kernel memory',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2097151',
'is_metered' => '0',
'res_id' => '101',
'is_reducible' => '1',
'units' => 'KB',
'multiplier' => '1024'
},
{
'short_name' => 'lockedpages',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '256',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Unswappable user pages',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '102',
'is_reducible' => '1',
'units' => 'pages',
'multiplier' => '1'
},
{
'short_name' => 'vmguarpages',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '6144',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Memory allocation guarantee',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '103',
'is_reducible' => '1',
'units' => 'pages',
'multiplier' => '1'
},
{
'short_name' => 'shmpages',

86

XML API
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '21504',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Total size of SysV IPC shared memory',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '104',
'is_reducible' => '1',
'units' => 'pages',
'multiplier' => '1'
},
{
'short_name' => 'privvmpages',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '655360',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Total size of private pages',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '105',
'is_reducible' => '1',
'units' => 'pages',
'multiplier' => '1'
},
{
'short_name' => 'numproc',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '240',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of processes',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '32000',
'is_metered' => '0',
'res_id' => '106',
'is_reducible' => '1',
'units' => '',
'multiplier' => '1'
},
{
'short_name' => 'physpages',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '2147483647',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Total number of physical memory pages',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '107',
'is_reducible' => '1',

87

XML API
'units' => 'pages',
'multiplier' => '1'
},
{
'short_name' => 'oomguarpages',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '6144',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Guaranteed allocating address space',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '108',
'is_reducible' => '1',
'units' => 'pages',
'multiplier' => '1'
},
{
'short_name' => 'numfile',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '9312',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of open files',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '109',
'is_reducible' => '1',
'units' => '',
'multiplier' => '1'
},
{
'short_name' => 'numtcpsock',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '360',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of TCP/IP sockets',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '110',
'is_reducible' => '1',
'units' => '',
'multiplier' => '1'
},
{
'short_name' => 'numflock',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '206',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of file locks',
'is_ve_related' => '1',

88

XML API
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '111',
'is_reducible' => '1',
'units' => '',
'multiplier' => '1'
},
{
'short_name' => 'numpty',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '16',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of pseudo-terminals',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '112',
'is_reducible' => '1',
'units' => '',
'multiplier' => '1'
},
{
'short_name' => 'numsiginfo',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '256',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of siginfo structures',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2560',
'is_metered' => '0',
'res_id' => '113',
'is_reducible' => '1',
'units' => '',
'multiplier' => '1'
},
{
'short_name' => 'tcpsndbuf',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '1680',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Total size of TCP send buffers',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2095171',
'is_metered' => '0',
'res_id' => '114',
'is_reducible' => '1',
'units' => 'KB',
'multiplier' => '1024'
},
{
'short_name' => 'tcprcvbuf',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',

89

XML API
'value' => '1680',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Total size of TCP receive buffers',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2095171',
'is_metered' => '0',
'res_id' => '115',
'is_reducible' => '1',
'units' => 'KB',
'multiplier' => '1024'
},
{
'short_name' => 'othersockbuf',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '2048',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Total size of other socket buffers',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2097151',
'is_metered' => '0',
'res_id' => '116',
'is_reducible' => '1',
'units' => 'KB',
'multiplier' => '1024'
},
{
'short_name' => 'dgramrcvbuf',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '256',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Total size of UDP receive buffers',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2097151',
'is_metered' => '0',
'res_id' => '117',
'is_reducible' => '1',
'units' => 'KB',
'multiplier' => '1024'
},
{
'short_name' => 'numiptent',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '128',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of entries in IP tables',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '3000',
'is_metered' => '0',
'res_id' => '118',
'is_reducible' => '1',
'units' => '',
'multiplier' => '1'
},

90

XML API
{
'short_name' => 'netrateguar',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '0',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Guaranteed network rate',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '1024',
'is_metered' => '0',
'res_id' => '119',
'is_reducible' => '1',
'units' => 'MBit/sec',
'multiplier' => '1024'
},
{
'short_name' => 'diskspace',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '0',
'value' => '1024',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Disk space quota',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '4194303',
'is_metered' => '0',
'res_id' => '121',
'is_reducible' => '1',
'units' => 'MB',
'multiplier' => '1024'
},
{
'short_name' => 'diskinodes',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '200000',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Disk inode quota',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '122',
'is_reducible' => '1',
'units' => 'inodes',
'multiplier' => '1'
},
{
'short_name' => 'cpuunits',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '0',
'value' => '1000',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'CPU usage',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '500000',
'is_metered' => '0',

91

XML API
'res_id' => '124',
'is_reducible' => '1',
'units' => 'unit',
'multiplier' => '1'
},
{
'short_name' => 'dcachesize',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '3624960',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Size of busy dentry/inode cache',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147482624',
'is_metered' => '0',
'res_id' => '125',
'is_reducible' => '1',
'units' => 'bytes',
'multiplier' => '1'
},
{
'short_name' => 'quotaugidlimit',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '100',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Limit of user quotas',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '126',
'is_reducible' => '1',
'units' => '',
'multiplier' => '1'
},
{
'short_name' => 'numothersock',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '360',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'Number of sockets other than TCP/IP',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '2147483647',
'is_metered' => '0',
'res_id' => '127',
'is_reducible' => '1',
'units' => '',
'multiplier' => '1'
},
{
'short_name' => 'rate_bound',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '0',
'is_countable' => '0',
'is_domain' => '0',

92

XML API
'name' => 'Guaranteed network rate is network rate
limit',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '1',
'is_metered' => '0',
'res_id' => '178',
'is_reducible' => '1',
'units' => '',
'multiplier' => '1'
},
{
'short_name' => 'cpulimit',
'is_unlim' => '0',
'id' => '129',
'is_advanced' => '1',
'value' => '100',
'is_countable' => '1',
'is_domain' => '0',
'name' => 'CPU limit',
'is_ve_related' => '1',
'overuse_rate' => '0.000000',
'max_value' => '100',
'is_metered' => '0',
'res_id' => '181',
'is_reducible' => '1',
'units' => '%',
'multiplier' => '1'
}
],
'plan_sid' => '100',
'status' => '1',
'is_upgrade' => undef,
'is_notify' => undef,
'add_params' => undef,
'prev_status' => '3',
'create_order_id' => '696',
'status_txt' => 'active',
'grace_date' => undef,
'billable_items' => [],
'start_date' => '2008-03-31 13:09:36',
'platform' => 'Linux Vz3.x',
'termination_date' => undef,
'expiration_date' => undef,
'plan_id' => '206',
'platform_id' => '3',
've' => {
'slm_mode' => '0',
'hn_ip_address' => '10.30.64.248',
'status' => 'running',
'apps' => undef,
'qos' => undef,
'hn_vz_interface' => '2',
'ips' => undef,
'offline_management' => '0',
'status_txt' => 'running',
'id' => '1027',
'is_root_pwd_syncd' => '1',
'ip_address' => '10.25.41.34',
'vza_status' => 'running',
'is_bandwidth_limited' => undef,
'is_custom_resolver' => undef,
'vendor_id' => '1',
'hw_id' => '2',
'os_tmpl_id' => '56',
'hn_service_ve_ip' => '10.24.8.101',
'account_id' => '3',

93

XML API
'utf_ve_name' => 'Plesk',
'platform_id' => '3',
've_name' => 'Plesk'
}
};

Domain Registration Subscription
{
'goaway_date' => undef,
'plan_sid' => '185',
'status' => '1',
'is_notify' => undef,
'prev_status' => '3',
'create_order_id' => '884',
'plan_type' => '6',
'plan_type_txt' => 'Domain Registration',
'account_no' => '6',
'domain' => {
'domain' => 'ros-test-851.cc',
'dns_enabled' => '1',
'added_by' => '1',
'nsset_id' => '1',
'ns_info' => undef,
'action' => '2',
'utf_domain' => 'ros-test-851.cc'
},
'renewal_policy' => '1',
'status_txt' => 'active',
'grace_date' => undef,
'id' => '163',
'start_date' => '2008-04-22 16:52:41',
'period' => '31104000',
'name' => 'ros-test-851.cc',
'termination_date' => undef,
'expiration_date' => undef,
'regdomain' => {
'real_expire_time_check' => undef,
'reg_status' => '1',
'period' => '1',
'plugin_name' => 'WebNIC',
'real_expire_time' => undef,
'reg_time' => '2008-04-22 16:52:42',
'domain' => 'ros-test-851.cc',
'id_protect' => undef,
'registrar' => 'WebNIC',
'action' => '2',
'reg_status_txt' => 'registered',
'expire_time' => '2009-04-22 16:52:42'
},
'plan_id' => '189',
'custom_subscr_fee' => undef,
'end_date' => '2009-04-22 16:52:41',
'plan_name' => '[WebNIC] Domain Registration',
'next_period' => '31104000',
'base_date' => '1941-04-01 13:38:32'
};

94

XML API

95

create_custom_invoice
The function allows adding an invoice manually, without aforegoing orders. A custom includes
custom items and fees.
Parameters
subscr_id

Optional parameter: ID of subscription. Optional
parameter.

vendor_id

ID of vendor account.

description

Invoice description text.

account_no

ID of account an invoice is created for.

items

Services or any other items included in an invoice.
Array of hashes of the following kind:
{
rate - fee for an item;
quantity - number of items (optional), 1 by default;
comment - item name or comment to an item;
start_time - item provisioning start date. Optional
parameter. If not specified, invoice creation date is
used.
}

amount

Invoice total amount. Optional parameter.

Returns:
In case of success, ID of added invoice is returned.
In case of error, error message is returned.

SOAP Faults codes:
NoOrderForProvider

Provider tries to place invoice for themselves.

InvalidAccount

A person logged in and trying to place an invoice is not
registered for an account that stands as vendor in
respect to an account an invoice is placed for.

Initiator

Failed to find a registered person that places an order
by initiator_email passed.

XML API

InvoiceFailed

A list of invoice items has been passed, but amount
specified for at least one of items is negative. In this
case, fees for all invoice items must be positive.

'Wrong amount value'

A list of invoice items has not been passed and invoice
amount passed is zero. In this case, an invoice amount
must be either positive or negative (for credit invoice).

96

get_account_campaigns
The function allows getting the information about marketing campaigns applied to a given
account.
Parameters:
account_id

ID of account the list of campaigns is needed.

Returns:
List o f arrays, each array consists of campaign ID (in database) and campaign digest (campaign
ID used in campaign URL):
Example of returned value:
return [
[3,'97651bf001'],....]
SOAP Faults codes:
No specific codes.

XML API

HSPC/API/Account
create_customer
The function adds a new customer account and person.
Parameters:
address1

Address line 1.

address2

Optional parameter: Address line 2.

city

City.

comment

Comment to account.

company_name

Optional parameter: If specified, account is
business.

country

Customer country.

email

Customer administrative e-mail.

fax_src

Customer fax number.

first_name

Customer first name.

fraud_check

Optional parameter: A flag that defines whether
an account is to be checked by anti-fraud
manager or not.

gender

Customer gender.

insertion

Customer name insertion.

lang

Customer personal language.

last_name

Customer last name.

middle_name

Customer middle name.

mobile_src

Customer mobile phone.

password

Customer personal password.

phone_src

Customer phone number.

prefix

Customer name prefix.

97

XML API

state

Customer state of residence.

suffix

Customer name suffix.

tax_ex_number

Customer VAT number.

zip

Customer address zip code.

ext_data

List of extended attributes

timezone

Customer time zone.

Returns: {account_id => NUMBER}
SOAP Faults codes:
NewAccountsDenied

New accounts creation is denied.

UserExtData

Extended attribute addition error.

UserAccount

Account creation error.

98

XML API

create_domain_contact
The function creates domain contacts.
Parameters:
account_id

Customer account ID.

address

Postal Address.

city

Customer city.

country

Customer country.

email

Customer administrative e-mail.

fax

Customer fax number.

first_name

Customer first name.

last_name

Customer last name.

company_name

Optional parameter: If specified, account is
business. Company name

phone

Customer phone number.

state

Customer state of residence.

zip

Customer address zip code.

Returns: {contact_id => NUMBER}
SOAP Faults codes:
No specific codes.

99

XML API

create_reseller
The function creates a partner application.
Parameters:
address1

Address line 1.

address2

Optional parameter: Address line 2.

city

City.

comment

Optional parameter:
application.

company_name

Company name.

description

Optional parameter: The text passed from the
comment parameter and shown in Partner
Application details in PCC.

country

Reseller country.

email

Reseller administrative e-mail.

ext_date

Optional parameter: Any additional information
needed in case specific accounting plug-in is
used.

fax_src

Optional parameter: Reseller fax number.

first_name

Reseller first name.

gender

Optional parameter: Customer gender.

insertion

Optional parameter: Reseller name insertion.

lang

Optional parameter: Reseller personal language.

last_name

Reseller last name.

middle_name

Optional parameter: Reseller middle name.

mobile_src

Reseller mobile phone.

password

Customer personal password.

phone_src

Reseller phone number.

prefix

Optional parameter: Reseller name prefix.

Comment

to

partner

100

XML API

state

Optional parameter (for non USA or Canada
countries): Reseller state of residence.

suffix

Optional parameter: Reseller name suffix.

tax_ex_number

Optional parameter: Reseller VAT number.

zip

Reseller address zip code.

Returns: {account_id => NUMBER}
SOAP Faults codes:
NewResellerDenied

New reseller accounts creation denied.

CompanyRegistered

A company with similar name is already
registered.

UserExtData

Extended attribute addition error.

ResellerSaveError

Reseller account creation error.

get_account_info
The function returns information on an account.
Parameters:
account_id

Account ID

Returns: ACCOUNT_INFO (on page 102)
SOAP Faults codes:
No specific codes.

101

XML API

Example of ACCOUNT_INFO Hash
{
'vendor_name' => 'Provider',
'technical_phone' => '+1 1239867',
'technical_fax' => '',
'admin_first_name' => 'Kate',
'address' => {
'country' => 'US',
'country_loc' => 'United States',
'city' => 'Karson',
'zip' => '123456',
'fax' => '',
'state' => 'AL',
'state_loc' => 'Alabama',
'address1' => 'Park Lane 45',
'phone' => '+1 1239867',
'mobile' => '',
'address2' => '',
'state' => undef
},
'admin_phone' => '+1 1239867',
'billing_prefix' => '',
'admin_prefix' => '',
'billing_mobile' => '',
'billing_last_name' => 'Green',
'lang' => 'en',
'billing_middle_name' => '',
'technical_middle_name' => '',

102

XML API

'name' => 'Kate Green',
'admin_last_name' => 'Green',
'account_id' => '228315',
'technical_email' => 'kate@green.com',
'admin_middle_name' => '',
'account_type' => '3',
'technical_insertion' => '',
'technical_suffix' => '',
'admin_suffix' => '',
'billing_fax' => '',
'billing_email' => 'kate@green.com',
'billing_phone' => '+1 1239867',
'status' => 'active',
'billing_first_name' => 'Kate',
'admin_gender' => '',
'admin_email' => 'kate@green.com',
'technical_prefix' => '',
'admin_fax' => '',
'admin_insertion' => '',
'technical_last_name' => 'Green',
'billing_gender' => '',
'technical_first_name' => 'Kate',
'vendor_id' => '1',
'billing_insertion' => '',
'technical_gender' => '',
'billing_suffix' => '',
'admin_mobile' => '',
'technical_mobile' => '',

103

XML API

'comment' => ''
};

get_domain_contact_list
The function returns the list of domain contacts.
account_id

Account ID.

Returns: {contact_list => DM_CONTACT list}
SOAP Faults codes:
No specific codes.

get_reseller_terms
The function returns reseller Terms and Conditions.
Returns: {title => STRING, body => STRING}
SOAP Faults codes:
No specific codes.

validate_password
The function checks password in accordance with password strength settings.
Parameters:
password

Password.

Returns: {result => 1}
SOAP Faults codes:
UserBadPassword

Password is invalid or not acceptable.

104

XML API

105

get_extended_attr_list
The function returns extended attributes needed for customer or reseller account creation if a
specific accounting plug-in is enabled or just some custom extended attributes (on page 199)
are used.
Parameters:
customer_type

Account type: customer or reseller, value:



1 - customer account
2 - reseller account

Returns value: [ { view_name=>, title=>, value=>, type=> }, .. ]
SOAP Faults codes:
No specific codes.

XML API

106

get_person_list
The function returns the detailed information about person(s) associated with a particular
account, i.e., account users.
Parameters:
account_id

Account numerical identifier assigned in the
Parallels Business Automation - Standard
database.

Returns: a hash or a hash of hashes (if several users are associated with an account). A hash per
person looks like:
'person_list' => [
{
'lang' => 'en',
'person_id' => '2',
'account_list' => [
{
'status' => '0',
'vendor_id' => '1',
'person_id' => '2',
'name' => 'First Last',
'type' => '3',
'account_id' => '2'
}
],
'middle_name' => '',
'last_name' => 'Last',
'email' => 'mail@provider.com',
'insertion' => '',
'comment' => '',
'suffix' => '',
'gender' => 'M',
'prefix' => '',
'first_name' => 'First'
}
],
...
};
SOAP Faults codes:
MissingAccount

Account not found.

AccountsDenied

Access denied.

AccountAccessDenied

Access denied.

MissingPerson

Person not found.

PersonsDenied

You are not allowed to access persons.

XML API

107

XML API

HSPC/API/Person
auth_person
The function authenticates a person.
Parameters:
email

Person e-mail. Together with password can be
replaced with sid.

password

Person password. Together with email can be
replaced with sid.

ip

Optional parameter. Customer IP. If specified,
the anti-fraud Login Filter is activated.

sid

Client CP session ID (SID). Optional
parameter. Can be passed instead of email and
password and in this case a customer will be
authenticated in Store by this session ID.

login_to_cp

Optional parameter. The value can be 1 (true)
or 0 (false). If true, the function will include
the client CP session ID (SID) into the
response.

Returns: PERSON_INFO:
{
'sid' => 'e3b09cb237a41b6867bcbb62ac8899da',
'person' => {
'lang' => 'en',
'person_id' => '5',
'account_list' => [
{
'status' => '0',
'vendor_id' => '1',
'person_id' => '5',

108

XML API

'name'

=>

'Account

Name',
'type' => '3',
'account_id' => '5'
}
],
'middle_name' => '',
'last_name' => 'Smith',
'email' => 'smith@mail.com',
'insertion' => '',
'comment' => '',
'suffix' => '',
'gender' => 'female',
'prefix' => '',
'first_name' => 'Jane'
}
};
SOAP Faults codes:
UserAuthen

User authentication error.

The returned hash presents person information:
Parameter

Means

sid

Client CP session ID. Returned in case the sid parameter is
passed with the 'true' value.

109

XML API

person

Person information. Contains hash:
Parameter

Means

lang

Two-letter
ISO
639
(http://www.loc.gov/standards/iso6392/php/code_list.php) language codes
abbreviation in lower case of the
interface language set for a person.

person_id

Person numerical identifier assigned in
the Parallels Business Automation Standard database.

account_list Properties of the account a person is
associated with. Contains hash:
status - Account status: 0 - 'active',
1 - 'on_hold', 2 - 'for_approval' (held
by anti-fraud filter and waits for
vendor manual approval), 255 'deleted'.
vendor_id -Numerical identifier
of vendor account (provider or
reseller). This is an account ID
assigned automatically in Parallels
Business Automation - Standard.
person_id - Person numerical
identifier assigned in the Parallels
Business Automation - Standard
database.
name - Account name.
type - Account type: 1- Provider
account, 2 -Reseller account, 3 Customer account.
account_id - Account numerical
identifier assigned automatically in
Parallels Business Automation Standard.
middle_name

Person middle name.

last_name

Person last name.

email

Person e-mail used as password.

insertion

Person last name insertion.

comment

Free-form comment that can be added
to a person information.

suffix

Person name suffix.

gender

Person gender: Male or Female.

prefix

Person name prefix (Mr, Mrs, etc.).

first_name

Person first name.

110

XML API

111

get_person_info
The function returns a registered person details by a person numerical ID assigned on
registration in the Parallels Business Automation - Standard database.
Parameters:
person_id

A registered person numerical identifier
assigned in the Parallels Business
Automation - Standard database

SOAP Faults codes:
MissingPerson

Person not found

PersonsDenied

You are not allowed to access persons

Returns:
$VAR1 = {
'lang' => 'en',
'person_id' => '2',
'account_list' => [
{
'status' => '0',
'vendor_id' => '1',
'person_id' => '2',
'name' => 'First Last',
'type' => '3',
'account_id' => '2'
}
],
'middle_name' => '',
'last_name' => 'Last',
'email' => 'mail@provider.com',
'insertion' => '',
'comment' => '',
'suffix' => '',
'gender' => 'M',
'prefix' => '',
'first_name' => 'First'
};

XML API

HSPC/API/Domain
check_domain_list
The function checks domains for availability.
Parameters:
hp_sid

Hosting plan series key.

action

An action to be performed over a domain:


'dns_hosting' - Subdomain either in
provider's or in user's domain. Domain
must present in Provider DNS already.



'domain_pointer' - Use domain, registered
elsewhere, new in Provider DNS. It's
equivalent to 'Use existing domain,
registered elsewhere' field in store.
'register_new' - Register a new domain.




'reg_transfer' - Transfer a registered
domain to Provider DNS.



'use_existing' - A domain is present in
Provider DNS already, for example a user
already
has
domain
registration
subscription. Now user wants, for
example, to buy a plesk domain with the
same domain name. The action
corresponds to 'Use one of my domains'
field in Store.

account_id

Optional parameter in all cases except for the
action='use_existing': ID of an account a
domain is to be registered for.

domain_list

List of domains to be checked.

Returns: {available_domain_list => [List of OK domains]}
SOAP Faults codes:
HPDomainOnly

Hosting plan series key passed to the
function does not belong to domain
registration hosting plan.

NoAccountIdSpecified

action='use_existing', but ID of account is
not specified.

112

XML API

check_domain_name_syntax
The function checks domain name syntax.
Parameters:
domain

Domain name.

Returns: {result => 1 | 0}
SOAP Faults codes:
No specific codes.

get_domain_list
The function returns the list of domains a customer can use for subdomains creation.
Parameters:
account_id

ID of an account for
information is returned.

for_trial

If this parameter is specified, then only
those domains which allow creation of
trial subscriptions are returned.

Returns: {domain_list => [List of domains for subdomain]}
SOAP Faults codes:
No specific codes.

which

the

113

XML API

validate_ns_list
The function checks validity of name servers list.
Parameters:
ns_list

LIst of name servers. Each list item
consists of two elements:


name server hostname



name server IP address

Returns: {result => 1 } or Fault
SOAP Faults codes:
UserNoNS

Name server hostname is not specified.

UserNoIP

Name server IP address is not specified.

UserInvalidNSName

Name server hostname is invalid.

UserIPInvalid

Name server IP address is invalid.

114

XML API

save_contact
The function creates or saves changes to an existing domain contact.
Parameters (all optional except for account_id):
hp_sid

Hosting plan series key.

domain

A domain name.

action

An action performed over a domain:
domain registration or transfer.

contact_type

Contact type (administrative, billing,
technical, etc., depending on a plug-in).
The plug-in specific contact types are
also specified using this parameter.

account_id

Account numerical ID assigned in
Parallels Business Automation Standard database.

contact_id

Contact ID in database (used for contact
editing only since when a new contact is
created, no ID yet exists)

form_data

Domain contacts screen form data hash.
In other words, the data to be filled into
a domain contact dorm. If not provided,
then a contact form is filled by data
taken from account.

Returns: {contact_id => [new contact ID]} or Fault
SOAP Faults codes:
HPTypeInvalid

HP SID does not correspond to a
hosting plan type

DMContactError

Error saving contact data

115

XML API

116

validate_domain_data
The function validates data for a domain or domains list.
Parameters (all optional, but at least domain, action, contact_hash or domain_data_hash must be
used):
hp_sid

Hosting plan series key.

domain

A domain name.

action

An action performed over a domain:
domain registration or transfer.

contact_hash

Contact data hash (all contact data:
administrative, billing, technical, other
additional types of contact data,
depending on a plug-in)

account_id

Account numerical ID assigned in
Parallels Business
Automation
Standard database. Used only if no
contacts found in database and domain
contact data is to be taken from account
profile.

form_data

A domain form data hash (extdata). In
other words, any extended data besides
the base contacts needed for a domain
registration. If extended data is required,
his hash is used to fill the extended data
form.

domain_data_hash

This parameter allows validating a
number of domains at once. The hash
looks like:
{
domain_name => $h{domain},
contact_hash => $h{contact_hash},
action => $h{action},
}

Returns: {result => 1 } or Fault
SOAP Fault Codes:

XML API

UserDomainDataError

Invalid data in domain contacts or
extdata.

HSPC/API/Mailer
send
This function sends e-mail.
Parameters:
to_email

Recipient's e-mail.

to_name

Recipient's name.

subject

Message subject.

body

Message body.

from_email

Sender's e-mail.

from_name

Sender's name, by default is set in mailer.

Returns: {result => 1}
SOAP Faults codes:
No specific codes.

117

XML API

118

HSPC/API/PP
get_saved_paymethod_list
The method provides a list of payment methods saved in Parallels Business Automation Standard database the owner (customer) could choose from.
Parameters:
plugin_id

A payment plug-in alphabetical ID internally
used in Parallels Business Automation Standard.

account_id

Numerical identifier (ID) of account owning a
payment method.

Returns:
PAYMETHOD_LIST =
{
paymethod_id => NUMBER,
name => STRING,
paytype => STRING,
paytype_id => STRING,
expire_date => STRING,
}
Note: The expire_date is returned for credit cards only.
SOAP Faults codes:
No specific codes.

XML API

get_plugin_list
The method provides a list of plug-ins available for payment.
No parameters.
Returns:
PLUGIN =
{
plugin_id => STRING,
title => STRING,
is_redirect => BOOLEAN,
has_form => BOOLEAN,
paymethod_category_titles => [STRING, ...],
description => STRING,
}
SOAP Faults codes:
No specific codes.

get_layout_hash
The method provides the form to be filled by customer in Store.
Parameters.
plugin_id

A payment plug-in alphabetical ID internally
used in Parallels Business Automation Standard.

account_id

Numerical identifier (ID) of account owning a
payment method.

Returns:
LAYOUT =
{
form => STRING,
check_javascript => STRING,
param_list => [STRING, STRING, ... ],
}
SOAP Faults codes:
No specific codes.

119

XML API

120

get_redirect_hash
The method registers an attempt to pay by redirect or INIpay plug-in and returns back the
redirect information.
Parameters:
plugin_id

A payment plug-in alphabetical ID internally
used in Parallels Business Automation Standard.

order_id

Numerical identifier (ID) of an order.

url_back

Store URL a customer is to be redirected from
an external payment gateway.

Returns:
REDIRECT =
{
iframe => BOOL,
url => STRING,
method => STRING,
attrs => {param1 => STRING, param2 => STRING, ...}
onload_js_func => STRING,
content => STRING,
}
SOAP Faults codes:
No specific codes.

XML API

121

pay
The method registers an attempt to pay by direct plug-in and does nothing in case of redirect
payment.
Parameters:
plugin_id

A payment plug-in alphabetical ID internally
used in Parallels Business Automation Standard.

order_id

Numerical identifier (ID) of order.

$paymethod_id

For saved payment methods: a payment
method numerical identifier (ID) assigned in
Parallels Business Automation - Standard.

$form_args

Arguments for the form to be filled by a
customer obtained from get_layout_hash.

$fraud_query
In case a new payment method has been submitted, the PHP Store picks up the form_args for
pay() method from the param_list returned by the get_layout_hash method. In case
a customer wants to use that payment method already saved in Parallels Business Automation Standard database, the additional argument is paymethod_id. So, either paymethod_id or
$form_args->{paytype_id} must be specified . The fraud_query are arguments
gathered from client (if any) regarding anti-fraud check. The required fields are obtained via
HSPC::API::Fraud->get_warning_newpaymethod.

XML API

122

get_status
The method returns the current status of a document in Parallels Business Automation Standard Payment Processing.
Parameters:
order_id

Numerical identifier (ID) of an order.

Returns:
STATUS =
{
code => NUMBER,
string => STRING,
}
SOAP Faults codes:
No specific codes.

HSPC/API/Fraud
get_warning_newpaymethod
The method provides a form to be displayed in the Store to query a user information related to
Anti-Fraud check of his/her order, when he/she pays by a new payment method.
Parameters:
order_id

Numerical identifier (ID) of an order.

Returns:
{
form
=> STRING,
check_javascript => STRING,
param_list
=> [STRING, STRING, ... ],
};
SOAP Faults codes:
No specific codes.

XML API

123

get_resume_newpaymethod
The method returns the current status for a given order in case an asynchronous Anti-Fraud
check is performed.
Parameters:
order_id

Numerical identifier (ID) of an order.

Returns:
HTML string (with formatting).
SOAP Faults codes:
No specific codes.

get_safe_description
The method returns the reason the order was declined by Anti-Fraud system.
Parameters:
order_id
Returns string.
SOAP Faults codes:
No specific codes.

Numerical identifier (ID) of an order.

XML API

HSPC/API/Config
get_provider_config
Parameters:
No parameters
Returns (returned data structure is described later in this section):
$VAR1 = {
'currency' => {
'currency_radix' => '.',
'currency_sign_code' => '90;36',
'separator_char' => ',',
'currency' => 'Dollar',
'iso_alfa' => 'ZWD',
'entity' => 'Zimbabwe',
'currency_alignment' => '1',
'currency_minor' => '2'
},
'default_lang' => 'en',
'lang_list' => [
{
'title' => 'English',
'id' => 'en'
},
{
'title' => 'Spanish',
'id' => 'es'
},

124

XML API

125

{
'title' => 'Russian',
'id' => 'ru'
}
],
'store' => {
'referral' => {
'question' => undef,
'option_list' => []
},
'is_opened' => '1',
'provider_name' => 'Provider-Provider',
'text_info' => {
'account_agreement_text'
undef,
'offline_header' => undef,
'agreement_text' => undef
}
},
'is_use_ssl' => '1',
'is_use_ssl_cp' => '0',
'tax_info' => {
'is_taxation_enabled' => '0',
'tax_zone' => undef,
'is_tax_included' => '0'
}
};

=>

XML API

SOAP Faults codes:
No specific codes.
The returned hash presents provider configuration and store settings:
Parameter

Means

currency

System-wide currency settings. Includes the hash:
Parameter

Means

currency_radix

Decimal separator character.

currency_sign_cod Currency sign ASCII code.
e
separator_char

Thousand separator character.

currency

Currency name.

iso_alfa

Alphabetical currency ISO code.

entity

Country name.

currency_alignmen Currency sign alignment, to the
t
right or to the left of the amount
(1 - to the left, 2 - to the right).
currency_minor

Format of the fractional part of
prices, i.e., number of digits
after comma.

default_lang

Provider default language.

lang_list

Language packs enabled. Contains hash of hashes each of
them specifying a language pack enabled. Each hash looks
like:
Parameter

Means

title

Language name shown in store.

id

ISO language code in lowercase, just like a language pack
directory name (en for English,
de for German)..

126

XML API

store

Basic Store settings. Includes the hash of hashes:
Parameter

Means

referral

Referral question parameters
hash:
question - referral question
option_list
- referral
answers list

is_opened

Is store opened. 1 - yes, 0 - no.

provider_name

Provider company name shown
in store

text_info

User Agreements and offline
payment system description.
Contains hash:
account_agreement_text
- User Agreement to accept on
account registration
offline_header - Offline
payment systems descriptin
shown on Payment page.
agreement_text - User
Agreement to accept before
placing order.

is_use_ssl

If SSL is enabled for store. 1 - yes, 0 - no.

is_use_ssl_cp

If SSL is enabled for Control Panel. 1 - yes, 0 - no. The
parameter passes to store, how customers should be redirected
from store to CP: by http or by https.

127

XML API

tax_info

128

Taxation settings. Contains hash:
Parameter

Means

is_taxation_enabl If taxation is enabled as systemed
wide setting. 1 - yes, 0 - no.
tax_zone

Name of a tax zone to be
mentioned in store.

is_tax_included

If hosting plan prices include
taxes (1) or not (0). If not then if
taxation is enabled, taxes will be
added to an order total upon
checkout.

HSPC/API/Campaign
get_campaign
Parameters:
digest

Campaign key used as a unique campaign
identifier.

Returns ID (numerical identifier assigned in Parallels Business Automation - Standard database)
of the promotion associated with a given Campaign:
{
'promo_id' => '1'
};
SOAP Faults codes:
NoCampaignFound

No campaign exists for the digest specified

XML API

get_account_campaigns
The method allows finding campaigns that belong to an account.
Parameters:
account_id

ID of an account.

Returns a reference to array of [id, digest] pairs,
where id is internal Campaign ID, digest - Campaign identifier used in redirector URL.
SOAP Faults codes:
No specific codes.

HSPC/API/SSL
get_cert_form
The function returns the SSL certificate configuration form in HTML format.
Parameters:
hp_sid

Hosting plan series key.

form_data

Prefill values for the HTML form.

account_id

ID of an account an SSL certificate is to be
registered for.

Returns:
“
” SOAP Faults codes: No specific codes. 129 XML API validate_cert_form The function checks the SSL certificate configuration form data for validity. Parameters: hp_sid Hosting plan series key. form_data The values filled out by the customer using the form from get_cert_form. account_id ID of an account an SSL certificate is to be registered for. Returns: { field_with_error => “Field with error: error description” } SOAP Faults codes: No specific codes. 130 XML API 131 get_parsed_csr_data The function parses the CSR submitted by user in order to show the parsed CSR content on the "Submit Order" step in store. Parameters: hp_sid Hosting plan series key. form_data The values filled out by the customer using the form from get_cert_form. account_id ID of an account an SSL certificate is to be registered for. Returns the parsed CSR data as follows: { parse_error => if exists, country => string, state => string, city => string, organization_name => string, organizational_unit_name => string, common_name => string, }; SOAP Faults codes: No specific codes. 132 CHAPTER 3 Online Store Integration and Customization Starting with the version 4.3.3, PBAS is shipped with two stores:  The old store used in previous versions, fully functional with all the options used before version 4.3.3. After upgrading to version 4.3.3, the old store remains in use, by default. For details about old store configuration and customization refer to PBAS SDK version below 4.3.4 (http://download.pa.parallels.com/pbas/4.3/doc/PBAS_SDK_43.pdf).  The new store which is faster, dynamic, customizable, with the tabbed screen and shortened purchase wizard. In this chapter the new online store integration and customization options are described. The new store configuration available from PBAS Provider Control Panel is described in PBAS Provider guide >> Managing Online Store > New Store Configuration Basics. In This Chapter Online Store Structure ........................................................................................................... 132 Deploying Online Store ........................................................................................................ 133 Open Store, Switch between Old and New Stores ................................................................ 137 Configuring Redirect URLs to Integrate the Store with Existing Website ........................... 138 Store Customization .............................................................................................................. 143 Updating Third-Party Libraries ............................................................................................. 153 Online Store Structure Online store is installed by default into the /var/opt/hspc-store directory. It has the following structure:  i18n – directory with language packs  includes – directory contains symphony framework components and online store logic  templates – directory with templates  web – contains index.php and static content  customization – the directory, where your customization should be placed. See below.  settings.ini – online store config Online Store Integration and Customization 133 Deploying Online Store The new store is installed automatically in its default location on PBAS Management Node /var/opt/hspc-store and does not affect the old store settings. By default, after upgrading to version 4.3.3, the old store is used. The new store can also be deployed on a remote server (on page 133). Store Installation on Remote Server The new store installation on a remote server is basically similar to the the old store installation. Step-by-step instructions are below. Important: It is supposed that in case of the remote installation the store is used by one vendor only. Store Installation in Virtuozzo Container Since the new store is included in the PBAS installer, the Virtuozzo Container that will host the store must match a part of the requirements for PBAS Management Node. For instance, the installation is possible over the following 32-bit host OSes:   Red Hat Enterprise Linux AS5 CentOS 5 The new store may be deployed over the other OSes, including the 64-bit ones, however in this document we do not consider such environments for the new store. Important: It is recommended to use secured connection for the store (https). To this effect, install the mod_ssl template in the Container designated for the store deployment. By default, the store is deployed in the /var/opt/hspc-store/ directory. If needed, you may deploy the store in any other folder, providing that you make the corresponding changes to httpd settings.  To deploy the new store in the Container: 1. Copy the following packages from PBAS distributive into the Container designated for the store deployment: # cd /path/to/pbas-installer/packages/ # scp hspc-store-4*.rpm php53-*.rpm gmp-*.rpmlibxml2-*.rpmroot@remote.store:/tmp/ For PBAS 4.3.4 the list of packages will be the following: hspc-store-4.3.3-46.swsoft.i386.rpm php53-5.3.3-13.el5_9.1.i386.rpm php53-cli-5.3.3-13.el5_9.1.i386.rpm Online Store Integration and Customization 134 php53-common-5.3.3-13.el5_9.1.i386.rpm php53-mbstring-5.3.3-13.el5_9.1.i386.rpm php53-soap-5.3.3-13.el5_9.1.i386.rpm gmp-4.1.4-7.i386.rpm libxml2-2.6.26-2.1.2.8.i386.rpm 2. Log in to the store Container and run the following commands: # cd /tmp/ # rpm -Uhv *.rpm 3. Configure the httpd server: Open the file /etc/php.ini and add/edit the following settings: default_socket_timeout = 300 The installer includes the ready-to-use configuration file for Apache HTTP Server: /var/opt/hspc-store/hspc_shop.conf.in Run the following commands: # cp /var/opt/hspc-store/hspc_shop.conf.in /etc/httpd/conf.d/hspc_shop.conf # service httpd restart Important: If you are planning to use the secured protocol https for the store, do the following: a Open the file /etc/httpd/conf.d/ssl.conf b Find the section and at the end of this section add the following string: Include "conf.d/hspc_shop.conf" c Run the command: # service httpd restart 4. Configure the access to PBAS XML API. At the sever that runs Parallels Business Automation Standard (i.e., your Management Node), edit the /etc/hspcd/conf/hspc_ssl.conf file: Change Allow from none Into Allow from store_hostname store_ip where store_hostname store_ip must be replaced with either your store hostname, or store IP address, or both store hostname and IP in one string divided with a space. Save the changes to hspc_ssl.conf file. Restart httpd. 5. Configure authorization for the store: a Log in to PCC, go to Commerce Director > Store Manager > Configure Store > Security Settings, generate the key. b Log in the store Container, store/settings.ini. open the file /var/opt/hspc- Online Store Integration and Customization 135 Specify the PBAS Management Node IP address for the HSPCOMPLETE_SERVER parameter. Paste the generated secure key for the SECURE_KEY parameter. Warning: During the store upgrade to the next version, the file /var/opt/hspcstore/settings.ini will be rewritten. It is highly recommended that you create a copy of this settings.ini file and keep it safely. 6. Configuration is competed. If all of the configuration steps are done correctly, the new store will be available by the Container address. Store Installation in Parallels Plesk Panel  To deploy the new store in Parallels Plesk Panel: 1. Create a subscription in Plesk Panel. PHP Support should be enabled for domain in Plesk Panel at: Websites & Domains > domain.tld > Website Scripting and Security. Note: PHP version 5.3.3 or higher should be installed on the Plesk server. Additionally, the php53-soap (php-soap) and php53-mbstring (php-mbstring) packages should be installed. 2. Copy the store files into the Plesk Panel domain. For example, using the command as follows: # scp -r /var/opt/hspc-store/ root@PLESK_SERVER_IP:/var/www/vhosts/domain.tld/httpdocs/ 3. Configure web server parameters. Use the predefined configuration file shipped with the store: /var/www/vhosts/domain.tld/httpdocs/hspc-store/hspc_shop.conf.in  For Plesk 11.5: Copy the content of the hspc_shop.conf.in file and in the Plesk Panel, enter it into Websites & Domains > domain.tld > Web Server Settings. Fields: Additional directives for HTTP or Additional directives for HTTPS depending on the protocol that would be used for the store. Important! Do not forget to replace the default directory: Alias /shop/ /var/opt/hspc-store/web/ with the directory that corresponds to your domain name, for example such as for domain.tld: Alias /shop/ store/web/  /var/www/vhosts/domain.tld/httpdocs/hspc- For Plesk versions below 11.5 Copy the content of the hspc_shop.conf.in file into the file: /var/www/vhosts/domain.tld/conf/vhost.conf Or (depending on the protocol used for the store): /var/www/vhosts/domain.tld/conf/vhost_ssl.conf Important! Do not forget to replace the default directory Online Store Integration and Customization Alias /shop/ 136 /var/opt/hspc-store/web/ with the directory that corresponds to your domain name,for example such as for domain.tld: Alias /shop/ store/web/ /var/www/vhosts/domain.tld/httpdocs/hspc- Reconfigure the domain: /usr/local/psa/admin/bin/httpdmng domain.tld --reconfigure-domain 4. Configure the access to PBAS XML API. At the sever that runs Parallels Business Automation Standard (i.e., your Management Node), edit the /etc/hspcd/conf/hspc_ssl.conf file: Change Allow from none Into Allow from store_hostname store_ip where store_hostname store_ip must be replaced with either your store hostname, or store IP address, or both store hostname and IP in one string divided with a space. Save the changes to hspc_ssl.conf file. Restart httpd. 5. Configure authorization for the store: Log in to PCC, go to Commerce Director > Store Manager > Configure Store > Security Settings, generate the key. Open the file store/settings.ini /var/www/vhosts/domain.tld/httpdocs/hspc- Specify the PBAS Management Node IP address for the HSPCOMPLETE_SERVER parameter. Paste the generated secure key for the SECURE_KEY parameter. In addition, we recommend to specify the path to store logs via the LOG_LOCATION parameter. Note: You may see the error “open_basedir restriction in effect” in domain error log (/var/www/vhosts/domain.tld/logs/error_log or /var/www/vhosts/domain.tld/statictics/logs/error_log). To avoid this error, add the logs directory path (as you have specified for the LOG_LOCATION parameter) to the value of the open_basedir parameter. This will make the logs directory content allowed for reading by PHP scripts. The open_basedir parameter value can be set in the Plesk Panel, Websites & Domains > domain.tld > PHP settings. 6. Configure the Store settings in PBAS. Log in to PCC. a Go to Commerce Director > Store Manager > Configure Store and enter the valid Store URL. b Set the SSL support for the store. Go to Configuration Director > Miscellaneous Settings > SSL Setup. If SSL is enabled for the Plesk Domain, where Store is deployed, then activate the Enable SSL in Store option. Online Store Integration and Customization 137 Note: To enable SSL for the Plesk Domain, log in to the Plesk Panel, go to Home > Subscriptions > https-shop.com > Websites & Domains > domain.tld > Website Scripting and Security, enable the SSL support. In addition, the Plesk Domain should be moved to the dedicated IP address and SSL certificate should be installed. Open Store, Switch between Old and New Stores The new store is opened and closed together with the old store, in Commerce Director > Store Manager > Configure Store, the General Settings tab, the Status field. To switch between the old and the new stores change the Store URL so that the links used in Provider/Reseller Control Centers and Customer Control Panel point to the new store: Go to Commerce Director > Store Manager > Configure Store, the General Settings tab. Enter the new store URL: (depending on security settings, specify http:// or https://): Default URL to the new store: /shop. How to stop using one of the stores. Since both stores are closed together, it is not possible to close or open one of them. To stop using one of the stores, you need to configure redirect from one store to another. For details, refer to Knowledgebase Article (http://kb.parallels.com/116379). Online Store Integration and Customization 138 Configuring Redirect URLs to Integrate the Store with Existing Website The new store provides graphical interface to compose the redirect URLs that may be placed to your existing website, to integrate it with PBAS online store. The redirect may contain:  The pre-selected packages. Customers are redirected to the online store with a particular package already in the Shopping Cart. The redirect ID that is appended to the URL carries the information about the package preselected. Promotions applied to the preselected packages are also passed to redirect. Note: The auto-generated ID for the redirect URL may be renamed later into a more descriptive one, to easier recognize your redirects.  The online store tabs (that correspond to hosting plan categories) and plan groups. For more details about Plan categories and Plan groups refer to PBAS Provider guide >> Managing Online Store > New Store Configuration Basics. In this case, manually append the plans category ID to the generated redirect. The Default tabs (More Services and Domains) have the fixed IDs specified at the bottom of the store Redirector screen. For details, see the Example 1.  Domain lookup data. The domain lookup data may be sent to PBAS store from the HTTP form, together with the redirect. The generated redirect URL is placed in the Search Domain form HTML code manually. For details, see the Example 2 (on page 141).  Store language. Appended automatically when the Redirect URL is created. You may also append any language available in online store by replacing a language two-letter code (in lowercase) in the generated redirect URL.  To configure redirect URLs: 1. Open the store in the browser. 2. Select a hosting plan or a plan group. 3. Sign in as an existing customer and enter your Provider account login and password. When signed in, the Create static link for this configuration link appears in the Shopping Cart area: Online Store Integration and Customization 139 4. Click the Create static link for this configuration link. Now your pre-selection is captured, but not saved yet. The Preconfigured Store Links page opens. The newly pre-selected link and all the links created before are displayed. The new pre-selection is shown on the top as the Current Configuration in Shopping Cart. 5. Click Create new link. The redirect URL is generated. The new link details are shown on top of the Links List: To get the Links for other subscription periods, click Show more links (the link is shown if there are more subscription periods available for the package selected in the store). The list of the ready to use links for the various subscription periods is expanded: To collapse the list of links, click Show less links. Online Store Integration and Customization 140 To change the Link ID, just retype it and then click Rename. The Link ID may consist of digits '0-9', lowercase and uppercase letters 'a-z' and underscores '_' only. The length of the Link ID should be between 3 and 30 characters. To delete the link, click Delete link. To change the pre-selected package for the redirect URL, click Change configuration. You will be redirected to Store page with the pre-selected package configuration. Change configuration and click the Create static link for this configuration link in the Shopping Cart area. The Links List is displayed. The updated configuration is shown on top: To save the changes to the configuration and update the redirect URL, click Update existing link. Important: Save the updated link before you start updating another links. When you are redirected to store, your unsaved updates are dropped. Example 1. Redirect URL to the Store Tab The store tabs correspond to the Plan Categories, and each Plan Category has the numeric ID assigned in PBAS. In addition, there are two default tabs that have the static links:   Domains More Services Generally, to get the Redirect to the Store tab, the tab ID is appended to the Redirect URL instead of the link ID. For your convenience, the ready to use redirects to all of the store tabs that are in use, are shown at the bottom of the Redirector screen. For details, read more about Redirects (on page 138). To get the list of the "Store tab" Redirects, scroll the Redirector screen down to the Static Links List. Then expand the list. The list of links is displayed. Copy the link and use it at your website. Online Store Integration and Customization 141 Example 2. Pass Domain Lookup Data to the Store with Redirect URL The Store Redirector allows redirecting the customers to your Store not only with the preselected package, but at the same time, pass the Domain Lookup data. In this case, the Store will be opened with the pre-selected package, or the Domains tab chosen, then the Domain Lookup performed, and the Domain lookup results are shown. To set up the redirect with the Domain Lookup data, prepare the Domain Search form, to be placed to the external website. The HTML code for the Domain Search form should contain the specific parameters: Parameter Value or Description method POST action http:///shop//redirect/
  • Where: dm_action domain_selection_typ e  - domain name of your PBAS MN  - the two-letter language code, for Store interface. For example, en.  - the link to any of the pre-configured packages from your pre-selector, or link to the Domains tab. For example: http://provider.com/shop/en/redirect/c_domains. Domain action. Possible values:  register_new - register a new domain  reg_transfer - transfer a registered domain  domain_pointer - use a domain registered elsewhere The type of the input for the domain lookup. Use either single or multi types in the Domain Search form. Possible values:  single - check the single domain with various TLDs. Use the text input type with the domain_name parameter, to enter the domain name and then the checkbox input types with the tld[] parameter to provide the TLDs selection in the Domain Search form.  multi - use only the textarea input type with the domain_names parameter, to enter the full domain names divided with comma, semicolon, or white space, like mydomain.com otherdomain.com. domain_name The domain name for lookup. Use this parameter for the single domain_selection_type. tld[] TLDs, for the single domain name. Use this parameter for the single domain_selection_type. domain_names Domain names for lookup. Use this parameter for the multi domain_selection_type. Online Store Integration and Customization 142 Example of the Domain Search form HTML code. The usage of all parameters is shown in this example. Test preselector with domain lookup data
    dm_action
    domain_selection_type
    domain_name
    tld[]  com     net     org     biz   
    domain_names
    Online Store Integration and Customization 143
    Store Customization The store customization options are described in this section. Changing Store Layout, Styles and Images The store provides a wide range of options for pages customization. It is possible to customize palette, fonts, use own images and logotypes, change the size and positioning of configuration blocks and controls, hide configuration blocks for various types of hosting plans, change any templates, for example header and footer. All these option are described below in this section. Change palette, fonts, and styles The Parallels Common UI skin, which is used, for instance for Plesk Panel 11.5, has been taken as the basic theme for the new Store. If you already have the store branded with the corporate palette for Plesk 11.5, you may use this skin for PBAS Store as well. For details, refer to Plesk Panel documentation: Customizing Panel Appearance and Branding (http://download1.parallels.com/Plesk/PP11/11.5/Doc/enUS/online/plesk-themes-guide/). The store UI elements are available by the following paths:  /var/opt/hspc-store/web/css/ - CSS files  /var/opt/hspc-store/web/images - images Together with the common elements, such as headers, icons, buttons, and styles for pages layout design, the new Store also brings the own styles for the controls, jQuery library elements, the images not yet included in Common UI Skin. In addition, the new store redefines a certain properties of Common UI Skin screen elements.The Store own styles are defined in the /var/opt/hspc-store/web/css/stylesheet.css file. The styles definitions in the stylesheet.css file are annotated and grouped into sections according to the styles designation. The Store styles are customized separately for each vendor. In future Store versions it may become possible to customize the styles for all vendors at a time. Attention: In order to avoid overwriting of the customized files during Store upgrade, place the customized files in the following upgrade-safe directories:  /var/opt/hspcstore/customization/vendor/VENDOR_ID/static/css/ - CSS files  /var/opt/hspc-store/customization/vendor/ VENDOR_ID/static/images/ - images Where VENDOR_ID - is the ID of the vendor account, for which the Store is customized. Online Store Integration and Customization 144 Change header and footer templates The store templates are located in the /var/opt/hspc-store/templates/ directory. The customized templates should be placed in the upgrade-safe directory: /var/opt/hspc-store/customization/vendor/1/templates/ To add the content in the description and keywords meta tags, or to change the other HTML header element, modify the file: /var/opt/hspc-store/templates/html_header.html.php To change the top navigation block, modify the file: /var/opt/hspc-store/templates/header.html.php To change the footer, modify the file: /var/opt/hspc-store/templates/footer.html.php Online Store Integration and Customization 145 Customizing Store by Means of Configuration Parameters The file /var/opt/hspc-store/settings.ini contains the global parameters for the store including connection settings, layout and behavior, environment variables, and other options related to store customization. The comments that describe the designation and usage are provided for each parameter. Thus, to know about all parameters, look into the settings.ini file. Custom settings should be placed to the special customization directory. Important: The changes made to the original file /var/opt/hspcstore/settings.ini are reset to defaults during PBAS updates installation. Always put your custom settings in the update-safe directory: /var/opt/hspcstore/customization/vendor//custom.ini, where is the ID of vendor account. For provider account with ID=1 the directory is created automatically during new store deployment: /var/opt/hspcstore/customization/vendor/1/custom.ini. In this custom file, all the store custom settings may be placed, except for the ones related to PBAS Management Node access and authorization. To facilitate store customization, the graphical interface is provided for some the store parameters related to layout and behavior. When you use this graphical interface to change the parameters values, the custom settings are automatically placed into the upgrade-safe directory /var/opt/hspcstore/customization/vendor//custom.ini.  To open the graphical configurator for store global settings: 1. Open the store in the browser. 2. Select a hosting plan or a plan group. 3. Sign in as an existing customer and enter your Provider account login and password. When signed in, the Create static link for this configuration link appears in the Shopping Cart area: Online Store Integration and Customization 146 4. Click the Create static link for this configuration link. The store configuration settings are displayed. 5. Click the Settings tab. The list of the store parameters is displayed (the screenshot below shows only part of the screen): Online Store Integration and Customization 147 6. Enter the parameters values in the fields next to their names. For the parameters that are set to Yes/No, put a tick in the check box for Yes or clear the tick for No. 7. When ready, click Update parameters to save the changes. Note: To skip all the customization, click Reset to defaults. This will delete the custom.ini file, so the store parameters' values will be taken from the default file settings.ini. Show/Hide the password during entering In the store, the password generation widget is used. Customers can either enter the password or generate it. By default, the entered password is hidden. Such behavior is defined by means of the Store general parameter SHOW_FORM_PASSWORDS. To show the entered password as plain text, set the SHOW_FORM_PASSWORDS parameter value to "Yes". This will certainly does not restrict the ability for the customer to show or hide the password using the Show/Hide option in the password generation widget area. The customer may do one of the following:  Manually enter the password into the Type field. The bar next to this field dynamically shows the password strength. Then retype the password. To facilitate the password retyping, the customer may put a tick in the Show check box, this would display the plain password on the screen. OR  Automatically generate the password by clicking the Generate button. The automatically generated password has the Strong security level, by default. To view and copy the autogenerated password, the customer may put a tick in the Show check box. Hide the configuration blocks for different types of hosting plans By default, the Store displays all the options and controls used to change the hosting plan configuration during purchase. Typically, the hosting plan configuration controls are presented as blocks in the store: for example, Resources, Applications, Domains, etc. If needed, a particular configuration blocks for a particular type of hosting plans can be hidden and thus, kept away of changes during purchase. Hiding a hosting plan configuration blocks may be useful for some types of hosting that provide a wide range of settings to configure, but at the same time have some default settings that meet the needs of most of the customers. The plans configuration blocks are hidden by means of the COLLAPSED_BLOCKS directive. Syntax is the following: COLLAPSED_BLOCKS = "type_id,block_name,block_name,...; " Where: type_id - a numeric value, defined in the file /var/opt/hspcstore/includes/constants.php, HP_TYPE_* constant values block_name - a string value, defined in the file /var/opt/hspcstore/includes/constants.php, HP_BLOCK_* constant values Online Store Integration and Customization 148 Example: Hide the Applications and Resources blocks for Virtuozzo Container hosting plans and the Domains and Resources blocks for Miscellaneous hosting plans. Enter the following directive: Integrating with 3rd Party Applications. Kayako Chat Here is an example how to add Kayako site badge to the online Store. Note: The instructions are given for Kayako Fusion 4.5 and may differ for other versions. You may refer to Kayako documentation for instructions how to generate source code for the badge. To generate the Kayako tag: 1. Login to Kayako Admin panel, go to Home > Tag generator Online Store Integration and Customization 149 2. Click on Site Badge and then click Next. 3. Set the options like Department, Route to Chat Skills, customize styles if needed and click Generate. 4. Copy the generated tag code. The code will look like: Online Store Integration and Customization 150
    5. Login to the server, where online Store is deployed and go to the Store directory. (Default store location is /var/opt/hspc-store). 6. Customize footer.html.php template (on page 143) and insert the generated code there: a Create the directory for custom templates for your vendor: #mkdir –p customization/vendor/1/templates/ In this example, we create the directory for provider account (vendor ID= 1). For other cases, use your vendor account ID. b Copy the original footer.html.php file into the created directory: # cp templates/footer.html.php customization/vendor/1/templates/ c Open the customization/vendor/1/templates/footer.html.php template and insert the generated code before the "" line. Save the changes. Online Store Integration and Customization 151 As the result, the Kayako site badge will be added to all online Store screens as it’s shown on screen shot below. Customizing Store Localization In this section we describe:  How to customize the existing language pack for the store.  How to add a new language pack for the store. Note: The customized strings will be applied for all vendors. Customize the existing language pack for the store The existing language pack is customized by means of replacing the original strings with the custom ones. Custom strings are kept as the XML file in the special pre-defined customization directory, which enables the strings replacement, and at the same time protects the custom strings from having been rewritten during PBAS upgrading. When rendering the store page, PBAS first looks through the customization directories, and if custom strings are found, they are used in the store UI, otherwise - the original strings are used.  To customize the store localization: 1. Create the customization directory to keep the custom strings. For the default store installation the path should be as follows: Online Store Integration and Customization 152 /var/opt/hspc-store/customization/localization/XX/ where XX - is the two letter language code (ISO 639), same as used in PBAS for the language pack you want to customize. For the custom store installation, the customization/localization/XX directory should be created over the store installation root directory. 2. Create the XML file, where you will place the customized strings. The file name may be any. Then open this XML file and do the following:  To the beginning of the file, paste the XML declaration and the header from the original XML file, for example such as (for the EN locale): ]>  Inside the strings tag, paste the string(s) specification(s) you want to customize. Note: Only the customized strings should be kept in the customization file.  Adjust the strings values in the way you need. 3. Save the changes to the custom XML file. 4. Place the custom XML file into the store strings customization directory (see step 1). Note: To get the changes applied to the store, it may be needed to open the store in a new browser session. When locale is changed, there is no need to restart any of the services or clear the browser cache. No additional actions needed to make visible the changes made to the localization. Add a new language pack for the store Before you start translating the store localization into the new language that is not shipped with PBAS, it is necessary to add the corresponding language pack to PBAS (on page 225). When a new language pack is added, do the following: 1. Add the flag image. Create a new image or copy an existing one from the old store to the new one: # cp -p /var/opt/hspc-frontend/images/flags/flag_xx.gif /var/opt/hspc-store/web/images/flags/ where xx - is the language two-letter ISO code in lowercase. 2. Create the directory for the new locale and copy the etalon (EN) locale into this directory: # mkdir /var/opt/hspc-store/i18n/XX # cp -p /var/opt/hspc-store/i18n/EN/hspc-store-basic.xml /var/opt/hspc-store/i18n/XX/hspc-store-basic.xml Online Store Integration and Customization 153 XX - is the language two-letter ISO code in uppercase. The new directory must be named by a two-letter language code in upper case, following the ISO 639 (http://www.loc.gov/standards/iso639-2/php/code_list.php) language codes. 3. Translate the etalon locale into the new language. If the old store has already been translated into a custom language, this translation can be used as the base for the new store translation. Note: To get the new locale applied to the store, it may be needed to open the store in a new browser session. When locale is changed, there is no need to restart any of the services or clear the browser cache. No additional actions needed to make visible the changes made to the translation. Updating Third-Party Libraries The store uses jQuerylibrary (http://jquery.com/download/), jQuery UI (http://jqueryui.com/download), jQueryFormPlugin (http://jquery.malsup.com/form/#download), and Symfony Components framework (http://symfony.com/components). By the moment of PBAS version 4.3.3 release, the latest versions of these libraries were included in the Store distribution. However, the PBAS release cycle may differ from the thirdparty libraries releases. In such a situations, the third-party libraries should be updated manually. Important: Back up the Store before updating the third-party components. Updating jQuery The default path for jQuery files is /var/opt/hspc-store/web/js/thirdparty/:  jquery-1.9.1.js  jquery.form.js  jquery-ui-1.10.2.custom.js Important: Before upgrading, it is strongly recommended to carefully read the Release Note and Upgrade Notes for the jQuery version you are going to install, paying a special attention to the issues related to compatibility with the previous versions. The jQuery files may be updated either for a particular vendor or for all vendors. In the step-by-step instructions below we suppose that VENDOR_ID should be replaced with the vendor account numeric ID.  To update the jQuery files for the particular vendor: 1. Place the new jQuery files to the directory: /var/opt/hspc-store/customization/vendor/VENDOR_ID/statis/js/ Online Store Integration and Customization 154 2. Copy the file: /var/opt/hspc-store/templates/html_header.html.php into the customization directory: /var/opt/hspc-store/customization/vendor/VENDOR_ID/templates/ 3. Open the html_header.html.php file. Change the .js files' names into the new ones in the following strings: $view['assets']?>" $view['assets']?>" 4. Save the changes.  To update the jQuery files for all vendors: 1. Place the new jQuery files to the directory: /var/opt/hspc-store/web/js/thirdparty/ 2. Change the .js files' names in the original file: /var/opt/hspc-store/templates/html_header.html.php For details, see the step-by-step instruction above, for per vendor customization, steps 3 and 4. Online Store Integration and Customization 155 Updating Symfony Components By default, the executable files are located in the directory: /var/opt/hspc-store/includes/vendor/ The following components are used:  "symfony/finder": "v2.3.0",  "symfony/class-loader": "v2.3.0",  "symfony/event-dispatcher": "v2.3.0",  "symfony/http-foundation": "v2.3.0",  "symfony/routing": "v2.3.0",  "symfony/http-kernel": "v2.3.0",  "symfony/config": "v2.3.0",  "symfony/yaml": "v2.2.2 " Important: Before you start updating do the following: 1. Carefully read the Release Note and Upgrade Notes for the Symfony Components version you are going to install, paying a special attention to the issues related to compatibility with the previous versions. 2. Open the file /var/opt/hspc-store/includes/composer.json and specify the particular components that should be updated. For example: { "require": { "symfony/finder": "2.3.*", "symfony/class-loader": "2.3.*", "symfony/event-dispatcher": "2.3.*", "symfony/http-foundation": "2.3.*", "symfony/routing": "2.3.*", "symfony/http-kernel": "2.3.*", "symfony/config": "2.3.*", "symfony/yaml": "2.3.*" } }  To update the Symfony Components: 1. Run the following commands: # cd /var/opt/hspc-store/includes/ # curl -sS http://getcomposer.org/installer | php # phpcomposer.pharupdate Online Store Integration and Customization The output of the last command should look as follows: Loading composer repositories with package information Updating dependencies (including require-dev) - Removing symfony/finder (v2.3.0) - Installing symfony/finder (v2.3.1) Downloading: 100% - Removing symfony/class-loader (v2.3.0) - Installing symfony/class-loader (v2.3.1) Downloading: 100% - Removing symfony/routing (v2.3.0) - Installing symfony/routing (v2.3.1) Downloading: 100% - Removing symfony/http-foundation (v2.3.0) - Installing symfony/http-foundation (v2.3.1) Downloading: 100% - Removing symfony/event-dispatcher (v2.3.0) - Installing symfony/event-dispatcher (v2.3.1) Downloading: 100% - Removing symfony/http-kernel (v2.3.0) - Installing symfony/http-kernel (v2.3.1) Downloading: 100% - Removing symfony/config (v2.3.0) - Installing symfony/config (v2.3.1) Downloading: 100% - Removing symfony/yaml (v2.2.3) - Installing symfony/yaml (v2.3.1) Downloading: 100% Writing lock file Generating autoload files 156 157 CHAPTER 4 User Interface Customization Parallels Business Automation - Standard customization tools are described in this chapter. In This Chapter Screens Customization Overview ......................................................................................... 157 Template Based Customization............................................................................................. 162 Customizing Vendor Control Center (PCC/RCC) ................................................................ 162 Customizing Customer Control Panel................................................................................... 171 Adding New Fields to Accounts Registration Form ............................................................. 199 Extending E-Mail Notification Templates ............................................................................ 203 Customizing Language Packs ............................................................................................... 215 Screens Customization Overview You can customize any of Parallels Business Automation - Standard screens in a way that suits your needs. The following customization types are available:  Template based customization (on page 162). Allows customizing Control Panel frames and dashboards.  Screen aliases based customization (on page 162). Applicable to Provider and Reseller Control Centers screens only. Allows customizing any of PCC or RCC screens.  Adding, hiding or changing interface items in the Control Panel dashboards by means of CP customization module (on page 177).  Screen ID based customization (on page 189). Applicable to Control Panel screens.Allows customizing the screens displaying objects properties, lists of objects and the like - all screens accessible by clicking on CP dashboards items.  Editing the context help for any of the Parallels Business Automation - Standard screens. Context help files are located in the /var/opt/hspc-root/help/ and sorted by language packs directories. Help files names exactly match its screen ID. Context help opens after clicking Help link at the Control Panel top: User Interface Customization 158 :  Editing the on-screen help bars for the Control Panels your customers use. Onscreen help files are located in the /var/opt/hspc-root/hints/ and sorted by language packs directories. Help files names exactly match its screen ID. Onscreen help is embossed on most of Control Panel screen and provides short hints: User Interface Customization 159 Warning: Please carefully follow both the directories structure and naming conventions offered below to store your customization. Otherwise the customized files will be overwritten after the next Parallels Business Automation - Standard update installation. Do not customize files inside the original directories because such changes will be also lost after the Parallels Business Automation - Standard update installation. We strongly recommend to copy into the custom directories only the files that you really customize. Do not copy the surrounding template files into the custom directories. Considerable number of template files in custom directories can result in the necessity for a lot of extra checks during Parallels Business Automation - Standard upgrade installation, because during upgrade each template in custom directories is checked in respect to compatibility with a new Parallels Business Automation - Standard version. Customized files should be stored in the single subdirectory created specially: /var/opt/hspc-root/ Parallels Business Automation Standard base directory defined by HSPCROOT_ROOT parameter in hspc.conf file. /var/opt/hspc-root/custom/ Parallels Business Automation Standard customization base directory. /var/opt/hspc-root/custom/template/ The subdirectory containing customized templates. /var/opt/hspc-root/custom/help/ The subdirectory containing customized context help files. /var/opt/hspc-root/custom/hints/ The subdirectory containing customized onscreen help files. /var/opt/hspc-root/custom/screen/ The subdirectory containing screen ID based customization files. /var/opt/hspc-root/custom/localization/ The subdirectory containing the language pack customization files. User Interface Customization 160 It is also possible to perform the account-specific and language-specific customization. Such customization can be applied to screen templates, context help, and onscreen help only. The account-specific customization calls for creation of the following subdirectories in /var/opt/hspc-root/custom/template/, /var/opt/hspcroot/custom/help/, and /var/opt/hspc-root/custom/hints/: default/ The directory to put templates customized for all Providers 1/ The directory to put templates customized for Provider only RESELLER_ID/ The directory to put templates customized for particular Reseller, where RESELLER_ID represents a Reseller Account ID. Example 1: To customize screen templates for a particular reseller account (let us assume that this reseller account ID is 123), it is necessary to: 1. Create a subdirectory 123/ under the /var/opt/hspc-root/custom/template/ directory. 2. Under the /var/opt/hspc-root/custom/template/123 directory, create subdirectories that exactly follow the path to the original files you want to customize. For example, if you want to customize store frontpage templates, that are originally located in /var/opt/hspc-root/template/HSPC/EM/Plans/, you must create the HSPC/EM/Plans/ subdirectory under the 123/ directory and put the customized files there. Thus, following our example, the final path for customized store frontpage templates must be: /var/opt/hspc-root/custom/template/123/HSPC/EM/Plans/ Always create the corresponding subdirectories for customized files to let your customization be applied. User Interface Customization 161 Example 2: To perform the language-specific customization, you should create the subdirectory named by the language two-letter abbreviation, e.g., EN/ for English, FR/ - for French, etc. For example, /var/opt/hspc-root/custom/hints/FR/ to store the customized onscreen help files in French. And to store the french customization for your Provider account only: /var/opt/hspc-root/custom/hints/1/FR/ To perform the language dependent customization for a particular Reseller account (for example, with account ID 127), you should create the directory: /var/opt/hspc-root/custom/hints/127/FR/ For example, In accordance with the rules outlined above, the location of the custom on-screen help file for all French customers of the Reseller with account ID 127 on page with screen ID 01.04.18.02.16 should be the following: /var/opt/hspc-root/custom/hints/127/FR/01.04.18.02.16.html The procedure of customization file lookup looks as follows:  Parallels Business Automation - Standard searches through the default subdirectory for the Reseller language specific customization: /var/opt/hspc-root/custom/hints/127/FR/01.04.18.02.16.html  If customization file was not found, the Parallels Business Automation - Standard searches in the Reseller language specific directory, but in this case, not in the custom language directory (FR/) but in the directory that corresponds to the default language used by Provider. For example if the default language used by Provider is English, then the customized file will be searched in the following directory: /var/opt/hspc-root/custom/hints/127/EN/01.04.18.02.16.html  If customization file was not found in the Reseller language-specific directory, then just the Reseller-specific directory is checked: /var/opt/hspc-root/custom/hints/127/01.04.18.02.16.html  If the customization file is still not found, then the Parallels Business Automation - Standard searches in the default directory for French customized onscreen help: /var/opt/hspc-root/custom/hints/fr/01.04.18.02.16.html  If the customization file is not found again, then the Parallels Business Automation Standard searches in the default directory for the customized onscreen help in the default language used by Provider (for example, a Provider uses English): /var/opt/hspc-root/custom/hints/en/01.04.18.02.16.html  Finally, the Parallels Business Automation - Standard searches in the default directory used for customized onscreen help: /var/opt/hspc-root/custom/hints/01.04.18.02.16.html User Interface Customization 162 Template Based Customization Most of elements used at Parallels Business Automation - Standard screens can be customized using the screen aliases (in Provider and Reseller Control Centers) or screen IDs (both PCC/RCC and Control Panel) based approaches. This method is reliable and absolutely safe. However, some elements of Parallels Business Automation - Standard graphical interface cannot be customized using screen aliases or screen ID based method. For example, login pages, links at tabs, some documents used in specific accounting plug-ins. Templates are widely used in Parallels Business Automation - Standard interface. The template files *.tmpl and *.html are stored in different directories under /var/opt/hspcroot/template or /var/opt/hspc-root/skins directory. The name of a template used at a Parallels Business Automation - Standard screen can be found from a page HTML source code. Alternatively, it is possible to find the needed template file by localization string IDs used at the screen you want to customize. Similarly to the other customization, to prevent the customized templates from having been rewritten during Parallels Business Automation - Standard upgrade installation, the customized templates must be placed into the /var/opt/hspc-root/custom/ directory. For example, if the path to the Russian accounting documents is /var/opt/hspc-root/template/HSPC/ACC/Plugin/Ru/UI/ then the customized templates are to be placed into the /var/opt/hspc-root/custom/template/HSPC/ACC/Plugin/Ru/UI/ directory. Warning: The same template can be used in a number of Parallels Business Automation Standard screens and in most cases it is actually used. This means that a single customized template may emerge at a number of Parallels Business Automation - Standard pages. Please be very careful when customizing templates. Customizing Vendor Control Center (PCC/RCC) Components Repository Below we describe how to add or customize Parallels Business Automation - Standard screens using the XML Components Repository. User Interface Customization 163 Components Repository Structure and Files Parallels Business Automation - Standard Component Repository Configuration is presented as a set of XML documents with the structure described below. All configuration files are located in one directory and named arbitrary, but with .xml extension and in a valid format. Parallels Business Automation - Standard Component Repository Configuration offers the following vision of Parallels Business Automation - Standard logical structure (in descending order): director First level grouping set with power limited to a reasonable number for main menu to be observable. manager Second level grouping set usually based on independent lines of work. screen Atomic element of structure, any webpage: a dashboard, an edit form, a wizard step, whatever. Screens can be nested within other screens to form any URIs and navigation paths. Screens nested within screens do not have entries in main menu, could be presented only by higher level nodes. Nodes have the following attributes: title_id (default: alias)Localization ID of component's external name; string(id => 'title_id') visually appears in site path, main menu and so on. See note for set_node_context($) interface below. alias String unique throughout the configuration; unambiguously identifies a node for direct referencing. Used when inserting other nodes on-the-fly, filling some parameters with default value, etc. id Number unique on its level; forms a uri (as well as Screen ID) as a concatenation of higher level nodes' id and this id. If id is not set for a node, it is set automatically to some of spare values (incrementally). class Name of handler class. method Name of handler method from class. filter Name of static filter function (on page 164) from class. Defines on what conditions an element must be shown. If present, a function is run with node_descriptor (see below) as a parameter on menu tree creation or a screen lookup. Should return a non-zero result for a node to be visible and accessible, otherwise a node is hidden. Value of filtered_out property of node_descriptor is set to 1 in case filter property presented and filter method return zero result on call to node(). Thus, other modules don't have to handle filter property but just check filtered_out. User Interface Customization 164 groups Security groups as comma separated list. Refer to Security Manager documentation for details. icon (default: alias) Component's page icon. before IDREF to some node's alias. Points to node of the same logical level to insert a new node before it. helper Topic ID of corresponding helper's page. ssl SSL mode for node. If presents, the parameter's value (on or off) specifies whether to force enabled or disabled SSL for this node (the corresponding 'force SSL' option must be enabled in provider's configuration). Each configuration XML document has root as its root element and nodes of any level as its children. Use the before attribute to point to exact place for a node insertion. All optional parameters are inherited from higher level nodes. Files Location All configuration files must be located in one directory. Currently it is /var/opt/hspc-data/Core/CompRep Defaults Main configuration file must be named _.xml. Order Files are sorted in alphabetical order before reading. Use it for organizing sequences of dependent configuration blocks. Inheritance To add a record to a block, reproduce the whole nesting scheme of the block, using the only alias parameter for matching of parent nodes, and place the record inside the scheme. If a record with such alias already exists, the old record is overrode. The filter Function Sample sub filter { my $node = shift; if ($node->{alias} eq 'node_alias1') { return tell_us_whether_to_show_this_node(); } elsif ($node->{alias} eq 'node_alias2') { return get_some_option() == 'some_value'; } return 1; } User Interface Customization 165 New Component Sample Parallels Business Automation - Standard Components Repository provides an opportunity of creating new screens in Parallels Business Automation - Standard. Important: To get a new screen displayed not only in Provider Control Center, but in Reseller Control Center as well, set the reseller permissions. Go to Configuration Director > Security Manager > Setup and select the Reseller Permissions tab. To grant permissions for reseller to view the new screen, put a tick in the check box next to the new screen name and click OK. The very first thing you need to do to create a new screen is adding your xml file with definition of a new screen. This definition consists of an entry in menu hierarchy, a perl class name and a method of this class, which will be responsible for forming a new page content. After this, you need to code your perl class and provide specified method in it. Place the package with this class so perl can find it (you can check search directory seeing content of your @INC variable): /usr/bin/perl -V Finally, to let a new screen appear in Parallels Business Automation - Standard, restart the last thing to do One thing that remains new screen arriving is hspcd restart: /etc/init.d/hspcd restart Note: If you want to add a number of screens one-by-one, you can do without restarting hspcd each time you want a new screen to appear in the Parallels Business Automation - Standard interface. To this effect, edit the Parallels Business Automation - Standard configuration file /etc/hspc/hspc.conf. Set COMPREP_NOCACHE=1, save changes and restart hspcd. After this new components start appearing in the interface right after you add a new screen definition. However, this degrades the Parallels Business Automation - Standard performance. Thus, when you finish with new components addition, set the COMPREP_NOCACHE=0 in /etc/hspc/hspc.conf and restart hspcd. Now we describe a simple example demonstrating how you can add a new screen. Place following xml file: into the /var/opt/hspc-data/Core/CompRep/cc/account_director_custom.xml file. User Interface Customization 166 The director and manager tags were copied from the original account_director.xml, they are already shown in Parallels Business Automation - Standard menu entries (you can see them in Provider Control Center, they are Account Director and Account Director > Customer Manager accordingly. The new entry is the screen tag. It defines  alias for screen: custom_component;  method of this perl class that will form the page content: some_teaser;  perl class: Custom::Component; We describe the perl class later in this topic.  icon and title for the screen, (we take here already existed examples); As for the screen title, so you can achieve it customizing language packs. Just add the id of your customized string in the screen tag: For more information about customizing strings please refer to the corresponding SDK topic (on page 215), where you can know out how to specify a string ID and assign a text value to this string ID.  filter function, this function manages the screen visibility in the interface. The filter function is needed only if you want to set a strict rules for a screen visibility. If you want a screen to be visible all the time, do not define this function. Place the following perl class definition into the /usr/lib/perl5/site_perl/5.8.8/Custom/Component.pm file: package Custom::Component; use strict; use HSPC::Application; use HSPC::WebPage; ## draw page for custom component ## < returns: ## { STATUS => ..., CONTENT => ... } structure sub some_teaser { my $class = shift; my $page = HSPC::WebPage->new(); $page->title(); $page->tab(); $page->statuses(); $page->post_info_text ( title => 'custom_component_title', content => 'custom_component_under_construction' ); return { STATUS => 'OK', CONTENT => $page->get_content() }; } ## check if screen is needed to be shown ## < returns: ## TRUE -- if screen is needed to be shown, FALSE -- otherwise User Interface Customization 167 sub filter { return 1 if $ENV{SHOW_CUSTOM_COMPONENT}; } 1; Note: Don't forget to check that /usr/lib/perl5/site_perl/5.8.8/ directory is in your @INC paths. Now you need to restart hspcd in order to make changes available. If everything is ok, you will see a new entry under the Account Director > Customer Manager menu in Provider Control Center. Now let's focus on the perl module Custom::Component. The main thing that this module must provide, is the some_teaser method, which has been specified as method option in the screen tag in our xml example). The return value of this method is the following reference on a hash with entries:  "STATUS" - possible values: "OK", "ERROR", "REDIRECT", "CUSTOM", "POSTED";  "CONTENT" - the web page source that is needed to be shown, used if STATUS is "OK" or "CUSTOM"; "ERROR" - error number, used if STATUS is "ERROR";  Here are the examples illustrating how to use different return values: STATUS "OK": return { STATUS => "OK", CONTENT => "CONTENT ..." } Normal page is shown in this case. STATUS "ERROR": return { STATUS => "ERROR", ERROR => 403 } Notify about error. STATUS "REDIRECT": $ENV{system_obj}->{redirect_local} = 'some_local_URL'; $ENV{system_obj}->{redirect} = 'some_URL'; return {STATUS => 'REDIRECT'}; Use one of the environment variables (redirect_local or redirect) to initiate a local (to one of your site pages) or internal (to other website pages) redirection respectively. For example, if your new custom page is a screen form, let say New Object, then you can use local redirect: after a 'New Object' form is filled and then follows the click on the Save button - a local redirect brings you on the page with the list of such Objects, as this is done in Parallels Business Automation - Standard for new Accounts, new payments, and so on. Then it is necessary to specify in the Component.pm module: $ENV{system_obj}->{redirect_local} = 'some_local_URL'; return {STATUS => 'REDIRECT'}; If you use an internal redirect, for example on some other website, then it is necessary to write the following: User Interface Customization 168 $ENV{system_obj}->{redirect} = 'full_resirect_URL'; return {STATUS => 'REDIRECT'}; Of course, words some_local_URL and full_resirect_URL must be replaced with real path or real full URL. STATUS "CUSTOM": return {STATUS => 'CUSTOM', CONTENT => 'some_content'} Almost the same as STATUS "OK", the only difference is that no http headers will be added. They are to be added manually. STATUS "POSTED": return {STATUS => 'POSTED'} Nothing will be output at all. System will assume that both headers and content will be output manually. CONTENT of the returned page can be formed as you would like it to be. Parallels Business Automation - Standard GUI methods are not used in this case, but you need to provide localized content. The easiest way to do this is the following: Use the string method from HSPC::Localization package. In this case, the module described above will look as following: (# cat /usr/lib/perl5/site_perl/5.8.8/Custom/Component.pm): package Custom::Component; use strict; use HSPC::Console; use HSPC::WebPage; use HSPC::Localization qw(string); ## draw page for custom component ## < returns: ## { STATUS => ..., CONTENT => ... } structure sub some_teaser { my $class = shift; my $page = HSPC::WebPage->new(); $page->title(); $page->tab(); $page->statuses(); $page->post_info_text ( title => string( 'custom_component_title' ), content => string( 'custom_component_under_construction' ) ); return { STATUS => 'OK', CONTENT => $page->get_content() }; } ## check if screen is needed to be shown ## < returns: User Interface Customization 169 ## TRUE -- if screen is needed to be shown, FALSE -- otherwise sub filter { return 1; } 1; --snap Please note, that string IDs used as arguments for string method must be valid. These IDs can belong to already existing strings in Parallels Business Automation - Standard or customized ones. In the latter case, please provide customization for all languages your system will support (on page 215). Screen Aliases Based Customization in Control Centers Together with screen IDs, the Control Centers screens have alphabetical names called aliases. Screen alias is not shown anywhere on a screen, but exactly an alias defines a particular screen in a Control Center hierarchy. You can find a screen alias by clicking on screen ID. For example, screen ID is 01.01.03.04.01 (in our example, this is Billing Director > Discount Manager > Promotions): User Interface Customization 170 Screen alias in this case is shown in brackets and its value is promotion. Please pay attention to the fact that the full nesting structure, in accordance with the Control Center menu structure, is shown for a target screen. How customization is applied: Customization is applied in a cumulative order - starting from a 'child' screen and up to a 'parent' screen. Parent screens customization affects all the child ones. First, the ending screen module is parsed (in our example, this is the promotion screen, if customization is found, it is applied, then the parent screens are parsed: first discount_manager, then billing_director. If customization is found for these screens, it is added to a previously found one. Customization found for a 'parent' screens is applied to all the child screens. For example, if you customize the discount_manager screen, this customization will be applied to all screens under the Discount Manager. Thus, to customize a group of screens, use a Manager or a Director alias as a customization module name. You can customize any screen in Provider or Reseller Control Center by writing a customization module for the corresponding screen. The name of a module should follow the screen alias. For example, for the screen with ID 01.01.01.01 (Account Director > Customer Manager > Customers) with screen alias customers the module name should be customers.pm. PBAS Control Centers components nesting level and belonging are also reflected in their screen IDs. Any screen ID consists of five digits: Component Product ID Tool ID Director ID Manager ID Screen Director Director ID 00 00 Manager on a Constant. Constant. for second nesting level Always 01 must be PCC, 02 for RCC Component under a 01 Manager or other component without nested ones. Director ID Manager ID 00 Director ID Manager Component or component ID or ID ID component ID User Interface Customization 171 Control Center Screen Customization Module Sample A special method called customize should be defined in a customization module. This method should accept an HTML text as an argument and return the customized HTML text to be sent to a client browser. This method will be called right before sending out an HTML page to a client. Example: Customizing screen in Provider Control Center We customize the Support > Contacts screen. Screen ID is 01.01.09.10.00. By clicking on screen ID we discover screen alias. The screen alias is support_tab_con. Thus, the customization module must be named by its alias and placed here:: /var/opt/hspc-root/custom/screen/support_tab_con.pm Module text: package HSPC::Custom::Screen::support_tab_con; use strict; use HSPC::Custom::Screen; sub customize { my ($stream, $alias) = @_; ## insert the message my $msg = "This message was inserted by screen alias customization in PCC.
    \n"; $stream = $msg . $stream; ## return customized text return $stream; }#/customize 1; After you will place the customization module into the right directory, you will need to restart hspcd for changes to take effect: /etc/init.d/hspcd restart If everything goes right, you will see This message was inserted by screen alias customization in PCC. message at the top of the Support screen. Customizing Customer Control Panel Control Panel Screen Structure The Control Panel screen consists of the two main parts:  Top frame (1) that displays the following:  Logotype  Tabs  Subscription selector  Logout link User Interface Customization 172 Set of tabs shown on the top frame differs depending on the type of the subscription selected. Top frame can be customized by means of template based customization (on page 162). Top frame template is located here: /var/opt/hspcroot/skins/panel/template/HSPC/CP/Visual/top_frame.tmpl  Main frame (2) that displays links to services according to the selected subscription and the selected tab. User Interface Customization 173 For Parallels Plesk Panel (Plesk) and Parallels Operations Automation (POA) subscriptions the Main frame parts aside letting Plesk or POA original panel be shown on center. Thus, in this case the Main frame appears to be subdivided into three areas:  Left frame (3) that belongs to PBAS and can be customized.  Service specific frame (4) that displays original Plesk or POA panel that opens in PBAS Control Panel window and thus, it should be customized on Plesk or POA side, if needed. Right frame (5) that also belongs to PBAS and can be customized.  Note: Beginning with Pesk 11, left and right frames are not drawn in Customer Control Panel. Instead, only original Plesk panel is drawn in PBAS frame. UI customization for Plesk 11 is possible for top frame only. Left and Right frames can be customized by means of template based customization (on page 162). Left and Right frames templates are located here: /var/opt/hspcroot/skins/panel/template/HSPC/CP/Visual/leftframe.tmpl frame (3). - Left /var/opt/hspcroot/skins/panel/template/HSPC/CP/Visual/rightframe.tmpl - Right frame (5). User Interface Customization 174 Note: If you want your customization be shown for all subscription types (for example PVC, Plesk, and POA), you will need to customize Main Frame and Left or Right frames, because Main frame is replaced with service area for Plesk and POA subscriptions. Depending on the selected tab and type of the subscription, the Main frame area of the Control Panel displays different types of interface elements:  Home (2). The Home tab is selected. The Subscription type selected is non Plesk or POA. This screen can be customized by means of the template based customization. Original template location is: /var/opt/hspcroot/skins/panel/template/HSPC/CP/Menu/home.tmpl  Dashboard. The Account, Help and Support, or System tab. This screen can be customized either by one of the following ways:  Template based customization. Original template location: /var/opt/hspcroot/skins/panel/template/HSPC/CP/Menu/dash.tmpl  CP customization module (on page 177). Control Panel dashboards are shown under the Account, Help and Support tabs and also under the System tab. The Account dashboard is shown on the screenshot below: User Interface Customization 175 Dashboard consists of sections (6). For example, Store, Billing Management, Account Management are sections of the Account dashboard. Dashboard sections contain items (7). For example, Balance, Billing History, Payment Methods are items in the Billing Management section. Dashboard elements can be added or hidden using customization module (on page 178). See also: Control Panel Dashboard IDs Table (on page 179).  The rest of CP screens that can be reached clicking on dashboards' items, such as lists of objects or objects details, can be customized by means of screen ID based customization (on page 189). Control Panel Top Frame and Tabs Customization Tabs can be customized by means of the Top frame template. Top frame template is located here: /var/opt/hspcroot/skins/panel/template/HSPC/CP/Visual/top_frame.tmpl Example: Hide Domain Contacts tab: 1. Copy the template to custom location: /var/opt/hspcroot/custom/template/HSPC/CP/Visual/top_frame.tmpl 2. Discover the Domain Contacts tab ID: a Log in to Control Panel and select All my domains from the subscription selector located at the CP top frame to the right. View HTML code of the Top frame. b Search for the sample: Domain Contacts. The surrounding code contains tab ID:
  • Domain Contacts
  • Tab ID is system_domains_domconts. c Open the file: /var/opt/hspcroot/custom/template/HSPC/CP/Visual/top_frame.tmpl. Search for the following sample: User Interface Customization 176 { foreach my $m ( @{$menu} ) { my $url = $m->{url} || "/cp/index.cgi/top/zone,$m->{tab}"; my $name = $m->{title}; my $tab = $m->{tab}; $OUT .= qq{
  • $name
  • }; } } d Add the string "next if ($tab eq 'system_domains_domconts');" so that the code looks as follows: { foreach my $m ( @{$menu} ) { my $url = $m->{url} || "/cp/index.cgi/top/zone,$m->{tab}"; my $name = $m->{title}; my $tab = $m->{tab}; next if ($tab eq 'system_domains_domconts'); $OUT .= qq{
  • $name
  • }; } } The added string skips the Domain Contacts tab, so that it is not rendered. e Save the changes. Refresh the Control Panel screen to see the customization result. Customizing Main Frame Main frame can be customized by means of template based customization. Possible templates are:  Right and left frames. Original templates location: /var/opt/hspcroot/skins/panel/template/HSPC/CP/Visual/leftframe.tmpl /var/opt/hspcroot/skins/panel/template/HSPC/CP/Visual/rightframe.tmpl  Dashboards. Original template location: /var/opt/hspcroot/skins/panel/template/HSPC/CP/Menu/dash.tmpl  Home. Original template location: /var/opt/hspcroot/skins/panel/template/HSPC/CP/Menu/home.tmpl User Interface Customization  177 Other screens. Original template location: /var/opt/hspcroot/skins/panel/template/site_7/HSPC/Site/Layout/service_def ault.tmpl Before starting customization, copy the templates to customization directories. To get the custom path, drop /skins/panel directories and create the /custom directory instead. For example: /var/opt/hspc-root/custom/template/HSPC/CP/Menu/home.tmpl Example: Add site badge to Control Panel main frame. 1. Get site badge code. If you would like to add a site badge to CP main frame, for example Kayako live chat or Twitter, you can generate the needed code at their websites using tag generator. 2. Add code to template. Open the template and search for the "Test Item 1", title_desc => "The Item 1 Description", url_title => 'test_item1_URL_title', url => "/test_item1", icon => "icon_srvs", id => $menu_tab.'_test_section_testadd1', tab => $menu_tab, }; push @$items, { title => "Test Item 2", title_desc => "The Item 2 Description", url_title => 'test_item2_URL_title', url => "/test_item2", icon => "icon_srvs", id => $menu_tab.'_test_section_testadd2', tab => $menu_tab, }; ## add new section and items to it. my $error = HSPC::CP::Menu->add_item_to_section ( menu => $menu, section_id => $section_id, section_tab => $menu_tab, section_title => 'Test section', items => $items, ); In this example the “add_item_to_section” method adds a new section with ID 'system_test_section’. This new section will be visible at the Control Panel System tab with the “Test section” title and will contain two items inside. In order to add a new menu item to existing section you have to know its ID. The list of section IDs is attached. User Interface Customization 185 Add New Item to Existing Section The example below illustrates how to add a new item to the existing section (for example, section ID=’site_other’). Below is a custom code to be added to the CP.pm (on page 178) file. my $menu_tab = 'system'; my $section_id = 'site_other'; my $items = []; ## add new item to existing section ## my $menu_tab = 'site'; my $section_id = 'site_other'; my $items = []; ## define item for addition push @$items, { title => "Additional Element", title_desc => "Additional Element Description", url_title => 'URL title of additional element', url => "/additional_element", icon => "icon_srvs", id => 'site_other_testadd', tab => $menu_tab, }; ## add item. my $error = HSPC::CP::Menu->add_item_to_section ( menu => $menu, section_id => $section_id, section_tab => $menu_tab, items => $items, ); User Interface Customization 186 Replace Item in Existing Section This section advises how to replace the existing item with a new one. Below is a custom code to be added to the CP.pm (on page 178) file. The code example replaces the “Crontab” item in “Site” tab with a new one. my $menu_tab = 'site'; my $section_id = 'site_other'; my $items = []; ######################################################### ## replace the Crontab item (id=’site_other_crontab’) ## to a new item ## $menu_tab = "site"; my $item_id = 'site_other_crontab'; push @$items, { title => "Replaced Test Item2", title_desc => "The Item 2 Description", url_title => 'replaced_test_item2', url => "/replaced_test_item2", icon => "icon_srvs", id => $item_id, tab => $menu_tab, }; ## replace item my $error = HSPC::CP::Menu->add_item_to_section ( menu => $menu, section_id => $section_id, section_tab => $menu_tab, items => $items, dup_mode => 'replace', ); Delete Item and Section To delete a menu or a dashboard item or section, use the “delete_menu_item” or “delete_menu_section” methods respectively. Below is a custom code to be added to the CP.pm (on page 178) file. The example below illustrates how these methods can be used. ## delete menu item my $error = HSPC::CP::Menu->delete_menu_item ( menu => $menu, item_id => $item_id, ); ## delete menu section my $error = HSPC::CP::Menu->delete_menu_section ( menu => $menu, section_id => $section_id, ); The full source code of the example is attached (on page 187). User Interface Customization 187 Full Source Code of the HSPC::Custom::Menu::CP Below is the full source code of the example package HSPC::Custom::Menu::CP. package HSPC::Custom::Menu::CP; use strict; use HSPC::CP::Menu; use HSPC::Logger qw(sw_die); ##---------------------------------------------------------------------------## >> class ## =>> menu : ref to array sub customize { my ($self,%h) = @_; sw_die('menu => undefined') unless $h{menu}; my $menu = $h{menu}; ## ## add new item to existing section ## my $menu_tab = 'site'; my $section_id = 'site_other'; my $items = []; ## define item for addition push @$items, { title => "Additional Element", title_desc => "The element description", url_title => 'URL title of additional element', url => "/additional_element", icon => "icon_srvs", id => 'site_other_testadd', tab => $menu_tab, }; ## add item. my $error = HSPC::CP::Menu->add_item_to_section ( menu => $menu, section_id => $section_id, section_tab => $menu_tab, items => $items, ); ######################################################### ## create new section and add two items to it ## $section_id = 'site_test_section'; $items = []; ## define items for addition push @$items, { title => "Test Item 1", url_title => 'test_item1_URL_title', url => "/test_item1", icon => "icon_srvs", id => $menu_tab.'_test_section_testadd1', tab => $menu_tab, }; push @$items, { title => "Test Item 2", url_title => 'test_item2_URL_title', url => "/test_item2", icon => "icon_srvs", id => $menu_tab.'_test_section_testadd2', tab => $menu_tab, }; User Interface Customization ## add new section and items to it. my $error = HSPC::CP::Menu->add_item_to_section ( menu => $menu, section_id => $section_id, section_tab => $menu_tab, section_title => 'Test section', items => $items, ); ######################################################### ## replace the last element in previously added section ## to a new item ## ## define item for replace (this element will replace the testadd2 element) $menu_tab = "site"; my $item_id = 'site_hekima_testadd2'; push @$items, { title => "Replaced Test Item2", url_title => 'replaced_test_item2', url => "/replaced_test_item2", icon => "icon_srvs", id => $item_id, tab => $menu_tab, }; ## replace item my $error = HSPC::CP::Menu->add_item_to_section ( menu => $menu, section_id => $section_id, section_tab => $menu_tab, items => $items, dup_mode => 'replace', ); ## ## delete menu item ## my $error = HSPC::CP::Menu->delete_menu_item ( menu => $menu, item_id => $item_id, ); ## ## delete menu section ## my $error = HSPC::CP::Menu->delete_menu_section ( menu => $menu, section_id => $section_id, ); return 1; } 1; 188 User Interface Customization 189 Control Panel Screens Customization Using Screen IDs All Parallels Business Automation - Standard screens have the unique screen ID that consists of five numbers divided with dots (e.g., ). You can find the screen ID by viewing the source code of the screen and searching by the 'screen' keyword. You can customize PBAS Control Panel screens by writing a customization module for the corresponding screen. For Control Panel screens, the name of a customization module should follow the screen ID but with dots replaced with underscores (e.g., for screen with ID 01.04.20.01.05 the module name should be 01_04_20_01_05.pm). Important: Please carefully follow both the directories structure and naming conventions outlined earlier (on page 157) to store your customized files. A special method called customize should be defined in a customization module. This method should accept an HTML text as an argument and return the customized HTML text to be sent to a client browser. This method will be called right before sending out an HTML page to a client. A special API is provided to facilitate screens customization. User Interface Customization 190 Customization API Methods In this paragraph we explain how you can discover the name of CP screen element Here we introduce a notion of control that should be understood as one of the elements at the screen (e.g., an editable field, a checkbox, an option button, form heading, etc.). The following four methods are available and automatically exported from the HSPC::Custom::Screen module:  sw_cu_insert_before - insert a custom text before some control;  sw_cu_insert_after - insert a custom text after some control;  sw_cu_replace - replace a control with custom text;  sw_cu_find - find a control, return a control HTML text. Methods sw_cu_insert_before, sw_cu_insert_after, and sw_cu_replace accept the following arguments:  ctrl_type - type of the control (see below for details)  ctrl_id - ID of the control  stream - original HTML text  custom_text - custom text and return the customized HTML text. The sw_cu_find method accepts the following arguments:  ctrl_type - type of the control (see below for details)  ctrl_id - ID of the control  stream - original HTML text and returns the control HTML text. The customization module should be placed in the following directory: /var/opt/hspc-root/custom/screen/ The following controls' types are available for customization: General page controls:  path - path at the very top of the page  title - title of the page shown right below path  top_link - top links like Help (id 'open_help'), Add Comment (id 'add_comment'), etc  page_description - page description shown in Control Panel  tabs - page tabs (id = 'item')  page_title - the whole page header including tabs and everything above Listing page controls:  paging - paging bar above lists (includes page numbers and switches number of items per page) User Interface Customization 191  actions_bar - the bar at the bottom of the screen that allows performing actions over Containers (create, start, stop, etc.)  browse - the whole listing section starting from column names and till the last row of the list  frequency_bar - bar for setting up time frequency (shown in Billing Manager - Reports Summary - Aged A/R Reports)  ranges_bar - bar for setting up date/time range (for instance, it is shown in the Action Log)  search_bar - search bar shown right above the list; it includes both the Search and the Filter options Edit form controls:  cell_title - field title  cell_check - checkbox  cell_combo - drop-down menu or combo-box (i.e, a drop-down menu with ability both to select one of pre-defined variants or type a new one)   cell_datetime - several drop-down boxes and input fields for setting up a date/time (e.g., in Promotion edit form or in Tax Rates) cell_file - file upload  cell_input - input field where you can type something  cell_textarea - text area field, i.e., an input field for several strings   cell_list - multi-select box with button add/remove like in "Available Card Types" in payment plug-ins settings cell_lists2 - two multi-select boxes with '<<' and '>>' buttons and optional Up/Down buttons  cell_period - input field and select box with Minute/Hour/Day/Month  cell_popup - input field with button which opens the popup window   cell_radio - radio button edit_open - the entire form Other controls:   form - the whole edit form (e.g., a form for editing a Promotion properties) view - the whole view form (e.g., a form for viewing a Promotion properties)  button - any button on the screen. User Interface Customization 192 Discovering Screen ID and the Name of Screen Element to Customize Discover Screen ID To know out the screen ID, view the scren HTML code and search for the word screen. You will get the sample as: Discover Screen Element Name Internally, the Parallels Business Automation - Standard marks all of the elements (i.e., controls) on the page with the special metatags: and where "X" represents the type of control (e.g., "cell_combo" or "cell_check") and "Y" represents the control ID. The control ID is an alphabetical identifier that explicitly identifies a particular control and allows you to explicitly define a particular field you want to customize since an edit form can include several controls of the same type. For example, in the Account Settings form in the Control Panel My Account zone, there are several controls of cell_combo type: State (US or Canada), State (other countries), and Country. If you want to customize the Country field, you need to use the cell_combo control with the address_country ID. We provide the example of the Country field customization module (on page 194). The metatags mentioned above allow you to fetch the name of control and customize it using the facilities described in this section. By default, all the metatags are removed from an HTML output right before sending an HTML to a client browser. However, if you want to see these tags, you can temporary disable the metatags automated removal by turning on the setting Do not remove metatags from page content in PСС -> Configuration Director -> Miscellaneous Settings > Inteface Settings.  To know out the type and ID if the control you want to customize: 1. Turn on the Do not remove metatags from page content setting as this described above 2. Go to the screen you want to customize, right-click somewhere on the screen and select the View Source option from the context menu that appears. 3. In the HTML code, look for the needed metatag. For example, let us look at the piece of HTML code describing the Account Settings form (Edit screen) under the Account tab in the Control Panel: ', ); ## remove "State (Other countries)" field name $stream = sw_cu_replace( ctrl_id => ' address__state_alt', ctrl_type => 'cell_title', stream => $stream, custom_text=> '', ); ## remove "State (Other countries)" input field $stream = sw_cu_replace( ctrl_id => ' address__state_alt', ctrl_type => 'cell_input', stream => $stream, custom_text=> '', ); ## find cancel button my $cancel = sw_cu_find( ctrl_id => ' btn_cancel', ctrl_type => 'button', stream => $stream, ); ## add "disable" property to the button tag $cancel =~ s/ ' btn_cancel', ctrl_type => 'button', stream => $stream, custom_text=> $cancel, ); # return customized text return $stream; } 1; 195 User Interface Customization 196 Customizing a Group of Screens You can also apply the same customization to a group of screens. For example, you can apply customization to all pages with screen IDs beginning with 01.04.18 - this corresponds to all screens accessible from the Account tab in the Control Panel. Let us consider how you can insert a banner at the top of every screen under the Account tab. The location of the customization module is the following: /var/opt/hspc-root/custom/screen/01_04_18.pm The text of the customization module is the following: package HSPC::Custom::Screen::01_04_18; use HSPC::MT::Core; sub customize { my ($stream) = @_; # banner HTML code my $banner = <
    BANNER ## add banner at the top of the page $stream = $banner.$stream; # return customized text return $stream; } 1; Examples of Screen ID Based Customization Example 1: Change Content of the Documentation Screen. The default content of CP Documentation screen is following: To customize: 1. Discover the screen ID (on page 192). Documentation screen ID is 01.04.25.03.01. 2. Place the customization module to the custom directory: /var/opt/hspc-root/custom/screen/01_04_25_03_01.pm User Interface Customization 197 3. Add the following code to the customization module: package HSPC::Custom::Screen::01_04_25_03_01; use strict; use HSPC::Custom::Screen; sub customize { my ($stream) = @_; my $new_content=< My custom content is placed here.

    CONTENT $stream =~ s/ ]; $page->edit_append(content => $jvs_proto_store); my $keys_checked = (ref $ns_obj && ($ns_obj->ssh_install_mode() eq 'keys')) ? 1 : 0; $page->edit_view_info(value => string('ssh_install_mode'), right_line => 1); { $page->cell_radio( view_name => 'ssh_install_mode', value => 'keys', align => 'left', cols => 3, is_checked => $keys_checked, close => 0, js_on_click => qq~proto_store = document.getElementById('item').proto_new.value; document.getElementById('item').proto_new.value = proto_keys_init~, enable_views => [], disable_views => [qw(root_passwd proto_new)], ); $page->cell_text( value => string('ssh_use_already_set_keys'), open => 0, Plug-Ins Development 332 align => 'left' ); $page->row_close; } { $page->cell_radio( view_name => 'ssh_install_mode', value => 'password', align => 'left', cols => 3, is_checked => !$keys_checked, close => 0, js_on_click => qq~document.getElementById('item').proto_new.value = proto_store~, enable_views => [qw(root_passwd proto_new)], disable_views => [], ); $page->cell_text( value => string('ssh_use_root_pass'), open => 0, align => 'left' ); $page->row_close; $page->cell_skip(width => 20); $page->edit_view_input( title_id => 'password', value => $h{root_passwd}, not_empty => 1, view_name => 'root_passwd', max_length => 100, is_password => 1, size => 15, ); $page->row_close; $page->cell_skip(width => 20); $page->cell_text(value => string('ssh_proto'), is_aster => 1); $page->cell_skip(width => 60); $page->cell_combo( check_title_id => 'ssh_proto', view_name => 'proto_new', not_empty => 1, value => $init_proto_new, options => &PROTOS, options_plain => 1 ); $page->row_close; } } $page->edit_view_hidden( view_name => 'proto', value => $h{proto} || ((ref $ns_obj) ? $ns_obj->proto() : ''), ); $page->edit_view_info(value => '', right_line => 1); $page->edit_view_input( title_id => 'named_conf', view_name => 'named_conf', value => $h{named_conf} || ((ref $ns_obj) ? $ns_obj->named_conf() : '/etc/named.conf'), max_length => 255, size => 25, not_empty => 1, ); return undef; } Plug-Ins Development 333 view_ns() This method is responsible for displaying the name server settings when you click on its name in the Name Servers list, in other words, for viewing a name server settings at Service Director > Domain Manager > Name Servers > select a name server. Input parameters are:  >> class object  =>> page – HSPC::WebPage object  =>> id – Name server ID  =>> obj – Name server object Return undef on success or error message on fail. Example of method implementation: sub view_ns { my $self = shift; my %h = ( page => undef, id => undef, obj => undef, @_ ); my $page = $h{page}; my $ns_obj; if ($h{id}){ $ns_obj = HSPC::MT::DM->find_nameserver(id => $h{id}); sw_die ("NS #$h{id} not found") unless ($h{id} == $ns_obj->id()); } elsif ($h{obj}) { $ns_obj = $h{obj}; } else { sw_die ("NS id or obj should be specified"); } $page->view_info_text ( title_id => 'to_connect_use_ip', type => 'bool', value => $ns_obj->to_connect_use_ip(), ); $page->view_info_text( title_id => 'named_conf', value => $ns_obj->named_conf(), ); $page->view_info_text( title_id => 'ssh_proto', value => $ns_obj->proto(), ); $page->edit_view_hidden( view_name => 'ssh_install_mode', value => $ns_obj->ssh_install_mode() ); ## Name server properties can not be modified if belongs to locked NS set my $is_protected = scalar grep {$_->{is_locked}} @{$ns_obj>nsset_list()}; my $buttons = { show_edit => 1, show_delete => $is_protected ? 0 : 1, show_cancel => 1, Plug-Ins Development }; if ($ns_obj->status() == NS_STATUS_ERROR){ push @{$buttons->{right_buttons}},[ 'item_reinstall', string('recreate'), 'SWIButtonX', 'submit', ]; } elsif ( $ns_obj->status() == &NS_STATUS_INSTALLED || $ns_obj->status() == &NS_STATUS_UNREACHABLE ){ push @{$buttons->{right_buttons}},[ 'check_status', string('check_status'), 'SWIButtonX', 'submit', ]; } return $buttons; } 334 Plug-Ins Development save_ns() This method is responsible for saving name server data. Input parameters are:  >> class object  =>> page – HSPC::WebPage object  =>> title – Name server title  =>> id – Name server ID  =>> ns_type – Name server type  =>> provider_id – Provider ID  =>> is_available – node availability status  =>> policy – Name server rights policy Return ID of saved name server on success or undef on fail. Here is an example of method implementation: sub save_ns { my $self = shift; my %h = ( ## common params page => undef, id => undef, title => undef, ns_type => undef, provider_id => undef, is_available => undef, provider_id => undef, ## own params ip => sw_param('ip') || undef, hostname => sw_param('hostname') || undef, root_passwd => sw_param('root_passwd') || undef, ssh_install_mode => sw_param('ssh_install_mode') || undef, named_conf => sw_param('named_conf') || undef, proto => sw_param('proto') || undef, proto_new => sw_param('proto_new') || undef, to_connect_use_ip => sw_param('to_connect_use_ip') || 0, @_ ); my $page = $h{page}; my $ns_obj; if($h{id}) { $ns_obj = HSPC::MT::DM->find_nameserver(id => $h{id}); } else { $ns_obj = HSPC::MT::DM::NS::SlaveNS::SSH->new(); $ns_obj->type_id($h{ns_type}); $ns_obj->provider_id($h{provider_id}); $ns_obj->status(&NS_STATUS_PENDING); } if($ns_obj->ip ne $h{ip}){ my $ns_obj_chk = HSPC::MT::DM->find_nameserver(ip => $h{ip}); if($ns_obj_chk){ error_ext ( mod => &MOD_DM, smod => &SMOD_DM_NS, 335 Plug-Ins Development err => 6, params => {id => $ns_obj_chk->id} ); } } $h{hostname} = HSPC::MT::DM->domain2ascii( domain => $h{hostname} ); my $domain_error = 0; if ($ENV{security_obj}->account_type() != &SW_HSP){ ## Check for idn enabled $domain_error = HSPC::MT::DM::ToolsInt->check_domain( domain => ('hostname'), provider_id => $ENV{security_obj}->account_no, ); } if ($domain_error) { error(MOD_OD_DM, 12); return undef; } $ns_obj->title($h{title}); $ns_obj->hostname($h{hostname}); $ns_obj->ip($h{ip}); $ns_obj->is_available($h{is_available} ? 1 : 0); $ns_obj->named_conf($h{named_conf}); $ns_obj->to_connect_use_ip($h{to_connect_use_ip}); if ($h{proto}){ ## edit already created ssh NS $ns_obj->proto($h{proto}); } elsif (!$h{proto} and $h{proto_new}){ ## create new ssh NS server ## so old protocol not exist, save new protocol $ns_obj->proto($h{proto_new}); } else { $ns_obj->proto('2,1'); } $ns_obj->root_passwd($h{root_passwd}); $ns_obj->policy($h{policy}); $ns_obj->ssh_install_mode($h{ssh_install_mode}); ## if some errors happen return undef if last_error(); my $res = $ns_obj->save(); return (!last_error() && $ns_obj->id()) ? $ns_obj->id() : undef; } 336 Plug-Ins Development 337 is_reinstall_ns() The method checks if significant parameters were changed during saving and returns 1 if server is to be reinstalled. Input parameters are:  >> class object  =>> id – Name server ID  =>> Other name server specific parameters Return 1 if reinstall is required or 0 otherwise. Example of method implementation: sub is_reinstall_req{ my $self = shift; my %h = ( id => undef, ip => sw_param('ip') || undef, hostname => sw_param('hostname') || undef, root_passwd => sw_param('root_passwd') || undef, named_conf => sw_param('named_conf') || undef, proto => sw_param('proto') || undef, @_ ); sw_die("is_reinstall_req(): NS ID expected") unless $h{id}; my $ns_obj = HSPC::MT::DM->find_nameserver(id => $h{id}); ## try to guess if we should reinstall NS or just save object ## Reinstall required if some of significant values are changed or ## NS status was ERROR my $reinstall_req = ($ns_obj->status() == &NS_STATUS_ERROR); unless ($reinstall_req){ foreach my $item (qw|ip hostname root_passwd named_conf proto|){ $reinstall_req = ($ns_obj->$item ne $h{$item}); last if $reinstall_req; } } return $reinstall_req; } Middle Tier Module We consider in details the module responsible for integration with the Commerce Director HSPC::MT::CCP::Plugins::CCard_Simple. This module has to contain a number of methods to be HSPC compliant. These methods are:  sub install This method is called by Domain Manager during first-time installation.  sub sync_zones This method synchronize specified zones.  sub check_is_reachable The method checks if the name server is reachable from Parallels Business Automation - Standard node. Plug-Ins Development 338 install() This method is called by Domain Manager during first-time installation. Input parameters are:  >> class object Method must return a Task Manager task ID on success, or 0 on success if task not needed, or undef on error. sub install { my $self = shift; my $ns_id = $self->id(); $self->status(&NS_STATUS_INSTALLING); $self->save(); my $task_id = HSPC::TaskExec::task_add( descr => "VPS Name Server installation", class => "HSPC::MT::DM::NS::SlaveNS::VPS", method => "install_async_task", param => [id => $ns_id], priority => 128, timeout => 600, mutex => "install_ns_$ns_id" ); return $task_id; } Plug-Ins Development sync_zones() This method synchronizes the specified zones. Input parameters are:  >> class object  =>> zones – Array of zone names to be synchronized  =>> delete_old_zones – Boolean, shows if old zones deleting is required Method must return 1 on success, or 0 otherwise. sub sync_zones { my $self = shift; my %arg = ( zones => undef, delete_old_zones => 1, @_ ); my $file; my @remote_zone_files; my @zones = @{$arg{zones}}; my $named_zones = HSPC::MT::DM::NS::NSTools->generate_named_zones( zones => \@zones ); my $out; my @local_zone_files = map { $_ .= '.zone' } @zones; my $res = $self->__sh_exec( cmd => 'ls -la /'.$self->named_dir(), out => \$out ); return 0 unless $res; @remote_zone_files = split ("\n", $out); ## filter only real zone files @remote_zone_files = grep /\.zone$/, @remote_zone_files; ## Remove old files from remote DNS host if ($arg{delete_old_zones}) { my @unlink_files; foreach $file (@remote_zone_files) { unless (grep /^$file$/, @local_zone_files) { push @unlink_files, $self->named_dir()."/$file"; } } $self->__unlink(@unlink_files); } ## Put zones list file and reload $self->__put_zoneslist_file(content => $named_zones); my $res = $self->__sh_exec(cmd => INITD.'named reload'); return 0 unless $res; } 339 Plug-Ins Development 340 check_is_reachable() The method checks if the name server is reachable from Parallels Business Automation Standard node. Input parameters are:  >> class object Method must return 1 on success, or 0 otherwise. sub check_is_reachable{ my $self = shift; my $ve_gate; eval { $ve_gate = $self->__ve_gate(); }; if (!ref($ve_gate) || $@) { return 0; } if ($self->ve_obj()->status() eq &HSPC::MT::OM::VE::STATUS->{SW_VE_STATUS_RUNNING()}) { return 1; } return 0; } SSL Certificate Plug-In Developmet Tools This chapter describes the methods used in SSL certificate plug-ins. Some methods are optional (i.e., a plug-in can provide a given functionality or can work without it) and some are mandatory (i.e., any plug-in uses a given method). SSL Certificate Plug-In Namespaces The namespace for modules responsible for the non-visual part of an SSL certificate plug-in is HSPC::MT::Plugin::SSL::. The namespace for modules responsible for the visual part (i.e., graphical representation) of an SSL certificate plug-in is HSPC::Plugin::SSL::. Where is a plug-in Template name, that normally should follow a SSL certificate authority name, for example eNom or GeoTrust. Plug-Ins Development 341 Middle Tier Module The methods that belong to the HSPC::MT::Plugin::SSL namespace (middle tier) are described below. Common Parameter: plugin_config Each of these methods is passed the plugin_config parameter. This parameter passes the plug-in configuration data. The structure of the data passed is defined by the plug-in developer in the collect_data method (on page 350). Configuration Information The methods responsible for retrieving configuration information are described below. get_title The get_title method is mandatory. Input:  plugin_config=> HASHREF. Output:  “Name of SSL Certificate Plug-In” get_product_list The get_product_list method is mandatory. You can add extra SSL product names in the i18n//.xml file, e.g.: i18n/EN/hspc-plugin-ssl-enom.xml. Remember they should start with “ssl_product_”. Input:  plugin_config=> HASHREF. Output:  { internal_ssl_product_name => { name => “SSL product name”, external => “Identifier as per the SSL registrar API”, periods => [ supported registration periods in years], bits => [ supported number of bits] } For example: { geotrust_quickssl => { name => “GeoTrustQuickSSL”, external => “Certificate-GeoTrust-QuickSSL”, periods => [ 1, 2, 3, 4, 5 ], bits => [ 1024, 2048 ] } } Plug-Ins Development 342 get_price_list The get_price_list method is mandatory. The method returns the prices per supported SSL product for both new registration and renewal. Input:  plugin_config=> HASHREF.  product =>string, the internal SSL product name, as received from get_product_list. Output:  { new =>price_for_new_registration, renew =>price_for_renewal, currency => currency code } For example: { new => 15, renew => 10, currency => “USD” } get_server_software_type_list The get_server_software_type_list method is mandatory. The method returns the supported server software types for a given product. Input:  plugin_config=> HASHREF.  product =>string, the internal SSL product name, as received from get_product_list, for which to receive the supported server software types. Output:  { “external identifier as per the SSL registrar API” => “Name of server software type”, etc. } For example: { 1 => “Microsoft IIS 7” } “Apache + ModSSL”, microsoft_iis_7 => get_approver_email_list The get_approver_email_list method is optional. The method returns the supported email addresses for the SSL approval procedure. This method may be called in the validate_csr_data method. Input:  plugin_config=> HASHREF.  domain_name=>string, the domain name for which the SSL certificate is being bought. Output:  [ “email address 1”, “email address 2”, ] Plug-Ins Development 343 get_buttons The get_buttons method is optional. The method adds a button to PBAS GUI and by means of this button makes it possible to call custom methods from the module in Provider Control Center or Control Panel. Input:  plugin_config=> HASHREF.  product =>string, the internal SSL product name, as received from get_product_list, for which to receive the supported server software types.  is_admin => boolean, shows if the method is called by administrator.  ext_attr => HASHREF, { “extended attribute 1” => value, “array of values” => [ ], etc. } Output: [ { command => name_of_the_method1, label => label1 }, { command => name_of_the_method2, label => label2 }, ... ] The method returns the list of hashes, where {command} contains the name of the function in the middle-tier module of the Plug-in and {label} is the name of the button which will be shown in Control Panel or Provider Control Center, The is_admin input parameter is 0 for Control Panel and 1 for Provider Control Center, so the Plug-in developer can customize where the button must be shown. Plug-Ins Development 344 update_ext_attr The update_ext_attr method is optional. The method is called while updating extended attributes for SSL certificate from Provider Control Center or Control Panel. Input:  ext_attr => HASHREF, { “extended attribute 1” => value, “array of values” => [ ], etc. }  product => string, the internal SSL product name, as received from get_product_list.  plugin_config=> HASHREF. Output: { is_success => 1|0, error_message => text, } error_message is applied if the {is_success} is 0. The error message text will be shown in Provider Control Center or Control Panel as it is specified in the method output. SSL Certificate Issuing The methods described below are used to validate SSL configuration information and issue SSL certificates. validate_csr_data The validate_csr_data method is mandatory. The method checks the supplied CSR data for validity. Input:  plugin_config => HASHREF.  product => string, the internal SSL product name, as received from get_product_list, for which to receive the supported server software types.  csr_data => HASHREF, { country => string, state => string, city => string, organization_name => string, organizational_unit_name => string, common_name => string, email => string, bits => string } Output:  { field_with_error => “Field with error: error description” } Plug-Ins Development 345 issue_certificate The issue_certificate method is mandatory. The method issues the certificate request to the registrar. Input:  domain => string, the domain name for which the SSL certificate is being bought.  product => get_product_list.  period => integer, the number of years to register the SSL certificate for.  private_key => string (optional)  csr => string (required if csr_data missing), the Certificate Signing Request (CSR) file  csr_data => HASHREF (required if csr is missing), { country => string, state => string, city => string, organization_name => string, organizational_unit_name => string, common_name => string, email => string, bits => string }  approver_email => string (optional), as per get_approver_email_list.  software_type (optional) => string, the identifier of the server software type as per get_server_software_type_list.  ext_attr => HASHREF (optional), { “extended attribute 1” => value, “array of values” => [ ], etc. }, as per extract_ext_attr.  contact_data => HASHREF (optional), { contact_type => { contact_fname => “First Name”, etc. }, e.g. Admin => { fname => 'Peter', lname => 'Johnson' } }  plugin_config => HASHREF. string, the internal SSL product name, as received from Output:  { status => OK|ERROR, error_message => “Error description”, ext_attr => {} } The ext_attr value will be merged with the already existing extended attribute data. This can be used e.g. to store the ID generated by the registrar's API when later fetching the certificate. Plug-Ins Development 346 check_available The check_available method is mandatory. The method is called regularly to chec if the requested SSL certificate is available. The method is first called after the number of days specified in the “Wait x days for issuance of SSL certificate” field in the SSL plug-in configuration. Checks are done hourly, until the number of days specified in the “Duration of checking SSL certificate availability” field in the SSL plug-in configuration has elapsed. Input:  plugin_config => HASHREF.  ext_attr => HASHREF, { “extended attribute 1” => value, “array of values” => [ ], etc. }, this input parameter may contain the ID required to check availability, see also issue_certificate (on page 345). Output:  { status => OK|NOT_ISSUED|ERROR, description” } error_message => “Error  Status 'OK' indicates the SSL certificate is available and can be fetched. The check no longer repeats.  Status 'NOT_ISSUED' indicates the SSL certificate is not yet available. The check repeats.  Status 'ERROR' indicates the check failed. The check no longer repeats, and the status of the SSL certificate is set to 'ERROR'. fetch_certificate The fetch_certificate method is mandatory. The method fetches the SSL certificate from the registrar when it is available. Input:  plugin_config => HASHREF.  ext_attr => HASHREF, { “extended attribute 1” => value, “array of values” => [ ], etc. }, this input parameter may contain the ID required to fetch the certificate. Output:  { status => OK|ERROR, error_message => “Error description”, certbody => “Certificate body” }  Status 'OK' indicates the SSL certificate was successfully fetched.  Status 'ERROR' indicates fetching the certificate failed. The status of the SSL certificate is set to 'ERROR'.  The certbody value contains the actual SSL certificate body. Plug-Ins Development 347 renew_certificate The renew_certificate method is mandatory. The method issues a renewal request to the registrar. Note that the ext_attr input parameter contains the data returned by issue_certificate. This may e.g. be used to refer to the old order ID, stored during issuing. Input:  domain => string, the domain name for which the SSL certificate is being bought.  product => get_product_list.  period => integer, the number of years to register the SSL certificate for.  private_key => string (optional)  csr => string (required if csr_data missing), the Certificate Signing Request (CSR) file  csr_data => HASHREF (required if csr is missing), { country => string, state => string, city => string, organization_name => string, organizational_unit_name => string, common_name => string, email => string, bits => string }  approver_email => string (optional), as per get_approver_email_list.  software_type (optional) => string, the identifier of the server software type as per get_server_software_type_list.  ext_attr => HASHREF (optional), { “extended attribute 1” => value, “array of values” => [ ], etc. }, as per extract_ext_attr.  contact_data => HASHREF (optional), { contact_type => { contact_fname => “First Name”, etc. }, e.g. Admin => { fname => 'Peter', lname => 'Johnson' } }  plugin_config => HASHREF. string, the internal SSL product name, as received from Output:  { status => OK|ERROR, error_message => “Error description”, ext_attr => {} } The ext_attr value will be merged with the already existing extended attribute data. This can be used e.g. to store the ID generated by the registrar's API when later fetching the certificate. Plug-Ins Development 348 get_product_attributes The get_product_attributes method is optional. The method returns the attributes of the specified SSL product. There are two supported types of attributes: server_count and wildcard. Input:  plugin_config=> HASHREF.  product =>string, the internal SSL product name, as received from get_product_list, for which to receive the supported server software types. Output: { server_count => 0|1, wildcard => 0|1, } If server_count attribute is set for some product type it means that Number of servers combobox will be shown in the store, so that buyer can specify the number of servers for which the requested SSL certificate will be issued. Generally it is the multiplier to the actual product price. If wildcard attribute is set, then the wildcard prefix "*." will be applied to the domain name (common name) automatically if the user forgets to add this prefix himself, and in case the customer submits CSR, this CSR will be checked if this common domain name contains this wildcard prefix. Plug-Ins Development 349 cancel_certificate The cancel_certificate method is optional. The method cancels a not completed certificate order. Input:  ext_attr => HASHREF, { “extended attribute 1” => value, “array of values” => [ ], etc. }  plugin_config=> HASHREF. Output: { status => 'OK'|'ERROR', error_message => text, } error_message is applied if the {status} is 'ERROR'. The error message text will be shown in Provider Control Center as it is specified in the method output. Graphical Presentation Module The methods that belong to the HSPC::Plugin::SSL namespace (the plug-in graphical presentation) are described below. Common Parameters: config, plugin_config Each of the visual part methods is passed the config or plugin_config parameter. These parameters pass the plug-in configuration data. The structure of the data passed is defined by the plug-in developer in the collect_data method (on page 350). Plug-In Configuration The methods described below are used for configuring the SSL certificate plug-in itself. get_config_view The get_config_view method is mandatory. The method returns a view of the plug-in configuration. Input:  config => HASHREF. Output:  “” Plug-Ins Development 350 get_config_form The get_config_form method is mandatory. The method returns the editing form for the plug-in configuration. Input:  config => HASHREF. Output:  “” validate_config_data The validate_config_data method is mandatory. The method checks the validity of the plug-in configuration data entered using the get_config_form method. Input:  config => HASHREF. Output:  { is_valid => 0|1, error_list => [ error1, error2 ] } collect_data The collect_data method is mandatory. The method collects the plug-in configuration data and returns it ready for storing. Input:  config => HASHREF. Output:  { configuration_option_1 => value1, etc. } get_help_page The get_help_page method is mandatory. The method returns the help page based on the specified action. Input:  config => HASHREF.  action => string, “about”|”new”|”view”|”edit”  language => string, the language code of the help page Output:  “Help information in the specified language about the specified action.” Plug-Ins Development 351 SSL Certificate Configuration The methods described below are used for configuring the SSL certificates themselves. get_contact_types The get_contact_types method is mandatory. The method returns the different internal contact types for the SSL certificate. If an SSL registrar does not support contact types, an empty list is returned. The internal contact types are listed in the internationalization file of the plug-in and always start with “ssl_type_”. The mapping to the contact types used by the SSL registrar can be placed where they are necessary, e.g. in the issue_certificate method. Input:  plugin_config => HASHREF.  product => string, the internal SSL product name, as received from get_product_list. Output:  [ E.g. “admin”, “technical”, “billing” ] get_contact_view The get_contact_view method is mandatory. The method returns a view of the SSL certificate contact data. Input:  plugin_config => HASHREF.  prefix => string (optional), the prefix used in the names of the form fields (see also get_contact_form)  product => string, the internal SSL HSPC::MT::Plugin::SSL's get_product_list.  type => string, as received from get_contact_types.  contact_data => HASHREF, { contact_fname => “First Name”, etc. }, e.g. { fname => 'Peter', lname => 'Johnson' } Output:  “” product name, as received from Plug-Ins Development 352 get_contact_form The get_contact_form method is mandatory. The method returns the editing form for the SSL certificate contact data. Input:  plugin_config => HASHREF.  prefix => string (optional), the prefix used in the names of the form fields. E.g., the “forename” field with prefix “domain_1” would be called “domain_1forename”.  product => string, the internal SSL product name, as received from HSPC::MT::Plugin::SSL's get_product_list.  type => string, as received from get_contact_types.  contact_data => HASHREF, { contact_fname => “First Name”, etc. }, e.g. { fname => 'Peter', lname => 'Johnson' } Output:  “” collect_contacts The collect_contacts method is mandatory. The method collects all the contact data from the form_data parameter, as per the get_contact_form function, and returns it ready for storing in an SSL certificate object. Input:  plugin_config => HASHREF.  product => string, the internal SSL product name, as received from get_product_list  prefix => string (optional), the prefix used in the names of the form fields (see also get_contact_form)  form_data => HASHREF, the values filled out by the customer using the form from get_contact_form. Output:  { contact_type => { contact_fname => “First Name”, etc. }, e.g. Admin => { fname => 'Peter', lname => 'Johnson' } } Plug-Ins Development 353 validate_contact_form The validate_contact_form method is mandatory. The method checks the validity of the SSL certificate contact data entered using the get_contact_form method. Input:  plugin_config => HASHREF.  prefix => string (optional), the prefix used in the names of the form fields (see also get_contact_form)  product => string, the internal SSL product name, as received from HSPC::MT::Plugin::SSL's get_product_list.  type => string, as received from get_contact_types.  contact_data => HASHREF, { contact_fname => “First Name”, etc. }, e.g. { fname => 'Peter', lname => 'Johnson' } Output:  { field_with_error => “Field with error: error description” } get_ext_attr_view The get_ext_attr_view method is mandatory. The method returns a view of the SSL certificate extended attribute data. Input:  plugin_config => HASHREF.  prefix => string (optional), the prefix used in the names of the form fields (see also get_ext_attr_form)  product => string, the internal SSL product name, as received from HSPC::MT::Plugin::SSL's get_product_list  ext_attr => HASHREF, { “extended attribute 1” => value, “array of values” => [ ], etc. } Output:  “” Plug-Ins Development 354 get_ext_attr_form The get_ext_attr_form method is mandatory. The method returns the editing form for the SSL certificate extended attribute data. Input:  plugin_config => HASHREF.  prefix => string (optional), the prefix used in the names of the form fields. E.g., the “forename” field with prefix “domain_1” would be called “domain_1forename”.  product => string, the internal SSL product name, as received from HSPC::MT::Plugin::SSL's get_product_list  ext_attr => HASHREF, { “extended attribute 1” => value, “array of values” => [ ], etc. } Output:  “” collect_ext_attr The collect_ext_attr method is mandatory. The method collects the extended attribute data from the form_data parameter, as per the HSPC::Plugin::SSL's get_ext_attr_form function, and returns it ready for storing in an SSL certificate object. Input:  plugin_config => HASHREF.  prefix => string (optional), the prefix used in the names of the form fields (see also get_ext_attr_form)  form_data => HASHREF, the values filled out by the customer using the form from get_ext_attr_form. Output:  { “extended attribute 1” => value, “array of values” => [ ], etc. } Plug-Ins Development 355 validate_ext_attr_form The validate_ext_attr_form method is mandatory. The method checks the validity of the SSL certificate extended attribute data entered using the get_ext_attr_form method. Input:  plugin_config => HASHREF.  prefix => string (optional), the prefix used in the names of the form fields (see also get_ext_attr_form)  product => string, the internal SSL product name, as received from HSPC::MT::Plugin::SSL's get_product_list.  ext_attr => HASHREF, { “extended attribute 1” => value, “array of values” => [ ], etc. } Output:  { field_with_error => “Field with error: error description” } Building New Plug-In A ready to use plug-in is an RPM package. In this section we describe the final step of a new plug-in development - building a plug-in RPM. After you have prepared modules and all the necessary files for a new plug-in, it is necessary to place these files into a special directory. The correct subdirectories structure and naming is important for successful plug-in build. Please, carefully follow the directories structure and general naming conventions described below. As an example, we'll take a Dummy Online Payment plug-in directories structure. The Dummy Online Payment plug-in sample is in the SDK directory samples/plugins/hspc-plugin-pp-op-dummy/ so you can copy it and rename folders and files in a way you need. In addition, you will need to edit some files. We describe this procedure step-by-step. Let us assume that a new plug-in name is myplugin. 1. First of all, to build a plug-in, you need a version file. This text file contains a few strings that specify the Parallels Business Automation - Standard version a plug-in is built for. A version number is used in an output RPM package name. Thus, for a plug-in compatibility, a plug-in version does not matter, but the build script requires it. The Parallels Business Automation - Standard version must be specified in a special format. To know out the version of Parallels Business Automation - Standard you use, log in to Provider Control Center and click Support on the left menu. The Build ID will be shown in the right frame in the format Build ID -. In the version file, specify the version in the following way: File contents, the example Description HSPC_VERSION=3.3.1 Specify the Parallels Business Automation - Standard version shown at the Support screen before hyphen. Plug-Ins Development HSPC_RELEASE=00.114 Specify the Parallels Business Automation - Standard release shown at the Support screen after hyphen. HSPC_TAGNAME="3.3 Service Pack 1" This is a required parameter for the build script, but its value does not matter. Type some phrase in quotation marks. For example, 3.3 With New Plug-In, or My Package, or anything else. Do not leave it empty. 356 Important: The version file must be placed into a folder above a plug-in directory. For example: D:/ plug-in build/version hspc-plugin-pp-op-myplugin/ 2. A plug-in directories structure should be the following: We've took the Dummy Online Payment plug-in structure as an example and renamed the plug-in directory. The i18n directory includes the plug-in localization strings in XML files. In our example, i18n contains directories for languages officially supported in Parallels Business Automation - Standard. You can create as many custom language packs (on page 225) as you need. Remove the directories you do not need and add the ones you need. But in any case, there must be at least one directory for the language you use in Parallels Business Automation - Standard as a default one. Directories under i18n must be named exactly as ISO 2-letter country codes. The lib directory contains the plug-in middle tier and presentation modules. The template directory contains HTML help topics for the plug-in. Place help topics by language directories, like in i18n. The upgrade directory is used to build upgrades, if you need to upgrade a plug-in, create a directory named by an upgrade version and place the upgrade scripts here and run the build script. If you just build a Plug-Ins Development 357 plug-in with no upgrades, leave the upgrade directory empty. But do not remove the upgrade directory thinking that it is redundant - it is required by the build script. 3. Now, an important step. You need to edit some files in the plug-in directory and specify an actual plug-in name in all files where it is needed. Please, be very attentive: a Edit the spec file. All plug-in name entries must be replaced with your plug-in name, in our example, myplugin. b Check and edit in the same way ALL the Makefile files in ALL subdirectories under the plug-in directory. 4. Download the rpmbuild utility compatible with OS you use and install it at your computer. 5. Run the build.sh script from the directory it is located. 358 CHAPTER 8 Tools All tools are situated in the tools directory of SDK. Every tool has a README file, so you should check it first. Some tools have sample files which might be used for testing purposes. Attention: tools act on behalf of provider, so, say, if you run domain registration, then domains are registered as if you have registered them from PCC. In This Chapter Bulk Domain Registration / Transfer .................................................................................... 358 Credit Card Import ................................................................................................................ 358 Bank Accounts Import .......................................................................................................... 359 Migration from Parallels Plesk Billing ................................................................................. 359 Bulk Parallels Plesk Domains / Clients Resolving................................................................ 359 Script Checking Domain Renewal Date Using WHOIS Information ................................... 359 Cleaning Tool........................................................................................................................ 360 DNS Synchronization Tool ................................................................................................... 361 Parallels Virtuozzo Containers Integration ........................................................................... 361 Using Data Import and Export Command Line Tools .......................................................... 365 Bulk Domain Registration / Transfer The tool is intended for mass domains registering. This tool is useful when you cannot use Import/Export tools for domain registration. This case can occur when you make new domain registrations / transfers using plug-in required ext data. You can learn more about ext data in Ext Data Description section. The tool is located in tools/hspc-domain-reg directory. Credit Card Import This tool is designed for importing credit cards into Parallels Business Automation - Standard. The tool is located in the tools/hspc-cc-import directory. Tools 359 Bank Accounts Import This tool is designed for importing bank accounts into Parallels Business Automation Standard. The tool is located in the tools/hspc-ba-import directory. Migration from Parallels Plesk Billing This tool helps you to migrate accounts and Plesk clients subscriptions from Parallels Plesk Billingl to Parallels Business Automation - Standard. The tool is located in the tools/modernbill directory. Bulk Parallels Plesk Domains / Clients Resolving This package is used for migrating / resolving data from Parallels Plesk to Parallels Business Automation - Standard. The tool can resolve accounts, Parallels Plesk domains and Parallels Plesk clients into Parallels Business Automation - Standard. The tool is located in the tools/hspc-plesk-resolver directory. Script Checking Domain Renewal Date Using WHOIS Information The script can check whether all domains’ renewal dates in Parallels Business Automation Standard match the renewal dates from the WHOIS database. The tool is located in the tools/hspc-correct-by-whois directory. Tools 360 Cleaning Tool The tool is intended for cleaning all the test data from Parallels Business Automation - Standard after Parallels Business Automation - Standard configuring completion. Please make a fresh backup of Parallels Business Automation - Standard databases (aspc, ss, sk) before using the script. Usage: /usr/sbin/hspc-clean.pl FLAG[FLAG[...]] Flags description: [-] - no trace info [+] - do not confirm deletion of elements Name Description - No trace info + Do not confirm deletion of items P [P]ersons A [A]ccounts D [D]ocuments Y pa[Y]ments N i[N]voices J debit ad[J]ustment S [S]ubscriptions C [C]reditcards T s[T]atements H [H]osting plans R [R]esellers U c[U]stomers E [E]vents M pro[M]otions Tools V [V]irtual environments W hard[W]are nodes O d[O]mains I [I]ppool m credit ter[m]s a [a]ction log 361 Example: /usr/sbin/hspc-clean.pl RE - erases resellers and events DNS Synchronization Tool The tool forces DNS zones synchronization. Usage: /usr/sbin/hspc-dns-sync.pl Parallels Virtuozzo Containers Integration The tools used to integrate Parallels Business Automation - Standard with Parallels Virtuozzo Containers technology are described in this section. Tools 362 Virtuozzo Templates Installing Tool You can use the Parallels Business Automation - Standard Provider Control Center (/pcc) web interface to install Virtuozzo templates. If you need to install many templates at once, you can use /usr/sbin/hspcpkgctl.pl script. The script can be ran in the mode when it recognizes and installs all the templates from the specified directory. The hspcpkgctl.pl script handles generic operations of the Parallels Business Automation Standard Application Director. Using this script the following operations can be performed:  Get information about a Virtuozzo template, i.e., read a template configuration from a source RPM file or from the Parallels Business Automation - Standard database  Register and install OS or Application templates at the Parallels Business Automation Standard Management Node   Synchronize OS or Application templates with Virtuozzo Hardware Nodes Import OS/Application templates from Virtuozzo Hardware Nodes  List OS/Application templates registered/installed over Parallels Business Automation Standard Usage: /usr/sbin/hspcpkgctl.pl operation operation_arguments templates_directory To get help: /usr/sbin/hspcpkgctl.pl help_args hspcpkgctl.pl {-h|--help} hspcpkgctl.pl {-V|--version} hspcpkgctl.pl -H OPERATION To view a fill manual: perldoc /usr/sbin/hspcpkgctl.pl Operations: info - print information about OS/application template install - install OS/application template(s) on Management Node sync - synchronize OS/application templates with Hardware Node(s) import - import OS/application templates from Hardware Nodes list - list OS/application templates on Management Node config - show XML configuration file content for given template Arguments: -A Process ordinary application templates only. -D|--distrib DISTRIB Distribution name for EZ templates, like 'fedora-core-4-x86'. Note that if -the D argument is specified, only EZ templates will be processed. Tools 363 -H OPERATION Show help for given OPERATION. -O Process OS templates only. -V|--version Show script version. --async Do operation using Task Manager where applicable. Script completes execution after all necessary tasks are scheduled. -d|--dir DIR Full path to directory with Virtuozzo templates. -f|--file FILE Full path to Virtuozzo template file. -h|--help Show usage and exit. -n|--nodes NID1 NID2 ...IDs of Virtuozzo Hardware Nodes registered in Parallels Business Automation - Standard. -p|--package PKG1[/VER1] PKG2[/VER2] ...Process only templates with given packages and, optionally, configuration versions. If configuration version is not specified, default value '00000000' (eight zeros) will be taken. --plain Show plain XML config. If not specified, output will be composed of several lines in a form of 'key: value'. -t|--tmpl_id ID1 ID2 ...Process only templates with given IDs. -item --quiet Work quietly - do not print any status messages to standard output. -r Process directory recursively. -u If template in process is upgrade to some existing template, default prices will be taken from the latest one. If option is not specified, default prices will be set to zero values. Examples: hspcpkgctl.pl install -d /tmp/templates Installs all templates from given directory /tmp/templates. hspcpkgctl.pl install -f /tmp/redhat-as4-x86-ez-3.0.0-2.swsoft.noarch.rpm Installs single EZ OS template. hspcpkgctl.pl list List ordinary application templates. Each line of output is tab-separated list of the following template properties:  Template ID  Package  Configuration version (8-digit one).  Flag specifying if template is OS template (1/0).  Flag specifying if template was installed on Management Node from source (1/0). '0' means template was imported from Hardware Node.  EZ distribution. Empty for non-EZ templates. Tools 364 Tools for Actions Execution over/in Container The tool executes actions over/in the Container registered in Parallels Business Automation Standard. Usage: /usr/sbin/hspcvpsctl.pl operation ve_id [options] /usr/sbin/hspcvpsctl.pl migrate ve_id --dest_hw dest_hw_id [options] /usr/sbin/hspcvpsctl.pl tmpl-upgrade ve_id [template_packages] [options] Operations descriptions: Operation Description start Starts Container stop Stops Container repair Repairs Container create Creates Container migrate Migrates Container to destination hardware node tmpl-upgrade Upgrades specified templates in Container to required versions Migration options: Name Value Description --dest_hw dest_hw_id Destination Hardware Node ID in Parallels Business Automation - Standard Templates upgrade options: Name Value Description --tmpl package/target_conf_version Package and target conf version General options: Name Description -v , --version Prints version --verbose Prints information about execution process --async Executes operations asynchronously Tools 365 Using Data Import and Export Command Line Tools The possibility of importing and exporting the billing data (accounts, financial documents, hosting plans) in/from Parallels Business Automation - Standard can considerably facilitate migration of customer's data and reduce cost. If you provide Virtuozzo Containers or/and Plesk domains to your customers and feel like it is the right time to automate your business, or in case you want to merge two Parallels Business Automation - Standard databases, you can import the customer billing data in Parallels Business Automation - Standard (or export data from Parallels Business Automation - Standard) without the need to use special plug-ins or other complex tools. In addition, to control and bill traffic usage on dedicated servers, it is possible to import a special configuration of traffic classes and after this, import traffic statistics collected internally. All you need is to represent the data as an XML structure and then run the import script with this XML file as a parameter. The script processes one XML file per one run. To convert the billing data containing in Parallels Business Automation - Standard database into XML, the Export script is provided. If you need to import the data into Parallels Business Automation Standard from some other, non Parallels Business Automation - Standard database, you need to represent this data in the form of XML file manually or using some other tools. Examples of XML files are provided at the end of this chapter. Note: Parallels Business Automation - Standard provides web-based tools for XML data import/export (Import-Export Manager in Provider Control Center). If you would like to, you can use this tool (please refer to the Parallels Business Automation - Standard Provider's guide fo more information or go to Provider Control Center and click Help link for detailed HTML help). After the Parallels Business Automation - Standard installation, both import and export scripts location on your Management Node is /usr/sbin/hspc-import.pl and /usr/sbin/hspc-export.pl respectively. Tools 366 Exporting Data into XML Files Below we describe command line tools for exporting the billing data from the Parallels Business Automation - Standard database into XML file. Traffic classes and traffic statistics can be imported only. Note: Parallels Business Automation - Standard provides web-based tools for XML data import/export (Import-Export Manager in Provider Control Center). If you would like to, you can use this tool (please refer to the Parallels Business Automation - Standard Provider's guide fo more information or go to Provider Control Center and click Help link for detailed HTML help). How Export Script Works For the Export script to fetch the data, the indication of data type is necessary, so in the command line you must use the relevant key (described below) and either explicitly indicate the type of data to be exported or indicate the name of a special file called filter that includes information about the type of data to export and, as its name says, allows filtering a particular type of data (accounts, documents, etc.) down to a type, ID or ID range, and other parameters, depending on a type of data you are going to export. If you do not specify the type of data to export, the Export script will not collect the data due to the input parameters incompleteness and just print you the help page. The structure of a filter file is described later in this topic. However , if you are not sure, which tags to use, you can train using web-based tools. When you export data using the web-based interface, filters are created automatically, while you pass a simple wizard that requires selecting the type of data and allows further filtering. In this case, the XML filter is created in accordance with your settings and the corresponding XML structure is added to the beginning of the resulting XML file. You can pass the wizard several times and take a look, what XML filters are produced by your selection. Later you can copy the filter block from an XML file, save it in a separate file, and this will be the filter you can use with the Export script in command line. To train with filter files using the web interface, log in to the Provider Control Center, go to the Migration Director - Import-Export Manager and select Export Data from the Import-Export Manager submenu. You will be offered to select the type of data to export (in our example, Documents): Tools After you click the Next button you will be offered to filter the selected data type: 367 Tools 368 For example, you have filtered documents by types (Online Payments and Offline Payments) and then set the additional filter to Export documents within ID range from 1 to 30. After this, you can finish the wizard and save the resulting XML to your local computer. When you open this XML, you will see that the first block of the XML file inside the tag is : documents type PO,PF id 1 30 Copy this block into a separate file, add the string to the beginning and save the file. You have a ready to use filter with the functionality you are clearly understand:  The tag holds the information about the type of objects you have selected on the first screen of the export wizard (Documents, in our example), the tags hold the information about the further filtering you have set on the second screen of the wizard.  The first tag holds the information about the type of documents to export (in our example, online payments - PO and offline payments - PF). This selection is required, without this basic filter the filter file will be not valid.  The second filter tag is optional and have appeared because in our example, the option button in the Filter part of the form was set not to Export all documents, but to the documents ID range, which have resulted in creation of the additional block containing, in its turn, the property_name (id) and the IDs range specified using the tag. Note that if the additional filter is set to All, i.e., you want to export all objects of the selected type, the second is omitted. The Export script reads a filters file, exports data, converts it in XML format, saves and compresses (GZip) an XML file. After the Parallels Business Automation - Standard installation, the export script location on your Management Node is /usr/sbin/hspc-export.pl. By default, the script places an XML file in the current directory. Errors, if any, are put in STDERR. Command Line Syntax For Export Script /usr/sbin/hspc-export.pl -f filters.xml Tools 369 where filters.xml must be replaced with the actual name of a filter file, and -f is a key. Or /usr/sbin/hspc-export.pl -all accounts where -all is the key and accounts is the data type specified explicitly. Export Script Keys -h see help page -f file with filters -all export all (parameters can be one of accounts, or documents, or subscriptions, or hosting plans) If the filters.xml file is not defined, filters are got from STDIN. Filter File Structure When composing a filter, please carefully follow the filter file structure diagram: Tools 370 Thus, the filter file structure is always looks like follows: OBJECT PROPERTY ... Tag Description The single tag that opens and closes the filter. The tag containing the information about the kind of objects to export: accounts,documents, subscriptions, or hosting plans. There can be only one kind of object specified in one filter file The kind of object inside the objects_name tag must be specified exactly as follows:  account to filter accounts  document to filter documents  subscription to filter subscriptions  hp to filter hosting plans. At least one filter tag must be in the filter file. This tag holds the information about the type of objects to export. Without the information about objects type the filter file is not valid. In general a filter file can contain two filter tags:  The filter containing information about type of objects to export (type of documents, accounts, subscriptions, or hosting plans).  The additional and optional filter that narrows the set of objects to be exported down to an ID range or creation date, or other property, depending on the type of objects. Tools 371 The tag nested into any tag. The tag specifies the filter itself:  For the first and required tag, the tag always contains the type word, which means that below in the tag the type(s) of objects to be exported must be specified.  For the second and optional tag, the tag contains the type of additional filter:  id to export objects within the pre-defined ID range or to export the selected objects by their IDs;  date to export objects created between particular dates;  start_date - for subscriptions only, to export subscriptions with particular subscription period start date;  end_date - for subscriptions only, to export subscriptions with particular subscription period end date. The tag that must be nested into any tag , below the tag. The tag contains a particular filter settings specified either in the tag (if objects are filtered by IDs) or using the tags (if objects are filtered by creation date or ID range) nested into the tag. The tag nested into the tag and containing the filter settings. The tag is used in all cases except for filtering subscriptions by subscription period start or end date. In the latter case, the For the first and required tag, the tag contains the information about type(s) of object(s) to be exported. The object types must be specified in the form of special abbreviations, exactly as this written below, several object types must be specified in one string, divided by comma:  For documents: IN - for invoices, PO for online payments, PF for offline payments, CA for credit adjustments, DA for debit adjustments, CI for credit invoices.  For accounts: customer - for customer accounts, reseller - for reseller accounts, res_customers - for accounts of your resellers' customers.  For hosting plans: VE - for Virtuozzo Container, HN - for Dedicated server, HNVZ - for Dedicated Parallels Virtuozzo Containers server, MISC - for Miscellaneous plans, DM - for Domain Registration, PLSRV - for Dedicated Plesk server, PLCLT - for Plesk Client, PLDM - for Plesk domain, VEPLHN - for Plesk Server in Virtuozzo Container plans.  For subscriptions' types abbreviations are the same as for corresponding hosting plans. For the second and optional tag, the tag contains particular filtering data:  Object ID or IDs (in a string, divided by comma, for example, if filtering is by hosting plans or subscriptions selection). Tools 372 These tags are used instead of the tag if filtering is by object ID range (first ID in the range is specified in the tag, last ID in the range is specified in the tag) or a subscription period start or end date (the time frame of subscription periods start or end date is specified similarly, using the and tags). In the latter case, the date format is year-month-day time, like YYYY-MM-DD hh:mm:ss (YYYY - year, MM - month, DD - date, hh - hour, mm - minute, ss - second) Importing Billing Data in the Form of XML File Below we describe command line tools for importing data in the form of XML file into Parallels Business Automation - Standard database. Only accounts, documents, and hosting plans can be imported as an XML file. Subscriptions are imported using a special script that uses the Parallels Business Automation - Standard XML API (on page 374). Note: Parallels Business Automation - Standard provides web-based tools for XML data import (Import-Export Manager in Provider Control Center). If you would like to, you can use this tool (please refer to the Parallels Business Automation - Standard Provider's guide fo more information or go to Provider Control Center and click Help link for detailed HTML help). After the Parallels Business Automation - Standard installation, the import script location on your Management Node is /usr/sbin/hspc-import.pl. The Import script reads an XML file that contains the data to be imported, imports data Parallels Business Automation - Standard database, after the XML file is validated and the data correctness is checked. Errors (if any) are put in STDERR. Command line syntax: /usr/sbin/hspc-import.pl [keys] file.xml where file.xml must be replaced with the name of an actual xml file containing billing data to be imported. Keys: -h, --help see help page Tools 373 If an XML file is not defined the data is read from STDIN. If something goes wrong, e.g., an XML structure is not valid, the script stops and rolls back all the changes made before an outage. To prepare for the billing data import, you will need to create a set of relevant hosting plans in Parallels Business Automation - Standard to "move" customers to these hosting plans. When you create such hosting plans, you should take into account the fees, resources configuration, applications set, and all the other parameters of the subscription you are going to move to Parallels Business Automation - Standard for future management and billing. When you create hosting plans in Parallels Business Automation - Standard, each of these plans gets the unique numerical identifier (ID) assigned automatically in Parallels Business Automation - Standard to all objects (including hosting plans). This ID should be indicated with the relevant tag in the XML file so that the import script could fetch the fees and other data from this hosting plan when creating the subscription. The import script creates accounts and, for each account imported - one or more subscriptions that correspond to the preset Parallels Business Automation - Standard hosting plans. As a result, a customer obtains the "empty" Container or Plesk domain that is managed and billed by Parallels Business Automation - Standard. The personal customer data (websites, mailboxes, home directory contents, etc.) can be manually moved into a newly created Container or Plesk domain. Tools 374 Importing Subscriptions Using XML API Subscriptions import consists in placing a corresponding order an creating a new subscription after this order is completed. An order can be free or not, and this can be defined using the is_free parameter in the place_order function (on page 33) called in the subscription import script. The script is located in the /usr/sbin directory on the Management Node. Example of subscription import script: #!/usr/bin/perl use strict; # Below is the sample script for order generation based on Parallels Business Automation - Standard XML API. # Feel free to modify it according to inline comments and XML API documentation. my $order = place_order({ hp_sid => 1, # hosting plan series key account_id => 2, # subscription owner period => 2592000, # subscription period app_list => [], # IDs of application templates to include in order attribute_list => [], # IDs of custom attributes to include in order license_list => [], # IDs of licenses to include in order login => [ # login parameters for order: password, login, URL 'password', 'login', 'URL', ], domain_hash => { # domain hash: per-domain configuration hashes, 'ext_data' for registrar 'domain.com' => { dm_action => 'dns_hosting', # domain action period => undef, # registration period in years dns_hosting => 1, # is DNS hosting enabled? is_default => 1, # is default domain in this order? hosting_destination => undef, # ID of subscription to assign domain to ns_list => [], # list of nameservers (non-empty disables DNS hosting!): [hostname, IP], [hostname, IP], ... contact_hash => {}, # domain contacts, 0 or undef to get from account contacts: { admin => NN, billing => undef, owner => undef } whois_privacy => 0, # is WHOIS privacy enabled? }, ext_data => {}, }, for_trial => 0, # is subscription trial? sb_plan => undef, # Sitebuilder site ID for provisioning description => 'Generated through XML API', }); print "Order #$order->{id} has been successfully generated, provisioning initiated.\n"; Tools 375 ############################################################################## ## # below is code for order generation, alter it *only* to archieve special functionality use SOAP::Lite (); my $client; sub place_order { my $order_details = shift; $order_details->{is_free} = 1; # place order and return its structure return $client->ns('HSPC/API/Billing/1.0')->place_order($order_details)>result; } BEGIN { # create XML API client object $client = SOAP::Lite ->proxy('http://localhost:8080/hspc/xml-api') ->on_fault(sub { print 'SOAP Fault: ' . $_[1]->faultcode . ' - ' . $_[1]>faultstring . "\n"; exit(1); }); # open session: receive session ID for provider my $sid = $client->ns('HSPC/API/1.0')->session_open({ account_id => 1 })->result->{session_id}; # put session ID to outgoing requests' HTTP headers $client->transport->http_request->header('HSPC-SID' => $sid); } END { # close session $client->ns('HSPC/API/1.0')->session_close; } Examples of XML Files Used for Billing Data Import Below are examples for XML files that can be used for data import in Parallels Business Automation - Standard. Note: All types of data except hosting plans require the corresponding account information to be present in an XML file, because an account is the basic billing notion in Parallels Business Automation - Standard, and all the subscriptions and financial documents are bound to accounts. Tools 376 Account Data in XML File The example below includes absolutely al tags used to represent an account data. If you do not know what to write in one or another tag, you must leave such tags empty, but do not remove them from your XML file. The account data can include information about documents and subscriptions existing for this account. Note 1. Phone Number Format: Since phone numbers syntax may differ from country to country (for example, a country code can be written as +code or without +, or a regional code can be written in round brackets or without them, etc.), we recommend that you specify the phone and fax numbers in the unified format like country code|regional code|number|extension. and use not the tag like for an account administrator phone number, but the special tag named like . Note 2. User Password Import:: The export script exports a user password exactly as it is stored in the Parallels Business Automation - Standard database, as a hash. The export script places a password hash into the tag and this is reflected in the example below. If you manually create an XML file to import an account data and use the tag to specify a user password, the import script considers this password as a hash and this results in the impossibility to view a user password in Parallels Business Automation - Standard web interface after import is finished. You can manually redefine a user password in XML file using the tag, as this shown in the example below. In this case the password is actually redefined after import is finished with Parallels Business Automation - Standard database update and corresponding hash creation. Example of XML account data: Smith John ||| john@mail.com 1|112|12312312| ||| +1 (112) 12312312 2005-07-28 0 active 0000-00-00 00:00:00 Tools 377 John 29 john@smith.com
    1|114|1234569|5678 0 +1 (113) 1234567 London +1 (114) 1234569 5678 14 GB 1|113|1234567| +64 21 555 2624+1 (112) 1234567 9876 12AA-BB34 1|112|1234567|9876 17, Baiker street
    17 en /usr/share/zoneinfo/Europe/London 2005-07-28 13:27:24 Person&apos;s comment Smith kfKawxdUOFfSSauxjlGXJXayGq8 1q2w3e customer_adm_uc 9 3 8 1 Mr.
    1|114|1234569|5678 2 +1 (113) 1234568 London +1 (114) 1234569 5678 45 GB 1|113|1234568| +64 21 555 2624+1 (112) 1234567 9876 12AA-BB34 1|112|1234567|9876 17, Baiker street
    29 Tools 378 John Smith Jr. ||| +1 (112) 12312312 jomnen@hhh7.com ||| 1|112|12312312| Mnemonic 7 Johnny 0 Mnemonic 7 1|112|12312312| +1 (112) 12312312 jomnen@hhh7.com Johnny ||| ||| 3 1 Provider-Provider
    Tools 379 Document Data in XML File Miles Johnny ||| jomnen@hhh7.com 1|112|12312312| ||| +1 (112) 12312312 2005-07-28 0 active
    0.8500 1.000000 Container 1 hosting plan setup fee 0 0.8500 0.00
    20.6700 24.390000 Container 1 hosting plan monthly subscription fee 63218880 20.6700 0.00
    -0.0000 1.000000 Sub-domain john.test1111.com in provider domain 0 0.0000 0.00
    3.8700 1.000000 + NDS (18.00%) included 0 3.8700 0.00 Tools 380
    1040 2005-07-28 13:41:02 IN 2005-08-28 13:41:02 O 25.3900 152 25.3900
    0000-00-00 00:00:00 John 29 john@smith.com
    1|114|1234569|5678 0 +1 (113) 1234567 London +1 (114) 1234569 5678 14 GB 1|113|1234567| +64 21 555 2624+1 (112) 1234567 9876 12AA-BB34 1|112|1234567|9876 17, Baiker street
    17 en /usr/share/zoneinfo/Europe/London 2005-07-28 13:27:24 Person&apos;s comment Smith kfKawxdUOFfSSauxjlGXJXayGq8 customer_adm_uc 9 3 8 1 Mr.
    1|114|1234569|5678 2 +1 (113) 1234568 Tools 381 London +1 (114) 1234569 5678 45 GB 1|113|1234568| +64 21 555 2624+1 (112) 1234567 9876 12AA-BB34 1|112|1234567|9876 17, Baiker street
    29 John Smith Jr. ||| +1 (112) 12312312 jomnen@hhh7.com ||| 1|112|12312312| Mnemonic 7 Johnny 0 Mnemonic 7 1|112|12312312| +1 (112) 12312312 jomnen@hhh7.com Johnny ||| ||| 3 1 Provider-Provider
    Tools 382 Example of XML File for Traffic Classes Import Parallels Business Automation - Standard allows accounting traffic by different IP ranges called traffic classes. A traffic class is a set of IP ranges for which traffic must be accounted and billed in accordance with prices and restrictions set for each particular IP range. To be imported in Parallels Business Automation - Standard, traffic classes must be presented in the form of XML file. Below we describe all tags used for traffic classes description. Tag Description The tag that always must open and close any XML file for data import in Parallels Business Automation - Standard. The tag that opens and closes a particular traffic class description. There can be several blocks inside the tag. A traffic class number. Please, do not mix with numerical ID assigned automatically to all objects in Parallels Business Automation - Standard (a traffic class gets only number). There can be up to 15 traffic classes in Parallels Business Automation - Standard. Thus, a traffic class number can vary from 1 to 15. Please note that class 1 and class 2 have special meanings and cannot be edited or removed from Parallels Business Automation - Standard. Class 1 defines the IP address range for which no accounting is done. Usually, it corresponds to the Virtuozzo Hardware Node subnet (the Node itself and its VEs). Class 2 is defined to match any IP address. It must be always present in the network classes definition file. Other classes should be defined after Class 2. They represent exceptions from the "matching-everything" rule of Class 2. A traffic class importing mode. This tag can contain one of the two values:  update - in this mode, the IP ranges specified for a traffic class in XML file will be added to the existing ones, in case you are importing additional ranges for a traffic class already existing in Parallels Business Automation - Standard. Warning: The update mode means that ip-ranges from this file will be added further to the existing. No any range existing and overlapping checkup will be performed.  replace - in this mode the IP ranges specified for a traffic class in XML file will replace the existing IP ranges. Existing IP ranges will be deleted and new IP ranges will be created. This tag carries a short friendly name of a traffic class. This name just helps to recognize a class. The tag that contains a detailed description (plain text) of a traffic class. The tag that contains description of one IP range in a traffic class. There can be several ranges in a traffic class and thus, several blocks can be inside the tag. The tag contains: , , Tools 383 The starting IP address of an IP range. The netmask in the bit form. For example 24 corresponds to the 255.255.255.0 netmask. IP range description (plain text). Description can be empty. Example of the XML file for traffic classes: 4 update Name of traffic class #4 Description of the traffic class. 66.6.6.0 24 Desc. Can be empty 75.0.0.0 8 Desc. Can be empty 120.12.0.0 16 6 replace Name of traffic class #6 Description of the traffic class. 66.6.6.0 24 Description can be empty. 75.0.0.0 8 Description can be empty. 120.12.0.0 16 Tools 384 Example of XML File for Traffic Statistics Import Traffic usage statistics import is needed in case it is not possible for Parallels Business Automation - Standard to collect the needed traffic statistics automatically. For example, traffic statistics import can be used to control and bill traffic usage by dedicated servers, in the situation when traffic usage statistics are collected by some internal devices. Below we describe all tags used in XML file to describe traffic usage statistics. Tag Description The tag that always must open and close any XML file for data import in Parallels Business Automation - Standard. The tag that contains traffic statistics description. There can be only one container per one XML file describing traffic statistics. All traffic statistics description is placed inside this tag. The tag that opens and closes the traffic statistics description for a particular server (node). All the tags described below are inside the tag. The type of a server in terms of Parallels Business Automation - Standard. The value inside this tag can be one of the following:  HN - a node registered in Parallels Business Automation - Standard (e.g., Plesk node or Virtuozzo Node).  DS - third-party dedicated server.  VE - Virtuozzo Container.  PC - Plesk Client  PD - Plesk Domain A server (node) numerical identifier (ID) assigned in Parallels Business Automation - Standard during registration. The tag that contains description of one traffic statistics block. Contains: , , , . The tag that contains the starting and ending dates of traffic statistics collection period. Contains: , Traffic statistics collection starting date and time. Traffic statistics collection ending date and time. Traffic statistics for the specified period. Contains: , . Incoming traffic for the specified period, in bytes. Outgoing traffic for the specified period, in bytes. Tools 385 The number of traffic class the statistics was collected in. In terms of Parallels Business Automation - Standard, a traffic class number is called ID, but please do not mix this ID with numerical identifiers assigned to all objects in Parallels Business Automation - Standard. Traffic classes import is described in details earlier in this guide. The description of network adapter on a node traffic statistics was collected. You can use any denotation (e.g., eth0). Example of XML file for traffic usage statistics import: HN 4 2005-06-29 12:21:23 2005-06-29 14:01:12 111111123 1111111223 2 eth0 2005-06-29 15:00:23 2005-06-29 16:01:12 11131111 1114541111 2 eth0 2005-06-29 16:21:23 2005-06-29 17:01:12 113411111 111321111 2 eth0 2005-06-29 16:21:23 2005-06-29 17:01:12 33411111 441321111 3 Tools eth0 2005-06-29 16:21:23 2005-06-29 17:01:12 53411111 541321111 4 eth0 386 Tools 387 Import-Data Script The possibility of importing the billing data (accounts and subscriptions) in Parallels Business Automation - Standard can considerably facilitate migration of customer's data and reduce cost. If you provide Virtuozzo Containers or/and Plesk domains to your customers and feel like it is the right time to automate your business, you can import the customer billing data in Parallels Business Automation - Standard without the need to use special plug-ins or other complex tools. All you need is to represent your customers billing data as a simple XML structure and then run the import script provided with this XML file as a parameter. The script processes one XML file per one run. After the Parallels Business Automation - Standard installation, the import script location on your Management Node is /usr/sbin/hspc-import/import.pl. The sample XML file (example.xml) you can use to check how the import script works is located in the same directory. Thus, the command line syntax to run the import script is the following: /usr/sbin/hspc-import/import.pl filename.xml where filename.xml should be replaced with the actual name of XML file containing customer's billing data. Please always indicate the full path to the XML file in the command line. If something goes wrong, e.g., an XML structure is not valid, the script stops and rolls back all the changes made before an outage. To prepare for the billing data import, you will need to create a set relevant of hosting plans in Parallels Business Automation - Standard to "move" customers to these hosting plans. When you create such hosting plans, you should take into account the fees, resources configuration, applications set, and all the other parameters of the subscription you are going to move to Parallels Business Automation - Standard for future management and billing. When you create hosting plans in Parallels Business Automation - Standard, each of these plans gets the unique numerical identifier (ID) assigned automatically in Parallels Business Automation - Standard to all objects (including hosting plans). This ID should be indicated with the relevant tag in the XML file so that the import script could fetch the fees and other data from this hosting plan when creating the subscription. The import script creates accounts and, for each account, one or more subscriptions that correspond to the preset Parallels Business Automation - Standard hosting plans. As a result, a customer obtains the "empty" Virtuozzo Container or Plesk domain that is managed and billed by Parallels Business Automation - Standard. The personal customer data (websites, mailboxes, home directory contents, etc.) can be manually moved into a newly created Virtuozzo Container or Plesk domain. Tools 388 The structure of XML file is very simple. All XML data is placed in the tag that opens and closes the file. The tag contains the set of tags. The tag can contain as many account data (placed inside the tags) as you need to import in one run of the import.pl script. Every tag contains the information about account itself. Below we describe each tag in details.  - this tag contains all the data to be imported. This tag opens and closes the file containing the billing data to be imported. Below we describe all the tags containing inside the tag:  - this tag contains the information about an account itself and about all the subscriptions existing on this account. The XML file can contain the data on as many accounts as you need, each account described in the tag, all the tags are placed inside the single tag. Now we describe all the tags that contain inside each of the tags:  - the name of an account should be specified inside this tag. This name is used for corporate accounts mostly and in this case, the name is the company name. For personal accounts the customer's name is used. However, how the imported account will be finally named depends upon the special data placed inside the tag (see description below).  - the balance of the account.  - The part of the account owner postal address. This particular tag should contain the street and howse number. Note that you can specify two addresses.  - Again, the part of an account owner postal address. Please specify the account owner city or town here.  - Part of the account address. For USA and Canada addresses only, it is necessary to specify the State in this tag (use abbreviations). For NON US AND NON CANADA ADDRESSES, please DO NOT USE THIS TAG. In this case, please use another tag to specify the State or district, etc.  - The account owner address zip code.  - The part of an account owner address. Please specify the country in the form of a two-chars country code. Please, follow the ISO 639 (http://www.loc.gov/standards/iso639-2/langcodes.html) standard.  - The account owner contact phone number in the format as country code|local code|number|extention.  - The account owner first name.  - The account owner last name.  - The account owner e-mail address.  - This tag is intended to indicate whether the account is corporate (1) or personal (0). If you indicate 1 then the data placed inside the tag will be used as the imported account name. If you indicate 1 then the account name will be composed of the data placed in the two tags and , which as a result will give the customer full name. Tools The example of XML file: Hosting Inc. 10.45 One str., 2 Karson Distr of 141700 US 8|1|1292627| John Smithsmith@mail.com 0 . . . . . . 389 390 Changes Description Date Revision Changes Description June 19, 1012 1.0 CP Customization methods updated according to PBAS v.4.2. Index 3 3D Secure Payment • 277 A Access Method • 179 Account Data in XML File • 377 Add New Item to Existing Section • 185 Add New Section • 184 add_form • 262 Adding a new Translation • 231 Adding New Fields to Accounts Registration Form • 200 Adding New Language Pack • 226 Anti-Fraud Manager Value Structure • 252 Anti-Fraud Plug-In Package Structure • 253 Anti-Fraud Plug-ins • 239 auth_person • 108 B Bank Accounts Import • 360 Bank Transfer Payment • 280 Building New Plug-In • 356 Bulk Domain Registration / Transfer • 359 Bulk Parallels Plesk Domains / Clients Resolving • 360 C calculate_order • 33 can_check_register • 302 can_check_transfer • 303 can_idprotect • 314 can_reglock • 316 can_send_authcode • 304 can_terminate_domain • 307 can_transfer_domain • 304 cancel_certificate • 350 Changes Description • 391 Changing Store Layout, Styles and Images • 143 Check Handler • 249 check_app_compat • 18 check_available • 347 check_domain_list • 112 check_domain_name_syntax • 113 check_is_reachable() • 341 check_license_compat • 19 check_register • 301 check_transfer • 302 Class Info • 248 Cleaning Tool • 361 collect_config_data • 324 collect_contact_extdata • 322 collect_contacts • 353 collect_contacts_data • 321 collect_data • 263, 269, 351 collect_domain_extdata • 322 collect_ext_attr • 355 collect_transaction_refno • 284 Common Functions • 325 Component repository configuration files • 253 Components Repository • 162 Components Repository Structure and Files • 163 Configuration Information • 342 Configuring Redirect URLs to Integrate the Store with Existing Website • 138 Constants • 296 Control Center Screen Customization Module Sample • 171 Control Panel Dashboard Customization Module Location • 178 Control Panel Dashboard IDs • 179 Control Panel Screen Structure • 171 Control Panel Screens Customization Using Screen IDs • 189 Control Panel Top Frame and Tabs Customization • 175 Copyright Notice • 2 create_custom_invoice • 95 create_customer • 97 create_domain_contact • 99 create_offline_payment • 54 create_reseller • 100 Creating a New DNS Plug-In • 327 Creating a New Promotion Plug-In • 288 Creating Placeholders for Custom Extended Attributes • 215 Credit Card Import • 359 Custom Extended Attribute Code Samples • 201 Custom Placeholders Samples • 212 Customization API Methods • 190 Customizing a Group of Screens • 196 Customizing a Single Screen Form • 194 Customizing Control Panel Dashboard • 177 Customizing Customer Control Panel • 171 Customizing Help Bar in Control Panel • 199 Customizing Language Packs • 216 Customizing Main Frame • 176 Customizing Store by Means of Configuration Parameters • 145 Customizing Store Localization • 151 Customizing Vendor Control Center (PCC/RCC) • 162 D delete • 268 Delete Item and Section • 186 Deploying Online Store • 133 Direct Payment • 270 Discovering Screen ID and the Name of Screen Element to Customize • 192 DM Plug-In Installation and Configuration • 322 DM Related Checking, Converting, Formatting Functions • 326 DNS Plug-In Objects and Their Naming Conventions • 328 DNS Synchronization Tool • 362 Document Data in XML File • 380 Domain Lookup • 300 Domain Plug-In Namespaces • 300 Domain Registration Plug-In Development Tools • 300 E edit_config_form • 323 edit_contact_extdata_form • 320 edit_contact_form • 319 edit_domain_extdata_form • 321 edit_form • 263, 269 Example 1. Redirect URL to the Store Tab • 140 Example 2. Pass Domain Lookup Data to the Store with Redirect URL • 141 Example of ACCOUNT_INFO Hash • 102 Example of EXTENDED_HP_INFO Hash • 22 Example of get_subscr_info Returned Values • 62 Example of Test Code for create_offline_payment Function • 55 Example of XML File for Traffic Classes Import • 383 Example of XML File for Traffic Statistics Import • 385 Examples of ORDER Hash • 37 Examples of Screen ID Based Customization • 196 Examples of XML Files Used for Billing Data Import • 376 explain_avs • 283 Exporting Data into XML Files • 367 Extended Attributes Objects • 201 Extending E-Mail Notification Templates • 204 External Helpdesk API • 223 F Feedback • 8 fetch_certificate • 347 form_ns() • 331 Full Source Code of the HSPC Custom Menu CP • 187 Functions Used for Payment Processing Plugin • 280 G General Conventions • 9 get_account_campaigns • 96, 129 get_account_info • 101 get_account_subscr • 57 get_approver_email_list • 343 get_buttons • 344 get_campaign • 128 get_categorized_plan_list • 20 get_cert_form • 129 get_config_form • 351 get_config_view • 350 get_contact_form • 353 get_contact_types • 313, 352 get_contact_view • 352 get_currencies_supported • 281 get_custom_name • 268 get_domain_contact_list • 104 get_domain_details • 309 get_domain_info • 327 get_domain_list • 113 get_domain_prices • 309 get_domain_status • 308 get_expiration_date • 267 get_ext_attr_form • 355 get_ext_attr_view • 354 get_extended_attr_list • 56, 105 get_extended_plan_info • 21 get_full_extended_plan_info • 29 get_help_page • 264, 351 get_hosting_target_list • 47 get_idprotect • 315 get_layout_hash • 119 get_order_details • 56 get_parsed_csr_data • 131 get_paymethod_type • 265 get_person_info • 111 get_person_list • 106 get_plan_promotion_list • 30 get_plugin_list • 119 get_price_list • 343 get_product_attributes • 349 get_product_list • 342 get_promotion • 30 get_provider_config • 124 get_public_data • 266 get_public_number • 267 get_redirect_hash • 120 get_reglock • 316 get_reseller_terms • 104 get_resume_newpaymethod • 123 get_safe_description • 123 get_saved_paymethod_list • 118 get_secure_data • 266 get_secure_number • 267 get_sellable_plan_list • 31 get_server_software_type_list • 343 get_status • 122 get_subscr_info • 58 get_supported_payment_method_types • 280 get_title • 280, 342 get_warning_newpaymethod • 122 Graphical Presentation Module • 350 Graphical Representation • 241 H Header • 245 HSPC MT Plugin DM Methods • 300 Plugin DM Methods • 318 HSPC/API • 16 HSPC/API/Account • 97 HSPC/API/Billing • 33 HSPC/API/Campaign • 128 HSPC/API/Config • 124 HSPC/API/Domain • 112 HSPC/API/Fraud • 122 HSPC/API/HP • 18 HSPC/API/Mailer • 117 HSPC/API/Person • 108 HSPC/API/PP • 118 HSPC/API/SSL • 129 I Implementation Details • 261 Import-Data Script • 388 Importing Billing Data in the Form of XML File • 373 Importing Subscriptions Using XML API • 375 install() • 339 Integrating with 3rd Party Applications. Kayako Chat • 148 Integration with External Helpdesk • 223 Introduction to Parallels Business Automation - Standard XML API • 11 Introductory Notes About DNS Plug-In • 327 Introductory Notes About Promotion Plug-Ins • 289 is_reinstall_ns() • 338 issue_certificate • 346 L Language Pack Customization Sample • 220 Language Pack Customization Tools • 216 M Middle Tier Module • 245, 293, 338, 342 Migration from Parallels Plesk Billing • 360 N New Component Sample • 165 O Online Store Integration and Customization • 132 Online Store Structure • 132 Open Store, Switch between Old and New Stores • 137 Operations With Contact and Domain Extended Information • 318 Operations With Contacts and Domain Extended Information • 311 Operations With Domains • 303 Operations With Name Servers • 309 P Parallels Business Automation - Standard Translation Capabilities • 227 Parallels Virtuozzo Containers Integration • 362 parse_template • 325 pay • 121 Payment Method Internal Logic Module • 264 Payment Method Plug-Ins • 262 Payment Method UI Presentation Module • 262 Payment Plug-In Directories Structure and Files • 257 Payment Plug-In Internal Logic Module • 269 Payment Plug-In Modules and Their Name Spaces • 259 Payment Plug-In Packaging • 256 Payment Plug-In UI Presentation Module • 268 Payment Plug-Ins Development • 254 Payment Plug-Ins Types • 254 Payment Processing Plug-Ins • 268 place_order • 48 Placeholder Creation Tools • 205 Plug-In Configuration • 350 Plug-Ins Development • 237 Plug-Ins Toolkit Methods • 238 Post-Install Method • 250 Post-Installation Configuration Script • 251 Preface • 7 Preparing Directories and Files for New Language Pack • 228 process_batch_content • 283 process_callback • 283, 317 process_capture • 282 process_capture_void • 282 process_check_status • 282 process_credit • 282 process_preauthorize • 281 process_preauthorize_void • 282 process_sale • 282 Profile Hash • 246 Promotion Plug-Ins Objects and Their Naming Conventions • 291 provided_payment_method_types • 265 purify_fromxml_data • 325 Script Checking Domain Renewal Date Using WHOIS Information • 360 send • 117 send_authcode • 305 session_close • 17 session_open • 16 set_idprotect • 315 set_reglock • 317 Shell Prompts in Command Examples • 8 SSL Certificate Configuration • 352 SSL Certificate Issuing • 345 SSL Certificate Plug-In Developmet Tools • 341 SSL Certificate Plug-In Namespaces • 341 Store Customization • 143 Store Installation in Parallels Plesk Panel • 135 Store Installation in Virtuozzo Container • 133 Store Installation on Remote Server • 133 subscr_auth • 57 Supporting 'Lock Domain' Feature • 315 Supporting Offline Operations • 317 Supporting 'WHOIS Privacy' Feature • 314 sync_zones() • 340 synchronize_domain_ns • 310 T Redirect Payment • 271 register_domain • 303 register_ns • 310 Registering a DNS Plug-In • 329 Registering a Promotion Plug-In • 298 renew_certificate • 348 renew_domain • 306 Replace Item in Existing Section • 186 Required Toolkit Methods • 324 Resulting Hash Returned by process_* Methods • 285 Template Based Customization • 162 terminate_domain • 307 The filter Function Sample • 164 title_id • 266 Token Payment • 279 Tools • 359 Tools for Actions Execution over/in Container • 365 transfer_domain • 306 Translating General Labels and Messages • 230 Translating Help Files • 235 Translating Interface • 229 Translating Printable Documentation • 236 Translating the Context Help Pages for Control Panel • 235 Translating the Online Help Pages for Control Centers • 236 Translating the On-Screen Hints • 234 Translating ToolTips for Menu Items • 234 Typographical Conventions • 7 S U Samples • 183 save_contact • 115 save_ns() • 336 Screen Aliases Based Customization in Control Centers • 169 Screens Customization Overview • 157 update_contacts • 314 update_ext_attr • 345 Updating jQuery • 153 Updating Symfony Components • 155 Updating Third-Party Libraries • 153 User Interface Customization • 157 R Using Data Import and Export Command Line Tools • 366 V validate • 267 validate_cert_form • 130 validate_config_data • 324, 351 validate_contact_form • 354 validate_csr_data • 345 validate_data • 313 validate_domain_data • 116 validate_ext_attr_form • 356 validate_ns_list • 114 validate_password • 104 validate_plesk_login • 32 view_config_form • 323 view_contact_extdata_form • 319 view_contact_form • 318 view_domain_extdata_form • 320 view_form • 263, 268 view_ns() • 334 Virtuozzo Templates Installing Tool • 363 W Web Interface Module • 292, 330 X XML API • 10

    Source Exif Data:
    File Type                       : PDF
    File Type Extension             : pdf
    MIME Type                       : application/pdf
    PDF Version                     : 1.5
    Linearized                      : Yes
    Author                          : (c) 1999-2014
    Comments                        : Copyright © 1996-2002 AuthorIT Software Corporation Ltd., all rights reserved.
    Company                         : AuthorIT Software Corporation Ltd.
    Create Date                     : 2014:04:03 23:42:57+07:00
    Keywords                        : Release, 4.5., Revision, 1.12
    Modify Date                     : 2014:04:03 23:43:58+07:00
    Source Modified                 : D:20140403164122
    Subject                         : Parallels
    Tagged PDF                      : Yes
    XMP Toolkit                     : Adobe XMP Core 5.2-c001 63.139439, 2010/09/27-13:37:26
    Metadata Date                   : 2014:04:03 23:43:58+07:00
    Creator Tool                    : Acrobat PDFMaker 10.0 for Word
    Document ID                     : uuid:7f54ac01-7e43-4e82-a04b-5f8f25750276
    Instance ID                     : uuid:b8fc5c0c-80a2-4d97-a21b-dc83910b8925
    Format                          : application/pdf
    Title                           : Parallels Business Automation Standard
    Description                     : Parallels
    Creator                         : (c) 1999-2014
    Producer                        : Adobe PDF Library 10.0
    Headline                        : Parallels
    Page Layout                     : OneColumn
    Page Count                      : 395
    
    EXIF Metadata provided by EXIF.tools

    Navigation menu