34 require
'../../main.inc.php';
35 require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
36 require_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
37 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
38 require_once DOL_DOCUMENT_ROOT.
'/user/class/usergroup.class.php';
39 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
40 require_once DOL_DOCUMENT_ROOT.
'/core/lib/agenda.lib.php';
41 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
42 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
45 if (!isset($conf->global->AGENDA_MAX_EVENTS_DAY_VIEW)) {
46 $conf->global->AGENDA_MAX_EVENTS_DAY_VIEW = 3;
49 $action =
GETPOST(
'action',
'aZ09');
51 $disabledefaultvalues =
GETPOSTINT(
'disabledefaultvalues');
53 $filter =
GETPOST(
"search_filter",
'alpha', 3) ?
GETPOST(
"search_filter",
'alpha', 3) :
GETPOST(
"filter",
'alpha', 3);
66 $sortfield =
GETPOST(
'sortfield',
'aZ09comma');
67 $sortorder =
GETPOST(
'sortorder',
'aZ09comma');
69 if (empty($page) || $page == -1) {
73 $offset = $limit * $page;
78 $sortfield =
"a.datec";
83 $socid = $user->socid;
90 if (!$user->hasRight(
'agenda',
'myactions',
'read')) {
93 if (!$user->hasRight(
'agenda',
'allactions',
'read')) {
96 if (!$user->hasRight(
'agenda',
'allactions',
'read') || $filter ==
'mine') {
100 $mode =
'show_peruser';
109 $maxprint = ((
GETPOSTINT(
"maxprint") !=
'') ?
GETPOSTINT(
"maxprint") : $conf->global->AGENDA_MAX_EVENTS_DAY_VIEW);
110 $optioncss =
GETPOST(
'optioncss',
'aZ');
113 if (
GETPOST(
'search_actioncode',
'array:aZ09')) {
114 $actioncode =
GETPOST(
'search_actioncode',
'array:aZ09', 3);
115 if (!count($actioncode)) {
119 $actioncode =
GETPOST(
"search_actioncode",
"alpha", 3) ?
GETPOST(
"search_actioncode",
"alpha", 3) : (
GETPOST(
"search_actioncode",
"alpha") ==
'0' ?
'0' : ((!
getDolGlobalString(
'AGENDA_DEFAULT_FILTER_TYPE') || $disabledefaultvalues) ?
'' : $conf->global->AGENDA_DEFAULT_FILTER_TYPE));
123 if ($dateselect > 0) {
129 $tmp = !
getDolGlobalString(
'MAIN_DEFAULT_WORKING_HOURS') ?
'9-18' : $conf->global->MAIN_DEFAULT_WORKING_HOURS;
130 $tmp = str_replace(
' ',
'', $tmp);
131 $tmparray = explode(
'-', $tmp);
134 if ($begin_h < 0 || $begin_h > 23) {
137 if ($end_h < 1 || $end_h > 24) {
140 if ($end_h <= $begin_h) {
141 $end_h = $begin_h + 1;
144 $tmp = !
getDolGlobalString(
'MAIN_DEFAULT_WORKING_DAYS') ?
'1-5' : $conf->global->MAIN_DEFAULT_WORKING_DAYS;
145 $tmp = str_replace(
' ',
'', $tmp);
146 $tmparray = explode(
'-', $tmp);
149 if ($begin_d < 1 || $begin_d > 7) {
152 if ($end_d < 1 || $end_d > 7) {
155 if ($end_d < $begin_d) {
156 $end_d = $begin_d + 1;
160 $status = ((!
getDolGlobalString(
'AGENDA_DEFAULT_FILTER_STATUS') || $disabledefaultvalues) ?
'' : $conf->global->AGENDA_DEFAULT_FILTER_STATUS);
164 $mode = (!
getDolGlobalString(
'AGENDA_DEFAULT_VIEW') ?
'show_month' : $conf->global->AGENDA_DEFAULT_VIEW);
167 if (
GETPOST(
'viewcal',
'alpha') && $mode !=
'show_day' && $mode !=
'show_week' && $mode !=
'show_peruser') {
168 $mode =
'show_month';
171 if (
GETPOST(
'viewweek',
'alpha') || $mode ==
'show_week') {
173 $week = ($week ? $week : idate(
"W"));
174 $day = ($day ? $day : idate(
"d"));
176 if (
GETPOST(
'viewday',
'alpha') || $mode ==
'show_day') {
178 $day = ($day ? $day : idate(
"d"));
184 $langs->loadLangs(array(
'users',
'agenda',
'other',
'commercial'));
187 $hookmanager->initHooks(array(
'agenda'));
190 if ($user->socid && $socid) {
194 $search_status = $status;
215 'maxprint' => $maxprint,
217 'filtert' => $filtert,
218 'showbirthday' => $showbirthday,
219 'canedit' => $canedit,
220 'optioncss' => $optioncss,
221 'actioncode' => $actioncode,
223 'resourceid' => $resourceid,
224 'usergroup' => $usergroup,
226 $reshook = $hookmanager->executeHooks(
'beforeAgendaPerUser', $parameters,
$object, $action);
231 $form =
new Form($db);
232 $companystatic =
new Societe($db);
234 $help_url =
'EN:Module_Agenda_En|FR:Module_Agenda|ES:Módulo_Agenda|DE:Modul_Terminplanung';
235 llxHeader(
'', $langs->trans(
"Agenda"), $help_url);
239 $nowyear = $nowarray[
'year'];
240 $nowmonth = $nowarray[
'mon'];
241 $nowday = $nowarray[
'mday'];
245 $listofextcals = array();
248 $first_day = $prev[
'first_day'];
249 $first_month = $prev[
'first_month'];
250 $first_year = $prev[
'first_year'];
252 $week = $prev[
'week'];
256 $next_year = $next[
'year'];
257 $next_month = $next[
'month'];
258 $next_day = $next[
'day'];
260 $max_day_in_month = idate(
"t",
dol_mktime(0, 0, 0, $month, 1, $year));
262 $tmpday = $first_day;
266 $title = $langs->trans(
"DoneAndToDoActions");
267 if ($status ==
'done') {
268 $title = $langs->trans(
"DoneActions");
270 if ($status ==
'todo') {
271 $title = $langs->trans(
"ToDoActions");
276 if (is_array($actioncode)) {
277 foreach ($actioncode as $str_action) {
278 $param .=
"&search_actioncode[]=".urlencode($str_action);
281 $param .=
"&search_actioncode=".urlencode($actioncode);
284 if ($resourceid > 0) {
285 $param .=
"&search_resourceid=".urlencode((
string) ($resourceid));
289 $param .=
"&search_status=".urlencode($status);
292 $param .=
"&search_filter=".urlencode($filter);
295 $param .=
"&search_filtert=".urlencode($filtert);
297 if ($usergroup > 0) {
298 $param .=
"&search_usergroup=".urlencode((
string) ($usergroup));
301 $param .=
"&search_socid=".urlencode((
string) ($socid));
304 $param .=
"&search_showbirthday=1";
307 $param .=
"&search_projectid=".urlencode((
string) ($pid));
310 $param .=
"&search_type=".urlencode($type);
312 if ($mode !=
'show_peruser') {
313 $param .=
'&mode='.urlencode($mode);
315 if ($begin_h !=
'') {
316 $param .=
'&begin_h='.((int) $begin_h);
319 $param .=
'&end_h='.((int) $end_h);
321 if ($begin_d !=
'') {
322 $param .=
'&begin_d='.((int) $begin_d);
325 $param .=
'&end_d='.((int) $end_d);
327 if ($search_categ_cus != 0) {
328 $param .=
'&search_categ_cus='.urlencode((
string) ($search_categ_cus));
330 $param .=
"&maxprint=".urlencode((
string) ($maxprint));
332 $paramnoactionodate = $param;
337 $prev_year = $prev[
'prev_year'];
338 $prev_month = $prev[
'prev_month'];
339 $prev_day = $prev[
'prev_day'];
340 $first_day = $prev[
'first_day'];
341 $first_month = $prev[
'first_month'];
342 $first_year = $prev[
'first_year'];
344 $week = $prev[
'week'];
348 $next_year = $next[
'year'];
349 $next_month = $next[
'month'];
350 $next_day = $next[
'day'];
354 $firstdaytoshow =
dol_mktime(0, 0, 0, $first_month, $first_day, $first_year,
'tzuserrel');
355 $nb_weeks_to_show = (
getDolGlobalString(
'AGENDA_NB_WEEKS_IN_VIEW_PER_USER')) ? ((
int) $conf->global->AGENDA_NB_WEEKS_IN_VIEW_PER_USER * 7) : 7;
361 $max_day_in_month = idate(
"t",
dol_mktime(0, 0, 0, $month, 1, $year,
'gmt'));
363 $tmpday = $first_day;
364 $picto =
'calendarweek';
367 $nav =
'<div class="navselectiondate inline-block nowraponall">';
368 $nav .=
"<a href=\"?year=".$prev_year.
"&month=".$prev_month.
"&day=".$prev_day.$param.
"\"><i class=\"fa fa-chevron-left\" title=\"".
dol_escape_htmltag($langs->trans(
"Previous")).
"\"></i></a> \n";
369 $nav .=
" <span id=\"month_name\">".dol_print_date(
dol_mktime(0, 0, 0, $first_month, $first_day, $first_year),
"%Y").
", ".$langs->trans(
"Week").
" ".$week;
370 $nav .=
" </span>\n";
371 $nav .=
" <a href=\"?year=".$next_year.
"&month=".$next_month.
"&day=".$next_day.$param.
"\"><i class=\"fa fa-chevron-right\" title=\"".
dol_escape_htmltag($langs->trans(
"Next")).
"\"></i></a>\n";
372 if (empty($conf->dol_optimize_smallscreen)) {
373 $nav .=
" <a href=\"?year=".$nowyear.
"&month=".$nowmonth.
"&day=".$nowday.$param.
'" class="datenowlink">'.$langs->trans(
"Today").
'</a> ';
376 $nav .= $form->selectDate($dateselect,
'dateselect', 0, 0, 1,
'', 1, 0);
377 $nav .=
' <button type="submit" class="liste_titre button_search" name="button_search_x" value="x"><span class="fa fa-search"></span></button>';
380 $param .=
'&year='.urlencode((
string) ($year)).
'&month='.urlencode((
string) ($month)).($day ?
'&day='.urlencode((
string) ($day)) :
'');
384 $paramnoaction = preg_replace(
'/action=[a-z_]+/',
'', $param);
388 print
'<form method="POST" id="searchFormList" class="listactionsfilter" action="'.$_SERVER[
"PHP_SELF"].
'">'.
"\n";
390 $showextcals = $listofextcals;
392 if ($conf->use_javascript_ajax) {
394 $s .=
'<script type="text/javascript">'.
"\n";
395 $s .=
'jQuery(document).ready(function () {'.
"\n";
396 $s .=
'jQuery("#check_mytasks").click(function() { jQuery(".family_mytasks").toggle(); jQuery(".family_other").toggle(); });'.
"\n";
397 $s .=
'jQuery("#check_birthday").click(function() { jQuery(".family_birthday").toggle(); });'.
"\n";
398 $s .=
'jQuery(".family_birthday").toggle();'.
"\n";
399 if ($mode ==
"show_week" || $mode ==
"show_month" || empty($mode)) {
400 $s .=
'jQuery( "td.sortable" ).sortable({connectWith: ".sortable",placeholder: "ui-state-highlight",items: "div:not(.unsortable)", receive: function( event, ui ) {';
403 $s .=
'</script>'.
"\n";
404 if (!empty($conf->use_javascript_ajax)) {
405 $s .=
'<div class="nowrap clear float"><input type="checkbox" id="check_mytasks" name="check_mytasks" checked disabled> '.$langs->trans(
"LocalAgenda").
' </div>';
406 if (is_array($showextcals) && count($showextcals) > 0) {
407 foreach ($showextcals as $val) {
408 $htmlname = md5($val[
'name']);
409 $s .=
'<script type="text/javascript">'.
"\n";
410 $s .=
'jQuery(document).ready(function () {'.
"\n";
411 $s .=
' jQuery("#check_ext'.$htmlname.
'").click(function() {';
412 $s .=
' /* alert("'.$htmlname.
'"); */';
413 $s .=
' jQuery(".family_ext'.$htmlname.
'").toggle();';
416 $s .=
'</script>'.
"\n";
417 $s .=
'<div class="nowrap float"><input type="checkbox" id="check_ext'.$htmlname.
'" name="check_ext'.$htmlname.
'" checked> '.$val [
'name'].
' </div>';
424 $parameters = array();
425 $reshook = $hookmanager->executeHooks(
'addCalendarChoice', $parameters,
$object, $action);
426 if (empty($reshook)) {
427 $s .= $hookmanager->resPrint;
428 } elseif ($reshook > 1) {
429 $s = $hookmanager->resPrint;
434 $massactionbutton =
'';
437 $viewmode .=
'<a class="btnTitle reposition" href="'.DOL_URL_ROOT.
'/comm/action/list.php?mode=show_list&restore_lastsearch_values=1'.$paramnoactionodate.
'">';
439 $viewmode .=
img_picto($langs->trans(
"List"),
'object_calendarlist',
'class="imgforviewmode pictoactionview block"');
441 $viewmode .=
'<span class="valignmiddle text-plus-circle btnTitle-label hideonsmartphone">'.$langs->trans(
"ViewList").
'</span></a>';
445 $viewmode .=
img_picto($langs->trans(
"ViewCal"),
'object_calendarmonth',
'class="pictoactionview block"');
447 $viewmode .=
'<span class="valignmiddle text-plus-circle btnTitle-label hideonsmartphone">'.$langs->trans(
"ViewCal").
'</span></a>';
451 $viewmode .=
img_picto($langs->trans(
"ViewWeek"),
'object_calendarweek',
'class="pictoactionview block"');
453 $viewmode .=
'<span class="valignmiddle text-plus-circle btnTitle-label hideonsmartphone">'.$langs->trans(
"ViewWeek").
'</span></a>';
457 $viewmode .=
img_picto($langs->trans(
"ViewDay"),
'object_calendarday',
'class="pictoactionview block"');
459 $viewmode .=
'<span class="valignmiddle text-plus-circle btnTitle-label hideonsmartphone">'.$langs->trans(
"ViewDay").
'</span></a>';
463 $viewmode .=
img_picto($langs->trans(
"ViewPerUser"),
'object_calendarperuser',
'class="pictoactionview block"');
465 $viewmode .=
'<span class="valignmiddle text-plus-circle btnTitle-label hideonsmartphone">'.$langs->trans(
"ViewPerUser").
'</span></a>';
467 $viewmode .=
'<span class="marginrightonly"></span>';
470 $parameters = array();
472 $reshook = $hookmanager->executeHooks(
'addCalendarView', $parameters,
$object, $action);
473 if (empty($reshook)) {
474 $viewmode .= $hookmanager->resPrint;
475 } elseif ($reshook > 1) {
476 $viewmode = $hookmanager->resPrint;
482 if ($user->hasRight(
'agenda',
'myactions',
'create') || $user->hasRight(
'agenda',
'allactions',
'create')) {
485 $newparam .=
'&month='.urlencode(str_pad((
string) $month, 2,
"0", STR_PAD_LEFT)).
'&year='.((int) $tmpforcreatebutton[
'year']);
486 if ($begin_h !==
'') {
487 $newparam .=
'&begin_h='.((int) $begin_h);
490 $newparam .=
'&end_h='.((int) $end_h);
492 if ($begin_d !==
'') {
493 $newparam .=
'&begin_d='.((int) $begin_d);
496 $newparam .=
'&end_d='.((int) $end_d);
499 $urltocreateaction = DOL_URL_ROOT.
'/comm/action/card.php?action=create';
500 $urltocreateaction .=
'&apyear='.$tmpforcreatebutton[
'year'].
'&apmonth='.$tmpforcreatebutton[
'mon'].
'&apday='.$tmpforcreatebutton[
'mday'].
'&aphour='.$tmpforcreatebutton[
'hours'].
'&apmin='.$tmpforcreatebutton[
'minutes'];
501 $urltocreateaction .=
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].($newparam ?
'?'.$newparam :
''));
503 $newcardbutton .=
dolGetButtonTitle($langs->trans(
"AddAction"),
'',
'fa fa-plus-circle', $urltocreateaction);
508 print_barre_liste($langs->trans(
"Agenda"), $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, -1,
'object_action', 0, $nav.
'<span class="marginleftonly"></span>'.$newcardbutton,
'', $limit, 1, 0, 1, $viewmode);
514 $newtitle =
'<div class="nowrap clear inline-block minheight30">';
515 $newtitle .=
'<input type="checkbox" id="check_mytasks" name="check_mytasks" checked disabled> '.$langs->trans(
"LocalAgenda").
' ';
516 $newtitle .=
'</div>';
523 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
524 print_actions_filter($form, $canedit, $search_status, $year, $month, $day, $showbirthday, 0, $filtert, 0, $pid, $socid, $action, -1, $actioncode, $usergroup,
'', $resourceid, $search_categ_cus);
529 $eventarray = array();
534 if ($usergroup > 0) {
537 $sql .=
" a.id, a.label,";
539 $sql .=
" a.datep2,";
540 $sql .=
" a.percent,";
541 $sql .=
" a.fk_user_author,a.fk_user_action,";
542 $sql .=
" a.transparency, a.priority, a.fulldayevent, a.location,";
543 $sql .=
" a.fk_soc, a.fk_contact, a.fk_element, a.elementtype, a.fk_project,";
544 $sql .=
" ca.code, ca.libelle as type_label, ca.color, ca.type as type_type, ca.picto as type_picto";
545 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_actioncomm as ca, ".MAIN_DB_PREFIX.
"actioncomm as a";
547 if ($resourceid > 0) {
548 $sql .=
", ".MAIN_DB_PREFIX.
"element_resources as r";
551 if ($filtert > 0 || $usergroup > 0) {
552 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"actioncomm_resources as ar";
553 $sql .=
" ON ar.fk_actioncomm = a.id AND ar.element_type='user'";
555 $sql .=
" AND ar.fk_element = ".((int) $filtert);
557 if ($usergroup > 0) {
558 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"usergroup_user as ugu ON ugu.fk_user = ar.fk_element AND ugu.fk_usergroup = ".((int) $usergroup);
562 $sql .=
" WHERE a.fk_action = ca.id";
563 $sql .=
" AND a.entity IN (".getEntity(
'agenda').
")";
565 if (!empty($actioncode)) {
567 if ($actioncode ==
'AC_NON_AUTO') {
568 $sql .=
" AND ca.type != 'systemauto'";
569 } elseif ($actioncode ==
'AC_ALL_AUTO') {
570 $sql .=
" AND ca.type = 'systemauto'";
572 if ($actioncode ==
'AC_OTH') {
573 $sql .=
" AND ca.type != 'systemauto'";
575 if ($actioncode ==
'AC_OTH_AUTO') {
576 $sql .=
" AND ca.type = 'systemauto'";
580 if ($actioncode ==
'AC_NON_AUTO') {
581 $sql .=
" AND ca.type != 'systemauto'";
582 } elseif ($actioncode ==
'AC_ALL_AUTO') {
583 $sql .=
" AND ca.type = 'systemauto'";
585 if (is_array($actioncode)) {
586 $sql .=
" AND ca.code IN (".$db->sanitize(
"'".implode(
"','", $actioncode).
"'", 1).
")";
588 $sql .=
" AND ca.code IN (".$db->sanitize(
"'".implode(
"','", explode(
',', $actioncode)).
"'", 1).
")";
593 if ($resourceid > 0) {
594 $sql .=
" AND r.element_type = 'action' AND r.element_id = a.id AND r.resource_id = ".((int) $resourceid);
597 $sql .=
" AND a.fk_project = ".((int) $pid);
601 if (!$user->hasRight(
'societe',
'client',
'voir')) {
602 $search_sale = $user->id;
605 if ($search_sale && $search_sale !=
'-1') {
606 if ($search_sale == -2) {
607 $sql .=
" AND NOT EXISTS (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX.
"societe_commerciaux as sc WHERE sc.fk_soc = a.fk_soc)";
608 } elseif ($search_sale > 0) {
609 $sql .=
" AND EXISTS (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX.
"societe_commerciaux as sc WHERE sc.fk_soc = a.fk_soc AND sc.fk_user = ".((int) $search_sale).
")";
614 $sql .=
" AND a.fk_soc = ".((int) $socid);
617 if ($mode ==
'show_day') {
619 $sql .=
" (a.datep BETWEEN '".$db->idate(
dol_mktime(0, 0, 0, $month, $day, $year,
'tzuserrel')).
"'";
620 $sql .=
" AND '".$db->idate(
dol_mktime(23, 59, 59, $month, $day, $year,
'tzuserrel')).
"')";
622 $sql .=
" (a.datep2 BETWEEN '".$db->idate(
dol_mktime(0, 0, 0, $month, $day, $year,
'tzuserrel')).
"'";
623 $sql .=
" AND '".$db->idate(
dol_mktime(23, 59, 59, $month, $day, $year,
'tzuserrel')).
"')";
625 $sql .=
" (a.datep < '".$db->idate(
dol_mktime(0, 0, 0, $month, $day, $year,
'tzuserrel')).
"'";
626 $sql .=
" AND a.datep2 > '".$db->idate(
dol_mktime(23, 59, 59, $month, $day, $year,
'tzuserrel')).
"')";
631 $sql .=
" (a.datep BETWEEN '".$db->idate($firstdaytoshow - (60 * 60 * 24 * 2)).
"'";
632 $sql .=
" AND '".$db->idate($lastdaytoshow + (60 * 60 * 24 * 2)).
"')";
634 $sql .=
" (a.datep2 BETWEEN '".$db->idate($firstdaytoshow - (60 * 60 * 24 * 2)).
"'";
635 $sql .=
" AND '".$db->idate($lastdaytoshow + (60 * 60 * 24 * 2)).
"')";
637 $sql .=
" (a.datep < '".$db->idate($firstdaytoshow - (60 * 60 * 24 * 2)).
"'";
638 $sql .=
" AND a.datep2 > '".$db->idate($lastdaytoshow + (60 * 60 * 24 * 2)).
"')";
642 $sql .=
" AND ca.id = ".((int) $type);
644 if ($status ==
'0') {
645 $sql .=
" AND a.percent = 0";
647 if ($status ===
'na') {
649 $sql .=
" AND a.percent = -1";
651 if ($status ==
'50') {
653 $sql .=
" AND (a.percent > 0 AND a.percent < 100)";
655 if ($status ==
'done' || $status ==
'100') {
656 $sql .=
" AND (a.percent = 100)";
658 if ($status ==
'todo') {
659 $sql .=
" AND (a.percent >= 0 AND a.percent < 100)";
662 if ($search_categ_cus != -1) {
663 if ($search_categ_cus == -2) {
664 $sql .=
" AND NOT EXISTS (SELECT ca.fk_actioncomm FROM ".MAIN_DB_PREFIX.
"categorie_actioncomm as ca WHERE ca.fk_actioncomm = a.id)";
665 } elseif ($search_categ_cus > 0) {
666 $sql .=
" AND EXISTS (SELECT ca.fk_actioncomm FROM ".MAIN_DB_PREFIX.
"categorie_actioncomm as ca WHERE ca.fk_actioncomm = a.id AND ca.fk_categorie IN (".$db->sanitize($search_categ_cus).
"))";
670 $sql .= $db->order(
"fk_user_action, datep");
673 dol_syslog(
"comm/action/peruser.php", LOG_DEBUG);
674 $resql = $db->query(
$sql);
676 $num = $db->num_rows($resql);
680 $obj = $db->fetch_object($resql);
689 $datep = $db->jdate($obj->datep);
690 $datep2 = $db->jdate($obj->datep2);
695 $event->id = $obj->id;
696 $event->datep = $datep;
697 $event->datef = $datep2;
698 $event->type_code = $obj->code;
699 $event->type_color = $obj->color;
700 $event->label = $obj->label;
701 $event->percentage = $obj->percent;
702 $event->authorid = $obj->fk_user_author;
703 $event->userownerid = $obj->fk_user_action;
704 $event->priority = $obj->priority;
705 $event->fulldayevent = $obj->fulldayevent;
706 $event->location = $obj->location;
707 $event->transparency = $obj->transparency;
709 $event->fk_project = $obj->fk_project;
711 $event->socid = $obj->fk_soc;
712 $event->contact_id = $obj->fk_contact;
714 $event->fk_element = $obj->fk_element;
715 $event->elementtype = $obj->elementtype;
719 $event->date_start_in_calendar = $datep;
720 if ($datep2 !=
'' && $datep2 >= $datep) {
721 $event->date_end_in_calendar = $datep2;
723 $event->date_end_in_calendar = $datep;
729 if ($event->date_end_in_calendar < $firstdaytoshow ||
730 $event->date_start_in_calendar >= $lastdaytoshow) {
735 $event->fetch_userassigned();
737 if ($event->date_start_in_calendar < $firstdaytoshow) {
738 $event->date_start_in_calendar = $firstdaytoshow;
740 if ($event->date_end_in_calendar >= $lastdaytoshow) {
741 $event->date_end_in_calendar = ($lastdaytoshow - 1);
745 $daycursor = $event->date_start_in_calendar;
754 $daykey =
dol_mktime(0, 0, 0, $mois, $jour, $annee,
'gmt');
758 $eventarray[$daykey][] = $event;
761 $daykey += 60 * 60 * 24;
762 if ($daykey > $event->date_end_in_calendar) {
778 $cachethirdparties = array();
779 $cachecontacts = array();
780 $cacheusers = array();
783 $color_file = DOL_DOCUMENT_ROOT.
"/theme/".$conf->theme.
"/theme_vars.inc.php";
784 if (is_readable($color_file)) {
787 if (!is_array($theme_datacolor)) {
788 $theme_datacolor = array(array(120, 130, 150), array(200, 160, 180), array(190, 190, 220));
793 $newparam = preg_replace(
'/showbirthday=/i',
'showbirthday_=', $newparam);
794 $newparam = preg_replace(
'/mode=show_month&?/i',
'', $newparam);
795 $newparam = preg_replace(
'/mode=show_week&?/i',
'', $newparam);
796 $newparam = preg_replace(
'/day=[0-9]+&?/i',
'', $newparam);
797 $newparam = preg_replace(
'/month=[0-9]+&?/i',
'', $newparam);
798 $newparam = preg_replace(
'/year=[0-9]+&?/i',
'', $newparam);
799 $newparam = preg_replace(
'/viewweek=[0-9]+&?/i',
'', $newparam);
800 $newparam = preg_replace(
'/showbirthday_=/i',
'showbirthday=', $newparam);
801 $newparam .=
'&viewweek=1';
803 echo
'<input type="hidden" name="actionmove" value="mupdate">';
804 echo
'<input type="hidden" name="backtopage" value="'.dol_escape_htmltag($_SERVER[
'PHP_SELF']).
'?'.
dol_escape_htmltag($_SERVER[
'QUERY_STRING']).
'">';
805 echo
'<input type="hidden" name="newdate" id="newdate">';
812 $currentdaytoshow = $firstdaytoshow;
813 echo
'<div class="div-table-responsive">';
816 while ($currentdaytoshow < $lastdaytoshow) {
817 echo
'<table class="centpercent noborder nocellnopadd cal_month">';
819 echo
'<tr class="liste_titre">';
820 echo
'<td class="nopaddingtopimp nopaddingbottomimp nowraponsmartphone">';
822 if ($canedit && $mode ==
'show_peruser') {
824 print
img_picto(
'',
'clock',
'class="fawidth30 inline-block paddingleft"');
825 print
'<span class="hideonsmartphone" title="'.$langs->trans(
"VisibleTimeRange").
'">'.$langs->trans(
"Hours").
'</span>';
826 print
"\n".
'<div class="ui-grid-a inline-block"><div class="ui-block-a nowraponall">';
827 print
'<input type="number" class="short" name="begin_h" value="'.$begin_h.
'" min="0" max="23">';
828 if (empty($conf->dol_use_jmobile)) {
831 print
'</div><div class="ui-block-b">';
833 print
'<input type="number" class="short" name="end_h" value="'.$end_h.
'" min="1" max="24">';
834 if (empty($conf->dol_use_jmobile)) {
835 print
' '.$langs->trans(
"H");
837 print
'</div></div>';
842 print
img_picto(
'',
'clock',
'class="fawidth30 inline-block paddingleft"');
843 print
'<span class="hideonsmartphone" title="'.$langs->trans(
"VisibleDaysRange").
'">'.$langs->trans(
"DaysOfWeek").
'</span>';
844 print
"\n".
'<div class="ui-grid-a inline-block"><div class="ui-block-a nowraponall">';
845 print
'<input type="number" class="short" name="begin_d" value="'.$begin_d.
'" min="1" max="7">';
846 if (empty($conf->dol_use_jmobile)) {
849 print
'</div><div class="ui-block-b">';
851 print
'<input type="number" class="short" name="end_d" value="'.$end_d.
'" min="1" max="7">';
852 print
'</div></div>';
858 if (($i + 1) < $begin_d || ($i + 1) > $end_d) {
862 echo
'<td align="center" colspan="'.($end_h - $begin_h).
'">';
863 echo
'<span class="bold spandayofweek">'.$langs->trans(
"Day".(($i + (isset($conf->global->MAIN_START_WEEK) ? $conf->global->MAIN_START_WEEK : 1)) % 7)).
'</span>';
875 echo
'<tr class="liste_titre">';
879 if (($i + 1) < $begin_d || ($i + 1) > $end_d) {
883 for ($h = $begin_h; $h < $end_h; $h++) {
884 echo
'<td class="center">';
885 print
'<small style="font-family: courier">'.sprintf(
"%02d", $h).
'</small>';
895 $usernames = array();
896 $usernamesid = array();
899 foreach ($eventarray as $daykey => $notused) {
901 foreach ($eventarray[$daykey] as $index => $event) {
902 $event->fetch_userassigned();
903 $listofuserid = $event->userassigned;
904 foreach ($listofuserid as $userid => $tmp) {
905 if (!in_array($userid, $usernamesid)) {
906 $usernamesid[$userid] = $userid;
913 $sql =
"SELECT u.rowid, u.lastname as lastname, u.firstname, u.statut, u.login, u.admin, u.entity";
914 $sql .=
" FROM ".$db->prefix().
"user as u";
916 $sql .=
" WHERE u.rowid IN (";
917 $sql .=
" SELECT ug.fk_user FROM ".$db->prefix().
"usergroup_user as ug";
918 $sql .=
" WHERE ug.entity IN (".getEntity(
'usergroup').
")";
919 if ($usergroup > 0) {
920 $sql .=
" AND ug.fk_usergroup = ".((int) $usergroup);
924 if ($usergroup > 0) {
925 $sql .=
" LEFT JOIN ".$db->prefix().
"usergroup_user as ug ON u.rowid = ug.fk_user";
927 $sql .=
" WHERE u.entity IN (".getEntity(
'user').
")";
928 if ($usergroup > 0) {
929 $sql .=
" AND ug.fk_usergroup = ".((int) $usergroup);
932 $sql .=
" AND u.statut = 1";
934 $sql .=
" AND u.rowid = ".((int) $filtert);
936 if ($usergroup > 0) {
937 $sql .=
" AND ug.fk_usergroup = ".((int) $usergroup);
939 if ($user->socid > 0) {
941 $sql .=
" AND u.fk_soc = ".((int) $user->socid);
945 $resql = $db->query(
$sql);
947 $num = $db->num_rows($resql);
951 $obj = $db->fetch_object($resql);
952 $usernamesid[$obj->rowid] = $obj->rowid;
961 foreach ($usernamesid as $id) {
962 $tmpuser =
new User($db);
963 $result = $tmpuser->fetch($id);
964 $usernames[] = $tmpuser;
968 $colorsbytype = array();
969 $labelbytype = array();
970 $sql =
"SELECT code, color, libelle as label FROM ".MAIN_DB_PREFIX.
"c_actioncomm ORDER BY position";
971 $resql = $db->query(
$sql);
972 while ($obj = $db->fetch_object($resql)) {
973 $colorsbytype[$obj->code] = $obj->color;
974 $labelbytype[$obj->code] = $obj->label;
982 foreach ($usernames as $username) {
987 echo
'<td class="tdoverflowmax100 cal_current_month cal_peruserviewname'.($var ?
' cal_impair' :
'').
'">';
988 print $username->getNomUrl(-1,
'', 0, 0, 20, 1,
'',
'paddingleft');
994 for ($iter_day = 0; $iter_day < 8; $iter_day++) {
995 if (($i + 1) < $begin_d || ($i + 1) > $end_d) {
1008 $style =
'cal_current_month';
1009 if ($iter_day == 6) {
1010 $style .=
' cal_other_month';
1013 if ($todayarray[
'mday'] == $tmpday && $todayarray[
'mon'] == $tmpmonth && $todayarray[
'year'] == $tmpyear) {
1017 $style =
'cal_today_peruser';
1020 show_day_events2($username, $tmpday, $tmpmonth, $tmpyear, 0, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300, $showheader, $colorsbytype, $var);
1025 $showheader =
false;
1037 $langs->load(
"commercial");
1038 print
'<br>'.$langs->trans(
"Legend").
': <br>';
1039 foreach ($colorsbytype as $code => $color) {
1041 print
'<div style="float: left; padding: 2px; margin-right: 6px;"><div style="'.($color ?
'background: #'.$color.
';' :
'').
'width:16px; float: left; margin-right: 4px;"> </div>';
1042 print $langs->trans(
"Action".$code) !=
"Action".$code ? $langs->trans(
"Action".$code) : $labelbytype[$code];
1048 print
'<div style="float: left; padding: 2px; margin-right: 6px;"><div class="peruser_busy" style="width:16px; float: left; margin-right: 4px;"> </div>';
1049 print $langs->trans(
"Other");
1058 print
"\n".
'</form>';
1062 print
'<script type="text/javascript">
1063 jQuery(document).ready(function() {
1064 jQuery(".onclickopenref").click(function() {
1065 console.log("We click on a class onclickopenref");
1067 var ref=$(this).attr(\'ref\');
1068 var res = ref.split("_");
1069 var userid = res[1];
1076 if (ids == \'none\') /* No event */
1078 /* alert(\'no event\'); */
1079 url = "'.DOL_URL_ROOT.
'/comm/action/card.php?action=create&assignedtouser="+userid+"&datep="+year+month+day+hour+min+"00&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?year='.$year.
'&month='.$month.
'&day='.$day.($begin_h !==
'' ?
'&begin_h='.$begin_h :
'').($end_h !==
'' ?
'&end_h='.$end_h :
'').($begin_d !==
'' ?
'&begin_d='.$begin_d :
'').($end_d !==
'' ?
'&end_d='.$end_d :
'')).
'"
1080 window.location.href = url;
1082 else if (ids.indexOf(",") > -1) /* There is several events */
1084 /* alert(\'several events\'); */
1085 url = "'.DOL_URL_ROOT.
'/comm/action/list.php?mode=show_list&search_actioncode="+jQuery("#search_actioncode").val()+"&search_status="+jQuery("#selectsearch_status").val()+"&filtert="+userid+"&dateselectyear="+year+"&dateselectmonth="+month+"&dateselectday="+day;
1086 window.location.href = url;
1088 else /* One event */
1090 /* alert(\'one event\'); */
1091 url = "'.DOL_URL_ROOT.
'/comm/action/card.php?action=view&id="+ids
1092 window.location.href = url;
1125 function show_day_events2($username, $day, $month, $year, $monthshown, $style, &$eventarray, $maxprint = 0, $maxnbofchar = 16, $newparam =
'', $showinfo = 0, $minheight = 60, $showheader =
false, $colorsbytype = array(), $var =
false)
1128 global $user, $conf, $langs, $hookmanager, $action;
1129 global $filter, $filtert, $status, $actioncode;
1130 global $theme_datacolor;
1131 global $cachethirdparties, $cachecontacts, $cacheusers, $cacheprojects, $colorindexused;
1132 global $begin_h, $end_h;
1143 $numicals = array();
1146 $colorindexused[$user->id] = 0;
1147 $nextindextouse = count($colorindexused);
1154 foreach ($eventarray as $daykey => $notused) {
1161 if ($day == $jour && (
int) $month == (
int) $mois && $year == $annee) {
1165 foreach ($eventarray[$daykey] as $index => $event) {
1169 $keysofuserassigned = array_keys($event->userassigned);
1170 $ponct = ($event->date_start_in_calendar == $event->date_end_in_calendar);
1172 if (!in_array($username->id, $keysofuserassigned)) {
1177 $parameters = array();
1178 $reshook = $hookmanager->executeHooks(
'formatEvent', $parameters, $event, $action);
1187 if (in_array($user->id, $keysofuserassigned)) {
1188 $cssclass =
'family_mytasks';
1190 if (empty($cacheusers[$event->userownerid])) {
1191 $newuser =
new User($db);
1192 $newuser->fetch($event->userownerid);
1193 $cacheusers[$event->userownerid] = $newuser;
1198 if (!empty($cacheusers[$event->userownerid]->color)) {
1199 $color = $cacheusers[$event->userownerid]->color;
1203 $color = $event->type_color;
1205 } elseif ($event->type_code ==
'ICALEVENT') {
1207 if (!empty($event->icalname)) {
1214 $color = $event->icalcolor;
1215 $cssclass = (!empty($event->icalname) ?
'family_ext'.md5($event->icalname) :
'family_other unsortable');
1216 } elseif ($event->type_code ==
'BIRTHDAY') {
1219 $cssclass =
'family_birthday unsortable';
1220 $color = sprintf(
"%02x%02x%02x", $theme_datacolor[$colorindex][0], $theme_datacolor[$colorindex][1], $theme_datacolor[$colorindex][2]);
1223 $color = ($event->icalcolor ? $event->icalcolor : -1);
1224 $cssclass = (!empty($event->icalname) ?
'family_ext'.md5($event->icalname) :
'family_other');
1226 if (empty($cacheusers[$event->userownerid])) {
1227 $newuser =
new User($db);
1228 $newuser->fetch($event->userownerid);
1229 $cacheusers[$event->userownerid] = $newuser;
1234 if (!empty($cacheusers[$event->userownerid]->color)) {
1235 $color = $cacheusers[$event->userownerid]->color;
1239 $color = $event->type_color;
1245 $idusertouse = ($event->userownerid ? $event->userownerid : 0);
1246 if (isset($colorindexused[$idusertouse])) {
1247 $colorindex = $colorindexused[$idusertouse];
1249 $colorindex = $nextindextouse;
1250 $colorindexused[$idusertouse] = $colorindex;
1251 if (!empty($theme_datacolor[$nextindextouse + 1])) {
1256 $color = sprintf(
"%02x%02x%02x", $theme_datacolor[$colorindex][0], $theme_datacolor[$colorindex][1], $theme_datacolor[$colorindex][2]);
1260 for ($h = $begin_h; $h < $end_h; $h++) {
1263 if (empty($event->fulldayevent)) {
1264 $a =
dol_mktime((
int) $h, 0, 0, $month, $day, $year,
'tzuserrel', 0);
1265 $b =
dol_mktime((
int) $h, 15, 0, $month, $day, $year,
'tzuserrel', 0);
1266 $b1 =
dol_mktime((
int) $h, 30, 0, $month, $day, $year,
'tzuserrel', 0);
1267 $b2 =
dol_mktime((
int) $h, 45, 0, $month, $day, $year,
'tzuserrel', 0);
1268 $c =
dol_mktime((
int) $h + 1, 0, 0, $month, $day, $year,
'tzuserrel', 0);
1270 $dateendtouse = $event->date_end_in_calendar;
1271 if ($dateendtouse == $event->date_start_in_calendar) {
1277 if ($event->date_start_in_calendar < $b && $dateendtouse > $a) {
1278 $busy = $event->transparency;
1279 $cases1[$h][$event->id][
'busy'] = $busy;
1280 $cases1[$h][$event->id][
'string'] =
dol_print_date($event->date_start_in_calendar,
'dayhour',
'tzuserrel');
1281 if ($event->date_end_in_calendar && $event->date_end_in_calendar != $event->date_start_in_calendar) {
1282 $tmpa =
dol_getdate($event->date_start_in_calendar,
true);
1283 $tmpb =
dol_getdate($event->date_end_in_calendar,
true);
1284 if ($tmpa[
'mday'] == $tmpb[
'mday'] && $tmpa[
'mon'] == $tmpb[
'mon'] && $tmpa[
'year'] == $tmpb[
'year']) {
1285 $cases1[$h][$event->id][
'string'] .=
'-'.dol_print_date($event->date_end_in_calendar,
'hour',
'tzuserrel');
1287 $cases1[$h][$event->id][
'string'] .=
'-'.dol_print_date($event->date_end_in_calendar,
'dayhour',
'tzuserrel');
1290 if ($event->label) {
1291 $cases1[$h][$event->id][
'string'] .=
' - '.$event->label;
1293 $cases1[$h][$event->id][
'typecode'] = $event->type_code;
1294 $cases1[$h][$event->id][
'color'] = $color;
1295 if ($event->fk_project > 0) {
1296 if (empty($cacheprojects[$event->fk_project])) {
1298 $tmpproj->fetch($event->fk_project);
1299 $cacheprojects[$event->fk_project] = $tmpproj;
1301 $cases1[$h][$event->id][
'string'] .=
', '.$langs->trans(
"Project").
': '.$cacheprojects[$event->fk_project]->ref.
' - '.$cacheprojects[$event->fk_project]->title;
1303 if ($event->socid > 0) {
1304 if (empty($cachethirdparties[$event->socid])) {
1305 $tmpthirdparty =
new Societe($db);
1306 $tmpthirdparty->fetch($event->socid);
1307 $cachethirdparties[$event->socid] = $tmpthirdparty;
1309 $cases1[$h][$event->id][
'string'] .=
', '.$cachethirdparties[$event->socid]->name;
1311 if ($event->contact_id > 0) {
1312 if (empty($cachecontacts[$event->contact_id])) {
1313 $tmpcontact =
new Contact($db);
1314 $tmpcontact->fetch($event->contact_id);
1315 $cachecontacts[$event->contact_id] = $tmpcontact;
1317 $cases1[$h][$event->id][
'string'] .=
', '.$cachecontacts[$event->contact_id]->getFullName($langs);
1320 if ($event->date_start_in_calendar < $b1 && $dateendtouse > $b) {
1321 $busy = $event->transparency;
1322 $cases2[$h][$event->id][
'busy'] = $busy;
1323 $cases2[$h][$event->id][
'string'] =
dol_print_date($event->date_start_in_calendar,
'dayhour',
'tzuserrel');
1324 if ($event->date_end_in_calendar && $event->date_end_in_calendar != $event->date_start_in_calendar) {
1325 $tmpa =
dol_getdate($event->date_start_in_calendar,
true);
1326 $tmpb =
dol_getdate($event->date_end_in_calendar,
true);
1327 if ($tmpa[
'mday'] == $tmpb[
'mday'] && $tmpa[
'mon'] == $tmpb[
'mon'] && $tmpa[
'year'] == $tmpb[
'year']) {
1328 $cases2[$h][$event->id][
'string'] .=
'-'.dol_print_date($event->date_end_in_calendar,
'hour',
'tzuserrel');
1330 $cases2[$h][$event->id][
'string'] .=
'-'.dol_print_date($event->date_end_in_calendar,
'dayhour',
'tzuserrel');
1333 if ($event->label) {
1334 $cases2[$h][$event->id][
'string'] .=
' - '.$event->label;
1336 $cases2[$h][$event->id][
'typecode'] = $event->type_code;
1337 $cases2[$h][$event->id][
'color'] = $color;
1338 if ($event->fk_project > 0) {
1339 if (empty($cacheprojects[$event->fk_project])) {
1341 $tmpproj->fetch($event->fk_project);
1342 $cacheprojects[$event->fk_project] = $tmpproj;
1344 $cases2[$h][$event->id][
'string'] .=
', '.$langs->trans(
"Project").
': '.$cacheprojects[$event->fk_project]->ref.
' - '.$cacheprojects[$event->fk_project]->title;
1346 if ($event->socid > 0) {
1347 if (empty($cachethirdparties[$event->socid])) {
1348 $tmpthirdparty =
new Societe($db);
1349 $tmpthirdparty->fetch($event->socid);
1350 $cachethirdparties[$event->socid] = $tmpthirdparty;
1352 $cases2[$h][$event->id][
'string'] .=
', '.$cachethirdparties[$event->socid]->name;
1354 if ($event->contact_id > 0) {
1355 if (empty($cachecontacts[$event->contact_id])) {
1356 $tmpcontact =
new Contact($db);
1357 $tmpcontact->fetch($event->contact_id);
1358 $cachecontacts[$event->contact_id] = $tmpcontact;
1360 $cases2[$h][$event->id][
'string'] .=
', '.$cachecontacts[$event->contact_id]->getFullName($langs);
1363 if ($event->date_start_in_calendar < $b2 && $dateendtouse > $b1) {
1364 $busy = $event->transparency;
1365 $cases3[$h][$event->id][
'busy'] = $busy;
1366 $cases3[$h][$event->id][
'string'] =
dol_print_date($event->date_start_in_calendar,
'dayhour',
'tzuserrel');
1367 if ($event->date_end_in_calendar && $event->date_end_in_calendar != $event->date_start_in_calendar) {
1368 $tmpa =
dol_getdate($event->date_start_in_calendar,
true);
1369 $tmpb =
dol_getdate($event->date_end_in_calendar,
true);
1370 if ($tmpa[
'mday'] == $tmpb[
'mday'] && $tmpa[
'mon'] == $tmpb[
'mon'] && $tmpa[
'year'] == $tmpb[
'year']) {
1371 $cases3[$h][$event->id][
'string'] .=
'-'.dol_print_date($event->date_end_in_calendar,
'hour',
'tzuserrel');
1373 $cases3[$h][$event->id][
'string'] .=
'-'.dol_print_date($event->date_end_in_calendar,
'dayhour',
'tzuserrel');
1376 if ($event->label) {
1377 $cases3[$h][$event->id][
'string'] .=
' - '.$event->label;
1379 $cases3[$h][$event->id][
'typecode'] = $event->type_code;
1380 $cases3[$h][$event->id][
'color'] = $color;
1381 if ($event->fk_project > 0) {
1382 if (empty($cacheprojects[$event->fk_project])) {
1384 $tmpproj->fetch($event->fk_project);
1385 $cacheprojects[$event->fk_project] = $tmpproj;
1387 $cases3[$h][$event->id][
'string'] .=
', '.$langs->trans(
"Project").
': '.$cacheprojects[$event->fk_project]->ref.
' - '.$cacheprojects[$event->fk_project]->title;
1389 if ($event->socid > 0) {
1390 if (empty($cachethirdparties[$event->socid])) {
1391 $tmpthirdparty =
new Societe($db);
1392 $tmpthirdparty->fetch($event->socid);
1393 $cachethirdparties[$event->socid] = $tmpthirdparty;
1395 $cases3[$h][$event->id][
'string'] .=
', '.$cachethirdparties[$event->socid]->name;
1397 if ($event->contact_id > 0) {
1398 if (empty($cachecontacts[$event->contact_id])) {
1399 $tmpcontact =
new Contact($db);
1400 $tmpcontact->fetch($event->contact_id);
1401 $cachecontacts[$event->contact_id] = $tmpcontact;
1403 $cases2[$h][$event->id][
'string'] .=
', '.$cachecontacts[$event->contact_id]->getFullName($langs);
1406 if ($event->date_start_in_calendar < $c && $dateendtouse > $b2) {
1407 $busy = $event->transparency;
1408 $cases4[$h][$event->id][
'busy'] = $busy;
1409 $cases4[$h][$event->id][
'string'] =
dol_print_date($event->date_start_in_calendar,
'dayhour',
'tzuserrel');
1410 if ($event->date_end_in_calendar && $event->date_end_in_calendar != $event->date_start_in_calendar) {
1411 $tmpa =
dol_getdate($event->date_start_in_calendar,
true);
1412 $tmpb =
dol_getdate($event->date_end_in_calendar,
true);
1413 if ($tmpa[
'mday'] == $tmpb[
'mday'] && $tmpa[
'mon'] == $tmpb[
'mon'] && $tmpa[
'year'] == $tmpb[
'year']) {
1414 $cases4[$h][$event->id][
'string'] .=
'-'.dol_print_date($event->date_end_in_calendar,
'hour',
'tzuserrel');
1416 $cases4[$h][$event->id][
'string'] .=
'-'.dol_print_date($event->date_end_in_calendar,
'dayhour',
'tzuserrel');
1419 if ($event->label) {
1420 $cases4[$h][$event->id][
'string'] .=
' - '.$event->label;
1422 $cases4[$h][$event->id][
'typecode'] = $event->type_code;
1423 $cases4[$h][$event->id][
'color'] = $color;
1424 if ($event->fk_project > 0) {
1425 if (empty($cacheprojects[$event->fk_project])) {
1427 $tmpproj->fetch($event->fk_project);
1428 $cacheprojects[$event->fk_project] = $tmpproj;
1430 $cases4[$h][$event->id][
'string'] .=
', '.$langs->trans(
"Project").
': '.$cacheprojects[$event->fk_project]->ref.
' - '.$cacheprojects[$event->fk_project]->title;
1432 if ($event->socid > 0) {
1433 if (empty($cachethirdparties[$event->socid])) {
1434 $tmpthirdparty =
new Societe($db);
1435 $tmpthirdparty->fetch($event->socid);
1436 $cachethirdparties[$event->socid] = $tmpthirdparty;
1438 $cases4[$h][$event->id][
'string'] .=
', '.$cachethirdparties[$event->socid]->name;
1440 if ($event->contact_id > 0) {
1441 if (empty($cachecontacts[$event->contact_id])) {
1442 $tmpcontact =
new Contact($db);
1443 $tmpcontact->fetch($event->contact_id);
1444 $cachecontacts[$event->contact_id] = $tmpcontact;
1446 $cases4[$h][$event->id][
'string'] .=
', '.$cachecontacts[$event->contact_id]->getFullName($langs);
1450 $busy = $event->transparency;
1451 $cases1[$h][$event->id][
'busy'] = $busy;
1452 $cases2[$h][$event->id][
'busy'] = $busy;
1453 $cases3[$h][$event->id][
'busy'] = $busy;
1454 $cases4[$h][$event->id][
'busy'] = $busy;
1455 $cases1[$h][$event->id][
'string'] = $event->label;
1456 $cases2[$h][$event->id][
'string'] = $event->label;
1457 $cases3[$h][$event->id][
'string'] = $event->label;
1458 $cases4[$h][$event->id][
'string'] = $event->label;
1459 $cases1[$h][$event->id][
'typecode'] = $event->type_code;
1460 $cases2[$h][$event->id][
'typecode'] = $event->type_code;
1461 $cases3[$h][$event->id][
'typecode'] = $event->type_code;
1462 $cases4[$h][$event->id][
'typecode'] = $event->type_code;
1463 $cases1[$h][$event->id][
'color'] = $color;
1464 $cases2[$h][$event->id][
'color'] = $color;
1465 $cases3[$h][$event->id][
'color'] = $color;
1466 $cases4[$h][$event->id][
'color'] = $color;
1477 for ($h = $begin_h; $h < $end_h; $h++) {
1486 $string1 =
' ';
1487 $string2 =
' ';
1488 $string3 =
' ';
1489 $string4 =
' ';
1494 if (isset($cases1[$h]) && $cases1[$h] !=
'') {
1496 if (count($cases1[$h]) > 1) {
1497 $title1 .= count($cases1[$h]).
' '.(count($cases1[$h]) == 1 ? $langs->trans(
"Event") : $langs->trans(
"Events"));
1501 $style1 =
'peruser_notbusy';
1503 $style1 =
'peruser_busy';
1505 foreach ($cases1[$h] as $id => $ev) {
1507 $style1 =
'peruser_busy';
1511 if (isset($cases2[$h]) && $cases2[$h] !=
'') {
1513 if (count($cases2[$h]) > 1) {
1514 $title2 .= count($cases2[$h]).
' '.(count($cases2[$h]) == 1 ? $langs->trans(
"Event") : $langs->trans(
"Events"));
1518 $style2 =
'peruser_notbusy';
1520 $style2 =
'peruser_busy';
1522 foreach ($cases2[$h] as $id => $ev) {
1524 $style2 =
'peruser_busy';
1528 if (isset($cases3[$h]) && $cases3[$h] !=
'') {
1530 if (count($cases3[$h]) > 1) {
1531 $title3 .= count($cases3[$h]).
' '.(count($cases3[$h]) == 1 ? $langs->trans(
"Event") : $langs->trans(
"Events"));
1535 $style3 =
'peruser_notbusy';
1537 $style3 =
'peruser_busy';
1539 foreach ($cases3[$h] as $id => $ev) {
1541 $style3 =
'peruser_busy';
1545 if (isset($cases4[$h]) && $cases4[$h] !=
'') {
1547 if (count($cases4[$h]) > 1) {
1548 $title4 .= count($cases4[$h]).
' '.(count($cases4[$h]) == 1 ? $langs->trans(
"Event") : $langs->trans(
"Events"));
1552 $style4 =
'peruser_notbusy';
1554 $style4 =
'peruser_busy';
1556 foreach ($cases4[$h] as $id => $ev) {
1558 $style4 =
'peruser_busy';
1567 if (!empty($cases1[$h]) && is_array($cases1[$h]) && count($cases1[$h]) && array_keys($cases1[$h])) {
1568 $ids1 = implode(
', ', array_keys($cases1[$h]));
1570 if (!empty($cases2[$h]) && is_array($cases2[$h]) && count($cases2[$h]) && array_keys($cases2[$h])) {
1571 $ids2 = implode(
', ', array_keys($cases2[$h]));
1573 if (!empty($cases3[$h]) && is_array($cases3[$h]) && count($cases3[$h]) && array_keys($cases3[$h])) {
1574 $ids3 = implode(
',', array_keys($cases3[$h]));
1576 if (!empty($cases4[$h]) && is_array($cases4[$h]) && count($cases4[$h]) && array_keys($cases4[$h])) {
1577 $ids4 = implode(
',', array_keys($cases4[$h]));
1580 if ($h == $begin_h) {
1581 echo
'<td class="'.$style.
'_peruserleft cal_peruser'.($var ?
' cal_impair '.$style.
'_impair' :
'').
'">';
1583 echo
'<td class="'.$style.
' cal_peruser'.($var ?
' cal_impair '.$style.
'_impair' :
'').
'">';
1586 if (!empty($cases1[$h]) && is_array($cases1[$h]) && count($cases1[$h]) == 1) {
1587 $output = array_slice($cases1[$h], 0, 1);
1588 $title1 = $langs->trans(
"Ref").
' '.$ids1.($title1 ?
' - '.$title1 :
'');
1589 if ($output[0][
'string']) {
1590 $title1 .= ($title1 ?
' - ' :
'').$output[0][
'string'];
1592 if ($output[0][
'color']) {
1593 $color1 = $output[0][
'color'];
1595 } elseif (!empty($cases1[$h]) && is_array($cases1[$h]) && count($cases1[$h]) > 1) {
1596 $title1 = $langs->trans(
"Ref").
' '.$ids1.($title1 ?
' - '.$title1 :
'');
1601 if (!empty($cases2[$h]) && is_array($cases2[$h]) && count($cases2[$h]) == 1) {
1602 $output = array_slice($cases2[$h], 0, 1);
1603 $title2 = $langs->trans(
"Ref").
' '.$ids2.($title2 ?
' - '.$title2 :
'');
1604 if ($output[0][
'string']) {
1605 $title2 .= ($title2 ?
' - ' :
'').$output[0][
'string'];
1607 if ($output[0][
'color']) {
1608 $color2 = $output[0][
'color'];
1610 } elseif (!empty($cases2[$h]) && is_array($cases2[$h]) && count($cases2[$h]) > 1) {
1611 $title2 = $langs->trans(
"Ref").
' '.$ids2.($title2 ?
' - '.$title2 :
'');
1616 if (!empty($cases3[$h]) && is_array($cases3[$h]) && count($cases3[$h]) == 1) {
1617 $output = array_slice($cases3[$h], 0, 1);
1618 $title3 = $langs->trans(
"Ref").
' '.$ids3.($title3 ?
' - '.$title3 :
'');
1619 if ($output[0][
'string']) {
1620 $title3 .= ($title3 ?
' - ' :
'').$output[0][
'string'];
1622 if ($output[0][
'color']) {
1623 $color3 = $output[0][
'color'];
1625 } elseif (!empty($cases3[$h]) && is_array($cases3[$h]) && count($cases3[$h]) > 1) {
1626 $title3 = $langs->trans(
"Ref").
' '.$ids3.($title3 ?
' - '.$title3 :
'');
1631 if (!empty($cases4[$h]) && is_array($cases4[$h]) && count($cases4[$h]) == 1) {
1632 $output = array_slice($cases4[$h], 0, 1);
1633 $title4 = $langs->trans(
"Ref").
' '.$ids3.($title4 ?
' - '.$title4 :
'');
1634 if ($output[0][
'string']) {
1635 $title4 .= ($title4 ?
' - ' :
'').$output[0][
'string'];
1637 if ($output[0][
'color']) {
1638 $color4 = $output[0][
'color'];
1640 } elseif (!empty($cases4[$h]) && is_array($cases4[$h]) && count($cases4[$h]) > 1) {
1641 $title4 = $langs->trans(
"Ref").
' '.$ids4.($title4 ?
' - '.$title4 :
'');
1645 print
'<table class="nobordernopadding case centpercent">';
1648 if ($style1 ==
'peruser_notbusy') {
1649 print
'style="border: 1px solid #'.($color1 ? $color1 :
"888").
' !important" ';
1650 } elseif ($color1) {
1651 print($color1 ?
'style="background: #'.$color1.
';"' :
'');
1654 print($style1 ? $style1.
' ' :
'');
1655 print
'onclickopenref center'.($title2 ?
' classfortooltip' :
'').($title1 ?
' cursorpointer' :
'').
'" ref="ref_'.$username->id.
'_'.sprintf(
"%04d", $year).
'_'.sprintf(
"%02d", $month).
'_'.sprintf(
"%02d", $day).
'_'.sprintf(
"%02d", $h).
'_00_'.($ids1 ? $ids1 :
'none').
'"'.($title1 ?
' title="'.$title1.
'"' :
'').
'>';
1660 if ($style2 ==
'peruser_notbusy') {
1661 print
'style="border: 1px solid #'.($color2 ? $color2 :
"888").
' !important" ';
1662 } elseif ($color2) {
1663 print($color2 ?
'style="background: #'.$color2.
';"' :
'');
1666 print($style2 ? $style2.
' ' :
'');
1667 print
'onclickopenref center'.($title2 ?
' classfortooltip' :
'').($title1 ?
' cursorpointer' :
'').
'" ref="ref_'.$username->id.
'_'.sprintf(
"%04d", $year).
'_'.sprintf(
"%02d", $month).
'_'.sprintf(
"%02d", $day).
'_'.sprintf(
"%02d", $h).
'_15_'.($ids2 ? $ids2 :
'none').
'"'.($title2 ?
' title="'.$title2.
'"' :
'').
'>';
1672 if ($style3 ==
'peruser_notbusy') {
1673 print
'style="border: 1px solid #'.($color3 ? $color3 :
"888").
' !important" ';
1674 } elseif ($color3) {
1675 print($color3 ?
'style="background: #'.$color3.
';"' :
'');
1678 print($style3 ? $style3.
' ' :
'');
1679 print
'onclickopenref center'.($title2 ?
' classfortooltip' :
'').($title3 ?
' cursorpointer' :
'').
'" ref="ref_'.$username->id.
'_'.sprintf(
"%04d", $year).
'_'.sprintf(
"%02d", $month).
'_'.sprintf(
"%02d", $day).
'_'.sprintf(
"%02d", $h).
'_30_'.($ids3 ? $ids3 :
'none').
'"'.($title3 ?
' title="'.$title3.
'"' :
'').
'>';
1684 if ($style4 ==
'peruser_notbusy') {
1685 print
'style="border: 1px solid #'.($color4 ? $color4 :
"888").
' !important" ';
1686 } elseif ($color4) {
1687 print($color4 ?
'style="background: #'.$color4.
';"' :
'');
1690 print($style4 ? $style4.
' ' :
'');
1691 print
'onclickopenref center'.($title3 ?
' classfortooltip' :
'').($title4 ?
' cursorpointer' :
'').
'" ref="ref_'.$username->id.
'_'.sprintf(
"%04d", $year).
'_'.sprintf(
"%02d", $month).
'_'.sprintf(
"%02d", $day).
'_'.sprintf(
"%02d", $h).
'_45_'.($ids4 ? $ids4 :
'none').
'"'.($title4 ?
' title="'.$title4.
'"' :
'').
'>';
if($user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
print_actions_filter( $form, $canedit, $status, $year, $month, $day, $showbirthday, $filtera, $filtert, $filtered, $pid, $socid, $action, $showextcals=array(), $actioncode='', $usergroupid=0, $excludetype='', $resourceid=0, $search_categ_cus=0)
Show filter form in agenda view.
calendars_prepare_head($param)
Define head array for tabs of agenda setup pages.
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage agenda events (actions)
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
if(isModEnabled('invoice') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&!getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD') && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') && $user->hasRight('tax', 'charges', 'lire')) if(isModEnabled('invoice') &&isModEnabled('order') && $user->hasRight("commande", "lire") &&!getDolGlobalString('WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')) $sql
Social contributions to pay.
dol_get_next_week($day, $week, $month, $year)
Return next week.
dol_get_first_day_week($day, $month, $year, $gm=false)
Return first day of week for a date.
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dol_string_nospecial($str, $newstr='_', $badcharstoreplace='', $badcharstoremove='', $keepspaces=0)
Clean a string from all punctuation characters to use it as a ref or login.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.