Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Membership term updates #19

Open
wants to merge 2 commits into
base: 8.x-1.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions modules/membership_term/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@


## Reminder emails

Reminders are created using the Message module, and sent via Message Notify.

Reminders use a compound field consisting of:

1. Message template to send
2. Message term date to use
3. # of day offset from this date to schedule message
4. Term state(s) when message should be queued.

Message entities are created when the membership term is created or updated:

### Term creation:

Loop through all reminders:
- Create message entity from template
- Associate membership_term
- Set state_machine state to "pending"
- Set date to send message

### Term update:

Load all messages for term
Loop through all reminders:
- If reminder is still relevant and message exists, update message.
- If message does not exist, create message as above.
- If unsent message is no longer relevant, delete.

### Term type update:

Queue an update for all terms of type.

### Date arrives

Cron job transitions all "pending" messages with past date to "queued" and queues messages.

Queue worker sends messages and sets state to "sent"
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,16 @@ membership.membership_term_type.*:
membership_type:
type: string
label: "Membership Type"
messages:
type: sequence
sequence:
type: mapping
mapping:
id:
type: string
data:
type: field.scheduled_message.[%parent.id]
weight:
type: integer
uuid:
type: string
2 changes: 2 additions & 0 deletions modules/membership_term/membership_term.info.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,7 @@ type: module
description: Membership Term plugin for basic membership systems
core: 8.x
package: Membership
project: Membership
dependencies:
- membership
- scheduled_message
13 changes: 13 additions & 0 deletions modules/membership_term/membership_term.module
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,16 @@ function membership_theme_suggestions_membership_term(array $variables) {
$suggestions[] = 'membership_term__' . $entity->id() . '__' . $sanitized_view_mode;
return $suggestions;
}


/**
* Implements hook_cron().
*/
function membership_term_cron() {
$last_run = \Drupal::state()->get('membership_term_cron_last', strtotime('yesterday'));
if ($last_run + 7200 < time()) {
\Drupal::service('membership_term.manager')->expireTerms();
\Drupal::state()->set('membership_term_cron_last', time());
}
}

23 changes: 23 additions & 0 deletions modules/membership_term/membership_term.services.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
services:
membership_term_subscriber:
class: Drupal\membership_term\EventSubscriber\MembershipSubscriber
arguments: ['@membership.manager', '@logger.factory']
tags:
- { name: event_subscriber }

membership_term.term_subscriber:
class: Drupal\membership_term\EventSubscriber\MembershipTermSubscriber
arguments: ['@membership.manager', '@logger.factory', '@membership_term.manager', '@entity_type.manager']
tags:
- { name: event_subscriber }

membership_term.manager:
class: Drupal\membership_term\MembershipTermManager
arguments: ['@entity_type.manager']

membership_term.term_guard:
class: Drupal\membership_term\Guard\MembershipTermGuard
arguments: []
tags:
- { name: state_machine.guard, group: membership_term }

16 changes: 9 additions & 7 deletions modules/membership_term/membership_term.workflows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,22 @@ membership_term_default:
label: Expiring
expired:
label: Expired
renewed:
label: Renewed
transitions:
activate:
label: Activate
from: [pending,expiring]
from: [pending]
to: active
expiring:
label: About to Expire
from: [active]
to: expiring
expire:
label: Expire
from: [expiring,active]
from: [pending,expiring,active]
to: expired
restart:
label: Restart
from: [expired]
to: active
to: renewed
replace:
label: Renew
from: [active,expiring]
to: renewed
Loading