lionbridge_content_api_test-8.x-4.0/tmgmt_contentapi/src/ContentApiTranslatorUI.php

tmgmt_contentapi/src/ContentApiTranslatorUI.php
<?php

namespace Drupal\tmgmt_contentapi;

use Drupal\Component\Utility\Html;
use Drupal\Core\Form\FormStateInterface;

use Drupal\Core\StreamWrapper\StreamWrapperInterface;
use Drupal\tmgmt\Entity\Job;
use Drupal\tmgmt\JobInterface;
use Drupal\tmgmt\JobItemInterface;
use Drupal\tmgmt\TranslatorPluginUiBase;
use Drupal\tmgmt_contentapi\Swagger\Client\Api\JobApi;
use Drupal\tmgmt_contentapi\Swagger\Client\Api\RequestApi;

use Drupal\tmgmt_contentapi\Swagger\Client\ApiException;
use Drupal\tmgmt_contentapi\Swagger\Client\Model\ArrayOfRequestIdsNote;
use Drupal\tmgmt_contentapi\Swagger\Client\Model\ArrayOfRequestIds;

use Drupal\tmgmt_contentapi\Swagger\Client\Model\Request;
use Drupal\tmgmt_contentapi\Swagger\Client\Model\StatusCodeEnum;
use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\tmgmt_contentapi\Swagger\Client\Model\CreateToken;
use Drupal\tmgmt_contentapi\Swagger\Client\Api\TokenApi;

use Drupal\tmgmt_contentapi\Util\ConentApiHelper;
use Exception;

use Drupal\tmgmt_contentapi\Swagger\Client\Api\ProviderApi;


/**
 * Freeway File translator UI.
 */
class ContentApiTranslatorUI extends TranslatorPluginUiBase {

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildConfigurationForm($form, $form_state);
    /** @var \Drupal\tmgmt\TranslatorInterface $translator */
    $translator = $form_state->getFormObject()->getEntity();
    $capisettings = $translator->getSetting('capi-settings');
    $cronsettings = $translator->getSetting('cron-settings');
    $exportsettings = $translator->getSetting('export_format');
    $transfersettings = $translator->getSetting('transfer-settings');
    $token = $capisettings['token'];
    $form['export_format'] = array(
      '#type' => 'radios',
      '#title' => t('Export to'),
      '#options' => \Drupal::service('plugin.manager.tmgmt_contentapi.format')->getLabels(),
      '#default_value' => isset($exportsettings) ? $exportsettings : "contentapi_xlf",
      '#description' => t('Select the format for exporting data.'),
    );
    $form['xliff_cdata'] = array(
      '#type' => 'checkbox',
      '#title' => t('XLIFF CDATA'),
      '#description' => t('Select to use CDATA for import/export.'),
      '#default_value' => $translator->getSetting('xliff_cdata'),
    );

    $form['xliff_processing'] = array(
      '#type' => 'checkbox',
      '#title' => t('Extended XLIFF processing'),
      '#description' => t('Select to further process content semantics and mask HTML tags instead of just escaping them.'),
      '#default_value' => $translator->getSetting('xliff_processing'),
    );

    $form['xliff_message'] = array(
      '#type' => 'container',
      '#markup' => t('By selecting CDATA option, XLIFF processing will be ignored.'),
      '#attributes' => array(
        'class' => array('messages messages--warning'),
      ),
    );

    $form['allow_override'] = array(
      '#type' => 'checkbox',
      '#title' => t('Allow export-format overrides'),
      '#default_value' => $translator->getSetting('allow_override'),
    );

    $form['one_export_file'] = array(
      '#type' => 'checkbox',
      '#title' => t('Use one export file for all items in job'),
      '#description' => t('Select to export all items to one file. Clear to export items to multiple files.'),
      '#default_value' => $translator->getSetting('one_export_file'),
    );

