From 483bb6935593dbf656579341121725ab10d8bf98 Mon Sep 17 00:00:00 2001 From: Gaurav Narula Date: Tue, 27 Dec 2011 14:58:34 +0000 Subject: [PATCH] Restored UploaderController.php git-svn-id: file:///Users/Shitiz/Downloads/lssvn/source/limesurvey_yii@11780 b72ed6b6-b9f8-46b5-92b4-906544132732 --- .../controllers/UploaderController.php | 257 ++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 application/controllers/UploaderController.php diff --git a/application/controllers/UploaderController.php b/application/controllers/UploaderController.php new file mode 100644 index 00000000000..c45085a6a78 --- /dev/null +++ b/application/controllers/UploaderController.php @@ -0,0 +1,257 @@ +getConfig("uploaddir"); + $tempdir = Yii::app()->getConfig("tempdir"); + + Yii::app()->loadHelper("database"); + $param = $_REQUEST; + + if (isset($param['filegetcontents'])) + { + $sFileName=$param['filegetcontents']; + if (substr($sFileName,0,6)=='futmp_') + { + $sFileDir = $tempdir.'/uploads/'; + } + elseif(substr($sFileName,0,3)=='fu_'){ + $sFileDir = "{$uploaddir}/surveys/{$surveyid}/files/"; + } + header('Content-Type: '.mime_content_type($sFileDir.$sFileName)); + readfile($sFileDir.$sFileName); + exit(); + } + + if (!isset($surveyid)) + { + $surveyid=sanitize_int(@$param['sid']); + } + else + { + //This next line ensures that the $surveyid value is never anything but a number. + $surveyid=sanitize_int($surveyid); + } + + if(isset($param['mode']) && $param['mode'] == "upload") + { + $clang = Yii::app()->lang; + + $sTempUploadDir = $tempdir.'/uploads/'; + $filename = $_FILES['uploadfile']['name']; + $size = 0.001 * $_FILES['uploadfile']['size']; + $valid_extensions = strtolower($_POST['valid_extensions']); + $maxfilesize = (int) $_POST['max_filesize']; + $preview = $_POST['preview']; + $fieldname = $_POST['fieldname']; + $aFieldMap=createFieldMap($surveyid); + if (!isset($aFieldMap[$fieldname])) die(); + $aAttributes=getQuestionAttributeValues($aFieldMap[$fieldname]['qid'],$aFieldMap[$fieldname]['type']); + + $valid_extensions_array = explode(",", $aAttributes['allowed_filetypes']); + $valid_extensions_array = array_map('trim',$valid_extensions_array); + + $pathinfo = pathinfo($_FILES['uploadfile']['name']); + $ext = $pathinfo['extension']; + $randfilename = 'futmp_'.sRandomChars(15).'.'.$pathinfo['extension']; + $randfileloc = $sTempUploadDir . $randfilename; + + // check to see that this file type is allowed + // it is also checked at the client side, but jst double checking + if (!in_array(strtolower($ext), $valid_extensions_array)) + { + $return = array( + "success" => false, + "msg" => sprintf($clang->gT("Sorry, this file extension (%s) is not allowed!"),$ext) + ); + + echo ls_json_encode($return); + exit (); + } + + // If this is just a preview, don't save the file + if ($preview) + { + if ($size > $maxfilesize) + { + $return = array( + "success" => false, + "msg" => sprintf($clang->gT("Sorry, this file is too large. Only files upto %s KB are allowed."), $maxfilesize) + ); + echo ls_json_encode($return); + } + + else if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $randfileloc)) + { + + $return = array( + "success" => true, + "file_index" => $filecount, + "size" => $size, + "name" => rawurlencode(basename($filename)), + "ext" => $ext, + "filename" => $randfilename, + "msg" => $clang->gT("The file has been successfuly uploaded.") + ); + echo ls_json_encode($return); + + // TODO : unlink this file since this is just a preview + // unlink($randfileloc); + } + } + else + { // if everything went fine and the file was uploaded successfuly, + // send the file related info back to the client + $iFileUploadTotalSpaceMB = Yii::app()->getConfig("iFileUploadTotalSpaceMB"); + if ($size > $maxfilesize) + { + $return = array( + "success" => false, + "msg" => sprintf($clang->gT("Sorry, this file is too large. Only files up to %s KB are allowed.",'unescaped'), $maxfilesize) + ); + echo ls_json_encode($return); + } + elseif ($iFileUploadTotalSpaceMB>0 && ((fCalculateTotalFileUploadUsage()+($size/1024/1024))>$iFileUploadTotalSpaceMB)) + { + $return = array( + "success" => false, + "msg" => $clang->gT("We are sorry but there was a system error and your file was not saved. An email has been dispatched to notify the survey administrator.",'unescaped') + ); + echo ls_json_encode($return); + } + elseif (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $randfileloc)) + { + + + $return = array( + "success" => true, + "size" => $size, + "name" => rawurlencode(basename($filename)), + "ext" => $ext, + "filename" => $randfilename, + "msg" => $clang->gT("The file has been successfuly uploaded.") + ); + + echo ls_json_encode($return); + } + // if there was some error, report error message + else + { + // check for upload error + if ($_FILES['uploadfile']['error'] > 2) + { + $return = array( + "success" => false, + "msg" => $clang->gT("Sorry, there was an error uploading your file") + ); + + echo ls_json_encode($return); + } + // check to ensure that the file does not cross the maximum file size + else if ( $_FILES['uploadfile']['error'] == 1 || $_FILES['uploadfile']['error'] == 2 || $size > $maxfilesize) + { + $return = array( + "success" => false, + "msg" => sprintf($clang->gT("Sorry, this file is too large. Only files upto %s KB are allowed."), $maxfilesize) + ); + + echo ls_json_encode($return); + } + else + { + $return = array( + "success" => false, + "msg" => $clang->gT("Unknown error") + ); + echo ls_json_encode($return); + } + } + } + return; + } + + $meta = ''; + + $meta .=' + + '; + + $clang = Yii::app()->lang; + + $header = getHeader($meta); + + echo $header; + + echo "\n"; + + $fn = $param['fieldname']; + $qid = $param['qid']; + $qidattributes=getQuestionAttributeValues($qid); + + $body = ' +
+ + + + + + + + + + + + +
+ +
+ +

'.sprintf($clang->gT("You can upload %s under %s KB each.",'js'),$qidattributes['allowed_filetypes'],$qidattributes['max_filesize']).'

+
+ + + + + + '; + echo $body; + + + } + +}