// includes/module/payment/elv.php

<?php

class elv
	{
    var $code, $title, $description, $enabled;
	// class constructor
    function elv()
		{
      	global $order;
      	$this->code = 'elv';
      	$this->title = MODULE_PAYMENT_ELV_TEXT_TITLE;
      	$this->description = MODULE_PAYMENT_ELV_TEXT_DESCRIPTION;
      	$this->sort_order = MODULE_PAYMENT_ELV_SORT_ORDER;
      	$this->enabled = ((MODULE_PAYMENT_ELV_STATUS == 'True') ? true : false);
		//HACK, dass ELV nicht in FR
      	if ( MODULE_PAYMENT_ELV_TEXT_ACCOUNT_FIRSTNAME == 'Prénom') { $this->enabled = false;
		}
		if ((int)MODULE_PAYMENT_ELV_ORDER_STATUS_ID > 0)
			{
    		$this->order_status = MODULE_PAYMENT_ELV_ORDER_STATUS_ID;
    		}
      	if (is_object($order)) $this->update_status();
		// MIS
        $this->form_action_url = 'http://www.xxxxxx.de/cgi-bin/get_elv_data.pl'; // siehe Variablen weiter unten
			}


		// class methods
    	function update_status()
			{
      		global $order;
			if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_ELV_ZONE > 0) )
				{
        			$check_flag = false;
        			$check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_ELV_ZONE . "' and zone_country_id = '" . $order->billing['country']['id'] . "' order by zone_id");
        			while ($check = tep_db_fetch_array($check_query))
					{
          			if ($check['zone_id'] < 1)
						{
            			$check_flag = true;
            			break;
          				}
		  			elseif ($check['zone_id'] == $order->billing['zone_id'])
						{
            			$check_flag = true;
            			break;
          				}
        			}

        			if ($check_flag == false)
						{
          				$this->enabled = false;
        				}
      				}
    			}


    	function javascript_validation() {
      	$js = '  if (payment_value == "' . $this->code . '") {' . "\n" .
              '    var firstname = document.checkout_payment.elv_firstname.value;' . "\n" .
              '    var lastname = document.checkout_payment.elv_lastname.value;' . "\n" .
              '    var street = document.checkout_payment.elv_street.value;' . "\n" .
              '    var nr = document.checkout_payment.elv_nr.value;' . "\n" .
              '    var number = document.checkout_payment.elv_number.value;' . "\n" .
              '    var bank_code = document.checkout_payment.elv_bank_code.value;' . "\n" .
              '    var bank = document.checkout_payment.elv_bank.value;' . "\n" .
			  '    var zip = document.checkout_payment.elv_zip.value;' . "\n" .
              '    var city = document.checkout_payment.elv_city.value;' . "\n" .
              '    var email = document.checkout_payment.elv_email.value;' . "\n" .
              '    if (firstname == "" || firstname.length < ' . CC_OWNER_MIN_LENGTH . ') {' . "\n" .
              '      error_message = error_message + "' . MODULE_PAYMENT_ELV_TEXT_JS_ELV_FIRSTNAME . '";' . "\n" .
              '      error = 1;' . "\n" .
              '    }' . "\n" .
              '    if (lastname == "" || lastname.length < ' . CC_OWNER_MIN_LENGTH . ') {' . "\n" .
              '      error_message = error_message + "' . MODULE_PAYMENT_ELV_TEXT_JS_ELV_LASTNAME . '";' . "\n" .
              '      error = 1;' . "\n" .
              '    }' . "\n" .
              '    if (street == "" || street.length < ' . CC_OWNER_MIN_LENGTH . ') {' . "\n" .
              '      error_message = error_message + "' . MODULE_PAYMENT_ELV_TEXT_JS_ELV_STREET . '";' . "\n" .
              '      error = 1;' . "\n" .
              '    }' . "\n" .
              '    if (nr == "" || nr.length < 1) {' . "\n" .
	          '      error_message = error_message + "' . MODULE_PAYMENT_ELV_TEXT_JS_ELV_NR . '";' . "\n" .
	          '      error = 1;' . "\n" .
              '    }' . "\n" .
               '    if (number == "" || number.length < 1) {' . "\n" .
 	          '      error_message = error_message + "' . MODULE_PAYMENT_ELV_TEXT_JS_ELV_NUMBER . '";' . "\n" .
 	          '      error = 1;' . "\n" .
               '    }' . "\n" .
              '    if (bank_code == "" || bank_code.length < 1) {' . "\n" .
	          '      error_message = error_message + "' . MODULE_PAYMENT_ELV_TEXT_JS_ELV_BANK_CODE . '";' . "\n" .
	          '      error = 1;' . "\n" .
              '    }' . "\n" .
              '    if (bank == "" || bank.length < 1) {' . "\n" .
	          '      error_message = error_message + "' . MODULE_PAYMENT_ELV_TEXT_JS_ELV_BANK . '";' . "\n" .
	          '      error = 1;' . "\n" .
              '    }' . "\n" .

 			  '    if (zip == "" || zip.length < ' . CC_OWNER_MIN_LENGTH . ') {' . "\n" .
              '      error_message = error_message + "' . MODULE_PAYMENT_ELV_TEXT_JS_ELV_ZIP . '";' . "\n" .
              '      error = 1;' . "\n" .
              '    }' . "\n" .
              '    if (city == "" || city.length < ' . CC_OWNER_MIN_LENGTH . ') {' . "\n" .
              '      error_message = error_message + "' . MODULE_PAYMENT_ELV_TEXT_JS_ELV_CITY . '";' . "\n" .
              '      error = 1;' . "\n" .
              '    }' . "\n" .
              '    if (email == "" || email.length < ' . CC_OWNER_MIN_LENGTH . ') {' . "\n" .
              '      error_message = error_message + "' . MODULE_PAYMENT_ELV_TEXT_JS_ELV_EMAIL . '";' . "\n" .
              '      error = 1;' . "\n" .
              '    }' . "\n" .
              '  }' . "\n";

      return $js;
    }

    function selection()
	{
      global $order;
      $selection = array('id' => $this->code,
                         'module' => $this->title,
                         'fields' => array(
                                           array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_FIRSTNAME . ':',
                                                 'field' => tep_draw_input_field('elv_firstname', $order->billing['firstname'],'size="30"')),
                                           array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_LASTNAME . ':',
                                                 'field' => tep_draw_input_field('elv_lastname', $order->billing['lastname'],'size="30"')),
                                           array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_STREET . ':',
                                                 'field' => tep_draw_input_field('elv_street', $order->billing['street_address'],'size="30"')),
                                           array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_NR . ':',
                                                 'field' => tep_draw_input_field('elv_nr', '', 'size="10"')),

                                           array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_ZIP . ':',
                                                 'field' => tep_draw_input_field('elv_zip', $order->billing['postcode'],'size="10"')),
                                           array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_CITY . ':',
                                                 'field' => tep_draw_input_field('elv_city', $order->billing['city'],'size="30"')),
                                           array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_COUNTRY . ':',
                                                 'field' => tep_get_country_list('country', $order->billing['country_id'])),

                                           array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_EMAIL  . ':',
                                                 'field' => tep_draw_input_field('elv_email', $order->customer['email_address'],'size="30"')),

                                           array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_NUMBER . ':',
                                                 'field' => tep_draw_input_field('elv_number',$order->billing['elv_number'],'size="20" maxlength="16"')),
                                           array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_BANK_CODE . ':',
                                                 'field' => tep_draw_input_field('elv_bank_code', $order->billing['elv_bank_code'],'size="9" maxlength="9"')),
                                           array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_BANK . ':',
                                                 'field' => tep_draw_input_field('elv_bank', $order->billing['elv_bank'],'size="30" maxlength="50"')),
                                           array('title' => '',
                                                 'field' => MODULE_PAYMENT_ELV_TEXT_DESCRIPTOR_TEXT)
										  )
						);
      return $selection;
    }


	function pre_confirmation_check()
		{
		return false;
    	}


    function confirmation()
		{
      	global $HTTP_POST_VARS;
		$confirmation = array('title' => $this->title . ': ' . $this->cc_card_type,
                             'fields' => array(array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_LASTNAME . ':',
                                                     'field' => $HTTP_POST_VARS['elv_lastname'] ),
                                               array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_NUMBER . ':',
                                                     'field' => $HTTP_POST_VARS['elv_number']),
                                               array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_BANK_CODE . ':',
                                                     'field' => $HTTP_POST_VARS['elv_bank_code']),
                                               array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_BANK . ':',
                                                     'field' => $HTTP_POST_VARS['elv_bank']),
											  )
							 );
      	if (tep_not_null($HTTP_POST_VARS['elv_checkcode']))
	  		{
        	$confirmation['fields'][] = array('title' => MODULE_PAYMENT_ELV_TEXT_ACCOUNT_CHECKNUMBER,
            'field' => $HTTP_POST_VARS['elv_checkcode']);
      		}
      	return $confirmation;
    	}


    function process_button()
		{
      	global $HTTP_POST_VARS, $order, $currencies, $currency;
        switch (MODULE_PAYMENT_ELV_CURRENCY) {
        case 'EUR';
        $trx_currency = 'EUR';
        break;
      	}


	// THE FIELDS PASSED TO THE PAYGATE
	// Get the Country-ISO
	$country_name = tep_get_countries($HTTP_POST_VARS['country'], true);
    // MIS
      	{
	  	$process_button_string = tep_draw_hidden_field('message', 'MIS') .
                                 tep_draw_hidden_field('mcid', MODULE_PAYMENT_ELV_HDID) .
                                 tep_draw_hidden_field('pyid', '1') .
                                 tep_draw_hidden_field('acid', MODULE_PAYMENT_ELV_AGBID) .
                                 tep_draw_hidden_field('firstname', $HTTP_POST_VARS['elv_firstname']) .
                                 tep_draw_hidden_field('lastname', $HTTP_POST_VARS['elv_lastname']) .
                                 tep_draw_hidden_field('street', $HTTP_POST_VARS['elv_street']) .
                                 tep_draw_hidden_field('nr', $HTTP_POST_VARS['elv_nr']) .
                                 tep_draw_hidden_field('zip', $HTTP_POST_VARS['elv_zip']) .
                                 tep_draw_hidden_field('city', $HTTP_POST_VARS['elv_city']) .
                                 tep_draw_hidden_field('country', $country_name['countries_iso_code_2']) .
                                 tep_draw_hidden_field('email', $HTTP_POST_VARS['elv_email']) .
                                 tep_draw_hidden_field('tarif', MODULE_PAYMENT_ELV_TARIF) .
                                 tep_draw_hidden_field('bankcode', $HTTP_POST_VARS['elv_bank_code']) .
                                 tep_draw_hidden_field('bankaccount', $HTTP_POST_VARS['elv_number']) .
                                 tep_draw_hidden_field('bankaccount_holder', $HTTP_POST_VARS['elv_firstname'].' '.$HTTP_POST_VARS['elv_lastname']) .
 						   	     tep_draw_hidden_field('currency', $trx_currency) .
                                 tep_draw_hidden_field('amount', number_format($order->info['total'] * 100 * $currencies->get_value($trx_currency), 0, '','')) .

                                 tep_draw_hidden_field('confirmemail', 'NO') .
                                 tep_draw_hidden_field('bank', $HTTP_POST_VARS['elv_bank']) .
                                 tep_draw_hidden_field('item_name', STORE_NAME) .
                                 tep_draw_hidden_field('redirect_url', tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL', true)) .
                                 tep_draw_hidden_field('silent_error_url', tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'payment_error=' . $this->code . '&elv_owner=' . urlencode($HTTP_POST_VARS['elv_owner']), 'SSL', true)) .
                                 tep_draw_hidden_field('param1', $this->code) .
                               	 tep_draw_hidden_field('param2', tep_session_id());

        }
	return $process_button_string;
    }


    function before_process()
		{
		global $HTTP_POST_VARS, $HTTP_GET_VARS, $order;
		// Pass values to the database entry
		$order->info['cc_number'] = $HTTP_GET_VARS['bankaccount'];
		$order->info['cc_owner'] = $HTTP_GET_VARS['surname'] . " " . $HTTP_GET_VARS['name'];
		// Comment for email
		$order->info['comments'] = "Payment Transaction-Number: " . $HTTP_GET_VARS['trefnum'];
    	}


    function after_process()
		{
		return false;
    	}


    function get_error()
		{
      	global $HTTP_GET_VARS;
        $error = array('title' => MODULE_PAYMENT_ELV_ERROR_HEADING,
        'error' => ((isset($HTTP_GET_VARS['error'])) ? stripslashes(urldecode($HTTP_GET_VARS['error'] . "RC: " .  $HTTP_GET_VARS['rc'])) : MODULE_PAYMENT_ELV_ERROR_MESSAGE . " Return Code: " . $HTTP_GET_VARS['rc']));

      	return $error;
    	}


    function check()
		{
      	if (!isset($this->_check))
			{
        	$check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_ELV_STATUS'");
        	$this->_check = tep_db_num_rows($check_query);
      		}
      	return $this->_check;
    	}

    function install()
		{
		tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable  debit Payment Module', 'MODULE_PAYMENT_ELV_STATUS', 'True', 'Aktivierung des ELV Deutschland Payment-Moduls?', '6', '1', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
		tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Your Merchant ID (MCID)', 'MODULE_PAYMENT_ELV_HDID', 'Bsp:12345', 'Ihre Händler ID (MCID)', '6', '2', now())");
		tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Your Tender ID (ACID)', 'MODULE_PAYMENT_ELV_AGBID', 'Bsp:1234', 'Ihre Angebots ID (ACID)', '6', '3', now())");
		tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Your Tarif ID', 'MODULE_PAYMENT_ELV_TARIF', '', 'Ihre Tarif ID', '6', '3', now())");
		tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('The currency to use for debit transactions', 'MODULE_PAYMENT_ELV_CURRENCY', 'EUR', 'Die abzurechnende Währung', '6', '5', 'tep_cfg_select_option(array(\'EUR\'), ', now())");
		tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Payment Zone', 'MODULE_PAYMENT_ELV_ZONE', '0', 'If a zone is selected, only enable this payment method for that zone.', '6', '2', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
		tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, use_function, date_added) values ('Set Order Status', 'MODULE_PAYMENT_ELV_ORDER_STATUS_ID', '0', 'Set the status of orders made with this payment module to this value', '6', '0', 'tep_cfg_pull_down_order_statuses(', 'tep_get_order_status_name', now())");
		tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Description on the account balance', 'MODULE_PAYMENT_ELV_TEXT_DESCRIPTOR', 'www.xxxxx.de', 'Verwendungszweck', '6', '0', now())");
		tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort order of display.', 'MODULE_PAYMENT_ELV_SORT_ORDER', '0', 'Sort order of display. Lowest is displayed first.', '6', '0', now())");
    	}


    function remove()
		{
      	tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
    	}


    function keys()
		{
      	return array('MODULE_PAYMENT_ELV_STATUS','MODULE_PAYMENT_ELV_HDID', 'MODULE_PAYMENT_ELV_AGBID','MODULE_PAYMENT_ELV_TARIF','MODULE_PAYMENT_ELV_CURRENCY', 'MODULE_PAYMENT_ELV_ZONE', 'MODULE_PAYMENT_ELV_ORDER_STATUS_ID','MODULE_PAYMENT_ELV_SORT_ORDER','MODULE_PAYMENT_ELV_TEXT_DESCRIPTOR');
    	}
  	}
?>