예제 #1
0
 /**
  * @see SampleItemInterface::link_item()
  * @return bool
  */
 public function link_item()
 {
     global $transaction;
     if ($this->item_id and $this->sample_id) {
         $transaction_id = $transaction->begin();
         if (($sample_folder_id = SampleFolder::get_folder_by_sample_id($this->sample_id)) != null) {
             $sample_has_item = new SampleHasItem_Access(null);
             if (is_numeric($this->gid)) {
                 $primary_key = $sample_has_item->create($this->sample_id, $this->item_id, $this->gid);
                 if ($this->parent == true) {
                     $sample_has_item->set_parent(true);
                 } else {
                     $sample_has_item->set_parent(false);
                 }
             } else {
                 $primary_key = $sample_has_item->create($this->sample_id, $this->item_id, null);
             }
             if ($this->parent_item_id) {
                 if ($sample_has_item->set_parent_item_id($this->parent_item_id) == false) {
                     if ($transaction_id != null) {
                         $transaction->rollback($transaction_id);
                     }
                     return false;
                 }
             }
             if ($primary_key != null) {
                 $sample_item_link_event = new SampleItemLinkEvent($this->item_id, $sample_folder_id);
                 $event_handler = new EventHandler($sample_item_link_event);
                 if ($event_handler->get_success() == false) {
                     if ($transaction_id != null) {
                         $transaction->rollback($transaction_id);
                     }
                     return false;
                 } else {
                     if ($transaction_id != null) {
                         $transaction->commit($transaction_id);
                     }
                     return true;
                 }
             } else {
                 if ($transaction_id != null) {
                     $transaction->rollback($transaction_id);
                 }
                 return false;
             }
         } else {
             if ($transaction_id != null) {
                 $transaction->rollback($transaction_id);
             }
             return false;
         }
     } else {
         return false;
     }
 }
 /**
  * @see EventListenerInterface::listen_events()
  * @param object $event_object
  * @return bool
  */
 public static function listen_events($event_object)
 {
     if ($event_object instanceof UserFolderCreateEvent or $event_object instanceof GroupFolderCreateEvent or $event_object instanceof OrganisationUnitFolderCreateEvent or $event_object instanceof SampleFolderCreateEvent or $event_object instanceof ProjectFolderCreateEvent) {
         $sample_virtual_folder = new SampleVirtualFolder(null);
         if (($virtual_folder_id = $sample_virtual_folder->create($event_object->get_folder_id(), "samples")) == null) {
             return false;
         }
         $sample_virtual_folder = new SampleVirtualFolder($virtual_folder_id);
         if ($sample_virtual_folder->set_sample_vfolder() == false) {
             return false;
         }
     }
     if ($event_object instanceof VirtualFolderDeleteEvent) {
         $sample_virtual_folder = new SampleVirtualFolder($event_object->get_virtual_folder_id());
         if ($sample_virtual_folder->is_sample_vfolder() == true) {
             $virtual_folder_is_sample = new VirtualFolderIsSample_Access($event_object->get_virtual_folder_id());
             if ($virtual_folder_is_sample->delete() == false) {
                 return false;
             }
         }
     }
     if ($event_object instanceof SampleItemLinkEvent or $event_object instanceof ProjectItemLinkEvent) {
         if (($sample_id = Sample::get_entry_by_item_id($event_object->get_item_id())) != null) {
             $sample_folder_id = SampleFolder::get_folder_by_sample_id($sample_id);
             $folder = Folder::get_instance($event_object->get_folder_id());
             $child_array = $folder->get_children();
             if (is_array($child_array) and count($child_array) >= 1) {
                 foreach ($child_array as $key => $value) {
                     if (($virtual_folder_id = VirtualFolder::get_virtual_folder_id_by_data_entity_id($value)) != null) {
                         $sample_virtual_folder = new SampleVirtualFolder($virtual_folder_id);
                         if ($sample_virtual_folder->is_sample_vfolder() == true) {
                             if ($sample_virtual_folder->link_folder($sample_folder_id) == false) {
                                 return false;
                             }
                         }
                     }
                 }
             }
         }
     }
     return true;
 }
