<?php
//error_reporting(error_reporting() & ~E_NOTICE);
set_time_limit (0) ;
//error_reporting(E_ALL);
error_reporting(0);

require_once($_SERVER["DOCUMENT_ROOT"] . '/library/functions.php');
openDBLIPlayground3309('pareto');

$debug = isset($_GET['debug']);
$reload = isset($_GET['reload']);

/**
 * Class SamplePardotApiClient
 *
 * Example PHP client to call the Pardot API
 */
class QueryProspectPardotApiClient
{
    const BASE_URL = "https://pi.pardot.com/api/";
    const SALESFORCE_OAUTH_TOKEN_URL = "https://login.salesforce.com/services/oauth2/token";

    /** @var int $apiVersion */
    private $apiVersion;

    /** @var string $format  */
    private $format;

    public function __construct($apiVersion, $format = 'xml')
    {
        $this->apiVersion = $apiVersion;
        $this->format = $format;
    }

    /**
     * @param string $endpoint
     * @param string $operation
     * @param array $data
     * @param array $headers
     * @param array $queryParams
     * @param bool $useSalesforceOAuth
     * @return array
     * @throws Exception
     */
    public function post($endpoint, $operation, $data = [], $headers = [], $queryParams = [], $useSalesforceOAuth = true)
    {
        $curl_handle = $this->initRequest($endpoint, $operation, $headers, $queryParams, $useSalesforceOAuth);
        curl_setopt($curl_handle, CURLOPT_POST, true);
        // Add POST data if given
        if (!empty($data)) {
            curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $data);
        }

