/**
  * Renew this license.
  *
  * @since 1.0
  *
  * @param \IT_Exchange_Transaction $transaction
  *
  * @return Renewal
  */
 public function renew(\IT_Exchange_Transaction $transaction = null)
 {
     if (!$this->is_renewable()) {
         throw new \UnexpectedValueException(__("You can't renew a license key that doesn't expire.", Plugin::SLUG));
     }
     if ($transaction === null) {
         $date = null;
     } else {
         $date = make_date_time($transaction->post_date_gmt);
     }
     $record = Renewal::create($this, $transaction, $this->get_expires(), $date);
     $this->extend();
     $now = make_date_time();
     if ($this->get_expires() > $now) {
         $this->set_status(self::ACTIVE);
     }
     /**
      * Fires when a license key is renewed.
      *
      * @since 1.0
      *
      * @param Key $this
      */
     do_action('itelic_renew_key', $this);
     return $record;
 }
/**
 * Create a renewal record.
 *
 * @api
 *
 * @since 1.0
 *
 * @param array $args
 *
 * @return \ITELIC\Renewal|WP_Error
 */
function itelic_create_renewal($args)
{
    $defaults = array('key' => '', 'transaction' => '', 'expired' => '', 'renewal' => '');
    $args = ITUtility::merge_defaults($args, $defaults);
    if (is_string($args['key'])) {
        $key = itelic_get_key($args['key']);
    } else {
        $key = $args['key'];
    }
    if (!$key) {
        return new WP_Error('invalid_key', __("Invalid Key", \ITELIC\Plugin::SLUG));
    }
    if (!empty($args['transaction'])) {
        $transaction = it_exchange_get_transaction($args['transaction']);
        if (!$transaction) {
            return new WP_Error('invalid_transaction', __("Invalid transaction.", \ITELIC\Plugin::SLUG));
        }
    } else {
        $transaction = null;
    }
    $expired = is_string($args['expired']) ? \ITELIC\make_date_time($args['expired']) : $args['expired'];
    if (!$expired instanceof DateTime) {
        return new WP_Error('invalid_expiration', __("Invalid expiration date.", \ITELIC\Plugin::SLUG));
    }
    if (!empty($args['renewal'])) {
        $renewal = is_string($args['renewal']) ? \ITELIC\make_date_time($args['renewal']) : $args['renewal'];
        if (!$renewal instanceof DateTime) {
            return new WP_Error("invalid_renewal", __("Invalid renewal date.", \ITELIC\Plugin::SLUG));
        }
    } else {
        $renewal = null;
    }
    return \ITELIC\Renewal::create($key, $transaction, $expired, $renewal);
}
 /**
  * Get data to display for a single object.
  *
  * @param \ITELIC\Renewal $object
  * @param bool            $raw
  *
  * @return array
  */
 protected function get_fields_for_object(\ITELIC\Renewal $object, $raw = false)
 {
     if ($object->get_transaction()) {
         $transaction = it_exchange_get_transaction_order_number($object->get_transaction());
     } else {
         $transaction = 'Manual';
     }
     return array('id' => $object->get_pk(), 'key' => $object->get_key()->get_key(), 'renewal_date' => $object->get_renewal_date()->format(DateTime::ISO8601), 'expired_date' => $object->get_key_expired_date()->format(DateTime::ISO8601), 'transaction' => $transaction, 'revenue' => $object->get_revenue(!$raw));
 }