    // Any visible, writeable wrapper can potentially be used for the files
    // directory, including a remote file system that integrates with a CDN.
    foreach (\Drupal::service('stream_wrapper_manager')->getDescriptions(StreamWrapperInterface::WRITE_VISIBLE) as $scheme => $description) {
      $options[$scheme] = Html::escape($description);
    }

    if (!empty($options)) {
      $form['scheme'] = array(
        '#type' => 'radios',
        '#title' => t('Download method'),
        '#default_value' => $translator->getSetting('scheme'),
        '#options' => $options,
        '#description' => t('Choose where  to store exported files. Recommendation: Use a secure location to prevent unauthorized access.'),
      );
    }

    $form['capi-settings'] = array(
      '#type' => 'details',
      '#title' => t('Lionbridge Content API Settings'),
      '#open' => TRUE,
    );

    $form['capi-settings']['po_reference'] = array(
      '#type' => 'textfield',
      '#title' => t('PO Number'),
      '#required' => FALSE,
      '#description' => t('Enter your Lionbridge purchase order number.'),
      '#default_value' => $capisettings['po_reference'],
    );

    $form['capi-settings']['capi_username'] = array(
      '#type' => 'textfield',
      '#title' => t('Username'),
      '#required' => TRUE,
      '#description' => t('Enter your Lionbridge username.'),
      '#default_value' => $capisettings['capi_username'],
    );

    $form['capi-settings']['capi_password'] = array(
      '#type' => 'password',
      '#title' => t('Password'),
      '#required' => TRUE,
      '#description' => t('Enter your Lionbridge password.'),
      //'#default_value' => $capisettings['capi_password'],
    );
    $form['capi-settings'] += parent::addConnectButton();

    $form['capi-settings']['token'] = array(
      '#type' => 'hidden',
      '#value' => (isset($token) && $token != "") ? $token : NULL
    );


    $providers = NULL;
    if(isset($token) && $token != '') {
      try {
        $providerapi = new ProviderApi();
        $providers = $providerapi->providersGet($token);
      } catch (Exception $e) {
        drupal_set_message($e->getMessage());
      }
    }
    $providersarray = array();
    foreach ($providers as $provider) {
      $prid = $provider->getProviderId();
      $prname = $provider->getProviderName();
      $providersarray[$prid] = $prname;
    }
    asort($providersarray, SORT_REGULAR);
    $defaultprovidervalue = isset($capisettings['provider']) ? $capisettings['provider'] : NULL;
    $form['capi-settings']['provider'] = array(
      '#type' => 'select',
      '#title' => t('Provider configuration'),
      '#required' => (isset($token) && $token != "") ? TRUE : FALSE,
      '#options' => $providersarray,
      '#default_value' => $defaultprovidervalue,
      '#description' => t('Please select a Provider for your project.'),
    );

    $form['capi-settings']['allow_provider_override'] = array(
      '#type' => 'checkbox',
      '#title' => t('Allow provider overrides'),
      '#default_value' => $translator->getSetting('capi-settings')['allow_provider_override'],
    );

    $form['transfer-settings'] = array(
      '#type' => 'checkbox',
      '#title' => t('Transfer all files as zip'),
      '#description' => t('Select to transfer all exported files for a job as a .zip file.'),
      '#default_value' => $transfersettings,
    );

    $form['cron-settings'] = array(
      '#type' => 'details',
      '#title' => t('Scheduled Tasks'),
      '#description' => t('Specify settings for scheduled tasks.'),
      '#open' => TRUE,
    );

