PageRenderTime 67ms CodeModel.GetById 34ms RepoModel.GetById 0ms app.codeStats 0ms

/app/webroot/js/editor/dialog/php/ckfinder/core/connector/php/php5/Core/ResourceTypeConfig.php

https://github.com/talesam/sgce
PHP | 357 lines | 169 code | 37 blank | 151 comment | 36 complexity | bb49bc424c1e1f097f0c8e68aded42d4 MD5 | raw file
  1. <?php
  2. /*
  3. * CKFinder
  4. * ========
  5. * http://www.ckfinder.com
  6. * Copyright (C) 2007-2008 Frederico Caldeira Knabben (FredCK.com)
  7. *
  8. * The software, this file and its contents are subject to the CKFinder
  9. * License. Please read the license.txt file before using, installing, copying,
  10. * modifying or distribute this file or part of its contents. The contents of
  11. * this file is part of the Source Code of CKFinder.
  12. */
  13. /**
  14. * @package CKFinder
  15. * @subpackage Config
  16. * @copyright Frederico Caldeira Knabben
  17. */
  18. /**
  19. * This class keeps resource types configuration
  20. *
  21. * @package CKFinder
  22. * @subpackage Config
  23. * @copyright Frederico Caldeira Knabben
  24. */
  25. class CKFinder_Connector_Core_ResourceTypeConfig
  26. {
  27. /**
  28. * Resource name
  29. *
  30. * @var string
  31. * @access private
  32. */
  33. private $_name = "";
  34. /**
  35. * Resource url
  36. *
  37. * @var string
  38. * @access private
  39. */
  40. private $_url = "";
  41. /**
  42. * Directory path on a server
  43. *
  44. * @var string
  45. * @access private
  46. */
  47. private $_directory = "";
  48. /**
  49. * Max size
  50. *
  51. * @var unknown_type
  52. * @access private
  53. */
  54. private $_maxSize = 0;
  55. /**
  56. * Array with allowed extensions
  57. *
  58. * @var array[]string
  59. * @access private
  60. */
  61. private $_allowedExtensions = array();
  62. /**
  63. * Array with denied extensions
  64. *
  65. * @var array[]string
  66. * @access private
  67. */
  68. private $_deniedExtensions = array();
  69. /**
  70. * Default view
  71. *
  72. * @var string
  73. * @access private
  74. */
  75. private $_defaultView = "Thumbnails";
  76. /**
  77. * used for CKFinder_Connector_Core_Config object caching
  78. *
  79. * @var CKFinder_Connector_Core_Config
  80. * @access private
  81. */
  82. private $_config;
  83. /**
  84. * Get ResourceType configuration
  85. *
  86. * @param string $resourceTypeNode
  87. * @return array
  88. *
  89. */
  90. function __construct($resourceTypeNode)
  91. {
  92. if (isset($resourceTypeNode["name"])) {
  93. $this->_name = $resourceTypeNode["name"];
  94. }
  95. if (isset($resourceTypeNode["url"])) {
  96. $this->_url = $resourceTypeNode["url"];
  97. }
  98. if (!strlen($this->_url)) {
  99. $this->_url = "/";
  100. }
  101. else if(substr($this->_url,-1,1) != "/") {
  102. $this->_url .= "/";
  103. }
  104. if (isset($resourceTypeNode["maxSize"])) {
  105. $this->_maxSize = CKFinder_Connector_Utils_Misc::returnBytes((string)$resourceTypeNode["maxSize"]);
  106. }
  107. if (isset($resourceTypeNode["directory"])) {
  108. $this->_directory = $resourceTypeNode["directory"];
  109. }
  110. if (!strlen($this->_directory)) {
  111. $this->_directory = resolveUrl($this->_url);
  112. }
  113. if (isset($resourceTypeNode["allowedExtensions"])) {
  114. if (is_array($resourceTypeNode["allowedExtensions"])) {
  115. foreach ($resourceTypeNode["allowedExtensions"] as $extension) {
  116. $this->_allowedExtensions[] = strtolower(trim((string)$e));
  117. }
  118. }
  119. else {
  120. $resourceTypeNode["allowedExtensions"] = trim((string)$resourceTypeNode["allowedExtensions"]);
  121. if (strlen($resourceTypeNode["allowedExtensions"])) {
  122. $extensions = explode(",", $resourceTypeNode["allowedExtensions"]);
  123. foreach ($extensions as $e) {
  124. $this->_allowedExtensions[] = strtolower(trim($e));
  125. }
  126. }
  127. }
  128. }
  129. if (isset($resourceTypeNode["deniedExtensions"])) {
  130. if (is_array($resourceTypeNode["deniedExtensions"])) {
  131. foreach ($resourceTypeNode["deniedExtensions"] as $extension) {
  132. $this->_deniedExtensions[] = strtolower(trim((string)$e));
  133. }
  134. }
  135. else {
  136. $resourceTypeNode["deniedExtensions"] = trim((string)$resourceTypeNode["deniedExtensions"]);
  137. if (strlen($resourceTypeNode["deniedExtensions"])) {
  138. $extensions = explode(",", $resourceTypeNode["deniedExtensions"]);
  139. foreach ($extensions as $e) {
  140. $this->_deniedExtensions[] = strtolower(trim($e));
  141. }
  142. }
  143. }
  144. }
  145. $_view = "";
  146. if (isset($resourceTypeNode["defaultView"])) {
  147. $_view = $resourceTypeNode["defaultView"];
  148. }
  149. if (!strlen($_view) && isset($GLOBALS['config']['DefaultDisplaySettings']['view'])) {
  150. $_view = $GLOBALS['config']['DefaultDisplaySettings']['view'];
  151. }
  152. if ($_view == "List") {
  153. $this->_defaultView = "List";
  154. }
  155. }
  156. /**
  157. * Get name
  158. *
  159. * @access public
  160. * @return string
  161. */
  162. public function getName()
  163. {
  164. return $this->_name;
  165. }
  166. /**
  167. * Get url
  168. *
  169. * @access public
  170. * @return string
  171. */
  172. public function getUrl()
  173. {
  174. return $this->_url;
  175. }
  176. /**
  177. * Get directory
  178. *
  179. * @access public
  180. * @return string
  181. */
  182. public function getDirectory()
  183. {
  184. return $this->_directory;
  185. }
  186. /**
  187. * Get max size
  188. *
  189. * @access public
  190. * @return int
  191. */
  192. public function getMaxSize()
  193. {
  194. return $this->_maxSize;
  195. }
  196. /**
  197. * Get allowed extensions
  198. *
  199. * @access public
  200. * @return array[]string
  201. */
  202. public function getAllowedExtensions()
  203. {
  204. return $this->_allowedExtensions;
  205. }
  206. /**
  207. * Get denied extensions
  208. *
  209. * @access public
  210. * @return array[]string
  211. */
  212. public function getDeniedExtensions()
  213. {
  214. return $this->_deniedExtensions;
  215. }
  216. /**
  217. * Get default view
  218. *
  219. * @access public
  220. * @return string
  221. */
  222. public function getDefaultView()
  223. {
  224. return $this->_defaultView;
  225. }
  226. /**
  227. * Check extension, return true if file name is valid.
  228. * Return false if extension is on denied list.
  229. * If allowed extensions are defined, return false if extension isn't on allowed list.
  230. *
  231. * @access public
  232. * @param string $extension extension
  233. * @param boolean $renameIfRequired whether try to rename file or not
  234. * @return boolean
  235. */
  236. public function checkExtension(&$fileName, $renameIfRequired = true)
  237. {
  238. if (strpos($fileName, '.') === false) {
  239. return true;
  240. }
  241. if (is_null($this->_config)) {
  242. $this->_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config");
  243. }
  244. $toCheck = array();
  245. if ($this->_config->getCheckDoubleExtension()) {
  246. $pieces = explode('.', $fileName);
  247. // First, check the last extension (ex. in file.php.jpg, the "jpg").
  248. if ( !$this->checkSingleExtension( $pieces[sizeof($pieces)-1] ) ) {
  249. return false;
  250. }
  251. if ($renameIfRequired) {
  252. // Check the other extensions, rebuilding the file name. If an extension is
  253. // not allowed, replace the dot with an underscore.
  254. $fileName = $pieces[0] ;
  255. for ($i=1; $i<sizeof($pieces)-1; $i++) {
  256. $fileName .= $this->checkSingleExtension( $pieces[$i] ) ? '.' : '_' ;
  257. $fileName .= $pieces[$i];
  258. }
  259. // Add the last extension to the final name.
  260. $fileName .= '.' . $pieces[sizeof($pieces)-1] ;
  261. }
  262. }
  263. else {
  264. // Check only the last extension (ex. in file.php.jpg, only "jpg").
  265. return $this->checkSingleExtension( substr($fileName, strrpos($fileName,'.')+1) );
  266. }
  267. return true;
  268. }
  269. /**
  270. * Check given folder name
  271. * Return true if folder name matches hidden folder names list
  272. *
  273. * @param string $folderName
  274. * @access public
  275. * @return boolean
  276. */
  277. public function checkIsHiddenFolder($folderName)
  278. {
  279. if (is_null($this->_config)) {
  280. $this->_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config");
  281. }
  282. $regex = $this->_config->getHideFoldersRegex();
  283. if ($regex) {
  284. return preg_match($regex, $folderName);
  285. }
  286. return false;
  287. }
  288. /**
  289. * Check given file name
  290. * Return true if file name matches hidden file names list
  291. *
  292. * @param string $fileName
  293. * @access public
  294. * @return boolean
  295. */
  296. public function checkIsHiddenFile($fileName)
  297. {
  298. if (is_null($this->_config)) {
  299. $this->_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config");
  300. }
  301. $regex = $this->_config->getHideFilesRegex();
  302. if ($regex) {
  303. return preg_match($regex, $fileName);
  304. }
  305. return false;
  306. }
  307. public function checkSingleExtension($extension)
  308. {
  309. $extension = strtolower(ltrim($extension,'.'));
  310. if (sizeof($this->_deniedExtensions)) {
  311. if (in_array($extension, $this->_deniedExtensions)) {
  312. return false;
  313. }
  314. }
  315. if (sizeof($this->_allowedExtensions)) {
  316. return in_array($extension, $this->_allowedExtensions);
  317. }
  318. return true;
  319. }
  320. }