simplenews_demo.install in Simplenews 8.2
Same filename and directory in other branches
Simplenews_demo base install file.
File
modules/simplenews_demo/simplenews_demo.installView 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
Name | Description |
---|---|
simplenews_demo_install | Implements hook_install(). |