You are here

abstract class CommerceLicenseBase in Commerce License 7

License base class.

Remote license types should inherit CommerceLicenseRemoteBase instead.

Hierarchy

Expanded class hierarchy of CommerceLicenseBase

File

includes/plugins/license_type/base.inc, line 155
Abstract and interface plugin implementation.

View source
abstract class CommerceLicenseBase extends Entity implements CommerceLicenseInterface, EntityBundlePluginValidableInterface {

  /**
   * The license id.
   *
   * @var integer
   */
  public $license_id;

  /**
   * The revision id.
   *
   * @var integer
   */
  public $revision_id;

  /**
   * The license type (bundle).
   *
   * @var string
   */
  public $type;

  /**
   * The uid of the license owner.
   *
   * @var integer
   */
  public $uid;

  /**
   * The product_id of the licensed product.
   *
   * @var integer
   */
  public $product_id;

  /**
   * The license status.
   *
   * @var integer
   */
  public $status = COMMERCE_LICENSE_CREATED;

  /**
   * The date (unix timestamp) when the license was granted.
   *
   * @var integer
   */
  public $granted = 0;

  /**
   * The date (unix timestamp) when the license expires. 0 for never.
   *
   * @var integer
   */
  public $expires = 0;

  /**
   * Whether the module should expire the license automatically.
   *
   * If TRUE, the license that has expired according to its 'expires' timestamp
   * will be processed on cron and its status set to COMMERCE_LICENSE_EXPIRED.
   * If FALSE, the license will be left alone, usually because it is already
   * being handled by a recurring billing module.
   *
   * @var bool
   */
  public $expires_automatically = TRUE;

  /**
   * License metadata wrapper.
   *
   * @var EntityDrupalWrapper
   */
  public $wrapper;

  /**
   * Constructor.
   *
   * @see Entity::__construct()
   */
  public function __construct(array $values = array(), $entityType = NULL) {
    parent::__construct($values, 'commerce_license');
    $this->wrapper = entity_metadata_wrapper($this->entityType, $this);
  }

  /**
   * Implements EntityBundlePluginProvideFieldsInterface::fields().
   */
  static function fields() {
    $fields = array();
    $fields['num_renewals']['field'] = array(
      'type' => 'number_integer',
      'cardinality' => 1,
    );
    $fields['num_renewals']['instance'] = array(
      'label' => t('Number of renewals'),
    );
    return $fields;
  }

  /**
   * Implements CommerceLicenseInterface::accessDetails().
   */
  public function accessDetails() {
  }

  /**
   * Implements CommerceLicenseInterface::isConfigurable().
   */
  public function isConfigurable() {
    return FALSE;
  }

  /**
   * Implements CommerceLicenseInterface::form().
   */
  public function form(&$form, &$form_state) {
    field_attach_form('commerce_license', $this, $form, $form_state, LANGUAGE_NONE);

    // The num_renewals field should not be editable by the customer.
    $form['num_renewals']['#access'] = FALSE;
  }

  /**
   * Implements CommerceLicenseInterface::formValidate().
   */
  public function formValidate($form, &$form_state) {
    field_attach_form_validate('commerce_license', $this, $form, $form_state);
  }

  /**
   * Implements CommerceLicenseInterface::formSubmit().
   */
  public function formSubmit(&$form, $form_state) {
    field_attach_submit('commerce_license', $this, $form, $form_state);
  }

  /**
   * Implements CommerceLicenseInterface::checkoutCompletionMessage().
   */
  public function checkoutCompletionMessage() {
  }

  /**
   * Implements CommerceLicenseInterface::activate().
   */
  public function activate() {
    $this->status = COMMERCE_LICENSE_ACTIVE;
    $this
      ->save();
  }

  /**
   * Implements CommerceLicenseInterface::expire().
   */
  public function expire() {
    $this->status = COMMERCE_LICENSE_EXPIRED;
    $this
      ->save();
  }

  /**
   * Implements CommerceLicenseInterface::suspend().
   */
  public function suspend() {
    $this->status = COMMERCE_LICENSE_SUSPENDED;
    $this
      ->save();
  }

  /**
   * Implements CommerceLicenseInterface::revoke().
   */
  public function revoke() {
    $this->status = COMMERCE_LICENSE_REVOKED;
    $this
      ->save();
  }

  /**
   * Implements CommerceLicenseInterface::renew().
   */
  public function renew($expires) {
    $num_renewals = (int) $this->wrapper->num_renewals
      ->value();
    $this->wrapper->num_renewals = $num_renewals + 1;
    $this->expires = $expires;
    $this
      ->save();
  }

  /**
   * Overrides Entity::save().
   */
  public function save() {
    $granted = FALSE;
    if (!empty($this->license_id)) {
      $this->original = entity_load_unchanged('commerce_license', $this->license_id);
      if ($this->status > $this->original->status && $this->status == COMMERCE_LICENSE_ACTIVE) {

        // The license was updated, and its status was changed to active.
        $granted = TRUE;
      }
    }
    else {
      $this->wrapper->num_renewals = 0;
      if ($this->status == COMMERCE_LICENSE_ACTIVE) {

        // The license was created with an active status.
        $granted = TRUE;
      }
    }

    // The license was just activated, set the granted timestamp and calculate
    // the expiration timestamp. Only do that if the timestamps are currently
    // empty (they might be set already, for example during a migration).
    if ($granted && empty($this->granted)) {
      $this->granted = commerce_license_get_time();
      $duration = $this->wrapper->product->commerce_license_duration
        ->value();
      if ($duration > 0 && empty($this->expires)) {
        $this->expires = $this->granted + $duration;
      }
    }
    parent::save();
  }