    $form['cron-settings']['status'] = array(
      '#type' => 'checkbox',
      '#title' => t('Receive translated jobs automatically.'),
      '#description' => t('Select to receive translated jobs automatically, by scheduled task. Clear to download translated jobs manually.'),
      '#default_value' => $cronsettings['status'],
    );

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function checkoutSettingsForm(array $form, FormStateInterface $form_state, JobInterface $job) {
    $valid_provider = $this->getValidProvider($form, $form_state, $job);
    $translator = $job->getTranslator();
    $capisettings = $translator->getSetting('capi-settings');
    $jobcapisettings = $job->getSetting("capi-settings");
    $exportsettingstranslator = $job->getTranslator()->getSetting('export_format');
    $exportsettings = $job->getSetting('exports-settings')['cpexport_format'];
    $allowprovideroverride = $capisettings['allow_provider_override'];
    $form['exports-settings'] = array(
      '#type' => 'details',
      '#title' => t('Export Settings'),
      '#open' => TRUE,
    );
    $form['exports-settings']['cpexport_format'] = array(
      '#type' => 'radios',
      '#title' => t('Export to'),
      '#options' => \Drupal::service('plugin.manager.tmgmt_contentapi.format')->getLabels(),
      '#default_value' => isset($exportsettings) ? $exportsettings : $exportsettingstranslator,
      '#description' => t('Select the format for exporting data.'),
    );
    $form['capi-settings'] = array(
      '#type' => 'details',
      '#title' => t('Content API Job Details'),
      '#open' => TRUE,
    );

    $form['capi-settings']['po_reference'] = array(
      '#type' => 'textfield',
      '#title' => t('PO Reference'),
      '#required' => FALSE,
      '#description' => t('Please enter your PO Reference'),
      '#default_value' => isset($jobcapisettings["po_reference"]) ? $jobcapisettings["po_reference"] : $capisettings['po_reference'],
    );


    $form['capi-settings']['description'] = array(
      '#type' => 'textarea',
      '#title' => t('Description'),
      '#required' => FALSE,
      '#description' => t('Please enter a description for the job.'),
      '#default_value' => isset($jobcapisettings["description"]) ? $jobcapisettings["description"] : '',
    );
    $form['capi-settings']['due_date'] = array(
      '#type' => 'date',
      '#title' => t('Expected Due Date'),
      '#required' => FALSE,
      '#description' => t('Please enter the expected due date.'),
      '#default_value' => isset($jobcapisettings["due_date"]) ? $jobcapisettings["due_date"] : \date("Y-m-d"),
    );
    $form['capi-settings']['task'] = array(
      '#type' => 'select',
      '#title' => t('Task'),
      '#options' => array("trans" => "Translation"), //, "tm" => "TM Update"),
      '#default_value' => isset($jobcapisettings["task"]) ? $jobcapisettings["task"] : 'trans',
      '#description' => t('Please select a task for your project.'),
    );
    $token = $capisettings['token'];
    $providers = NULL;
    try {
      $providerapi = new ProviderApi();
      $providers = $providerapi->providersGet($token);
    }
    catch (Exception $e) {
      $linkToConfig= Link::fromTextAndUrl(t('connector configuration'), Url::fromUserInput('/admin/tmgmt/translators'));
      drupal_set_message(\Drupal\Core\Render\Markup::create($e->getMessage().'! ' . t('Please check the '.$linkToConfig->toString().'!')),'error');
    }
    $providersarray = array();
    foreach ($providers as $provider) {
      $prid = $provider->getProviderId();
      $prname = $provider->getProviderName();
      $providersarray[$prid] = $prname;
    }
    asort($providersarray, SORT_REGULAR);
    //$defaultproviderkey = key($providersarray);
    $form['capi-settings']['provider'] = array(
      '#type' => 'select',
      '#title' => t('Provider configuration'),
      '#required' => TRUE,
      '#options' => $providersarray,
      '#default_value' => isset($valid_provider) ? $valid_provider : NULL,
      '#description' => t('Please select a Provider for your project.'),
      '#ajax' => [
        'callback' => 'ajax_tmgmt_contentapi_provider_changed',
        'wrapper' => 'quote',
      ],
    );
    if(!$allowprovideroverride){
      $form['capi-settings']['provider']['#attributes']['disabled'] = 'disabled';
    }


    $form['capi-settings']['quote'] = [
      '#type' => 'container',
      '#prefix' => '<div id="quote">',
      '#suffix' => '</div>',
    ];

    if (isset($valid_provider)) {
      $form['capi-settings']['quote']['supported_languages'] = array(
        '#type' => 'details',
        '#title' => t('Supported Languages'),
        '#open' => FALSE,
        '#description' => t('Supported language pairs by the selected provider.'),
      );
      $providerapi = new ProviderApi();
      $rows = array();
      $header = array(t('source languages'), t('target languages'));
      try {
        $selected_provider = $providerapi->providersProviderIdGet($token, $valid_provider);
        $capabilities = $selected_provider->getCapabilities();
        $supported_lang_pairs = isset($capabilities) ? $capabilities->getSupportedLanguages() : array();
        foreach ($supported_lang_pairs as $pair) {
          $rows[] = [
            join(',', isset($pair) ? $pair->getSources() : []),
            join(',', isset($pair) ? $pair->getTargets() : NULL)
          ];
        }
      }
      catch (ApiException $ex) {
        $rows[] = array($ex->getMessage());
      }
      $form['capi-settings']['quote']['supported_languages']['lang_table'] = array(
        '#theme' => 'table',
        '#header' => $header,
        '#rows' => $rows,
        '#empty' => t('No language specific settings defined for the selected provider.')
      );
    }



    $form['capi-settings']['quote']['is_quote'] = array(
      '#type' => 'checkbox',
      '#title' => t('Quote'),
      '#description' => t('Check to receive a quote before translation starts. Quote has to be approved in order to start the translation'),
      '#default_value' => 0,
    );

    $provider = getProvider($token, $valid_provider);
    $capabilities = isset($provider) ? $provider->getCapabilities() : NULL;
    $supportsQuote = $capabilities != NULL ? $capabilities->getSupportQuote() : TRUE;
    $supportsQuote = isset($supportsQuote) ? $supportsQuote : TRUE;
    if (!$supportsQuote) {
      $form_values = $form_state->getValues();
      $form_user_input = $form_state->getUserInput();
      $form_values['settings']['capi-settings']['quote']['is_quote'] = 0;
      $form_user_input['settings']['capi-settings']['quote']['is_quote'] = FALSE;
      $form_state->setValues($form_values);
      $form_state->setUserInput($form_user_input);
      $form['capi-settings']['quote']['is_quote']['#attributes'] = array('disabled' => TRUE);;
    }
    else {
      unset($form['capi-settings']['quote']['is_quote']['#attributes']['disabled']);
    }

    return parent::checkoutSettingsForm($form, $form_state, $job);
  }

