Changes to AgileBill
This commit is contained in:
@@ -1,216 +1,239 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* AgileBill - Open Billing Software
|
||||
*
|
||||
* This body of work is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the Open AgileBill License
|
||||
* License as published at http://www.agileco.com/agilebill/license1-4.txt
|
||||
*
|
||||
* For questions, help, comments, discussion, etc., please join the
|
||||
* Agileco community forums at http://forum.agileco.com/
|
||||
*
|
||||
* Originally authored by Tony Landis, AgileBill LLC
|
||||
*
|
||||
* Recent modifications by Deon George
|
||||
*
|
||||
* @author Deon George <deonATleenooksDOTnet>
|
||||
* @copyright 2009 Deon George
|
||||
* @link http://osb.leenooks.net
|
||||
*
|
||||
* @link http://www.agileco.com/
|
||||
* @copyright 2004-2008 Agileco, LLC.
|
||||
* @license http://www.agileco.com/agilebill/license1-4.txt
|
||||
* @author Tony Landis <tony@agileco.com>
|
||||
* @author Tony Landis <tony@agileco.com>
|
||||
* @package AgileBill
|
||||
* @version 1.4.94
|
||||
* @subpackage Core
|
||||
*/
|
||||
|
||||
function CORE_database_add($VAR, $construct, $type)
|
||||
{
|
||||
|
||||
/**
|
||||
* The main AgileBill CORE Database ADD Method
|
||||
*
|
||||
* @uses CORE_validate
|
||||
* @uses CORE_static_var
|
||||
* @uses CORE_trigger
|
||||
*/
|
||||
|
||||
function CORE_database_add($VAR,$construct,$type) {
|
||||
global $C_translate;
|
||||
|
||||
# set the field list for this method:
|
||||
$arr = $construct->method["$type"];
|
||||
# Temp during code rework
|
||||
if (! is_array($construct->val_error))
|
||||
$construct->val_error = array();
|
||||
|
||||
# define the validation class
|
||||
include_once(PATH_CORE . 'validate.inc.php');
|
||||
$validate = new CORE_validate;
|
||||
# Set the field list for this method
|
||||
$arr = $construct->method[$type];
|
||||
|
||||
# Define the validation class
|
||||
include_once(PATH_CORE.'validate.inc.php');
|
||||
$validate = new CORE_validate($VAR,$construct->module);
|
||||
$construct->validated = true;
|
||||
|
||||
# Quick Validation to see if we have too many variables.
|
||||
foreach ($VAR as $field_name => $value)
|
||||
if (preg_match("/^{$construct->module}_/",$field_name))
|
||||
if (! in_array(preg_replace("/^{$construct->module}_/",'',$field_name),$arr))
|
||||
array_push($construct->val_error,array(
|
||||
'field'=>sprintf('%s_%s',$construct->table,$field_name),
|
||||
'field_trans'=>$field_name,
|
||||
'error'=>sprintf('WARNING: Variable passed to %s but it will be ignored.',__METHOD__),
|
||||
'method'=>sprintf('%s:%s(%s)',__FILE__,__METHOD__,__LINE__)
|
||||
));
|
||||
|
||||
####################################################################
|
||||
# loop through the field list to validate the required fields
|
||||
####################################################################
|
||||
# Quick Validation to see if we are missing variables.
|
||||
foreach ($construct->method[$type] as $field_name) {
|
||||
$field_var = sprintf('%s_%s',$construct->module,$field_name);
|
||||
|
||||
while (list ($key, $value) = each ($arr))
|
||||
{
|
||||
# get the field value
|
||||
$field_var = $construct->module . '_' . $value;
|
||||
$field_name = $value;
|
||||
$construct->validate = true;
|
||||
if (! array_key_exists($field_var,$VAR))
|
||||
array_push($construct->val_error,array(
|
||||
'field'=>$field_var,
|
||||
'field_trans'=>$field_name,
|
||||
'error'=>sprintf('WARNING: Variable NOT passed to %s.',__METHOD__),
|
||||
'method'=>sprintf('%s:%s(%s)',__FILE__,__METHOD__,__LINE__)
|
||||
));
|
||||
}
|
||||
|
||||
####################################################################
|
||||
# perform any field validation...
|
||||
####################################################################
|
||||
# Perform each field validation
|
||||
while (list($key,$field_name) = each($arr)) {
|
||||
# Get the field value
|
||||
$field_var = sprintf('%s_%s',$construct->module,$field_name);
|
||||
|
||||
# check if this value is unique
|
||||
if(isset($construct->field["$value"]["unique"]) && isset($VAR["$field_var"]))
|
||||
{
|
||||
if(!$validate->validate_unique($construct->table, $field_name, "record_id", $VAR["$field_var"]))
|
||||
{
|
||||
# Check if this value is unique
|
||||
if (isset($construct->field[$field_name]['unique']) && isset($VAR[$field_var])) {
|
||||
if (! $validate->validate_unique($construct->table,$field_name,'record_id',$VAR[$field_var])) {
|
||||
$construct->validated = false;
|
||||
$construct->val_error[] = array('field' => $construct->table . '_' . $field_name,
|
||||
'field_trans' => $C_translate->translate('field_' . $field_name, $construct->module, ""), # translate
|
||||
'error' => $C_translate->translate('validate_unique',"", ""));
|
||||
|
||||
array_push($construct->val_error,array(
|
||||
'field'=>sprintf('%s_%s',$construct->module,$field_name),
|
||||
'field_trans'=>$C_translate->translate('field_'.$field_name,$construct->module,''),
|
||||
'error'=>$C_translate->translate('validate_unique','',''),
|
||||
'method'=>sprintf('%s:%s(%s)',__FILE__,__METHOD__,__LINE__)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
# check if the submitted value meets the specifed requirements
|
||||
if(isset($construct->field["$value"]["validate"]))
|
||||
{
|
||||
if(isset($VAR["$field_var"]))
|
||||
{
|
||||
if($VAR["$field_var"] != '')
|
||||
{
|
||||
if(!$validate->validate($field_name, $construct->field["$value"], $VAR["$field_var"], $construct->field["$value"]["validate"]))
|
||||
{
|
||||
$construct->validated = false;
|
||||
$construct->val_error[] = array('field' => $construct->module . '_' . $field_name,
|
||||
'field_trans' => $C_translate->translate('field_' . $field_name, $construct->module, ""),
|
||||
'error' => $validate->error["$field_name"] );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
# Check if the submitted value meets the specifed requirements
|
||||
if (isset($construct->field[$field_name]['validate'])) {
|
||||
if (isset($VAR[$field_var]) && ($VAR[$field_var] != '')) {
|
||||
if (! $validate->validate($field_name,$construct->field[$field_name],$VAR[$field_var],$construct->field[$field_name]['validate'])) {
|
||||
$construct->validated = false;
|
||||
$construct->val_error[] = array('field' => $construct->module . '_' . $field_name,
|
||||
'field_trans' => $C_translate->translate('field_' . $field_name, $construct->module, ""),
|
||||
'error' => $C_translate->translate('validate_any',"", ""));
|
||||
|
||||
array_push($construct->val_error,array(
|
||||
'field'=>sprintf('%s_%s',$construct->module,$field_name),
|
||||
'field_trans'=>$C_translate->translate('field_'.$field_name,$construct->module,''),
|
||||
'error'=>$validate->error[$field_name],
|
||||
'method'=>sprintf('%s:%s(%s)',__FILE__,__METHOD__,__LINE__)
|
||||
));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
} else {
|
||||
$construct->validated = false;
|
||||
$construct->val_error[] = array('field' => $construct->module . '_' . $field_name,
|
||||
'field_trans' => $C_translate->translate('field_' . $field_name, $construct->module, ""),
|
||||
'error' => $C_translate->translate('validate_any',"", ""));
|
||||
|
||||
array_push($construct->val_error,array(
|
||||
'field'=>sprintf('%s_%s',$construct->module,$field_name),
|
||||
'field_trans'=>$C_translate->translate('field_'.$field_name,$construct->module,''),
|
||||
'error'=>$C_translate->translate('validate_any','',''),
|
||||
'method'=>sprintf('%s:%s(%s)',__FILE__,__METHOD__,__LINE__)
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Get required static_vars and validate them
|
||||
require_once(PATH_CORE.'static_var.inc.php');
|
||||
$static_var = new CORE_static_var;
|
||||
|
||||
####################################################################
|
||||
# If validation was failed, skip the db insert &
|
||||
# set the errors & origonal fields as Smarty objects,
|
||||
# and change the page to be loaded.
|
||||
####################################################################
|
||||
$all_error = $static_var->validate_form($construct->module,$construct->val_error);
|
||||
|
||||
if(!$construct->validated)
|
||||
{
|
||||
global $smarty;
|
||||
if ($all_error != false && gettype($all_error) == 'array')
|
||||
$construct->validated = false;
|
||||
else
|
||||
$construct->validated = true;
|
||||
|
||||
# set the errors as a Smarty Object
|
||||
$smarty->assign('form_validation', $construct->val_error);
|
||||
/* If validation has failed, skip the db insert & set the errors & original fields as Smarty objects,
|
||||
and change the page to be loaded.*/
|
||||
if (! $construct->validated) {
|
||||
global $smarty;
|
||||
|
||||
# set the page to be loaded
|
||||
if(!defined("FORCE_PAGE"))
|
||||
{
|
||||
define('FORCE_PAGE', $VAR['_page_current']);
|
||||
# Set the errors as a Smarty Object
|
||||
$smarty->assign('form_validation',$construct->val_error);
|
||||
|
||||
# Set the page to be loaded
|
||||
if (! defined('FORCE_PAGE'))
|
||||
define('FORCE_PAGE',$VAR['_page_current']);
|
||||
|
||||
# Define any triggers
|
||||
if (isset($construct->trigger[$type])) {
|
||||
include_once(PATH_CORE.'trigger.inc.php');
|
||||
$trigger = new CORE_trigger;
|
||||
|
||||
$trigger->trigger($construct->trigger[$type],0,$VAR);
|
||||
}
|
||||
|
||||
# define any triggers
|
||||
if(isset($construct->trigger["$type"]))
|
||||
{
|
||||
include_once(PATH_CORE . 'trigger.inc.php');
|
||||
$trigger = new CORE_trigger;
|
||||
$trigger->trigger($construct->trigger["$type"], 0, $VAR);
|
||||
}
|
||||
|
||||
# strip slashes
|
||||
# Strip slashes
|
||||
global $C_vars;
|
||||
$C_vars->strip_slashes_all();
|
||||
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
# begin the new database class:
|
||||
|
||||
} else {
|
||||
# Begin the new database class
|
||||
$db = &DB();
|
||||
|
||||
# loop through the field list to create the sql queries
|
||||
$field_list = '';
|
||||
$i = 0;
|
||||
# Loop through the field list to create the sql queries
|
||||
$field_list = array();
|
||||
reset($arr);
|
||||
while (list ($key, $value) = each ($arr))
|
||||
{
|
||||
# get the field value
|
||||
$field_var = $construct->module . '_' . $value;
|
||||
$field_name = $value;
|
||||
if(isset($VAR["$field_var"]))
|
||||
{
|
||||
# check if html allowed:
|
||||
if(@$construct->field["$value"]["html"] != 1 && !is_array($VAR["$field_var"]))
|
||||
{
|
||||
$insert_value = htmlspecialchars($VAR["$field_var"]);
|
||||
} else {
|
||||
$insert_value = $VAR["$field_var"];
|
||||
}
|
||||
while (list($key,$field_name) = each($arr)) {
|
||||
# Get the field value
|
||||
$field_var = sprintf('%s_%s',$construct->module,$field_name);
|
||||
|
||||
# perform data conversions
|
||||
if(isset( $construct->field["$value"]["convert"] ))
|
||||
$insert_value = $validate->convert($field_name, $insert_value, $construct->field["$value"]["convert"]);
|
||||
if (isset($VAR[$field_var])) {
|
||||
# Check if HTML allowed
|
||||
if (@$construct->field[$field_name]['html'] != 1 && ! is_array($VAR[$field_var]))
|
||||
$insert_value = htmlspecialchars($VAR[$field_var]);
|
||||
else
|
||||
$insert_value = $VAR[$field_var];
|
||||
|
||||
# create the sql statement
|
||||
if(!is_null($insert_value))
|
||||
$field_list .= ", " . $value . "=" . $db->qstr($insert_value, get_magic_quotes_gpc());
|
||||
}
|
||||
}
|
||||
# Perform data conversions
|
||||
if (isset($construct->field[$field_name]['convert']))
|
||||
$insert_value = $validate->convert($field_name,$insert_value,$construct->field[$field_name]['convert']);
|
||||
|
||||
# add a comma before the site_id if needed
|
||||
if($field_list != '')
|
||||
{
|
||||
$field_list .= ',';
|
||||
}
|
||||
|
||||
# determine the record id:
|
||||
$construct->record_id = $db->GenID(AGILE_DB_PREFIX . "" . $construct->table.'_id');
|
||||
|
||||
# define the new ID as a constant
|
||||
define(strtoupper('NEW_RECORD_'.$construct->table.'_ID'), $construct->record_id);
|
||||
|
||||
# generate the full query
|
||||
$q = "INSERT INTO ".AGILE_DB_PREFIX."$construct->table
|
||||
SET
|
||||
id = ". $db->qstr($construct->record_id)."
|
||||
$field_list
|
||||
site_id = " . $db->qstr(DEFAULT_SITE);
|
||||
|
||||
# execute the query
|
||||
$result = $db->Execute($q);
|
||||
|
||||
## echo $q;
|
||||
|
||||
# error reporting:
|
||||
if ($result === false)
|
||||
{
|
||||
global $C_debug;
|
||||
$C_debug->error('database.inc.php','add', $db->ErrorMsg());
|
||||
|
||||
if(isset($construct->trigger["$type"]))
|
||||
{
|
||||
include_once(PATH_CORE . 'trigger.inc.php');
|
||||
$trigger = new CORE_trigger;
|
||||
$trigger->trigger($construct->trigger["$type"], 0, $VAR);
|
||||
return false;
|
||||
# Create the sql statement
|
||||
if (! is_null($insert_value))
|
||||
$field_list[$field_name] = $insert_value;
|
||||
}
|
||||
}
|
||||
|
||||
# define any triggers:
|
||||
if(isset($construct->trigger["$type"]))
|
||||
{
|
||||
include_once(PATH_CORE . 'trigger.inc.php');
|
||||
$trigger = new CORE_trigger;
|
||||
$trigger->trigger($construct->trigger["$type"], 1, $VAR);
|
||||
# Check and see if we have some default fields
|
||||
foreach (array('date_orig','date_last') as $field_name) {
|
||||
$field_var = sprintf('%s_%s',$construct->module,$field_name);
|
||||
|
||||
if (isset($construct->field[$field_name]) && ! isset($VAR[$field_var]))
|
||||
if (isset($construct->field[$field_name]['convert']))
|
||||
$field_list[$field_name] = $validate->convert($field_name,time(),$construct->field[$field_name]['convert']);
|
||||
else
|
||||
$field_list[$field_name] = time();
|
||||
}
|
||||
|
||||
global $VAR;
|
||||
$VAR["id"] = $construct->record_id;
|
||||
@$redirect_page = $VAR['_page'];
|
||||
if(isset($VAR["_escape"]) || isset($VAR["_escape_next"])) $_escape = '&_escape=1&_escape_next=1';
|
||||
define('REDIRECT_PAGE', '?_page=' . $redirect_page . '&id=' . $construct->record_id . '' . @$_escape);
|
||||
# Determine the record id
|
||||
$construct->record_id = $db->GenID(AGILE_DB_PREFIX.$construct->table.'_id');
|
||||
|
||||
# Define the new ID as a constant
|
||||
define(strtoupper(sprintf('NEW_RECORD_%s_ID',$construct->table)),$construct->record_id);
|
||||
|
||||
# Execute the query
|
||||
$result = $db->Execute(sqlInsert($db,$construct->table,$field_list,$construct->record_id));
|
||||
|
||||
# Error reporting
|
||||
if ($result === false) {
|
||||
global $C_debug;
|
||||
$C_debug->error(__FILE__,__METHOD__,$db->ErrorMsg());
|
||||
|
||||
if (isset($construct->trigger[$type])) {
|
||||
include_once(PATH_CORE.'trigger.inc.php');
|
||||
$trigger = new CORE_trigger;
|
||||
|
||||
$trigger->trigger($construct->trigger[$type],0,$VAR);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
# Define any triggers
|
||||
if (isset($construct->trigger[$type])) {
|
||||
include_once(PATH_CORE.'trigger.inc.php');
|
||||
$trigger = new CORE_trigger;
|
||||
|
||||
$trigger->trigger($construct->trigger[$type],1,$VAR);
|
||||
}
|
||||
|
||||
# Insert the static vars
|
||||
$static_var->add($VAR,$construct->module,$construct->record_id);
|
||||
|
||||
$_escape = '';
|
||||
if (isset($VAR['_escape']) || isset($VAR['_escape_next']))
|
||||
$_escape = '&_escape=1&_escape_next=1';
|
||||
|
||||
if (! isset($VAR['_noredirect']))
|
||||
define('REDIRECT_PAGE',sprintf('?_page=%s&id=%s%s',$VAR['_page'],$construct->record_id,$_escape));
|
||||
|
||||
return $construct->record_id;
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
Reference in New Issue
Block a user