update.class.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <?php
  2. /**
  3. * Load update plugin page
  4. *
  5. * @package modx
  6. * @subpackage manager.controllers
  7. */
  8. class ElementPluginUpdateManagerController extends modManagerController {
  9. /** @var modCategory $category */
  10. public $category;
  11. /** @var modPlugin $plugin */
  12. public $plugin;
  13. /** @var array $pluginArray */
  14. public $pluginArray;
  15. /** @var string $onPluginFormRender */
  16. public $onPluginFormRender = '';
  17. /** @var string $onPluginFormPrerender */
  18. public $onPluginFormPrerender = '';
  19. /**
  20. * Check for any permissions or requirements to load page
  21. * @return bool
  22. */
  23. public function checkPermissions() {
  24. return $this->modx->hasPermission('edit_plugin');
  25. }
  26. /**
  27. * Register custom CSS/JS for the page
  28. * @return void
  29. */
  30. public function loadCustomCssJs() {
  31. $mgrUrl = $this->modx->getOption('manager_url',null,MODX_MANAGER_URL);
  32. $this->addJavascript($mgrUrl.'assets/modext/widgets/core/modx.grid.local.property.js');
  33. $this->addJavascript($mgrUrl.'assets/modext/widgets/element/modx.grid.element.properties.js');
  34. $this->addJavascript($mgrUrl.'assets/modext/widgets/element/modx.grid.plugin.event.js');
  35. $this->addJavascript($mgrUrl.'assets/modext/widgets/element/modx.panel.plugin.js');
  36. $this->addJavascript($mgrUrl.'assets/modext/sections/element/plugin/update.js');
  37. $this->addHtml('
  38. <script type="text/javascript">
  39. // <![CDATA[
  40. Ext.onReady(function() {
  41. MODx.load({
  42. xtype: "modx-page-plugin-update"
  43. ,id: "'.$this->pluginArray['id'].'"
  44. ,record: '.$this->modx->toJSON($this->pluginArray).'
  45. });
  46. });
  47. MODx.onPluginFormRender = "'.$this->onPluginFormRender.'";
  48. MODx.perm.unlock_element_properties = "'.($this->modx->hasPermission('unlock_element_properties') ? 1 : 0).'";
  49. // ]]>
  50. </script>');
  51. }
  52. /**
  53. * Custom logic code here for setting placeholders, etc
  54. * @param array $scriptProperties
  55. * @return mixed
  56. */
  57. public function process(array $scriptProperties = array()) {
  58. $placeholders = array();
  59. /* load plugin */
  60. if (empty($scriptProperties['id']) || strlen($scriptProperties['id']) !== strlen((integer)$scriptProperties['id'])) {
  61. return $this->failure($this->modx->lexicon('plugin_err_ns'));
  62. }
  63. $this->plugin = $this->modx->getObject('modPlugin', array('id' => $scriptProperties['id']));
  64. if ($this->plugin == null) return $this->failure($this->modx->lexicon('plugin_err_nf'));
  65. if (!$this->plugin->checkPolicy('view')) return $this->failure($this->modx->lexicon('access_denied'));
  66. /* get properties */
  67. $properties = $this->plugin->get('properties');
  68. if (!is_array($properties)) $properties = array();
  69. $data = array();
  70. foreach ($properties as $property) {
  71. $data[] = array(
  72. $property['name'],
  73. $property['desc'],
  74. !empty($property['type']) ? $property['type'] : 'textfield',
  75. !empty($property['options']) ? $property['options'] : array(),
  76. $property['value'],
  77. !empty($property['lexicon']) ? $property['lexicon'] : '',
  78. false, /* overridden set to false */
  79. $property['desc_trans'],
  80. !empty($property['area']) ? $property['area'] : '',
  81. !empty($property['area_trans']) ? $property['area_trans'] : '',
  82. );
  83. }
  84. $this->pluginArray = $this->plugin->toArray();
  85. $this->pluginArray['properties'] = $data;
  86. $this->pluginArray['plugincode'] = $this->plugin->getContent();
  87. if (strpos($this->pluginArray['plugincode'],'<?php') === false) {
  88. $this->pluginArray['plugincode'] = "<?php\n".$this->pluginArray['plugincode'];
  89. }
  90. $this->prepareElement();
  91. /* load plugin into parser */
  92. $placeholders['plugin'] = $this->plugin;
  93. /* invoke OnPluginFormRender event */
  94. $placeholders['onPluginFormRender'] = $this->fireRenderEvent();
  95. return $placeholders;
  96. }
  97. /**
  98. * Prepare the element and get the static openTo path if needed
  99. *
  100. * @return void|string
  101. */
  102. public function prepareElement() {
  103. $this->pluginArray['openTo'] = '/';
  104. if (!empty($this->pluginArray['static'])) {
  105. $file = $this->plugin->get('static_file');
  106. $this->pluginArray['openTo'] = dirname($file).'/';
  107. }
  108. return $this->pluginArray['openTo'];
  109. }
  110. /**
  111. * Invoke OnPluginFormPrerender event
  112. * @return string
  113. */
  114. public function firePreRenderEvents() {
  115. /* PreRender events inject directly into the HTML, as opposed to the JS-based Render event which injects HTML
  116. into the panel */
  117. $this->onPluginFormPrerender = $this->modx->invokeEvent('OnPluginFormPrerender',array(
  118. 'id' => $this->pluginArray['id'],
  119. 'plugin' => &$this->plugin,
  120. 'mode' => modSystemEvent::MODE_UPD,
  121. ));
  122. if (is_array($this->onPluginFormPrerender)) $this->onPluginFormPrerender = implode('',$this->onPluginFormPrerender);
  123. $this->setPlaceholder('onPluginFormPrerender', $this->onPluginFormPrerender);
  124. }
  125. /**
  126. * Invoke OnPluginFormRender event
  127. * @return string
  128. */
  129. public function fireRenderEvent() {
  130. $this->onPluginFormRender = $this->modx->invokeEvent('OnPluginFormRender',array(
  131. 'id' => $this->pluginArray['id'],
  132. 'plugin' => &$this->plugin,
  133. 'mode' => modSystemEvent::MODE_UPD,
  134. ));
  135. if (is_array($this->onPluginFormRender)) $this->onPluginFormRender = implode('',$this->onPluginFormRender);
  136. $this->onPluginFormRender = str_replace(array('"',"\n","\r"),array('\"','',''),$this->onPluginFormRender);
  137. return $this->onPluginFormRender;
  138. }
  139. /**
  140. * Return the pagetitle
  141. *
  142. * @return string
  143. */
  144. public function getPageTitle() {
  145. return $this->modx->lexicon('plugin').': '.$this->pluginArray['name'];
  146. }
  147. /**
  148. * Return the location of the template file
  149. * @return string
  150. */
  151. public function getTemplateFile() {
  152. return 'element/plugin/update.tpl';
  153. }
  154. /**
  155. * Specify the language topics to load
  156. * @return array
  157. */
  158. public function getLanguageTopics() {
  159. return array('plugin','category','system_events','propertyset','element');
  160. }
  161. /**
  162. * Get the Help URL
  163. * @return string
  164. */
  165. public function getHelpUrl() {
  166. return 'Plugins';
  167. }
  168. }