$existingEvaluationId = false;
 foreach ($courseInfo['course_codes']['listings'] as &$listing) {
     $courseNames->retrieve(array('subject', 'number', 'section'), array($listing['subject'], $listing['number'], $courseInfo['course_codes']['section']), array('course_id'));
     if ($courseNames->resultsExist) {
         $existingEvaluationId = $courseNames->info['course_id'];
         break;
     }
 }
 $courses = new MysqlTable($mysqli, 'courses');
 $infoToSet = extractFieldsFromArray(array('title', 'description', 'requirements', 'extra_info'), $courseInfo);
 $infoToSet['exam_group'] = $courseInfo['exam']['group'];
 if ($existingEvaluationId) {
     $infoToSet['id'] = $existingEvaluationId;
 }
 $courses->setInfoArray($infoToSet);
 $success = $courses->commit();
 if (!$success) {
     $infoToSet['description'] = mb_convert_encoding($infoToSet['description'], 'UTF-8', 'Windows-1252');
     $courses->setInfoArray($infoToSet);
     $success = $courses->commit();
 }
 ProjectFunctions::assertAndPrint($success, $courses);
 if (!$existingEvaluationId) {
     $existingEvaluationId = $courses->insertId;
 }
 $courseNames->clearInfo();
 $infoToSet = array_merge(extractFieldsFromArray(array('subject', 'number'), $courseInfo['course_codes']['listings'][0]), extractFieldsFromArray(array('section', 'oci_id'), $courseInfo['course_codes']));
 $infoToSet['course_id'] = $existingEvaluationId;
 $courseNames->setInfoArray($infoToSet);
 ProjectFunctions::assertAndPrint($courseNames->commit(), $courseNames);
 $courseAreas = new MysqlTable($mysqli, 'course_areas');