/** * Returns those CareerSubjects that are correlative for $career_subject. This depends on * has_correlative_previous_year flag * * @param CareerSubject $career_subject * @param Criteria $criteria add custom filters to returned values * @param PropelPDO $con * @return array CareerSubject[] */ public function getCorrelativesForCareerSubject(CareerSubject $career_subject, Criteria $criteria = null, PropelPDO $con = null) { if ($career_subject->getHasCorrelativePreviousYear()) { // $criteria must filter only the CareerSubject objects that belong to the // same Career as $career_subject, different from $career_subject, that // are in an year up to the same year as $career_subject $criteria = is_null($criteria) ? new Criteria() : $criteria; $criteria->add(CareerSubjectPeer::ID, $career_subject->getId(), Criteria::NOT_EQUAL); $criteria->add(CareerSubjectPeer::CAREER_ID, $career_subject->getCareerId()); $criteria->add(CareerSubjectPeer::YEAR, $career_subject->getYear() - 1); //Only consider previous year // Dont forget to consider orientation $orientation_criterion = $criteria->getNewCriterion(CareerSubjectPeer::ORIENTATION_ID, null, Criteria::ISNULL); $sub_orientation_criterion = $criteria->getNewCriterion(CareerSubjectPeer::SUB_ORIENTATION_ID, null, Criteria::ISNULL); if (!is_null($orientation = $career_subject->getOrientation())) { /* * Correlatives for a subject with orientation are other subjects without orientation * or subjects with same orientation */ $criterion = $criteria->getNewCriterion(CareerSubjectPeer::ORIENTATION_ID, $orientation->getId()); $orientation_criterion->addOr($criterion); } $criteria->add($orientation_criterion); if (!is_null($sub_orientation = $career_subject->getSubOrientation())) { /* * Correlatives for a subject with orientation are other subjects without orientation * or subjects with same orientation */ $criterion = $criteria->getNewCriterion(CareerSubjectPeer::ORIENTATION_ID, $orientation->getId()); $sub_orientation_criterion->addOr($criterion); } $criteria->add($sub_orientation_criterion); return CareerSubjectPeer::doSelect($criteria); } return array_map(create_function('$correlative', 'return $correlative->getCareerSubjectRelatedByCorrelativeCareerSubjectId();'), $career_subject->getCorrelativesRelatedByCareerSubjectId($criteria)); }