Skip to content

Commit

Permalink
Merge pull request #396 from AcclaroInc/bug/495/prevent-error-when-so…
Browse files Browse the repository at this point in the history
…urce-entry-of-order-deleted

Fix: error when source is deleted
  • Loading branch information
shnsumit authored Sep 22, 2022
2 parents a948564 + 82794f0 commit 6cc301d
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 126 deletions.
6 changes: 4 additions & 2 deletions src/assetbundles/src/js/OrderDetails.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,10 @@
if (haveDifferences(originalSourceSite, site.split(","))) return true;

// Validate Entries
$originalElementIds = $('#originalElementIds').val().split(',');
var currentElementIds = getEntryIds(false, true);
$originalElementIds = $('#originalElementIds').val();
// Check to prevent an array with empty string as value
$originalElementIds = $originalElementIds != '' ? $originalElementIds.split(',') : [];
var currentElementIds = getEntryIds(false, true);

if (haveDifferences($originalElementIds, currentElementIds)) return true;

Expand Down
10 changes: 10 additions & 0 deletions src/elements/Order.php
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,16 @@ public function getElements()
return $this->_elements;
}

/**
* Returns array of element ids for an order. Ignores elements that are deleted
*
* @return array
*/
public function getElementsId()
{
return array_keys($this->getElements());
}

/**
* User in order details settings tab entry table
*/
Expand Down
2 changes: 1 addition & 1 deletion src/services/repository/OrderRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -523,7 +523,7 @@ public function getIsSourceChanged($order): ?array
$element = Craft::$app->getElements()->getElementById($file->elementId, null, $file->sourceSite);

/** Skip in case the source entry is deleted */
if (! $element) throw new Exception('Source entry not found');
if (! $element) continue;

$wordCount = Translations::$plugin->elementTranslator->getWordCount($element);
$converter = Translations::$plugin->elementToFileConverter;
Expand Down
2 changes: 1 addition & 1 deletion src/templates/_components/_forms/order-entries-table.twig
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@
<div class="field {{ isEditable }}" data-position="left" data-colspan="1">
<div class="buttons flex">
<div class="submit">
<input type="hidden" id="originalElementIds" value="{{ order.elementIds|json_decode()|join(',') }}">
<input type="hidden" id="originalElementIds" value="{{ order.elementsId|join(',') }}">
<button type="button" class="btn add icon dashed addEntries">{{ 'Add an entry'|t }}</button>
</div>
</div>
Expand Down
246 changes: 124 additions & 122 deletions src/templates/_components/_forms/order-files-table.twig
Original file line number Diff line number Diff line change
Expand Up @@ -20,145 +20,147 @@
{% set registerDeltas = true %}
{% for file in order.files %}
{% set element = file.element(false) %}
<tr data-word-count="{{ elementWordCounts[file.elementId] }}" data-element-id="{{ file.elementId }}" class="diff-clone" data-file-id="{{ file.id }}">
{% if element is not null %}
<tr data-word-count="{{ elementWordCounts[file.elementId] }}" data-element-id="{{ file.elementId }}" class="diff-clone" data-file-id="{{ file.id }}">

<td class="thin checkbox-cell translations-checkbox-cell file">
{% if file.isInProgress or file.isComplete or file.isReviewReady or file.isPublished %}
<input class="checkbox hidden" data-element="{{ file.elementId }}" id="file-{{ file.id }}" type="checkbox" name="files[]" value="{{ file.id }}"/>
{% else %}
<input class="checkbox hidden" data-element="{{ file.elementId }}" id="file-{{ file.id }}" type="checkbox" name="files[]" value="{{ file.id }}" disabled="disabled"/>
{% endif %}
<label class="checkbox" for="file-{{ file.id }}"></label>
</td>
<td class="thin checkbox-cell translations-checkbox-cell file">
{% if file.isInProgress or file.isComplete or file.isReviewReady or file.isPublished %}
<input class="checkbox hidden" data-element="{{ file.elementId }}" id="file-{{ file.id }}" type="checkbox" name="files[]" value="{{ file.id }}"/>
{% else %}
<input class="checkbox hidden" data-element="{{ file.elementId }}" id="file-{{ file.id }}" type="checkbox" name="files[]" value="{{ file.id }}" disabled="disabled"/>
{% endif %}
<label class="checkbox" for="file-{{ file.id }}"></label>
</td>