        return $this->executeCall($curl_handle);
    }

    /**
     * @param string $endpoint
     * @param string $operation
     * @param array $headers
     * @param array $queryParams
     * @param bool $useSalesforceOAuth
     * @return array
     * @throws Exception
     */
    public function get($endpoint, $operation, $headers = [], $queryParams = [], $useSalesforceOAuth = true)
    {
        $curl_handle = $this->initRequest($endpoint, $operation, $headers, $queryParams, $useSalesforceOAuth);

        return $this->executeCall($curl_handle);
    }

    /**
     * @param string $endpoint
     * @param string $operation
     * @param array $headers
     * @param array $queryParams
     * @param bool $useSalesforceOAuth
     * @return false|resource
     */
    private function initRequest($endpoint, $operation, $headers = [], $queryParams = [], $useSalesforceOAuth = true)
    {
        // Construct our full URL to the Pardot API
        $url = $this->buildUrl($endpoint, $operation, $useSalesforceOAuth);
        // Add desired format to any query string params provided
        $queryParams['format'] = $this->format;
        // Build query string params into an encoded string
        $queryString = http_build_query($queryParams, null, '&');
        $queryString = str_replace('%5B0%5D%5B0%5D','',$queryString);
        // Append query string params to URL
        $url .= "?{$queryString}";

        // Init curl handle and set standard curl options: timeouts / require SSL / verify SSL
        $curl_handle = curl_init($url);
        curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($curl_handle, CURLOPT_TIMEOUT, 30);
        curl_setopt($curl_handle, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS);
        curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);

        // Add any headers passed in such as Authorization header
        if (!empty($headers)) {
            curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $headers);
        }

        return $curl_handle;
    }

    /**
     * @param string $endpoint
     * @param string $operation
     * @param bool $useSalesforceOAuth
     * @return string
     */
    private function buildUrl($endpoint, $operation = "", $useSalesforceOAuth = true)
    {
        if ($endpoint === 'login') {
            if ($useSalesforceOAuth) {
                return self::SALESFORCE_OAUTH_TOKEN_URL;
            } else {
                return self::BASE_URL . "login";
            }
        }

        return self::BASE_URL . "{$endpoint}/version/{$this->apiVersion}/do/{$operation}";
    }

    /**
     * @param $curl_handle
     * @return array
     * @throws Exception
     */
    private function executeCall($curl_handle)
    {
        // Execute our call to the Pardot API
        $rsp = curl_exec($curl_handle);
        // Gather the HTTP response code and last effective URL called
        $httpCode = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
        $url = curl_getinfo($curl_handle, CURLINFO_EFFECTIVE_URL);

        // Handle errors in calls, this could be a log or an exception thrown as written here
        if (!$rsp) {
            $errorMessage = curl_error($curl_handle);
            curl_close($curl_handle);
            throw new Exception("Error calling API. HTTP Code: {$httpCode}. Message: {$errorMessage}");
        }
        curl_close($curl_handle);

        // Output call response for informational purposes
        /*
        echo ("URL: {$url}" . PHP_EOL);
        echo ("HTTP Response Code: {$httpCode}" . PHP_EOL);
        echo ("Response: {$rsp}" . PHP_EOL . PHP_EOL);
        */

        return [$httpCode, $rsp];
    }

    /**
     * Use Pardot API using Api Key and User Key - No longer available
     */
    /*
    public function executeRequestsWithApiKeys()
    {
        // Setup user credentials
        $credentials = [
            'user_key' => '60ef081ba86770e2a43d0a14a1d45029',
            'email' => 'revenuewell@2x.marketing',
            'password' => '2XMarketing2020!'
        ];

        // Authenticate to Pardot - Must be a POST with credentials in the message body
        list($httpCode, $rsp) = $this->post('login', '', $credentials, null, [], false);
        // Capture the api_key from a successful login response
        // api_key is good for 1 hour and can be reused on subsequent calls
        $apiKey = json_decode($rsp, true)['api_key'];

        // Create Authorization Header from api_key
        $authHeader = ["Authorization: Pardot user_key={$credentials['user_key']},api_key={$apiKey}"];

        $strSQL = "select MAX(_pardotID) from pardot_prospect";
        $prevMax = getArrayResult($strSQL);
        if (empty($prevMax)) {
            $prevMax = 0;
        }

        // Call Prospect Query
        $params = array(
            'limit'=>200, 
            'id_greater_than'=>$prevMax, 
            'sort_by'=>'id', 
            'sort_order' => 'ascending'
        );
        
        list($httpCode, $rsp) = $this->get('prospect', 'query', $authHeader, $params);

        return $rsp;
    }
    */

    /**
     * Use Pardot API with a SSO user.
     * Getting the access token and using that to use the Pardot API.
     */
    public function executeRequestsWithSalesforceOAuth($debug, $objConn)
    {
        // Setup user credentials
        /*
        $credentials = [
            "grant_type" => "password",
            "client_id" => "<your_client_id>",
            "client_secret" => "<your_client_secert>",
            "username" => "<your_salesforce_email>",
            "password" => "<your_password>"
        ];
        */
        $credentials = [
            "grant_type" => "password",
            "client_id" => "3MVG9A2kN3Bn17hviVFf.TwbV0egtvohywPyVe4llySiHm57NrpLQycbSQuG85UU_y6Pl3fnpJAFd6Z5X3PoY",
            "client_secret" => "587BDBE3AC3A047E2B6B33C82033C65D0C5CBC90DE76BFF5D94E64A064749F8A",
            "username" => "jasmine.sim@2x.marketing",
            "password" => 'Pareto_2X22_!!!'
        ];

        //$pardot_business_unit_id = "<Pardot_business_unit_id>";
        $pardot_business_unit_id = "0Uv5A000000006dSAA";

        // Authenticate to Salesforce - Must be a POST with credentials in the message body
        list($httpCode, $rsp) = $this->post('login', '', $credentials, null, [], true);
        //var_dump($rsp);

        // Capture the access_token from a successful login response
        $access_token = json_decode($rsp, true)['access_token'];

        // Create Authorization Header from access_token and business unit
        $authHeader = ["Authorization: Bearer {$access_token}", "Pardot-Business-Unit-Id: {$pardot_business_unit_id}"];

        $strSQL = "select MAX(_updatedAt) from pardot_prospect";
        $prevMax = getArrayResult($strSQL);
        if (empty($prevMax)) {
            $prevMax = '2021-01-01 00:00:00';
        }

        // Call Prospect Query
        $params = array(
            'limit'=>200, 
            'updated_after'=>$prevMax, 
            'sort_by'=>'updated_at', 
            'sort_order' => 'ascending'
        );

        // Call Prospect Query
        list($httpCode, $rsp) = $this->get('prospect', 'query', $authHeader, $params);

        //return $rsp;

        $totalProcessed = 0;
        $totalAffected = 0;

        $maxRun = 3; // prevent infinite loop
        for ($i = 0; $i<$maxRun; $i++) {
            $rspArray = json_decode($rsp, true);

            if ($debug) {
                var_dump($rsp);
            }
            $result = $rspArray['result'];
            $prospects = $result['prospect'];
            $totalResults = $result['total_results'];

            foreach ($prospects as $p) {
                $pardotID = $p['id'];
                $campaignID = $p['campaign_id'];
                $salutation = $objConn->real_escape_string($p['salutation']);
                $firstName = $objConn->real_escape_string($p['first_name']);
                $lastName = $objConn->real_escape_string($p['last_name']);
                $email = $objConn->real_escape_string($p['email']);
                $companyName = $objConn->real_escape_string($p['company']);
                $companyWebsite = $objConn->real_escape_string($p['website']);
                $title = $objConn->real_escape_string($p['job_title']);
                $department = $objConn->real_escape_string($p['department']);
                $country = $objConn->real_escape_string($p['country']);
                $address = $objConn->real_escape_string($p['address_one']);
                $addressTwo = $objConn->real_escape_string($p['address_two']);
                $city = $objConn->real_escape_string($p['city']);
                $state = $objConn->real_escape_string($p['state']);
                $territory = $objConn->real_escape_string($p['territory']);
                $zip = $objConn->real_escape_string($p['zip']);
                $phone = $objConn->real_escape_string($p['phone']);
                $fax = $objConn->real_escape_string($p['fax']);
                $source = $objConn->real_escape_string($p['source']);
                $revenue = $objConn->real_escape_string($p['annual_revenue']);
                $employees = $objConn->real_escape_string($p['employees']);
                $industry = $objConn->real_escape_string($p['industry']);
                $yearsInBusiness = $objConn->real_escape_string($p['years_in_business']);
                $comments = $objConn->real_escape_string($p['comments']);
                $notes = $objConn->real_escape_string($p['notes']);
                $score = $objConn->real_escape_string($p['score']);
                $grade = $objConn->real_escape_string($p['grade']);
                $lastActivityAt = $objConn->real_escape_string($p['last_activity_at']);
                $recentInteraction = $objConn->real_escape_string($p['recent_interaction']);
                $crmLeadID = $objConn->real_escape_string($p['crm_lead_fid']);
                $crmContactID = $objConn->real_escape_string($p['crm_contact_fid']);
                $crmOwnerID = $objConn->real_escape_string($p['crm_owner_fid']);
                $crmAccountID = $objConn->real_escape_string($p['crm_account_fid']);
                $salesforceID = $objConn->real_escape_string($p['salesforce_fid']);
                $crmLastSync = $objConn->real_escape_string($p['crm_last_sync']);
                $crmURL = $objConn->real_escape_string($p['crm_url']);
                $doNotEmail = $objConn->real_escape_string($p['is_do_not_email']);
                $doNotCall = $objConn->real_escape_string($p['is_do_not_call']);
                $optedOut = $objConn->real_escape_string($p['opted_out']);
                $reviewed = $objConn->real_escape_string($p['is_reviewed']);
                $starred = $objConn->real_escape_string($p['is_starred']);
                $createdAt = $objConn->real_escape_string($p['created_at']);
                $updatedAt = $objConn->real_escape_string($p['updated_at']);

                $campaignName = isset($p['campaign']['name']) ? $objConn->real_escape_string($p['campaign']['name']) : '';
                $campaignCRMID = isset($p['campaign']['crm_fid']) ? $objConn->real_escape_string($p['campaign']['crm_fid']) : '';

                $assignedTo = isset($p['assigned_to']['email']) ? $objConn->real_escape_string($p['assigned_to']['email']) : '';

                $numOfEmployersYouAreWorkingWith = $objConn->real_escape_string($p['Of_Employers_You_Are_Working_With']);
                $prospectID = $objConn->real_escape_string($p['Custom_2X_Prospect_ID']);
                $accountRecordType = $objConn->real_escape_string($p['Account_Record_Type']);
                $classification = $objConn->real_escape_string($p['Classification']);
                $companyCity = $objConn->real_escape_string($p['Company_City']);
                $companyCountry = $objConn->real_escape_string($p['Company_Country']);
                $companyState = $objConn->real_escape_string($p['Company_State']);
                $companyStreetAddress = $objConn->real_escape_string($p['Company_Street_Address']);
                $companyZipCode = $objConn->real_escape_string($p['Company_Zip_Code']);
                $contactUsFormMessage = $objConn->real_escape_string($p['Contact_Us_Form_Message']);
                $firstClassification = $objConn->real_escape_string($p['First_Classification']);
                $firstUTMSource = $objConn->real_escape_string($p['First_UTM_Source']);
                $formIsFilledOut = $objConn->real_escape_string($p['Form_is_Filled_Out']);
                $fundingOption = $objConn->real_escape_string($p['Funding_Option_For_Most_Employers']);
                $immediateParentCity = $objConn->real_escape_string($p['Immediate_Parent_City']);
                $immediateParentCountry = $objConn->real_escape_string($p['Immediate_Parent_Country']);
                $immediateParentID = $objConn->real_escape_string($p['Immediate_Parent_ID']);
                $immediateParentName = $objConn->real_escape_string($p['Immediate_Parent_Name']);
                $immediateParentState = $objConn->real_escape_string($p['Immediate_Parent_State']);
                $immediateParentStreet = $objConn->real_escape_string($p['Immediate_Parent_Street']);
                $immediateParentZIP = $objConn->real_escape_string($p['Immediate_Parent_ZIP']);
                $latestClassification = $objConn->real_escape_string($p['Latest_Classification']);
                $latestUTMSource = $objConn->real_escape_string($p['Latest_UTM_Source']);
                $leadStatus = $objConn->real_escape_string($p['Lead_Status']);
                $paretoBroker = $objConn->real_escape_string($p['name_your_Pareto_Broker']);
                $ndaSigned = $objConn->real_escape_string($p['NDA_Signed']);
                $optInDate = $objConn->real_escape_string($p['Opt_In_Date']);
                $prospectClassification = $objConn->real_escape_string($p['Prospect_Classification']);
                $prospectClassificationChangeDate = $objConn->real_escape_string($p['Prospect_Classification_Change_Date']);
                $prospectRecordType = $objConn->real_escape_string($p['Prospect_Record_Type']);
                $rampUpDrips = $objConn->real_escape_string($p['Ramp_up_Drips']);
                $resourcesUserRole = $objConn->real_escape_string($p['Resources_User_Role']);
                $surveyFilledOut = $objConn->real_escape_string($p['Survey_is_Filled_Out']);
                $ultimateParentCity = $objConn->real_escape_string($p['Ultimate_Parent_City']);
                $ultimateParentCountry = $objConn->real_escape_string($p['Ultimate_Parent_Country']);
                $ultimateParentID = $objConn->real_escape_string($p['Ultimate_Parent_ID']);
                $ultimateParentName = $objConn->real_escape_string($p['Ultimate_Parent_Name']);
                $ultimateParentState = $objConn->real_escape_string($p['Ultimate_Parent_State']);
                $ultimateParentStreet = $objConn->real_escape_string($p['Ultimate_Parent_Street']);
                $ultimateParentZip = $objConn->real_escape_string($p['Ultimate_Parent_Zip']);
                $experienceWithCaptive = $objConn->real_escape_string($p['Your_Experience_With_The_Captive_Model']);
                $zoomRegistrationQuestions = $objConn->real_escape_string($p['Zoom_Registration_Questions']);
                $zoomRegistrationData = $objConn->real_escape_string($p['Zoom_Webinar_Registration_Data']);
                $zoomRVP = $objConn->real_escape_string($p['Zoom_Who_is_Your_RVP']);
                $zoomBrokerOrEmployer = $objConn->real_escape_string($p['Zoom_Are_you_a_Broker_or_Employer']);
                $zoomInfoCompanyID = $objConn->real_escape_string($p['ZoomInfo_Company_ID']);
                $zoomInfoContactID = $objConn->real_escape_string($p['ZoomInfo_Contact_ID']);
                $contactLocationID = $objConn->real_escape_string($p['Contact_Location_ID']);
                

                $strSQL = "INSERT INTO pardot_prospect(_pardotID,
                _campaignID,
                _salutation,
                _firstName,
                _lastName,
                _email,
                _companyName,
                _companyWebsite,
                _title,
                _department,
                _country,
                _address,
                _addressTwo,
                _city,
                _state,
                _territory,
                _zip,
                _phone,
                _fax,
                _source,
                _revenue,
                _employees,
                _industry,
                _yearsInBusiness,
                _comments,
                _notes,
                _score,
                _grade,
                _lastActivityAt,
                _recentInteraction,
                _crmLeadID,
                _crmContactID,
                _crmOwnerID,
                _crmAccountID,
                _salesforceID,
                _crmLastSync,
                _crmURL,
                _doNotEmail,
                _doNotCall,
                _optedOut,
                _reviewed,
                _starred,
                _createdAt,
                _updatedAt,
                _campaignName,
                _campaignCRMID,
                _assignedTo,
                _numOfEmployersYouAreWorkingWith,
                _2xProspectID,
                _accountRecordType,
                _classification,
                _companyCity,
                _companyCountry,
                _companyState,
                _companyStreetAddress,
                _companyZipCode,
                _contactUsFormMessage,
                _firstClassification,
                _firstUTMSource,
                _formIsFilledOut,
                _fundingOption,
                _immediateParentCity,
                _immediateParentCountry,
                _immediateParentID,
                _immediateParentName,
                _immediateParentState,
                _immediateParentStreet,
                _immediateParentZIP,
                _latestClassification,
                _latestUTMSource,
                _leadStatus,
                _paretoBroker,
                _ndaSigned,
                _optInDate,
                _prospectClassification,
                _prospectClassificationChangeDate,
                _prospectRecordType,
                _rampUpDrips,
                _resourcesUserRole,
                _surveyFilledOut,
                _ultimateParentCity,
                _ultimateParentCountry,
                _ultimateParentID,
                _ultimateParentName,
                _ultimateParentState,
                _ultimateParentStreet,
                _ultimateParentZip,
                _experienceWithCaptive,
                _zoomRegistrationQuestions,
                _zoomRegistrationData,
                _zoomRVP,
                _zoomBrokerOrEmployer,
                _zoomInfoCompanyID,
                _zoomInfoContactID,
                _contactLocationID)
                VALUES('$pardotID',
                '$campaignID',
                '$salutation',
                '$firstName',
                '$lastName',
                '$email',
                '$companyName',
                '$companyWebsite',
                '$title',
                '$department',
                '$country',
                '$address',
                '$addressTwo',
                '$city',
                '$state',
                '$territory',
                '$zip',
                '$phone',
                '$fax',
                '$source',
                '$revenue',
                '$employees',
                '$industry',
                '$yearsInBusiness',
                '$comments',
                '$notes',
                '$score',
                '$grade',
                '$lastActivityAt',
                '$recentInteraction',
                '$crmLeadID',
                '$crmContactID',
                '$crmOwnerID',
                '$crmAccountID',
                '$salesforceID',
                '$crmLastSync',
                '$crmURL',
                '$doNotEmail',
                '$doNotCall',
                '$optedOut',
                '$reviewed',
                '$starred',
                '$createdAt',
                '$updatedAt',
                '$campaignName',
                '$campaignCRMID',
                '$assignedTo',
                '$numOfEmployersYouAreWorkingWith',
                '$prospectID',
                '$accountRecordType',
                '$classification',
                '$companyCity',
                '$companyCountry',
                '$companyState',
                '$companyStreetAddress',
                '$companyZipCode',
                '$contactUsFormMessage',
                '$firstClassification',
                '$firstUTMSource',
                '$formIsFilledOut',
                '$fundingOption',
                '$immediateParentCity',
                '$immediateParentCountry',
                '$immediateParentID',
                '$immediateParentName',
                '$immediateParentState',
                '$immediateParentStreet',
                '$immediateParentZIP',
                '$latestClassification',
                '$latestUTMSource',
                '$leadStatus',
                '$paretoBroker',
                '$ndaSigned',
                '$optInDate',
                '$prospectClassification',
                '$prospectClassificationChangeDate',
                '$prospectRecordType',
                '$rampUpDrips',
                '$resourcesUserRole',
                '$surveyFilledOut',
                '$ultimateParentCity',
                '$ultimateParentCountry',
                '$ultimateParentID',
                '$ultimateParentName',
                '$ultimateParentState',
                '$ultimateParentStreet',
                '$ultimateParentZip',
                '$experienceWithCaptive',
                '$zoomRegistrationQuestions',
                '$zoomRegistrationData',
                '$zoomRVP',
                '$zoomBrokerOrEmployer',
                '$zoomInfoCompanyID',
                '$zoomInfoContactID',
                '$contactLocationID')
                ON DUPLICATE KEY UPDATE _campaignID='$campaignID',
                _salutation='$salutation',
                _firstName='$firstName',
                _lastName='$lastName',
                _email='$email',
                _companyName='$companyName',
                _companyWebsite='$companyWebsite',
                _title='$title',
                _department='$department',
                _country='$country',
                _address='$address',
                _addressTwo='$addressTwo',
                _city='$city',
                _state='$state',
                _territory='$territory',
                _zip='$zip',
                _phone='$phone',
                _fax='$fax',
                _source='$source',
                _revenue='$revenue',
                _employees='$employees',
                _industry='$industry',
                _yearsInBusiness='$yearsInBusiness',
                _comments='$comments',
                _notes='$notes',
                _score='$score',
                _grade='$grade',
                _lastActivityAt='$lastActivityAt',
                _recentInteraction='$recentInteraction',
                _crmLeadID='$crmLeadID',
                _crmContactID='$crmContactID',
                _crmOwnerID='$crmOwnerID',
                _crmAccountID='$crmAccountID',
                _salesforceID='$salesforceID',
                _crmLastSync='$crmLastSync',
                _crmURL='$crmURL',
                _doNotEmail='$doNotEmail',
                _doNotCall='$doNotCall',
                _optedOut='$optedOut',
                _reviewed='$reviewed',
                _starred='$starred',
                _createdAt='$createdAt',
                _updatedAt='$updatedAt',
                _campaignName='$campaignName',
                _campaignCRMID='$campaignCRMID',
                _assignedTo='$assignedTo',
                _numOfEmployersYouAreWorkingWith='$numOfEmployersYouAreWorkingWith',
                _2xProspectID='$prospectID',
                _accountRecordType='$accountRecordType',
                _classification='$classification',
                _companyCity='$companyCity',
                _companyCountry='$companyCountry',
                _companyState='$companyState',
                _companyStreetAddress='$companyStreetAddress',
                _companyZipCode='$companyZipCode',
                _contactUsFormMessage='$contactUsFormMessage',
                _firstClassification='$firstClassification',
                _firstUTMSource='$firstUTMSource',
                _formIsFilledOut='$formIsFilledOut',
                _fundingOption='$fundingOption',
                _immediateParentCity='$immediateParentCity',
                _immediateParentCountry='$immediateParentCountry',
                _immediateParentID='$immediateParentID',
                _immediateParentName='$immediateParentName',
                _immediateParentState='$immediateParentState',
                _immediateParentStreet='$immediateParentStreet',
                _immediateParentZIP='$immediateParentZIP',
                _latestClassification='$latestClassification',
                _latestUTMSource='$latestUTMSource',
                _leadStatus='$leadStatus',
                _paretoBroker='$paretoBroker',
                _ndaSigned='$ndaSigned',
                _optInDate='$optInDate',
                _prospectClassification='$prospectClassification',
                _prospectClassificationChangeDate='$prospectClassificationChangeDate',
                _prospectRecordType='$prospectRecordType',
                _rampUpDrips='$rampUpDrips',
                _resourcesUserRole='$resourcesUserRole',
                _surveyFilledOut='$surveyFilledOut',
                _ultimateParentCity='$ultimateParentCity',
                _ultimateParentCountry='$ultimateParentCountry',
                _ultimateParentID='$ultimateParentID',
                _ultimateParentName='$ultimateParentName',
                _ultimateParentState='$ultimateParentState',
                _ultimateParentStreet='$ultimateParentStreet',
                _ultimateParentZip='$ultimateParentZip',
                _experienceWithCaptive='$experienceWithCaptive',
                _zoomRegistrationQuestions='$zoomRegistrationQuestions',
                _zoomRegistrationData='$zoomRegistrationData',
                _zoomRVP='$zoomRVP',
                _zoomBrokerOrEmployer='$zoomBrokerOrEmployer',
                _zoomInfoCompanyID='$zoomInfoCompanyID',
                _zoomInfoContactID='$zoomInfoContactID',
                _contactLocationID='$contactLocationID';
                ";

                $objConn->query($strSQL);

                $totalProcessed++;

                $affected = $objConn->affected_rows;
                if ($affected > 0) {
                    $totalAffected++;
                }

                if ($debug) {
                    echo $strSQL . '<br/>';
                    echo 'inserted = ' . $affected . '<br/><br/>';
                }
                
            }

            if ($debug) {
                echo 'totalProcessed = ' . $totalProcessed . '<br/><br/>';
                echo 'totalAffected = ' . $totalAffected . '<br/><br/>';
                echo 'totalResults = ' . $totalResults . '<br/><br/>';
            }

            if ($totalProcessed < $totalResults) {
                
                echo 'refetch: updated_after ' . $prevMax . '<br/><br/>';
                echo 'refetch: offset ' . $totalProcessed . '<br/><br/>';
                

                // Call Prospect Query
                $params = array(
                    'limit'=>200, 
                    'updated_after'=>$prevMax, 
                    'sort_by'=>'updated_at', 
                    'sort_order' => 'ascending',
                    'offset' => $totalProcessed
                );

                // Call Prospect Query
                list($httpCode, $rsp) = $this->get('prospect', 'query', $authHeader, $params);
            } else {
                // break the loop - stop querying the same update timestamp
                break;
            }

        }

        echo 'Total insert / updated: ' . $totalAffected . '<br/>';
        return $prospects;

    }

}

$start = time();

// Prepare to call version 3 or 4 of the API with JSON or XML responses
$client = new QueryProspectPardotApiClient(4, 'json');

// Authenticate to Pardot - Using API Keys
//$rsp = $client->executeRequestsWithApiKeys();
$prospects = $client->executeRequestsWithSalesforceOAuth($debug, $objConn);






echo 'Time spent: ' . (time() - $start);
// Authenticate to Pardot - Using Salesforce OAuth
//$client->executeRequestsWithSalesforceOAuth();

if ((sizeof($prospects) > 0) && $reload) {
?>    

<script type = "text/javascript">
window.onload=location.reload();
</script>

<?php
}
?>
