コード例 #1
0
 public function executeCritique(sfWebRequest $request)
 {
     $this->buildSubmenu($request);
     $id = $request->getParameter("id");
     $conn = Propel::getConnection();
     $this->courseObj = CoursePeer::retrieveByPK($id, $conn);
     if ($request->hasParameter("year") && trim($request->getParameter("year")) != "") {
         $year = $request->getParameter("year");
         // check if the year exists
         $yearArray = AutoCourseRatingPeer::getAvailableYearsForCourseId($id, $conn);
         $err = true;
         foreach ($yearArray as $y) {
             if ($year == $y) {
                 $err = false;
                 break;
             }
         }
         if ($err) {
             $this->forward404();
         }
         $this->year = $year;
         $this->instructorArr = CourseInstructorAssociationPeer::getInstructorsForCourseAndYear($id, $year, $conn);
         if ($request->hasParameter("instructor")) {
             $insId = $request->getParameter("instructor");
         } else {
             $insId = $this->instructorArr[0]->getId();
         }
         $this->currInstructor = InstructorPeer::retrieveByPK($insId, $conn);
         // note that the below logic is predicated on getCourseDataArrayForCourseAndInstructorAndYear
         // sorting by Field, Id, Rating, in the respective order
         $dataObjArr = AutoCourseRatingPeer::getCourseDataArrayForCourseAndInstructorAndYear($id, $insId, $year, $conn);
         // $dataArr is an array of dictionaries (arr) that contain ratings/info
         $this->dataArr = array();
         // $arr = dictionary
         $arr = array();
         foreach ($dataObjArr as $obj) {
             // this sytem does not differentiate between different sections
             // when multiple sections with the SAME instructor is encountered, the data are aggregated
             switch ($obj->getFieldId()) {
                 case RatingFieldPeer::NUMBER_ENROLLED:
                     // number enrolled, special field
                     if (isset($this->numberEnrolled)) {
                         $this->numberEnrolled += $obj->getNumber();
                     } else {
                         $this->numberEnrolled = $obj->getNumber();
                     }
                     break;
                 case RatingFieldPeer::NUMBER_RESPONDED:
                     // number responded, special field
                     if (isset($this->numberResponded)) {
                         $this->numberResponded += $obj->getNumber();
                     } else {
                         $this->numberResponded = $obj->getNumber();
                     }
                     break;
                 case RatingFieldPeer::RETAKE:
                     // percent retake
                     if (isset($this->retake)) {
                         $this->retake += $obj->getNumber();
                     } else {
                         $this->retake = $obj->getNumber();
                     }
                     break;
                 default:
                     // ordinary rating data
                     if (!isset($currentNode)) {
                         $currentNode = $obj->getFieldId();
                         $arr["type"] = $obj->getRatingField()->getRatingTypeString($conn);
                         $arr["field"] = $obj->getRatingField()->getDescr();
                         $arr["instructor"] = $obj->getCourseInstructorAssociation($conn)->getInstructor()->getLastName();
                         $arr["typeObj"] = $obj->getRatingField()->getEnumItem($conn);
                     }
                     if ($currentNode != $obj->getFieldId()) {
                         $arr = $this->setMeanAndMedian($arr);
                         $arr["chart"] = $this->getFusionChartFromDataArr($arr);
                         $this->dataArr[] = $arr;
                         unset($arr);
                         $currentNode = $obj->getFieldId();
                         $arr["type"] = $obj->getRatingField()->getRatingTypeString($conn);
                         $arr["field"] = $obj->getRatingField()->getDescr();
                         $arr["instructor"] = $obj->getCourseInstructorAssociation($conn)->getInstructor()->getLastName();
                         $arr["typeObj"] = $obj->getRatingField()->getEnumItem($conn);
                     }
                     if (isset($arr[$obj->getRating()])) {
                         $arr[$obj->getRating()] += $obj->getNumber();
                     } else {
                         $arr[$obj->getRating()] = $obj->getNumber();
                     }
                     break;
             }
         }
         // for the last critique field
         $arr = $this->setMeanAndMedian($arr);
         // $arr["NA"] = number who did not respond to this question
         $arr["chart"] = $this->getFusionChartFromDataArr($arr);
         $this->dataArr[] = $arr;
         $this->aggregatedRating = $this->calcAggregatedRating($this->dataArr);
     } else {
         $this->forward404();
     }
 }