* @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 * @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; $icfield[$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; } } ?>