View source
<?php
namespace Drupal\lingotek\Element;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Render\Element\RenderElement;
use Drupal\Core\Url;
use Drupal\lingotek\Lingotek;
class LingotekSourceStatus extends RenderElement {
public function getInfo() {
return [
'#pre_render' => [
[
$this,
'preRender',
],
],
'#theme' => 'lingotek_source_status',
'#attached' => [
'library' => [
'lingotek/lingotek',
],
],
'#cache' => [
'max-age' => 0,
],
];
}
public function preRender(array $element) {
$element['#url'] = $this
->getSourceActionUrl($element['#entity'], $element['#status']);
$element['#status_title'] = $this
->getSourceStatusText($element['#entity'], $element['#status']);
return $element;
}
protected function getSourceActionUrl(ContentEntityInterface &$entity, $source_status) {
$url = NULL;
if ($source_status == Lingotek::STATUS_IMPORTING) {
$url = Url::fromRoute('lingotek.entity.check_upload', [
'doc_id' => \Drupal::service('lingotek.content_translation')
->getDocumentId($entity),
], [
'query' => $this
->getDestinationWithQueryArray(),
]);
}
if ($source_status == Lingotek::STATUS_EDITED || $source_status == Lingotek::STATUS_UNTRACKED || $source_status == Lingotek::STATUS_ERROR || $source_status == Lingotek::STATUS_CANCELLED) {
if ($doc_id = \Drupal::service('lingotek.content_translation')
->getDocumentId($entity)) {
$url = Url::fromRoute('lingotek.entity.update', [
'doc_id' => $doc_id,
], [
'query' => $this
->getDestinationWithQueryArray(),
]);
}
else {
$url = Url::fromRoute('lingotek.entity.upload', [
'entity_type' => $entity
->getEntityTypeId(),
'entity_id' => $entity
->id(),
], [
'query' => $this
->getDestinationWithQueryArray(),
]);
}
}
return $url;
}
protected function getSourceStatusText(ContentEntityInterface $entity, $source_status) {
switch ($source_status) {
case Lingotek::STATUS_UNTRACKED:
case Lingotek::STATUS_REQUEST:
return t('Upload');
case Lingotek::STATUS_DISABLED:
return t('Disabled, cannot request translation');
case Lingotek::STATUS_EDITED:
return \Drupal::service('lingotek.content_translation')
->getDocumentId($entity) ? t('Re-upload (content has changed since last upload)') : t('Upload');
case Lingotek::STATUS_IMPORTING:
return t('Source importing');
case Lingotek::STATUS_CURRENT:
return t('Source uploaded');
case Lingotek::STATUS_ERROR:
return t('Error');
case Lingotek::STATUS_CANCELLED:
return $this
->t('Cancelled by user');
default:
return ucfirst(strtolower($source_status));
}
}
protected function getDestinationWithQueryArray() {
return [
'destination' => \Drupal::request()
->getRequestUri(),
];
}
}