Passed
Push — master ( b23d94...34fe51 )
by Nicolas
05:23 queued 10s
created

PocketController::callbackAction()   B

Complexity

Conditions 10
Paths 4

Size

Total Lines 38
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 10
eloc 21
c 1
b 1
f 0
nc 4
nop 0
dl 0
loc 38
rs 7.6666

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace Wallabag\ImportBundle\Controller;
4
5
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
7
use Symfony\Component\HttpFoundation\Request;
8
use Symfony\Component\Routing\Annotation\Route;
9
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
10
11
class PocketController extends Controller
12
{
13
    /**
14
     * @Route("/pocket", name="import_pocket")
15
     */
16
    public function indexAction()
17
    {
18
        $pocket = $this->getPocketImportService();
19
        $form = $this->createFormBuilder($pocket)
20
            ->add('mark_as_read', CheckboxType::class, [
21
                'label' => 'import.form.mark_as_read_label',
22
                'required' => false,
23
            ])
24
            ->getForm();
25
26
        return $this->render('WallabagImportBundle:Pocket:index.html.twig', [
27
            'import' => $this->getPocketImportService(),
28
            'has_consumer_key' => '' === trim($this->getUser()->getConfig()->getPocketConsumerKey()) ? false : true,
29
            'form' => $form->createView(),
30
        ]);
31
    }
32
33
    /**
34
     * @Route("/pocket/auth", name="import_pocket_auth")
35
     */
36
    public function authAction(Request $request)
37
    {
38
        $requestToken = $this->getPocketImportService()
39
            ->getRequestToken($this->generateUrl('import', [], UrlGeneratorInterface::ABSOLUTE_URL));
40
41
        if (false === $requestToken) {
42
            $this->get('session')->getFlashBag()->add(
43
                'notice',
44
                'flashes.import.notice.failed'
45
            );
46
47
            return $this->redirect($this->generateUrl('import_pocket'));
48
        }
49
50
        $form = $request->request->get('form');
51
52
        $this->get('session')->set('import.pocket.code', $requestToken);
53
        if (null !== $form && \array_key_exists('mark_as_read', $form)) {
54
            $this->get('session')->set('mark_as_read', $form['mark_as_read']);
55
        }
56
57
        return $this->redirect(
58
            'https://getpocket.com/auth/authorize?request_token=' . $requestToken . '&redirect_uri=' . $this->generateUrl('import_pocket_callback', [], UrlGeneratorInterface::ABSOLUTE_URL),
59
            301
60
        );
61
    }
62
63
    /**
64
     * @Route("/pocket/callback", name="import_pocket_callback")
65
     */
66
    public function callbackAction()
67
    {
68
        $message = 'flashes.import.notice.failed';
69
        $pocket = $this->getPocketImportService();
70
71
        $markAsRead = $this->get('session')->get('mark_as_read');
72
        $this->get('session')->remove('mark_as_read');
73
74
        // something bad happend on pocket side
75
        if (false === $pocket->authorize($this->get('session')->get('import.pocket.code'))) {
76
            $this->get('session')->getFlashBag()->add(
77
                'notice',
78
                $message
79
            );
80
81
            return $this->redirect($this->generateUrl('import_pocket'));
82
        }
83
84
        if (true === $pocket->setMarkAsRead($markAsRead)->import()) {
85
            $summary = $pocket->getSummary();
86
            $message = $this->get('translator')->trans('flashes.import.notice.summary', [
87
                '%imported%' => null !== $summary && \array_key_exists('imported', $summary) ? $summary['imported'] : 0,
88
                '%skipped%' => null !== $summary && \array_key_exists('skipped', $summary) ? $summary['skipped'] : 0,
89
            ]);
90
91
            if (null !== $summary && \array_key_exists('queued', $summary) && 0 < $summary['queued']) {
92
                $message = $this->get('translator')->trans('flashes.import.notice.summary_with_queue', [
93
                    '%queued%' => $summary['queued'],
94
                ]);
95
            }
96
        }
97
98
        $this->get('session')->getFlashBag()->add(
99
            'notice',
100
            $message
101
        );
102
103
        return $this->redirect($this->generateUrl('homepage'));
104
    }
105
106
    /**
107
     * Return Pocket Import Service with or without RabbitMQ enabled.
108
     *
109
     * @return \Wallabag\ImportBundle\Import\PocketImport
110
     */
111
    private function getPocketImportService()
112
    {
113
        $pocket = $this->get('wallabag_import.pocket.import');
114
        $pocket->setUser($this->getUser());
115
116
        if ($this->get('craue_config')->get('import_with_rabbitmq')) {
117
            $pocket->setProducer($this->get('old_sound_rabbit_mq.import_pocket_producer'));
118
        } elseif ($this->get('craue_config')->get('import_with_redis')) {
119
            $pocket->setProducer($this->get('wallabag_import.producer.redis.pocket'));
120
        }
121
122
        return $pocket;
123
    }
124
}
125