398 {
400 $ilLog->write(
"SCORM2004 writeGObjective");
401
402 $returnAr=array(null,null,null);
403
404
405 if($g_data == null)
406 return $returnAr;
407
408 $rows_to_insert = Array();
409
410 foreach($g_data as $key => $value)
411 {
412 $ilLog->write(
"SCORM2004 writeGObjective -key: ".$key);
413
414
415
416 foreach($value as $skey => $svalue)
417 {
418 $ilLog->write(
"SCORM2004 writeGObjective -skey: ".$skey);
419
420 if($g_data->$key->$skey->$user->$package)
421 {
422 $o_value = $g_data->$key->$skey->$user->$package;
423 $scope = $package;
424 }
425 else
426
427 {
428
429 $o_value = $g_data->$key->$skey->$user->{"null"};
430
431 $scope = 0;
432 }
433
434
435 $objective_id = $skey;
436 $toset = $o_value;
437 $dbuser = $user;
438
439 if($key == "status")
440 {
441
442
443 $completed = $g_data->$key->$skey->$user->{completed};
444 $measure = $g_data->$key->$skey->$user->{measure};
445 $satisfied = $g_data->$key->$skey->$user->{satisfied};
446
447 $returnAr=array($completed, $satisfied, $measure);
448
449 $obj = '-course_overall_status-';
450 $pkg_id = $package;
451
453 SELECT user_id FROM cmi_gobjective
454 WHERE objective_id =%s
455 AND user_id = %s
456 AND scope_id = %s',
457 array('text', 'integer', 'integer'),
458 array($obj, $dbuser, $pkg_id)
459 );
462 {
464 INSERT INTO cmi_gobjective
465 (user_id, status, scope_id, measure, satisfied, objective_id)
466 VALUES (%s, %s, %s, %s, %s, %s)',
467 array('integer', 'text', 'integer', 'text', 'text', 'text'),
468 array($dbuser, $completed, $pkg_id, $measure, $satisfied, $obj)
469 );
470 $ilLog->write(
"SCORM2004 cmi_gobjective Insert status=".$completed.
" scope_id=".$pkg_id.
" measure=".$measure.
" satisfied=".$satisfied.
" objective_id=".$obj);
471 }
472 else
473 {
475 UPDATE cmi_gobjective
476 SET status = %s,
477 measure = %s,
478 satisfied = %s
479 WHERE objective_id = %s
480 AND user_id = %s
481 AND scope_id = %s',
482 array('text', 'text', 'text', 'text', 'integer', 'integer'),
483 array($completed, $measure, $satisfied, $obj, $dbuser, $pkg_id)
484 );
485 $ilLog->write(
"SCORM2004 cmi_gobjective Update status=".$completed.
" scope_id=".$pkg_id.
" measure=".$measure.
" satisfied=".$satisfied.
" objective_id=".$obj);
486 }
487 } else
488 {
489
490 if($rows_to_insert[$objective_id] == NULL)
491 {
492 $rows_to_insert[$objective_id] = Array();
493 }
494 $rows_to_insert[$objective_id][$key] = $toset;
495 }
496
497 }
498 }
499
500
501 $res =
$ilDB->queryF(
"SELECT global_to_system
502 FROM cp_package
503 WHERE obj_id = %s",
504 array('text'),
505 array($package)
506 );
507
508 $scope_id = (
$ilDB->fetchObject(
$res)->global_to_system) ? 0 : $package;
509
510
511 $existing_key_template = "";
512 foreach(array_keys($rows_to_insert) as $obj_id)
513 {
514 $existing_key_template .= "'{$obj_id}',";
515
516 }
517
518 $existing_key_template = substr($existing_key_template, 0, strlen($existing_key_template) - 1);
519 $existing_keys = Array();
520
521 if($existing_key_template != "")
522 {
523
524 $res =
$ilDB->queryF(
"SELECT objective_id
525 FROM cmi_gobjective
526 WHERE user_id = %s
527 AND scope_id = %s
528 AND objective_id IN ($existing_key_template)",
529 array('integer', 'integer'),
530 array($dbuser, $scope_id)
531 );
532
534 {
535 $existing_keys[] =
$row[
'objective_id'];
536 }
537 }
538
539 foreach($rows_to_insert as $obj_id => $vals)
540 {
541 if(in_array($obj_id, $existing_keys))
542 {
543 $ilDB->manipulateF(
"UPDATE cmi_gobjective
544 SET satisfied=%s,
545 measure=%s,
546 score_raw=%s,
547 score_min=%s,
548 score_max=%s,
549 completion_status=%s,
550 progress_measure=%s
551 WHERE objective_id = %s
552 AND user_id = %s
553 AND scope_id = %s",
554
555 array('text','text', 'text', 'text', 'text', 'text',
556 'text', 'text', 'integer', 'integer'),
557
558 array($vals['satisfied'], $vals["measure"], $vals["score_raw"],
559 $vals["score_min"], $vals["score_max"],
560 $vals["completion_status"], $vals["progress_measure"],
561 $obj_id, $dbuser, $scope_id)
562 );
563 } else
564 {
565 $ilDB->manipulateF(
"INSERT INTO cmi_gobjective
566 (user_id, satisfied, measure, scope_id, status, objective_id,
567 score_raw, score_min, score_max, progress_measure, completion_status)
568 VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
569
570
571 array('integer', 'text', 'text', 'integer', 'text', 'text',
572 'text', 'text', 'text', 'text', 'text'),
573
574 array($dbuser, $vals['satisfied'], $vals['measure'],
575 $scope_id, NULL, $obj_id, $vals['score_raw'],
576 $vals['score_min'], $vals['score_max'],
577 $vals['progress_measure'], $vals['completion_status'])
578 );
579 }
580 }
581
582
583
584
585
586
587 return $returnAr;
588 }