作者 李美松

Merge branch 'develop' into lms

# Conflicts:
#	composer.json
... ... @@ -3,8 +3,12 @@
namespace App\Http\Controllers\Bside\Setting;
use App\Enums\Common\Code;
use App\Helper\Translate;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Setting\ProofreadingLogic;
use App\Models\WebSetting\Proofreading;
use App\Models\WebSetting\WebSettingCountry;
use Illuminate\Support\Facades\DB;
class ProofreadingController extends BaseController
{
... ... @@ -16,18 +20,88 @@ class ProofreadingController extends BaseController
* @method :post
* @time :2023/6/12 10:52
*/
public function lists(ProofreadingLogic $proofreadingLogic){
//默认显示语言为英语
if(!isset($this->map['language_id']) || empty($this->map['language_id'])){
$this->map['language_id'] = $this::LANGUAGE_ID;
public function lists(){
//获取语种信息
$webSettingCountryModel = new WebSettingCountry();
$countryInfo = $webSettingCountryModel->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, $countryInfo['alias']);
foreach ($new_list as $k=>$v){
$data[] = [
'text'=>trim($v),
'translate'=>$translate_list[$k],
];
}
$lists = $proofreadingLogic->proofreadingList($this->map,$this->page,$this->row);
if(!empty($lists['list']) && ($this->param['type'] == $this::TYPE_IMAGE)){
foreach ($lists['list'] as $k => $v){
$lists['list'][$k]['image_link'] = getImageUrl($v['translate']);
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'],
];
}
$this->response('success',Code::SUCCESS,$lists);
$arr2 = array_values(array_diff($new_list, $old_list));
if(!empty($arr2)){
$translate_list = Translate::tran($arr2, $countryInfo['alias']);
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);
}
/**
... ... @@ -36,8 +110,71 @@ class ProofreadingController extends BaseController
* @method :post
* @time :2023/6/12 10:52
*/
public function save(ProofreadingLogic $proofreadingLogic){
$proofreadingLogic->proofreadingSave();
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');
}
... ... @@ -60,8 +197,68 @@ class ProofreadingController extends BaseController
* @time :2023/11/22 10:02
*/
public function getUrlRead($url){
$sourceCode = file_get_contents($url);
$strippedContent = strip_tags($sourceCode); // 删除所有HTML标签
var_dump($strippedContent);
$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 = '/<footer\b[^>]*>(.*?)<\/footer>/s'; // 定义匹配`<script>`标签及其内容的正则表达式
$strippedContent = preg_replace($pattern, '', $strippedContent); // 删除`<script>`标签及其内容
$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;
}
}
... ...
... ... @@ -132,7 +132,7 @@ class FileController
}
}
$this->saveMysql($fileModel,$files->getSize(),$files->getClientOriginalExtension(),$fileName,$hash,$this->upload_location,$files->getMimeType(),$name);
return $this->response('资源',Code::SUCCESS,$this->responseData($this->path.'/'.$fileName, $name));
$this->response('资源',Code::SUCCESS,$this->responseData($this->path.'/'.$fileName, $name));
}
/**
... ...
... ... @@ -380,12 +380,12 @@ class ImageController extends Controller
if(is_array($files)){
foreach ($files as $file){
if ($file->getSize() > $max) {
return $this->response('图片最大为500K',Code::SYSTEM_ERROR);
$this->response('图片最大为500K',Code::SYSTEM_ERROR);
}
}
}else{
if ($files->getSize() > $max) {
return $this->response('图片最大为500K',Code::SYSTEM_ERROR);
$this->response('图片最大为500K',Code::SYSTEM_ERROR);
}
}
if(!isset($this->param['upload_method'])){
... ...
... ... @@ -90,7 +90,7 @@ class VisualizationLogic extends BaseLogic
$typeArray = [1,3,5,7];//单页数据
if(in_array($type,$typeArray)){
$bTemplateModel = new BTemplate();
$templateInfo = $bTemplateModel->read(['source'=>$source,'source'=>$source_id,'template_id'=>0]);
$templateInfo = $bTemplateModel->read(['source'=>$source,'source_id'=>$source_id,'template_id'=>0]);
if($templateInfo === false){
$data = [
'html'=>$this->param['html'],
... ...
... ... @@ -218,6 +218,8 @@ class ProductLogic extends BaseLogic
$param['icon'][$k1] = str_replace_url($v1);
}
$param['icon'] = Arr::a2s($param['icon'] ?? []);
}else{
$param['icon'] = Arr::a2s([]);
}
$param['created_uid'] = $this->user['id'];
return $param;
... ...
... ... @@ -19,18 +19,6 @@ class ProofreadingLogic extends BaseLogic
}
/**
* @name :(校队列表)proofreadingList
* @author :lyh
* @method :post
* @time :2023/6/12 11:06
*/
public function proofreadingList($map,$p,$row,$order = 'created_at',$filed = ['*']){
$map['project_id'] = $this->user['project_id'];
$list = $this->model->lists($map,$p,$row,$order,$filed);
return $this->success($list);
}
/**
* @name :(保存翻译校队)proofreadingSave
* @author :lyh
* @method :post
... ...
... ... @@ -200,6 +200,7 @@ class UserLoginLogic
$info['is_upload_manage'] = $project['is_upload_manage'];
$info['upload_config'] = $project['upload_config'];
$info['image_max'] = $project['image_max'];
$info['is_update_language'] = $project['is_update_language'];
$info['configuration'] = $project['deploy_build']['configuration'];
$info['type'] = $project['type'];
if($info['is_customized'] == 1){
... ...
... ... @@ -19,14 +19,14 @@ class BTemplate extends Base
const SOURCE_KEYWORD = 5;//聚合页
const STATUS = 0;
const TYPE_ONE = 0;
const TYPE_TWO = 0;
const TYPE_THREE = 0;
const TYPE_FOUR = 0;
const TYPE_FIVE = 0;
const TYPE_SIX = 0;
const TYPE_SEVEN = 0;
const TYPE_ = 0;
const TYPE_ONE = 1;
const TYPE_TWO = 2;
const TYPE_THREE = 3;
const TYPE_FOUR = 4;
const TYPE_FIVE = 5;
const TYPE_SIX = 6;
const TYPE_SEVEN = 7;
const TYPE_EIGHT = 8;
protected $table = 'gl_web_template';
//连接数据库
... ...
... ... @@ -19,7 +19,6 @@
"mongodb/mongodb": "^1.6",
"mrgoon/aliyun-sms": "^2.0",
"phpoffice/phpspreadsheet": "^1.28",
"qcloud/cos-sdk-v5": "^2.6",
"swooletw/laravel-swoole": "^2.13"
},
"require-dev": {
... ...
... ... @@ -167,7 +167,9 @@ Route::middleware(['bloginauth'])->group(function () {
//翻译校队
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::any('/languageList', [\App\Http\Controllers\Bside\Setting\ProofreadingController::class, 'languageList'])->name('web_proofreading_languageList');
});
... ...