PageRenderTime 43ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/fileman/admin/fileman_file_upload.php

https://gitlab.com/alexprowars/bitrix
PHP | 215 lines | 194 code | 20 blank | 1 comment | 34 complexity | 24a0981c4ea0aeba07080cf4fe9072e1 MD5 | raw file
  1. <?
  2. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
  3. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/fileman/prolog.php");
  4. if (!$USER->CanDoOperation('fileman_upload_files'))
  5. $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
  6. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/fileman/include.php");
  7. IncludeModuleLangFile(__FILE__);
  8. $addUrl = 'lang='.LANGUAGE_ID.($logical == "Y"?'&logical=Y':'');
  9. $strWarning = "";
  10. $io = CBXVirtualIo::GetInstance();
  11. $site = CFileMan::__CheckSite($site);
  12. $DOC_ROOT = CSite::GetSiteDocRoot($site);
  13. $path = $io->CombinePath("/", $path);
  14. $arPath = Array($site, $path);
  15. $arParsedPath = CFileMan::ParsePath($arPath, true, false, "", $logical == "Y");
  16. $abs_path = $DOC_ROOT.$path;
  17. $bCan = false;
  18. // Check permissions
  19. if(!$USER->CanDoFileOperation('fm_upload_file',$arPath))
  20. $strWarning = GetMessage("ACCESS_DENIED");
  21. else
  22. {
  23. $bCan = true;
  24. if($REQUEST_METHOD=="POST" && $save <> '' && check_bitrix_sessid())
  25. {
  26. $nums = intval($nums);
  27. if($nums > 0)
  28. {
  29. for($i = 1; $i <= $nums; $i++)
  30. {
  31. $arFile = $_FILES["file_".$i];
  32. if($arFile["name"] == '' || $arFile["tmp_name"]=="none")
  33. continue;
  34. $arFile["name"] = CFileman::GetFileName($arFile["name"]);
  35. $filename = ${"filename_".$i};
  36. if($filename == '')
  37. $filename = $arFile["name"];
  38. $pathto = Rel2Abs($path, $filename);
  39. if(!$USER->CanDoFileOperation('fm_upload_file',Array($site, $pathto)))
  40. {
  41. $strWarning .= GetMessage("FILEMAN_FILEUPLOAD_ACCESS_DENIED")." \"".$pathto."\"\n";
  42. }
  43. elseif($arFile["error"] == 1 || $arFile["error"] == 2)
  44. {
  45. $strWarning .= GetMessage("FILEMAN_FILEUPLOAD_SIZE_ERROR", Array('#FILE_NAME#' => $pathto))."\n";
  46. }
  47. elseif(($mess = CFileMan::CheckFileName(str_replace('/', '', $pathto))) !== true)
  48. {
  49. $strWarning .= $mess.".\n";
  50. }
  51. else if($io->FileExists($DOC_ROOT.$pathto))
  52. {
  53. $strWarning .= GetMessage("FILEMAN_FILEUPLOAD_FILE_EXISTS1")." \"".$pathto."\" ".GetMessage("FILEMAN_FILEUPLOAD_FILE_EXISTS2").".\n";
  54. }
  55. elseif(!$USER->IsAdmin() && (HasScriptExtension($pathto) || mb_substr(CFileman::GetFileName($pathto), 0, 1) == "."))
  56. {
  57. $strWarning .= GetMessage("FILEMAN_FILEUPLOAD_PHPERROR")." \"".$pathto."\".\n";
  58. }
  59. else
  60. {
  61. $bQuota = true;
  62. if (COption::GetOptionInt("main", "disk_space") > 0)
  63. {
  64. $f = $io->GetFile($arFile["tmp_name"]);
  65. $bQuota = false;
  66. $size = $f->GetFileSize();
  67. $quota = new CDiskQuota();
  68. if ($quota->checkDiskQuota(array("FILE_SIZE" => $size)))
  69. $bQuota = true;
  70. }
  71. if ($bQuota)
  72. {
  73. if(!$io->Copy($arFile["tmp_name"], $DOC_ROOT.$pathto))
  74. $strWarning .= GetMessage("FILEMAN_FILEUPLOAD_FILE_CREATE_ERROR")." \"".$pathto."\"\n";
  75. elseif(COption::GetOptionInt("main", "disk_space") > 0)
  76. CDiskQuota::updateDiskQuota("file", $size, "copy");
  77. $f = $io->GetFile($DOC_ROOT.$pathto);
  78. $f->MarkWritable();
  79. $module_id = 'fileman';
  80. if(COption::GetOptionString($module_id, "log_page", "Y")=="Y")
  81. {
  82. $res_log['path'] = mb_substr($pathto, 1);
  83. CEventLog::Log(
  84. "content",
  85. "FILE_ADD",
  86. "main",
  87. "",
  88. serialize($res_log)
  89. );
  90. }
  91. }
  92. else
  93. $strWarning .= $quota->LAST_ERROR."\n";
  94. }
  95. }
  96. }
  97. if($strWarning == '')
  98. {
  99. if (!empty($_POST["apply"]))
  100. LocalRedirect("/bitrix/admin/fileman_file_upload.php?".$addUrl."&site=".$site."&path=".UrlEncode($path));
  101. else
  102. LocalRedirect("/bitrix/admin/fileman_admin.php?".$addUrl."&site=".$site."&path=".UrlEncode($path));
  103. }
  104. }
  105. }
  106. foreach ($arParsedPath["AR_PATH"] as $chainLevel)
  107. {
  108. $adminChain->AddItem(
  109. array(
  110. "TEXT" => htmlspecialcharsex($chainLevel["TITLE"]),
  111. "LINK" => (($chainLevel["LINK"] <> '') ? $chainLevel["LINK"] : ""),
  112. )
  113. );
  114. }
  115. $APPLICATION->SetTitle(GetMessage("FILEMAN_FILE_UPLOAD_TITLE"));
  116. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
  117. ?>
  118. <?CAdminMessage::ShowMessage($strWarning);?>
  119. <?if($strWarning == '' || $bCan):?>
  120. <script>
  121. function NewFileName(ob)
  122. {
  123. var
  124. str_filename,
  125. filename,
  126. str_file = ob.value,
  127. num = ob.name;
  128. num = num.substr(num.lastIndexOf("_")+1);
  129. str_file = str_file.replace(/\\/g, '/');
  130. filename = str_file.substr(str_file.lastIndexOf("/")+1);
  131. document.ffilemanupload["filename_"+num].value = filename;
  132. if(document.ffilemanupload.nums.value==num)
  133. {
  134. num++;
  135. var tbl = BX("bx-upload-tbl");
  136. var cnt = tbl.rows.length;
  137. var oRow = tbl.insertRow(cnt);
  138. var oCell = oRow.insertCell(0);
  139. oCell.className = "adm-detail-content-cell-l";
  140. oCell.innerHTML = '<input type="text" name="filename_'+num+'" size="30" maxlength="255" value="">';
  141. var oCell = oRow.insertCell(1);
  142. oCell.className = "adm-detail-content-cell-r";
  143. oCell.innerHTML = '<input type="file" name="file_'+num+'" size="30" maxlength="255" value="" onChange="NewFileName(this)">';
  144. document.ffilemanupload.nums.value = num;
  145. }
  146. BX.adminPanel.modifyFormElements(BX("bx-upload-tbl"));
  147. }
  148. </script>
  149. <form method="POST" action="<?echo $APPLICATION->GetCurPage()."?".$addUrl."&site=".$site."&path=".UrlEncode($path);?>" name="ffilemanupload" enctype="multipart/form-data">
  150. <input type="hidden" name="logical" value="<?=htmlspecialcharsbx($logical)?>">
  151. <?echo GetFilterHiddens("filter_");?>
  152. <input type="hidden" name="save" value="Y">
  153. <?=bitrix_sessid_post()?>
  154. <?
  155. $aTabs = array(
  156. array("DIV" => "edit1", "TAB" => GetMessage('FILEMAN_UPL_TAB'), "ICON" => "fileman", "TITLE" => GetMessage('FILEMAN_UPL_TAB_ALT')),
  157. );
  158. $tabControl = new CAdminTabControl("tabControl", $aTabs, true, true);
  159. $tabControl->Begin();
  160. $tabControl->BeginNextTab();
  161. ?>
  162. <tr><td colspan="2" align="left">
  163. <input type="hidden" name="nums" value="5">
  164. <table id="bx-upload-tbl">
  165. <tr class="heading">
  166. <td style="text-align: right!important;" width="40%">
  167. <span style="display: inline-block; width: 200px; text-align: left;"><?= GetMessage("FILEMAN_FILEUPLOAD_NAME")?></span>
  168. </td>
  169. <td style="text-align: left!important;" width="60%">
  170. <?= GetMessage("FILEMAN_FILEUPLOAD_FILE")?>
  171. </td class="adm-detail-content-cell-r">
  172. </tr>
  173. <?for($i=1; $i<=5; $i++):?>
  174. <tr>
  175. <td class="adm-detail-content-cell-l">
  176. <input type="text" name="filename_<?echo $i?>" size="30" maxlength="255" value="">
  177. </td>
  178. <td class="adm-detail-content-cell-r">
  179. <input type="file" name="file_<?echo $i?>" size="30" maxlength="255" value="" onChange="NewFileName(this)">
  180. </td>
  181. </tr>
  182. <?endfor?>
  183. </table></td></tr>
  184. <?$tabControl->EndTab();
  185. $tabControl->Buttons(
  186. array(
  187. "disabled" => false,
  188. "back_url" => "/bitrix/admin/fileman_admin.php?".$addUrl."&site=".$site."&path=".UrlEncode($path)
  189. )
  190. );
  191. $tabControl->End();
  192. ?>
  193. </form>
  194. <?endif;?>
  195. <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");?>