remove proposal tools (definitively)
This commit is contained in:
parent
23376ff9ae
commit
53557a94d9
6 changed files with 0 additions and 601 deletions
|
@ -1,100 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @brief translater, a plugin for Dotclear 2
|
|
||||||
*
|
|
||||||
* @package Dotclear
|
|
||||||
* @subpackage Plugin
|
|
||||||
*
|
|
||||||
* @author Jean-Christian Denis & contributors
|
|
||||||
*
|
|
||||||
* @copyright Jean-Christian Denis
|
|
||||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
|
||||||
*/
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Dotclear\Plugin\translater;
|
|
||||||
|
|
||||||
use dcCore;
|
|
||||||
use form;
|
|
||||||
use netHttp;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Google proposal tool.
|
|
||||||
*
|
|
||||||
* This uses google API v2 to translate strings
|
|
||||||
*/
|
|
||||||
class googleProposalTool extends translaterProposalTool
|
|
||||||
{
|
|
||||||
private $api = 'https://www.googleapis.com/language/translate/v2';
|
|
||||||
private $agent = 'Translater - http://jcd.lv/?q=translater';
|
|
||||||
private $key = null; //ex: AsSDqsGsfdSDSQFQsfedj9bnzY390aIg-1d
|
|
||||||
|
|
||||||
protected function setup()
|
|
||||||
{
|
|
||||||
$this->key = dcCore::app()->blog->settings->get(My::id())->get('google_proposal_key');
|
|
||||||
|
|
||||||
$this->setName(__('Google'));
|
|
||||||
$this->setDesc(__('Google Translation Tool API'));
|
|
||||||
$this->setActive(!empty($this->key));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function form()
|
|
||||||
{
|
|
||||||
return
|
|
||||||
'<p><label class="classic" for="translater_google_proposal_key">' .
|
|
||||||
__('API Console Single Access Key') . '<br />' .
|
|
||||||
form::field('translater_google_proposal_key', 65, 255, $this->key) .
|
|
||||||
'</label></p>' .
|
|
||||||
'<p>' . __('You must have on Google API console:') . '</p>' .
|
|
||||||
'<ul>' .
|
|
||||||
'<li><a href="https://code.google.com/apis/console/#access">' . __('A single access API key') . '</a></li>' .
|
|
||||||
'<li><a href="https://code.google.com/apis/console/#services">' . __('Activate the "translate API" service') . '</a></li>' .
|
|
||||||
'</ul>';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function save()
|
|
||||||
{
|
|
||||||
$key = empty($_POST['translater_google_proposal_key']) ?
|
|
||||||
'' : $_POST['translater_google_proposal_key'];
|
|
||||||
|
|
||||||
dcCore::app()->blog->settings->get(My::id())->put('google_proposal_key', $key, 'string', '', true, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function translate($str, $from, $to)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$data = [
|
|
||||||
'key' => $this->key,
|
|
||||||
'q' => $str,
|
|
||||||
'source' => $from,
|
|
||||||
'target' => $to,
|
|
||||||
];
|
|
||||||
|
|
||||||
$path = '';
|
|
||||||
$client = netHttp::initClient($this->api, $path);
|
|
||||||
$client->setUserAgent($this->agent);
|
|
||||||
$client->useGzip(false);
|
|
||||||
$client->setPersistReferers(false);
|
|
||||||
$client->get($path, $data);
|
|
||||||
|
|
||||||
$rs = $client->getContent();
|
|
||||||
|
|
||||||
if ($client->getStatus() != 200) {
|
|
||||||
throw new Exception(__('Failed to query service.'));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null === ($dec = json_decode($rs))) {
|
|
||||||
throw new Exception('Failed to decode result');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ('' == @$dec->data->translations[0]->translatedText) {
|
|
||||||
throw new Exception('No data response');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $dec->data->translations[0]->translatedText;
|
|
||||||
} catch (Exception $e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,234 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @brief translater, a plugin for Dotclear 2
|
|
||||||
*
|
|
||||||
* @package Dotclear
|
|
||||||
* @subpackage Plugin
|
|
||||||
*
|
|
||||||
* @author Jean-Christian Denis & contributors
|
|
||||||
*
|
|
||||||
* @copyright Jean-Christian Denis
|
|
||||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
|
||||||
*/
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Dotclear\Plugin\translater;
|
|
||||||
|
|
||||||
use dcCore;
|
|
||||||
use form;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Microsoft proposal tool.
|
|
||||||
*
|
|
||||||
* This uses Microsoft API to translate strings
|
|
||||||
*/
|
|
||||||
class microsoftProposalTool extends translaterProposalTool
|
|
||||||
{
|
|
||||||
private $client = null; //ex: b6057813-234b-4154-b324-6342c27f608f
|
|
||||||
private $secret = null; //ex: DsdDScn/+xdSFF1GDxdx1wbkKPphAfAVSH5VXDBVDI=
|
|
||||||
|
|
||||||
protected function setup()
|
|
||||||
{
|
|
||||||
$this->setActive(false);
|
|
||||||
$this->client = dcCore::app()->blog->settings->get(My::id())->get('microsoft_proposal_client');
|
|
||||||
$this->secret = dcCore::app()->blog->settings->get(My::id())->get('microsoft_proposal_secret');
|
|
||||||
|
|
||||||
$this->setName(__('Bing'));
|
|
||||||
$this->setDesc(__('Microsoft Bing translation tool'));
|
|
||||||
$this->setActive(!empty($this->client) && !empty($this->secret));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function form()
|
|
||||||
{
|
|
||||||
return
|
|
||||||
'<p><label class="classic" for="translater_microsoft_proposal_client">' .
|
|
||||||
__('Application client ID') . '<br />' .
|
|
||||||
form::field('translater_microsoft_proposal_client', 65, 255, $this->client) .
|
|
||||||
'</label></p>' .
|
|
||||||
'<p><label class="classic" for="translater_microsoft_proposal_secret">' .
|
|
||||||
__('Application client Secret') . '<br />' .
|
|
||||||
form::field('translater_microsoft_proposal_secret', 65, 255, $this->secret) .
|
|
||||||
'</label></p>' .
|
|
||||||
'<p>' . __('You must have:') . '</p>' .
|
|
||||||
'<ul>' .
|
|
||||||
'<li><a href="https://datamarket.azure.com/account">' . __('A Microsoft Windows Azure account') . '</a></li>' .
|
|
||||||
'<li><a href="https://datamarket.azure.com/dataset/bing/microsofttranslator">' . __('A valid subscription to Microsoft Translator') . '</a></li>' .
|
|
||||||
'<li><a href="https://datamarket.azure.com/developer/applications/">' . __('And register an application') . '</a></li>' .
|
|
||||||
'</ul>';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function save()
|
|
||||||
{
|
|
||||||
$client = empty($_POST['translater_microsoft_proposal_client']) ?
|
|
||||||
'' : $_POST['translater_microsoft_proposal_client'];
|
|
||||||
$secret = empty($_POST['translater_microsoft_proposal_secret']) ?
|
|
||||||
'' : $_POST['translater_microsoft_proposal_secret'];
|
|
||||||
|
|
||||||
dcCore::app()->blog->settings->get(My::id())->put('microsoft_proposal_client', $client, 'string', '', true, true);
|
|
||||||
dcCore::app()->blog->settings->get(My::id())->put('microsoft_proposal_secret', $secret, 'string', '', true, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function translate($str, $from, $to)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
return $this->doYourFuckingJob($this->client, $this->secret, $str, $from, $to);
|
|
||||||
} catch (Exception $e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Microsoft fucking oAuth
|
|
||||||
//
|
|
||||||
|
|
||||||
private function doYourFuckingJob($client, $secret, $str, $from, $to)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$translatedStr = '';
|
|
||||||
//Client ID of the application.
|
|
||||||
$clientID = $client;
|
|
||||||
//Client Secret key of the application.
|
|
||||||
$clientSecret = $secret;
|
|
||||||
//OAuth Url.
|
|
||||||
$authUrl = 'https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/';
|
|
||||||
//Application Scope Url
|
|
||||||
$scopeUrl = 'http://api.microsofttranslator.com';
|
|
||||||
//Application grant type
|
|
||||||
$grantType = 'client_credentials';
|
|
||||||
|
|
||||||
//Get the Access token.
|
|
||||||
$accessToken = $this->getTokens($grantType, $scopeUrl, $clientID, $clientSecret, $authUrl);
|
|
||||||
//Create the authorization Header string.
|
|
||||||
$authHeader = 'Authorization: Bearer ' . $accessToken;
|
|
||||||
|
|
||||||
//Set the params.//
|
|
||||||
$fromLanguage = $from;
|
|
||||||
$toLanguage = $to;
|
|
||||||
$inputStr = $str;
|
|
||||||
$contentType = 'text/plain';
|
|
||||||
$category = 'general';
|
|
||||||
|
|
||||||
$params = 'text=' . urlencode($inputStr) . '&to=' . $toLanguage . '&from=' . $fromLanguage;
|
|
||||||
$translateUrl = "http://api.microsofttranslator.com/v2/Http.svc/Translate?$params";
|
|
||||||
|
|
||||||
//Get the curlResponse.
|
|
||||||
$curlResponse = $this->curlRequest($translateUrl, $authHeader);
|
|
||||||
|
|
||||||
//Interprets a string of XML into an object.
|
|
||||||
$xmlObj = simplexml_load_string($curlResponse);
|
|
||||||
foreach ((array) $xmlObj[0] as $val) {
|
|
||||||
$translatedStr = $val;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (string) $translatedStr;
|
|
||||||
/*
|
|
||||||
echo "<table border=2px>";
|
|
||||||
echo "<tr>";
|
|
||||||
echo "<td><b>From $fromLanguage</b></td><td><b>To $toLanguage</b></td>";
|
|
||||||
echo "</tr>";
|
|
||||||
echo "<tr><td>" . $inputStr . "</td><td>" . $translatedStr . "</td></tr>";
|
|
||||||
echo "</table>";
|
|
||||||
*/
|
|
||||||
} catch (Exception $e) {
|
|
||||||
throw $e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get the access token.
|
|
||||||
*
|
|
||||||
* @param string $grantType Grant type.
|
|
||||||
* @param string $scopeUrl Application Scope URL.
|
|
||||||
* @param string $clientID Application client ID.
|
|
||||||
* @param string $clientSecret Application client ID.
|
|
||||||
* @param string $authUrl Oauth Url.
|
|
||||||
*
|
|
||||||
* @return string.
|
|
||||||
*/
|
|
||||||
private function getTokens($grantType, $scopeUrl, $clientID, $clientSecret, $authUrl)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
//Initialize the Curl Session.
|
|
||||||
$ch = curl_init();
|
|
||||||
//Create the request Array.
|
|
||||||
$paramArr = [
|
|
||||||
'grant_type' => $grantType,
|
|
||||||
'scope' => $scopeUrl,
|
|
||||||
'client_id' => $clientID,
|
|
||||||
'client_secret' => $clientSecret,
|
|
||||||
];
|
|
||||||
//Create an Http Query.//
|
|
||||||
$paramArr = http_build_query($paramArr);
|
|
||||||
//Set the Curl URL.
|
|
||||||
curl_setopt($ch, CURLOPT_URL, $authUrl);
|
|
||||||
//Set HTTP POST Request.
|
|
||||||
curl_setopt($ch, CURLOPT_POST, true);
|
|
||||||
//Set data to POST in HTTP "POST" Operation.
|
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $paramArr);
|
|
||||||
//CURLOPT_RETURNTRANSFER- TRUE to return the transfer as a string of the return value of curl_exec().
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
//CURLOPT_SSL_VERIFYPEER- Set FALSE to stop cURL from verifying the peer's certificate.
|
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
||||||
//Execute the cURL session.
|
|
||||||
$strResponse = curl_exec($ch);
|
|
||||||
//Get the Error Code returned by Curl.
|
|
||||||
$curlErrno = curl_errno($ch);
|
|
||||||
if ($curlErrno) {
|
|
||||||
$curlError = curl_error($ch);
|
|
||||||
curl_close($ch);
|
|
||||||
|
|
||||||
throw new Exception($curlError);
|
|
||||||
}
|
|
||||||
//Close the Curl Session.
|
|
||||||
curl_close($ch);
|
|
||||||
//Decode the returned JSON string.
|
|
||||||
$objResponse = json_decode($strResponse);
|
|
||||||
if (@$objResponse->error) {
|
|
||||||
throw new Exception($objResponse->error_description);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $objResponse->access_token;
|
|
||||||
} catch (Exception $e) {
|
|
||||||
throw $e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Create and execute the HTTP CURL request.
|
|
||||||
*
|
|
||||||
* @param string $url HTTP Url.
|
|
||||||
* @param string $authHeader Authorization Header string.
|
|
||||||
* @param string $postData Data to post.
|
|
||||||
*
|
|
||||||
* @return string.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private function curlRequest($url, $authHeader)
|
|
||||||
{
|
|
||||||
//Initialize the Curl Session.
|
|
||||||
$ch = curl_init();
|
|
||||||
//Set the Curl url.
|
|
||||||
curl_setopt($ch, CURLOPT_URL, $url);
|
|
||||||
//Set the HTTP HEADER Fields.
|
|
||||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [$authHeader,'Content-Type: text/xml']);
|
|
||||||
//CURLOPT_RETURNTRANSFER- TRUE to return the transfer as a string of the return value of curl_exec().
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
//CURLOPT_SSL_VERIFYPEER- Set FALSE to stop cURL from verifying the peer's certificate.
|
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
||||||
//Execute the cURL session.
|
|
||||||
$curlResponse = curl_exec($ch);
|
|
||||||
//Get the Error Code returned by Curl.
|
|
||||||
$curlErrno = curl_errno($ch);
|
|
||||||
if ($curlErrno) {
|
|
||||||
$curlError = curl_error($ch);
|
|
||||||
curl_close($ch);
|
|
||||||
|
|
||||||
throw new Exception($curlError);
|
|
||||||
}
|
|
||||||
//Close a cURL session.
|
|
||||||
curl_close($ch);
|
|
||||||
|
|
||||||
return $curlResponse;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,122 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @brief translater, a plugin for Dotclear 2
|
|
||||||
*
|
|
||||||
* @package Dotclear
|
|
||||||
* @subpackage Plugin
|
|
||||||
*
|
|
||||||
* @author Jean-Christian Denis & contributors
|
|
||||||
*
|
|
||||||
* @copyright Jean-Christian Denis
|
|
||||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
|
||||||
*/
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Dotclear\Plugin\translater;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Translater proposal tool.
|
|
||||||
*
|
|
||||||
* Generic class to provide translation tool
|
|
||||||
*/
|
|
||||||
abstract class translaterProposalTool
|
|
||||||
{
|
|
||||||
private $active = false;
|
|
||||||
private $name = 'unknow';
|
|
||||||
private $desc = 'no description';
|
|
||||||
|
|
||||||
/**
|
|
||||||
Constructor
|
|
||||||
*/
|
|
||||||
final public function __construct()
|
|
||||||
{
|
|
||||||
$this->setup();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set name of this tool
|
|
||||||
|
|
||||||
@param string $name Tool's name
|
|
||||||
*/
|
|
||||||
final protected function setName($name)
|
|
||||||
{
|
|
||||||
$this->name = (string) $name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Get name of this tool
|
|
||||||
|
|
||||||
@return string Tool's name
|
|
||||||
*/
|
|
||||||
final public function getName()
|
|
||||||
{
|
|
||||||
return $this->name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set description of this tool
|
|
||||||
|
|
||||||
@param string $desc Tool's description
|
|
||||||
*/
|
|
||||||
final protected function setDesc($desc)
|
|
||||||
{
|
|
||||||
$this->desc = (string) $desc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Get description of this tool
|
|
||||||
|
|
||||||
@return string Tool's description
|
|
||||||
*/
|
|
||||||
final public function getDesc()
|
|
||||||
{
|
|
||||||
return $this->desc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set tool as (un)active
|
|
||||||
|
|
||||||
@param boolean $active True to set it as active
|
|
||||||
*/
|
|
||||||
final protected function setActive($active)
|
|
||||||
{
|
|
||||||
$this->active = (bool) $active;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Check if this tool is active
|
|
||||||
|
|
||||||
@return boolean True if it is active
|
|
||||||
*/
|
|
||||||
final public function isActive()
|
|
||||||
{
|
|
||||||
return $this->active;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set tool's info - using setName(),setDesc(),setActive()
|
|
||||||
*/
|
|
||||||
abstract protected function setup();
|
|
||||||
|
|
||||||
/**
|
|
||||||
Get configuration interface
|
|
||||||
|
|
||||||
@return string Form field
|
|
||||||
*/
|
|
||||||
abstract public function form();
|
|
||||||
|
|
||||||
/**
|
|
||||||
Save configuration
|
|
||||||
*/
|
|
||||||
abstract public function save();
|
|
||||||
|
|
||||||
/**
|
|
||||||
Translate a string from a language to another
|
|
||||||
|
|
||||||
@param string $str Trimed UTF-8 string to translate
|
|
||||||
@param string $from Source language code
|
|
||||||
@param string $to Destination language code
|
|
||||||
@return string Translated string
|
|
||||||
*/
|
|
||||||
abstract public function translate($str, $from, $to);
|
|
||||||
}
|
|
74
src/Rest.php
74
src/Rest.php
|
@ -1,74 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @brief translater, a plugin for Dotclear 2
|
|
||||||
*
|
|
||||||
* @package Dotclear
|
|
||||||
* @subpackage Plugin
|
|
||||||
*
|
|
||||||
* @author Jean-Christian Denis & contributors
|
|
||||||
*
|
|
||||||
* @copyright Jean-Christian Denis
|
|
||||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
|
||||||
*/
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Dotclear\Plugin\translater;
|
|
||||||
|
|
||||||
use dcCore;
|
|
||||||
use html;
|
|
||||||
use text;
|
|
||||||
use xmlTag;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Translater REST service.
|
|
||||||
*
|
|
||||||
* Admin service de retrieve translation of a string
|
|
||||||
* Queries come from translater jquery tools
|
|
||||||
*/
|
|
||||||
class Rest
|
|
||||||
{
|
|
||||||
public static function getProposal($get)
|
|
||||||
{
|
|
||||||
$from = !empty($get['langFrom']) ? trim($get['langFrom']) : '';
|
|
||||||
$to = !empty($get['langTo']) ? trim($get['langTo']) : '';
|
|
||||||
$tool = !empty($get['langTool']) ? trim($get['langTool']) : '';
|
|
||||||
$str_in = !empty($get['langStr']) ? trim($get['langStr']) : '';
|
|
||||||
|
|
||||||
$str_in = text::toUTF8($str_in);
|
|
||||||
$str_in = trim($str_in);
|
|
||||||
$str_out = '';
|
|
||||||
|
|
||||||
$rsp = new xmlTag();
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (empty($from) || empty($to) || empty($tool)) {
|
|
||||||
throw new Exception(__('Missing params'));
|
|
||||||
}
|
|
||||||
|
|
||||||
$translater = new Translater();
|
|
||||||
|
|
||||||
if (!empty($str_in)) {
|
|
||||||
if (!$translater->proposal->hasTool($tool)) {
|
|
||||||
throw new Exception(__('Failed to get translation tool'));
|
|
||||||
}
|
|
||||||
if (!$translater->proposal->getTool($tool)->isActive()) {
|
|
||||||
throw new Exception(__('Translation tool is not configured'));
|
|
||||||
}
|
|
||||||
|
|
||||||
$str_out = (string) $translater->proposal->getTool($tool)->translate($str_in, $from, $to);
|
|
||||||
}
|
|
||||||
|
|
||||||
$x = new xmlTag('proposal');
|
|
||||||
$x->lang_from = $from;
|
|
||||||
$x->lang_to = $to;
|
|
||||||
$x->tool = $tool;
|
|
||||||
$x->str_from = $str_in;
|
|
||||||
$x->str_to = text::toUTF8(html::decodeEntities($str_out));
|
|
||||||
$rsp->insertNode($x);
|
|
||||||
} catch (Exception $e) {
|
|
||||||
dcCore::app()->error->add($e->getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $rsp;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -63,12 +63,6 @@ class Settings
|
||||||
// Filename of exported lang
|
// Filename of exported lang
|
||||||
public readonly string $export_filename;
|
public readonly string $export_filename;
|
||||||
|
|
||||||
// Default service for external proposal tool
|
|
||||||
public readonly bool $proposal_tool;
|
|
||||||
|
|
||||||
// Default lang for external proposal tool
|
|
||||||
public readonly bool $proposal_lang;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor set up plugin settings
|
* Constructor set up plugin settings
|
||||||
*/
|
*/
|
||||||
|
@ -91,8 +85,6 @@ class Settings
|
||||||
$this->parse_userinfo = (string) ($s->get('parse_userinfo') ?? 'displayname, email');
|
$this->parse_userinfo = (string) ($s->get('parse_userinfo') ?? 'displayname, email');
|
||||||
$this->import_overwrite = (bool) ($s->get('import_overwrite') ?? false);
|
$this->import_overwrite = (bool) ($s->get('import_overwrite') ?? false);
|
||||||
$this->export_filename = (string) ($s->get('export_filename') ?? 'type-module-l10n-timestamp');
|
$this->export_filename = (string) ($s->get('export_filename') ?? 'type-module-l10n-timestamp');
|
||||||
$this->proposal_tool = (bool) ($s->get('proposal_tool') ?? 'google');
|
|
||||||
$this->proposal_lang = (bool) ($s->get('proposal_lang') ?? 'en');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getSetting(string $key): mixed
|
public function getSetting(string $key): mixed
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @brief translater, a plugin for Dotclear 2
|
|
||||||
*
|
|
||||||
* @package Dotclear
|
|
||||||
* @subpackage Plugin
|
|
||||||
*
|
|
||||||
* @author Jean-Christian Denis & contributors
|
|
||||||
*
|
|
||||||
* @copyright Jean-Christian Denis
|
|
||||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
|
||||||
*/
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Dotclear\Plugin\translater;
|
|
||||||
|
|
||||||
use dcCore;
|
|
||||||
use ReflectionClass;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Translater proposal tools container.
|
|
||||||
*/
|
|
||||||
class translaterProposals
|
|
||||||
{
|
|
||||||
private $stack = [];
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
# --BEHAVIOR-- addTranslaterProposalTool
|
|
||||||
dcCore::app()->callBehavior('addTranslaterProposalTool', $this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addTool($id)
|
|
||||||
{
|
|
||||||
if (!class_exists($id)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$r = new ReflectionClass($id);
|
|
||||||
$p = $r->getParentClass();
|
|
||||||
|
|
||||||
if (!$p || $p->name != 'translaterProposalTool') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->stack[$id] = new $id();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTools()
|
|
||||||
{
|
|
||||||
return $this->stack;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTool($id)
|
|
||||||
{
|
|
||||||
return array_key_exists($id, $this->stack) ? $this->stack[$id] : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function hasTool($id)
|
|
||||||
{
|
|
||||||
return array_key_exists($id, $this->stack);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue