LLMS_Helper_Add_On
Source Source
File: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php
class LLMS_Helper_Add_On extends LLMS_Add_On {
/**
* Find a license key for the add-on
*
* @since 3.0.0
* @since 3.2.0 Use strict comparison for `in_array()`.
* @since 3.2.1 Use `requires_license()` rather than checking the add-on's `has_license` prop directly.
*
* @return string|false
*/
public function find_license() {
/**
* If the addon doesn't require a license return the first found license to ensure
* that the core can be updated via a license when subscribed to a beta channel
* and that the helper can always be upgraded.
*/
$requires_license = $this->requires_license();
$id = $this->get( 'id' );
foreach ( llms_helper_options()->get_license_keys() as $data ) {
/**
* 1. If license is not required, return the first license found.
* 2. If the addon matches the licensed product
* 3. If the addon is included in the licensed bundle product.
*/
if ( ! $requires_license || $id === $data['product_id'] || in_array( $id, $data['addons'], true ) ) {
return $data;
}
}
return false;
}
/**
* Retrieve the update channel for the addon
*
* @since 3.0.0
*
* @return string
*/
public function get_channel_subscription() {
$channels = llms_helper_options()->get_channels();
return isset( $channels[ $this->get( 'id' ) ] ) ? $channels[ $this->get( 'id' ) ] : 'stable';
}
/**
* Retrieve download information for an add-on
*
* @since 3.0.0
* @since 3.2.1 Allow getting download info for add-ons which do not require licenses.
* @since 3.4.0 Use core textdomain.
*
* @return WP_Error|array
*/
public function get_download_info() {
$key = $this->find_license();
if ( $this->requires_license() && ! $key ) {
return new WP_Error( 'no_license', __( 'Unable to locate a license key for the selected add-on.', 'lifterlms' ) );
}
$args = array(
'url' => get_site_url(),
'add_on_slug' => $this->get( 'slug' ),
'channel' => $this->get_channel_subscription(),
);
if ( $key ) {
$args['license_key'] = $key['license_key'];
$args['update_key'] = $key['update_key'];
}
$req = new LLMS_Dot_Com_API(
'/license/download',
$args
);
$data = $req->get_result();
if ( $req->is_error() ) {
return $data;
}
return $data;
}
/**
* Translate strings
*
* @since 3.0.0
* @since 3.4.0 Use core textdomain.
*
* @param string $string Untranslated string / key.
* @return string
*/
public function get_l10n( $string ) {
$strings = array(
'active' => __( 'Active', 'lifterlms' ),
'inactive' => __( 'Inactive', 'lifterlms' ),
'installed' => __( 'Installed', 'lifterlms' ),
'uninstalled' => __( 'Not Installed', 'lifterlms' ),
'activate' => __( 'Activate', 'lifterlms' ),
'deactivate' => __( 'Deactivate', 'lifterlms' ),
'install' => __( 'Install', 'lifterlms' ),
'none' => __( 'N/A', 'lifterlms' ),
'license_active' => __( 'Licensed', 'lifterlms' ),
'license_inactive' => __( 'Unlicensed', 'lifterlms' ),
);
return $strings[ $string ];
}
/**
* Determine the status of an addon's license
*
* @since 3.0.0
* @since 3.2.1 Use `requires_license()` instead of checking `has_license` prop directly.
*
* @param bool $translate If true, returns the translated string for on-screen display.
* @return string
*/
public function get_license_status( $translate = false ) {
if ( ! $this->requires_license() ) {
$ret = 'none';
} else {
$ret = $this->is_licensed() ? 'license_active' : 'license_inactive';
}
return $translate ? $this->get_l10n( $ret ) : $ret;
}
/**
* Install the add-on via LifterLMS.com
*
* @since 3.0.0
* @since 3.4.0 Use core textdomain.
*
* @return string|WP_Error
*/
public function install() {
$ret = LLMS_Helper()->upgrader()->install_addon( $this );
if ( true === $ret ) {
/* Translators: %s = Add-on name */
return sprintf( __( '%s was successfully installed.', 'lifterlms' ), $this->get( 'title' ) );
} elseif ( is_wp_error( $ret ) ) {
return $ret;
}
/* Translators: %s = Add-on name */
return new WP_Error( 'activation', sprintf( __( 'Could not install %s.', 'lifterlms' ), $this->get( 'title' ) ) );
}
/**
* Determines if the add-on is licensed
*
* @since 3.0.0
*
* @return bool
*/
public function is_licensed() {
return ( false !== $this->find_license() );
}
/**
* Determines if the add-on requires a license
*
* @since 3.2.1
*
* @return bool
*/
public function requires_license() {
return llms_parse_bool( $this->get( 'has_license' ) );
}
/**
* Update the addons update channel subscription
*
* @since 3.0.0
*
* @param string $channel Channel name [stable|beta].
* @return boolean
*/
public function subscribe_to_channel( $channel = 'stable' ) {
$channels = llms_helper_options()->get_channels();
$channels[ $this->get( 'id' ) ] = $channel;
return llms_helper_options()->set_channels( $channels );
}
/**
* Install the add-on via LifterLMS.com
*
* @since 3.0.0
* @since 3.4.0 Use core textdomain.
*
* @return string|WP_Error
*/
public function update() {
$ret = LLMS_Helper()->upgrader()->install_addon( $this, 'update' );
if ( true === $ret ) {
/* Translators: %s = Add-on name */
return sprintf( __( '%s was successfully updated.', 'lifterlms' ), $this->get( 'title' ) );
} elseif ( is_wp_error( $ret ) ) {
return $ret;
}
/* Translators: %s = Add-on name */
return new WP_Error( 'activation', sprintf( __( 'Could not update %s.', 'lifterlms' ), $this->get( 'title' ) ) );
}
}
Expand full source code Collapse full source code View on GitHub
Methods Methods
- find_license — Find a license key for the add-on
- get_channel_subscription — Retrieve the update channel for the addon
- get_download_info — Retrieve download information for an add-on
- get_l10n — Translate strings
- get_license_status — Determine the status of an addon's license
- install — Install the add-on via LifterLMS.com
- is_licensed — Determines if the add-on is licensed
- requires_license — Determines if the add-on requires a license
- subscribe_to_channel — Update the addons update channel subscription
- update — Install the add-on via LifterLMS.com
Changelog Changelog
| Version | Description |
|---|---|
| 3.2.0 | Moved from includes/model-llms-helper-add-on.php. |
| 3.0.0 | Introduced. |