Completed
Push — 5.3 ( 958546...1cc96e )
by Jeroen
14:02 queued 07:05
created

Controller/GoogleAnalyticsAJAXController.php (5 issues)

Labels
Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Kunstmaan\DashboardBundle\Controller;
4
5
use Kunstmaan\AdminBundle\FlashMessages\FlashTypes;
6
use Kunstmaan\DashboardBundle\Command\GoogleAnalyticsDataCollectCommand;
7
use Kunstmaan\DashboardBundle\Entity\AnalyticsGoal;
8
use Kunstmaan\DashboardBundle\Entity\AnalyticsSegment;
9
use Kunstmaan\DashboardBundle\Repository\AnalyticsOverviewRepository;
10
use Symfony\Component\Routing\Annotation\Route;
11
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
12
use Symfony\Component\Console\Input\ArrayInput;
13
use Symfony\Component\Console\Output\NullOutput;
14
use Symfony\Component\HttpFoundation\JsonResponse;
15
use Symfony\Component\HttpFoundation\Request;
16
17
class GoogleAnalyticsAJAXController extends Controller
18
{
19
    /**
20
     * @Route("/updateData", name="KunstmaanDashboardBundle_analytics_update")
21
     */
22
    public function runUpdateAction(Request $request)
23
    {
24
        $configId = $request->query->get('configId');
25
        $segmentId = $request->query->get('segmentId');
26
27
        $command = new GoogleAnalyticsDataCollectCommand();
28
        $command->setContainer($this->container);
29
        $input = new ArrayInput(array('--config' => $configId, '--segment' => $segmentId));
30
        $output = new NullOutput();
31
        $command->run($input, $output);
32
33
        return new JsonResponse(array(), 200, array('Content-Type' => 'application/json'));
34
    }
35
36
    /**
37
     * Return an ajax response with all data for an overview
38
     *
39
     * @Route("/getOverview/{id}", requirements={"id" = "\d+"}, name="KunstmaanDashboardBundle_analytics_overview_ajax")
40
     */
41
    public function getOverviewAction($id)
42
    {
43
        $em = $this->getDoctrine()->getManager();
44
        /** @var AnalyticsOverviewRepository $analyticsOverviewRepository */
45
        $analyticsOverviewRepository = $em->getRepository('KunstmaanDashboardBundle:AnalyticsOverview');
46
        $overview = $analyticsOverviewRepository->find($id);
47
48
        // goals data
49
        $goals = array();
50
        foreach ($overview->getActiveGoals() as $key => $goal) {
51
            /* @var AnalyticsGoal $goal */
52
            $goals[$key]['name'] = $goal->getName();
53
            $goals[$key]['visits'] = $goal->getVisits();
54
            $goals[$key]['id'] = $goal->getId();
55
            $goals[$key]['chartData'] = json_decode($goal->getChartData());
56
        }
57
58
        // overview data
59
        $overviewData = array(
60
            'id' => $overview->getId(),
61
            'chartData' => json_decode($overview->getChartData(), true),
62
            'chartDataMaxValue' => $overview->getChartDataMaxValue(),
63
            'title' => $overview->getTitle(),
64
            'timespan' => $overview->getTimespan(),
65
            'startOffset' => $overview->getStartOffset(),
66
            'sessions' => number_format($overview->getSessions()),
67
            'users' => number_format($overview->getUsers()),
68
            'pagesPerSession' => round($overview->getPagesPerSession(), 2),
69
            'avgSessionDuration' => $overview->getAvgSessionDuration(),
70
            'returningUsers' => number_format($overview->getReturningUsers()),
71
            'newUsers' => round($overview->getNewUsers(), 2),
72
            'pageViews' => number_format($overview->getPageViews()),
73
            'returningUsersPercentage' => $overview->getReturningUsersPercentage(),
74
            'newUsersPercentage' => $overview->getNewUsersPercentage(),
75
        );
76
77
        // put all data in the return array
78
        $return = array(
79
            'responseCode' => 200,
80
            'overview' => $overviewData,
81
            'goals' => $goals,
82
        );
83
84
        // return json response
85
        return new JsonResponse($return, 200, array('Content-Type' => 'application/json'));
86
    }
87
88
    /* =============================== ACCOUNT =============================== */
89
90
    /**
91
     * @Route("/accounts/", name="kunstmaan_dashboard_ajax_accounts")
92
     */
93
    public function getAccountsAction(Request $request)
94
    {
95
        $configHelper = $this->container->get('kunstmaan_dashboard.helper.google.analytics.config');
96
        $configId = $request->query->get('configId');
97
        if ($configId) {
98
            $configHelper->init($configId);
99
        }
100
101
        $accounts = $configHelper->getAccounts();
102
103
        return new JsonResponse($accounts, 200, array('Content-Type' => 'application/json'));
104
    }
105
106
    /**
107
     * @Route("/account/save", name="kunstmaan_dashboard_ajax_account_save")
108
     */
109 View Code Duplication
    public function saveAccountAction(Request $request)
110
    {
111
        $accountId = $request->query->get('id');
112
        $configHelper = $this->container->get('kunstmaan_dashboard.helper.google.analytics.config');
113
        $configHelper->saveAccountId($accountId);
114
115
        return new JsonResponse();
116
    }
117
118
    /* =============================== PROPERTY =============================== */
119
120
    /**
121
     * @Route("/properties/", name="kunstmaan_dashboard_ajax_properties")
122
     */
123
    public function getPropertiesAction(Request $request)
124
    {
125
        $accountId = $request->query->get('accountId');
126
        $configHelper = $this->container->get('kunstmaan_dashboard.helper.google.analytics.config');
127
        $configId = $request->query->get('configId');
128
        if ($configId) {
129
            $configHelper->init($configId);
130
        }
131
132
        $properties = $configHelper->getProperties($accountId);
133
134
        return new JsonResponse($properties, 200, array('Content-Type' => 'application/json'));
135
    }
136
137
    /**
138
     * @Route("/property/save", name="kunstmaan_dashboard_ajax_property_save")
139
     */
140 View Code Duplication
    public function savePropertyAction(Request $request)
141
    {
142
        $propertyId = $request->query->get('id');
143
        $configHelper = $this->container->get('kunstmaan_dashboard.helper.google.analytics.config');
144
        $configHelper->savePropertyId($propertyId);
145
146
        return new JsonResponse();
147
    }
148
149
    /* =============================== PROFILE =============================== */
150
151
    /**
152
     * @Route("/profiles/", name="kunstmaan_dashboard_ajax_profiles")
153
     */
154
    public function getProfilesAction(Request $request)
155
    {
156
        $accountId = $request->query->get('accountId');
157
        $propertyId = $request->query->get('propertyId');
158
        $configHelper = $this->container->get('kunstmaan_dashboard.helper.google.analytics.config');
159
        $configId = $request->query->get('configId');
160
        if ($configId) {
161
            $configHelper->init($configId);
162
        }
163
164
        $profiles = $configHelper->getProfiles($accountId, $propertyId);
165
166
        return new JsonResponse($profiles, 200, array('Content-Type' => 'application/json'));
167
    }
168
169
    /**
170
     * @Route("/profile/save", name="kunstmaan_dashboard_ajax_profile_save")
171
     */
172 View Code Duplication
    public function saveProfileAction(Request $request)
173
    {
174
        $propertyId = $request->query->get('id');
175
        $configHelper = $this->container->get('kunstmaan_dashboard.helper.google.analytics.config');
176
        $configHelper->saveProfileId($propertyId);
177
178
        return new JsonResponse();
179
    }
180
181
    /* =============================== CONFIG =============================== */
182
183
    /**
184
     * @Route("/config/save", name="kunstmaan_dashboard_ajax_config_save")
185
     */
186
    public function saveConfigAction(Request $request)
187
    {
188
        // get params
189
        $configId = $request->query->get('configId');
190
        $accountId = $request->query->get('accountId');
191
        $propertyId = $request->query->get('propertyId');
192
        $profileId = $request->query->get('profileId');
193
        $disableGoals = $request->query->get('disableGoals');
194
195
        // edit the config
196
        $em = $this->getDoctrine()->getManager();
197
        $config = $em->getRepository('KunstmaanDashboardBundle:AnalyticsConfig')->find($configId);
198
        if ($accountId && $propertyId && $profileId) {
199
            $config->setAccountId($accountId);
200
            $config->setPropertyId($propertyId);
201
            $config->setProfileId($profileId);
202
        }
203
204
        $em->persist($config);
0 ignored issues
show
It seems like $config defined by $em->getRepository('Kuns...nfig')->find($configId) on line 197 can also be of type null; however, Doctrine\Common\Persiste...bjectManager::persist() does only seem to accept object, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
205
        $em->flush();
206
207
        // set the config name
208
        $configHelper = $this->container->get('kunstmaan_dashboard.helper.google.analytics.config');
209
        $configHelper->init($configId);
210
        $profile = $configHelper->getActiveProfile();
211
        $config->setName($profile['profileName']);
212
        $config->setDisableGoals($disableGoals);
213
214
        $em->persist($config);
0 ignored issues
show
It seems like $config defined by $em->getRepository('Kuns...nfig')->find($configId) on line 197 can also be of type null; however, Doctrine\Common\Persiste...bjectManager::persist() does only seem to accept object, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
215
        $em->flush();
216
217
        $this->addFlash(
218
            FlashTypes::SUCCESS,
219
            $this->get('translator')->trans('kuma_admin.ga_ajax_controller.flash.success')
220
        );
221
222
        return new JsonResponse();
223
    }
224
225
    /**
226
     * @Route("/config/remove", name="kunstmaan_dashboard_ajax_config_remove")
227
     */
228
    public function removeConfigAction(Request $request)
229
    {
230
        // get params
231
        $configId = $request->query->get('configId');
232
233
        // edit the config
234
        $em = $this->getDoctrine()->getManager();
235
        $config = $em->getRepository('KunstmaanDashboardBundle:AnalyticsConfig')->find($configId);
236
        $em->remove($config);
0 ignored issues
show
It seems like $config defined by $em->getRepository('Kuns...nfig')->find($configId) on line 235 can also be of type null; however, Doctrine\Common\Persiste...ObjectManager::remove() does only seem to accept object, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
237
        $em->flush();
238
239
        return new JsonResponse();
240
    }
241
242
    /**
243
     * @Route("/config/get", name="kunstmaan_dashboard_ajax_config_get")
244
     */
245
    public function getConfigAction(Request $request)
246
    {
247
        $em = $this->getDoctrine()->getManager();
248
        $config = $em->getRepository('KunstmaanDashboardBundle:AnalyticsConfig')->findFirst();
249
        $accountId = $config->getAccountId();
250
251
        if (!$accountId) {
252
            return new JsonResponse();
253
        }
254
255
        $configHelper = $this->container->get('kunstmaan_dashboard.helper.google.analytics.config');
256
        $configHelper->getAccounts();
257
        $configHelper->getProperties();
258
        $configHelper->getProfiles();
259
    }
260
261
    /* =============================== SEGMENT =============================== */
262
263
    /**
264
     * @Route("/segment/add/", name="kunstmaan_dashboard_ajax_segment_add")
265
     */
266
    public function addSegmentAction(Request $request)
267
    {
268
        $configId = $request->query->get('configId');
269
        $em = $this->getDoctrine()->getManager();
270
271
        // create a new segment
272
        $segment = new AnalyticsSegment();
273
        $query = $request->query->get('query');
274
        $name = $request->query->get('name');
275
        $segment->setQuery($query);
276
        $segment->setName($name);
277
278
        // add the segment to the config
279
        $config = $em->getRepository('KunstmaanDashboardBundle:AnalyticsConfig')->find($configId);
280
        $segment->setConfig($config);
281
        $segments = $config->getSegments();
282
        $segments[] = $segment;
283
        $config->setSegments($segments);
284
285
        $em->persist($config);
0 ignored issues
show
It seems like $config defined by $em->getRepository('Kuns...nfig')->find($configId) on line 279 can also be of type null; however, Doctrine\Common\Persiste...bjectManager::persist() does only seem to accept object, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
286
        $em->flush();
287
288
        return new JsonResponse();
289
    }
290
291
    /**
292
     * @Route("/segment/delete", name="kunstmaan_dashboard_ajax_segment_delete")
293
     */
294
    public function deleteSegmentAction(Request $request)
295
    {
296
        $em = $this->getDoctrine()->getManager();
297
298
        $id = $request->query->get('id');
299
        $em->getRepository('KunstmaanDashboardBundle:AnalyticsSegment')->deleteSegment($id);
300
301
        return new JsonResponse();
302
    }
303
304
    /**
305
     * @Route("/segment/edit", name="kunstmaan_dashboard_ajax_segment_edit")
306
     */
307
    public function editSegmentAction(Request $request)
308
    {
309
        $em = $this->getDoctrine()->getManager();
310
311
        $id = $request->query->get('id');
312
        $query = $request->query->get('query');
313
        $name = $request->query->get('name');
314
        $segment = $em->getRepository('KunstmaanDashboardBundle:AnalyticsSegment')->find($id);
315
        $segment->setName($name);
316
        $segment->setQuery($query);
317
        $em->persist($segment);
0 ignored issues
show
It seems like $segment defined by $em->getRepository('Kuns...icsSegment')->find($id) on line 314 can also be of type null; however, Doctrine\Common\Persiste...bjectManager::persist() does only seem to accept object, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
318
        $em->flush();
319
320
        return new JsonResponse();
321
    }
322
}
323