예제 #3
0
 /**
  * @see SampleSecurityInterface::delete_organisation_unit()
  * @param integer $entry_id
  * @return bool
  */
 public function delete_organisation_unit($entry_id)
 {
     global $transaction;
     if ($this->sample_id and is_numeric($entry_id)) {
         $transaction_id = $transaction->begin();
         $sample_has_organisation_unit = new SampleHasOrganisationUnit_Access($entry_id);
         $organisation_unit_id = $sample_has_organisation_unit->get_organisation_unit_id();
         $success = $sample_has_organisation_unit->delete();
         if ($success == true) {
             $sample_folder_id = SampleFolder::get_folder_by_sample_id($this->sample_id);
             $folder_id = OrganisationUnitFolder::get_folder_by_organisation_unit_id($organisation_unit_id);
             $virtual_folder = new VirtualFolder(null);
             $virtual_folder_array = $virtual_folder->list_entries_by_folder_id($folder_id);
             foreach ($virtual_folder_array as $key => $value) {
                 $virtual_folder = new SampleVirtualFolder($value);
                 if ($virtual_folder->is_sample_vfolder() == true) {
                     $virtual_folder_id = $value;
                 }
             }
             if ($virtual_folder_id) {
                 $virtual_folder = new VirtualFolder($virtual_folder_id);
                 if ($virtual_folder->unlink_folder($sample_folder_id) == false) {
                     if ($transaction_id != null) {
                         $transaction->rollback($transaction_id);
                     }
                     return false;
                 }
             }
             $organisation_unit = new OrganisationUnit($organisation_unit_id);
             $group_array = $organisation_unit->list_groups();
             if (is_array($group_array) and count($group_array) >= 1) {
                 foreach ($group_array as $key => $value) {
                     $folder_id = GroupFolder::get_folder_by_group_id($value);
                     $virtual_folder = new VirtualFolder(null);
                     $virtual_folder_array = $virtual_folder->list_entries_by_folder_id($folder_id);
                     foreach ($virtual_folder_array as $key => $value) {
                         $virtual_folder = new SampleVirtualFolder($value);
                         if ($virtual_folder->is_sample_vfolder() == true) {
                             $virtual_folder_id = $value;
                         }
                     }
                     if (is_numeric($virtual_folder_id)) {
                         $virtual_folder = new VirtualFolder($virtual_folder_id);
                         if ($virtual_folder->unlink_folder($sample_folder_id) == false) {
                             if ($transaction_id != null) {
                                 $transaction->rollback($transaction_id);
                             }
                             return false;
                         }
                     }
                 }
             }
             if ($transaction_id != null) {
                 $transaction->commit($transaction_id);
             }
             return true;
         } else {
             if ($transaction_id != null) {
                 $transaction->rollback($transaction_id);
             }
             return false;
         }
     } else {
         return false;
     }
 }
예제 #4
0
 /**
  * @see ValueVarCaseInterface::is_case()
  * @param integer $folder_id
  * @return bool
  */
 public static function is_case($folder_id)
 {
     if (is_numeric($folder_id)) {
         if (($sample_id = SampleFolder::get_sample_id_by_folder_id($folder_id)) != null) {
             return $sample_id;
         } else {
             return false;
         }
     } else {
         return false;
     }
 }
