argue-2.0.0-alpha4/modules/argue_versions/argue_versions.module
modules/argue_versions/argue_versions.module
<?php
/**
* @file
* Contains argue_versions.module.
*/
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RouteMatchInterface;
/**
* Implements hook_help().
*/
function argue_versions_help($route_name, RouteMatchInterface $route_match) {
switch ($route_name) {
// Main module help for the argue_versions module.
case 'help.page.argue_versions':
$output = '';
$output .= '<h3>' . t('About') . '</h3>';
$output .= '<p>' . t('Creates a permanent version of all ratified rules (with context) in the current version.') . '</p>';
return $output;
default:
}
}
/**
* Implements hook_theme().
*/
function argue_versions_theme() {
return [
'argue_versions' => [
'variables' => [
'description' => NULL,
'latest' => NULL,
'current' => NULL,
'history' => NULL,
],
],
'argue_versions_tree' => [
'variables' => [
'title' => NULL,
'child_nodes' => NULL,
'children' => NULL,
'level' => NULL,
'data' => [],
],
],
];
}
/**
* Implements hook_ENTITY_TYPE_presave().
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
function argue_versions_node_presave(EntityInterface $entity) {
if($entity->bundle() == 'version' && $entity->isNew()) {
/** @var Drupal\argue_versions\SnapshotService $snapshot_service */
$snapshot_service = \Drupal::service('argue_versions.snapshot_service');
// Save terms snapshot.
$entity->set('field_sections', $snapshot_service->getSectionsSnapshot());
$entity->set('field_rules', $snapshot_service->getRulesSnapshot());
$entity->set('field_problems', $snapshot_service->getProblemsSnapshot());
$entity->set('field_arguments', $snapshot_service->getArgumentsSnapshot());
}
}
/**
* Implements hook_form_FORM_ID_alter().
*/
function argue_versions_form_node_form_alter(&$form, FormStateInterface $form_state) {
if($form['#form_id'] == 'node_version_form') {
/** @var Drupal\argue_versions\SnapshotService $snapshot_service */
$snapshot_service = \Drupal::service('argue_versions.snapshot_service');
/** @var \Drupal\node\NodeInterface $node */
$node = $form_state->getFormObject()->getEntity();
if($node->isNew()) {
$form['title']['widget'][0]['value']['#default_value'] = $snapshot_service->getTitle();
$form['title']['widget'][0]['value']['#disabled'] = 1;
$form['field_description']['widget'][0]['value']['#default_value'] = $snapshot_service->getDesc();
$form['field_description']['widget'][0]['value']['#disabled'] = 1;
$form['field_version_number']['widget'][0]['value']['#default_value'] = $snapshot_service->getNextVersionNum();
$form['field_version_number']['widget'][0]['value']['#disabled'] = 1;
}
} elseif ($form['#form_id'] == 'node_version_edit_form') {
$form['title']['widget'][0]['value']['#disabled'] = 1;
$form['field_description']['widget'][0]['value']['#disabled'] = 1;
$form['field_version_number']['widget'][0]['value']['#disabled'] = 1;
}
}
/**
* Implements hook_ENTITY_TYPE_insert().
*
* Update version iterator on a new version entity.
*
* @param \Drupal\Core\Entity\EntityInterface $node
*/
function argue_versions_node_insert(EntityInterface $node) {
/** @var \Drupal\node\NodeInterface $node */
if($node->bundle() == 'version') {
/** @var Drupal\argue_versions\SnapshotService $snapshot_service */
$snapshot_service = \Drupal::service('argue_versions.snapshot_service');
$version = (int) $node->get('field_version_number')->getString();
$snapshot_service->setVersionNum($version);
}
}
/**
* Implements hook_entity_bundle_field_info_alter().
*/
function argue_versions_entity_bundle_field_info_alter(&$fields, EntityTypeInterface $entity_type, $bundle) {
if ($entity_type->id() == 'node' && $bundle === 'version') {
if (isset($fields['field_valid_date'])) {
// Use the ID as defined in the annotation of the constraint definition.
$fields['field_valid_date']->addConstraint('version_valid_date_constraint', []);
}
}
}
