A product

A product represents a sellable item in WHMCS. The property object models a product's properties and configuration. It stores billing, contact, inventory, resource overage tracking, and 24 custom fields available to third party modules.

Ordering a product creates a WHMCS\Service\Service object, which is available for use by the client.

class Product extends AbstractModel

Traits

MarketConnectTrait

Constants

TYPE_SHARED

TYPE_RESELLER

TYPE_SERVERS

TYPE_OTHER

PAYMENT_FREE

PAYMENT_ONETIME

PAYMENT_RECURRING

AUTO_SETUP_ORDER

AUTO_SETUP_PAYMENT

AUTO_SETUP_ACCEPT

AUTO_SETUP_DISABLED

DEFAULT_EMAIL_TEMPLATES

Properties summary

Type Property Description
protected $table
protected $moduleField
protected $columnMap
protected $booleans
protected $strings
protected $ints
protected $commaSeparated
protected $casts
protected $appends
protected $pricingCache
int $id A product's unique id number.
string $type A product's type, either "hostingaccount", "reselleraccount", "server", or "other".
int $productGroupId The id of group a product belongs to.
string $name A product's name.
string $description A product's description. Some order form templates may render structured data in a product's description.
bool $isHidden Whether or not to display a product in shopping cart modules.
bool $showDomainOptions Whether or not the shopping cart should require a domain be purchased, transferred, or supplied (if already owned) to a product.
int $welcomeEmailTemplateId ID number of welcome email template sent to customers when this product is activated.
bool $stockControlEnabled Whether or not a product has limited stock which must be monitored.
int $quantityInStock A product's currently available quantity, if stock control is enabled.
bool $proRataBilling Whether or not a product uses pro rata billing instead of standard month-to-month
int $proRataChargeDayOfCurrentMonth The day of the month upon which pro rata billing should charge on.
int $proRataChargeNextMonthAfterDay The day of the month after which the following month will also be included on the first invoice.
string $paymentType A product's payment type, either "recurring", "onetime", or "free".
int $allowMultipleQuantities Whether or not customers may specify if they want more than one of this item when purchasing.
string[] $freeSubDomains The domains a client can select for a free sub-domain.
string $autoSetup When provisioning a product should take place, either "order", "payment", "on", or "".
string $module The name of the module used to provision a product.
int $serverGroupId The id number of server group a product should be provisioned to.
string $moduleConfigOption1 Modules may use this field to store module specific configuration.
string $moduleConfigOption2 Modules may use this field to store module specific configuration.
string $moduleConfigOption3 Modules may use this field to store module specific configuration.
string $moduleConfigOption4 Modules may use this field to store module specific configuration.
string $moduleConfigOption5 Modules may use this field to store module specific configuration.
string $moduleConfigOption6 Modules may use this field to store module specific configuration.
string $moduleConfigOption7 Modules may use this field to store module specific configuration.
string $moduleConfigOption8 Modules may use this field to store module specific configuration.
string $moduleConfigOption9 Modules may use this field to store module specific configuration.
string $moduleConfigOption10 Modules may use this field to store module specific configuration.
string $moduleConfigOption11 Modules may use this field to store module specific configuration.
string $moduleConfigOption12 Modules may use this field to store module specific configuration.
string $moduleConfigOption13 Modules may use this field to store module specific configuration.
string $moduleConfigOption14 Modules may use this field to store module specific configuration.
string $moduleConfigOption15 Modules may use this field to store module specific configuration.
string $moduleConfigOption16 Modules may use this field to store module specific configuration.
string $moduleConfigOption17 Modules may use this field to store module specific configuration.
string $moduleConfigOption18 Modules may use this field to store module specific configuration.
string $moduleConfigOption19 Modules may use this field to store module specific configuration.
string $moduleConfigOption20 Modules may use this field to store module specific configuration.
string $moduleConfigOption21 Modules may use this field to store module specific configuration.
string $moduleConfigOption22 Modules may use this field to store module specific configuration.
string $moduleConfigOption23 Modules may use this field to store module specific configuration.
string $moduleConfigOption24 Modules may use this field to store module specific configuration.
string $freeDomain Whether purchasing a product provisions a free domain name, either "once", "on", or "".
string[] $freeDomainPaymentTerms The payment terms a product must be purchased with to be provisioned with a free domain name, anything from the set "onetime", "monthly", "quarterly", "semiannually", "annually", "biennially", and "triennially".
string[] $freeDomainTlds The top-level domains that are available for use with a product's free domain.
int $recurringCycleLimit The number of billing cycles a product may automatically renew.
int $daysAfterSignUpUntilAutoTermination The number of days after sign up before a product is automatically terminated.
int $autoTerminationEmailTemplateId The id of the email to send to a client when a product is automatically terminated.
bool $allowConfigOptionUpgradeDowngrade Whether or not a product's configurable options can be upgraded and downgraded.
int $upgradeEmailTemplateId The id of the email to send to a client when a product's options are upgraded.
array $enableOverageBillingAndUnits An array whose first value is true if overages are enabled. Its second value is the unit to use for a product's disk usage limits, either "MB", "GB", or "TB". Its third value is the unit to use for a product's bandwidth usage limits, either "MB", "GB", or "TB".
int $overageDiskLimit The soft limit of a product's allowed disk usage to this number of units configured in enableOverageBillingAndUnits.
int $overageBandwidthLimit The soft limit of a product's allowed bandwidth usage to this number of units configured in enableOverageBillingAndUnits.
float $overageDiskPrice The price to charge per unit configured in enableOverageBillingAndUnits for a product's disk usage above the soft limit configured in overageDiskLimit.
float $overageBandwidthPrice The price to charge per unit configured in enableOverageBillingAndUnits for a product's bandwidth usage above the soft limit configured in overageBandwidthLimit.
bool $applyTax Whether or not tax should be applied to a product.
bool $affiliatePayoutOnceOnly Whether or not affiliates should only be paid on a product once, even if it's a recurring product.
string $affiliatePaymentType The type of payment available for affiliates that successfully promote a product, either "percentage", "fixed", "none", or "" (the default payout method).
float $affiliatePaymentAmount The percent or fixed amount which should be paid to affiliates.
int $displayOrder The order in which to display a product in its group.
bool $isRetired Whether or not a product is retired and should no longer be sold.
bool $isFeatured Whether or not a product is displayed more prominently in its product group.
Carbon $createdAt The date a product was created.
Carbon $updatedAt The date a product was last updated.
Group $productGroup The group a product belongs to.
Template $welcomeEmailTemplate The email to send to a client when a product is ordered.
Template $autoTerminationEmailTemplate The email to send to a client when a product is automatically terminated.
Template $upgradeEmailTemplate The email to send to a client when a product's options are upgraded.
Collection|Download[] $productDownloads A product's associated downloadable files.
Collection|Product[] $upgradeProducts Products which a product can be upgraded or downgraded to.
Collection|Service[] $services The services provisioned from a product.
Collection|CustomField[] $customFields The custom fields for a product.
Collection|DynamicTranslation[] $translatedNames
Collection|DynamicTranslation[] $translatedDescriptions
Collection|UsageItem[] $metrics
Collection|UsageItem[] $billedMetrics
BelongsToMany|EmailMarketer[] $emailMarketerRules
array $formattedProductFeatures

