/** * @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; }
/** * @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; } }