niobi-8.x-2.0-alpha4/modules/niobi_form/modules/niobi_app/src/EventSubscriber/NiobiAppAssignBase.php
modules/niobi_form/modules/niobi_app/src/EventSubscriber/NiobiAppAssignBase.php
<?php
namespace Drupal\niobi_app\EventSubscriber;
use Drupal\niobi_app\Entity\NiobiApplication;
use Drupal\niobi_app\Utilities\NiobiAppPromoteUtilities;
/**
* Class NiobiAppAssignFormInsertSubscriber
* @package Drupal\niobi_app\EventSubscriber
*/
class NiobiAppAssignBase {
public static function handleWebformSubmission($entity) {
$uuid = \Drupal::request()->request->get('application_id');
// Use webform element if we don't have the query parameter.
if (empty($uuid)) {
/* @var $entity \Drupal\webform\Entity\WebformSubmission */
$uuid = $entity->getElementData('application_id');
}
// If there is no element, assume we are outside the scope of this module.
if (is_string($uuid) && (preg_match('/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/', $uuid) === 1)) {
$s = \Drupal::entityTypeManager()->getStorage('niobi_application')->loadByProperties(['uuid' => $uuid]);
if (!empty($s)) {
$id = array_keys($s)[0];
$application = NiobiApplication::load($id);
$status = $application->get('field_application_status')->getValue();
if (isset($status[0]['value'])){
$status = $status[0]['value'];
switch($status) {
case 'nomination':
case 'nomination_claim':
$nomination_vals = $application->get('field_nomination_submissions')->getValue();
$set = [$entity->id()];
foreach ($nomination_vals as $val) {
if (!in_array($val['target_id'], $set)) {
$set[] = $val['target_id'];
}
}
$application->set('field_nomination_submissions', $set);
$application->set('field_nominator', \Drupal::currentUser()->id());
$complete_status = !$entity->isDraft();
if ($complete_status) {
$advance = $application->getCurrentApplicationStage()->field_nomination_claim_advance->value;
if ($advance) {
$application->set('field_application_status', 'nomination_claim');
}
}
$application->save();
break;
case 'application':
$application_vals = $application->get('field_application_submissions')->getValue();
$set = [$entity->id()];
foreach ($application_vals as $val) {
$set[] = $val['target_id'];
}
$application->set('field_application_submissions', $set);
$application->save();
if (NiobiAppPromoteUtilities::applicationReadyToSubmit($application)) {
$stage = $application->getCurrentApplicationStage();
$auto_submit = $stage->get('field_auto_submit')->getValue();
$auto_submit = isset($auto_submit[0]['value']) ? $auto_submit[0]['value'] : FALSE;
if($auto_submit) {
NiobiAppPromoteUtilities::submitApplication($application);
}
}
break;
case 'review':
$review_vals = $application->get('field_review_submissions')->getValue();
$set = [$entity->id()];
foreach ($review_vals as $val) {
$set[] = $val['target_id'];
}
$application->set('field_review_submissions', $set);
$application->save();
break;
}
}
}
}
}
}
