]> git.mxchange.org Git - friendica.git/commitdiff
Reformat Module\Settings\UserExport
authorHypolite Petovan <hypolite@mrpetovan.com>
Mon, 24 Oct 2022 21:56:05 +0000 (17:56 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Mon, 24 Oct 2022 22:14:59 +0000 (18:14 -0400)
- Import IHandleUserSessions and DbaDefinition object in constructor
- Convert remaining double quotes to single quotes
- Convert static methods to dynamic to use class properties
- Remove unused POST permission from route

src/Module/Settings/UserExport.php
static/routes.config.php

index 095c6948332b158a8f41bad0c8c9e07fcf5662c3..74bb517c39637509b5b0b70bf358d59ac42f3554 100644 (file)
@@ -23,20 +23,44 @@ namespace Friendica\Module\Settings;
 
 use Friendica\App;
 use Friendica\Core\Hook;
+use Friendica\Core\L10n;
 use Friendica\Core\Renderer;
+use Friendica\Core\Session\Capability\IHandleUserSessions;
 use Friendica\Core\System;
 use Friendica\Database\DBA;
+use Friendica\Database\Definition\DbaDefinition;
 use Friendica\DI;
+use Friendica\Model\Contact;
 use Friendica\Model\Item;
 use Friendica\Model\Post;
 use Friendica\Module\BaseSettings;
+use Friendica\Module\Response;
 use Friendica\Network\HTTPException;
+use Friendica\Network\HTTPException\ForbiddenException;
+use Friendica\Network\HTTPException\InternalServerErrorException;
+use Friendica\Network\HTTPException\ServiceUnavailableException;
+use Friendica\Util\Profiler;
+use Psr\Log\LoggerInterface;
 
 /**
  * Module to export user data
  **/
 class UserExport extends BaseSettings
 {
+       /** @var IHandleUserSessions */
+       private $session;
+
+       /** @var DbaDefinition */
+       private $dbaDefinition;
+
+       public function __construct(DbaDefinition $dbaDefinition, IHandleUserSessions $session, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
+       {
+               parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
+
+               $this->session       = $session;
+               $this->dbaDefinition = $dbaDefinition;
+       }
+
        /**
         * Handle the request to export data.
         * At the moment one can export three different data set
@@ -48,14 +72,16 @@ class UserExport extends BaseSettings
         * If there is an action required through the URL / path, react
         * accordingly and export the requested data.
         *
+        * @param array $request
         * @return string
-        * @throws HTTPException\ForbiddenException
-        * @throws HTTPException\InternalServerErrorException
+        * @throws ForbiddenException
+        * @throws InternalServerErrorException
+        * @throws ServiceUnavailableException
         */
        protected function content(array $request = []): string
        {
-               if (!DI::userSession()->getLocalUserId()) {
-                       throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
+               if (!$this->session->getLocalUserId()) {
+                       throw new HTTPException\ForbiddenException($this->l10n->t('Permission denied.'));
                }
 
                parent::content();
@@ -65,15 +91,15 @@ class UserExport extends BaseSettings
                 * list of array( 'link url', 'link text', 'help text' )
                 */
                $options = [
-                       ['settings/userexport/account', DI::l10n()->t('Export account'), DI::l10n()->t('Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server.')],
-                       ['settings/userexport/backup', DI::l10n()->t('Export all'), DI::l10n()->t("Export your account info, contacts and all your items as json. Could be a very big file, and could take a lot of time. Use this to make a full backup of your account \x28photos are not exported\x29")],
-                       ['settings/userexport/contact', DI::l10n()->t('Export Contacts to CSV'), DI::l10n()->t("Export the list of the accounts you are following as CSV file. Compatible to e.g. Mastodon.")],
+                       ['settings/userexport/account', $this->l10n->t('Export account'), $this->l10n->t('Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server.')],
+                       ['settings/userexport/backup', $this->l10n->t('Export all'), $this->l10n->t('Export your account info, contacts and all your items as json. Could be a very big file, and could take a lot of time. Use this to make a full backup of your account (photos are not exported)')],
+                       ['settings/userexport/contact', $this->l10n->t('Export Contacts to CSV'), $this->l10n->t('Export the list of the accounts you are following as CSV file. Compatible to e.g. Mastodon.')],
                ];
                Hook::callAll('uexport_options', $options);
 
-               $tpl = Renderer::getMarkupTemplate("settings/userexport.tpl");
+               $tpl = Renderer::getMarkupTemplate('settings/userexport.tpl');
                return Renderer::replaceMacros($tpl, [
-                       '$title' => DI::l10n()->t('Export personal data'),
+                       '$title' => $this->l10n->t('Export personal data'),
                        '$options' => $options
                ]);
        }
@@ -88,29 +114,26 @@ class UserExport extends BaseSettings
         */
        protected function rawContent(array $request = [])
        {
-               if (!DI::app()->isLoggedIn()) {
-                       throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
+               if (!$this->session->getLocalUserId()) {
+                       throw new HTTPException\ForbiddenException($this->l10n->t('Permission denied.'));
                }
 
-               $args = DI::args();
-               if ($args->getArgc() == 3) {
-                       // @TODO Replace with router-provided arguments
-                       $action = $args->get(2);
-                       switch ($action) {
-                               case "backup":
-                                       header("Content-type: application/json");
-                                       header('Content-Disposition: attachment; filename="' . DI::app()->getLoggedInUserNickname() . '.' . $action . '"');
-                                       self::exportAll(DI::userSession()->getLocalUserId());
+               if (isset($this->parameters['action'])) {
+                       switch ($this->parameters['action']) {
+                               case 'backup':
+                                       header('Content-type: application/json');
+                                       header('Content-Disposition: attachment; filename="' . DI::app()->getLoggedInUserNickname() . '.' . $this->parameters['action'] . '"');
+                                       $this->echoAll($this->session->getLocalUserId());
                                        break;
-                               case "account":
-                                       header("Content-type: application/json");
-                                       header('Content-Disposition: attachment; filename="' . DI::app()->getLoggedInUserNickname() . '.' . $action . '"');
-                                       self::exportAccount(DI::userSession()->getLocalUserId());
+                               case 'account':
+                                       header('Content-type: application/json');
+                                       header('Content-Disposition: attachment; filename="' . DI::app()->getLoggedInUserNickname() . '.' . $this->parameters['action'] . '"');
+                                       $this->echoAccount($this->session->getLocalUserId());
                                        break;
-                               case "contact":
-                                       header("Content-type: application/csv");
+                               case 'contact':
+                                       header('Content-type: application/csv');
                                        header('Content-Disposition: attachment; filename="' . DI::app()->getLoggedInUserNickname() . '-contacts.csv' . '"');
-                                       self::exportContactsAsCSV(DI::userSession()->getLocalUserId());
+                                       $this->echoContactsAsCSV($this->session->getLocalUserId());
                                        break;
                        }
                        System::exit();
@@ -122,11 +145,11 @@ class UserExport extends BaseSettings
         * @return array
         * @throws \Exception
         */
-       private static function exportMultiRow(string $query)
+       private function exportMultiRow(string $query): array
        {
-               $dbStructure = DI::dbaDefinition()->getAll();
+               $dbStructure = $this->dbaDefinition->getAll();
 
-               preg_match("/\s+from\s+`?([a-z\d_]+)`?/i", $query, $match);
+               preg_match('/\s+from\s+`?([a-z\d_]+)`?/i', $query, $match);
                $table = $match[1];
 
                $result = [];
@@ -154,11 +177,11 @@ class UserExport extends BaseSettings
         * @return array
         * @throws \Exception
         */
-       private static function exportRow(string $query)
+       private function exportRow(string $query): array
        {
-               $dbStructure = DI::dbaDefinition()->getAll();
+               $dbStructure = $this->dbaDefinition->getAll();
 
-               preg_match("/\s+from\s+`?([a-z\d_]+)`?/i", $query, $match);
+               preg_match('/\s+from\s+`?([a-z\d_]+)`?/i', $query, $match);
                $table = $match[1];
 
                $result = [];
@@ -190,10 +213,10 @@ class UserExport extends BaseSettings
         * @param int $user_id
         * @throws \Exception
         */
-       private static function exportContactsAsCSV(int $user_id)
+       private function echoContactsAsCSV(int $user_id)
        {
                if (!$user_id) {
-                       throw new \RuntimeException(DI::l10n()->t('Permission denied.'));
+                       throw new \RuntimeException($this->l10n->t('Permission denied.'));
                }
 
                // write the table header (like Mastodon)
@@ -210,52 +233,52 @@ class UserExport extends BaseSettings
         * @param int $user_id
         * @throws \Exception
         */
-       private static function exportAccount(int $user_id)
+       private function echoAccount(int $user_id)
        {
                if (!$user_id) {
-                       throw new \RuntimeException(DI::l10n()->t('Permission denied.'));
+                       throw new \RuntimeException($this->l10n->t('Permission denied.'));
                }
 
-               $user = self::exportRow(
+               $user = $this->exportRow(
                        sprintf("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", $user_id)
                );
 
-               $contact = self::exportMultiRow(
+               $contact = $this->exportMultiRow(
                        sprintf("SELECT * FROM `contact` WHERE `uid` = %d ", $user_id)
                );
 
 
-               $profile = self::exportMultiRow(
+               $profile = $this->exportMultiRow(
                        sprintf("SELECT *, 'default' AS `profile_name`, 1 AS `is-default` FROM `profile` WHERE `uid` = %d ", $user_id)
                );
 
-               $profile_fields = self::exportMultiRow(
+               $profile_fields = $this->exportMultiRow(
                        sprintf("SELECT * FROM `profile_field` WHERE `uid` = %d ", $user_id)
                );
 
-               $photo = self::exportMultiRow(
+               $photo = $this->exportMultiRow(
                        sprintf("SELECT * FROM `photo` WHERE uid = %d AND profile = 1", $user_id)
                );
                foreach ($photo as &$p) {
                        $p['data'] = bin2hex($p['data']);
                }
 
-               $pconfig = self::exportMultiRow(
+               $pconfig = $this->exportMultiRow(
                        sprintf("SELECT * FROM `pconfig` WHERE uid = %d", $user_id)
                );
 
-               $group = self::exportMultiRow(
+               $group = $this->exportMultiRow(
                        sprintf("SELECT * FROM `group` WHERE uid = %d", $user_id)
                );
 
-               $group_member = self::exportMultiRow(
+               $group_member = $this->exportMultiRow(
                        sprintf("SELECT `group_member`.`gid`, `group_member`.`contact-id` FROM `group_member` INNER JOIN `group` ON `group`.`id` = `group_member`.`gid` WHERE `group`.`uid` = %d", $user_id)
                );
 
                $output = [
                        'version' => App::VERSION,
                        'schema' => DB_UPDATE_VERSION,
-                       'baseurl' => DI::baseUrl(),
+                       'baseurl' => $this->baseUrl,
                        'user' => $user,
                        'contact' => $contact,
                        'profile' => $profile,
@@ -275,13 +298,13 @@ class UserExport extends BaseSettings
         * @param int $user_id
         * @throws \Exception
         */
-       private static function exportAll(int $user_id)
+       private function echoAll(int $user_id)
        {
                if (!$user_id) {
-                       throw new \RuntimeException(DI::l10n()->t('Permission denied.'));
+                       throw new \RuntimeException($this->l10n->t('Permission denied.'));
                }
 
-               self::exportAccount($user_id);
+               $this->echoAccount($user_id);
                echo "\n";
 
                $total = Post::count(['uid' => $user_id]);
index e19e3b75705005d9598134e90d5fe98de2263436..47176868f58d1c048397ad8036b732a09ca12873 100644 (file)
@@ -574,7 +574,7 @@ return [
                        '/photo[/new]'         => [Module\Settings\Profile\Photo\Index::class, [R::GET, R::POST]],
                        '/photo/crop/{guid}'   => [Module\Settings\Profile\Photo\Crop::class,  [R::GET, R::POST]],
                ],
-               '/userexport[/{action}]' => [Module\Settings\UserExport::class,             [R::GET, R::POST]],
+               '/userexport[/{action}]' => [Module\Settings\UserExport::class,            [R::GET         ]],
        ],
 
        '/network' => [