Skip to content

Commit

Permalink
Merge pull request #24 from TheDMSGroup/ENG-177
Browse files Browse the repository at this point in the history
[ENG-177] fix when saving new leads and no fields array exists
  • Loading branch information
heathdutton authored Mar 29, 2018
2 parents 1675e21 + 6b36060 commit ee44d34
Showing 1 changed file with 42 additions and 53 deletions.
95 changes: 42 additions & 53 deletions Entity/ExtendedFieldRepositoryTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -223,49 +223,40 @@ public function saveExtendedEntity($entity, $flush = true)
$this->getEntityManager()->flush($entity);
}

// Includes prefix
$fields = $entity->getUpdatedFields();
$table = $this->getEntityManager()->getClassMetadata(
$this->getClassName()
)->getTableName();

// Get Extended Fields to separate from standard Update statement.
$extendedFields = [];
$entityConfig = $entity->getFields();
foreach ($fields as $fieldname => $formData) {
foreach ($entityConfig as $group) {
if (isset($group[$fieldname]) && isset($group[$fieldname]['object']) && false !== strpos(
$group[$fieldname]['object'],
'extendedField'
)) {
$extendedFields[$fieldname]['value'] = $formData;
$extendedFields[$fieldname]['type'] = $group[$fieldname]['type'];
$extendedFields[$fieldname]['id'] = $group[$fieldname]['id'];
$extendedFields[$fieldname]['name'] = $fieldname;
$extendedFields[$fieldname]['secure'] = false !== strpos(
$group[$fieldname]['object'],
'Secure'
) ? true : false;
unset($fields[$fieldname]);
break;
}
}
}

// Get updated fields, and include changes so that we have everything.
$fields = $entity->getUpdatedFields();
$changes = [];
if (method_exists($entity, 'getChanges')) {
$changes = $entity->getChanges();

// remove the fields that are part of changes as they were already saved via a setter
$fields = array_diff_key($fields, $changes);
// Overriden to check a deeper recursion in changes since fields may already have been saved that
// are not company fields, IE - extended fields and extended fields secure
if (isset($changes['fields'])) {
$fields = array_diff_key($fields, $changes['fields']);
}

// Get Extended Fields to separate from standard Update statement.
$extendedFields = [];
$fieldList = $this->getCustomFieldList('lead');
foreach ($fields as $fieldname => $value) {
if (
$fieldList[0][$fieldname]['object'] == 'extendedField'
|| $fieldList[0][$fieldname]['object'] == 'extendedFieldSecure'
) {
$extendedFields[$fieldname]['value'] = $value;
$extendedFields[$fieldname]['type'] = $fieldList[0][$fieldname]['type'];
$extendedFields[$fieldname]['id'] = $fieldList[0][$fieldname]['id'];
$extendedFields[$fieldname]['name'] = $fieldname;
$extendedFields[$fieldname]['secure'] = $fieldList[0][$fieldname]['object'] == 'extendedFieldSecure' ? true : false;
unset($fields[$fieldname]);
// I'm leaving this in here, commented out, as a life lesson :)
// break;
}
}

// Save standard/core fields.
if (!empty($fields)) {
$table = $this->getEntityManager()->getClassMetadata(
$this->getClassName()
)->getTableName();
$this->prepareDbalFieldsForSave($fields);
$this->getEntityManager()->getConnection()->update(
$table,
Expand All @@ -286,36 +277,36 @@ public function saveExtendedEntity($entity, $flush = true)
$extendedTable = 'lead_fields_leads_'.$dataType.($values['secure'] ? '_secure' : '').'_xref';
$this->prepareDbalFieldsForSave($column);

// insert (no pre-existing value per lead) or update

if (
isset($changes['fields'])
&& !empty($changes['fields'][$values['name']][0])
&& empty($changes['fields'][$values['name']][1])) {
// need to delete the row from db table because new value is empty
$lead_id = $entity->getId();
$column = [
'lead_field_id' => $values['id'],
'lead_id' => $lead_id,
];
$this->getEntityManager()->getConnection()->delete(
&& isset($changes['fields'][$values['name']])
&& is_null($changes['fields'][$values['name']][0])
&& !empty($changes['fields'][$values['name']][1])
) {
// Need to do an insert, no previous value for this lead id
$column['lead_id'] = $entity->getId();
$this->getEntityManager()->getConnection()->insert(
$extendedTable,
$column
);
} else {
if (
isset($changes['fields'])
&& isset($changes['fields'][$values['name']])
&& isset($changes['fields'][$values['name']][0])
&& $changes['fields'][$values['name']][0] === null
&& !empty($changes['fields'][$values['name']][1])) {
// need to do an insert, no previous value for this lead id
$column['lead_id'] = $entity->getId();
$this->getEntityManager()->getConnection()->insert(
&& !empty($changes['fields'][$values['name']][0])
&& empty($changes['fields'][$values['name']][1])
) {
// Need to delete the row from db table because new value is empty
$lead_id = $entity->getId();
$column = [
'lead_field_id' => $values['id'],
'lead_id' => $lead_id,
];
$this->getEntityManager()->getConnection()->delete(
$extendedTable,
$column
);
} else {
// Update the lead.
$this->getEntityManager()->getConnection()->update(
$extendedTable,
$column,
Expand All @@ -338,8 +329,6 @@ public function saveExtendedEntity($entity, $flush = true)
* @param null $resultsCallback
*
* @return array
*
* @throws \Doctrine\DBAL\DBALException
*/
public function getEntitiesWithCustomFields(
$object,
Expand Down

0 comments on commit ee44d34

Please sign in to comment.