You are here

simplenews_demo.install in Simplenews 8.2

Simplenews_demo base install file.

File

modules/simplenews_demo/simplenews_demo.install
View source
<?php

/**
 * @file
 * Simplenews_demo base install file.
 */
use Drupal\node\Entity\Node;
use Drupal\simplenews\Entity\Newsletter;
use Drupal\simplenews\Entity\Subscriber;
use Drupal\user\Entity\User;

/**
 * Implements hook_install().
 *
 * Declares initial configuration for simplenews_demo.
 */
function simplenews_demo_install() {
  \Drupal::service('router.builder')
    ->rebuild();

  // Set the default values for test_address, from_address and from_name.
  $site_mail = \Drupal::config('system.site')
    ->get('mail');
  $site_name = \Drupal::config('system.site')
    ->get('name');

  // Init the demo newsletter.
  $newsletters = Newsletter::loadMultiple();
  foreach ($newsletters as $newsletter) {
    $newsletter->from_name = $site_name;
    $newsletter->from_address = $site_mail;
    $newsletter
      ->save();
  }

  // Add subscriber fields to the form display.
  \Drupal::service('entity_display.repository')
    ->getFormDisplay('simplenews_subscriber', 'simplenews_subscriber')
    ->setComponent('field_first_name', [
    'type' => 'string_textfield',
    'weight' => '2',
    'settings' => [
      'size' => 60,
      'placeholder' => '',
    ],
    'third_party_settings' => [],
  ])
    ->setComponent('field_last_name', [
    'type' => 'string_textfield',
    'weight' => '3',
    'settings' => [
      'size' => 60,
      'placeholder' => '',
    ],
    'third_party_settings' => [],
  ])
    ->setComponent('field_city', [
    'type' => 'string_textfield',
    'weight' => '4',
    'settings' => [
      'size' => 60,
      'placeholder' => '',
    ],
    'third_party_settings' => [],
  ])
    ->save();

  /** @var \Drupal\simplenews\Subscription\SubscriptionManagerInterface $subscription_manager */
  $subscription_manager = \Drupal::service('simplenews.subscription_manager');

  // Create some subscribers.
  // Subscriber subscribed to only one newsletter.
  $subscription_manager
    ->subscribe('a@example.com', $newsletters['special_offers']
    ->id(), FALSE);
  $subscriber = Subscriber::loadByMail('a@example.com');

  // Add field data for subscriber.
  $subscriber
    ->set('field_first_name', 'Subscriber A first name');
  $subscriber
    ->set('field_last_name', 'Subscriber A last name');
  $subscriber
    ->set('field_city', 'Subscriber A city');
  $subscriber
    ->save();

  // Subscriber subscribed to all newsletters.
  $subscription_manager
    ->subscribe('b@example.com', $newsletters['special_offers']
    ->id(), FALSE);
  $subscription_manager
    ->subscribe('b@example.com', $newsletters['press_releases']
    ->id(), FALSE);
  $subscription_manager
    ->subscribe('b@example.com', $newsletters['weekly_content_update']
    ->id(), FALSE);

  // Add field data to subscriber.
  $subscriber = Subscriber::loadByMail('a@example.com');
  $subscriber
    ->set('field_first_name', 'Subscriber B first name');
  $subscriber
    ->save();

  // Unsubscribed subscriber.
  $subscription_manager
    ->subscribe('c@example.com', $newsletters['press_releases']
    ->id(), FALSE);
  $subscription_manager
    ->unsubscribe('c@example.com', $newsletters['press_releases']
    ->id(), FALSE);

  // Unconfirmed subscriber.
  $subscription_manager
    ->subscribe('d@example.com', $newsletters['special_offers']
    ->id(), TRUE);

  // Create an active demo user.
  $demo_user_active = User::create([
    'name' => 'demo user 1',
    'mail' => 'demouser1@example.com',
    'status' => TRUE,
  ]);
  $demo_user_active
    ->activate();
  $demo_user_active
    ->save();

  // Create a blocked demo user.
  $demo_user_blocked = User::create([
    'name' => 'demo user 2',
    'mail' => 'demouser2@example.com',
    'status' => FALSE,
  ]);
  $demo_user_blocked
    ->block();
  $demo_user_blocked
    ->save();

  // Create an inactive subscriber.
  $subscriber_inactive = Subscriber::create([
    'mail' => 'd@example.com',
    'status' => FALSE,
  ]);
  $subscriber_inactive
    ->save();

  // Subscribe user to both newsletters.
  $subscription_manager
    ->subscribe($demo_user_active
    ->getEmail(), $newsletters['press_releases']
    ->id(), FALSE);
  $subscription_manager
    ->subscribe($demo_user_active
    ->getEmail(), $newsletters['special_offers']
    ->id(), FALSE);

  // Create an issue for scheduled sending.
  // Disabled because of issue #3062330.
  // @codingStandardsIgnoreStart
  // $scheduled_issue = Node::create(array(
  //   'type' => 'simplenews_issue',
  //   'id' => 'simplenews_issue_scheduled',
  //   'title' => 'Scheduled weekly content newsletter issue',
  //   'body' => 'Scheduled weekly content newsletter issue will be sent to subscribers every week',
  //   'created' => time(),
  //   'uid' => 0,
  //   'status' => 1,
  //   'simplenews_issue' => array(
  //     'target_id' => 'weekly_content_update',
  //     'handler' => 'simplenews_all',
  //     'handler_settings' => array()
  //   ),
  // ));
  // $scheduled_issue->save();
  // // Write a record for the demo newsletter scheduler configuration.
  // $nid = $scheduled_issue->id();
  // $record = array(
  //   'nid' => $nid,
  //   'next_run' => strtotime('yesterday, 8:00 UTC'),
  //   'activated' => 1,
  //   'send_interval' => 'week',
  //   'interval_frequency' => 1,
  //   'start_date' => strtotime('yesterday, 8:00 UTC'),
  //   'stop_type' => 0,
  //   'stop_date' => 0,
  //   'stop_edition' => 0,
  //   'title' => '[node:title] - [node:created:custom:\W\e\e\k W,Y ]',
  // );
  // // Update scheduler record.
  // \Drupal::database()->merge('simplenews_scheduler')
  //   ->key(array(
  //     'nid' => $nid,
  //   ))
  //   ->fields($record)
  //   ->execute();
  // @codingStandardsIgnoreEnd
  // A newsletter to send.
  $spool_storage = \Drupal::service('simplenews.spool_storage');
  $node = Node::create([
    'type' => 'simplenews_issue',
    'id' => 'simplenews_issue_sent',
    'title' => 'Sent press releases',
    'body' => 'This press release is already sent to subscribers!',
    'uid' => 0,
    'status' => 1,
    'simplenews_issue' => [
      'target_id' => 'press_releases',
      'handler' => 'simplenews_all',
      'handler_settings' => [],
    ],
  ]);
  $node
    ->save();

  // Send the node.
  $spool_storage
    ->addIssue($node);

  // Send mails.
  \Drupal::service('simplenews.mailer')
    ->sendSpool();

  // Run cron.
  \Drupal::service('cron')
    ->run();

  // Update send status of newsletter issues.
  \Drupal::service('simplenews.mailer')
    ->updateSendStatus();

  // Create a newsletter issues with different send status.
  // Published newsletter, not yet sent.
  $node = Node::create([
    'type' => 'simplenews_issue',
    'id' => 'simplenews_issue_pending',
    'title' => 'Pending special offers',
    'body' => 'Grab them while you can, limited availability! These offers can often only be available for a short time, so take advantage of these special prices while you can.',
    'uid' => 0,
    'status' => 1,
    'simplenews_issue' => [
      'target_id' => 'special_offers',
      'handler' => 'simplenews_all',
      'handler_settings' => [],
    ],
  ]);
  $node
    ->save();
  $spool_storage
    ->addIssue($node);

  // Unpublished newsletter.
  $node = Node::create([
    'type' => 'simplenews_issue',
    'id' => 'simplenews_issue_unpublished',
    'title' => 'Unpublished press releases',
    'body' => 'Unpublished press releases body',
    'uid' => 0,
    'status' => 0,
    'simplenews_issue' => [
      'target_id' => 'press_releases',
      'handler' => 'simplenews_all',
      'handler_settings' => [],
    ],
  ]);
  $node
    ->save();
  $spool_storage
    ->addIssue($node);

  // Newsletter that is stopped sending.
  $node = Node::create([
    'type' => 'simplenews_issue',
    'id' => 'simplenews_issue_stopped',
    'title' => 'Stopped special offers',
    'body' => 'Upcoming special offers!',
    'uid' => 0,
    'status' => 1,
    'simplenews_issue' => [
      'target_id' => 'special_offers',
      'handler' => 'simplenews_all',
      'handler_settings' => [],
    ],
  ]);
  $node
    ->save();
}

Functions

Namesort descending Description
simplenews_demo_install Implements hook_install().