From c6a9e07ee90302356e3687f0e69e7304b6efc113 Mon Sep 17 00:00:00 2001 From: Administrator Date: Sun, 27 May 2018 03:02:01 +0200 Subject: [PATCH] Added export function --- src/User/Controller/SettingsController.php | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/User/Controller/SettingsController.php b/src/User/Controller/SettingsController.php index e8f9528..0ee63b3 100644 --- a/src/User/Controller/SettingsController.php +++ b/src/User/Controller/SettingsController.php @@ -31,6 +31,7 @@ use Da\User\Validator\TwoFactorCodeValidator; use Yii; use yii\filters\AccessControl; use yii\filters\VerbFilter; +use yii\helpers\ArrayHelper; use yii\web\Controller; use yii\web\ForbiddenHttpException; use yii\web\NotFoundHttpException; @@ -96,6 +97,7 @@ class SettingsController extends Controller 'actions' => [ 'profile', 'account', + 'export', 'networks', 'privacy', 'disconnect', @@ -152,6 +154,44 @@ class SettingsController extends Controller return $this->render('privacy'); } + /** + * Exports the personal data of the current active user + */ + public function actionExport() + { + if (!$this->module->enableGDPRcompliance) + throw new NotFoundHttpException('Page not found'); + + try { + $properties = $this->module->GDPRexportProperties; + $user = Yii::$app->user->identity; + $data = [$properties, []]; + + foreach ($properties as $property) { + $data[1][] = Yii::$app->formatter->asText(ArrayHelper::getValue($user, $property)); + } + + array_walk($data[0], function (&$value, $key) { + $splitted = explode('.', $value); + $value = array_pop($splitted); + }); + + Yii::$app->response->headers->removeAll(); + Yii::$app->response->headers->add('Content-type', 'text/csv'); + Yii::$app->response->headers->add('Content-Disposition', 'attachment;filename=gdpr-data.csv'); + Yii::$app->response->send(); + $f = fopen('php://output', 'w'); + foreach ($data as $line) { + fputcsv($f, $line, ";"); + } + } catch (\Exception $e) { + throw $e; + } catch (\Throwable $e) { + throw $e; + } + + } + public function actionAccount() { /** @var SettingsForm $form */