  /**
   * Implements EntityBundlePluginValidableInterface::isValid().
   */
  public static function isValid() {
    return TRUE;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CommerceLicenseBase::$expires public property The date (unix timestamp) when the license expires. 0 for never.
CommerceLicenseBase::$expires_automatically public property Whether the module should expire the license automatically.
CommerceLicenseBase::$granted public property The date (unix timestamp) when the license was granted.
CommerceLicenseBase::$license_id public property The license id.
CommerceLicenseBase::$product_id public property The product_id of the licensed product.
CommerceLicenseBase::$revision_id public property The revision id.
CommerceLicenseBase::$status public property The license status.
CommerceLicenseBase::$type public property The license type (bundle).
CommerceLicenseBase::$uid public property The uid of the license owner.
CommerceLicenseBase::$wrapper public property License metadata wrapper. Overrides Entity::$wrapper
CommerceLicenseBase::accessDetails public function Implements CommerceLicenseInterface::accessDetails(). Overrides CommerceLicenseInterface::accessDetails 2
CommerceLicenseBase::activate public function Implements CommerceLicenseInterface::activate(). Overrides CommerceLicenseInterface::activate 1
CommerceLicenseBase::checkoutCompletionMessage public function Implements CommerceLicenseInterface::checkoutCompletionMessage(). Overrides CommerceLicenseInterface::checkoutCompletionMessage 2
CommerceLicenseBase::expire public function Implements CommerceLicenseInterface::expire(). Overrides CommerceLicenseInterface::expire 1
CommerceLicenseBase::fields static function Implements EntityBundlePluginProvideFieldsInterface::fields(). Overrides EntityBundlePluginProvideFieldsInterface::fields 2
CommerceLicenseBase::form public function Implements CommerceLicenseInterface::form(). Overrides CommerceLicenseInterface::form 1
CommerceLicenseBase::formSubmit public function Implements CommerceLicenseInterface::formSubmit(). Overrides CommerceLicenseInterface::formSubmit
CommerceLicenseBase::formValidate public function Implements CommerceLicenseInterface::formValidate(). Overrides CommerceLicenseInterface::formValidate 1
CommerceLicenseBase::isConfigurable public function Implements CommerceLicenseInterface::isConfigurable(). Overrides CommerceLicenseInterface::isConfigurable 3
CommerceLicenseBase::isValid public static function Implements EntityBundlePluginValidableInterface::isValid(). Overrides EntityBundlePluginValidableInterface::isValid 2
CommerceLicenseBase::renew public function Implements CommerceLicenseInterface::renew(). Overrides CommerceLicenseInterface::renew
CommerceLicenseBase::revoke public function Implements CommerceLicenseInterface::revoke(). Overrides CommerceLicenseInterface::revoke 1
CommerceLicenseBase::save public function Overrides Entity::save(). Overrides Entity::save 2
CommerceLicenseBase::suspend public function Implements CommerceLicenseInterface::suspend(). Overrides CommerceLicenseInterface::suspend 1
CommerceLicenseBase::__construct public function Constructor. Overrides Entity::__construct 2
Entity::$defaultLabel protected property 1
Entity::$entityInfo protected property
Entity::$entityType protected property
Entity::$idKey protected property
Entity::buildContent public function Builds a structured array representing the entity's content. Overrides EntityInterface::buildContent 1
Entity::bundle public function Returns the bundle of the entity. Overrides EntityInterface::bundle
Entity::defaultLabel protected function Defines the entity label if the 'entity_class_label' callback is used. 1
Entity::defaultUri protected function Override this in order to implement a custom default URI and specify 'entity_class_uri' as 'uri callback' hook_entity_info().
Entity::delete public function Permanently deletes the entity. Overrides EntityInterface::delete
Entity::entityInfo public function Returns the info of the type of the entity. Overrides EntityInterface::entityInfo
Entity::entityType public function Returns the type of the entity. Overrides EntityInterface::entityType
Entity::export public function Exports the entity. Overrides EntityInterface::export
Entity::getTranslation public function Gets the raw, translated value of a property or field. Overrides EntityInterface::getTranslation
Entity::hasStatus public function Checks if the entity has a certain exportable status. Overrides EntityInterface::hasStatus
Entity::identifier public function Returns the entity identifier, i.e. the entities name or numeric id. Overrides EntityInterface::identifier
Entity::internalIdentifier public function Returns the internal, numeric identifier. Overrides EntityInterface::internalIdentifier
Entity::isDefaultRevision public function Checks whether the entity is the default revision. Overrides EntityInterface::isDefaultRevision
Entity::label public function Returns the label of the entity. Overrides EntityInterface::label
Entity::setUp protected function Set up the object instance on construction or unserializiation.
Entity::uri public function Returns the uri of the entity just as entity_uri(). Overrides EntityInterface::uri
Entity::view public function Generate an array for rendering the entity. Overrides EntityInterface::view
Entity::wrapper public function Returns the EntityMetadataWrapper of the entity. Overrides EntityInterface::wrapper
Entity::__sleep public function Magic method to only serialize what's necessary.
Entity::__wakeup public function Magic method to invoke setUp() on unserialization.