/** * Save the course_instructor_assocs * @param $instructor * @param $request * @return true if ready for saving, false otherwise */ protected function parseInsAssoc(Instructor $instructor, sfWebRequest $request) { $conn = Propel::getConnection(); // retrieve existing assoc objects $criteria = new Criteria(); $criteria->addAscendingOrderByColumn(CourseInstructorAssociationPeer::YEAR); $criteria->addAscendingOrderByColumn(CourseInstructorAssociationPeer::COURSE_ID); $extObjs = $instructor->getCourseInstructorAssociations($criteria, $conn); $delList = $extObjs; for ($i = $this->date["year"] + 1; $i >= $this->earliestYear; $i--) { for ($j = 1; $j <= 9; $j += 4) { $year = $i . $j; // first get an array of items $itemArr = array(); $token = strtok($request->getParameter("assoc[" . $year . "]"), $this->separator); while ($token !== false) { if (trim($token) != "") { $itemArr[] = $token; } $token = strtok($this->separator); } // check which ones exist, which ones are new and which ones need deletion foreach ($itemArr as $item) { $cCode = substr($item, 0, 8); $existed = false; foreach ($extObjs as $obj) { if ($obj->getCourseId() == $cCode && $obj->getYear() == $year) { $existed = true; $key = array_search($obj, $delList); if ($key !== false) { unset($delList[$key]); } break; } } if (!$existed) { // save the new assoc $assoc = new CourseInstructorAssociation(); $assoc->setCourseId($cCode); $assoc->setInstructorId($instructor->getId()); $assoc->setYear($year); $assoc->save($conn); } } } } // delete old assocs that no longer exist foreach ($delList as $obj) { $obj->delete($conn); } return true; }