35require
'../../main.inc.php';
36require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
37require_once DOL_DOCUMENT_ROOT.
'/core/class/html.form.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/core/lib/agenda.lib.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
43require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncommreminder.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/cactioncomm.class.php';
47require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
48require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
49require_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
50require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
54$langs->loadLangs(array(
"companies",
"other",
"commercial",
"bills",
"orders",
"agenda",
"mails"));
57$action =
GETPOST(
'action',
'aZ09');
58$cancel =
GETPOST(
'cancel',
'alpha');
59$backtopage =
GETPOST(
'backtopage',
'alpha');
60$socpeopleassigned =
GETPOST(
'socpeopleassigned',
'array');
61$origin =
GETPOST(
'origin',
'alpha');
63$confirm =
GETPOST(
'confirm',
'alpha');
65$fulldayevent =
GETPOST(
'fullday',
'alpha');
72$addreminder =
GETPOST(
'addreminder',
'alpha');
74$offsetunit =
GETPOST(
'offsetunittype_duration',
'aZ09');
75$remindertype =
GETPOST(
'selectremindertype',
'aZ09');
76$modelmail =
GETPOSTINT(
'actioncommsendmodel_mail');
77$complete =
GETPOST(
'complete',
'alpha');
78$private =
GETPOST(
'private',
'alphanohtml');
79if ($complete ==
'na' || $complete == -2) {
95 if (
GETPOST(
'datep') ==
'now') {
97 } elseif (preg_match(
'/^([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])$/',
GETPOST(
"datep"), $reg)) {
98 $datep =
dol_mktime(0, 0, 0, $reg[2], $reg[3], $reg[1],
'tzuserrel');
105if ($user->socid && ($socid != $user->socid)) {
110$donotclearsession =
GETPOST(
'donotclearsession') ?
GETPOST(
'donotclearsession') : 0;
119$form =
new Form($db);
124if ($id > 0 && $action !=
'add') {
127 $ret =
$object->fetch_optionals();
128 $ret1 =
$object->fetch_userassigned();
130 if ($ret < 0 || $ret1 < 0) {
136$extrafields->fetch_name_optionals_label(
$object->table_element);
139$hookmanager->initHooks(array(
'actioncard',
'globalcard'));
141$parameters = array(
'socid' => $socid);
142$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
147$TRemindTypes = array();
149 $TRemindTypes[
'browser'] = array(
'label' => $langs->trans(
'BrowserPush'),
'disabled' => (!
getDolGlobalString(
'AGENDA_REMINDER_BROWSER') ? 1 : 0));
152 $TRemindTypes[
'email'] = array(
'label' => $langs->trans(
'EMail'),
'disabled' => (!
getDolGlobalString(
'AGENDA_REMINDER_EMAIL') ? 1 : 0));
155$TDurationTypes = array(
'y' => $langs->trans(
'Years'),
'm' => $langs->trans(
'Month'),
'w' => $langs->trans(
'Weeks'),
'd' => $langs->trans(
'Days'),
'h' => $langs->trans(
'Hours'),
'i' => $langs->trans(
'Minutes'));
157$result =
restrictedArea($user,
'agenda',
$object,
'actioncomm&societe',
'myactions|allactions',
'fk_soc',
'id');
159$usercancreate = $user->hasRight(
'agenda',
'allactions',
'create') || ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'create'));
166$listUserAssignedUpdated =
false;
167$listResourceAssignedUpdated =
false;
168$assignedtouser = array();
171if (empty($reshook) && (
GETPOST(
'removedassigned') ||
GETPOST(
'removedassigned') ==
'0')) {
172 $idtoremove =
GETPOST(
'removedassigned');
174 if (!empty($_SESSION[
'assignedtouser'])) {
175 $tmpassigneduserids = json_decode($_SESSION[
'assignedtouser'],
true);
177 $tmpassigneduserids = array();
180 foreach ($tmpassigneduserids as $key => $val) {
181 if ($val[
'id'] == $idtoremove || $val[
'id'] == -1) {
182 unset($tmpassigneduserids[$key]);
186 $_SESSION[
'assignedtouser'] = json_encode($tmpassigneduserids);
187 $donotclearsession = 1;
188 if ($action ==
'add' && $usercancreate) {
191 if ($action ==
'update' && $usercancreate) {
195 $listUserAssignedUpdated =
true;
198if (empty($reshook) && (
GETPOST(
'removedassignedresource') ||
GETPOST(
'removedassignedresource') ==
'0')) {
199 $idtoremove =
GETPOST(
'removedassignedresource');
201 if (!empty($_SESSION[
'assignedtoresource'])) {
202 $tmpassignedresourceids = json_decode($_SESSION[
'assignedtoresource'],
true);
204 $tmpassignedresourceids = array();
207 foreach ($tmpassignedresourceids as $key => $val) {
208 if ($val[
'id'] == $idtoremove || $val[
'id'] == -1) {
209 unset($tmpassignedresourceids[$key]);
213 $_SESSION[
'assignedtoresource'] = json_encode($tmpassignedresourceids);
214 $donotclearsessionresource = 1;
215 if ($action ==
'add' && $usercancreate) {
218 if ($action ==
'update' && $usercancreate) {
222 $listResourceAssignedUpdated =
true;
226if (empty($reshook) && (
GETPOST(
'addassignedtouser') ||
GETPOST(
'updateassignedtouser'))) {
228 if (
GETPOST(
'assignedtouser') > 0) {
229 $assignedtouser = array();
230 if (!empty($_SESSION[
'assignedtouser'])) {
231 $assignedtouser = json_decode($_SESSION[
'assignedtouser'],
true);
233 $assignedtouser[
GETPOST(
'assignedtouser')] = array(
'id' =>
GETPOSTINT(
'assignedtouser'),
'transparency' =>
GETPOST(
'transparency'),
'mandatory' => 1);
234 $_SESSION[
'assignedtouser'] = json_encode($assignedtouser);
236 $donotclearsession = 1;
237 if ($action ==
'add' && $usercancreate) {
240 if ($action ==
'update' && $usercancreate) {
244 $listUserAssignedUpdated =
true;
248if (empty($reshook) && (
GETPOST(
'addassignedtoresource') ||
GETPOST(
'updateassignedtoresource'))) {
250 if (
GETPOST(
'assignedtoresource') > 0) {
251 $assignedtoresource = array();
252 if (!empty($_SESSION[
'assignedtoresource'])) {
253 $assignedtoresource = json_decode($_SESSION[
'assignedtoresource'],
true);
255 $assignedtoresource[
GETPOST(
'assignedtoresource')] = array(
'id' =>
GETPOSTINT(
'assignedtoresource'),
'transparency' =>
GETPOST(
'transparency'),
'mandatory' => 1);
256 $_SESSION[
'assignedtoresource'] = json_encode($assignedtoresource);
258 $donotclearsession = 1;
259 if ($action ==
'add' && $usercancreate) {
262 if ($action ==
'update' && $usercancreate) {
266 $listResourceAssignedUpdated =
true;
270if (empty($reshook) && $action ==
'classin' && ($user->hasRight(
'agenda',
'allactions',
'create') ||
271 ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'create')))) {
277if (empty($reshook) && $action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
278 if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
283 if (!empty(
$object->socpeopleassigned)) {
284 reset(
$object->socpeopleassigned);
289 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
300if (empty($reshook) && $action ==
'add' && $usercancreate) {
303 if (empty($backtopage)) {
305 $backtopage = DOL_URL_ROOT.
'/societe/agenda.php?socid='.$socid;
307 $backtopage = DOL_URL_ROOT.
'/comm/action/index.php';
311 if (!empty($socpeopleassigned[0])) {
312 $result = $contact->fetch($socpeopleassigned[0]);
316 header(
"Location: ".$backtopage);
320 $percentage = in_array(
GETPOST(
'status'), array(-1, 100)) ?
GETPOST(
'status') : (in_array($complete, array(-1, 100)) ? $complete :
GETPOSTINT(
"percentage"));
334 if (!$datef && $percentage == 100) {
336 $donotclearsession = 1;
338 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"DateEnd")),
null,
'errors');
343 $donotclearsession = 1;
345 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Title")),
null,
'errors');
349 if (GETPOSTISSET(
'actioncode') && !
GETPOST(
'actioncode',
'aZ09')) {
351 $donotclearsession = 1;
353 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
361 $object->fulldayevent = ($fulldayevent ? 1 : 0);
365 if (
GETPOST(
"elementtype",
'alpha')) {
367 $modulecodetouseforpermissioncheck = $elProp[
'module'];
369 $hasPermissionOnLinkedObject = 0;
370 if ($user->hasRight($modulecodetouseforpermissioncheck,
'read')) {
371 $hasPermissionOnLinkedObject = 1;
373 if ($hasPermissionOnLinkedObject) {
380 if (
GETPOST(
'actioncode',
'aZ09') ==
'AC_RDV' && $contact->getFullName($langs)) {
381 $object->label = $langs->transnoentitiesnoconv(
"TaskRDVWith", $contact->getFullName($langs));
383 if ($langs->trans(
"Action".$object->type_code) !=
"Action".$object->type_code) {
384 $object->label = $langs->transnoentitiesnoconv(
"Action".
$object->type_code).
"\n";
386 $cactioncomm->fetch(
$object->type_code);
387 $object->label = $cactioncomm->label;
394 if (!empty($taskid)) {
395 $taskProject =
new Task($db);
396 if ($taskProject->fetch($taskid) > 0) {
397 $object->fk_project = $taskProject->fk_project;
406 $object->percentage = $percentage;
409 $transparency = (
GETPOST(
"transparency") ==
'on' ? 1 : 0);
411 $listofuserid = array();
412 if (!empty($_SESSION[
'assignedtouser'])) {
413 $listofuserid = json_decode($_SESSION[
'assignedtouser'],
true);
416 foreach ($listofuserid as $key => $value) {
418 if ($value[
'id'] > 0) {
419 $object->userownerid = $value[
'id'];
421 $object->transparency = $transparency;
424 $object->userassigned[$value[
'id']] = array(
'id' => $value[
'id'],
'transparency' => $transparency);
432 if (GETPOSTISSET(
"contactid")) {
444 if (empty(
$object->userownerid) && empty($_SESSION[
'assignedtouser'])) {
446 $donotclearsession = 1;
448 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ActionsOwnedBy")),
null,
'errors');
450 if (
$object->type_code ==
'AC_RDV' && ($datep ==
'' || ($datef ==
'' && empty($fulldayevent)))) {
452 $donotclearsession = 1;
454 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"DateEnd")),
null,
'errors');
459 $donotclearsession = 1;
461 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
464 foreach ($socpeopleassigned as $cid) {
465 $object->socpeopleassigned[$cid] = array(
'id' => $cid);
467 if (!empty(
$object->socpeopleassigned)) {
468 reset(
$object->socpeopleassigned);
473 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
476 $donotclearsession = 1;
485 $selectedrecurrulefreq =
'no';
486 $selectedrecurrulebymonthday =
'';
487 $selectedrecurrulebyday =
'';
488 $object->recurrule = GETPOSTISSET(
'recurrulefreq') ?
"FREQ=".GETPOST(
'recurrulefreq',
'alpha') :
"";
489 $object->recurrule .= (
GETPOST(
'recurrulefreq',
'alpha') ==
'MONTHLY' && GETPOSTISSET(
'BYMONTHDAY')) ?
"_BYMONTHDAY".
GETPOST(
'BYMONTHDAY',
'alpha') :
"";
490 $object->recurrule .= (
GETPOST(
'recurrulefreq',
'alpha') ==
'WEEKLY' && GETPOSTISSET(
'BYDAY')) ?
"_BYDAY".
GETPOST(
'BYDAY',
'alpha') :
"";
495 if (
$object->recurrule && preg_match(
'/FREQ=([A-Z]+)/i',
$object->recurrule, $reg1)) {
496 $selectedrecurrulefreq = $reg1[1];
498 if (
$object->recurrule && preg_match(
'/FREQ=MONTHLY.*BYMONTHDAY(\d+)/i',
$object->recurrule, $reg2)) {
499 $selectedrecurrulebymonthday = (int) $reg2[1];
501 if (
$object->recurrule && preg_match(
'/FREQ=WEEKLY.*BYDAY(\d+)/i',
$object->recurrule, $reg3)) {
502 $selectedrecurrulebyday = (int) $reg3[1];
506 $eventisrecurring = 0;
507 $userepeatevent = (
getDolGlobalInt(
'MAIN_FEATURES_LEVEL') == 2 ? 1 : 0);
508 if ($userepeatevent && !empty($selectedrecurrulefreq) && $selectedrecurrulefreq !=
'no') {
509 $eventisrecurring = 1;
519 $idaction =
$object->create($user);
524 $categories =
GETPOST(
'categories',
'array');
525 $object->setCategories($categories);
527 unset($_SESSION[
'assignedtouser']);
530 if ($user->id !=
$object->userownerid) {
531 $moreparam =
"filtert=-1";
535 if ($addreminder ==
'on') {
540 $actionCommReminder->dateremind = $dateremind;
541 $actionCommReminder->typeremind = $remindertype;
542 $actionCommReminder->offsetunit = $offsetunit;
543 $actionCommReminder->offsetvalue = $offsetvalue;
544 $actionCommReminder->status = $actionCommReminder::STATUS_TODO;
545 $actionCommReminder->fk_actioncomm =
$object->id;
546 if ($remindertype ==
'email') {
547 $actionCommReminder->fk_email_template = $modelmail;
551 foreach (
$object->userassigned as $userassigned) {
552 $actionCommReminder->fk_user = $userassigned[
'id'];
553 $res = $actionCommReminder->create($user);
558 $langs->load(
"errors");
559 $error = $langs->trans(
'ErrorReminderActionCommCreation');
562 $donotclearsession = 1;
573 $moreparam .= ($moreparam ?
'&' :
'').
'disabledefaultvalues=1';
593 $langs->load(
"errors");
594 $error = $langs->trans(
$object->error);
597 $donotclearsession = 1;
603 $donotclearsession = 1;
606 if ($eventisrecurring) {
608 if ($selectedrecurrulefreq ==
'WEEKLY' && !empty($selectedrecurrulebyday)) {
610 $datep =
dol_mktime($fulldayevent ?
'00' :
GETPOSTINT(
"aphour"), $fulldayevent ?
'00' :
GETPOSTINT(
"apmin"), $fulldayevent ?
'00' :
GETPOSTINT(
"apsec"), $firstdatearray[
'month'], $firstdatearray[
'first_day'], $firstdatearray[
'year'], $tzforfullday ? $tzforfullday :
'tzuserrel');
614 } elseif ($selectedrecurrulefreq ==
'MONTHLY' && !empty($selectedrecurrulebymonthday)) {
615 $firstday = $selectedrecurrulebymonthday;
624 $repeateventlimitdate =
dol_mktime(23, 59, 59, GETPOSTISSET(
"limitmonth") ?
GETPOSTINT(
"limitmonth") : 1, GETPOSTISSET(
"limitday") ?
GETPOSTINT(
"limitday") : 1, GETPOSTISSET(
"limityear") &&
GETPOSTINT(
"limityear") < 2100 ?
GETPOSTINT(
"limityear") : 2100, $tzforfullday ? $tzforfullday :
'tzuserrel');
630 while ($datep <= $repeateventlimitdate && !$error) {
634 $finalobject->datep = $datep;
635 $finalobject->datef = $datef;
637 $idaction = $finalobject->create($user);
640 if (!$finalobject->error) {
642 $categories =
GETPOST(
'categories',
'array');
643 $finalobject->setCategories($categories);
645 unset($_SESSION[
'assignedtouser']);
648 if ($user->id != $finalobject->userownerid) {
649 $moreparam =
"filtert=-1";
653 if ($addreminder ==
'on') {
658 $actionCommReminder->dateremind = $dateremind;
659 $actionCommReminder->typeremind = $remindertype;
660 $actionCommReminder->offsetunit = $offsetunit;
661 $actionCommReminder->offsetvalue = $offsetvalue;
662 $actionCommReminder->status = $actionCommReminder::STATUS_TODO;
663 $actionCommReminder->fk_actioncomm = $finalobject->id;
664 if ($remindertype ==
'email') {
665 $actionCommReminder->fk_email_template = $modelmail;
669 foreach ($finalobject->userassigned as $userassigned) {
670 $actionCommReminder->fk_user = $userassigned[
'id'];
671 $res = $actionCommReminder->create($user);
676 $langs->load(
"errors");
677 $error = $langs->trans(
'ErrorReminderActionCommCreation');
680 $donotclearsession = 1;
691 $moreparam .= ($moreparam ?
'&' :
'').
'disabledefaultvalues=1';
701 $langs->load(
"errors");
702 $error = $langs->trans($finalobject->error);
705 $donotclearsession = 1;
711 $donotclearsession = 1;
715 if (!($userepeatevent && GETPOSTISSET(
'recurrulefreq') &&
GETPOST(
'recurrulefreq') !=
'no' && GETPOSTISSET(
"limityear") && GETPOSTISSET(
"limitmonth") && GETPOSTISSET(
"limitday"))) {
726 if (!empty($backtopage) && !$error) {
727 dol_syslog(
"Back to ".$backtopage.($moreparam ? (preg_match(
'/\?/', $backtopage) ?
'&'.$moreparam :
'?'.$moreparam) :
''));
728 header(
"Location: ".$backtopage.($moreparam ? (preg_match(
'/\?/', $backtopage) ?
'&'.$moreparam :
'?'.$moreparam) :
''));
729 } elseif ($idaction) {
730 header(
"Location: ".DOL_URL_ROOT.
'/comm/action/card.php?id='.$idaction.($moreparam ?
'&'.$moreparam :
''));
732 header(
"Location: ".DOL_URL_ROOT.
'/comm/action/index.php'.($moreparam ?
'?'.$moreparam :
''));
739if (empty($reshook) && $action ==
'update' && $usercancreate) {
740 if (empty($cancel)) {
741 $fulldayevent =
GETPOST(
'fullday');
746 $percentage = in_array(
GETPOST(
'status'), array(-1, 100)) ?
GETPOST(
'status') : (in_array($complete, array(-1, 100)) ? $complete :
GETPOSTINT(
"percentage"));
771 $datep =
dol_mktime(
'00',
'00',
'00',
GETPOST(
"apmonth",
'int'),
GETPOST(
"apday",
'int'),
GETPOST(
"apyear",
'int'), $tzforfullday ? $tzforfullday :
'tzuserrel');
772 $datef =
dol_mktime(
'23',
'59',
'59',
GETPOST(
"p2month",
'int'),
GETPOST(
"p2day",
'int'),
GETPOST(
"p2year",
'int'), $tzforfullday ? $tzforfullday :
'tzuserrel');
774 $datep =
dol_mktime(
GETPOST(
"aphour",
'int'),
GETPOST(
"apmin",
'int'),
GETPOST(
"apsec",
'int'),
GETPOST(
"apmonth",
'int'),
GETPOST(
"apday",
'int'),
GETPOST(
"apyear",
'int'),
'tzuserrel');
775 $datef =
dol_mktime(
GETPOST(
"p2hour",
'int'),
GETPOST(
"p2min",
'int'),
GETPOST(
"apsec",
'int'),
GETPOST(
"p2month",
'int'),
GETPOST(
"p2day",
'int'),
GETPOST(
"p2year",
'int'),
'tzuserrel');
778 if (
$object->elementtype ==
'ticket') {
780 if (
$object->code ==
'TICKET_MSG') {
781 $object->code =
'TICKET_MSG_PRIVATE';
783 if (
$object->code ==
'TICKET_MSG_SENTBYMAIL') {
784 $object->code =
'TICKET_MSG_PRIVATE_SENTBYMAIL';
787 if (
$object->code ==
'TICKET_MSG_PRIVATE') {
790 if (
$object->code ==
'TICKET_MSG_PRIVATE_SENTBYMAIL') {
791 $object->code =
'TICKET_MSG_SENTBYMAIL';
803 $object->percentage = $percentage;
808 $socpeopleassigned =
GETPOST(
"socpeopleassigned",
'array');
809 $object->socpeopleassigned = array();
810 foreach ($socpeopleassigned as $cid) {
811 $object->socpeopleassigned[$cid] = array(
'id' => $cid);
814 if (empty(
$object->contact_id) && !empty(
$object->socpeopleassigned)) {
815 reset(
$object->socpeopleassigned);
821 if (
GETPOST(
"elementtype",
'alpha')) {
823 $modulecodetouseforpermissioncheck = $elProp[
'module'];
825 $hasPermissionOnLinkedObject = 0;
826 if ($user->hasRight($modulecodetouseforpermissioncheck,
'read')) {
827 $hasPermissionOnLinkedObject = 1;
829 if ($hasPermissionOnLinkedObject) {
835 if (!$datef && $percentage == 100) {
837 $donotclearsession = 1;
838 setEventMessages($langs->transnoentitiesnoconv(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"DateEnd")),
$object->errors,
'errors');
842 $transparency = (
GETPOST(
"transparency") ==
'on' ? 1 : 0);
845 $listofuserid = array();
846 if (!empty($_SESSION[
'assignedtouser'])) {
848 $tmplist1 = json_decode($_SESSION[
'assignedtouser'],
true);
849 foreach ($tmplist1 as $key => $val) {
850 if ($val[
'id'] > 0 && $val[
'id'] != $assignedtouser) {
851 $listofuserid[$val[
'id']] = $val;
855 $assignedtouser = (!empty(
$object->userownerid) &&
$object->userownerid > 0 ?
$object->userownerid : 0);
856 if ($assignedtouser) {
857 $listofuserid[$assignedtouser] = array(
'id' => $assignedtouser,
'mandatory' => 0,
'transparency' => ($user->id == $assignedtouser ? $transparency :
''));
860 $object->userassigned = array();
863 foreach ($listofuserid as $key => $val) {
865 $object->userownerid = $val[
'id'];
867 $object->userassigned[$val[
'id']] = array(
'id' => $val[
'id'],
'mandatory' => 0,
'transparency' => ($user->id == $val[
'id'] ? $transparency :
''));
871 $object->transparency = $transparency;
875 if (GETPOSTISSET(
'actioncode') && !
GETPOST(
'actioncode',
'aZ09')) {
877 $donotclearsession = 1;
879 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
881 $result = $cactioncomm->fetch(
GETPOST(
'actioncode',
'aZ09'));
883 if (empty(
$object->userownerid)) {
885 $donotclearsession = 1;
887 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ActionsOwnedBy")),
null,
'errors');
891 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
'@GETPOSTISSET');
899 $eventDateStart =
$object->datep;
900 $eventDateEnd =
$object->datef;
902 $sql =
"SELECT er.rowid, r.ref as r_ref, ac.id as ac_id, ac.label as ac_label";
903 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_resources as er";
904 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"resource as r ON r.rowid = er.resource_id AND er.resource_type = 'dolresource'";
905 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"actioncomm as ac ON ac.id = er.element_id AND er.element_type = '".$db->escape(
$object->element).
"'";
906 $sql .=
" WHERE ac.id <> ".((int)
$object->id);
907 $sql .=
" AND er.resource_id IN (";
908 $sql .=
" SELECT resource_id FROM ".MAIN_DB_PREFIX.
"element_resources";
909 $sql .=
" WHERE element_id = ".((int)
$object->id);
910 $sql .=
" AND element_type = '".$db->escape(
$object->element).
"'";
911 $sql .=
" AND busy = 1";
913 $sql .=
" AND er.busy = 1";
917 $sql .=
" (ac.datep <= '".$db->idate($eventDateStart).
"' AND (ac.datep2 IS NULL OR ac.datep2 >= '".$db->idate($eventDateStart).
"'))";
919 if (!empty($eventDateEnd)) {
920 $sql .=
" OR (ac.datep <= '".$db->idate($eventDateEnd).
"' AND (ac.datep2 >= '".$db->idate($eventDateEnd).
"'))";
924 $sql .=
"ac.datep >= '".$db->idate($eventDateStart).
"'";
925 if (!empty($eventDateEnd)) {
926 $sql .=
" AND (ac.datep2 IS NOT NULL AND ac.datep2 <= '".$db->idate($eventDateEnd).
"')";
931 $resql = $db->query($sql);
934 $object->error = $db->lasterror();
937 if ($db->num_rows($resql) > 0) {
940 $object->error = $langs->trans(
'ErrorResourcesAlreadyInUse').
' : ';
941 while ($obj = $db->fetch_object($resql)) {
942 $object->error .=
'<br> - '.$langs->trans(
'ErrorResourceUseInEvent', $obj->r_ref, $obj->ac_label.
' ['.$obj->ac_id.
']');
958 $result =
$object->update($user);
962 $categories =
GETPOST(
'categories',
'array');
963 $object->setCategories($categories);
965 $object->loadReminders($remindertype, 0,
false);
968 if (!empty(
$object->reminders)) {
969 foreach (
$object->reminders as $reminder) {
970 if ($reminder->status < 1) {
971 $reminder->delete($user);
978 if ($addreminder ==
'on') {
983 $actionCommReminder->dateremind = $dateremind;
984 $actionCommReminder->typeremind = $remindertype;
985 $actionCommReminder->offsetunit = $offsetunit;
986 $actionCommReminder->offsetvalue = $offsetvalue;
987 $actionCommReminder->status = $actionCommReminder::STATUS_TODO;
988 $actionCommReminder->fk_actioncomm =
$object->id;
989 if ($remindertype ==
'email') {
990 $actionCommReminder->fk_email_template = $modelmail;
994 foreach (
$object->userassigned as $userassigned) {
995 $actionCommReminder->fk_user = $userassigned[
'id'];
996 $res = $actionCommReminder->create($user);
1000 $langs->load(
"errors");
1001 $error = $langs->trans(
'ErrorReminderActionCommCreation');
1004 $donotclearsession = 1;
1010 unset($_SESSION[
'assignedtouser']);
1011 unset($_SESSION[
'assignedtoresource']);
1026 if (!empty($backtopage)) {
1027 unset($_SESSION[
'assignedtouser']);
1028 header(
"Location: ".$backtopage);
1035if (empty($reshook) && $action ==
'confirm_delete' &&
GETPOST(
"confirm") ==
'yes') {
1038 $object->fetch_userassigned();
1041 if ($user->hasRight(
'agenda',
'myactions',
'delete')
1042 || $user->hasRight(
'agenda',
'allactions',
'delete')) {
1043 $result =
$object->delete($user);
1046 header(
"Location: index.php");
1058if (empty($reshook) &&
GETPOST(
'actionmove',
'alpha') ==
'mupdate') {
1064 $newdate =
GETPOST(
'newdate',
'alpha');
1065 if (empty($newdate) || strpos($newdate,
'dayevent_') != 0) {
1066 header(
"Location: ".$backtopage,
true, 307);
1070 $datep =
dol_mktime($shour, $smin, 0, substr($newdate, 13, 2), substr($newdate, 15, 2), substr($newdate, 9, 4),
'tzuserrel');
1073 if ($datep !=
$object->datep) {
1082 $eventDateStart =
$object->datep;
1083 $eventDateEnd =
$object->datef;
1085 $sql =
"SELECT er.rowid, r.ref as r_ref, ac.id as ac_id, ac.label as ac_label";
1086 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_resources as er";
1087 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"resource as r ON r.rowid = er.resource_id AND er.resource_type = 'dolresource'";
1088 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"actioncomm as ac ON ac.id = er.element_id AND er.element_type = '".$db->escape(
$object->element).
"'";
1089 $sql .=
" WHERE ac.id <> ".((int)
$object->id);
1090 $sql .=
" AND er.resource_id IN (";
1091 $sql .=
" SELECT resource_id FROM ".MAIN_DB_PREFIX.
"element_resources";
1092 $sql .=
" WHERE element_id = ".((int)
$object->id);
1093 $sql .=
" AND element_type = '".$db->escape(
$object->element).
"'";
1094 $sql .=
" AND busy = 1";
1096 $sql .=
" AND er.busy = 1";
1100 $sql .=
" (ac.datep <= '".$db->idate($eventDateStart).
"' AND (ac.datep2 IS NULL OR ac.datep2 >= '".$db->idate($eventDateStart).
"'))";
1102 if (!empty($eventDateEnd)) {
1103 $sql .=
" OR (ac.datep <= '".$db->idate($eventDateEnd).
"' AND (ac.datep2 >= '".$db->idate($eventDateEnd).
"'))";
1107 $sql .=
"ac.datep >= '".$db->idate($eventDateStart).
"'";
1108 if (!empty($eventDateEnd)) {
1109 $sql .=
" AND (ac.datep2 IS NOT NULL AND ac.datep2 <= '".$db->idate($eventDateEnd).
"')";
1114 $resql = $db->query($sql);
1117 $object->error = $db->lasterror();
1120 if ($db->num_rows($resql) > 0) {
1123 $object->error = $langs->trans(
'ErrorResourcesAlreadyInUse').
' : ';
1124 while ($obj = $db->fetch_object($resql)) {
1125 $object->error .=
'<br> - '.$langs->trans(
'ErrorResourceUseInEvent', $obj->r_ref, $obj->ac_label.
' ['.$obj->ac_id.
']');
1140 $result =
$object->update($user);
1150 if (!empty($backtopage)) {
1151 header(
"Location: ".$backtopage,
true, 307);
1160$permissiontoadd = ($user->hasRight(
'agenda',
'allactions',
'create') || ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'read')));
1161if (empty($reshook)) {
1162 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1170$form =
new Form($db);
1173$arrayrecurrulefreq = array(
1174 'no' => $langs->trans(
"OnceOnly"),
1175 'MONTHLY' => $langs->trans(
"EveryMonth"),
1176 'WEEKLY' => $langs->trans(
"EveryWeek")
1181$help_url =
'EN:Module_Agenda_En|FR:Module_Agenda|ES:M&omodulodulo_Agenda|DE:Modul_Terminplanung';
1182llxHeader(
'', $langs->trans(
"Agenda"), $help_url);
1184if ($action ==
'create') {
1187 $socpeopleassigned =
GETPOST(
"socpeopleassigned",
'array');
1188 if (!empty($socpeopleassigned[0])) {
1189 $result = $contact->fetch($socpeopleassigned[0]);
1197 if (!empty($conf->use_javascript_ajax)) {
1198 print
"\n".
'<script type="text/javascript">';
1199 print
'$(document).ready(function () {
1200 function setdatefields()
1202 if ($("#fullday:checked").val() == null) {
1203 $(".fulldaystarthour").removeAttr("disabled");
1204 $(".fulldaystartmin").removeAttr("disabled");
1205 $(".fulldayendhour").removeAttr("disabled");
1206 $(".fulldayendmin").removeAttr("disabled");
1207 $("#p2").removeAttr("disabled");
1209 $(".fulldaystarthour").prop("disabled", true).val("00");
1210 $(".fulldaystartmin").prop("disabled", true).val("00");
1211 $(".fulldayendhour").prop("disabled", true).val("23");
1212 $(".fulldayendmin").prop("disabled", true).val("59");
1213 $("#p2").removeAttr("disabled");
1216 $("#fullday").change(function() {
1217 console.log("setdatefields");
1221 $("#actioncode").change(function() {
1222 if ($("#actioncode").val() == \'AC_RDV\') $("#dateend").addClass("fieldrequired");
1223 else $("#dateend").removeClass("fieldrequired");
1225 $("#aphour,#apmin").change(function() {
1226 if ($("#actioncode").val() == \'AC_RDV\') {
1227 console.log("Start date was changed, we modify end date "+(parseInt($("#aphour").val()))+" "+$("#apmin").val()+" -> "+("00" + (parseInt($("#aphour").val()) + 1)).substr(-2,2));
1228 $("#p2hour").val(("00" + (parseInt($("#aphour").val()) + 1)).substr(-2,2));
1229 $("#p2min").val($("#apmin").val());
1230 $("#p2day").val($("#apday").val());
1231 $("#p2month").val($("#apmonth").val());
1232 $("#p2year").val($("#apyear").val());
1233 $("#p2").val($("#ap").val());
1236 if ($("#actioncode").val() == \'AC_RDV\') $("#dateend").addClass("fieldrequired");
1237 else $("#dateend").removeClass("fieldrequired");
1240 print
'</script>'.
"\n";
1243 print
'<form name="formaction" action="'.$_SERVER[
'PHP_SELF'].
'" method="POST">';
1244 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1245 print
'<input type="hidden" name="action" value="add">';
1246 print
'<input type="hidden" name="donotclearsession" value="1">';
1247 print
'<input type="hidden" name="page_y" value="">';
1249 print
'<input type="hidden" name="backtopage" value="'.($backtopage !=
'1' ? $backtopage :
'').
'">';
1252 print
'<input type="hidden" name="actioncode" value="'.dol_getIdFromCode($db,
'AC_OTH',
'c_actioncomm').
'">';
1255 if (
GETPOST(
"actioncode",
'aZ09') ==
'AC_RDV') {
1256 print
load_fiche_titre($langs->trans(
"AddActionRendezVous"),
'',
'title_agenda');
1263 print
'<table class="border centpercent">';
1267 print
'<tr><td class="titlefieldcreate"><span class="fieldrequired">'.$langs->trans(
"Type").
'</span></b></td><td>';
1269 print
img_picto($langs->trans(
"ActionType"),
'square',
'class="fawidth30 inline-block" style="color: #ddd;"');
1270 $selectedvalue = GETPOSTISSET(
"actioncode") ?
GETPOST(
"actioncode",
'aZ09') : (
$object->type_code ?
$object->type_code : $default);
1271 print $formactions->select_type_actions($selectedvalue,
"actioncode",
"systemauto", 0, -1, 0, 1);
1276 print
'<tr><td'.(!
getDolGlobalString(
'AGENDA_USE_EVENT_TYPE') ?
' class="fieldrequired titlefieldcreate"' :
'').
'>'.$langs->trans(
"Label").
'</td><td><input type="text" id="label" name="label" class="soixantepercent" value="'.
GETPOST(
'label').
'"></td></tr>';
1279 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
"Date").
'</span></td>';
1280 print
'<td class="valignmiddle height30"><input class="valignmiddle" type="checkbox" id="fullday" name="fullday" '.(GETPOST(
'fullday') ?
' checked' :
'').
'><label for="fullday" class="valignmiddle small">'.$langs->trans(
"EventOnFullDay").
'</label>';
1283 $userepeatevent = (
getDolGlobalInt(
'MAIN_FEATURES_LEVEL') >= 1 ? 1 : 0);
1284 if ($userepeatevent) {
1286 print
' <div class="opacitymedium inline-block small">';
1287 print
img_picto($langs->trans(
"Recurrence"),
'recurring',
'style="margin-left: 6px" class="paddingright2"');
1288 print
'<input type="hidden" name="recurid" value="'.(empty(
$object->recurid) ?
'' :
$object->recurid).
'">';
1290 $selectedrecurrulefreq =
'no';
1291 $selectedrecurrulebymonthday =
'';
1292 $selectedrecurrulebyday =
'';
1293 $object->recurrule = GETPOSTISSET(
'recurrulefreq') ?
"FREQ=".GETPOST(
'recurrulefreq',
'alpha') :
"";
1294 $object->recurrule .= GETPOSTISSET(
'BYMONTHDAY') ?
"_BYMONTHDAY".GETPOST(
'BYMONTHDAY',
'alpha') :
"";
1295 $object->recurrule .= GETPOSTISSET(
'BYDAY') ?
"_BYDAY".GETPOST(
'BYDAY',
'alpha') :
"";
1299 if (
$object->recurrule && preg_match(
'/FREQ=([A-Z]+)/i',
$object->recurrule, $reg)) {
1300 $selectedrecurrulefreq = $reg[1];
1302 if (
$object->recurrule && preg_match(
'/FREQ=MONTHLY.*BYMONTHDAY(\d+)/i',
$object->recurrule, $reg)) {
1303 $selectedrecurrulebymonthday = (int) $reg[1];
1305 if (
$object->recurrule && preg_match(
'/FREQ=WEEKLY.*BYDAY(\d+)/i',
$object->recurrule, $reg)) {
1306 $selectedrecurrulebyday = (int) $reg[1];
1309 print $form->selectarray(
'recurrulefreq', $arrayrecurrulefreq, $selectedrecurrulefreq, 0, 0, 0,
'', 0, 0, 0,
'',
'marginrightonly');
1315 print
'<div class="hidden marginrightonly inline-block repeateventBYMONTHDAY">';
1316 print $langs->trans(
"DayOfMonth").
': <input type="input" size="2" name="BYMONTHDAY" value="'.$selectedrecurrulebymonthday.
'">';
1319 print
'<div class="hidden marginrightonly inline-block repeateventBYDAY">';
1320 print $langs->trans(
"DayOfWeek").
': <input type="input" size="4" name="BYDAY" value="'.$selectedrecurrulebyday.
'">';
1323 $repeateventlimitdate = !empty($repeateventlimitdate) ? $repeateventlimitdate :
'';
1324 print
'<div class="hidden marginrightonly inline-block repeateventlimitdate">';
1325 print $langs->trans(
"Until").
" ";
1326 print $form->selectDate($repeateventlimitdate,
'limit', 0, 0, 0,
"action", 1, 0, 0,
'',
'',
'',
'', 1,
'',
'',
'tzuserrel');
1329 print
'<script type="text/javascript">
1330 jQuery(document).ready(function() {
1331 function init_repeat()
1333 console.log("recurrule: " + "'.$object->recurrule.
'");
1334 console.log("reg1: " + "'.$selectedrecurrulefreq.
'");
1335 console.log("reg2: " + "'.$selectedrecurrulebymonthday.
'");
1336 console.log("reg3: " + "'.$selectedrecurrulebyday.
'");
1337 console.log("selectedrulefreq: " + "'.$selectedrecurrulefreq.
'");
1338 if (jQuery("#recurrulefreq").val() == \'MONTHLY\')
1340 jQuery(".repeateventBYMONTHDAY").css("display", "inline-block"); /* use this instead of show because we want inline-block and not block */
1341 jQuery(".repeateventlimitdate").css("display", "inline-block");
1342 jQuery(".repeateventBYDAY").hide();
1344 else if (jQuery("#recurrulefreq").val() == \'WEEKLY\')
1346 jQuery(".repeateventBYMONTHDAY").hide();
1347 jQuery(".repeateventBYDAY").css("display", "inline-block"); /* use this instead of show because we want inline-block and not block */
1348 jQuery(".repeateventlimitdate").css("display", "inline-block");
1352 jQuery(".repeateventBYMONTHDAY").hide();
1353 jQuery(".repeateventBYDAY").hide();
1354 jQuery(".repeateventlimitdate").hide();
1358 jQuery("#recurrulefreq").change(function() {
1369 $datep = ($datep ? $datep : (is_null(
$object->datep) ?
'' :
$object->datep));
1373 $datef = ($datef ? $datef :
$object->datef);
1377 if (empty($datef) && !empty($datep)) {
1384 print
'<tr><td class="nowrap">';
1387 print $form->selectDate($datep,
'ap', 1, 1, 0,
"action", 1, 2, 0,
'fulldaystart',
'',
'',
'', 1,
'',
'',
'tzuserrel');
1389 print $form->selectDate($datep,
'ap', 1, 1, 1,
"action", 1, 2, 0,
'fulldaystart',
'',
'',
'', 1,
'',
'',
'tzuserrel');
1391 print
' <span class="hideonsmartphone"> - </span><br class="showonsmartphone"> ';
1392 print $form->selectDate($datef,
'p2', 1, 1, 1,
"action", 1, 2, 0,
'fulldayend',
'',
'',
'', 1,
'',
'',
'tzuserrel');
1395 print
'<tr><td class=""> </td><td></td></tr>';
1398 print
'<tr><td class="tdtop nowrap"><span class="fieldrequired">'.$langs->trans(
"ActionAffectedTo").
'</span></td><td>';
1399 $listofuserid = array();
1400 $listofcontactid = array();
1401 $listofotherid = array();
1403 if (empty($donotclearsession)) {
1405 if ($assignedtouser) {
1406 $listofuserid[$assignedtouser] = array(
'id' => $assignedtouser,
'mandatory' => 0);
1409 $listofuserid[$assignedtouser][
'transparency'] = (GETPOSTISSET(
'transparency') ?
GETPOST(
'transparency',
'alpha') : 1);
1410 $_SESSION[
'assignedtouser'] = json_encode($listofuserid);
1412 if (!empty($_SESSION[
'assignedtouser'])) {
1413 $listofuserid = json_decode($_SESSION[
'assignedtouser'],
true);
1415 $firstelem = reset($listofuserid);
1416 if (isset($listofuserid[$firstelem[
'id']])) {
1417 $listofuserid[$firstelem[
'id']][
'transparency'] = (GETPOSTISSET(
'transparency') ?
GETPOST(
'transparency',
'alpha') : 0);
1420 print
'<div class="assignedtouser">';
1421 print $form->select_dolusers_forevent(($action ==
'create' ?
'add' :
'update'),
'assignedtouser', 1,
'', 0,
'',
'', 0, 0, 0,
'AND u.statut != 0', 1, $listofuserid, $listofcontactid, $listofotherid);
1427 print
'<tr><td>'.$langs->trans(
"Location").
'</td><td><input type="text" name="location" class="minwidth300 maxwidth150onsmartphone" value="'.(
GETPOST(
'location') ?
GETPOST(
'location') :
$object->location).
'"></td></tr>';
1430 if (isModEnabled(
'category')) {
1432 print
'<tr><td>'.$langs->trans(
"Categories").
'</td><td>';
1433 $cate_arbo = $form->select_all_categories(Categorie::TYPE_ACTIONCOMM,
'',
'parent', 64, 0, 3);
1434 print
img_picto(
'',
'category').$form->multiselectarray(
'categories', $cate_arbo,
GETPOST(
'categories',
'array'),
'', 0,
'minwidth300 quatrevingtpercent widthcentpercentminusx', 0, 0);
1438 if (isModEnabled(
'resource')) {
1440 print
'<tr><td class="tdtop nowrap">'.$langs->trans(
"Resource").
'</td><td>';
1442 $listofresourceid = array();
1443 if (empty($donotclearsession)) {
1444 $assignedtoresource =
GETPOST(
"assignedtoresource");
1445 if ($assignedtoresource) {
1446 $listofresourceid[$assignedtoresource] = array(
'id' => $assignedtoresource,
'mandatory' => 0);
1448 $_SESSION[
'assignedtoresource'] = json_encode($listofresourceid);
1450 if (!empty($_SESSION[
'assignedtoresource'])) {
1451 $listofresourceid = json_decode($_SESSION[
'assignedtoresource'],
true);
1453 $firstelem = reset($listofresourceid);
1454 if (isset($listofresourceid[$firstelem[
'id']])) {
1455 $listofresourceid[$firstelem[
'id']][
'transparency'] = (GETPOSTISSET(
'transparency') ?
GETPOST(
'transparency',
'alpha') : 0);
1458 print
'<div class="assignedtoresource">';
1459 print $form->select_dolresources_forevent(($action ==
'create' ?
'add' :
'update'),
'assignedtoresource', 1,
'', 0,
'',
'', 0, 0, 0,
'AND u.statut != 0', 1, $listofresourceid);
1465 print
'<tr><td>'.$langs->trans(
"Status").
' / '.$langs->trans(
"Percentage").
'</td>';
1467 $percent = $complete !==
'' ? $complete : -1;
1468 if (GETPOSTISSET(
'status')) {
1470 } elseif (GETPOSTISSET(
'percentage')) {
1473 if ($complete ==
'0' ||
GETPOST(
"afaire") == 1) {
1475 } elseif ($complete == 100 ||
GETPOST(
"afaire") == 2) {
1479 $formactions->form_select_status_action(
'formaction', $percent, 1,
'complete', 0, 0,
'maxwidth200');
1485 print
'<br><hr><br>';
1488 print
'<table class="border centpercent">';
1490 if (isModEnabled(
"societe")) {
1492 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ActionOnCompany").
'</td><td>';
1496 print $societe->getNomUrl(1);
1497 print
'<input type="hidden" id="socid" name="socid" value="'.GETPOSTINT(
'socid').
'">';
1500 $events[] = array(
'method' =>
'getContacts',
'url' =>
dol_buildpath(
'/core/ajax/contacts.php?showempty=1', 1),
'htmlname' =>
'contactid',
'params' => array(
'add-customer-contact' =>
'disabled'));
1502 if (!empty($user->socid)) {
1503 print
img_picto(
'',
'company',
'class="paddingrightonly"').$form->select_company($user->socid,
'socid',
'', 1, 1, 0, $events, 0,
'minwidth300 widthcentpercentminusxx maxwidth500');
1505 print
img_picto(
'',
'company',
'class="paddingrightonly"').$form->select_company(
'',
'socid',
'',
'SelectThirdParty', 1, 0, $events, 0,
'minwidth300 widthcentpercentminusxx maxwidth500');
1511 print
'<tr><td class="nowrap">'.$langs->trans(
"ActionOnContact").
'</td><td>';
1512 $preselectedids =
GETPOST(
'socpeopleassigned',
'array:int');
1516 if ($origin ==
'contact') {
1522 $select_contact_default = 0;
1524 $select_contact_default = -1;
1526 print
img_picto(
'',
'contact',
'class="paddingrightonly"');
1528 if (
getDolGlobalString(
'CONTACT_USE_SEARCH_TO_SELECT') && $conf->use_javascript_ajax) {
1535 $conf->global->CONTACT_USE_SEARCH_TO_SELECT = 0;
1536 print $form->selectcontacts(GETPOSTISSET(
'socid') ?
GETPOSTINT(
'socid') : $select_contact_default, $preselectedids,
'socpeopleassigned[]', 1,
'',
'', 0,
'minwidth300 widthcentpercentminusxx maxwidth500', 0, 0, array(), false,
'multiple',
'contactid');
1537 $conf->global->CONTACT_USE_SEARCH_TO_SELECT = $sav;
1539 print $form->selectcontacts(GETPOSTISSET(
'socid') ?
GETPOSTINT(
'socid') : $select_contact_default, $preselectedids,
'socpeopleassigned[]', 1,
'',
'', 0,
'minwidth300 widthcentpercentminusxx maxwidth500', 0, 0, array(), false,
'multiple',
'contactid');
1546 if (isModEnabled(
'project')) {
1547 $langs->load(
"projects");
1551 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Project").
'</td><td id="project-input-container">';
1552 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1553 print $formproject->select_projects((
$object->socid > 0 ?
$object->socid : -1), $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500 widthcentpercentminusxx maxwidth500');
1555 print
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?socid='.(empty($societe->id) ?
'' : $societe->id).
'&action=create&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create').
'">';
1556 print
'<span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddProject").
'"></span></a>';
1557 $urloption =
'?action=create&donotclearsession=1';
1561 print
"\n".
'<script type="text/javascript">';
1562 print
'$(document).ready(function () {
1563 $("#projectid").change(function () {
1564 var url = "'.DOL_URL_ROOT.
'/projet/ajax/projects.php?mode=gettasks&socid="+$("#search_socid").val()+"&projectid="+$("#projectid").val();
1565 console.log("Call url to get new list of tasks: "+url);
1566 $.get(url, function(data) {
1568 if (data) $("#taskid").html(data).select2();
1572 print
'</script>'.
"\n";
1577 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Task").
'</td><td id="project-task-input-container" >';
1578 print
img_picto(
'',
'projecttask',
'class="paddingrightonly"');
1579 $projectsListId =
false;
1580 if (!empty($projectid)) {
1581 $projectsListId = $projectid;
1584 $tid = GETPOSTISSET(
"projecttaskid") ?
GETPOSTINT(
"projecttaskid") : (GETPOSTISSET(
"taskid") ?
GETPOSTINT(
"taskid") :
'');
1586 $formproject->selectTasks((!empty($societe->id) ? $societe->id : -1), $tid,
'taskid', 24, 0,
'1', 1, 0, 0,
'maxwidth500 widthcentpercentminusxx', $projectsListId);
1591 if (!empty($origin) && !empty($originid)) {
1592 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
1594 $hasPermissionOnLinkedObject = 0;
1597 if ($user->hasRight($elProp[
'module'],
'read') || $user->hasRight($elProp[
'module'], $elProp[
'element'],
'read')) {
1598 $hasPermissionOnLinkedObject = 1;
1602 if (! in_array($origin, array(
'societe',
'project',
'task',
'user'))) {
1604 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"LinkedObject").
'</td>';
1605 print
'<td colspan="3">';
1606 if ($hasPermissionOnLinkedObject) {
1608 print
'<input type="hidden" name="fk_element" value="'.$originid.
'">';
1609 print
'<input type="hidden" name="elementtype" value="'.$origin.
'">';
1610 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1611 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1613 print
'<!-- no permission on object to link '.$origin.
' id '.$originid.
' -->';
1621 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"Priority").
'</td><td colspan="3">';
1622 print
'<input type="text" name="priority" value="'.(GETPOSTISSET(
'priority') ?
GETPOSTINT(
'priority') : (
$object->priority ?
$object->priority :
'')).
'" size="5">';
1627 print
'<tr><td class="tdtop">'.$langs->trans(
"Description").
'</td><td>';
1628 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1629 $doleditor =
new DolEditor(
'note', (GETPOSTISSET(
'note') ?
GETPOST(
'note',
'restricthtml') :
$object->note_private),
'', 120,
'dolibarr_notes',
'In', true, true, isModEnabled(
'fckeditor'), ROWS_4,
'90%');
1630 $doleditor->Create();
1634 $parameters = array();
1635 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
1636 print $hookmanager->resPrint;
1637 if (empty($reshook)) {
1638 print
$object->showOptionals($extrafields,
'create', $parameters);
1648 print
'<label for="addreminder">'.img_picto(
'',
'bell',
'class="pictofixedwidth"').$langs->trans(
"AddReminder").
'</label> <input type="checkbox" id="addreminder" name="addreminder"><br><br>';
1650 print
'<div class="reminderparameters" style="display: none;">';
1652 print
'<table class="border centpercent">';
1655 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ReminderTime").
'</td><td colspan="3">';
1656 print
'<input class="width50" type="number" name="offsetvalue" value="'.(GETPOSTISSET(
'offsetvalue') ?
GETPOSTINT(
'offsetvalue') :
getDolGlobalInt(
'AGENDA_REMINDER_DEFAULT_OFFSET', 30)).
'"> ';
1657 print $form->selectTypeDuration(
'offsetunit',
'i', array(
'y',
'm'));
1661 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ReminderType").
'</td><td colspan="3">';
1662 print $form->selectarray(
'selectremindertype', $TRemindTypes,
'', 0, 0, 0,
'', 0, 0, 0,
'',
'minwidth200 maxwidth500', 1);
1667 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"EMailTemplates").
'</td><td colspan="3">';
1668 print $form->selectModelMail(
'actioncommsend',
'actioncomm_send', 1, 1);
1675 print
"\n".
'<script type="text/javascript">';
1676 print
'$(document).ready(function () {
1677 $("#addreminder").click(function(){
1678 console.log("Click on addreminder");
1680 $(".reminderparameters").show();
1682 $(".reminderparameters").hide();
1684 $("#selectremindertype").select2("destroy");
1685 $("#selectremindertype").select2();
1686 $("#select_offsetunittype_duration").select2("destroy");
1687 $("#select_offsetunittype_duration").select2();
1688 selectremindertype();
1691 $("#selectremindertype").change(function(){
1692 selectremindertype();
1695 function selectremindertype() {
1696 console.log("Call selectremindertype");
1697 var selected_option = $("#selectremindertype option:selected").val();
1698 if(selected_option == "email") {
1699 $("#select_actioncommsendmodel_mail").closest("tr").show();
1701 $("#select_actioncommsendmodel_mail").closest("tr").hide();
1706 print
'</script>'.
"\n";
1711 print $form->buttonsSaveCancel(
"Add");
1718 $result1 =
$object->fetch($id);
1719 if ($result1 <= 0) {
1720 $langs->load(
"errors");
1721 print $langs->trans(
"ErrorRecordNotFound");
1727 $result2 =
$object->fetch_thirdparty();
1728 $result2 =
$object->fetch_projet();
1729 $result3 =
$object->fetch_contact();
1730 $result4 =
$object->fetch_userassigned();
1731 $result5 =
$object->fetch_optionals();
1733 if ($listUserAssignedUpdated || $donotclearsession) {
1734 $percentage = in_array(
GETPOST(
'status'), array(-1, 100)) ?
GETPOST(
'status') : (in_array($complete, array(-1, 100)) ? $complete :
GETPOSTINT(
"percentage"));
1743 $object->percentage = $percentage;
1748 $socpeopleassigned =
GETPOST(
"socpeopleassigned",
'array');
1749 foreach ($socpeopleassigned as $tmpid) {
1750 $object->socpeopleassigned[$id] = array(
'id' => $tmpid);
1758 if ($result2 < 0 || $result3 < 0 || $result4 < 0 || $result5 < 0) {
1764 $tmpuser =
new User($db);
1765 $res = $tmpuser->fetch(
$object->authorid);
1769 $tmpuser =
new User($db);
1770 $res = $tmpuser->fetch(
$object->usermodid);
1782 $delay_warning =
getDolGlobalInt(
'MAIN_DELAY_ACTIONS_TODO') * 24 * 60 * 60;
1786 if ($action ==
'delete') {
1787 print $form->formconfirm(
"card.php?id=".urlencode((
string) ($id)), $langs->trans(
"DeleteAction"), $langs->trans(
"ConfirmDeleteAction"),
"confirm_delete",
'',
'', 1);
1790 if ($action ==
'edit') {
1791 if (!empty($conf->use_javascript_ajax)) {
1792 print
"\n".
'<script type="text/javascript">';
1793 print
'$(document).ready(function () {
1794 function setdatefields()
1796 if ($("#fullday:checked").val() == null) {
1797 $(".fulldaystarthour").removeAttr("disabled");
1798 $(".fulldaystartmin").removeAttr("disabled");
1799 $(".fulldayendhour").removeAttr("disabled");
1800 $(".fulldayendmin").removeAttr("disabled");
1802 $(".fulldaystarthour").prop("disabled", true).val("00");
1803 $(".fulldaystartmin").prop("disabled", true).val("00");
1804 $(".fulldayendhour").prop("disabled", true).val("23");
1805 $(".fulldayendmin").prop("disabled", true).val("59");
1809 $("#fullday").change(function() {
1812 $("#actioncode").change(function() {
1813 if ($("#actioncode").val() == \'AC_RDV\') $("#dateend").addClass("fieldrequired");
1814 else $("#dateend").removeClass("fieldrequired");
1817 print
'</script>'.
"\n";
1820 print
'<form name="formaction" action="'.$_SERVER[
'PHP_SELF'].
'" method="POST">';
1821 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1822 print
'<input type="hidden" name="action" value="update">';
1823 print
'<input type="hidden" name="id" value="'.$id.
'">';
1824 print
'<input type="hidden" name="ref_ext" value="'.$object->ref_ext.
'">';
1825 print
'<input type="hidden" name="page_y" value="">';
1827 print
'<input type="hidden" name="backtopage" value="'.($backtopage !=
'1' ? $backtopage :
'').
'">';
1830 print
'<input type="hidden" name="actioncode" value="'.$object->type_code.
'">';
1835 print
'<table class="border tableforfield" width="100%">';
1838 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Ref").
'</td><td colspan="3">'.
$object->id.
'</td></tr>';
1842 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Type").
'</td><td colspan="3">';
1843 if (
$object->type_code !=
'AC_OTH_AUTO') {
1844 print
img_picto($langs->trans(
"ActionType"),
'square',
'class="fawidth30 inline-block" style="color: #ddd;"');
1845 print $formactions->select_type_actions(
GETPOST(
"actioncode",
'aZ09') ?
GETPOST(
"actioncode",
'aZ09') :
$object->type_code,
"actioncode",
"systemauto", 0, 0, 0, 1);
1847 print
'<input type="hidden" name="actioncode" value="'.$object->type_code.
'">';
1848 print
$object->getTypePicto();
1849 print $langs->trans(
"Action".
$object->type_code);
1855 if (
$object->elementtype ==
'ticket') {
1856 print
'<tr><td>'.$langs->trans(
"MarkMessageAsPrivate");
1857 print
' '.$form->textwithpicto(
'', $langs->trans(
"TicketMessagePrivateHelp"), 1,
'help');
1858 print
'</td><td colspan="3"><input type="checkbox" id="private" name="private" '.(preg_match(
'/^TICKET_MSG_PRIVATE/',
$object->code) ?
' checked' :
'').
'></td></tr>';
1862 print
'<tr><td'.(!
getDolGlobalString(
'AGENDA_USE_EVENT_TYPE') ?
' class="fieldrequired titlefieldcreate"' :
'').
'>'.$langs->trans(
"Title").
'</td><td colspan="3"><input type="text" name="label" class="soixantepercent" value="'.
$object->label.
'"></td></tr>';
1865 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
"Date").
'</span></td><td colspan="3" class="valignmiddle height30 small"><input type="checkbox" id="fullday" name="fullday" '.(
$object->fulldayevent ?
' checked' :
'').
'>';
1866 print
'<label for="fullday">'.$langs->trans(
"EventOnFullDay").
'</label>';
1929 print
'<tr><td class="nowrap">';
1934 print
'</td><td td colspan="3">';
1936 print $form->selectDate($datep ? $datep :
$object->datep,
'ap', 1, 1, 0,
"action", 1, 2, 0,
'fulldaystart',
'',
'',
'', 1,
'',
'',
$object->fulldayevent ? ($tzforfullday ? $tzforfullday :
'tzuserrel') :
'tzuserrel');
1937 print
' <span class="hideonsmartphone"> - </span> ';
1938 print $form->selectDate($datef ? $datef :
$object->datef,
'p2', 1, 1, 1,
"action", 1, 2, 0,
'fulldayend',
'',
'',
'', 1,
'',
'',
$object->fulldayevent ? ($tzforfullday ? $tzforfullday :
'tzuserrel') :
'tzuserrel');
1941 print
'<tr><td class=""> </td><td></td></tr>';
1944 $listofuserid = array();
1945 if (empty($donotclearsession)) {
1946 if (
$object->userownerid > 0) {
1947 $listofuserid[
$object->userownerid] = array(
1951 'transparency' =>
$object->transparency,
1952 'answer_status' =>
$object->userassigned[
$object->userownerid][
'answer_status'],
1953 'mandatory' =>
$object->userassigned[
$object->userownerid][
'mandatory']
1956 if (!empty(
$object->userassigned)) {
1958 $tmplist1 =
$object->userassigned;
1959 foreach ($tmplist1 as $key => $val) {
1960 if ($val[
'id'] && $val[
'id'] !=
$object->userownerid) {
1961 $listofuserid[$val[
'id']] = $val;
1965 $_SESSION[
'assignedtouser'] = json_encode($listofuserid);
1967 if (!empty($_SESSION[
'assignedtouser'])) {
1968 $listofuserid = json_decode($_SESSION[
'assignedtouser'],
true);
1971 $listofcontactid =
$object->socpeopleassigned;
1972 $listofotherid =
$object->otherassigned;
1974 print
'<tr><td class="tdtop nowrap fieldrequired">'.$langs->trans(
"ActionAssignedTo").
'</td><td colspan="3">';
1975 print
'<div class="assignedtouser">';
1976 print $form->select_dolusers_forevent(($action ==
'create' ?
'add' :
'update'),
'assignedtouser', 1,
'', 0,
'',
'', 0, 0, 0,
'AND u.statut != 0', 1, $listofuserid, $listofcontactid, $listofotherid);
1988 print
'<tr><td>'.$langs->trans(
"Location").
'</td><td colspan="3"><input type="text" name="location" class="minwidth300 maxwidth150onsmartphone" value="'.
$object->location.
'"></td></tr>';
1992 print
'<tr><td class="nowrap">'.$langs->trans(
"Status").
' / '.$langs->trans(
"Percentage").
'</td><td colspan="3">';
1993 $percent = GETPOSTISSET(
"percentage") ?
GETPOSTINT(
"percentage") :
$object->percentage;
1994 $formactions->form_select_status_action(
'formaction', $percent, 1,
'complete', 0, 0,
'maxwidth200');
1998 if (isModEnabled(
'category')) {
1999 print
'<tr><td>'.$langs->trans(
"Categories").
'</td><td colspan="3">';
2000 $cate_arbo = $form->select_all_categories(Categorie::TYPE_ACTIONCOMM,
'',
'parent', 64, 0, 3);
2002 $cats = $c->containing(
$object->id, Categorie::TYPE_ACTIONCOMM);
2003 $arrayselected = array();
2004 foreach ($cats as $cat) {
2005 $arrayselected[] = $cat->id;
2007 print
img_picto(
'',
'category').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected,
'', 0,
'quatrevingtpercent widthcentpercentminusx', 0, 0);
2014 print
'<br><hr><br>';
2017 print
'<table class="border tableforfield centpercent">';
2019 if (isModEnabled(
"societe")) {
2021 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"ActionOnCompany").
'</td>';
2025 $events[] = array(
'method' =>
'getContacts',
'url' =>
dol_buildpath(
'/core/ajax/contacts.php?showempty=1', 1),
'htmlname' =>
'contactid',
'params' => array(
'add-customer-contact' =>
'disabled'));
2028 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company(
$object->socid,
'socid',
'',
'SelectThirdParty', 1, 0, $events, 0,
'minwidth300');
2033 print
'<tr><td>'.$langs->trans(
"ActionOnContact").
'</td><td>';
2034 print
'<div class="maxwidth200onsmartphone">';
2035 print
img_picto(
'',
'contact',
'class="paddingrightonly"');
2036 if (
getDolGlobalString(
'CONTACT_USE_SEARCH_TO_SELECT') && $conf->use_javascript_ajax) {
2043 $conf->global->CONTACT_USE_SEARCH_TO_SELECT = 0;
2044 print $form->selectcontacts(
getDolGlobalString(
'MAIN_ACTIONCOM_CAN_ADD_ANY_CONTACT') ? 0 : (
$object->socid > 0 ?
$object->socid : -1), array_keys(
$object->socpeopleassigned),
'socpeopleassigned[]', 1,
'',
'', 1,
'minwidth300 widthcentpercentminusx', 0, 0, 0, array(),
'multiple',
'contactid');
2045 $conf->global->CONTACT_USE_SEARCH_TO_SELECT = $sav;
2048 print $form->selectcontacts(
getDolGlobalString(
'MAIN_ACTIONCOM_CAN_ADD_ANY_CONTACT') ? 0 :
$object->socid, array_keys(
$object->socpeopleassigned),
'socpeopleassigned[]', 1,
'',
'', 1,
'minwidth300 widthcentpercentminusx', 0, 0, 0, array(),
'multiple',
'contactid');
2056 if (isModEnabled(
'project')) {
2057 $langs->load(
"projects");
2059 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Project").
'</td><td>';
2060 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
2061 $numprojet = $formproject->select_projects((
$object->socid > 0 ?
$object->socid : -1),
$object->fk_project,
'projectid', 0, 0, 1, 0, 0, 0, 0,
'', 0, 0,
'maxwidth500 widthcentpercentminusxx');
2062 if ($numprojet == 0) {
2063 print
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?socid='.
$object->socid.
'&action=create&token='.
newToken().
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=edit').
'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddProject").
'"></span></a>';
2070 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"Priority").
'</td><td>';
2071 print
'<input type="text" name="priority" value="'.($object->priority ?
$object->priority :
'').
'" size="5">';
2076 if (!empty(
$object->fk_element) && !empty(
$object->elementtype)) {
2077 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2079 print
'<td>'.$langs->trans(
"LinkedObject").
'</td>';
2081 if (
$object->elementtype ==
'task' && isModEnabled(
'project')) {
2082 print
'<td id="project-task-input-container" >';
2084 $urloption =
'?action=create&donotclearsession=1';
2085 $url = DOL_URL_ROOT.
'/comm/action/card.php'.$urloption;
2088 print
"\n".
'<script type="text/javascript" >';
2089 print
'$(document).ready(function () {
2090 $("#projectid").change(function () {
2091 var url = "'.$url.
'&projectid="+$("#projectid").val();
2092 $.get(url, function(data) {
2093 console.log($( data ).find("#fk_element").html());
2094 if (data) $("#fk_element").html( $( data ).find("#taskid").html() ).select2();
2098 print
'</script>'.
"\n";
2100 $formproject->selectTasks((!empty($societe->id) ? $societe->id : -1),
$object->fk_element,
'fk_element', 24, 0, 0, 1, 0, 0,
'maxwidth500',
$object->fk_project);
2101 print
'<input type="hidden" name="elementtype" value="'.$object->elementtype.
'">';
2107 print
'<input type="hidden" name="fk_element" value="'.$object->fk_element.
'">';
2108 print
'<input type="hidden" name="elementtype" value="'.$object->elementtype.
'">';
2116 print
'<tr><td class="tdtop">'.$langs->trans(
"Description").
'</td><td>';
2118 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
2119 $doleditor =
new DolEditor(
'note',
$object->note_private,
'', 120,
'dolibarr_notes',
'In',
true,
true, isModEnabled(
'fckeditor'), ROWS_4,
'90%');
2120 $doleditor->Create();
2124 $parameters = array();
2125 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
2126 print $hookmanager->resPrint;
2127 if (empty($reshook)) {
2128 print
$object->showOptionals($extrafields,
'edit', $parameters);
2135 $filteruserid = $user->id;
2136 if ($user->hasRight(
'agenda',
'allactions',
'read')) {
2139 $object->loadReminders(
'', $filteruserid,
false);
2143 if (count(
$object->reminders) > 0) {
2144 $checked =
'checked';
2145 $keys = array_keys(
$object->reminders);
2146 $firstreminderId = array_shift($keys);
2148 $actionCommReminder =
$object->reminders[$firstreminderId];
2152 $actionCommReminder->offsetvalue =
getDolGlobalInt(
'AGENDA_REMINDER_DEFAULT_OFFSET', 30);
2153 $actionCommReminder->offsetunit =
'i';
2154 $actionCommReminder->typeremind =
'email';
2161 print
'<label for="addreminder">'.img_picto(
'',
'bell',
'class="pictofixedwidth"').$langs->trans(
"AddReminder").
'</label> <input type="checkbox" id="addreminder" name="addreminder"'.($checked ?
' '.$checked :
'').($disabled ?
' '.$disabled :
'').
'><br>';
2163 print
'<div class="reminderparameters" '.(empty($checked) ?
'style="display: none;"' :
'').
'>';
2167 print
'<table class="border centpercent">';
2170 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ReminderTime").
'</td><td colspan="3">';
2171 print
'<input type="number" name="offsetvalue" class="width50" value="'.$actionCommReminder->offsetvalue.
'"> ';
2172 print $form->selectTypeDuration(
'offsetunit', $actionCommReminder->offsetunit, array(
'y',
'm'));
2176 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ReminderType").
'</td><td colspan="3">';
2177 print $form->selectarray(
'selectremindertype', $TRemindTypes, $actionCommReminder->typeremind, 0, 0, 0,
'', 0, 0, 0,
'',
'minwidth200', 1);
2181 if ($actionCommReminder->typeremind ==
'browser') {
2182 $hide =
'style="display:none;"';
2187 print
'<tr '.$hide.
'><td class="titlefieldcreate nowrap">'.$langs->trans(
"EMailTemplates").
'</td><td colspan="3">';
2188 print $form->selectModelMail(
'actioncommsend',
'actioncomm_send', 1, 1);
2194 print
"\n".
'<script type="text/javascript">';
2195 print
'$(document).ready(function () {
2196 $("#addreminder").click(function(){
2198 $(".reminderparameters").show();
2200 $(".reminderparameters").hide();
2204 $("#selectremindertype").change(function(){
2205 var selected_option = $("#selectremindertype option:selected").val();
2206 if(selected_option == "email") {
2207 $("#select_actioncommsendmodel_mail").closest("tr").show();
2209 $("#select_actioncommsendmodel_mail").closest("tr").hide();
2214 print
'</script>'.
"\n";
2221 print $form->buttonsSaveCancel();
2230 if ($action ==
'clone') {
2231 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
GETPOST(
'id'), $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneEvent',
$object->label),
'confirm_clone', array(),
'yes', 1);
2235 $parameters = array();
2236 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
2237 if (empty($reshook)) {
2238 $formconfirm .= $hookmanager->resPrint;
2239 } elseif ($reshook > 0) {
2240 $formconfirm = $hookmanager->resPrint;
2248 $linkback .=
'<a href="'.DOL_URL_ROOT.
'/comm/action/list.php?mode=show_list&restore_lastsearch_values=1">';
2249 $linkback .=
img_picto($langs->trans(
"BackToList"),
'object_calendarlist',
'class="pictoactionview pictofixedwidth"');
2250 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"BackToList").
'</span>';
2251 $linkback .=
'</a>';
2252 $linkback .=
'</li>';
2253 $linkback .=
'<li class="noborder litext">';
2255 $linkback .=
img_picto($langs->trans(
"ViewCal"),
'object_calendar',
'class="pictoactionview pictofixedwidth"');
2256 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"ViewCal").
'</span>';
2257 $linkback .=
'</a>';
2258 $linkback .=
'</li>';
2259 $linkback .=
'<li class="noborder litext">';
2261 $linkback .=
img_picto($langs->trans(
"ViewWeek"),
'object_calendarweek',
'class="pictoactionview pictofixedwidth"');
2262 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"ViewWeek").
'</span>';
2263 $linkback .=
'</a>';
2264 $linkback .=
'</li>';
2265 $linkback .=
'<li class="noborder litext">';
2267 $linkback .=
img_picto($langs->trans(
"ViewDay"),
'object_calendarday',
'class="pictoactionview pictofixedwidth"');
2268 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"ViewDay").
'</span>';
2269 $linkback .=
'</a>';
2270 $linkback .=
'</li>';
2271 $linkback .=
'<li class="noborder litext">';
2273 $linkback .=
img_picto($langs->trans(
"ViewPerUser"),
'object_calendarperuser',
'class="pictoactionview pictofixedwidth"');
2274 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"ViewPerUser").
'</span>';
2275 $linkback .=
'</a>';
2278 $parameters = array();
2279 $reshook = $hookmanager->executeHooks(
'addCalendarView', $parameters,
$object, $action);
2280 if (empty($reshook)) {
2281 $linkback .= $hookmanager->resPrint;
2282 } elseif ($reshook > 1) {
2283 $linkback = $hookmanager->resPrint;
2288 $morehtmlref =
'<div class="refidno">';
2292 if (isModEnabled(
'project')) {
2293 $langs->load(
"projects");
2295 if ($usercancreate) {
2296 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2297 if ($action !=
'classify') {
2298 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2300 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
2302 if (!empty(
$object->fk_project)) {
2304 $proj->fetch(
$object->fk_project);
2305 $morehtmlref .= $proj->getNomUrl(1);
2307 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2312 $morehtmlref .=
'</div>';
2315 dol_banner_tab(
$object,
'id', $linkback, ($user->socid ? 0 : 1),
'id',
'ref', $morehtmlref);
2317 print
'<div class="fichecenter">';
2318 print
'<div class="fichehalfleft">';
2320 print
'<div class="underbanner clearboth"></div>';
2323 print
'<table class="border tableforfield centpercent">';
2327 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
2328 $labeltoshow = $langs->trans(
"Action".
$object->type_code);
2330 $labeltoshow .=
' ('.$object->code.
')';
2332 print
$object->getTypePicto(
'pictofixedwidth paddingright', $labeltoshow);
2333 print $langs->trans(
"Action".
$object->type_code);
2338 print
'<tr><td class="titlefield">'.$langs->trans(
"EventOnFullDay").
'</td><td>'.
yn(
$object->fulldayevent ? 1 : 0, 3).
'</td></tr>';
2342 print
'<tr><td class="titlefield">'.$langs->trans(
"EventIntoASerie").
'</td><td>'.
dol_escape_htmltag(
$object->recurid).
'</td></tr>';
2351 print
'<tr><td>'.$langs->trans(
"DateActionStart").
'</td><td>';
2356 if (empty(
$object->fulldayevent)) {
2369 print
'<tr><td>'.$langs->trans(
"DateActionEnd").
'</td><td>';
2370 if (empty(
$object->fulldayevent)) {
2383 print
'<tr><td>'.$langs->trans(
"Location").
'</td><td>'.
$object->location.
'</td></tr>';
2387 print
'<tr><td class="nowrap">'.$langs->trans(
"ActionAssignedTo").
'</td><td>';
2388 $listofuserid = array();
2389 if (empty($donotclearsession)) {
2390 if (
$object->userownerid > 0) {
2391 $listofuserid[
$object->userownerid] = array(
2393 'transparency' =>
$object->transparency,
2394 'answer_status' =>
$object->userassigned[
$object->userownerid][
'answer_status'],
2395 'mandatory' =>
$object->userassigned[
$object->userownerid][
'mandatory']
2398 if (!empty(
$object->userassigned)) {
2400 $tmplist1 =
$object->userassigned;
2401 foreach ($tmplist1 as $key => $val) {
2402 if ($val[
'id'] && $val[
'id'] !=
$object->userownerid) {
2403 $listofuserid[$val[
'id']] = $val;
2407 $_SESSION[
'assignedtouser'] = json_encode($listofuserid);
2409 if (!empty($_SESSION[
'assignedtouser'])) {
2410 $listofuserid = json_decode($_SESSION[
'assignedtouser'],
true);
2414 $listofcontactid = array();
2415 $listofotherid = array();
2416 print
'<div class="assignedtouser">';
2417 print $form->select_dolusers_forevent(
'view',
'assignedtouser', 1,
'', 0,
'',
'', 0, 0, 0,
'', (
$object->datep !=
$object->datef) ? 1 : 0, $listofuserid, $listofcontactid, $listofotherid);
2427 print
' </td></tr>';
2430 if (isModEnabled(
'category')) {
2431 print
'<tr><td class="valignmiddle">'.$langs->trans(
"Categories").
'</td><td>';
2432 print $form->showCategories(
$object->id, Categorie::TYPE_ACTIONCOMM, 1);
2440 print
'<div class="fichehalfright">';
2442 print
'<div class="underbanner clearboth"></div>';
2443 print
'<table class="border tableforfield centpercent">';
2445 if (isModEnabled(
"societe")) {
2447 print
'<tr><td class="titlefield">'.$langs->trans(
"ActionOnCompany").
'</td>';
2448 print
'<td>'.(is_object(
$object->thirdparty) &&
$object->thirdparty->id ?
$object->thirdparty->getNomUrl(1) : (
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>'));
2449 if (is_object(
$object->thirdparty) &&
$object->thirdparty->id > 0 &&
$object->type_code ==
'AC_TEL') {
2451 print
"<br>".dol_print_phone(
$object->thirdparty->phone);
2457 print
'<tr><td>'.$langs->trans(
"ActionOnContact").
'</td>';
2460 if (!empty(
$object->socpeopleassigned)) {
2461 foreach (
$object->socpeopleassigned as $cid => $Tab) {
2463 $result = $contact->fetch($cid);
2470 print $contact->getNomUrl(1);
2471 if (
$object->type_code ==
'AC_TEL') {
2472 if (!empty($contact->phone_pro)) {
2473 print
'('.dol_print_phone($contact->phone_pro).
')';
2476 print
'<div class="paddingright"></div>';
2480 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
2486 print
'<tr><td class="nowrap" class="titlefield">'.$langs->trans(
"Priority").
'</td><td>';
2492 if (!empty(
$object->fk_element) && !empty(
$object->elementtype) && !in_array(
$object->elementtype, array(
'societe',
'contact',
'project'))) {
2493 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2494 print
'<tr><td>'.$langs->trans(
"LinkedObject").
'</td>';
2498 print
'<span class="opacitymedium">'.$langs->trans(
"ObjectDeleted").
'</span>';
2506 if (!empty(
$object->email_msgid)) {
2507 print
'<tr><td>'.$langs->trans(
'MailTopic').
'</td>';
2508 print
'<td>'.dol_escape_htmltag(
$object->email_subject).
'</td></tr>';
2509 print
'<tr><td>'.$langs->trans(
'MailFrom').
'</td>';
2510 print
'<td>'.dol_escape_htmltag(
$object->email_from).
'</td></tr>';
2511 print
'<tr><td>'.$langs->trans(
'MailTo').
'</td>';
2512 print
'<td>'.dol_escape_htmltag(
$object->email_to).
'</td></tr>';
2513 if (!empty(
$object->email_tocc)) {
2514 print
'<tr><td>'.$langs->trans(
'MailCC').
'</td>';
2515 print
'<td>'.dol_escape_htmltag(
$object->email_tocc).
'</td></tr>';
2520 print
'<tr><td class="tdtop">'.$langs->trans(
"Description").
'</td><td class="wordbreak sensiblehtmlcontent">';
2525 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2529 $filteruserid = $user->id;
2530 if ($user->hasRight(
'agenda',
'allactions',
'read')) {
2533 $object->loadReminders(
'', $filteruserid,
false);
2535 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"Reminders").
'</td><td>';
2537 if (count(
$object->reminders) > 0) {
2538 $tmpuserstatic =
new User($db);
2540 foreach (
$object->reminders as $actioncommreminderid => $actioncommreminder) {
2541 print $TRemindTypes[$actioncommreminder->typeremind][
'label'];
2542 if ($actioncommreminder->fk_user > 0) {
2543 $tmpuserstatic->fetch($actioncommreminder->fk_user);
2544 print
' ('.$tmpuserstatic->getNomUrl(0,
'', 0, 0, 16).
')';
2546 print
' - '.$actioncommreminder->offsetvalue.
' '.$TDurationTypes[$actioncommreminder->offsetunit];
2548 if ($actioncommreminder->status == $actioncommreminder::STATUS_TODO) {
2549 print
' - <span class="opacitymedium">';
2550 print $langs->trans(
"NotSent");
2552 } elseif ($actioncommreminder->status == $actioncommreminder::STATUS_DONE) {
2553 print
' - <span class="opacitymedium">';
2554 print $langs->trans(
"Done");
2556 } elseif ($actioncommreminder->status == $actioncommreminder::STATUS_ERROR) {
2557 print
' - <span class="opacitymedium">';
2558 print $form->textwithpicto($langs->trans(
"Error"), $actioncommreminder->lasterror);
2572 print
'<div class="clearboth"></div>';
2581 print
'<div class="tabsAction">';
2583 $parameters = array();
2584 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
2585 if (empty($reshook)) {
2586 if ($action !=
'edit') {
2587 if ($user->hasRight(
'agenda',
'allactions',
'create') ||
2588 ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'create'))) {
2589 print
'<div class="inline-block divButAction"><a class="butAction" href="card.php?action=edit&token='.newToken().
'&id='.
$object->id.
'">'.$langs->trans(
"Modify").
'</a></div>';
2591 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"Modify").
'</a></div>';
2594 if ($user->hasRight(
'agenda',
'allactions',
'create') ||
2595 ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'create'))) {
2596 print
'<div class="inline-block divButAction"><a class="butAction" href="card.php?action=clone&object='.$object->element.
'&id='.
$object->id.
'">'.$langs->trans(
"ToClone").
'</a></div>';
2598 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"ToClone").
'</a></div>';
2601 if ($user->hasRight(
'agenda',
'allactions',
'delete') ||
2602 ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'delete'))) {
2603 print
'<div class="inline-block divButAction"><a class="butActionDelete" href="card.php?action=delete&token='.newToken().
'&id='.
$object->id.
'">'.$langs->trans(
"Delete").
'</a></div>';
2605 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"Delete").
'</a></div>';
2612 if ($action !=
'edit') {
2614 print
'<div class="clearboth"></div><div class="fichecenter"><div class="fichehalfleft">';
2615 print
'<a name="builddoc"></a>';
2621 $filedir = $conf->agenda->multidir_output[$conf->entity].
'/'.
$object->id;
2622 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2624 $genallowed = $user->hasRight(
'agenda',
'myactions',
'read');
2625 $delallowed = $user->hasRight(
'agenda',
'myactions',
'create');
2628 print $formfile->showdocuments(
'actions',
$object->id, $filedir, $urlsource, $genallowed, $delallowed,
'', 0, 0, 0, 0, 0,
'',
'',
'', $langs->getDefaultLang());
2630 print
'</div><div class="fichehalfright">';
2633 print
'</div></div>';
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
actions_prepare_head($object)
Prepare array with list of tabs.
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 for ActionCommReminder.
Class to manage different types of events.
Class to manage categories.
Class to manage a WYSIWYG editor.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
dol_get_first_day_week($day, $month, $year, $gm=false)
Return first day of week for a date.
num_between_day($timestampStart, $timestampEnd, $lastday=0)
Function to return number of days between two dates (date must be UTC date !) Example: 2012-01-01 201...
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
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...
dolGetElementUrl($objectid, $objecttype, $withpicto=0, $option='')
Return link url to an object.
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...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
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.
yn($yesno, $case=1, $color=0)
Return yes or no in current language.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
getElementProperties($elementType)
Get an array with properties of an element.
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='')
Return an id or code from a code or id.
dol_string_onlythesehtmltags($stringtoclean, $cleanalsosomestyles=1, $removeclassattribute=1, $cleanalsojavascript=0, $allowiframe=0, $allowed_tags=array(), $allowlink=0)
Clean a string to keep only desirable HTML tags.
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).
dol_set_focus($selector)
Set focus onto field with selector (similar behaviour of 'autofocus' HTML5 tag)
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
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_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
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.