retrieve($_REQUEST[$prefix.'record']); if(!empty($_POST['assigned_user_id']) && ($focus->assigned_user_id != $_POST['assigned_user_id']) && ($_POST['assigned_user_id'] != $current_user->id)) { $GLOBALS['check_notify'] = true; } require_once('include/SugarFields/SugarFieldHandler.php'); $sfh = new SugarFieldHandler(); $isOwner = $focus->isOwner($current_user->id); $relatedFields = array(); foreach ($focus->field_defs as $field => $def) { if (empty($def['type']) || $def['type'] != 'relate') { continue; } if (empty($def['source']) || $def['source'] != 'non-db') { continue; } if (empty($def['id_name']) || $def['id_name'] == $field) { continue; } $relatedFields[$def['id_name']] = $field; } foreach($focus->field_defs as $field=>$def) { if ( $field == 'id' && !empty($focus->id) ) { // Don't try and overwrite the ID continue; } $type = !empty($def['custom_type']) ? $def['custom_type'] : $def['type']; $sf = $sfh->getSugarField($type); if($sf != null){ $sf->save($focus, $_POST, $field, $def, $prefix); } else { $GLOBALS['log']->fatal("Field '$field' does not have a SugarField handler"); } /* if(isset($_POST[$prefix.$field])) { if(is_array($_POST[$prefix.$field]) && !empty($focus->field_defs[$field]['isMultiSelect'])) { if($_POST[$prefix.$field][0] === '' && !empty($_POST[$prefix.$field][1]) ) { unset($_POST[$prefix.$field][0]); } $_POST[$prefix.$field] = encodeMultienumValue($_POST[$prefix.$field]); } $focus->$field = $_POST[$prefix.$field]; /* * overrides the passed value for booleans. * this will be fully deprecated when the change to binary booleans is complete. / if(isset($focus->field_defs[$prefix.$field]) && $focus->field_defs[$prefix.$field]['type'] == 'bool' && isset($focus->field_defs[$prefix.$field]['options'])) { $opts = explode("|", $focus->field_defs[$prefix.$field]['options']); $bool = $_POST[$prefix.$field]; if(is_int($bool) || ($bool === "0" || $bool === "1" || $bool === "2")) { // 1=on, 2=off $selection = ($_POST[$prefix.$field] == "0") ? 1 : 0; } elseif(is_bool($_POST[$prefix.$field])) { // true=on, false=off $selection = ($_POST[$prefix.$field]) ? 0 : 1; } $focus->$field = $opts[$selection]; } } else if(!empty($focus->field_defs[$field]['isMultiSelect']) && !isset($_POST[$prefix.$field]) && isset($_POST[$prefix.$field . '_multiselect'])) { $focus->$field = ''; } */ } foreach($focus->additional_column_fields as $field) { if(isset($_POST[$prefix.$field])) { $value = $_POST[$prefix.$field]; $focus->$field = $value; } } return $focus; } function add_hidden_elements($key, $value) { $elements = ''; // if it's an array, we need to loop into the array and use square brackets [] if (is_array($value)) { foreach ($value as $k=>$v) { $elements .= "\n"; } } else { $elements = "\n"; } return $elements; } function getPostToForm($ignore='', $isRegularExpression=false) { $fields = ''; if(!empty($ignore) && $isRegularExpression) { foreach ($_POST as $key=>$value){ if(!preg_match($ignore, $key)) { $fields .= add_hidden_elements($key, $value); } } } else { foreach ($_POST as $key=>$value){ if($key != $ignore) { $fields .= add_hidden_elements($key, $value); } } } return $fields; } function getGetToForm($ignore='', $usePostAsAuthority = false) { $fields = ''; foreach ($_GET as $key=>$value) { if($key != $ignore){ if(!$usePostAsAuthority || !isset($_POST[$key])){ $fields.= ""; } } } return $fields; } function getAnyToForm($ignore='', $usePostAsAuthority = false) { $fields = getPostToForm($ignore); $fields .= getGetToForm($ignore, $usePostAsAuthority); return $fields; } function handleRedirect($return_id='', $return_module='', $additionalFlags = false) { if(isset($_REQUEST['return_url']) && $_REQUEST['return_url'] != "") { header("Location: ". $_REQUEST['return_url']); exit; } $url = buildRedirectURL($return_id, $return_module); header($url); exit; } //eggsurplus: abstract to simplify unit testing function buildRedirectURL($return_id='', $return_module='') { if(isset($_REQUEST['return_module']) && $_REQUEST['return_module'] != "") { $return_module = $_REQUEST['return_module']; } else { $return_module = $return_module; } if(isset($_REQUEST['return_action']) && $_REQUEST['return_action'] != "") { //if we are doing a "Close and Create New" if(isCloseAndCreateNewPressed()) { $return_action = "EditView"; $isDuplicate = "true"; $status = ""; // Meeting Integration if(isset($_REQUEST['meetingIntegrationFlag']) && $_REQUEST['meetingIntegrationFlag'] == 1) { $additionalFlags = array('meetingIntegrationShowForm' => '1'); } // END Meeting Integration } // if we create a new record "Save", we want to redirect to the DetailView else if(isset($_REQUEST['action']) && $_REQUEST['action'] == "Save" && $_REQUEST['return_module'] != 'Activities' && $_REQUEST['return_module'] != 'Home' && $_REQUEST['return_module'] != 'Forecasts' && $_REQUEST['return_module'] != 'Calendar' && $_REQUEST['return_module'] != 'MailMerge' ) { $return_action = 'DetailView'; } elseif($_REQUEST['return_module'] == 'Activities' || $_REQUEST['return_module'] == 'Calendar') { $return_module = $_REQUEST['module']; $return_action = $_REQUEST['return_action']; // wp: return action needs to be set for one-click close in task list } else { // if we "Cancel", we go back to the list view. $return_action = $_REQUEST['return_action']; } } else { $return_action = "DetailView"; } if(isset($_REQUEST['return_id']) && $_REQUEST['return_id'] != "") { $return_id = $_REQUEST['return_id']; } $add = ""; if(isset($additionalFlags) && !empty($additionalFlags)) { foreach($additionalFlags as $k => $v) { $add .= "&{$k}={$v}"; } } if (!isset($isDuplicate) || !$isDuplicate) { $url="index.php?action=$return_action&module=$return_module&record=$return_id&return_module=$return_module&return_action=$return_action{$add}"; if(isset($_REQUEST['offset']) && empty($_REQUEST['duplicateSave'])) { $url .= "&offset=".$_REQUEST['offset']; } if(!empty($_REQUEST['ajax_load'])) { $ajax_ret = array( 'content' => "\n", 'menu' => array( 'module' => $return_module, 'label' => translate($return_module), ), ); $json = getJSONobj(); echo $json->encode($ajax_ret); } else { return "Location: $url"; } } else { $standard = "action=$return_action&module=$return_module&record=$return_id&isDuplicate=true&return_module=$return_module&return_action=$return_action&status=$status"; $url="index.php?{$standard}{$add}"; if(!empty($_REQUEST['ajax_load'])) { $ajax_ret = array( 'content' => "\n", 'menu' => array( 'module' => $return_module, 'label' => translate($return_module), ), ); $json = getJSONobj(); echo $json->encode($ajax_ret); } else { return "Location: $url"; } } } function getLikeForEachWord($fieldname, $value, $minsize=4) { $value = trim($value); $values = explode(' ',$value); $ret = ''; foreach($values as $val) { if(strlen($val) >= $minsize) { if(!empty($ret)) { $ret .= ' or'; } $ret .= ' '. $fieldname . ' LIKE %'.$val.'%'; } } } function isCloseAndCreateNewPressed() { return isset($_REQUEST['action']) && $_REQUEST['action'] == "Save" && isset($_REQUEST['isSaveAndNew']) && $_REQUEST['isSaveAndNew'] == 'true'; } /** * Functions from Save2.php * @see include/generic/Save2.php */ function add_prospects_to_prospect_list($parent_id,$child_id) { $focus=BeanFactory::getBean('Prospects'); if(is_array($child_id)){ $uids = $child_id; } else{ $uids = array($child_id); } $relationship = ''; foreach($focus->get_linked_fields() as $field => $def) { if ($focus->load_relationship($field)) { if ( $focus->$field->getRelatedModuleName() == 'ProspectLists' ) { $relationship = $field; break; } } } if ( $relationship != '' ) { foreach ( $uids as $id) { $focus->retrieve($id); $focus->load_relationship($relationship); $focus->prospect_lists->add( $parent_id ); } } } function add_to_prospect_list($query_panel,$parent_module,$parent_type,$parent_id,$child_id,$link_attribute,$link_type,$parent) { $GLOBALS['log']->debug('add_prospects_to_prospect_list:parameters:'.$query_panel); $GLOBALS['log']->debug('add_prospects_to_prospect_list:parameters:'.$parent_module); $GLOBALS['log']->debug('add_prospects_to_prospect_list:parameters:'.$parent_type); $GLOBALS['log']->debug('add_prospects_to_prospect_list:parameters:'.$parent_id); $GLOBALS['log']->debug('add_prospects_to_prospect_list:parameters:'.$child_id); $GLOBALS['log']->debug('add_prospects_to_prospect_list:parameters:'.$link_attribute); $GLOBALS['log']->debug('add_prospects_to_prospect_list:parameters:'.$link_type); require_once('include/SubPanel/SubPanelTiles.php'); if (!class_exists($parent_type)) { require_once('modules/'.cleanDirName($parent_module).'/'.cleanDirName($parent_type).'.php'); } $focus = new $parent_type(); $focus->retrieve($parent_id); if(empty($focus->id)) { return false; } if(empty($parent)) { return false; } //if link_type is default then load relationship once and add all the child ids. $relationship_attribute=$link_attribute; //find all prospects based on the query $subpanel = new SubPanelTiles($parent, $parent->module_dir); $thisPanel=$subpanel->subpanel_definitions->load_subpanel($query_panel); if(empty($thisPanel)) { return false; } // bugfix #57850 filter prospect list based on marketing_id (if it's present) if (isset($_REQUEST['marketing_id']) && $_REQUEST['marketing_id'] != 'all') { $thisPanel->_instance_properties['function_parameters']['EMAIL_MARKETING_ID_VALUE'] = $_REQUEST['marketing_id']; } $result = SugarBean::get_union_related_list($parent, '', '', '', 0, -99,-99,'', $thisPanel); if(!empty($result['list'])) { foreach($result['list'] as $object) { if ($link_type != 'default') { $relationship_attribute=strtolower($object->$link_attribute); } $GLOBALS['log']->debug('add_prospects_to_prospect_list:relationship_attribute:'.$relationship_attribute); // load relationship for the first time or on change of relationship atribute. if (empty($focus->$relationship_attribute)) { $focus->load_relationship($relationship_attribute); } //add $focus->$relationship_attribute->add($object->$child_id); } } } //Link rows returned by a report to parent record. function save_from_report($report_id,$parent_id, $module_name, $relationship_attr_name) { global $beanFiles; global $beanList; $GLOBALS['log']->debug("Save2: Linking with report output"); $GLOBALS['log']->debug("Save2:Report ID=".$report_id); $GLOBALS['log']->debug("Save2:Parent ID=".$parent_id); $GLOBALS['log']->debug("Save2:Module Name=".$module_name); $GLOBALS['log']->debug("Save2:Relationship Attribute Name=".$relationship_attr_name); $GLOBALS['log']->debug("Save2:Bean Name=" . $module_name); $focus = BeanFactory::newBean($module_name); $focus->retrieve($parent_id); $focus->load_relationship($relationship_attr_name); //fetch report definition. global $current_language, $report_modules, $modules_report; $mod_strings = return_module_language($current_language,"Reports"); $saved = new SavedReport(); $saved->disable_row_level_security = true; $saved->retrieve($report_id, false); //initiailize reports engine with the report definition. require_once('modules/Reports/SubpanelFromReports.php'); $report = new SubpanelFromReports($saved); $report->run_query(); $sql = $report->query_list[0]; $GLOBALS['log']->debug("Save2:Report Query=".$sql); $result = $report->db->query($sql); $reportBean = BeanFactory::newBean($saved->module); while($row = $report->db->fetchByAssoc($result)) { $reportBean->id = $row['primaryid']; $focus->$relationship_attr_name->add($reportBean); } } ?>