<commit_before><?php

/**
* @package    Iconito
* @subpackage Gestion Autonome
* @author     <NAME>
*/

class GestionAutonomeService {
  
  /**
   * Supprime l'affectation d'un élève au sein d'une classe
   *
   * @param int                         $studentId      Identifiant de l'élève
   * @param DAOKernel_bu_ecole_classe   $classroom      Classe
   */
  public static function removeStudentAssignment ($studentId, $classroom) {
    
    // Ajout d'un enregistrement de radiation
    $studentAdmissionDAO = _ioDAO ('kernel|kernel_bu_eleve_admission');
    $studentAdmission = _record ('kernel|kernel_bu_eleve_admission');
    
    $studentAdmission->admission_eleve          = $studentId;
    $studentAdmission->admission_etablissement  = $classroom->ecole;
    $studentAdmission->admission_annee_scol     = $classroom->annee_scol;
    $studentAdmission->admission_id_niveau      = '';
    $studentAdmission->admission_etat_eleve     = 3;
    $studentAdmission->admission_date           = CopixDateTime::timestampToYYYYMMDD (time ());
    $studentAdmission->admission_date_effet     = CopixDateTime::timestampToYYYYMMDD (time ());
    $studentAdmission->admission_code_radiation = '';
    $studentAdmission->admission_previsionnel   = '';
    
    $studentAdmissionDAO->insert ($studentAdmission);
    
    // Récupération de l'affectation de l'élève à la classe pour passage du flag current à 0
    $studentAssignmentDAO = _ioDAO ('kernel|kernel_bu_ele_affect');
    $studentAssignment = $studentAssignmentDAO->getByStudentAndClass ($studentId, $classroom->id, 1);
    $studentAssignment->affect_current = 0;
    
    $studentAssignmentDAO->update ($studentAssignment);
    
    // Si l'utilisateur n'a pas d'autres affectations dans cette école : passage du flag inscr_current à 0
    if (!$studentAssignmentDAO->countCurrentAffectInSchool ($studentId, $classroom->ecole) > 0) {

      $studentRegistrationDAO = _ioDAO ('kernel|kernel_bu_eleve_inscription');
      $studentRegistration = $studentRegistrationDAO->getByStudentAndSchool ($studentId, $classroom->ecole);
      
      $studentRegistrationDAO->updateCurrentFlag ($studentRegistration->numero, 0);
    }
  }
  
  /**
   * Supprime les affectations d'un élève
   *
   * @param int   $studentId  Identifiant de l'élève
   * @param int   $grade      Année scolaire
   */
  public static function removeStudentAssignments ($studentId, $grade = null) {
    
    $studentAssignmentDAO = _ioDAO ('kernel|kernel_bu_ele_affect');
    
    // Récupération des affectations de l'élève pour passage du flag current à 0
    $studentAssignments = $studentAssignmentDAO->getByStudent ($studentId, $grade);
    foreach ($studentAssignments as $studentAssignment) {
      
      $studentAssignment->affect_current = 0;
      $studentAssignmentDAO->update ($studentAssignment);
    }
  }
  
