absences_viewVacationCalendarCls::__construct()   F
last analyzed

Complexity

Conditions 14
Paths 6144

Size

Total Lines 196
Code Lines 108

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 14
eloc 108
nc 6144
nop 7
dl 0
loc 196
rs 2
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/************************************************************************
3
 * OVIDENTIA http://www.ovidentia.org                                   *
4
 ************************************************************************
5
 * Copyright (c) 2003 by CANTICO ( http://www.cantico.fr )              *
6
 *                                                                      *
7
 * This file is part of Ovidentia.                                      *
8
 *                                                                      *
9
 * Ovidentia is free software; you can redistribute it and/or modify    *
10
 * it under the terms of the GNU General Public License as published by *
11
 * the Free Software Foundation; either version 2, or (at your option)  *
12
 * any later version.													*
13
 *																		*
14
 * This program is distributed in the hope that it will be useful, but  *
15
 * WITHOUT ANY WARRANTY; without even the implied warranty of			*
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.					*
17
 * See the  GNU General Public License for more details.				*
18
 *																		*
19
 * You should have received a copy of the GNU General Public License	*
20
 * along with this program; if not, write to the Free Software			*
21
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,*
22
 * USA.																	*
23
************************************************************************/
24
25
26
require_once dirname(__FILE__).'/vacincl.php';
27
28
29
30
31
32
/**
33
 * Get period index from database
34
 *
35
 * @param	int		$id_user
36
 * @param	int		$month
37
 * @param	int		$year
38
 * @param   string  $dateb      ISO date
39
 * @param   string  $datee      ISO date
40
 *
41
 * @return array
42
 */
43
function absences_getPeriodIndex($id_user, $month, $year, $dateb, $datee)
44
{
45
	require_once $GLOBALS['babInstallPath'].'utilit/settings.class.php';
46
	global $babDB;
47
48
	$req = "
49
	SELECT 
50
		c.id_user,
51
		c.cal_date,
52
		c.ampm,
53
		c.period_type,
54
		c.id_entry,
55
		c.color,
56
		c.title,
57
		e.status 
58
	FROM
59
		".ABSENCES_CALENDAR_TBL." c
60
		LEFT JOIN ".ABSENCES_ENTRIES_TBL." e ON e.id = c.id_entry 
61
	WHERE
62
		monthkey=".$babDB->quote($month.$year)."
63
		AND c.id_user=".$babDB->quote($id_user)."
64
	ORDER BY c.cal_date, c.ampm 
65
	";
66
	$res = $babDB->db_query($req);
67
68
69
	if (0 === $babDB->db_num_rows($res))
70
	{
71
		// cache not found
72
73
		absences_updateCalendar($id_user, $year, $month);
74
		$res = $babDB->db_query($req);
75
	}
76
77
78
	$periodIndex = array();
79
	
80
	while ($arr = $babDB->db_fetch_assoc($res)) {
81
	    /*
82
	    if ('0000-00-00' !== $dateb && $dateb > $arr['cal_date']) {
83
	        continue;
84
	    }
85
	    
86
	    if ('0000-00-00' !== $datee && $datee < $arr['cal_date']) {
87
	        continue;
88
	    }
89
		*/
90
		$arr['period_type'] = (int) $arr['period_type'];
91
		$arr['ampm'] = (int) $arr['ampm'];
92
		$arr['id_user'] = (int) $arr['id_user'];
93
		
94
		$key = 'd.'.$arr['cal_date'];
95
		$key .= $arr['ampm'] ? '.1' : '.0';
96
		$periodIndex[$key] = $arr;
97
	}
98
99
100
	return $periodIndex;
101
}
102
103
104
105
106
107
/**
108
 * 
109
 */
110 View Code Duplication
function absences_getEntites()
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
111
{
112
    $id_chart = absences_getVacationOption('id_chart');
113
    $org = new bab_OrgChartUtil($id_chart);
114
    if (!$org->isAccessValid()) {
115
        return array();
116
    }
117
    return bab_OCGetEntities($id_chart);
118
}
119
120
/**
121
 * 
122
 * @param int $ide
123
 */
