// +----------------------------------------------------------------------
// 应用公共文件
function authcode($str)
{
$key = substr(md5('ThinkPHP.CN'), 5, 8);
$str1 = substr(md5($str), 8, 10);
return md5($key . $str1);
}
function readExcel($file){
// 读取Excel文件
$objPHPExcel = PHPExcel_IOFactory::load($file);
// 获取表格中的数据
$sheet = $objPHPExcel->getSheet(0); // 获取第一个工作表
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
$dataset = [];
for ($row = 1; $row <= $highestRow; $row++) {
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
array_push($dataset, $rowData[0]);
}
return $dataset;
}
function readDocx($file){
$phpWord = IOFactory::load($file);
$frag = [];
foreach ($phpWord->getSections() as $section) {
foreach ($section->getElements() as $element) {
if (method_exists($element, 'getText')) {
// echo $element->getText() . "\n";
$frag[] = $element->getText();
}
}
}
return $frag;
}
/**
* @function sendEmail
* @intro 发送邮件(带附件)
* @param $email 接收邮箱
* @param $title 邮件标题
* @param $from_name 发件人
* @param $content 邮件内容
* @param $memail 邮件内容
* @param $mpassword 邮件内容
* @param $attachmentFile 附件 (string | array)
* @return array
*/
function sendEmail($email = '', $title = '', $from_name = '', $content = '', $memail = '', $mpassword = '', $attachmentFile = '')
{
date_default_timezone_set('PRC');
//Create a new PHPMailer instance
$mail = new PHPMailer;
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 0;
//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';
//charset
$mail->CharSet = 'UTF-8';
//Set the hostname of the mail server
$mail->Host = "smtp.qiye.aliyun.com"; //请填写你的邮箱服务器
//Set the SMTP port number - likely to be 25, 465 or 587
$mail->Port = 25; //端口号
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication
$mail->Username = $memail == '' ? "tmrweb@tmrjournals.com" : $memail; //发件邮箱用户名
//Password to use for SMTP authentication
$mail->Password = $mpassword == '' ? "Wu999999tmrwe" : $mpassword; //发件邮箱密码
//Set who the message is to be sent from
$mail->setFrom($memail == '' ? "tmrweb@tmrjournals.com" : $memail, $from_name);
//Set an alternative reply-to address(用户直接回复邮件的地址)
$mail->addReplyTo($memail == '' ? "tmrweb@tmrjournals.com" : $memail, $from_name);
//Set who the message is to be sent to
$mail->addAddress($email);
//Set the subject line
$mail->Subject = $title;
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
//组合邮件模板的头尾
$pre = Env::get('emailtemplete.pre');
$net = Env::get('emailtemplete.net');
$net = str_replace("{{email}}", $memail, $net);
// $mail->msgHTML($pre.$content.$net);
$mail->msgHTML($content);
//Replace the plain text body with one created manually
$mail->AltBody = '';
if (is_array($attachmentFile)) {
for ($i = 0; $i < count($attachmentFile); $i++) {
if ($attachmentFile[$i] != '') {
$mail->addAttachment($attachmentFile[$i], substr($attachmentFile[$i], strrpos($attachmentFile[$i], DS) + 1)); //这里可以是多维数组,然后循环附件的文件和名称
}
}
} else {
if ($attachmentFile != '') {
//Attach an image file
$mail->addAttachment($attachmentFile, substr($attachmentFile, strrpos($attachmentFile, DS) + 1));
}
}
//send the message, check for errors
if (!$mail->send()) {
$status = 0;
$data = "邮件发送失败" . $mail->ErrorInfo;;
} else {
$status = 1;
$data = "邮件发送成功";
}
return ['status' => $status, 'data' => $data]; //返回值(可选)
}
function object_to_array($obj)
{
$obj = (array) $obj;
foreach ($obj as $k => $v) {
if (gettype($v) == 'resource') {
return;
}
if (gettype($v) == 'object' || gettype($v) == 'array') {
$obj[$k] = (array) object_to_array($v);
}
}
return $obj;
}
function get_str()
{
$length = 32;
$str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$len = strlen($str) - 1;
$randstr = '';
for ($i = 0; $i < $length; $i++) {
$num = mt_rand(0, $len);
$randstr .= $str[$num];
}
return md5($randstr . time());
}
function getArticleMains($article_id){
$article_mains_obj = Db::name("article_main");
$mains = $article_mains_obj->where("article_id",$article_id)->whereIn("state",[0,2])->order("sort asc")->select();
if(!$mains){
return null;
}
foreach ($mains as $k=>$main) {
if($main['is_h1']==1){
$mains[$k]['content'] = "".$main['content']."";
}
if($main['is_h2']==1||$main['is_h3']==1){
$mains[$k]['content'] = "".$main['content']."";
}
$mains[$k]['checks'] = Db::name("article_main_check")->where("am_id",$main['am_id'])->where("state",0)->select();
if($main['type']==0){
continue;
}elseif($main['type']==1){
$c_d = Db::name("article_main_image")->where("ami_id",$main['ami_id'])->find();
$mains[$k]['image'] = $c_d;
}else{
$c_d_t = Db::name("article_main_table")->where("amt_id",$main['amt_id'])->find();
$mains[$k]['table'] = $c_d_t;
}
}
return $mains;
}
function getRandPassword()
{
$length = 8;
$str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$len = strlen($str) - 1;
$randstr = '';
for ($i = 0; $i < $length; $i++) {
$num = mt_rand(0, $len);
$randstr .= $str[$num];
}
return $randstr;
}
function proofState($article_id)
{
$p_article_obj = Db::name('production_article');
$p_article_obj->where('article_id', $article_id)->where('state', '<>', 1)->where('proof_etime', '<', time())->where('proof_state', 1)->update(['proof_state' => 2]);
}
function docxReader($file){
$phpWord = IOFactory::load($file);
$content = '';
foreach ($phpWord->getSections() as $section) {
foreach ($section->getElements() as $element) {
if ($element instanceof \PhpOffice\PhpWord\Element\TextRun) {
foreach ($element->getElements() as $text) {
if ($text instanceof \PhpOffice\PhpWord\Element\Text) {
$content .= $text->getText();
}
}
$content .= ";";
}
elseif ($element instanceof \PhpOffice\PhpWord\Element\Text) {
$content .= $element->getText() . ";";
}
}
}
return $content;
}
function readWordImg($article_id,$file){
$phpWord = IOFactory::load($file);
// 获取文档中的所有图像
$images = [];
foreach ($phpWord->getSections() as $section) {
foreach ($section->getElements() as $element) {
var_dump(get_class($element)); // 输出每个元素的类名
// 如果是列表项元素,检查其中是否包含图片
if ($element instanceof \PhpOffice\PhpWord\Element\ListItemRun) {
foreach ($element->getElements() as $itemElement) {
if (method_exists($itemElement, 'getImage')) {
$image = $itemElement->getImage();
if ($image) {
$imageContent = $image->getImageString();
$imageName = 'image_' . uniqid() . '.' . $image->getExtension();
file_put_contents(ROOT_PATH.'/public/articleImage/'.$article_id."/" . $imageName, $imageContent);
$images[] = $imageName;
}
}
}
} elseif ($element instanceof \PhpOffice\PhpWord\Element\Table) {
// 检查表格中是否包含图片
foreach ($element->getRows() as $row) {
foreach ($row->getCells() as $cell) {
foreach ($cell->getElements() as $cellElement) {
if (method_exists($cellElement, 'getImage')) {
$image = $cellElement->getImage();
if ($image) {
$imageContent = $image->getImageString();
$imageName = 'image_' . uniqid() . '.' . $image->getExtension();
file_put_contents(ROOT_PATH.'/public/articleImage/'.$article_id."/" . $imageName, $imageContent);
$images[] = $imageName;
}
}
}
}
}
}
// 检查是否是图片元素
elseif (method_exists($element, 'getImage')) {
$image = $element->getImage();
if ($image) {
$imageContent = $image->getImageString();
$imageName = 'image_' . uniqid() . '.' . $image->getExtension();
file_put_contents(ROOT_PATH.'/public/articleImage/'.$article_id."/" . $imageName, $imageContent);
$images[] = $imageName;
}
}
}
}
return $images;
}
/**
* 生成文章sn号
* @return type
*/
function getArticleSN($abbr, $type)
{
$str = $abbr;
$str .= date('Y', time()) . $type . date('md', time());
$where['accept_sn'] = ['like', "$str%"];
$nowres = Db::name('article')->where($where)->select();
$last_num = 1;
if ($nowres) {
foreach ($nowres as $v) {
$now_num = intval(substr($v['accept_sn'], -3));
$last_num = $now_num > $last_num ? $now_num : $last_num;
}
$last_num += 1;
}
$last_str = sprintf("%03d", $last_num);
$str .= $last_str;
return $str;
}
function translateType($type)
{
$frag = '';
switch ($type) {
case "A":
$frag = 'ARTICLE';
break;
case 'B':
$frag = 'REVIEW';
break;
case 'C':
$frag = 'CASE REPORT';
break;
case 'P':
$frag = 'RESEARCH PROPOSAL';
break;
case 'N':
$frag = 'NEWS';
break;
case 'T':
$frag = 'COMMENT';
break;
case 'CT':
$frag = 'CORRECTION';
break;
case 'HT':
$frag = 'HYPOTHESIS';
break;
case 'PF':
$frag = 'PREFACE';
break;
case 'ET':
$frag = 'EDITORIAL';
break;
case 'RP':
$frag = 'REPORT';
break;
case 'LR':
$frag = 'LETTER';
break;
case 'EF':
$frag = 'EMPIRICAL FORMULA';
break;
case 'EM':
$frag = 'EVIDENCE-BASED MEDICINE';
break;
case 'EC':
$frag = 'EXPERT CONSENSUS';
break;
case 'LTE':
$frag = 'LETTER TO EDITOR';
break;
case 'QI':
$frag = 'QUESTIONNAIRE INVESTIGATION';
break;
case 'PT':
$frag = 'PROTOCOL';
break;
case 'CS':
$frag = 'CASE SERIES';
break;
case 'RT':
$frag = 'RETRACTION';
break;
case 'MR':
$frag = 'MINI REVIEW';
break;
case 'PERSP':
$frag = 'PERSPECTIVE';
break;
default:
$frag = 'OTHERS';
break;
}
return $frag;
}
function search_array_val($arr, $val)
{
foreach ($arr as $k => $v) {
if ($v == $val) {
return $k;
}
}
}
function sendMyEmail($email,$title,$content){
$mail = new PHPMailer(true);
try {
// 服务器设置
$mail->isSMTP();
$mail->Host = 'smtp.tmrjournals.com.cn'; // SMTP 服务器
$mail->SMTPAuth = true;
$mail->Username = 'wangjinlei@tmrjournals.com.cn'; // SMTP 用户名
$mail->Password = '123456qwe';
// $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable STARTTLS encryption
// $mail->Port = 587; // TCP port for STARTTLS
// $mail->SMTPDebug = 2; // Enable debugging for detailed output
// $mail->SMTPSecure = ''; // 不使用 SSL 或 TLS
// $mail->Port = 25;
$mail->SMTPSecure = false; // 禁用TLS/SSL加密
$mail->SMTPAutoTLS = false; // 禁用自动TLS加密
$mail->Port = 25; // 非加密的SMTP通常使用端口25
// 收件人设置
$mail->setFrom('wangjinlei@tmrjournals.com.cn', 'tmr');
$mail->addAddress($email, $email); // 添加一个收件人
$mail->addReplyTo('wangjinlei@tmrjournals.com.cn', 'repack');
// 附件(可选)
// $mail->addAttachment('/var/tmp/file.tar.gz');
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg');
// 内容
$mail->isHTML(true); // 设置邮件格式为 HTML
$mail->Subject = $title;
$pre = Env::get('emailtemplete.pre');
$net = Env::get('emailtemplete.net');
$net = str_replace("{{email}}", 'wangjinlei@tmrjournals.com.cn', $net);
$bo = $pre.$content.$net;
$mail->Body = $bo;
$mail->AltBody = $content;
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
}
function GptChar($message,$ckey)
{
$url = 'https://api.openai.com/v1/chat/completions';
// OpenAI API key
$api_key = Env::get("gpt.api_key");
// Request data
$data = array(
'model' => 'gpt-3.5-turbo',
'messages' => $message,
'temperature' => 0.2,
'max_tokens' => 2048,
'n' => 1,
'stop' => '',
'stream' => true // Use streaming mode
);
// Create request headers
$headers = array(
'Content-Type: application/json',
'Authorization: Bearer ' . $api_key
);
// Create context for request
$context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => $headers,
'content' => json_encode($data),
'ignore_errors' => true
)
));
// Open connection to API endpoint
$fp = fopen($url, 'r', false, $context);
$cache_id = '';
// Read response data
if ($fp) {
while (!feof($fp)) {
$chunk = fgets($fp);
echo $chunk;
$cache = object_to_array(json_decode(substr($chunk,6)));
if(isset($cache['choices'][0]['delta']['content'])){
$cc = Cache::get($ckey)?Cache::get($ckey):'';
Cache::set($ckey,$cc.$cache['choices'][0]['delta']['content'],3600);
}
if(isset($cache['id'])&&$cache['id']!=''){
$cache_id = $cache['id'];
}
// ob_flush();
// flush();
}
fclose($fp);
}
if($cache_id!=''){
Cache::set($ckey."_id",$cache_id);
}
Cache::set($ckey,(Cache::get($ckey)?Cache::get($ckey):'')."[{enddata}]",3600);
}
function freshContent($production_obj){
$production_article_main_obj = Db::name('production_article_main');
$gpt_res =object_to_array(json_decode(pushGpt("请帮我按照学术期刊的校对规则 将以下这段文字进行校对 目标是校对格式 不要改动文本内容 除非确认有拼写或语法错误 ,并且不要去掉这四个标签 直接改在原文:".$production_obj['content']))) ;
$production_article_main_obj->where('p_main_id',$production_obj['p_main_id'])->update(['content_g'=>$gpt_res['choices'][0]['message']['content']]);
$production_article_main_obj->close();
}
function my_array_merge($articles1,$articles2){
$ids = [];
foreach ($articles1 as $v){
$ids[] = $v["article_id"];
}
foreach ($articles2 as $v){
if(!in_array($v["article_id"],$ids)){
$articles1[] = $v;
}
}
return $articles1;
}
function zw_array(array $arr){
sort($arr);
$count = count($arr);
$middle = floor(($count-1)/2);
if($count % 2==0){
$median = ($arr[$middle]+$arr[$middle+1]) / 2;
}else{
$median = $arr[$middle];
}
return $median;
}
function pushGpt($content){
// die;
$url = 'https://api.openai.com/v1/chat/completions';
$api_key = Env::get("gpt.api_key");
// Request data
$mes['role'] = "user";
$mes['content'] = $content;
$data = array(
'model' => 'gpt-3.5-turbo',
'messages' => [$mes],
'temperature' => 0.2,
'max_tokens' => 2048,
'n' => 1,
'stop' => ''
);
$headers = array(
'Content-Type: application/json',
'Authorization: Bearer '.$api_key
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if(curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $result;
}
/**
* GET 请求
* @param string $url
*/
function myGet($url)
{
$oCurl = curl_init();
if (stripos($url, "https://") !== FALSE) {
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
}
curl_setopt($oCurl, CURLOPT_URL, $url); //目标URL
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1); //设定是否显示头信息,1为显示
curl_setopt($oCurl, CURLOPT_BINARYTRANSFER, true); //在启用CURLOPT_RETURNTRANSFER时候将获取数据返回
$sContent = curl_exec($oCurl);
$aStatus = curl_getinfo($oCurl); //获取页面各种信息
$err = curl_error($oCurl);
curl_close($oCurl);
if (intval($aStatus["http_code"]) == 200) {
return $sContent;
} else {
return $err;
// return false;
}
}
function formateVol($v){
$flag = "";
if(isset($v['year'])) {
if(is_array($v['year'])){
$flag .= $v['year'][0].", ".$v['year'][1]." ";
}else{
$flag .= $v['year']." ";
}
}
if(isset($v['volume'])) {
$flag .= $v['volume']." ";
}
if(isset($v['first_page'])) {
$flag .= $v['first_page']." ";
}
if(isset($v['item_number'])&&!isset($v['first_page'])) {
$flag .= $v['item_number']." ";
}
if(isset($v['issue'])) {
$flag .= $v['issue']." ";
}
return trim($flag);
}
function formateAuthor($list){
$flag = '';
if($list==null){
return $flag;
}
if(isset($list['given_name'])||isset($list['surname'])){
$flag = $list['given_name']." ".$list['surname'];
}
else if (count($list)<=3){
foreach ($list as $v){
$flag .= $v['given_name']." ".$v['surname'].", ";
}
$flag = trim(trim($flag),",");
}else{
for ($i=0;$i<3;$i++){
$flag .= $list[$i]['given_name']." ".$list[$i]['surname'].", ";
}
$flag .= "et al";
}
return $flag;
}
function xml_to_array($xml)
{
$reg = "/<(\\w+)[^>]*?>([\\x00-\\xFF]*?)<\\/\\1>/";
if(preg_match_all($reg, $xml, $matches))
{
$count = count($matches[0]);
$arr = array();
for($i = 0; $i < $count; $i++)
{
$key = $matches[1][$i];
$val = xml_to_array( $matches[2][$i] ); // 递归
if(array_key_exists($key, $arr))
{
if(is_array($arr[$key]))
{
if(!array_key_exists(0,$arr[$key]))
{
$arr[$key] = array($arr[$key]);
}
}else{
$arr[$key] = array($arr[$key]);
}
$arr[$key][] = $val;
}else{
$arr[$key] = $val;
}
}
return $arr;
}else{
return $xml;
}
}
function myGetParam($url,$params)
{
$query_string = http_build_query($params);
$full_url = $url . '?' . $query_string;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $full_url); // 设置请求URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 设置返回数据而不是直接输出
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 禁用SSL验证
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $response;
}
function my_doiToFrag($data)
{
$ts_refer_obj = Db::name('ts_refer');
if ($data['refer_doi'] == '') {
return 0;
}
$doi = str_replace('/', '%2F', $data['refer_doi']);
$url = "https://citation.crosscite.org/format?doi=$doi&style=american-veterinary-medical-association&lang=en-US";
$res = myGet($url);
$frag = trim(substr($res, strpos($res, '.') + 1));
$f = '';
$cs = 0;
if ($frag == "") {
$f = $data['refer_content'];
} else {
$c_frag = rtrim($frag, '.');
$f = substr_replace($c_frag, PHP_EOL, strripos($c_frag, "http"), 0);
$cs = 1;
}
$ts_refer_obj->where('ts_refer_id', $data['ts_refer_id'])->update(['refer_frag' => $f, "cs" => $cs]);
$ts_refer_obj->getConnection()->close();
}
function my_doiToFrag1($data)
{
$p_refer_obj = Db::name('production_article_refer');
if ($data['refer_doi'] == '') {
return 0;
}
$doi = str_replace('/', '%2F', $data['refer_doi']);
// $url = "https://citation.crosscite.org/format?doi=$doi&style=american-veterinary-medical-association&lang=en-US";
$url = "https://citation.crosscite.org/format?doi=$doi&style=cancer-translational-medicine&lang=en-US";
$res = myGet($url);
$frag = trim(substr($res, strpos($res, '.') + 1));
$f = '';
$cs = 0;
if ($frag == "") {
$f = $data['refer_content'];
} else {
$c_frag = rtrim($frag, '.');
// $f = substr_replace($c_frag,PHP_EOL,strripos($c_frag,"http"),0);
$f = $c_frag . " Available at: " . PHP_EOL . "http://doi.org/" . $data['refer_doi'];
$cs = 1;
}
$p_refer_obj->where('p_refer_id', $data['p_refer_id'])->update(['refer_frag' => $f, "cs" => $cs]);
$p_refer_obj->getConnection()->close();
}
/**
* 增加用户积分log信息
*/
function addUserScoreLog($user_id, $score, $content, $ctime, $act = '+')
{
$score_obj = Db::name('user_score_log');
$insert['user_id'] = $user_id;
$insert['content'] = trim($content);
$insert['score'] = $score;
$insert['act'] = $act;
$insert['ctime'] = $ctime;
$score_obj->insert($insert);
}
function getPaystationToken()
{
$client_id = $_ENV['CLIENT_ID'];
$client_secret = $_ENV['CLIENT_SECRET'];
$access_token_url = $_ENV['API_URL'] . '/oauth/token';
$guzzle = new Client(['base_uri' => $access_token_url]);
try {
$raw_response = $guzzle->post('', [
'headers' => ['Content-type' => 'application/json'],
'body' => json_encode([
'client_id' => $client_id,
'client_secret' => $client_secret,
'grant_type' => 'client_credentials',
'scope' => 'write'
]),
]);
$response = $raw_response->getBody()->getContents();
if ($response) {
$response_decoded = json_decode($response);
if ($response_decoded && isset($response_decoded->access_token)) {
return $response_decoded->access_token;
}
return null;
}
} catch (\GuzzleHttp\Exception\GuzzleException $e) {
//@todo: Replace with your own error handling
return null;
}
return null;
}
function my_doiToFrag2($data)
{
$p_refer_obj = Db::name('production_article_refer');
if ($data['refer_doi'] == ''||$data['state']==1) {
return 0;
}
$doi = str_replace('/', '%2F', $data['refer_doi']);
// $url = "https://citation.crosscite.org/format?doi=$doi&style=american-veterinary-medical-association&lang=en-US";
// $url = "https://citation.crosscite.org/format?doi=$doi&style=cancer-translational-medicine&lang=en-US";
$url = "https://citation.doi.org/format?doi=$doi&style=cancer-translational-medicine&lang=en-US";
$res = myGet($url);
$frag = trim(substr($res, strpos($res, '.') + 1));
$update = [];
if ($frag == "") {
$update['refer_frag'] = $data['refer_content'];
$update['refer_type'] = "other";
} else {
// preg_match("/[0-9]{4}/",$frag,$math);
// $year = $math[0];
// $qbj=trim(substr($frag,0,stripos($frag,$year))) ;
if (mb_substr_count($frag, '.') != 3) {
$f = $frag . " Available at: " . PHP_EOL . "https://doi.org/" . $data['refer_doi'];
$update['refer_type'] = "other";
$update['refer_frag'] = $f;
$update['cs'] = 1;
} else {
$res = explode('.', $frag);
$update['author'] = prgeAuthor($res[0]);
$update['title'] = trim($res[1]);
$bj = bekjournal($res[2]);
$joura = formateJournal(trim($bj[0]));
$update['joura'] = $joura;
$is_js = 0;
if ($joura == trim($bj[0])) {
}
$update['refer_type'] = "journal";
$update['is_ja'] = $joura == trim($bj[0]) ? 0 : 1;
$update['dateno'] = str_replace(' ', '', str_replace('-', '–', trim($bj[1])));
$update['doilink'] = strpos($data['refer_doi'],"http")===false?"https://doi.org/" . $data['refer_doi']:$data['refer_doi'];
$update['cs'] = 1;
}
}
$p_refer_obj->where('p_refer_id', $data['p_refer_id'])->update($update);
$p_refer_obj->getConnection()->close();
return $res;
}
function bekjournal($str)
{
preg_match("/[0-9]{4}/", $str, $math);
$year = $math[0];
$frag[0] = trim(substr($str, 0, stripos($str, $year)));
$frag[1] = substr($str, stripos($str, $year));
return $frag;
}
function formateJournal($fullname)
{
$obj = Db::name('journal_abbr');
$r = $obj->where('full_name', $fullname)->find();
if ($r) {
return $r['little_name'];
} else {
return $fullname;
}
}
function prgeAuthor($author)
{
$a = explode(',', $author);
if (count($a) < 7) {
return $author . '.';
} else {
return trim($a[0]) . ', ' . trim($a[1]) . ', ' . trim($a[2]) . ', et al.';
}
}
function my_tg_pushmail($data)
{
// $res = sendEmail($data['email'], $data['title'], $data['title'], $data['content'], $data['tmail'], $data['tpassword'], $data['attachmentFile']);
// if (isset($res['status'])) {
// $log_obj = Db::name('email_log');
// $insert['article_id'] = $data['article_id'];
// $insert['email'] = $data['email'];
// $insert['content'] = $data['content'];
// $insert['is_success'] = $res['status'];
// $insert['attachment'] = $data['attachmentFile'] != '' ? substr($data['attachmentFile'], strrpos($data['attachmentFile'], 'enclosure/') + 10) : '';
// $insert['ctime'] = time();
// $log_obj->insert($insert);
// $log_obj->close();
// }
}
function getMajorStr($major_id)
{
$major_obj = Db::name('major');
$frag = '';
$major_info = $major_obj->where('major_id', $major_id)->find();
if ($major_info == null) {
return '';
}
if ($major_info['major_level'] == 1) {
return 'Medicine';
} else {
$frag = getMajorStr($major_info['pid']) . ' > ' . $major_info['major_title'];
}
return $frag;
}
function getMajorShu($major)
{
$major_obj = Db::name('major');
if ($major == 0) {
return;
}
$res = $major_obj->where('major_id', $major)->find();
if ($res['pid'] == 1) {
return $res['major_id'];
}
$p = getMajorShu($res['pid']);
return $p . ',' . $res['major_id'];
}
function changeArticleMajor($article_id,$majors){
$ms = explode(",",$majors);
$major_to_article_obj = Db::name("major_to_article");
foreach ($ms as $v){
$check = $major_to_article_obj->where("article_id",$article_id)->where("major_id",$v)->where("state",0)->find();
if(!$check){
$insert['article_id'] = $article_id;
$insert['major_id'] = $v;
$insert['ctime'] = time();
$major_to_article_obj->insert($insert);
}
}
$has = $major_to_article_obj->where("article_id",$article_id)->where("state",0)->select();
foreach ($has as $v){
if(!in_array($v['major_id'],$ms)){
$major_to_article_obj->where("mta_id",$v['mta_id'])->update(['state'=>1]);
}
}
}
function getReviewerCvs($reviewer_id){
$cvs = Db::name('user_cv')->where('user_id',$reviewer_id)->where('state',0)->select();
return $cvs;
}
function aliemail($email,$title,$content,$has_hb=1){
vendor('aliemail.email');
$mailto=$email;
$mailsubject=$title;
//组合邮件公共样式
$pre = Env::get('emailtemplete.pre');
$net = Env::get('emailtemplete.net');
$net1 = str_replace("{{email}}",$email,$net);
$mailbody=$has_hb==1?$pre.$content.$net1:$content;
$smtpserver = "smtpdm-ap-southeast-1.aliyun.com";
$smtpserverport = 80;
$smtpusermail = "propa@hellotmr.top";
// 发件人的账号,填写控制台配置的发信地址,比如xxx@xxx.com
$smtpuser = "propa@hellotmr.top";
// 访问SMTP服务时需要提供的密码(在控制台选择发信地址进行设置)
$smtppass = "Wu751019Pnx";
$mailsubject = "=?UTF-8?B?" . base64_encode($mailsubject) . "?=";
$mailtype = "HTML";
//可选,设置回信地址
$smtpreplyto = "tmr@tmrjournals.com";
$smtp = new \smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass);
$smtp->debug = false;
$cc ="";
$bcc = "";
$additional_headers = "";
//设置发件人名称,名称用户可以自定义填写。
$sender = $title;
$res = $smtp->sendmail($mailto,$smtpusermail, $mailsubject, $mailbody, $mailtype, $cc, $bcc, $additional_headers, $sender, $smtpreplyto);
return $res;
}
//function paystationLookup($transactionId){
// $curl = curl_init();
// curl_setopt_array($curl, array(
// CURLOPT_URL => 'https://api.paystation.co.nz/v1/transactions/'.$transactionId,
// CURLOPT_RETURNTRANSFER => true,
// CURLOPT_ENCODING => '',
// CURLOPT_MAXREDIRS => 10,
// CURLOPT_TIMEOUT => 0,
// CURLOPT_FOLLOWLOCATION => true,
// CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
// CURLOPT_CUSTOMREQUEST => 'GET',
// CURLOPT_HTTPHEADER => array(
// 'Content-Type: application/json',
// 'Authorization: Bearer '.createPayStationToken()
// )
// ));
// $response = curl_exec($curl);
// curl_close($curl);
// return $response;
//}
function paystationLookup($ms){
$url = "https://payments.paystation.co.nz/lookup/";
$time = time();
$params = [
"pi" => "616562",
"ms" => $ms,
"pstn_HMACTimestamp" => $time
];
$secret_key = Env::get("paystation.hmac");// 使用提供的HMAC认证密钥
$query_string = http_build_query($params);
$hmac_signature = hash_hmac('sha256', $time."paystation".$query_string,$secret_key);
$params["pstn_HMAC"] = $hmac_signature;
$url_with_params = $url . '?' . http_build_query($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_with_params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
if(curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $response;
}
function createPayStationToken(){
$bodyParams = [
'client_id' => Env::get("paystation.client_id"),
'client_secret' => Env::get("paystation.client_secret"),
'grant_type' => 'client_credentials',
'scope' => "read write"
];
$accessTokenUrl = Env::get("paystation.api_url") . '/oauth/token';
$curlHandle = curl_init($accessTokenUrl);
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_HTTPHEADER => [
"cache-control: no-cache",
"content-type: application/x-www-form-urlencoded",
"accept: *",
"accept-encoding: gzip, deflate",
'Host: api.paystation.co.nz',
],
CURLOPT_POSTFIELDS => http_build_query($bodyParams)
];
curl_setopt_array($curlHandle, $options);
curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
$curlResponse = curl_exec($curlHandle);
$error = curl_error($curlHandle);
curl_close($curlHandle);
if ($error) {
echo "cURL error: " . $error;
} else {
$response = json_decode($curlResponse);
if (array_key_exists('access_token', $response)) {
return $response->access_token;
}
if (array_key_exists('error', $response)) {
echo $response->error_description;
}
}
}
/**资金汇率
* @return void
*/
function prin($usd){
$res = myGet("https://v6.exchangerate-api.com/v6/575c78ea6173243d6c366814/latest/USD");
$re = object_to_array(json_decode($res));
return $usd*$re["conversion_rates"]['NZD'];
}
function postPayStationQuery($endpoint, $token, $body){
$curlHandle = curl_init(Env::get("paystation.api_url") . '/' . $endpoint);
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_HTTPHEADER => [
"cache-control: no-cache",
"content-type: application/json",
"accept: *",
"accept-encoding: gzip, deflate",
"Authorization: Bearer " . $token
],
CURLOPT_POSTFIELDS => $body
];
curl_setopt_array($curlHandle, $options);
$response = curl_exec($curlHandle);
$error = curl_error($curlHandle);
curl_close($curlHandle);
if ($error) {
echo "cURL error: " . $error;
} else {
return $response ?: null;
}
return null;
}
/**
* 增加usermsg
*/
function add_usermsg($userid, $content, $url)
{
$msg_obj = Db::name('user_msg');
$msg_info = $msg_obj->where('user_id', $userid)
->where('url', $url)
->where('state', 0)
->find();
if ($msg_info) {
return true;
}
$msgdata['user_id'] = $userid;
$msgdata['content'] = $content;
$msgdata['url'] = $url;
$msgdata['ctime'] = time();
return $msg_obj->insert($msgdata);
}
function jsonSuccess($data=[])
{
return json(['code' => 0, 'msg' => 'success', 'data' => $data]);
}
function jsonError($msg)
{
return json(['code' => 1, 'msg' => $msg]);
}
function choiseJabbr($article_id, $jabbr)
{
if ($article_id < 1799 && $jabbr == "Cancer Adv") {
return "TMR Cancer";
}
if ($article_id < 910 && $jabbr == "Microenviron Microecol Res") {
return "Tumor Microenviron Res";
}
if ($article_id < 1799 && $jabbr == "Med Theor Hypothesis") {
return "TMR Theory Hypoth";
}
return $jabbr;
}
function myPost($url, $param = array())
{
if (!is_array($param)) {
throw new Exception("参数必须为array");
}
$httph = curl_init($url);
// curl_setopt($httph, CURLOPT_SSL_VERIFYPEER, 0);
// curl_setopt($httph, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($httph, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($httph, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
curl_setopt($httph, CURLOPT_POST, 1); //设置为POST方式
curl_setopt($httph, CURLOPT_POSTFIELDS, $param);
curl_setopt($httph, CURLOPT_SSL_VERIFYPEER, false);
// curl_setopt($httph, CURLOPT_RETURNTRANSFER,0);
// curl_setopt($httph, CURLOPT_HEADER,1);
$rst = curl_exec($httph);
curl_close($httph);
return $rst;
}
function myPost1($url, $param = array())
{
if (!is_array($param)) {
throw new Exception("参数必须为array");
}
$data = json_encode($param);
$httph = curl_init($url);
curl_setopt($httph, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
));
// curl_setopt($httph, CURLOPT_SSL_VERIFYPEER, 0);
// curl_setopt($httph, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($httph, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($httph, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
curl_setopt($httph, CURLOPT_POST, 1); //设置为POST方式
curl_setopt($httph, CURLOPT_POSTFIELDS, $data);
// curl_setopt($httph, CURLOPT_RETURNTRANSFER,0);
// curl_setopt($httph, CURLOPT_HEADER,1);
$rst = curl_exec($httph);
curl_close($httph);
return $rst;
}
/**
* @title 文章类型接口
* @description 文章接口
*/
function getArticleType(){
$aArticleType = [
'base' => [
['name' => 'ARTICLE','value' => 'A'],
['name' => 'REVIEW','value' => 'B'],
['name' => 'CASE REPORT','value' => 'C'],
['name' => 'RESEARCH PROPOSAL','value' => 'P'],
['name' => 'NEWS','value' => 'N'],
['name' => 'COMMENT','value' => 'T'],
['name' => 'CORRECTION','value' => 'CT'],
['name' => 'HYPOTHESIS','value' => 'HT'],
['name' => 'PREFACE','value' => 'PF'],
['name' => 'EDITORIAL','value' => 'ET'],
['name' => 'REPORT','value' => 'RP'],
['name' => 'LETTER','value' => 'LR'],
['name' => 'EMPIRICAL FORMULA','value' => 'EF'],
['name' => 'EXPERT CONSENSUS','value' => 'EC'],
['name' => 'LETTER TO EDITOR','value' => 'LTE'],
['name' => 'QUESTIONNAIRE INVESTIGATION','value' => 'QI'],
['name' => 'CASE SERIES','value' => 'CS'],
['name' => 'RETRACTION','value' => 'RT'],
['name' => 'MINI REVIEW','value' => 'MR'],
// ['name' => 'PERSPECTIVE','value' => 'PERSP'],
['name' => 'OTHERS','value' => 'O']
],
'supplement' => [
['name' => 'EVIDENCE-BASED MEDICINE','value' => 'EM'],
['name' => 'PROTOCOL','value' => 'PT'],
]
];
return $aArticleType;
}
/**
* @title 医疗类型接口
* @description 文章接口
*/
function getMedicalType(){
$aMedicalType = [
['label' => 'None','value' => ''],
['label' => 'ARTICLE','value' => 'Article'],
['label' => 'REVIEW','value' => 'Review'],
['label' => 'CASE REPORT','value' => 'Case report'],
['label' => 'RESEARCH PROPOSAL','value' => 'Research proposal'],
['label' => 'NEWS','value' => 'News'],
['label' => 'COMMENT','value' => 'Comment'],
['label' => 'CORRECTION','value' => 'Correction'],
['label' => 'HYPOTHESIS','value' => 'Hypothesis'],
['label' => 'PREFACE','value' => 'Preface'],
['label' => 'EDITORIAL','value' => 'Editorial'],
['label' => 'REPORT','value' => 'Report'],
['label' => 'LETTER','value' => 'Letter'],
['label' => 'EMPIRICAL FORMULA','value' => 'Empirical formula'],
['label' => 'EVIDENCE-BASED MEDICINE','value' => 'Evidence-based medicine'],
['label' => 'EXPERT CONSENSUS','value' => 'Expert consensus'],
['label' => 'LETTER TO EDITOR','value' => 'Letter to editor'],
['label' => 'QUESTIONNAIRE INVESTIGATION','value' => 'Questionnaire investigation'],
['label' => 'PROTOCOL','value' => 'Protocol'],
['label' => 'CASE SERIES','value' => 'Case Series'],
['label' => 'RETRACTION','value' => 'Retraction'],
['label' => 'MINI REVIEW','value' => 'Mini Review'],
['label' => 'PERSPECTIVE','value' => 'Perspective'],
['label' => '内经难经','value' => '内经难经'],
['label' => '伤寒金匮','value' => '伤寒金匮'],
['label' => '神农本草经','value' => '神农本草经'],
['label' => '温病研究','value' => '温病研究'],
['label' => '唐宋方药','value' => '唐宋方药'],
['label' => '金元各家','value' => '金元各家'],
['label' => '明清经典','value' => '明清经典'],
['label' => '中西汇通','value' => '中西汇通'],
['label' => '太湖选粹','value' => '太湖选粹'],
['label' => '针灸推拿','value' => '针灸推拿'],
['label' => '名医名方','value' => '名医名方'],
['label' => '新冠肺炎','value' => '新冠肺炎'],
['label' => '书评','value' => '书评']
];
return $aMedicalType;
}