mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-23 10:55:34 +08:00
326 lines
10 KiB
PHP
326 lines
10 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 2026 ShopeX (https://www.shopex.cn)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
class ediws_func
|
|
{
|
|
|
|
/**
|
|
* 获取insert sql语句
|
|
* @access static public
|
|
* @param Object $model model对象
|
|
* @param Array $data 需插入的关联(字段)数组数据,支持多维
|
|
* @return String insert sql语句
|
|
*/
|
|
static public function get_insert_sql($model,$data){
|
|
if (empty($model) || empty($data)) return NULL;
|
|
|
|
$cols = $model->_columns();
|
|
$strValue = $insert_data = $column_type = array();
|
|
$strFields = '';
|
|
|
|
$rs = $model->db->exec('select * from `'.$model->table_name(1).'` where 0=1');
|
|
$col_count = mysql_num_fields($rs['rs']);
|
|
|
|
$tmp_data = $data;
|
|
if (!is_array(array_pop($tmp_data))){
|
|
$insert_data[] = $data;
|
|
}else{
|
|
$insert_data = $data;
|
|
}
|
|
unset($tmp_data);
|
|
|
|
foreach ($insert_data as $key=>$value){
|
|
$insertValues = array();
|
|
if (!empty($strFields)){
|
|
$col_count = count($strFields);
|
|
}
|
|
for($i=0;$i<$col_count;$i++) {
|
|
if (empty($strFields)){
|
|
$column = mysql_fetch_field($rs['rs'],$i);
|
|
$k = $column->name;
|
|
$column_type[$k] = $column->type;
|
|
if( !isset($value[$k]) ){
|
|
continue;
|
|
}
|
|
}else{
|
|
$k = $strFields[$i];
|
|
}
|
|
$p = $cols[$k];
|
|
|
|
if(!isset($p['default']) && $p['required'] && $p['extra']!='auto_increment'){
|
|
if(!isset($value[$k])){
|
|
trigger_error(($p['label']?$p['label']:$k).app::get('base')->_('不能为空!'),E_USER_ERROR);
|
|
}
|
|
}
|
|
|
|
if( $value[$k] !== false ){
|
|
if( $p['type'] == 'last_modify' ){
|
|
$insertValues[$k] = time();
|
|
}elseif( $p['depend_col'] ){
|
|
$dependColVal = explode(':',$p['depend_col']);
|
|
if( $value[$dependColVal[0]] == $dependColVal[1] ){
|
|
switch( $dependColVal[2] ){
|
|
case 'now':
|
|
$insertValues[$k] = time();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if( $p['type']=='serialize' ){
|
|
$value[$k] = serialize($value[$k]);
|
|
}
|
|
if( !isset($value[$k]) && $p['required'] && isset($p['default']) ){
|
|
$value[$k] = $p['default'];
|
|
}
|
|
$insertValues[$k] = base_db_tools::quotevalue($model->db,$value[$k],$column_type[$k]);
|
|
}
|
|
if (empty($strFields)){
|
|
$strFields = array_keys($insertValues);
|
|
}
|
|
$strValue[] = "(".implode(',',$insertValues).")";
|
|
}
|
|
|
|
$strFields = implode('`,`', $strFields);
|
|
$strValue = implode(',', $strValue);
|
|
$sql = 'INSERT INTO `'.$model->table_name(true).'` ( `'.$strFields.'` ) VALUES '.$strValue;
|
|
|
|
return $sql;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 获取REPLACE sql语句
|
|
* @access static public
|
|
* @param Object $model model对象
|
|
* @param Array $data 需插入的关联(字段)数组数据,支持多维
|
|
* @return String insert sql语句
|
|
*/
|
|
static public function get_replace_sql($model,$data){
|
|
if (empty($model) || empty($data)) return NULL;
|
|
|
|
$cols = $model->_columns();
|
|
|
|
$strValue = $insert_data = $column_type = array();
|
|
$strFields = '';
|
|
|
|
$rs = $model->db->exec('select * from `'.$model->table_name(1).'` where 0=1');
|
|
$col_count = mysql_num_fields($rs['rs']);
|
|
|
|
$tmp_data = $data;
|
|
if (!is_array(array_pop($tmp_data))){
|
|
$insert_data[] = $data;
|
|
}else{
|
|
$insert_data = $data;
|
|
}
|
|
unset($tmp_data);
|
|
|
|
foreach ($insert_data as $key=>$value){
|
|
$insertValues = array();
|
|
if (!empty($strFields)){
|
|
$col_count = count($strFields);
|
|
}
|
|
for($i=0;$i<$col_count;$i++) {
|
|
if (empty($strFields)){
|
|
$column = mysql_fetch_field($rs['rs'],$i);
|
|
$k = $column->name;
|
|
$column_type[$k] = $column->type;
|
|
if( !isset($value[$k]) ){
|
|
//continue;
|
|
}
|
|
}else{
|
|
$k = $strFields[$i];
|
|
}
|
|
$p = $cols[$k];
|
|
|
|
if(!isset($p['default']) && $p['required'] && $p['extra']!='auto_increment'){
|
|
if(!isset($value[$k])){
|
|
trigger_error(($p['label']?$p['label']:$k).app::get('base')->_('不能为空!'),E_USER_ERROR);
|
|
}
|
|
}
|
|
|
|
if( $value[$k] !== false ){
|
|
if( $p['type'] == 'last_modify' ){
|
|
$insertValues[$k] = time();
|
|
}elseif( $p['depend_col'] ){
|
|
$dependColVal = explode(':',$p['depend_col']);
|
|
if( $value[$dependColVal[0]] == $dependColVal[1] ){
|
|
switch( $dependColVal[2] ){
|
|
case 'now':
|
|
$insertValues[$k] = time();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if( $p['type']=='serialize' ){
|
|
$value[$k] = serialize($value[$k]);
|
|
}
|
|
if( !isset($value[$k]) && $p['required'] && isset($p['default']) ){
|
|
$value[$k] = $p['default'];
|
|
}
|
|
$insertValues[$k] = base_db_tools::quotevalue($model->db,$value[$k],$column_type[$k]);
|
|
}
|
|
if (empty($strFields)){
|
|
$strFields = array_keys($insertValues);
|
|
}
|
|
$strValue[] = "(".implode(',',$insertValues).")";
|
|
}
|
|
|
|
$strFields = implode('`,`', $strFields);
|
|
|
|
$strValue = implode(',', $strValue);
|
|
$sql = 'REPLACE INTO `'.$model->table_name(true).'` ( `'.$strFields.'` ) VALUES '.$strValue;
|
|
|
|
return $sql;
|
|
}
|
|
|
|
|
|
/**
|
|
* 兼容PHP5.3不支持array_column()方法
|
|
*
|
|
* @param array $array
|
|
* @param $column_key
|
|
* @param $index_key
|
|
* @return array
|
|
*/
|
|
public function _array_column(array $array, $column_key, $index_key=null)
|
|
{
|
|
if(function_exists('array_column')) {
|
|
if($index_key){
|
|
return array_column($array, $column_key, $index_key);
|
|
}else{
|
|
return array_column($array, $column_key);
|
|
}
|
|
}
|
|
|
|
$result = array();
|
|
foreach($array as $arr)
|
|
{
|
|
if(!is_array($arr)) continue;
|
|
|
|
if(is_null($column_key)){
|
|
$value = $arr;
|
|
}else{
|
|
$value = $arr[$column_key];
|
|
}
|
|
|
|
if(!is_null($index_key)){
|
|
$key = $arr[$index_key];
|
|
$result[$key] = $value;
|
|
}else{
|
|
$result[] = $value;
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 下载.zip压缩文件
|
|
*
|
|
* @param $url
|
|
* @param $write_file 写入的文件名
|
|
* @return true
|
|
*/
|
|
public static function download_zip($url, $write_file)
|
|
{
|
|
$ch = curl_init($url);
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
|
|
$data = curl_exec($ch);
|
|
|
|
curl_close($ch);
|
|
|
|
$file = fopen($write_file, 'w+');
|
|
|
|
fputs($file, $data);
|
|
fclose($file);
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* 解压文件
|
|
*
|
|
* @param $zip_file 压缩文件名
|
|
* @param $unzip_dir 解压目录名
|
|
* @param $is_delete 解压后是否删除压缩文件
|
|
* @return true
|
|
*/
|
|
public function unZip($zip_file, $unzip_dir, $is_delete=false)
|
|
{
|
|
$result = array('rsp'=>'fail', 'error_msg'=>'');
|
|
$filrname = array();
|
|
|
|
//dir
|
|
if (!is_dir($unzip_dir)) {
|
|
utils::mkdir_p($unzip_dir);
|
|
}
|
|
|
|
//修改文件夹权限
|
|
chmod($zip_file, 0777);
|
|
|
|
$zip = new ZipArchive;
|
|
if($zip->open($zip_file) === true) {
|
|
//读取zip压缩包文件列表
|
|
for($i=0; $i<$zip->numFiles; $i++){
|
|
//$zip->numFiles 获取压缩包内文件个数(父级)
|
|
$filrname[] = $zip->getNameIndex($i);
|
|
}
|
|
|
|
$zip->close();
|
|
}else{
|
|
$result['error_msg'] = '打开压缩文件失败!';
|
|
return $result;
|
|
}
|
|
|
|
//check
|
|
if(empty($filrname)){
|
|
$result['error_msg'] = '读取压缩包中的文件失败';
|
|
return $result;
|
|
}
|
|
|
|
//保存压缩包中的文件
|
|
if ($zip->open($zip_file) === true) {
|
|
$zip->extractTo($unzip_dir); //直接解压不修改文件名;
|
|
//$zip->addFile('image.txt'); //指定文件名进行存储;
|
|
|
|
$zip->close();
|
|
}else{
|
|
$result['error_msg'] = '打开压缩文件失败;';
|
|
return $result;
|
|
}
|
|
|
|
//删除压缩文件
|
|
if ($is_delete) {
|
|
unlink($zip_file);
|
|
}
|
|
|
|
//files
|
|
$result['fileList'] = $filrname;
|
|
$result['rsp'] = 'succ';
|
|
|
|
return $result;
|
|
}
|
|
}
|