lionbridge_content_api_test-8.x-4.0/tmgmt_contentapi/src/Util/GeneralHelper.php
tmgmt_contentapi/src/Util/GeneralHelper.php
<?php
namespace Drupal\tmgmt_contentapi\Util;
use Drupal\file\FileInterface;
use Drupal\tmgmt\Entity\Job;
use Drupal\tmgmt\JobInterface;
use Drupal\Component\Utility\Xss;
use Drupal\file\Entity\File;
use Drupal\tmgmt\TranslatorInterface;
/**
* CreateToken Class Doc Comment.
*
* @category Class
* @package Drupal\tmgmt_contentapi\Util
* @author Arben Sabani
*/
class GeneralHelper {
/**
* Get label of the job.
*
* @param Drupal\tmgmt\JobInterface $job
* Job.
*
* @return string
* stingyfied label.
*/
public static function getJobLabel(JobInterface $job) {
return isset($job->get("label")->value) ? $job->get("label")->value : $job->label()->getArguments()["@title"];
}
/**
* Remove spec. characters from label.
*
* @param Drupal\tmgmt\JobInterface $job
* Job.
*
* @return string
* stingyfied label.
*/
public static function getJobLabelNoSpeChars(JobInterface $job) {
$toreturn = GeneralHelper::getJobLabel($job);
return GeneralHelper::getStringNoSpeChars($toreturn);
}
/**
* Remove spec. characters from label.
*
* @param string $arg
* Job.
*
* @return string
* removed spec. chars string.
*/
public static function getStringNoSpeChars($arg) {
$toreturn = mb_ereg_replace("([^\w\s\d\-_~,;\[\]\(\).])", '', $arg);
// Remove any runs of periods (thanks falstro!)
$toreturn = mb_ereg_replace("([\.]{2,})", '', $toreturn);
$toreturn = Xss::filter($toreturn);
return $toreturn;
}
/**
* Create file object from uri.
*
* @param string $uri
* Uri.
*
* @return \stdClass
* file class object.
*/
public static function createFileObject($uri) {
$filsystem = \Drupal::service('file_system');
$file = File::create([
'uid' => \Drupal::currentUser()->id(),
'filename' => $filsystem->basename($uri),
'uri' => $uri,
'filemime' => \Drupal::service('file.mime_type.guesser')->guess($uri),
'filesize' => filesize($uri),
'status' => 1
]);
$file->save();
return $file;
}
/**
* Create file object from uri.
*
* @param Drupal\tmgmt\JobInterface $job
* Job.
* @param string $cpsettings
* Job.
*/
public static function addCpaSettingsToJob(JobInterface $job, $cpsettings) {
$sett_job = $job->__get("settings");
$vals = $sett_job->getValue();
$vals[0]["capi-remote"] = $cpsettings;
$sett_job->setValue($vals);
$job->__set("settings", $sett_job->getValue());
}
/**
* Get all jobs for connector config.
*
* @param \Drupal\tmgmt\TranslatorInterface $translator
* TranslatorInterface.
*
* @return \Drupal\Core\Entity\EntityStorageInterface
* A storage instance.
*/
public static function getAllJobsByTranslator(TranslatorInterface $translator){
$trname = $translator->id();
$trjobs = \Drupal::entityManager()->getStorage('tmgmt_job')->loadByProperties(['translator' => $trname]);
return $trjobs;
}
/**
* Get all jobs for connector config.
*
* @param \Drupal\tmgmt\JobInterface $job
* TranslatorInterface.
*
* @return string
* Id of contentapi Job.
*/
public static function getCpJobIdfromLocJob(JobInterface $job){
$jobcpsettings = unserialize($job->getSetting('capi-remote'));
$task = $job->getSetting('capi-settings')['task'];
$firstrequst = $task == 'trans' ? array_values($jobcpsettings)[0][0]:array_values($jobcpsettings)[0];
if (!isset($firstrequst)){
throw new \Exception("Job Id could not be found in local job!");
}
else{
return $firstrequst->getJobId();
}
}
/**
* Reset Job and Items to state Active.
*
* @param \Drupal\tmgmt\JobInterface $job
* TranslatorInterface.
* @param \Drupal\file\FileInterface $file
* TranslatorInterface.
*/
public static function resetJobandItemsToActive(JobInterface &$job, FileInterface $file){
$itemsToset = $job->getItems();
$loadedxml = simplexml_load_file(drupal_realpath($file->getFileUri()));
$loadedxml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:1.2');
foreach ($itemsToset as $item) {
// If the xlf caontains one of job's items, set state to active. [@phase-name='extraction']
$tjiid = $item->id();
$groups = $loadedxml->xpath("//xliff:group[@id='" . $tjiid ."']");
if(count($groups) == 1){
$item->setState(Job::STATE_ACTIVE);
$job->setState(\Drupal\tmgmt\Entity\JobItem::STATE_ACTIVE);
}
}
}
}
