PageRenderTime 37ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/core/model/modx/processors/browser/directory/chmod.php

https://github.com/krisj/revolution
PHP | 53 lines | 34 code | 7 blank | 12 comment | 13 complexity | b937e9973ebfbdf52dc86ac3ee29398e MD5 | raw file
Possible License(s): AGPL-1.0, LGPL-2.1, GPL-2.0, GPL-3.0, LGPL-2.0
  1. <?php
  2. /**
  3. * Chmod a directory
  4. *
  5. * @param string $mode The mode to chmod to
  6. * @param string $dir The absolute path of the dir
  7. * @param boolean $prependPath (optional) If true, will prepend rb_base_dir to
  8. * the final path
  9. * @package modx
  10. * @subpackage processors.browser.directory
  11. */
  12. if (!$modx->hasPermission('directory_chmod')) return $modx->error->failure($modx->lexicon('permission_denied'));
  13. $modx->lexicon->load('file');
  14. if (empty($scriptProperties['mode'])) return $modx->error->failure($modx->lexicon('file_err_chmod_ns'));
  15. if (empty($scriptProperties['dir'])) return $modx->error->failure($modx->lexicon('file_folder_err_ns'));
  16. /* get working context */
  17. $wctx = isset($scriptProperties['wctx']) && !empty($scriptProperties['wctx']) ? $scriptProperties['wctx'] : '';
  18. if (!empty($wctx)) {
  19. $workingContext = $modx->getContext($wctx);
  20. if (!$workingContext) {
  21. return $modx->error->failure($modx->error->failure($modx->lexicon('permission_denied')));
  22. }
  23. } else {
  24. $workingContext =& $modx->context;
  25. }
  26. $modx->getService('fileHandler','modFileHandler', '', array('context' => $workingContext->get('key')));
  27. /* get base paths and sanitize incoming paths */
  28. $root = $modx->fileHandler->getBasePath(false);
  29. if ($workingContext->getOption('filemanager_path_relative',true)) {
  30. $root = $workingContext->getOption('base_path','').$root;
  31. }
  32. $directoryPath = $modx->fileHandler->sanitizePath($scriptProperties['dir']);
  33. $directoryPath = $modx->fileHandler->postfixSlash($directoryPath);
  34. $directoryPath = $root.$directoryPath;
  35. if (!is_dir($directoryPath)) return $modx->error->failure($modx->lexicon('file_folder_err_invalid'));
  36. $directory = $modx->fileHandler->make($directoryPath);
  37. if (!($directory instanceof modDirectory)) return $modx->error->failure($modx->lexicon('file_folder_err_invalid'));
  38. if (!$directory->isReadable() || !$directory->isWritable()) {
  39. return $modx->error->failure($modx->lexicon('file_folder_err_perms'));
  40. }
  41. $octalPerms = $scriptProperties['mode'];
  42. if (!$directory->chmod($octalPerms)) {
  43. return $modx->error->failure($modx->lexicon('file_err_chmod'));
  44. }
  45. $modx->logManagerAction('directory_chmod','',$directoryPath);
  46. return $modx->error->success();