PageRenderTime 28ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/manager/controllers/default/resource/create.php

https://github.com/HenrikNielsen/revolution
PHP | 218 lines | 206 code | 3 blank | 9 comment | 7 complexity | ae549fdfd1cceca1fed8450b4d62fecc MD5 | raw file
  1. <?php
  2. /**
  3. * Loads the create resource page
  4. *
  5. * @package modx
  6. * @subpackage manager.resource
  7. */
  8. if (!$modx->hasPermission('new_document')) return $modx->error->failure($modx->lexicon('access_denied'));
  9. /* handle template inheritance */
  10. if (!empty($_REQUEST['parent'])) {
  11. $parent = $modx->getObject('modResource',$_REQUEST['parent']);
  12. if (!$parent->checkPolicy('add_children')) return $modx->error->failure($modx->lexicon('resource_add_children_access_denied'));
  13. if ($parent != null) {
  14. $modx->smarty->assign('parent',$parent);
  15. }
  16. } else { $parent = null; }
  17. /* set context */
  18. $ctx = !empty($_REQUEST['context_key']) ? $_REQUEST['context_key'] : 'web';
  19. $modx->smarty->assign('_ctx',$ctx);
  20. $context = $modx->getContext($ctx);
  21. if (!$context) { return $modx->error->failure($modx->lexicon('context_err_nf')); }
  22. /* handle custom resource types */
  23. $resourceClass= isset ($_REQUEST['class_key']) ? $_REQUEST['class_key'] : 'modDocument';
  24. $resourceClass = str_replace(array('../','..','/','\\'),'',$resourceClass);
  25. $resourceDir= strtolower(substr($resourceClass, 3));
  26. $delegateView = dirname(__FILE__) . '/' . $resourceDir . '/';
  27. $delegateView = $modx->getOption(strtolower($resourceClass).'_delegate_path',null,$delegateView) . basename(__FILE__);
  28. $delegateView = str_replace(array('{core_path}','{assets_path}','{base_path}'),array(
  29. $modx->getOption('core_path',null,MODX_CORE_PATH),
  30. $modx->getOption('assets_path',null,MODX_ASSETS_PATH),
  31. $modx->getOption('base_path',null,MODX_BASE_PATH),
  32. ),$delegateView);
  33. if (file_exists($delegateView)) {
  34. $overridden= include ($delegateView);
  35. if ($overridden !== false) {
  36. return $overridden;
  37. }
  38. }
  39. $resource = $modx->newObject($resourceClass);
  40. /* invoke OnDocFormPrerender event */
  41. $onDocFormPrerender = $modx->invokeEvent('OnDocFormPrerender',array(
  42. 'id' => 0,
  43. 'mode' => modSystemEvent::MODE_NEW,
  44. ));
  45. if (is_array($onDocFormPrerender)) {
  46. $onDocFormPrerender = implode('',$onDocFormPrerender);
  47. }
  48. $modx->smarty->assign('onDocFormPrerender',$onDocFormPrerender);
  49. /* handle default parent */
  50. $parentname = $context->getOption('site_name', '', $modx->_userConfig);
  51. $resource->set('parent',0);
  52. if (isset ($_REQUEST['parent'])) {
  53. if ($_REQUEST['parent'] == 0) {
  54. $parentname = $context->getOption('site_name', '', $modx->_userConfig);
  55. } else {
  56. $parent = $modx->getObject('modResource',$_REQUEST['parent']);
  57. if ($parent != null) {
  58. $parentname = $parent->get('pagetitle');
  59. $resource->set('parent',$parent->get('id'));
  60. }
  61. }
  62. }
  63. $modx->smarty->assign('parentname',$parentname);
  64. /* invoke OnDocFormRender event */
  65. $onDocFormRender = $modx->invokeEvent('OnDocFormRender',array(
  66. 'id' => 0,
  67. 'mode' => modSystemEvent::MODE_NEW,
  68. ));
  69. if (is_array($onDocFormRender)) $onDocFormRender = implode('',$onDocFormRender);
  70. $onDocFormRender = str_replace(array('"',"\n","\r"),array('\"','',''),$onDocFormRender);
  71. $modx->smarty->assign('onDocFormRender',$onDocFormRender);
  72. /* assign resource to smarty */
  73. $modx->smarty->assign('resource',$resource);
  74. /* check permissions */
  75. $publish_document = $modx->hasPermission('publish_document');
  76. $access_permissions = $modx->hasPermission('access_permissions');
  77. $richtext = $context->getOption('richtext_default', true, $modx->_userConfig);
  78. /* register JS scripts */
  79. $rte = isset($_REQUEST['which_editor']) ? $_REQUEST['which_editor'] : $context->getOption('which_editor', '', $modx->_userConfig);
  80. $modx->smarty->assign('which_editor',$rte);
  81. /*
  82. * Initialize RichText Editor
  83. */
  84. /* Set which RTE if not core */
  85. if ($context->getOption('use_editor', false, $modx->_userConfig) && !empty($rte)) {
  86. /* invoke OnRichTextEditorRegister event */
  87. $text_editors = $modx->invokeEvent('OnRichTextEditorRegister');
  88. $modx->smarty->assign('text_editors',$text_editors);
  89. $replace_richtexteditor = array('ta');
  90. $modx->smarty->assign('replace_richtexteditor',$replace_richtexteditor);
  91. /* invoke OnRichTextEditorInit event */
  92. $onRichTextEditorInit = $modx->invokeEvent('OnRichTextEditorInit',array(
  93. 'editor' => $rte,
  94. 'elements' => $replace_richtexteditor,
  95. 'id' => 0,
  96. 'mode' => modSystemEvent::MODE_NEW,
  97. ));
  98. if (is_array($onRichTextEditorInit)) {
  99. $onRichTextEditorInit = implode('',$onRichTextEditorInit);
  100. $modx->smarty->assign('onRichTextEditorInit',$onRichTextEditorInit);
  101. }
  102. }
  103. /* set default template */
  104. $default_template = (isset($_REQUEST['template']) ? $_REQUEST['template'] : ($parent != null ? $parent->get('template') : $context->getOption('default_template', 0, $modx->_userConfig)));
  105. $userGroups = $modx->user->getUserGroups();
  106. $c = $modx->newQuery('modActionDom');
  107. $c->leftJoin('modAccessActionDom','Access');
  108. $principalCol = $this->modx->getSelectColumns('modAccessActionDom','Access','',array('principal'));
  109. $c->where(array(
  110. 'action' => $this->action['id'],
  111. 'name' => 'template',
  112. 'container' => 'modx-panel-resource',
  113. 'rule' => 'fieldDefault',
  114. 'active' => true,
  115. array(
  116. array(
  117. 'Access.principal_class:=' => 'modUserGroup',
  118. $principalCol.' IN ('.implode(',',$userGroups).')',
  119. ),
  120. 'OR:Access.principal:IS' => null,
  121. ),
  122. ));
  123. $fcDt = $modx->getObject('modActionDom',$c);
  124. if ($fcDt) {
  125. $parentIds = array();
  126. if ($parent) { /* ensure get all parents */
  127. $p = $parent ? $parent->get('id') : 0;
  128. $rCtx = $parent->get('context_key');
  129. $oCtx = $modx->context->get('key');
  130. if (!empty($rCtx) && $rCtx != 'mgr') {
  131. $modx->switchContext($rCtx);
  132. }
  133. $parentIds = $modx->getParentIds($p);
  134. $parentIds[] = $p;
  135. $parentIds = array_unique($parentIds);
  136. if (!empty($rCtx)) {
  137. $modx->switchContext($oCtx);
  138. }
  139. } else {
  140. $parentIds = array(0);
  141. }
  142. $constraintField = $fcDt->get('constraint_field');
  143. if ($constraintField == 'id' && in_array($fcDt->get('constraint'),$parentIds)) {
  144. $default_template = $fcDt->get('value');
  145. } else if (empty($constraintField)) {
  146. $default_template = $fcDt->get('value');
  147. }
  148. }
  149. $defaults = array(
  150. 'template' => $default_template,
  151. 'content_type' => 1,
  152. 'class_key' => isset($_REQUEST['class_key']) ? $_REQUEST['class_key'] : 'modDocument',
  153. 'context_key' => $ctx,
  154. 'parent' => isset($_REQUEST['parent']) ? $_REQUEST['parent'] : 0,
  155. 'richtext' => $richtext,
  156. 'hidemenu' => $context->getOption('hidemenu_default', 0, $modx->_userConfig),
  157. 'published' => $context->getOption('publish_default', 0, $modx->_userConfig),
  158. 'searchable' => $context->getOption('search_default', 1, $modx->_userConfig),
  159. 'cacheable' => $context->getOption('cache_default', 1, $modx->_userConfig),
  160. );
  161. /* handle FC rules */
  162. if ($parent == null) {
  163. $parent = $modx->newObject($resourceClass);
  164. $parent->set('id',0);
  165. $parent->set('parent',0);
  166. }
  167. $parent->fromArray($defaults);
  168. $parent->set('template',$default_template);
  169. $overridden = $this->checkFormCustomizationRules($parent,true);
  170. $defaults = array_merge($defaults,$overridden);
  171. $defaults['parent_pagetitle'] = $parent->get('pagetitle');
  172. /* register JS */
  173. $managerUrl = $context->getOption('manager_url', MODX_MANAGER_URL, $modx->_userConfig);
  174. $modx->regClientStartupScript($managerUrl.'assets/modext/util/datetime.js');
  175. $modx->regClientStartupScript($managerUrl.'assets/modext/widgets/element/modx.panel.tv.renders.js');
  176. $modx->regClientStartupScript($managerUrl.'assets/modext/widgets/resource/modx.grid.resource.security.js');
  177. $modx->regClientStartupScript($managerUrl.'assets/modext/widgets/resource/modx.panel.resource.tv.js');
  178. $modx->regClientStartupScript($managerUrl.'assets/modext/widgets/resource/modx.panel.resource.js');
  179. $modx->regClientStartupScript($managerUrl.'assets/modext/sections/resource/create.js');
  180. $modx->regClientStartupHTMLBlock('
  181. <script type="text/javascript">
  182. // <![CDATA[
  183. MODx.config.publish_document = "'.$publish_document.'";
  184. MODx.onDocFormRender = "'.$onDocFormRender.'";
  185. MODx.ctx = "'.$ctx.'";
  186. Ext.onReady(function() {
  187. MODx.load({
  188. xtype: "modx-page-resource-create"
  189. ,record: '.$modx->toJSON($defaults).'
  190. ,access_permissions: "'.$access_permissions.'"
  191. ,publish_document: "'.$publish_document.'"
  192. ,canSave: "'.($modx->hasPermission('save_document') ? 1 : 0).'"
  193. });
  194. });
  195. // ]]>
  196. </script>');
  197. return $modx->smarty->fetch('resource/create.tpl');