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/cron_events.php
<?php

//**********************************************************************************************************//
// Method: GET
// Endpoint: events/library
function get_v1_events_library( $args, $body, $uid, $admin_level, $db ) {
    $handle = curl_init();

    $url = 'https://pennhills.librarycalendar.com/events/feed/json';

    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);

    $events = json_decode($response, true);
    $i = 0;
    $u = 0;

    //pp($events); exit;

    foreach($events as $ev) {
        $eventId = 0;

        // Find Event by Title
        $dbEvent = qRow( $db, "SELECT * FROM events WHERE title='".addslashes($ev['title'])."'");

        // Find Event Date by External Id
        $dbEventDate = qRow( $db, "SELECT * FROM event_dates WHERE ext_id='".$ev['id']."'");

        // FORMAT THE DESCRIPTION
        $description = '';
        if (!empty($ev['description'])) $description .= $ev['description'];
        if (!empty($ev['program_description'])) $description .= '<p>'.reset($ev['program_description']).'</p>';
        if (!empty($ev['room'])) $description .= '<p><b>Room:</b> '.reset($ev['room']).'</p>';
        $description .= '<p>';
        if (!empty($ev['contact_name'])) $description .= 'Contact '.$ev['contact_name'];
        if (!empty($ev['contact_email'])) $description .= ' at <a href="mailto:'.$ev['contact_email'].'">'.$ev['contact_email'].'</a>';
        if (!empty($ev['contact_phone'])) $description .= ' or call <a href="tel:'.$ev['contact_phone'].'">'.formatPhoneNumber($ev['contact_phone']).'</a>';
        $description .= '</p>';

        $start_date = timestamp_to_gmt($ev['start_date']);
        $end_date = timestamp_to_gmt($ev['end_date']);

        // If Event not found, create it
        if ($dbEvent === false) {
            $ins = "INSERT INTO events (`title`, `description`, `url`, `user_id`, `channel_id`, `approved`) VALUES (";
            $ins .= "'".addslashes($ev['title'])."', ";
            $ins .= "'".addslashes(empty($description) ? '' : $description)."', ";
            $ins .= "'".$ev['url']."', ";
            $ins .= "1009, 3, 1 )";

            $db->query( $ins );
            $eventId = qVal( $db, "SELECT MAX(id) FROM events");
        } else {
            $eventId = $dbEvent['id'];
        }

        // INSERT THE EVENT DATE
        if ($dbEventDate === false) {
            $ins = "INSERT INTO event_dates (`event_id`, `description`, `date_start`, `date_end`, `ext_id`, `user_id`, `location_id`, `all_day`) VALUES (";
            $ins .= "'".$eventId."', ";
            $ins .= "'".addslashes(empty($description) ? '' : $description)."', ";
            $ins .= "'".$start_date."', ";
            $ins .= "'".$end_date."', ";
            $ins .= "'".$ev['id']."', ";
            $ins .= "1009, 1, 0 )";

            $db->query( $ins );
            $i++;
        }
        // OR UPDATE THE EVENT DATE
        else {
            $upd = "UPDATE event_dates SET ";
            $upd .= "date_start='".$start_date."', date_end='".$end_date."', ";
            $upd .= "description='".addslashes(empty($description) ? '' : $description)."' ";
            $upd .= "WHERE ext_id='".$ev['id']."'";

            //pp($ev);
            //echo $upd."\n\n";

            $db->query( $upd );
            $last_upd = $upd;
            $u++;
        }
    }

    response(200, ['success' => true, 'inserts' => $i, 'updates' => $u, 'lastrun'=> date('m/d/Y H:i:s'), 'last_update'=>$last_upd ]);
}


//**********************************************************************************************************//
// Method: GET
// Endpoint: events/phathletics

