summaryrefslogtreecommitdiffstats
path: root/admin/survey/classes/objects/obj.SpremenljivkaSkala.php
blob: be142055f15b8901dbf2668720a9d490b7f9b230 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
<?php 
/*
 * 
 * skala - 0 Ordinalna
 * skala - 1 Nominalna
 * skala - 2 Razmernostna
 * 
 * Radio grupe so privzeto ordinalne, vendar jih v primeru kadar imamo samo dve kategoriji 
 * in ni drugače uporabniško določeno označimo kot nominalne
 * 
 * 
 * Spremenljivka je nominalna: Kategorij odgovorov ni mogoče primerjati niti ni mogoče računati povprečij. Npr. spol, barva, regija, država.
 * Spremenlijvka je ordinialna:  Kategorije odgovorov je mogoče primerjati; računamo lahko tudi povprečje. Npr. lestvice na skalah (strinjanje, zadovoljstvo,…)
 *
 */
class SpremenljivkaSkala {

	// set a constant
	const ORD = 0;
	const NOM = 1;
	const RAZ = 2;
	
	private $spr_id;		#id spremenljivke
	private $spr_data;		#podatkispremenljivke (cache)
	private $skala = -1;	#skala spremenljivke
	
	/** SpremenljivkaSkala
	 * 
	 * @param Intiger $spr_id
	 */
	function __construct($spr_id) {
		$this->spr_id = (int)$spr_id;
		$this->spr_data = Cache::srv_spremenljivka($this->spr_id);
		
		#polovimo nastavitev iz baze
		$tmpSkala = (int)$this->spr_data['skala'];
		$this->skala = $this->getSpremenljivkaRealSkala($tmpSkala);
	} 
	
	
	/** Vrene pravo skalo spremenljivke, glede na št. kategorij, ipd..., če ni uporabniško določena
	 *  Lahko vrne tudi NULL za nagovor ali za tipe nove tipe kateri niso dodani
	 *
	 * @param (int) $skala
	 * 
	 * @return SpremenljivkaSkala::ORD = 0
	 * @return SpremenljivkaSkala::NOM = 1
	 * @return SpremenljivkaSkala::RAZ = 2
	 * @return NULL
	 */
	function getSpremenljivkaRealSkala($skala) {
		# če je skala večja ali enaka 0 je uporabniško določena  
		if ((int)$skala >= 0) {
			return $skala;
		} else {
			# če ne pa je vse odvisno od vrste spremenljivke in drugih zadev (in od vasjinega razpoloženja)
			switch ((int)$this->spr_data['tip']) {
				#radio
				case 1:
				#dropdown
				case 3:
					$sql = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id = '$this->spr_id'");
					list($cnt) = mysqli_fetch_row($sql);
					# če imamo samo dve kategoriji jo razglasimo za nominalno
					if ((int)$cnt == 2) {
						return SpremenljivkaSkala::NOM;
					} else {
						return SpremenljivkaSkala::ORD;
					}
				break;
				#checkbox
				case 2:
					return SpremenljivkaSkala::NOM;
				break;
				#tekst old
				case 4:
					return SpremenljivkaSkala::NOM;
				break;
				#6 multigrid
				case 6:
					$sql = sisplet_query("SELECT count(*) FROM srv_grid WHERE spr_id = '$this->spr_id'");
					list($cnt) = mysqli_fetch_row($sql);
					# če imamo samo dve kategoriji jo razglasimo za nominalno
					if ((int)$cnt == 2) {
						return SpremenljivkaSkala::NOM;
					} else {
						return SpremenljivkaSkala::ORD;
					}
				break;
				#number
				case 7:
					return SpremenljivkaSkala::RAZ;
				break;
				#datum
				case 8:
					return SpremenljivkaSkala::ORD;
				break;
				#multi checkbox
				case 16 : // mcheckbox
					return SpremenljivkaSkala::NOM;
				break;
				#razvrščanje
				case 17:
					return SpremenljivkaSkala::ORD;
				break;
				#vsota
				case 18:
					return SpremenljivkaSkala::RAZ;
				break;
				#multi tekst
				case 19:
					return SpremenljivkaSkala::NOM;
				break;
				#multi num
				case 20:
					return SpremenljivkaSkala::RAZ;
				break;
				#tekst *
				case 21:
					return SpremenljivkaSkala::NOM;
				break;
				#kalkulacija
				case 22:
					return SpremenljivkaSkala::NOM;
				break;
			}
		}
		return NULL;
	}
	
	/** vrne skalo spremenljivke kot numerično vrednost
	 * 
	 * @return (Intiger) $this->skala
	 */
	function getSkala() {

		if ((int)$this->skala >= 0) {
			return $this->skala;
		}
		
		return NULL;
	}
	
	/** vrne skalo spremenljivke kot tekstovno vrednost
	 * 
	 * @return (text) $this->skala
	 */
	function getSkalaAsText() {
		global $lang;
		switch ($this->skala) {
			case SpremenljivkaSkala::ORD:
				return $lang['srv_analiza_oblika_ordi'];
				break;
			case SpremenljivkaSkala::NOM:
				return $lang['srv_analiza_oblika_nomi'];
				break;
			case SpremenljivkaSkala::RAZ:
				return $lang['srv_analiza_oblika_razm'];
				break;
		}
		return NULL;
	}
	
	/** Ali lahko za tip spremenljivke spremenimo skalo
	 *
	 * skalo lahko spremninjamo pri 
	 *  -radio
	 *  -dropdown
	 *  -multi radio
	 *  
	 * @return boolean
	 */
	function canChangeSkala() {
		switch ((int)$this->spr_data['tip']) {
			case 1:
			case 3:
			case 6:
				return true;
			break;
		}
		return false;
	}

	/** Ali je trenutna skala enaka pogoju 
	 * 
	 * @param const(ORD|NOM|RAZ) $what 
	 * @return boolean
	 */
	function is($what) {
		return ($this->getSkala() == $what) ? TRUE : FALSE;
	}
	
	function __toString() {
		return (String)$this->getSkala();
	}
}