messageLogHandle = fopen($messageLogFile, 'a')) === false) { throw new \LogicException('Message log file could not be opened!'); } if (($this->auditLogHandle = fopen($auditLogFile, 'a')) === false) { throw new \LogicException('Audit log file could not be opened!'); } } public function __destruct() { fclose($this->messageLogHandle); fclose($this->auditLogHandle); } private function orderPasswordLocations($a, $b) { if ($a[0] == $b[0]) { return 0; } elseif ($a[0] < $b[0]) { return -1; } return 1; } public function messageLog($username, $recipient, $message, array $passwordLocations) { usort($passwordLocations, array($this, 'orderPasswordLocations')); $encodedMessage = $message; $mod = 0; foreach ($passwordLocations as $loc) { list($pos, $length) = $loc; $encodedMessage = substr_replace($encodedMessage, self::PASSWORD_MASK, $pos + $mod, $length); $mod += (strlen(self::PASSWORD_MASK) - $length); } $logMessage = "From $username From: $username To: $recipient $encodedMessage\n\n"; fwrite($this->messageLogHandle, $logMessage); fflush($this->messageLogHandle); return true; } public function auditLog($type, $username, $message) { if ($username === null) { $logMessage = "$message\n"; } else { $logMessage = "$username: $message\n"; } fwrite($this->auditLogHandle, $logMessage); fflush($this->auditLogHandle); return true; } }