function get_v1_events_phathletics( $args, $body, $uid, $admin_level, $db )
{
    $events = getSchoolEvents( 354 );
    $i = 0;
    $u = 0;

    //pp($events); exit;

    foreach($events as $ev) {
        $eventId = 0;
        if ($ev['SUMMARY'] == 'First Day of School') continue;

        $parts = explode('@', $ev['UID']);
        $ev_date_id = 'phsd-'.$parts[0];

        // Find Event by Title
        $dbEvent = qRow( $db, "SELECT * FROM events WHERE title='".addslashes($ev['SUMMARY'])."'");

        // Find Event Date by External Id
        $dbEventDate = qRow( $db, "SELECT * FROM event_dates WHERE ext_id='".$ev_date_id."'");

        $dtstart = !empty($ev['DTSTART;VALUE=DATE']) ? $ev['DTSTART;VALUE=DATE']."T120000Z" : $ev['DTSTART'];
        $allday = !empty($ev['DTSTART;VALUE=DATE']) ? 1 : 0;
        $start_date = convert_timestamp_format($dtstart);
        $end_date = convert_timestamp_format( !empty($ev['DTEND']) ? $ev['DTEND'] : $dtstart );
        if (!empty($ev['LOCATION'])) {
            $location = qVal( $db, "SELECT id FROM locations WHERE name='".$ev['LOCATION']."'" );
        } else {
            $location = 12;
        }

        // If Event not found, create it
        if ($dbEvent === false) {
            $ins = "INSERT INTO events (`title`, `description`, `url`, `user_id`, `channel_id`, `approved`) VALUES (";
            $ins .= "'".addslashes($ev['SUMMARY'])."', ";
            $ins .= "'".addslashes(empty($ev['DESCRIPTION']) ? '' : $ev['DESCRIPTION'])."', ";
            $ins .= "'', ";
            $ins .= "1001, 7, 1 )";

            $db->query( $ins );
            $lastquery = $ins;
            $eventId = qVal( $db, "SELECT MAX(id) FROM events");
        } else {
            $eventId = $dbEvent['id'];
        }

        // INSERT THE EVENT DATE
        if ($dbEventDate === false) {
            $ins = "INSERT INTO event_dates (`event_id`, `description`, `date_start`, `date_end`, `ext_id`, `user_id`, `location_id`, `all_day`) VALUES (";
            $ins .= "'".$eventId."', ";
            $ins .= "'".addslashes(empty($ev['DESCRIPTION']) ? '' : $ev['DESCRIPTION'])."', ";
            $ins .= "'".$start_date."', ";
            $ins .= "'".$end_date."', ";
            $ins .= "'".$ev_date_id."', ";
            $ins .= "1001, ".$location.", ".$allday." )";

            $db->query( $ins );
            $lastquery = $ins;
            $i++;
        }
        // OR UPDATE THE EVENT DATE
        else {
            $upd = "UPDATE event_dates SET ";
            $upd .= "date_start='".$start_date."', date_end='".$end_date."', all_day='".$allday."', ";
            $upd .= "description='".addslashes(empty($ev['DESCRIPTION']) ? '' : $ev['DESCRIPTION'])."' ";
            $upd .= "WHERE ext_id='".$ev_date_id."'";

            $db->query( $upd );
            $lastquery = $upd;
            $u++;
        }
    }

    response(200, ['success' => true, 'inserts' => $i, 'updates' => $u, 'lastrun'=> date('m/d/Y H:i:s') ]);
}



//**********************************************************************************************************//
// Method: GET
// Endpoint: events/phsd

