1<?php
2
3declare(strict_types=1);
4
5class LSItemOnlineStatus
6{
7    const S_LEARNMODULE_IL = "lm";
8    const S_LEARNMODULE_HTML = "htlm";
9    const S_SAHS = "sahs";
10    const S_TEST = "tst";
11    const S_SURVEY = "svy";
12    const S_CONTENTPAGE = "copa";
13    const S_EXERCISE = "exc";
14    const S_IND_ASSESSMENT = "iass";
15    const S_FILE = "file";
16
17    private static $obj_with_online_status = array(
18        self::S_LEARNMODULE_IL,
19        self::S_LEARNMODULE_HTML,
20        self::S_SAHS,
21        self::S_TEST,
22        self::S_SURVEY
23    );
24
25    public function setOnlineStatus(int $ref_id, bool $status)
26    {
27        $obj = \ilObjectFactory::getInstanceByRefId($ref_id);
28        $obj->setOfflineStatus(!$status);
29        $obj->update();
30    }
31
32    public function getOnlineStatus(int $ref_id) : bool
33    {
34        if(!$this->hasOnlineStatus($ref_id)) {
35            return true;
36        }
37        return !\ilObject::lookupOfflineStatus(\ilObject::_lookupObjId($ref_id));
38    }
39
40    public function hasOnlineStatus(int $ref_id) : bool
41    {
42        $type = $this->getObjectTypeFor($ref_id);
43        if (in_array($type, self::$obj_with_online_status)) {
44            return true;
45        }
46
47        return false;
48    }
49
50    protected function getObjectTypeFor(int $ref_id) : string
51    {
52        return \ilObject::_lookupType($ref_id, true);
53    }
54}
55