fix: [metaTemplate] Various fixed on meta-templates updates
parent
86946719c7
commit
a98c7f8f32
|
@ -10,6 +10,8 @@ use Cake\ORM\TableRegistry;
|
|||
use \Cake\Database\Expression\QueryExpression;
|
||||
use Cake\Http\Exception\NotFoundException;
|
||||
use Cake\Http\Exception\MethodNotAllowedException;
|
||||
use Cake\Routing\Router;
|
||||
|
||||
|
||||
class MetaTemplatesController extends AppController
|
||||
{
|
||||
|
@ -17,50 +19,6 @@ class MetaTemplatesController extends AppController
|
|||
public $filterFields = ['name', 'uuid', 'scope', 'namespace'];
|
||||
public $containFields = ['MetaTemplateFields'];
|
||||
|
||||
// public function update($template_uuid=null)
|
||||
// {
|
||||
// $metaTemplate = false;
|
||||
// if (!is_null($template_uuid)) {
|
||||
// $metaTemplate = $this->MetaTemplates->find()->where([
|
||||
// 'uuid' => $template_uuid
|
||||
// ])->first();
|
||||
// if (empty($metaTemplate)) {
|
||||
// throw new NotFoundException(__('Invalid {0}.', $this->MetaTemplates->getAlias()));
|
||||
// }
|
||||
// }
|
||||
// if ($this->request->is('post')) {
|
||||
// $updateStrategy = $this->request->getData('update_strategy', null);
|
||||
// $result = $this->MetaTemplates->update($template_uuid, $updateStrategy);
|
||||
// if ($this->ParamHandler->isRest()) {
|
||||
// return $this->RestResponse->viewData($result, 'json');
|
||||
// } else {
|
||||
// if ($result['success']) {
|
||||
// $message = __n('{0} templates updated.', 'The template has been updated.', empty($template_uuid), $result['files_processed']);
|
||||
// } else {
|
||||
// $message = __n('{0} templates could not be updated.', 'The template could not be updated.', empty($template_uuid), $result['files_processed']);
|
||||
// }
|
||||
// $this->CRUD->setResponseForController('update', $result['success'], $message, $result['files_processed'], $result['update_errors'], ['redirect' => $this->referer()]);
|
||||
// $responsePayload = $this->CRUD->getResponsePayload();
|
||||
// if (!empty($responsePayload)) {
|
||||
// return $responsePayload;
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// if (!$this->ParamHandler->isRest()) {
|
||||
// if (!is_null($template_uuid)) {
|
||||
// $this->set('metaTemplate', $metaTemplate);
|
||||
// $this->setUpdateStatus($metaTemplate->id);
|
||||
// } else {
|
||||
// $this->set('title', __('Update Meta Templates'));
|
||||
// $this->set('question', __('Are you sure you wish to update the Meta Template definitions'));
|
||||
// $templatesUpdateStatus = $this->MetaTemplates->getUpdateStatusForTemplates();
|
||||
// $this->set('templatesUpdateStatus', $templatesUpdateStatus);
|
||||
// $this->render('updateAll');
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
public function updateAllTemplates()
|
||||
{
|
||||
if ($this->request->is('post')) {
|
||||
|
@ -180,10 +138,12 @@ class MetaTemplatesController extends AppController
|
|||
{
|
||||
$metaTemplate = $this->MetaTemplates->get($template_id);
|
||||
$newestMetaTemplate = $this->MetaTemplates->getNewestVersion($metaTemplate);
|
||||
$entities = $this->MetaTemplates->getEntitiesHavingMetaFieldsFromTemplate($template_id);
|
||||
$amountOfEntitiesToUpdate = 0;
|
||||
$entities = $this->MetaTemplates->getEntitiesHavingMetaFieldsFromTemplate($template_id, 10, $amountOfEntitiesToUpdate);
|
||||
$this->set('metaTemplate', $metaTemplate);
|
||||
$this->set('newestMetaTemplate', $newestMetaTemplate);
|
||||
$this->set('entities', $entities);
|
||||
$this->set('amountOfEntitiesToUpdate', $amountOfEntitiesToUpdate);
|
||||
}
|
||||
|
||||
public function migrateOldMetaTemplateToNewestVersionForEntity($template_id, $entity_id)
|
||||
|
@ -232,9 +192,12 @@ class MetaTemplatesController extends AppController
|
|||
$message,
|
||||
$savedData,
|
||||
[],
|
||||
['redirect' => [
|
||||
'controller' => $className,
|
||||
'action' => 'view', $entity_id]
|
||||
[
|
||||
'redirect' => [
|
||||
'controller' => $className,
|
||||
'action' => 'view', $entity_id,
|
||||
'url' => Router::url(['controller' => $className, 'action' => 'view', $entity_id])
|
||||
]
|
||||
]
|
||||
);
|
||||
$responsePayload = $this->CRUD->getResponsePayload();
|
||||
|
@ -242,7 +205,7 @@ class MetaTemplatesController extends AppController
|
|||
return $responsePayload;
|
||||
}
|
||||
}
|
||||
$conflicts = $this->MetaTemplates->getMetaTemplateConflictsForMetaTemplate($metaTemplate, $newestMetaTemplate);
|
||||
$conflicts = $this->MetaTemplates->getMetaFieldsConflictsUnderTemplate($entity->meta_fields, $newestMetaTemplate);
|
||||
foreach ($conflicts as $conflict) {
|
||||
if (!empty($conflict['existing_meta_template_field'])) {
|
||||
$existingMetaTemplateField = $conflict['existing_meta_template_field'];
|
||||
|
@ -257,7 +220,7 @@ class MetaTemplatesController extends AppController
|
|||
if (!empty($conflicts[$metaTemplateField->field]['conflicts'])) {
|
||||
continue;
|
||||
}
|
||||
foreach ($newestMetaTemplate->meta_template_fields as $newMetaTemplateField) {
|
||||
foreach ($newestMetaTemplate->meta_template_fields as $i => $newMetaTemplateField) {
|
||||
if ($metaTemplateField->field == $newMetaTemplateField->field && empty($newMetaTemplateField->metaFields)) {
|
||||
$movedMetaTemplateFields[] = $metaTemplateField->id;
|
||||
$copiedMetaFields = array_map(function ($e) use ($newMetaTemplateField) {
|
||||
|
@ -298,14 +261,12 @@ class MetaTemplatesController extends AppController
|
|||
]
|
||||
],
|
||||
'contain' => $this->containFields,
|
||||
'afterFind' => function($data) use ($templatesUpdateStatus) {
|
||||
foreach ($data as $i => $metaTemplate) {
|
||||
if (!empty($templatesUpdateStatus[$metaTemplate->uuid])) {
|
||||
$templateStatus = $this->MetaTemplates->getStatusForMetaTemplate($templatesUpdateStatus[$metaTemplate->uuid]['template'], $metaTemplate);
|
||||
$metaTemplate->set('updateStatus', $this->MetaTemplates->computeFullUpdateStatusForMetaTemplate($templateStatus, $metaTemplate));
|
||||
}
|
||||
'afterFind' => function($metaTemplate) use ($templatesUpdateStatus) {
|
||||
if (!empty($templatesUpdateStatus[$metaTemplate->uuid])) {
|
||||
$templateStatus = $this->MetaTemplates->getStatusForMetaTemplate($templatesUpdateStatus[$metaTemplate->uuid]['template'], $metaTemplate);
|
||||
$metaTemplate->set('updateStatus', $this->MetaTemplates->computeFullUpdateStatusForMetaTemplate($templateStatus, $metaTemplate));
|
||||
}
|
||||
return $data;
|
||||
return $metaTemplate;
|
||||
}
|
||||
]);
|
||||
$responsePayload = $this->CRUD->getResponsePayload();
|
||||
|
|
|
@ -595,9 +595,10 @@ class MetaTemplatesTable extends AppTable
|
|||
* Collect all enties having meta-fields belonging to the provided template
|
||||
*
|
||||
* @param integer $template_id
|
||||
* @param integer|bool $limit The limit of entities to be returned. Pass null to be ignore the limit
|
||||
* @return array List of entities
|
||||
*/
|
||||
public function getEntitiesHavingMetaFieldsFromTemplate(int $metaTemplateId): array
|
||||
public function getEntitiesHavingMetaFieldsFromTemplate(int $metaTemplateId, $limit=10, int &$totalAmount=0): array
|
||||
{
|
||||
$metaTemplate = $this->get($metaTemplateId);
|
||||
$queryParentEntities = $this->MetaTemplateFields->MetaFields->find();
|
||||
|
@ -618,6 +619,10 @@ class MetaTemplatesTable extends AppTable
|
|||
]
|
||||
]
|
||||
]);
|
||||
if (!is_null($limit)) {
|
||||
$totalAmount = $entityQuery->all()->count();
|
||||
$entityQuery->limit($limit);
|
||||
}
|
||||
$entities = $entityQuery->all()->toList();
|
||||
return $entities;
|
||||
}
|
||||
|
@ -876,7 +881,7 @@ class MetaTemplatesTable extends AppTable
|
|||
$this->updateMetaTemplate($metaTemplate, $template, $errors);
|
||||
return !empty($errors) ? $errors[0] : true;
|
||||
}
|
||||
$entities = $this->getEntitiesHavingMetaFieldsFromTemplate($metaTemplate->id);
|
||||
$entities = $this->getEntitiesHavingMetaFieldsFromTemplate($metaTemplate->id, null);
|
||||
|
||||
$conflictingEntities = [];
|
||||
foreach ($entities as $entity) {
|
||||
|
@ -935,7 +940,7 @@ class MetaTemplatesTable extends AppTable
|
|||
$this->updateMetaTemplate($metaTemplate, $template, $errors);
|
||||
return !empty($errors) ? $errors[0] : true;
|
||||
}
|
||||
$entities = $this->getEntitiesHavingMetaFieldsFromTemplate($metaTemplate->id);
|
||||
$entities = $this->getEntitiesHavingMetaFieldsFromTemplate($metaTemplate->id, null);
|
||||
|
||||
foreach ($entities as $entity) {
|
||||
$conflicts = $this->getMetaFieldsConflictsUnderTemplate($entity['meta_fields'], $template);
|
||||
|
@ -1002,11 +1007,18 @@ class MetaTemplatesTable extends AppTable
|
|||
*/
|
||||
public function getMetaFieldsConflictsUnderTemplate(array $metaFields, $template): array
|
||||
{
|
||||
if (!is_array($template) && get_class($template) == 'App\Model\Entity\MetaTemplate') {
|
||||
$metaTemplateFields = $template->meta_template_fields;
|
||||
$existingMetaTemplate = true;
|
||||
} else {
|
||||
$metaTemplateFields = $template['metaFields'];
|
||||
}
|
||||
$conflicting = [];
|
||||
$metaTemplateFieldByName = [];
|
||||
$existingMetaTemplate = !is_array($template);
|
||||
$metaTemplateFields = !$existingMetaTemplate ? $template['metaFields'] : $template->meta_template_fields;
|
||||
foreach ($metaTemplateFields as $metaTemplateField) {
|
||||
if (!is_array($template)) {
|
||||
$metaTemplateField = $metaTemplateField->toArray();
|
||||
}
|
||||
$metaTemplateFieldByName[$metaTemplateField['field']] = $this->MetaTemplateFields->newEntity($metaTemplateField);
|
||||
}
|
||||
foreach ($metaFields as $metaField) {
|
||||
|
@ -1026,7 +1038,7 @@ class MetaTemplatesTable extends AppTable
|
|||
|
||||
/**
|
||||
* Compute the potential conflict that would be introduced by updating an existing meta-template-field with the provided one.
|
||||
* This will go through all instanciation of the existing meta-template-field and checking their validaty against the provided one.
|
||||
* This will go through all instanciation of the existing meta-template-field and checking their validity against the provided one.
|
||||
*
|
||||
* @param \App\Model\Entity\MetaTemplateField $metaTemplateField
|
||||
* @param array $templateField
|
||||
|
|
|
@ -28,6 +28,9 @@ foreach ($entities as $entity) {
|
|||
__('has {0} meta-fields to update', count($entity->meta_fields))
|
||||
);
|
||||
}
|
||||
if ($amountOfEntitiesToUpdate > 0) {
|
||||
$bodyHtml .= sprintf('<li class="list-inline-item fw-light fs-7">%s</li>', __('{0} more entities', h($amountOfEntitiesToUpdate)));
|
||||
}
|
||||
$bodyHtml .= '</ul>';
|
||||
|
||||
echo $this->Bootstrap->modal([
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
<?
|
||||
<?php
|
||||
|
||||
use Cake\Utility\Inflector;
|
||||
use Cake\Routing\Router;
|
||||
?>
|
||||
<h3><?= h($oldMetaTemplate->name) ?></h3>
|
||||
<div class="container-fluid">
|
||||
|
@ -7,7 +9,13 @@
|
|||
<div class="col">
|
||||
<div class="panel">
|
||||
<h4 class="d-flex justify-content-between align-items-center">
|
||||
<?= __('Version {0}', h($oldMetaTemplate->version)) ?>
|
||||
<?php
|
||||
$url = Router::url([
|
||||
'action' => 'view',
|
||||
$oldMetaTemplate->id
|
||||
]);
|
||||
?>
|
||||
<a href="<?= $url ?>" class="text-decoration-none" target="__blank"><?= __('Version {0}', h($oldMetaTemplate->version)) ?></a>
|
||||
<?=
|
||||
$this->Bootstrap->badge([
|
||||
'text' => __('Data to be migrated over'),
|
||||
|
@ -32,7 +40,13 @@
|
|||
<div class="col">
|
||||
<div class="panel">
|
||||
<h4 class="d-flex justify-content-between align-items-center">
|
||||
<?= __('Version {0}', h($newMetaTemplate->version)) ?>
|
||||
<?php
|
||||
$url = Router::url([
|
||||
'action' => 'view',
|
||||
$newMetaTemplate->id
|
||||
]);
|
||||
?>
|
||||
<a href="<?= $url ?>" class="text-decoration-none" target="__blank"><?= __('Version {0}', h($newMetaTemplate->version)) ?></a>
|
||||
<?=
|
||||
$this->Bootstrap->badge([
|
||||
'text' => __('Data to be saved'),
|
||||
|
@ -86,7 +100,10 @@ echo $this->Html->scriptBlock(sprintf(
|
|||
function submitMigration() {
|
||||
const $form = $('.to-save-container form')
|
||||
console.log($form.attr('action'));
|
||||
AJAXApi.quickPostForm($form[0])
|
||||
// $form.submit()
|
||||
AJAXApi.quickPostForm($form[0]).then((postResult) => {
|
||||
if (postResult.additionalData.redirect.url !== undefined) {
|
||||
window.location = postResult.additionalData.redirect.url
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
|
@ -30,9 +30,13 @@ foreach ($metaTemplate->meta_template_fields as $metaTemplateField) {
|
|||
} else {
|
||||
$metaField = reset($metaTemplateField->metaFields);
|
||||
$fieldData = [
|
||||
'field' => sprintf('MetaTemplates.%s.meta_template_fields.%s.metaFields.%s.value', $metaField->meta_template_id, $metaField->meta_template_field_id, $metaField->id),
|
||||
'label' => $metaTemplateField->label,
|
||||
];
|
||||
if (isset($metaField->id)) {
|
||||
$fieldData['field'] = sprintf('MetaTemplates.%s.meta_template_fields.%s.metaFields.%s.value', $metaField->meta_template_id, $metaField->meta_template_field_id, $metaField->id);
|
||||
} else {
|
||||
$fieldData['field'] = sprintf('MetaTemplates.%s.meta_template_fields.%s.metaFields.%s.value', $metaField->meta_template_id, $metaField->meta_template_field_id, array_key_first($metaTemplateField->metaFields));
|
||||
}
|
||||
$this->Form->setTemplates($backupTemplates);
|
||||
$fieldsHtml .= $this->element(
|
||||
'genericElements/Form/fieldScaffold',
|
||||
|
|
Loading…
Reference in New Issue