<td>
{% if not file.hasPreview and file.isComplete %}
<table>
<tr>
<td>
<a href="{{ file.cpEditUrl }}">
{{ file.uiLabel }}
</a>
{% set sourceUpdated = file.elementId in isSourceChanged %}
{% set targetUpdated = order.trackTargetChanges and file.hasTmMisalignments and not file.isNew and not file.isModified %}
{% if canUpdateFiles and not file.isPublished and (sourceUpdated or targetUpdated) %}
<span class="warning order-warning font-size-15" data-icon="alert">
{% if sourceUpdated %}
<li> {{ 'Source entry content has been modified since order was created.' }} </li>
{% endif %}
<td>
{% if not file.hasPreview and file.isComplete %}
<table>
<tr>
<td>
<a href="{{ file.cpEditUrl }}">
{{ file.uiLabel }}
</a>
{% set sourceUpdated = file.elementId in isSourceChanged %}
{% set targetUpdated = order.trackTargetChanges and file.hasTmMisalignments and not file.isNew and not file.isModified %}
{% if canUpdateFiles and not file.isPublished and (sourceUpdated or targetUpdated) %}
<span class="warning order-warning font-size-15" data-icon="alert">
{% if sourceUpdated %}
<li> {{ 'Source entry content has been modified since order was created.' }} </li>
{% endif %}

{% if targetUpdated %}
<li> {{ 'Target entry content has been modified since order was created.' }} </li>
{% endif %}
</span>
{% endif %}
</td>
</tr>
</table>
{% else %}
<div id="{{ "filePreview-"~ file.id }}">
<div class="elements">
<div class="element small" title="{{ file.uiLabel ~" - " ~siteObjects[file.targetSite].name }}">
<div class="label" data-id="{{ file.elementId }}" data-editable="" data-site-id={{ file.targetSite }} {% if file.isComplete or element.isDraft %} data-draft-id={{ file.isComplete ? file.draftId : element.draftId }} {% endif %}>
<span class="title text-link">{{ file.uiLabel }}</span>
</div>
{% set sourceUpdated = file.elementId in isSourceChanged %}
{% set targetUpdated = order.trackTargetChanges and file.hasTmMisAlignments and not file.isNew and not file.isModified %}
{% if targetUpdated %}
<li> {{ 'Target entry content has been modified since order was created.' }} </li>
{% endif %}
</span>
{% endif %}
</td>
</tr>
</table>
{% else %}
<div id="{{ "filePreview-"~ file.id }}">
<div class="elements">
<div class="element small" title="{{ file.uiLabel ~" - " ~siteObjects[file.targetSite].name }}">
<div class="label" data-id="{{ file.elementId }}" data-editable="" data-site-id={{ file.targetSite }} {% if file.isComplete or element.isDraft %} data-draft-id={{ file.isComplete ? file.draftId : element.draftId }} {% endif %}>
<span class="title text-link">{{ file.uiLabel }}</span>
</div>
{% set sourceUpdated = file.elementId in isSourceChanged %}
{% set targetUpdated = order.trackTargetChanges and file.hasTmMisAlignments and not file.isNew and not file.isModified %}