function get_v1_events_phsd( $args, $body, $uid, $admin_level, $db )
{
    $evIds = [ 349, 353, 351, 361, 352, 359, 366 ];
    $events = [];
    foreach ($evIds as $evId) {
        $tmp_ev = getSchoolEvents( $evId );
        if (count($tmp_ev) > 0) {
            $events = array_merge( $events, $tmp_ev );
        }
    }

    $i = 0;
    $u = 0;

    //pp($events); exit;

    foreach($events as $ev) {
        $eventId = 0;

        $parts = explode('@', $ev['UID']);
        $ev_date_id = 'phsd-'.$parts[0];

        if ($ev['SUMMARY'] == 'First Day of School') continue;

        // Find Event by Title
        $dbEvent = qRow( $db, "SELECT * FROM events WHERE title='".addslashes($ev['SUMMARY'])."'");

        // Find Event Date by External Id
        $dbEventDate = qRow( $db, "SELECT * FROM event_dates WHERE ext_id='".$ev_date_id."'");

        $dtstart = !empty($ev['DTSTART;VALUE=DATE']) ? $ev['DTSTART;VALUE=DATE']."T120000Z" : $ev['DTSTART'];
        $allday = !empty($ev['DTSTART;VALUE=DATE']) ? 1 : 0;
        $start_date = convert_timestamp_format($dtstart);
        $end_date = convert_timestamp_format( !empty($ev['DTEND']) ? $ev['DTEND'] : $dtstart );

        if (empty($ev['LOCATION'])) {
            $location = 12;
        } else if (stristr($ev['LOCATION'], 'elementary')) {
            $location = 9;
        } else if (stristr($ev['LOCATION'], 'middle')) {
            $location = 5;
        } else if (stristr($ev['LOCATION'], 'high')) {
            $location = 12;
        }

        // If Event not found, create it
        if ($dbEvent === false) {
            $ins = "INSERT INTO events (`title`, `description`, `url`, `user_id`, `channel_id`, `approved`) VALUES (";
            $ins .= "'".addslashes($ev['SUMMARY'])."', ";
            $ins .= "'".addslashes(empty($ev['DESCRIPTION']) ? '' : $ev['DESCRIPTION'])."', ";
            $ins .= "'', ";
            $ins .= "1001, 6, 1 )";

            $db->query( $ins );
            $eventId = qVal( $db, "SELECT MAX(id) FROM events");
        } else {
            $eventId = $dbEvent['id'];
        }

        // INSERT THE EVENT DATE
        if ($dbEventDate === false) {
            $ins = "INSERT INTO event_dates (`event_id`, `description`, `date_start`, `date_end`, `ext_id`, `user_id`, `location_id`, `all_day`) VALUES (";
            $ins .= "'".$eventId."', ";
            $ins .= "'".addslashes(empty($ev['DESCRIPTION']) ? '' : $ev['DESCRIPTION'])."', ";
            $ins .= "'".$start_date."', ";
            $ins .= "'".$end_date."', ";
            $ins .= "'".$ev_date_id."', ";
            $ins .= "1001, ".$location.", ".$allday." )";

            $db->query( $ins );
            $i++;
        }
        // OR UPDATE THE EVENT DATE
        else {
            $upd = "UPDATE event_dates SET ";
            $upd .= "date_start='".$start_date."', date_end='".$end_date."', all_day='".$allday."', ";
            $upd .= "description='".addslashes(empty($ev['DESCRIPTION']) ? '' : $ev['DESCRIPTION'])."' ";
            $upd .= "WHERE ext_id='".$ev_date_id."'";

            $db->query( $upd );
            $u++;
        }
    }

    response(200, ['success' => true, 'inserts' => $i, 'updates' => $u, 'lastrun'=> date('m/d/Y H:i:s'), 'events'=>$events ]);
}



//**********************************************************************************************************//
// Method: GET
// Endpoint: events/steelgoat

