PageRenderTime 213ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

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

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