File: /home/awaldron/_phpassport/api.pennhillspassport.com/v1/directory.php
<?php
//**********************************************************************************************************//
// Method: GET
// Endpoint: directory/catlist
function get_v1_directory_catlist( $args, $body, $uid, $admin_level, $db ) {
$cat_id = !!count($args) ? $args[0] : false;
$sql = "SELECT * FROM directory_categories" . ($cat_id ? " WHERE directory_id=".$cat_id : "") . " ORDER BY directory_id ASC, rank ASC";
$res = qSet( $db, $sql);
$data['records'] = $res;
$data['results'] = count($res);
response(200, ['success'=>true, 'data'=>$data] );
}
//**********************************************************************************************************//
// Method: GET
// Endpoint: directory/placeexists
function get_v1_directory_placeexists( $args, $body, $uid, $admin_level, $db ) {
$place_id = $args[0];
$res = qRow( $db, "SELECT * FROM directory_entries WHERE place_id='".$place_id."'" );
if ($res) {
$place_data = !!strlen($res['placedata']);
response(200, ['success'=>true, 'exists'=>true, 'dir_id'=>$res['directory_id'], 'cat_id'=>$res['directory_category_id'], 'place_id'=>$place_id, 'place_data'=>$place_data] );
} else {
response(200, ['success'=>true, 'exists'=>false, 'dir_id'=>'0', 'cat_id'=>'0', 'place_data'=>false] );
}
}
//**********************************************************************************************************//
// Method: GET
// Endpoint: directory/place
function get_v1_directory_place( $args, $body, $uid, $admin_level, $db ) {
$place_id = $args[0];
$res = qRow( $db, "SELECT * FROM directory_entries WHERE place_id='".$place_id."'" );
$photos = qSet( $db, "SELECT * FROM directory_images WHERE directory_entry_id='".$res['id']."' ORDER BY rank ASC" );
if ($res) {
$res['data'] = json_decode($res['data']);
$res['placedata'] = json_decode($res['placedata']);
$res['images'] = $photos;
response(200, ['success'=>true, 'place'=>$res] );
} else {
response(200, ['success'=>false] );
}
}
//**********************************************************************************************************//
// Method: GET
// Endpoint: directory/place
function get_v1_directory_id( $args, $body, $uid, $admin_level, $db ) {
$id = $args[0];
$res = qRow( $db, "SELECT * FROM directory_entries WHERE id='".$id."'" );
$photos = qSet( $db, "SELECT * FROM directory_images WHERE directory_entry_id='".$id."' ORDER BY rank ASC" );
if ($res) {
$res['data'] = json_decode($res['data']);
$res['placedata'] = json_decode($res['placedata']);
$res['images'] = $photos;
response(200, ['success'=>true, 'entry'=>$res] );
} else {
response(200, ['success'=>false] );
}
}
//**********************************************************************************************************//
// Method: GET
// Endpoint: directory/categories
function get_v1_directory_categories( $args, $body, $uid, $admin_level, $db ) {
$dir_id = $args[0];
$res = qSet( $db, "SELECT * FROM directory_categories WHERE directory_id='".$dir_id."' ORDER BY rank ASC" );
if ($res) {
response(200, ['success'=>true, 'categories'=>$res] );
} else {
response(200, ['success'=>false] );
}
}
//**********************************************************************************************************//
// Method: GET
// Endpoint: directory/entities
function get_v1_directory_entities( $args, $body, $uid, $admin_level, $db ) {
$dir_id = $args[0];
$cat_id = $args[1];
$res = qSet( $db, "
SELECT de.*, mi.url as image, mi.rank as image_rank
FROM directory_entries as de
LEFT JOIN (SELECT id as diid, directory_entry_id as deid, url, MIN(rank) as rank FROM directory_images GROUP BY deid ) mi
ON de.id = mi.deid
LEFT JOIN directory_images di ON mi.diid = di.id
WHERE de.directory_id=".$dir_id."
AND de.directory_category_id=".$cat_id."
ORDER BY de.rank ASC, de.name ASC, image_rank ASC;");
$data['records'] = $res;
$data['results'] = count($res);
response(200, ['success'=>true, 'data'=>$data] );
}
//**********************************************************************************************************//
// Method: GET
// Endpoint: directory/structure
function get_v1_directory_structure( $args, $body, $uid, $admin_level, $db ) {
$dir_id = $args[0];
$res = qSet( $db, "SELECT d.name as dName, dc.id as dcId, dc.name as dcName, dc.slug as dcSlug, dc.icon as dcIcon, dc.rank as dcRank,
de.id as deId, de.place_id as dePlaceId, de.name as deName, de.description as deDescription, de.phone as dePhone, de.website as deWebsite, de.active as deActive,
de.data as deData, de.placedata as dePlaceData, COUNT(dp.id) as dpCount
FROM directories as d
LEFT JOIN directory_categories as dc ON d.id=dc.directory_id
LEFT JOIN directory_entries as de ON de.directory_category_id=dc.id
LEFT JOIN directory_images as dp ON dp.directory_entry_id=de.id
WHERE d.id=".$dir_id." AND de.active=1
GROUP BY deId
ORDER BY dcRank ASC, deName ASC");
$data['records'] = $res;
$data['results'] = count($res);
response(200, ['success'=>true, 'data'=>$data] );
}
//**********************************************************************************************************//
// Method: DELETE
// Endpoint: directory/entry
// Params: id
function delete_v1_directory_entry( $args, $body, $uid, $is_admin, $db ) {
try {
if ($is_admin) {
$db->query( "DELETE FROM directory_entries WHERE id=".$args[0] );
response(200, ['success'=>true]);
}
else {
response(200, ['success'=>false, 'errors'=>['User not authorized to delete this event date.']] );
}
}
catch (Exception $e) {
response(200, ['success'=>false, 'errors'=>[$e->getMessage()]] );
}
}
//**********************************************************************************************************//
// Method: PUT
// Endpoint: directory/entry
// Params: id
function put_v1_directory_entry( $args, $body, $uid, $is_admin, $db ) {
$rules = [
'field' => 'req',
'value' => 'req',
'id' => 'req',
];
validate_body( $body, $rules );
$field = '';
$value = addslashes(is_array($body['value']) ? json_encode($body['value']) : $body['value']);
$did = $body['id'];
switch ( $body['field'] ) {
case 'dcId' : $field = 'directory_category_id'; break;
case 'deName' : $field = 'name'; break;
case 'dePhone' : $field = 'phone'; break;
case 'deWebsite' : $field = 'website'; break;
case 'deLat' : $field = 'lat'; break;
case 'deLng' : $field = 'lng'; break;
case 'deDescription' : $field = 'description'; break;
case 'dePlaceData' : $field = 'placedata'; break;
case 'deData' : $field = 'data'; break;
}
try {
if ($is_admin) {
$db->query( "UPDATE directory_entries SET `".$field."`='".$value."' WHERE id=".$did );
response(200, ['success'=>true]);
}
else {
response(200, ['success'=>false, 'errors'=>['User not authorized to delete this event date.']] );
}
}
catch (Exception $e) {
response(200, ['success'=>false, 'errors'=>[$e->getMessage()]] );
}
}
//**********************************************************************************************************//
// Method: POST
// Endpoint: directory/entry
function post_v1_directory_entry( $args, $body, $uid, $admin_level, $db ) {
$last_query = '';
try {
$url = 'https://maps.googleapis.com/maps/api/place/details/json?placeid='.$body['place_id'].'&key=AIzaSyCfcS4oNeAxWbHt42EWNhbH_mjPKd3kh6o';
if (substr($body['place_id'],0,3) === 'php') {
$response = json_encode($body['placedata']);
} else {
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($handle);
curl_close($handle);
}
if ($body['mode'] === 'ins') {
$ins = "INSERT INTO directory_entries (`directory_id`, `directory_category_id`, `place_id`, `name`, `description`, `phone`, `website`, `lat`, `lng`, `data`, `placedata`) VALUES (";
$ins .= $body['directory_id'].", ";
$ins .= $body['directory_category_id'].", ";
$ins .= "'".$body['place_id']."', ";
$ins .= "'".addslashes($body['name'])."', ";
$ins .= "'".addslashes($body['description'])."', ";
$ins .= "'".addslashes($body['phone'])."', ";
$ins .= "'".addslashes($body['website'])."', ";
$ins .= "'".addslashes($body['lat'])."', ";
$ins .= "'".addslashes($body['lng'])."', ";
$ins .= "'".addslashes(json_encode($body['data']))."', ";
$ins .= "'".addslashes($response)."'";
$ins .= ")";
$last_query = $ins;
}
else if ($body['mode'] === 'upd') {
$arr = json_decode($response, true);
$str = json_encode($arr['result']);
$ins = "UPDATE directory_entries SET placedata='".addslashes($str)."' WHERE place_id='".$body['place_id']."'";
$last_query = $ins;
}
$db->query( $ins );
$last_id = $body['mode'] === 'ins' ? qVal( $db, "SELECT MAX(id) FROM directory_entries" ) : -1;
}
catch (Exception $e) {
response(200, ['success'=>false, 'errors'=>[$e->getMessage()], 'last_query'=>$last_query] );
}
response(200, ['success'=>true, 'name'=>$body['place_id'], 'newId'=> $last_id] );
}
//**********************************************************************************************************//
// Method: POST
// Endpoint: directory/image
function post_v1_directory_image($args, $body, $uid, $is_admin, $db)
{
$entryId = $args[0];
$upload_dir = '/home/awaldron/_phpassport/pennhillspassport.com/directory/';
//$upload_dir = 'uploads/';
$server_url = 'https://pennhillspassport.com/directory';
try {
if ($_FILES['image']) {
$image_name = $_FILES["image"]["name"];
$image_temp_name = $_FILES["image"]["tmp_name"];
$error = $_FILES["image"]["error"];
$file_ext = pathinfo($image_name, PATHINFO_EXTENSION);
$file_name_str = pathinfo($image_name, PATHINFO_FILENAME);
if ($error > 0) {
response(200, ['success' => false, 'files' => $_FILES, 'errors' => ["File payload contained an error"]]);
} else {
$new_name = rand(1000, 1000000) . "-" . slugify($file_name_str) . '.' . $file_ext;
$upload_name = $upload_dir . $new_name;
if (move_uploaded_file($image_temp_name, $upload_name)) {
resize_crop_image($upload_name, $upload_name, 1000, 500);
$imgUrl = $server_url . "/" . strtolower($new_name);
$db->query( "INSERT INTO directory_images (`url`, `directory_entry_id`) VALUES ('".$imgUrl."', ".$entryId.")" );
response(200, ['success' => true, "message" => "File uploaded successfully", "url" => $imgUrl]);
} else {
response(200, ['success' => false, 'files' => $_FILES, 'errors' => ["Error uploading file"]]);
}
}
} else {
response(200, ['success' => false, 'files' => $_FILES, 'errors' => ["No file sent."]]);
}
} catch (Exception $e) {
response(200, ['success' => false, 'files' => $_FILES, 'errors' => [$e->getMessage()]]);
}
}
//**********************************************************************************************************//
// Method: GET
// Endpoint: directory/images
function get_v1_directory_images( $args, $body, $uid, $admin_level, $db ) {
$entry_id = $args[0];
$res = qSet( $db, "SELECT * FROM directory_images WHERE directory_entry_id=".$entry_id." ORDER BY rank ASC, id ASC");
response(200, ['success'=>true, 'images'=>$res] );
}
//**********************************************************************************************************//
// Method: DELETE
// Endpoint: directory/images
function delete_v1_directory_images( $args, $body, $uid, $is_admin, $db ) {
if ($is_admin) {
$image_id = $args[0];
$db->query( "DELETE FROM directory_images WHERE id=" . $image_id );
}
response(200, ['success'=>true, 'isAdmin'=>$is_admin] );
}
//**********************************************************************************************************//
// Method: POST
// Endpoint: directory/places
function post_v1_directory_places( $args, $body, $uid, $is_admin, $db ) {
$rules = [
'lat' => 'req',
'lng' => 'req',
];
validate_body( $body, $rules );
$url = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json?location='.$body['lat'].','.$body['lng'].'&rankby=distance&key=AIzaSyCfcS4oNeAxWbHt42EWNhbH_mjPKd3kh6o';
if (!empty($body['nextToken'])) {
$url .= '&pagetoken='.$body['nextToken'];
}
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($handle);
curl_close($handle);
$places = json_decode($response, true);
response(200, ['success'=>true, 'places'=>$places] );
}