function get_v1_events_steelgoat( $args, $body, $uid, $admin_level, $db )
{
    $i = 0;
    $u = 0;

    for ($p=0; $p < 10; $p++) {
        $handle = curl_init();

        $url = 'https://steelgoatmarket.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/events&date='.date('Y-m-d').'&dates='.steelGoatDateRange().'&page='.$p;

        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);

        $events = json_decode($response, true);
        $events = $events['data']['events'];

        //    pp($events);
        //    exit;

        foreach($events as $ev) {
            $eventId = 0;

            // Find Event by Title
            $dbEvent = qRow( $db, "SELECT * FROM events WHERE title='".addslashes($ev['name'])."'");

            // FORMAT THE DESCRIPTION
            $find = array('<h1>','<h2>','<h3>','</h1>','</h2>','</h3>','<p></p>','<p><br></p>','<p><br/></p>');
            $repl = array('<b>','<b>','<b>','</b>','</b>','</b>','','','');
            $description = '';
            if (!empty($ev['description'])) $description = $ev['description'];
            $description = strip_tags($description,'<p><b><a><strong><u><br><h1><h2><h3><ul><li>');
            $description = str_replace($find,$repl,$description);
            $description = removeAttributes( $description );
            $description .= '<p><b>Please visit <a href="https://steelgoatmarket.com/sgmevents/">steelgoatmarket.com</a> for registration information.</b></p>';

            // If Event not found, create it
            if ($dbEvent === false) {
                $ins = "INSERT INTO events (`title`, `description`, `url`, `user_id`, `channel_id`, `approved`) VALUES (";
                $ins .= "'".addslashes($ev['name'])."', ";
                $ins .= "'".addslashes(empty($description) ? '' : $description)."', ";
                $ins .= "'', ";
                $ins .= "1001, 18, 1 )";

                $db->query( $ins );
                $eventId = qVal( $db, "SELECT MAX(id) FROM events");
            }
            else {
                $eventId = $dbEvent['id'];
                $upd = "UPDATE events SET ";
                $upd .= "title='" . addslashes($ev['name']) . "', ";
                $upd .= "description='" . addslashes(empty($description) ? '' : $description) . "' ";
                $upd .= "WHERE id='" . $eventId . "'";

                $db->query($upd);
                $last_upd = $upd;
            }

            // Manage Event Dates
            foreach ($ev['periods'] as $per) {
                // Check if event date exists
                $edId = 'steelgoat-'.$per['id'];
                $dbEventDate = qVal( $db, "SELECT ext_id FROM event_dates WHERE ext_id='".$edId."'");

                $start_date = timestamp_to_gmt($per['periodStart'], false);
                $end_date = timestamp_to_gmt($per['periodEnd'], false);

                if ($dbEventDate === false) {
                    $ins = "INSERT INTO event_dates (`event_id`, `description`, `date_start`, `date_end`, `ext_id`, `user_id`, `location_id`, `all_day`) VALUES (";
                    $ins .= "'" . $eventId . "', ";
                    $ins .= "'" . addslashes(empty($description) ? '' : $description) . "', ";
                    $ins .= "'" . $start_date . "', ";
                    $ins .= "'" . $end_date . "', ";
                    $ins .= "'" . $edId . "', ";
                    $ins .= "1001, 10, 0 )";

                    $db->query($ins);
                    $last_upd = $ins;
                    $i++;
                }
                else {
                    $upd = "UPDATE event_dates SET ";
                    $upd .= "date_start='" . $start_date . "', date_end='" . $end_date . "', ";
                    $upd .= "description='" . addslashes(empty($description) ? '' : $description) . "' ";
                    $upd .= "WHERE ext_id='" . $edId . "'";

                    $db->query($upd);
                    $last_upd = $upd;
                    $u++;
                }
            }
        }

        $p++;
    }

    response(200, ['success' => true, 'inserts' => $i, 'updates' => $u, 'lastrun'=> date('m/d/Y H:i:s') ]);
}




//**********************************************************************************************************//
// Method: GET
// Endpoint: events/savvy

