appUid = $appUid; return $this; } /** * Set proUid. * * @param string $proUid * @return object */ public function setProUid($proUid) { $this->proUid = $proUid; return $this; } /** * Set tasUid. * * @param string $tasUid * @return object */ public function setTasUid($tasUid) { $this->tasUid = $tasUid; return $this; } /** * Set userLogged. * * @param string $userLogged * @return object */ public function setUserLogged($userLogged) { $this->userLogged = $userLogged; return $this; } /** * Get logs. * * @return array */ public function getLogs() { $cases = new Cases(); $this->permissions = $cases->getAllObjects($this->proUid, $this->appUid, $this->tasUid, $this->userLogged); $logs = []; $totalCount = 0; $values = []; $this->getLogsFromDataBase($this->appUid, function($row) use(&$logs, &$totalCount, &$values) { $appData = $this->getAppData($row['DATA']); $this->removeVariables($appData); $hasPermission = $this->hasPermission($row['DYN_UID']); if ((int) $row['SOURCE_ID'] === ChangeLog::FromABE) { $hasPermission = true; } $count = 0; foreach ($appData as $key => $value) { if ($hasPermission && (!isset($values[$key]) || $values[$key] !== $value)) { // Apply mask $dateLabel = applyMaskDateEnvironment($row['DATE'],'', false); // Apply the timezone $dateLabel = DateTime::convertUtcToTimeZone($dateLabel); $previousValue = !isset($values[$key]) ? null : $values[$key]; $record = '' . G::LoadTranslation('ID_TASK') . ': ' . $row['TAS_TITLE'] . ' / ' . G::LoadTranslation('ID_DYNAFORM') . ': ' . $row['DYN_TITLE'] . ' / ' . G::LoadTranslation('ID_LAN_UPDATE_DATE') . ': ' . $dateLabel . ' / ' . G::LoadTranslation('ID_USER') . ': ' . $row['USR_USERNAME'] . ' / ' . G::LoadTranslation('ID_FROM') . ': ' . ChangeLog::getChangeLog()->getApplicationNameById($row['SOURCE_ID']); $struct = new LogStruct(); $struct->setField($key) ->setPreviousValue($this->toString($previousValue)) ->setCurrentValue($this->toString($value)) ->setPreviousValueType(gettype($previousValue)) ->setCurrentValueType(gettype($value)) ->setRecord($record); $logs[] = $struct->getValues(); $count++; } $values[$key] = $value; } $totalCount = $totalCount + $count; }); return [ 'data' => $logs, 'totalCount' => $totalCount ]; } /** * Get logs from Database. * * @param type $appUid * @param type $callback */ public function getLogsFromDataBase($appUid, $callback = null) { $conn = Propel::getConnection('workflow'); $sql = "" . "SELECT " . "A.CHANGE_LOG_ID, " . "D.TAS_TITLE, " . "C.PRO_TITLE, " . "IF(F.DYN_UID IS NULL,'N/A',F.DYN_TITLE) AS 'DYN_TITLE', " . "F.DYN_UID, " . "A.DATE, " . "E.USR_USERNAME, " . "A.APP_NUMBER, " . "A.DEL_INDEX, " . "A.PRO_ID, " . "A.TAS_ID, " . "A.USR_ID, " . "A.OBJECT_ID, " . "A.OBJECT_UID, " . "A.EXECUTED_AT, " . "A.SOURCE_ID, " . "A.DATA, " . "A.SKIN, " . "A.LANGUAGE " . "FROM APP_DATA_CHANGE_LOG AS A " . "INNER JOIN APPLICATION AS B ON (B.APP_NUMBER=A.APP_NUMBER AND B.APP_UID=? ) " . "LEFT JOIN PROCESS AS C ON (C.PRO_ID=A.PRO_ID) " . "LEFT JOIN TASK AS D ON (D.TAS_ID=A.TAS_ID) " . "LEFT JOIN USERS AS E ON (E.USR_ID=A.USR_ID) " . "LEFT JOIN DYNAFORM AS F ON (F.DYN_ID=A.OBJECT_ID AND A.OBJECT_TYPE=" . ChangeLog::DYNAFORM . ") " . "ORDER BY A.DATE ASC "; $stmt = $conn->prepareStatement($sql); $stmt->set(1, $appUid); $stmt->executeQuery(); $result = $stmt->getResultSet(); while ($result->next()) { $row = $result->getRow(); if (!empty($callback) && is_callable($callback)) { $callback($row); } } } /** * Get appData from value serialized. * * @param string $appDataString * @return array */ private function getAppData($appDataString) { $case = new Cases(); $appData = $case->unserializeData($appDataString); if (!is_array($appData)) { $appData = []; } return $appData; } /** * Remove all values from the array that are in the excludeVariables property. * * @param array $appData */ private function removeVariables(&$appData) { foreach ($this->excludeVariables as $value) { unset($appData[$value]); } } /** * Has permission. * * @param string $uid * @return boolean */ private function hasPermission($uid) { if (array_search($uid, $this->reservedSteps) !== false) { return false; } foreach ($this->permissions as $ids) { if (is_array($ids) && array_search($uid, $ids) !== false) { return true; } } return false; } /** * Returns the print string from the value. * * @param mixed $value * @return string */ private function toString($value) { if (is_array($value)) { return nl2br(print_r($value, true)); } else { return (string) $value; } } }