作者 lyh

gx

<?php
namespace App\Http\Controllers\Bside\Setting;
use App\Enums\Common\Code;
use App\Helper\Translate;
use App\Http\Controllers\Bside\BaseController;
use App\Models\WebSetting\Proofreading;
use App\Models\WebSetting\WebLanguage;
use Illuminate\Support\Facades\DB;
class ProofreadingController extends BaseController
{
const LANGUAGE_ID = 1;//默认语言英语
const TYPE_IMAGE = 2;//校队图片
/**
* @name :lists
* @author :lyh
* @method :post
* @time :2023/6/12 10:52
*/
public function lists(){
//获取语种信息
$languageModel = new WebLanguage();
$languageInfo = $languageModel->read(['id'=>$this->param['language_id']]);
//获取当前链接和语种的校队列表
$proofreadingModel = new Proofreading();
$list = $proofreadingModel->list(['url'=>$this->param['url'],'language_id'=>$this->param['language_id'],'type'=>1],'created_at',['text','translate']);
//获取当前URl的所有文本内容
$new_list = $this->getUrlRead($this->param['url']);
if(empty($list)){
$data = [];
$translate_list = Translate::tran($new_list, $languageInfo['short']);
foreach ($new_list as $k=>$v){
$data[] = [
'text'=>trim($v),
'translate'=>$translate_list[$k],
];
}
return $this->response('success',Code::SUCCESS,$data);
}
$data = [];//返回数据
$old_list = [];
foreach ($list as $v){
$old_list[] = $v['text'];
$data[] = [
'text'=>$v['text'],
'translate'=>$v['translate'],
];
}
$arr2 = array_values(array_diff($new_list, $old_list));
if(!empty($arr2)){
$translate_list = Translate::tran($arr2, $languageInfo['short']);
foreach ($arr2 as $k1=>$v1){
$data[] = [
'text'=>$v1,
'translate'=>$translate_list[$k1]
];
}
}
$this->response('success',Code::SUCCESS,$data);
}
/**
* @remark :获取图片列表
* @name :imageList
* @author :lyh
* @method :post
* @time :2023/11/23 17:29
*/
public function imageList(){
$proofreadingModel = new Proofreading();
$list = $proofreadingModel->list(['url'=>$this->param['url'],'language_id'=>$this->param['language_id'],'type'=>2],'created_at',['text','translate']);
if(empty($list)){
$new_list = $this->getUrlImageRead($this->param['url']);
foreach ($new_list as $k=>$v){
$data[] = [
'text'=>$v,
'translate'=>$v,
];
}
return $this->response('success',Code::SUCCESS,$data);
}
$new_list = $this->getUrlImageRead($this->param['url']);
$data = [];//返回数据
$old_list = [];
foreach ($list as $v){
$old_list[] = $v['text'];
$data[] = [
'text'=>$v['text'],
'translate'=>$v['translate'],
];
}
$arr2 = array_values(array_diff($new_list, $old_list));
if(!empty($arr2)){
foreach ($arr2 as $v1){
$data[] = [
'text'=>$v1,
'translate'=>$v1
];
}
}
$this->response('success',Code::SUCCESS,$data);
}
/**
* @name :(新增/更新多语言)save
* @author :lyh
* @method :post
* @time :2023/6/12 10:52
*/
public function save(){
//清除以前的翻译校队数据,重新添加
$param = [
'type'=>1,
'project_id'=>$this->user['project_id'],
'url'=>$this->param['url'],
'language_id'=>$this->param['language_id'],
'alias'=>$this->param['alias'],
'created_at'=>date('Y-m-d H:i:s'),
'updated_at'=>date('Y-m-d H:i:s')
];
$proofreadingModel = new Proofreading();
DB::beginTransaction();
try {
$proofreadingModel->del(['language_id'=>$this->param['language_id'],'url'=>$this->param['url'],'type'=>1]);
//删除成功后,重新添加
$save_data = [];
foreach ($this->param['data'] as $k => $v){
$param['text'] = $v['text'];
$param['translate'] = $v['translate'];
$save_data[] = $param;
}
$proofreadingModel->insert($save_data);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('系统错误请联系管理员');
}
$this->response('success');
}
/**
* @name :(新增/更新多语言)save
* @author :lyh
* @method :post
* @time :2023/6/12 10:52
*/
public function saveImage(){
//清除以前的翻译校队数据,重新添加
$param = [
'type'=>2,
'project_id'=>$this->user['project_id'],
'url'=>$this->param['url'],
'language_id'=>$this->param['language_id'],
'alias'=>$this->param['alias'],
'created_at'=>date('Y-m-d H:i:s'),
'updated_at'=>date('Y-m-d H:i:s')
];
$proofreadingModel = new Proofreading();
DB::beginTransaction();
try {
$proofreadingModel->del(['language_id'=>$this->param['language_id'],'url'=>$this->param['url'],'type'=>2]);
//删除成功后,重新添加
$save_data = [];
foreach ($this->param['data'] as $k => $v){
$param['text'] = $v['text'];
$param['translate'] = $v['translate'];
$save_data[] = $param;
}
$proofreadingModel->insert($save_data);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('系统错误请联系管理员');
}
$this->response('success');
}
/**
* @remark :获取Url内容
* @name :getUrlRead
* @author :lyh
* @method :post
* @time :2023/11/22 10:02
*/
public function getUrlRead($url){
$contextOptions = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
];
$context = stream_context_create($contextOptions);
$sourceCode = file_get_contents($url, false, $context);
$pattern = '/<style\b[^>]*>(.*?)<\/style>/s'; // 定义匹配`<style>`标签及其内容的正则表达式
$strippedContent = preg_replace($pattern, '', $sourceCode); // 删除`<style>`标签及其内容
$pattern = '/<script\b[^>]*>(.*?)<\/script>/s'; // 定义匹配`<script>`标签及其内容的正则表达式
$strippedContent = preg_replace($pattern, '', $strippedContent); // 删除`<script>`标签及其内容
$pattern = '/<link\b[^>]*>/'; // 定义匹配 `<link>` 标签的正则表达式
$strippedContent = preg_replace($pattern, '', $strippedContent); // 删除 `<link>` 标签
$pattern = '/>([^<]+)</'; // 定义匹配中间内容不是标签的正则表达式
$matches = array();
preg_match_all($pattern, $strippedContent, $matches);
$textContentArray = array_filter($matches[1], function($item) {
return !empty(trim($item));
});
$data = [];
foreach ($textContentArray as $v){
$content = trim($v);
$trimmedString = preg_replace('/\s+/', ' ', $content);
$data[] = $trimmedString;
}
$data = array_values($data);
// $uniqueArray = array_unique($data);
// $data = array_values($uniqueArray);
return $data;
}
/**
* @remark :获取Url内容
* @name :getUrlRead
* @author :lyh
* @method :post
* @time :2023/11/22 10:02
*/
public function getUrlImageRead($url){
$contextOptions = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
];
$pattern = '/<img.*?src="(.*?)".*?>/i';
$matches = array();
$context = stream_context_create($contextOptions);
$sourceCode = file_get_contents($url, false, $context);
preg_match_all($pattern, $sourceCode, $matches);
$textContentArray = $matches[1];
$data = [];
foreach ($textContentArray as $v){
if(!empty($v)){
$data[] = $v;
}
}
$uniqueArray = array_unique($data);
$data = array_values($uniqueArray);
return $data;
}
}
... ... @@ -189,14 +189,7 @@ Route::middleware(['bloginauth'])->group(function () {
Route::any('/', [\App\Http\Controllers\Bside\Setting\WebSettingReceivingController::class, 'lists'])->name('web_setting_receiving_lists');
Route::any('/save', [\App\Http\Controllers\Bside\Setting\WebSettingReceivingController::class, 'save'])->name('web_setting_receiving_save');
});
//翻译校队
// Route::prefix('proofreading')->group(function () {//languageList
// Route::any('/', [\App\Http\Controllers\Bside\Setting\ProofreadingController::class, 'lists'])->name('web_proofreading_lists');
// Route::any('/imageList', [\App\Http\Controllers\Bside\Setting\ProofreadingController::class, 'imageList'])->name('web_proofreading_imageList');
// Route::any('/save', [\App\Http\Controllers\Bside\Setting\ProofreadingController::class, 'save'])->name('web_proofreading_save');
// Route::any('/saveImage', [\App\Http\Controllers\Bside\Setting\ProofreadingController::class, 'saveImage'])->name('web_proofreading_saveImage');
// });
//新版翻译校队
Route::prefix('translate_check')->group(function () {//languageList
Route::any('/', [\App\Http\Controllers\Bside\Setting\TranslateController::class, 'lists'])->name('translate_check_lists');
... ...