debug("Entering return_name(".$row.",".$first_column.",".$last_column.") method ..."); $first_name = ""; $last_name = ""; $full_name = ""; if(isset($row[$first_column])) { $first_name = stripslashes($row[$first_column]); } if(isset($row[$last_column])) { $last_name = stripslashes($row[$last_column]); } $full_name = $first_name; // If we have a first name and we have a last name if($full_name != "" && $last_name != "") { // append a space, then the last name $full_name .= " ".$last_name; } // If we have no first name, but we have a last name else if($last_name != "") { // append the last name without the space. $full_name .= $last_name; } $log->debug("Exiting return_name method ..."); return $full_name; } /** Function to return language * @returns $languages -- languages:: Type string * */ function get_languages() { global $log; $log->debug("Entering get_languages() method ..."); global $languages; $log->debug("Exiting get_languages method ..."); return $languages; } /** Function to return language * @param $key -- key:: Type string * @returns $languages -- languages:: Type string * */ //seems not used function get_language_display($key) { global $log; $log->debug("Entering get_language_display(".$key.") method ..."); global $languages; $log->debug("Exiting get_language_display method ..."); return $languages[$key]; } /** Function returns the user array * @param $assigned_user_id -- assigned_user_id:: Type string * @returns $user_list -- user list:: Type array * */ function get_assigned_user_name(&$assigned_user_id) { global $log; $log->debug("Entering get_assigned_user_name(".$assigned_user_id.") method ..."); $user_list = &get_user_array(false,""); if(isset($user_list[$assigned_user_id])) { $log->debug("Exiting get_assigned_user_name method ..."); return $user_list[$assigned_user_id]; } $log->debug("Exiting get_assigned_user_name method ..."); return ""; } /** Function returns the user key in user array * @param $add_blank -- boolean:: Type boolean * @param $status -- user status:: Type string * @param $assigned_user -- user id:: Type string * @param $private -- sharing type:: Type string * @returns $user_array -- user array:: Type array * */ //used in module file function get_user_array($add_blank=true, $status="Active", $assigned_user="",$private="") { global $log; $log->debug("Entering get_user_array(".$add_blank.",". $status.",".$assigned_user.",".$private.") method ..."); global $current_user; if(isset($current_user) && $current_user->id != '') { require('user_privileges/sharing_privileges_'.$current_user->id.'.php'); require('user_privileges/user_privileges_'.$current_user->id.'.php'); } static $user_array = null; $module=$_REQUEST['module']; if($user_array == null) { require_once('include/database/PearDatabase.php'); $db = PearDatabase::getInstance(); $temp_result = Array(); // Including deleted vtiger_users for now. if (empty($status)) { $query = "SELECT id, user_name from vtiger_users"; $params = array(); } else { if($private == 'private') { $log->debug("Sharing is Private. Only the current user should be listed"); $query = "select id as id,user_name as user_name,first_name,last_name from vtiger_users where id=? and status='Active' union select vtiger_user2role.userid as id,vtiger_users.user_name as user_name , vtiger_users.first_name as first_name ,vtiger_users.last_name as last_name from vtiger_user2role inner join vtiger_users on vtiger_users.id=vtiger_user2role.userid inner join vtiger_role on vtiger_role.roleid=vtiger_user2role.roleid where vtiger_role.parentrole like ? and status='Active' union select shareduserid as id,vtiger_users.user_name as user_name , vtiger_users.first_name as first_name ,vtiger_users.last_name as last_name from vtiger_tmp_write_user_sharing_per inner join vtiger_users on vtiger_users.id=vtiger_tmp_write_user_sharing_per.shareduserid where status='Active' and vtiger_tmp_write_user_sharing_per.userid=? and vtiger_tmp_write_user_sharing_per.tabid=?"; $params = array($current_user->id, $current_user_parent_role_seq."::%", $current_user->id, getTabid($module)); } else { $log->debug("Sharing is Public. All vtiger_users should be listed"); $query = "SELECT id, user_name,first_name,last_name from vtiger_users WHERE status=?"; $params = array($status); } } if (!empty($assigned_user)) { $query .= " OR id=?"; array_push($params, $assigned_user); } $query .= " order by user_name ASC"; $result = $db->pquery($query, $params, true, "Error filling in user array: "); if ($add_blank==true){ // Add in a blank row $temp_result[''] = ''; } // Get the id and the name. while($row = $db->fetchByAssoc($result)) { $temp_result[$row['id']] = getFullNameFromArray('Users', $row); } $user_array = &$temp_result; } $log->debug("Exiting get_user_array method ..."); return $user_array; } function get_group_array($add_blank=true, $status="Active", $assigned_user="",$private="") { global $log; $log->debug("Entering get_user_array(".$add_blank.",". $status.",".$assigned_user.",".$private.") method ..."); global $current_user; if(isset($current_user) && $current_user->id != '') { require('user_privileges/sharing_privileges_'.$current_user->id.'.php'); require('user_privileges/user_privileges_'.$current_user->id.'.php'); } static $group_array = null; $module=$_REQUEST['module']; if($group_array == null) { require_once('include/database/PearDatabase.php'); $db = PearDatabase::getInstance(); $temp_result = Array(); // Including deleted vtiger_users for now. $log->debug("Sharing is Public. All vtiger_users should be listed"); $query = "SELECT groupid, groupname from vtiger_groups"; $params = array(); if($private == 'private'){ $query .= " WHERE groupid=?"; $params = array( $current_user->id); if(count($current_user_groups) != 0) { $query .= " OR vtiger_groups.groupid in (".generateQuestionMarks($current_user_groups).")"; array_push($params, $current_user_groups); } $log->debug("Sharing is Private. Only the current user should be listed"); $query .= " union select vtiger_group2role.groupid as groupid,vtiger_groups.groupname as groupname from vtiger_group2role inner join vtiger_groups on vtiger_groups.groupid=vtiger_group2role.groupid inner join vtiger_role on vtiger_role.roleid=vtiger_group2role.roleid where vtiger_role.parentrole like ?"; array_push($params, $current_user_parent_role_seq."::%"); if(count($current_user_groups) != 0) { $query .= " union select vtiger_groups.groupid as groupid,vtiger_groups.groupname as groupname from vtiger_groups inner join vtiger_group2rs on vtiger_groups.groupid=vtiger_group2rs.groupid where vtiger_group2rs.roleandsubid in (".generateQuestionMarks($parent_roles).")"; array_push($params, $parent_roles); } $query .= " union select sharedgroupid as groupid,vtiger_groups.groupname as groupname from vtiger_tmp_write_group_sharing_per inner join vtiger_groups on vtiger_groups.groupid=vtiger_tmp_write_group_sharing_per.sharedgroupid where vtiger_tmp_write_group_sharing_per.userid=?"; array_push($params, $current_user->id); $query .= " and vtiger_tmp_write_group_sharing_per.tabid=?"; array_push($params, getTabid($module)); } $query .= " order by groupname ASC"; $result = $db->pquery($query, $params, true, "Error filling in user array: "); if ($add_blank==true){ // Add in a blank row $temp_result[''] = ''; } // Get the id and the name. while($row = $db->fetchByAssoc($result)) { $temp_result[$row['groupid']] = $row['groupname']; } $group_array = &$temp_result; } $log->debug("Exiting get_user_array method ..."); return $group_array; } /** Function skips executing arbitary commands given in a string * @param $string -- string:: Type string * @param $maxlength -- maximun length:: Type integer * @returns $string -- escaped string:: Type string * */ function clean($string, $maxLength) { global $log; $log->debug("Entering clean(".$string.",". $maxLength.") method ..."); $string = substr($string, 0, $maxLength); $log->debug("Exiting clean method ..."); return escapeshellcmd($string); } /** * Copy the specified request variable to the member variable of the specified object. * Do no copy if the member variable is already set. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function safe_map($request_var, & $focus, $always_copy = false) { global $log; $log->debug("Entering safe_map(".$request_var.",".get_class($focus).",".$always_copy.") method ..."); safe_map_named($request_var, $focus, $request_var, $always_copy); $log->debug("Exiting safe_map method ..."); } /** * Copy the specified request variable to the member variable of the specified object. * Do no copy if the member variable is already set. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function safe_map_named($request_var, & $focus, $member_var, $always_copy) { global $log; $log->debug("Entering safe_map_named(".$request_var.",".get_class($focus).",".$member_var.",".$always_copy.") method ..."); if (isset($_REQUEST[$request_var]) && ($always_copy || is_null($focus->$member_var))) { $log->debug("safe map named called assigning '{$_REQUEST[$request_var]}' to $member_var"); $focus->$member_var = $_REQUEST[$request_var]; } $log->debug("Exiting safe_map_named method ..."); } /** This function retrieves an application language file and returns the array of strings included in the $app_list_strings var. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. * If you are using the current language, do not call this function unless you are loading it for the first time */ function return_app_list_strings_language($language) { global $log; $log->debug("Entering return_app_list_strings_language(".$language.") method ..."); global $app_list_strings, $default_language, $log, $translation_string_prefix; $temp_app_list_strings = $app_list_strings; $language_used = $language; @include("include/language/$language.lang.php"); if(!isset($app_list_strings)) { $log->warn("Unable to find the application language file for language: ".$language); require("include/language/$default_language.lang.php"); $language_used = $default_language; } if(!isset($app_list_strings)) { $log->fatal("Unable to load the application language file for the selected language($language) or the default language($default_language)"); $log->debug("Exiting return_app_list_strings_language method ..."); return null; } $return_value = $app_list_strings; $app_list_strings = $temp_app_list_strings; $log->debug("Exiting return_app_list_strings_language method ..."); return $return_value; } /** * Retrieve the app_currency_strings for the required language. */ function return_app_currency_strings_language($language) { global $log; $log->debug("Entering return_app_currency_strings_language(".$language.") method ..."); global $app_currency_strings, $default_language, $log, $translation_string_prefix; // Backup the value first $temp_app_currency_strings = $app_currency_strings; @include("include/language/$language.lang.php"); if(!isset($app_currency_strings)) { $log->warn("Unable to find the application language file for language: ".$language); require("include/language/$default_language.lang.php"); $language_used = $default_language; } if(!isset($app_currency_strings)) { $log->fatal("Unable to load the application language file for the selected language($language) or the default language($default_language)"); $log->debug("Exiting return_app_currency_strings_language method ..."); return null; } $return_value = $app_currency_strings; // Restore the value back $app_currency_strings = $temp_app_currency_strings; $log->debug("Exiting return_app_currency_strings_language method ..."); return $return_value; } /** This function retrieves an application language file and returns the array of strings included. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. * If you are using the current language, do not call this function unless you are loading it for the first time */ function return_application_language($language) { global $log; $log->debug("Entering return_application_language(".$language.") method ..."); global $app_strings, $default_language, $log, $translation_string_prefix; $temp_app_strings = $app_strings; $language_used = $language; checkFileAccessForInclusion("include/language/$language.lang.php"); @include("include/language/$language.lang.php"); if(!isset($app_strings)) { $log->warn("Unable to find the application language file for language: ".$language); require("include/language/$default_language.lang.php"); $language_used = $default_language; } if(!isset($app_strings)) { $log->fatal("Unable to load the application language file for the selected language($language) or the default language($default_language)"); $log->debug("Exiting return_application_language method ..."); return null; } // If we are in debug mode for translating, turn on the prefix now! if($translation_string_prefix) { foreach($app_strings as $entry_key=>$entry_value) { $app_strings[$entry_key] = $language_used.' '.$entry_value; } } $return_value = $app_strings; $app_strings = $temp_app_strings; $log->debug("Exiting return_application_language method ..."); return $return_value; } /** This function retrieves a module's language file and returns the array of strings included. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. * If you are in the current module, do not call this function unless you are loading it for the first time */ function return_module_language($language, $module) { global $log; $log->debug("Entering return_module_language(".$language.",". $module.") method ..."); global $mod_strings, $default_language, $log, $currentModule, $translation_string_prefix; static $cachedModuleStrings = array(); if(!empty($cachedModuleStrings[$module])) { $log->debug("Exiting return_module_language method ..."); return $cachedModuleStrings[$module]; } $temp_mod_strings = $mod_strings; $language_used = $language; @include("modules/$module/language/$language.lang.php"); if(!isset($mod_strings)) { $log->warn("Unable to find the module language file for language: ".$language." and module: ".$module); if($default_language == 'en_us') { require("modules/$module/language/$default_language.lang.php"); $language_used = $default_language; } else { @include("modules/$module/language/$default_language.lang.php"); if(!isset($mod_strings)) { require("modules/$module/language/en_us.lang.php"); $language_used = 'en_us'; } else { $language_used = $default_language; } } } if(!isset($mod_strings)) { $log->fatal("Unable to load the module($module) language file for the selected language($language) or the default language($default_language)"); $log->debug("Exiting return_module_language method ..."); return null; } // If we are in debug mode for translating, turn on the prefix now! if($translation_string_prefix) { foreach($mod_strings as $entry_key=>$entry_value) { $mod_strings[$entry_key] = $language_used.' '.$entry_value; } } $return_value = $mod_strings; $mod_strings = $temp_mod_strings; $log->debug("Exiting return_module_language method ..."); $cachedModuleStrings[$module] = $return_value; return $return_value; } /*This function returns the mod_strings for the current language and the specified module */ function return_specified_module_language($language, $module) { global $log; global $default_language, $translation_string_prefix; @include("modules/$module/language/$language.lang.php"); if(!isset($mod_strings)) { $log->warn("Unable to find the module language file for language: ".$language." and module: ".$module); require("modules/$module/language/$default_language.lang.php"); $language_used = $default_language; } if(!isset($mod_strings)) { $log->fatal("Unable to load the module($module) language file for the selected language($language) or the default language($default_language)"); $log->debug("Exiting return_module_language method ..."); return null; } $return_value = $mod_strings; $log->debug("Exiting return_module_language method ..."); return $return_value; } /** This function retrieves an application language file and returns the array of strings included in the $mod_list_strings var. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. * If you are using the current language, do not call this function unless you are loading it for the first time */ function return_mod_list_strings_language($language,$module) { global $log; $log->debug("Entering return_mod_list_strings_language(".$language.",".$module.") method ..."); global $mod_list_strings, $default_language, $log, $currentModule,$translation_string_prefix; $language_used = $language; $temp_mod_list_strings = $mod_list_strings; if($currentModule == $module && isset($mod_list_strings) && $mod_list_strings != null) { $log->debug("Exiting return_mod_list_strings_language method ..."); return $mod_list_strings; } @include("modules/$module/language/$language.lang.php"); if(!isset($mod_list_strings)) { $log->fatal("Unable to load the application list language file for the selected language($language) or the default language($default_language)"); $log->debug("Exiting return_mod_list_strings_language method ..."); return null; } $return_value = $mod_list_strings; $mod_list_strings = $temp_mod_list_strings; $log->debug("Exiting return_mod_list_strings_language method ..."); return $return_value; } /** This function retrieves a theme's language file and returns the array of strings included. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function return_theme_language($language, $theme) { global $log; $log->debug("Entering return_theme_language(".$language.",". $theme.") method ..."); global $mod_strings, $default_language, $log, $currentModule, $translation_string_prefix; $language_used = $language; @include("themes/$theme/language/$current_language.lang.php"); if(!isset($theme_strings)) { $log->warn("Unable to find the theme file for language: ".$language." and theme: ".$theme); require("themes/$theme/language/$default_language.lang.php"); $language_used = $default_language; } if(!isset($theme_strings)) { $log->fatal("Unable to load the theme($theme) language file for the selected language($language) or the default language($default_language)"); $log->debug("Exiting return_theme_language method ..."); return null; } // If we are in debug mode for translating, turn on the prefix now! if($translation_string_prefix) { foreach($theme_strings as $entry_key=>$entry_value) { $theme_strings[$entry_key] = $language_used.' '.$entry_value; } } $log->debug("Exiting return_theme_language method ..."); return $theme_strings; } /** If the session variable is defined and is not equal to "" then return it. Otherwise, return the default value. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function return_session_value_or_default($varname, $default) { global $log; $log->debug("Entering return_session_value_or_default(".$varname.",". $default.") method ..."); if(isset($_SESSION[$varname]) && $_SESSION[$varname] != "") { $log->debug("Exiting return_session_value_or_default method ..."); return $_SESSION[$varname]; } $log->debug("Exiting return_session_value_or_default method ..."); return $default; } /** * Creates an array of where restrictions. These are used to construct a where SQL statement on the query * It looks for the variable in the $_REQUEST array. If it is set and is not "" it will create a where clause out of it. * @param &$where_clauses - The array to append the clause to * @param $variable_name - The name of the variable to look for an add to the where clause if found * @param $SQL_name - [Optional] If specified, this is the SQL column name that is used. If not specified, the $variable_name is used as the SQL_name. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function append_where_clause(&$where_clauses, $variable_name, $SQL_name = null) { global $log; $log->debug("Entering append_where_clause(".$where_clauses.",".$variable_name.",".$SQL_name.") method ..."); if($SQL_name == null) { $SQL_name = $variable_name; } if(isset($_REQUEST[$variable_name]) && $_REQUEST[$variable_name] != "") { array_push($where_clauses, "$SQL_name like '$_REQUEST[$variable_name]%'"); } $log->debug("Exiting append_where_clause method ..."); } /** * Generate the appropriate SQL based on the where clauses. * @param $where_clauses - An Array of individual where clauses stored as strings * @returns string where_clause - The final SQL where clause to be executed. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function generate_where_statement($where_clauses) { global $log; $log->debug("Entering generate_where_statement(".$where_clauses.") method ..."); $where = ""; foreach($where_clauses as $clause) { if($where != "") $where .= " and "; $where .= $clause; } $log->info("Here is the where clause for the list view: $where"); $log->debug("Exiting generate_where_statement method ..."); return $where; } /** * A temporary method of generating GUIDs of the correct format for our DB. * @return String contianing a GUID in the format: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee * * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function create_guid() { global $log; $log->debug("Entering create_guid() method ..."); $microTime = microtime(); list($a_dec, $a_sec) = explode(" ", $microTime); $dec_hex = sprintf("%x", $a_dec* 1000000); $sec_hex = sprintf("%x", $a_sec); ensure_length($dec_hex, 5); ensure_length($sec_hex, 6); $guid = ""; $guid .= $dec_hex; $guid .= create_guid_section(3); $guid .= '-'; $guid .= create_guid_section(4); $guid .= '-'; $guid .= create_guid_section(4); $guid .= '-'; $guid .= create_guid_section(4); $guid .= '-'; $guid .= $sec_hex; $guid .= create_guid_section(6); $log->debug("Exiting create_guid method ..."); return $guid; } /** Function to create guid section for a given character * @param $characters -- characters:: Type string * @returns $return -- integer:: Type integer`` */ function create_guid_section($characters) { global $log; $log->debug("Entering create_guid_section(".$characters.") method ..."); $return = ""; for($i=0; $i<$characters; $i++) { $return .= sprintf("%x", rand(0,15)); } $log->debug("Exiting create_guid_section method ..."); return $return; } /** Function to ensure length * @param $string -- string:: Type string * @param $length -- length:: Type string */ function ensure_length(&$string, $length) { global $log; $log->debug("Entering ensure_length(".$string.",". $length.") method ..."); $strlen = strlen($string); if($strlen < $length) { $string = str_pad($string,$length,"0"); } else if($strlen > $length) { $string = substr($string, 0, $length); } $log->debug("Exiting ensure_length method ..."); } /* function microtime_diff($a, $b) { global $log; $log->debug("Entering microtime_diff(".$a.",". $b.") method ..."); list($a_dec, $a_sec) = explode(" ", $a); list($b_dec, $b_sec) = explode(" ", $b); $log->debug("Exiting microtime_diff method ..."); return $b_sec - $a_sec + $b_dec - $a_dec; } */ /** * Return the display name for a theme if it exists. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function get_theme_display($theme) { global $log; $log->debug("Entering get_theme_display(".$theme.") method ..."); global $theme_name, $theme_description; $temp_theme_name = $theme_name; $temp_theme_description = $theme_description; if (is_file("./themes/$theme/config.php")) { @include("./themes/$theme/config.php"); $return_theme_value = $theme_name; } else { $return_theme_value = $theme; } $theme_name = $temp_theme_name; $theme_description = $temp_theme_description; $log->debug("Exiting get_theme_display method ..."); return $return_theme_value; } /** * Return an array of directory names. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function get_themes() { global $log; $log->debug("Entering get_themes() method ..."); if ($dir = @opendir("./themes")) { while (($file = readdir($dir)) !== false) { if ($file != ".." && $file != "." && $file != "CVS" && $file != "Attic" && $file != "akodarkgem" && $file != "bushtree" && $file != "coolblue" && $file != "Amazon" && $file != "busthree" && $file != "Aqua" && $file != "nature" && $file != "orange" && $file != "blue") { if(is_dir("./themes/".$file)) { if(!($file[0] == '.')) { // set the initial theme name to the filename $name = $file; // if there is a configuration class, load that. if(is_file("./themes/$file/config.php")) { require_once("./themes/$file/config.php"); } if(is_file("./themes/$file/style.css")) { $filelist[$file] = $name; } } } } } closedir($dir); } ksort($filelist); $log->debug("Exiting get_themes method ..."); return $filelist; } /** * Create javascript to clear values of all elements in a form. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function get_clear_form_js () { global $log; $log->debug("Entering get_clear_form_js () method ..."); $the_script = << EOQ; $log->debug("Exiting get_clear_form_js method ..."); return $the_script; } /** * Create javascript to set the cursor focus to specific vtiger_field in a form * when the screen is rendered. The vtiger_field name is currently hardcoded into the * the function. * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function get_set_focus_js () { global $log; $log->debug("Entering set_focus() method ..."); //TODO Clint 5/20 - Make this function more generic so that it can take in the target form and vtiger_field names as variables $the_script = << EOQ; $log->debug("Exiting get_set_focus_js method ..."); return $the_script; } /** * Very cool algorithm for sorting multi-dimensional arrays. Found at http://us2.php.net/manual/en/function.array-multisort.php * Syntax: $new_array = array_csort($array [, 'col1' [, SORT_FLAG [, SORT_FLAG]]]...); * Explanation: $array is the array you want to sort, 'col1' is the name of the column * you want to sort, SORT_FLAGS are : SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING * you can repeat the 'col',FLAG,FLAG, as often you want, the highest prioritiy is given to * the first - so the array is sorted by the last given column first, then the one before ... * Example: $array = array_csort($array,'town','age',SORT_DESC,'name'); * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function array_csort() { global $log; $log->debug("Entering array_csort() method ..."); $args = func_get_args(); $marray = array_shift($args); $i = 0; $msortline = "return(array_multisort("; foreach ($args as $arg) { $i++; if (is_string($arg)) { foreach ($marray as $row) { $sortarr[$i][] = $row[$arg]; } } else { $sortarr[$i] = $arg; } $msortline .= "\$sortarr[".$i."],"; } $msortline .= "\$marray));"; eval($msortline); $log->debug("Exiting array_csort method ..."); return $marray; } /** Function to set default varibles on to the global variable * @param $defaults -- default values:: Type array */ function set_default_config(&$defaults) { global $log; $log->debug("Entering set_default_config(".$defaults.") method ..."); foreach ($defaults as $name=>$value) { if ( ! isset($GLOBALS[$name]) ) { $GLOBALS[$name] = $value; } } $log->debug("Exiting set_default_config method ..."); } $toHtml = array( '"' => '"', '<' => '<', '>' => '>', '& ' => '& ', "'" => ''', '' => '\r', '\r\n'=>'\n', ); /** Function to convert the given string to html * @param $string -- string:: Type string * @param $ecnode -- boolean:: Type boolean * @returns $string -- string:: Type string * */ function to_html($string, $encode=true) { global $log,$default_charset; //$log->debug("Entering to_html(".$string.",".$encode.") method ..."); global $toHtml; $action = $_REQUEST['action']; $search = $_REQUEST['search']; $doconvert = false; if($_REQUEST['module'] != 'Settings' && $_REQUEST['file'] != 'ListView' && $_REQUEST['module'] != 'Portal' && $_REQUEST['module'] != "Reports")// && $_REQUEST['module'] != 'Emails') $ajax_action = $_REQUEST['module'].'Ajax'; if(is_string($string)) { if($action != 'CustomView' && $action != 'Export' && $action != $ajax_action && $action != 'LeadConvertToEntities' && $action != 'CreatePDF' && $action != 'ConvertAsFAQ' && $_REQUEST['module'] != 'Dashboard' && $action != 'CreateSOPDF' && $action != 'SendPDFMail' && (!isset($_REQUEST['submode'])) ) { $doconvert = true; } else if($search == true) { // Fix for tickets #4647, #4648. Conversion required in case of search results also. $doconvert = true; } if ($doconvert == true) { if(strtolower($default_charset) == 'utf-8') $string = htmlentities($string, ENT_QUOTES, $default_charset); else $string = preg_replace(array('//', '/"/'), array('<', '>', '"'), $string); } } //$log->debug("Exiting to_html method ..."); return $string; } /** Function to get the tablabel for a given id * @param $tabid -- tab id:: Type integer * @returns $string -- string:: Type string */ function getTabname($tabid) { global $log; $log->debug("Entering getTabname(".$tabid.") method ..."); $log->info("tab id is ".$tabid); global $adb; $sql = "select tablabel from vtiger_tab where tabid=?"; $result = $adb->pquery($sql, array($tabid)); $tabname= $adb->query_result($result,0,"tablabel"); $log->debug("Exiting getTabname method ..."); return $tabname; } /** Function to get the tab module name for a given id * @param $tabid -- tab id:: Type integer * @returns $string -- string:: Type string * */ function getTabModuleName($tabid) { global $log; $log->debug("Entering getTabModuleName(".$tabid.") method ..."); // Lookup information in cache first $tabname = VTCacheUtils::lookupModulename($tabid); if($tabname === false) { if (file_exists('tabdata.php') && (filesize('tabdata.php') != 0)) { include('tabdata.php'); $tabname = array_search($tabid,$tab_info_array); if($tabname == false) { global $adb; $sql = "select name from vtiger_tab where tabid=?"; $result = $adb->pquery($sql, array($tabid)); $tabname= $adb->query_result($result,0,"name"); } // Update information to cache for re-use VTCacheUtils::updateTabidInfo($tabid, $tabname); } else { $log->info("tab id is ".$tabid); global $adb; $sql = "select name from vtiger_tab where tabid=?"; $result = $adb->pquery($sql, array($tabid)); $tabname= $adb->query_result($result,0,"name"); // Update information to cache for re-use VTCacheUtils::updateTabidInfo($tabid, $tabname); } } $log->debug("Exiting getTabModuleName method ..."); return $tabname; } /** Function to get column fields for a given module * @param $module -- module:: Type string * @returns $column_fld -- column field :: Type array * */ function getColumnFields($module) { global $log; $log->debug("Entering getColumnFields(".$module.") method ..."); $log->debug("in getColumnFields ".$module); // Lookup in cache for information $cachedModuleFields = VTCacheUtils::lookupFieldInfo_Module($module); if($cachedModuleFields === false) { global $adb; $tabid = getTabid($module); if ($module == 'Calendar') { $tabid = array('9','16'); } // Let us pick up all the fields first so that we can cache information $sql = "SELECT tabid, fieldname, fieldid, fieldlabel, columnname, tablename, uitype, typeofdata, presence FROM vtiger_field WHERE tabid in (" . generateQuestionMarks($tabid) . ")"; $result = $adb->pquery($sql, array($tabid)); $noofrows = $adb->num_rows($result); if($noofrows) { while($resultrow = $adb->fetch_array($result)) { // Update information to cache for re-use VTCacheUtils::updateFieldInfo( $resultrow['tabid'], $resultrow['fieldname'], $resultrow['fieldid'], $resultrow['fieldlabel'], $resultrow['columnname'], $resultrow['tablename'], $resultrow['uitype'], $resultrow['typeofdata'], $resultrow['presence'] ); } } // For consistency get information from cache $cachedModuleFields = VTCacheUtils::lookupFieldInfo_Module($module); } if($module == 'Calendar') { $cachedEventsFields = VTCacheUtils::lookupFieldInfo_Module('Events'); if($cachedModuleFields == false) $cachedModuleFields = $cachedEventsFields; else $cachedModuleFields = array_merge($cachedModuleFields, $cachedEventsFields); } $column_fld = array(); if($cachedModuleFields) { foreach($cachedModuleFields as $fieldinfo) { $column_fld[$fieldinfo['fieldname']] = ''; } } $log->debug("Exiting getColumnFields method ..."); return $column_fld; } /** Function to get a users's mail id * @param $userid -- userid :: Type integer * @returns $email -- email :: Type string * */ function getUserEmail($userid) { global $log; $log->debug("Entering getUserEmail(".$userid.") method ..."); $log->info("in getUserEmail ".$userid); global $adb; if($userid != '') { $sql = "select email1 from vtiger_users where id=?"; $result = $adb->pquery($sql, array($userid)); $email = $adb->query_result($result,0,"email1"); } $log->debug("Exiting getUserEmail method ..."); return $email; } /** Function to get a userid for outlook * @param $username -- username :: Type string * @returns $user_id -- user id :: Type integer */ //outlook security function getUserId_Ol($username) { global $log; $log->debug("Entering getUserId_Ol(".$username.") method ..."); $log->info("in getUserId_Ol ".$username); global $adb; $sql = "select id from vtiger_users where user_name=?"; $result = $adb->pquery($sql, array($username)); $num_rows = $adb->num_rows($result); if($num_rows > 0) { $user_id = $adb->query_result($result,0,"id"); } else { $user_id = 0; } $log->debug("Exiting getUserId_Ol method ..."); return $user_id; } /** Function to get a action id for a given action name * @param $action -- action name :: Type string * @returns $actionid -- action id :: Type integer */ //outlook security function getActionid($action) { global $log; $log->debug("Entering getActionid(".$action.") method ..."); global $adb; $log->info("get Actionid ".$action); $actionid = ''; if(file_exists('tabdata.php') && (filesize('tabdata.php') != 0)) { include('tabdata.php'); $actionid= $action_id_array[$action]; } else { $query="select * from vtiger_actionmapping where actionname=?"; $result =$adb->pquery($query, array($action)); $actionid=$adb->query_result($result,0,'actionid'); } $log->info("action id selected is ".$actionid ); $log->debug("Exiting getActionid method ..."); return $actionid; } /** Function to get a action for a given action id * @param $action id -- action id :: Type integer * @returns $actionname-- action name :: Type string */ function getActionname($actionid) { global $log; $log->debug("Entering getActionname(".$actionid.") method ..."); global $adb; $actionname=''; if (file_exists('tabdata.php') && (filesize('tabdata.php') != 0)) { include('tabdata.php'); $actionname= $action_name_array[$actionid]; } else { $query="select * from vtiger_actionmapping where actionid=? and securitycheck=0"; $result =$adb->pquery($query, array($actionid)); $actionname=$adb->query_result($result,0,"actionname"); } $log->debug("Exiting getActionname method ..."); return $actionname; } /** Function to get a assigned user id for a given entity * @param $record -- entity id :: Type integer * @returns $user_id -- user id :: Type integer */ function getUserId($record) { global $log; $log->debug("Entering getUserId(".$record.") method ..."); $log->info("in getUserId ".$record); global $adb; $user_id=$adb->query_result($adb->pquery("select * from vtiger_crmentity where crmid = ?", array($record)),0,'smownerid'); $log->debug("Exiting getUserId method ..."); return $user_id; } /** Function to get a user id or group id for a given entity * @param $record -- entity id :: Type integer * @returns $ownerArr -- owner id :: Type array */ function getRecordOwnerId($record) { global $log; $log->debug("Entering getRecordOwnerId(".$record.") method ..."); global $adb; $ownerArr=Array(); $query="select smownerid from vtiger_crmentity where crmid = ?"; $result=$adb->pquery($query, array($record)); if($adb->num_rows($result) > 0) { $ownerId=$adb->query_result($result,0,'smownerid'); $sql_result = $adb->pquery("select count(*) as count from vtiger_users where id = ?",array($ownerId)); if($adb->query_result($sql_result,0,'count') > 0) $ownerArr['Users'] = $ownerId; else $ownerArr['Groups'] = $ownerId; } $log->debug("Exiting getRecordOwnerId method ..."); return $ownerArr; } /** Function to insert value to profile2field table * @param $profileid -- profileid :: Type integer */ function insertProfile2field($profileid) { global $log; $log->debug("Entering insertProfile2field(".$profileid.") method ..."); $log->info("in insertProfile2field ".$profileid); global $adb; $adb->database->SetFetchMode(ADODB_FETCH_ASSOC); $fld_result = $adb->pquery("select * from vtiger_field where generatedtype=1 and displaytype in (1,2,3) and vtiger_field.presence in (0,2) and tabid != 29", array()); $num_rows = $adb->num_rows($fld_result); for($i=0; $i<$num_rows; $i++) { $tab_id = $adb->query_result($fld_result,$i,'tabid'); $field_id = $adb->query_result($fld_result,$i,'fieldid'); $params = array($profileid, $tab_id, $field_id, 0, 0); $adb->pquery("insert into vtiger_profile2field values (?,?,?,?,?)", $params); } $log->debug("Exiting insertProfile2field method ..."); } /** Function to insert into default org field */ function insert_def_org_field() { global $log; $log->debug("Entering insert_def_org_field() method ..."); global $adb; $adb->database->SetFetchMode(ADODB_FETCH_ASSOC); $fld_result = $adb->pquery("select * from vtiger_field where generatedtype=1 and displaytype in (1,2,3) and vtiger_field.presence in (0,2) and tabid != 29", array()); $num_rows = $adb->num_rows($fld_result); for($i=0; $i<$num_rows; $i++) { $tab_id = $adb->query_result($fld_result,$i,'tabid'); $field_id = $adb->query_result($fld_result,$i,'fieldid'); $params = array($tab_id, $field_id, 0, 0); $adb->pquery("insert into vtiger_def_org_field values (?,?,?,?)", $params); } $log->debug("Exiting insert_def_org_field() method ..."); } /** Function to insert value to profile2field table * @param $fld_module -- field module :: Type string * @param $profileid -- profileid :: Type integer * @returns $result -- result :: Type string */ function getProfile2FieldList($fld_module, $profileid) { global $log; $log->debug("Entering getProfile2FieldList(".$fld_module.",". $profileid.") method ..."); $log->info("in getProfile2FieldList ".$fld_module. ' vtiger_profile id is '.$profileid); global $adb; $tabid = getTabid($fld_module); $query = "select vtiger_profile2field.visible,vtiger_field.* from vtiger_profile2field inner join vtiger_field on vtiger_field.fieldid=vtiger_profile2field.fieldid where vtiger_profile2field.profileid=? and vtiger_profile2field.tabid=? and vtiger_field.presence in (0,1,2)"; $result = $adb->pquery($query, array($profileid, $tabid)); $log->debug("Exiting getProfile2FieldList method ..."); return $result; } /** Function to insert value to profile2fieldPermissions table * @param $fld_module -- field module :: Type string * @param $profileid -- profileid :: Type integer * @returns $return_data -- return_data :: Type string */ //added by jeri function getProfile2FieldPermissionList($fld_module, $profileid) { global $log; $log->debug("Entering getProfile2FieldPermissionList(".$fld_module.",". $profileid.") method ..."); $log->info("in getProfile2FieldList ".$fld_module. ' vtiger_profile id is '.$profileid); // Cache information to re-use static $_module_fieldpermission_cache = array(); if(!isset($_module_fieldpermission_cache[$fld_module])) { $_module_fieldpermission_cache[$fld_module] = array(); } // Lookup cache first $return_data = VTCacheUtils::lookupProfile2FieldPermissionList($fld_module, $profileid); if($return_data === false) { $return_data = array(); global $adb; $tabid = getTabid($fld_module); $query = "SELECT vtiger_profile2field.visible, vtiger_profile2field.readonly, vtiger_field.fieldlabel, vtiger_field.uitype, vtiger_field.fieldid, vtiger_field.displaytype, vtiger_field.typeofdata FROM vtiger_profile2field INNER JOIN vtiger_field ON vtiger_field.fieldid=vtiger_profile2field.fieldid WHERE vtiger_profile2field.profileid=? and vtiger_profile2field.tabid=? and vtiger_field.presence in (0,2)"; $qparams = array($profileid, $tabid); $result = $adb->pquery($query, $qparams); for($i=0; $i<$adb->num_rows($result); $i++) { $return_data[]=array( $adb->query_result($result,$i,"fieldlabel"), $adb->query_result($result,$i,"visible"), // From vtiger_profile2field.visible $adb->query_result($result,$i,"uitype"), $adb->query_result($result,$i,"readonly"), $adb->query_result($result,$i,"fieldid"), $adb->query_result($result,$i,"displaytype"), $adb->query_result($result,$i,"typeofdata") ); } // Update information to cache for re-use VTCacheUtils::updateProfile2FieldPermissionList($fld_module, $profileid, $return_data); } $log->debug("Exiting getProfile2FieldPermissionList method ..."); return $return_data; } /** Function to insert value to profile2fieldPermissions table * @param $fld_module -- field module :: Type string * @param $profileid -- profileid :: Type integer * @returns $return_data -- return_data :: Type string */ function getProfile2ModuleFieldPermissionList($fld_module, $profileid) { global $log; $log->debug("Entering getProfile2ModuleFieldPermissionList(".$fld_module.",". $profileid.") method ..."); $log->info("in getProfile2ModuleFieldList ".$fld_module. ' vtiger_profile id is '.$profileid); // Cache information to re-use static $_module_fieldpermission_cache = array(); if(!isset($_module_fieldpermission_cache[$fld_module])) { $_module_fieldpermission_cache[$fld_module] = array(); } $return_data = array(); global $adb; $tabid = getTabid($fld_module); $query = "SELECT vtiger_profile2tab.tabid, vtiger_profile2tab.permissions, vtiger_field.fieldlabel, vtiger_field.uitype, vtiger_field.fieldid, vtiger_field.displaytype, vtiger_field.typeofdata FROM vtiger_profile2tab INNER JOIN vtiger_field ON vtiger_field.tabid=vtiger_profile2tab.tabid WHERE vtiger_profile2tab.profileid=? AND vtiger_profile2tab.tabid=? AND vtiger_field.presence in (0,2)"; $qparams = array($profileid, $tabid); $result = $adb->pquery($query, $qparams); for($i=0; $i<$adb->num_rows($result); $i++) { $fieldid = $adb->query_result($result,$i,"fieldid"); $checkentry = $adb->pquery("SELECT 1 FROM vtiger_profile2field WHERE profileid=? AND tabid=? AND fieldid =?",array($profileid,$tabid,$fieldid)); $visible_value = 0; $readOnlyValue = 0; if($adb->num_rows($checkentry) == 0) { $sql11="INSERT INTO vtiger_profile2field VALUES(?,?,?,?,?)"; $adb->pquery($sql11, array($profileid, $tabid, $fieldid,$visible_value, $readOnlyValue)); } $sql = "SELECT vtiger_profile2field.visible, vtiger_profile2field.readonly FROM vtiger_profile2field WHERE fieldid=? AND tabid=? AND profileid=?"; $params = array($fieldid,$tabid,$profileid); $res = $adb->pquery($sql, $params); $return_data[]=array( $adb->query_result($result,$i,"fieldlabel"), $adb->query_result($res,0,"visible"), // From vtiger_profile2field.visible $adb->query_result($result,$i,"uitype"), $adb->query_result($res,0,"readonly"), // From vtiger_profile2field.readonly $adb->query_result($result,$i,"fieldid"), $adb->query_result($result,$i,"displaytype"), $adb->query_result($result,$i,"typeofdata") ); } $log->debug("Exiting getProfile2ModuleFieldPermissionList method ..."); return $return_data; } /** Function to getProfile2allfieldsListinsert value to profile2fieldPermissions table * @param $mod_array -- mod_array :: Type string * @param $profileid -- profileid :: Type integer * @returns $profilelist -- profilelist :: Type string */ function getProfile2AllFieldList($mod_array,$profileid) { global $log; $log->debug("Entering getProfile2AllFieldList(".$mod_array.",".$profileid.") method ..."); $log->info("in getProfile2AllFieldList vtiger_profile id is " .$profileid); global $adb; $profilelist=array(); for($i=0;$idebug("Exiting getProfile2AllFieldList method ..."); return $profilelist; } /** Function to getdefaultfield organisation list for a given module * @param $fld_module -- module name :: Type string * @returns $result -- string :: Type object */ //end of fn added by jeri function getDefOrgFieldList($fld_module) { global $log; $log->debug("Entering getDefOrgFieldList(".$fld_module.") method ..."); $log->info("in getDefOrgFieldList ".$fld_module); global $adb; $tabid = getTabid($fld_module); $query = "select vtiger_def_org_field.visible,vtiger_field.* from vtiger_def_org_field inner join vtiger_field on vtiger_field.fieldid=vtiger_def_org_field.fieldid where vtiger_def_org_field.tabid=? and vtiger_field.presence in (0,2)"; $qparams = array($tabid); $result = $adb->pquery($query, $qparams); $log->debug("Exiting getDefOrgFieldList method ..."); return $result; } /** Function to getQuickCreate for a given tabid * @param $tabid -- tab id :: Type string * @param $actionid -- action id :: Type integer * @returns $QuickCreateForm -- QuickCreateForm :: Type boolean */ function getQuickCreate($tabid,$actionid) { global $log; $log->debug("Entering getQuickCreate(".$tabid.",".$actionid.") method ..."); $module=getTabModuleName($tabid); $actionname=getActionname($actionid); $QuickCreateForm= 'true'; $perr=isPermitted($module,$actionname); if($perr == 'no') { $QuickCreateForm= 'false'; } $log->debug("Exiting getQuickCreate method ..."); return $QuickCreateForm; } /** Function to getQuickCreate for a given tabid * @param $tabid -- tab id :: Type string * @param $actionid -- action id :: Type integer * @returns $QuickCreateForm -- QuickCreateForm :: Type boolean */ function ChangeStatus($status,$activityid,$activity_mode='') { global $log; $log->debug("Entering ChangeStatus(".$status.",".$activityid.",".$activity_mode."='') method ..."); $log->info("in ChangeStatus ".$status. ' vtiger_activityid is '.$activityid); global $adb; if ($activity_mode == 'Task') { $query = "Update vtiger_activity set status=? where activityid = ?"; } elseif ($activity_mode == 'Events') { $query = "Update vtiger_activity set eventstatus=? where activityid = ?"; } if($query) { $adb->pquery($query, array($status, $activityid)); } $log->debug("Exiting ChangeStatus method ..."); } /** Function to get unitprice for a given product id * @param $productid -- product id :: Type integer * @returns $up -- up :: Type string */ function getUnitPrice($productid, $module='Products') { global $log, $adb; $log->debug("Entering getUnitPrice($productid,$module) method ..."); if($module == 'Services') { $query = "select unit_price from vtiger_service where serviceid=?"; } else { $query = "select unit_price from vtiger_products where productid=?"; } $result = $adb->pquery($query, array($productid)); $unitpice = $adb->query_result($result,0,'unit_price'); $log->debug("Exiting getUnitPrice method ..."); return $unitpice; } /** Function to upload product image file * @param $mode -- mode :: Type string * @param $id -- id :: Type integer * @returns $ret_array -- return array:: Type array */ function upload_product_image_file($mode,$id) { global $log; $log->debug("Entering upload_product_image_file(".$mode.",".$id.") method ..."); global $root_directory; $log->debug("Inside upload_product_image_file. The id is ".$id); $uploaddir = $root_directory ."/test/product/"; $file_path_name = $_FILES['imagename']['name']; if (isset($_REQUEST['imagename_hidden'])) { $file_name = $_REQUEST['imagename_hidden']; } else { //allowed file pathname like UTF-8 Character $file_name = ltrim(basename(" ".$file_path_name)); // basename($file_path_name); } $file_name = $id.'_'.$file_name; $filetype= $_FILES['imagename']['type']; $filesize = $_FILES['imagename']['size']; $ret_array = Array(); if($filesize > 0) { if(move_uploaded_file($_FILES["imagename"]["tmp_name"],$uploaddir.$file_name)) { $upload_status = "yes"; $ret_array["status"] = $upload_status; $ret_array["file_name"] = $file_name; } else { $errorCode = $_FILES['imagename']['error']; $upload_status = "no"; $ret_array["status"] = $upload_status; $ret_array["errorcode"] = $errorCode; } } else { $upload_status = "no"; $ret_array["status"] = $upload_status; } $log->debug("Exiting upload_product_image_file method ..."); return $ret_array; } /** Function to upload product image file * @param $id -- id :: Type integer * @param $deleted_array -- images to be deleted :: Type array * @returns $imagename -- imagelist:: Type array */ function getProductImageName($id,$deleted_array='') { global $log; $log->debug("Entering getProductImageName(".$id.",".$deleted_array."='') method ..."); global $adb; $image_array=array(); $query = "select imagename from vtiger_products where productid=?"; $result = $adb->pquery($query, array($id)); $image_name = $adb->query_result($result,0,"imagename"); $image_array=explode("###",$image_name); $log->debug("Inside getProductImageName. The image_name is ".$image_name); if($deleted_array!='') { $resultant_image = array(); $resultant_image=array_merge(array_diff($image_array,$deleted_array)); $imagelists=implode('###',$resultant_image); $log->debug("Exiting getProductImageName method ..."); return $imagelists; } else { $log->debug("Exiting getProductImageName method ..."); return $image_name; } } /** Function to get Contact images * @param $id -- id :: Type integer * @returns $imagename -- imagename:: Type string */ function getContactImageName($id) { global $log; $log->debug("Entering getContactImageName(".$id.") method ..."); global $adb; $query = "select imagename from vtiger_contactdetails where contactid=?"; $result = $adb->pquery($query, array($id)); $image_name = $adb->query_result($result,0,"imagename"); $log->debug("Inside getContactImageName. The image_name is ".$image_name); $log->debug("Exiting getContactImageName method ..."); return $image_name; } /** Function to update sub total in inventory * @param $module -- module name :: Type string * @param $tablename -- tablename :: Type string * @param $colname -- colname :: Type string * @param $colname1 -- coluname1 :: Type string * @param $entid_fld -- entity field :: Type string * @param $entid -- entid :: Type integer * @param $prod_total -- totalproduct :: Type integer */ function updateSubTotal($module,$tablename,$colname,$colname1,$entid_fld,$entid,$prod_total) { global $log; $log->debug("Entering updateSubTotal(".$module.",".$tablename.",".$colname.",".$colname1.",".$entid_fld.",".$entid.",".$prod_total.") method ..."); global $adb; //getting the subtotal $query = "select ".$colname.",".$colname1." from ".$tablename." where ".$entid_fld."=?"; $result1 = $adb->pquery($query, array($entid)); $subtot = $adb->query_result($result1,0,$colname); $subtot_upd = $subtot - $prod_total; $gdtot = $adb->query_result($result1,0,$colname1); $gdtot_upd = $gdtot - $prod_total; //updating the subtotal $sub_query = "update $tablename set $colname=?, $colname1=? where $entid_fld=?"; $adb->pquery($sub_query, array($subtot_upd, $gdtot_upd, $entid)); $log->debug("Exiting updateSubTotal method ..."); } /** Function to get Inventory Total * @param $return_module -- return module :: Type string * @param $id -- entity id :: Type integer * @returns $total -- total:: Type integer */ function getInventoryTotal($return_module,$id) { global $log; $log->debug("Entering getInventoryTotal(".$return_module.",".$id.") method ..."); global $adb; if($return_module == "Potentials") { $query ="select vtiger_products.productname,vtiger_products.unit_price,vtiger_products.qtyinstock,vtiger_seproductsrel.* from vtiger_products inner join vtiger_seproductsrel on vtiger_seproductsrel.productid=vtiger_products.productid where crmid=?"; } elseif($return_module == "Products") { $query="select vtiger_products.productid,vtiger_products.productname,vtiger_products.unit_price,vtiger_products.qtyinstock,vtiger_crmentity.* from vtiger_products inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_products.productid where vtiger_crmentity.deleted=0 and productid=?"; } $result = $adb->pquery($query, array($id)); $num_rows=$adb->num_rows($result); $total=0; for($i=1;$i<=$num_rows;$i++) { $unitprice=$adb->query_result($result,$i-1,'unit_price'); $qty=$adb->query_result($result,$i-1,'quantity'); $listprice=$adb->query_result($result,$i-1,'listprice'); if($listprice == '') $listprice = $unitprice; if($qty =='') $qty = 1; $total = $total+($qty*$listprice); } $log->debug("Exiting getInventoryTotal method ..."); return $total; } /** Function to update product quantity * @param $product_id -- product id :: Type integer * @param $upd_qty -- quantity :: Type integer */ function updateProductQty($product_id, $upd_qty) { global $log; $log->debug("Entering updateProductQty(".$product_id.",". $upd_qty.") method ..."); global $adb; $query= "update vtiger_products set qtyinstock=? where productid=?"; $adb->pquery($query, array($upd_qty, $product_id)); $log->debug("Exiting updateProductQty method ..."); } /** Function to get account information * @param $parent_id -- parent id :: Type integer * @returns $accountid -- accountid:: Type integer */ function get_account_info($parent_id) { global $log; $log->debug("Entering get_account_info(".$parent_id.") method ..."); global $adb; $query = "select related_to from vtiger_potential where potentialid=?"; $result = $adb->pquery($query, array($parent_id)); $accountid=$adb->query_result($result,0,'related_to'); $log->debug("Exiting get_account_info method ..."); return $accountid; } /** Function to get quick create form fields * @param $fieldlabel -- field label :: Type string * @param $uitype -- uitype :: Type integer * @param $fieldname -- field name :: Type string * @param $tabid -- tabid :: Type integer * @returns $return_field -- return field:: Type string */ //for Quickcreate-Form function get_quickcreate_form($fieldlabel,$uitype,$fieldname,$tabid) { global $log; $log->debug("Entering get_quickcreate_form(".$fieldlabel.",".$uitype.",".$fieldname.",".$tabid.") method ..."); $return_field =''; switch($uitype) { case 1: $return_field .=get_textField($fieldlabel,$fieldname); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 2: $return_field .=get_textmanField($fieldlabel,$fieldname,$tabid); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 6: $return_field .=get_textdateField($fieldlabel,$fieldname,$tabid); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 11: $return_field .=get_textField($fieldlabel,$fieldname); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 13: $return_field .=get_textField($fieldlabel,$fieldname); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 15: $return_field .=get_textcomboField($fieldlabel,$fieldname); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 16: $return_field .=get_textcomboField($fieldlabel,$fieldname); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 17: $return_field .=get_textwebField($fieldlabel,$fieldname); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 19: $return_field .=get_textField($fieldlabel,$fieldname); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 22: $return_field .=get_textmanField($fieldlabel,$fieldname,$tabid); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 23: $return_field .=get_textdateField($fieldlabel,$fieldname,$tabid); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 50: $return_field .=get_textaccField($fieldlabel,$fieldname,$tabid); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 51: $return_field .=get_textaccField($fieldlabel,$fieldname,$tabid); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 55: $return_field .=get_textField($fieldlabel,$fieldname); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 63: $return_field .=get_textdurationField($fieldlabel,$fieldname,$tabid); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; case 71: $return_field .=get_textField($fieldlabel,$fieldname); $log->debug("Exiting get_quickcreate_form method ..."); return $return_field; break; } } /** Function to get quick create form fields * @param $label -- field label :: Type string * @param $name -- field name :: Type string * @param $tid -- tabid :: Type integer * @returns $form_field -- return field:: Type string */ function get_textmanField($label,$name,$tid) { global $log; $log->debug("Entering get_textmanField(".$label.",".$name.",".$tid.") method ..."); $form_field=''; if($tid == 9) { $form_field .=''; $form_field .= '*'; $form_field .= $label.':
'; $form_field .=''; $log->debug("Exiting get_textmanField method ..."); return $form_field; } if($tid == 16) { $form_field .=''; $form_field .= '*'; $form_field .= $label.':
'; $form_field .=''; $log->debug("Exiting get_textmanField method ..."); return $form_field; } else { $form_field .=''; $form_field .= '*'; $form_field .= $label.':
'; $form_field .=''; $log->debug("Exiting get_textmanField method ..."); return $form_field; } } /** Function to get textfield for website field * @param $label -- field label :: Type string * @param $name -- field name :: Type string * @returns $form_field -- return field:: Type string */ function get_textwebField($label,$name) { global $log; $log->debug("Entering get_textwebField(".$label.",".$name.") method ..."); $form_field=''; $form_field .=''; $form_field .= $label.':
http://
'; $form_field .=''; $log->debug("Exiting get_textwebField method ..."); return $form_field; } /** Function to get textfield * @param $label -- field label :: Type string * @param $name -- field name :: Type string * @returns $form_field -- return field:: Type string */ function get_textField($label,$name) { global $log; $log->debug("Entering get_textField(".$label.",".$name.") method ..."); $form_field=''; if($name == "amount") { $form_field .=''; $form_field .= $label.':(U.S Dollar:$)
'; $form_field .=''; $log->debug("Exiting get_textField method ..."); return $form_field; } else { $form_field .=''; $form_field .= $label.':
'; $form_field .=''; $log->debug("Exiting get_textField method ..."); return $form_field; } } /** Function to get account textfield * @param $label -- field label :: Type string * @param $name -- field name :: Type string * @param $tid -- tabid :: Type integer * @returns $form_field -- return field:: Type string */ function get_textaccField($label,$name,$tid) { global $log; $log->debug("Entering get_textaccField(".$label.",".$name.",".$tid.") method ..."); global $app_strings; $form_field=''; if($tid == 2) { $form_field .=''; $form_field .= '*'; $form_field .= $label.':
'; $form_field .='
'; $form_field .=' '; $log->debug("Exiting get_textaccField method ..."); return $form_field; } else { $form_field .=''; $form_field .= $label.':
'; $form_field .='
'; $form_field .=' '; $log->debug("Exiting get_textaccField method ..."); return $form_field; } } /** Function to get combo field values * @param $label -- field label :: Type string * @param $name -- field name :: Type string * @returns $form_field -- return field:: Type string */ function get_textcomboField($label,$name) { global $log; $log->debug("Entering get_textcomboField(".$label.",".$name.") method ..."); $form_field=''; if($name == "sales_stage") { $comboFieldNames = Array('leadsource'=>'leadsource_dom' ,'opportunity_type'=>'opportunity_type_dom' ,'sales_stage'=>'sales_stage_dom'); $comboFieldArray = getComboArray($comboFieldNames); $form_field .=''; $form_field .= '*'; $form_field .= $label.':
'; $form_field .=''; $log->debug("Exiting get_textcomboField method ..."); return $form_field; } if($name == "productcategory") { $comboFieldNames = Array('productcategory'=>'productcategory_dom'); $comboFieldArray = getComboArray($comboFieldNames); $form_field .=''; $form_field .= $label.':
'; $form_field .=''; $log->debug("Exiting get_textcomboField method ..."); return $form_field; } if($name == "ticketpriorities") { $comboFieldNames = Array('ticketpriorities'=>'ticketpriorities_dom'); $comboFieldArray = getComboArray($comboFieldNames); $form_field .=''; $form_field .= $label.':
'; $form_field .=''; $log->debug("Exiting get_textcomboField method ..."); return $form_field; } if($name == "activitytype") { $comboFieldNames = Array('activitytype'=>'activitytype_dom', 'duration_minutes'=>'duration_minutes_dom'); $comboFieldArray = getComboArray($comboFieldNames); $form_field .=''; $form_field .= $label.'
'; $form_field .=''; $log->debug("Exiting get_textcomboField method ..."); return $form_field; } if($name == "eventstatus") { $comboFieldNames = Array('eventstatus'=>'eventstatus_dom'); $comboFieldArray = getComboArray($comboFieldNames); $form_field .=''; $form_field .= $label.'
'; $form_field .=''; $log->debug("Exiting get_textcomboField method ..."); return $form_field; } if($name == "taskstatus") { $comboFieldNames = Array('taskstatus'=>'taskstatus_dom'); $comboFieldArray = getComboArray($comboFieldNames); $form_field .=''; $form_field .= $label.'
'; $form_field .=''; $log->debug("Exiting get_textcomboField method ..."); return $form_field; } } /** Function to get date field * @param $label -- field label :: Type string * @param $name -- field name :: Type string * @param $tid -- tabid :: Type integer * @returns $form_field -- return field:: Type string */ function get_textdateField($label,$name,$tid) { global $log; $log->debug("Entering get_textdateField(".$label.",".$name.",".$tid.") method ..."); global $theme; global $app_strings; global $current_user; $ntc_date_format = $app_strings['NTC_DATE_FORMAT']; $ntc_time_format = $app_strings['NTC_TIME_FORMAT']; $form_field=''; $default_date_start = date('Y-m-d'); $default_time_start = date('H:i'); $dis_value=getNewDisplayDate(); if($tid == 2) { $form_field .=''; $form_field .= '*'; $form_field .= $label.':
'; $form_field .='('.$current_user->date_format.')
'; $form_field .=' '; $form_field .=''; $log->debug("Exiting get_textdateField method ..."); return $form_field; } if($tid == 9) { $form_field .=''; $form_field .= '*'; $form_field .= $label.':
'; $form_field .=' '; $form_field.= ' '; $form_field.='
('.$current_user->date_format.') '.$ntc_time_format.''; $log->debug("Exiting get_textdateField method ..."); return $form_field; } if($tid == 16) { $form_field .=''; $form_field .= '*'; $form_field .= $label.':
'; $form_field .=' '; $form_field.= ' '; $form_field.='
('.$current_user->date_format.') '.$ntc_time_format.''; $log->debug("Exiting get_textdateField method ..."); return $form_field; } else { $form_field .=''; $form_field .= '*'; $form_field .= $label.':
'; $form_field .=' '; $form_field.= ' '; $form_field.='
('.$current_user->date_format.') '.$ntc_time_format.''; $log->debug("Exiting get_textdateField method ..."); return $form_field; } } /** Function to get duration text field in activity * @param $label -- field label :: Type string * @param $name -- field name :: Type string * @param $tid -- tabid :: Type integer * @returns $form_field -- return field:: Type string */ function get_textdurationField($label,$name,$tid) { global $log; $log->debug("Entering get_textdurationField(".$label.",".$name.",".$tid.") method ..."); $form_field=''; if($tid == 16) { $comboFieldNames = Array('activitytype'=>'activitytype_dom', 'duration_minutes'=>'duration_minutes_dom'); $comboFieldArray = getComboArray($comboFieldNames); $form_field .=''; $form_field .= $label.'
'; $form_field .=' '; $form_field .='
(hours/minutes)
'; $log->debug("Exiting get_textdurationField method ..."); return $form_field; } } /** Function to get email text field * @param $module -- module name :: Type name * @param $id -- entity id :: Type integer * @returns $hidden -- hidden:: Type string */ //Added to get the parents list as hidden for Emails -- 09-11-2005 function getEmailParentsList($module,$id,$focus = false) { global $log; $log->debug("Entering getEmailParentsList(".$module.",".$id.") method ..."); global $adb; // If the information is not sent then read it if($focus === false) { if($module == 'Contacts') $focus = new Contacts(); if($module == 'Leads') $focus = new Leads(); $focus->retrieve_entity_info($id,$module); } $fieldid = 0; $fieldname = 'email'; if($focus->column_fields['email'] == '' && $focus->column_fields['yahooid'] != '' ) $fieldname = 'yahooid'; elseif($focus->column_fields['email'] == '' && $focus->column_fields['secondaryemail'] != '' ) $fieldname='secondaryemail'; $res = $adb->pquery("select * from vtiger_field where tabid = ? and fieldname= ? and vtiger_field.presence in (0,2)", array(getTabid($module), $fieldname)); $fieldid = $adb->query_result($res,0,'fieldid'); $hidden .= ''; $hidden .= ''; $log->debug("Exiting getEmailParentsList method ..."); return $hidden; } /** This Function returns the current status of the specified Purchase Order. * The following is the input parameter for the function * $po_id --> Purchase Order Id, Type:Integer */ function getPoStatus($po_id) { global $log; $log->debug("Entering getPoStatus(".$po_id.") method ..."); global $log; $log->info("in getPoName ".$po_id); global $adb; $sql = "select postatus from vtiger_purchaseorder where purchaseorderid=?"; $result = $adb->pquery($sql, array($po_id)); $po_status = $adb->query_result($result,0,"postatus"); $log->debug("Exiting getPoStatus method ..."); return $po_status; } /** This Function adds the specified product quantity to the Product Quantity in Stock in the Warehouse * The following is the input parameter for the function: * $productId --> ProductId, Type:Integer * $qty --> Quantity to be added, Type:Integer */ function addToProductStock($productId,$qty) { global $log; $log->debug("Entering addToProductStock(".$productId.",".$qty.") method ..."); global $adb; $qtyInStck=getProductQtyInStock($productId); $updQty=$qtyInStck + $qty; $sql = "UPDATE vtiger_products set qtyinstock=? where productid=?"; $adb->pquery($sql, array($updQty, $productId)); $log->debug("Exiting addToProductStock method ..."); } /** This Function adds the specified product quantity to the Product Quantity in Demand in the Warehouse * @param int $productId - ProductId * @param int $qty - Quantity to be added */ function addToProductDemand($productId,$qty) { global $log; $log->debug("Entering addToProductDemand(".$productId.",".$qty.") method ..."); global $adb; $qtyInStck=getProductQtyInDemand($productId); $updQty=$qtyInStck + $qty; $sql = "UPDATE vtiger_products set qtyindemand=? where productid=?"; $adb->pquery($sql, array($updQty, $productId)); $log->debug("Exiting addToProductDemand method ..."); } /** This Function subtract the specified product quantity to the Product Quantity in Stock in the Warehouse * @param int $productId - ProductId * @param int $qty - Quantity to be subtracted */ function deductFromProductStock($productId,$qty) { global $log; $log->debug("Entering deductFromProductStock(".$productId.",".$qty.") method ..."); global $adb; $qtyInStck=getProductQtyInStock($productId); $updQty=$qtyInStck - $qty; $sql = "UPDATE vtiger_products set qtyinstock=? where productid=?"; $adb->pquery($sql, array($updQty, $productId)); $log->debug("Exiting deductFromProductStock method ..."); } /** This Function subtract the specified product quantity to the Product Quantity in Demand in the Warehouse * @param int $productId - ProductId * @param int $qty - Quantity to be subtract */ function deductFromProductDemand($productId,$qty) { global $log; $log->debug("Entering deductFromProductDemand(".$productId.",".$qty.") method ..."); global $adb; $qtyInStck=getProductQtyInDemand($productId); $updQty=$qtyInStck - $qty; $sql = "UPDATE vtiger_products set qtyindemand=? where productid=?"; $adb->pquery($sql, array($updQty, $productId)); $log->debug("Exiting deductFromProductDemand method ..."); } /** This Function returns the current product quantity in stock. * The following is the input parameter for the function: * $product_id --> ProductId, Type:Integer */ function getProductQtyInStock($product_id) { global $log; $log->debug("Entering getProductQtyInStock(".$product_id.") method ..."); global $adb; $query1 = "select qtyinstock from vtiger_products where productid=?"; $result=$adb->pquery($query1, array($product_id)); $qtyinstck= $adb->query_result($result,0,"qtyinstock"); $log->debug("Exiting getProductQtyInStock method ..."); return $qtyinstck; } /** This Function returns the current product quantity in demand. * @param int $product_id - ProductId * @return int $qtyInDemand - Quantity in Demand of a product */ function getProductQtyInDemand($product_id) { global $log; $log->debug("Entering getProductQtyInDemand(".$product_id.") method ..."); global $adb; $query1 = "select qtyindemand from vtiger_products where productid=?"; $result = $adb->pquery($query1, array($product_id)); $qtyInDemand = $adb->query_result($result,0,"qtyindemand"); $log->debug("Exiting getProductQtyInDemand method ..."); return $qtyInDemand; } /** Function to seperate the Date and Time * This function accepts a sting with date and time and * returns an array of two elements.The first element * contains the date and the second one contains the time */ function getDateFromDateAndtime($date_time) { global $log; $log->debug("Entering getDateFromDateAndtime(".$date_time.") method ..."); $result = explode(" ",$date_time); $log->debug("Exiting getDateFromDateAndtime method ..."); return $result; } /** Function to get header for block in edit/create and detailview * @param $header_label -- header label :: Type string * @returns $output -- output:: Type string */ function getBlockTableHeader($header_label) { global $log; $log->debug("Entering getBlockTableHeader(".$header_label.") method ..."); global $mod_strings; $label = $mod_strings[$header_label]; $output = $label; $log->debug("Exiting getBlockTableHeader method ..."); return $output; } /** Function to get the vtiger_table name from 'field' vtiger_table for the input vtiger_field based on the module * @param : string $module - current module value * @param : string $fieldname - vtiger_fieldname to which we want the vtiger_tablename * @return : string $tablename - vtiger_tablename in which $fieldname is a column, which is retrieved from 'field' vtiger_table per $module basis */ function getTableNameForField($module,$fieldname) { global $log; $log->debug("Entering getTableNameForField(".$module.",".$fieldname.") method ..."); global $adb; $tabid = getTabid($module); //Asha if($module == 'Calendar') { $tabid = array('9','16'); } $sql = "select tablename from vtiger_field where tabid in (". generateQuestionMarks($tabid) .") and vtiger_field.presence in (0,2) and columnname like ?"; $res = $adb->pquery($sql, array($tabid, '%'.$fieldname.'%')); $tablename = ''; if($adb->num_rows($res) > 0) { $tablename = $adb->query_result($res,0,'tablename'); } $log->debug("Exiting getTableNameForField method ..."); return $tablename; } /** Function to get parent record owner * @param $tabid -- tabid :: Type integer * @param $parModId -- parent module id :: Type integer * @param $record_id -- record id :: Type integer * @returns $parentRecOwner -- parentRecOwner:: Type integer */ function getParentRecordOwner($tabid,$parModId,$record_id) { global $log; $log->debug("Entering getParentRecordOwner(".$tabid.",".$parModId.",".$record_id.") method ..."); $parentRecOwner=Array(); $parentTabName=getTabname($parModId); $relTabName=getTabname($tabid); $fn_name="get".$relTabName."Related".$parentTabName; $ent_id=$fn_name($record_id); if($ent_id != '') { $parentRecOwner=getRecordOwnerId($ent_id); } $log->debug("Exiting getParentRecordOwner method ..."); return $parentRecOwner; } /** Function to get potential related accounts * @param $record_id -- record id :: Type integer * @returns $accountid -- accountid:: Type integer */ function getPotentialsRelatedAccounts($record_id) { global $log; $log->debug("Entering getPotentialsRelatedAccounts(".$record_id.") method ..."); global $adb; $query="select related_to from vtiger_potential where potentialid=?"; $result=$adb->pquery($query, array($record_id)); $accountid=$adb->query_result($result,0,'related_to'); $log->debug("Exiting getPotentialsRelatedAccounts method ..."); return $accountid; } /** Function to get email related accounts * @param $record_id -- record id :: Type integer * @returns $accountid -- accountid:: Type integer */ function getEmailsRelatedAccounts($record_id) { global $log; $log->debug("Entering getEmailsRelatedAccounts(".$record_id.") method ..."); global $adb; $query = "select vtiger_seactivityrel.crmid from vtiger_seactivityrel inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_seactivityrel.crmid where vtiger_crmentity.setype='Accounts' and activityid=?"; $result = $adb->pquery($query, array($record_id)); $accountid=$adb->query_result($result,0,'crmid'); $log->debug("Exiting getEmailsRelatedAccounts method ..."); return $accountid; } /** Function to get email related Leads * @param $record_id -- record id :: Type integer * @returns $leadid -- leadid:: Type integer */ function getEmailsRelatedLeads($record_id) { global $log; $log->debug("Entering getEmailsRelatedLeads(".$record_id.") method ..."); global $adb; $query = "select vtiger_seactivityrel.crmid from vtiger_seactivityrel inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_seactivityrel.crmid where vtiger_crmentity.setype='Leads' and activityid=?"; $result = $adb->pquery($query, array($record_id)); $leadid=$adb->query_result($result,0,'crmid'); $log->debug("Exiting getEmailsRelatedLeads method ..."); return $leadid; } /** Function to get HelpDesk related Accounts * @param $record_id -- record id :: Type integer * @returns $accountid -- accountid:: Type integer */ function getHelpDeskRelatedAccounts($record_id) { global $log; $log->debug("Entering getHelpDeskRelatedAccounts(".$record_id.") method ..."); global $adb; $query="select parent_id from vtiger_troubletickets inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_troubletickets.parent_id where ticketid=? and vtiger_crmentity.setype='Accounts'"; $result=$adb->pquery($query, array($record_id)); $accountid=$adb->query_result($result,0,'parent_id'); $log->debug("Exiting getHelpDeskRelatedAccounts method ..."); return $accountid; } /** Function to get Quotes related Accounts * @param $record_id -- record id :: Type integer * @returns $accountid -- accountid:: Type integer */ function getQuotesRelatedAccounts($record_id) { global $log; $log->debug("Entering getQuotesRelatedAccounts(".$record_id.") method ..."); global $adb; $query="select accountid from vtiger_quotes where quoteid=?"; $result=$adb->pquery($query, array($record_id)); $accountid=$adb->query_result($result,0,'accountid'); $log->debug("Exiting getQuotesRelatedAccounts method ..."); return $accountid; } /** Function to get Quotes related Potentials * @param $record_id -- record id :: Type integer * @returns $potid -- potid:: Type integer */ function getQuotesRelatedPotentials($record_id) { global $log; $log->debug("Entering getQuotesRelatedPotentials(".$record_id.") method ..."); global $adb; $query="select potentialid from vtiger_quotes where quoteid=?"; $result=$adb->pquery($query, array($record_id)); $potid=$adb->query_result($result,0,'potentialid'); $log->debug("Exiting getQuotesRelatedPotentials method ..."); return $potid; } /** Function to get Quotes related Potentials * @param $record_id -- record id :: Type integer * @returns $accountid -- accountid:: Type integer */ function getSalesOrderRelatedAccounts($record_id) { global $log; $log->debug("Entering getSalesOrderRelatedAccounts(".$record_id.") method ..."); global $adb; $query="select accountid from vtiger_salesorder where salesorderid=?"; $result=$adb->pquery($query, array($record_id)); $accountid=$adb->query_result($result,0,'accountid'); $log->debug("Exiting getSalesOrderRelatedAccounts method ..."); return $accountid; } /** Function to get SalesOrder related Potentials * @param $record_id -- record id :: Type integer * @returns $potid -- potid:: Type integer */ function getSalesOrderRelatedPotentials($record_id) { global $log; $log->debug("Entering getSalesOrderRelatedPotentials(".$record_id.") method ..."); global $adb; $query="select potentialid from vtiger_salesorder where salesorderid=?"; $result=$adb->pquery($query, array($record_id)); $potid=$adb->query_result($result,0,'potentialid'); $log->debug("Exiting getSalesOrderRelatedPotentials method ..."); return $potid; } /** Function to get SalesOrder related Quotes * @param $record_id -- record id :: Type integer * @returns $qtid -- qtid:: Type integer */ function getSalesOrderRelatedQuotes($record_id) { global $log; $log->debug("Entering getSalesOrderRelatedQuotes(".$record_id.") method ..."); global $adb; $query="select quoteid from vtiger_salesorder where salesorderid=?"; $result=$adb->pquery($query, array($record_id)); $qtid=$adb->query_result($result,0,'quoteid'); $log->debug("Exiting getSalesOrderRelatedQuotes method ..."); return $qtid; } /** Function to get Invoice related Accounts * @param $record_id -- record id :: Type integer * @returns $accountid -- accountid:: Type integer */ function getInvoiceRelatedAccounts($record_id) { global $log; $log->debug("Entering getInvoiceRelatedAccounts(".$record_id.") method ..."); global $adb; $query="select accountid from vtiger_invoice where invoiceid=?"; $result=$adb->pquery($query, array($record_id)); $accountid=$adb->query_result($result,0,'accountid'); $log->debug("Exiting getInvoiceRelatedAccounts method ..."); return $accountid; } /** Function to get Invoice related SalesOrder * @param $record_id -- record id :: Type integer * @returns $soid -- soid:: Type integer */ function getInvoiceRelatedSalesOrder($record_id) { global $log; $log->debug("Entering getInvoiceRelatedSalesOrder(".$record_id.") method ..."); global $adb; $query="select salesorderid from vtiger_invoice where invoiceid=?"; $result=$adb->pquery($query, array($record_id)); $soid=$adb->query_result($result,0,'salesorderid'); $log->debug("Exiting getInvoiceRelatedSalesOrder method ..."); return $soid; } /** Function to get Days and Dates in between the dates specified * Portions created by vtiger are Copyright (C) vtiger. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function get_days_n_dates($st,$en) { global $log; $log->debug("Entering get_days_n_dates(".$st.",".$en.") method ..."); $stdate_arr=explode("-",$st); $endate_arr=explode("-",$en); $dateDiff = mktime(0,0,0,$endate_arr[1],$endate_arr[2],$endate_arr[0]) - mktime(0,0,0,$stdate_arr[1],$stdate_arr[2],$stdate_arr[0]);//to get dates difference $days = floor($dateDiff/60/60/24)+1; //to calculate no of. days for($i=0;$i<$days;$i++) { $day_date[] = date("Y-m-d",mktime(0,0,0,date("$stdate_arr[1]"),(date("$stdate_arr[2]")+($i)),date("$stdate_arr[0]"))); } if(!isset($day_date)) $day_date=0; $nodays_dates=array($days,$day_date); $log->debug("Exiting get_days_n_dates method ..."); return $nodays_dates; //passing no of days , days in between the days }//function end /** Function to get the start and End Dates based upon the period which we give * Portions created by vtiger are Copyright (C) vtiger. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function start_end_dates($period) { global $log; $log->debug("Entering start_end_dates(".$period.") method ..."); $st_thisweek= date("Y-m-d",mktime(0,0,0,date("n"),(date("j")-date("w")),date("Y"))); if($period=="tweek") { $st_date= date("Y-m-d",mktime(0,0,0,date("n"),(date("j")-date("w")),date("Y"))); $end_date = date("Y-m-d",mktime(0,0,0,date("n"),(date("j")-1),date("Y"))); $st_week= date("w",mktime(0,0,0,date("n"),date("j"),date("Y"))); if($st_week==0) { $start_week=explode("-",$st_thisweek); $st_date = date("Y-m-d",mktime(0,0,0,date("$start_week[1]"),(date("$start_week[2]")-7),date("$start_week[0]"))); $end_date = date("Y-m-d",mktime(0,0,0,date("$start_week[1]"),(date("$start_week[2]")-1),date("$start_week[0]"))); } $period_type="week"; $width="360"; } else if($period=="lweek") { $start_week=explode("-",$st_thisweek); $st_date = date("Y-m-d",mktime(0,0,0,date("$start_week[1]"),(date("$start_week[2]")-7),date("$start_week[0]"))); $end_date = date("Y-m-d",mktime(0,0,0,date("$start_week[1]"),(date("$start_week[2]")-1),date("$start_week[0]"))); $st_week= date("w",mktime(0,0,0,date("n"),date("j"),date("Y"))); if($st_week==0) { $start_week=explode("-",$st_thisweek); $st_date = date("Y-m-d",mktime(0,0,0,date("$start_week[1]"),(date("$start_week[2]")-14),date("$start_week[0]"))); $end_date = date("Y-m-d",mktime(0,0,0,date("$start_week[1]"),(date("$start_week[2]")-8),date("$start_week[0]"))); } $period_type="week"; $width="360"; } else if($period=="tmon") { $period_type="month"; $width="840"; $st_date = date("Y-m-d",mktime(0, 0, 0, date("m"), "01", date("Y"))); $end_date = date("Y-m-t"); } else if($period=="lmon") { $st_date=date("Y-m-d",mktime(0,0,0,date("n")-1,date("1"),date("Y"))); $end_date = date("Y-m-d",mktime(0, 0, 1, date("n"), 0,date("Y"))); $period_type="month"; $start_month=date("d",mktime(0,0,0,date("n"),date("j"),date("Y"))); if($start_month==1) { $st_date=date("Y-m-d",mktime(0,0,0,date("n")-2,date("1"),date("Y"))); $end_date = date("Y-m-d",mktime(0, 0, 1, date("n")-1, 0,date("Y"))); } $width="840"; } else { $curr_date=date("Y-m-d",mktime(0,0,0,date("m"),date("d"),date("Y"))); $today_date=explode("-",$curr_date); $lastday_date=date("Y-m-d",mktime(0,0,0,date("$today_date[1]"),date("$today_date[2]")-1,date("$today_date[0]"))); $st_date=$lastday_date; $end_date=$lastday_date; $period_type="yday"; $width="250"; } if($period_type=="yday") $height="160"; else $height="250"; $datevalues=array($st_date,$end_date,$period_type,$width,$height); $log->debug("Exiting start_end_dates method ..."); return $datevalues; }//function ends /** Function to get the Graph and vtiger_table format for a particular date based upon the period * Portions created by vtiger are Copyright (C) vtiger. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function Graph_n_table_format($period_type,$date_value) { global $log; $log->debug("Entering Graph_n_table_format(".$period_type.",".$date_value.") method ..."); $date_val=explode("-",$date_value); if($period_type=="month") //to get the vtiger_table format dates { $table_format=date("j",mktime(0,0,0,date($date_val[1]),(date($date_val[2])),date($date_val[0]))); $graph_format=date("D",mktime(0,0,0,date($date_val[1]),(date($date_val[2])),date($date_val[0]))); } else if($period_type=="week") { $table_format=date("d/m",mktime(0,0,0,date($date_val[1]),(date($date_val[2])),date($date_val[0]))); $graph_format=date("D",mktime(0,0,0,date($date_val[1]),(date($date_val[2])),date($date_val[0]))); } else if($period_type=="yday") { $table_format=date("j",mktime(0,0,0,date($date_val[1]),(date($date_val[2])),date($date_val[0]))); $graph_format=$table_format; } $values=array($graph_format,$table_format); $log->debug("Exiting Graph_n_table_format method ..."); return $values; } /** Function to get image count for a given product * @param $id -- product id :: Type integer * @returns count -- count:: Type integer */ function getImageCount($id) { global $log; $log->debug("Entering getImageCount(".$id.") method ..."); global $adb; $image_lists=array(); $query="select imagename from vtiger_products where productid=?"; $result=$adb->pquery($query, array($id)); $imagename=$adb->query_result($result,0,'imagename'); $image_lists=explode("###",$imagename); $log->debug("Exiting getImageCount method ..."); return count($image_lists); } /** Function to get user image for a given user * @param $id -- user id :: Type integer * @returns $image_name -- image name:: Type string */ function getUserImageName($id) { global $log; $log->debug("Entering getUserImageName(".$id.") method ..."); global $adb; $query = "select imagename from vtiger_users where id=?"; $result = $adb->pquery($query, array($id)); $image_name = $adb->query_result($result,0,"imagename"); $log->debug("Inside getUserImageName. The image_name is ".$image_name); $log->debug("Exiting getUserImageName method ..."); return $image_name; } /** Function to get all user images for displaying it in listview * @returns $image_name -- image name:: Type array */ function getUserImageNames() { global $log; $log->debug("Entering getUserImageNames() method ..."); global $adb; $query = "select imagename from vtiger_users where deleted=0"; $result = $adb->pquery($query, array()); $image_name=array(); for($i=0;$i<$adb->num_rows($result);$i++) { if($adb->query_result($result,$i,"imagename")!='') $image_name[] = $adb->query_result($result,$i,"imagename"); } $log->debug("Inside getUserImageNames."); if(count($image_name) > 0) { $log->debug("Exiting getUserImageNames method ..."); return $image_name; } } /** Function to remove the script tag in the contents * Portions created by vtiger are Copyright (C) vtiger. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function strip_selected_tags($text, $tags = array()) { $args = func_get_args(); $text = array_shift($args); $tags = func_num_args() > 2 ? array_diff($args,array($text)) : (array)$tags; foreach ($tags as $tag){ if(preg_match_all('/<'.$tag.'[^>]*>(.*)<\/'.$tag.'>/iU', $text, $found)){ $text = str_replace($found[0],$found[1],$text); } } return $text; } /** Function to check whether user has opted for internal mailer * @returns $int_mailer -- int mailer:: Type boolean */ function useInternalMailer() { global $current_user,$adb; return $adb->query_result($adb->pquery("select int_mailer from vtiger_mail_accounts where user_id=?", array($current_user->id)),0,"int_mailer"); } /** * the function is like unescape in javascript * added by dingjianting on 2006-10-1 for picklist editor */ function utf8RawUrlDecode ($source) { global $default_charset; $decodedStr = ""; $pos = 0; $len = strlen ($source); while ($pos < $len) { $charAt = substr ($source, $pos, 1); if ($charAt == '%') { $pos++; $charAt = substr ($source, $pos, 1); if ($charAt == 'u') { // we got a unicode character $pos++; $unicodeHexVal = substr ($source, $pos, 4); $unicode = hexdec ($unicodeHexVal); $entity = "&#". $unicode . ';'; $decodedStr .= utf8_encode ($entity); $pos += 4; } else { // we have an escaped ascii character $hexVal = substr ($source, $pos, 2); $decodedStr .= chr (hexdec ($hexVal)); $pos += 2; } } else { $decodedStr .= $charAt; $pos++; } } if(strtolower($default_charset) == 'utf-8') return html_to_utf8($decodedStr); else return $decodedStr; //return html_to_utf8($decodedStr); } /** *simple HTML to UTF-8 conversion: */ function html_to_utf8 ($data) { return preg_replace("/\\&\\#([0-9]{3,10})\\;/e", '_html_to_utf8("\\1")', $data); } function _html_to_utf8 ($data) { if ($data > 127) { $i = 5; while (($i--) > 0) { if ($data != ($a = $data % ($p = pow(64, $i)))) { $ret = chr(base_convert(str_pad(str_repeat(1, $i + 1), 8, "0"), 2, 10) + (($data - $a) / $p)); for ($i; $i > 0; $i--) $ret .= chr(128 + ((($data % pow(64, $i)) - ($data % ($p = pow(64, $i - 1)))) / $p)); break; } } } else $ret = "&#$data;"; return $ret; } // Return Question mark function _questionify($v){ return "?"; } /** * Function to generate question marks for a given list of items */ function generateQuestionMarks($items_list) { // array_map will call the function specified in the first parameter for every element of the list in second parameter if (is_array($items_list)) { return implode(",", array_map("_questionify", $items_list)); } else { return implode(",", array_map("_questionify", explode(",", $items_list))); } } /** * Function to find the UI type of a field based on the uitype id */ function is_uitype($uitype, $reqtype) { $ui_type_arr = array( '_date_' => array(5, 6, 23, 70), '_picklist_' => array(15, 16, 52, 53, 54, 55, 59, 62, 63, 66, 68, 76, 77, 78, 80, 98, 101, 115, 357), '_users_list_' => array(52), ); if ($ui_type_arr[$reqtype] != null) { if (in_array($uitype, $ui_type_arr[$reqtype])) { return true; } } return false; } /** * Function to escape quotes * @param $value - String in which single quotes have to be replaced. * @return Input string with single quotes escaped. */ function escape_single_quotes($value) { if (isset($value)) $value = str_replace("'", "\'", $value); return $value; } /** * Function to format the input value for SQL like clause. * @param $str - Input string value to be formatted. * @param $flag - By default set to 0 (Will look for cases %string%). * If set to 1 - Will look for cases %string. * If set to 2 - Will look for cases string%. * @return String formatted as per the SQL like clause requirement */ function formatForSqlLike($str, $flag=0,$is_field=false) { global $adb; if (isset($str)) { if($is_field==false){ $str = str_replace('%', '\%', $str); $str = str_replace('_', '\_', $str); if ($flag == 0) { $str = '%'. $str .'%'; } elseif ($flag == 1) { $str = '%'. $str; } elseif ($flag == 2) { $str = $str .'%'; } } else { if ($flag == 0) { $str = 'concat("%",'. $str .',"%")'; } elseif ($flag == 1) { $str = 'concat("%",'. $str .')'; } elseif ($flag == 2) { $str = 'concat('. $str .',"%")'; } } } return $adb->sql_escape_string($str); } /** * Get Current Module (global variable or from request) */ function getCurrentModule($perform_set=false) { global $currentModule,$root_directory; if(isset($currentModule)) return $currentModule; // Do some security check and return the module information if(isset($_REQUEST['module'])) { $is_module = false; $module = $_REQUEST['module']; $dir = @scandir($root_directory."modules"); $temp_arr = Array("CVS","Attic"); $res_arr = @array_intersect($dir,$temp_arr); if(count($res_arr) == 0 && !preg_match("/[\/.]/",$module)) { if(@in_array($module,$dir)) $is_module = true; } if($is_module) { if($perform_set) $currentModule = $module; return $module; } } return null; } /** * Set the language strings. */ function setCurrentLanguage($active_module=null) { global $current_language, $default_language, $app_strings, $app_list_strings, $mod_strings, $currentModule; if($active_module==null) { if (!isset($currentModule)) $active_module = getCurrentModule(); else $active_module = $currentModule; } if(isset($_SESSION['authenticated_user_language']) && $_SESSION['authenticated_user_language'] != '') { $current_language = $_SESSION['authenticated_user_language']; } else { $current_language = $default_language; } //set module and application string arrays based upon selected language if (!isset($app_strings)) $app_strings = return_application_language($current_language); if (!isset($app_list_strings)) $app_list_strings = return_app_list_strings_language($current_language); if (!isset($mod_strings) && isset($active_module)) $mod_strings = return_module_language($current_language, $active_module); } /** Function used to get all the picklists and their values for a module @param string $module - Module name to which the list of picklists and their values needed @return array $fieldlists - Array of picklists and their values **/ function getAccessPickListValues($module) { global $adb, $log; global $current_user; $log->debug("Entering into function getAccessPickListValues($module)"); $id = getTabid($module); $query = "select fieldname,columnname,fieldid,fieldlabel,tabid,uitype from vtiger_field where tabid = ? and uitype in ('15','33','55') and vtiger_field.presence in (0,2)"; $result = $adb->pquery($query, array($id)); $roleid = $current_user->roleid; $subrole = getRoleSubordinates($roleid); if(count($subrole)> 0) { $roleids = $subrole; array_push($roleids, $roleid); } else { $roleids = $roleid; } $temp_status = Array(); for($i=0;$i < $adb->num_rows($result);$i++) { $fieldname = $adb->query_result($result,$i,"fieldname"); $fieldlabel = $adb->query_result($result,$i,"fieldlabel"); $columnname = $adb->query_result($result,$i,"columnname"); $tabid = $adb->query_result($result,$i,"tabid"); $uitype = $adb->query_result($result,$i,"uitype"); $keyvalue = $columnname; $fieldvalues = Array(); if (count($roleids) > 1) { $mulsel="select distinct $fieldname from vtiger_$fieldname inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_$fieldname.picklist_valueid where roleid in (\"". implode($roleids,"\",\"") ."\") and picklistid in (select picklistid from vtiger_$fieldname) order by sortid asc"; } else { $mulsel="select distinct $fieldname from vtiger_$fieldname inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_$fieldname.picklist_valueid where roleid ='".$roleid."' and picklistid in (select picklistid from vtiger_$fieldname) order by sortid asc"; } if($fieldname != 'firstname') $mulselresult = $adb->query($mulsel); for($j=0;$j < $adb->num_rows($mulselresult);$j++) { $fieldvalues[] = $adb->query_result($mulselresult,$j,$fieldname); } $field_count = count($fieldvalues); if($uitype == 15 && $field_count > 0 && ($fieldname == 'taskstatus' || $fieldname == 'eventstatus')) { $temp_count =count($temp_status[$keyvalue]); if($temp_count > 0) { for($t=0;$t < $field_count;$t++) { $temp_status[$keyvalue][($temp_count+$t)] = $fieldvalues[$t]; } $fieldvalues = $temp_status[$keyvalue]; } else $temp_status[$keyvalue] = $fieldvalues; } if($uitype == 33) $fieldlists[1][$keyvalue] = $fieldvalues; else if($uitype == 55 && $fieldname == 'salutationtype') $fieldlists[$keyvalue] = $fieldvalues; else if($uitype == 15) $fieldlists[$keyvalue] = $fieldvalues; } $log->debug("Exit from function getAccessPickListValues($module)"); return $fieldlists; } function get_config_status() { global $default_charset; if(strtolower($default_charset) == 'utf-8') $config_status=1; else $config_status=0; return $config_status; } function getMigrationCharsetFlag() { global $adb; if(!$adb->isPostgres()) $db_status=check_db_utf8_support($adb); $config_status=get_config_status(); if ($db_status == $config_status) { if ($db_status == 1) { // Both are UTF-8 $db_migration_status = MIG_CHARSET_PHP_UTF8_DB_UTF8; } else { // Both are Non UTF-8 $db_migration_status = MIG_CHARSET_PHP_NONUTF8_DB_NONUTF8; } } else { if ($db_status == 1) { // Database charset is UTF-8 and CRM charset is Non UTF-8 $db_migration_status = MIG_CHARSET_PHP_NONUTF8_DB_UTF8; } else { // Database charset is Non UTF-8 and CRM charset is UTF-8 $db_migration_status = MIG_CHARSET_PHP_UTF8_DB_NONUTF8; } } return $db_migration_status; } /** Function to convert a given time string to Minutes */ function ConvertToMinutes($time_string) { $interval = split(' ', $time_string); $interval_minutes = intval($interval[0]); $interval_string = strtolower($interval[1]); if($interval_string == 'hour' || $interval_string == 'hours') { $interval_minutes = $interval_minutes * 60; } elseif($interval_string == 'day' || $interval_string == 'days') { $interval_minutes = $interval_minutes * 1440; } return $interval_minutes; } //added to find duplicates /** To get the converted record values which have to be display in duplicates merging tpl*/ function getRecordValues($id_array,$module) { global $adb,$current_user; global $app_strings; $tabid=getTabid($module); $query="select fieldname,fieldlabel,uitype from vtiger_field where tabid=? and fieldname not in ('createdtime','modifiedtime') and vtiger_field.presence in (0,2) and uitype not in('4')"; $result=$adb->pquery($query, array($tabid)); $no_rows=$adb->num_rows($result); $focus = new $module(); if(isset($id_array) && $id_array !='') { foreach($id_array as $value_pair['disp_value']) { $focus->id=$value_pair['disp_value']; $focus->retrieve_entity_info($value_pair['disp_value'],$module); $field_values[]=$focus->column_fields; } } $labl_array=array(); $value_pair = array(); $c = 0; for($i=0;$i<$no_rows;$i++) { $fld_name=$adb->query_result($result,$i,"fieldname"); $fld_label=$adb->query_result($result,$i,"fieldlabel"); $ui_type=$adb->query_result($result,$i,"uitype"); if(getFieldVisibilityPermission($module,$current_user->id,$fld_name, 'readwrite') == '0') { $fld_array []= $fld_name; $record_values[$c][$fld_label] = Array(); $ui_value[]=$ui_type; for($j=0;$j < count($field_values);$j++) { if($ui_type ==56) { if($field_values[$j][$fld_name] == 0) $value_pair['disp_value']=$app_strings['no']; else $value_pair['disp_value']=$app_strings['yes']; } elseif($ui_type == 51 || $ui_type == 50) { $entity_id=$field_values[$j][$fld_name]; if($module !='Products') $entity_name=getAccountName($entity_id); else $entity_name=getProductName($entity_id); $value_pair['disp_value']=$entity_name; } elseif($ui_type == 53) { $owner_id=$field_values[$j][$fld_name]; $ownername=getOwnerName($owner_id); $value_pair['disp_value']=$ownername; } elseif($ui_type ==57) { $contact_id= $field_values[$j][$fld_name]; if($contact_id != '') { $displayValueArray = getEntityName('Contacts', $contact_id); if (!empty($displayValueArray)) { foreach ($displayValueArray as $key => $field_value) { $contactname = $field_value; } } } $value_pair['disp_value']=$contactname; } elseif($ui_type == 75 || $ui_type ==81) { $vendor_id=$field_values[$j][$fld_name]; if($vendor_id != '') { $vendor_name=getVendorName($vendor_id); } $value_pair['disp_value']=$vendor_name; } elseif($ui_type == 52) { $user_id = $field_values[$j][$fld_name]; $user_name=getUserFullName($user_id); $value_pair['disp_value']=$user_name; } elseif($ui_type ==68) { $parent_id = $field_values[$j][$fld_name]; $value_pair['disp_value'] = getAccountName($parent_id); if($value_pair['disp_value'] == '' || $value_pair['disp_value'] == NULL) { $displayValueArray = getEntityName('Contacts', $parent_id); if (!empty($displayValueArray)) { foreach ($displayValueArray as $key => $field_value) { $contact_name = $field_value; } } else { $contact_name=''; } $value_pair['disp_value'] = $contact_name; } } elseif($ui_type ==59) { $product_name=getProductName($field_values[$j][$fld_name]); if($product_name != '') $value_pair['disp_value']=$product_name; else $value_pair['disp_value']=''; } elseif($ui_type==58) { $campaign_name=getCampaignName($field_values[$j][$fld_name]); if($campaign_name != '') $value_pair['disp_value']=$campaign_name; else $value_pair['disp_value']=''; } elseif($ui_type == 10) { $value_pair['disp_value'] = getRecordInfoFromID($field_values[$j][$fld_name]); }elseif($ui_type == 5 || $ui_type == 6 || $ui_type == 23){ if ($field_values[$j][$fld_name] != '' && $field_values[$j][$fld_name] != '0000-00-00') { $date = new DateTimeField($field_values[$j][$fld_name]); $value_pair['disp_value'] = $date->getDisplayDate(); if(strpos($field_values[$j][$fld_name], ' ') > -1) { $value_pair['disp_value'] .= (' ' . $date->getDisplayTime()); } } elseif ($field_values[$j][$fld_name] == '0000-00-00') { $value_pair['disp_value'] = ''; } else { $value_pair['disp_value'] = $field_values[$j][$fld_name]; } }elseif($ui_type == '71' || $ui_type == '72') { $currencyField = new CurrencyField($field_values[$j][$fld_name]); if($ui_type == '72') { $value_pair['disp_value'] = $currencyField->getDisplayValue(null, true); } else { $value_pair['disp_value'] = $currencyField->getDisplayValue(); } } else { $value_pair['disp_value']=$field_values[$j][$fld_name]; } $value_pair['org_value'] = $field_values[$j][$fld_name]; array_push($record_values[$c][$fld_label],$value_pair); } $c++; } } $parent_array[0]=$record_values; $parent_array[1]=$fld_array; $parent_array[2]=$fld_array; return $parent_array; } /** Function to check whether the relationship entries are exist or not on elationship tables */ function is_related($relation_table,$crm_field,$related_module_id,$crmid) { global $adb; $check_res = $adb->query("select * from $relation_table where $crm_field=$related_module_id and crmid=$crmid"); $count = $adb->num_rows($check_res); if($count > 0) return true; else return false; } /** Function to get a to find duplicates in a particular module*/ function getDuplicateQuery($module,$field_values,$ui_type_arr) { global $current_user; $tbl_col_fld = explode(",", $field_values); $i=0; foreach($tbl_col_fld as $val) { list($tbl[$i], $cols[$i], $fields[$i]) = explode(".", $val); $tbl_cols[$i] = $tbl[$i]. "." . $cols[$i]; $i++; } $table_cols = implode(",",$tbl_cols); $sec_parameter = getSecParameterforMerge($module); if($module == 'Contacts') { $nquery = "SELECT vtiger_contactdetails.contactid AS recordid, vtiger_users_last_import.deleted,".$table_cols." FROM vtiger_contactdetails INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_contactdetails.contactid INNER JOIN vtiger_contactaddress ON vtiger_contactdetails.contactid = vtiger_contactaddress.contactaddressid INNER JOIN vtiger_contactsubdetails ON vtiger_contactaddress.contactaddressid = vtiger_contactsubdetails.contactsubscriptionid LEFT JOIN vtiger_contactscf ON vtiger_contactscf.contactid = vtiger_contactdetails.contactid LEFT JOIN vtiger_users_last_import ON vtiger_users_last_import.bean_id=vtiger_contactdetails.contactid LEFT JOIN vtiger_account ON vtiger_account.accountid=vtiger_contactdetails.accountid LEFT JOIN vtiger_customerdetails ON vtiger_customerdetails.customerid=vtiger_contactdetails.contactid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid INNER JOIN (SELECT $table_cols FROM vtiger_contactdetails INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_contactdetails.contactid INNER JOIN vtiger_contactaddress ON vtiger_contactdetails.contactid = vtiger_contactaddress.contactaddressid INNER JOIN vtiger_contactsubdetails ON vtiger_contactaddress.contactaddressid = vtiger_contactsubdetails.contactsubscriptionid LEFT JOIN vtiger_contactscf ON vtiger_contactscf.contactid = vtiger_contactdetails.contactid LEFT JOIN vtiger_account ON vtiger_account.accountid=vtiger_contactdetails.accountid LEFT JOIN vtiger_customerdetails ON vtiger_customerdetails.customerid=vtiger_contactdetails.contactid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid WHERE vtiger_crmentity.deleted=0 $sec_parameter GROUP BY ".$table_cols." HAVING COUNT(*)>1) as temp ON ".get_on_clause($field_values,$ui_type_arr,$module) ." WHERE vtiger_crmentity.deleted=0 $sec_parameter ORDER BY $table_cols,vtiger_contactdetails.contactid ASC"; } else if($module == 'Accounts') { $nquery="SELECT vtiger_account.accountid AS recordid, vtiger_users_last_import.deleted,".$table_cols." FROM vtiger_account INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_account.accountid INNER JOIN vtiger_accountbillads ON vtiger_account.accountid = vtiger_accountbillads.accountaddressid INNER JOIN vtiger_accountshipads ON vtiger_account.accountid = vtiger_accountshipads.accountaddressid LEFT JOIN vtiger_accountscf ON vtiger_account.accountid=vtiger_accountscf.accountid LEFT JOIN vtiger_users_last_import ON vtiger_users_last_import.bean_id=vtiger_account.accountid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid INNER JOIN (SELECT $table_cols FROM vtiger_account INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_account.accountid INNER JOIN vtiger_accountbillads ON vtiger_account.accountid = vtiger_accountbillads.accountaddressid INNER JOIN vtiger_accountshipads ON vtiger_account.accountid = vtiger_accountshipads.accountaddressid LEFT JOIN vtiger_accountscf ON vtiger_account.accountid=vtiger_accountscf.accountid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid WHERE vtiger_crmentity.deleted=0 $sec_parameter GROUP BY ".$table_cols." HAVING COUNT(*)>1) as temp ON ".get_on_clause($field_values,$ui_type_arr,$module) ." WHERE vtiger_crmentity.deleted=0 $sec_parameter ORDER BY $table_cols,vtiger_account.accountid ASC"; } else if($module == 'Leads') { $nquery = "SELECT vtiger_leaddetails.leadid AS recordid, vtiger_users_last_import.deleted,$table_cols FROM vtiger_leaddetails INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_leaddetails.leadid INNER JOIN vtiger_leadsubdetails ON vtiger_leadsubdetails.leadsubscriptionid = vtiger_leaddetails.leadid INNER JOIN vtiger_leadaddress ON vtiger_leadaddress.leadaddressid = vtiger_leadsubdetails.leadsubscriptionid LEFT JOIN vtiger_leadscf ON vtiger_leadscf.leadid=vtiger_leaddetails.leadid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid LEFT JOIN vtiger_users_last_import ON vtiger_users_last_import.bean_id=vtiger_leaddetails.leadid INNER JOIN (SELECT $table_cols FROM vtiger_leaddetails INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_leaddetails.leadid INNER JOIN vtiger_leadsubdetails ON vtiger_leadsubdetails.leadsubscriptionid = vtiger_leaddetails.leadid INNER JOIN vtiger_leadaddress ON vtiger_leadaddress.leadaddressid = vtiger_leadsubdetails.leadsubscriptionid LEFT JOIN vtiger_leadscf ON vtiger_leadscf.leadid=vtiger_leaddetails.leadid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid WHERE vtiger_crmentity.deleted=0 AND vtiger_leaddetails.converted = 0 $sec_parameter GROUP BY $table_cols HAVING COUNT(*)>1) as temp ON ".get_on_clause($field_values,$ui_type_arr,$module) ." WHERE vtiger_crmentity.deleted=0 AND vtiger_leaddetails.converted = 0 $sec_parameter ORDER BY $table_cols,vtiger_leaddetails.leadid ASC"; } else if($module == 'Products') { $nquery = "SELECT vtiger_products.productid AS recordid, vtiger_users_last_import.deleted,".$table_cols." FROM vtiger_products INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_products.productid LEFT JOIN vtiger_users_last_import ON vtiger_users_last_import.bean_id=vtiger_products.productid LEFT JOIN vtiger_productcf ON vtiger_productcf.productid = vtiger_products.productid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid INNER JOIN (SELECT $table_cols FROM vtiger_products INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_products.productid LEFT JOIN vtiger_productcf ON vtiger_productcf.productid = vtiger_products.productid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid WHERE vtiger_crmentity.deleted=0 $sec_parameter GROUP BY ".$table_cols." HAVING COUNT(*)>1) as temp ON ".get_on_clause($field_values,$ui_type_arr,$module) ." WHERE vtiger_crmentity.deleted=0 $sec_parameter ORDER BY $table_cols,vtiger_products.productid ASC"; } else if($module == "HelpDesk") { $nquery = "SELECT vtiger_troubletickets.ticketid AS recordid, vtiger_users_last_import.deleted,".$table_cols." FROM vtiger_troubletickets INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_troubletickets.ticketid LEFT JOIN vtiger_ticketcf ON vtiger_ticketcf.ticketid = vtiger_troubletickets.ticketid LEFT JOIN vtiger_users_last_import ON vtiger_users_last_import.bean_id=vtiger_troubletickets.ticketid LEFT JOIN vtiger_attachments ON vtiger_attachments.attachmentsid=vtiger_crmentity.crmid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid = vtiger_troubletickets.parent_id LEFT JOIN vtiger_ticketcomments ON vtiger_ticketcomments.ticketid = vtiger_crmentity.crmid INNER JOIN (SELECT $table_cols FROM vtiger_troubletickets INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_troubletickets.ticketid LEFT JOIN vtiger_ticketcf ON vtiger_ticketcf.ticketid = vtiger_troubletickets.ticketid LEFT JOIN vtiger_attachments ON vtiger_attachments.attachmentsid=vtiger_crmentity.crmid LEFT JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid = vtiger_troubletickets.parent_id LEFT JOIN vtiger_ticketcomments ON vtiger_ticketcomments.ticketid = vtiger_crmentity.crmid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_contactdetails contd ON contd.contactid = vtiger_troubletickets.parent_id WHERE vtiger_crmentity.deleted=0 $sec_parameter GROUP BY ".$table_cols." HAVING COUNT(*)>1) as temp ON ".get_on_clause($field_values,$ui_type_arr,$module) ." WHERE vtiger_crmentity.deleted=0 $sec_parameter ORDER BY $table_cols,vtiger_troubletickets.ticketid ASC"; } else if($module == "Potentials") { $nquery = "SELECT vtiger_potential.potentialid AS recordid, vtiger_users_last_import.deleted,".$table_cols." FROM vtiger_potential INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_potential.potentialid LEFT JOIN vtiger_potentialscf ON vtiger_potentialscf.potentialid = vtiger_potential.potentialid LEFT JOIN vtiger_users_last_import ON vtiger_users_last_import.bean_id=vtiger_potential.potentialid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid INNER JOIN (SELECT $table_cols FROM vtiger_potential INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_potential.potentialid LEFT JOIN vtiger_potentialscf ON vtiger_potentialscf.potentialid = vtiger_potential.potentialid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid WHERE vtiger_crmentity.deleted=0 $sec_parameter GROUP BY ".$table_cols." HAVING COUNT(*)>1) as temp ON ".get_on_clause($field_values,$ui_type_arr,$module) ." WHERE vtiger_crmentity.deleted=0 $sec_parameter ORDER BY $table_cols,vtiger_potential.potentialid ASC"; } else if($module == "Vendors") { $nquery = "SELECT vtiger_vendor.vendorid AS recordid, vtiger_users_last_import.deleted,".$table_cols." FROM vtiger_vendor INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_vendor.vendorid LEFT JOIN vtiger_vendorcf ON vtiger_vendorcf.vendorid=vtiger_vendor.vendorid LEFT JOIN vtiger_users_last_import ON vtiger_users_last_import.bean_id=vtiger_vendor.vendorid INNER JOIN (SELECT $table_cols FROM vtiger_vendor INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_vendor.vendorid LEFT JOIN vtiger_vendorcf ON vtiger_vendorcf.vendorid=vtiger_vendor.vendorid WHERE vtiger_crmentity.deleted=0 GROUP BY ".$table_cols." HAVING COUNT(*)>1) as temp ON ".get_on_clause($field_values,$ui_type_arr,$module) ." WHERE vtiger_crmentity.deleted=0 ORDER BY $table_cols,vtiger_vendor.vendorid ASC"; } else { $modObj = CRMEntity::getInstance($module); if ($modObj != null && method_exists($modObj, 'getDuplicatesQuery')) { $nquery = $modObj->getDuplicatesQuery($module,$table_cols,$field_values,$ui_type_arr); } } return $nquery; } /** Function to return the duplicate records data as a formatted array */ function getDuplicateRecordsArr($module) { global $adb,$app_strings,$list_max_entries_per_page,$theme; $field_values_array=getFieldValues($module); $field_values=$field_values_array['fieldnames_list']; $fld_arr=$field_values_array['fieldnames_array']; $col_arr=$field_values_array['columnnames_array']; $fld_labl_arr=$field_values_array['fieldlabels_array']; $ui_type=$field_values_array['fieldname_uitype']; $dup_query = getDuplicateQuery($module,$field_values,$ui_type); // added for page navigation $dup_count_query = substr($dup_query, stripos($dup_query,'FROM'),strlen($dup_query)); $dup_count_query = "SELECT count(*) as count ".$dup_count_query; $count_res = $adb->query($dup_count_query); $no_of_rows = $adb->query_result($count_res,0,"count"); if($no_of_rows <= $list_max_entries_per_page) $_SESSION['dup_nav_start'.$module] = 1; else if(isset($_REQUEST["start"]) && $_REQUEST["start"] != "" && $_SESSION['dup_nav_start'.$module] != $_REQUEST["start"]) $_SESSION['dup_nav_start'.$module] = ListViewSession::getRequestStartPage(); $start = ($_SESSION['dup_nav_start'.$module] != "")?$_SESSION['dup_nav_start'.$module]:1; $navigation_array = getNavigationValues($start, $no_of_rows, $list_max_entries_per_page); $start_rec = $navigation_array['start']; $end_rec = $navigation_array['end_val']; $navigationOutput = getTableHeaderNavigation($navigation_array, "",$module,"FindDuplicate",""); if ($start_rec == 0) $limit_start_rec = 0; else $limit_start_rec = $start_rec -1; $dup_query .= " LIMIT $limit_start_rec, $list_max_entries_per_page"; //ends $nresult=$adb->query($dup_query); $no_rows=$adb->num_rows($nresult); require_once('modules/Vtiger/layout_utils.php'); if($no_rows == 0) { if ($_REQUEST['action'] == 'FindDuplicateRecords') { //echo "

