Skip to content
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
1 change: 1 addition & 0 deletions modules/membership_term/membership_term.info.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ type: module
description: Membership Term plugin for basic membership systems
core: 8.x
package: Membership
project: Membership
dependencies:
- membership
7 changes: 7 additions & 0 deletions modules/membership_term/membership_term.services.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
services:
membership_term_subscriber:
class: Drupal\membership_term\EventSubscriber\MembershipSubscriber
arguments: ['@membership.manager']
tags:
- { name: event_subscriber }

105 changes: 39 additions & 66 deletions modules/membership_term/src/Entity/MembershipTerm.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Drupal\Core\Entity\ContentEntityBase;
use Drupal\Core\Entity\EntityChangedTrait;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\membership\Entity\MembershipInterface;
use Drupal\membership\Entity\MembershipTermInterface;
use Drupal\membership\EventDispatcherTrait;
use Drupal\user\UserInterface;
Expand Down Expand Up @@ -38,7 +39,6 @@
* entity_keys = {
* "id" = "id",
* "bundle" = "type",
* "label" = "name",
* "uuid" = "uuid",
* "uid" = "user_id",
* "langcode" = "langcode",
Expand All @@ -56,33 +56,39 @@ class MembershipTerm extends ContentEntityBase implements MembershipTermInterfac
/**
* {@inheritdoc}
*/
public static function preCreate(EntityStorageInterface $storage_controller, array &$values) {
parent::preCreate($storage_controller, $values);
$values += array(
'user_id' => \Drupal::currentUser()->id(),
);
public function getMembership() {
return $this->get('membership_id')->entity;
}

/**
* {@inheritdoc}
*/
public function getType() {
return $this->bundle();
public function setMembership(MembershipInterface $membership) {
$this->set('membership_id', $membership->id());
return $this;
}
/**
* {@inheritdoc}
*/
public function getMembershipId() {
return $this->get('membership_id')->target_id;
}

/**
* {@inheritdoc}
*/
public function getName() {
return $this->get('name')->value;
public static function preCreate(EntityStorageInterface $storage_controller, array &$values) {
parent::preCreate($storage_controller, $values);
$values += array(
'user_id' => \Drupal::currentUser()->id(),
);
}

/**
* {@inheritdoc}
*/
public function setName($name) {
$this->set('name', $name);
return $this;
public function getType() {
return $this->bundle();
}

/**
Expand Down Expand Up @@ -130,19 +136,8 @@ public function setOwner(UserInterface $account) {
return $this;
}

/**
* {@inheritdoc}
*/
public function isPublished() {
return (bool) $this->getEntityKey('status');
}

/**
* {@inheritdoc}
*/
public function setPublished($published) {
$this->set('status', $published ? TRUE : FALSE);
return $this;
public function getWorkflowState() {
return $this->get('state')->value;
}

/**
Expand All @@ -151,9 +146,16 @@ public function setPublished($published) {
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
$fields = parent::baseFieldDefinitions($entity_type);

// The membership backreference, populated by Membership::postSave().
$fields['membership_id'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Membership'))
->setDescription(t('The parent membership.'))
->setSetting('target_type', 'membership')
->setReadOnly(TRUE);

$fields['user_id'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Authored by'))
->setDescription(t('The user ID of author of the Membership term entity entity.'))
->setLabel(t('Created by'))
->setDescription(t('The user ID of the creator of the Membership term entity.'))
->setRevisionable(TRUE)
->setSetting('target_type', 'user')
->setSetting('handler', 'default')
Expand All @@ -176,31 +178,6 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);

$fields['name'] = BaseFieldDefinition::create('string')
->setLabel(t('Name'))
->setDescription(t('The name of the Membership term entity.'))
->setSettings(array(
'max_length' => 50,
'text_processing' => 0,
))
->setDefaultValue('')
->setDisplayOptions('view', array(
'label' => 'above',
'type' => 'string',
'weight' => -4,
))
->setDisplayOptions('form', array(
'type' => 'string_textfield',
'weight' => -4,
))
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);

$fields['status'] = BaseFieldDefinition::create('boolean')
->setLabel(t('Publishing status'))
->setDescription(t('A boolean indicating whether the Membership term is published.'))
->setDefaultValue(TRUE);

$fields['created'] = BaseFieldDefinition::create('created')
->setLabel(t('Created'))
->setDescription(t('The time that the entity was created.'));
Expand All @@ -219,26 +196,22 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
'type' => 'list_default',
'weight' => 0,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('form', FALSE)
->setDisplayConfigurable('view', TRUE)
->setRevisionable(TRUE)
->setSetting('workflow_callback', ['\Drupal\membership_term\Entity\MembershipTerm', 'getWorkflowId']);

$fields['membership'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Membership'))
->setDescription(t('The Membership associated with this term.'))
->setRevisionable(TRUE)
->setSetting('target_type', 'membership')
->setTranslatable(TRUE)
->setDisplayOptions('form', array(
'type' => 'options_select',
'weight' => 1,
))
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
return $fields;
}

/**
* @inheritdoc
*/
function preSave(EntityStorageInterface $storage) {
parent::preSave($storage);
}


public function getMembershipType() {
return 'membership';
}
Expand Down
31 changes: 31 additions & 0 deletions modules/membership_term/src/Entity/MembershipTermType.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,10 @@
* "label",
* "id",
* "membership_type",
* "term_length",
* "grace_period",
* "workflow",
* "term_length",
* },
* links = {
* "canonical" = "/admin/structure/membership_term_type/membership_term_type/{membership_term_type}",
Expand All @@ -61,6 +64,20 @@ class MembershipTermType extends ConfigEntityBundleBase implements MembershipTer
*/
protected $label;

/**
* Term length for this membership term type.
*
* @var string
*/
protected $term_length;

/**
* Grace period after term expires, before membership is revoked.
*
* @var string
*/
protected $grace_period;

/**
* The membership term workflow ID.
*
Expand Down Expand Up @@ -90,6 +107,20 @@ public function setMembershipType($membership_type) {
return $this;
}

/**
* @inheritdoc
*/
public function getTermLength() {
return $this->term_length;
}

/**
* @inheritdoc
*/
public function getGracePeriod() {
return $this->grace_period;
}

/**
* @inheritdoc
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php

namespace Drupal\membership_term\EventSubscriber;

use Drupal\membership\Entity\MembershipTermInterface;
use Drupal\membership\Event\MembershipEvent;
use Drupal\membership\Event\MembershipEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Drupal\membership\MembershipManagerService;

/**
* Class MembershipSubscriber.
*
* @package Drupal\membership_term
*/
class MembershipSubscriber implements EventSubscriberInterface {

/**
* Drupal\membership\MembershipManagerService definition.
*
* @var \Drupal\membership\MembershipManagerService
*/
protected $membershipManager;

/**
* Constructor.
*/
public function __construct(MembershipManagerService $membership_manager) {
$this->membershipManager = $membership_manager;
}

/**
* {@inheritdoc}
*/
static function getSubscribedEvents() {
$events[MembershipEvents::UPDATED][] = ['onUpdate'];
return $events;
}

/**
* Update event handler.
*
* @param \Drupal\membership\Event\MembershipEvent $event
*/
public function onUpdate(MembershipEvent $event) {
$membership = $event->getMembership();

// Ensure there are back references on terms
/** @var MembershipTermInterface $term */
foreach ($membership->get('field_membership_term')->referencedEntities() as $term) {
if (!$term->getMembership()) {
$term->setMembership($membership);
$term->save();
}
}
}


}
19 changes: 17 additions & 2 deletions modules/membership_term/src/Form/MembershipTermTypeForm.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,21 +49,36 @@ public function form(array $form, FormStateInterface $form_state) {
'#type' => 'machine_name',
'#default_value' => $membership_term_type->id(),
'#machine_name' => [
'exists' => '\Drupal\membership\Entity\MembershipTermType::load',
'exists' => '\Drupal\membership_term\Entity\MembershipTermType::load',
],
'#disabled' => !$membership_term_type->isNew(),
];

$form['membership_type'] = [
'#type' => 'select',
'#title' => t('Membership Type'),
'#title' => $this->t('Membership Type'),
'#options' => $membership_types,
'#default_value' => $membership_term_type->getMembershipType(),
'#description' => $this->t('Used by all membership terms of this type.'),
'#required' => true,
];

$form['term_length'] = [
'#type' => 'textfield',
'#title' => $this->t('Membership Term Length'),
'#maxlength' => 50,
'#default_value' => $membership_term_type->getTermLength(),
'#description' => $this->t('Length of active membership defined by this membership term. Set to 0 for lifetime.'),
'#required' => true,
];

$form['grace_period'] = [
'#type' => 'textfield',
'#title' => $this->t('Grace Period'),
'#maxlength' => 50,
'#default_value' => $membership_term_type->getGracePeriod(),
'#description' => $this->t('Revoke membership privileges how long after "official" expiration? Use strtotime modifiers -- e.g. "+1 day", "+2 months". Sets the "revoke_date" field. Leave blank to use the actual expiration date.'),
];

$form['workflow'] = [
'#type' => 'select',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ protected function checkAccess(EntityInterface $entity, $operation, AccountInter
/** @var \Drupal\membership_term\Entity\MembershipTermInterface $entity */
switch ($operation) {
case 'view':
if (!$entity->isPublished()) {
// if (!$entity->isPublished()) {
return AccessResult::allowedIfHasPermission($account, 'view unpublished membership term entities');
}
// }
return AccessResult::allowedIfHasPermission($account, 'view published membership term entities');

case 'update':
Expand Down
Loading