{# Ignore target changes for api order that are completed #}
{% if not order.hasDefaultTranslator and (order.isReviewReady or order.isComplete or order.isPublished) %}
{% set targetUpdated = false %}
{% endif %}
{# Ignore target changes for api order that are completed #}
{% if not order.hasDefaultTranslator and (order.isReviewReady or order.isComplete or order.isPublished) %}
{% set targetUpdated = false %}
{% endif %}

{# Create Preview for each target entry #}
{% if file.hasPreview %}
{% set fileId = 'file_' ~ file.id %}
{# Create Preview for each target entry #}
{% if file.hasPreview %}
{% set fileId = 'file_' ~ file.id %}

<a id="{{ fileId }}" data-icon="world" title="{{ 'Visit webpage'|t }}"></a>
<a id="{{ fileId }}" data-icon="world" title="{{ 'Visit webpage'|t }}"></a>


{% js %}
new Craft.Translations.FilePreview($('#{{fileId}}'), {{ file.filePreviewSettings|json_encode|raw }});
{% endjs %}
{% endif %}
{% js %}
new Craft.Translations.FilePreview($('#{{fileId}}'), {{ file.filePreviewSettings|json_encode|raw }});
{% endjs %}
{% endif %}

{% if canUpdateFiles and not file.isPublished and (sourceUpdated or targetUpdated) %}
<span class="warning order-warning font-size-15" data-icon="alert">
{% if sourceUpdated %}
<li> {{ 'Source entry content has been modified since order was created.' }} </li>
{% endif %}
{% if canUpdateFiles and not file.isPublished and (sourceUpdated or targetUpdated) %}
<span class="warning order-warning font-size-15" data-icon="alert">
{% if sourceUpdated %}
<li> {{ 'Source entry content has been modified since order was created.' }} </li>
{% endif %}

{% if targetUpdated %}
<li> {{ 'Target entry content has been modified since order was created.' }} </li>
{% endif %}
</span>
{% endif %}
{% if targetUpdated %}
<li> {{ 'Target entry content has been modified since order was created.' }} </li>
{% endif %}
</span>
{% endif %}
</div>
</div>
</div>
</div>
{% js %}
new Craft.Translations.EntryPreview({{ file.entryPreviewSettings|json_encode|raw }});
{% endjs %}
{% endif %}
</td>
{% js %}
new Craft.Translations.EntryPreview({{ file.entryPreviewSettings|json_encode|raw }});
{% endjs %}
{% endif %}
</td>

<td>
<table>
<tr>
{% if siteObjects[file.targetSite] is defined %}
<td>
{{siteObjects[file.targetSite].name}} ({{ siteObjects[file.targetSite].language }})
</td>
{% else %}
<td style="color:red;">
{{ "Deleted" }}
</td>
{% endif %}
</tr>
</table>
</td>
<td>
<table>
<tr>
{% if siteObjects[file.targetSite] is defined %}
<td>
{{siteObjects[file.targetSite].name}} ({{ siteObjects[file.targetSite].language }})
</td>
{% else %}
<td style="color:red;">
{{ "Deleted" }}
</td>
{% endif %}
</tr>
</table>
</td>

<td>
{% if element.className == constant('acclaro\\translations\\Constants::CLASS_GLOBAL_SET') %}
{{ 'Globals' }}
{% elseif element.className == constant('acclaro\\translations\\Constants::CLASS_CATEGORY') %}
{{ 'Category' }}
{% elseif element.className == constant('acclaro\\translations\\Constants::CLASS_ASSET') %}
{{ 'Asset' }}
{% else %}
{{ element.section.name }}
{% endif %}
<td>
{% if element.className == constant('acclaro\\translations\\Constants::CLASS_GLOBAL_SET') %}
{{ 'Globals' }}
{% elseif element.className == constant('acclaro\\translations\\Constants::CLASS_CATEGORY') %}
{{ 'Category' }}
{% elseif element.className == constant('acclaro\\translations\\Constants::CLASS_ASSET') %}
{{ 'Asset' }}
{% else %}
{{ element.section.name }}
{% endif %}

</td>
</td>

<td>
<table>
<tr>
<td>
{% if file.isReviewReady or file.isComplete or file.isPublished %}
{{ file.dateDelivered ? file.dateDelivered|date('M j, Y g:i a') : '--' }}
{% else %}
{{ '--' }}
{% endif %}
</td>
</tr>
</table>
</td>
<td>
<table>
<tr>
<td>
{% if file.isReviewReady or file.isComplete or file.isPublished %}
{{ file.dateDelivered ? file.dateDelivered|date('M j, Y g:i a') : '--' }}
{% else %}
{{ '--' }}
{% endif %}
</td>
</tr>
</table>
</td>

<td>
<table>
<tr>
<td class="inline-flex align-center">
<span class="status {{ file.statusColor }}"
style="position: absolute;left: -10px;"
data-status="{{ file.hasSourceTargetDiff }}">
</span>{{ file.statusLabel }}
</td>
</tr>
</table>
</td>
<td><table><thead><th class="bg-none icon ordered desc orderable hidden"><button type="button"></button></th></thead></table></td>
</tr>
<td>
<table>
<tr>
<td class="inline-flex align-center">
<span class="status {{ file.statusColor }}"
style="position: absolute;left: -10px;"
data-status="{{ file.hasSourceTargetDiff }}">
</span>{{ file.statusLabel }}
</td>
</tr>
</table>
</td>
<td><table><thead><th class="bg-none icon ordered desc orderable hidden"><button type="button"></button></th></thead></table></td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>

0 comments on commit 6cc301d

Please sign in to comment.