public function LingotekApi::addContentDocument in Lingotek Translation 7.6
Same name and namespace in other branches
- 7.7 lib/Drupal/lingotek/LingotekApi.php \LingotekApi::addContentDocument()
- 7.2 lib/Drupal/lingotek/LingotekApi.php \LingotekApi::addContentDocument()
- 7.3 lib/Drupal/lingotek/LingotekApi.php \LingotekApi::addContentDocument()
- 7.4 lib/Drupal/lingotek/LingotekApi.php \LingotekApi::addContentDocument()
- 7.5 lib/Drupal/lingotek/LingotekApi.php \LingotekApi::addContentDocument()
Add a document to the Lingotek platform.
Uploads the translatable object's content in the selected language.
Parameters
object $translatable_object: A Drupal node object or lingotek ConfigChunk object
File
- lib/
Drupal/ lingotek/ LingotekApi.php, line 68 - Defines Drupal\lingotek\LingotekApi
Class
- LingotekApi
- @file Defines Drupal\lingotek\LingotekApi
Code
public function addContentDocument(LingotekTranslatableEntity $translatable_object, $with_targets = FALSE) {
$success = FALSE;
$project_id = $translatable_object
->getProjectId();
$source_language = $translatable_object
->getSourceLocale();
if (empty($source_language)) {
drupal_set_message('Some entities not uploaded because the source language was language neutral.', 'warning', FALSE);
LingotekLog::warning('Document @docname not uploaded. Language was language neutral.', array(
'@docname' => $translatable_object
->getDocumentName(),
));
return FALSE;
}
if ($project_id) {
$parameters = array(
'projectId' => $project_id,
'format' => $this
->xmlFormat(),
'sourceLanguage' => $source_language,
'tmVaultId' => $translatable_object
->getVaultId(),
);
$parameters['documentName'] = $translatable_object
->getDocumentName();
$parameters['documentDesc'] = $translatable_object
->getDescription();
$parameters['content'] = $translatable_object
->documentLingotekXML();
$parameters['url'] = $translatable_object
->getUrl();
$parameters['workflowId'] = $translatable_object
->getWorkflowId();
$this
->addAdvancedParameters($parameters, $translatable_object);
if ($with_targets) {
$parameters['targetAsJSON'] = Lingotek::getLanguagesWithoutSourceAsJSON($source_language);
$parameters['applyWorkflow'] = 'true';
// API expects a 'true' string
$result = $this
->request('addContentDocumentWithTargetsAsync', $parameters);
}
else {
$result = $this
->request('addContentDocumentAsync', $parameters);
}
if ($result) {
if (isset($result->errors) && $result->errors) {
LingotekLog::error(t('Request to send document to Lingotek failed: ') . print_r($result->errors, TRUE), array());
$translatable_object
->setStatus(LingotekSync::STATUS_FAILED);
$translatable_object
->setLastError(is_array($result->errors) ? array_shift($result->errors) : $result->errors);
return FALSE;
}
if (get_class($translatable_object) == 'LingotekConfigSet') {
$translatable_object
->setDocumentId($result->id);
$translatable_object
->setProjectId($project_id);
$translatable_object
->setStatus(LingotekSync::STATUS_CURRENT);
$translatable_object
->setTargetsStatus(LingotekSync::STATUS_PENDING);
// WTD: there is a race condition here where a user could modify a locales-
// source entry between the time the dirty segments are pulled and the time
// they are set to current at this point. This same race condition exists
// for nodes as well; however, the odds may be lower due to number of entries.
LingotekConfigSet::setSegmentStatusToCurrentById($translatable_object
->getId());
}
else {
// node assumed (based on two functions below...
$entity_type = $translatable_object
->getEntityType();
lingotek_keystore($entity_type, $translatable_object
->getId(), 'document_id', $result->id);
lingotek_keystore($entity_type, $translatable_object
->getId(), 'last_uploaded', time());
}
$success = TRUE;
}
}
return $success;
}