1<?php
2/* Copyright (c) 2016 Stefan Hecken, Extended GPL, see docs/LICENSE */
3
4/**
5 * Settings for the error protcoll system
6 *
7 * @author Stefan Hecken <stefan.hecken@concepts-and-training.de>
8 */
9class ilLoggingErrorSettings
10{
11    protected $folder;
12    protected $mail;
13
14    protected function __construct()
15    {
16        global $DIC;
17
18        $ilIliasIniFile = $DIC['ilIliasIniFile'];
19        // temporary bugfix for global usage
20        if ($DIC->offsetExists('ini')) {
21            $ini = $DIC['ini'];
22        }
23
24        $ilClientIniFile = null;
25        if (isset($DIC['ilClientIniFile'])) {
26            $ilClientIniFile = $DIC['ilClientIniFile'];
27        }
28
29        //realy not nice but necessary to initalize logger at setup
30        //ilias_ini is named only as $ini in inc.setup_header.php
31        if (!$ilIliasIniFile) {
32            if (!$ini) {
33                throw new Exception("No ILIAS ini");
34            } else {
35                $this->ilias_ini = $ini;
36            }
37        } else {
38            $this->ilias_ini = $ilIliasIniFile;
39        }
40
41        if ($ilClientIniFile !== null) {
42            $this->gClientIniFile = $ilClientIniFile;
43        }
44
45        $this->folder = null;
46        $this->mail = null;
47
48        $this->read();
49    }
50
51    public static function getInstance()
52    {
53        return new ilLoggingErrorSettings();
54    }
55
56    protected function setFolder($folder)
57    {
58        $this->folder = $folder;
59    }
60
61    public function setMail($mail)
62    {
63        $this->mail = $mail;
64    }
65
66    public function folder()
67    {
68        return $this->folder;
69    }
70
71    public function mail()
72    {
73        return $this->mail;
74    }
75
76    /**
77     * reads the values from ilias.ini.php
78     */
79    protected function read()
80    {
81        $this->setFolder($this->ilias_ini->readVariable("log", "error_path"));
82
83        if ($this->gClientIniFile instanceof \ilIniFile) {
84            $this->setMail($this->gClientIniFile->readVariable("log", "error_recipient"));
85        }
86    }
87
88    /**
89     * writes mail recipient into client.ini.php
90     */
91    public function update()
92    {
93        if ($this->gClientIniFile instanceof \ilIniFile) {
94            $this->gClientIniFile->addGroup("log");
95            $this->gClientIniFile->setVariable("log", "error_recipient", trim($this->mail()));
96            $this->gClientIniFile->write();
97        }
98    }
99}
100