#!/usr/bin/php
<?php   
// Copyright (C) 2002-2010  Paul Yasi (paul at citrusdb.org)
// Read the README file for more information

/*-----------------------------------------------------------------------*/
// encrypt the credit cards in the citrus database using
// the gpg settings from the new config file
/*-----------------------------------------------------------------------*/

// Includes and Requires
include('./include/config.inc.php');
include('./include/local/us-english.inc.php');
include("$lang");
include('./include/database.inc.php');
include('./include/billing.inc.php');
include('./include/support.inc.php');
include('./include/services.inc.php');
require './include/citrus_base.php';

$query = "SELECT id, creditcard_number FROM billing WHERE creditcard_number IS NOT NULL AND creditcard_number <> '0' AND creditcard_number <> ''";
$DB->SetFetchMode(ADODB_FETCH_ASSOC);
$result = $DB->Execute($query) or die ("Billing Query Failed");

while ($myresult = $result->FetchRow()) {
  $id = $myresult['id'];
  $creditcard_number = $myresult['creditcard_number'];

  //$DB->debug = true;
  
  // check if there is a non-masked credit card number in the input
  // if the second cararcter is a * then it's already masked
  
  // check if the credit card entered already masked
  // eg: a replacement was not entered
  if ($creditcard_number[1] <> '*') {

    //$gpgcommandline = "echo $creditcard_number | $gpg_command";
    //echo "$gpgcommandline\n";
    //$oldhome = getEnv("HOME");

    // destroy the output array before we use it again
    unset($encrypted);
      
    //putenv("HOME=$path_to_home");
    //$gpgresult = exec($gpgcommandline, $encrypted, $errorcode);
    //putenv("HOME=$oldhome");
    
    $encrypted = encrypt_command($gpg_command, $creditcard_number);

    // if there is a gpg error, stop here
    if (substr($encrypted,0,5) == "error") {
      die ("Credit Card Encryption Error: $encrypted");
    }

    $encrypted_creditcard_number = $encrypted;
    
    // wipe out the middle of the creditcard_number before it gets inserted
    $firstdigit = substr($creditcard_number, 0,1);
    $lastfour = substr($creditcard_number, -4);
    $creditcard_number = "$firstdigit" . "***********" . "$lastfour";    

    //echo "$gpgcommandline<br><pre>$encrypted_creditcard_number</pre>\n";
    
    $query = "UPDATE billing ".
      "SET creditcard_number = '$creditcard_number', ".
      "encrypted_creditcard_number = '$encrypted_creditcard_number' ".
      "WHERE id = $id";
    
    $cardupdate = $DB->Execute($query) or die ("card update query failed");
    
    print "$id creditcard updated $encrypted_creditcard_number\n";

  } else {
    print "$id skipped\n";
  }// end if creditcard_number

 } // end while myresult


?>