Methods summary

Return Type Method Name Description
static  boot() -
BelongsTo productGroup() A product belongs to a product group.
HasOne welcomeEmailTemplate() A product has one welcome email template.
HasOne autoTerminationEmailTemplate() A product has one auto termination email template.
HasOne upgradeEmailTemplate() A product has one upgrade email template.
BelongsToMany productDownloads() A product has many downloads.
BelongsToMany upgradeProducts() A product has many upgrade packages.
HasMany services() A product can have many service instances of that product.
HasMany customFields() -
Builder scopeVisible(Builder $query) Filter for only non-hidden products.
Builder scopeSorted($query) Sort by display order.
int[] getDownloadIds() deprecated Retrieve a list of the ids of the downloads associated with a product.
int[] getUpgradeProductIds() deprecated Retrieve a list of the ids of the upgrade products associated with a product.
string[] getAvailableBillingCycles() Get available billing cycles for product.
Pricing pricing(array|null $currency = null) Get available cycles and pricing for product.
string getNameAttribute(string $name) Get the product name - this will override the output from the db value if set in Lang.
string getDescriptionAttribute(string $description) Get the product description - this will override the output from the db value if set in Lang.
HasMany|DynamicTranslation[] translatedNames() Return the translated names for the specific product
HasMany|DynamicTranslation[] translatedDescriptions() Return the translated names for the specific product
static string getProductName(int $productId, string $fallback = '', string $language = null) Obtain the product name for the current language, passed language or fallback to the currently defined value for the product.
static string getProductDescription(int $productId, string $fallback = '', string $language = null) Obtain the product description for the current language, passed language or fallback to the currently defined value for the product.
assignMatchingMarketConnectAddons(array $addons) -
bool isFree() Is product a free product.
bool isOneTime() Is product a one time product.
Builder scopeIsNotRetired(Builder $query) -
Builder scopeIsRetired(Builder $query) -
string getProductKeyAttribute(string $value) Get product key attribute for the current product entity.
bool isMarketConnectProduct() Is this a MarketConnect product?
string getServiceKeyAttribute(string $value) Get service key attribute for the current product entity.
bool isValidForUpgrade(Product $product) Validate a given product is a valid upgrade candidate.
array getFormattedProductFeaturesAttribute() -
getBilledMetricsAttribute() -
HasMany metrics() -
emailMarketerRules() -
int getClientStockLevel() -

