/php/lib/complex_builder/component/creator.class.php
PHP | 157 lines | 121 code | 26 blank | 10 comment | 10 complexity | bb09730cf6bf8314c6036320d6a51875 MD5 | raw file
- <?php
-
- namespace repository;
-
- use common\libraries\Request;
- use common\libraries\Translation;
- use common\libraries\Breadcrumb;
- use common\libraries\BreadcrumbTrail;
- use common\libraries\Utilities;
- use common\libraries\EqualityCondition;
- use common\extensions\repo_viewer\RepoViewerInterface;
- use common\extensions\repo_viewer\RepoViewer;
-
- /**
- * $Id: creator.class.php 200 2009-11-13 12:30:04Z kariboe $
- * @package repository.lib.complex_builder.component
- */
- require_once dirname(__FILE__) . '/../complex_builder_component.class.php';
-
- //require_once dirname(__FILE__) . '/../../complex_repo_viewer/complex_repo_viewer.class.php';
-
-
- class ComplexBuilderComponentCreatorComponent extends ComplexBuilderComponent implements RepoViewerInterface
- {
-
- private $rdm;
- private $type;
-
- function display_header()
- {
- parent :: display_header();
- $type = is_array($this->type) ? implode(',', $this->type) : $this->type;
- $content_object = $this->get_parent_content_object();
- 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 />';
- }
-
- function run()
- {
- $this->type = $rtype = Request :: get(ComplexBuilder :: PARAM_TYPE);
- $this->rdm = RepositoryDataManager :: get_instance();
-
- $exclude = $this->retrieve_used_items($this->get_root_content_object()->get_id());
- $exclude[] = $this->get_root_content_object()->get_id();
-
- if (!$this->type)
- {
- $this->type = $rtype = Request :: post(ContentObjectTypeSelector :: PARAM_CONTENT_OBJECT_TYPE);
- if (!$this->type)
- {
- $this->type = $this->get_parent_content_object()->get_allowed_types();
- }
- }
-
- if (!RepoViewer :: is_ready_to_be_published())
- {
- $complex_repository_viewer = RepoViewer :: construct($this);
- $complex_repository_viewer->set_parameter(ComplexBuilder :: PARAM_COMPLEX_CONTENT_OBJECT_ITEM_ID, $this->get_parent()->get_complex_content_object_item_id());
- if ($rtype)
- {
- $complex_repository_viewer->set_parameter(ComplexBuilder :: PARAM_TYPE, $rtype);
- }
- /* if ($this->get_parent_content_object()->is_not_allowed_shared_objects())
- {
- $complex_repository_viewer->set_parameter(RepoViewerBrowserComponent :: SHARED_BROWSER_ALLOWED, false);
- } */
-
- $complex_repository_viewer->set_excluded_objects($exclude);
- $complex_repository_viewer->run();
- }
- else
- {
- $objects = RepoViewer :: get_selected_objects();
-
- if (!is_array($objects))
- {
- $objects = array($objects);
- }
-
- $rdm = $this->rdm;
-
- foreach ($objects as $content_object_id)
- {
- $type = $rdm->determine_content_object_type($content_object_id);
- if (method_exists($this->get_parent(), 'get_helper_object'))
- {
- $helper_object = $this->get_parent()->get_helper_object($type);
- if ($helper_object)
- {
- $this->create_helper_object($helper_object, $content_object_id);
- $content_object_id = $helper_object->get_id();
- }
- }
- //gets the type of the helper object
- $type = $rdm->determine_content_object_type($content_object_id);
- $this->create_complex_content_object_item($type, $content_object_id);
- }
-
- $this->redirect(Translation :: get('ObjectAdded', array('OBJECT' => Translation :: get('ContentObject')), Utilities :: COMMON_LIBRARIES), false, array(
- ComplexBuilder :: PARAM_BUILDER_ACTION => ComplexBuilder :: ACTION_BROWSE,
- ComplexBuilder :: PARAM_COMPLEX_CONTENT_OBJECT_ITEM_ID => $this->get_parent()->get_complex_content_object_item_id()));
- }
- }
-
- private function retrieve_used_items($parent)
- {
- $items = array();
-
- $complex_content_object_items = $this->rdm->retrieve_complex_content_object_items(new EqualityCondition(ComplexContentObjectItem :: PROPERTY_PARENT, $parent, ComplexContentObjectItem :: get_table_name()));
- while ($complex_content_object_item = $complex_content_object_items->next_result())
- {
- if ($complex_content_object_item->is_complex())
- {
- $items[] = $complex_content_object_item->get_ref();
- $items = array_merge($items, $this->retrieve_used_items($complex_content_object_item->get_ref()));
- }
- }
-
- return $items;
- }
-
- function create_helper_object($helper_object, $content_object_id)
- {
- $helper_object->set_title($helper_object->get_type_name());
- $helper_object->set_description($helper_object->get_type_name());
- $helper_object->set_owner_id($this->get_user_id());
- $helper_object->set_reference($content_object_id);
- $helper_object->set_parent_id(0);
- $helper_object->create();
- }
-
- function create_complex_content_object_item($type, $content_object_id)
- {
- $complex_content_object_item = ComplexContentObjectItem :: factory($type);
- $complex_content_object_item->set_ref($content_object_id);
-
- $parent_id = $this->get_parent_content_object_id();
- $complex_content_object_item->set_parent($parent_id);
- $complex_content_object_item->set_display_order($this->rdm->select_next_display_order($parent_id));
- $complex_content_object_item->set_user_id($this->get_user_id());
- $complex_content_object_item->create();
- }
-
- function get_allowed_content_object_types()
- {
- if (!is_array($this->type))
- {
- return array($this->type);
- }
- else
- {
- return $this->type;
- }
- }
-
- }
-
- ?>