  /**
   * Supprime l'affectation d'une personne
   *
   * @param int         $personId      Identifiant de la personne
   * @param int         $reference     Identifiant du node de l'affectation
   * @param string      $type_ref      Type du node de l'affectation
   */
  public static function removePersonnelAssignment ($personId, $reference, $type_ref) {
    
    $personEntityDAO = _ioDAO ('kernel|kernel_bu_personnel_entite');
    if ($personEntity = $personEntityDAO->getByIdReferenceAndType ($personId, $reference, $type_ref)) {
      
      // Si on se trouve sur une ecole et que la personne (directeur) a une affectation dans une des classes
      if ($type_ref == 'ECOLE' 
        && $personEntityDAO->hasTeacherRoleInSchool ($personId, $reference, true) 
        && $personEntity->pers_entite_role == DAOKernel_bu_personnel_entite::ROLE_PRINCIPAL) {
          
        // Mise à jour du rôle : directeur -> enseignant
        $personEntityDAO->updateRole ($personId, $reference, $type_ref, DAOKernel_bu_personnel_entite::ROLE_TEACHER);
        
        return 'principalRemoved';
      }
      else {
        
        // Suppression de l'affectation
        $personEntityDAO->delete ($personId, $reference, $type_ref);
        <commit_msg>[UPDATE] GestionAutonome : Refacto de la suppression des affectations d'un élève<commit_after><?php

/**
* @package    Iconito
* @subpackage Gestion Autonome
* @author     <NAME>
*/

class GestionAutonomeService {
  
  /**
   * Supprime l'affectation d'un élève au sein d'une classe
   *
   * @param int                         $studentId      Identifiant de l'élève
   * @param DAOKernel_bu_ecole_classe   $classroom      Classe
   */
  public static function removeStudentAssignment ($studentId, $classroom) {
    
    // Ajout d'un enregistrement de radiation
    $studentAdmissionDAO = _ioDAO ('kernel|kernel_bu_eleve_admission');
    $studentAdmission = _record ('kernel|kernel_bu_eleve_admission');
    
    $studentAdmission->admission_eleve          = $studentId;
    $studentAdmission->admission_etablissement  = $classroom->ecole;
    $studentAdmission->admission_annee_scol     = $classroom->annee_scol;
    $studentAdmission->admission_id_niveau      = '';
    $studentAdmission->admission_etat_eleve     = 3;
    $studentAdmission->admission_date           = CopixDateTime::timestampToYYYYMMDD (time ());
    $studentAdmission->admission_date_effet     = CopixDateTime::timestampToYYYYMMDD (time ());
    $studentAdmission->admission_code_radiation = '';
    $studentAdmission->admission_previsionnel   = '';
    
    $studentAdmissionDAO->insert ($studentAdmission);
    
    // Récupération de l'affectation de l'élève à la classe pour passage du flag current à 0
    $studentAssignmentDAO = _ioDAO ('kernel|kernel_bu_ele_affect');
    $studentAssignment = $studentAssignmentDAO->getByStudentAndClass ($studentId, $classroom->id, 1);
    $studentAssignment->affect_current = 0;
    
    $studentAssignmentDAO->update ($studentAssignment);
    
    // Si l'utilisateur n'a pas d'autres affectations dans cette école : passage du flag inscr_current à 0
    if (!$studentAssignmentDAO->countCurrentAffectInSchool ($studentId, $classroom->ecole) > 0) {

      $studentRegistrationDAO = _ioDAO ('kernel|kernel_bu_eleve_inscription');
      $studentRegistration = $studentRegistrationDAO->getByStudentAndSchool ($studentId, $classroom->ecole);
      
      $studentRegistrationDAO->updateCurrentFlag ($studentRegistration->numero, 0);
    }
  }
  
  /**
   * Supprime les affectations d'un élève
   *
   * @param int   $studentId  Identifiant de l'élève
   * @param int   $grade      Année scolaire
   */
  public static function removeStudentAssignments ($studentId, $grade = null) {
    
    $studentAssignmentDAO = _ioDAO ('kernel|kernel_bu_ele_affect');
    $classroomDAO = _ioDAO ('kernel|kernel_bu_ecole_classe');
    
    // Récupération des affectations de l'élève pour passage du flag current à 0
    $studentAssignments = $studentAssignmentDAO->getByStudent ($studentId, $grade);
    foreach ($studentAssignments as $studentAssignment) {
      
      $classroom = $classroomDAO->get ($studentAssignment->affect_classe);
      self::removeStudentAssignment ($studentId, $classroom);
    }
  }
  
  /**
   * Supprime l'affectation d'une personne
   *
   * @param int         $personId      Identifiant de la personne
   * @param int         $reference     Identifiant du node de l'affectation
   * @param string      $type_ref      Type du node de l'affectation
   */
  public static function removePersonnelAssignment ($personId, $reference, $type_ref) {
    
    $personEntityDAO = _ioDAO ('kernel|kernel_bu_personnel_entite');
    if ($personEntity = $personEntityDAO->getByIdReferenceAndType ($personId, $reference, $type_ref)) {
      
      // Si on se trouve sur une ecole et que la personne (directeur) a une affectation dans une des classes
      if ($type_ref == 'ECOLE' 
        && $personEntityDAO->hasTeacherRoleInSchool ($personId, $reference, true) 
        && $personEntity->pers_entite_role == DAOKernel_bu_personnel_entite::ROLE_PRINCIPAL) {
          
        // Mise à jour du rôle : directeur -> enseignant
        $personEntityDAO->updateRole ($personId, $reference, $type_ref, DAOKernel_bu_personnel_entite::ROLE_TEACHER);
        
        return 'principalRemoved';
      }
      else {
        
        // Suppression de l'affectation
        $personEntityDAO->delete ($personId, $reference, $type_ref);
        
{'fraction_non_alphanumeric': 0.10148574167265756, 'fraction_numerical': 0.0020369039060627848, 'mean_word_length': 3.4517333333333333, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 69, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6004749', 'n_tokens_mistral': 2606, 'n_tokens_neox': 2622, 'n_words': 542}