Details

static boot ()

BelongsTo productGroup ()

A product belongs to a product group.

Return Value

BelongsTo

HasOne welcomeEmailTemplate ()

A product has one welcome email template.

Return Value

HasOne

HasOne autoTerminationEmailTemplate ()

A product has one auto termination email template.

Return Value

HasOne

HasOne upgradeEmailTemplate ()

A product has one upgrade email template.

Return Value

HasOne

BelongsToMany productDownloads ()

A product has many downloads.

Return Value

BelongsToMany

BelongsToMany upgradeProducts ()

A product has many upgrade packages.

Return Value

BelongsToMany

HasMany services ()

A product can have many service instances of that product.

Services are what associate products with clients.

Return Value

HasMany

HasMany customFields ()

Return Value

HasMany

Builder scopeVisible (Builder $query)

Filter for only non-hidden products.

Parameters

Builder $query

Return Value

Builder

Builder scopeSorted ($query)

Sort by display order.

Parameters

$query

Return Value

Builder

int[] getDownloadIds () deprecated

deprecated

Retrieve a list of the ids of the downloads associated with a product.

Return Value

int[]

int[] getUpgradeProductIds () deprecated

deprecated

Retrieve a list of the ids of the upgrade products associated with a product.

Return Value

int[]

string[] getAvailableBillingCycles ()

Get available billing cycles for product.

Return Value

string[]

Pricing pricing (array|null $currency = null)

Get available cycles and pricing for product.

Parameters

array|null $currency Only required on first call.

Return Value

Pricing

Exceptions

Exception

string getNameAttribute (string $name)

Get the product name - this will override the output from the db value if set in Lang.

Parameters

string $name The value from the database

Return Value

string

string getDescriptionAttribute (string $description)

Get the product description - this will override the output from the db value if set in Lang.

Parameters

string $description The value from the database

Return Value

string

HasMany|DynamicTranslation[] translatedNames ()

Return the translated names for the specific product

Return Value

HasMany|DynamicTranslation[]

HasMany|DynamicTranslation[] translatedDescriptions ()

Return the translated names for the specific product

Return Value

HasMany|DynamicTranslation[]

static string getProductName (int $productId, string $fallback = '', string $language = null)

Obtain the product name for the current language, passed language or fallback to the currently defined value for the product.

Parameters

int $productId
string $fallback
  • override the language fallback value
string $language

Return Value

string

static string getProductDescription (int $productId, string $fallback = '', string $language = null)

Obtain the product description for the current language, passed language or fallback to the currently defined value for the product.

Parameters

int $productId
string $fallback
string $language

Return Value

string

assignMatchingMarketConnectAddons (array $addons)

Parameters

array $addons

Exceptions

Exception

bool isFree ()

Is product a free product.

Return Value

bool

bool isOneTime ()

Is product a one time product.

Return Value

bool

Builder scopeIsNotRetired (Builder $query)

Parameters

Builder $query

Return Value

Builder

Builder scopeIsRetired (Builder $query)

Parameters

Builder $query

Return Value

Builder

string getProductKeyAttribute (string $value)

Get product key attribute for the current product entity.

Parameters

string $value

Return Value

string

bool isMarketConnectProduct ()

Is this a MarketConnect product?

Return Value

bool

string getServiceKeyAttribute (string $value)

Get service key attribute for the current product entity.

Parameters

string $value

Return Value

string

bool isValidForUpgrade (Product $product)

Validate a given product is a valid upgrade candidate.

For MarketConnect, validates upgrade product service key matches current product key.

Parameters

Product $product

Return Value

bool

array getFormattedProductFeaturesAttribute ()

Return Value

array

getBilledMetricsAttribute ()

HasMany metrics ()

Return Value

HasMany

emailMarketerRules ()

int getClientStockLevel ()

Return Value

int