Exemplo n.º 1
0
	/**
	 * Gets a collection of Groupe objects related by a many-to-many relationship
	 * to the current object by way of the j_groupes_professeurs cross-reference table.
	 *
	 * If the $criteria is not null, it is used to always fetch the results from the database.
	 * Otherwise the results are fetched from the database the first time, then cached.
	 * Next time the same method is called without $criteria, the cached collection is returned.
	 * If this UtilisateurProfessionnel is new, it will return
	 * an empty collection or the current collection; the criteria is ignored on a new object.
	 *
	 * @param      Criteria $criteria Optional query object to filter the query
	 * @param      PropelPDO $con Optional connection object
	 *
	 * @return     PropelCollection|array Groupe[] List of Groupe objects
	 */
	public function getGroupes($criteria = null, PropelPDO $con = null)
	{
		if(null === $this->collGroupes || null !== $criteria) {
			if ($this->isNew() && null === $this->collGroupes) {
				// return empty collection
				$this->initGroupes();
			} else {
				if ($this->statut == "professeur") {
 				    if (null !== $criteria) {
					$collGroupes = GroupeQuery::create(null, $criteria)
					    ->orderByName()
					    ->filterByUtilisateurProfessionnel($this)
					    ->leftJoin('Groupe.JGroupesClasses')->with('JGroupesClasses')
					    ->leftJoin('JGroupesClasses.Classe')->with('Classe')
					    ->orderBy('Classe.Nom')
					    ->find($con);
				    } else {
					//on utilise du sql directement pour optimiser la requete
					$sql = "SELECT /* getGroupes manual sql */ groupes.ID, groupes.NAME, groupes.DESCRIPTION, groupes.RECALCUL_RANG, j_groupes_classes.ID_GROUPE, j_groupes_classes.ID_CLASSE, j_groupes_classes.PRIORITE, j_groupes_classes.COEF, j_groupes_classes.CATEGORIE_ID, j_groupes_classes.SAISIE_ECTS, j_groupes_classes.VALEUR_ECTS, classes.ID, classes.CLASSE, classes.NOM_COMPLET, classes.SUIVI_PAR, classes.FORMULE, classes.FORMAT_NOM, classes.DISPLAY_RANG, classes.DISPLAY_ADDRESS, classes.DISPLAY_COEF, classes.DISPLAY_MAT_CAT, classes.DISPLAY_NBDEV, classes.DISPLAY_MOY_GEN, classes.MODELE_BULLETIN_PDF, classes.RN_NOMDEV, classes.RN_TOUTCOEFDEV, classes.RN_COEFDEV_SI_DIFF, classes.RN_DATEDEV, classes.RN_SIGN_CHEFETAB, classes.RN_SIGN_PP, classes.RN_SIGN_RESP, classes.RN_SIGN_NBLIG, classes.RN_FORMULE, classes.ECTS_TYPE_FORMATION, classes.ECTS_PARCOURS, classes.ECTS_CODE_PARCOURS, classes.ECTS_DOMAINES_ETUDE, classes.ECTS_FONCTION_SIGNATAIRE_ATTESTATION FROM `groupes` INNER JOIN j_groupes_professeurs ON (groupes.ID=j_groupes_professeurs.ID_GROUPE) LEFT JOIN j_groupes_classes ON (groupes.ID=j_groupes_classes.ID_GROUPE) LEFT JOIN classes ON (j_groupes_classes.ID_CLASSE=classes.ID) WHERE j_groupes_professeurs.LOGIN='******' ORDER BY groupes.NAME ASC,classes.CLASSE ASC";

					$con = Propel::getConnection(GroupePeer::DATABASE_NAME, Propel::CONNECTION_READ);
					$stmt = $con->prepare($sql);
					$stmt->execute();

					$collGroupes = UtilisateurProfessionnel::getGroupeFormatter()->format($stmt);

//					$collGroupes = GroupeQuery::create(null, $criteria)
//					    ->orderByName()
//					    ->filterByUtilisateurProfessionnel($this)
//					    ->leftJoin('Groupe.JGroupesClasses')->with('JGroupesClasses')
//					    ->leftJoin('JGroupesClasses.Classe')->with('Classe')
//					    ->orderBy('Classe.Nom')
//					    ->setComment('getGroupes manual sql')
//					    ->find($con);
 				    }
				} elseif ($this->statut == "cpe") {
				    //on ajoute les groupes contenant des eleves sous la responsabilite du cpe
				    $collGroupes = GroupeQuery::create(null, $criteria)
					    ->distinct()
					    ->orderByName()
					    ->useJEleveGroupeQuery()->useEleveQuery()->useJEleveCpeQuery()
					    ->filterByUtilisateurProfessionnel($this)
					    ->endUse()->endUse()->endUse()
					    ->leftJoinWith('Groupe.JGroupesClasses')
					    ->leftJoinWith('JGroupesClasses.Classe')
					    ->orderBy('Classe.Nom')
					    ->find();
				} else if ($this->statut == "scolarite") {
				    //on ajoute les groupes des classes sous la responsabilite du compte scolalite
				    $collGroupes = GroupeQuery::create(null, $criteria)
					    ->orderByName()
					    ->useJGroupesClassesQuery()->useClasseQuery()->orderBy('Classe.Nom')->useJScolClassesQuery()
					    ->filterByUtilisateurProfessionnel($this)
					    ->endUse()->endUse()->endUse()
					    ->find();
				} else {
				    //par de groupes pour les autres statuts
				    $collGroupes = new PropelObjectCollection();
				}

				if (null !== $criteria) {
					return $collGroupes;
				}
				$this->collGroupes = $collGroupes;
			}
		}
		return $this->collGroupes;
	}