-
Notifications
You must be signed in to change notification settings - Fork 0
/
ExampleController.php
127 lines (112 loc) · 4.61 KB
/
ExampleController.php
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
namespace Timitek\GetRETS\Http\Controllers;
use Illuminate\Routing\Controller as Controller;
use Illuminate\Http\Request;
use GetRETS;
class ExampleController extends Controller {
const IS_PUBLIC = false;
const EXAMPLE_ADDRESS = "sheridan, ar";
const EXAMPLE_SOURCE = "CARMLS";
/**
* Used to determine if a specific action was specified
*
* @param Request $request
* @param type $action
* @return type
*/
private function isAction(Request $request, $action) {
return array_key_exists($action, $request->all());
}
/**
* Returns either the cached or non-cached listing controller
*
* @param type $data
* @return type
*/
private function listingController($data) {
return ($data["disableCache"] ? GetRETS::getRETSListing() : GetRETS::getListing());
}
/**
* Handles requested action from a form post
*
* @param Request $request
* @param type $data
*/
private function handleAction(Request $request, &$data) {
// Keyword Search
if ($this->isAction($request, "searchByKeyword")) {
$preparedKeywords = htmlspecialchars($data["keywords"]);
$data["listings"] = $this->listingController($data)
->setSortBy($data["sortBy"])->setReverseSort($data["reverseSort"])
->searchByKeyword($preparedKeywords);
}
// Advanced Search
else if ($this->isAction($request, "search")) {
$data["listings"] = $this->listingController($data)
->setSortBy($data["sortBy"])->setReverseSort($data["reverseSort"])
->search($data["keywords"], $data["extra"], $data["maxPrice"], $data["minPrice"], $data["beds"], $data["baths"], $data["includeResidential"], $data["includeLand"], $data["includeCommercial"]);
}
// Return Listings by DMQL
else if ($this->isAction($request, "getListingsByDMQL")) {
$results = GetRETS::getRETSListing()
->setSortBy($data["sortBy"])->setReverseSort($data["reverseSort"])
->getListingsByDMQL($data["dmql"], ExampleController::EXAMPLE_SOURCE, "Residential");
if (!empty($results)) {
if ($results->success && !empty($results->data)) {
$data["listings"] = $results->data;
}
}
}
// Return raw DMQL results
else if ($this->isAction($request, "executeDMQL")) {
$data["rawData"] = GetRETS::getRETSListing()->executeDMQL($data["dmql"], ExampleController::EXAMPLE_SOURCE, "Residential");
}
}
/**
* Returns an array of data to be used in the view
*
* @param Request $request
* @return type
*/
private function getPageData(Request $request) {
$publicDMQL = '(L_UpdateDate=' . date('Y-m-d', (strtotime('-1 day', time()))) . '-' . date('Y-m-d') . ')';
$data = [
"isPublic" => ExampleController::IS_PUBLIC,
"disableCache" => !empty($request->disableCache),
"keywords" => $request->keywords ? : ExampleController::EXAMPLE_ADDRESS,
"extra" => $request->extra,
"maxPrice" => $request->maxPrice,
"minPrice" => $request->minPrice,
"beds" => $request->beds,
"baths" => $request->baths,
"includeResidential" => $request->includeResidential,
"includeLand" => $request->includeLand,
"includeCommercial" => $request->includeCommercial,
"sortBy" => $request->sortBy ? : "rawListPrice",
"reverseSort" => !empty($request->reverseSort),
// Only let the public search the last days worth of modified residential listings (to prevent abusive queries)
"dmql" => (!empty($request->dmql) && !$data["isPublic"]) ? $request->dmql : $publicDMQL,
"listings" => null,
"detail" => null,
"rawData" => null,
"allInput" => $request->all(),
];
if ($request->isMethod('POST')) {
$this->handleAction($request, $data);
}
// Listing Details
if ($request->has("source") && $request->has("type") && $request->has("id")) {
$data["detail"] = $this->listingController($data)->details($request->source, $request->type, $request->id);
}
return $data;
}
/**
* Default route handler
*
* @param Request $request
* @return type
*/
public function index(Request $request) {
return view('GetRETS::example.index', ['data' => $this->getPageData($request)]);
}
}