PageRenderTime 62ms CodeModel.GetById 35ms RepoModel.GetById 1ms app.codeStats 0ms

/plugins/p_fckeditor/fckeditor/editor/filemanager/connectors/php/commands.php

https://bitbucket.org/ivangalin/instantcms_mirror
PHP | 285 lines | 199 code | 49 blank | 37 comment | 48 complexity | 7bfd214d35290f4d550296b6d252cc86 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1
  1. <?php
  2. /*
  3. * FCKeditor - The text editor for Internet - http://www.fckeditor.net
  4. * Copyright (C) 2003-2010 Frederico Caldeira Knabben
  5. *
  6. * == BEGIN LICENSE ==
  7. *
  8. * Licensed under the terms of any of the following licenses at your
  9. * choice:
  10. *
  11. * - GNU General Public License Version 2 or later (the "GPL")
  12. * http://www.gnu.org/licenses/gpl.html
  13. *
  14. * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
  15. * http://www.gnu.org/licenses/lgpl.html
  16. *
  17. * - Mozilla Public License Version 1.1 or later (the "MPL")
  18. * http://www.mozilla.org/MPL/MPL-1.1.html
  19. *
  20. * == END LICENSE ==
  21. *
  22. * This is the File Manager Connector for PHP.
  23. */
  24. function GetFolders( $resourceType, $currentFolder )
  25. {
  26. // Map the virtual path to the local server path.
  27. $sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'GetFolders' ) ;
  28. // Array that will hold the folders names.
  29. $aFolders = array() ;
  30. $oCurrentFolder = @opendir( $sServerDir ) ;
  31. if ($oCurrentFolder !== false)
  32. {
  33. while ( $sFile = readdir( $oCurrentFolder ) )
  34. {
  35. if ( $sFile != '.' && $sFile != '..' && is_dir( $sServerDir . $sFile ) )
  36. $aFolders[] = '<Folder name="' . ConvertToXmlAttribute( $sFile ) . '" />' ;
  37. }
  38. closedir( $oCurrentFolder ) ;
  39. }
  40. // Open the "Folders" node.
  41. echo "<Folders>" ;
  42. natcasesort( $aFolders ) ;
  43. foreach ( $aFolders as $sFolder )
  44. echo $sFolder ;
  45. // Close the "Folders" node.
  46. echo "</Folders>" ;
  47. }
  48. function GetFoldersAndFiles( $resourceType, $currentFolder )
  49. {
  50. // Map the virtual path to the local server path.
  51. $sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'GetFoldersAndFiles' ) ;
  52. // Arrays that will hold the folders and files names.
  53. $aFolders = array() ;
  54. $aFiles = array() ;
  55. $oCurrentFolder = @opendir( $sServerDir ) ;
  56. if ($oCurrentFolder !== false)
  57. {
  58. while ( $sFile = readdir( $oCurrentFolder ) )
  59. {
  60. if ( $sFile != '.' && $sFile != '..' )
  61. {
  62. if ( is_dir( $sServerDir . $sFile ) )
  63. $aFolders[] = '<Folder name="' . ConvertToXmlAttribute( $sFile ) . '" />' ;
  64. else
  65. {
  66. $iFileSize = @filesize( $sServerDir . $sFile ) ;
  67. if ( !$iFileSize ) {
  68. $iFileSize = 0 ;
  69. }
  70. if ( $iFileSize > 0 )
  71. {
  72. $iFileSize = round( $iFileSize / 1024 ) ;
  73. if ( $iFileSize < 1 )
  74. $iFileSize = 1 ;
  75. }
  76. $aFiles[] = '<File name="' . ConvertToXmlAttribute( $sFile ) . '" size="' . $iFileSize . '" />' ;
  77. }
  78. }
  79. }
  80. closedir( $oCurrentFolder ) ;
  81. }
  82. // Send the folders
  83. natcasesort( $aFolders ) ;
  84. echo '<Folders>' ;
  85. foreach ( $aFolders as $sFolder )
  86. echo $sFolder ;
  87. echo '</Folders>' ;
  88. // Send the files
  89. natcasesort( $aFiles ) ;
  90. echo '<Files>' ;
  91. foreach ( $aFiles as $sFiles )
  92. echo $sFiles ;
  93. echo '</Files>' ;
  94. }
  95. function CreateFolder( $resourceType, $currentFolder )
  96. {
  97. if (!isset($_GET)) {
  98. global $_GET;
  99. }
  100. $sErrorNumber = '0' ;
  101. $sErrorMsg = '' ;
  102. if ( isset( $_GET['NewFolderName'] ) )
  103. {
  104. $sNewFolderName = $_GET['NewFolderName'] ;
  105. $sNewFolderName = SanitizeFolderName( $sNewFolderName ) ;
  106. if ( strpos( $sNewFolderName, '..' ) !== FALSE )
  107. $sErrorNumber = '102' ; // Invalid folder name.
  108. else
  109. {
  110. // Map the virtual path to the local server path of the current folder.
  111. $sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'CreateFolder' ) ;
  112. if ( is_writable( $sServerDir ) )
  113. {
  114. $sServerDir .= $sNewFolderName ;
  115. $sErrorMsg = CreateServerFolder( $sServerDir ) ;
  116. switch ( $sErrorMsg )
  117. {
  118. case '' :
  119. $sErrorNumber = '0' ;
  120. break ;
  121. case 'Invalid argument' :
  122. case 'No such file or directory' :
  123. $sErrorNumber = '102' ; // Path too long.
  124. break ;
  125. default :
  126. $sErrorNumber = '110' ;
  127. break ;
  128. }
  129. }
  130. else
  131. $sErrorNumber = '103' ;
  132. }
  133. }
  134. else
  135. $sErrorNumber = '102' ;
  136. // Create the "Error" node.
  137. echo '<Error number="' . $sErrorNumber . '" />' ;
  138. }
  139. function FileUpload( $resourceType, $currentFolder, $sCommand )
  140. {
  141. if (!isset($_FILES)) {
  142. global $_FILES;
  143. }
  144. $sErrorNumber = '0' ;
  145. $sFileName = '' ;
  146. if ( isset( $_FILES['NewFile'] ) && !is_null( $_FILES['NewFile']['tmp_name'] ) )
  147. {
  148. global $Config ;
  149. $oFile = $_FILES['NewFile'] ;
  150. // Map the virtual path to the local server path.
  151. $sServerDir = ServerMapFolder( $resourceType, $currentFolder, $sCommand ) ;
  152. // Get the uploaded file name.
  153. $sFileName = $oFile['name'] ;
  154. $sFileName = SanitizeFileName( $sFileName ) ;
  155. $sFileNameName = mb_substr($sFileName, 0, mb_strrpos($sFileName, '.'));
  156. // Get the extension.
  157. $path_parts = pathinfo($sFileName);
  158. $sExtension = mb_strtolower($path_parts['extension']);
  159. $sFileName = cmsCore::strToURL($sFileNameName).'.'.$sExtension;
  160. $sOriginalFileName = $sFileName ;
  161. if(stristr($sExtension, 'php') || stristr($sExtension, 'htm')) { $sErrorNumber = '202' ; }
  162. if ( isset( $Config['SecureImageUploads'] ) )
  163. {
  164. if ( ( $isImageValid = IsImageValid( $oFile['tmp_name'], $sExtension ) ) === false )
  165. {
  166. $sErrorNumber = '202' ;
  167. }
  168. }
  169. if ( isset( $Config['HtmlExtensions'] ) )
  170. {
  171. if ( !IsHtmlExtension( $sExtension, $Config['HtmlExtensions'] ) &&
  172. ( $detectHtml = DetectHtml( $oFile['tmp_name'] ) ) === true )
  173. {
  174. $sErrorNumber = '202' ;
  175. }
  176. }
  177. // Check if it is an allowed extension.
  178. if ( !$sErrorNumber && IsAllowedExt( $sExtension, $resourceType ) )
  179. {
  180. $iCounter = 0 ;
  181. while ( true )
  182. {
  183. $sFilePath = $sServerDir . $sFileName ;
  184. if ( is_file( $sFilePath ) )
  185. {
  186. $iCounter++ ;
  187. $sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ;
  188. $sErrorNumber = '201' ;
  189. }
  190. else
  191. {
  192. move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ;
  193. if ( is_file( $sFilePath ) )
  194. {
  195. if ( isset( $Config['ChmodOnUpload'] ) && !$Config['ChmodOnUpload'] )
  196. {
  197. break ;
  198. }
  199. $permissions = 0777;
  200. if ( isset( $Config['ChmodOnUpload'] ) && $Config['ChmodOnUpload'] )
  201. {
  202. $permissions = $Config['ChmodOnUpload'] ;
  203. }
  204. $oldumask = umask(0) ;
  205. chmod( $sFilePath, $permissions ) ;
  206. umask( $oldumask ) ;
  207. }
  208. break ;
  209. }
  210. }
  211. if ( file_exists( $sFilePath ) )
  212. {
  213. //previous checks failed, try once again
  214. if ( isset( $isImageValid ) && $isImageValid === -1 && IsImageValid( $sFilePath, $sExtension ) === false )
  215. {
  216. @unlink( $sFilePath ) ;
  217. $sErrorNumber = '202' ;
  218. }
  219. else if ( isset( $detectHtml ) && $detectHtml === -1 && DetectHtml( $sFilePath ) === true )
  220. {
  221. @unlink( $sFilePath ) ;
  222. $sErrorNumber = '202' ;
  223. }
  224. }
  225. }
  226. else
  227. $sErrorNumber = '202' ;
  228. }
  229. else
  230. $sErrorNumber = '202' ;
  231. $sFileUrl = CombinePaths( GetResourceTypePath( $resourceType, $sCommand ) , $currentFolder ) ;
  232. $sFileUrl = CombinePaths( $sFileUrl, $sFileName ) ;
  233. SendUploadResults( $sErrorNumber, $sFileUrl, $sFileName ) ;
  234. exit ;
  235. }
  236. ?>