DealerListener::generateGoogleRequest()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
/*************************************************************************************/
3
/*      This file is part of the Thelia package.                                     */
4
/*                                                                                   */
5
/*      Copyright (c) OpenStudio                                                     */
6
/*      email : [email protected]                                                       */
7
/*      web : http://www.thelia.net                                                  */
8
/*                                                                                   */
9
/*      For the full copyright and license information, please view the LICENSE.txt  */
10
/*      file that was distributed with this source code.                             */
11
/*************************************************************************************/
12
/*************************************************************************************/
13
14
namespace Dealer\EventListener;
15
16
use Dealer\Event\DealerEvent;
17
use Dealer\Event\DealerEvents;
18
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
19
use Symfony\Component\Serializer\Encoder\JsonEncoder;
20
use Thelia\Log\Tlog;
21
22
/**
23
 * Class DealerListener
24
 * @package Dealer\EventListener
25
 */
26
class DealerListener implements EventSubscriberInterface
27
{
28
29
    /**
30
     * @inheritdoc
31
     */
32
    public static function getSubscribedEvents()
33
    {
34
        return [
35
            DealerEvents::DEALER_CREATE_AFTER => ["updateGeo", 128],
36
        ];
37
    }
38
39
    public function updateGeo(DealerEvent $event){
40
            $this->generateCoordinate($event);
41
            $event->getDealer()->save();
42
    }
43
44
    /**
45
     * Generate Address for Google API request
46
     * @param DealerEvent $event
47
     * @return string
48
     */
49
    protected function generateAddress(DealerEvent $event)
50
    {
51
        $dealer = $event->getDealer();
52
        $address = $dealer->getAddress1();
53
        if ($dealer->getAddress2()) {
54
            $address .= " " . $dealer->getAddress2();
55
        }
56
        $address .= " " . $dealer->getZipcode() . " " . $dealer->getCity();
57
        $address = str_replace(" ", "+", $address);
58
        return $address;
59
    }
60
61
    /**
62
     * Generate URL for Google API request
63
     * @param DealerEvent $event
64
     * @return string
65
     */
66
    protected function generateGoogleRequest(DealerEvent $event)
67
    {
68
        $url = "https://maps.googleapis.com/maps/api/geocode/json?";
69
        $url .= "address=" . $this->generateAddress($event);
70
        return $url;
71
    }
72
73
    /**
74
     * Get create|update event from Dealer to insert lat/lon param
75
     * @param DealerEvent $event
76
     */
77
    public function generateCoordinate(DealerEvent $event)
78
    {
79
        if ($url = $this->generateGoogleRequest($event)) {
80
            try {
81
                $response = file_get_contents($url);
82
                if ($response) {
83
                    $jsonEncoder = new JsonEncoder();
84
                    $data = $jsonEncoder->decode($response, JsonEncoder::FORMAT);
85
                    if(isset($data["status"]) && strcmp($data["status"],"OK") == 0){
86
                        $loc = $data["results"][0]["geometry"]["location"];
87
                        $event->getDealer()->setLatitude($loc["lat"]);
88
                        $event->getDealer()->setLongitude($loc["lng"]);
89
                    }
90
                }
91
            } catch (\ErrorException $ex) {
92
                Tlog::getInstance()->error("DEALER GOOGLE MAP : " . $ex->getMessage());
93
            }
94
        }
95
    }
96
97
98
}