function get_v1_events_savvy( $args, $body, $uid, $admin_level, $db )
{
    $i = 0;
    $u = 0;

    $url = 'https://savvycitizenapp.com/community/140';
    $event_array = savvy_format( $url );
    // print_r($event_array); exit;

    $earliest_date = savvy_dates($event_array[0]);
    $earliest_date = $earliest_date['start'];

    // DELETE ANY DATES AFTER EARLY DATE
    $db->query("DELETE FROM event_dates
                WHERE event_id IN (
                    SELECT ed.event_id
                    FROM event_dates AS ed
                    LEFT JOIN events AS e ON ed.event_id = e.id
                    WHERE ed.date_start >= '".$earliest_date."' AND e.channel_id = 4
                )");

    foreach ($event_array as $ev) {
        // Find Event by Title
        $dbEvent = qRow( $db, "SELECT * FROM events WHERE title='".addslashes($ev['title'])."'");
        $description = savvy_description(trim($ev['url']));
        $savvy_dates = savvy_dates($ev);

        $ev['title'] = str_replace("&amp;", "&", $ev['title']);

        // If Event not found, create it
        if ($dbEvent === false) {
            $ins = "INSERT INTO events (`title`, `description`, `url`, `user_id`, `channel_id`, `approved`) VALUES (";
            $ins .= "'".addslashes($ev['title'])."', ";
            $ins .= "'".addslashes($description)."', ";
            $ins .= "'', ";
            $ins .= "1001, 4, 1 )";

            $db->query( $ins );
            //echo 'INS EVENT: '.$ins."<br/>";
            $eventId = qVal( $db, "SELECT MAX(id) FROM events");
        }
        else {
            $eventId = $dbEvent['id'];
            $upd = "UPDATE events SET ";
            $upd .= "title='" . addslashes($ev['title']) . "' ";
            //$upd .= "description='".addslashes($description)."' ";
            $upd .= "WHERE id='" . $eventId . "'";

            $db->query($upd);
            //echo 'UPD EVENT: '.$upd."<br/>";
            $last_upd = $upd;
        }

        // INSERT THE NEW DATE:
        $ins = "INSERT INTO event_dates (`event_id`, `description`, `date_start`, `date_end`, `ext_id`, `user_id`, `location_id`, `all_day`) VALUES (";
        $ins .= "'" . $eventId . "', ";
        $ins .= "'".addslashes($description)."', ";
        $ins .= "'" . $savvy_dates['start'] . "', ";
        $ins .= "'" . $savvy_dates['end'] . "', ";
        $ins .= "'" . trim($ev['url']) . "', ";
        $ins .= "1001, 11, " . $savvy_dates['allday'] . " )";

        $db->query($ins);
        //echo 'INS EDATE: '.$ins."<br/>";
        $last_upd = $ins;
        $i++;
    }

    response(200, ['success' => true, 'inserts' => $i, 'updates' => $u, 'lastrun'=> date('m/d/Y H:i:s') ]);
}



//**********************************************************************************************************//
// Method: GET
// Endpoint: events/today

function get_v1_events_today( $args, $body, $uid, $admin_level, $db ) {
    $d = getDayStartAndEnd();

    $res = qSet( $db, "SELECT e.id AS evId, e.title AS evTitle, e.url AS evURL, 
                    c.id AS chId, c.name AS chName, c.slug AS chSlug, c.avatar AS chAvatar, c.color_light AS chColorLight, 
                    c.color_dark AS chColorDark, COUNT(ed.event_id) AS num_dates
                   FROM events AS e
                   LEFT JOIN event_dates AS ed ON e.id = ed.event_id
                   LEFT JOIN channels AS c ON e.channel_id = c.id
                   LEFT JOIN users AS u ON u.user_id = e.user_id
                   WHERE e.approved = 1 
                     AND e.hidden = 0 
                     AND LOWER(e.title) NOT LIKE '%cancelled%'
                     AND ed.date_start >= '".$d['start']."' 
                     AND ed.date_end <= '".$d['end']."'
                     AND e.channel_id <> 14
                   GROUP BY e.id
                   ORDER BY e.title ASC");

    response(200, ['success' => true, 'start' => $d['start'], 'end' => $d['end'], 'results' => $res ]);

}