/**
  * Check if an element has changed while saving.
  *
  * @param string $elementType
  * @param int    $id
  * @param array  $before
  * @param array  $after
  *
  * @return array
  */
 public function elementHasChanged($elementType, $id, $before, $after)
 {
     // Flatten arrays
     $flatBefore = ArrayHelper::flattenArray($before);
     $flatAfter = ArrayHelper::flattenArray($after);
     // Calculate the diffence
     $flatDiff = array_diff_assoc($flatAfter, $flatBefore);
     // Expand diff again
     $expanded = ArrayHelper::expandArray($flatDiff);
     // Add labels once again
     $diff = array();
     foreach ($expanded as $key => $value) {
         $diff[$key]['label'] = isset($before[$key]) ? $before[$key]['label'] : '';
         $diff[$key]['value'] = $value['value'];
     }
     // If there IS a difference
     if (count($diff)) {
         // Fire an "onElementChanged" event
         $event = new Event($this, array('elementType' => $elementType, 'id' => $id, 'diff' => $diff));
         $this->onElementChanged($event);
     }
     return $diff;
 }