124 View Code Duplication
function absences_getChildsEntities($ide)
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
125
{
126
    $id_chart = absences_getVacationOption('id_chart');
127
    $org = new bab_OrgChartUtil($id_chart);
128
    if (!$org->isAccessValid()) {
129
        return array();
130
    }
131
    return bab_OCGetChildsEntities($ide, $id_chart);
132
}
133
134
135
136
137
class absences_viewVacationCalendarCls
138
{
139
	var $entries = array();
140
	var $fullname;
141
	var $vacwaitingtxt;
142
	var $vacapprovedtxt;
143
	var $print;
144
	var $close;
145
	var $emptylines = true;
146
147
	public $display_types;
148
	
149
	
150
	public $public = false;
151
	public $total = null;
152
	
153
	public $loadmore = null;
154
	public $loadall = false;
155
	
156
	public $nbmonth;
157
	
158
	public $limit;
159
160
161
	/**
162
	 * 
163
	 * @param array 	$users			Users displayed by default
164
	 * @param bool 		$period			Allow period selection (vacation request creation first step)
165
	 * @param bool 		$display_types	Display types color and legend on planning
166
	 * @param int		$nbmonth		Number of month to load
167
	 * @param bool		$dispusers		Display user names column
168
	 */
169
	public function __construct($users, $period, $display_types, $nbmonth, $dispusers, $shiftmonth = 0, $legend = true)
170
	{
171
		global $babBody;
172
173
		include_once $GLOBALS['babInstallPath']."utilit/dateTime.php";
174
		include_once $GLOBALS['babInstallPath']."utilit/urlincl.php";
175
176
		$month = isset($_REQUEST['month']) ? (int) $_REQUEST['month'] : (date("n") + $shiftmonth);
177
		$year = isset($_REQUEST['year']) ? (int) $_REQUEST['year'] : date("Y");
178
179
		global $babDB;
180
		$this->month = $month;
0 ignored issues
show
Bug introduced by
The property month does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
181
		$this->year = $year;
0 ignored issues
show
Bug introduced by
The property year does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
182
183
		$this->dispusers = $dispusers;
0 ignored issues
show
Bug introduced by
The property dispusers does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
184
		$this->display_types = $display_types;
185
		$this->display_legend = $legend;
0 ignored issues
show
Bug introduced by
The property display_legend does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
186
187
		$this->userNameArr = array();
0 ignored issues
show
Bug introduced by
The property userNameArr does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
188
		
189
		foreach ($users as $uid)
190
		{
191
			$uid = (int) $uid;
192
			$this->userNameArr[$uid] = bab_getUserName($uid);
193
		}
194
195
		bab_sort::natcasesort($this->userNameArr);
196
197
198
		$this->idusers 		= array_keys($this->userNameArr);
0 ignored issues
show
Bug introduced by
The property idusers does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
199
		$this->nbusers 		= count($this->idusers);
0 ignored issues
show
Bug introduced by
The property nbusers does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
200
		$this->firstuser 	= bab_toHtml(current($this->userNameArr));
0 ignored issues
show
Bug introduced by
The property firstuser does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
201
		$this->display_firstuser = 1 === $this->nbusers;
0 ignored issues
show
Bug introduced by
The property display_firstuser does not seem to exist. Did you mean firstuser?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
202
203
		$this->period = $period;
0 ignored issues
show
Bug introduced by
The property period does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
204
		$this->vacwaitingtxt = absences_translate("Waiting vacation request");
205
		$this->vacapprovedtxt = absences_translate("Approved vacation request");
206
		$this->t_selected = absences_translate("Selected period");
0 ignored issues
show
Bug introduced by
The property t_selected does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
207
		$this->print = absences_translate("Print");
208
		$this->close = absences_translate("Close");
209
		$this->t_noresult = absences_translate("No results found for this search query");
0 ignored issues
show
Bug introduced by
The property t_noresult does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
210
211
		$this->t_previousmonth = absences_translate("Previous month");
0 ignored issues
show
Bug introduced by
The property t_previousmonth does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
212
		$this->t_previousyear = absences_translate("Previous year");
0 ignored issues
show
Bug introduced by
The property t_previousyear does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
213
		$this->t_nextmonth = absences_translate("Next month");
0 ignored issues
show
Bug introduced by
The property t_nextmonth does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
214
		$this->t_nextyear = absences_translate("Next year");
0 ignored issues
show
Bug introduced by
The property t_nextyear does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
215
216
		$this->t_nonworking = absences_translate("Non-working day");
0 ignored issues
show
Bug introduced by
The property t_nonworking does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
217
		$this->t_weekend = absences_translate("Week-end");
0 ignored issues
show
Bug introduced by
The property t_weekend does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
218
		$this->t_rotate = absences_translate("Print in landscape");
0 ignored issues
show
Bug introduced by
The property t_rotate does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
219
		$this->t_non_used = $this->display_types ? absences_translate("Non-used days") : absences_translate("Absences");
0 ignored issues
show
Bug introduced by
The property t_non_used does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
220
		$this->t_waiting = absences_translate("Waiting vacation request");
0 ignored issues
show
Bug introduced by
The property t_waiting does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
221
		$this->t_previsional = absences_translate("Previsional vacation request");
0 ignored issues
show
Bug introduced by
The property t_previsional does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
222
		$this->t_waiting_vac = absences_translate("Waiting vacation request");
0 ignored issues
show
Bug introduced by
The property t_waiting_vac does not seem to exist. Did you mean t_waiting?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
223
		$this->t_legend = absences_translate("Legend");
0 ignored issues
show
Bug introduced by
The property t_legend does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
224
225
		$this->id_request = isset($_REQUEST['id']) ? $_REQUEST['id'] : 0;
0 ignored issues
show
Bug introduced by
The property id_request does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
226
227
		$this->nbmonth = $nbmonth;
228
		
229
		$this->limit = absences_getSearchLimit($nbmonth);
230
231
		$urltmp = bab_url::get_request_gp();
232
		$urltmp->search = null;      // the search button, disabled for navigation
233
		$this->nwd_color = 'yellow'; // default color for non working days if no categories
0 ignored issues
show
Bug introduced by
The property nwd_color does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
234
235
		if( $GLOBALS['babBody']->babsite['id_calendar_cat'] != 0)
236
		{
237
			include_once $GLOBALS['babInstallPath']."utilit/calapi.php";
238
			$idcat = bab_calGetCategories($GLOBALS['babBody']->babsite['id_calendar_cat']);
239
			if( isset($idcat[0]['color']))
240
			{
241
				$this->nwd_color = $idcat[0]['color'];
242
			}
243
		}
244
245
		if (!empty($_REQUEST['popup']))
246
		{
247
			$this->popup = true;
0 ignored issues
show
Bug introduced by
The property popup does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
248
		}
249
250
		if (!isset($_REQUEST['ide']))
251
		{
252
			$urltmp->idu = implode(',',$this->idusers);
253
		}
254
255
		$switchurl = clone $urltmp;
256
257
		if (1 == $this->nbmonth) {
258
259
			$switchurl->nbmonth = 12;
260
			$this->switchurl = $switchurl->toString();
0 ignored issues
show
Bug introduced by
The property switchurl does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
261
			$this->switchlabel = absences_translate("Year view");
0 ignored issues
show
Bug introduced by
The property switchlabel does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
262
			
263
			
264
			
265
			$this->prevmonthclass = 'prev1';
0 ignored issues
show
Bug introduced by
The property prevmonthclass does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
266
			$this->prevyearclass = 'prev2';
0 ignored issues
show
Bug introduced by
The property prevyearclass does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
267
			
268
			$this->nextmonthclass = 'next1';
0 ignored issues
show
Bug introduced by
The property nextmonthclass does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
269
			$this->nextyearclass = 'next2';
0 ignored issues
show
Bug introduced by
The property nextyearclass does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
270
			
271
		} else {
272
			$switchurl->nbmonth = 1;
273
			$this->switchurl = $switchurl->toString();
274
			$this->switchlabel = absences_translate("Month view");
275
			
276
			$this->prevmonthclass = 'prev2';
277
			$this->prevyearclass = 'prev1';
278
			
279
			$this->nextmonthclass = 'next2';
280
			$this->nextyearclass = 'next1';
281
		}
282
283
		$urltmp->nbmonth = $this->nbmonth;
284
285
286
		$previousmonth = clone $urltmp;
287
		$previousmonth->month = date("n", mktime( 0,0,0, $month-1, 1, $year));
288
		$previousmonth->year = date("Y", mktime( 0,0,0, $month-1, 1, $year));
289
		$this->previousmonth	= $previousmonth->toString();
0 ignored issues
show
Bug introduced by
The property previousmonth does not seem to exist. Did you mean t_previousmonth?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
290
291
		$nextmonth = clone $urltmp;
292
		$nextmonth->month = date("n", mktime( 0,0,0, $month+1, 1, $year));
293
		$nextmonth->year = date("Y", mktime( 0,0,0, $month+1, 1, $year));
294
		$this->nextmonth = $nextmonth->toString();
0 ignored issues
show
Bug introduced by
The property nextmonth does not seem to exist. Did you mean t_nextmonth?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
295
296
		$previousyear = clone $urltmp;
297
		$previousyear->month = date("n", mktime( 0,0,0, $month, 1, $year-1));
298
		$previousyear->year = date("Y", mktime( 0,0,0, $month, 1, $year-1));
299
		$this->previousyear = $previousyear->toString();
0 ignored issues
show
Bug introduced by
The property previousyear does not seem to exist. Did you mean t_previousyear?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
300
301
		$nextyear = clone $urltmp;
302
		$nextyear->month = date("n", mktime( 0,0,0, $month, 1, $year+1));
303
		$nextyear->year = date("Y", mktime( 0,0,0, $month, 1, $year+1));
304
		$this->nextyear = $nextyear->toString();
0 ignored issues
show
Bug introduced by
The property nextyear does not seem to exist. Did you mean t_nextyear?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
305
306
		$dateb = new BAB_DateTime($year, $month, 1);
307
		$datee = $dateb->cloneDate();
308
		$datee->add($this->nbmonth, BAB_DATETIME_MONTH);
309
		
310
		
311
312
		$this->yearname = $this->getTitle($dateb, $datee);
0 ignored issues
show
Bug introduced by
The property yearname does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
313
		
314
		
315
316
317
318
319
320
		if ($this->display_types)
321
		{
322
			$this->restypes = $babDB->db_query("
0 ignored issues
show
Bug introduced by
The property restypes does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
323
324
				SELECT
325
					t.*
326
					FROM
327
					".ABSENCES_TYPES_TBL." t,
328
					absences_rights r,
329
					absences_users_rights ur,
330
					".ABSENCES_PERSONNEL_TBL." p
331
				WHERE
332
					p.id_user IN(".$babDB->quote($this->idusers).")
333
					AND p.id_user=ur.id_user
334
					AND ur.id_right=r.id
335
					AND r.id_type=t.id
336
				GROUP BY
337
					t.id
338
					");
339
340
		}
341
		
342
		
343
		// filtre par service
344
		
345
		$W = bab_Widgets();
346
		$departments = $W->Multiselect();
347
		$departments->setName('departments')->setValue(bab_rp('departments'));
348
		
349
		$entities = absences_getEntites();
350
		foreach($entities as $e) {
351
		    $departments->addOption($e['id'], $e['name']);
352
		}
353
		
354
		$this->departments = '';
0 ignored issues
show
Bug introduced by
The property departments does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
355
356
		if (count($entities) > 0) {
357
		    $this->departments = $departments->display($W->HtmlCanvas());
358
		}
359
		
360
		
361
		// filtre recherche par date
362
		
363
		$this->datefilter = $this->getDateFilter()->display($W->HtmlCanvas());
0 ignored issues
show
Bug introduced by
The property datefilter does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
364
	}
365
	
366
	
367
	
368
	private function getDateFilter()
369
	{
370
	    $W = bab_Widgets();
371
	    
372
	    switch (bab_rp('searchtype')) {
373 View Code Duplication
	        case '2':
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
374
    	       $dateb = bab_rp('dateb');
375
    	       $datee = bab_rp('datee');
376
    	       $_date = null;
377
    	       break;
378
    	      
379
	        default:
380 View Code Duplication
	        case '1':
0 ignored issues
show
Unused Code introduced by
case '1': $dateb = n..._rp('date'); break; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
381
	           $dateb = null;
382
	           $datee = null;
383
	           $_date = bab_rp('date');
384
	           break;
385
	    }
386
	    
387
	    $periodpicker = $W->PeriodPicker()->setNames('dateb', 'datee')->setValues($dateb, $datee);
388
	    
389
	    $period = $W->LabelledWidget(
390
	        absences_translate('Date'),
391
	        $periodpicker
392
	    );
393
	    
394
	    $picker = $W->DatePicker()
395
    	    ->setValue($_date)
396
    	    ->addClass('absences-search-by-date');
397
	    
398
    	if (method_exists($picker, 'setDefaultDate')) {
399
    	    $picker->setDefaultDate($this->year.'-'.$this->month.'-01');
400
    	    $periodpicker->setDefaultDate($this->year.'-'.$this->month.'-01');
401
    	}
402
	    
403
	    $date = $W->LabelledWidget(
404
	            absences_translate('Date'),
405
	            $picker,
406
	            'date'
407
	    );
408
	    
409
	    $begin = $picker->getISODate($dateb);
410
	    $end = $picker->getISODate($datee);
411
	    $d = $picker->getISODate($_date);
412
	    
413
	    if ('0000-00-00' !== $d) {
414
	        $begin = $d;
415
	        $end = $d;
416
	    }
417
	    
418
	    if ('0000-00-00' !== $begin && '0000-00-00' !== $end) {
419
	        $picker->setMetadata('dateb', $begin);
420
	        $picker->setMetadata('datee', $end);
421
	    }
422
	    
423
	    
424
	    $frame = $W->Frame(null , $W->HBoxItems());
425
	    
426
	    
427
	    $frame->addItem(
428
	            $W->LabelledWidget(
429
	                    absences_translate('Search by date'),
430
	                    $W->Select()
0 ignored issues
show
Bug introduced by
It seems like you code against a specific sub-type and not the parent class Widget_InputWidget as the method addOption() does only exist in the following sub-classes of Widget_InputWidget: Widget_BabFilePicker, Widget_Multiselect, Widget_RadioMenu, Widget_RadioSet, Widget_Select. Maybe you want to instanceof check for one of these explicitly?

Let’s take a look at an example:

abstract class User
{
    /** @return string */
    abstract public function getPassword();
}

class MyUser extends User
{
    public function getPassword()
    {
        // return something
    }

    public function getDisplayName()
    {
        // return some name.
    }
}

class AuthSystem
{
    public function authenticate(User $user)
    {
        $this->logger->info(sprintf('Authenticating %s.', $user->getDisplayName()));
        // do something.
    }
}

In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different sub-classes of User which does not have a getDisplayName() method, the code will break.

Available Fixes

  1. Change the type-hint for the parameter:

    class AuthSystem
    {
        public function authenticate(MyUser $user) { /* ... */ }
    }
    
  2. Add an additional type-check:

    class AuthSystem
    {
        public function authenticate(User $user)
        {
            if ($user instanceof MyUser) {
                $this->logger->info(/** ... */);
            }
    
            // or alternatively
            if ( ! $user instanceof MyUser) {
                throw new \LogicException(
                    '$user must be an instance of MyUser, '
                   .'other instances are not supported.'
                );
            }
    
        }
    }
    
Note: PHP Analyzer uses reverse abstract interpretation to narrow down the types inside the if block in such a case.
  1. Add the method to the parent class:

    abstract class User
    {
        /** @return string */
        abstract public function getPassword();
    
        /** @return string */
        abstract public function getDisplayName();
    }
    
Loading history...
431
	                    ->setAssociatedDisplayable($date, array('1'))
432
	                    ->setAssociatedDisplayable($period, array('2'))
433
	                    ->addOption('1', absences_translate("Absences on a date"))
434
	                    ->addOption('2', absences_translate("Absences in a period"))
435
	                    ->setValue(bab_rp('searchtype', 1)),
436
	                    'searchtype'
437
	            )
438
	    );
439
	    
440
	    
441
	    $frame->addItem($period);
442
	    $frame->addItem($date);
443
	    
444
	    return $frame;
445
	}
446
	
447
	
448
	/**
449
	 * @param BAB_DateTime $dateb
450
	 * @param BAB_DateTime $datee
451
	 * 
452
	 * @return string
453
	 */
454
	private function getTitle(BAB_DateTime $dateb, BAB_DateTime $datee)
455
	{
456
	    $months = bab_DateStrings::getMonths();
457
	    $duration = (int) round(($datee->getTimeStamp() - $dateb->getTimeStamp()) / 86400);
458
459
	    if ($duration > 33) {
460
	        
461
	        $end = $datee->cloneDate();
462
	        $end->less(1, BAB_DATETIME_DAY);
463
	        
464
	        return $months[$dateb->getMonth()].' '.$dateb->getYear()."-".$months[$end->getMonth()].' '.$end->getYear();
465
	    }
466
	    
467
	    return $months[$dateb->getMonth()].' '.$dateb->getYear();
468
	}
469
	
470
	
471
	
472
	
473
	public function getnexthidden()
474
	{
475
		if (list($name, $value) = each($_GET))
476
		{
477
			if (is_array($value))
478
			{
479
				return true;
480
			}
481
			
482
			$this->name = bab_toHtml($name);
0 ignored issues
show
Bug introduced by
The property name does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
483
			$this->value = bab_toHtml($value);
0 ignored issues
show
Bug introduced by
The property value does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
484
			return true;
485
		}
486
		
487
		reset($_GET);
488
		return false;
489
	}
490
	
491
	
492
493
	public function getdayname()
494
	{
495
		static $i = 1;
496
		if( $i <= 31)
497
		{
498
			$this->dayname = sprintf('%02d',$i);
0 ignored issues
show
Bug introduced by
The property dayname does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
499
			$i++;
500
			return true;
501
		}
502
		else
503
			return false;
504
	}
505
	
506
	
507
	/**
508
	 *
509
	 */
510
	public function getmonth()
511
	{
512
		static $i = 0;
513
		if( $i < $this->nbmonth)
514
		{
515
	
516
			$dateb = new BAB_DateTime($this->year, $this->month + $i, 1);
517
	
518
			$this->curyear = $dateb->getYear();
0 ignored issues
show
Bug introduced by
The property curyear does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
519
			$this->curmonth = $dateb->getMonth();
0 ignored issues
show
Bug introduced by
The property curmonth does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
520
			$months = bab_DateStrings::getMonths();
521
			$this->monthname = bab_toHtml($months[$this->curmonth]);
0 ignored issues
show
Bug introduced by
The property monthname does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
522
			$this->totaldays = date("t", $dateb->getTimeStamp());
0 ignored issues
show
Bug introduced by
The property totaldays does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
523
			$this->previous_period = NULL;
0 ignored issues
show
Bug introduced by
The property previous_period does not seem to exist. Did you mean period?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
524
			$i++;
525
			return true;
526
		}
527
		else
528
			return false;
529
	}
530
	
531
	
532
	
533
	
534
535
	public function getnextuser()
536
	{
537
		static $i = 0;
538
539
		$n = $this->nbusers;
540
541
		if ( $n == 0 )
542
			$n = 1;
543
544
		$this->rowspan = $this->emptylines ? $this->nbusers : $n;
0 ignored issues
show
Bug introduced by
The property rowspan does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
545
546
		if ($i < $n)
547
		{
548
			$this->first = $i == 0 ;
0 ignored issues
show
Bug introduced by
The property first does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
549
			$this->id_user = $this->idusers[$i];
0 ignored issues
show
Bug introduced by
The property id_user does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
550
			$this->username = bab_toHtml($this->userNameArr[$this->id_user]);
0 ignored issues
show
Bug introduced by
The property username does not seem to exist. Did you mean userNameArr?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
551
			try {
552
				$agent = absences_Agent::getCurrentUser();
553
				if ($agent->isManager())
554
				{
555
					$this->userurl = bab_toHtml('?tg=addon/absences/vacadm&idx=modp&idp='.$this->idusers[$i]);
0 ignored issues
show
Bug introduced by
The property userurl does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
556
				} else {
557
					$this->userurl = false;
558
				}
559
			} catch(Exception $e)
560
			{
561
				$this->userurl = false;
562
			}
563
			
564
565
			$i++;
566
			return true;
567
		}
568
		else
569
		{
570
			$i = 0;
571
			return false;
572
		}
573
	}
574
575
576
	/**
577
	 * 
578
	 * @return boolean
579
	 */
580
	public function getday()
581
	{
582
		static $d = 1;
583
		static $total = 0;
584
		if( $d <= 31)
585
		{
586
			$time = mktime(0, 0, 0, $this->curmonth, $d, $this->curyear);
587
            $this->day = bab_formatDate('%D', $time).' '.date('j', $time);
0 ignored issues
show
Bug introduced by
The property day does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
588
			$d++;
589
			return true;
590
		}
591
		else
592
		{
593
			$d = 1;
594
			return false;
595
		}
596
	}
597
598
	public function getnexttype()
599
	{
600
601
		if (!$this->display_types) {
602
			return false;
603
		}
604
605
		global $babDB;
606
		if ($this->arr = $babDB->db_fetch_array($this->restypes)) {
607
			$this->arr['name'] 			= bab_toHtml($this->arr['name']);
0 ignored issues
show
Bug introduced by
The property arr does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
608
			$this->arr['description'] 	= bab_toHtml($this->arr['description']);
609
			return true;
610
		}
611
		else {
612
			return false;
613
		}
614
	}
615
	
616
	
617
	public function entity($ide, $all = false)
618
	{
619
	    // permettre de charger les sous-entites fusionnes dans le meme planning
620
	    
621
	    $url = bab_url::get_request_gp();
622
	    $url->all = $all ? '0' : '1';
623
	    
624
	    $this->mergedurl = false;
0 ignored issues
show
Bug introduced by
The property mergedurl does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
625
	    
626
	    if (bab_OCGetChildCount($ide)) {
627
	        $this->mergedurl = bab_toHtml($url->toString());
628
	    }
629
	    
630
	    if ($all) {
631
	        $this->t_merged = absences_translate('View the entity only');
0 ignored issues
show
Bug introduced by
The property t_merged does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
632
	    } else {
633
	        $this->t_merged = absences_translate('View users from all entities');
634
	    }
635
	}
636
	
637
	
638
	public function publiccalendar($total)
639
	{
640
		$this->display_firstuser = false;
0 ignored issues
show
Bug introduced by
The property display_firstuser does not seem to exist. Did you mean firstuser?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
641
		$this->public = true;
642
		$this->t_search_name = absences_translate('Search by name');
0 ignored issues
show
Bug introduced by
The property t_search_name does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
643
		$this->t_search_entity = absences_translate('By entity');
0 ignored issues
show
Bug introduced by
The property t_search_entity does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
644
		$this->keyword = bab_rp('keyword');
0 ignored issues
show
Bug introduced by
The property keyword does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
645
		$this->t_ok = absences_translate('Ok');
0 ignored issues
show
Bug introduced by
The property t_ok does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
646
		
647
		$this->total = $total;
648
		$this->t_total = sprintf(absences_translate('%d result found', '%d results found', $total), $total);
0 ignored issues
show
Bug introduced by
The property t_total does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
649
		
650
		
651
		// prepare button for first load
652
		
653
		$this->t_use_month_view = false;
0 ignored issues
show
Bug introduced by
The property t_use_month_view does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
654
		
655
		$this->t_loadall = absences_translate('View all results');
0 ignored issues
show
Bug introduced by
The property t_loadall does not seem to exist. Did you mean loadall?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
656
		$this->t_viewBegin = absences_translate('View the first 30 only');
0 ignored issues
show
Bug introduced by
The property t_viewBegin does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
657
		
658
		if ($total > $this->nbusers)
659
		{
660
			$last = $total - $this->nbusers;
661
			
662
			if (1 < $this->nbmonth)
663
			{
664
				$this->t_use_month_view = sprintf(absences_translate('The planning display only %d results from %d total results, use the month view to fetch next results'), $this->nbusers, $total);
665
				$this->loadmore = false;
666
				$this->loadall = false;
667
			} else {
668
669
			    $this->loadall = false;
670
				$this->loadmore = $this->limit < $last ? $this->limit : $last;
671
				$this->t_loadmore = sprintf(absences_translate('Load the next %d results'), $this->loadmore);
0 ignored issues
show
Bug introduced by
The property t_loadmore does not seem to exist. Did you mean loadmore?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
672
			}
673
		} else {
674
			$this->loadmore = false;
675
			$this->loadall = false;
676
		}
677
	}
678
	
679
	
680
	public function getHtml()
681
	{
682
	    // dans les vielles versions d'ovidentia
683
	    // l'access a l'api des organigramme renvoi un message d'erreur si on a pas les droits de lecture
684
	    // dans le planning le bouton qui permet d'acceder au sous-entites a besoin de cette api
685
	    // on supprime le message d'erreur pour eviter qui apparaisse sur le planning perso
686
	    // dans le vielles versions d'ovidentia < 8.4.0 le bouton pour afficher les sous-entites dans le meme planning sera probablement inoperant
687
	    // tant que l'organigramme n'est pas accessible en lecture
688
	    
689
	    $babBody = bab_getBody();
690
	    
691
	    if ($babBody->msgerror === bab_translate('Error: Right insufficient')) {
692
	       bab_debug($babBody->msgerror);
693
	       $babBody->msgerror = null;
694
	    }
695
	    
696
		return bab_printTemplate($this, absences_addon()->getRelativePath()."vacuser.html", "calendarbyuser");
0 ignored issues
show
Deprecated Code introduced by
The method bab_addonInfos::getRelativePath() has been deprecated with message: Do not use relative path in addons Addons are subject to move out of the core folder in futures version for bab_printTemplate, replace with $addon->printTemplate() for babBody->addStyleSheet use $addon->getStylePath() instead of relative path the addStyleSheet method support full path starting with vendor/ since the 8.1.98 version

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
697
	}
698
	
699
	
700
701
	public function printhtml()
702
	{
703
		global $babBody;
704
		
705
		/*@var $babBody babBody */
706
		
707
		$html = $this->getHtml();
708
		
709
		/*@var $jquery Func_Jquery */
710
		$jquery = bab_functionality::get('jquery');
711
		$jquery->includeCore();
712
713
		$babBody->addStyleSheet(absences_addon()->getStylePath().'vacation.css');
714
		$babBody->addJavascriptFile(absences_addon()->getTemplatePath().'calendar.jquery.js', true);
715
716
		if (isset($_REQUEST['popup']) && $_REQUEST['popup'] == 1) {
717
			$babBody->babpopup($html);
718
		}
719
		else {
720
			$babBody->babecho($html);
721
		}
722
	}
723
}
724
725
726
727
728
729
730
731
/**
732
 * Display a vacation calendar
733
 * @param	array		$users			array of id_user to display
734
 * @param	boolean		$period			allow period selection, first step of vacation request
735
 * @param	boolean		$display_types	Display types color and legend on planning
736
 * @param	int			$nbmonth		Number of month to display
737
 * @param	bool		$dispusers		display a column with user names
738
 * @param 	int			$total			Total number of results in search
739
 */
740
function absences_viewVacationCalendar($users, $period, $display_types, $nbmonth = 12, $dispusers = true, $total = null )
741
{
742
	global $babBody;
743
744
	$temp = new absences_viewVacationCalendarCls($users, $period, $display_types, $nbmonth, $dispusers);
745
746
	if (count($users) == 0)
747
	{
748
		$babBody->addError(absences_translate("ERROR: No members"));
749
	}
750
	
751
	if (bab_rp('idx') == 'entity_cal')
752
	{
753
	    $temp->entity(bab_rp('ide'), (bool) bab_rp('all', false));
754
	}
755
	
756
	if (bab_rp('idx') == 'public')
757
	{
758
		$temp->publiccalendar($total);
759
	}
760
	
761
	$temp->printhtml();
762
}
763
764
765
766
/**
767
 * Serach in active users to display the public calendar
768
 * @param string $keyword
769
 * @param array $departments
770
 * @param string $dateb
771
 * @param string $datee
772
 * @param string $date
773
 */
774
function absences_publicCalendarUsers($keyword, $departments, $searchtype, $dateb, $datee, $date)
775
{
776
	global $babDB;
777
	require_once $GLOBALS['babInstallPath'].'utilit/userinfosincl.php';
778
	
779
	
780
	$W = bab_Widgets();
781
	$datePicker = $W->DatePicker();
782
	
783
	switch($searchtype) {
784
	    default:
785
	    case 1:
786
	        $dateb = '0000-00-00';
787
	        $datee = '0000-00-00';
788
	        $date = $datePicker->getISODate($date);
789
	        break;
790
	        
791
	    case 2:
792
	        $dateb = $datePicker->getISODate($dateb);
793
	        $datee = $datePicker->getISODate($datee);
794
	        $date = '0000-00-00';
795
	        break;
796
	}
797
	
798
	
799
	if ('0000-00-00' !== $date && false !== $date) {
800
	    $dateb = $date;
801
	    $datee = $date;
802
	}
803
	
804
	
805
	$query = 'SELECT
806
			u.id,
807
			u.lastname,
808
			u.firstname
809
		FROM
810
			bab_users u
811
	           LEFT JOIN bab_oc_roles_users ru ON ru.id_user=u.id 
812
	           LEFT JOIN bab_oc_roles r ON r.id=ru.id_role,
813
			absences_personnel p
814
	
815
		WHERE
816
			p.id_user=u.id AND '.bab_userInfos::queryAllowedUsers('u');
817
818
	
819
	if (isset($keyword))
820
	{
821
		$query .= ' AND (u.lastname LIKE \'%'.$babDB->db_escape_like($keyword).'%\' OR u.firstname LIKE \'%'.$babDB->db_escape_like($keyword).'%\')';
822
	}
823
	
824
	if (isset($departments))
825
	{
826
	    $query .= ' AND r.id_entity IN('.$babDB->quote($departments).')';
827
	}
828
	
829
	if ('0000-00-00' !== $dateb && '0000-00-00' !== $datee && false !== $dateb && false !== $datee) {
830
	    $subquery = 'SELECT id_user FROM absences_entries WHERE date_begin<'.$babDB->quote($datee.' 23:59:59').' AND date_end>'.$babDB->quote($dateb.' 00:00:00').' GROUP BY id_user';
831
	    $query .= ' AND u.id IN('.$subquery.')';
832
	}
833
	
834
	
835
	$query .= 'GROUP BY u.id ORDER BY u.lastname, u.firstname';
836
	
837
	$res = $babDB->db_query($query);
838
	
839
	return $res;
840
}
841
842
843
function absences_getSearchLimit($nbmonth)
844
{
845
    $initusers = (int) bab_rp('limit');
846
    if (empty($initusers)) {
847
        // preload the 30 first users if limit not set
848
        $initusers = 1 === $nbmonth ? 30 : 10;
849
    }
850
    
851
    return $initusers;
852
}
853