Exemplo n.º 1
0
 /**
  * @see ProjectSecurityInterface::change_organisation_unit_permission()
  * @param integer $organisation_unit_id
  * @return bool
  * @throws ProjectSecurityChangeException
  */
 public function change_organisation_unit_permission($organisation_unit_id)
 {
     global $transaction;
     if (is_numeric($organisation_unit_id)) {
         $transaction_id = $transaction->begin();
         $organisation_unit = new OrganisationUnit($organisation_unit_id);
         $project_permission_ou_group_array = ProjectPermission::list_entries_by_project_id_and_intention($this->project_id, 4);
         if (is_array($project_permission_ou_group_array) and count($project_permission_ou_group_array) >= 1) {
             foreach ($project_permission_ou_group_array as $key => $value) {
                 try {
                     $project_permission = ProjectPermission::get_instance($value);
                     $project_permission->delete() == false;
                 } catch (ProjectPermissionException $e) {
                     if ($transaction_id != null) {
                         $transaction->rollback($transaction_id);
                     }
                     throw new ProjectSecurityChangeException();
                 }
             }
         }
         $project_permission_array = ProjectPermission::list_entries_by_project_id_and_intention($this->project_id, 3);
         if (count($project_permission_array) > 0 and is_numeric($project_permission_array[0])) {
             $project_permission = ProjectPermission::get_instance($project_permission_array[0]);
             if (($return_value = $project_permission->set_organisation_unit_id($organisation_unit_id)) == false) {
                 if ($transaction_id != null) {
                     $transaction->rollback($transaction_id);
                 }
                 throw new ProjectSecurityChangeException();
             }
         } else {
             try {
                 $project_permission = new ProjectPermissionOrganisationUnit(null);
                 $return_value = $project_permission->create($organisation_unit_id, $this->project_id, (int) Registry::get_value("project_organisation_unit_default_permission"), null, 3);
             } catch (ProjectPermissionOrganisationUnitException $e) {
                 if ($transaction_id != null) {
                     $transaction->rollback($transaction_id);
                 }
                 throw new ProjectSecurityChangeException();
             }
         }
         $group_array = $organisation_unit->list_groups();
         if (is_array($group_array) and count($group_array) >= 1) {
             foreach ($group_array as $key => $value) {
                 try {
                     $project_permission = new ProjectPermissionGroup(null);
                     $project_permission->create($value, $this->project_id, (int) Registry::get_value("project_group_default_permission"), null, 4);
                 } catch (ProjectPermissionGroupException $e) {
                     if ($transaction_id != null) {
                         $transaction->rollback($transaction_id);
                     }
                     throw new ProjectSecurityChangeException();
                 }
             }
         }
         if ($transaction_id != null) {
             $transaction->commit($transaction_id);
         }
         return $return_value;
     } else {
         throw new ProjectSecurityChangeException("Missing Information");
     }
 }