joomla 的docman 有幾個奇怪的問題,
最近用硬幹的方法做了簡單的patch

1. 下載檔案時,在IE中UTF-8的中文檔名會變亂碼


        header("Pragma: public");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Expires: 0");

後面插入

  header("Content-Transfer-Encoding: binary");

# mod by phenix 20110328 IE 不吃 UTF8編碼
if (strspn("MSIE",$_SERVER["HTTP_USER_AGENT"])==4){  
//执行IE的程序块 
$aaa= ' filename="' . iconv('utf-8','big-5',$this->name) . '";';
}else{
$aaa= ' filename="' . $this->name . '";';
}



header('Content-Disposition:' . $cont_dis .';'
#. ' filename="' . $this->name . '";'
.$aaa
. ' modification-date="' . $mod_date . '";'
. ' size=' . $fsize .';'
); //RFC2183

 

2. 檔案刪掉已後重新上傳 , 但確會一直出現檔案已存在的問題,
找了一下發現是 document 不會去刪檔 , 只有 file 會去刪除,
所以很簡單, 我也不想寫刪檔的程式,
直接重傳不要check 就好

//|| ($validate & _DM_VALIDATE_EXISTS && ! $this->validateExists( $name, $path ) )

 

3. 在 dmdocument 下面建立 sub folders (by date)

function uploadHTTP(&$file, $path, $validate = _DM_VALIDATE_ALL )
    {
    #搬之前要先建目錄  upload/日期/序號
$path_name1 = date("Y");
$path_name1 .= date("m");
$path_name1 .= date("d");
if(!is_dir($path."/".$path_name1."/")){
mkdir($path."/".$path_name1."/", 0700);
}
    $path=$path."/".$path_name1;


$name   = DOCMAN_Utils::stripslashes($file['name']);

$errorcode = $file['error'] ? $file['error'] : 0;
    $temp_name = trim($file['tmp_name']);


        if(($validate & _DM_VALIDATE_PATH   && ! $this->validatePath( $path) )
|| ($validate & _DM_VALIDATE_NAME   && ! $this->validateName( $name ) )
//|| ($validate & _DM_VALIDATE_EXISTS && ! $this->validateExists( $name, $path ) )
//mark by phenix 20110529 不要check 是否存在
|| ($validate & _DM_VALIDATE_SIZE   && ! $this->validateSize($temp_name))
|| ($validate & _DM_VALIDATE_EXT    && ! $this->validateExt($name)) ){


            return false;
        }




if( $errorcode == 0 ){
#by phenix dmdocument 下再分目錄
#return $this->_upload($name, $temp_name, $path);
    return $this->_upload($name, $temp_name, $path,$path_name1);
        }


// Finish by handling errors
switch ($errorcode )
{
    case UPLOAD_ERR_INI_SIZE:
    case UPLOAD_ERR_FORM_SIZE:
        $this->_err = _DML_SIZEEXCEEDS;
break;


    case UPLOAD_ERR_PARTIAL:
$this->_err = _DML_ONLYPARTIAL;
break;


    case UPLOAD_ERR_NO_FILE:
$this->_err = _DML_NOUPLOADED;
break;


    default:
  $this->_err = _DML_TRANSFERERROR." $errorcode";
break;
}
return false;
    }

 


#function _upload($name, $temp_name, $path)
    #mod by phenix
    function _upload($name, $temp_name, $path,$date_pre)
    {
if (is_uploaded_file($temp_name)) {
  if (move_uploaded_file($temp_name, $path."/".$name)) {
                #$file = new DOCMAN_File($name, $path);
                $file = new DOCMAN_File($date_pre."/".$name, $path);
                return $file;
  } else {
        $this->_err = _DML_DIRPROBLEM." ";
  }
        } else {
        $this->_err = _DML_DIRPROBLEM2." ";
}
        return false;
    }

 

這些修改都是改

 


joomla\administrator\components\com_docman\classes\DOCMAN_utils.class.php

 

arrow
arrow
    全站熱搜

    阿貴貴 發表在 痞客邦 留言(0) 人氣()