  /**
   * @param array $form
   * @param array $form_state
   * @param \TMGMTJob $job
   */
  public function getValidProvider(array $form, FormStateInterface &$form_state, JobInterface $job){
    // can be triggered by translator, provider dropdown, language drop down, request translation, submit button in job overview
    $who_triggered = $form_state->getTriggeringElement();
    $values = $form_state->getValues();
    $form_user_input = $form_state->getUserInput();
    $trigger_name = isset($who_triggered) ? $who_triggered['#name'] : NULL;
    $translator = $job->getTranslator();
    // we need this, otherwise when new jobs are submitted and no translator saved, ajax causes problems when switching translator
    // TMGMT bug?
    $job->save();
    $capisettings = $translator->getSetting('capi-settings');
    $jobcapisettings = $job->getSetting("capi-settings");
    $translator_provider_id = isset($capisettings) ? $capisettings['provider'] : NULL;
    $job_provider_id = isset($values) && isset($values['settings']['capi-settings']['provider']) ?
      $values['settings']['capi-settings']['provider'] : $translator_provider_id;
    switch ($trigger_name) {
      case 'translator':
        $values['settings']['capi-settings']['provider'] = $translator_provider_id;
        $form_user_input['settings']['capi-settings']['provider'] = $translator_provider_id;
        $form_state->setValues($values);
        $form_state->setUserInput($form_user_input);
        return $translator_provider_id;

      default:
        $values['settings']['capi-settings']['provider'] = $job_provider_id;
        $form_user_input['settings']['capi-settings']['provider'] = $job_provider_id;
        $form_state->setValues($values);
        $form_state->setUserInput($form_user_input);
        return $job_provider_id;
    }
  }

