/** * Adds a course to the modello_corso table of the current provider, * and then adds a service to the platform and links it to the provider * * @param SimpleXMLElement $course the root course node to be saved * * @return AMA_Error on error | int generated course id on success * * @access private */ private function _add_course($course) { // gets all object inside 'modello_corso' that are NOT // of type 'nodi', 'tests', 'surveys' // holds datas of the course to be saved $courseArr = array(); foreach ($course as $nodeName => $nodeValue) { if (!in_array($nodeName, $this->_specialNodes)) { $courseArr[$nodeName] = (string) $nodeValue; } } $courseArr['id_autore'] = $this->_assignedAuthorID; $courseArr['d_create'] = ts2dFN(time()); $courseArr['d_publish'] = NULL; $courseArr['service_level'] = $this->_selectedServiceLevel; $this->_logMessage('Adding course model by calling data handler add_course with the following datas:'); $this->_logMessage(print_r($courseArr, true)); $rename_count = 0; do { $courseNewID = $this->_dh->add_course($courseArr); if (AMA_DB::isError($courseNewID)) { if (strlen($courseArr['nome']) > 32) { $this->_logMessage('Generated name will be over maximum allowed size, I\'ll give up and generate an error message.'); $rename_count = -1; // this will force an exit from the while loop } else { $this->_logMessage($courseArr['nome'] . ' will generate a duplicate key, rename attempt #' . ++$rename_count); $courseArr['nome'] .= '-DUPLICATE'; } } else { $this->_logMessage('Successfully created new corse with name:' . $courseArr['nome'] . ' and id: ' . $courseNewID); } } while (AMA_DB::isError($courseNewID) && $rename_count >= 0); if (!AMA_DB::isError($courseNewID)) { $retval = $courseNewID; // add a row in common.servizio $service_dataAr = array('service_name' => $courseArr['titolo'], 'service_description' => $courseArr['descr'], 'service_level' => 1, 'service_duration' => 0, 'service_min_meetings' => 0, 'service_max_meetings' => 0, 'service_meeting_duration' => 0); $id_service = $this->_common_dh->add_service($service_dataAr); if (!AMA_DB::isError($id_service)) { $tester_infoAr = $this->_common_dh->get_tester_info_from_pointer($this->_selectedTester); if (!AMA_DB::isError($tester_infoAr)) { $id_tester = $tester_infoAr[0]; $result = $this->_common_dh->link_service_to_course($id_tester, $id_service, $courseNewID); if (AMA_DB::isError($result)) { $retval = $result; } } else { $retval = $tester_infoAr; } // if (!AMA_DB::isError($tester_infoAr)) } else { $retval = $id_service; } // if (!AMA_DB::isError($id_service)) } else { $retval = $courseNewID; } // if (!AMA_DB::isError($courseNewID)) if (AMA_DB::isError($retval)) { $this->_logMessage('Adding course (modello_corso table) has FAILED! Pls find details below:'); $this->_logMessage(print_r($retval, true)); } else { $this->_logMessage('Adding course OK! Generated course_id=' . $retval); } return $retval; }