/** * Checks to see if the given bean is a duplicate based off the given indexes * * @param array $indexlist * @return bool true if this bean is a duplicate or false if it isn't */ public function isADuplicateRecord($indexlist) { // Bug #51264 : Importing updates to rows prevented by duplicates check if (!empty($this->_focus) && $this->_focus instanceof SugarBean && !empty($this->_focus->id)) { $_focus = clone $this->_focus; $_focus->id = null; $_focus->retrieve($this->_focus->id); if (!empty($_focus->id)) { return false; } unset($_focus); } //lets strip the indexes of the name field in the value and leave only the index name $origIndexList = $indexlist; $indexlist = array(); $fieldlist = array(); $customIndexlist = array(); foreach ($origIndexList as $iv) { if (empty($iv)) { continue; } $field_index_array = explode('::', $iv); if ($field_index_array[0] == 'customfield') { //this is a custom field, so place in custom array $customIndexlist[] = $field_index_array[1]; } else { //this is not a custom field, so place in index list $indexlist[] = $field_index_array[0]; if (isset($field_index_array[1])) { $fieldlist[] = $field_index_array[1]; } } } //if full_name is set, then manually search on the first and last name fields before iterating through rest of fields //this is a special handling of the name fields on people objects, the rest of the fields are checked individually if (in_array('full_name', $indexlist)) { $newfocus = loadBean($this->_focus->module_dir); $result = $newfocus->retrieve_by_string_fields(array('deleted' => '0', 'first_name' => $this->_focus->first_name, 'last_name' => $this->_focus->last_name), true); if (!is_null($result)) { //set dupe field to full_name and name fields $this->_dupedFields[] = 'full_name'; $this->_dupedFields[] = 'first_name'; $this->_dupedFields[] = 'last_name'; } } // loop through var def indexes and compare with selected indexes foreach ($this->_getIndexVardefs() as $index) { // if we get an index not in the indexlist, loop if (!in_array($index['name'], $indexlist)) { continue; } // This handles the special case of duplicate email checking if ($index['name'] == 'special_idx_email1' || $index['name'] == 'special_idx_email2') { $emailAddress = new SugarEmailAddress(); $email = $index['fields'][0]; if ($emailAddress->getCountEmailAddressByBean($this->_focus->{$email}, $this->_focus, $index['name'] == 'special_idx_email1') > 0) { foreach ($index['fields'] as $field) { if ($field != 'deleted') { $this->_dupedFields[] = $field; } } } } elseif (isset($index['dupeCheckFunction'])) { $functionName = substr_replace($index['dupeCheckFunction'], '', 0, 9); if (method_exists($this->_focus, $functionName) && $this->_focus->{$functionName}($index) === true) { return $this->_focus->{$functionName}($index); } } else { $index_fields = array('deleted' => '0'); //search only for the field we have selected foreach ($index['fields'] as $field) { if ($field == 'deleted' || !in_array($field, $fieldlist)) { continue; } if (!in_array($field, $index_fields)) { if (isset($this->_focus->{$field}) && strlen($this->_focus->{$field}) > 0) { $index_fields[$field] = $this->_focus->{$field}; } } } // if there are no valid fields in the index field list, loop if (count($index_fields) <= 1) { continue; } $newfocus = loadBean($this->_focus->module_dir); $result = $newfocus->retrieve_by_string_fields($index_fields, true); if (!is_null($result)) { //remove deleted as a duped field unset($index_fields['deleted']); //create string based on array of dupe fields $this->_dupedFields = array_merge(array_keys($index_fields), $this->_dupedFields); } } } //return true if any dupes were found if (!empty($this->_dupedFields)) { return true; } return false; }
/** * Checks to see if the given bean is a duplicate based off the given indexes * * @param array $indexlist * @return bool true if this bean is a duplicate or false if it isn't */ public function isADuplicateRecord($indexlist) { // loop through var def indexes and compare with selected indexes foreach ($this->_getIndexVardefs() as $index) { // if we get an index not in the indexlist, loop if (!in_array($index['name'], $indexlist)) { continue; } // This handles the special case of duplicate email checking if ($index['name'] == 'special_idx_email1' || $index['name'] == 'special_idx_email2') { $emailAddress = new SugarEmailAddress(); $email = $index['fields'][0]; if ($emailAddress->getCountEmailAddressByBean($this->_focus->{$email}, $this->_focus, $index['name'] == 'special_idx_email1') > 0) { return true; } } else { $index_fields = array('deleted' => '0'); foreach ($index['fields'] as $field) { if ($field == 'deleted') { continue; } if (!in_array($field, $index_fields)) { if (strlen($this->_focus->{$field}) > 0) { $index_fields[$field] = $this->_focus->{$field}; } } } // if there are no valid fields in the index field list, loop if (count($index_fields) <= 1) { continue; } $newfocus = loadBean($this->_focus->module_dir); $result = $newfocus->retrieve_by_string_fields($index_fields, true); if (!is_null($result)) { return true; } } } return false; }