PageRenderTime 131ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/php/lib/complex_builder/component/creator.class.php

https://bitbucket.org/chamilo/chamilo-repository-dev/
PHP | 185 lines | 143 code | 32 blank | 10 comment | 12 complexity | a10d8a2761b2e518247eb93eae29dc01 MD5 | raw file
  1. <?php
  2. namespace repository;
  3. use common\libraries\Theme;
  4. use common\libraries\ToolbarItem;
  5. use common\libraries\Toolbar;
  6. use common\libraries\Request;
  7. use common\libraries\Translation;
  8. use common\libraries\Breadcrumb;
  9. use common\libraries\BreadcrumbTrail;
  10. use common\libraries\Utilities;
  11. use common\libraries\EqualityCondition;
  12. use common\extensions\repo_viewer\RepoViewerBrowserComponent;
  13. use common\extensions\repo_viewer\RepoViewerInterface;
  14. use common\extensions\repo_viewer\RepoViewer;
  15. /**
  16. * $Id: creator.class.php 200 2009-11-13 12:30:04Z kariboe $
  17. * @package repository.lib.complex_builder.component
  18. */
  19. require_once dirname(__FILE__) . '/../complex_builder_component.class.php';
  20. //require_once dirname(__FILE__) . '/../../complex_repo_viewer/complex_repo_viewer.class.php';
  21. class ComplexBuilderComponentCreatorComponent extends ComplexBuilderComponent implements RepoViewerInterface
  22. {
  23. private $rdm;
  24. private $type;
  25. function display_header()
  26. {
  27. parent :: display_header();
  28. $type = is_array($this->type) ? implode(',', $this->type) : $this->type;
  29. $content_object = $this->get_parent_content_object();
  30. echo '<h4>' . sprintf(Translation :: get('AddOrCreateNewTo'), Translation :: get('TypeName', null, ContentObject :: get_content_object_type_namespace($type)), Translation :: get('TypeName', null, ContentObject :: get_content_object_type_namespace($content_object->get_type())), $content_object->get_title()) . '</h4><br />';
  31. }
  32. function run()
  33. {
  34. $this->type = $rtype = Request :: get(ComplexBuilder :: PARAM_TYPE);
  35. $this->rdm = RepositoryDataManager :: get_instance();
  36. $exclude = $this->retrieve_used_items($this->get_root_content_object()->get_id());
  37. $exclude[] = $this->get_root_content_object()->get_id();
  38. if (! $this->type)
  39. {
  40. $this->type = $rtype = Request :: post(ContentObjectTypeSelector :: PARAM_CONTENT_OBJECT_TYPE);
  41. if (! $this->type)
  42. {
  43. $this->type = $this->get_parent_content_object()->get_allowed_types();
  44. }
  45. }
  46. if (! RepoViewer :: is_ready_to_be_published())
  47. {
  48. $complex_repository_viewer = RepoViewer :: construct($this);
  49. $complex_repository_viewer->set_parameter(ComplexBuilder :: PARAM_COMPLEX_CONTENT_OBJECT_ITEM_ID, $this->get_parent()->get_complex_content_object_item_id());
  50. if ($rtype)
  51. {
  52. $complex_repository_viewer->set_parameter(ComplexBuilder :: PARAM_TYPE, $rtype);
  53. }
  54. /*if ($this->get_parent_content_object()->is_not_allowed_shared_objects())
  55. {
  56. $complex_repository_viewer->set_parameter(RepoViewerBrowserComponent :: SHARED_BROWSER_ALLOWED, false);
  57. }*/
  58. $complex_repository_viewer->set_excluded_objects($exclude);
  59. $complex_repository_viewer->run();
  60. }
  61. else
  62. {
  63. $objects = RepoViewer :: get_selected_objects();
  64. if (! is_array($objects))
  65. {
  66. $objects = array($objects);
  67. }
  68. $rdm = $this->rdm;
  69. foreach ($objects as $content_object_id)
  70. {
  71. $type = $rdm->determine_content_object_type($content_object_id);
  72. if (method_exists($this->get_parent(), 'get_helper_object'))
  73. {
  74. $helper_object = $this->get_parent()->get_helper_object($type);
  75. if ($helper_object)
  76. {
  77. $this->create_helper_object($helper_object, $content_object_id);
  78. $content_object_id = $helper_object->get_id();
  79. }
  80. }
  81. //gets the type of the helper object
  82. $type = $rdm->determine_content_object_type($content_object_id);
  83. $this->create_complex_content_object_item($type, $content_object_id);
  84. }
  85. $this->redirect(Translation :: get('ObjectAdded', array('OBJECT' => Translation :: get('ContentObject')), Utilities :: COMMON_LIBRARIES), false, array(
  86. ComplexBuilder :: PARAM_BUILDER_ACTION => ComplexBuilder :: ACTION_BROWSE,
  87. ComplexBuilder :: PARAM_COMPLEX_CONTENT_OBJECT_ITEM_ID => $this->get_parent()->get_complex_content_object_item_id()));
  88. }
  89. }
  90. private function retrieve_used_items($parent)
  91. {
  92. $items = array();
  93. $complex_content_object_items = $this->rdm->retrieve_complex_content_object_items(new EqualityCondition(ComplexContentObjectItem :: PROPERTY_PARENT, $parent, ComplexContentObjectItem :: get_table_name()));
  94. while ($complex_content_object_item = $complex_content_object_items->next_result())
  95. {
  96. if ($complex_content_object_item->is_complex())
  97. {
  98. $items[] = $complex_content_object_item->get_ref();
  99. $items = array_merge($items, $this->retrieve_used_items($complex_content_object_item->get_ref()));
  100. }
  101. }
  102. return $items;
  103. }
  104. function create_helper_object($helper_object, $content_object_id)
  105. {
  106. $helper_object->set_title($helper_object->get_type_name());
  107. $helper_object->set_description($helper_object->get_type_name());
  108. $helper_object->set_owner_id($this->get_user_id());
  109. $helper_object->set_reference($content_object_id);
  110. $helper_object->set_parent_id(0);
  111. $helper_object->create();
  112. }
  113. function create_complex_content_object_item($type, $content_object_id)
  114. {
  115. $complex_content_object_item = ComplexContentObjectItem :: factory($type);
  116. $complex_content_object_item->set_ref($content_object_id);
  117. $parent_id = $this->get_parent_content_object_id();
  118. $complex_content_object_item->set_parent($parent_id);
  119. $complex_content_object_item->set_display_order($this->rdm->select_next_display_order($parent_id));
  120. $complex_content_object_item->set_user_id($this->get_user_id());
  121. $complex_content_object_item->create();
  122. }
  123. function get_allowed_content_object_types()
  124. {
  125. if (! is_array($this->type))
  126. {
  127. return array($this->type);
  128. }
  129. else
  130. {
  131. return $this->type;
  132. }
  133. }
  134. function get_repo_viewer_default_actions()
  135. {
  136. $toolbar = new Toolbar(Toolbar :: TYPE_HORIZONTAL);
  137. $toolbar->add_item(new ToolbarItem(Translation :: get('Add', null, Utilities :: COMMON_LIBRARIES), Theme :: get_common_image_path() . 'action_publish.png', $this->get_url(array_merge($this->get_parameters(), array(
  138. RepoViewer :: PARAM_ACTION => RepoViewer :: ACTION_PUBLISHER, RepoViewer :: PARAM_ID => '__ID__')), false), ToolbarItem :: DISPLAY_ICON));
  139. $toolbar->add_item(new ToolbarItem(Translation :: get('Preview'), Theme :: get_common_image_path() . 'action_browser.png', $this->get_url(array_merge($this->get_parameters(), array(
  140. RepoViewer :: PARAM_ACTION => RepoViewer :: ACTION_VIEWER, RepoViewer :: PARAM_ID => '__ID__')), false), ToolbarItem :: DISPLAY_ICON));
  141. if (! $this->is_shared_object_browser())
  142. {
  143. $toolbar->add_item(new ToolbarItem(Translation :: get('EditAndAdd'), Theme :: get_common_image_path() . 'action_editpublish.png', $this->get_url(array_merge($this->get_parameters(), array(
  144. RepoViewer :: PARAM_ACTION => RepoViewer :: ACTION_CREATOR, RepoViewer :: PARAM_EDIT_ID => '__ID__')), false), ToolbarItem :: DISPLAY_ICON));
  145. }
  146. return $toolbar;
  147. }
  148. function is_shared_object_browser()
  149. {
  150. return (Request :: get(RepoViewerBrowserComponent :: SHARED_BROWSER) == 1);
  151. }
  152. }
  153. ?>