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 implements SlugInterface

Traits

MarketConnectTrait
SlugTrait

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
Collection|ModuleConfiguration[] $moduleConfiguration The module configuration for the product.
BelongsToMany|EventAction[] $eventActions
Relation|Slug[] $slugs All slugs for the product
Relation|Slug[] $inactiveSlugs All previous slugs for the product
Relation|Slug $activeSlug The current active slug for the product
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) -
Builder scopeOfModule(Builder $query, string $module) -
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() -
HasMany moduleConfiguration() -
ModuleConfiguration getModuleConfigurationSetting(string $settingName) -
HasMany eventActions() -
Product duplicate() Duplicate a Product along with all corresponding attributes
Relation slugs() -
Relation inactiveSlugs() -
Relation activeSlug() -
bool validateSlugIsUnique(string $slug) -
Builder getExistingSlugCheck(string $slug) -
string getRoutePath() -
array getRouteParts() -

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

Builder scopeOfModule (Builder $query, string $module)

Parameters

Builder $query
string $module

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

HasMany moduleConfiguration ()

Return Value

HasMany

ModuleConfiguration getModuleConfigurationSetting (string $settingName)

Parameters

string $settingName

Return Value

ModuleConfiguration

HasMany eventActions ()

Return Value

HasMany

Product duplicate ()

Duplicate a Product along with all corresponding attributes

Return Value

Product New Duplicated Product

Relation slugs ()

Return Value

Relation

Relation inactiveSlugs ()

Return Value

Relation

Relation activeSlug ()

Return Value

Relation

bool validateSlugIsUnique (string $slug)

Parameters

string $slug

Return Value

bool

Exceptions

DuplicateValue

Builder getExistingSlugCheck (string $slug)

Parameters

string $slug

Return Value

Builder

string getRoutePath ()

Return Value

string

array getRouteParts ()

Return Value

array