chg: [metaTemplates:computeConflicts] Usage of subqueries instead of array of IDs

pull/93/head
Sami Mokaddem 2022-03-01 11:32:30 +01:00
parent 134b7bfc3e
commit a78864912e
No known key found for this signature in database
GPG Key ID: 164C473F627A06FA
1 changed files with 29 additions and 34 deletions

View File

@ -992,7 +992,7 @@ class MetaTemplatesTable extends AppTable
* @param array $templateField
* @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 = [
'automatically-updateable' => true,
@ -1021,22 +1021,18 @@ class MetaTemplatesTable extends AppTable
}
}
if (!empty($templateField['regex']) && $templateField['regex'] != $metaTemplateField->regex) {
$query = $this->MetaTemplateFields->MetaFields->find();
$query
$entitiesWithMetaFieldQuery = $this->MetaTemplateFields->MetaFields->find();
$entitiesWithMetaFieldQuery
->enableHydration(false)
->select([
'parent_id',
'scope',
'meta_template_field_id',
])
->where([
'meta_template_field_id' => $metaTemplateField->id,
]);
$entitiesWithMetaField = $query->all()->toList();
if (!empty($entitiesWithMetaField)) {
$entitiesTable = $this->getTableForMetaTemplateScope($entitiesWithMetaField[0]['scope']);
$entitiesTable = $this->getTableForMetaTemplateScope($scope);
$entities = $entitiesTable->find()
->where(['id IN' => Hash::extract($entitiesWithMetaField, '{n}.parent_id')])
->where(['id IN' => $entitiesWithMetaFieldQuery])
->contain([
'MetaFields' => [
'conditions' => [
@ -1062,8 +1058,7 @@ class MetaTemplatesTable extends AppTable
if (!empty($conflictingEntities)) {
$result['automatically-updateable'] = $result['automatically-updateable'] && false;
$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;
@ -1091,7 +1086,7 @@ class MetaTemplatesTable extends AppTable
if ($newMetaField['field'] == $metaField->field) {
unset($existingMetaTemplateFields[$metaField->field]);
$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']) {
$conflicts[$metaField->field] = $templateConflictsForMetaField;
$conflicts[$metaField->field]['existing_meta_template_field'] = $metaField;