This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 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 | |||
| 27 | include_once dirname(__FILE__)."/functions.php"; |
||
| 28 | include_once $GLOBALS['babInstallPath']."utilit/afincl.php"; |
||
| 29 | include_once $GLOBALS['babInstallPath']."utilit/mailincl.php"; |
||
| 30 | include_once dirname(__FILE__)."/utilit/vacincl.php"; |
||
| 31 | require_once $GLOBALS['babInstallPath'].'utilit/dateTime.php'; |
||
| 32 | require_once dirname(__FILE__).'/utilit/agent.class.php'; |
||
| 33 | require_once $GLOBALS['babInstallPath'].'utilit/urlincl.php'; |
||
| 34 | |||
| 35 | |||
| 36 | |||
| 37 | /** |
||
| 38 | * |
||
| 39 | */ |
||
| 40 | function bab_isEntryEditable($id) |
||
| 41 | { |
||
| 42 | if ($id == 0) { |
||
| 43 | // request creation |
||
| 44 | return true; |
||
| 45 | } |
||
| 46 | |||
| 47 | $agent = absences_Agent::getCurrentUser(); |
||
| 48 | |||
| 49 | require_once dirname(__FILE__).'/utilit/entry.class.php'; |
||
| 50 | $entry = absences_Entry::getById($id); |
||
| 51 | |||
| 52 | |||
| 53 | if ($agent->isManager()) { |
||
| 54 | // le gestionnaire peut tout modifier |
||
| 55 | return (int) $entry->id_user; |
||
| 56 | } |
||
| 57 | |||
| 58 | |||
| 59 | if ($entry->canModify()) { |
||
| 60 | return (int) $entry->id_user; |
||
| 61 | } |
||
| 62 | |||
| 63 | return false; |
||
| 64 | } |
||
| 65 | |||
| 66 | |||
| 67 | |||
| 68 | /** |
||
| 69 | * Test if the current logged in user can create a vacation request in the name of $id_user |
||
| 70 | * @param unknown_type $id_user |
||
| 71 | * |
||
| 72 | * @return bool |
||
| 73 | */ |
||
| 74 | function bab_vacRequestCreate($id_user) { |
||
| 75 | global $babBody; |
||
| 76 | |||
| 77 | |||
| 78 | $target_agent = absences_Agent::getFromIdUser($id_user); |
||
| 79 | |||
| 80 | |||
| 81 | if (!$target_agent->isInPersonnel()) { |
||
| 82 | $babBody->addError(sprintf(absences_translate("The user %s is not registered in the personnel members"), $target_agent->getName())); |
||
| 83 | return false; |
||
| 84 | } |
||
| 85 | |||
| 86 | if (!$target_agent->haveRights()) { |
||
| 87 | $babBody->addError(absences_translate("No accessibles vacations rights")); |
||
| 88 | return false; |
||
| 89 | } |
||
| 90 | |||
| 91 | if ($id_user == bab_getUserId()) { |
||
| 92 | return true; |
||
| 93 | } |
||
| 94 | else |
||
| 95 | { |
||
| 96 | $current_agent = absences_Agent::getCurrentUser(); |
||
| 97 | if($current_agent->isManager()) |
||
| 98 | { |
||
| 99 | return true; |
||
| 100 | } |
||
| 101 | |||
| 102 | if (absences_getVacationOption('chart_superiors_create_request') && absences_IsUserUnderSuperior($id_user)) { |
||
| 103 | return true; |
||
| 104 | } |
||
| 105 | } |
||
| 106 | |||
| 107 | $babBody->addError(sprintf(absences_translate("Access denied for %s"), $target_agent->getName())); |
||
| 108 | return false; |
||
| 109 | } |
||
| 110 | |||
| 111 | |||
| 112 | function absences_recurringVacation($begin, $end, $id) |
||
| 113 | { |
||
| 114 | global $babBody; |
||
| 115 | class temp |
||
| 116 | { |
||
| 117 | /** |
||
| 118 | * |
||
| 119 | * @var Func_CalendarBackend |
||
| 120 | */ |
||
| 121 | private $calendarBackend; |
||
| 122 | |||
| 123 | /** |
||
| 124 | * |
||
| 125 | * @var array |
||
| 126 | */ |
||
| 127 | private $rrule; |
||
| 128 | |||
| 129 | |||
| 130 | public $begin; |
||
| 131 | public $end; |
||
| 132 | public $id; |
||
| 133 | public $duration; |
||
| 134 | public $id_user; |
||
| 135 | public $rfrom; |
||
| 136 | |||
| 137 | public $datebegintxt; |
||
| 138 | public $dateendtxt; |
||
| 139 | public $t_loaddates; |
||
| 140 | public $t_daily; |
||
| 141 | public $t_weekly; |
||
| 142 | public $t_monthly; |
||
| 143 | public $t_all_the; |
||
| 144 | public $t_years; |
||
| 145 | public $t_months; |
||
| 146 | public $t_weeks; |
||
| 147 | public $t_days; |
||
| 148 | public $repeat_dateendtxt; |
||
| 149 | public $t_sun; |
||
| 150 | public $t_mon; |
||
| 151 | public $t_tue; |
||
| 152 | public $t_wen; |
||
| 153 | public $t_thu; |
||
| 154 | public $t_fri; |
||
| 155 | public $t_sat; |
||
| 156 | public $calendar; |
||
| 157 | public $addvac; |
||
| 158 | public $t_vacation_request; |
||
| 159 | |||
| 160 | public $calurl; |
||
| 161 | public $datebegin; |
||
| 162 | public $dateend; |
||
| 163 | public $username; |
||
| 164 | public $nbdays; |
||
| 165 | public $end_day; |
||
| 166 | public $end_month; |
||
| 167 | public $end_year; |
||
| 168 | public $curyear; |
||
| 169 | public $ymin; |
||
| 170 | public $ymax; |
||
| 171 | public $yearmin; |
||
| 172 | public $repeat; |
||
| 173 | public $repeat_n_1; |
||
| 174 | public $repeat_n_2; |
||
| 175 | public $repeat_n_3; |
||
| 176 | public $repeat_wd_checked; |
||
| 177 | |||
| 178 | |||
| 179 | public function __construct($begin, $end, $id) |
||
| 180 | { |
||
| 181 | global $babBody; |
||
| 182 | |||
| 183 | $this->begin = $begin; |
||
| 184 | $this->end = $end; |
||
| 185 | $this->id = $id; |
||
| 186 | $this->duration = bab_mktime($this->end) - bab_mktime($this->begin); |
||
| 187 | |||
| 188 | $this->id_user = bab_pp('id_user'); |
||
| 189 | $this->rfrom = bab_pp('rfrom', 0); |
||
| 190 | |||
| 191 | $this->datebegintxt = absences_translate("Begin date"); |
||
| 192 | $this->dateendtxt = absences_translate("End date"); |
||
| 193 | $this->t_loaddates = absences_translate("Load dates"); |
||
| 194 | $this->t_daily = absences_translate("Daily"); |
||
| 195 | $this->t_weekly = absences_translate("Weekly"); |
||
| 196 | $this->t_monthly = absences_translate("Monthly"); |
||
| 197 | $this->t_all_the = absences_translate("Every"); |
||
| 198 | $this->t_years = absences_translate("years"); |
||
| 199 | $this->t_months = absences_translate("months"); |
||
| 200 | $this->t_weeks = absences_translate("weeks"); |
||
| 201 | $this->t_days = absences_translate("days"); |
||
| 202 | $this->repeat_dateendtxt = absences_translate("Periodicity end date"); |
||
| 203 | $this->t_sun = mb_substr(absences_translate("Sunday"),0,3); |
||
| 204 | $this->t_mon = mb_substr(absences_translate("Monday"),0,3); |
||
| 205 | $this->t_tue = mb_substr(absences_translate("Tuesday"),0,3); |
||
| 206 | $this->t_wen = mb_substr(absences_translate("Wednesday"),0,3); |
||
| 207 | $this->t_thu = mb_substr(absences_translate("Thursday"),0,3); |
||
| 208 | $this->t_fri = mb_substr(absences_translate("Friday"),0,3); |
||
| 209 | $this->t_sat = mb_substr(absences_translate("Saturday"),0,3); |
||
| 210 | $this->calendar = absences_translate("Planning"); |
||
| 211 | $this->addvac = absences_translate('Confirm the period selection'); |
||
| 212 | $this->t_vacation_request = absences_translate('Create a vacation request on the following periods:'); |
||
| 213 | |||
| 214 | $this->calurl = bab_toHtml(absences_addon()->getUrl()."planning&idx=cal&idu=".$this->id_user."&popup=1"); |
||
| 215 | |||
| 216 | $this->datebegin = absences_longDate(bab_mktime($begin)); |
||
| 217 | $end_timestamp = bab_mktime($end); |
||
| 218 | $this->dateend = absences_longDate($end_timestamp); |
||
| 219 | |||
| 220 | |||
| 221 | $this->username = bab_toHtml(bab_getUserName($this->id_user)); |
||
| 222 | |||
| 223 | $this->nbdays = 31; |
||
| 224 | $this->end_day = bab_pp('repeat_dayend', date('d', $end_timestamp)); |
||
| 225 | $this->end_month = bab_pp('repeat_monthend', date('m', $end_timestamp)); |
||
| 226 | $this->end_year = bab_pp('repeat_yearend', date('Y', $end_timestamp)); |
||
| 227 | |||
| 228 | |||
| 229 | $this->curyear = date('Y'); |
||
| 230 | |||
| 231 | $this->ymin = 2; |
||
| 232 | $this->ymax = 5; |
||
| 233 | $this->yearmin = $this->curyear - $this->ymin; |
||
| 234 | |||
| 235 | |||
| 236 | $this->repeat = (int) bab_pp('repeat', 1); |
||
| 237 | $this->repeat_n_1 = bab_pp('repeat_n_1'); |
||
| 238 | $this->repeat_n_2 = bab_pp('repeat_n_2'); |
||
| 239 | $this->repeat_n_3 = bab_pp('repeat_n_3'); |
||
| 240 | |||
| 241 | $weekdays = array('SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'); |
||
| 242 | $repeat_wd = (array) bab_pp('repeat_wd', array()); |
||
| 243 | $repeat_wd = array_flip($repeat_wd); |
||
| 244 | $this->repeat_wd_checked = array(); |
||
| 245 | |||
| 246 | foreach($weekdays as $wd) |
||
| 247 | { |
||
| 248 | $this->repeat_wd_checked[$wd] = isset($repeat_wd[$wd]) ? 'checked="checked"' : ''; |
||
| 249 | } |
||
| 250 | |||
| 251 | if (isset($_POST['loaddates'])) |
||
| 252 | { |
||
| 253 | $backendName = bab_getICalendars($this->id_user)->calendar_backend; |
||
| 254 | if (!$backendName) |
||
| 255 | { |
||
| 256 | $backendName = 'Ovi'; |
||
| 257 | } |
||
| 258 | |||
| 259 | $this->calendarBackend = bab_functionality::get('CalendarBackend/'.$backendName); |
||
| 260 | |||
| 261 | try { |
||
| 262 | $this->rrule = $this->loaddates(); |
||
| 263 | $this->dates_loaded = true; |
||
| 264 | } catch (ErrorException $e) |
||
| 265 | { |
||
| 266 | $babBody->addError($e->getMessage()); |
||
| 267 | } |
||
| 268 | |||
| 269 | } |
||
| 270 | } |
||
| 271 | |||
| 272 | /** |
||
| 273 | * Get an array with posted rules |
||
| 274 | * @return array |
||
| 275 | */ |
||
| 276 | private function getPostedRecurringParameters() |
||
| 277 | { |
||
| 278 | $args = array(); |
||
| 279 | |||
| 280 | |||
| 281 | $args['until'] = array( |
||
| 282 | 'year' => (int) $_POST['repeat_yearend'], |
||
| 283 | 'month' => (int) $_POST['repeat_monthend'], |
||
| 284 | 'day' => (int) $_POST['repeat_dayend'] |
||
| 285 | ); |
||
| 286 | |||
| 287 | $_POST['repeat'] = isset($_POST['repeat']) ? $_POST['repeat'] : ''; |
||
| 288 | switch ($_POST['repeat']) { |
||
| 289 | |||
| 290 | case ABSENCES_RECUR_WEEKLY: |
||
| 291 | $args['rrule'] = ABSENCES_RECUR_WEEKLY; |
||
| 292 | if( empty($_POST['repeat_n_2'])) |
||
| 293 | { |
||
| 294 | $_POST['repeat_n_2'] = 1; |
||
| 295 | } |
||
| 296 | |||
| 297 | $args['nweeks'] = (int) $_POST['repeat_n_2']; |
||
| 298 | |||
| 299 | if( isset($_POST['repeat_wd']) ) |
||
| 300 | { |
||
| 301 | $args['rdays'] = $_POST['repeat_wd']; |
||
| 302 | } |
||
| 303 | |||
| 304 | break; |
||
| 305 | |||
| 306 | case ABSENCES_RECUR_MONTHLY: |
||
| 307 | $args['rrule'] = ABSENCES_RECUR_MONTHLY; |
||
| 308 | if( empty($_POST['repeat_n_3'])) |
||
| 309 | { |
||
| 310 | $_POST['repeat_n_3'] = 1; |
||
| 311 | } |
||
| 312 | |||
| 313 | $args['nmonths'] = (int) $_POST['repeat_n_3']; |
||
| 314 | break; |
||
| 315 | |||
| 316 | case ABSENCES_RECUR_YEARLY: |
||
| 317 | $args['rrule'] = ABSENCES_RECUR_YEARLY; |
||
| 318 | if( empty($_POST['repeat_n_4'])) |
||
| 319 | { |
||
| 320 | $_POST['repeat_n_4'] = 1; |
||
| 321 | } |
||
| 322 | $args['nyears'] = (int) $_POST['repeat_n_4']; |
||
| 323 | break; |
||
| 324 | |||
| 325 | case ABSENCES_RECUR_DAILY: |
||
| 326 | default: |
||
| 327 | $args['rrule'] = ABSENCES_RECUR_DAILY; |
||
| 328 | if( empty($_POST['repeat_n_1'])) |
||
| 329 | { |
||
| 330 | $_POST['repeat_n_1'] = 1; |
||
| 331 | } |
||
| 332 | |||
| 333 | $args['ndays'] = (int) $_POST['repeat_n_1']; |
||
| 334 | break; |
||
| 335 | } |
||
| 336 | |||
| 337 | |||
| 338 | |||
| 339 | return $args; |
||
| 340 | } |
||
| 341 | |||
| 342 | |||
| 343 | /** |
||
| 344 | * Convert posted data to a standard RRULE icaldendar property |
||
| 345 | * @throws ErrorException |
||
| 346 | */ |
||
| 347 | private function getRRule() |
||
| 348 | { |
||
| 349 | $args = $this->getPostedRecurringParameters(); |
||
| 350 | |||
| 351 | if(!isset($args['rrule']) ) { |
||
| 352 | return null; |
||
| 353 | } |
||
| 354 | |||
| 355 | $duration = $this->duration; |
||
| 356 | $rrule = array(); |
||
| 357 | |||
| 358 | switch( $args['rrule'] ) |
||
| 359 | { |
||
| 360 | case ABSENCES_RECUR_WEEKLY: |
||
| 361 | if( $duration > 24 * 3600 * 7 * $args['nweeks']) { |
||
| 362 | throw new ErrorException(absences_translate("The duration of the event must be shorter than how frequently it occurs")); |
||
| 363 | } |
||
| 364 | |||
| 365 | $rrule[]= 'INTERVAL='.$args['nweeks']; |
||
| 366 | |||
| 367 | if( !isset($args['rdays']) ) { |
||
| 368 | // no week day specified, reapeat event every week |
||
| 369 | $rrule[]= 'FREQ=WEEKLY'; |
||
| 370 | } |
||
| 371 | else { |
||
| 372 | $rrule[]= 'FREQ=WEEKLY'; |
||
| 373 | // BYDAY : add list of weekday = "SU" / "MO" / "TU" / "WE" / "TH" / "FR" / "SA" |
||
| 374 | $rrule[] = 'BYDAY='.implode(',', $args['rdays']); |
||
| 375 | } |
||
| 376 | |||
| 377 | break; |
||
| 378 | |||
| 379 | |||
| 380 | View Code Duplication | case ABSENCES_RECUR_MONTHLY: |
|
|
0 ignored issues
–
show
|
|||
| 381 | if( $duration > 24*3600*28*$args['nmonths']) { |
||
| 382 | throw new ErrorException(absences_translate("The duration of the event must be shorter than how frequently it occurs")); |
||
| 383 | } |
||
| 384 | |||
| 385 | $rrule[]= 'INTERVAL='.$args['nmonths']; |
||
| 386 | $rrule[]= 'FREQ=MONTHLY'; |
||
| 387 | break; |
||
| 388 | |||
| 389 | View Code Duplication | case ABSENCES_RECUR_YEARLY: /* yearly */ |
|
|
0 ignored issues
–
show
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...
|
|||
| 390 | |||
| 391 | if( $duration > 24*3600*365*$args['nyears']) { |
||
| 392 | throw new ErrorException(absences_translate("The duration of the event must be shorter than how frequently it occurs")); |
||
| 393 | } |
||
| 394 | $rrule[]= 'INTERVAL='.$args['nyears']; |
||
| 395 | $rrule[]= 'FREQ=YEARLY'; |
||
| 396 | break; |
||
| 397 | |||
| 398 | View Code Duplication | case ABSENCES_RECUR_DAILY: /* daily */ |
|
|
0 ignored issues
–
show
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...
|
|||
| 399 | if( $duration > 24*3600*$args['ndays'] ) { |
||
| 400 | throw new ErrorException(absences_translate("The duration of the event must be shorter than how frequently it occurs")); |
||
| 401 | } |
||
| 402 | $rrule[]= 'INTERVAL='.$args['ndays']; |
||
| 403 | $rrule[]= 'FREQ=DAILY'; |
||
| 404 | break; |
||
| 405 | } |
||
| 406 | |||
| 407 | |||
| 408 | |||
| 409 | if (isset($args['until'])) { |
||
| 410 | |||
| 411 | $until = self::getDateTime($args['until']); |
||
| 412 | $until->add(1, BAB_DATETIME_DAY); |
||
| 413 | |||
| 414 | if( $until->getTimeStamp() < bab_mktime($this->end)) { |
||
| 415 | throw new ErrorException(absences_translate("Repeat date must be older than end date")); |
||
| 416 | } |
||
| 417 | |||
| 418 | |||
| 419 | $rrule[] = 'UNTIL='.$until->getICal(true); |
||
| 420 | } |
||
| 421 | |||
| 422 | return implode(';',$rrule); |
||
| 423 | } |
||
| 424 | |||
| 425 | |||
| 426 | /** |
||
| 427 | * Get dateTime object from date as array with keys |
||
| 428 | * <ul> |
||
| 429 | * <li>year</li> |
||
| 430 | * <li>month<li> |
||
| 431 | * <li>day</li> |
||
| 432 | * <li>hours (optional)</li> |
||
| 433 | * <li>minutes (optional)</li> |
||
| 434 | * <ul> |
||
| 435 | * |
||
| 436 | * |
||
| 437 | * @param array $arr |
||
| 438 | * |
||
| 439 | * @param int $default_ts default timestamp value to use if values of date are not set |
||
| 440 | * |
||
| 441 | * @return BAB_DateTime |
||
| 442 | */ |
||
| 443 | public static function getDateTime($arr, $default_ts = null) { |
||
| 444 | |||
| 445 | |||
| 446 | if (!isset($default_ts) && (!isset($arr['year']) || !isset($arr['month']) || !isset($arr['day']))) { |
||
| 447 | return null; |
||
| 448 | } |
||
| 449 | |||
| 450 | if (!isset($arr['year'])) { |
||
| 451 | $arr['year'] = date('Y', $default_ts); |
||
| 452 | } |
||
| 453 | |||
| 454 | if (!isset($arr['month'])) { |
||
| 455 | $arr['month'] = date('m', $default_ts); |
||
| 456 | } |
||
| 457 | |||
| 458 | if (!isset($arr['day'])) { |
||
| 459 | $arr['day'] = date('d', $default_ts); |
||
| 460 | } |
||
| 461 | |||
| 462 | if (!isset($arr['hours'])) { |
||
| 463 | $arr['hours'] = 0; |
||
| 464 | } |
||
| 465 | |||
| 466 | if (!isset($arr['minutes'])) { |
||
| 467 | $arr['minutes'] = 0; |
||
| 468 | } |
||
| 469 | |||
| 470 | return new BAB_DateTime($arr['year'], $arr['month'], $arr['day'], $arr['hours'],$arr['minutes']); |
||
| 471 | } |
||
| 472 | |||
| 473 | |||
| 474 | /** |
||
| 475 | * @return RRule |
||
| 476 | */ |
||
| 477 | private function loaddates() |
||
| 478 | { |
||
| 479 | if (null === $rrule = $this->getRRule()) |
||
| 480 | { |
||
| 481 | return null; |
||
| 482 | } |
||
| 483 | |||
| 484 | $arr = array(); |
||
| 485 | |||
| 486 | |||
| 487 | require_once dirname(__FILE__).'/utilit/RRule.php'; |
||
| 488 | |||
| 489 | $o = new RRule(new iCalDate(bab_mktime($this->begin)), $rrule); |
||
| 490 | |||
| 491 | |||
| 492 | while($date = $o->GetNext()) |
||
| 493 | { |
||
| 494 | $begin = BAB_DateTime::fromIsoDateTime($date->Render()); |
||
| 495 | $end = clone $begin; |
||
| 496 | $end->add($this->duration, BAB_DATETIME_SECOND); |
||
| 497 | |||
| 498 | // do not add the unavailable periods |
||
| 499 | |||
| 500 | $hd_index = absences_getHalfDaysIndex($this->id_user, $begin, $end); |
||
| 501 | |||
| 502 | if (count($hd_index[2]) > 0) // free half day on the requested period |
||
| 503 | { |
||
| 504 | $arr[$begin->getTimeStamp()] = array($begin, $end); |
||
| 505 | } |
||
| 506 | } |
||
| 507 | |||
| 508 | ksort($arr); |
||
| 509 | |||
| 510 | return $arr; |
||
| 511 | } |
||
| 512 | |||
| 513 | |||
| 514 | public function getnextday() |
||
| 515 | { |
||
| 516 | static $i = 1; |
||
| 517 | if( $i <= $this->nbdays) |
||
| 518 | { |
||
| 519 | $this->dayid = $i; |
||
| 520 | if($this->end_day == $i) |
||
| 521 | { |
||
| 522 | $this->selected = "selected"; |
||
| 523 | } |
||
| 524 | else |
||
| 525 | $this->selected = ""; |
||
| 526 | |||
| 527 | $i++; |
||
| 528 | return true; |
||
| 529 | } |
||
| 530 | else |
||
| 531 | { |
||
| 532 | $i = 1; |
||
| 533 | return false; |
||
| 534 | } |
||
| 535 | |||
| 536 | } |
||
| 537 | |||
| 538 | public function getnextmonth() |
||
| 539 | { |
||
| 540 | static $i = 1; |
||
| 541 | |||
| 542 | if( $i < 13) |
||
| 543 | { |
||
| 544 | $this->monthid = $i; |
||
| 545 | $this->monthname = bab_toHtml(bab_DateStrings::getMonth($i)); |
||
| 546 | if($this->end_month == $i) |
||
| 547 | { |
||
| 548 | $this->selected = "selected"; |
||
| 549 | } |
||
| 550 | else |
||
| 551 | $this->selected = ""; |
||
| 552 | |||
| 553 | $i++; |
||
| 554 | return true; |
||
| 555 | } |
||
| 556 | else |
||
| 557 | { |
||
| 558 | $i = 1; |
||
| 559 | return false; |
||
| 560 | } |
||
| 561 | |||
| 562 | } |
||
| 563 | |||
| 564 | public function getnextyear() |
||
| 565 | { |
||
| 566 | static $i = 0; |
||
| 567 | if( $i < $this->ymin + $this->ymax + 1) |
||
| 568 | { |
||
| 569 | $this->yearidval = ($this->yearmin + $i); |
||
| 570 | $this->yearid = $this->yearidval; |
||
| 571 | if($this->end_year == $this->yearidval) |
||
| 572 | { |
||
| 573 | $this->selected = "selected"; |
||
| 574 | } |
||
| 575 | else |
||
| 576 | $this->selected = ""; |
||
| 577 | $i++; |
||
| 578 | return true; |
||
| 579 | } |
||
| 580 | else |
||
| 581 | { |
||
| 582 | $i = 0; |
||
| 583 | return false; |
||
| 584 | } |
||
| 585 | |||
| 586 | } |
||
| 587 | |||
| 588 | |||
| 589 | /** |
||
| 590 | * list periods computed from posted recurring parameters |
||
| 591 | */ |
||
| 592 | public function getnextperiod() |
||
| 593 | { |
||
| 594 | if (isset($this->rrule) && list(,$arr) = each($this->rrule)) |
||
| 595 | { |
||
| 596 | $begin = $arr[0]; |
||
| 597 | $end = $arr[1]; |
||
| 598 | |||
| 599 | $this->p_begin = $begin->getIsoDateTime(); |
||
| 600 | $this->p_end = $end->getIsoDateTime(); |
||
| 601 | |||
| 602 | $this->period = sprintf(absences_translate('from %s to %s'), $begin->shortFormat(), $end->shortFormat()); |
||
| 603 | $this->checked = (isset($_POST['loaddates']) || isset($_POST['period'][$this->p_begin])); |
||
| 604 | return true; |
||
| 605 | } |
||
| 606 | return false; |
||
| 607 | } |
||
| 608 | |||
| 609 | } |
||
| 610 | |||
| 611 | $temp = new temp($begin,$end, $id); |
||
| 612 | $babBody->babecho( bab_printTemplate($temp, absences_addon()->getRelativePath()."vacuser.html", "recurring")); |
||
| 613 | } |
||
| 614 | |||
| 615 | |||
| 616 | |||
| 617 | |||
| 618 | |||
| 619 | class absences_RequestVacation |
||
| 620 | { |
||
| 621 | |||
| 622 | public $recurring; |
||
| 623 | |||
| 624 | |||
| 625 | /** |
||
| 626 | * @var array |
||
| 627 | */ |
||
| 628 | public $rights; |
||
| 629 | |||
| 630 | /** |
||
| 631 | * @var array |
||
| 632 | */ |
||
| 633 | public $right; |
||
| 634 | |||
| 635 | public $id; |
||
| 636 | public $id_user; |
||
| 637 | public $ide; |
||
| 638 | public $username; |
||
| 639 | |||
| 640 | public $datebegintxt; |
||
| 641 | public $dateendtxt; |
||
| 642 | public $vactype; |
||
| 643 | public $addvac; |
||
| 644 | public $save_previsional; |
||
| 645 | public $remark; |
||
| 646 | public $nbdaystxt; |
||
| 647 | public $invaliddate; |
||
| 648 | public $invaliddate2; |
||
| 649 | public $invalidentry; |
||
| 650 | public $invalidentry1; |
||
| 651 | public $invalidentry2; |
||
| 652 | public $invalidentry3; |
||
| 653 | public $totaltxt; |
||
| 654 | public $balancetxt; |
||
| 655 | public $previsionalbalancetxt; |
||
| 656 | public $calendar; |
||
| 657 | public $total_days; |
||
| 658 | public $total_hours; |
||
| 659 | public $maxallowed; |
||
| 660 | public $t_days; |
||
| 661 | public $t_alert_nomatch; |
||
| 662 | public $t_confirm_nomatch; |
||
| 663 | public $t_or; |
||
| 664 | public $t_recurring; |
||
| 665 | public $t_recurring_help; |
||
| 666 | public $t_previsional; |
||
| 667 | public $t_no_approval; |
||
| 668 | public $t_force_approval; |
||
| 669 | public $allow_mismatch; |
||
| 670 | |||
| 671 | |||
| 672 | public function __construct($begin, $end, $id) |
||
| 673 | { |
||
| 674 | global $babBody, $babDB; |
||
| 675 | require_once dirname(__FILE__).'/utilit/entry.class.php'; |
||
| 676 | |||
| 677 | $begin = $this->formatInputDate($begin); |
||
| 678 | $end = $this->formatInputDate($end); |
||
| 679 | |||
| 680 | |||
| 681 | if ($end < date('Y-m-d H:i:s') && !$id) |
||
| 682 | { |
||
| 683 | $babBody->addMessage(absences_translate('Warning, the request is in the past, do you really want to create a request at this date?')); |
||
| 684 | } |
||
| 685 | |||
| 686 | $this->recurring = (!empty($_POST['period']) && is_array($_POST['period'])); |
||
| 687 | $nb_request = $this->recurring ? count($_POST['period']) : 1; |
||
| 688 | |||
| 689 | $this->datebegintxt = absences_translate("Begin date"); |
||
| 690 | $this->dateendtxt = absences_translate("End date"); |
||
| 691 | $this->vactype = absences_translate("Vacation type"); |
||
| 692 | View Code Duplication | if ($id) |
|
|
0 ignored issues
–
show
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...
|
|||
| 693 | { |
||
| 694 | $this->addvac = absences_translate("Edit vacation request"); |
||
| 695 | $this->save_previsional = absences_translate("Edit previsional request"); |
||
| 696 | } else { |
||
| 697 | $this->addvac = absences_translate("Send vacation request"); |
||
| 698 | $this->save_previsional = absences_translate("Save previsional request"); |
||
| 699 | } |
||
| 700 | $this->remark = absences_translate("Description:"); |
||
| 701 | $this->nbdaystxt = absences_translate("Quantity"); |
||
| 702 | $this->invaliddate = bab_toHtml(absences_translate("ERROR: End date must be older"), BAB_HTML_JS); |
||
| 703 | $this->invaliddate2 = bab_toHtml(absences_translate("Total number of days does not fit between dates"), BAB_HTML_JS); |
||
| 704 | $this->invalidentry = bab_toHtml(absences_translate("Invalid entry! Only numbers are accepted or . !"), BAB_HTML_JS); |
||
| 705 | $this->invalidentry1 = absences_translate("Invalid entry"); |
||
| 706 | $this->invalidentry2 = absences_translate("Days must be multiple of 0.5"); |
||
| 707 | $this->invalidentry3 = absences_translate("The number of days exceed the total allowed"); |
||
| 708 | $this->totaltxt = absences_translate("Total:"); |
||
| 709 | $this->balancetxt = absences_translate("Balance"); |
||
| 710 | $this->previsionalbalancetxt = absences_translate("Previsional balance"); |
||
| 711 | $this->calendar = absences_translate("Planning"); |
||
| 712 | $this->total_days = 0; |
||
| 713 | $this->total_hours = 0; |
||
| 714 | $this->maxallowed = 0; |
||
| 715 | $this->id = $id; |
||
| 716 | $this->id_user = $_POST['id_user']; |
||
| 717 | $this->ide = bab_pp('ide'); |
||
| 718 | $this->username = bab_toHtml(bab_getUserName($this->id_user)); |
||
| 719 | $this->t_days = absences_translate("working days"); |
||
| 720 | $this->t_alert_nomatch = bab_toHtml(absences_translate("Total number of affected days does not match the period."),BAB_HTML_JS); |
||
| 721 | $this->t_confirm_nomatch = bab_toHtml(absences_translate("Total number of affected days does not match the period, do you really want to submit your request with this mismatch?"),BAB_HTML_JS); |
||
| 722 | $this->t_or = absences_translate('Or'); |
||
| 723 | $this->t_recurring = absences_translate('All periods:'); |
||
| 724 | $this->t_recurring_help = absences_translate('The allocation is made on a single period, the other will be reserved with the same configuration'); |
||
| 725 | $this->t_previsional = absences_translate('Previsional request (will not be sent to approval)', 'Previsional requests (will not be sent to approval)', $nb_request); |
||
| 726 | $this->t_no_approval = absences_translate('This right do not require approval'); |
||
| 727 | $this->t_force_approval = absences_translate('Launch the approval process on this request'); |
||
| 728 | |||
| 729 | $this->allow_mismatch = absences_getVacationOption('allow_mismatch'); |
||
| 730 | |||
| 731 | |||
| 732 | |||
| 733 | if (empty($this->id)) |
||
| 734 | { |
||
| 735 | |||
| 736 | // create a new entry (not saved) |
||
| 737 | $entry = new absences_Entry(); |
||
| 738 | $entry->setRow(array( |
||
| 739 | 'id_user' => $this->id_user, |
||
| 740 | 'date_begin' => $begin, |
||
| 741 | 'date_end' => $end |
||
| 742 | )); |
||
| 743 | |||
| 744 | $this->previsional = true; |
||
| 745 | $this->previsional_checked = isset($_POST['previsional']); |
||
| 746 | |||
| 747 | $this->upd_recurring = false; |
||
| 748 | |||
| 749 | } else { |
||
| 750 | $entry = absences_Entry::getById($this->id); |
||
| 751 | $dates_modified = ($entry->date_begin !== $begin || $entry->date_end !== $end); |
||
| 752 | |||
| 753 | $entry->date_begin = $begin; |
||
| 754 | $entry->date_end = $end; |
||
| 755 | if ($this->previsional = $entry->isPrevisonal()) |
||
| 756 | { |
||
| 757 | $this->previsional_checked = true; |
||
| 758 | } |
||
| 759 | |||
| 760 | if ($entry->folder && !$dates_modified) |
||
| 761 | { |
||
| 762 | $this->t_upd_recurring = absences_translate('Update description and rights for all periods with same total quantity in the recurring request'); |
||
| 763 | $this->upd_recurring = true; |
||
| 764 | } else { |
||
| 765 | $this->upd_recurring = false; |
||
| 766 | } |
||
| 767 | } |
||
| 768 | |||
| 769 | |||
| 770 | $days = $entry->getDurationDays(); |
||
| 771 | $hours = $entry->getDurationHours(); |
||
| 772 | |||
| 773 | |||
| 774 | |||
| 775 | $this->period_nbdays = $days; |
||
| 776 | $this->period_nbhours = $hours; |
||
| 777 | |||
| 778 | /** |
||
| 779 | * nombre de jours non utilises restant, initialisation |
||
| 780 | */ |
||
| 781 | $this->last_days = $days; |
||
| 782 | |||
| 783 | /** |
||
| 784 | * nombre d'heures non utilises restantes, initialisation |
||
| 785 | */ |
||
| 786 | $this->last_hours = $hours; |
||
| 787 | |||
| 788 | |||
| 789 | $this->t_days = absences_translate("Day(s)"); |
||
| 790 | |||
| 791 | |||
| 792 | |||
| 793 | $this->begin = $entry->date_begin; |
||
| 794 | $this->end = $entry->date_end; |
||
| 795 | |||
| 796 | $this->rfrom = isset($_POST['rfrom'])? $_POST['rfrom'] : 0; |
||
| 797 | $this->rights = array(); |
||
| 798 | $rights = absences_getRightsOnPeriod($this->begin, $this->end, $this->id_user, $this->rfrom); |
||
| 799 | |||
| 800 | $this->contain_hours_rights = false; |
||
| 801 | |||
| 802 | $this->no_approval_message = false; |
||
| 803 | $one_approval = false; |
||
| 804 | |||
| 805 | |||
| 806 | foreach($rights as $right) { |
||
| 807 | $id = empty($right['id_rgroup']) ? 'r'.$right['id'] : 'g'.$right['id_rgroup']; |
||
| 808 | |||
| 809 | if ('H' === $right['quantity_unit']) |
||
| 810 | { |
||
| 811 | $this->contain_hours_rights = true; |
||
| 812 | } |
||
| 813 | |||
| 814 | if (isset($this->rights[$id])) { |
||
| 815 | $this->rights[$id]['rights'][$right['id']] = array( |
||
| 816 | 'description' => $right['description'], |
||
| 817 | 'quantity_available' => $right['quantity_available'] - $right['waiting'], |
||
| 818 | 'previsional_available' => $right['quantity_available'] - $right['agentRight']->getPrevisionalQuantity() - $right['waiting'], |
||
| 819 | 'sortkey' => $this->getOptionSortKey($right) |
||
| 820 | ); |
||
| 821 | continue; |
||
| 822 | |||
| 823 | } elseif(!empty($right['id_rgroup'])) { |
||
| 824 | |||
| 825 | // les droits avec regroupement sont ajoutes dans ['rights'] |
||
| 826 | |||
| 827 | |||
| 828 | $right['rights'] = array( |
||
| 829 | $right['id'] => array( |
||
| 830 | 'description' => $right['description'], |
||
| 831 | 'quantity_available' => $right['quantity_available'] - $right['waiting'], |
||
| 832 | 'previsional_available' => $right['quantity_available'] - $right['agentRight']->getPrevisionalQuantity() - $right['waiting'], |
||
| 833 | 'sortkey' => $this->getOptionSortKey($right) |
||
| 834 | ) |
||
| 835 | ); |
||
| 836 | } |
||
| 837 | |||
| 838 | $this->rights[$id] = $right; |
||
| 839 | |||
| 840 | $agentRight = $right['agentRight']; |
||
| 841 | if (0 === (int) $agentRight->getRight()->require_approval) { |
||
| 842 | $this->no_approval_message = true; |
||
| 843 | } else { |
||
| 844 | $one_approval = true; |
||
| 845 | } |
||
| 846 | |||
| 847 | |||
| 848 | } |
||
| 849 | |||
| 850 | |||
| 851 | $author = absences_Agent::getCurrentUser(); |
||
| 852 | $this->manager_propose_approval = ($author->isManager() && $one_approval && $this->rfrom); |
||
| 853 | |||
| 854 | |||
| 855 | if (empty($this->rights)) { |
||
| 856 | $babBody->addError(absences_translate('No rights accessibles on this period')); |
||
| 857 | } |
||
| 858 | |||
| 859 | |||
| 860 | bab_Sort::asort($this->rights, 'sortkey'); |
||
| 861 | |||
| 862 | |||
| 863 | $s_days = sprintf('<strong>%s</strong>', absences_editQuantity($days, 'D')); |
||
| 864 | $s_hours = sprintf('<strong>%s</strong>', absences_editQuantity($hours, 'H')); |
||
| 865 | |||
| 866 | $r_days = sprintf('<strong>%s</strong>', absences_editQuantity($nb_request*$days, 'D')); |
||
| 867 | $r_hours = sprintf('<strong>%s</strong>', absences_editQuantity($nb_request*$hours, 'H')); |
||
| 868 | |||
| 869 | |||
| 870 | if ($this->contain_hours_rights) |
||
| 871 | { |
||
| 872 | $this->period_infos = sprintf(absences_translate('The period contain %s day(s) or %s hour(s)', 'Each period contain %s day(s) or %s hour(s)', $nb_request), $s_days, $s_hours); |
||
| 873 | $this->recurring_total = sprintf(absences_translate('Total in all periods: %s day(s) or %s hour(s)'), $r_days, $r_hours); |
||
| 874 | } else { |
||
| 875 | $this->period_infos = sprintf(absences_translate('The period contain %s day(s)', 'Each period contain %s day(s)', $nb_request), $s_days); |
||
| 876 | $this->recurring_total = sprintf(absences_translate('All periods contains %s day(s)'), $r_days); |
||
| 877 | } |
||
| 878 | |||
| 879 | |||
| 880 | |||
| 881 | if (!empty($this->id)) |
||
| 882 | { |
||
| 883 | $res = $babDB->db_query("SELECT id_right, quantity FROM ".ABSENCES_ENTRIES_ELEM_TBL." WHERE id_entry='".$babDB->db_escape_string($this->id)."'"); |
||
| 884 | while ($arr = $babDB->db_fetch_array($res)) |
||
| 885 | { |
||
| 886 | $this->current['r'.$arr['id_right']] = $arr['quantity']; |
||
| 887 | } |
||
| 888 | } |
||
| 889 | |||
| 890 | $this->recorded = array(); |
||
| 891 | if (!empty($this->id)) |
||
| 892 | { |
||
| 893 | $res = $babDB->db_query(" |
||
| 894 | SELECT |
||
| 895 | e.id_right, |
||
| 896 | r.id_rgroup, |
||
| 897 | e.quantity |
||
| 898 | FROM |
||
| 899 | ".ABSENCES_ENTRIES_ELEM_TBL." e, |
||
| 900 | ".ABSENCES_RIGHTS_TBL." r |
||
| 901 | |||
| 902 | WHERE |
||
| 903 | e.id_entry='".$babDB->db_escape_string($this->id)."' |
||
| 904 | AND e.id_right = r.id |
||
| 905 | "); |
||
| 906 | while($arr = $babDB->db_fetch_array($res)) |
||
| 907 | { |
||
| 908 | if (empty($arr['id_rgroup'])) { |
||
| 909 | $this->recorded['r'.$arr['id_right']] = $arr['quantity']; |
||
| 910 | } else { |
||
| 911 | $this->recorded['g'.$arr['id_rgroup']] = $arr['quantity']; |
||
| 912 | } |
||
| 913 | } |
||
| 914 | |||
| 915 | list($this->remarks) = $babDB->db_fetch_array($babDB->db_query("SELECT comment FROM ".ABSENCES_ENTRIES_TBL." WHERE id=".$babDB->quote($this->id))); |
||
| 916 | } |
||
| 917 | else |
||
| 918 | { |
||
| 919 | $this->remarks = isset($_POST['remarks']) ? stripslashes($_POST['remarks']) : ''; |
||
| 920 | } |
||
| 921 | |||
| 922 | $this->datebegin = absences_longDate(bab_mktime($begin)); |
||
| 923 | $this->dateend = absences_longDate(bab_mktime($end)); |
||
| 924 | |||
| 925 | |||
| 926 | $this->calurl = absences_addon()->getUrl()."planning&idx=cal&idu=".$this->id_user."&popup=1"; |
||
| 927 | |||
| 928 | } |
||
| 929 | |||
| 930 | |||
| 931 | private function getOptionSortKey(Array $right) |
||
| 932 | { |
||
| 933 | // T8618 ordonner en fonction de la date de fin de validite |
||
| 934 | |||
| 935 | $sortkey = $right['date_end_valid']; |
||
| 936 | if ('0000-00-00' === $sortkey) { |
||
| 937 | $sortkey = $right['date_end']; |
||
| 938 | } |
||
| 939 | |||
| 940 | $sortkey .= ' '.$right['description']; |
||
| 941 | |||
| 942 | return $sortkey; |
||
| 943 | } |
||
| 944 | |||
| 945 | |||
| 946 | |||
| 947 | /** |
||
| 948 | * Correct errors in the DATETIME format |
||
| 949 | * @param string $str |
||
| 950 | * @return string |
||
| 951 | */ |
||
| 952 | private function formatInputDate($str) |
||
| 953 | { |
||
| 954 | $m = null; |
||
| 955 | preg_match('/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/', $str, $m); |
||
| 956 | return sprintf('%04d-%02d-%02d %02d:%02d:%02d', $m[1], $m[2], $m[3], $m[4], $m[5], $m[6]); |
||
| 957 | } |
||
| 958 | |||
| 959 | |||
| 960 | |||
| 961 | /** |
||
| 962 | * Convert days to hours |
||
| 963 | * @param float $days |
||
| 964 | * @return float |
||
| 965 | */ |
||
| 966 | View Code Duplication | private function daysToHours($days) |
|
|
0 ignored issues
–
show
This method 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...
|
|||
| 967 | { |
||
| 968 | if (0 == $this->period_nbdays) |
||
| 969 | { |
||
| 970 | return 0; |
||
| 971 | } |
||
| 972 | |||
| 973 | $ratio = $this->period_nbhours / $this->period_nbdays; |
||
| 974 | return round(($ratio * $days), 2); |
||
| 975 | } |
||
| 976 | |||
| 977 | /** |
||
| 978 | * Convert hours to days |
||
| 979 | * @param float $hours |
||
| 980 | * @return float |
||
| 981 | */ |
||
| 982 | View Code Duplication | private function hoursToDays($hours) |
|
|
0 ignored issues
–
show
This method 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...
|
|||
| 983 | { |
||
| 984 | if (0 == $this->period_nbhours) |
||
| 985 | { |
||
| 986 | return 0; |
||
| 987 | } |
||
| 988 | |||
| 989 | $ratio = $this->period_nbdays / $this->period_nbhours; |
||
| 990 | return round(($ratio * $hours), 2); |
||
| 991 | } |
||
| 992 | |||
| 993 | /** |
||
| 994 | * |
||
| 995 | * @param string $unit D | H |
||
| 996 | * @param float $set |
||
| 997 | * |
||
| 998 | * @return float | null |
||
| 999 | */ |
||
| 1000 | private function last($unit = null, $set = null) |
||
| 1001 | { |
||
| 1002 | if (null === $set) |
||
| 1003 | { |
||
| 1004 | switch($unit) |
||
| 1005 | { |
||
| 1006 | case 'D': |
||
| 1007 | return $this->last_days; |
||
| 1008 | |||
| 1009 | case 'H': |
||
| 1010 | return $this->last_hours; |
||
| 1011 | } |
||
| 1012 | } |
||
| 1013 | else |
||
| 1014 | { |
||
| 1015 | switch($unit) |
||
| 1016 | { |
||
| 1017 | case 'D': |
||
| 1018 | $this->last_days = $set; |
||
| 1019 | $this->last_hours = $this->daysToHours($set); |
||
| 1020 | break; |
||
| 1021 | |||
| 1022 | case 'H': |
||
| 1023 | $this->last_days = $this->hoursToDays($set); |
||
| 1024 | $this->last_hours = $set; |
||
| 1025 | break; |
||
| 1026 | } |
||
| 1027 | } |
||
| 1028 | |||
| 1029 | } |
||
| 1030 | |||
| 1031 | |||
| 1032 | public function getnextright() |
||
| 1033 | { |
||
| 1034 | |||
| 1035 | if (list($id,$this->right) = each($this->rights)) |
||
| 1036 | { |
||
| 1037 | // ordonner les listes deroulantes |
||
| 1038 | |||
| 1039 | if (!empty($this->right['rights'])) { |
||
| 1040 | bab_Sort::asort($this->rights[$id]['rights'], 'sortkey', bab_Sort::CASE_INSENSITIVE); |
||
| 1041 | } |
||
| 1042 | |||
| 1043 | |||
| 1044 | $agentRight = $this->right['agentRight']; |
||
| 1045 | /*@var $agentRight absences_AgentRight */ |
||
| 1046 | |||
| 1047 | $this->id_rgroup = $this->right['id_rgroup']; |
||
| 1048 | $this->rgroup = bab_toHtml($this->right['rgroup']); |
||
| 1049 | |||
| 1050 | $this->right['description'] = bab_toHtml($this->right['description']); |
||
| 1051 | $this->right['current_quantity'] = |
||
| 1052 | $this->right['quantity_available'] = $this->right['quantity_available'] - $this->right['waiting']; |
||
| 1053 | $this->right['previsional_available'] = $this->right['quantity_available'] - $agentRight->getPrevisionalQuantity(); |
||
| 1054 | |||
| 1055 | $this->current_quantity = ''; |
||
| 1056 | if (isset($this->current[$id])) { |
||
| 1057 | $this->current_quantity = bab_toHtml($this->current[$id]); |
||
| 1058 | } |
||
| 1059 | $this->quantity_available = bab_toHtml(absences_quantity($this->right['quantity_available'], $this->right['quantity_unit'])); |
||
| 1060 | $this->previsional_quantity_available = bab_toHtml(absences_quantity($this->right['previsional_available'], $this->right['quantity_unit'])); |
||
| 1061 | |||
| 1062 | |||
| 1063 | $right = $agentRight->getRight(); |
||
| 1064 | |||
| 1065 | $this->no_approval = !((bool) $right->require_approval); |
||
| 1066 | |||
| 1067 | |||
| 1068 | View Code Duplication | switch($this->right['quantity_unit']) |
|
|
0 ignored issues
–
show
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...
|
|||
| 1069 | { |
||
| 1070 | case 'D': |
||
| 1071 | $this->unit = absences_translate('day(s)'); |
||
| 1072 | break; |
||
| 1073 | |||
| 1074 | case 'H': |
||
| 1075 | $this->unit = absences_translate('hour(s)'); |
||
| 1076 | break; |
||
| 1077 | } |
||
| 1078 | |||
| 1079 | |||
| 1080 | $float_quantity = 0.0; |
||
| 1081 | |||
| 1082 | |||
| 1083 | if (isset($_POST['nbdays'][$id])) |
||
| 1084 | { |
||
| 1085 | $float_quantity = (float) str_replace(',', '.', $_POST['quantity'][$id]); |
||
| 1086 | $this->quantity = $_POST['quantity'][$id]; |
||
| 1087 | } |
||
| 1088 | elseif( count($this->recorded) > 0) { |
||
| 1089 | if (isset($this->recorded[$id])) { |
||
| 1090 | $float_quantity = (float) $this->recorded[$id]; |
||
| 1091 | $this->quantity = absences_editQuantity($this->recorded[$id], $this->right['quantity_unit']); |
||
| 1092 | } |
||
| 1093 | else { |
||
| 1094 | $this->quantity = '0'; |
||
| 1095 | $float_quantity = 0.0; |
||
| 1096 | } |
||
| 1097 | } |
||
| 1098 | elseif (0 == $this->right['no_distribution'] && $this->last($this->right['quantity_unit']) > 0 && $this->right['quantity_available'] > 0) |
||
| 1099 | { |
||
| 1100 | |||
| 1101 | $last = $this->last($this->right['quantity_unit']); |
||
| 1102 | |||
| 1103 | |||
| 1104 | if ($last >= $this->right['quantity_available']) |
||
| 1105 | { |
||
| 1106 | $float_quantity = $this->right['quantity_available']; |
||
| 1107 | $this->quantity = absences_editQuantity($this->right['quantity_available'], $this->right['quantity_unit']); |
||
| 1108 | |||
| 1109 | $last -= $this->right['quantity_available']; |
||
| 1110 | $this->last($this->right['quantity_unit'], $last); |
||
| 1111 | } |
||
| 1112 | elseif ($this->right['quantity_available'] > 0) |
||
| 1113 | { |
||
| 1114 | $float_quantity = $last; |
||
| 1115 | $this->quantity = absences_editQuantity($last, $this->right['quantity_unit']); |
||
| 1116 | $this->last($this->right['quantity_unit'], 0); |
||
| 1117 | } |
||
| 1118 | |||
| 1119 | } |
||
| 1120 | else |
||
| 1121 | { |
||
| 1122 | $float_quantity = 0.0; |
||
| 1123 | $this->quantity = '0'; |
||
| 1124 | |||
| 1125 | } |
||
| 1126 | |||
| 1127 | |||
| 1128 | |||
| 1129 | |||
| 1130 | switch($this->right['quantity_unit']) |
||
| 1131 | { |
||
| 1132 | case 'D': |
||
| 1133 | $this->total_days += $float_quantity; |
||
| 1134 | $this->total_hours += $this->daysToHours($this->quantity); |
||
| 1135 | break; |
||
| 1136 | case 'H': |
||
| 1137 | $this->total_hours += $float_quantity; |
||
| 1138 | $this->total_days += $this->hoursToDays($this->quantity); |
||
| 1139 | break; |
||
| 1140 | } |
||
| 1141 | |||
| 1142 | |||
| 1143 | |||
| 1144 | return true; |
||
| 1145 | } |
||
| 1146 | else |
||
| 1147 | return false; |
||
| 1148 | |||
| 1149 | } |
||
| 1150 | |||
| 1151 | |||
| 1152 | public function getnextrgroupright() { |
||
| 1153 | if (list($id, $arr) = each($this->right['rights'])) { |
||
| 1154 | $this->id_right = bab_toHtml($id); |
||
| 1155 | $this->description = bab_toHtml($arr['description']); |
||
| 1156 | |||
| 1157 | $recorded = isset($this->current['r'.$id]) ? $this->current['r'.$id] : 0; |
||
| 1158 | $this->current_quantity = bab_toHtml($recorded); |
||
| 1159 | $this->quantity_available = bab_toHtml($arr['quantity_available']); |
||
| 1160 | $this->previsional_available = bab_toHtml($arr['previsional_available']); |
||
| 1161 | $this->selected = isset($this->current['r'.$id]); |
||
| 1162 | return true; |
||
| 1163 | } |
||
| 1164 | return false; |
||
| 1165 | } |
||
| 1166 | |||
| 1167 | public function getnextrecurring() { |
||
| 1168 | if (list($begin, $end) = each($_POST['period'])) { |
||
| 1169 | $this->period = bab_toHtml(sprintf(absences_translate('from %s to %s'), bab_shortDate(bab_mktime($begin)), bab_shortDate(bab_mktime($end)))); |
||
| 1170 | $this->p_begin = bab_toHtml($begin); |
||
| 1171 | $this->p_end = bab_toHtml($end); |
||
| 1172 | return true; |
||
| 1173 | } |
||
| 1174 | return false; |
||
| 1175 | } |
||
| 1176 | |||
| 1177 | } |
||
| 1178 | |||
| 1179 | |||
| 1180 | |||
| 1181 | |||
| 1182 | |||
| 1183 | function requestVacation($begin,$end, $id, $rfrom, $ide) |
||
| 1184 | { |
||
| 1185 | global $babBody; |
||
| 1186 | |||
| 1187 | if ($id) |
||
| 1188 | { |
||
| 1189 | $babBody->setTitle(absences_translate("Edit vacation request")); |
||
| 1190 | } else |
||
| 1191 | { |
||
| 1192 | $babBody->setTitle(absences_translate("Request vacation")); |
||
| 1193 | } |
||
| 1194 | |||
| 1195 | |||
| 1196 | if( !bab_isEntryEditable($id) ) |
||
| 1197 | { |
||
| 1198 | return false; |
||
| 1199 | } |
||
| 1200 | |||
| 1201 | if (absences_lockedForMainteance()) |
||
| 1202 | { |
||
| 1203 | $babBody->addError(absences_getMaintenanceMessage()); |
||
| 1204 | return false; |
||
| 1205 | } |
||
| 1206 | |||
| 1207 | $agent = absences_Agent::getCurrentUser(); |
||
| 1208 | |||
| 1209 | if ($id) |
||
| 1210 | { |
||
| 1211 | if ($rfrom) |
||
| 1212 | { |
||
| 1213 | if ($ide && $agent->isEntityManagerOf($ide)) |
||
| 1214 | { |
||
| 1215 | // modification d'une demande par un gestionnaire delegue |
||
| 1216 | $babBody->addItemMenu("entities", absences_translate("Delegate management"), absences_addon()->getUrl()."vacchart&idx=entities"); |
||
| 1217 | $babBody->addItemMenu("entity_members", absences_translate("Entity requests"), absences_addon()->getUrl()."vacchart&idx=entity_requests&ide=".$ide); |
||
| 1218 | $babBody->addItemMenu("vunew", absences_translate("Edit"), absences_addon()->getUrl()."vacuser&idx=vunew&id=".$id."&rfrom=1&ide=".$ide); |
||
| 1219 | |||
| 1220 | View Code Duplication | } elseif (!$ide && $agent->isManager()) { |
|
|
0 ignored issues
–
show
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...
|
|||
| 1221 | // modification d'une demande par un gestionnaire |
||
| 1222 | $babBody->addItemMenu("list", absences_translate("Management"), absences_addon()->getUrl()."vacadm"); |
||
| 1223 | $babBody->addItemMenu("lper", absences_translate("Requests"), absences_addon()->getUrl()."vacadmb&idx=lreq"); |
||
| 1224 | $babBody->addItemMenu("vunew", absences_translate("Edit"), absences_addon()->getUrl()."vacuser&idx=vunew&id=".$id."&rfrom=1"); |
||
| 1225 | } |
||
| 1226 | View Code Duplication | } else { |
|
|
0 ignored issues
–
show
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...
|
|||
| 1227 | // modification d'une demande par un agent |
||
| 1228 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 1229 | $babBody->addItemMenu("vunew", absences_translate("Edit"), absences_addon()->getUrl()."vacuser&idx=vunew&id=".$id); |
||
| 1230 | } |
||
| 1231 | } else { |
||
| 1232 | |||
| 1233 | if ($rfrom) |
||
| 1234 | { |
||
| 1235 | if ($ide && $agent->isEntityManagerOf($ide)) |
||
| 1236 | { |
||
| 1237 | // creation d'une demande par un gestionnaire delegue |
||
| 1238 | $babBody->addItemMenu("entities", absences_translate("Delegate management"), absences_addon()->getUrl()."vacchart&idx=entities"); |
||
| 1239 | $babBody->addItemMenu("entity_members", absences_translate("Entity requests"), absences_addon()->getUrl()."vacchart&idx=entity_requests&ide=".$ide); |
||
| 1240 | $babBody->addItemMenu("vunew", absences_translate("Request"), absences_addon()->getUrl()."vacuser&idx=vunew&rfrom=1&ide=".$ide); |
||
| 1241 | |||
| 1242 | View Code Duplication | } elseif (!$ide && $agent->isManager()) { |
|
|
0 ignored issues
–
show
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...
|
|||
| 1243 | // creation d'une demande par un gestionnaire |
||
| 1244 | $babBody->addItemMenu("list", absences_translate("Management"), absences_addon()->getUrl()."vacadm"); |
||
| 1245 | $babBody->addItemMenu("lper", absences_translate("Requests"), absences_addon()->getUrl()."vacadmb&idx=lreq"); |
||
| 1246 | $babBody->addItemMenu("vunew", absences_translate("Edit"), absences_addon()->getUrl()."vacuser&idx=vunew&rfrom=1"); |
||
| 1247 | } |
||
| 1248 | View Code Duplication | } else { |
|
|
0 ignored issues
–
show
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...
|
|||
| 1249 | // creation d'une demande par un agent |
||
| 1250 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 1251 | $babBody->addItemMenu("vunew", absences_translate("Request"), absences_addon()->getUrl()."vacuser&idx=vunew"); |
||
| 1252 | } |
||
| 1253 | |||
| 1254 | } |
||
| 1255 | |||
| 1256 | |||
| 1257 | $temp = new absences_RequestVacation($begin,$end, $id); |
||
| 1258 | $babBody->babecho( bab_printTemplate($temp, absences_addon()->getRelativePath()."vacuser.html", "newvacation")); |
||
| 1259 | } |
||
| 1260 | |||
| 1261 | |||
| 1262 | |||
| 1263 | function period($id_user, $id = 0) |
||
| 1264 | { |
||
| 1265 | require_once dirname(__FILE__).'/utilit/period.ui.php'; |
||
| 1266 | |||
| 1267 | $temp = new absences_PeriodFrame($id_user, $id); |
||
| 1268 | $GLOBALS['babBody']->babecho(bab_printTemplate($temp, absences_addon()->getRelativePath()."vacuser.html", "period")); |
||
| 1269 | } |
||
| 1270 | |||
| 1271 | |||
| 1272 | |||
| 1273 | |||
| 1274 | function viewrights($id_user) |
||
| 1275 | { |
||
| 1276 | class temp |
||
| 1277 | { |
||
| 1278 | |||
| 1279 | var $altbg = true; |
||
| 1280 | |||
| 1281 | function temp($id_user) { |
||
| 1282 | $this->rights = absences_getRightsByGroupOnPeriod($id_user); |
||
| 1283 | $this->total = 0; |
||
| 1284 | $this->total_waiting = 0; |
||
| 1285 | $this->t_avariable_days = absences_translate("Avariable days"); |
||
| 1286 | $this->t_waiting_days = absences_translate("Waiting days"); |
||
| 1287 | $this->t_period_nbdays = absences_translate("Period days"); |
||
| 1288 | $this->t_total = absences_translate("Total"); |
||
| 1289 | |||
| 1290 | $this->t_available = absences_translate("Available"); |
||
| 1291 | $this->t_waiting = absences_translate("Waiting"); |
||
| 1292 | |||
| 1293 | $this->total = array('D' => 0, 'H' => 0); |
||
| 1294 | $this->total_waiting = array('D' => 0, 'H' => 0); |
||
| 1295 | } |
||
| 1296 | |||
| 1297 | function getnextright() |
||
| 1298 | { |
||
| 1299 | if ($right = & current($this->rights)) |
||
| 1300 | { |
||
| 1301 | $this->altbg = !$this->altbg; |
||
| 1302 | next($this->rights); |
||
| 1303 | $quantity_available = $right['quantity_available'] - $right['waiting']; |
||
| 1304 | $this->description = bab_toHtml($right['description']); |
||
| 1305 | |||
| 1306 | $this->quantity_available = array('D' => 0, 'H' => 0); |
||
| 1307 | $this->waiting = array('D' => 0, 'H' => 0); |
||
| 1308 | |||
| 1309 | $this->quantity_available[$right['quantity_unit']] = $quantity_available; |
||
| 1310 | $this->waiting[$right['quantity_unit']] = $right['waiting']; |
||
| 1311 | |||
| 1312 | $this->total[$right['quantity_unit']] += $this->quantity_available[$right['quantity_unit']]; |
||
| 1313 | $this->total_waiting[$right['quantity_unit']] += $this->waiting[$right['quantity_unit']]; |
||
| 1314 | return true; |
||
| 1315 | } |
||
| 1316 | else |
||
| 1317 | return false; |
||
| 1318 | |||
| 1319 | } |
||
| 1320 | |||
| 1321 | } |
||
| 1322 | $temp = new temp($id_user); |
||
| 1323 | |||
| 1324 | global $babBody; |
||
| 1325 | |||
| 1326 | $html = bab_printTemplate($temp, absences_addon()->getRelativePath()."vacuser.html", "viewrights"); |
||
| 1327 | |||
| 1328 | if (1 === (int) bab_rp('popup')) |
||
| 1329 | { |
||
| 1330 | $babBody->babPopup($html); |
||
| 1331 | } else { |
||
| 1332 | $babBody->babEcho($html); |
||
| 1333 | } |
||
| 1334 | } |
||
| 1335 | |||
| 1336 | |||
| 1337 | |||
| 1338 | function vedUnload() |
||
| 1339 | { |
||
| 1340 | class temp |
||
| 1341 | { |
||
| 1342 | var $message; |
||
| 1343 | var $close; |
||
| 1344 | var $redirecturl; |
||
| 1345 | |||
| 1346 | function temp() |
||
| 1347 | { |
||
| 1348 | $this->message = absences_translate("Vacation entry has been updated"); |
||
| 1349 | $this->close = absences_translate("Close"); |
||
| 1350 | $this->redirecturl = absences_addon()->getUrl()."vacuser&idx=lval"; |
||
| 1351 | } |
||
| 1352 | } |
||
| 1353 | |||
| 1354 | $temp = new temp(); |
||
| 1355 | global $babBody; |
||
| 1356 | $babBody->babPopup(bab_printTemplate($temp, absences_addon()->getRelativePath()."vacuser.html", "vedunload")); |
||
| 1357 | } |
||
| 1358 | |||
| 1359 | |||
| 1360 | |||
| 1361 | class absences_saveVacation |
||
| 1362 | { |
||
| 1363 | |||
| 1364 | |||
| 1365 | /** |
||
| 1366 | * Test la quantite dispo sur un droit |
||
| 1367 | * |
||
| 1368 | * |
||
| 1369 | * @param array &$nbdays list of rights to save in request, rows are added on each valid calls |
||
| 1370 | * @param Array $arr vacation rights properties |
||
| 1371 | * @param float $quantity requested quantity in form |
||
| 1372 | * @param int $id_request if this is a request modification |
||
| 1373 | * |
||
| 1374 | * @throws Exception |
||
| 1375 | * |
||
| 1376 | * @return bool |
||
| 1377 | */ |
||
| 1378 | private static function addVacationRight(&$nbdays, Array $arr, $quantity, $id_request, &$used_in_previous_periods) |
||
| 1379 | { |
||
| 1380 | $quantity = str_replace(',','.', $quantity); |
||
| 1381 | $available = ($arr['quantity_available'] - $arr['waiting']); |
||
| 1382 | |||
| 1383 | if (!isset($used_in_previous_periods[$arr['id']])) |
||
| 1384 | { |
||
| 1385 | $used_in_previous_periods[$arr['id']] = 0; |
||
| 1386 | } |
||
| 1387 | |||
| 1388 | if (!empty($id_request)) { |
||
| 1389 | |||
| 1390 | $entry = absences_Entry::getById($id_request); |
||
| 1391 | |||
| 1392 | if (!$entry->isPrevisonal()) { |
||
| 1393 | $element = $entry->getElement($arr['id']); |
||
| 1394 | |||
| 1395 | if (isset($element)) { |
||
| 1396 | // quantity in current request is unavailable, add it to $available (waiting or confirmed) |
||
| 1397 | $available += $element->quantity; |
||
| 1398 | } |
||
| 1399 | } |
||
| 1400 | } |
||
| 1401 | |||
| 1402 | |||
| 1403 | if ('' === $quantity) { |
||
| 1404 | $quantity = 0; |
||
| 1405 | } |
||
| 1406 | |||
| 1407 | |||
| 1408 | if(!is_numeric($quantity) || $quantity < 0 ) { |
||
| 1409 | throw new Exception(sprintf(absences_translate("You must specify a correct number days on right %s"), $arr['description'])); |
||
| 1410 | } |
||
| 1411 | |||
| 1412 | if (!empty($quantity) && $arr['cbalance'] != 'Y' && ($available - $quantity - $used_in_previous_periods[$arr['id']]) < 0) { |
||
| 1413 | throw new Exception(sprintf(absences_translate("You can't take more than %s on the right %s"), absences_quantity($available, $arr['quantity_unit']), $arr['description'])); |
||
| 1414 | } |
||
| 1415 | |||
| 1416 | |||
| 1417 | // si le droit est un compte epargne temps, verifier les conditions d'utilisations speciales |
||
| 1418 | if (!empty($quantity)) |
||
| 1419 | { |
||
| 1420 | $agentRight = $arr['agentRight']; |
||
| 1421 | /*@var $agentRight absences_agentRight */ |
||
| 1422 | $right = $agentRight->getRight(); |
||
| 1423 | |||
| 1424 | if (absences_Right::CET === $right->getKind() && ($cet = $right->getRightCet())) |
||
| 1425 | { |
||
| 1426 | if (0 !== (int) round(10*$cet->min_use)) // 0 = min_use disabled |
||
| 1427 | { |
||
| 1428 | // -1 = force using all available |
||
| 1429 | |||
| 1430 | $min_use = (float) $cet->min_use; |
||
| 1431 | |||
| 1432 | if ($min_use < 0 && $quantity < $available) |
||
| 1433 | { |
||
| 1434 | throw new Exception(sprintf(absences_translate("The quantity available in %s must be used all in one request"), $arr['description'])); |
||
| 1435 | } |
||
| 1436 | |||
| 1437 | |||
| 1438 | if ($min_use > 0 && ((int) round(10*$quantity)) < ((int) round(10*$min_use))) |
||
| 1439 | { |
||
| 1440 | throw new Exception(sprintf(absences_translate("The minimal quantity usable in one request for the right %s is %s"), $arr['description'], absences_quantity($min_use, 'D'))); |
||
| 1441 | } |
||
| 1442 | } |
||
| 1443 | } |
||
| 1444 | } |
||
| 1445 | |||
| 1446 | |||
| 1447 | if( $quantity > 0 ) { |
||
| 1448 | $nbdays['id'][] = (int) $arr['id']; |
||
| 1449 | $nbdays['val'][] = $quantity; |
||
| 1450 | $nbdays['total'][$arr['quantity_unit']] += $quantity; |
||
| 1451 | $used_in_previous_periods[$arr['id']] += $quantity; |
||
| 1452 | } |
||
| 1453 | |||
| 1454 | return true; |
||
| 1455 | } |
||
| 1456 | |||
| 1457 | |||
| 1458 | /** |
||
| 1459 | * requests in same folder and with same quantity and with same status |
||
| 1460 | * @param absences_Entry $entry |
||
| 1461 | * @return array |
||
| 1462 | */ |
||
| 1463 | private static function selectFolderSimilarRequests($entry) |
||
| 1464 | { |
||
| 1465 | require_once dirname(__FILE__).'/utilit/entry.class.php'; |
||
| 1466 | global $babDB; |
||
| 1467 | |||
| 1468 | $res = $babDB->db_query('SELECT |
||
| 1469 | e.* |
||
| 1470 | FROM |
||
| 1471 | absences_entries e |
||
| 1472 | WHERE e.folder='.$babDB->quote($entry->folder).' |
||
| 1473 | AND e.status='.$babDB->quote($entry->status).' |
||
| 1474 | AND e.id<>'.$babDB->quote($entry->id).' |
||
| 1475 | '); |
||
| 1476 | |||
| 1477 | $return = array(); |
||
| 1478 | while($arr = $babDB->db_fetch_assoc($res)) |
||
| 1479 | { |
||
| 1480 | $e = new absences_Entry(); |
||
| 1481 | $e->setRow($arr); |
||
| 1482 | |||
| 1483 | if ($e->getTotalDays() == $entry->getTotalDays()) |
||
| 1484 | { |
||
| 1485 | $return[] = $e; |
||
| 1486 | } |
||
| 1487 | } |
||
| 1488 | |||
| 1489 | return $return; |
||
| 1490 | } |
||
| 1491 | |||
| 1492 | |||
| 1493 | /** |
||
| 1494 | * Save posted data |
||
| 1495 | */ |
||
| 1496 | public static function save() |
||
| 1497 | { |
||
| 1498 | global $babBody; |
||
| 1499 | |||
| 1500 | if (absences_lockedForMainteance()) |
||
| 1501 | { |
||
| 1502 | return false; |
||
| 1503 | } |
||
| 1504 | |||
| 1505 | |||
| 1506 | $id_request = (int) $_POST['id']; |
||
| 1507 | $id_user = (int) $_POST['id_user']; |
||
| 1508 | $rfrom = $_POST['rfrom']; |
||
| 1509 | |||
| 1510 | if( $rfrom == 1 ) |
||
| 1511 | { |
||
| 1512 | $agent = absences_Agent::getCurrentUser(); |
||
| 1513 | if( !$agent->isManager()) |
||
| 1514 | { |
||
| 1515 | $rfrom = 0; |
||
| 1516 | } |
||
| 1517 | } |
||
| 1518 | |||
| 1519 | |||
| 1520 | |||
| 1521 | if (isset($_POST['period']) && is_array($_POST['period'])) |
||
| 1522 | { |
||
| 1523 | // recurring request |
||
| 1524 | |||
| 1525 | $period_list = $_POST['period']; |
||
| 1526 | $folder = count($period_list) > 1 ? time() : 0; |
||
| 1527 | $period_list_id = array(); |
||
| 1528 | |||
| 1529 | } else if (isset($_POST['upd_recurring']) && $id_request > 0) |
||
| 1530 | { |
||
| 1531 | |||
| 1532 | // update recurring request |
||
| 1533 | |||
| 1534 | require_once dirname(__FILE__).'/utilit/entry.class.php'; |
||
| 1535 | $entry = absences_Entry::getById($id_request); |
||
| 1536 | |||
| 1537 | $folder = (int) $entry->folder; |
||
| 1538 | |||
| 1539 | $period_list = array( |
||
| 1540 | $_POST['begin'] => $_POST['end'] |
||
| 1541 | ); |
||
| 1542 | |||
| 1543 | $period_list_id = array( |
||
| 1544 | $_POST['begin'] => $id_request |
||
| 1545 | ); |
||
| 1546 | |||
| 1547 | $list = self::selectFolderSimilarRequests($entry); |
||
| 1548 | |||
| 1549 | foreach($list as $e) |
||
| 1550 | { |
||
| 1551 | $period_list[$e->date_begin] = $e->date_end; |
||
| 1552 | $period_list_id[$e->date_begin] = $e->id; |
||
| 1553 | } |
||
| 1554 | |||
| 1555 | |||
| 1556 | |||
| 1557 | } else { |
||
| 1558 | |||
| 1559 | $period_list = array( |
||
| 1560 | $_POST['begin'] => $_POST['end'] |
||
| 1561 | ); |
||
| 1562 | |||
| 1563 | $period_list_id = array( |
||
| 1564 | $_POST['begin'] => $id_request |
||
| 1565 | ); |
||
| 1566 | |||
| 1567 | $folder = 0; |
||
| 1568 | } |
||
| 1569 | |||
| 1570 | $allow_mismatch = absences_getVacationOption('allow_mismatch'); |
||
| 1571 | |||
| 1572 | if (!$allow_mismatch) { |
||
| 1573 | // T9957 verification supplementaire pour les incoherence dans le nombre de jours |
||
| 1574 | $period_nbdays = str_replace(',', '.', $_POST['period_nbdays']); |
||
| 1575 | $req_nbdays = str_replace(',', '.', $_POST['total']['D']); |
||
| 1576 | |||
| 1577 | if (!absences_cq($period_nbdays, $req_nbdays)) { |
||
| 1578 | $babBody->addError(absences_translate('Total number of affected days does not match the period.')); |
||
| 1579 | return false; |
||
| 1580 | } |
||
| 1581 | } |
||
| 1582 | |||
| 1583 | /** |
||
| 1584 | * Les droits utilises pour les tests sont les droits affiches a l'ecran |
||
| 1585 | * dans une demande repetitive, c'est la premiere periode qui est utilise pour les tests d'affichage |
||
| 1586 | */ |
||
| 1587 | $rights = absences_getRightsOnPeriod(key($period_list), reset($period_list), $id_user, $rfrom); |
||
| 1588 | |||
| 1589 | // test phase |
||
| 1590 | |||
| 1591 | $used_in_previous_periods = array(); |
||
| 1592 | |||
| 1593 | |||
| 1594 | $nbdays = null; |
||
| 1595 | |||
| 1596 | |||
| 1597 | foreach($period_list as $begin => $end) |
||
| 1598 | { |
||
| 1599 | $id_request = isset($period_list_id[$begin]) ? $period_list_id[$begin] : 0; |
||
| 1600 | |||
| 1601 | |||
| 1602 | try { |
||
| 1603 | // la repartition des jours sur les droits |
||
| 1604 | $_nbdays = self::testRightsQuantity($id_request, $rights, $used_in_previous_periods); |
||
| 1605 | if (!isset($nbdays)) { |
||
| 1606 | $nbdays = $_nbdays; |
||
| 1607 | } |
||
| 1608 | |||
| 1609 | } catch (Exception $e) |
||
| 1610 | { |
||
| 1611 | $babBody->addError($e->getMessage()); |
||
| 1612 | return false; |
||
| 1613 | } |
||
| 1614 | |||
| 1615 | |||
| 1616 | // verifier que le droit est dispo sur la periode |
||
| 1617 | // utile pour les demandes repetitives |
||
| 1618 | if (!test_periodValidity($id_request, $id_user, bab_mktime($begin), bab_mktime($end))) { |
||
| 1619 | return false; |
||
| 1620 | } |
||
| 1621 | |||
| 1622 | try { |
||
| 1623 | self::testRightsAvailability($rights, $nbdays, $begin, $end); |
||
| 1624 | } catch (Exception $e) |
||
| 1625 | { |
||
| 1626 | $babBody->addError($e->getMessage()); |
||
| 1627 | return false; |
||
| 1628 | } |
||
| 1629 | } |
||
| 1630 | |||
| 1631 | |||
| 1632 | if (!isset($nbdays)) { |
||
| 1633 | throw new Exception('missing quantity'); |
||
| 1634 | } |
||
| 1635 | |||
| 1636 | |||
| 1637 | |||
| 1638 | // save phase |
||
| 1639 | $saved = false; |
||
| 1640 | foreach ($period_list as $begin => $end) { |
||
| 1641 | $id_request = isset($period_list_id[$begin]) ? $period_list_id[$begin] : 0; |
||
| 1642 | |||
| 1643 | if (self::savePeriod($id_request, $begin, $end, $id_user, $rfrom, $nbdays, $folder)) { |
||
| 1644 | $saved = true; |
||
| 1645 | } |
||
| 1646 | } |
||
| 1647 | |||
| 1648 | |||
| 1649 | if ($saved && !isset($_POST['previsional'])) |
||
| 1650 | { |
||
| 1651 | $defer = (bool) absences_getVacationOption('approb_email_defer'); |
||
| 1652 | if (!$defer) { |
||
| 1653 | require_once dirname(__FILE__).'/utilit/request.notify.php'; |
||
| 1654 | absences_notifyRequestApprovers(); |
||
| 1655 | } |
||
| 1656 | } |
||
| 1657 | |||
| 1658 | return true; |
||
| 1659 | } |
||
| 1660 | |||
| 1661 | |||
| 1662 | |||
| 1663 | |||
| 1664 | |||
| 1665 | |||
| 1666 | |||
| 1667 | /** |
||
| 1668 | * Test des soldes |
||
| 1669 | * retourne la liste des droit qui devons etre inseres ou false si la demande n'est pas autorise |
||
| 1670 | * |
||
| 1671 | * @throws Exception |
||
| 1672 | * |
||
| 1673 | * @return array | false |
||
| 1674 | */ |
||
| 1675 | private static function testRightsQuantity($id_request, $rights, &$used_in_previous_periods) |
||
| 1676 | { |
||
| 1677 | |||
| 1678 | |||
| 1679 | $rgroups = array(); |
||
| 1680 | $nbdays = array( |
||
| 1681 | 'id' => array(), |
||
| 1682 | 'val' => array(), |
||
| 1683 | 'total' => array( |
||
| 1684 | 'D' => 0, |
||
| 1685 | 'H' => 0 |
||
| 1686 | ) |
||
| 1687 | ); |
||
| 1688 | |||
| 1689 | // regular vacation rights |
||
| 1690 | foreach($rights as &$arr) |
||
| 1691 | { |
||
| 1692 | if( isset($_POST['quantity'][$arr['id']])) |
||
| 1693 | { |
||
| 1694 | $quantity = $_POST['quantity'][$arr['id']]; |
||
| 1695 | if (!self::addVacationRight($nbdays, $arr, $quantity, $id_request, $used_in_previous_periods)) |
||
| 1696 | { |
||
| 1697 | return false; |
||
| 1698 | } |
||
| 1699 | } |
||
| 1700 | |||
| 1701 | if ($arr['id_rgroup'] > 0) { |
||
| 1702 | $rgroups[$arr['id']] = $arr['id_rgroup']; |
||
| 1703 | } |
||
| 1704 | } |
||
| 1705 | |||
| 1706 | // right groups |
||
| 1707 | |||
| 1708 | if (isset($_POST['rgroup_right'])) { |
||
| 1709 | foreach($_POST['rgroup_right'] as $id_rgroup => $id_right) { |
||
| 1710 | if (isset($rgroups[$id_right]) && $rgroups[$id_right] == $id_rgroup) { |
||
| 1711 | $quantity = $_POST['rgroup_value'][$id_rgroup]; |
||
| 1712 | |||
| 1713 | if (!self::addVacationRight($nbdays, $rights[$id_right], $quantity, $id_request, $used_in_previous_periods)) |
||
| 1714 | { |
||
| 1715 | return false; |
||
| 1716 | } |
||
| 1717 | } |
||
| 1718 | } |
||
| 1719 | } |
||
| 1720 | |||
| 1721 | if (empty($nbdays['val'])) |
||
| 1722 | { |
||
| 1723 | throw new Exception(absences_translate("Empty requests are not allowed")); |
||
| 1724 | } |
||
| 1725 | |||
| 1726 | |||
| 1727 | $days = 0.0; |
||
| 1728 | $hours = 0.0; |
||
| 1729 | |||
| 1730 | View Code Duplication | if (isset($_POST['total']['D'])) { |
|
|
0 ignored issues
–
show
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...
|
|||
| 1731 | $days = (float) str_replace(',', '.', $_POST['total']['D']); |
||
| 1732 | } |
||
| 1733 | |||
| 1734 | View Code Duplication | if (isset($_POST['total']['H'])) { |
|
|
0 ignored issues
–
show
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...
|
|||
| 1735 | $hours = (float) str_replace(',', '.', $_POST['total']['H']); |
||
| 1736 | } |
||
| 1737 | |||
| 1738 | |||
| 1739 | |||
| 1740 | |||
| 1741 | View Code Duplication | if ($nbdays['total']['D'] > 0 && !absences_cq($nbdays['total']['D'], $days)) { |
|
|
0 ignored issues
–
show
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...
|
|||
| 1742 | throw new Exception(absences_translate("Quantities must match total days")); |
||
| 1743 | } |
||
| 1744 | |||
| 1745 | View Code Duplication | if ($nbdays['total']['H'] > 0 && !absences_cq($nbdays['total']['H'], $hours)) { |
|
|
0 ignored issues
–
show
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...
|
|||
| 1746 | throw new Exception(absences_translate("Quantities must match total hours")); |
||
| 1747 | } |
||
| 1748 | |||
| 1749 | return $nbdays; |
||
| 1750 | } |
||
| 1751 | |||
| 1752 | |||
| 1753 | |||
| 1754 | /** |
||
| 1755 | * Tester pour une periode si les droits avec une quantite saisie est disponibe |
||
| 1756 | * |
||
| 1757 | * @param array $rights Array from absences_getRightsOnPeriod |
||
| 1758 | * @param array $nbdays |
||
| 1759 | * @param string $begin ISO datetime |
||
| 1760 | * @param string $end ISO datetime |
||
| 1761 | * |
||
| 1762 | * @throws Exception |
||
| 1763 | * |
||
| 1764 | * @return bool |
||
| 1765 | */ |
||
| 1766 | private static function testRightsAvailability(Array $rights, Array $nbdays, $begin, $end) |
||
| 1767 | { |
||
| 1768 | $begin_ts = bab_mktime($begin); |
||
| 1769 | $end_ts = bab_mktime($end); |
||
| 1770 | |||
| 1771 | |||
| 1772 | foreach($nbdays['id'] as $k => $id_right) |
||
| 1773 | { |
||
| 1774 | if (isset($nbdays['val'][$k]) && !empty($nbdays['val'][$k])) |
||
| 1775 | { |
||
| 1776 | $agentRight = $rights[$id_right]['agentRight']; |
||
| 1777 | |||
| 1778 | |||
| 1779 | |||
| 1780 | if (!$agentRight->isAccessibleOnPeriod($begin_ts, $end_ts)) |
||
| 1781 | { |
||
| 1782 | throw new Exception(sprintf( |
||
| 1783 | absences_translate('The right "%s" is not accessible %s, in a recurring request, all periods must be inside the used right validity period'), |
||
| 1784 | $rights[$id_right]['description'], |
||
| 1785 | mb_strtolower(absences_DateTimePeriod($begin, $end)) |
||
| 1786 | )); |
||
| 1787 | } |
||
| 1788 | |||
| 1789 | if (!$agentRight->isAccessibleOnDelay($begin_ts)) |
||
| 1790 | { |
||
| 1791 | $right = $agentRight->getRight(); |
||
| 1792 | $rightRule = $right->getRightRule(); |
||
| 1793 | |||
| 1794 | throw new Exception(sprintf( |
||
| 1795 | absences_translate('The right "%s" is not accessible in the next %s days'), |
||
| 1796 | $right[$id_right]['description'], |
||
| 1797 | $rightRule->delay_before |
||
| 1798 | )); |
||
| 1799 | } |
||
| 1800 | } |
||
| 1801 | } |
||
| 1802 | |||
| 1803 | return true; |
||
| 1804 | } |
||
| 1805 | |||
| 1806 | |||
| 1807 | |||
| 1808 | private static function getPeriodSpanOnEdit($old_date_begin, $old_date_end, BAB_DateTime $date_begin, BAB_DateTime $date_end) |
||
| 1809 | { |
||
| 1810 | $old_date_begin_obj = BAB_DateTime::fromIsoDateTime($old_date_begin); |
||
| 1811 | $old_date_end_obj = BAB_DateTime::fromIsoDateTime($old_date_end); |
||
| 1812 | |||
| 1813 | $old_date_begin = $old_date_begin_obj->getTimeStamp(); |
||
| 1814 | $old_date_end = $old_date_end_obj->getTimeStamp(); |
||
| 1815 | |||
| 1816 | $new_date_begin = $date_begin->getTimeStamp(); |
||
| 1817 | $new_date_end = $date_end->getTimeStamp(); |
||
| 1818 | |||
| 1819 | $period_begin = $old_date_begin < $new_date_begin ? $old_date_begin : $new_date_begin; |
||
| 1820 | $period_end = $old_date_end > $new_date_end ? $old_date_end : $new_date_end; |
||
| 1821 | |||
| 1822 | return array($period_begin, $period_end); |
||
| 1823 | } |
||
| 1824 | |||
| 1825 | |||
| 1826 | |||
| 1827 | /** |
||
| 1828 | * Save in calendar |
||
| 1829 | * |
||
| 1830 | * |
||
| 1831 | * @param int $id_request |
||
| 1832 | * @param BAB_DateTime | null $old_date_begin_obj |
||
| 1833 | * @param BAB_DateTime | null $old_date_end_obj |
||
| 1834 | */ |
||
| 1835 | private static function saveInCalendar($id_request, $id, $old_date_begin_obj, $old_date_end_obj) |
||
| 1836 | { |
||
| 1837 | if (empty($id_request)) { |
||
| 1838 | // event creation |
||
| 1839 | absences_createPeriod($id); |
||
| 1840 | |||
| 1841 | } else { |
||
| 1842 | // event modification |
||
| 1843 | absences_updatePeriod($id, $old_date_begin_obj, $old_date_end_obj); |
||
| 1844 | } |
||
| 1845 | } |
||
| 1846 | |||
| 1847 | |||
| 1848 | /** |
||
| 1849 | * |
||
| 1850 | * @param string $begin ISO datetime |
||
| 1851 | * @param string $end ISO datetime |
||
| 1852 | * @param int $id_user Request owner |
||
| 1853 | * @param int $rfrom rfrom=1 if modification from a manager and from the back-office |
||
| 1854 | * @return boolean |
||
| 1855 | */ |
||
| 1856 | private static function savePeriod($id_request, $begin, $end, $id_user, $rfrom, $nbdays, $folder = 0) |
||
| 1857 | { |
||
| 1858 | require_once $GLOBALS['babInstallPath'].'utilit/dateTime.php'; |
||
| 1859 | require_once dirname(__FILE__).'/utilit/entry.class.php'; |
||
| 1860 | require_once dirname(__FILE__).'/utilit/entry_elem.class.php'; |
||
| 1861 | global $babBody; |
||
| 1862 | |||
| 1863 | |||
| 1864 | |||
| 1865 | $remarks = $_POST['remarks']; |
||
| 1866 | |||
| 1867 | |||
| 1868 | $date_begin = BAB_DateTime::fromIsoDateTime($begin); |
||
| 1869 | $date_end = BAB_DateTime::fromIsoDateTime($end); |
||
| 1870 | $status = isset($_POST['previsional']) ? 'P' : 'Y'; |
||
| 1871 | |||
| 1872 | |||
| 1873 | |||
| 1874 | |||
| 1875 | if (empty($id_request)) { |
||
| 1876 | // event creation |
||
| 1877 | |||
| 1878 | $entry = new absences_Entry; |
||
| 1879 | $entry->id_user = $id_user; |
||
| 1880 | $entry->createdBy = bab_getUserId(); |
||
| 1881 | $entry->date_begin = $begin; |
||
| 1882 | $entry->date_end = $end; |
||
| 1883 | $entry->comment = $remarks; |
||
| 1884 | $entry->createdOn = date('Y-m-d H:i:s'); |
||
| 1885 | $entry->idfai = 0; |
||
| 1886 | $entry->status = $status; |
||
| 1887 | $entry->folder = $folder; |
||
| 1888 | |||
| 1889 | $entry->save(); |
||
| 1890 | |||
| 1891 | $id = $entry->id; |
||
| 1892 | |||
| 1893 | $period_begin = bab_mktime($begin); |
||
| 1894 | $period_end = bab_mktime($end); |
||
| 1895 | |||
| 1896 | $old_date_begin_obj = null; |
||
| 1897 | $old_date_end_obj = null; |
||
| 1898 | |||
| 1899 | |||
| 1900 | } |
||
| 1901 | else { |
||
| 1902 | // event modification |
||
| 1903 | |||
| 1904 | $entry = absences_Entry::getById($id_request); |
||
| 1905 | |||
| 1906 | $old_date_begin = $entry->date_begin; |
||
| 1907 | $old_date_end = $entry->date_end; |
||
| 1908 | |||
| 1909 | if ($entry->idfai > 0) { |
||
| 1910 | deleteFlowInstance($entry->idfai); |
||
| 1911 | } |
||
| 1912 | |||
| 1913 | $entry->date_begin = $date_begin->getIsoDateTime(); |
||
| 1914 | $entry->date_end = $date_end->getIsoDateTime(); |
||
| 1915 | $entry->comment = $remarks; |
||
| 1916 | $entry->idfai = 0; |
||
| 1917 | $entry->status = $status; |
||
| 1918 | |||
| 1919 | $entry->save(); |
||
| 1920 | |||
| 1921 | $entry->loadElements(); |
||
| 1922 | |||
| 1923 | $id = $id_request; |
||
| 1924 | |||
| 1925 | |||
| 1926 | list($period_begin, $period_end) = self::getPeriodSpanOnEdit($old_date_begin, $old_date_end, $date_begin, $date_end); |
||
| 1927 | |||
| 1928 | $old_date_begin_obj = BAB_DateTime::fromIsoDateTime($old_date_begin); |
||
| 1929 | $old_date_end_obj = BAB_DateTime::fromIsoDateTime($old_date_end); |
||
| 1930 | } |
||
| 1931 | |||
| 1932 | |||
| 1933 | // insert rights |
||
| 1934 | |||
| 1935 | $saved_rights = array(); |
||
| 1936 | |||
| 1937 | if (isset($nbdays['id'])) { |
||
| 1938 | $count = count($nbdays['id']); |
||
| 1939 | for( $i = 0; $i < $count; $i++) { |
||
| 1940 | |||
| 1941 | $id_right = $nbdays['id'][$i]; |
||
| 1942 | $saved_rights[$id_right] = $id_right; |
||
| 1943 | |||
| 1944 | $elem = $entry->getElement($id_right); |
||
| 1945 | if (!isset($elem)) { |
||
| 1946 | $elem = new absences_EntryElem(); |
||
| 1947 | $elem->setEntry($entry); |
||
| 1948 | $entry->addElement($elem); |
||
| 1949 | } |
||
| 1950 | |||
| 1951 | $elem->id_right = $id_right; |
||
| 1952 | $elem->date_begin = '0000-00-00 00:00:00'; |
||
| 1953 | $elem->date_end = '0000-00-00 00:00:00'; |
||
| 1954 | $elem->quantity = $nbdays['val'][$i]; |
||
| 1955 | } |
||
| 1956 | } |
||
| 1957 | |||
| 1958 | // remove elements set to zero |
||
| 1959 | foreach($entry->getElements() as $element) { |
||
| 1960 | if (!isset($saved_rights[$element->id_right])) { |
||
| 1961 | $element->delete(); |
||
| 1962 | } |
||
| 1963 | } |
||
| 1964 | |||
| 1965 | $entry->setElementsDates(); |
||
| 1966 | $entry->saveElements(); |
||
| 1967 | $entry->createPlannedPeriods(); |
||
| 1968 | $entry->savePlannedPeriods(); |
||
| 1969 | |||
| 1970 | |||
| 1971 | // set period into calendar backend if necessary |
||
| 1972 | try { |
||
| 1973 | self::saveInCalendar($id_request, $id, $old_date_begin_obj, $old_date_end_obj); |
||
| 1974 | } catch (Exception $e) { |
||
| 1975 | // ex: caldav is not accessible |
||
| 1976 | |||
| 1977 | /*@var $babBody babBody */ |
||
| 1978 | $babBody->addNextPageError(sprintf(absences_translate('Failed to save event in calendar: %s'), $e->getMessage())); |
||
| 1979 | } |
||
| 1980 | |||
| 1981 | |||
| 1982 | include_once $GLOBALS['babInstallPath']."utilit/eventperiod.php"; |
||
| 1983 | $event = new bab_eventPeriodModified($period_begin, $period_end, $id_user); |
||
| 1984 | $event->types = BAB_PERIOD_VACATION; |
||
| 1985 | bab_fireEvent($event); |
||
| 1986 | |||
| 1987 | |||
| 1988 | |||
| 1989 | |||
| 1990 | if (!isset($_POST['previsional'])) |
||
| 1991 | { |
||
| 1992 | $author = absences_Agent::getCurrentUser(); |
||
| 1993 | $approbCreated = false; |
||
| 1994 | $startApproval = true; |
||
| 1995 | |||
| 1996 | if ($author->isManager()) { |
||
| 1997 | if (isset($_POST['force_approval'])) { // checkbox does not exists if manager create his own request |
||
| 1998 | $startApproval = (bool) bab_pp('force_approval'); |
||
| 1999 | } |
||
| 2000 | } |
||
| 2001 | |||
| 2002 | |||
| 2003 | if ($startApproval) { |
||
| 2004 | // create approbation |
||
| 2005 | if (self::createInstance($entry, !empty($id_request))) { |
||
| 2006 | $approbCreated = true; |
||
| 2007 | } |
||
| 2008 | } else { |
||
| 2009 | self::addNoApprovalMovement($entry, !empty($id_request)); |
||
| 2010 | } |
||
| 2011 | |||
| 2012 | if (!$approbCreated) |
||
| 2013 | { |
||
| 2014 | // ex : retirer des RTT en fonction des arret maladie, l'absences maladie est cree par le gestionnaire sans approbation |
||
| 2015 | $entry->applyDynamicRight(); |
||
| 2016 | |||
| 2017 | // notify owner and other emails about the confirmed vacation request |
||
| 2018 | $entry->notifyOwner(); |
||
| 2019 | } |
||
| 2020 | |||
| 2021 | if (!empty($id_request)) |
||
| 2022 | { |
||
| 2023 | // notification de modification |
||
| 2024 | $entry = absences_Entry::getById($id); |
||
| 2025 | absences_notifyOnRequestChange(array($entry), $entry->id_user); |
||
| 2026 | absences_notifyManagers::send($id); |
||
| 2027 | } |
||
| 2028 | |||
| 2029 | } else { |
||
| 2030 | self::addPrevisionalMovement($entry, !empty($id_request)); |
||
| 2031 | } |
||
| 2032 | |||
| 2033 | |||
| 2034 | |||
| 2035 | return true; |
||
| 2036 | } |
||
| 2037 | |||
| 2038 | |||
| 2039 | |||
| 2040 | public static function submitRequest($id) |
||
| 2041 | { |
||
| 2042 | require_once dirname(__FILE__).'/utilit/entry.class.php'; |
||
| 2043 | global $babBody; |
||
| 2044 | |||
| 2045 | $entry = absences_Entry::getById($id); |
||
| 2046 | |||
| 2047 | try { |
||
| 2048 | $entry->checkAvailable(); |
||
| 2049 | } catch(Exception $e) { |
||
| 2050 | $babBody->addNextPageError($e->getMessage()); |
||
| 2051 | return false; |
||
| 2052 | } |
||
| 2053 | |||
| 2054 | if (!self::createInstance($entry)) { |
||
| 2055 | // ex : retirer des RTT en fonction des arret maladie, l'absences maladie est cree par le gestionnaire sans approbation |
||
| 2056 | $entry->applyDynamicRight(); |
||
| 2057 | |||
| 2058 | // notify owner and other emails about the confirmed vacation request |
||
| 2059 | $entry->notifyOwner(); |
||
| 2060 | } |
||
| 2061 | } |
||
| 2062 | |||
| 2063 | |||
| 2064 | |||
| 2065 | View Code Duplication | protected static function addPrevisionalMovement($entry, $modify) |
|
|
0 ignored issues
–
show
This method 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...
|
|||
| 2066 | { |
||
| 2067 | if ($modify) |
||
| 2068 | { |
||
| 2069 | $text = absences_translate('The previsional %s has been modified without approval'); |
||
| 2070 | } else { |
||
| 2071 | $text = absences_translate('The previsional %s has been created without approval'); |
||
| 2072 | } |
||
| 2073 | |||
| 2074 | $entry->addMovement(sprintf($text, $entry->getTitle())); |
||
| 2075 | } |
||
| 2076 | |||
| 2077 | |||
| 2078 | View Code Duplication | protected static function addNoApprovalMovement($entry, $modify) |
|
|
0 ignored issues
–
show
This method 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...
|
|||
| 2079 | { |
||
| 2080 | if ($modify) |
||
| 2081 | { |
||
| 2082 | $text = absences_translate('The %s has been modified without approval'); |
||
| 2083 | } else { |
||
| 2084 | $text = absences_translate('The %s has been created without approval'); |
||
| 2085 | } |
||
| 2086 | |||
| 2087 | $entry->addMovement(sprintf($text, $entry->getTitle())); |
||
| 2088 | } |
||
| 2089 | |||
| 2090 | |||
| 2091 | /** |
||
| 2092 | * Create approbation instance, set status in waiting state |
||
| 2093 | * @param absences_Entry $entry |
||
| 2094 | * @param bool $modify |
||
| 2095 | * |
||
| 2096 | * @return bool |
||
| 2097 | */ |
||
| 2098 | public static function createInstance(absences_Entry $entry, $modify = false) |
||
| 2099 | { |
||
| 2100 | require_once dirname(__FILE__).'/utilit/request.notify.php'; |
||
| 2101 | global $babBody; |
||
| 2102 | |||
| 2103 | |||
| 2104 | |||
| 2105 | if (!$entry->requireApproval()) |
||
| 2106 | { |
||
| 2107 | |||
| 2108 | self::addNoApprovalMovement($entry, $modify); |
||
| 2109 | return false; |
||
| 2110 | } else { |
||
| 2111 | |||
| 2112 | |||
| 2113 | if ($modify) |
||
| 2114 | { |
||
| 2115 | $text = absences_translate('The %s has been modified'); |
||
| 2116 | } else { |
||
| 2117 | $text = absences_translate('The %s has been created'); |
||
| 2118 | } |
||
| 2119 | |||
| 2120 | $entry->addMovement(sprintf($text, $entry->getTitle())); |
||
| 2121 | } |
||
| 2122 | |||
| 2123 | |||
| 2124 | if (!$entry->createApprobationInstance()) { |
||
| 2125 | // impossible de crer une instance, |
||
| 2126 | // l'utilisateur peut etre en auto-approbation ou le schema ne retourne aucun approbateur |
||
| 2127 | $entry->status = 'Y'; |
||
| 2128 | $entry->onConfirm(); |
||
| 2129 | $entry->save(); |
||
| 2130 | return false; |
||
| 2131 | } |
||
| 2132 | |||
| 2133 | |||
| 2134 | |||
| 2135 | return true; |
||
| 2136 | } |
||
| 2137 | |||
| 2138 | |||
| 2139 | |||
| 2140 | View Code Duplication | public static function gotoList() |
|
|
0 ignored issues
–
show
This method 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...
|
|||
| 2141 | { |
||
| 2142 | require_once $GLOBALS['babInstallPath'].'utilit/urlincl.php'; |
||
| 2143 | |||
| 2144 | $url = bab_url::get_request('tg'); |
||
| 2145 | $url->idx = 'lvreq'; |
||
| 2146 | $url->location(); |
||
| 2147 | } |
||
| 2148 | |||
| 2149 | } |
||
| 2150 | |||
| 2151 | |||
| 2152 | |||
| 2153 | |||
| 2154 | |||
| 2155 | |||
| 2156 | |||
| 2157 | |||
| 2158 | /** |
||
| 2159 | * Test period validity |
||
| 2160 | * verifie qu'il n'y a pas de chevauchements de periodes |
||
| 2161 | * |
||
| 2162 | * @param int $id_entry |
||
| 2163 | * @param int $id_user |
||
| 2164 | * @param int $begin |
||
| 2165 | * @param int $end |
||
| 2166 | * @return boolean |
||
| 2167 | */ |
||
| 2168 | function test_periodValidity($id_entry,$id_user,$begin,$end) |
||
| 2169 | { |
||
| 2170 | global $babBody, $babDB; |
||
| 2171 | |||
| 2172 | if( $begin >= $end) |
||
| 2173 | { |
||
| 2174 | $babBody->msgerror = absences_translate("ERROR: End date must be older")." !"; |
||
| 2175 | return false; |
||
| 2176 | } |
||
| 2177 | |||
| 2178 | |||
| 2179 | $date_begin = date('Y-m-d H:i:s',$begin); |
||
| 2180 | $date_end = date('Y-m-d H:i:s',$end); |
||
| 2181 | |||
| 2182 | $req = "SELECT |
||
| 2183 | COUNT(*) |
||
| 2184 | FROM ".ABSENCES_ENTRIES_TBL." |
||
| 2185 | WHERE |
||
| 2186 | id_user='".$babDB->db_escape_string($id_user)."' |
||
| 2187 | AND date_begin < '".$babDB->db_escape_string($date_end)."' |
||
| 2188 | AND date_end > '".$babDB->db_escape_string($date_begin)."' |
||
| 2189 | AND id <> '".$babDB->db_escape_string($id_entry)."' |
||
| 2190 | AND status<>'N'"; |
||
| 2191 | |||
| 2192 | $res = $babDB->db_query($req); |
||
| 2193 | list($n) = $babDB->db_fetch_array($res); |
||
| 2194 | |||
| 2195 | if ($n > 0) { |
||
| 2196 | $babBody->msgerror = absences_translate("ERROR: a request is already defined on this period"); |
||
| 2197 | return false; |
||
| 2198 | } |
||
| 2199 | |||
| 2200 | return true; |
||
| 2201 | } |
||
| 2202 | |||
| 2203 | /** |
||
| 2204 | * Test period validaity from posted first step |
||
| 2205 | * @return boolean |
||
| 2206 | */ |
||
| 2207 | function test_period() |
||
| 2208 | { |
||
| 2209 | global $babBody; |
||
| 2210 | include_once $GLOBALS['babInstallPath']."utilit/dateTime.php"; |
||
| 2211 | |||
| 2212 | if (!isset($_POST['daybegin']) || |
||
| 2213 | !isset($_POST['monthbegin']) || |
||
| 2214 | !isset($_POST['yearbegin']) || |
||
| 2215 | !isset($_POST['hourbegin']) || |
||
| 2216 | !isset($_POST['dayend']) || |
||
| 2217 | !isset($_POST['monthend']) || |
||
| 2218 | !isset($_POST['yearend']) || |
||
| 2219 | !isset($_POST['hourend']) || |
||
| 2220 | !isset($_POST['id_user']) |
||
| 2221 | ) |
||
| 2222 | { |
||
| 2223 | $babBody->msgerror = absences_translate("Error"); |
||
| 2224 | return false; |
||
| 2225 | } |
||
| 2226 | |||
| 2227 | $yearbegin = $_POST['year'] + $_POST['yearbegin'] - 1; |
||
| 2228 | $yearend = $_POST['year'] + $_POST['yearend'] - 1; |
||
| 2229 | |||
| 2230 | $begin = BAB_DateTime::fromIsoDateTime($yearbegin.'-'.$_POST['monthbegin'].'-'.$_POST['daybegin'].' '.$_POST['hourbegin']); |
||
| 2231 | $end = BAB_DateTime::fromIsoDateTime($yearend.'-'.$_POST['monthend'].'-'.$_POST['dayend'].' '.$_POST['hourend']); |
||
| 2232 | |||
| 2233 | $id_entry = isset($_POST['id']) ? $_POST['id'] : 0; |
||
| 2234 | |||
| 2235 | return test_periodValidity($id_entry, $_POST['id_user'], $begin->getTimeStamp(), $end->getTimeStamp()); |
||
| 2236 | } |
||
| 2237 | |||
| 2238 | |||
| 2239 | |||
| 2240 | |||
| 2241 | /** |
||
| 2242 | * Get posted date from the first step edit form or from the hidden field |
||
| 2243 | * |
||
| 2244 | */ |
||
| 2245 | class absences_PostedDate |
||
| 2246 | { |
||
| 2247 | /** |
||
| 2248 | * @return string ISO datetime |
||
| 2249 | */ |
||
| 2250 | public static function begin() |
||
| 2251 | { |
||
| 2252 | if (isset($_POST['daybegin'])) |
||
| 2253 | { |
||
| 2254 | $yearbegin = $_POST['year'] + $_POST['yearbegin'] -1; |
||
| 2255 | return $yearbegin.'-'.$_POST['monthbegin'].'-'.$_POST['daybegin'].' '.$_POST['hourbegin']; |
||
| 2256 | } |
||
| 2257 | |||
| 2258 | if (isset($_POST['begin'])) |
||
| 2259 | { |
||
| 2260 | return $_POST['begin']; |
||
| 2261 | } |
||
| 2262 | |||
| 2263 | if (isset($_POST['period'])) |
||
| 2264 | { |
||
| 2265 | return key($_POST['period']); |
||
| 2266 | } |
||
| 2267 | } |
||
| 2268 | |||
| 2269 | /** |
||
| 2270 | * @return string ISO datetime |
||
| 2271 | */ |
||
| 2272 | public static function end() |
||
| 2273 | { |
||
| 2274 | if (isset($_POST['dayend'])) |
||
| 2275 | { |
||
| 2276 | |||
| 2277 | $yearend = $_POST['year'] + $_POST['yearend'] -1; |
||
| 2278 | return $yearend.'-'.$_POST['monthend'].'-'.$_POST['dayend'].' '.$_POST['hourend']; |
||
| 2279 | } |
||
| 2280 | |||
| 2281 | if (isset($_POST['end'])) |
||
| 2282 | { |
||
| 2283 | return $_POST['end']; |
||
| 2284 | } |
||
| 2285 | |||
| 2286 | if (isset($_POST['period'])) |
||
| 2287 | { |
||
| 2288 | return reset($_POST['period']); |
||
| 2289 | } |
||
| 2290 | } |
||
| 2291 | } |
||
| 2292 | |||
| 2293 | |||
| 2294 | |||
| 2295 | |||
| 2296 | View Code Duplication | function absences_workperiodGotoList() |
|
|
0 ignored issues
–
show
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...
|
|||
| 2297 | { |
||
| 2298 | $agent = absences_Agent::getCurrentUser(); |
||
| 2299 | |||
| 2300 | if (!empty($_POST['workperiod']['id_user'])) { |
||
| 2301 | |||
| 2302 | |||
| 2303 | if ($agent->isManager()) { |
||
| 2304 | $url = new bab_url(absences_addon()->getUrl().'vacadmwd'); |
||
| 2305 | $url->location(); |
||
| 2306 | return; |
||
| 2307 | } |
||
| 2308 | |||
| 2309 | //TODO: liste des demandes de l'entite si gestionnaire delegue |
||
| 2310 | } |
||
| 2311 | |||
| 2312 | $url = bab_url::get_request('tg'); |
||
| 2313 | $url->idx = 'lvreq'; |
||
| 2314 | $url->location(); |
||
| 2315 | } |
||
| 2316 | |||
| 2317 | |||
| 2318 | |||
| 2319 | |||
| 2320 | /** |
||
| 2321 | * Save form |
||
| 2322 | * @param array $workperiod |
||
| 2323 | * @param absences_WorkperiodRecoverRequest $workperiodRecover |
||
| 2324 | * @throws Exception |
||
| 2325 | */ |
||
| 2326 | function absences_saveWorkperiodRecoverRequest(Array $workperiod, absences_WorkperiodRecoverRequest $workperiodRecover = null) |
||
| 2327 | { |
||
| 2328 | $babBody = bab_getInstance('babBody'); |
||
| 2329 | /* @var $babBody babBody */ |
||
| 2330 | |||
| 2331 | if (absences_lockedForMainteance()) |
||
| 2332 | { |
||
| 2333 | return false; |
||
| 2334 | } |
||
| 2335 | |||
| 2336 | |||
| 2337 | if (!absences_WorkperiodRecoverRequest::checkForm($workperiod, $workperiodRecover)) |
||
| 2338 | { |
||
| 2339 | return false; |
||
| 2340 | } |
||
| 2341 | |||
| 2342 | |||
| 2343 | |||
| 2344 | |||
| 2345 | |||
| 2346 | $type = absences_WorkperiodType::getFromId($workperiod['id_type']); |
||
| 2347 | |||
| 2348 | if (!$type->getRow()) |
||
| 2349 | { |
||
| 2350 | throw new Exception(absences_translate('This type does not exits')); |
||
| 2351 | } |
||
| 2352 | |||
| 2353 | $agent = absences_Agent::getCurrentUser(); |
||
| 2354 | |||
| 2355 | if (!isset($workperiodRecover)) |
||
| 2356 | { |
||
| 2357 | $workperiodRecover = new absences_WorkperiodRecoverRequest(); |
||
| 2358 | |||
| 2359 | if (!empty($workperiod['id_user'])) { |
||
| 2360 | $spoofed = absences_Agent::getFromIdUser($workperiod['id_user']); |
||
| 2361 | if (!$agent->isManager() && !$agent->isSuperiorOf($spoofed)) { |
||
| 2362 | throw new Exception(absences_translate('This type does not exits')); |
||
| 2363 | } |
||
| 2364 | |||
| 2365 | $workperiodRecover->id_user = $spoofed->getIdUser(); |
||
| 2366 | |||
| 2367 | } else { |
||
| 2368 | $workperiodRecover->id_user = bab_getUserId(); |
||
| 2369 | } |
||
| 2370 | } |
||
| 2371 | |||
| 2372 | $workperiodRecover->date_begin = absences_dateTimeForm($workperiod['datebegin'], $workperiod['hourbegin']); |
||
| 2373 | $workperiodRecover->date_end = absences_dateTimeForm($workperiod['dateend'], $workperiod['hourend']); |
||
| 2374 | $workperiodRecover->id_type = $type->id; |
||
| 2375 | $workperiodRecover->comment = $workperiod['comment']; |
||
| 2376 | $workperiodRecover->quantity = $type->quantity; |
||
| 2377 | $workperiodRecover->quantity_unit = $type->quantity_unit; |
||
| 2378 | $workperiodRecover->status = 'Y'; |
||
| 2379 | $workperiodRecover->id_right = 0; |
||
| 2380 | $workperiodRecover->save(); |
||
| 2381 | |||
| 2382 | |||
| 2383 | if ($workperiodRecover->createApprobationInstance()) |
||
| 2384 | { |
||
| 2385 | $babBody->addNextPageMessage(absences_translate('Your workperiod recovery request has been sent for approval')); |
||
| 2386 | } else { |
||
| 2387 | $babBody->addNextPageMessage(absences_translate('Your workperiod recovery request has been saved without approval')); |
||
| 2388 | } |
||
| 2389 | |||
| 2390 | $defer = (bool) absences_getVacationOption('approb_email_defer'); |
||
| 2391 | |||
| 2392 | if (!$defer) |
||
| 2393 | { |
||
| 2394 | require_once dirname(__FILE__).'/utilit/request.notify.php'; |
||
| 2395 | absences_notifyRequestApprovers(); |
||
| 2396 | } |
||
| 2397 | |||
| 2398 | |||
| 2399 | absences_workperiodGotoList(); |
||
| 2400 | } |
||
| 2401 | |||
| 2402 | |||
| 2403 | |||
| 2404 | |||
| 2405 | |||
| 2406 | |||
| 2407 | |||
| 2408 | |||
| 2409 | |||
| 2410 | |||
| 2411 | /** |
||
| 2412 | * Display form |
||
| 2413 | */ |
||
| 2414 | function absences_createWorkperiodRecoverRequest() |
||
| 2415 | { |
||
| 2416 | require_once dirname(__FILE__).'/utilit/workperiod_recover_request.class.php'; |
||
| 2417 | require_once dirname(__FILE__).'/utilit/workperiod_recover_request.ui.php'; |
||
| 2418 | |||
| 2419 | |||
| 2420 | $babBody = bab_getBody(); |
||
| 2421 | |||
| 2422 | |||
| 2423 | |||
| 2424 | $agent = absences_Agent::getCurrentUser(); |
||
| 2425 | |||
| 2426 | if ($id_user = (int) bab_rp('id_user')) { |
||
| 2427 | $spoofed = absences_Agent::getFromIdUser($id_user); |
||
| 2428 | if (!$agent->isManager() && !$agent->isSuperiorOf($spoofed)) { |
||
| 2429 | return $babBody->addError('Spoofing failed workperiod recover request creation, you must be superior of the spoofed agent'); |
||
| 2430 | } |
||
| 2431 | |||
| 2432 | $agent = $spoofed; |
||
| 2433 | } |
||
| 2434 | |||
| 2435 | |||
| 2436 | |||
| 2437 | $request = null; |
||
| 2438 | $id = bab_rp('id', null); |
||
| 2439 | if (isset($id)) |
||
| 2440 | { |
||
| 2441 | $request = absences_WorkperiodRecoverRequest::getById($id); |
||
| 2442 | if (!$request->canModify()) |
||
| 2443 | { |
||
| 2444 | return; |
||
| 2445 | } |
||
| 2446 | } else if (!$agent->canCreateWorkperiodRecoverRequest()) { |
||
| 2447 | return $babBody->addError('Agent not allowed to create workperiod recover requests'); |
||
| 2448 | } |
||
| 2449 | |||
| 2450 | |||
| 2451 | if (!isset($request) && $id_user) { |
||
| 2452 | $request = new absences_WorkperiodRecoverRequest(); |
||
| 2453 | $request->id_user = $id_user; |
||
| 2454 | } |
||
| 2455 | |||
| 2456 | |||
| 2457 | $W = bab_Widgets(); |
||
| 2458 | $page = $W->BabPage(); |
||
| 2459 | |||
| 2460 | View Code Duplication | if (isset($_POST['workperiod'])) |
|
|
0 ignored issues
–
show
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...
|
|||
| 2461 | { |
||
| 2462 | if ( isset($_POST['workperiod']['cancel']) ) |
||
| 2463 | { |
||
| 2464 | absences_workperiodGotoList(); |
||
| 2465 | } |
||
| 2466 | |||
| 2467 | |||
| 2468 | if( isset($_POST['workperiod']['save'] )) |
||
| 2469 | { |
||
| 2470 | try { |
||
| 2471 | absences_saveWorkperiodRecoverRequest($_POST['workperiod'], $request); |
||
| 2472 | |||
| 2473 | } catch (Exception $e) |
||
| 2474 | { |
||
| 2475 | $page->addError($e->getMessage()); |
||
| 2476 | } |
||
| 2477 | } |
||
| 2478 | } |
||
| 2479 | |||
| 2480 | |||
| 2481 | $page->setTitle(absences_translate('Create a working days report entitling recovery')); |
||
| 2482 | |||
| 2483 | View Code Duplication | if (absences_lockedForMainteance()) |
|
|
0 ignored issues
–
show
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...
|
|||
| 2484 | { |
||
| 2485 | $page->addError(absences_getMaintenanceMessage()); |
||
| 2486 | |||
| 2487 | } else { |
||
| 2488 | |||
| 2489 | $editor = new absences_WorkperiodRecoverRequestEditor($request, isset($spoofed), false); |
||
| 2490 | $page->addItem($editor); |
||
| 2491 | |||
| 2492 | } |
||
| 2493 | |||
| 2494 | $page->displayHtml(); |
||
| 2495 | } |
||
| 2496 | |||
| 2497 | |||
| 2498 | |||
| 2499 | |||
| 2500 | View Code Duplication | function absences_cetGotoList() |
|
|
0 ignored issues
–
show
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...
|
|||
| 2501 | { |
||
| 2502 | $agent = absences_Agent::getCurrentUser(); |
||
| 2503 | |||
| 2504 | if (!empty($_POST['cet']['id_user'])) { |
||
| 2505 | |||
| 2506 | |||
| 2507 | if ($agent->isManager()) { |
||
| 2508 | $url = new bab_url(absences_addon()->getUrl().'vacadmcet'); |
||
| 2509 | $url->location(); |
||
| 2510 | return; |
||
| 2511 | } |
||
| 2512 | |||
| 2513 | //TODO: liste des demandes de l'entite si gestionnaire delegue |
||
| 2514 | } |
||
| 2515 | |||
| 2516 | $url = bab_url::get_request('tg'); |
||
| 2517 | $url->idx = 'lvreq'; |
||
| 2518 | $url->location(); |
||
| 2519 | } |
||
| 2520 | |||
| 2521 | |||
| 2522 | /** |
||
| 2523 | * Save a CET request |
||
| 2524 | * |
||
| 2525 | * |
||
| 2526 | * @param array $cet posted form |
||
| 2527 | * @param absences_CetDepositRequest $cet_deposit_request Current request to modify or null for new request |
||
| 2528 | */ |
||
| 2529 | function absences_saveCetDepositRequest(Array $cet, absences_CetDepositRequest $cet_deposit_request = null) |
||
| 2530 | { |
||
| 2531 | require_once $GLOBALS['babInstallPath'].'utilit/wfincl.php'; |
||
| 2532 | require_once dirname(__FILE__).'/utilit/agent_right.class.php'; |
||
| 2533 | |||
| 2534 | $babBody = bab_getInstance('babBody'); |
||
| 2535 | /* @var $babBody babBody */ |
||
| 2536 | |||
| 2537 | |||
| 2538 | if (absences_lockedForMainteance()) |
||
| 2539 | { |
||
| 2540 | return false; |
||
| 2541 | } |
||
| 2542 | |||
| 2543 | |||
| 2544 | $quantity = (float) str_replace(',', '.', $cet['quantity']); |
||
| 2545 | $agent_right = absences_AgentRight::getById((int) $cet['id_agent_right_source']); |
||
| 2546 | |||
| 2547 | |||
| 2548 | $agent = $agent_right->getAgent(); |
||
| 2549 | |||
| 2550 | if (!isset($cet['id_user']) && bab_getUserId() !== $agent->getIdUser()) |
||
| 2551 | { |
||
| 2552 | throw new Exception('Not accessible agentRight'); |
||
| 2553 | } |
||
| 2554 | |||
| 2555 | if (isset($cet['id_user'])) |
||
| 2556 | { |
||
| 2557 | $currentUser = absences_Agent::getCurrentUser(); |
||
| 2558 | if (!$currentUser->isManager() && !$currentUser->isSuperiorOf($agent)) { |
||
| 2559 | throw new Exception(absences_translate('Access denied to this account')); |
||
| 2560 | } |
||
| 2561 | } |
||
| 2562 | |||
| 2563 | |||
| 2564 | $AgentCet = $agent->Cet(); |
||
| 2565 | if (!$AgentCet->testDepositQuantity($agent_right, $quantity)) |
||
| 2566 | { |
||
| 2567 | return false; |
||
| 2568 | } |
||
| 2569 | |||
| 2570 | |||
| 2571 | |||
| 2572 | if (!isset($cet_deposit_request)) |
||
| 2573 | { |
||
| 2574 | // create the request |
||
| 2575 | $cet_deposit_request = new absences_CetDepositRequest(); |
||
| 2576 | } |
||
| 2577 | |||
| 2578 | $CetAgentRight = $AgentCet->getDepositAgentRight(true); |
||
| 2579 | if (!isset($CetAgentRight)) { |
||
| 2580 | throw new Exception(absences_translate('No active time saving account found for this account')); |
||
| 2581 | } |
||
| 2582 | |||
| 2583 | $cet_deposit_request->id_user = $agent->getIdUser(); |
||
| 2584 | $cet_deposit_request->id_agent_right_cet = $CetAgentRight->id; |
||
| 2585 | $cet_deposit_request->id_agent_right_source = $agent_right->id; |
||
| 2586 | $cet_deposit_request->quantity = $quantity; |
||
| 2587 | $cet_deposit_request->idfai = 0; |
||
| 2588 | $cet_deposit_request->comment = $cet['comment']; |
||
| 2589 | $cet_deposit_request->status = 'Y'; |
||
| 2590 | |||
| 2591 | $cet_deposit_request->save(); |
||
| 2592 | |||
| 2593 | |||
| 2594 | if ($cet_deposit_request->createApprobationInstance()) |
||
| 2595 | { |
||
| 2596 | $babBody->addNextPageMessage(absences_translate('Your time saving account deposit has been sent for approval')); |
||
| 2597 | } else { |
||
| 2598 | $babBody->addNextPageMessage(absences_translate('Your time saving account deposit has been saved without approval')); |
||
| 2599 | } |
||
| 2600 | |||
| 2601 | |||
| 2602 | $defer = (bool) absences_getVacationOption('approb_email_defer'); |
||
| 2603 | |||
| 2604 | if (!$defer) |
||
| 2605 | { |
||
| 2606 | require_once dirname(__FILE__).'/utilit/request.notify.php'; |
||
| 2607 | absences_notifyRequestApprovers(); |
||
| 2608 | } |
||
| 2609 | |||
| 2610 | absences_cetGotoList(); |
||
| 2611 | } |
||
| 2612 | |||
| 2613 | |||
| 2614 | |||
| 2615 | function absences_createCetDepositRequest() |
||
| 2616 | { |
||
| 2617 | require_once dirname(__FILE__).'/utilit/cet_deposit_request.class.php'; |
||
| 2618 | require_once dirname(__FILE__).'/utilit/cet_deposit_request.ui.php'; |
||
| 2619 | |||
| 2620 | $agent = absences_Agent::getCurrentUser(); |
||
| 2621 | |||
| 2622 | $id = bab_rp('id', null); |
||
| 2623 | $request = null; |
||
| 2624 | |||
| 2625 | $W = bab_Widgets(); |
||
| 2626 | $page = $W->BabPage(); |
||
| 2627 | |||
| 2628 | if (isset($id)) |
||
| 2629 | { |
||
| 2630 | $request = absences_CetDepositRequest::getById($id); |
||
| 2631 | if (!$request->canModify()) |
||
| 2632 | { |
||
| 2633 | $page->addError(absences_translate('This request is not modifiable')); |
||
| 2634 | $page->displayHtml(); |
||
| 2635 | return; |
||
| 2636 | } |
||
| 2637 | } elseif (bab_rp('id_user')) { |
||
| 2638 | |||
| 2639 | $request = new absences_CetDepositRequest(); |
||
| 2640 | $request->id_user = bab_rp('id_user'); |
||
| 2641 | $request->status = ''; |
||
| 2642 | $request->quantity = 0; |
||
| 2643 | |||
| 2644 | $agent = absences_Agent::getFromIdUser($request->id_user); |
||
| 2645 | |||
| 2646 | try { |
||
| 2647 | if (!$agent->Cet()->canAdd()) { |
||
| 2648 | $page->addError(sprintf(absences_translate('%s is not allowed to use time saving account'), $agent->getName())); |
||
| 2649 | $page->displayHtml(); |
||
| 2650 | return; |
||
| 2651 | } |
||
| 2652 | } catch (Exception $e) { |
||
| 2653 | $page->addError($e->getMessage()); |
||
| 2654 | $page->displayHtml(); |
||
| 2655 | return; |
||
| 2656 | } |
||
| 2657 | } |
||
| 2658 | |||
| 2659 | |||
| 2660 | |||
| 2661 | |||
| 2662 | |||
| 2663 | |||
| 2664 | |||
| 2665 | |||
| 2666 | View Code Duplication | if (isset($_POST['cet'])) |
|
|
0 ignored issues
–
show
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...
|
|||
| 2667 | { |
||
| 2668 | if ( isset($_POST['cet']['cancel']) ) |
||
| 2669 | { |
||
| 2670 | absences_cetGotoList(); |
||
| 2671 | } |
||
| 2672 | |||
| 2673 | |||
| 2674 | if( isset($_POST['cet']['save'] )) |
||
| 2675 | { |
||
| 2676 | try { |
||
| 2677 | absences_saveCetDepositRequest($_POST['cet'], $request); |
||
| 2678 | } catch (Exception $e) |
||
| 2679 | { |
||
| 2680 | $page->addError($e->getMessage()); |
||
| 2681 | } |
||
| 2682 | } |
||
| 2683 | } |
||
| 2684 | |||
| 2685 | if (isset($request) && $request->id) |
||
| 2686 | { |
||
| 2687 | $page->setTitle(absences_translate('Edit the time saving account deposit')); |
||
| 2688 | } else { |
||
| 2689 | $page->setTitle(absences_translate('Request a deposit in my time saving account')); |
||
| 2690 | } |
||
| 2691 | |||
| 2692 | View Code Duplication | if (absences_lockedForMainteance()) |
|
|
0 ignored issues
–
show
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...
|
|||
| 2693 | { |
||
| 2694 | $page->addError(absences_getMaintenanceMessage()); |
||
| 2695 | |||
| 2696 | } else { |
||
| 2697 | |||
| 2698 | $editor = new absences_CetDepositRequestEditor($request, isset($_REQUEST['id_user'])); |
||
| 2699 | $page->addItem($editor); |
||
| 2700 | } |
||
| 2701 | |||
| 2702 | $page->displayHtml(); |
||
| 2703 | } |
||
| 2704 | |||
| 2705 | |||
| 2706 | |||
| 2707 | |||
| 2708 | |||
| 2709 | |||
| 2710 | |||
| 2711 | /** |
||
| 2712 | * Display a menu to create vacation request, CET request, workingdays recovery request |
||
| 2713 | * @return string |
||
| 2714 | */ |
||
| 2715 | function absences_requestMenu() |
||
| 2716 | { |
||
| 2717 | $toolbar = absences_getToolbar(); |
||
| 2718 | $agent = absences_Agent::getCurrentUser(); |
||
| 2719 | $addon = absences_addon(); |
||
| 2720 | |||
| 2721 | $sImgPath = $GLOBALS['babInstallPath'] . 'skins/ovidentia/images/Puces/'; |
||
| 2722 | |||
| 2723 | |||
| 2724 | |||
| 2725 | $toolbar->addToolbarItem( |
||
| 2726 | new BAB_ToolbarItem(absences_translate('Request a vacation'), $addon->getUrl().'vacuser&idx=period', |
||
| 2727 | $sImgPath . 'edit_add.png', '', '', '') |
||
| 2728 | ); |
||
| 2729 | |||
| 2730 | View Code Duplication | if ($agent->canCreateWorkperiodRecoverRequest()) { |
|
|
0 ignored issues
–
show
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...
|
|||
| 2731 | $toolbar->addToolbarItem( |
||
| 2732 | new BAB_ToolbarItem(absences_translate("Recovery request"), $addon->getUrl().'vacuser&idx=workperiod', |
||
| 2733 | $sImgPath . 'edit_add.png', '', '', '') |
||
| 2734 | ); |
||
| 2735 | } |
||
| 2736 | |||
| 2737 | try { |
||
| 2738 | View Code Duplication | if ($agent->Cet()->canAdd()) { |
|
|
0 ignored issues
–
show
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...
|
|||
| 2739 | $toolbar->addToolbarItem( |
||
| 2740 | new BAB_ToolbarItem(absences_translate("Deposit on my time saving account"), $addon->getUrl().'vacuser&idx=cet', |
||
| 2741 | $sImgPath . 'edit_add.png', '', '', '') |
||
| 2742 | ); |
||
| 2743 | } |
||
| 2744 | } catch (Exception $e) { |
||
| 2745 | bab_debug($e->getMessage()); |
||
| 2746 | } |
||
| 2747 | return $toolbar->printTemplate(); |
||
| 2748 | } |
||
| 2749 | |||
| 2750 | |||
| 2751 | |||
| 2752 | function absences_personalMovements() |
||
| 2753 | { |
||
| 2754 | require_once dirname(__FILE__).'/utilit/agent.class.php'; |
||
| 2755 | require_once dirname(__FILE__).'/utilit/agent.ui.php'; |
||
| 2756 | |||
| 2757 | $babBody = bab_getBody(); |
||
| 2758 | $agent = absences_Agent::getCurrentUser(); |
||
| 2759 | |||
| 2760 | |||
| 2761 | $list = new absences_AgentMovementList($agent); |
||
| 2762 | |||
| 2763 | $babBody->setTitle(absences_translate('My history')); |
||
| 2764 | |||
| 2765 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 2766 | $babBody->addItemMenu("movement", absences_translate("History"), absences_addon()->getUrl()."vacuser&idx=movement"); |
||
| 2767 | |||
| 2768 | if (absences_getVacationOption('user_add_email')) |
||
| 2769 | { |
||
| 2770 | $babBody->addItemMenu("options", absences_translate("Options"), absences_addon()->getUrl()."vacuser&idx=options"); |
||
| 2771 | } |
||
| 2772 | |||
| 2773 | $babBody->babEcho($list->getHtml()); |
||
| 2774 | } |
||
| 2775 | |||
| 2776 | |||
| 2777 | |||
| 2778 | |||
| 2779 | /** |
||
| 2780 | * |
||
| 2781 | */ |
||
| 2782 | function absences_personalOptions() |
||
| 2783 | { |
||
| 2784 | global $babBody; |
||
| 2785 | |||
| 2786 | require_once dirname(__FILE__).'/utilit/agent.class.php'; |
||
| 2787 | require_once dirname(__FILE__).'/utilit/agent.ui.php'; |
||
| 2788 | require_once $GLOBALS['babInstallPath'].'utilit/urlincl.php'; |
||
| 2789 | |||
| 2790 | $agent = absences_Agent::getCurrentUser(); |
||
| 2791 | |||
| 2792 | |||
| 2793 | |||
| 2794 | |||
| 2795 | |||
| 2796 | $W = bab_Widgets(); |
||
| 2797 | $page = $W->BabPage(); |
||
| 2798 | |||
| 2799 | |||
| 2800 | if ($options = bab_pp('options')) |
||
| 2801 | { |
||
| 2802 | $emails = $options['emails']; |
||
| 2803 | $agent->setEmails($emails); |
||
| 2804 | |||
| 2805 | $babBody->addNextPageMessage(absences_translate('The emails were saved')); |
||
| 2806 | |||
| 2807 | $url = bab_url::get_request('tg', 'idx'); |
||
| 2808 | $url->location(); |
||
| 2809 | } |
||
| 2810 | |||
| 2811 | |||
| 2812 | |||
| 2813 | $page->setTitle(absences_translate('My options')); |
||
| 2814 | |||
| 2815 | $page->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 2816 | |||
| 2817 | if (absences_getVacationOption('display_personal_history')) |
||
| 2818 | { |
||
| 2819 | $page->addItemMenu("movement", absences_translate("History"), absences_addon()->getUrl()."vacuser&idx=movement"); |
||
| 2820 | } |
||
| 2821 | |||
| 2822 | $page->addItemMenu("options", absences_translate("Options"), absences_addon()->getUrl()."vacuser&idx=options"); |
||
| 2823 | |||
| 2824 | |||
| 2825 | $editor = new absences_PersonalOptionsEditor; |
||
| 2826 | $page->addItem($editor); |
||
| 2827 | |||
| 2828 | |||
| 2829 | $page->displayHtml(); |
||
| 2830 | } |
||
| 2831 | |||
| 2832 | |||
| 2833 | |||
| 2834 | |||
| 2835 | |||
| 2836 | |||
| 2837 | function absences_personalRights_addRightInTable(Widget_TableView $table, $row, absences_Right $right, absences_AgentRight $agentRight) |
||
| 2838 | { |
||
| 2839 | $W = bab_Widgets(); |
||
| 2840 | $type = $right->getType(); |
||
| 2841 | |||
| 2842 | $icon = $W->Frame(); |
||
| 2843 | $icon->setCanvasOptions($icon->Options()->width(10,'px')->height(10,'px')->backgroundColor('#'.$type->color)); |
||
| 2844 | $icon->setTitle($type->name); |
||
| 2845 | |||
| 2846 | $col = 0; |
||
| 2847 | |||
| 2848 | $table->addItem($W->HBoxItems($icon,$W->Label($right->description)) |
||
| 2849 | ->setHorizontalSpacing(.8,'em')->setVerticalAlign('middle') , $row, $col++); |
||
| 2850 | $table->addItem($W->Label(absences_quantity($agentRight->getQuantity(), $right->quantity_unit)) , $row, $col++); |
||
| 2851 | $table->addItem($W->Label(absences_quantity($agentRight->getConfirmedQuantity(), $right->quantity_unit)) , $row, $col++); |
||
| 2852 | $table->addItem($W->Label(absences_quantity($agentRight->getWaitingQuantity(), $right->quantity_unit)) , $row, $col++); |
||
| 2853 | $balance = $agentRight->getQuantity() - $agentRight->getConfirmedQuantity() - $agentRight->getWaitingQuantity(); |
||
| 2854 | $table->addItem($W->Label(absences_quantity($balance, $right->quantity_unit)) , $row, $col++); |
||
| 2855 | $previsional = $agentRight->getPrevisionalQuantity(); |
||
| 2856 | $table->addItem($W->Label(absences_quantity($previsional, $right->quantity_unit)) , $row, $col++); |
||
| 2857 | $table->addItem($W->Label(absences_quantity($balance - $previsional, $right->quantity_unit)) , $row, $col++); |
||
| 2858 | $table->addItem($W->Label(bab_shortDate(bab_mktime($right->date_begin), false)) , $row, $col++); |
||
| 2859 | $table->addItem($W->Label(bab_shortDate(bab_mktime($right->date_end), false)) , $row, $col++); |
||
| 2860 | } |
||
| 2861 | |||
| 2862 | |||
| 2863 | |||
| 2864 | function absences_personalRights() |
||
| 2865 | { |
||
| 2866 | $W = bab_Widgets(); |
||
| 2867 | $agent = absences_Agent::getCurrentUser(); |
||
| 2868 | |||
| 2869 | if (!$agent->exists()) |
||
| 2870 | { |
||
| 2871 | return; |
||
| 2872 | } |
||
| 2873 | |||
| 2874 | $page = $W->BabPage()->setEmbedded(false); |
||
| 2875 | $page->setTitle(absences_translate('My vacations rights')); |
||
| 2876 | |||
| 2877 | $table = $W->BabTableView(); |
||
| 2878 | |||
| 2879 | $row = 0; |
||
| 2880 | $col = 0; |
||
| 2881 | $table->addHeadRow(0); |
||
| 2882 | |||
| 2883 | $table->addItem($W->Label(absences_translate('Description')) , $row, $col++); |
||
| 2884 | $table->addItem($W->Label(absences_translate('Rights')) , $row, $col++); |
||
| 2885 | $table->addItem($W->Label(absences_translate('Consumed')) , $row, $col++); |
||
| 2886 | $table->addItem($W->Label(absences_translate('Waiting')) , $row, $col++); |
||
| 2887 | $table->addItem($W->Label(absences_translate('Balance')) , $row, $col++); |
||
| 2888 | $table->addItem($W->Label(absences_translate('Previsional')) , $row, $col++); |
||
| 2889 | $table->addItem($W->Label(absences_translate('Previ. Bal.')) , $row, $col++); |
||
| 2890 | $table->addItem($W->Label(absences_translate('Begin date')) , $row, $col++); |
||
| 2891 | $table->addItem($W->Label(absences_translate('End date')) , $row, $col++); |
||
| 2892 | $row++; |
||
| 2893 | |||
| 2894 | $I = $agent->getAgentRightUserIterator(); |
||
| 2895 | |||
| 2896 | $rows = array(); |
||
| 2897 | |||
| 2898 | foreach($I as $agentRight) |
||
| 2899 | { |
||
| 2900 | |||
| 2901 | $right = $agentRight->getRight(); |
||
| 2902 | $rgroup = $right->getRgroupLabel(); |
||
| 2903 | |||
| 2904 | |||
| 2905 | if ($rgroup) |
||
| 2906 | { |
||
| 2907 | if (!isset($rows['rgroup'.$right->id_rgroup])) { |
||
| 2908 | $rows['rgroup'.$right->id_rgroup] = array( |
||
| 2909 | 'sortkey' => $right->getRgroupSortkey(), |
||
| 2910 | 'rgroup' => array() |
||
| 2911 | ); |
||
| 2912 | } |
||
| 2913 | |||
| 2914 | $rows['rgroup'.$right->id_rgroup]['rgroup'][] = $agentRight; |
||
| 2915 | continue; |
||
| 2916 | } |
||
| 2917 | |||
| 2918 | $rows['right'.$right->id] = array( |
||
| 2919 | 'sortkey' => $right->sortkey, |
||
| 2920 | 'agentRight' => $agentRight |
||
| 2921 | ); |
||
| 2922 | } |
||
| 2923 | |||
| 2924 | bab_Sort::asort($rows, 'sortkey'); |
||
| 2925 | |||
| 2926 | foreach($rows as $arr_row) { |
||
| 2927 | |||
| 2928 | if (isset($arr_row['rgroup'])) { |
||
| 2929 | $rgroup = reset($arr_row['rgroup'])->getRight()->getRgroupLabel(); |
||
| 2930 | $table->addItem($W->Label($rgroup)->addClass('widget-strong'), $row, 0, -1, 9); |
||
| 2931 | $row++; |
||
| 2932 | |||
| 2933 | foreach($arr_row['rgroup'] as $agentRight) { |
||
| 2934 | $right = $agentRight->getRight(); |
||
| 2935 | $right->description = bab_nbsp().bab_nbsp().bab_nbsp().bab_nbsp().$right->description; |
||
| 2936 | absences_personalRights_addRightInTable($table, $row, $right, $agentRight); |
||
| 2937 | $row++; |
||
| 2938 | } |
||
| 2939 | |||
| 2940 | continue; |
||
| 2941 | } |
||
| 2942 | |||
| 2943 | |||
| 2944 | $agentRight = $arr_row['agentRight']; |
||
| 2945 | $right = $agentRight->getRight(); |
||
| 2946 | |||
| 2947 | absences_personalRights_addRightInTable($table, $row, $right, $agentRight); |
||
| 2948 | $row++; |
||
| 2949 | } |
||
| 2950 | |||
| 2951 | |||
| 2952 | |||
| 2953 | |||
| 2954 | $page->addItem($table); |
||
| 2955 | $print = $W->Link($W->Icon(absences_translate('Print'), Func_Icons::ACTIONS_DOCUMENT_PRINT), 'javascript:window.print()'); |
||
| 2956 | $page->addItem($W->Frame()->addClass(Func_Icons::ICON_LEFT_16)->addClass('widget-align-center')->addItem($print)); |
||
| 2957 | |||
| 2958 | $page->displayHtml(); |
||
| 2959 | } |
||
| 2960 | |||
| 2961 | |||
| 2962 | |||
| 2963 | |||
| 2964 | |||
| 2965 | |||
| 2966 | |||
| 2967 | |||
| 2968 | |||
| 2969 | /** |
||
| 2970 | * @param string $date |
||
| 2971 | * @return array |
||
| 2972 | */ |
||
| 2973 | function absences_getDayWorkingHours($date) |
||
| 2974 | { |
||
| 2975 | require_once $GLOBALS['babInstallPath'].'utilit/dateTime.php'; |
||
| 2976 | |||
| 2977 | $id_user = bab_gp('id_user'); |
||
| 2978 | $agent = absences_Agent::getFromIdUser(bab_getUserId()); |
||
| 2979 | |||
| 2980 | if ($id_user != $agent->getIdUser() && !absences_IsUserUnderSuperior($id_user) && !$agent->isManager()) { |
||
| 2981 | throw new Exception('Access denied'); |
||
| 2982 | } |
||
| 2983 | |||
| 2984 | $wh = bab_functionality::get('WorkingHours'); |
||
| 2985 | /* @var $wh Func_WorkingHours */ |
||
| 2986 | |||
| 2987 | $begin = BAB_DateTime::fromIsoDateTime(bab_gp('date').' 00:00:00'); |
||
| 2988 | $end = clone $begin; |
||
| 2989 | $end->add(1, BAB_DATETIME_DAY); |
||
| 2990 | |||
| 2991 | return $wh->selectPeriods($id_user, $begin, $end); |
||
| 2992 | } |
||
| 2993 | |||
| 2994 | |||
| 2995 | |||
| 2996 | |||
| 2997 | |||
| 2998 | |||
| 2999 | |||
| 3000 | |||
| 3001 | /** |
||
| 3002 | * Create or edit a request period |
||
| 3003 | * first step of a vacation request |
||
| 3004 | */ |
||
| 3005 | function absences_requestPeriod() |
||
| 3006 | { |
||
| 3007 | include_once dirname(__FILE__)."/utilit/planningincl.php"; |
||
| 3008 | global $babBody; |
||
| 3009 | $agent = absences_Agent::getCurrentUser(); |
||
| 3010 | |||
| 3011 | |||
| 3012 | |||
| 3013 | |||
| 3014 | |||
| 3015 | |||
| 3016 | if (!empty($_REQUEST['id'])) |
||
| 3017 | { |
||
| 3018 | // request modification |
||
| 3019 | |||
| 3020 | |||
| 3021 | View Code Duplication | if (bab_rp('rfrom')) |
|
|
0 ignored issues
–
show
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...
|
|||
| 3022 | { |
||
| 3023 | if ($agent->isManager() && !bab_rp('ide')) |
||
| 3024 | { |
||
| 3025 | // request modification from a manager |
||
| 3026 | |||
| 3027 | $babBody->addItemMenu("menu", absences_translate("Management"), absences_addon()->getUrl()."vacadm&idx=menu"); |
||
| 3028 | $babBody->addItemMenu("lper", absences_translate("Requests"), absences_addon()->getUrl()."vacadmb&idx=lreq"); |
||
| 3029 | $babBody->addItemMenu("period", absences_translate("Edit"), absences_addon()->getUrl()."vacuser&idx=period"); |
||
| 3030 | } |
||
| 3031 | |||
| 3032 | if ($agent->isEntityManager() && bab_rp('ide')) |
||
| 3033 | { |
||
| 3034 | // request modification from a delegated manager |
||
| 3035 | |||
| 3036 | $babBody->addItemMenu("entities", absences_translate("Delegated management"), absences_addon()->getUrl()."vacchart&idx=entities"); |
||
| 3037 | $babBody->addItemMenu("entity_members", absences_translate("Entity requests"), absences_addon()->getUrl()."vacchart&idx=entity_requests&ide=".bab_rp('ide')); |
||
| 3038 | $babBody->addItemMenu("period", absences_translate("Edit"), absences_addon()->getUrl()."vacuser&idx=period&ide=".bab_rp('ide')); |
||
| 3039 | } |
||
| 3040 | |||
| 3041 | |||
| 3042 | } else { |
||
| 3043 | |||
| 3044 | // request modification from agent |
||
| 3045 | |||
| 3046 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 3047 | $babBody->addItemMenu("period", absences_translate("Edit"), absences_addon()->getUrl()."vacuser&idx=period&id=".bab_rp('id')); |
||
| 3048 | |||
| 3049 | if( $agent->isManager()) |
||
| 3050 | { |
||
| 3051 | $babBody->addItemMenu("list", absences_translate("Management"), absences_addon()->getUrl()."vacadm"); |
||
| 3052 | } |
||
| 3053 | if ($agent->isEntityManager()) |
||
| 3054 | { |
||
| 3055 | $babBody->addItemMenu("entities", absences_translate("Delegate management"), absences_addon()->getUrl()."vacchart&idx=entities"); |
||
| 3056 | } |
||
| 3057 | |||
| 3058 | |||
| 3059 | } |
||
| 3060 | |||
| 3061 | |||
| 3062 | $babBody->setTitle(absences_translate("Edit vacation request")); |
||
| 3063 | |||
| 3064 | if (absences_lockedForMainteance()) |
||
| 3065 | { |
||
| 3066 | $babBody->addError(absences_getMaintenanceMessage()); |
||
| 3067 | return false; |
||
| 3068 | } |
||
| 3069 | |||
| 3070 | |||
| 3071 | $id_user = bab_isEntryEditable($_REQUEST['id']); |
||
| 3072 | if (!$id_user) |
||
| 3073 | { |
||
| 3074 | $babBody->addError(absences_translate("Access denied, this request is not modifiable")); |
||
| 3075 | return false; |
||
| 3076 | } |
||
| 3077 | View Code Duplication | else |
|
|
0 ignored issues
–
show
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...
|
|||
| 3078 | { |
||
| 3079 | absences_viewVacationCalendar(array($id_user), true, true, bab_rp('nbmonth', 12), false); |
||
| 3080 | period($id_user, $_REQUEST['id']); |
||
| 3081 | return true; |
||
| 3082 | } |
||
| 3083 | } |
||
| 3084 | else |
||
| 3085 | { |
||
| 3086 | |||
| 3087 | // request creation |
||
| 3088 | |||
| 3089 | if (isset($_GET['idu']) && is_numeric($_GET['idu'])) { |
||
| 3090 | $id_user = $_GET['idu']; // deprecated? |
||
| 3091 | } |
||
| 3092 | View Code Duplication | else { |
|
|
0 ignored issues
–
show
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...
|
|||
| 3093 | $id_user = bab_rp('id_user', bab_getUserId()); |
||
| 3094 | |||
| 3095 | if (bab_rp('rfrom')) |
||
| 3096 | { |
||
| 3097 | |||
| 3098 | if ($agent->isManager() && !bab_rp('ide')) |
||
| 3099 | { |
||
| 3100 | // request creation from a manager |
||
| 3101 | |||
| 3102 | $babBody->addItemMenu("menu", absences_translate("Management"), absences_addon()->getUrl()."vacadm&idx=menu"); |
||
| 3103 | $babBody->addItemMenu("lper", absences_translate("Personnel"), absences_addon()->getUrl()."vacadm&idx=lper"); |
||
| 3104 | $babBody->addItemMenu("period", absences_translate("Request"), absences_addon()->getUrl()."vacuser&idx=period"); |
||
| 3105 | } |
||
| 3106 | |||
| 3107 | if ($agent->isEntityManager() && bab_rp('ide')) |
||
| 3108 | { |
||
| 3109 | // request creation from a delegated manager |
||
| 3110 | |||
| 3111 | $babBody->addItemMenu("entities", absences_translate("Delegated management"), absences_addon()->getUrl()."vacchart&idx=entities"); |
||
| 3112 | $babBody->addItemMenu("entity_members", absences_translate("Entity members"), absences_addon()->getUrl()."vacchart&idx=entity_members&ide=".bab_rp('ide')); |
||
| 3113 | $babBody->addItemMenu("period", absences_translate("Request"), absences_addon()->getUrl()."vacuser&idx=period"); |
||
| 3114 | } |
||
| 3115 | |||
| 3116 | } else { |
||
| 3117 | |||
| 3118 | // request creation from agent |
||
| 3119 | |||
| 3120 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 3121 | $babBody->addItemMenu("period", absences_translate("Request"), absences_addon()->getUrl()."vacuser&idx=period"); |
||
| 3122 | |||
| 3123 | |||
| 3124 | if( $agent->isManager()) |
||
| 3125 | { |
||
| 3126 | $babBody->addItemMenu("list", absences_translate("Management"), absences_addon()->getUrl()."vacadm"); |
||
| 3127 | } |
||
| 3128 | if ($agent->isEntityManager()) |
||
| 3129 | { |
||
| 3130 | $babBody->addItemMenu("entities", absences_translate("Delegate management"), absences_addon()->getUrl()."vacchart&idx=entities"); |
||
| 3131 | } |
||
| 3132 | |||
| 3133 | } |
||
| 3134 | } |
||
| 3135 | |||
| 3136 | |||
| 3137 | if ($id_user == bab_getUserId()) |
||
| 3138 | { |
||
| 3139 | $babBody->setTitle(absences_translate("Request vacation")); |
||
| 3140 | } else { |
||
| 3141 | $babBody->setTitle(absences_translate("Request vacation for another user")); // rfrom=1 |
||
| 3142 | } |
||
| 3143 | |||
| 3144 | if (absences_lockedForMainteance()) |
||
| 3145 | { |
||
| 3146 | $babBody->addError(absences_getMaintenanceMessage()); |
||
| 3147 | return false; |
||
| 3148 | } |
||
| 3149 | |||
| 3150 | |||
| 3151 | View Code Duplication | if (bab_vacRequestCreate($id_user)) { |
|
|
0 ignored issues
–
show
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...
|
|||
| 3152 | absences_viewVacationCalendar(array($id_user), true, true, bab_rp('nbmonth', 12), false); |
||
| 3153 | period($id_user); |
||
| 3154 | return true; |
||
| 3155 | } |
||
| 3156 | } |
||
| 3157 | |||
| 3158 | $babBody->addError(absences_translate("Access denied, no access to create a request")); |
||
| 3159 | return false; |
||
| 3160 | } |
||
| 3161 | |||
| 3162 | |||
| 3163 | |||
| 3164 | |||
| 3165 | |||
| 3166 | /* main */ |
||
| 3167 | bab_requireCredential(); |
||
| 3168 | $agent = absences_Agent::getCurrentUser(); |
||
| 3169 | $idx = bab_rp('idx', "lvreq"); |
||
| 3170 | |||
| 3171 | |||
| 3172 | View Code Duplication | if(!$agent->isInPersonnel() && !$agent->isEntityManager() && !$agent->isManager()) |
|
|
0 ignored issues
–
show
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...
|
|||
| 3173 | { |
||
| 3174 | $babBody->msgerror = absences_translate("Access denied"); |
||
| 3175 | return; |
||
| 3176 | } |
||
| 3177 | |||
| 3178 | |||
| 3179 | |||
| 3180 | if (isset($_POST['action'])) |
||
| 3181 | { |
||
| 3182 | switch ($_POST['action']) |
||
| 3183 | { |
||
| 3184 | case 'period': |
||
| 3185 | if (!test_period()) { |
||
| 3186 | $idx = 'period'; |
||
| 3187 | } |
||
| 3188 | break; |
||
| 3189 | |||
| 3190 | case 'vacation_request': |
||
| 3191 | |||
| 3192 | $id = bab_pp('id'); |
||
| 3193 | |||
| 3194 | if (bab_isEntryEditable($id)) |
||
| 3195 | { |
||
| 3196 | if(!absences_saveVacation::save()) { |
||
| 3197 | $idx = "vunew"; |
||
| 3198 | } |
||
| 3199 | elseif ($_POST['id_user'] == bab_getUserId()) |
||
| 3200 | { |
||
| 3201 | // demande pour moi meme, retour a la liste de mes demandes |
||
| 3202 | header("Location: ". absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 3203 | exit; |
||
| 3204 | } |
||
| 3205 | View Code Duplication | elseif ($id) |
|
|
0 ignored issues
–
show
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...
|
|||
| 3206 | { |
||
| 3207 | // modification d'une demande, retour liste des demandes |
||
| 3208 | if (bab_pp('ide')) { |
||
| 3209 | header("Location: ". absences_addon()->getUrl().'vacchart&idx=entity_requests&ide='.bab_pp('ide')); |
||
| 3210 | exit; |
||
| 3211 | } |
||
| 3212 | |||
| 3213 | header("Location: ". absences_addon()->getUrl()."vacadmb&idx=lreq"); |
||
| 3214 | exit; |
||
| 3215 | } |
||
| 3216 | View Code Duplication | else |
|
|
0 ignored issues
–
show
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...
|
|||
| 3217 | { |
||
| 3218 | // creation d'une demande, retour a la liste des agents |
||
| 3219 | if (bab_pp('ide')) { |
||
| 3220 | header("Location: ". absences_addon()->getUrl().'vacchart&idx=entity_members&ide='.bab_pp('ide')); |
||
| 3221 | exit; |
||
| 3222 | } |
||
| 3223 | |||
| 3224 | header("Location: ". absences_addon()->getUrl()."vacadm&idx=lper"); |
||
| 3225 | exit; |
||
| 3226 | } |
||
| 3227 | } |
||
| 3228 | break; |
||
| 3229 | |||
| 3230 | case 'delete_request': |
||
| 3231 | |||
| 3232 | if ($id_entry = bab_pp('id_entry')) |
||
| 3233 | { |
||
| 3234 | $id_user = bab_isEntryEditable($id_entry); |
||
| 3235 | if ($id_user || $agent->isManager()) |
||
| 3236 | { |
||
| 3237 | if (absences_delete_request(bab_pp('id_entry'), bab_pp('folder', 0), (int) bab_pp('rfrom', 0))) |
||
| 3238 | { |
||
| 3239 | header("Location: ". bab_pp('url')); |
||
| 3240 | exit; |
||
| 3241 | } else { |
||
| 3242 | $babBody->addError(absences_translate('Failed to delete the vacation request')); |
||
| 3243 | } |
||
| 3244 | } |
||
| 3245 | } |
||
| 3246 | |||
| 3247 | |||
| 3248 | View Code Duplication | if ($id_deposit = bab_pp('id_deposit')) |
|
|
0 ignored issues
–
show
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...
|
|||
| 3249 | { |
||
| 3250 | require_once dirname(__FILE__).'/utilit/cet_deposit_request.class.php'; |
||
| 3251 | $deposit = absences_CetDepositRequest::getById($id_deposit); |
||
| 3252 | if ($deposit->canDelete()) |
||
| 3253 | { |
||
| 3254 | $deposit->delete(); |
||
| 3255 | $url = new bab_url(bab_pp('url')); |
||
| 3256 | $url->location(); |
||
| 3257 | } |
||
| 3258 | } |
||
| 3259 | |||
| 3260 | |||
| 3261 | View Code Duplication | if ($id_recovery = bab_pp('id_recovery')) |
|
|
0 ignored issues
–
show
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...
|
|||
| 3262 | { |
||
| 3263 | require_once dirname(__FILE__).'/utilit/workperiod_recover_request.class.php'; |
||
| 3264 | $recovery = absences_WorkperiodRecoverRequest::getById($id_recovery); |
||
| 3265 | if ($recovery->canDelete()) |
||
| 3266 | { |
||
| 3267 | $recovery->delete(); |
||
| 3268 | $url = new bab_url(bab_pp('url')); |
||
| 3269 | $url->location(); |
||
| 3270 | } |
||
| 3271 | } |
||
| 3272 | |||
| 3273 | break; |
||
| 3274 | } |
||
| 3275 | } |
||
| 3276 | |||
| 3277 | |||
| 3278 | |||
| 3279 | |||
| 3280 | |||
| 3281 | switch($idx) |
||
| 3282 | { |
||
| 3283 | |||
| 3284 | case "unload": |
||
| 3285 | vedUnload(); |
||
| 3286 | exit; |
||
| 3287 | break; |
||
| 3288 | |||
| 3289 | View Code Duplication | case "morve": |
|
|
0 ignored issues
–
show
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...
|
|||
| 3290 | require_once dirname(__FILE__).'/utilit/request.ui.php'; |
||
| 3291 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 3292 | $babBody->addItemMenu("morve", absences_translate("View request"), absences_addon()->getUrl()."vacuser&idx=lvreq&id=".bab_rp('id')); |
||
| 3293 | absences_viewVacationRequestDetail(bab_rp('id')); |
||
| 3294 | break; |
||
| 3295 | |||
| 3296 | View Code Duplication | case 'view_cet_deposit': |
|
|
0 ignored issues
–
show
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...
|
|||
| 3297 | require_once dirname(__FILE__).'/utilit/request.ui.php'; |
||
| 3298 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 3299 | $babBody->addItemMenu("view_cet_deposit", absences_translate("View request"), absences_addon()->getUrl()."vacuser&idx=view_cet_deposit&id=".bab_rp('id')); |
||
| 3300 | absences_viewCetDepositDetail(bab_rp('id')); |
||
| 3301 | break; |
||
| 3302 | |||
| 3303 | View Code Duplication | case 'view_wp_recovery': |
|
|
0 ignored issues
–
show
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...
|
|||
| 3304 | require_once dirname(__FILE__).'/utilit/request.ui.php'; |
||
| 3305 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 3306 | $babBody->addItemMenu("view_wp_recovery", absences_translate("View request"), absences_addon()->getUrl()."vacuser&idx=view_wp_recovery&id=".bab_rp('id')); |
||
| 3307 | absences_viewWpRecoveryDetail(bab_rp('id')); |
||
| 3308 | break; |
||
| 3309 | |||
| 3310 | case "period": |
||
| 3311 | // demande, premiere etape |
||
| 3312 | absences_requestPeriod(); |
||
| 3313 | break; |
||
| 3314 | |||
| 3315 | |||
| 3316 | case 'recurring': |
||
| 3317 | if( bab_isEntryEditable($_POST['id']) ) |
||
| 3318 | { |
||
| 3319 | absences_recurringVacation(absences_PostedDate::begin(), absences_PostedDate::end(), $_POST['id']); |
||
| 3320 | |||
| 3321 | $babBody->addItemMenu("recurring", absences_translate("Request"), absences_addon()->getUrl()."vacuser&idx=vunew"); |
||
| 3322 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 3323 | } |
||
| 3324 | if($agent->isManager()) |
||
| 3325 | $babBody->addItemMenu("list", absences_translate("Management"), absences_addon()->getUrl()."vacadm"); |
||
| 3326 | if ($agent->isEntityManager()) |
||
| 3327 | $babBody->addItemMenu("entities", absences_translate("Delegate management"), absences_addon()->getUrl()."vacchart&idx=entities"); |
||
| 3328 | break; |
||
| 3329 | |||
| 3330 | case "vunew": |
||
| 3331 | // demande, deuxieme etape |
||
| 3332 | requestVacation(absences_PostedDate::begin(), absences_PostedDate::end(), $_POST['id'], bab_pp('rfrom'), bab_pp('ide')); |
||
| 3333 | break; |
||
| 3334 | |||
| 3335 | case 'delete': |
||
| 3336 | |||
| 3337 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 3338 | |||
| 3339 | if ($id_entry = bab_rp('id_entry')) |
||
| 3340 | { |
||
| 3341 | $babBody->addItemMenu("delete", absences_translate("Delete request"), absences_addon()->getUrl()."vacuser&idx=delete&id_entry=".$id_entry); |
||
| 3342 | absences_deleteVacationRequest($id_entry); |
||
| 3343 | } |
||
| 3344 | |||
| 3345 | if ($id_cetdeposit = bab_rp('id_cetdeposit')) |
||
| 3346 | { |
||
| 3347 | $babBody->addItemMenu("delete", absences_translate("Delete request"), absences_addon()->getUrl()."vacuser&idx=delete&id_cetdeposit=".$id_cetdeposit); |
||
| 3348 | absences_deleteCetDepositRequest($id_cetdeposit); |
||
| 3349 | } |
||
| 3350 | |||
| 3351 | if ($id_recovery = bab_rp('id_recovery')) |
||
| 3352 | { |
||
| 3353 | $babBody->addItemMenu("delete", absences_translate("Delete request"), absences_addon()->getUrl()."vacuser&idx=delete&id_recovery=".$id_recovery); |
||
| 3354 | absences_deleteWpRecoveryRequest($id_recovery); |
||
| 3355 | } |
||
| 3356 | |||
| 3357 | break; |
||
| 3358 | |||
| 3359 | case 'viewrights': |
||
| 3360 | if (absences_IsUserUnderSuperior($_GET['id_user']) || $agent->isManager()) { |
||
| 3361 | $babBody->setTitle(absences_translate("Balance").' : '.bab_getUserName($_GET['id_user'])); |
||
| 3362 | |||
| 3363 | if (isset($_GET['ide'])) { |
||
| 3364 | $babBody->addItemMenu("entity_members", absences_translate("Entity members"), absences_addon()->getUrl()."vacchart&idx=entity_members&ide=".$_GET['ide']); |
||
| 3365 | } |
||
| 3366 | |||
| 3367 | $babBody->addItemMenu("viewrights", absences_translate("Balance"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 3368 | viewrights($_GET['id_user']); |
||
| 3369 | } else { |
||
| 3370 | $babBody->msgerror = absences_translate("Access denied"); |
||
| 3371 | } |
||
| 3372 | break; |
||
| 3373 | |||
| 3374 | |||
| 3375 | case 'subprev': |
||
| 3376 | $id_entry = (int) bab_rp('id_entry'); |
||
| 3377 | if ($id_entry && bab_isEntryEditable($id_entry)) |
||
| 3378 | { |
||
| 3379 | absences_saveVacation::submitRequest($id_entry); |
||
| 3380 | absences_saveVacation::gotoList(); |
||
| 3381 | } else { |
||
| 3382 | $babBody->msgerror = absences_translate("Access denied to request modification"); |
||
| 3383 | } |
||
| 3384 | |||
| 3385 | break; |
||
| 3386 | |||
| 3387 | View Code Duplication | case 'workperiod': |
|
|
0 ignored issues
–
show
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...
|
|||
| 3388 | absences_createWorkperiodRecoverRequest(); |
||
| 3389 | |||
| 3390 | |||
| 3391 | if (!bab_rp('id_user')) { |
||
| 3392 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 3393 | } |
||
| 3394 | |||
| 3395 | $babBody->addItemMenu("workperiod", absences_translate("Working day"), absences_addon()->getUrl()."vacuser&idx=workperiod"); |
||
| 3396 | |||
| 3397 | if( $agent->isManager()) |
||
| 3398 | $babBody->addItemMenu("list", absences_translate("Management"), absences_addon()->getUrl()."vacadm"); |
||
| 3399 | |||
| 3400 | if ($agent->isEntityManager()) |
||
| 3401 | $babBody->addItemMenu("entities", absences_translate("Delegate management"), absences_addon()->getUrl()."vacchart&idx=entities"); |
||
| 3402 | break; |
||
| 3403 | |||
| 3404 | View Code Duplication | case 'cet': |
|
|
0 ignored issues
–
show
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...
|
|||
| 3405 | absences_createCetDepositRequest(); |
||
| 3406 | |||
| 3407 | if (!bab_rp('id_user')) { |
||
| 3408 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 3409 | } |
||
| 3410 | |||
| 3411 | $babBody->addItemMenu("cet", absences_translate("Time saving account"), absences_addon()->getUrl()."vacuser&idx=cet"); |
||
| 3412 | |||
| 3413 | if( $agent->isManager()) |
||
| 3414 | $babBody->addItemMenu("list", absences_translate("Management"), absences_addon()->getUrl()."vacadm"); |
||
| 3415 | |||
| 3416 | if ($agent->isEntityManager()) |
||
| 3417 | $babBody->addItemMenu("entities", absences_translate("Delegate management"), absences_addon()->getUrl()."vacchart&idx=entities"); |
||
| 3418 | break; |
||
| 3419 | |||
| 3420 | case 'movement': |
||
| 3421 | |||
| 3422 | absences_personalMovements(); |
||
| 3423 | break; |
||
| 3424 | |||
| 3425 | case 'options': |
||
| 3426 | absences_personalOptions(); |
||
| 3427 | break; |
||
| 3428 | |||
| 3429 | case 'myrights': |
||
| 3430 | absences_personalRights(); |
||
| 3431 | die(); |
||
| 3432 | break; |
||
| 3433 | |||
| 3434 | |||
| 3435 | case 'workinghours': |
||
| 3436 | require_once $GLOBALS['babInstallPath'].'utilit/json.php'; |
||
| 3437 | echo bab_json_encode(absences_getDayWorkingHours(bab_gp('date'))); |
||
| 3438 | die(); |
||
| 3439 | |||
| 3440 | case 'clear': |
||
| 3441 | $babDB->db_query("TRUNCATE ".ABSENCES_CALENDAR_TBL); |
||
| 3442 | |||
| 3443 | case "lvreq": |
||
| 3444 | default: |
||
| 3445 | $babBody->title = absences_translate("My already filed requests"); |
||
| 3446 | if( $agent->isInPersonnel() ) |
||
| 3447 | { |
||
| 3448 | $babBody->babEcho(absences_requestMenu()); |
||
| 3449 | absences_listVacationRequests(bab_getUserId(), false); |
||
| 3450 | $babBody->addItemMenu("lvreq", absences_translate("Requests"), absences_addon()->getUrl()."vacuser&idx=lvreq"); |
||
| 3451 | if (absences_getVacationOption('display_personal_history')) |
||
| 3452 | { |
||
| 3453 | $babBody->addItemMenu("movement", absences_translate("History"), absences_addon()->getUrl()."vacuser&idx=movement"); |
||
| 3454 | } |
||
| 3455 | |||
| 3456 | if (absences_getVacationOption('user_add_email')) |
||
| 3457 | { |
||
| 3458 | $babBody->addItemMenu("options", absences_translate("Options"), absences_addon()->getUrl()."vacuser&idx=options"); |
||
| 3459 | } |
||
| 3460 | |||
| 3461 | } else { |
||
| 3462 | |||
| 3463 | View Code Duplication | if ($agent->isManager() && 'lvreq' === $idx) |
|
|
0 ignored issues
–
show
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...
|
|||
| 3464 | { |
||
| 3465 | // manager only |
||
| 3466 | $url = new bab_url; |
||
| 3467 | $url->tg = 'addon/absences/vacadm'; |
||
| 3468 | $url->location(); |
||
| 3469 | } |
||
| 3470 | |||
| 3471 | View Code Duplication | if ($agent->isEntityManager() && 'lvreq' === $idx) |
|
|
0 ignored issues
–
show
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...
|
|||
| 3472 | { |
||
| 3473 | // delegated manager only |
||
| 3474 | $url = new bab_url; |
||
| 3475 | $url->tg = 'addon/absences/vacchart'; |
||
| 3476 | $url->location(); |
||
| 3477 | } |
||
| 3478 | } |
||
| 3479 | |||
| 3480 | if( $agent->isManager()) |
||
| 3481 | { |
||
| 3482 | $babBody->addItemMenu("list", absences_translate("Management"), absences_addon()->getUrl()."vacadm"); |
||
| 3483 | } |
||
| 3484 | |||
| 3485 | if ($agent->isEntityManager()) |
||
| 3486 | { |
||
| 3487 | $babBody->addItemMenu("entities", absences_translate("Delegate management"), absences_addon()->getUrl()."vacchart&idx=entities"); |
||
| 3488 | } |
||
| 3489 | break; |
||
| 3490 | } |
||
| 3491 | |||
| 3492 | if ( absences_isPlanningAccessValid()) |
||
| 3493 | { |
||
| 3494 | $babBody->addItemMenu("planning", absences_translate("Plannings"), absences_addon()->getUrl()."planning&idx=userlist"); |
||
| 3495 | } |
||
| 3496 | |||
| 3497 | |||
| 3498 | |||
| 3499 | |||
| 3500 | $babBody->setCurrentItemMenu($idx); |
||
| 3501 | bab_siteMap::setPosition('absences','User'); |
||
| 3502 | |||
| 3503 |
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.