index.class.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. /**
  3. * @package modx
  4. * @subpackage manager.controllers
  5. */
  6. /**
  7. * Loads the workspace manager
  8. *
  9. * @package modx
  10. * @subpackage manager.controllers
  11. */
  12. class WorkspacesManagerController extends modManagerController {
  13. public $errors = array();
  14. /**
  15. * The template file for this controller
  16. * @var string $templateFile
  17. */
  18. public $templateFile = 'workspaces/index.tpl';
  19. /**
  20. * The ID of the default Provider
  21. * @var int $providerId
  22. */
  23. public $providerId = 1;
  24. /**
  25. * The name of the default Provider
  26. * @var string $providerName
  27. */
  28. public $providerName = 'modx.com';
  29. /**
  30. * Whether or not cURL is enabled on this server
  31. * @var boolean $curlEnabled
  32. */
  33. public $curlEnabled = true;
  34. /**
  35. * Check for any permissions or requirements to load page
  36. * @return bool
  37. */
  38. public function checkPermissions() {
  39. return $this->modx->hasPermission('workspaces');
  40. }
  41. /**
  42. * Register custom CSS/JS for the page
  43. * @return void
  44. */
  45. public function loadCustomCssJs() {
  46. $mgrUrl = $this->modx->getOption('manager_url',null,MODX_MANAGER_URL);
  47. $this->addJavascript($mgrUrl.'assets/modext/core/modx.view.js');
  48. $this->addJavascript($mgrUrl.'assets/modext/workspace/package.browser.tree.js');
  49. $this->addJavascript($mgrUrl.'assets/modext/workspace/package.browser.panels.js');
  50. $this->addJavascript($mgrUrl.'assets/modext/workspace/combos.js');
  51. $this->addJavascript($mgrUrl.'assets/modext/workspace/package.grid.js');
  52. $this->addJavascript($mgrUrl.'assets/modext/workspace/package.windows.js');
  53. $this->addJavascript($mgrUrl.'assets/modext/workspace/package.panels.js');
  54. $this->addJavascript($mgrUrl.'assets/modext/workspace/package.containers.js');
  55. $this->addJavascript($mgrUrl.'assets/modext/workspace/provider.grid.js');
  56. $this->addJavascript($mgrUrl.'assets/modext/workspace/workspace.panel.js');
  57. $this->addJavascript($mgrUrl.'assets/modext/util/lightbox.js');
  58. $this->addHtml("<script>
  59. Ext.onReady(function() {
  60. MODx.errors = ".$this->modx->toJSON($this->errors).";
  61. MODx.defaultProvider = '".$this->providerId."';MODx.provider = '".$this->providerId."';MODx.providerName = '".$this->providerName."';MODx.curlEnabled = ".(integer)$this->curlEnabled."; Ext.ux.Lightbox.register('a.lightbox');
  62. MODx.add('modx-page-workspace');
  63. });</script>");
  64. $this->addJavascript($mgrUrl.'assets/modext/workspace/index.js');
  65. }
  66. /**
  67. * Custom logic code here for setting placeholders, etc
  68. * @param array $scriptProperties
  69. * @return mixed
  70. */
  71. public function process(array $scriptProperties = array()) {
  72. /* ensure directories for Package Management are created */
  73. /** @var modCacheManager $cacheManager */
  74. $cacheManager = $this->modx->getCacheManager();
  75. $directoryOptions = array(
  76. 'new_folder_permissions' => $this->modx->getOption('new_folder_permissions',null,0775),
  77. );
  78. $errors = array();
  79. /* create assets/ */
  80. $assetsPath = $this->modx->getOption('assets_path',null,MODX_ASSETS_PATH);
  81. if (!is_dir($assetsPath)) {
  82. $cacheManager->writeTree($assetsPath,$directoryOptions);
  83. }
  84. if (!is_dir($assetsPath) || !is_writable($assetsPath)) {
  85. $errors[] = $this->modx->lexicon('dir_err_assets',array('path' => $assetsPath));
  86. }
  87. unset($assetsPath);
  88. /* create assets/components/ */
  89. $assetsCompPath = $this->modx->getOption('assets_path',null,MODX_ASSETS_PATH).'components/';
  90. if (!is_dir($assetsCompPath)) {
  91. $cacheManager->writeTree($assetsCompPath,$directoryOptions);
  92. }
  93. if (!is_dir($assetsCompPath) || !is_writable($assetsCompPath)) {
  94. $errors[] = $this->modx->lexicon('dir_err_assets_comp',array('path' => $assetsCompPath));
  95. }
  96. unset($assetsCompPath);
  97. /* create core/components/ */
  98. $coreCompPath = $this->modx->getOption('core_path',null,MODX_CORE_PATH).'components/';
  99. if (!is_dir($coreCompPath)) {
  100. $cacheManager->writeTree($coreCompPath,$directoryOptions);
  101. }
  102. if (!is_dir($coreCompPath) || !is_writable($coreCompPath)) {
  103. $errors[] = $this->modx->lexicon('dir_err_core_comp',array('path' => $coreCompPath));
  104. }
  105. if (!function_exists('curl_init') || !in_array('curl',get_loaded_extensions())) {
  106. $errors[] = $this->modx->lexicon('curl_not_installed');
  107. $this->curlEnabled = false;
  108. }
  109. if (!empty($errors)) {
  110. $this->errors = $errors;
  111. }
  112. $this->getDefaultProvider();
  113. return true;
  114. }
  115. /**
  116. * Get the default Provider for Package Management
  117. *
  118. * @return modTransportProvider|void
  119. */
  120. public function getDefaultProvider() {
  121. $default = $this->modx->getOption('default_provider');
  122. $c = $this->modx->newQuery('transport.modTransportProvider');
  123. if ($default) {
  124. $c->where(array(
  125. 'id' => $default,
  126. ));
  127. } else {
  128. $c->where(array(
  129. 'name:=' => 'modxcms.com',
  130. 'OR:name:=' => 'modx.com',
  131. ));
  132. }
  133. /** @var modTransportProvider $provider */
  134. $provider = $this->modx->getObject('transport.modTransportProvider',$c);
  135. if ($provider) {
  136. $this->providerId = $provider->get('id');
  137. $this->providerName = $provider->get('name');
  138. } else {
  139. $this->modx->log(modX::LOG_LEVEL_ERROR,'Could not find the main provider for some reason with a name of "modx.com". Did you delete it?');
  140. }
  141. return $provider;
  142. }
  143. /**
  144. * Return the pagetitle
  145. *
  146. * @return string
  147. */
  148. public function getPageTitle() {
  149. return $this->modx->lexicon('package_management');
  150. }
  151. /**
  152. * Return the location of the template file
  153. * @return string
  154. */
  155. public function getTemplateFile() {
  156. return $this->templateFile;
  157. }
  158. /**
  159. * Specify the language topics to load
  160. * @return array
  161. */
  162. public function getLanguageTopics() {
  163. return array('workspace','namespace');
  164. }
  165. /**
  166. * Get the Help URL
  167. * @return string
  168. */
  169. public function getHelpUrl() {
  170. return 'Package+Management';
  171. }
  172. }