This repository was archived by the owner on Nov 4, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathGeocodableBehaviorQueryBuilderModifier.php
More file actions
110 lines (95 loc) · 3.82 KB
/
GeocodableBehaviorQueryBuilderModifier.php
File metadata and controls
110 lines (95 loc) · 3.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
namespace Geocoder\Propel\Behavior;
/**
* This file is part of the GeocodableBehavior package.
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @license MIT License
*/
/**
* @author William Durand <william.durand1@gmail.com>
*/
class GeocodableBehaviorQueryBuilderModifier
{
/**
* @var GeocodableBehavior
*/
private $behavior;
public function __construct(\Propel\Generator\Model\Behavior $behavior)
{
$this->behavior = $behavior;
}
/**
* {@inheritdoc}
*/
public function queryMethods($builder)
{
$script = '';
$script .= $this->addWithDistance($builder);
$script .= $this->addFilterByDistanceFrom($builder);
$script .= $this->addFilterNear($builder);
return $script;
}
/**
* @param \Propel\Generator\Builder\Om\AbstractObjectBuilder $builder $builder
* @return string
*/
public function addWithDistance($builder)
{
$builder->declareClass('Criteria', 'PDO');
$queryClassName = $builder->getStubQueryBuilder()->getClassname();
$peerClassName = $builder->getTableMapClassName();
return $this->behavior->renderTemplate('queryWithDistance', array(
'queryClassName' => $queryClassName,
'defaultUnit' => $this->getDefaultUnit($builder),
'peerClassName' => $peerClassName,
'longitudeColumnConstant' => $this->behavior->getColumnConstant('longitude_column', $builder),
'latitudeColumnConstant' => $this->behavior->getColumnConstant('latitude_column', $builder),
));
}
/**
* @param \Propel\Generator\Builder\Om\AbstractObjectBuilder $builder $builder
* @return string
*/
public function addFilterByDistanceFrom($builder)
{
$builder->declareClass('Criteria', 'PDO');
$queryClassName = $builder->getStubQueryBuilder()->getClassname();
$peerClassName = $builder->getTableMapClassName();
return $this->behavior->renderTemplate('queryFilterByDistanceFrom', array(
'queryClassName' => $queryClassName,
'defaultUnit' => $this->getDefaultUnit($builder),
'peerClassName' => $peerClassName,
'longitudeColumnConstant' => $this->behavior->getColumnConstant('longitude_column', $builder),
'latitudeColumnConstant' => $this->behavior->getColumnConstant('latitude_column', $builder),
));
}
/**
* @param \Propel\Generator\Builder\Om\AbstractObjectBuilder $builder $builder
* @return string
*/
public function addFilterNear($builder)
{
$builder->declareClassFromBuilder($builder->getStubObjectBuilder());
$objectClassName = $builder->getStubObjectBuilder()->getClassname();
$variableName = strtolower($builder->getStubObjectBuilder()->getUnqualifiedClassName());
$queryClassName = $builder->getStubQueryBuilder()->getClassname();
return $this->behavior->renderTemplate('queryFilterNear', array(
'objectClassName' => $objectClassName,
'variableName' => $variableName,
'queryClassName' => $queryClassName,
'latitudeColumnGetter' => $this->behavior->getColumnGetter('latitude_column'),
'longitudeColumnGetter' => $this->behavior->getColumnGetter('longitude_column'),
'defaultUnit' => $this->getDefaultUnit($builder),
));
}
/**
* @param \Propel\Generator\Builder\Om\AbstractObjectBuilder $builder $builder
* @return string
*/
protected function getDefaultUnit($builder)
{
return sprintf('%s::KILOMETERS_UNIT', $builder->getTableMapClassName());
}
}