  /**
   * {@inheritdoc}
   */
  public function checkoutInfo(JobInterface $job) {
    $requestobjs = unserialize($job->getSetting("capi-remote"));
    // Check if we have any request and take from first jobid.
    $task = $job->getSetting('capi-settings')['task'];
    $capijobid = NULL;
    if($task == 'trans'){
      $capijobid = isset($requestobjs[0]) && count($requestobjs) > 0 ? reset($requestobjs[0])->getJobId() : NULL;
    }
    else {
      $job->setState(Job::STATE_FINISHED);
      $capijobid = isset($requestobjs[0]) && count($requestobjs) > 0 ? $requestobjs[0]->getJobId() : NULL;
    }
    $form = array();
    $projectInfo = null;
    If($job->getState() > \Drupal\tmgmt\Entity\Job::STATE_UNPROCESSED) {
      try {
        $jobapi = new JobApi();
        $token = ConentApiHelper::generateToken($job->getTranslator());
        $projectInfo = $jobapi->jobsJobIdGet($token, $capijobid, "fullWithStats");
        if($projectInfo->getStatusCode()->getStatusCode() == StatusCodeEnum::REVIEW_TRANSLATION){
          $updatedremotejob = ConentApiHelper::checkJobFinishAndApproveRemote($job);
          $projectInfo = $updatedremotejob != NULL ? $updatedremotejob:$projectInfo;
        }
      }
      catch (Exception $ex){
        $respbody = $ex->getResponseBody();
        drupal_set_message('The API returned an error. '. $respbody,'warning');
        $projectInfo = null;
      }
    }
    $cpodername = 'n/a';
    $cporderid = 'n/a';
    $cpstatuscode = 'n/a';
    $lateerror = 'n/a';
    $providerid = 'n/a';
    $poreference = 'n/a';
    $duedate = NULL;
    $archived = 'n/a';
    $description = 'n/a';
    $jobstats = NULL;
    if($projectInfo != null){
      $cpodername = $projectInfo->getJobName();
      $cporderid = $projectInfo->getJobId();
      $cpstatuscode = $projectInfo->getStatusCode()->getStatusCode();
      $lateerror = $projectInfo->getLatestErrorMessage();
      $providerid = $projectInfo->getProviderId();
      $poreference = $projectInfo->getPoReference();
      $duedate = $projectInfo->getDueDate();
      $archived = $projectInfo->getArchived() ? "TRUE" : "FALSE";
      $description = $projectInfo->getDescription();
      $jobstats = $projectInfo->getJobStats();
    }

    $this->createCpOrderForm(
      $form,
      $cpodername,
      $cporderid,
      $cpstatuscode,
      $description,
      $poreference,
      $duedate,
      $providerid,
      $lateerror,
      $archived,
      $jobstats
    );


    if($task == 'trans') {
      $form['fw-immport-palaceholder'] = [
        '#prefix' => '<div id="fw-im-placholder">',
        '#suffix' => '</div>',
      ];
      if ($projectInfo != NULL && $projectInfo->getShouldQuote()) {
        $form['fw-immport-palaceholder']['quote-info'] = [
          '#prefix' => '<div role="contentinfo" aria-label="Warning message" class="messages messages--warning">'
            . '<div role="alert"><h2 class="visually-hidden">Warning message</h2>',
          '#markup' => t('This job was submitted for a quote. To submit your job for processing, you must log into your translation provider\'s system to approve this quote.
'),
          '#suffix' => '</div></div>'
        ];
      }

      $form['fw-immport-palaceholder']['fieldset-import'] = [
        '#type' => 'fieldset',
        '#title' => t('IMPORT TRANSLATED FILE'),
        '#collapsible' => TRUE,
      ];


      $form['fw-immport-palaceholder']['fieldset-import']['automatic-import'] = [
        '#type' => 'details',
        '#title' => t('Import automatically | Update TM'),
        '#open' => TRUE,
      ];

      $form['fw-immport-palaceholder']['fieldset-import']['automatic-import']['auto-submit'] = [
        '#type' => 'submit',
        '#value' => t('Auto-Import'),
        '#submit' => ['tmgmt_contentapi_semi_import_form_submit'],
      ];

      $form['fw-immport-palaceholder']['fieldset-import']['automatic-import']['tm-update'] = [
        '#type' => 'submit',
        '#value' => t('Update TM'),
        '#submit' => ['tmgmt_contentapi_update_tm_form_submit'],
      ];

      $form['fw-immport-palaceholder']['fieldset-import']['manual-import'] = [
        '#type' => 'details',
        '#title' => t('Manual Import'),
        '#open' => TRUE,
      ];


      $form['fw-immport-palaceholder']['fieldset-import']['manual-import']['file'] = [
        '#type' => 'file',
        '#title' => t('File'),
        '#size' => 50,
        '#description' => t('Supported formats: xlf.'),
      ];
      $form['fw-immport-palaceholder']['fieldset-import']['manual-import']['submit'] = [
        '#type' => 'submit',
        '#value' => t('Manual Import'),
        '#submit' => ['tmgmt_contentapi_import_form_submit'],
        '#validate' => ['tmgmt_contentapi_check_empty_file']
      ];
    }
    return $form;
  }


  public function createCpOrderForm(&$fieldset, $ordername, $orderid, $orderstatus, $description, $poreference, $duedate, $providerid, $errors, $archived, $jobstats){
    $fieldset['fw-table'] = array(
      '#prefix' => '<table class="views-table views-view-table cols-8"><thead>
                            <tr>
                                <th>Job Name</th>
                                <th>Job ID</th>
                                <th>Job Status</th>
                                <th>Description</th>
                                <th>PO Number</th>
                                <th>Due Date</th>
                                <th>Provider ID</th>
                                <th>Latest Error</th>
                                <th>Archived</th>
                                <th>Statistics</th>
                            </tr></thead>',
      '#suffix' => '</table>',
    );
    $fieldset['fw-table']['first-row'] = array(
      '#prefix' => '<tr>',
      '#suffix' => '</tr>'
    );
    $fieldset['fw-table']['first-row']['ordername'] = array(
      '#prefix' => '<td>',
      '#markup' => $ordername,
      '#suffix' => '</td>'
    );
    $fieldset['fw-table']['first-row']['id'] = array(
      '#prefix' => '<td>',
      '#markup' => $orderid,
      '#suffix' => '</td>'
    );
    $fieldset['fw-table']['first-row']['status'] = array(
      '#prefix' => '<td>',
      '#markup' => $orderstatus,
      '#suffix' => '</td>'
    );
    $fieldset['fw-table']['first-row']['description'] = array(
      '#prefix' => '<td>',
      '#markup' => $description,
      '#suffix' => '</td>'
    );
    $fieldset['fw-table']['first-row']['po-reference'] = array(
      '#prefix' => '<td>',
      '#markup' => $poreference,
      '#suffix' => '</td>'
    );
    $fieldset['fw-table']['first-row']['due-date'] = array(
      '#prefix' => '<td>',
      '#markup' => isset($duedate) && $duedate !== NULL ? $duedate->format('D, m/d/Y - H:i:s') : "n/a",
      '#suffix' => '</td>'
    );

    $fieldset['fw-table']['first-row']['provider-id'] = array(
      '#prefix' => '<td>',
      '#markup' => $providerid,
      '#suffix' => '</td>'
    );
    $fieldset['fw-table']['first-row']['error'] = array(
      '#prefix' => '<td>',
      '#markup' => $errors,
      '#suffix' => '</td>'
    );

    $fieldset['fw-table']['first-row']['archived'] = array(
      '#prefix' => '<td>',
      '#markup' => $archived,
      '#suffix' => '</td>'
    );

    $fieldset['fw-table']['first-row']['statistics'] = array(
      '#prefix' => '<td>',
      '#markup' => $this->createMarkupForStats($jobstats),
      '#suffix' => '</td>'
    );

  }

  public function createMarkupForStats($stats) {
    $markup = "";
    if (isset($stats)) {
      $totalcompleted = t("total completed: ") . $stats->getTotalCompleted();
      $totalintrans = t("total in translation: ") . $stats->getTotalInTranslation();
      $totalreceived = t("total received: ") . $stats->getTotalReceived();
      $totalerrors = t("total errors: ") . $stats->getTotalError();
      $markup += "<p>" . $totalcompleted . "</p>";
      $markup += "<p>" . $totalreceived . "</p>";
      $markup += "<p>" . $totalintrans . "</p>";
      $markup += "<p>" . $totalerrors . "</p>";
    }
    return $markup;
  }

  /**
   * {@inheritdoc}
   */
  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
    // Nothing to do here by default.
    $whotriggered = $form_state->getTriggeringElement();
    $typeofTrigger = $whotriggered['#type'];
    if ($typeofTrigger != 'select') {
      try {
        $translator = $form_state->getFormObject()->getEntity();
        $capisettings = $translator->getSetting('capi-settings');
        $settings = $form_state->getValue('settings');
        $capisettings = $settings['capi-settings'];
        $username = $capisettings['capi_username'];
        $password = $capisettings['capi_password'];
        $tokenrequest = new CreateToken(array('username' => $username, 'password' => $password));
        $capi = new TokenApi();
        $tokenobj = $capi->oauth2TokenPost($tokenrequest);
        $form_state->setValue(array('settings','capi-settings','capi_password'),'');
        $form_state->setValue(array('settings','capi-settings','token'),$tokenobj->getAccessToken());
        $capisettings['token'] = $tokenobj->getAccessToken();
        $translator->setSetting('capi-settings',$capisettings);

      }
      catch (Exception $exception) {
        \Drupal::logger('TMGMT_CONTENTAPI')->error('Failed to valideate form: %message ', [
          '%message' => $exception->getMessage(),
        ]);
        $form_state->setErrorByName('settings][capi-settings][capi_password', 'Please check your username and password Settings: ' . $exception->getMessage());
        $form_state->setErrorByName('settings][capi-settings][capi_username');
      }
    }

  }

