2 // +----------------------------------------------------------------------+
3 // | Anuko Time Tracker
4 // +----------------------------------------------------------------------+
5 // | Copyright (c) Anuko International Ltd. (https://www.anuko.com)
6 // +----------------------------------------------------------------------+
7 // | LIBERAL FREEWARE LICENSE: This source code document may be used
8 // | by anyone for any purpose, and freely redistributed alone or in
9 // | combination with other software, provided that the license is obeyed.
11 // | There are only two ways to violate the license:
13 // | 1. To redistribute this code in source form, with the copyright
14 // | notice or license removed or altered. (Distributing in compiled
15 // | forms without embedded copyright notices is permitted).
17 // | 2. To redistribute modified versions of this code in *any* form
18 // | that bears insufficient indications that the modifications are
19 // | not the work of the original author(s).
21 // | This license applies to this document only, not any other software
22 // | that it may be combined with.
24 // +----------------------------------------------------------------------+
26 // | https://www.anuko.com/time_tracker/credits.htm
27 // +----------------------------------------------------------------------+
29 // Class ttConfigHelper is a helper class to handle comma-separated lists of config data.
30 // For example, in tt_groups table we have a field called "config", that may store something like:
32 // allow_overlap,uncompleted_indicators,minutes_in_unit:15,future_entries
33 // Above, some values are simply defined by their presence such as allow_overlap.
34 // Other values have associated values after colon such as minutes_in_work_unit (15).
35 class ttConfigHelper {
36 var $config = null; // Source config string.
37 var $config_array = null; // Array of config values.
40 function __construct($config) {
41 $this->config = $config;
42 $this->config_array = explode(',', $this->config);
45 // getDefinedValue determines if a value identified by name is defined.
46 function getDefinedValue($name) {
47 return in_array($name, $this->config_array);
50 // setDefinedValue either sets or deletes a defined value identified by name.
51 function setDefinedValue($name, $set = true) {
54 if (!$this->getDefinedValue($name)) {
55 $this->config_array[] = $name;
56 $this->config = implode(',', $this->config_array);
61 foreach ($this->config_array as $key => $value) {
62 if ($value === $name) {
63 unset($this->config_array[$key]);
64 $this->config = implode(',', $this->config_array);
71 // The getIntValue parses an integer value from the source config string.
72 function getIntValue($name) {
73 $name_with_colon = $name.':';
74 $len = strlen($name_with_colon);
76 foreach ($this->config_array as $unparsed_value) {
77 if (substr($unparsed_value, 0, $len) === $name_with_colon) {
79 $unparsed_len = strlen($unparsed_value);
80 $int_value = (int) substr($unparsed_value, -($unparsed_len - $len));
88 // The setIntValue sets an integer value into config array.
89 function setIntValue($name, $value) {
90 // Try to find and replace an already existing value.
91 $name_with_colon = $name.':';
92 $len = strlen($name_with_colon);
94 foreach ($this->config_array as $key => $unparsed_value) {
95 if (substr($unparsed_value, 0, $len) === $name_with_colon) {
96 // Found an already existing value.
97 if ($value !== null) {
99 $this->config_array[$key] = $name.':'.$value;
101 // Remove value if our new value is NULL.
102 unset($this->config_array[$key]);
104 $this->config = implode(',', $this->config_array);
108 // If we get here, the value was not found, so add it.
109 $this->config_array[] = $name.':'.$value;
110 $this->config = implode(',', $this->config_array);
114 // The getConfig returns the config string.
115 function getConfig() {
116 return $this->config;