/** * 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; }