1<?php
2/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once 'Services/Tracking/classes/class.ilLPStatus.php';
5
6/**
7* @author Stefan Meyer <meyer@leifos.com>
8*
9* @version $Id$
10*
11* @ingroup	ServicesTracking
12*
13*/
14class ilLPStatusManual extends ilLPStatus
15{
16    public function __construct($a_obj_id)
17    {
18        global $DIC;
19
20        $ilDB = $DIC['ilDB'];
21
22        parent::__construct($a_obj_id);
23        $this->db = $ilDB;
24    }
25
26    public static function _getInProgress($a_obj_id)
27    {
28        include_once './Services/Tracking/classes/class.ilChangeEvent.php';
29        $users = ilChangeEvent::lookupUsersInProgress($a_obj_id);
30
31        // Exclude all users with status completed.
32        $users = array_diff((array) $users, ilLPStatusWrapper::_getCompleted($a_obj_id));
33
34        return $users;
35    }
36
37    public static function _getCompleted($a_obj_id)
38    {
39        global $DIC;
40
41        $ilDB = $DIC['ilDB'];
42
43        $usr_ids = array();
44
45        $query = "SELECT DISTINCT(usr_id) user_id FROM ut_lp_marks " .
46            "WHERE obj_id = " . $ilDB->quote($a_obj_id, 'integer') . " " .
47            "AND completed = '1' ";
48
49        $res = $ilDB->query($query);
50        while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
51            $usr_ids[] = $row->user_id;
52        }
53
54        return $usr_ids;
55    }
56
57    /**
58     * Determine status
59     *
60     * @param	integer		object id
61     * @param	integer		user id
62     * @param	object		object (optional depends on object type)
63     * @return	integer		status
64     */
65    public function determineStatus($a_obj_id, $a_user_id, $a_obj = null)
66    {
67        global $DIC;
68
69        $ilObjDataCache = $DIC['ilObjDataCache'];
70        $ilDB = $DIC['ilDB'];
71
72        $status = self::LP_STATUS_NOT_ATTEMPTED_NUM;
73        switch ($ilObjDataCache->lookupType($a_obj_id)) {
74            case 'lm':
75            case 'copa':
76            case 'htlm':
77                include_once("./Services/Tracking/classes/class.ilChangeEvent.php");
78                if (ilChangeEvent::hasAccessed($a_obj_id, $a_user_id)) {
79                    $status = self::LP_STATUS_IN_PROGRESS_NUM;
80
81                    // completed?
82                    $set = $ilDB->query($q = "SELECT usr_id FROM ut_lp_marks " .
83                        "WHERE obj_id = " . $ilDB->quote($a_obj_id, 'integer') . " " .
84                        "AND usr_id = " . $ilDB->quote($a_user_id, 'integer') . " " .
85                        "AND completed = '1' ");
86                    if ($rec = $ilDB->fetchAssoc($set)) {
87                        $status = self::LP_STATUS_COMPLETED_NUM;
88                    }
89                }
90                break;
91        }
92        return $status;
93    }
94
95    /**
96     * Get failed users for object
97     *
98     * @param int $a_obj_id
99     * @param array $a_user_ids
100     * @return array
101     */
102    public static function _lookupFailedForObject($a_obj_id, $a_user_ids = null)
103    {
104        return array();
105    }
106}
107