forked from wp-plugins/dsidxpress
/
shortcodes.php
170 lines (159 loc) · 7.03 KB
/
shortcodes.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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<?php
class dsSearchAgent_Shortcodes {
static function Listing($atts, $content = null, $code = "") {
$options = get_option(DSIDXPRESS_OPTION_NAME);
if (!$options["Activated"])
return "";
$atts = shortcode_atts(array(
"mlsnumber" => "",
"statuses" => "",
"showall" => "false",
"showpricehistory" => "false",
"showschools" => "false",
"showextradetails" => "false",
"showfeatures" => "false",
"showlocation" => "false"
), $atts);
$apiRequestParams = array();
$apiRequestParams["responseDirective.ViewNameSuffix"] = "shortcode";
$apiRequestParams["query.MlsNumber"] = str_replace(" ", "", $atts["mlsnumber"]);
if(self::TranslateStatuses($atts["statuses"])){
$apiRequestParams["query.ListingStatuses"] = self::TranslateStatuses($atts["statuses"]);
} //else the api will use active and conditional by default
$apiRequestParams["responseDirective.ShowSchools"] = $atts["showschools"];
$apiRequestParams["responseDirective.ShowPriceHistory"] = $atts["showpricehistory"];
$apiRequestParams["responseDirective.ShowAdditionalDetails"] = $atts["showextradetails"];
$apiRequestParams["responseDirective.ShowFeatures"] = $atts["showfeatures"];
$apiRequestParams["responseDirective.ShowLocation"] = $atts["showlocation"];
if ($atts["showall"] == "true") {
$apiRequestParams["responseDirective.ShowSchools"] = "true";
$apiRequestParams["responseDirective.ShowPriceHistory"] = "true";
$apiRequestParams["responseDirective.ShowAdditionalDetails"] = "true";
$apiRequestParams["responseDirective.ShowFeatures"] = "true";
$apiRequestParams["responseDirective.ShowLocation"] = "true";
}
$apiHttpResponse = dsSearchAgent_ApiRequest::FetchData("Details", $apiRequestParams, false);
dsidx_footer::ensure_disclaimer_exists();
if ($apiHttpResponse["response"]["code"] == "403") {
return '<p class="dsidx-error">'.DSIDXPRESS_INACTIVE_ACCOUNT_MESSAGE.'</p>';
}
if ($apiHttpResponse["response"]["code"] == "404") {
return '<p class="dsidx-error">'.sprintf(DSIDXPRESS_INVALID_MLSID_MESSAGE, $atts[mlsnumber]).'</p>';
}
else if (empty($apiHttpResponse["errors"]) && $apiHttpResponse["response"]["code"] == "200") {
return $apiHttpResponse["body"];
} else {
return '<p class="dsidx-error">'.DSIDXPRESS_IDX_ERROR_MESSAGE.'</p>';
}
}
static function Listings($atts, $content = null, $code = "") {
$options = get_option(DSIDXPRESS_OPTION_NAME);
if (!$options["Activated"])
return "";
$atts = shortcode_atts(array(
"city" => "",
"community" => "",
"county" => "",
"tract" => "",
"zip" => "",
"minprice" => "",
"maxprice" => "",
"minbeds" => "",
"maxbeds" => "",
"minbaths" => "",
"maxbaths" => "",
"mindom" => "",
"maxdom" => "",
"minyear" => "",
"maxyear" => "",
"minimpsqft" => "",
"maximpsqft" => "",
"minlotsqft" => "",
"maxlotsqft" => "",
"statuses" => "",
"propertytypes" => "",
"linkid" => "",
"count" => "5",
"orderby" => "DateAdded",
"orderdir" => "DESC",
"showlargerphotos" => "false"
), $atts);
$apiRequestParams = array();
$apiRequestParams["responseDirective.ViewNameSuffix"] = "shortcode";
$apiRequestParams["responseDirective.IncludeMetadata"] = "true";
$apiRequestParams["responseDirective.IncludeLinkMetadata"] = "true";
$apiRequestParams["responseDirective.ShowLargerPhotos"] = $atts["showlargerphotos"];
$apiRequestParams["query.Cities"] = htmlspecialchars_decode($atts["city"]);
$apiRequestParams["query.Communities"] = htmlspecialchars_decode($atts["community"]);
$apiRequestParams["query.Counties"] = htmlspecialchars_decode($atts["county"]);
$apiRequestParams["query.TractIdentifiers"] = htmlspecialchars_decode($atts["tract"]);
$apiRequestParams["query.ZipCodes"] = $atts["zip"];
$apiRequestParams["query.PriceMin"] = $atts["minprice"];
$apiRequestParams["query.PriceMax"] = $atts["maxprice"];
$apiRequestParams["query.BedsMin"] = $atts["minbeds"];
$apiRequestParams["query.BedsMax"] = $atts["maxbeds"];
$apiRequestParams["query.BathsMin"] = $atts["minbaths"];
$apiRequestParams["query.BathsMax"] = $atts["maxbaths"];
$apiRequestParams["query.DaysOnMarketMin"] = $atts["mindom"];
$apiRequestParams["query.DaysOnMarketMax"] = $atts["maxdom"];
$apiRequestParams["query.YearBuiltMin"] = $atts["minyear"];
$apiRequestParams["query.YearBuiltMax"] = $atts["maxyear"];
$apiRequestParams["query.ImprovedSqFtMin"] = $atts["minimpsqft"];
$apiRequestParams["query.ImprovedSqFtMax"] = $atts["maximpsqft"];
$apiRequestParams["query.LotSqFtMin"] = $atts["minlotsqft"];
$apiRequestParams["query.LotSqFtMax"] = $atts["maxlotsqft"];
if(self::TranslateStatuses($atts["statuses"]))
$apiRequestParams["query.ListingStatuses"] = self::TranslateStatuses($atts["statuses"]);
else
$apiRequestParams["query.ListingStatuses"] = 3;
if ($atts["propertytypes"]) {
$propertyTypes = explode(",", str_replace(" ", "", $atts["propertytypes"]));
$propertyTypes = array_combine(range(0, count($propertyTypes) - 1), $propertyTypes);
foreach ($propertyTypes as $key => $value)
$apiRequestParams["query.PropertyTypes[{$key}]"] = $value;
}
if ($atts["linkid"]) {
$apiRequestParams["query.LinkID"] = $atts["linkid"];
$apiRequestParams["query.ForceUsePropertySearchConstraints"] = "true";
}
$apiRequestParams["directive.ResultsPerPage"] = $atts["count"];
$apiRequestParams["directive.SortOrders[0].Column"] = $atts["orderby"];
$apiRequestParams["directive.SortOrders[0].Direction"] = $atts["orderdir"];
$apiHttpResponse = dsSearchAgent_ApiRequest::FetchData("Results", $apiRequestParams);
dsidx_footer::ensure_disclaimer_exists();
if (empty($apiHttpResponse["errors"]) && $apiHttpResponse["response"]["code"] == "200") {
return $apiHttpResponse["body"];
} else {
if ($apiHttpResponse["response"]["code"] == "403") {
return '<p class="dsidx-error">'.DSIDXPRESS_INACTIVE_ACCOUNT_MESSAGE.'</p>';
}
return '<p class="dsidx-error">'.DSIDXPRESS_IDX_ERROR_MESSAGE.'</p>';
}
}
static function TranslateStatuses($ids) {
$values = '';
$ids = explode(',',$ids);
foreach ($ids as $id) {
switch($id) {
case 1: $values .= 'Active,'; break;
case 2: $values .= 'Conditional,'; break;
case 3: $values .= 'Pending,'; break;
case 4: $values .= 'Sold,'; break;
}
}
return substr($values, 0, strlen($values) - 1);
}
static function IdxQuickSearch($atts, $content = null, $code = ""){
$atts = shortcode_atts(array(
"format" => "horizontal"
), $atts);
ob_start();
dsSearchAgent_IdxQuickSearchWidget::shortcodeWidget(array('widgetType'=>$atts['format'], 'class'=>'dsidx-inline-form'));
$markup = ob_get_clean();
return '<p>'.$markup.'</p>';
}
}
add_shortcode("idx-listing", array("dsSearchAgent_ShortCodes", "Listing"));
add_shortcode("idx-listings", array("dsSearchAgent_ShortCodes", "Listings"));
add_shortcode("idx-quick-search", array("dsSearchAgent_ShortCodes", "IdxQuickSearch"));
?>