chg: [metaTemplates:computeConflicts] Usage of subqueries instead of array of IDs
parent
134b7bfc3e
commit
a78864912e
|
@ -992,7 +992,7 @@ class MetaTemplatesTable extends AppTable
|
||||||
* @param array $templateField
|
* @param array $templateField
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function computeExistingMetaTemplateFieldConflictForMetaTemplateField(\App\Model\Entity\MetaTemplateField $metaTemplateField, array $templateField): array
|
public function computeExistingMetaTemplateFieldConflictForMetaTemplateField(\App\Model\Entity\MetaTemplateField $metaTemplateField, array $templateField, string $scope): array
|
||||||
{
|
{
|
||||||
$result = [
|
$result = [
|
||||||
'automatically-updateable' => true,
|
'automatically-updateable' => true,
|
||||||
|
@ -1021,49 +1021,44 @@ class MetaTemplatesTable extends AppTable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!empty($templateField['regex']) && $templateField['regex'] != $metaTemplateField->regex) {
|
if (!empty($templateField['regex']) && $templateField['regex'] != $metaTemplateField->regex) {
|
||||||
$query = $this->MetaTemplateFields->MetaFields->find();
|
$entitiesWithMetaFieldQuery = $this->MetaTemplateFields->MetaFields->find();
|
||||||
$query
|
$entitiesWithMetaFieldQuery
|
||||||
->enableHydration(false)
|
->enableHydration(false)
|
||||||
->select([
|
->select([
|
||||||
'parent_id',
|
'parent_id',
|
||||||
'scope',
|
|
||||||
'meta_template_field_id',
|
|
||||||
])
|
])
|
||||||
->where([
|
->where([
|
||||||
'meta_template_field_id' => $metaTemplateField->id,
|
'meta_template_field_id' => $metaTemplateField->id,
|
||||||
]);
|
]);
|
||||||
$entitiesWithMetaField = $query->all()->toList();
|
$entitiesTable = $this->getTableForMetaTemplateScope($scope);
|
||||||
if (!empty($entitiesWithMetaField)) {
|
$entities = $entitiesTable->find()
|
||||||
$entitiesTable = $this->getTableForMetaTemplateScope($entitiesWithMetaField[0]['scope']);
|
->where(['id IN' => $entitiesWithMetaFieldQuery])
|
||||||
$entities = $entitiesTable->find()
|
->contain([
|
||||||
->where(['id IN' => Hash::extract($entitiesWithMetaField, '{n}.parent_id')])
|
'MetaFields' => [
|
||||||
->contain([
|
'conditions' => [
|
||||||
'MetaFields' => [
|
'MetaFields.meta_template_field_id' => $metaTemplateField->id
|
||||||
'conditions' => [
|
|
||||||
'MetaFields.meta_template_field_id' => $metaTemplateField->id
|
|
||||||
]
|
|
||||||
]
|
]
|
||||||
])
|
]
|
||||||
->all()->toList();
|
])
|
||||||
$conflictingEntities = [];
|
->all()->toList();
|
||||||
foreach ($entities as $entity) {
|
$conflictingEntities = [];
|
||||||
foreach ($entity['meta_fields'] as $metaField) {
|
foreach ($entities as $entity) {
|
||||||
$isValid = $this->MetaTemplateFields->MetaFields->isValidMetaFieldForMetaTemplateField(
|
foreach ($entity['meta_fields'] as $metaField) {
|
||||||
$metaField->value,
|
$isValid = $this->MetaTemplateFields->MetaFields->isValidMetaFieldForMetaTemplateField(
|
||||||
$templateField
|
$metaField->value,
|
||||||
);
|
$templateField
|
||||||
if ($isValid !== true) {
|
);
|
||||||
$conflictingEntities[] = $entity->id;
|
if ($isValid !== true) {
|
||||||
break;
|
$conflictingEntities[] = $entity->id;
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($conflictingEntities)) {
|
if (!empty($conflictingEntities)) {
|
||||||
$result['automatically-updateable'] = $result['automatically-updateable'] && false;
|
$result['automatically-updateable'] = $result['automatically-updateable'] && false;
|
||||||
$result['conflicts'][] = __('This field is instantiated with values not passing the validation anymore');
|
$result['conflicts'][] = __('This field is instantiated with values not passing the validation anymore');
|
||||||
$result['conflictingEntities'] = $conflictingEntities;
|
$result['conflictingEntities'] = array_merge($result['conflictingEntities'], $conflictingEntities);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $result;
|
return $result;
|
||||||
|
@ -1091,7 +1086,7 @@ class MetaTemplatesTable extends AppTable
|
||||||
if ($newMetaField['field'] == $metaField->field) {
|
if ($newMetaField['field'] == $metaField->field) {
|
||||||
unset($existingMetaTemplateFields[$metaField->field]);
|
unset($existingMetaTemplateFields[$metaField->field]);
|
||||||
$metaFieldArray = !is_array($newMetaField) && get_class($newMetaField) == 'App\Model\Entity\MetaTemplateField' ? $newMetaField->toArray() : $newMetaField;
|
$metaFieldArray = !is_array($newMetaField) && get_class($newMetaField) == 'App\Model\Entity\MetaTemplateField' ? $newMetaField->toArray() : $newMetaField;
|
||||||
$templateConflictsForMetaField = $this->computeExistingMetaTemplateFieldConflictForMetaTemplateField($metaField, $metaFieldArray);
|
$templateConflictsForMetaField = $this->computeExistingMetaTemplateFieldConflictForMetaTemplateField($metaField, $metaFieldArray, $metaTemplate->scope);
|
||||||
if (!$templateConflictsForMetaField['automatically-updateable']) {
|
if (!$templateConflictsForMetaField['automatically-updateable']) {
|
||||||
$conflicts[$metaField->field] = $templateConflictsForMetaField;
|
$conflicts[$metaField->field] = $templateConflictsForMetaField;
|
||||||
$conflicts[$metaField->field]['existing_meta_template_field'] = $metaField;
|
$conflicts[$metaField->field]['existing_meta_template_field'] = $metaField;
|
||||||
|
|
Loading…
Reference in New Issue