/**
  * Translate operator
  * @param type $a_operator
  */
 public static function translateOperator($a_obj_id, $a_operator)
 {
     switch ($a_operator) {
         case ilConditionHandler::OPERATOR_LP:
             $GLOBALS['lng']->loadLanguageModule('trac');
             include_once './Services/Tracking/classes/class.ilLPObjSettings.php';
             $obj_settings = new ilLPObjSettings($a_obj_id);
             return ilLPObjSettings::_mode2Text($obj_settings->getMode());
         default:
             $GLOBALS['lng']->loadLanguageModule('rbac');
             return $GLOBALS['lng']->txt('condition_' . $a_operator);
     }
 }
 /**
  * Handle an event in a listener.
  *
  * @param	string	$a_component	component, e.g. "Modules/Forum" or "Services/User"
  * @param	string	$a_event		event e.g. "createUser", "updateUser", "deleteUser", ...
  * @param	array	$a_parameter	parameter array (assoc), array("name" => ..., "phone_office" => ...)
  */
 static function handleEvent($a_component, $a_event, $a_parameter)
 {
     global $ilUser;
     if ($a_component == "Services/Tracking" && $a_event == "updateStatus") {
         $obj_id = $a_parameter["obj_id"];
         $user_id = $a_parameter["usr_id"];
         $status = $a_parameter["status"];
         if ($obj_id && $user_id) {
             if (ilObject::_lookupType($obj_id) != "crs") {
                 return;
             }
             // determine couse setting only once
             if (!isset(self::$course_mode[$obj_id])) {
                 include_once "./Modules/Course/classes/class.ilObjCourse.php";
                 $crs = new ilObjCourse($obj_id, false);
                 if ($crs->getStatusDetermination() == ilObjCourse::STATUS_DETERMINATION_LP) {
                     include_once './Services/Tracking/classes/class.ilLPObjSettings.php';
                     $lp_settings = new ilLPObjSettings($obj_id);
                     $mode = $lp_settings->getMode();
                 } else {
                     $mode = false;
                 }
                 self::$course_mode[$obj_id] = $mode;
             }
             $is_completed = $status == LP_STATUS_COMPLETED_NUM;
             // we are NOT using the members object because of performance issues
             switch (self::$course_mode[$obj_id]) {
                 case LP_MODE_MANUAL_BY_TUTOR:
                     include_once "Modules/Course/classes/class.ilCourseParticipants.php";
                     ilCourseParticipants::_updatePassed($obj_id, $user_id, $is_completed, $ilUser->getId());
                     break;
                 case LP_MODE_COLLECTION:
                 case LP_MODE_OBJECTIVES:
                     if ($is_completed) {
                         include_once "Modules/Course/classes/class.ilCourseParticipants.php";
                         ilCourseParticipants::_updatePassed($obj_id, $user_id, $is_completed, -1);
                     }
                     break;
             }
         }
     }
 }
 /**
  * sync course status and lp status 
  *  
  * @param int $a_member_id
  * @param bool $a_has_passed
  */
 protected function updateLPFromStatus($a_member_id, $a_has_passed)
 {
     include_once "Services/Tracking/classes/class.ilObjUserTracking.php";
     if (ilObjUserTracking::_enabledLearningProgress() && $this->object->getStatusDetermination() == ilObjCourse::STATUS_DETERMINATION_LP) {
         include_once './Services/Tracking/classes/class.ilLPObjSettings.php';
         $lp_settings = new ilLPObjSettings($this->object->getId());
         if ($lp_settings->getMode() == LP_MODE_MANUAL_BY_TUTOR) {
             include_once 'Services/Tracking/classes/class.ilLPMarks.php';
             $marks = new ilLPMarks($this->object->getId(), $a_member_id);
             $marks->setCompleted($a_has_passed);
             $marks->update();
             include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php";
             ilLPStatusWrapper::_updateStatus($this->object->getId(), $a_member_id, null, false, true);
         }
     }
 }