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