  public function reviewForm(array $form, FormStateInterface $form_state, JobItemInterface $item) {
     // TODO: Change the autogenerated stub


    return $form;
  }

  public function reviewDataItemElement(array $form, FormStateInterface $form_state, $data_item_key, $parent_key, array $data_item, JobItemInterface $item) {
    return parent::reviewDataItemElement($form, $form_state, $data_item_key, $parent_key, $data_item, $item); // TODO: Change the autogenerated stub
  }

  public function reviewFormValidate(array $form, FormStateInterface $form_state, JobItemInterface $item) {
    parent::reviewFormValidate($form, $form_state, $item); // TODO: Change the autogenerated stub
  }

  public function reviewFormSubmit(array $form, FormStateInterface $form_state, JobItemInterface $item) {
    parent::reviewFormSubmit($form, $form_state, $item);
    $triggertby = $form_state->getTriggeringElement();
    $triggerid = $triggertby['#id'];
    // If reject button has been pressed, reject request in content api.
    if($triggerid == 'edit-reject'){
      $job = $item->getJob();
      $submittedrequestsarray = unserialize($job->getSetting('capi-remote'));
      if(isset($submittedrequestsarray) && count($submittedrequestsarray)>0){
        $arraywithrequest = $submittedrequestsarray[0];
        $itemid = $item->id();
        foreach ($arraywithrequest as $request){
          $requestSourceNativeId = explode("_",$request->getSourceNativeId())[1];
          // Check to cancel the request which belongs to the item or if all item sent in one request then all.
          if($requestSourceNativeId == $itemid || $requestSourceNativeId == 'all'){
            try {
              $translator = $job->getTranslator();
              $token = ConentApiHelper::generateToken($translator);
              $requestapi = new RequestApi();
              $arrayrequestid = new ArrayOfRequestIdsNote();$test = new Request();
              $arrayrequestid->setRequestIds(array($request->getRequestId()));
              $arrayrequestid->setNote('Translation has been rejected by Client using Drupal Connector. Please check the Translation.');
              $returnarray = $requestapi->jobsJobIdRequestsRejectPut($token,$request->getJobId(),$arrayrequestid);
              if(count($returnarray) == 1 && $returnarray[0] instanceof Request){
                $job->addMessage(t('Remote request rejected: '. $request->getRequestId()));
              }
            }
            catch (Exception $ex){
              $job->addMessage(t('Remote Job could not be rejected: ' . $ex->getMessage()),array(),'warning');
            }
          }
        }
      }

    }
    // If Item have been saved as completed, approve request, but not all.
    if($triggerid == 'edit-accept'){
      $job = $item->getJob();
      $submittedrequestsarray = unserialize($job->getSetting('capi-remote'));
      if(isset($submittedrequestsarray) && count($submittedrequestsarray)>0){
        $arraywithrequest = $submittedrequestsarray[0];
        $itemid = $item->id();
        foreach ($arraywithrequest as $request){
          $requestSourceNativeId = explode("_",$request->getSourceNativeId())[1];
          // Check to cancel the request which belongs to the item or if all item sent in one request then all.
          if($requestSourceNativeId == $itemid){
            try {
              $translator = $job->getTranslator();
              $token = ConentApiHelper::generateToken($translator);
              $requestapi = new RequestApi();
              $arrayrequestid = new ArrayOfRequestIds();
              $arrayrequestid->setRequestIds(array($request->getRequestId()));
              $returnarray = $requestapi->jobsJobIdRequestsApprovePut($token, $request->getJobId(),$arrayrequestid);
              if(count($returnarray) == 1 && $returnarray[0] instanceof Request){
                $job->addMessage(t('Remote request approved: '. $request->getRequestId()));
              }
            }
            catch (Exception $ex){
              $job->addMessage(t('Remote Job could not be approved: ' . $ex->getMessage()),array(),'warning');
            }
          }
          //TODO: Not sure if this is required, as when displaying Job details, check happens if job finished and approves all. comment out to check?
          $allaccepteditems =  $job->getItems(array('state'=>JobItemInterface::STATE_ACCEPTED));
          $allitems = $job->getItems();
          // check if all all job items excluding this one, as this one has not been saved as comleted yet, are accepted.
          if(count($allitems) == (count($allaccepteditems)+1)){
            // Generate array with requestIds to approve, all will be approved.
            try {
              $translator = $job->getTranslator();
              $token = ConentApiHelper::generateToken($translator);
              $requestapi = new RequestApi();
              $arrayrequestid = new ArrayOfRequestIds();
              $arrayrequestid->setRequestIds(array($request->getRequestId()));
              $returnarray = $requestapi->jobsJobIdRequestsApprovePut($token, $request->getJobId(),$arrayrequestid);
              $jobapi = new JobApi();
              $jobapi->jobsJobIdArchivePut($token,$request->getJobId());
              if(count($returnarray) == 1 && $returnarray[0] instanceof Request){
                $job->addMessage(t('Remote request archived: '. $request->getJobId()));
              }
            }
            catch (Exception $ex){
              $job->addMessage(t('Remote Job could not be approved: ' . $ex->getMessage()),array(),'warning');
            }
          }

        }

      }
    }

  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc