class RenewRole in Ubercart 8.4
Provides a 'Renew role' action.
Plugin annotation
@RulesAction(
id = "uc_role_order_renew",
label = @Translation("Renew the roles on an order"),
category = @Translation("Renewal"),
context_definitions = {
"order" = @ContextDefinition("entity:uc_order",
label = @Translation("Order")
),
"message" = @ContextDefinition("boolean",
label = @Translation("Display messages to alert users of any new or updated roles."),
list_options_callback = "booleanOptions"
)
}
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Component\Plugin\ContextAwarePluginBase implements ContextAwarePluginInterface
- class \Drupal\Core\Plugin\ContextAwarePluginBase implements CacheableDependencyInterface, ContextAwarePluginInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\rules\Core\RulesActionBase implements RulesActionInterface uses ContextProviderTrait, ConfigurationAccessControlTrait, ExecutablePluginTrait
- class \Drupal\uc_role\Plugin\RulesAction\RenewRole implements ContainerFactoryPluginInterface
- class \Drupal\rules\Core\RulesActionBase implements RulesActionInterface uses ContextProviderTrait, ConfigurationAccessControlTrait, ExecutablePluginTrait
- class \Drupal\Core\Plugin\ContextAwarePluginBase implements CacheableDependencyInterface, ContextAwarePluginInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\Component\Plugin\ContextAwarePluginBase implements ContextAwarePluginInterface
Expanded class hierarchy of RenewRole
File
- uc_role/
src/ Plugin/ RulesAction/ RenewRole.php, line 32
Namespace
Drupal\uc_role\Plugin\RulesActionView source
class RenewRole extends RulesActionBase implements ContainerFactoryPluginInterface {
/**
* The database service.
*
* @var \Drupal\Core\Database\Connection
*/
protected $database;
/**
* The database service.
*
* @var \Symfony\Component\EventDispatcher\EventDispatcherInterface
*/
protected $eventDispatcher;
/**
* Constructs a RenewRole object.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin ID for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Database\Connection $database
* The database service.
* @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $eventDispatcher
* The event_dispatcher service.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, Connection $database, EventDispatcherInterface $eventDispatcher) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->database = $database;
$this->eventDispatcher = $eventDispatcher;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('database'), $container
->get('event_dispatcher'));
}
/**
* Returns a TRUE/FALSE option set for boolean types.
*
* @return array
* A TRUE/FALSE options array.
*/
public function booleanOptions() {
return [
0 => $this
->t('False'),
1 => $this
->t('True'),
];
}
/**
* Calculates the expiration time using a role_product object.
*
* @param $role_product
* The role product object whose expiration times to calculate.
* @param int $quantity
* Used to multiply any relative expiration time, if the $role_product
* says to.
* @param int $time
* The current time to use as a starting point for relative expiration
* calculation.
*
* @return int
* The expiration time as a Unix timestamp.
*/
protected function getExpiration($role_product, $quantity, $time) {
// Override the end expiration?
if ($role_product->end_override) {
// Absolute times are easy...
if ($role_product->end_time) {
return $role_product->end_time;
}
// We're gonna have to calculate the relative time from $time.
$length = $role_product->duration * ($role_product->by_quantity ? $quantity : 1);
return _uc_role_get_expiration($length, $role_product->granularity, $time);
}
else {
// Relative...
$roles_config = \Drupal::config('uc_role.settings');
if ($roles_config
->get('default_end_expiration') === 'rel') {
$length = $roles_config
->get('default_length') * ($role_product->by_quantity ? $quantity : 1);
return _uc_role_get_expiration($length, $roles_config
->get('default_granularity'), $time);
}
// Absolute...
$end_time = $roles_config
->get('default_end_time');
if ($end_time) {
$end_time = mktime(0, 0, 0, $end_time['month'], $end_time['day'], $end_time['year']);
}
return $end_time;
}
}
/**
* Renews an order's product roles.
*
* This function updates expiration time on all roles found on all products
* on a given order. First the order user is loaded, then the order's products
* are scanned for role product features. If any are found the expiration time
* of the role is set using the feature settings to determine the new length
* of time the new expiration will last. An order comment is saved, and the
* user is notified in Drupal as well as through the email address associated
* with the order.
*
* @param \Drupal\uc_order\OrderInterface $order
* The order object.
* @param bool $message
* If TRUE, messages will be displayed to the user about the renewal.
*/
protected function doExecute(OrderInterface $order, $message) {
// Load the order's user and exit if not available.
if (!($account = $order
->getOwner())) {
return;
}
// Loop through all the products on the order.
foreach ($order->products as $product) {
// Look for any role promotion features assigned to the product.
$roles = $this->database
->query('SELECT * FROM {uc_roles_products} WHERE nid = :nid', [
':nid' => $product->nid,
]);
foreach ($roles as $role) {
// Product model matches, or was 'any'.
if (!empty($role->model) && $role->model != $product->model) {
continue;
}
$existing_role = $this->database
->query('SELECT * FROM {uc_roles_expirations} WHERE uid = :uid AND rid = :rid', [
':uid' => $account
->id(),
':rid' => $role->rid,
])
->fetchObject();
// Determine the expiration timestamp for the role.
$expiration = $this
->getExpiration($role, $product->qty, isset($existing_role->expiration) ? $existing_role->expiration : NULL);
// Leave an order comment.
if (isset($existing_role->expiration)) {
$op = 'renew';
$comment = $this
->t('Customer user role %role renewed.', [
'%role' => _uc_role_get_name($role->rid),
]);
// Renew the user's role.
uc_role_renew($account, $role->rid, $expiration, !$message);
}
else {
$op = 'grant';
$comment = $this
->t('Customer granted user role %role.', [
'%role' => _uc_role_get_name($role->rid),
]);
// Grant the role to the user.
uc_role_grant($account, $role->rid, $expiration, TRUE, !$message);
}
// Get the new expiration (if applicable).
$new_expiration = $this->database
->query('SELECT * FROM {uc_roles_expirations} WHERE uid = :uid AND rid = :rid', [
':uid' => $account
->id(),
':rid' => $role->rid,
])
->fetchObject();
if (!$new_expiration) {
$new_expiration = new \stdClass();
$new_expiration->uid = $account->uid;
$new_expiration->rid = $role->rid;
$new_expiration->expiration = NULL;
}
uc_order_comment_save($order
->id(), $account
->id(), $comment);
// Trigger role email.
/* rules_invoke_event('uc_role_notify_' . $op, $order, $new_expiration); */
if ($op == 'grant') {
$event = new NotifyGrantEvent($order, $new_expiration);
}
elseif ($op == 'renew') {
$event = new NotifyRenewEvent($order, $new_expiration);
}
$this->eventDispatcher
->dispatch($event::EVENT_NAME, $event);
}
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ConfigurationAccessControlTrait:: |
public | function | Checks configuration permission. | |
ContextAwarePluginBase:: |
protected | property | The data objects representing the context of this plugin. | |
ContextAwarePluginBase:: |
private | property | Data objects representing the contexts passed in the plugin configuration. | |
ContextAwarePluginBase:: |
protected | function | Wraps the context handler. | |
ContextAwarePluginBase:: |
protected | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
The cache contexts associated with this object. Overrides CacheableDependencyInterface:: |
9 |
ContextAwarePluginBase:: |
public | function |
The maximum age for which this object may be cached. Overrides CacheableDependencyInterface:: |
7 |
ContextAwarePluginBase:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyInterface:: |
4 |
ContextAwarePluginBase:: |
public | function |
This code is identical to the Component in order to pick up a different
Context class. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Gets a mapping of the expected assignment names to their context names. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the values for all defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Set a context on this plugin. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Sets a mapping of the expected assignment names to their context names. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Sets the value for a defined context. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Validates the set values for the defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function | Implements magic __get() method. | |
ContextProviderTrait:: |
protected | property | The data objects that are provided by this plugin. | |
ContextProviderTrait:: |
public | function | ||
ContextProviderTrait:: |
public | function | ||
ContextProviderTrait:: |
public | function | ||
ContextProviderTrait:: |
public | function | ||
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
ExecutablePluginTrait:: |
protected | function | Get the translated label from the plugin definition. | |
ExecutablePluginTrait:: |
public | function | Get the translated summary from the label annotation. | 4 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
RenewRole:: |
protected | property | The database service. | |
RenewRole:: |
protected | property | The database service. | |
RenewRole:: |
public | function | Returns a TRUE/FALSE option set for boolean types. | |
RenewRole:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
RenewRole:: |
protected | function | Renews an order's product roles. | |
RenewRole:: |
protected | function | Calculates the expiration time using a role_product object. | |
RenewRole:: |
public | function |
Constructs a RenewRole object. Overrides ContextAwarePluginBase:: |
|
RulesActionBase:: |
protected | property |
The plugin configuration. Overrides PluginBase:: |
|
RulesActionBase:: |
public | function |
Checks object access. Overrides RulesActionInterface:: |
|
RulesActionBase:: |
public | function |
Asserts additional metadata for the selected data. Overrides ContextAwarePluginInterface:: |
|
RulesActionBase:: |
public | function |
Returns a list of context names that should be auto-saved after execution. Overrides RulesActionInterface:: |
14 |
RulesActionBase:: |
public | function | @todo this documentation is not actually inherited from any interface. Do we need this empty implementation? | |
RulesActionBase:: |
public | function | @todo this documentation is not actually inherited from any interface. Do we need this empty implementation? | |
RulesActionBase:: |
public | function |
Executes the plugin. Overrides ExecutableInterface:: |
2 |
RulesActionBase:: |
public | function | @todo this documentation is not actually inherited from any interface. Do we need this empty implementation? | |
RulesActionBase:: |
public | function | @todo this documentation is not actually inherited from any interface. | |
RulesActionBase:: |
public | function |
Gets the value for a defined context. Overrides ContextAwarePluginBase:: |
|
RulesActionBase:: |
public | function |
Refines used and provided context definitions based upon context values. Overrides ContextAwarePluginInterface:: |
5 |
RulesActionBase:: |
public | function | @todo this documentation is not actually inherited from any interface. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
TypedDataTrait:: |
protected | property | The typed data manager used for creating the data types. | |
TypedDataTrait:: |
public | function | Gets the typed data manager. | 2 |
TypedDataTrait:: |
public | function | Sets the typed data manager. | 2 |