-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathserial.module
112 lines (101 loc) · 3.04 KB
/
serial.module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
/**
* @file
* The Serial module main file.
*/
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\field\Entity\FieldConfig;
use Drupal\node\Entity\Node;
use Drupal\serial\SerialStorageInterface;
/**
* Implements hook_help().
*/
function serial_help($route_name, RouteMatchInterface $route_match) {
switch ($route_name) {
case 'help.page.serial':
$output = '';
$output .= '<h3>' . t('About') . '</h3>';
$output .= '<p>' . t('Defines serial field type.') . '</p>';
return $output;
}
}
/**
* Implements hook_ENTITY_TYPE_create().
*
* @inheritdoc
*/
function serial_field_config_create(FieldConfig $field) {
if ($field->getType() == 'serial' && !$field->isSyncing() && !$field->isDeleted()) {
// Create the assistant storage.
/** @var SerialStorageInterface $serialStorage */
$serialStorage = \Drupal::getContainer()->get('serial.sql_storage');
$storageName = $serialStorage->createStorageName(
$field->getTargetEntityTypeId(),
$field->getTargetBundle(),
$field->getFieldStorageDefinition()->getName()
);
$serialStorage->createStorageFromName($storageName);
// Commit the change before setting values for existing entities.
$field->save();
// Set serial values for existing entities.
$oldCount = $serialStorage->initOldEntries(
$field->getTargetEntityTypeId(),
$field->getTargetBundle(),
$field->getFieldStorageDefinition()->getName()
);
if ($oldCount > 0) {
drupal_set_message(t('Serial values have been automatically set for %count existing entities.', array(
'%count' => $oldCount,
)));
}
}
}
/**
* Implements hook_ENTITY_TYPE_delete().
*
* @inheritdoc
*/
function serial_field_config_delete(FieldConfig $field) {
if ($field->getType() == 'serial') {
$serialStorage = \Drupal::getContainer()->get('serial.sql_storage');
$storageName = $serialStorage->createStorageName(
$field->getTargetEntityTypeId(),
$field->getTargetBundle(),
$field->getFieldStorageDefinition()->getName()
);
$serialStorage->dropStorageFromName($storageName);
}
}
/**
* Implements hook_clone_node_alter().
*
* @todo to review once node_clone have a stable release
*/
function serial_clone_node_alter(Node &$node, $context) {
// Reset values of all serial fields when cloning a node.
foreach (\Drupal::entityManager()->getFieldDefinitions('node', $node->bundle()) as $field_name => $field_definition) {
if (!empty($field_definition->getTargetBundle())
&& $field_definition->getType() == SerialStorageInterface::SERIAL_FIELD_TYPE) {
$node->{$field_name} = [];
}
}
}
/**
* Implements hook_theme().
*/
function serial_theme() {
// Register the theme for the serial default.
return array('serial_default' => array('variables' => array('serial_id' => NULL)));
}
/**
* Theme function for the serial default.
*
* @param array $variables
* Theme variables.
*
* @return array
* Theme variables.
*/
function theme_serial_default(array $variables) {
return $variables['serial_id'];
}