HEX
Server: Apache
System: Linux www3.pit.tblive.com 5.14.0-687.38.1.el9_8.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Aug 12 17:19:12 EDT 2026 x86_64
User: awaldron (1020)
PHP: 8.1.34
Disabled: exec,passthru,shell_exec,system
Upload Files
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] );
}