".$app_strings['LBL_NO_DUPLICATE']." ".$app_strings['LBL_GO_BACK'].".
"; //die; echo ""; echo "
"; echo "
$app_strings[LBL_NO_DUPLICATE]
$app_strings[LBL_GO_BACK]
"; echo "
"; exit(); } else { echo "

".$app_strings['LBL_NO_DUPLICATE']."
"; die; } } $rec_cnt = 0; $temp = Array(); $sl_arr = Array(); $grp = "group0"; $gcnt = 0; $ii = 0; //ii'th record in group while ( $rec_cnt < $no_rows ) { $result = $adb->fetchByAssoc($nresult); //echo '
';print_r($result);echo '
'; if($rec_cnt != 0) { $sl_arr = array_slice($result,2); array_walk($temp,'lower_array'); array_walk($sl_arr,'lower_array'); $arr_diff = array_diff($temp,$sl_arr); if(count($arr_diff) > 0) { $gcnt++; $temp = $sl_arr; $ii = 0; } $grp = "group".$gcnt; } $fld_values[$grp][$ii]['recordid'] = $result['recordid']; for($k=0;$k $field_value) { $contactname = $field_value; } } } $result[$col_arr[$k]]=$contactname; } if($ui_type[$fld_arr[$k]] == 15 || $ui_type[$fld_arr[$k]] == 16) { $result[$col_arr[$k]]=getTranslatedString($result[$col_arr[$k]],$module); } if($ui_type[$fld_arr[$k]] == 33){ $fieldvalue = explode(' |##| ',$result[$col_arr[$k]]); $result[$col_arr[$k]] = array(); foreach ($fieldvalue as $picklistValue) { $result[$col_arr[$k]][] = getTranslatedString($picklistValue,$module); } $result[$col_arr[$k]] = implode(', ',$result[$col_arr[$k]]); } if($ui_type[$fld_arr[$k]] ==68) { $parent_id= $result[$col_arr[$k]]; if($parent_id != '') { $parentname=getParentName($parent_id); } $result[$col_arr[$k]]=$parentname; } if($ui_type[$fld_arr[$k]] ==53 || $ui_type[$fld_arr[$k]] ==52) { if($result[$col_arr[$k]] != '') { $owner=getOwnerName($result[$col_arr[$k]]); } $result[$col_arr[$k]]=$owner; } if($ui_type[$fld_arr[$k]] ==50 or $ui_type[$fld_arr[$k]] ==51) { if($module!='Products') { $entity_name=getAccountName($result[$col_arr[$k]]); } else { $entity_name=getProductName($result[$col_arr[$k]]); } if($entity_name != '') { $result[$col_arr[$k]]=$entity_name; } else { $result[$col_arr[$k]]=''; } } if($ui_type[$fld_arr[$k]] ==58) { $campaign_name=getCampaignName($result[$col_arr[$k]]); if($campaign_name != '') $result[$col_arr[$k]]=$campaign_name; else $result[$col_arr[$k]]=''; } if($ui_type[$fld_arr[$k]] == 59) { $product_name=getProductName($result[$col_arr[$k]]); if($product_name != '') $result[$col_arr[$k]]=$product_name; else $result[$col_arr[$k]]=''; } /*uitype 10 handling*/ if($ui_type[$fld_arr[$k]] == 10){ $result[$col_arr[$k]] = getRecordInfoFromID($result[$col_arr[$k]]); } if($ui_type[$fld_arr[$k]] == 5 || $ui_type[$fld_arr[$k]] == 6 || $ui_type[$fld_arr[$k]] == 23){ if ($$result[$col_arr[$k]] != '' && $$result[$col_arr[$k]] != '0000-00-00') { $date = new DateTimeField($$result[$col_arr[$k]]); $value = $date->getDisplayDate(); if(strpos($$result[$col_arr[$k]], ' ') > -1) { $value .= (' ' . $date->getDisplayTime()); } } elseif ($$result[$col_arr[$k]] == '0000-00-00') { $value = ''; } else { $value = $$result[$col_arr[$k]]; } $result[$col_arr[$k]] = $value; } if($ui_type[$fld_arr[$k]] == 71) { $result[$col_arr[$k]] = CurrencyField::convertToUserFormat($result[$col_arr[$k]]); } if($ui_type[$fld_arr[$k]] == 72) { $result[$col_arr[$k]] = CurrencyField::convertToUserFormat($result[$col_arr[$k]], null, true); } $fld_values[$grp][$ii][$fld_labl_arr[$k]] = $result[$col_arr[$k]]; } $fld_values[$grp][$ii]['Entity Type'] = $result['deleted']; $ii++; $rec_cnt++; } $gro="group"; for($i=0;$i<$no_rows;$i++) { $ii=0; $dis_group[]=$fld_values[$gro.$i][$ii]; $count_group[$i]=count($fld_values[$gro.$i]); $ii++; $new_group[]=$dis_group[$i]; } $fld_nam=$new_group[0]; $ret_arr[0]=$fld_values; $ret_arr[1]=$fld_nam; $ret_arr[2]=$ui_type; $ret_arr["navigation"]=$navigationOutput; return $ret_arr; } /** Function to get on clause criteria for sub tables like address tables to construct duplicate check query */ function get_special_on_clause($field_list) { $field_array = explode(",",$field_list); $ret_str = ''; $sel_clause = ''; $i=1; $cnt = count($field_array); $spl_chk = ($_REQUEST['modulename'] != '')?$_REQUEST['modulename']:$_REQUEST['module']; foreach($field_array as $fld) { $sub_arr = explode(".",$fld); $tbl_name = $sub_arr[0]; $col_name = $sub_arr[1]; $fld_name = $sub_arr[2]; //need to handle aditional conditions with sub tables for further modules of duplicate check if($tbl_name == 'vtiger_leadsubdetails' || $tbl_name == 'vtiger_contactsubdetails') $tbl_alias = "subd"; else if($tbl_name == 'vtiger_leadaddress' || $tbl_name == 'vtiger_contactaddress') $tbl_alias = "addr"; else if($tbl_name == 'vtiger_account' && $spl_chk == 'Contacts') $tbl_alias = "acc"; else if($tbl_name == 'vtiger_accountbillads') $tbl_alias = "badd"; else if($tbl_name == 'vtiger_accountshipads') $tbl_alias = "sadd"; else if($tbl_name == 'vtiger_crmentity') $tbl_alias = "crm"; else if($tbl_name == 'vtiger_customerdetails') $tbl_alias = "custd"; else if($tbl_name == 'vtiger_contactdetails' && spl_chk == 'HelpDesk') $tbl_alias = "contd"; else if(stripos($tbl_name, 'cf') === (strlen($tbl_name) - strlen('cf'))) $tbl_alias = "tcf"; // Custom Field Table Prefix to use in subqueries else $tbl_alias = "t"; $sel_clause .= $tbl_alias.".".$col_name.","; $ret_str .= " $tbl_name.$col_name = $tbl_alias.$col_name"; if ($cnt != $i) $ret_str .= " and "; $i++; } $ret_arr['on_clause'] = $ret_str; $ret_arr['sel_clause'] = trim($sel_clause,","); return $ret_arr; } /** Function to get on clause criteria for duplicate check queries */ function get_on_clause($field_list,$uitype_arr,$module) { $field_array = explode(",",$field_list); $ret_str = ''; $i=1; foreach($field_array as $fld) { $sub_arr = explode(".",$fld); $tbl_name = $sub_arr[0]; $col_name = $sub_arr[1]; $fld_name = $sub_arr[2]; $ret_str .= " ifnull($tbl_name.$col_name,'null') = ifnull(temp.$col_name,'null')"; if (count($field_array) != $i) $ret_str .= " and "; $i++; } return $ret_str; } /** call back function to change the array values in to lower case */ function lower_array(&$string){ $string = strtolower(trim($string)); } /** Function to get recordids for subquery where condition */ // TODO - Need to check if this method is used anywhere? function get_subquery_recordids($sub_query) { global $adb; //need to update this module whenever duplicate check tool added for new modules $module_id_array = Array("Accounts"=>"accountid","Contacts"=>"contactid","Leads"=>"leadid","Products"=>"productid","HelpDesk"=>"ticketid","Potentials"=>"potentialid","Vendors"=>"vendorid"); $id = ($module_id_array[$_REQUEST['modulename']] != '')?$module_id_array[$_REQUEST['modulename']]:$module_id_array[$_REQUEST['module']]; $sub_res = ''; $sub_result = $adb->query($sub_query); $row_count = $adb->num_rows($sub_result); $sub_res = ''; if($row_count > 0) { while($rows = $adb->fetchByAssoc($sub_result)) { $sub_res .= $rows[$id].","; } $sub_res = trim($sub_res,","); } else $sub_res .= "''"; return $sub_res; } /** Function to get tablename, columnname, fieldname, fieldlabel and uitypes of fields of merge criteria for a particular module*/ function getFieldValues($module) { global $adb,$current_user; //In future if we want to change a id mapping to name or other string then we can add that elements in this array. //$fld_table_arr = Array("vtiger_contactdetails.account_id"=>"vtiger_account.accountname"); //$special_fld_arr = Array("account_id"=>"accountname"); $fld_table_arr = Array(); $special_fld_arr = Array(); $tabid = getTabid($module); $fieldname_query="select fieldname,fieldlabel,uitype,tablename,columnname from vtiger_field where fieldid in (select fieldid from vtiger_user2mergefields WHERE tabid=? AND userid=? AND visible = ?) and vtiger_field.presence in (0,2)"; $fieldname_result = $adb->pquery($fieldname_query, array($tabid, $current_user->id, 1)); $field_num_rows = $adb->num_rows($fieldname_result); $fld_arr = array(); $col_arr = array(); for($j=0;$j< $field_num_rows;$j ++) { $tablename = $adb->query_result($fieldname_result,$j,'tablename'); $column_name = $adb->query_result($fieldname_result,$j,'columnname'); $field_name = $adb->query_result($fieldname_result,$j,'fieldname'); $field_lbl = $adb->query_result($fieldname_result,$j,'fieldlabel'); $ui_type = $adb->query_result($fieldname_result,$j,'uitype'); $table_col = $tablename.".".$column_name; if(getFieldVisibilityPermission($module,$current_user->id,$field_name) == 0) { $fld_name = ($special_fld_arr[$field_name] != '')?$special_fld_arr[$field_name]:$field_name; $fld_arr[] = $fld_name; $col_arr[] = $column_name; if($fld_table_arr[$table_col] != '') $table_col = $fld_table_arr[$table_col]; $field_values_array['fieldnames_list'][] = $table_col . "." . $fld_name; $fld_labl_arr[]=$field_lbl; $uitype[$field_name]=$ui_type; } } $field_values_array['fieldnames_list']=implode(",",$field_values_array['fieldnames_list']); $field_values=implode(",",$fld_arr); $field_values_array['fieldnames']=$field_values; $field_values_array["fieldnames_array"]=$fld_arr; $field_values_array["columnnames_array"]=$col_arr; $field_values_array['fieldlabels_array']=$fld_labl_arr; $field_values_array['fieldname_uitype']=$uitype; return $field_values_array; } /** To get security parameter for a particular module -- By Pavani*/ function getSecParameterforMerge($module) { global $current_user; $tab_id = getTabid($module); $sec_parameter=""; require('user_privileges/user_privileges_'.$current_user->id.'.php'); require('user_privileges/sharing_privileges_'.$current_user->id.'.php'); if($is_admin == false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1 && $defaultOrgSharingPermission[$tab_id] == 3) { if($module == "Vendors") { $sec_parameter = ""; } else { $sec_parameter=getListViewSecurityParameter($module); if($module == "Accounts") { $sec_parameter .= " AND (vtiger_crmentity.smownerid IN (".$current_user->id.") OR vtiger_crmentity.smownerid IN ( SELECT vtiger_user2role.userid FROM vtiger_user2role INNER JOIN vtiger_users ON vtiger_users.id = vtiger_user2role.userid INNER JOIN vtiger_role ON vtiger_role.roleid = vtiger_user2role.roleid WHERE vtiger_role.parentrole LIKE '".$current_user_parent_role_seq."::%') OR vtiger_crmentity.smownerid IN ( SELECT shareduserid FROM vtiger_tmp_read_user_sharing_per WHERE userid=".$current_user->id." AND tabid=".$tab_id.") OR (vtiger_crmentity.smownerid in (0) AND ("; if(sizeof($current_user_groups) > 0) { $sec_parameter .= " vtiger_groups.groupname IN ( SELECT groupname FROM vtiger_groups WHERE groupid IN (". implode(",", getCurrentUserGroupList()) .")) OR "; } $sec_parameter .= " vtiger_groups.groupname IN ( SELECT vtiger_groups.groupname FROM vtiger_tmp_read_group_sharing_per INNER JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_tmp_read_group_sharing_per.sharedgroupid WHERE userid=".$current_user->id." AND tabid=".$tab_id.")))) "; } } } return $sec_parameter; } // Update all the data refering to currency $old_cur to $new_cur function transferCurrency($old_cur, $new_cur) { // Transfer User currency to new currency transferUserCurrency($old_cur, $new_cur); // Transfer Product Currency to new currency transferProductCurrency($old_cur, $new_cur); // Transfer PriceBook Currency to new currency transferPriceBookCurrency($old_cur, $new_cur); } // Function to transfer the users with currency $old_cur to $new_cur as currency function transferUserCurrency($old_cur, $new_cur) { global $log, $adb, $current_user; $log->debug("Entering function transferUserCurrency..."); $sql = "update vtiger_users set currency_id=? where currency_id=?"; $adb->pquery($sql, array($new_cur, $old_cur)); $current_user->retrieve_entity_info($current_user->id,"Users"); $log->debug("Exiting function transferUserCurrency..."); } // Function to transfer the products with currency $old_cur to $new_cur as currency function transferProductCurrency($old_cur, $new_cur) { global $log, $adb; $log->debug("Entering function updateProductCurrency..."); $prod_res = $adb->pquery("select productid from vtiger_products where currency_id = ?", array($old_cur)); $numRows = $adb->num_rows($prod_res); $prod_ids = array(); for($i=0;$i<$numRows;$i++) { $prod_ids[] = $adb->query_result($prod_res,$i,'productid'); } if(count($prod_ids) > 0) { $prod_price_list = getPricesForProducts($new_cur,$prod_ids); for($i=0;$ipquery($query, $params); } } $log->debug("Exiting function updateProductCurrency..."); } // Function to transfer the pricebooks with currency $old_cur to $new_cur as currency // and to update the associated products with list price in $new_cur currency function transferPriceBookCurrency($old_cur, $new_cur) { global $log, $adb; $log->debug("Entering function updatePriceBookCurrency..."); $pb_res = $adb->pquery("select pricebookid from vtiger_pricebook where currency_id = ?", array($old_cur)); $numRows = $adb->num_rows($pb_res); $pb_ids = array(); for($i=0;$i<$numRows;$i++) { $pb_ids[] = $adb->query_result($pb_res,$i,'pricebookid'); } if(count($pb_ids) > 0) { require_once('modules/PriceBooks/PriceBooks.php'); for($i=0;$iid = $pb_id; $focus->mode = 'edit'; $focus->retrieve_entity_info($pb_id, "PriceBooks"); $focus->column_fields['currency_id'] = $new_cur; $focus->save("PriceBooks"); } } $log->debug("Exiting function updatePriceBookCurrency..."); } //functions for asterisk integration start /** * this function returns the caller name based on the phone number that is passed to it * @param $from - the number which is calling * returns caller information in name(type) format :: for e.g. Mary Smith (Contact) * if no information is present in database, it returns :: Unknown Caller (Unknown) */ function getCallerName($from) { global $adb; //information found $callerInfo = getCallerInfo($from); if($callerInfo != false){ $callerName = decode_html($callerInfo['name']); $module = $callerInfo['module']; $callerModule = " ($module)"; $callerID = $callerInfo['id']; $caller =$caller."$callerName$callerModule"; }else{ $caller = $caller."
".getTranslatedString('LBL_CREATE_LEAD')."
".getTranslatedString('LBL_CREATE_CONTACT')."
".getTranslatedString('LBL_CREATE_ACCOUNT').""; } return $caller; } /** * this function searches for a given number in vtiger and returns the callerInfo in an array format * currently the search is made across only leads, accounts and contacts modules * * @param $number - the number whose information you want * @return array in format array(name=>callername, module=>module, id=>id); */ function getCallerInfo($number){ global $adb, $log; if(empty($number)){ return false; } $caller = "Unknown Number (Unknown)"; //declare caller as unknown in beginning $params = array(); $name = array('Contacts', 'Accounts', 'Leads'); foreach ($name as $module) { $focus = CRMEntity::getInstance($module); $query = $focus->buildSearchQueryForFieldTypes(11, $number); if(empty($query)) return; $result = $adb->pquery($query, array()); if($adb->num_rows($result) > 0 ){ $callerName = $adb->query_result($result, 0, "name"); $callerID = $adb->query_result($result,0,'id'); $data = array("name"=>$callerName, "module"=>$module, "id"=>$callerID); return $data; } } return false; } /** * this function returns the tablename and primarykeys for a given module in array format * @param object $adb - peardatabase type object * @param string $module - module name for which you want the array * @return array(tablename1=>primarykey1,.....) */ function get_tab_name_index($adb, $module){ $tabid = getTabid($module); $sql = "select * from vtiger_tab_name_index where tabid = ?"; $result = $adb->pquery($sql, array($tabid)); $count = $adb->num_rows($result); $data = array(); for($i=0; $i<$count; $i++){ $tablename = $adb->query_result($result, $i, "tablename"); $primaryKey = $adb->query_result($result, $i, "primarykey"); $data[$tablename] = $primaryKey; } return $data; } /** * this function returns the value of use_asterisk from the database for the current user * @param string $id - the id of the current user */ function get_use_asterisk($id){ global $adb; if(!vtlib_isModuleActive('PBXManager') || isPermitted('PBXManager', 'index') == 'no'){ return false; } $sql = "select * from vtiger_asteriskextensions where userid = ?"; $result = $adb->pquery($sql, array($id)); if($adb->num_rows($result)>0){ $use_asterisk = $adb->query_result($result, 0, "use_asterisk"); $asterisk_extension = $adb->query_result($result, 0, "asterisk_extension"); if($use_asterisk == 0 || empty($asterisk_extension)){ return 'false'; }else{ return 'true'; } }else{ return 'false'; } } /** * this function adds a record to the callhistory module * * @param string $userExtension - the extension of the current user * @param string $callfrom - the caller number * @param string $callto - the called number * @param string $status - the status of the call (outgoing/incoming/missed) * @param object $adb - the peardatabase object */ function addToCallHistory($userExtension, $callfrom, $callto, $status, $adb, $useCallerInfo){ $sql = "select * from vtiger_asteriskextensions where asterisk_extension=?"; $result = $adb->pquery($sql,array($userExtension)); $userID = $adb->query_result($result, 0, "userid"); if(empty($userID)) { // we have observed call to extension not configured in Vtiger will returns NULL return; } $crmID = $adb->getUniqueID('vtiger_crmentity'); $timeOfCall = date('Y-m-d H:i:s'); $sql = "insert into vtiger_crmentity values (?,?,?,?,?,?,?,?,?,?,?,?,?)"; $params = array($crmID, $userID, $userID, 0, "PBXManager", "", $timeOfCall, $timeOfCall, NULL, NULL, 0, 1, 0); $adb->pquery($sql, $params); if(empty($callfrom)){ $callfrom = "Unknown"; } if(empty($callto)){ $callto = "Unknown"; } if($status == 'outgoing'){ //call is from user to record $sql = "select * from vtiger_asteriskextensions where asterisk_extension=?"; $result = $adb->pquery($sql, array($callfrom)); if($adb->num_rows($result)>0){ $userid = $adb->query_result($result, 0, "userid"); $callerName = getUserFullName($userid); } $receiver = $useCallerInfo; if(empty($receiver)){ $receiver = "Unknown"; }else{ $receiver = "".$receiver['name'].""; } }else{ //call is from record to user $sql = "select * from vtiger_asteriskextensions where asterisk_extension=?"; $result = $adb->pquery($sql,array($callto)); if($adb->num_rows($result)>0){ $userid = $adb->query_result($result, 0, "userid"); $receiver = getUserFullName($userid); } $callerName = $useCallerInfo; if(empty($callerName)){ $callerName = "Unknown $callfrom"; }else{ $callerName = "".decode_html($callerName['name']).""; } } $sql = "insert into vtiger_pbxmanager (pbxmanagerid,callfrom,callto,timeofcall,status)values (?,?,?,?,?)"; $params = array($crmID, $callerName, $receiver, $timeOfCall, $status); $adb->pquery($sql, $params); return $crmID; } //functions for asterisk integration end //functions for settings page /** * this function returns the blocks for the settings page */ function getSettingsBlocks(){ global $adb; $sql = "select * from vtiger_settings_blocks order by sequence"; $result = $adb->query($sql); $count = $adb->num_rows($result); $blocks = array(); if($count>0){ for($i=0;$i<$count;$i++){ $blockid = $adb->query_result($result, $i, "blockid"); $label = $adb->query_result($result, $i, "label"); $blocks[$blockid] = $label; } } return $blocks; } /** * this function returns the fields for the settings page */ function getSettingsFields(){ global $adb; $sql = "select * from vtiger_settings_field where blockid!=? and active=0 order by blockid,sequence"; $result = $adb->pquery($sql, array(getSettingsBlockId('LBL_MODULE_MANAGER'))); $count = $adb->num_rows($result); $fields = array(); if($count>0){ for($i=0;$i<$count;$i++){ $blockid = $adb->query_result($result, $i, "blockid"); $iconpath = $adb->query_result($result, $i, "iconpath"); $description = $adb->query_result($result, $i, "description"); $linkto = $adb->query_result($result, $i, "linkto"); $action = getPropertiesFromURL($linkto, "action"); $module = getPropertiesFromURL($linkto, "module"); $name = $adb->query_result($result, $i, "name"); $fields[$blockid][] = array("icon"=>$iconpath, "description"=>$description, "link"=>$linkto, "name"=>$name, "action"=>$action, "module"=>$module); } //add blanks for 4-column layout foreach($fields as $blockid=>&$field){ if(count($field)>0 && count($field)<4){ for($i=count($field);$i<4;$i++){ $field[$i] = array(); } } } } return $fields; } /** * this function takes an url and returns the module name from it */ function getPropertiesFromURL($url, $action){ $result = array(); preg_match("/$action=([^&]+)/",$url,$result); return $result[1]; } //functions for settings page end /* Function to get the name of the Field which is used for Module Specific Sequence Numbering, if any * @param module String - Module label * return Array - Field name and label are returned */ function getModuleSequenceField($module) { global $adb, $log; $log->debug("Entering function getModuleSequenceFieldName ($module)..."); $field = null; if (!empty($module)) { // First look at the cached information $cachedModuleFields = VTCacheUtils::lookupFieldInfo_Module($module); if($cachedModuleFields === false) { //uitype 4 points to Module Numbering Field $seqColRes = $adb->pquery("SELECT fieldname, fieldlabel, columnname FROM vtiger_field WHERE uitype=? AND tabid=? and vtiger_field.presence in (0,2)", array('4', getTabid($module))); if($adb->num_rows($seqColRes) > 0) { $fieldname = $adb->query_result($seqColRes,0,'fieldname'); $columnname = $adb->query_result($seqColRes,0,'columnname'); $fieldlabel = $adb->query_result($seqColRes,0,'fieldlabel'); $field = array(); $field['name'] = $fieldname; $field['column'] = $columnname; $field['label'] = $fieldlabel; } } else { foreach($cachedModuleFields as $fieldinfo) { if($fieldinfo['uitype'] == '4') { $field = array(); $field['name'] = $fieldinfo['fieldname']; $field['column'] = $fieldinfo['columnname']; $field['label'] = $fieldinfo['fieldlabel']; break; } } } } $log->debug("Exiting getModuleSequenceFieldName..."); return $field; } /* Function to get the Result of all the field ids allowed for Duplicates merging for specified tab/module (tabid) */ function getFieldsResultForMerge($tabid) { global $log, $adb; $log->debug("Entering getFieldsResultForMerge(".$tabid.") method ..."); $nonmergable_tabids = array(29); if (in_array($tabid, $nonmergable_tabids)) { return null; } // List of Fields not allowed for Duplicates Merging based on the module (tabid) [tabid to fields mapping] $nonmergable_field_tab = Array( 4 => array('portal','imagename'), 13 => array('update_log','filename','comments'), ); $nonmergable_displaytypes = Array(4); $nonmergable_uitypes = Array('70','69','4'); $sql = "SELECT fieldid,typeofdata FROM vtiger_field WHERE tabid = ? and vtiger_field.presence in (0,2) AND block IS NOT NULL"; $params = array($tabid); $where = ''; if (isset($nonmergable_field_tab[$tabid]) && count($nonmergable_field_tab[$tabid]) > 0) { $where .= " AND fieldname NOT IN (". generateQuestionMarks($nonmergable_field_tab[$tabid]) .")"; array_push($params, $nonmergable_field_tab[$tabid]); } if (count($nonmergable_displaytypes) > 0) { $where .= " AND displaytype NOT IN (". generateQuestionMarks($nonmergable_displaytypes) .")"; array_push($params, $nonmergable_displaytypes); } if (count($nonmergable_uitypes) > 0) { $where .= " AND uitype NOT IN ( ". generateQuestionMarks($nonmergable_uitypes) .")" ; array_push($params, $nonmergable_uitypes); } if (trim($where) != '') { $sql .= $where; } $res = $adb->pquery($sql, $params); $log->debug("Exiting getFieldsResultForMerge method ..."); return $res; } /* Function to get the related tables data * @param - $module - Primary module name * @param - $secmodule - Secondary module name * return Array $rel_array tables and fields to be compared are sent * */ function getRelationTables($module,$secmodule){ global $adb; $primary_obj = CRMEntity::getInstance($module); $secondary_obj = CRMEntity::getInstance($secmodule); $ui10_query = $adb->pquery("SELECT vtiger_field.tabid AS tabid,vtiger_field.tablename AS tablename, vtiger_field.columnname AS columnname FROM vtiger_field INNER JOIN vtiger_fieldmodulerel ON vtiger_fieldmodulerel.fieldid = vtiger_field.fieldid WHERE (vtiger_fieldmodulerel.module=? AND vtiger_fieldmodulerel.relmodule=?) OR (vtiger_fieldmodulerel.module=? AND vtiger_fieldmodulerel.relmodule=?)",array($module,$secmodule,$secmodule,$module)); if($adb->num_rows($ui10_query)>0){ $ui10_tablename = $adb->query_result($ui10_query,0,'tablename'); $ui10_columnname = $adb->query_result($ui10_query,0,'columnname'); $ui10_tabid = $adb->query_result($ui10_query,0,'tabid'); if($primary_obj->table_name == $ui10_tablename){ $reltables = array($ui10_tablename=>array("".$primary_obj->table_index."","$ui10_columnname")); } else if($secondary_obj->table_name == $ui10_tablename){ $reltables = array($ui10_tablename=>array("$ui10_columnname","".$secondary_obj->table_index.""),"".$primary_obj->table_name."" => "".$primary_obj->table_index.""); } else { if(isset($secondary_obj->tab_name_index[$ui10_tablename])){ $rel_field = $secondary_obj->tab_name_index[$ui10_tablename]; $reltables = array($ui10_tablename=>array("$ui10_columnname","$rel_field"),"".$primary_obj->table_name."" => "".$primary_obj->table_index.""); } else { $rel_field = $primary_obj->tab_name_index[$ui10_tablename]; $reltables = array($ui10_tablename=>array("$rel_field","$ui10_columnname"),"".$primary_obj->table_name."" => "".$primary_obj->table_index.""); } } }else { if(method_exists($primary_obj,setRelationTables)){ $reltables = $primary_obj->setRelationTables($secmodule); } else { $reltables = ''; } } if(is_array($reltables) && !empty($reltables)){ $rel_array = $reltables; } else { $rel_array = array("vtiger_crmentityrel"=>array("crmid","relcrmid"),"".$primary_obj->table_name."" => "".$primary_obj->table_index.""); } return $rel_array; } /** * This function returns no value but handles the delete functionality of each entity. * Input Parameter are $module - module name, $return_module - return module name, $focus - module object, $record - entity id, $return_id - return entity id. */ function DeleteEntity($module,$return_module,$focus,$record,$return_id) { global $log; $log->debug("Entering DeleteEntity method ($module, $return_module, $record, $return_id)"); if ($module != $return_module && !empty($return_module) && !empty($return_id)) { $focus->unlinkRelationship($record, $return_module, $return_id); $focus->trackUnLinkedInfo($return_module, $return_id, $module, $record); } else { $focus->trash($module, $record); } $log->debug("Exiting DeleteEntity method ..."); } /** * Function to related two records of different entity types */ function relateEntities($focus, $sourceModule, $sourceRecordId, $destinationModule, $destinationRecordIds) { if(!is_array($destinationRecordIds)) $destinationRecordIds = Array($destinationRecordIds); foreach($destinationRecordIds as $destinationRecordId) { $focus->save_related_module($sourceModule, $sourceRecordId, $destinationModule, $destinationRecordId); $focus->trackLinkedInfo($sourceModule, $sourceRecordId, $destinationModule, $destinationRecordId); } } /* Function to install Vtlib Compliant modules * @param - $packagename - Name of the module * @param - $packagepath - Complete path to the zip file of the Module */ function installVtlibModule($packagename, $packagepath, $customized=false) { global $log; require_once('vtlib/Vtiger/Package.php'); require_once('vtlib/Vtiger/Module.php'); $Vtiger_Utils_Log = true; $package = new Vtiger_Package(); if($package->isLanguageType($packagepath)) { $package = new Vtiger_Language(); $package->import($packagepath, true); return; } $module = $package->getModuleNameFromZip($packagepath); // Customization if($package->isLanguageType()) { require_once('vtlib/Vtiger/Language.php'); $languagePack = new Vtiger_Language(); @$languagePack->import($packagepath, true); return; } // END $module_exists = false; $module_dir_exists = false; if($module == null) { $log->fatal("$packagename Module zipfile is not valid!"); } else if(Vtiger_Module::getInstance($module)) { $log->fatal("$module already exists!"); $module_exists = true; } if($module_exists == false) { $log->debug("$module - Installation starts here"); $package->import($packagepath, true); $moduleInstance = Vtiger_Module::getInstance($module); if (empty($moduleInstance)) { $log->fatal("$module module installation failed!"); } } } /* Function to update Vtlib Compliant modules * @param - $module - Name of the module * @param - $packagepath - Complete path to the zip file of the Module */ function updateVtlibModule($module, $packagepath) { global $log; require_once('vtlib/Vtiger/Package.php'); require_once('vtlib/Vtiger/Module.php'); $Vtiger_Utils_Log = true; $package = new Vtiger_Package(); if($package->isLanguageType($packagepath)) { require_once('vtlib/Vtiger/Language.php'); $languagePack = new Vtiger_Language(); $languagePack->update(null, $packagepath, true); return; } if($module == null) { $log->fatal("Module name is invalid"); } else { $moduleInstance = Vtiger_Module::getInstance($module); if($moduleInstance || $package->isModuleBundle($packagepath)) { $log->debug("$module - Module instance found - Update starts here"); $package->update($moduleInstance, $packagepath); } else { $log->fatal("$module doesn't exists!"); } } } /* Function to only initialize the update of Vtlib Compliant modules * @param - $module - Name of the module * @param - $packagepath - Complete path to the zip file of the Module */ function initUpdateVtlibModule($module, $packagepath) { global $log; require_once('vtlib/Vtiger/Package.php'); require_once('vtlib/Vtiger/Module.php'); $Vtiger_Utils_Log = true; $package = new Vtiger_Package(); if($module == null) { $log->fatal("Module name is invalid"); } else { $moduleInstance = Vtiger_Module::getInstance($module); if($moduleInstance) { $log->debug("$module - Module instance found - Init Update starts here"); $package->initUpdate($moduleInstance, $packagepath, true); } else { $log->fatal("$module doesn't exists!"); } } } /** * this function checks if a given column exists in a given table or not * @param string $columnName - the columnname * @param string $tableName - the tablename * @return boolean $status - true if column exists; false otherwise */ function columnExists($columnName, $tableName){ global $adb; $columnNames = array(); $columnNames = $adb->getColumnNames($tableName); if(in_array($columnName, $columnNames)){ return true; }else{ return false; } } /* To get modules list for which work flow and field formulas is permitted*/ function com_vtGetModules($adb) { $sql="select distinct vtiger_field.tabid, name from vtiger_field inner join vtiger_tab on vtiger_field.tabid=vtiger_tab.tabid where vtiger_field.tabid not in(9,10,16,15,8,29) and vtiger_tab.presence = 0 and vtiger_tab.isentitytype=1"; $it = new SqlResultIterator($adb, $adb->query($sql)); $modules = array(); foreach($it as $row) { if(isPermitted($row->name,'index') == "yes") { $modules[$row->name] = getTranslatedString($row->name); } } return $modules; } /** * this function accepts a potential id returns the module name and entity value for the related field * @param integer $id - the potential id * @return array $data - the related module name and field value */ function getRelatedInfo($id){ global $adb; $data = array(); $sql = "select related_to from vtiger_potential where potentialid=?"; $result = $adb->pquery($sql, array($id)); if($adb->num_rows($result)>0){ $relID = $adb->query_result($result, 0, "related_to"); $sql = "select setype from vtiger_crmentity where crmid=?"; $result = $adb->pquery($sql, array($relID)); if($adb->num_rows($result)>0){ $setype = $adb->query_result($result, 0, "setype"); } $data = array("setype"=>$setype, "relID"=>$relID); } return $data; } /** * this function accepts an ID and returns the entity value for that id * @param integer $id - the crmid of the record * @return string $data - the entity name for the id */ function getRecordInfoFromID($id){ global $adb; $data = array(); $sql = "select setype from vtiger_crmentity where crmid=?"; $result = $adb->pquery($sql, array($id)); if($adb->num_rows($result)>0){ $setype = $adb->query_result($result, 0, "setype"); $data = getEntityName($setype, $id); } $data = array_values($data); $data = $data[0]; return $data; } /** * this function accepts an tabiD and returns the tablename, fieldname and fieldlabel for email field * @param integer $tabid - the tabid of current module * @return string $fields - the array of mail field's tablename, fieldname and fieldlabel */ function getMailFields($tabid){ global $adb; $fields = array(); $result = $adb->pquery("SELECT tablename,fieldlabel,fieldname FROM vtiger_field WHERE tabid=? AND uitype IN (13,104)", array($tabid)); if($adb->num_rows($result)>0){ $tablename = $adb->query_result($result, 0, "tablename"); $fieldname = $adb->query_result($result, 0, "fieldname"); $fieldlabel = $adb->query_result($result, 0, "fieldlabel"); $fields = array("tablename"=>$tablename,"fieldname"=>$fieldname,"fieldlabel"=>$fieldlabel); } return $fields; } /** * Function to check if a given record exists (not deleted) * @param integer $recordId - record id */ function isRecordExists($recordId) { global $adb; $query = "SELECT crmid FROM vtiger_crmentity where crmid=? AND deleted=0"; $result = $adb->pquery($query, array($recordId)); if ($adb->num_rows($result)) { return true; } return false; } /** Function to set date values compatible to database (YY_MM_DD) * @param $value -- value :: Type string * @returns $insert_date -- insert_date :: Type string */ function getValidDBInsertDateValue($value) { global $log; $log->debug("Entering getValidDBInsertDateValue(".$value.") method ..."); $value = trim($value); $delim = array('/','.'); foreach ($delim as $delimiter){ $x = strpos($value, $delimiter); if($x === false) continue; else{ $value=str_replace($delimiter, '-', $value); break; } } list($y,$m,$d) = explode('-',$value); if(strlen($y) == 1) $y = '0'.$y; if(strlen($m) == 1) $m = '0'.$m; if(strlen($d) == 1) $d = '0'.$d; $value = implode('-', array($y,$m,$d)); if(strlen($y)<4){ $insert_date = DateTimeField::convertToDBFormat($value); } else { $insert_date = $value; } if (preg_match("/^[0-9]{2,4}[-][0-1]{1,2}?[0-9]{1,2}[-][0-3]{1,2}?[0-9]{1,2}$/", $insert_date) == 0) { return ''; } $log->debug("Exiting getValidDBInsertDateValue method ..."); return $insert_date; } function getValidDBInsertDateTimeValue($value) { $value = trim($value); $valueList = explode(' ',$value); if(count($valueList) == 2) { $dbDateValue = getValidDBInsertDateValue($valueList[0]); $dbTimeValue = $valueList[1]; if(!empty($dbTimeValue) && strpos($dbTimeValue, ':') === false) { $dbTimeValue = $dbTimeValue.':'; } $timeValueLength = strlen($dbTimeValue); if(!empty($dbTimeValue) && strrpos($dbTimeValue, ':') == ($timeValueLength-1)) { $dbTimeValue = $dbTimeValue.'00'; } try { $dateTime = new DateTimeField($dbDateValue.' '.$dbTimeValue); return $dateTime->getDBInsertDateTimeValue(); } catch (Exception $ex) { return ''; } } elseif(count($valueList == 1)) { return getValidDBInsertDateValue($value); } } /** Function to set the PHP memory limit to the specified value, if the memory limit set in the php.ini is less than the specified value * @param $newvalue -- Required Memory Limit */ function _phpset_memorylimit_MB($newvalue) { $current = @ini_get('memory_limit'); if(preg_match("/(.*)M/", $current, $matches)) { // Check if current value is less then new value if($matches[1] < $newvalue) { @ini_set('memory_limit', "{$newvalue}M"); } } } /** Function to sanitize the upload file name when the file name is detected to have bad extensions * @param String -- $fileName - File name to be sanitized * @return String - Sanitized file name */ function sanitizeUploadFileName($fileName, $badFileExtensions) { $fileName = preg_replace('/\s+/', '_', $fileName);//replace space with _ in filename $fileName = rtrim($fileName, '\\/<>?*:"<>|'); $fileNameParts = explode(".", $fileName); $countOfFileNameParts = count($fileNameParts); $badExtensionFound = false; for ($i=0;$i<$countOfFileNameParts;++$i) { $partOfFileName = $fileNameParts[$i]; if(in_array(strtolower($partOfFileName), $badFileExtensions)) { $badExtensionFound = true; $fileNameParts[$i] = $partOfFileName . 'file'; } } $newFileName = implode(".", $fileNameParts); if ($badExtensionFound) { $newFileName .= ".txt"; } return $newFileName; } /** Function to get the tab meta information for a given id * @param $tabId -- tab id :: Type integer * @returns $tabInfo -- array of preference name to preference value :: Type array */ function getTabInfo($tabId) { global $adb; $tabInfoResult = $adb->pquery('SELECT prefname, prefvalue FROM vtiger_tab_info WHERE tabid=?', array($tabId)); $tabInfo = array(); for($i=0; $i<$adb->num_rows($tabInfoResult); ++$i) { $prefName = $adb->query_result($tabInfoResult, $i, 'prefname'); $prefValue = $adb->query_result($tabInfoResult, $i, 'prefvalue'); $tabInfo[$prefName] = $prefValue; } } /** Function to return block name * @param Integer -- $blockid * @return String - Block Name */ function getBlockName($blockid) { global $adb; if(!empty($blockid)){ $block_res = $adb->pquery('SELECT blocklabel FROM vtiger_blocks WHERE blockid = ?',array($blockid)); if($adb->num_rows($block_res)){ $blockname = $adb->query_result($block_res,0,'blocklabel'); return $blockname; } } return ''; } function validateAlphaNumericInput($string){ preg_match('/^[\w _\-]+$/', $string, $matches); if(count($matches) == 0) { return false; } return true; } function validateServerName($string){ preg_match('/^[\w\-\.\\/:]+$/', $string, $matches); if(count($matches) == 0) { return false; } return true; } function validateEmailId($string){ preg_match('/^[a-zA-Z0-9]+([\_\-\.]*[a-zA-Z0-9]+[\_\-]?)*@[a-zA-Z0-9]+([\_\-]?[a-zA-Z0-9]+)*\.+([\-\_]?[a-zA-Z0-9])+(\.?[a-zA-Z0-9]+)*$/', $string, $matches); if(count($matches) == 0) { return false; } return true; } function str_rsplit($string, $splitLength) { $reverseString = strrev($string); $chunks = str_split($reverseString, $splitLength); return array_reverse($chunks); } /** * Function to get the list of Contacts related to an activity * @param Integer $activityId * @return Array $contactsList - List of Contact ids, mapped to Contact Names */ function getActivityRelatedContacts($activityId) { $adb = PearDatabase::getInstance(); $query = 'SELECT * FROM vtiger_cntactivityrel WHERE activityid=?'; $result = $adb->pquery($query, array($activityId)); $noOfContacts = $adb->num_rows($result); $contactsList = array(); for ($i = 0; $i < $noOfContacts; ++$i) { $contactId = $adb->query_result($result, $i, 'contactid'); $displayValueArray = getEntityName('Contacts', $contactId); if (!empty($displayValueArray)) { foreach ($displayValueArray as $key => $field_value) { $contact_name = $field_value; } } else { $contact_name=''; } $contactsList[$contactId] = $contact_name; } return $contactsList; } function isLeadConverted($leadId) { $adb = PearDatabase::getInstance(); $query = 'SELECT converted FROM vtiger_leaddetails WHERE converted = 1 AND leadid=?'; $params = array($leadId); $result = $adb->pquery($query, $params); if($result && $adb->num_rows($result) > 0) { return true; } return false; } function getSelectedRecords($input,$module,$idstring,$excludedRecords) { global $current_user, $adb; if($idstring == 'relatedListSelectAll') { $recordid = vtlib_purify($input['recordid']); if($module == 'Accounts') { $result = getCampaignAccountIds($recordid); } if($module == 'Contacts') { $result = getCampaignContactIds($recordid); } if($module == 'Leads') { $result = getCampaignLeadIds($recordid); } $storearray = array(); for ($i = 0; $i < $adb->num_rows($result); $i++) { $storearray[] = $adb->query_result($result, $i, 'id'); } $excludedRecords=explode(';',$excludedRecords); $storearray=array_diff($storearray,$excludedRecords); } else if($module == 'Documents') { if($input['selectallmode']=='true') { $result = getSelectAllQuery($input,$module); $storearray = array(); $focus = CRMEntity::getInstance($module); for ($i = 0; $i < $adb->num_rows($result); $i++) { $storearray[] = $adb->query_result($result, $i, $focus->table_index); } $excludedRecords = explode(';',$excludedRecords); $storearray = array_diff($storearray,$excludedRecords); if($idstring != 'all') { $storearray = array_merge($storearray,explode(';',$idstring)); } $storearray = array_unique($storearray); } else { $storearray = explode(";",$idstring); } } elseif($idstring == 'all') { $result = getSelectAllQuery($input,$module); $storearray = array(); $focus = CRMEntity::getInstance($module); for ($i = 0; $i < $adb->num_rows($result); $i++) { $storearray[] = $adb->query_result($result, $i, $focus->table_index); } $excludedRecords = explode(';',$excludedRecords); $storearray = array_diff($storearray,$excludedRecords); } else { $storearray = explode(";",$idstring); } return $storearray; } function getSelectAllQuery($input,$module) { global $adb,$current_user; $viewid = vtlib_purify($input['viewname']); if($module == "Calendar") { $listquery = getListQuery($module); $oCustomView = new CustomView($module); $query = $oCustomView->getModifiedCvListQuery($viewid,$listquery,$module); $where = ''; if($input['query'] == 'true') { list($where, $ustring) = split("#@@#",getWhereCondition($module, $input)); if(isset($where) && $where != '') { $query .= " AND " .$where; } } } else { $queryGenerator = new QueryGenerator($module, $current_user); $queryGenerator->initForCustomViewById($viewid); if($input['query'] == 'true') { $queryGenerator->addUserSearchConditions($input); } $queryGenerator->setFields(array('id')); $query = $queryGenerator->getQuery(); if($module == 'Documents') { $folderid = vtlib_purify($input['folderidstring']); $folderid = str_replace(';', ',', $folderid); $query .= " AND vtiger_notes.folderid in (".$folderid.")"; } } $result = $adb->pquery($query, array()); return $result; } function getCampaignAccountIds($id) { global $adb; $sql="SELECT vtiger_account.accountid as id FROM vtiger_account INNER JOIN vtiger_campaignaccountrel ON vtiger_campaignaccountrel.accountid = vtiger_account.accountid LEFT JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_account.accountid WHERE vtiger_campaignaccountrel.campaignid = ? AND vtiger_crmentity.deleted=0"; $result = $adb->pquery($sql, array($id)); return $result; } function getCampaignContactIds($id) { global $adb; $sql="SELECT vtiger_contactdetails.contactid as id FROM vtiger_contactdetails INNER JOIN vtiger_campaigncontrel ON vtiger_campaigncontrel.contactid = vtiger_contactdetails.contactid LEFT JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_contactdetails.contactid WHERE vtiger_campaigncontrel.campaignid = ? AND vtiger_crmentity.deleted=0"; $result = $adb->pquery($sql, array($id)); return $result; } function getCampaignLeadIds($id) { global $adb; $sql="SELECT vtiger_leaddetails.leadid as id FROM vtiger_leaddetails INNER JOIN vtiger_campaignleadrel ON vtiger_campaignleadrel.leadid = vtiger_leaddetails.leadid LEFT JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_leaddetails.leadid WHERE vtiger_campaignleadrel.campaignid = ? AND vtiger_crmentity.deleted=0"; $result = $adb->pquery($sql, array($id)); return $result; } /** Function to get the difference between 2 datetime strings or millisecond values */ function dateDiff($d1, $d2){ $d1 = (is_string($d1) ? strtotime($d1) : $d1); $d2 = (is_string($d2) ? strtotime($d2) : $d2); $diffSecs = abs($d1 - $d2); $baseYear = min(date("Y", $d1), date("Y", $d2)); $diff = mktime(0, 0, $diffSecs, 1, 1, $baseYear); return array( "years" => date("Y", $diff) - $baseYear, "months_total" => (date("Y", $diff) - $baseYear) * 12 + date("n", $diff) - 1, "months" => date("n", $diff) - 1, "days_total" => floor($diffSecs / (3600 * 24)), "days" => date("j", $diff) - 1, "hours_total" => floor($diffSecs / 3600), "hours" => date("G", $diff), "minutes_total" => floor($diffSecs / 60), "minutes" => (int) date("i", $diff), "seconds_total" => $diffSecs, "seconds" => (int) date("s", $diff) ); } /** * Function to get the approximate difference between two date time values as string */ function dateDiffAsString($d1, $d2) { global $currentModule; $dateDiff = dateDiff($d1, $d2); $years = $dateDiff['years']; $months = $dateDiff['months']; $days = $dateDiff['days']; $hours = $dateDiff['hours']; $minutes = $dateDiff['minutes']; $seconds = $dateDiff['seconds']; if($years > 0) { $diffString = "$years ".getTranslatedString('LBL_YEARS',$currentModule); } elseif($months > 0) { $diffString = "$months ".getTranslatedString('LBL_MONTHS',$currentModule); } elseif($days > 0) { $diffString = "$days ".getTranslatedString('LBL_DAYS',$currentModule); } elseif($hours > 0) { $diffString = "$hours ".getTranslatedString('LBL_HOURS',$currentModule); } elseif($minutes > 0) { $diffString = "$minutes ".getTranslatedString('LBL_MINUTES',$currentModule); } else { $diffString = "$seconds ".getTranslatedString('LBL_SECONDS',$currentModule); } return $diffString; } function getMinimumCronFrequency() { if(file_exists('modules/Ondemand/Ondemand.config.php')) { require_once('modules/Ondemand/Ondemand.config.php'); global $VtigerOndemandConfig; if($VtigerOndemandConfig['MINIMUM_CRON_FREQUENCY'] != '') return $VtigerOndemandConfig['MINIMUM_CRON_FREQUENCY']; } global $MINIMUM_CRON_FREQUENCY; if(!empty($MINIMUM_CRON_FREQUENCY)) { return $MINIMUM_CRON_FREQUENCY; } return 15; } ?>