37require
'../../main.inc.php';
45require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
47require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
49require_once DOL_DOCUMENT_ROOT.
'/core/lib/agenda.lib.php';
50require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
51require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
56$action =
GETPOST(
'action',
'aZ09');
57$optioncss =
GETPOST(
'optioncss',
'aZ');
59if (empty($mode) && preg_match(
'/show_/', $action)) {
63$disabledefaultvalues =
GETPOSTINT(
'disabledefaultvalues');
66$check_birthday = !empty($conf->use_javascript_ajax) ?
GETPOSTINT(
"check_birthday") : 1;
67$filter =
GETPOST(
"search_filter",
'alpha', 3) ?
GETPOST(
"search_filter",
'alpha', 3) :
GETPOST(
"filter",
'alpha', 3);
68$filtert =
GETPOST(
"search_filtert",
"intcomma", 3) ?
GETPOST(
"search_filtert",
"intcomma", 3) :
GETPOST(
"filtert",
"intcomma", 3);
69$usergroup =
GETPOST(
"search_usergroup",
"intcomma", 3) ?
GETPOST(
"search_usergroup",
"intcomma", 3) :
GETPOST(
"usergroup",
"intcomma", 3);
70$search_categ_cus =
GETPOST(
"search_categ_cus",
'intcomma', 3) ?
GETPOST(
"search_categ_cus",
'intcomma', 3) : 0;
74 $filtert = (string) $user->id;
84$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
85$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
87if (empty($page) || $page < 0 ||
GETPOST(
'button_search',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
91$offset = $limit * $page;
96 $sortfield =
"a.datec";
102 $socid = $user->socid;
109if (!$user->hasRight(
'agenda',
'myactions',
'read')) {
112if (!$user->hasRight(
'agenda',
'allactions',
'read')) {
115if (!$user->hasRight(
'agenda',
'allactions',
'read') || $filter ==
'mine') {
116 $filtert = (string) $user->id;
124$pid = GETPOSTISSET(
"search_projectid") ?
GETPOSTINT(
"search_projectid", 3) :
GETPOSTINT(
"projectid", 3);
125$status = GETPOSTISSET(
"search_status") ?
GETPOST(
"search_status",
'aZ09') :
GETPOST(
"status",
'aZ09');
126$type = GETPOSTISSET(
"search_type") ?
GETPOST(
"search_type",
'aZ09') :
GETPOST(
"type",
'aZ09');
130if ($dateselect > 0) {
137if (
GETPOST(
'search_actioncode',
'array:aZ09')) {
138 $actioncode =
GETPOST(
'search_actioncode',
'array:aZ09', 3);
139 if (!count($actioncode)) {
143 $actioncode =
GETPOST(
"search_actioncode",
"alpha", 3) ?
GETPOST(
"search_actioncode",
"alpha", 3) : (
GETPOST(
"search_actioncode") ==
'0' ?
'0' : ((!
getDolGlobalString(
'AGENDA_DEFAULT_FILTER_TYPE') || $disabledefaultvalues) ?
'' :
getDolGlobalString(
'AGENDA_DEFAULT_FILTER_TYPE')));
145if (is_scalar($actioncode) && $actioncode ==
'-1') {
149if ($status ==
'' && !GETPOSTISSET(
'search_status')) {
155if (empty($mode) && !GETPOSTISSET(
'mode')) {
156 $mode = $defaultview;
158if ($mode ==
'default') {
159 $mode = (($defaultview !=
'show_list') ? $defaultview :
'show_month');
162 $mode =
'show_month';
167 $week = ($week ? $week :
date(
"W"));
168 $day = ($day ? $day :
date(
"d"));
172 $day = ($day ? $day :
date(
"d"));
178$langs->loadLangs(array(
'agenda',
'other',
'commercial'));
181$hookmanager->initHooks(array(
'agenda'));
183$result =
restrictedArea($user,
'agenda', 0,
'actioncomm&societe',
'myactions|allactions',
'fk_soc',
'id');
184if ($user->socid && $socid) {
188require_once DOL_DOCUMENT_ROOT.
'/core/redirect_if_setup_not_complete.inc.php';
195if (
GETPOST(
"viewlist",
'alpha') || $mode ==
'show_list') {
197 if (is_array($_POST)) {
198 foreach ($_POST as $key => $val) {
199 if ($key ==
'token') {
202 $param .=
'&'.urlencode($key).
'='.urlencode($val);
205 if (!preg_match(
'/action=/', $param)) {
206 $param .= ($param ?
'&' :
'').
'mode=show_list';
209 header(
"Location: ".DOL_URL_ROOT.
'/comm/action/list.php?'.$param);
213if (
GETPOST(
"viewperuser",
'alpha') || $mode ==
'show_peruser') {
215 if (is_array($_POST)) {
216 foreach ($_POST as $key => $val) {
217 if ($key ==
'token') {
220 $param .=
'&'.urlencode($key).
'='.urlencode($val);
224 header(
"Location: ".DOL_URL_ROOT.
'/comm/action/peruser.php?'.$param);
240 'maxprint' => $maxprint,
242 'filtert' => $filtert,
243 'showbirthday' => $check_birthday,
244 'canedit' => $canedit,
245 'optioncss' => $optioncss,
246 'actioncode' => $actioncode,
248 'resourceid' => $resourceid,
249 'usergroup' => $usergroup,
251$reshook = $hookmanager->executeHooks(
'beforeAgenda', $parameters, $object, $action);
256$form =
new Form($db);
257$companystatic =
new Societe($db);
258$contactstatic =
new Contact($db);
259$userstatic =
new User($db);
261$help_url =
'EN:Module_Agenda_En|FR:Module_Agenda|ES:Módulo_Agenda|DE:Modul_Terminplanung';
262llxHeader(
'', $langs->trans(
"Agenda"), $help_url);
266$nowyear = $nowarray[
'year'];
267$nowmonth = $nowarray[
'mon'];
268$nowday = $nowarray[
'mday'];
270$listofextcals = array();
275 while ($i < $MAXAGENDA) {
277 $source =
'AGENDA_EXT_SRC'.$i;
278 $name =
'AGENDA_EXT_NAME'.$i;
279 $offsettz =
'AGENDA_EXT_OFFSETTZ'.$i;
280 $color =
'AGENDA_EXT_COLOR'.$i;
281 $default =
'AGENDA_EXT_ACTIVEBYDEFAULT'.$i;
282 $buggedfile =
'AGENDA_EXT_BUGGEDFILE'.$i;
285 $listofextcals[] = array(
286 'type' =>
'globalsetup',
302 while ($i < $MAXAGENDA) {
304 $source =
'AGENDA_EXT_SRC_'.$user->id.
'_'.$i;
305 $name =
'AGENDA_EXT_NAME_'.$user->id.
'_'.$i;
306 $offsettz =
'AGENDA_EXT_OFFSETTZ_'.$user->id.
'_'.$i;
307 $color =
'AGENDA_EXT_COLOR_'.$user->id.
'_'.$i;
308 $enabled =
'AGENDA_EXT_ENABLED_'.$user->id.
'_'.$i;
309 $default =
'AGENDA_EXT_ACTIVEBYDEFAULT_'.$user->id.
'_'.$i;
310 $buggedfile =
'AGENDA_EXT_BUGGEDFILE_'.$user->id.
'_'.$i;
314 $listofextcals[] = array(
315 'type' =>
'usersetup',
318 'offsettz' => (
int) (empty($user->conf->$offsettz) ? 0 : $user->
conf->$offsettz),
328$max_day_in_month = 0;
339$max_day_in_prev_month = 0;
343if (empty($mode) || $mode ==
'show_month') {
345 $prev_year = $prev[
'year'];
346 $prev_month = $prev[
'month'];
348 $next_year = $next[
'year'];
349 $next_month = $next[
'month'];
351 $max_day_in_prev_month = (int)
date(
"t",
dol_mktime(12, 0, 0, $prev_month, 1, $prev_year,
'gmt'));
352 $max_day_in_month = (int)
date(
"t",
dol_mktime(12, 0, 0, $month, 1, $year,
'gmt'));
354 $tmpday = - (int)
date(
"w",
dol_mktime(12, 0, 0, $month, 1, $year,
'gmt')) + 2;
360 $firstdaytoshow =
dol_mktime(0, 0, 0, $prev_month, $max_day_in_prev_month + $tmpday, $prev_year,
'tzuserrel');
361 $next_day = 7 - ($max_day_in_month + 1 - $tmpday) % 7;
365 $lastdaytoshow =
dol_mktime(0, 0, 0, $next_month, $next_day, $next_year,
'tzuserrel');
367if ($mode ==
'show_week') {
369 $prev_year = $prev[
'prev_year'];
370 $prev_month = $prev[
'prev_month'];
371 $prev_day = $prev[
'prev_day'];
372 $first_day = $prev[
'first_day'];
373 $first_month = $prev[
'first_month'];
374 $first_year = $prev[
'first_year'];
376 $week = $prev[
'week'];
380 $next_year = $next[
'year'];
381 $next_month = $next[
'month'];
382 $next_day = $next[
'day'];
385 $firstdaytoshow =
dol_mktime(0, 0, 0, $first_month, $first_day, $first_year,
'tzuserrel');
388 $max_day_in_month =
date(
"t",
dol_mktime(0, 0, 0, $month, 1, $year,
'gmt'));
390 $tmpday = $first_day;
392if ($mode ==
'show_day') {
394 $prev_year = $prev[
'year'];
395 $prev_month = $prev[
'month'];
396 $prev_day = $prev[
'day'];
398 $next_year = $next[
'year'];
399 $next_month = $next[
'month'];
400 $next_day = $next[
'day'];
402 $firstdaytoshow =
dol_mktime(0, 0, 0, $prev_month, $prev_day, $prev_year,
'tzuserrel');
403 $lastdaytoshow =
dol_mktime(0, 0, 0, $next_month, $next_day, $next_year,
'tzuserrel');
419if ($actioncode || GETPOSTISSET(
'search_actioncode')) {
420 if (is_array($actioncode)) {
421 foreach ($actioncode as $str_action) {
422 $param .=
"&search_actioncode[]=".urlencode($str_action);
425 $param .=
"&search_actioncode=".urlencode($actioncode);
428if ($resourceid > 0) {
429 $param .=
"&search_resourceid=".urlencode((
string) ($resourceid));
431if ($status || GETPOSTISSET(
'status') || GETPOSTISSET(
'search_status')) {
432 $param .=
"&search_status=".urlencode($status);
435 $param .=
"&search_filter=".urlencode((
string) $filter);
438 $param .=
"&search_filtert=".urlencode((
string) $filtert);
441 $param .=
"&search_usergroup=".urlencode((
string) ($usergroup));
444 $param .=
"&search_socid=".urlencode((
string) ($socid));
446if ($check_birthday) {
447 $param .=
"&check_birthday=1";
450 $param .=
"&check_holiday=1";
453 $param .=
"&search_projectid=".urlencode((
string) ($pid));
456 $param .=
"&search_type=".urlencode($type);
458$param .=
"&maxprint=".urlencode((
string) ($maxprint));
459if ($mode ==
'show_day' || $mode ==
'show_week' || $mode ==
'show_month') {
460 $param .=
'&mode='.urlencode($mode);
462if ($search_categ_cus != 0) {
463 $param .=
'&search_categ_cus='.urlencode((
string) ($search_categ_cus));
466 $param .=
'&check_holiday=1';
471$nav .=
'<div class="navselectiondate inline-block nowraponall">';
472if (empty($mode) || $mode ==
'show_month') {
473 $nav .=
"<a href=\"?year=".$prev_year.
"&month=".$prev_month.$param.
"\"><i class=\"fa fa-chevron-left\"></i></a> \n";
474 $nav .=
" <span id=\"month_name\">".dol_print_date(
dol_mktime(0, 0, 0, $month, 1, $year),
"%b %Y");
475 $nav .=
" </span>\n";
476 $nav .=
" <a href=\"?year=".$next_year.
"&month=".$next_month.$param.
"\"><i class=\"fa fa-chevron-right\"></i></a>\n";
479if ($mode ==
'show_week') {
480 $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";
481 $nav .=
" <span id=\"month_name\">".dol_print_date(
dol_mktime(0, 0, 0, $first_month, $first_day, $first_year),
"%Y").
", ".$langs->trans(
"WeekShort").
" ".$week;
482 $nav .=
" </span>\n";
483 $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";
484 $picto =
'calendarweek';
486if ($mode ==
'show_day') {
487 $nav .=
"<a href=\"?year=".$prev_year.
"&month=".$prev_month.
"&day=".$prev_day.$param.
"\"><i class=\"fa fa-chevron-left\"></i></a> \n";
488 $nav .=
" <span id=\"month_name\">".dol_print_date(
dol_mktime(0, 0, 0, $month, $day, $year),
"daytextshort");
489 $nav .=
" </span>\n";
490 $nav .=
" <a href=\"?year=".$next_year.
"&month=".$next_month.
"&day=".$next_day.$param.
"\"><i class=\"fa fa-chevron-right\"></i></a>\n";
491 $picto =
'calendarday';
493if (empty($conf->dol_optimize_smallscreen)) {
494 $nav .=
' <a href="?year='.$nowyear.
'&month='.$nowmonth.
'&day='.$nowday.$param.
'" class="datenowlink marginleftonly marginrightonly">'.$langs->trans(
"Today").
'</a> ';
498$nav .= $form->selectDate($dateselect,
'dateselect', 0, 0, 1,
'', 1, 0);
500$nav .=
'<button type="submit" class="liste_titre button_search valignmiddle" name="button_search_x" value="x"><span class="fa fa-search"></span></button>';
503$paramnodate = $param;
504$param .=
'&year='.$year.
'&month='.$month.($day ?
'&day='.$day :
'');
519$paramnoaction = preg_replace(
'/mode=[a-z_]+/',
'', preg_replace(
'/action=[a-z_]+/',
'', $param));
520$paramnoactionodate = preg_replace(
'/mode=[a-z_]+/',
'', preg_replace(
'/action=[a-z_]+/',
'', $paramnodate));
524print
'<form method="POST" id="searchFormList" class="listactionsfilter" action="'.$_SERVER[
"PHP_SELF"].
'">'.
"\n";
525if ($optioncss !=
'') {
526 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
528print
'<input type="hidden" name="token" value="'.newToken().
'">';
529print
'<input type="hidden" name="mode" value="'.$mode.
'">';
532$viewmode =
'<div class="navmode inline-block">';
534$viewmode .=
'<a class="btnTitle'.($mode ==
'list' ?
' btnTitleSelected' :
'').
' reposition" href="'.DOL_URL_ROOT.
'/comm/action/list.php?mode=show_list&restore_lastsearch_values=1'.$paramnoactionodate.
'">';
536$viewmode .=
img_picto($langs->trans(
"List"),
'object_calendarlist',
'class="imgforviewmode pictoactionview block"');
538$viewmode .=
'<span class="valignmiddle text-plus-circle btnTitle-label hideonsmartphone inline-block width75 divoverflow">'.$langs->trans(
"ViewList").
'</span></a>';
540$viewmode .=
'<a class="btnTitle'.($mode ==
'show_month' ?
' btnTitleSelected' :
'').
' reposition" href="'.DOL_URL_ROOT.
'/comm/action/index.php?mode=show_month&year='.(isset(
$object->datep) ?
dol_print_date(
$object->datep,
'%Y') : $year).
'&month='.(isset(
$object->datep) ?
dol_print_date(
$object->datep,
'%m') : $month).
'&day='.(isset(
$object->datep) ?
dol_print_date(
$object->datep,
'%d') : $day).$paramnoactionodate.
'">';
542$viewmode .=
img_picto($langs->trans(
"ViewCal"),
'object_calendarmonth',
'class="pictoactionview block"');
544$viewmode .=
'<span class="valignmiddle text-plus-circle btnTitle-label hideonsmartphone inline-block width75 divoverflow">'.$langs->trans(
"ViewCal").
'</span></a>';
546$viewmode .=
'<a class="btnTitle'.($mode ==
'show_week' ?
' btnTitleSelected' :
'').
' reposition" href="'.DOL_URL_ROOT.
'/comm/action/index.php?mode=show_week&year='.(isset(
$object->datep) ?
dol_print_date(
$object->datep,
'%Y') : $year).
'&month='.(isset(
$object->datep) ?
dol_print_date(
$object->datep,
'%m') : $month).
'&day='.(isset(
$object->datep) ?
dol_print_date(
$object->datep,
'%d') : $day).$paramnoactionodate.
'">';
548$viewmode .=
img_picto($langs->trans(
"ViewWeek"),
'object_calendarweek',
'class="pictoactionview block"');
550$viewmode .=
'<span class="valignmiddle text-plus-circle btnTitle-label hideonsmartphone inline-block width75 divoverflow">'.$langs->trans(
"ViewWeek").
'</span></a>';
552$viewmode .=
'<a class="btnTitle'.($mode ==
'show_day' ?
' btnTitleSelected' :
'').
' reposition" href="'.DOL_URL_ROOT.
'/comm/action/index.php?mode=show_day&year='.(isset(
$object->datep) ?
dol_print_date(
$object->datep,
'%Y') : $year).
'&month='.(isset(
$object->datep) ?
dol_print_date(
$object->datep,
'%m') : $month).
'&day='.(isset(
$object->datep) ?
dol_print_date(
$object->datep,
'%d') : $day).$paramnoactionodate.
'">';
554$viewmode .=
img_picto($langs->trans(
"ViewDay"),
'object_calendarday',
'class="pictoactionview block"');
556$viewmode .=
'<span class="valignmiddle text-plus-circle btnTitle-label hideonsmartphone inline-block width75 divoverflow">'.$langs->trans(
"ViewDay").
'</span></a>';
558$viewmode .=
'<a class="btnTitle'.($mode ==
'show_peruser' ?
' btnTitleSelected' :
'').
' reposition" href="'.DOL_URL_ROOT.
'/comm/action/peruser.php?mode=show_peruser&year='.(isset(
$object->datep) ?
dol_print_date(
$object->datep,
'%Y') : $year).
'&month='.(isset(
$object->datep) ?
dol_print_date(
$object->datep,
'%m') : $month).
'&day='.(isset(
$object->datep) ?
dol_print_date(
$object->datep,
'%d') : $day).$paramnoactionodate.
'">';
560$viewmode .=
img_picto($langs->trans(
"ViewPerUser"),
'object_calendarperuser',
'class="pictoactionview block"');
562$viewmode .=
'<span class="valignmiddle text-plus-circle btnTitle-label hideonsmartphone inline-block width75 divoverflow" title="'.dolPrintHTML($langs->trans(
"ViewPerUser")).
'">'.$langs->trans(
"ViewPerUser").
'</span></a>';
565$parameters = array();
567$reshook = $hookmanager->executeHooks(
'addCalendarView', $parameters, $object, $action);
568if (empty($reshook)) {
569 $viewmode .= $hookmanager->resPrint;
570} elseif ($reshook > 1) {
571 $viewmode = $hookmanager->resPrint;
574$viewmode .=
'</div>';
576$viewmode .=
'<span class="marginrightonly"></span>';
581if ($user->hasRight(
'agenda',
'myactions',
'create') || $user->hasRight(
'agenda',
'allactions',
'create')) {
584 $newparam .=
'&month='.((int) $month).
'&year='.((int) $tmpforcreatebutton[
'year']).
'&mode='.urlencode($mode);
589 $urltocreateaction = DOL_URL_ROOT.
'/comm/action/card.php?action=create';
590 $urltocreateaction .=
'&apyear='.$tmpforcreatebutton[
'year'].
'&apmonth='.$tmpforcreatebutton[
'mon'].
'&apday='.$tmpforcreatebutton[
'mday'].
'&aphour='.$tmpforcreatebutton[
'hours'].
'&apmin='.$tmpforcreatebutton[
'minutes'];
591 $urltocreateaction .=
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].($newparam ?
'?'.$newparam :
''));
593 $newcardbutton .=
dolGetButtonTitle($langs->trans(
"AddAction"),
'',
'fa fa-plus-circle', $urltocreateaction);
600$showextcals = $listofextcals;
601$bookcalcalendars = array();
605 $sql =
"SELECT ba.rowid, bc.label, bc.ref, bc.rowid as id_cal";
606 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bookcal_availabilities as ba";
607 $sql .=
" JOIN ".MAIN_DB_PREFIX.
"bookcal_calendar as bc";
608 $sql .=
" ON bc.rowid = ba.fk_bookcal_calendar";
609 $sql .=
" WHERE bc.status = 1";
610 $sql .=
" AND ba.status = 1";
611 $sql .=
" AND bc.entity IN (".getEntity(
'agenda').
")";
612 if (!empty($filtert) && $filtert !=
'-1') {
613 $sql .=
" AND bc.visibility IN (".$db->sanitize($filtert, 0, 0, 0, 0).
")";
615 $resql = $db->query($sql);
617 $num = $db->num_rows($resql);
620 $objp = $db->fetch_object($resql);
621 $label = !empty($objp->label) ? $objp->label : $objp->ref;
622 $bookcalcalendars[
"calendars"][$objp->id_cal] = array(
"id" => $objp->id_cal,
"label" => $label);
623 $bookcalcalendars[
"availabilitieslink"][$objp->rowid] = $objp->id_cal;
631if (!empty($conf->use_javascript_ajax)) {
632 $s .=
"\n".
'<!-- Div to calendars selectors -->'.
"\n";
634 $s .=
'<script type="text/javascript">'.
"\n";
635 $s .=
'jQuery(document).ready(function () {'.
"\n";
636 $s .=
'jQuery(".check_birthday").click(function() { console.log("Toggle class .family_birthday"); jQuery(".family_birthday").toggle(); });'.
"\n";
637 $s .=
'jQuery(".check_holiday").click(function() { console.log("Toggle class .family_holiday"); jQuery(".family_holiday").toggle(); jQuery(this).closest("form").submit(); });'.
"\n";
638 if (
isModEnabled(
"bookcal") && !empty($bookcalcalendars[
"calendars"])) {
639 foreach ($bookcalcalendars[
"calendars"] as $key => $value) {
640 $s .=
'jQuery(".check_bookcal_calendar_'.$value[
'id'].
'").click(function() { console.log("Toggle Bookcal Calendar '.$value[
'id'].
'"); jQuery(".family_bookcal_calendar_'.$value[
'id'].
'").toggle(); });'.
"\n";
643 if ($mode ==
"show_week" || $mode ==
"show_month" || empty($mode)) {
645 $s .=
'jQuery( "div.sortable" ).sortable({connectWith: ".sortable", placeholder: "ui-state-highlight", items: "div.movable", receive: function( event, ui ) {'.
"\n";
647 $s .=
'console.log("submit form to record new event");'.
"\n";
649 $s .=
'var newval = jQuery(event.target).closest("div.dayevent").attr("id");'.
"\n";
650 $s .=
'console.log("found parent div.dayevent with id = "+newval);'.
"\n";
651 $s .=
'var frm=jQuery("#searchFormList");'.
"\n";
652 $s .=
'var newurl = ui.item.find("a.cal_event").attr("href");'.
"\n";
653 $s .=
'console.log("Found url on href of a.cal_event"+newurl+", we submit form with actionmove=mupdate");'.
"\n";
654 $s .=
'frm.attr("action", newurl).children("#newdate").val(newval);frm.submit();}'.
"\n";
658 $s .=
'</script>'.
"\n";
661 $s .=
'<div class="nowrap inline-block minheight30"><input type="checkbox" id="check_mytasks" name="check_mytasks" value="1" checked disabled><label class="labelcalendar"><span class="check_holiday_text"> '.$langs->trans(
"LocalAgenda").
' </span></label></div>';
664 if ($user->hasRight(
"holiday",
"read")) {
666 <div class="nowrap inline-block minheight30"><input type="checkbox" id="check_holiday" name="check_holiday" value="1" class="marginleftonly check_holiday"' . ($check_holiday
667 ?
' checked' :
'') .
'>
668 <label for="check_holiday" class="labelcalendar">
669 <span class="check_holiday_text">' . $langs->trans(
"Holidays") .
'</span>
675 if (is_array($showextcals) && count($showextcals) > 0) {
676 $s .=
'<script type="text/javascript">'.
"\n";
677 $s .=
'jQuery(document).ready(function () {
678 jQuery("div input[name^=\"check_ext\"]").each(function(index, elem) {
679 var name = jQuery(elem).attr("name");
680 if (jQuery(elem).is(":checked")) {
681 jQuery(".family_ext" + name.replace("check_ext", "")).show();
683 jQuery(".family_ext" + name.replace("check_ext", "")).hide();
687 jQuery("div input[name^=\"check_ext\"]").click(function() {
688 var name = $(this).attr("name");
689 jQuery(".family_ext" + name.replace("check_ext", "")).toggle();
692 $s .=
'</script>'.
"\n";
694 foreach ($showextcals as $val) {
695 $htmlname = md5($val[
'name']);
697 if (!empty($val[
'default']) ||
GETPOSTINT(
'check_ext'.$htmlname)) {
698 $default =
"checked";
703 $tooltip = $langs->trans(
"Cache").
' '.round($DELAYFORCACHE / 60).
'mn';
705 $s .=
'<div class="nowrap inline-block minheight30"><input type="checkbox" id="check_ext'.$htmlname.
'" class="marginleftonly check_ext_'.$htmlname.
'" name="check_ext'.$htmlname.
'" value="1" '.$default.
'><label for="check_ext'.$htmlname.
'" title="'.
dol_escape_htmltag($tooltip).
'" class="labelcalendar">'.
dol_escape_htmltag($val[
'name']).
'</label> </div>';
710 $s .=
'<div class="nowrap inline-block minheight30"><input type="checkbox" id="check_birthday" name="check_birthday" class="marginleftonly check_birthday" value="1" '. (
GETPOSTINT(
'check_birthday') ?
' checked' :
'') .
'><label for="check_birthday" class="labelcalendar"> <span class="check_birthday_text">'.$langs->trans(
"AgendaShowBirthdayEvents").
'</span></label> </div>';
714 if (!empty($bookcalcalendars[
"calendars"])) {
715 foreach ($bookcalcalendars[
"calendars"] as $key => $value) {
716 $label = $value[
'label'];
717 $s .=
'<div class="nowrap inline-block minheight30">';
718 $s .=
'<input '.(GETPOST(
'check_bookcal_calendar_'.$value[
'id']) ?
"checked" :
"").
' type="checkbox" id="check_bookcal_calendar_'.$value[
'id'].
'" name="check_bookcal_calendar_'.$value[
'id'].
'" class="marginleftonly check_bookcal_calendar_'.$value[
'id'].
'">';
719 $s .=
'<label for="check_bookcal_calendar_'.$value[
'id'].
'" class="labelcalendar">';
720 $s .=
'<span class="check_bookcal_calendar_'.$value[
'id'].
'_text">'.$langs->trans(
"AgendaShowBookcalCalendar", $label).
'</span>';
721 $s .=
'</label> </div>';
727 $parameters = array();
728 $reshook = $hookmanager->executeHooks(
'addCalendarChoice', $parameters, $object, $action);
729 if (empty($reshook)) {
730 $s .= $hookmanager->resPrint;
731 } elseif ($reshook > 1) {
732 $s = $hookmanager->resPrint;
735 $s .=
"\n".
'<!-- End div to calendars selectors -->'.
"\n";
738 $newparam = preg_replace(
'/check_birthday=[0-1]/i',
'check_birthday='.(empty($check_birthday) ? 1 : 0), $newparam);
739 if (!preg_match(
'/check_birthday=/i', $newparam)) {
740 $newparam .=
'&check_birthday=1';
744 if (empty($check_birthday)) {
745 $s .= $langs->trans(
"AgendaShowBirthdayEvents");
747 $s .= $langs->trans(
"AgendaHideBirthdayEvents");
754$eventarray = array();
762$sql .=
' a.id, a.label,';
765$sql .=
' a.percent,';
766$sql .=
' a.fk_user_author,a.fk_user_action,';
767$sql .=
' a.transparency, a.priority, a.fulldayevent, a.location,';
768$sql .=
' a.fk_soc, a.fk_contact, a.fk_project, a.fk_bookcal_calendar,';
769$sql .=
' a.fk_element, a.elementtype,';
770$sql .=
' ca.code as type_code, ca.libelle as type_label, ca.color as type_color, ca.type as type_type, ca.picto as type_picto';
773$parameters = array();
774$reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters, $object, $action);
775$sql .= $hookmanager->resPrint;
779$sql .=
" FROM ".MAIN_DB_PREFIX.
"c_actioncomm as ca, ".MAIN_DB_PREFIX.
"actioncomm as a";
782if (($filtert !=
'-1' && $filtert !=
'-2') || $usergroup > 0) {
784 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"actioncomm_resources as ar ON ar.fk_actioncomm = a.id AND ar.element_type = 'user'";
785 if ($filtert !=
'-1' && $filtert !=
'-2' && $filtert !=
'-3') {
786 $sql .=
" AND (ar.fk_element IN (".$db->sanitize($filtert).
") OR (ar.fk_element IS NULL AND a.fk_user_action = ".((int) $filtert).
"))";
787 } elseif ($filtert ==
'-3') {
788 $sql .=
" AND ar.fk_element IN (".$db->sanitize(implode(
',', $user->getAllChildIds(1))).
")";
790 if ($usergroup > 0) {
791 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"usergroup_user as ugu ON ugu.fk_user = ar.fk_element AND ugu.fk_usergroup = ".((int) $usergroup);
796if ($resourceid > 0) {
797 $sql .=
", ".MAIN_DB_PREFIX.
"element_resources as r";
801$parameters = array();
802$reshook = $hookmanager->executeHooks(
'printFieldListFrom', $parameters, $object, $action);
803$sql .= $hookmanager->resPrint;
805$sql .=
" WHERE a.fk_action = ca.id";
806$sql .=
" AND a.entity IN (".getEntity(
'agenda').
")";
808if (!empty($actioncode)) {
810 if ((is_array($actioncode) && in_array(
'AC_NON_AUTO', $actioncode)) || $actioncode ==
'AC_NON_AUTO') {
811 $sql .=
" AND ca.type != 'systemauto'";
812 } elseif ((is_array($actioncode) && in_array(
'AC_ALL_AUTO', $actioncode)) || $actioncode ==
'AC_ALL_AUTO') {
813 $sql .=
" AND ca.type = 'systemauto'";
815 if ((is_array($actioncode) && in_array(
'AC_OTH', $actioncode)) || $actioncode ==
'AC_OTH') {
816 $sql .=
" AND ca.type != 'systemauto'";
818 if ((is_array($actioncode) && in_array(
'AC_OTH_AUTO', $actioncode)) || $actioncode ==
'AC_OTH_AUTO') {
819 $sql .=
" AND ca.type = 'systemauto'";
823 if ((is_array($actioncode) && in_array(
'AC_NON_AUTO', $actioncode)) || $actioncode ===
'AC_NON_AUTO') {
824 $sql .=
" AND ca.type != 'systemauto'";
825 } elseif ((is_array($actioncode) && in_array(
'AC_ALL_AUTO', $actioncode)) || $actioncode ===
'AC_ALL_AUTO') {
826 $sql .=
" AND ca.type = 'systemauto'";
828 if (is_array($actioncode)) {
830 $actioncode = array_filter(
837 return ((
string) $value !==
'-1');
840 if (count($actioncode)) {
841 $sql .=
" AND ca.code IN (".$db->sanitize(
"'".implode(
"','", $actioncode).
"'", 1).
")";
843 } elseif ($actioncode !==
'-1') {
844 $sql .=
" AND ca.code IN (".$db->sanitize(
"'".implode(
"','", explode(
',', $actioncode)).
"'", 1).
")";
849if ($resourceid > 0) {
850 $sql .=
" AND r.element_type = 'action' AND r.element_id = a.id AND r.resource_id = ".((int) $resourceid);
853 $sql .=
" AND a.fk_project=".((int) $pid);
857if (
isModEnabled(
"societe") && !$user->hasRight(
'societe',
'client',
'voir')) {
858 $search_sale = $user->id;
861if ($search_sale && $search_sale !=
'-1') {
862 if ($search_sale == -2) {
863 $sql .=
" AND NOT EXISTS (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX.
"societe_commerciaux as sc WHERE sc.fk_soc = a.fk_soc)";
864 } elseif ($search_sale > 0) {
865 $sql .=
" AND (a.fk_soc IS NULL OR 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).
"))";
870 $sql .=
" AND a.fk_soc = ".((int) $socid);
873if ($mode ==
'show_day') {
875 $sql .=
" (a.datep BETWEEN '".$db->idate(
dol_mktime(0, 0, 0, $month, $day, $year,
'tzuserrel')).
"'";
876 $sql .=
" AND '".$db->idate(
dol_mktime(23, 59, 59, $month, $day, $year,
'tzuserrel')).
"')";
878 $sql .=
" (a.datep2 BETWEEN '".$db->idate(
dol_mktime(0, 0, 0, $month, $day, $year,
'tzuserrel')).
"'";
879 $sql .=
" AND '".$db->idate(
dol_mktime(23, 59, 59, $month, $day, $year,
'tzuserrel')).
"')";
881 $sql .=
" (a.datep < '".$db->idate(
dol_mktime(0, 0, 0, $month, $day, $year,
'tzuserrel')).
"'";
882 $sql .=
" AND a.datep2 > '".$db->idate(
dol_mktime(23, 59, 59, $month, $day, $year,
'tzuserrel')).
"')";
887 $sql .=
" (a.datep BETWEEN '".$db->idate(
dol_mktime(0, 0, 0, $month, 1, $year) - (60 * 60 * 24 * 7)).
"'";
888 $sql .=
" AND '".$db->idate(
dol_mktime(23, 59, 59, $month, 28, $year) + (60 * 60 * 24 * 10)).
"')";
890 $sql .=
" (a.datep2 BETWEEN '".$db->idate(
dol_mktime(0, 0, 0, $month, 1, $year) - (60 * 60 * 24 * 7)).
"'";
891 $sql .=
" AND '".$db->idate(
dol_mktime(23, 59, 59, $month, 28, $year) + (60 * 60 * 24 * 10)).
"')";
893 $sql .=
" (a.datep < '".$db->idate(
dol_mktime(0, 0, 0, $month, 1, $year) - (60 * 60 * 24 * 7)).
"'";
894 $sql .=
" AND a.datep2 > '".$db->idate(
dol_mktime(23, 59, 59, $month, 28, $year) + (60 * 60 * 24 * 10)).
"')";
898 $sql .=
" AND ca.id = ".((int) $type);
902 $sql .=
" AND a.percent = 0";
904if ($status ===
'na') {
906 $sql .=
" AND a.percent = -1";
908if ($status ==
'50') {
910 $sql .=
" AND (a.percent > 0 AND a.percent < 100)";
912if ($status ==
'done' || $status ==
'100') {
913 $sql .=
" AND (a.percent = 100)";
915if ($status ==
'todo') {
916 $sql .=
" AND (a.percent >= 0 AND a.percent < 100)";
920if ($search_categ_cus != -1) {
921 if ($search_categ_cus == -2) {
922 $sql .=
" AND NOT EXISTS (SELECT ca.fk_actioncomm FROM ".MAIN_DB_PREFIX.
"categorie_actioncomm as ca WHERE ca.fk_actioncomm = a.id)";
923 } elseif ($search_categ_cus > 0) {
924 $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).
"))";
929$sql .= $db->order(
"datep");
931$MAXONSAMEPAGE = 5000;
933$sql .= $db->plimit($MAXONSAMEPAGE + 1);
935dol_syslog(
"comm/action/index.php", LOG_DEBUG);
937$resql = $db->query($sql);
939 $num = $db->num_rows($resql);
943 while ($i < $num && $i < $MAXONSAMEPAGE) {
944 $obj = $db->fetch_object($resql);
947 if (
getDolGlobalString(
'AGENDA_ALWAYS_HIDE_AUTO') && $obj->type_code ==
'AC_OTH_AUTO') {
955 $event->id = $obj->id;
956 $event->ref = (string) $event->id;
958 $event->fulldayevent = $obj->fulldayevent;
961 if ($event->fulldayevent) {
963 $event->datep = $db->jdate($obj->datep, $tzforfullday ?
'tzuser' :
'tzserver');
964 $event->datef = $db->jdate($obj->datep2, $tzforfullday ?
'tzuser' :
'tzserver');
967 $event->datep = $db->jdate($obj->datep,
'tzserver');
968 $event->datef = $db->jdate($obj->datep2,
'tzserver');
974 $event->type_code = $obj->type_code;
975 $event->type_label = $obj->type_label;
976 $event->type_color = $obj->type_color;
977 $event->type = $obj->type_type;
978 $event->type_picto = $obj->type_picto;
980 $event->label = $obj->label;
981 $event->percentage = $obj->percent;
983 $event->authorid = $obj->fk_user_author;
984 $event->userownerid = $obj->fk_user_action;
985 $event->fetch_userassigned();
987 $event->priority = $obj->priority;
988 $event->location = $obj->location;
989 $event->transparency = $obj->transparency;
990 $event->fk_element = $obj->fk_element;
991 $event->elementid = $obj->fk_element;
992 $event->elementtype = $obj->elementtype;
994 $event->fk_project = $obj->fk_project;
996 $event->socid = $obj->fk_soc;
997 $event->contact_id = $obj->fk_contact;
998 $event->fk_bookcal_calendar = $obj->fk_bookcal_calendar;
999 if (!empty($event->fk_bookcal_calendar)) {
1000 $event->type =
"bookcal_calendar";
1005 $event->date_start_in_calendar = $event->datep;
1006 if ($event->datef !=
'' && $event->datef >= $event->datep) {
1007 $event->date_end_in_calendar = $event->datef;
1009 $event->date_end_in_calendar = $event->datep;
1013 if ($event->date_end_in_calendar < $firstdaytoshow || $event->date_start_in_calendar >= $lastdaytoshow) {
1016 if ($event->date_start_in_calendar < $firstdaytoshow) {
1017 $event->date_start_in_calendar = $firstdaytoshow;
1019 if ($event->date_end_in_calendar >= $lastdaytoshow) {
1020 $event->date_end_in_calendar = ($lastdaytoshow - 1);
1024 $daycursor = $event->date_start_in_calendar;
1029 $daycursorend = $event->date_end_in_calendar;
1030 $anneeend = (int)
dol_print_date($daycursorend,
'%Y',
'tzuserrel');
1031 $moisend = (int)
dol_print_date($daycursorend,
'%m',
'tzuserrel');
1032 $jourend = (int)
dol_print_date($daycursorend,
'%d',
'tzuserrel');
1041 $daykey =
dol_mktime(0, 0, 0, $mois, $jour, $annee,
'gmt');
1042 $daykeyend =
dol_mktime(0, 0, 0, $moisend, $jourend, $anneeend,
'gmt');
1056 $eventarray[$daykey][] = $event;
1059 $daykey += 60 * 60 * 24;
1061 if ($daykey > $daykeyend) {
1070 $parameters[
'obj'] = $obj;
1071 $reshook = $hookmanager->executeHooks(
'hookEventElements', $parameters, $event, $action);
1072 $event = $hookmanager->resPrint;
1087if ($check_birthday) {
1089 $sql =
'SELECT sp.rowid, sp.lastname, sp.firstname, sp.birthday';
1090 $sql .=
' FROM '.MAIN_DB_PREFIX.
'socpeople as sp';
1091 $sql .=
' WHERE (priv=0 OR (priv=1 AND fk_user_creat='.((int) $user->id).
'))';
1092 $sql .=
" AND sp.entity IN (".getEntity(
'contact').
")";
1093 if ($mode ==
'show_day') {
1094 $sql .=
' AND MONTH(birthday) = '.((int) $month);
1095 $sql .=
' AND DAY(birthday) = '.((int) $day);
1097 $sql .=
' AND MONTH(birthday) = '.((int) $month);
1099 $sql .=
' ORDER BY birthday';
1101 dol_syslog(
"comm/action/index.php", LOG_DEBUG);
1102 $resql = $db->query($sql);
1104 $num = $db->num_rows($resql);
1109 $obj = $db->fetch_object($resql);
1113 $event->id = $obj->rowid;
1114 $event->ref = (string) $event->id;
1119 $event->datep =
dol_mktime(0, 0, 0, $datearray[
'mon'], $datearray[
'mday'], $year,
true);
1120 $event->datef = $event->datep;
1122 $event->type_code =
'BIRTHDAY';
1123 $event->type_label =
'';
1124 $event->type_color =
'';
1125 $event->type =
'birthdate';
1126 $event->type_picto =
'birthdate';
1128 $event->label = $langs->trans(
"Birthday").
' '.
dolGetFirstLastname($obj->firstname, $obj->lastname);
1129 $event->percentage = 100;
1130 $event->fulldayevent = 1;
1132 $event->contact_id = $obj->rowid;
1134 $event->date_start_in_calendar = $db->jdate($event->datep);
1135 $event->date_end_in_calendar = $db->jdate($event->datef);
1138 $daycursor = $event->datep;
1143 $daykey =
dol_mktime(0, 0, 0, $mois, $jour, $annee,
'gmt');
1145 $eventarray[$daykey][] = $event;
1163if ($user->hasRight(
"holiday",
"read")) {
1164 $sql =
"SELECT u.rowid as uid, u.lastname, u.firstname, u.statut, x.rowid, x.date_debut as date_start, x.date_fin as date_end, x.halfday, x.statut as status";
1165 $sql .=
" FROM ".MAIN_DB_PREFIX.
"holiday as x, ".MAIN_DB_PREFIX.
"user as u";
1166 $sql .=
" WHERE u.rowid = x.fk_user";
1167 $sql .=
" AND u.statut = '1'";
1168 $sql .=
" AND (x.statut = '2' OR x.statut = '3')";
1169 if ($mode ==
'show_day') {
1171 $sql .=
" AND '".$db->escape($year).
"-".$db->escape($month).
"-".$db->escape($day).
"' BETWEEN x.date_debut AND x.date_fin";
1172 } elseif ($mode ==
'show_week') {
1174 $sql .=
" AND x.date_debut < '".$db->idate(
dol_get_last_day($year, $month)).
"'";
1175 $sql .=
" AND x.date_fin >= '".$db->idate(
dol_get_first_day($year, $month)).
"'";
1176 } elseif ($mode ==
'show_month') {
1178 $sql .=
" AND x.date_debut <= '".$db->idate(
dol_get_last_day($year, $month)).
"'";
1179 $sql .=
" AND x.date_fin >= '".$db->idate(
dol_get_first_day($year, $month)).
"'";
1181 if (!$user->hasRight(
'holiday',
'readall') || $filtert ==
'-3') {
1183 $sql .=
" AND x.fk_user IN(".$db->sanitize(implode(
", ", $user->getAllChildIds(1))).
") ";
1187 $sql .=
" AND x.fk_user = ".((int) $filtert);
1190 $resql = $db->query($sql);
1192 $num = $db->num_rows($resql);
1197 $obj = $db->fetch_object($resql);
1202 $event->id = $obj->rowid;
1203 $event->ref = (string) $event->id;
1205 $event->type_code =
'HOLIDAY';
1206 $event->type_label =
'';
1207 $event->type_color =
'';
1208 $event->type =
'holiday';
1209 $event->type_picto =
'holiday';
1213 $event->datep = $db->jdate($obj->date_start,
'gmt') + (empty($obj->halfday) || $obj->halfday == 1 ? 0 : 12) * 60 * 60;
1214 $event->datef = $db->jdate($obj->date_end,
'gmt') + (empty($obj->halfday) || $obj->halfday == -1 ? 24 : 12) * 60 * 60 - 1;
1215 $event->date_start_in_calendar = $event->datep;
1216 $event->date_end_in_calendar = $event->datef;
1218 if ($obj->status == 3) {
1220 $event->percentage = -1;
1221 } elseif ($obj->status == 2) {
1223 $event->percentage = 0;
1226 $event->label = $langs->trans(
"Holiday");
1228 $daycursor = $event->date_start_in_calendar;
1233 $daycursorend = $event->date_end_in_calendar;
1239 $daykey =
dol_mktime(0, 0, 0, $mois, $jour, $annee,
'gmt');
1240 $daykeygmt =
dol_mktime(0, 0, 0, $mois, $jour, $annee,
'gmt');
1245 $firstdayofholiday = ($ifornbofdays == 1);
1246 $lastdayofholiday = ($daykeygmt ==
dol_get_first_hour($event->date_end_in_calendar,
'gmt'));
1255 if ((in_array($obj->halfday, array(1, 2)) == 1 && $lastdayofholiday) || (in_array($obj->halfday, array(-1, 2)) && $firstdayofholiday)) {
1258 if (in_array($obj->halfday, array(1, 2)) && $lastdayofholiday) {
1259 $newevent->label .=
' ('.$langs->trans(
"Morning").
')';
1260 } elseif (in_array($obj->halfday, array(-1, 2)) && $firstdayofholiday) {
1261 $newevent->label .=
' ('.$langs->trans(
"Afternoon").
')';
1263 $eventarray[$daykey][] = $newevent;
1265 $eventarray[$daykey][] = $event;
1268 $daykey += 60 * 60 * 24;
1269 $daykeygmt += 60 * 60 * 24;
1270 }
while ($daykey <= $event->date_end_in_calendar);
1279if (count($listofextcals)) {
1280 require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/ical.class.php';
1282 foreach ($listofextcals as $key => $extcal) {
1283 $url = $extcal[
'src'];
1284 $namecal = $extcal[
'name'];
1285 $offsettz = $extcal[
'offsettz'];
1286 $colorcal = $extcal[
'color'];
1287 $buggedfile = $extcal[
'buggedfile'];
1293 $ical->parse($url, $pathforcachefile, $DELAYFORCACHE);
1296 $listofextcals[$key][
'error'] = $ical->error;
1297 $s .=
'<br><div class="warning">'.dol_escape_htmltag($listofextcals[$key][
'name']).
': '.$url.
'<br>Error message: '.
dol_escape_htmltag($ical->error).
'</div>';
1302 $icalevents = array();
1303 $tmparray = $ical->get_event_list();
1304 if (is_array($tmparray)) {
1305 $icalevents = array_merge($icalevents, $tmparray);
1307 $tmparray = $ical->get_freebusy_list();
1308 if (is_array($tmparray)) {
1309 $icalevents = array_merge($icalevents, $tmparray);
1312 $nbevents += count($icalevents);
1314 if (count($icalevents) > 0) {
1316 $moreicalevents = array();
1317 foreach ($icalevents as $icalevent) {
1318 if (isset($icalevent[
'RRULE']) && is_array($icalevent[
'RRULE'])) {
1321 if ($icalevent[
'DTSTART;VALUE=DATE']) {
1324 } elseif (is_array($icalevent[
'DTSTART']) && !empty($icalevent[
'DTSTART'][
'unixtime'])) {
1325 $datecurstart = $icalevent[
'DTSTART'][
'unixtime'];
1326 $datecurend = $icalevent[
'DTEND'][
'unixtime'];
1327 if (!empty($ical->cal[
'DAYLIGHT'][
'DTSTART']) && $datecurstart) {
1329 $tmpcurstart = $datecurstart;
1330 $tmpcurend = $datecurend;
1331 $tmpdaylightstart =
dol_mktime(0, 0, 0, 1, 1, 1970, 1) + (int) $ical->cal[
'DAYLIGHT'][
'DTSTART'];
1332 $tmpdaylightend =
dol_mktime(0, 0, 0, 1, 1, 1970, 1) + (int) $ical->cal[
'STANDARD'][
'DTSTART'];
1335 if ($tmpcurstart >= $tmpdaylightstart && $tmpcurstart < $tmpdaylightend) {
1336 $datecurstart -= ((int) $ical->cal[
'DAYLIGHT'][
'TZOFFSETTO']) * 36;
1338 $datecurstart -= ((int) $ical->cal[
'STANDARD'][
'TZOFFSETTO']) * 36;
1340 if ($tmpcurend >= $tmpdaylightstart && $tmpcurstart < $tmpdaylightend) {
1341 $datecurend -= ((int) $ical->cal[
'DAYLIGHT'][
'TZOFFSETTO']) * 36;
1343 $datecurend -= ((int) $ical->cal[
'STANDARD'][
'TZOFFSETTO']) * 36;
1350 dol_syslog(
"Found a not recognized repeatable record with unknown date start", LOG_ERR);
1355 $interval = (empty($icalevent[
'RRULE'][
'INTERVAL']) ? 1 : $icalevent[
'RRULE'][
'INTERVAL']);
1356 $until = empty($icalevent[
'RRULE'][
'UNTIL']) ? 0 :
dol_stringtotime($icalevent[
'RRULE'][
'UNTIL'], 1);
1357 $maxrepeat = empty($icalevent[
'RRULE'][
'COUNT']) ? 0 : $icalevent[
'RRULE'][
'COUNT'];
1358 if ($until && ($until + ($datecurend - $datecurstart)) < $firstdaytoshow) {
1361 if ($datecurstart >= $lastdaytoshow) {
1366 while (($datecurstart < $lastdaytoshow) && (empty($maxrepeat) || ($numofevent < $maxrepeat))) {
1367 if ($datecurend >= $firstdaytoshow) {
1368 $newevent = $icalevent;
1369 unset($newevent[
'RRULE']);
1370 if ($icalevent[
'DTSTART;VALUE=DATE']) {
1371 $newevent[
'DTSTART;VALUE=DATE'] =
dol_print_date($datecurstart,
'%Y%m%d');
1372 $newevent[
'DTEND;VALUE=DATE'] =
dol_print_date($datecurend + 1,
'%Y%m%d');
1374 $newevent[
'DTSTART'] = $datecurstart;
1375 $newevent[
'DTEND'] = $datecurend;
1377 $moreicalevents[] = $newevent;
1381 $savdatecurstart = $datecurstart;
1382 if ($icalevent[
'RRULE'][
'FREQ'] ==
'DAILY') {
1386 if ($icalevent[
'RRULE'][
'FREQ'] ==
'WEEKLY') {
1389 } elseif ($icalevent[
'RRULE'][
'FREQ'] ==
'MONTHLY') {
1392 } elseif ($icalevent[
'RRULE'][
'FREQ'] ==
'YEARLY') {
1397 if ($savdatecurstart >= $datecurstart) {
1398 dol_syslog(
"Found a rule freq ".$icalevent[
'RRULE'][
'FREQ'].
" not managed by dolibarr code. Assume 1 week frequency.", LOG_ERR);
1399 $datecurstart += 3600 * 24 * 7;
1400 $datecurend += 3600 * 24 * 7;
1405 $icalevents = array_merge($icalevents, $moreicalevents);
1408 foreach ($icalevents as $icalevent) {
1413 if (!empty($icalevent[
'RRULE'])) {
1420 if (isset($icalevent[
'DTSTART;VALUE=DATE'])) {
1423 if (empty($icalevent[
'DTEND;VALUE=DATE'])) {
1424 $dateend = $datestart + 86400 - 1;
1430 $event->fulldayevent = 1;
1432 } elseif (!is_array($icalevent[
'DTSTART'])) {
1433 $datestart = $icalevent[
'DTSTART'];
1434 $dateend = empty($icalevent[
'DTEND']) ? $datestart : $icalevent[
'DTEND'];
1436 $datestart += +($offsettz * 3600);
1437 $dateend += +($offsettz * 3600);
1442 } elseif (isset($icalevent[
'DTSTART'][
'unixtime'])) {
1443 $datestart = $icalevent[
'DTSTART'][
'unixtime'];
1444 $dateend = $icalevent[
'DTEND'][
'unixtime'];
1446 $datestart += +($offsettz * 3600);
1447 $dateend += +($offsettz * 3600);
1450 if ($buggedfile ===
'uselocalandtznodaylight') {
1454 if ($buggedfile ===
'uselocalandtzdaylight') {
1455 $localtzs =
new DateTimeZone(preg_replace(
'/"/',
'', $icalevent[
'DTSTART'][
'TZID']));
1456 $localtze =
new DateTimeZone(preg_replace(
'/"/',
'', $icalevent[
'DTEND'][
'TZID']));
1457 $localdts =
new DateTime(
dol_print_date($datestart,
'dayrfc',
'gmt'), $localtzs);
1458 $localdte =
new DateTime(
dol_print_date($dateend,
'dayrfc',
'gmt'), $localtze);
1459 $tmps = -1 * $localtzs->getOffset($localdts);
1460 $tmpe = -1 * $localtze->getOffset($localdte);
1461 $datestart += $tmps;
1469 $event->id = $icalevent[
'UID'];
1470 $event->ref = (string) $event->id;
1471 $userId = $userstatic->findUserIdByEmail($namecal);
1472 if (!empty($userId) && $userId > 0) {
1473 $event->userassigned[$userId] = $userId;
1474 $event->percentage = -1;
1477 $event->type_code =
"ICALEVENT";
1478 $event->type_label = $namecal;
1479 $event->type_color = $colorcal;
1480 $event->type =
'icalevent';
1481 $event->type_picto =
'rss';
1483 $event->icalname = $namecal;
1484 $event->icalcolor = $colorcal;
1486 $event->datep = $datestart + $usertime;
1487 $event->datef = $dateend + $usertime;
1489 if (isset($icalevent[
'SUMMARY']) && $icalevent[
'SUMMARY']) {
1491 } elseif (isset($icalevent[
'DESCRIPTION']) && $icalevent[
'DESCRIPTION']) {
1494 $event->label = $langs->trans(
"ExtSiteNoLabel");
1501 if (!empty($icalevent[
'PRIORITY'])) {
1502 $event->priority = $icalevent[
'PRIORITY'];
1506 if (!empty($icalevent[
'TRANSP'])) {
1507 if ($icalevent[
'TRANSP'] ==
"TRANSPARENT") {
1508 $event->transparency = 0;
1510 if ($icalevent[
'TRANSP'] ==
"OPAQUE") {
1511 $event->transparency = 1;
1522 if (!empty($icalevent[
'LOCATION'])) {
1523 $event->location = $icalevent[
'LOCATION'];
1526 $event->date_start_in_calendar = $event->datep;
1528 if ($event->datef !=
'' && $event->datef >= $event->datep) {
1529 $event->date_end_in_calendar = $event->datef;
1531 $event->date_end_in_calendar = $event->datep;
1535 if ($event->date_end_in_calendar < $firstdaytoshow || $event->date_start_in_calendar >= $lastdaytoshow) {
1541 if ($event->date_start_in_calendar < $firstdaytoshow) {
1542 $event->date_start_in_calendar = $firstdaytoshow;
1544 if ($event->date_end_in_calendar >= $lastdaytoshow) {
1545 $event->date_end_in_calendar = ($lastdaytoshow - 1);
1549 $daycursor = $event->date_start_in_calendar;
1558 $daykey =
dol_mktime(0, 0, 0, $mois, $jour, $annee,
'gmt');
1559 $daykeygmt =
dol_mktime(0, 0, 0, $mois, $jour, $annee,
'gmt');
1562 $eventarray[$daykey][] = $event;
1563 $daykey += 60 * 60 * 24;
1564 $daykeygmt += 60 * 60 * 24;
1565 if (($event->fulldayevent ? $daykeygmt : $daykey) > $event->date_end_in_calendar) {
1577$parameters = array();
1579$reshook = $hookmanager->executeHooks(
'getCalendarEvents', $parameters, $object, $action);
1580if (!empty($hookmanager->resArray[
'eventarray'])) {
1581 foreach ($hookmanager->resArray[
'eventarray'] as $keyDate => $events) {
1582 if (!isset($eventarray[$keyDate])) {
1583 $eventarray[$keyDate] = array();
1585 $eventarray[$keyDate] = array_merge($eventarray[$keyDate], $events);
1590foreach ($eventarray as $keyDate => &$dateeventarray) {
1591 usort($dateeventarray,
'sort_events_by_date');
1596$cachethirdparties = array();
1597$cachecontacts = array();
1601 array(137, 86, 161),
1602 array(60, 147, 183),
1603 array(250, 190, 80),
1605 array(190, 190, 100),
1606 array(91, 115, 247),
1607 array(140, 140, 220),
1608 array(190, 120, 120),
1609 array(115, 125, 150),
1610 array(100, 170, 20),
1611 array(150, 135, 125),
1612 array(85, 135, 150),
1613 array(150, 135, 80),
1618$color_file = DOL_DOCUMENT_ROOT.
"/theme/".$conf->theme.
"/theme_vars.inc.php";
1619if (is_readable($color_file)) {
1621 include $color_file;
1625$massactionbutton =
'';
1627print_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);
1629if ($nbevents > $MAXONSAMEPAGE) {
1630 print
info_admin(
'Number of results has been truncated to '.$MAXONSAMEPAGE, 0, 0,
'warning').
'<br>';
1637if (empty($mode) || $mode ==
'show_month') {
1639 $newparam = preg_replace(
'/check_birthday=/i',
'check_birthday_=', $newparam);
1640 $newparam = preg_replace(
'/mode=show_month&?/i',
'', $newparam);
1641 $newparam = preg_replace(
'/mode=show_week&?/i',
'', $newparam);
1642 $newparam = preg_replace(
'/day=[0-9]+&?/i',
'', $newparam);
1643 $newparam = preg_replace(
'/month=[0-9]+&?/i',
'', $newparam);
1644 $newparam = preg_replace(
'/year=[0-9]+&?/i',
'', $newparam);
1645 $newparam = preg_replace(
'/viewcal=[0-9]+&?/i',
'', $newparam);
1646 $newparam = preg_replace(
'/check_birthday_=/i',
'check_birthday=', $newparam);
1647 $newparam .=
'&viewcal=1';
1649 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
1650 print_actions_filter($form, $canedit, $status, $year, $month, $day, $check_birthday,
'', $filtert,
'', $pid, $socid, $action, -1, $actioncode, $usergroup,
'', $resourceid, $search_categ_cus);
1653 print
'<div class="div-table-responsive-no-min sectioncalendarbymonth maxscreenheightless300">';
1654 print
'<table class="centpercent noborder nocellnopadd cal_pannel cal_month listwithfilterbefore">';
1655 print
' <tr class="liste_titre sticky">';
1657 echo
' <td class="center">#</td>';
1660 print
' <td class="center bold uppercase tdfordaytitle'.($i == 0 ?
' borderleft' :
'').
'">';
1662 if (!empty($conf->dol_optimize_smallscreen)) {
1663 $labelshort = array(0 =>
'SundayMin', 1 =>
'MondayMin', 2 =>
'TuesdayMin', 3 =>
'WednesdayMin', 4 =>
'ThursdayMin', 5 =>
'FridayMin', 6 =>
'SaturdayMin');
1664 print $langs->trans($labelshort[$numdayinweek]);
1666 print $langs->trans(
"Day".$numdayinweek);
1668 print
' </td>'.
"\n";
1674 $todaytms =
dol_mktime(0, 0, 0, $todayarray[
'mon'], $todayarray[
'mday'], $todayarray[
'year']);
1678 for ($iter_week = 0; $iter_week < 6; $iter_week++) {
1682 $currdate0 = sprintf(
"%04d", $prev_year).sprintf(
"%02d", $prev_month).sprintf(
"%02d", $max_day_in_prev_month + $tmpday);
1683 } elseif ($tmpday <= $max_day_in_month) {
1684 $currdate0 = sprintf(
"%04d", $year).sprintf(
"%02d", $month).sprintf(
"%02d", $tmpday);
1686 $currdate0 = sprintf(
"%04d", $next_year).sprintf(
"%02d", $next_month).sprintf(
"%02d", $tmpday - $max_day_in_month);
1689 $numweek0 =
date(
"W", strtotime(
date($currdate0)));
1691 echo
' <td class="center weeknumber opacitymedium" width="2%">'.$numweek0.
'</td>';
1693 for ($iter_day = 0; $iter_day < 7; $iter_day++) {
1696 $style =
'cal_other_month cal_past';
1697 if ($iter_day == 6) {
1698 $style .=
' cal_other_month_right';
1700 echo
' <td class="'.$style.
' nowrap tdtop" width="14%">';
1702 show_day_events($db, $max_day_in_prev_month + $tmpday, $prev_month, $prev_year, $month, $style, $eventarray, $maxprint, $maxnbofchar, $newparam);
1704 } elseif ($tmpday <= $max_day_in_month) {
1706 $curtime =
dol_mktime(0, 0, 0, $month, $tmpday, $year);
1707 $style =
'cal_current_month';
1708 if ($iter_day == 6) {
1709 $style .=
' cal_current_month_right';
1712 if ($todayarray[
'mday'] == $tmpday && $todayarray[
'mon'] == $month && $todayarray[
'year'] == $year) {
1716 $style =
'cal_today';
1718 if ($curtime < $todaytms) {
1719 $style .=
' cal_past';
1722 echo
' <td class="'.$style.
' nowrap tdtop" width="14%">';
1724 show_day_events($db, $tmpday, $month, $year, $month, $style, $eventarray, $maxprint, $maxnbofchar, $newparam, 0, 60, 0, $bookcalcalendars);
1728 $style =
'cal_other_month';
1729 if ($iter_day == 6) {
1730 $style .=
' cal_other_month_right';
1732 echo
' <td class="'.$style.
' nowrap tdtop" width="14%">';
1734 show_day_events($db, $tmpday - $max_day_in_month, $next_month, $next_year, $month, $style, $eventarray, $maxprint, $maxnbofchar, $newparam);
1744 print
'<input type="hidden" name="actionmove" value="mupdate">';
1745 print
'<input type="hidden" name="backtopage" value="'.dol_escape_htmltag($_SERVER[
'PHP_SELF']).
'?mode=show_month&'.
dol_escape_htmltag($_SERVER[
'QUERY_STRING']).
'">';
1746 print
'<input type="hidden" name="newdate" id="newdate">';
1747} elseif ($mode ==
'show_week') {
1750 $newparam = preg_replace(
'/check_birthday=/i',
'check_birthday_=', $newparam);
1751 $newparam = preg_replace(
'/mode=show_month&?/i',
'', $newparam);
1752 $newparam = preg_replace(
'/mode=show_week&?/i',
'', $newparam);
1753 $newparam = preg_replace(
'/day=[0-9]+&?/i',
'', $newparam);
1754 $newparam = preg_replace(
'/month=[0-9]+&?/i',
'', $newparam);
1755 $newparam = preg_replace(
'/year=[0-9]+&?/i',
'', $newparam);
1756 $newparam = preg_replace(
'/viewweek=[0-9]+&?/i',
'', $newparam);
1757 $newparam = preg_replace(
'/check_birthday_=/i',
'check_birthday=', $newparam);
1758 $newparam .=
'&viewweek=1';
1760 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
1761 print_actions_filter($form, $canedit, $status, $year, $month, $day, $check_birthday,
'', $filtert,
'', $pid, $socid, $action, -1, $actioncode, $usergroup,
'', $resourceid);
1764 print
'<div class="div-table-responsive-no-min sectioncalendarbyweek maxscreenheightless300">';
1765 print
'<table class="centpercent noborder nocellnopadd cal_pannel cal_month listwithfilterbefore">';
1766 print
' <tr class="liste_titre">';
1769 echo
' <td class="center bold uppercase tdfordaytitle">'.$langs->trans(
"Day".(($i + (
getDolGlobalInt(
'MAIN_START_WEEK', 1))) % 7)).
"</td>\n";
1776 for ($iter_day = 0; $iter_day < 7; $iter_day++) {
1783 $style =
'cal_current_month';
1784 if ($iter_day == 6) {
1785 $style .=
' cal_other_month_right';
1790 if ($todayarray[
'mday'] == $tmpday && $todayarray[
'mon'] == $tmpmonth && $todayarray[
'year'] == $tmpyear) {
1794 $style =
'cal_today';
1797 echo
' <td class="'.$style.
'" width="14%" valign="top">';
1799 show_day_events($db, $tmpday, $tmpmonth, $tmpyear, $month, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300, 0, $bookcalcalendars);
1807 echo
'<input type="hidden" name="actionmove" value="mupdate">';
1808 echo
'<input type="hidden" name="backtopage" value="'.dol_escape_htmltag($_SERVER[
'PHP_SELF']).
'?mode=show_week&'.
dol_escape_htmltag($_SERVER[
'QUERY_STRING']).
'">';
1809 echo
'<input type="hidden" name="newdate" id="newdate">';
1812 $newparam = preg_replace(
'/mode=show_month&?/i',
'', $newparam);
1813 $newparam = preg_replace(
'/mode=show_week&?/i',
'', $newparam);
1814 $newparam = preg_replace(
'/viewday=[0-9]+&?/i',
'', $newparam);
1815 $newparam .=
'&viewday=1';
1817 $style =
'cal_current_month cal_current_month_oneday';
1820 if ($todayarray[
'mday'] == $day && $todayarray[
'mon'] == $month && $todayarray[
'year'] == $year) {
1825 $timestamp =
dol_mktime(12, 0, 0, $month, $day, $year);
1828 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
1829 print_actions_filter($form, $canedit, $status, $year, $month, $day, $check_birthday,
'', $filtert,
'', $pid, $socid, $action, -1, $actioncode, $usergroup,
'', $resourceid);
1832 print
'<div class="div-table-responsive-no-min sectioncalendarbyday maxscreenheightless300">';
1833 echo
'<table class="tagtable centpercent noborder nocellnopadd cal_pannel cal_month listwithfilterbefore" style="margin-bottom: 10px !important;">';
1835 echo
' <tr class="tagtr liste_titre">';
1836 echo
' <td class="tagtd center bold uppercase">'.$langs->trans(
"Day".$arraytimestamp[
'wday']).
"</td>\n";
1853 print
'<div class="div-table-responsive-no-min">';
1855 $maxheightwin = (isset($_SESSION[
"dol_screenheight"]) && $_SESSION[
"dol_screenheight"] > 500) ? ($_SESSION[
"dol_screenheight"] - 200) : 660;
1857 echo
'<div style="max-height: '.$maxheightwin.
'px;">';
1858 echo
'<div class="tagtable centpercent calendarviewcontainer">';
1863 $minhour = round((
float) $tmp[0], 0);
1864 $maxhour = round((
float) $tmp[1], 0);
1865 if ($minhour > 23) {
1871 if ($maxhour <= $minhour) {
1872 $maxhour = $minhour + 1;
1878 echo
' <div class="tagtr calendarviewcontainertr">'.
"\n";
1879 echo
' <div class="tagtd width100 tdtop">'.dol_print_date($i * 3600,
'hour',
'gmt').
'</div>';
1880 echo
' <div class="tagtd '.$style.
' tdtop"></div>'.
"\n";
1881 echo
' </div>'.
"\n";
1886 echo
'</div></div>';
1889 show_day_events($db, $day, $month, $year, $month, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300, 1, $bookcalcalendars);
1893 print
'<div class="div-table-responsive-no-min">';
1896 show_day_events($db, $day, $month, $year, $month, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300, 0, $bookcalcalendars);
1908print
"\n".
'</form>';
1934function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventarray, $maxprint = 0, $maxnbofchar = 16, $newparam =
'', $showinfo = 0, $minheight = 60, $nonew = 0, $bookcalcalendarsarray = array())
1936 global $user, $conf, $langs;
1937 global $action, $mode, $filter, $filtert, $status, $actioncode, $usergroup;
1939 global $cachethirdparties, $cachecontacts,
$cacheusers, $colorindexused;
1940 global $hookmanager;
1942 '@phan-var-force array{0:array{0:int,1:int,2:int},1:array{0:int,1:int,2:int},2:array{0:int,1:int,2:int},3:array{0:int,1:int,2:int}} $theme_datacolor
1943 @phan-var-force User[] $cacheusers
1944 @phan-var-force array<int<0,3>> $colorindexused';
1951 if ($conf->use_javascript_ajax) {
1952 $conf->global->MAIN_JS_SWITCH_AGENDA = 1;
1955 $dateint = sprintf(
"%04d", $year).sprintf(
"%02d", $month).sprintf(
"%02d", $day);
1961 $curtime =
dol_mktime(0, 0, 0, $month, $day, $year);
1962 $urltoshow = DOL_URL_ROOT.
'/comm/action/index.php?mode=show_day&day='.str_pad((
string) $day, 2,
"0", STR_PAD_LEFT).
'&month='.str_pad((
string) $month, 2,
"0", STR_PAD_LEFT).
'&year='.$year.$newparam;
1964 if ($user->hasRight(
'agenda',
'myactions',
'create') || $user->hasRight(
'agenda',
'allactions',
'create')) {
1965 $newparam .=
'&month='.str_pad((
string) $month, 2,
"0", STR_PAD_LEFT).
'&year='.$year;
1966 $hourminsec =
'100000';
1967 $urltocreate = DOL_URL_ROOT.
'/comm/action/card.php?action=create&datep='.sprintf(
"%04d%02d%02d", $year, $month, $day).$hourminsec.
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].($newparam ?
'?'.$newparam :
''));
1971 print
'<div id="dayevent_'.$dateint.
'" class="dayevent tagtable centpercent nobordernopadding">'.
"\n";
1974 print
'<div class="tagtr cursorpointer" onclick="window.location=\''.$urltocreate.
'\';
"><div class="nowrap tagtd
"><div class="left
inline-block
">';
1975 print '<a class="dayevent-aday
" style="color: #666
" href="'.$urltoshow.'">';
1976 print ($datenowint == $dateint ? '<span class="badgeneutral
">' : '');
1978 print dol_print_date($curtime, 'daytextshort');
1980 print dol_print_date($curtime, '%d');
1982 print ($datenowint == $dateint ? '</span>' : '');
1984 print '</div><div class="nowrap floatright
inline-block marginrightonly
">';
1985 if ($user->hasRight('agenda', 'myactions', 'create') || $user->hasRight('agenda', 'allactions', 'create')) {
1986 print '<a class="cursoradd
" href="'.$urltocreate.'">'; // Explicit link, useful for nojs interfaces
1987 print img_picto($langs->trans("NewAction
"), 'edit_add.png');
1990 print '</div></div></div>'."\n
";
1998 // Line with td contains all div of each events
1999 print '<div class="tagtr
">';
2000 print '<div class="tagtd centpercent agendacell sortable
">';
2002 //$curtime = dol_mktime (0, 0, 0, $month, $day, $year);
2009 $numicals = array();
2010 $ymd = sprintf("%04d
", $year).sprintf("%02d
", $month).sprintf("%02d
", $day);
2012 $colorindexused[$user->id] = 0; // Color index for current user (user->id) is always 0
2013 $nextindextouse = is_array($colorindexused) ? count($colorindexused) : 0; // At first run this is 0, so fist user has 0, next 1, ...
2014 //var_dump($colorindexused);
2016 include_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php';
2017 $tmpholiday = new Holiday($db);
2019 foreach ($eventarray as $daykey => $notused) { // daykey is the 'YYYYMMDD' to show according to user
2020 $annee = (int) dol_print_date($daykey, '%Y', 'gmt'); // We use gmt because we want the value represented by string 'YYYYMMDD'
2021 $mois = (int) dol_print_date($daykey, '%m', 'gmt'); // We use gmt because we want the value represented by string 'YYYYMMDD'
2022 $jour = (int) dol_print_date($daykey, '%d', 'gmt'); // We use gmt because we want the value represented by string 'YYYYMMDD'
2024 //print 'event daykey='.$daykey.' dol_print_date(daykey)='.dol_print_date($daykey, 'dayhour', 'gmt').' jour='.$jour.' mois='.$mois.' annee='.$annee."<br>\n
";
2025 //print 'event daykey='.$daykey.' dol_print_date(daykey)='.dol_print_date($daykey, 'dayhour', 'gmt').' day='.$day.' month='.$month.' year='.$year."<br>\n
";
2027 if ($day == $jour && $month == $mois && $year == $annee) {
2028 foreach ($eventarray[$daykey] as $index => $event) {
2029 if ($i < $maxprint || $maxprint == 0 || getDolGlobalString('MAIN_JS_SWITCH_AGENDA')) {
2030 $keysofuserassigned = array_keys($event->userassigned);
2032 // Define $color (Hex string like '0088FF') and $cssclass of event
2036 if (in_array($user->id, $keysofuserassigned)) {
2037 $cssclass = 'family_mytasks';
2039 if (empty($cacheusers[$event->userownerid])) {
2040 $newuser = new User($db);
2041 $newuser->fetch($event->userownerid);
2042 $cacheusers[$event->userownerid] = $newuser;
2044 //var_dump($cacheusers[$event->userownerid]->color);
2046 // We decide to choose color of owner of event (event->userownerid is user id of owner, event->userassigned contains all users assigned to event)
2047 if (!empty($cacheusers[$event->userownerid]->color)) {
2048 $color = $cacheusers[$event->userownerid]->color;
2051 /* May be we need this: if (getDolGlobalString('AGENDA_USE_COLOR_PER_EVENT_TYPE')) {
2052 $color = $event->type_color;
2054 } elseif ($event->type_code == 'ICALEVENT') { // Event come from external ical file
2056 if (!empty($event->icalname)) {
2057 if (!isset($numicals[dol_string_nospecial($event->icalname)])) {
2058 $numicals[dol_string_nospecial($event->icalname)] = 0;
2060 $numicals[dol_string_nospecial($event->icalname)]++;
2063 $color = ($event->icalcolor ? $event->icalcolor : -1);
2064 $cssclass = (!empty($event->icalname) ? 'family_ext'.md5($event->icalname) : 'family_other');
2065 } elseif ($event->type_code == 'BIRTHDAY') {
2068 $cssclass = 'family_birthday ';
2069 $color = sprintf("%02x%02x%02x
", $theme_datacolor[$colorindex][0], $theme_datacolor[$colorindex][1], $theme_datacolor[$colorindex][2]);
2070 } elseif ($event->type == 'bookcal_calendar') {
2073 $cssclass = 'family_bookcal_calendar_'.(!empty($bookcalcalendarsarray["availabilitieslink
"]) ? $bookcalcalendarsarray["availabilitieslink
"][$event->fk_bookcal_calendar] : "");
2074 $color = sprintf("%02x%02x%02x
", $theme_datacolor[$colorindex][0], $theme_datacolor[$colorindex][1], $theme_datacolor[$colorindex][2]);
2077 $color = ($event->icalcolor ? $event->icalcolor : -1);
2078 $cssclass = (!empty($event->icalname) ? 'family_ext'.md5($event->icalname) : 'family_other');
2080 if (empty($cacheusers[$event->userownerid])) {
2081 $newuser = new User($db);
2082 $newuser->fetch($event->userownerid);
2083 $cacheusers[$event->userownerid] = $newuser;
2085 //var_dump($cacheusers[$event->userownerid]->color);
2087 // We decide to choose color of owner of event (event->userownerid is user id of owner, event->userassigned contains all users assigned to event)
2088 if (!empty($cacheusers[$event->userownerid]->color)) {
2089 $color = $cacheusers[$event->userownerid]->color;
2093 if ($color < 0) { // Color was not set on user card. Set color according to color index.
2094 // Define color index if not yet defined
2095 $idusertouse = ($event->userownerid ? $event->userownerid : 0);
2096 if (isset($colorindexused[$idusertouse])) {
2097 $colorindex = $colorindexused[$idusertouse]; // Color already assigned to this user
2099 $colorindex = $nextindextouse;
2100 $colorindexused[$idusertouse] = $colorindex;
2101 if (!empty($theme_datacolor[$nextindextouse + 1])) {
2102 $nextindextouse++; // Prepare to use next color
2105 if (isset($theme_datacolor[$colorindex])) {
2106 $color = sprintf("%02x%02x%02x
", $theme_datacolor[$colorindex][0], $theme_datacolor[$colorindex][1], $theme_datacolor[$colorindex][2]);
2107 } elseif (getDolGlobalString('THEME_ELDY_BACKBODY')) {
2108 require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
2109 $color = colorArrayToHex(colorStringToArray(getDolGlobalString('THEME_ELDY_BACKBODY'), array()), '');
2114 $cssclass = $cssclass.' eventday_'.$ymd;
2116 // Defined style to disable drag and drop feature
2117 if ($event->type_code == 'AC_OTH_AUTO') {
2118 $cssclass .= " unmovable
";
2119 } elseif ($event->type_code == 'HOLIDAY') {
2120 $cssclass .= " unmovable
";
2121 } elseif ($event->type_code == 'BIRTHDAY') {
2122 $cssclass .= " unmovable
";
2123 } elseif ($event->type_code == 'ICALEVENT') {
2124 $cssclass .= " unmovable
";
2125 } elseif ($event->date_start_in_calendar && $event->date_end_in_calendar && date('Ymd', $event->date_start_in_calendar) != date('Ymd', $event->date_end_in_calendar)) {
2126 // If the event is on several days
2127 $tmpyearend = dol_print_date($event->date_start_in_calendar, '%Y', 'tzuserrel');
2128 $tmpmonthend = dol_print_date($event->date_start_in_calendar, '%m', 'tzuserrel');
2129 $tmpdayend = dol_print_date($event->date_start_in_calendar, '%d', 'tzuserrel');
2130 //var_dump($tmpyearend.' '.$tmpmonthend.' '.$tmpdayend);
2131 if ($tmpyearend != $annee || $tmpmonthend != $mois || $tmpdayend != $jour) {
2132 $cssclass .= " unmovable unmovable-mustusefirstdaytodrag
";
2134 $cssclass .= ' movable cursormove';
2137 if ($user->hasRight('agenda', 'allactions', 'create') ||
2138 (($event->authorid == $user->id || $event->userownerid == $user->id) && $user->hasRight('agenda', 'myactions', 'create'))) {
2139 $cssclass .= " movable cursormove
";
2141 $cssclass .= " unmovable
";
2147 if ($mode == 'show_day') {
2148 $h = 'height: 100%; ';
2151 if ($mode == 'show_week') {
2152 $h = 'height: 100%; ';
2158 print '<!-- start event '.$i.' -->'."\n
";
2161 if ($maxprint && $ireallyshown >= $maxprint) {
2162 $morecss = 'showifmore';
2164 if ($event->type == 'birthdate' && !GETPOST('check_birthday')) {
2165 $morecss = 'hidden';
2167 if ($event->type == 'holiday' && !GETPOST('check_holiday')) {
2168 $morecss = 'hidden';
2170 /* I comment this because it hides event recorded from bookcal online page
2171 if ($event->type == 'bookcal_calendar' && !GETPOST('check_bookcal_calendar_'.$bookcalcalendarsarray["availabilitieslink
"][$event->fk_bookcal_calendar])) {
2172 $morecss = 'hidden';
2174 if ($morecss != 'hidden') {
2177 if ($morecss != 'showifmore' && $morecss != 'hidden') {
2181 //var_dump($event->type.' - '.$morecss.' - '.$cssclass.' - '.$i.' - '.$ireallyshown.' - '.$itoshow);
2182 if (isModEnabled("bookcal
") && $event->type == 'bookcal_calendar') {
2183 print '<div id="event_
'.$ymd.'_
'.$i.'" class="event family_
'.$event->type.'_
'.$bookcalcalendarsarray["availabilitieslink"][$event->fk_bookcal_calendar].' '.$cssclass.($morecss ? ' '.$morecss : '').'"';
2185 print '<div id="event_
'.$ymd.'_
'.$i.'" class="event family_
'.$event->type.' '.$cssclass.($morecss ? ' '.$morecss : '').'"';
2187 //print ' style="height: 100px;
';
2188 //print ' position: absolute; top: 40px; width: 50%;
';
2192 //var_dump($event->userassigned);
2193 //var_dump($event->transparency);
2194 print '<table class="centpercent cal_event
';
2195 print(empty($event->transparency) ? ' cal_event_notbusy
' : ' cal_event_busy
');
2196 //if (empty($event->transparency) && empty($conf->global->AGENDA_NO_TRANSPARENT_ON_NOT_BUSY)) print ' opacitymedium
'; // Not busy
2197 print '" style="'.$h;
2198 $colortouse = $color;
2199 // If colortouse is similar than background, we force to change it.
2200 if (empty($event->transparency) && !getDolGlobalString('AGENDA_NO_TRANSPARENT_ON_NOT_BUSY
')) {
2201 print 'background: #f0f0f0;
';
2202 print 'border-left: 5px solid #
'.$colortouse.';
';
2204 print 'background: #f0f0f0;
';
2205 print 'border-left: 5px solid #
'.dol_color_minus($colortouse, -3).';
';
2206 //print 'background: -webkit-gradient(linear, left top, left bottom, from(#
'.dol_color_minus($colortouse, -3).'), to(#
'.dol_color_minus($colortouse, -1).'));
';
2208 //print 'background: #
'.$colortouse.';
';
2209 //print 'background: -webkit-gradient(linear, left top, left bottom, from(#
'.dol_color_minus($color, -3).'), to(#
'.dol_color_minus($color, -1).'));
';
2210 //if (!empty($event->transparency)) print 'background: #
'.$color.'; background: -webkit-gradient(linear, left top, left bottom, from(#
'.$color.'), to(#
'.dol_color_minus($color,1).'));
';
2211 //else print 'background-color: transparent !important; background: none; border: 1px solid #bbb;
';
2212 //print ' -moz-border-radius:4px;
"';
2213 //print 'border: 1px solid #ccc" width=
"100%"';
2216 // First the tr of the event (only one tr for event is used, but several td)
2218 print '<td class="tdoverflow nobottom small centpercent
'.($nowrapontd ? 'nowrap
' : '').'cal_event
'.($event->type_code == 'BIRTHDAY
' ? ' cal_event_birthday
' : '').'">';
2219 print '<!-- left section of event -->';
2223 $parameters = array();
2224 $reshook = $hookmanager->executeHooks('eventOptions', $parameters, $event, $action); // Note that $action and $object may have been modified by some hooks
2226 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
2228 '@phan-var-force ActionComm $event';
2229 if (empty($reshook)) {
2232 if (empty($event->fulldayevent)) {
2233 //print $event->getNomUrl(2).' ';
2237 if ($event->type_code == 'BIRTHDAY') {
2238 // It's birthday calendar
2239 $picb = img_picto('', 'birthday-cake', 'class="pictofixedwidth
"');
2240 print $picb.$langs->trans("Birthday
").'<br>';
2244 if ($event->type_code != 'HOLIDAY' && $event->type_code != 'BIRTHDAY') {
2245 if (empty($event->fulldayevent)) {
2246 // Show hours (start ... end)
2247 $tmpyearstart = dol_print_date($event->date_start_in_calendar, '%Y', 'tzuserrel');
2248 $tmpmonthstart = dol_print_date($event->date_start_in_calendar, '%m', 'tzuserrel');
2249 $tmpdaystart = dol_print_date($event->date_start_in_calendar, '%d', 'tzuserrel');
2250 $tmpyearend = dol_print_date($event->date_end_in_calendar, '%Y', 'tzuserrel');
2251 $tmpmonthend = dol_print_date($event->date_end_in_calendar, '%m', 'tzuserrel');
2252 $tmpdayend = dol_print_date($event->date_end_in_calendar, '%d', 'tzuserrel');
2255 if ($tmpyearstart == $annee && $tmpmonthstart == $mois && $tmpdaystart == $jour) {
2256 $daterange .= dol_print_date($event->date_start_in_calendar, 'hour', 'tzuserrel');
2257 if ($event->date_end_in_calendar && $event->date_start_in_calendar != $event->date_end_in_calendar) {
2258 if ($tmpyearstart == $tmpyearend && $tmpmonthstart == $tmpmonthend && $tmpdaystart == $tmpdayend) {
2265 if ($event->date_end_in_calendar && $event->date_start_in_calendar != $event->date_end_in_calendar) {
2266 if ($tmpyearstart != $tmpyearend || $tmpmonthstart != $tmpmonthend || $tmpdaystart != $tmpdayend) {
2267 $daterange .= '...';
2271 if ($event->date_end_in_calendar && $event->date_start_in_calendar != $event->date_end_in_calendar) {
2272 if ($tmpyearend == $annee && $tmpmonthend == $mois && $tmpdayend == $jour) {
2273 $daterange .= dol_print_date($event->date_end_in_calendar, 'hour', 'tzuserrel');
2278 print $langs->trans("EventOnFullDay
")."<br>\n
";
2284 $titletoshow = $daterange;
2285 $titletoshow .= ($titletoshow ? ' ' : '').dol_escape_htmltag($event->label);
2287 if ($event->type_code != 'ICALEVENT' && $event->type_code != 'BIRTHDAY') {
2288 $savlabel = $event->label;
2289 $event->label = $titletoshow;
2290 // Note: List of users are inside $event->userassigned. Link may be clickable depending on permissions of user.
2291 $titletoshow = (($event->type_picto || $event->type_code) ? $event->getTypePicto() : '');
2292 $titletoshow .= $event->getNomUrl(0, $maxnbofchar, 'cal_event cal_event_title valignmiddle', '', 0, 0); // do not add 'inline-block' in css here: it makes the title transformed completely into '...'
2293 $event->label = $savlabel;
2296 // Loop on each assigned user
2297 $listofusertoshow = '';
2298 $posuserassigned = 0;
2299 foreach ($event->userassigned as $tmpid => $tmpdata) {
2300 if (!$posuserassigned && $titletoshow) {
2301 $listofusertoshow .= '<br>';
2304 if (empty($cacheusers[$tmpid])) {
2305 $newuser = new User($db);
2306 $newuser->fetch($tmpid);
2307 $cacheusers[$tmpid] = $newuser;
2310 $listofusertoshow .= $cacheusers[$tmpid]->getNomUrl(-3, '', 0, 0, 0, 0, '', 'valignmiddle inline-block');
2313 if ($event->type_code != 'BIRTHDAY' && $event->type_code != 'HOLIDAY') {
2315 print $listofusertoshow.' ';
2318 if ($event->type_code == 'ICALEVENT') {
2319 print '<br>('.dol_trunc($event->icalname, $maxnbofchar).')';
2322 $thirdparty_id = ($event->socid > 0 ? $event->socid : ((is_object($event->societe) && $event->societe->id > 0) ? $event->societe->id : 0));
2323 $contact_id = ($event->contact_id > 0 ? $event->contact_id : ((is_object($event->contact) && $event->contact->id > 0) ? $event->contact->id : 0));
2325 // If action related to company / contact
2326 $linerelatedto = '';
2327 if ($thirdparty_id > 0) {
2328 if (!isset($cachethirdparties[$thirdparty_id]) || !is_object($cachethirdparties[$thirdparty_id])) {
2329 $thirdparty = new Societe($db);
2330 $thirdparty->fetch($thirdparty_id);
2331 $cachethirdparties[$thirdparty_id] = $thirdparty;
2333 $thirdparty = $cachethirdparties[$thirdparty_id];
2335 if (!empty($thirdparty->id)) {
2336 $linerelatedto .= $thirdparty->getNomUrl(1, '', 0, 0, -1, 0, '', 'valignmiddle inline'); // using inline-block make the content completely replace with ... when too large
2339 if (!empty($contact_id) && $contact_id > 0) {
2340 if (empty($cachecontacts[$contact_id]) || !is_object($cachecontacts[$contact_id])) {
2341 $contact = new Contact($db);
2342 $contact->fetch($contact_id);
2343 $cachecontacts[$contact_id] = $contact;
2345 $contact = $cachecontacts[$contact_id];
2347 if ($linerelatedto) {
2348 $linerelatedto .= ' ';
2350 if (!empty($contact->id)) {
2351 $linerelatedto .= $contact->getNomUrl(1, '', 0, '', -1, 0, 'valignmiddle inline'); // using inline-block make the content completely replace with ... when too large
2354 if (!empty($event->fk_element) && $event->fk_element > 0 && !empty($event->elementtype) && getDolGlobalString('AGENDA_SHOW_LINKED_OBJECT')) {
2355 include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
2356 if ($linerelatedto) {
2357 $linerelatedto .= '<br>';
2359 $linerelatedto .= dolGetElementUrl($event->fk_element, $event->elementtype, 1);
2361 if ($linerelatedto) {
2362 print ' '.$linerelatedto;
2364 } elseif (!empty($reshook)) {
2365 print $hookmanager->resPrint;
2369 if ($event->type_code == 'HOLIDAY') {
2370 // It's holiday calendar
2371 $tmpholiday->fetch($event->id);
2373 print $tmpholiday->getNomUrl(1, -1, 0, 'valignmiddle inline-block');
2375 $tmpid = $tmpholiday->fk_user;
2376 if (empty($cacheusers[$tmpid])) {
2377 $newuser = new User($db);
2378 $newuser->fetch($tmpid);
2379 $cacheusers[$tmpid] = $newuser;
2382 $listofusertoshow = '';
2383 $listofusertoshow .= "\n
".'<br>'.$cacheusers[$tmpid]->getNomUrl(-1, '', 0, 0, 0, 0, '', 'paddingright valignmiddle inline-block')."\n
";
2384 print $listofusertoshow;
2389 if ($event->location) {
2391 print $langs->trans("Location
").': '.$event->location;
2399 if ($event->type_code != 'HOLIDAY' && $event->type_code != 'BIRTHDAY' && $event->type_code != 'ICALEVENT') {
2401 if ($event->percentage >= 0) {
2405 print '<td class="nobottom right nowrap cal_event_right
'.($withstatus >= 2 ? ' cal_event_right_status
' : '').'">';
2407 print $event->getLibStatut(3, 1);
2411 print '</td></tr></table>';
2412 print '</div><!-- end event '.$i.' -->'."\n
";
2416 print '<a href="'.DOL_URL_ROOT.'/comm/action/index.php?mode=
'.$mode.'&maxprint=0&month=
'.((int) $monthshown).'&year=
'.((int) $year);
2417 print($status ? '&
status=
'.$status : '').($filter ? '&filter=
'.urlencode($filter) : '');
2418 print($filtert ? '&search_filtert=
'.urlencode((string) $filtert) : '');
2419 print($usergroup ? '&search_usergroup=
'.urlencode((string) $usergroup) : '');
2420 print($actioncode != '' ? '&search_actioncode=
'.urlencode($actioncode) : '');
2421 print '">'.img_picto("all
", "1downarrow_selected.png
").' ...';
2422 print ' +'.(count($eventarray[$daykey]) - $maxprint);
2425 //$ok=false; // To avoid to show twice the link
2432 if (!$i) { // No events
2436 if (getDolGlobalString('MAIN_JS_SWITCH_AGENDA') && $itoshow > $ireallyshown && $maxprint) {
2437 print '<div class="center cursorpointer
" id="more_
'.$ymd.'">'.img_picto("All
", "angle-
double-down
", 'class="warning
"').' +'.($itoshow - $ireallyshown).'</div>';
2438 //print ' +'.(count($eventarray[$daykey])-$maxprint);
2440 print '<script type="text/javascript
">'."\n
";
2441 print 'jQuery(document).ready(function () {'."\n
";
2442 print ' var open=0;'."\n
";
2443 print ' jQuery("#more_
'.$ymd.'").click(function() { console.log("Click on showmore
for '.$ymd.'"); reinit_day_'.$ymd.'(); event.stopImmediatePropagation(); });'."\n
";
2444 print ' function reinit_day_'.$ymd.'() {'."\n
";
2445 print ' jQuery(".eventday_
'.$ymd.'.showifmore
").toggle();'."\n
";
2446 print ' open = open + 1; if (open > 1) { open = 0; }'."\n
";
2447 print ' if (open) { ';
2448 print ' jQuery("#more_
'.$ymd.'").html(\''.img_picto("All
", "angle-
double-up
", 'class="warning
"').'\');'."\n
";
2450 print ' jQuery("#more_
'.$ymd.'").html(\''.img_picto("All
", "angle-
double-down
", 'class="warning
"').' +'.($itoshow - $ireallyshown).'\');'."\n
";
2454 print '</script>'."\n
";
2457 print '</div></div>'; // td tr
2459 print '</div>'; // table
2472function dol_color_minus($color, $minus, $minusunit = 16)
2475 if ($minusunit == 16 && is_array($newcolor)) {
2476 $newcolor[0] = dechex(max(min(hexdec($newcolor[0]) - $minus, 15), 0));
2477 $newcolor[2] = dechex(max(min(hexdec($newcolor[2]) - $minus, 15), 0));
2478 $newcolor[4] = dechex(max(min(hexdec($newcolor[4]) - $minus, 15), 0));
2480 // Not yet implemented
2492function sort_events_by_date($a, $b)
2494 // Sort holidays at first
2495 if ($a->type_code === 'HOLIDAY') {
2498 if ($b->type_code === 'HOLIDAY') {
2502 // datep => Event start time
2503 // datef => Event end time
2505 // Events have different start time
2506 if ($a->datep !== $b->datep) {
2507 return $a->datep - $b->datep;
2510 // Events have same start time and no end time
2511 if ((!is_numeric($b->datef)) || (!is_numeric($a->datef))) {
2512 return sort_events_by_percentage($a, $b);
2515 // Events have the same start time and same end time
2516 if ($b->datef === $a->datef) {
2517 return sort_events_by_percentage($a, $b);
2520 // Events have the same start time, but have different end time -> longest event first
2521 return $b->datef - $a->datef;
2531function sort_events_by_percentage($a, $b)
2533 // Sort events with no percentage before each other
2534 // (useful to sort holidays, sick days or similar on the top)
2536 if ($a->percentage < 0) {
2540 if ($b->percentage < 0) {
2544 return $b->percentage - $a->percentage;
if(! $sortfield) if(! $sortorder) $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, $search_import_key='')
Show filter form in agenda view.
calendars_prepare_head($param)
Define head array for tabs of agenda setup pages.
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage agenda events (actions)
Class to read/parse ICal calendars.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
print $langs trans("Ref").' m titre as m m statut as status
Or an array listing all the potential status of the object: array: int of the status => translated la...
dol_get_prev_month($month, $year)
Return previous month.
dol_get_first_hour($date, $gm='tzserver')
Return GMT time for first hour of a given GMT date (it removes hours, min and second part)
dol_get_next_day($day, $month, $year)
Return next day.
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_get_prev_day($day, $month, $year)
Return previous day.
dol_get_first_day($year, $month=1, $gm=false)
Return GMT time for first day of a month or year.
dol_get_next_month($month, $year)
Return next month.
dol_stringtotime($string, $gm=1)
Convert a string date into a GM Timestamps date Warning: YYYY-MM-DDTHH:MM:SS+02:00 (RFC3339) is not s...
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0, $tz='')
Add a delay to a date.
dol_now($mode='gmt')
Return date for now.
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...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
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.
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
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_nl2br($stringtoencode, $nl2brmode=0, $forxml=false)
Replace CRLF in string with a HTML BR tag.
dol_sanitizePathName($str, $newstr='_', $unaccent=0, $allowdash=0)
Clean a string to use it as a path name.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
getDolUserString($key, $default='', $tmpuser=null)
Return Dolibarr user constant string value.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dolGetFirstLastname($firstname, $lastname, $nameorder=-1)
Return firstname and lastname in correct order.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_clone($srcobject, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
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...
conf($dolibarr_main_document_root)
Load conf file (file must exists)
if(getDolGlobalString( 'TAKEPOS_SHOW_CUSTOMER')) print $langs trans('Date')." left Label right Qty right Price right TotalHT right TotalTTC right right right right right right right right right centpercent right TotalHT right n right VAT right n right TotalVAT right n No sujeto a RE IRPF right TotalLT1 right n right TotalLT2 right n right TotalTTC right n takeposcustomercurrency takeposcustomercurrency takeposcustomercurrency takeposcustomercurrency right TotalTTC takeposcustomercurrency right takeposcustomercurrency n right PaymentTypeShortLIQ right SELECT p pos_change as p datep as date
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.