201 lines
6.4 KiB
PHP
201 lines
6.4 KiB
PHP
<?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
|
|
*
|
|
* 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>
|
|
* @package AgileBill
|
|
* @subpackage Core
|
|
*/
|
|
|
|
/**
|
|
* The main AgileBill CORE Database UPDATE Method
|
|
*
|
|
* @uses CORE_validate
|
|
* @uses CORE_trigger
|
|
*/
|
|
|
|
function CORE_database_update($VAR,$construct,$type) {
|
|
global $C_translate;
|
|
|
|
# Temp during code rework
|
|
if (! is_array($construct->val_error))
|
|
$construct->val_error = array();
|
|
|
|
# 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__)
|
|
));
|
|
|
|
# Define this record id
|
|
$id = $VAR[$construct->module.'_id'];
|
|
|
|
# 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 the conversion type required is not one ignored on updates
|
|
$ignore_con = false;
|
|
$ignore_convert = array('sha','md5','rc5','crypt');
|
|
for ($ic=0; $ic<count($ignore_convert); $ic++)
|
|
if (isset($construct->field[$field_name]['convert']))
|
|
if ($construct->field[$field_name]['convert'] == $ignore_convert[$ic])
|
|
$ignore_con = true;
|
|
|
|
if (! $ignore_con) {
|
|
# 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,$id,$VAR[$field_var])) {
|
|
$construct->validated = false;
|
|
|
|
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[$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;
|
|
|
|
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 {
|
|
$construct->validated = false;
|
|
|
|
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__)
|
|
));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 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 errors as a Smarty Object
|
|
$smarty->assign('form_validation',$construct->val_error);
|
|
|
|
# Change the page to be loaded
|
|
$VAR['_page'] = $construct->module.':view';
|
|
|
|
# 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
|
|
global $C_vars;
|
|
$C_vars->strip_slashes_all();
|
|
|
|
return false;
|
|
|
|
} else {
|
|
# Begin the new database class
|
|
$db = &DB();
|
|
|
|
# Loop through the field list to create the sql queries
|
|
$field_list = array();
|
|
reset($arr);
|
|
while (list($key,$field_name) = each($arr)) {
|
|
# Get the field value
|
|
$field_var = sprintf('%s_%s',$construct->module,$field_name);
|
|
|
|
if (isset($VAR[$field_var]) && $VAR[$field_var] != 'IGNORE-ARRAY-VALUE') {
|
|
# 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];
|
|
|
|
# Perform data conversions
|
|
if (isset($construct->field[$field_name]['convert']) && trim($construct->field[$field_name]['convert']))
|
|
$insert_value = $validate->convert($field_name,$insert_value,$construct->field[$field_name]['convert']);
|
|
|
|
$field_list[$field_name] = $insert_value;
|
|
|
|
} elseif (@$construct->field[$field_name]['convert'] == 'array' && @$VAR[$field_var] != 'IGNORE-ARRAY-VALUE')
|
|
# Handle blank array string
|
|
$field_list[$field_name] = serialize(array());
|
|
}
|
|
|
|
# Execute the query
|
|
$result = $db->Execute(sqlUpdate($db,$construct->table,$field_list,array('id'=>$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);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
?>
|