You are here

function _webform_demo_application_evaluation_calculate_evaluation_rating in Webform 6.x

Same name and namespace in other branches
  1. 8.5 modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.module \_webform_demo_application_evaluation_calculate_evaluation_rating()

Calculate an applications average evaluation rating.

Parameters

\Drupal\webform\WebformSubmissionInterface $webform_submission: A webform submission.

3 calls to _webform_demo_application_evaluation_calculate_evaluation_rating()
webform_demo_application_evaluation_webform_submission_delete in modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.module
Implements hook_ENTITY_TYPE_delete() for webform_submission entities.
webform_demo_application_evaluation_webform_submission_insert in modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.module
Implements hook_ENTITY_TYPE_insert() for webform_submission entities.
webform_demo_application_evaluation_webform_submission_update in modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.module
Implements hook_ENTITY_TYPE_update() for webform_submission entities.

File

modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.module, line 67
Demonstrate how to use the Webform module to build an application/evaluation system.

Code

function _webform_demo_application_evaluation_calculate_evaluation_rating(WebformSubmissionInterface $webform_submission) {
  $webform = $webform_submission
    ->getWebform();
  if (!$webform || $webform
    ->id() !== 'demo_application_evaluation') {
    return;
  }
  $source_entity = $webform_submission
    ->getSourceEntity();
  if (!$source_entity instanceof WebformSubmissionInterface || $source_entity
    ->getWebform()
    ->id() !== 'demo_application') {
    return;
  }

  // Get evaluation ratings.

  /** @var \Drupal\webform\WebformSubmissionStorageInterface $webform_submission_storage */
  $webform_submission_storage = \Drupal::entityTypeManager()
    ->getStorage('webform_submission');
  $webform_submissions = $webform_submission_storage
    ->loadByEntities($webform, $source_entity);
  $ratings = [];
  foreach ($webform_submissions as $webform_submission) {
    $ratings[] = $webform_submission
      ->getElementData('rating');
  }

  // Set evaluations rating average and count.
  $evaluation_rating = array_sum($ratings) / count($ratings);
  $source_entity
    ->setElementData('evaluation_rating', $evaluation_rating);
  $source_entity
    ->setElementData('evaluation_count', count($ratings));
  $source_entity
    ->save();
}