예제 #5
0
 /**
  * @param string $alias
  * @throws SampleSecurityAccessDeniedException
  * @throws BaseModuleDialogMethodNotFoundException
  * @throws BaseModuleDialogClassNotFoundException
  * @throws BaseModuleDialogFileNotFoundException
  * @throws BaseModuleDialogMissingException
  * @throws BaseModuleDialogNotFoundException
  * @throws ItemAddIOClassNotFoundException
  * @throws ItemAddIOFileNotFoundException
  * @throws ItemHandlerClassNotFoundException
  * @throws ItemPositionIDMissingException
  * @throws ItemParentIDMissingException
  * @throws ItemParentTypeMissingException
  */
 public static function io_handler($alias)
 {
     global $sample_security, $session, $transaction;
     if ($_GET['sample_id']) {
         $sample_security = new SampleSecurity($_GET['sample_id']);
         require_once "io/sample_common.io.php";
         SampleCommon_IO::tab_header();
     } else {
         $sample_security = new SampleSecurity(null);
     }
     switch ($_GET['run']) {
         case "new":
         case "new_subsample":
             require_once "io/sample.io.php";
             SampleIO::create();
             break;
         case "clone":
             require_once "io/sample.io.php";
             SampleIO::clone_sample();
             break;
         case "organ_unit":
             require_once "io/sample.io.php";
             SampleIO::list_organisation_unit_related_samples();
             break;
         case "detail":
             require_once "io/sample.io.php";
             SampleIO::detail();
             break;
         case "move":
             require_once "io/sample.io.php";
             SampleIO::move();
             break;
         case "set_availability":
             require_once "io/sample.io.php";
             SampleIO::set_availability();
             break;
         case "location_history":
             require_once "io/sample.io.php";
             SampleIO::location_history();
             break;
             // Administration
         // Administration
         case "delete":
             require_once "io/sample_admin.io.php";
             SampleAdminIO::delete();
             break;
         case "rename":
             require_once "io/sample_admin.io.php";
             SampleAdminIO::rename();
             break;
         case "admin_permission_user":
             require_once "io/sample_admin.io.php";
             SampleAdminIO::user_permission();
             break;
         case "admin_permission_user_add":
             require_once "io/sample_admin.io.php";
             SampleAdminIO::user_permission_add();
             break;
         case "admin_permission_user_delete":
             require_once "io/sample_admin.io.php";
             SampleAdminIO::user_permission_delete();
             break;
         case "admin_permission_ou":
             require_once "io/sample_admin.io.php";
             SampleAdminIO::ou_permission();
             break;
         case "admin_permission_ou_add":
             require_once "io/sample_admin.io.php";
             SampleAdminIO::ou_permission_add();
             break;
         case "admin_permission_ou_delete":
             require_once "io/sample_admin.io.php";
             SampleAdminIO::ou_permission_delete();
             break;
             // Item Lister
         // Item Lister
         case "item_list":
             if ($sample_security->is_access(1, false) == true) {
                 if ($_GET['dialog']) {
                     if ($_GET['dialog'] == "data") {
                         $path_stack_array = array();
                         $folder_id = SampleFolder::get_folder_by_sample_id($_GET['sample_id']);
                         $folder = Folder::get_instance($folder_id);
                         $init_array = $folder->get_object_id_path();
                         foreach ($init_array as $key => $value) {
                             $temp_array = array();
                             $temp_array['virtual'] = false;
                             $temp_array['id'] = $value;
                             array_unshift($path_stack_array, $temp_array);
                         }
                         if (!$_GET['folder_id']) {
                             $session->write_value("stack_array", $path_stack_array, true);
                         }
                     }
                     $module_dialog = ModuleDialog::get_by_type_and_internal_name("item_list", $_GET['dialog']);
                     if (file_exists($module_dialog['class_path'])) {
                         require_once $module_dialog['class_path'];
                         if (class_exists($module_dialog['class'])) {
                             if (method_exists($module_dialog['class'], $module_dialog['method'])) {
                                 $module_dialog['class']::$module_dialog['method']("sample", $_GET['sample_id'], true, false);
                             } else {
                                 throw new BaseModuleDialogMethodNotFoundException();
                             }
                         } else {
                             throw new BaseModuleDialogClassNotFoundException();
                         }
                     } else {
                         throw new BaseModuleDialogFileNotFoundException();
                     }
                 } else {
                     throw new BaseModuleDialogMissingException();
                 }
             } else {
                 throw new SampleSecurityAccessDeniedException();
             }
             break;
         case "item_add":
         case "item_edit":
             if ($sample_security->is_access(2, false) == true) {
                 if ($_GET['dialog']) {
                     if ($_GET['run'] == "item_add") {
                         $module_dialog = ModuleDialog::get_by_type_and_internal_name("item_add", $_GET['dialog']);
                     } elseif ($_GET['run'] == "item_edit") {
                         $module_dialog = ModuleDialog::get_by_type_and_internal_name("item_edit", $_GET['dialog']);
                     }
                     if (is_array($module_dialog) and $module_dialog['class_path']) {
                         if (file_exists($module_dialog['class_path'])) {
                             require_once $module_dialog['class_path'];
                             if (class_exists($module_dialog['class'])) {
                                 if (method_exists($module_dialog['class'], $module_dialog['method'])) {
                                     $sample_item = new SampleItem($_GET['sample_id']);
                                     $sample_item->set_gid($_GET['key']);
                                     $description_required = $sample_item->is_description_required();
                                     $keywords_required = $sample_item->is_keywords_required();
                                     if ($description_required and !$_POST['description'] and !$_GET['idk_unique_id'] or $keywords_required and !$_POST['keywords'] and !$_GET['idk_unique_id']) {
                                         require_once "core/modules/item/io/item.io.php";
                                         ItemIO::information(http_build_query($_GET), $description_required, $keywords_required);
                                     } else {
                                         $sample = new Sample($_GET['sample_id']);
                                         $current_requirements = $sample->get_requirements();
                                         if ($_GET['run'] == "item_add") {
                                             $module_dialog['class']::$module_dialog['method']($current_requirements[$_GET['key']]['type_id'], $current_requirements[$_GET['key']]['category_id'], "Sample", $_GET['sample_id'], $_GET['key']);
                                         } elseif ($_GET['run'] == "item_edit") {
                                             $module_dialog['class']::$module_dialog['method']($current_requirements[$_GET['key']]['fulfilled'][0]['item_id']);
                                         }
                                     }
                                 } else {
                                     throw new BaseModuleDialogMethodNotFoundException();
                                 }
                             } else {
                                 throw new BaseModuleDialogClassNotFoundException();
                             }
                         } else {
                             throw new BaseModuleDialogFileNotFoundException();
                         }
                     } else {
                         throw new BaseModuleDialogNotFoundException();
                     }
                 } else {
                     throw new BaseModuleDialogMissingException();
                 }
             } else {
                 throw new SampleSecurityAccessDeniedException();
             }
             break;
             // Sub Item Add
         // Sub Item Add
         case "sub_item_add":
         case "sub_item_edit":
             if ($sample_security->is_access(2, false) == true) {
                 if ($_GET['parent']) {
                     if (is_numeric($_GET['parent_id'])) {
                         if (is_numeric($_GET['key'])) {
                             $item_handling_class = Item::get_handling_class_by_type($_GET['parent']);
                             if (class_exists($item_handling_class)) {
                                 $item_io_handling_class = $item_handling_class::get_item_add_io_handling_class();
                                 if (file_exists("core/modules/" . $item_io_handling_class[0])) {
                                     require_once "core/modules/" . $item_io_handling_class[0];
                                     if (class_exists($item_io_handling_class[1])) {
                                         if ($_GET['run'] == "sub_item_add") {
                                             $item_io_handling_class[1]::item_add_edit_handler("add");
                                         } else {
                                             $item_io_handling_class[1]::item_add_edit_handler("edit");
                                         }
                                     } else {
                                         throw new ItemAddIOClassNotFoundException();
                                     }
                                 } else {
                                     throw new ItemAddIOFileNotFoundException();
                                 }
                             } else {
                                 throw new ItemHandlerClassNotFoundException();
                             }
                         } else {
                             throw new ItemPositionIDMissingException();
                         }
                     } else {
                         throw new ItemParentIDMissingException();
                     }
                 } else {
                     throw new ItemParentTypeMissingException();
                 }
             } else {
                 throw new SampleSecurityAccessDeniedException();
             }
             break;
             // Parent Item Lister
         // Parent Item Lister
         case "parent_item_list":
             if ($sample_security->is_access(1, false) == true) {
                 if ($_GET['dialog']) {
                     $sample = new Sample($_GET['sample_id']);
                     $item_id = $sample->get_item_id();
                     $module_dialog = ModuleDialog::get_by_type_and_internal_name("parent_item_list", $_GET['dialog']);
                     if (file_exists($module_dialog['class_path'])) {
                         require_once $module_dialog['class_path'];
                         if (class_exists($module_dialog['class'])) {
                             if (method_exists($module_dialog['class'], $module_dialog['method'])) {
                                 $module_dialog['class']::$module_dialog['method']($item_id);
                             } else {
                                 throw new BaseModuleDialogMethodNotFoundException();
                             }
                         } else {
                             throw new BaseModuleDialogClassNotFoundException();
                         }
                     } else {
                         throw new BaseModuleDialogFileNotFoundException();
                     }
                 } else {
                     throw new BaseModuleDialogMissingException();
                 }
             } else {
                 throw new SampleSecurityAccessDeniedException();
             }
             break;
             // Common Dialogs
         // Common Dialogs
         case "common_dialog":
             require_once "core/modules/base/common.request.php";
             CommonRequest::common_dialog();
             break;
         default:
             require_once "io/sample.io.php";
             SampleIO::list_user_related_samples();
             break;
     }
 }
예제 #6
0
 /**
  * @see ItemHolderInterface::get_item_holder_value()
  * @param string $address
  * @param integer $position_id
  * @return mixed
  */
 public final function get_item_holder_value($address, $position_id = null)
 {
     if ($this->sample_id and $this->sample) {
         switch ($address) {
             case "folder_id":
                 $folder_id = SampleFolder::get_folder_by_sample_id($this->sample_id);
                 $sub_folder_id = $this->get_sub_folder($folder_id, $position_id);
                 if (is_numeric($sub_folder_id)) {
                     $folder_id = $sub_folder_id;
                 }
                 return $folder_id;
                 break;
             case "organisation_unin_id":
                 return $this->get_organisation_unit_id();
                 break;
             default:
                 return null;
                 break;
         }
     } else {
         return null;
     }
 }