diff --git a/.env.dist b/.env.dist index 4e10dffc..ca93d2d2 100644 --- a/.env.dist +++ b/.env.dist @@ -42,3 +42,6 @@ POLICY_MOBILE=insertmobilepolicyidhere # OTP OTP_MODE=settotestorrandom + +# geofence +GEOFENCE_ENABLE=settotrueorfalse diff --git a/config/services.yaml b/config/services.yaml index 8c8024f5..c6f2f877 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -87,6 +87,10 @@ services: $password: "%env(REDIS_CLIENT_PASSWORD)%" $env_flag: "dev" + App\Service\GeofenceTracker: + arguments: + $geofence_flag: "%env(GEOFENCE_ENABLE)%" + Catalyst\APIBundle\Security\APIKeyUserProvider: arguments: $em: "@doctrine.orm.entity_manager" diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index 075879bb..75dcb9d0 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -839,18 +839,15 @@ class APIController extends Controller $long = $req->request->get('long'); $lat = $req->request->get('lat'); - /* // geofence $is_covered = $geo->isCovered($long, $lat); if (!$is_covered) { // TODO: put geofence error message in config file somewhere $res->setError(true) - ->setErrorMessage('Oops! Our service is limited to Metro Manila only. We will update you as soon as we are able to cover your area'); + ->setErrorMessage('Oops! Our service is limited to some areas in Metro Manila, Laguna, and Baguio only. We will update you as soon as we are able to cover your area'); return $res->getReturnResponse(); } - */ - $jo = new JobOrder(); $jo->setSource(TransactionOrigin::MOBILE_APP) diff --git a/src/Service/GeofenceTracker.php b/src/Service/GeofenceTracker.php index b2052e02..5acc7564 100644 --- a/src/Service/GeofenceTracker.php +++ b/src/Service/GeofenceTracker.php @@ -11,25 +11,33 @@ use CrEOF\Spatial\PHP\Types\Geometry\Point; class GeofenceTracker { protected $em; + protected $geofence_flag; - public function __construct(EntityManagerInterface $em) + public function __construct(EntityManagerInterface $em, $geofence_flag) { $this->em = $em; + $this->geofence_flag = $geofence_flag; } public function isCovered($long, $lat) { - // see if the point is in any of the polygons - $query = $this->em->createQuery('SELECT count(s) from App\Entity\SupportedArea s where st_contains(s.coverage_area, point(:long, :lat)) = true') - ->setParameter('long', $long) - ->setParameter('lat', $lat); + // check if geofence is enabled + if ($this->geofence_flag == 'true') + { + // see if the point is in any of the polygons + $query = $this->em->createQuery('SELECT count(s) from App\Entity\SupportedArea s where st_contains(s.coverage_area, point(:long, :lat)) = true') + ->setParameter('long', $long) + ->setParameter('lat', $lat); - // number of polygons that contain the point - $count = $query->getSingleScalarResult(); + // number of polygons that contain the point + $count = $query->getSingleScalarResult(); - if ($count > 0) - return true; + if ($count > 0) + return true; - return false; + return false; + } + + return true; } }