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') {
128 $ret =
$object->fetch_optionals();
129 $ret1 =
$object->fetch_userassigned();
131 if ($ret < 0 || $ret1 < 0) {
137$extrafields->fetch_name_optionals_label(
$object->table_element);
140$hookmanager->initHooks(array(
'actioncard',
'globalcard'));
142$parameters = array(
'socid' => $socid);
143$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
148$TRemindTypes = array();
150 $TRemindTypes[
'browser'] = array(
'label' => $langs->trans(
'BrowserPush'),
'disabled' => (!
getDolGlobalString(
'AGENDA_REMINDER_BROWSER') ? 1 : 0));
153 $TRemindTypes[
'email'] = array(
'label' => $langs->trans(
'EMail'),
'disabled' => (!
getDolGlobalString(
'AGENDA_REMINDER_EMAIL') ? 1 : 0));
156$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'));
158$result =
restrictedArea($user,
'agenda',
$object,
'actioncomm&societe',
'myactions|allactions',
'fk_soc',
'id');
160$usercancreate = $user->hasRight(
'agenda',
'allactions',
'create') || ((empty(
$object->id) ||
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'create'));
167$listUserAssignedUpdated =
false;
168$listResourceAssignedUpdated =
false;
169$assignedtouser = array();
172if (empty($reshook) && (
GETPOST(
'removedassigned') ||
GETPOST(
'removedassigned') ==
'0')) {
173 $idtoremove =
GETPOST(
'removedassigned');
175 if (!empty($_SESSION[
'assignedtouser'])) {
176 $tmpassigneduserids = json_decode($_SESSION[
'assignedtouser'],
true);
178 $tmpassigneduserids = array();
181 foreach ($tmpassigneduserids as $key => $val) {
182 if ($val[
'id'] == $idtoremove || $val[
'id'] == -1) {
183 unset($tmpassigneduserids[$key]);
187 $_SESSION[
'assignedtouser'] = json_encode($tmpassigneduserids);
188 $donotclearsession = 1;
189 if ($action ==
'add') {
192 if ($action ==
'update') {
196 $listUserAssignedUpdated =
true;
199if (empty($reshook) && (
GETPOST(
'removedassignedresource') ||
GETPOST(
'removedassignedresource') ==
'0')) {
200 $idtoremove =
GETPOST(
'removedassignedresource');
202 if (!empty($_SESSION[
'assignedtoresource'])) {
203 $tmpassignedresourceids = json_decode($_SESSION[
'assignedtoresource'],
true);
205 $tmpassignedresourceids = array();
208 foreach ($tmpassignedresourceids as $key => $val) {
209 if ($val[
'id'] == $idtoremove || $val[
'id'] == -1) {
210 unset($tmpassignedresourceids[$key]);
214 $_SESSION[
'assignedtoresource'] = json_encode($tmpassignedresourceids);
215 $donotclearsessionresource = 1;
216 if ($action ==
'add' && $usercancreate) {
219 if ($action ==
'update' && $usercancreate) {
223 $listResourceAssignedUpdated =
true;
227if (empty($reshook) && (
GETPOST(
'addassignedtouser') ||
GETPOST(
'updateassignedtouser'))) {
229 if (
GETPOST(
'assignedtouser') > 0) {
230 $assignedtouser = array();
231 if (!empty($_SESSION[
'assignedtouser'])) {
232 $assignedtouser = json_decode($_SESSION[
'assignedtouser'],
true);
234 $assignedtouser[
GETPOST(
'assignedtouser')] = array(
'id' =>
GETPOSTINT(
'assignedtouser'),
'transparency' =>
GETPOST(
'transparency'),
'mandatory' => 1);
235 $_SESSION[
'assignedtouser'] = json_encode($assignedtouser);
237 $donotclearsession = 1;
238 if ($action ==
'add' && $usercancreate) {
241 if ($action ==
'update' && $usercancreate) {
245 $listUserAssignedUpdated =
true;
249if (empty($reshook) && (
GETPOST(
'addassignedtoresource') ||
GETPOST(
'updateassignedtoresource'))) {
251 if (
GETPOST(
'assignedtoresource') > 0) {
252 $assignedtoresource = array();
253 if (!empty($_SESSION[
'assignedtoresource'])) {
254 $assignedtoresource = json_decode($_SESSION[
'assignedtoresource'],
true);
256 $assignedtoresource[
GETPOST(
'assignedtoresource')] = array(
'id' =>
GETPOSTINT(
'assignedtoresource'),
'transparency' =>
GETPOST(
'transparency'),
'mandatory' => 1);
257 $_SESSION[
'assignedtoresource'] = json_encode($assignedtoresource);
259 $donotclearsession = 1;
260 if ($action ==
'add' && $usercancreate) {
263 if ($action ==
'update' && $usercancreate) {
267 $listResourceAssignedUpdated =
true;
271if (empty($reshook) && $action ==
'classin' && ($user->hasRight(
'agenda',
'allactions',
'create') ||
272 ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'create')))) {
278if (empty($reshook) && $action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
279 if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
284 if (!empty(
$object->socpeopleassigned)) {
285 reset(
$object->socpeopleassigned);
290 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
301if (empty($reshook) && $action ==
'add' && $usercancreate) {
304 if (empty($backtopage)) {
306 $backtopage = DOL_URL_ROOT.
'/societe/agenda.php?socid='.$socid;
308 $backtopage = DOL_URL_ROOT.
'/comm/action/index.php';
312 if (!empty($socpeopleassigned[0])) {
313 $result = $contact->fetch($socpeopleassigned[0]);
317 header(
"Location: ".$backtopage);
321 $percentage = in_array(
GETPOST(
'status'), array(-1, 100)) ?
GETPOST(
'status') : (in_array($complete, array(-1, 100)) ? $complete :
GETPOSTINT(
"percentage"));
335 if (!$datef && $percentage == 100) {
337 $donotclearsession = 1;
339 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"DateEnd")),
null,
'errors');
344 $donotclearsession = 1;
346 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Title")),
null,
'errors');
350 if (GETPOSTISSET(
'actioncode') && !
GETPOST(
'actioncode',
'aZ09')) {
352 $donotclearsession = 1;
354 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
362 $object->fulldayevent = ($fulldayevent ? 1 : 0);
366 if (
GETPOST(
"elementtype",
'alpha')) {
368 $modulecodetouseforpermissioncheck = $elProp[
'module'];
369 $submodulecodetouseforpermissioncheck = $elProp[
'subelement'];
371 $hasPermissionOnLinkedObject = 0;
372 if ($user->hasRight($modulecodetouseforpermissioncheck,
'read')) {
373 $hasPermissionOnLinkedObject = 1;
374 } elseif ($user->hasRight($modulecodetouseforpermissioncheck, $submodulecodetouseforpermissioncheck,
'read')) {
375 $hasPermissionOnLinkedObject = 1;
378 if ($hasPermissionOnLinkedObject) {
385 if (
GETPOST(
'actioncode',
'aZ09') ==
'AC_RDV' && $contact->getFullName($langs)) {
386 $object->label = $langs->transnoentitiesnoconv(
"TaskRDVWith", $contact->getFullName($langs));
388 if ($langs->trans(
"Action".$object->type_code) !=
"Action".$object->type_code) {
389 $object->label = $langs->transnoentitiesnoconv(
"Action".
$object->type_code).
"\n";
391 $cactioncomm->fetch(
$object->type_code);
392 $object->label = $cactioncomm->label;
399 if (!empty($taskid)) {
400 $taskProject =
new Task($db);
401 if ($taskProject->fetch($taskid) > 0) {
402 $object->fk_project = $taskProject->fk_project;
411 $object->percentage = $percentage;
414 $transparency = (
GETPOST(
"transparency") ==
'on' ? 1 : 0);
416 $listofuserid = array();
417 if (!empty($_SESSION[
'assignedtouser'])) {
418 $listofuserid = json_decode($_SESSION[
'assignedtouser'],
true);
421 foreach ($listofuserid as $key => $value) {
423 if ($value[
'id'] > 0) {
424 $object->userownerid = $value[
'id'];
426 $object->transparency = $transparency;
429 $object->userassigned[$value[
'id']] = array(
'id' => $value[
'id'],
'transparency' => $transparency);
437 if (GETPOSTISSET(
"contactid")) {
451 if (empty(
$object->userownerid) && empty($_SESSION[
'assignedtouser'])) {
453 $donotclearsession = 1;
455 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ActionsOwnedBy")),
null,
'errors');
457 if (
$object->type_code ==
'AC_RDV' && ($datep ==
'' || ($datef ==
'' && empty($fulldayevent)))) {
459 $donotclearsession = 1;
461 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"DateEnd")),
null,
'errors');
466 $donotclearsession = 1;
468 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
471 foreach ($socpeopleassigned as $cid) {
472 $object->socpeopleassigned[$cid] = array(
'id' => $cid);
474 if (!empty(
$object->socpeopleassigned)) {
475 reset(
$object->socpeopleassigned);
480 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
483 $donotclearsession = 1;
492 $selectedrecurrulefreq =
'no';
493 $selectedrecurrulebymonthday =
'';
494 $selectedrecurrulebyday =
'';
495 $object->recurrule = GETPOSTISSET(
'recurrulefreq') ?
"FREQ=".GETPOST(
'recurrulefreq',
'alpha') :
"";
496 $object->recurrule .= (
GETPOST(
'recurrulefreq',
'alpha') ==
'MONTHLY' && GETPOSTISSET(
'BYMONTHDAY')) ?
"_BYMONTHDAY".
GETPOST(
'BYMONTHDAY',
'alpha') :
"";
497 $object->recurrule .= (
GETPOST(
'recurrulefreq',
'alpha') ==
'WEEKLY' && GETPOSTISSET(
'BYDAY')) ?
"_BYDAY".
GETPOST(
'BYDAY',
'alpha') :
"";
502 if (
$object->recurrule && preg_match(
'/FREQ=([A-Z]+)/i',
$object->recurrule, $reg1)) {
503 $selectedrecurrulefreq = $reg1[1];
505 if (
$object->recurrule && preg_match(
'/FREQ=MONTHLY.*BYMONTHDAY(\d+)/i',
$object->recurrule, $reg2)) {
506 $selectedrecurrulebymonthday = (int) $reg2[1];
508 if (
$object->recurrule && preg_match(
'/FREQ=WEEKLY.*BYDAY(\d+)/i',
$object->recurrule, $reg3)) {
509 $selectedrecurrulebyday = (int) $reg3[1];
513 $eventisrecurring = 0;
514 $userepeatevent = (
getDolGlobalInt(
'MAIN_FEATURES_LEVEL') == 2 ? 1 : 0);
515 if ($userepeatevent && !empty($selectedrecurrulefreq) && $selectedrecurrulefreq !=
'no') {
516 $eventisrecurring = 1;
526 $idaction =
$object->create($user);
531 $categories =
GETPOST(
'categories',
'array');
532 $object->setCategories($categories);
534 unset($_SESSION[
'assignedtouser']);
537 if ($user->id !=
$object->userownerid) {
538 $moreparam =
"filtert=-1";
542 if ($addreminder ==
'on') {
547 $actionCommReminder->dateremind = $dateremind;
548 $actionCommReminder->typeremind = $remindertype;
549 $actionCommReminder->offsetunit = $offsetunit;
550 $actionCommReminder->offsetvalue = $offsetvalue;
551 $actionCommReminder->status = $actionCommReminder::STATUS_TODO;
552 $actionCommReminder->fk_actioncomm =
$object->id;
553 if ($remindertype ==
'email') {
554 $actionCommReminder->fk_email_template = $modelmail;
558 foreach (
$object->userassigned as $userassigned) {
559 $actionCommReminder->fk_user = $userassigned[
'id'];
560 $res = $actionCommReminder->create($user);
565 $langs->load(
"errors");
566 $error = $langs->trans(
'ErrorReminderActionCommCreation');
569 $donotclearsession = 1;
580 $moreparam .= ($moreparam ?
'&' :
'').
'disabledefaultvalues=1';
600 $langs->load(
"errors");
601 $error = $langs->trans(
$object->error);
604 $donotclearsession = 1;
610 $donotclearsession = 1;
613 if ($eventisrecurring) {
615 if ($selectedrecurrulefreq ==
'WEEKLY' && !empty($selectedrecurrulebyday)) {
617 $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');
621 } elseif ($selectedrecurrulefreq ==
'MONTHLY' && !empty($selectedrecurrulebymonthday)) {
622 $firstday = $selectedrecurrulebymonthday;
631 $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');
637 while ($datep <= $repeateventlimitdate && !$error) {
641 $finalobject->datep = $datep;
642 $finalobject->datef = $datef;
644 $idaction = $finalobject->create($user);
647 if (!$finalobject->error) {
649 $categories =
GETPOST(
'categories',
'array');
650 $finalobject->setCategories($categories);
652 unset($_SESSION[
'assignedtouser']);
655 if ($user->id != $finalobject->userownerid) {
656 $moreparam =
"filtert=-1";
660 if ($addreminder ==
'on') {
665 $actionCommReminder->dateremind = $dateremind;
666 $actionCommReminder->typeremind = $remindertype;
667 $actionCommReminder->offsetunit = $offsetunit;
668 $actionCommReminder->offsetvalue = $offsetvalue;
669 $actionCommReminder->status = $actionCommReminder::STATUS_TODO;
670 $actionCommReminder->fk_actioncomm = $finalobject->id;
671 if ($remindertype ==
'email') {
672 $actionCommReminder->fk_email_template = $modelmail;
676 foreach ($finalobject->userassigned as $userassigned) {
677 $actionCommReminder->fk_user = $userassigned[
'id'];
678 $res = $actionCommReminder->create($user);
683 $langs->load(
"errors");
684 $error = $langs->trans(
'ErrorReminderActionCommCreation');
687 $donotclearsession = 1;
698 $moreparam .= ($moreparam ?
'&' :
'').
'disabledefaultvalues=1';
708 $langs->load(
"errors");
709 $error = $langs->trans($finalobject->error);
712 $donotclearsession = 1;
718 $donotclearsession = 1;
722 if (!($userepeatevent && GETPOSTISSET(
'recurrulefreq') &&
GETPOST(
'recurrulefreq') !=
'no' && GETPOSTISSET(
"limityear") && GETPOSTISSET(
"limitmonth") && GETPOSTISSET(
"limitday"))) {
733 if (!empty($backtopage) && !$error) {
734 dol_syslog(
"Back to ".$backtopage.($moreparam ? (preg_match(
'/\?/', $backtopage) ?
'&'.$moreparam :
'?'.$moreparam) :
''));
735 header(
"Location: ".$backtopage.($moreparam ? (preg_match(
'/\?/', $backtopage) ?
'&'.$moreparam :
'?'.$moreparam) :
''));
736 } elseif ($idaction) {
737 header(
"Location: ".DOL_URL_ROOT.
'/comm/action/card.php?id='.$idaction.($moreparam ?
'&'.$moreparam :
''));
739 header(
"Location: ".DOL_URL_ROOT.
'/comm/action/index.php'.($moreparam ?
'?'.$moreparam :
''));
746if (empty($reshook) && $action ==
'update' && $usercancreate) {
747 if (empty($cancel)) {
748 $fulldayevent =
GETPOST(
'fullday');
753 $percentage = in_array(
GETPOST(
'status'), array(-1, 100)) ?
GETPOST(
'status') : (in_array($complete, array(-1, 100)) ? $complete :
GETPOSTINT(
"percentage"));
778 $datep =
dol_mktime(
'00',
'00',
'00',
GETPOST(
"apmonth",
'int'),
GETPOST(
"apday",
'int'),
GETPOST(
"apyear",
'int'), $tzforfullday ? $tzforfullday :
'tzuserrel');
779 $datef =
dol_mktime(
'23',
'59',
'59',
GETPOST(
"p2month",
'int'),
GETPOST(
"p2day",
'int'),
GETPOST(
"p2year",
'int'), $tzforfullday ? $tzforfullday :
'tzuserrel');
781 $datep =
dol_mktime(
GETPOST(
"aphour",
'int'),
GETPOST(
"apmin",
'int'),
GETPOST(
"apsec",
'int'),
GETPOST(
"apmonth",
'int'),
GETPOST(
"apday",
'int'),
GETPOST(
"apyear",
'int'),
'tzuserrel');
782 $datef =
dol_mktime(
GETPOST(
"p2hour",
'int'),
GETPOST(
"p2min",
'int'),
GETPOST(
"apsec",
'int'),
GETPOST(
"p2month",
'int'),
GETPOST(
"p2day",
'int'),
GETPOST(
"p2year",
'int'),
'tzuserrel');
785 if (
$object->elementtype ==
'ticket') {
787 if (
$object->code ==
'TICKET_MSG') {
788 $object->code =
'TICKET_MSG_PRIVATE';
790 if (
$object->code ==
'TICKET_MSG_SENTBYMAIL') {
791 $object->code =
'TICKET_MSG_PRIVATE_SENTBYMAIL';
794 if (
$object->code ==
'TICKET_MSG_PRIVATE') {
797 if (
$object->code ==
'TICKET_MSG_PRIVATE_SENTBYMAIL') {
798 $object->code =
'TICKET_MSG_SENTBYMAIL';
810 $object->percentage = $percentage;
815 $socpeopleassigned =
GETPOST(
"socpeopleassigned",
'array');
816 $object->socpeopleassigned = array();
817 foreach ($socpeopleassigned as $cid) {
818 $object->socpeopleassigned[$cid] = array(
'id' => $cid);
821 if (empty(
$object->contact_id) && !empty(
$object->socpeopleassigned)) {
822 reset(
$object->socpeopleassigned);
828 if (
GETPOST(
"elementtype",
'alpha')) {
830 $modulecodetouseforpermissioncheck = $elProp[
'module'];
832 $hasPermissionOnLinkedObject = 0;
833 if ($user->hasRight($modulecodetouseforpermissioncheck,
'read')) {
834 $hasPermissionOnLinkedObject = 1;
836 if ($hasPermissionOnLinkedObject) {
842 if (!$datef && $percentage == 100) {
844 $donotclearsession = 1;
845 setEventMessages($langs->transnoentitiesnoconv(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"DateEnd")),
$object->errors,
'errors');
849 $transparency = (
GETPOST(
"transparency") ==
'on' ? 1 : 0);
852 $listofuserid = array();
853 if (!empty($_SESSION[
'assignedtouser'])) {
855 $tmplist1 = json_decode($_SESSION[
'assignedtouser'],
true);
856 foreach ($tmplist1 as $key => $val) {
857 if ($val[
'id'] > 0 && $val[
'id'] != $assignedtouser) {
858 $listofuserid[$val[
'id']] = $val;
862 $assignedtouser = (!empty(
$object->userownerid) &&
$object->userownerid > 0 ?
$object->userownerid : 0);
863 if ($assignedtouser) {
864 $listofuserid[$assignedtouser] = array(
'id' => $assignedtouser,
'mandatory' => 0,
'transparency' => ($user->id == $assignedtouser ? $transparency :
''));
867 $object->userassigned = array();
870 foreach ($listofuserid as $key => $val) {
872 $object->userownerid = $val[
'id'];
874 $object->userassigned[$val[
'id']] = array(
'id' => $val[
'id'],
'mandatory' => 0,
'transparency' => ($user->id == $val[
'id'] ? $transparency :
''));
878 $object->transparency = $transparency;
882 if (GETPOSTISSET(
'actioncode') && !
GETPOST(
'actioncode',
'aZ09')) {
884 $donotclearsession = 1;
886 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
888 $result = $cactioncomm->fetch(
GETPOST(
'actioncode',
'aZ09'));
890 if (empty(
$object->userownerid)) {
892 $donotclearsession = 1;
894 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ActionsOwnedBy")),
null,
'errors');
898 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
'@GETPOSTISSET');
906 $eventDateStart =
$object->datep;
907 $eventDateEnd =
$object->datef;
909 $sql =
"SELECT er.rowid, r.ref as r_ref, ac.id as ac_id, ac.label as ac_label";
910 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_resources as er";
911 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"resource as r ON r.rowid = er.resource_id AND er.resource_type = 'dolresource'";
912 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"actioncomm as ac ON ac.id = er.element_id AND er.element_type = '".$db->escape(
$object->element).
"'";
913 $sql .=
" WHERE ac.id <> ".((int)
$object->id);
914 $sql .=
" AND er.resource_id IN (";
915 $sql .=
" SELECT resource_id FROM ".MAIN_DB_PREFIX.
"element_resources";
916 $sql .=
" WHERE element_id = ".((int)
$object->id);
917 $sql .=
" AND element_type = '".$db->escape(
$object->element).
"'";
918 $sql .=
" AND busy = 1";
920 $sql .=
" AND er.busy = 1";
924 $sql .=
" (ac.datep <= '".$db->idate($eventDateStart).
"' AND (ac.datep2 IS NULL OR ac.datep2 >= '".$db->idate($eventDateStart).
"'))";
926 if (!empty($eventDateEnd)) {
927 $sql .=
" OR (ac.datep <= '".$db->idate($eventDateEnd).
"' AND (ac.datep2 >= '".$db->idate($eventDateEnd).
"'))";
931 $sql .=
"ac.datep >= '".$db->idate($eventDateStart).
"'";
932 if (!empty($eventDateEnd)) {
933 $sql .=
" AND (ac.datep2 IS NOT NULL AND ac.datep2 <= '".$db->idate($eventDateEnd).
"')";
938 $resql = $db->query($sql);
941 $object->error = $db->lasterror();
944 if ($db->num_rows($resql) > 0) {
947 $object->error = $langs->trans(
'ErrorResourcesAlreadyInUse').
' : ';
948 while ($obj = $db->fetch_object($resql)) {
949 $object->error .=
'<br> - '.$langs->trans(
'ErrorResourceUseInEvent', $obj->r_ref, $obj->ac_label.
' ['.$obj->ac_id.
']');
965 $result =
$object->update($user);
969 $categories =
GETPOST(
'categories',
'array');
970 $object->setCategories($categories);
972 $object->loadReminders($remindertype, 0,
false);
975 if (!empty(
$object->reminders)) {
976 foreach (
$object->reminders as $reminder) {
977 if ($reminder->status < 1) {
978 $reminder->delete($user);
985 if ($addreminder ==
'on') {
990 $actionCommReminder->dateremind = $dateremind;
991 $actionCommReminder->typeremind = $remindertype;
992 $actionCommReminder->offsetunit = $offsetunit;
993 $actionCommReminder->offsetvalue = $offsetvalue;
994 $actionCommReminder->status = $actionCommReminder::STATUS_TODO;
995 $actionCommReminder->fk_actioncomm =
$object->id;
996 if ($remindertype ==
'email') {
997 $actionCommReminder->fk_email_template = $modelmail;
1001 foreach (
$object->userassigned as $userassigned) {
1002 $actionCommReminder->fk_user = $userassigned[
'id'];
1006 $sqldelete =
"DELETE FROM ".MAIN_DB_PREFIX.
"actioncomm_reminder";
1007 $sqldelete .=
" WHERE fk_user = ".((int) $actionCommReminder->fk_user).
" AND fk_actioncomm = ".((int)
$object->id).
" AND typeremind = '".$db->escape($remindertype).
"'";
1008 $resqldelete = $db->query($sqldelete);
1010 $res = $actionCommReminder->create($user);
1014 $langs->load(
"errors");
1015 $error = $langs->trans(
'ErrorReminderActionCommCreation');
1018 $donotclearsession = 1;
1025 unset($_SESSION[
'assignedtouser']);
1026 unset($_SESSION[
'assignedtoresource']);
1041 if (!empty($backtopage)) {
1042 unset($_SESSION[
'assignedtouser']);
1043 header(
"Location: ".$backtopage);
1050if (empty($reshook) && $action ==
'confirm_delete' &&
GETPOST(
"confirm") ==
'yes') {
1053 $object->fetch_userassigned();
1056 if ($user->hasRight(
'agenda',
'myactions',
'delete')
1057 || $user->hasRight(
'agenda',
'allactions',
'delete')) {
1058 $result =
$object->delete($user);
1061 header(
"Location: index.php");
1073if (empty($reshook) &&
GETPOST(
'actionmove',
'alpha') ==
'mupdate') {
1079 $newdate =
GETPOST(
'newdate',
'alpha');
1080 if (empty($newdate) || strpos($newdate,
'dayevent_') != 0) {
1081 header(
"Location: ".$backtopage,
true, 307);
1085 $datep =
dol_mktime($shour, $smin, 0, substr($newdate, 13, 2), substr($newdate, 15, 2), substr($newdate, 9, 4),
'tzuserrel');
1088 if ($datep !=
$object->datep) {
1097 $eventDateStart =
$object->datep;
1098 $eventDateEnd =
$object->datef;
1100 $sql =
"SELECT er.rowid, r.ref as r_ref, ac.id as ac_id, ac.label as ac_label";
1101 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_resources as er";
1102 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"resource as r ON r.rowid = er.resource_id AND er.resource_type = 'dolresource'";
1103 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"actioncomm as ac ON ac.id = er.element_id AND er.element_type = '".$db->escape(
$object->element).
"'";
1104 $sql .=
" WHERE ac.id <> ".((int)
$object->id);
1105 $sql .=
" AND er.resource_id IN (";
1106 $sql .=
" SELECT resource_id FROM ".MAIN_DB_PREFIX.
"element_resources";
1107 $sql .=
" WHERE element_id = ".((int)
$object->id);
1108 $sql .=
" AND element_type = '".$db->escape(
$object->element).
"'";
1109 $sql .=
" AND busy = 1";
1111 $sql .=
" AND er.busy = 1";
1115 $sql .=
" (ac.datep <= '".$db->idate($eventDateStart).
"' AND (ac.datep2 IS NULL OR ac.datep2 >= '".$db->idate($eventDateStart).
"'))";
1117 if (!empty($eventDateEnd)) {
1118 $sql .=
" OR (ac.datep <= '".$db->idate($eventDateEnd).
"' AND (ac.datep2 >= '".$db->idate($eventDateEnd).
"'))";
1122 $sql .=
"ac.datep >= '".$db->idate($eventDateStart).
"'";
1123 if (!empty($eventDateEnd)) {
1124 $sql .=
" AND (ac.datep2 IS NOT NULL AND ac.datep2 <= '".$db->idate($eventDateEnd).
"')";
1129 $resql = $db->query($sql);
1132 $object->error = $db->lasterror();
1135 if ($db->num_rows($resql) > 0) {
1138 $object->error = $langs->trans(
'ErrorResourcesAlreadyInUse').
' : ';
1139 while ($obj = $db->fetch_object($resql)) {
1140 $object->error .=
'<br> - '.$langs->trans(
'ErrorResourceUseInEvent', $obj->r_ref, $obj->ac_label.
' ['.$obj->ac_id.
']');
1155 $result =
$object->update($user);
1165 if (!empty($backtopage)) {
1166 header(
"Location: ".$backtopage,
true, 307);
1175$permissiontoadd = ($user->hasRight(
'agenda',
'allactions',
'create') || ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'read')));
1176if (empty($reshook)) {
1177 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1185$form =
new Form($db);
1188$arrayrecurrulefreq = array(
1189 'no' => $langs->trans(
"OnceOnly"),
1190 'MONTHLY' => $langs->trans(
"EveryMonth"),
1191 'WEEKLY' => $langs->trans(
"EveryWeek")
1196$help_url =
'EN:Module_Agenda_En|FR:Module_Agenda|ES:M&omodulodulo_Agenda|DE:Modul_Terminplanung';
1197llxHeader(
'', $langs->trans(
"Agenda"), $help_url);
1199if ($action ==
'create') {
1202 $socpeopleassigned =
GETPOST(
"socpeopleassigned",
'array');
1203 if (!empty($socpeopleassigned[0])) {
1204 $result = $contact->fetch($socpeopleassigned[0]);
1212 if (!empty($conf->use_javascript_ajax)) {
1213 print
"\n".
'<script type="text/javascript">';
1214 print
'$(document).ready(function () {
1215 function setdatefields()
1217 if ($("#fullday:checked").val() == null) {
1218 $(".fulldaystarthour").removeAttr("disabled");
1219 $(".fulldaystartmin").removeAttr("disabled");
1220 $(".fulldayendhour").removeAttr("disabled");
1221 $(".fulldayendmin").removeAttr("disabled");
1222 $("#p2").removeAttr("disabled");
1224 $(".fulldaystarthour").prop("disabled", true).val("00");
1225 $(".fulldaystartmin").prop("disabled", true).val("00");
1226 $(".fulldayendhour").prop("disabled", true).val("23");
1227 $(".fulldayendmin").prop("disabled", true).val("59");
1228 $("#p2").removeAttr("disabled");
1231 $("#fullday").change(function() {
1232 console.log("setdatefields");
1236 $("#actioncode").change(function() {
1237 if ($("#actioncode").val() == \'AC_RDV\') $("#dateend").addClass("fieldrequired");
1238 else $("#dateend").removeClass("fieldrequired");
1240 $("#aphour,#apmin").change(function() {
1241 if ($("#actioncode").val() == \'AC_RDV\') {
1242 console.log("Start date was changed, we modify end date "+(parseInt($("#aphour").val()))+" "+$("#apmin").val()+" -> "+("00" + (parseInt($("#aphour").val()) + 1)).substr(-2,2));
1243 $("#p2hour").val(("00" + (parseInt($("#aphour").val()) + 1)).substr(-2,2));
1244 $("#p2min").val($("#apmin").val());
1245 $("#p2day").val($("#apday").val());
1246 $("#p2month").val($("#apmonth").val());
1247 $("#p2year").val($("#apyear").val());
1248 $("#p2").val($("#ap").val());
1251 if ($("#actioncode").val() == \'AC_RDV\') $("#dateend").addClass("fieldrequired");
1252 else $("#dateend").removeClass("fieldrequired");
1255 print
'</script>'.
"\n";
1258 print
'<form name="formaction" action="'.$_SERVER[
'PHP_SELF'].
'" method="POST">';
1259 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1260 print
'<input type="hidden" name="action" value="add">';
1261 print
'<input type="hidden" name="donotclearsession" value="1">';
1262 print
'<input type="hidden" name="page_y" value="">';
1264 print
'<input type="hidden" name="backtopage" value="'.($backtopage !=
'1' ? $backtopage :
'').
'">';
1267 print
'<input type="hidden" name="actioncode" value="'.dol_getIdFromCode($db,
'AC_OTH',
'c_actioncomm').
'">';
1270 if (
GETPOST(
"actioncode",
'aZ09') ==
'AC_RDV') {
1271 print
load_fiche_titre($langs->trans(
"AddActionRendezVous"),
'',
'title_agenda');
1278 print
'<table class="border centpercent">';
1282 print
'<tr><td class="titlefieldcreate"><span class="fieldrequired">'.$langs->trans(
"Type").
'</span></b></td><td>';
1284 print
img_picto($langs->trans(
"ActionType"),
'square',
'class="fawidth30 inline-block" style="color: #ddd;"');
1285 $selectedvalue = GETPOSTISSET(
"actioncode") ?
GETPOST(
"actioncode",
'aZ09') : (
$object->type_code ?
$object->type_code : $default);
1286 print $formactions->select_type_actions($selectedvalue,
"actioncode",
"systemauto", 0, -1, 0, 1);
1291 print
'<tr><td'.(!
getDolGlobalString(
'AGENDA_USE_EVENT_TYPE') ?
' class="fieldrequired titlefieldcreate"' :
'').
'>'.$langs->trans(
"Title").
'</td><td><input type="text" id="label" name="label" class="soixantepercent" value="'.
GETPOST(
'label').
'"></td></tr>';
1294 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
"Date").
'</span></td>';
1295 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>';
1298 $userepeatevent = (
getDolGlobalInt(
'MAIN_FEATURES_LEVEL') >= 1 ? 1 : 0);
1299 if ($userepeatevent) {
1301 print
' <div class="opacitymedium inline-block small">';
1302 print
img_picto($langs->trans(
"Recurrence"),
'recurring',
'style="margin-left: 6px" class="paddingright2"');
1303 print
'<input type="hidden" name="recurid" value="'.(empty(
$object->recurid) ?
'' :
$object->recurid).
'">';
1305 $selectedrecurrulefreq =
'no';
1306 $selectedrecurrulebymonthday =
'';
1307 $selectedrecurrulebyday =
'';
1308 $object->recurrule = GETPOSTISSET(
'recurrulefreq') ?
"FREQ=".GETPOST(
'recurrulefreq',
'alpha') :
"";
1309 $object->recurrule .= GETPOSTISSET(
'BYMONTHDAY') ?
"_BYMONTHDAY".GETPOST(
'BYMONTHDAY',
'alpha') :
"";
1310 $object->recurrule .= GETPOSTISSET(
'BYDAY') ?
"_BYDAY".GETPOST(
'BYDAY',
'alpha') :
"";
1314 if (
$object->recurrule && preg_match(
'/FREQ=([A-Z]+)/i',
$object->recurrule, $reg)) {
1315 $selectedrecurrulefreq = $reg[1];
1317 if (
$object->recurrule && preg_match(
'/FREQ=MONTHLY.*BYMONTHDAY(\d+)/i',
$object->recurrule, $reg)) {
1318 $selectedrecurrulebymonthday = (int) $reg[1];
1320 if (
$object->recurrule && preg_match(
'/FREQ=WEEKLY.*BYDAY(\d+)/i',
$object->recurrule, $reg)) {
1321 $selectedrecurrulebyday = (int) $reg[1];
1324 print $form->selectarray(
'recurrulefreq', $arrayrecurrulefreq, $selectedrecurrulefreq, 0, 0, 0,
'', 0, 0, 0,
'',
'marginrightonly');
1330 print
'<div class="hidden marginrightonly inline-block repeateventBYMONTHDAY">';
1331 print $langs->trans(
"DayOfMonth").
': <input type="input" size="2" name="BYMONTHDAY" value="'.$selectedrecurrulebymonthday.
'">';
1334 print
'<div class="hidden marginrightonly inline-block repeateventBYDAY">';
1335 print $langs->trans(
"DayOfWeek").
': <input type="input" size="4" name="BYDAY" value="'.$selectedrecurrulebyday.
'">';
1338 $repeateventlimitdate = !empty($repeateventlimitdate) ? $repeateventlimitdate :
'';
1339 print
'<div class="hidden marginrightonly inline-block repeateventlimitdate">';
1340 print $langs->trans(
"Until").
" ";
1341 print $form->selectDate($repeateventlimitdate,
'limit', 0, 0, 0,
"action", 1, 0, 0,
'',
'',
'',
'', 1,
'',
'',
'tzuserrel');
1344 print
'<script type="text/javascript">
1345 jQuery(document).ready(function() {
1346 function init_repeat()
1348 console.log("recurrule: " + "'.$object->recurrule.
'");
1349 console.log("reg1: " + "'.$selectedrecurrulefreq.
'");
1350 console.log("reg2: " + "'.$selectedrecurrulebymonthday.
'");
1351 console.log("reg3: " + "'.$selectedrecurrulebyday.
'");
1352 console.log("selectedrulefreq: " + "'.$selectedrecurrulefreq.
'");
1353 if (jQuery("#recurrulefreq").val() == \'MONTHLY\')
1355 jQuery(".repeateventBYMONTHDAY").css("display", "inline-block"); /* use this instead of show because we want inline-block and not block */
1356 jQuery(".repeateventlimitdate").css("display", "inline-block");
1357 jQuery(".repeateventBYDAY").hide();
1359 else if (jQuery("#recurrulefreq").val() == \'WEEKLY\')
1361 jQuery(".repeateventBYMONTHDAY").hide();
1362 jQuery(".repeateventBYDAY").css("display", "inline-block"); /* use this instead of show because we want inline-block and not block */
1363 jQuery(".repeateventlimitdate").css("display", "inline-block");
1367 jQuery(".repeateventBYMONTHDAY").hide();
1368 jQuery(".repeateventBYDAY").hide();
1369 jQuery(".repeateventlimitdate").hide();
1373 jQuery("#recurrulefreq").change(function() {
1384 $datep = ($datep ? $datep : (is_null(
$object->datep) ?
'' :
$object->datep));
1388 $datef = ($datef ? $datef :
$object->datef);
1392 if (empty($datef) && !empty($datep)) {
1399 print
'<tr><td class="nowrap">';
1402 print $form->selectDate($datep,
'ap', 1, 1, 0,
"action", 1, 2, 0,
'fulldaystart',
'',
'',
'', 1,
'',
'',
'tzuserrel');
1404 print $form->selectDate($datep,
'ap', 1, 1, 1,
"action", 1, 2, 0,
'fulldaystart',
'',
'',
'', 1,
'',
'',
'tzuserrel');
1406 print
' <span class="hideonsmartphone"> - </span><br class="showonsmartphone"> ';
1407 print $form->selectDate($datef,
'p2', 1, 1, 1,
"action", 1, 2, 0,
'fulldayend',
'',
'',
'', 1,
'',
'',
'tzuserrel');
1410 print
'<tr><td class=""> </td><td></td></tr>';
1413 print
'<tr><td class="tdtop nowrap"><span class="fieldrequired">'.$langs->trans(
"ActionAffectedTo").
'</span></td><td>';
1414 $listofuserid = array();
1415 $listofcontactid = array();
1416 $listofotherid = array();
1418 if (empty($donotclearsession)) {
1420 if ($assignedtouser) {
1421 $listofuserid[$assignedtouser] = array(
'id' => $assignedtouser,
'mandatory' => 0);
1424 $listofuserid[$assignedtouser][
'transparency'] = (GETPOSTISSET(
'transparency') ?
GETPOST(
'transparency',
'alpha') : 1);
1425 $_SESSION[
'assignedtouser'] = json_encode($listofuserid);
1427 if (!empty($_SESSION[
'assignedtouser'])) {
1428 $listofuserid = json_decode($_SESSION[
'assignedtouser'],
true);
1430 $firstelem = reset($listofuserid);
1431 if (isset($listofuserid[$firstelem[
'id']])) {
1432 $listofuserid[$firstelem[
'id']][
'transparency'] = (GETPOSTISSET(
'transparency') ?
GETPOST(
'transparency',
'alpha') : 0);
1435 print
'<div class="assignedtouser">';
1436 print $form->select_dolusers_forevent(($action ==
'create' ?
'add' :
'update'),
'assignedtouser', 1,
'', 0,
'',
'', 0, 0, 0,
'AND u.statut != 0', 1, $listofuserid, $listofcontactid, $listofotherid);
1442 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>';
1445 if (isModEnabled(
'category')) {
1447 print
'<tr><td>'.$langs->trans(
"Categories").
'</td><td>';
1448 $cate_arbo = $form->select_all_categories(Categorie::TYPE_ACTIONCOMM,
'',
'parent', 64, 0, 3);
1449 print
img_picto(
'',
'category').$form->multiselectarray(
'categories', $cate_arbo,
GETPOST(
'categories',
'array'),
'', 0,
'minwidth300 quatrevingtpercent widthcentpercentminusx', 0, 0);
1453 if (isModEnabled(
'resource')) {
1455 print
'<tr><td class="tdtop nowrap">'.$langs->trans(
"Resource").
'</td><td>';
1457 $listofresourceid = array();
1458 if (empty($donotclearsession)) {
1459 $assignedtoresource =
GETPOST(
"assignedtoresource");
1460 if ($assignedtoresource) {
1461 $listofresourceid[$assignedtoresource] = array(
'id' => $assignedtoresource,
'mandatory' => 0);
1463 $_SESSION[
'assignedtoresource'] = json_encode($listofresourceid);
1465 if (!empty($_SESSION[
'assignedtoresource'])) {
1466 $listofresourceid = json_decode($_SESSION[
'assignedtoresource'],
true);
1468 $firstelem = reset($listofresourceid);
1469 if (isset($listofresourceid[$firstelem[
'id']])) {
1470 $listofresourceid[$firstelem[
'id']][
'transparency'] = (GETPOSTISSET(
'transparency') ?
GETPOST(
'transparency',
'alpha') : 0);
1473 print
'<div class="assignedtoresource">';
1474 print $form->select_dolresources_forevent(($action ==
'create' ?
'add' :
'update'),
'assignedtoresource', 1,
'', 0,
'',
'', 0, 0, 0,
'AND u.statut != 0', 1, $listofresourceid);
1480 print
'<tr><td>'.$langs->trans(
"Status").
' / '.$langs->trans(
"Percentage").
'</td>';
1482 $percent = $complete !==
'' ? $complete : -1;
1483 if (GETPOSTISSET(
'status')) {
1485 } elseif (GETPOSTISSET(
'percentage')) {
1488 if ($complete ==
'0' ||
GETPOST(
"afaire") == 1) {
1490 } elseif ($complete == 100 ||
GETPOST(
"afaire") == 2) {
1494 $formactions->form_select_status_action(
'formaction', $percent, 1,
'complete', 0, 0,
'maxwidth200');
1500 print
'<br><hr><br>';
1503 print
'<table class="border centpercent">';
1505 if (isModEnabled(
"societe")) {
1507 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ActionOnCompany").
'</td><td>';
1511 print $societe->getNomUrl(1);
1512 print
'<input type="hidden" id="socid" name="socid" value="'.GETPOSTINT(
'socid').
'">';
1515 $events[] = array(
'method' =>
'getContacts',
'url' =>
dol_buildpath(
'/core/ajax/contacts.php?showempty=1&token='.
currentToken(), 1),
'htmlname' =>
'contactid',
'params' => array(
'add-customer-contact' =>
'disabled'));
1517 if (!empty($user->socid)) {
1518 print
img_picto(
'',
'company',
'class="paddingrightonly"').$form->select_company($user->socid,
'socid',
'', 1, 1, 0, $events, 0,
'minwidth300 widthcentpercentminusxx maxwidth500');
1520 print
img_picto(
'',
'company',
'class="paddingrightonly"').$form->select_company(
'',
'socid',
'',
'SelectThirdParty', 1, 0, $events, 0,
'minwidth300 widthcentpercentminusxx maxwidth500');
1526 print
'<tr><td class="nowrap">'.$langs->trans(
"ActionOnContact").
'</td><td>';
1527 $preselectedids =
GETPOST(
'socpeopleassigned',
'array:int');
1531 if ($origin ==
'contact') {
1537 $select_contact_default = 0;
1539 $select_contact_default = -1;
1541 print
img_picto(
'',
'contact',
'class="paddingrightonly"');
1543 if (
getDolGlobalString(
'CONTACT_USE_SEARCH_TO_SELECT') && $conf->use_javascript_ajax) {
1550 $conf->global->CONTACT_USE_SEARCH_TO_SELECT = 0;
1551 print $form->selectcontacts(GETPOSTISSET(
'socid') ?
GETPOSTINT(
'socid') : $select_contact_default, $preselectedids,
'socpeopleassigned[]', 1,
'',
'', 0,
'minwidth300 widthcentpercentminusxx maxwidth500', 0, 0, array(), false,
'multiple',
'contactid');
1552 $conf->global->CONTACT_USE_SEARCH_TO_SELECT = $sav;
1554 print $form->selectcontacts(GETPOSTISSET(
'socid') ?
GETPOSTINT(
'socid') : $select_contact_default, $preselectedids,
'socpeopleassigned[]', 1,
'',
'', 0,
'minwidth300 widthcentpercentminusxx maxwidth500', 0, 0, array(), false,
'multiple',
'contactid');
1561 if (isModEnabled(
'project')) {
1562 $langs->load(
"projects");
1566 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Project").
'</td><td id="project-input-container">';
1567 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1568 print $formproject->select_projects((
$object->socid > 0 ?
$object->socid : -1), $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500 widthcentpercentminusxx maxwidth500');
1570 print
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?socid='.(empty($societe->id) ?
'' : $societe->id).
'&action=create&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create').
'">';
1571 print
'<span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddProject").
'"></span></a>';
1572 $urloption =
'?action=create&donotclearsession=1';
1576 print
"\n".
'<script type="text/javascript">';
1577 print
'$(document).ready(function () {
1578 $("#projectid").change(function () {
1579 var url = "'.DOL_URL_ROOT.
'/projet/ajax/projects.php?mode=gettasks&socid="+$("#search_socid").val()+"&projectid="+$("#projectid").val();
1580 console.log("Call url to get new list of tasks: "+url);
1581 $.get(url, function(data) {
1583 if (data) $("#taskid").html(data).select2();
1587 print
'</script>'.
"\n";
1592 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Task").
'</td><td id="project-task-input-container" >';
1593 print
img_picto(
'',
'projecttask',
'class="paddingrightonly"');
1594 $projectsListId =
false;
1595 if (!empty($projectid)) {
1596 $projectsListId = $projectid;
1599 $tid = GETPOSTISSET(
"projecttaskid") ?
GETPOSTINT(
"projecttaskid") : (GETPOSTISSET(
"taskid") ?
GETPOSTINT(
"taskid") :
'');
1601 $formproject->selectTasks((!empty($societe->id) ? $societe->id : -1), $tid,
'taskid', 24, 0,
'1', 1, 0, 0,
'maxwidth500 widthcentpercentminusxx', $projectsListId);
1606 if (!empty($origin) && !empty($originid)) {
1607 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
1609 $hasPermissionOnLinkedObject = 0;
1612 if ($user->hasRight($elProp[
'module'],
'read') || $user->hasRight($elProp[
'module'], $elProp[
'element'],
'read')) {
1613 $hasPermissionOnLinkedObject = 1;
1617 if (! in_array($origin, array(
'societe',
'project',
'task',
'user'))) {
1619 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"LinkedObject").
'</td>';
1620 print
'<td colspan="3">';
1621 if ($hasPermissionOnLinkedObject) {
1623 print
'<input type="hidden" name="fk_element" value="'.$originid.
'">';
1624 print
'<input type="hidden" name="elementtype" value="'.$origin.
'">';
1625 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1626 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1628 print
'<!-- no permission on object to link '.$origin.
' id '.$originid.
' -->';
1636 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"Priority").
'</td><td colspan="3">';
1637 print
'<input type="text" name="priority" value="'.(GETPOSTISSET(
'priority') ?
GETPOSTINT(
'priority') : (
$object->priority ?
$object->priority :
'')).
'" size="5">';
1642 print
'<tr><td class="tdtop">'.$langs->trans(
"Description").
'</td><td>';
1643 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1644 $doleditor =
new DolEditor(
'note', (GETPOSTISSET(
'note') ?
GETPOST(
'note',
'restricthtml') :
$object->note_private),
'', 120,
'dolibarr_notes',
'In', true, true, isModEnabled(
'fckeditor'), ROWS_4,
'90%');
1645 $doleditor->Create();
1649 $parameters = array();
1650 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
1651 print $hookmanager->resPrint;
1652 if (empty($reshook)) {
1653 print
$object->showOptionals($extrafields,
'create', $parameters);
1663 print
'<label for="addreminder">'.img_picto(
'',
'bell',
'class="pictofixedwidth"').$langs->trans(
"AddReminder").
'</label> <input type="checkbox" id="addreminder" name="addreminder"><br><br>';
1665 print
'<div class="reminderparameters" style="display: none;">';
1667 print
'<table class="border centpercent">';
1670 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ReminderTime").
'</td><td colspan="3">';
1671 print
'<input class="width50" type="number" name="offsetvalue" value="'.(GETPOSTISSET(
'offsetvalue') ?
GETPOSTINT(
'offsetvalue') :
getDolGlobalInt(
'AGENDA_REMINDER_DEFAULT_OFFSET', 30)).
'"> ';
1672 print $form->selectTypeDuration(
'offsetunit',
'i', array(
'y',
'm'));
1676 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ReminderType").
'</td><td colspan="3">';
1677 print $form->selectarray(
'selectremindertype', $TRemindTypes,
'', 0, 0, 0,
'', 0, 0, 0,
'',
'minwidth200 maxwidth500', 1);
1682 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"EMailTemplates").
'</td><td colspan="3">';
1683 print $form->selectModelMail(
'actioncommsend',
'actioncomm_send', 1, 1);
1690 print
"\n".
'<script type="text/javascript">';
1691 print
'$(document).ready(function () {
1692 $("#addreminder").click(function(){
1693 console.log("Click on addreminder");
1695 $(".reminderparameters").show();
1697 $(".reminderparameters").hide();
1699 $("#selectremindertype").select2("destroy");
1700 $("#selectremindertype").select2();
1701 $("#select_offsetunittype_duration").select2("destroy");
1702 $("#select_offsetunittype_duration").select2();
1703 selectremindertype();
1706 $("#selectremindertype").change(function(){
1707 selectremindertype();
1710 function selectremindertype() {
1711 console.log("Call selectremindertype");
1712 var selected_option = $("#selectremindertype option:selected").val();
1713 if(selected_option == "email") {
1714 $("#select_actioncommsendmodel_mail").closest("tr").show();
1716 $("#select_actioncommsendmodel_mail").closest("tr").hide();
1721 print
'</script>'.
"\n";
1726 print $form->buttonsSaveCancel(
"Add");
1733 $result1 =
$object->fetch($id);
1734 if ($result1 <= 0) {
1735 $langs->load(
"errors");
1736 print $langs->trans(
"ErrorRecordNotFound");
1742 $result2 =
$object->fetch_thirdparty();
1743 $result2 =
$object->fetch_projet();
1744 $result3 =
$object->fetch_contact();
1745 $result4 =
$object->fetch_userassigned();
1746 $result5 =
$object->fetch_optionals();
1748 if ($listUserAssignedUpdated || $donotclearsession) {
1749 $percentage = in_array(
GETPOST(
'status'), array(-1, 100)) ?
GETPOST(
'status') : (in_array($complete, array(-1, 100)) ? $complete :
GETPOSTINT(
"percentage"));
1758 $object->percentage = $percentage;
1763 $socpeopleassigned =
GETPOST(
"socpeopleassigned",
'array');
1764 foreach ($socpeopleassigned as $tmpid) {
1765 $object->socpeopleassigned[$id] = array(
'id' => $tmpid);
1773 if ($result2 < 0 || $result3 < 0 || $result4 < 0 || $result5 < 0) {
1779 $tmpuser =
new User($db);
1780 $res = $tmpuser->fetch(
$object->authorid);
1784 $tmpuser =
new User($db);
1785 $res = $tmpuser->fetch(
$object->usermodid);
1797 $delay_warning =
getDolGlobalInt(
'MAIN_DELAY_ACTIONS_TODO') * 24 * 60 * 60;
1801 if ($action ==
'delete') {
1802 print $form->formconfirm(
"card.php?id=".urlencode((
string) ($id)), $langs->trans(
"DeleteAction"), $langs->trans(
"ConfirmDeleteAction"),
"confirm_delete",
'',
'', 1);
1805 if ($action ==
'edit') {
1806 if (!empty($conf->use_javascript_ajax)) {
1807 print
"\n".
'<script type="text/javascript">';
1808 print
'$(document).ready(function () {
1809 function setdatefields()
1811 if ($("#fullday:checked").val() == null) {
1812 $(".fulldaystarthour").removeAttr("disabled");
1813 $(".fulldaystartmin").removeAttr("disabled");
1814 $(".fulldayendhour").removeAttr("disabled");
1815 $(".fulldayendmin").removeAttr("disabled");
1817 $(".fulldaystarthour").prop("disabled", true).val("00");
1818 $(".fulldaystartmin").prop("disabled", true).val("00");
1819 $(".fulldayendhour").prop("disabled", true).val("23");
1820 $(".fulldayendmin").prop("disabled", true).val("59");
1824 $("#fullday").change(function() {
1827 $("#actioncode").change(function() {
1828 if ($("#actioncode").val() == \'AC_RDV\') $("#dateend").addClass("fieldrequired");
1829 else $("#dateend").removeClass("fieldrequired");
1832 print
'</script>'.
"\n";
1835 print
'<form name="formaction" action="'.$_SERVER[
'PHP_SELF'].
'" method="POST">';
1836 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1837 print
'<input type="hidden" name="action" value="update">';
1838 print
'<input type="hidden" name="id" value="'.$id.
'">';
1839 print
'<input type="hidden" name="ref_ext" value="'.$object->ref_ext.
'">';
1840 print
'<input type="hidden" name="page_y" value="">';
1842 print
'<input type="hidden" name="backtopage" value="'.($backtopage !=
'1' ? $backtopage :
'').
'">';
1845 print
'<input type="hidden" name="actioncode" value="'.$object->type_code.
'">';
1850 print
'<table class="border tableforfield" width="100%">';
1853 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Ref").
'</td><td colspan="3">'.
$object->id.
'</td></tr>';
1857 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Type").
'</td><td colspan="3">';
1858 if (
$object->type_code !=
'AC_OTH_AUTO') {
1859 print
img_picto($langs->trans(
"ActionType"),
'square',
'class="fawidth30 inline-block" style="color: #ddd;"');
1860 print $formactions->select_type_actions(
GETPOST(
"actioncode",
'aZ09') ?
GETPOST(
"actioncode",
'aZ09') :
$object->type_code,
"actioncode",
"systemauto", 0, 0, 0, 1);
1862 print
'<input type="hidden" name="actioncode" value="'.$object->type_code.
'">';
1863 print
$object->getTypePicto();
1864 print $langs->trans(
"Action".
$object->type_code);
1870 if (
$object->elementtype ==
'ticket') {
1871 print
'<tr><td>'.$langs->trans(
"MarkMessageAsPrivate");
1872 print
' '.$form->textwithpicto(
'', $langs->trans(
"TicketMessagePrivateHelp"), 1,
'help');
1873 print
'</td><td colspan="3"><input type="checkbox" id="private" name="private" '.(preg_match(
'/^TICKET_MSG_PRIVATE/',
$object->code) ?
' checked' :
'').
'></td></tr>';
1877 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>';
1880 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' :
'').
'>';
1881 print
'<label for="fullday">'.$langs->trans(
"EventOnFullDay").
'</label>';
1944 print
'<tr><td class="nowrap">';
1949 print
'</td><td td colspan="3">';
1951 print $form->selectDate($datep ? $datep :
$object->datep,
'ap', 1, 1, 0,
"action", 1, 2, 0,
'fulldaystart',
'',
'',
'', 1,
'',
'',
$object->fulldayevent ? ($tzforfullday ? $tzforfullday :
'tzuserrel') :
'tzuserrel');
1952 print
' <span class="hideonsmartphone"> - </span> ';
1953 print $form->selectDate($datef ? $datef :
$object->datef,
'p2', 1, 1, 1,
"action", 1, 2, 0,
'fulldayend',
'',
'',
'', 1,
'',
'',
$object->fulldayevent ? ($tzforfullday ? $tzforfullday :
'tzuserrel') :
'tzuserrel');
1956 print
'<tr><td class=""> </td><td></td></tr>';
1959 $listofuserid = array();
1960 if (empty($donotclearsession)) {
1961 if (
$object->userownerid > 0) {
1962 $listofuserid[
$object->userownerid] = array(
1966 'transparency' =>
$object->transparency,
1967 'answer_status' => (isset(
$object->userassigned[
$object->userownerid][
'answer_status']) ?
$object->userassigned[
$object->userownerid][
'answer_status']: null),
1968 'mandatory' => (isset(
$object->userassigned[
$object->userownerid][
'mandatory']) ?
$object->userassigned[
$object->userownerid][
'mandatory']:null)
1971 if (!empty(
$object->userassigned)) {
1973 $tmplist1 =
$object->userassigned;
1974 foreach ($tmplist1 as $key => $val) {
1975 if ($val[
'id'] && $val[
'id'] !=
$object->userownerid) {
1976 $listofuserid[$val[
'id']] = $val;
1980 $_SESSION[
'assignedtouser'] = json_encode($listofuserid);
1982 if (!empty($_SESSION[
'assignedtouser'])) {
1983 $listofuserid = json_decode($_SESSION[
'assignedtouser'],
true);
1987 $listofcontactid =
$object->socpeopleassigned;
1988 $listofotherid =
$object->otherassigned;
1990 print
'<tr><td class="tdtop nowrap fieldrequired">'.$langs->trans(
"ActionAssignedTo").
'</td><td colspan="3">';
1991 print
'<div class="assignedtouser">';
1992 print $form->select_dolusers_forevent(($action ==
'create' ?
'add' :
'update'),
'assignedtouser', 1,
'', 0,
'',
'', 0, 0, 0,
'AND u.statut != 0', 1, $listofuserid, $listofcontactid, $listofotherid);
2004 print
'<tr><td>'.$langs->trans(
"Location").
'</td><td colspan="3"><input type="text" name="location" class="minwidth300 maxwidth150onsmartphone" value="'.
$object->location.
'"></td></tr>';
2008 print
'<tr><td class="nowrap">'.$langs->trans(
"Status").
' / '.$langs->trans(
"Percentage").
'</td><td colspan="3">';
2009 $percent = GETPOSTISSET(
"percentage") ?
GETPOSTINT(
"percentage") :
$object->percentage;
2010 $formactions->form_select_status_action(
'formaction', $percent, 1,
'complete', 0, 0,
'maxwidth200');
2014 if (isModEnabled(
'category')) {
2015 print
'<tr><td>'.$langs->trans(
"Categories").
'</td><td colspan="3">';
2016 $cate_arbo = $form->select_all_categories(Categorie::TYPE_ACTIONCOMM,
'',
'parent', 64, 0, 3);
2018 $cats = $c->containing(
$object->id, Categorie::TYPE_ACTIONCOMM);
2019 $arrayselected = array();
2020 foreach ($cats as $cat) {
2021 $arrayselected[] = $cat->id;
2023 print
img_picto(
'',
'category').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected,
'', 0,
'quatrevingtpercent widthcentpercentminusx', 0, 0);
2030 print
'<br><hr><br>';
2033 print
'<table class="border tableforfield centpercent">';
2035 if (isModEnabled(
"societe")) {
2037 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"ActionOnCompany").
'</td>';
2041 $events[] = array(
'method' =>
'getContacts',
'url' =>
dol_buildpath(
'/core/ajax/contacts.php?showempty=1&token='.
currentToken(), 1),
'htmlname' =>
'contactid',
'params' => array(
'add-customer-contact' =>
'disabled'));
2044 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company(
$object->socid,
'socid',
'',
'SelectThirdParty', 1, 0, $events, 0,
'minwidth300');
2049 print
'<tr><td>'.$langs->trans(
"ActionOnContact").
'</td><td>';
2050 print
'<div class="maxwidth200onsmartphone">';
2052 print
img_picto(
'',
'contact',
'class="paddingrightonly"');
2053 if (
getDolGlobalString(
'CONTACT_USE_SEARCH_TO_SELECT') && $conf->use_javascript_ajax) {
2060 $conf->global->CONTACT_USE_SEARCH_TO_SELECT = 0;
2061 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');
2062 $conf->global->CONTACT_USE_SEARCH_TO_SELECT = $sav;
2065 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');
2073 if (isModEnabled(
'project')) {
2074 $langs->load(
"projects");
2076 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Project").
'</td><td>';
2077 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
2078 $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');
2079 if ($numprojet == 0) {
2080 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>';
2087 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"Priority").
'</td><td>';
2088 print
'<input type="text" name="priority" value="'.($object->priority ?
$object->priority :
'').
'" size="5">';
2093 if (!empty(
$object->fk_element) && !empty(
$object->elementtype)) {
2094 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2096 print
'<td>'.$langs->trans(
"LinkedObject").
'</td>';
2098 if (
$object->elementtype ==
'task' && isModEnabled(
'project')) {
2099 print
'<td id="project-task-input-container" >';
2101 $urloption =
'?action=create&donotclearsession=1';
2102 $url = DOL_URL_ROOT.
'/comm/action/card.php'.$urloption;
2105 print
"\n".
'<script type="text/javascript" >';
2106 print
'$(document).ready(function () {
2107 $("#projectid").change(function () {
2108 var url = "'.$url.
'&projectid="+$("#projectid").val();
2109 $.get(url, function(data) {
2110 console.log($( data ).find("#fk_element").html());
2111 if (data) $("#fk_element").html( $( data ).find("#taskid").html() ).select2();
2115 print
'</script>'.
"\n";
2117 $formproject->selectTasks((!empty($societe->id) ? $societe->id : -1),
$object->fk_element,
'fk_element', 24, 0, 0, 1, 0, 0,
'maxwidth500',
$object->fk_project);
2118 print
'<input type="hidden" name="elementtype" value="'.$object->elementtype.
'">';
2124 print
'<input type="hidden" name="fk_element" value="'.$object->fk_element.
'">';
2125 print
'<input type="hidden" name="elementtype" value="'.$object->elementtype.
'">';
2133 print
'<tr><td class="tdtop">'.$langs->trans(
"Description").
'</td><td>';
2135 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
2136 $doleditor =
new DolEditor(
'note',
$object->note_private,
'', 120,
'dolibarr_notes',
'In',
true,
true, isModEnabled(
'fckeditor'), ROWS_4,
'90%');
2137 $doleditor->Create();
2141 $parameters = array();
2142 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
2143 print $hookmanager->resPrint;
2144 if (empty($reshook)) {
2145 print
$object->showOptionals($extrafields,
'edit', $parameters);
2152 $filteruserid = $user->id;
2153 if ($user->hasRight(
'agenda',
'allactions',
'read')) {
2156 $object->loadReminders(
'', $filteruserid,
false);
2160 if (count(
$object->reminders) > 0) {
2161 $checked =
'checked';
2162 $keys = array_keys(
$object->reminders);
2163 $firstreminderId = array_shift($keys);
2165 $actionCommReminder =
$object->reminders[$firstreminderId];
2169 $actionCommReminder->offsetvalue =
getDolGlobalInt(
'AGENDA_REMINDER_DEFAULT_OFFSET', 30);
2170 $actionCommReminder->offsetunit =
'i';
2171 $actionCommReminder->typeremind =
'email';
2178 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>';
2180 print
'<div class="reminderparameters" '.(empty($checked) ?
'style="display: none;"' :
'').
'>';
2184 print
'<table class="border centpercent">';
2187 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ReminderTime").
'</td><td colspan="3">';
2188 print
'<input type="number" name="offsetvalue" class="width50" value="'.$actionCommReminder->offsetvalue.
'"> ';
2189 print $form->selectTypeDuration(
'offsetunit', $actionCommReminder->offsetunit, array(
'y',
'm'));
2193 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ReminderType").
'</td><td colspan="3">';
2194 print $form->selectarray(
'selectremindertype', $TRemindTypes, $actionCommReminder->typeremind, 0, 0, 0,
'', 0, 0, 0,
'',
'minwidth200', 1);
2198 if ($actionCommReminder->typeremind ==
'browser') {
2199 $hide =
'style="display:none;"';
2204 print
'<tr '.$hide.
'><td class="titlefieldcreate nowrap">'.$langs->trans(
"EMailTemplates").
'</td><td colspan="3">';
2205 print $form->selectModelMail(
'actioncommsend',
'actioncomm_send', 1, 1);
2211 print
"\n".
'<script type="text/javascript">';
2212 print
'$(document).ready(function () {
2213 $("#addreminder").click(function(){
2215 $(".reminderparameters").show();
2217 $(".reminderparameters").hide();
2221 $("#selectremindertype").change(function(){
2222 var selected_option = $("#selectremindertype option:selected").val();
2223 if(selected_option == "email") {
2224 $("#select_actioncommsendmodel_mail").closest("tr").show();
2226 $("#select_actioncommsendmodel_mail").closest("tr").hide();
2231 print
'</script>'.
"\n";
2238 print $form->buttonsSaveCancel();
2247 if ($action ==
'clone') {
2248 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
GETPOST(
'id'), $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneEvent',
$object->label),
'confirm_clone', array(),
'yes', 1);
2252 $parameters = array();
2253 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
2254 if (empty($reshook)) {
2255 $formconfirm .= $hookmanager->resPrint;
2256 } elseif ($reshook > 0) {
2257 $formconfirm = $hookmanager->resPrint;
2265 $linkback .=
'<a href="'.DOL_URL_ROOT.
'/comm/action/list.php?mode=show_list&restore_lastsearch_values=1">';
2266 $linkback .=
img_picto($langs->trans(
"BackToList"),
'object_calendarlist',
'class="pictoactionview pictofixedwidth"');
2267 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"BackToList").
'</span>';
2268 $linkback .=
'</a>';
2269 $linkback .=
'</li>';
2270 $linkback .=
'<li class="noborder litext">';
2272 $linkback .=
img_picto($langs->trans(
"ViewCal"),
'object_calendar',
'class="pictoactionview pictofixedwidth"');
2273 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"ViewCal").
'</span>';
2274 $linkback .=
'</a>';
2275 $linkback .=
'</li>';
2276 $linkback .=
'<li class="noborder litext">';
2278 $linkback .=
img_picto($langs->trans(
"ViewWeek"),
'object_calendarweek',
'class="pictoactionview pictofixedwidth"');
2279 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"ViewWeek").
'</span>';
2280 $linkback .=
'</a>';
2281 $linkback .=
'</li>';
2282 $linkback .=
'<li class="noborder litext">';
2284 $linkback .=
img_picto($langs->trans(
"ViewDay"),
'object_calendarday',
'class="pictoactionview pictofixedwidth"');
2285 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"ViewDay").
'</span>';
2286 $linkback .=
'</a>';
2287 $linkback .=
'</li>';
2288 $linkback .=
'<li class="noborder litext">';
2290 $linkback .=
img_picto($langs->trans(
"ViewPerUser"),
'object_calendarperuser',
'class="pictoactionview pictofixedwidth"');
2291 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"ViewPerUser").
'</span>';
2292 $linkback .=
'</a>';
2295 $parameters = array();
2296 $reshook = $hookmanager->executeHooks(
'addCalendarView', $parameters,
$object, $action);
2297 if (empty($reshook)) {
2298 $linkback .= $hookmanager->resPrint;
2299 } elseif ($reshook > 1) {
2300 $linkback = $hookmanager->resPrint;
2305 $morehtmlref =
'<div class="refidno">';
2309 if (isModEnabled(
'project')) {
2310 $langs->load(
"projects");
2312 if ($usercancreate) {
2313 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2314 if ($action !=
'classify') {
2315 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2317 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
2319 if (!empty(
$object->fk_project)) {
2321 $proj->fetch(
$object->fk_project);
2322 $morehtmlref .= $proj->getNomUrl(1);
2324 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2329 $morehtmlref .=
'</div>';
2332 dol_banner_tab(
$object,
'id', $linkback, ($user->socid ? 0 : 1),
'id',
'ref', $morehtmlref);
2334 print
'<div class="fichecenter">';
2335 print
'<div class="fichehalfleft">';
2337 print
'<div class="underbanner clearboth"></div>';
2340 print
'<table class="border tableforfield centpercent">';
2344 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
2345 $labeltoshow = $langs->trans(
"Action".
$object->type_code);
2347 $labeltoshow .=
' ('.$object->code.
')';
2349 print
$object->getTypePicto(
'pictofixedwidth paddingright', $labeltoshow);
2350 print $langs->trans(
"Action".
$object->type_code);
2355 print
'<tr><td class="titlefield">'.$langs->trans(
"EventOnFullDay").
'</td><td>'.
yn(
$object->fulldayevent ? 1 : 0, 3).
'</td></tr>';
2359 print
'<tr><td class="titlefield">'.$langs->trans(
"EventIntoASerie").
'</td><td>'.
dol_escape_htmltag(
$object->recurid).
'</td></tr>';
2368 print
'<tr><td>'.$langs->trans(
"DateActionStart").
'</td><td>';
2373 if (empty(
$object->fulldayevent)) {
2386 print
'<tr><td>'.$langs->trans(
"DateActionEnd").
'</td><td>';
2387 if (empty(
$object->fulldayevent)) {
2400 print
'<tr><td>'.$langs->trans(
"Location").
'</td><td>'.
$object->location.
'</td></tr>';
2404 print
'<tr><td class="nowrap">'.$langs->trans(
"ActionAssignedTo").
'</td><td>';
2405 $listofuserid = array();
2406 if (empty($donotclearsession)) {
2407 if (
$object->userownerid > 0) {
2408 $listofuserid[
$object->userownerid] = array(
2410 'transparency' =>
$object->transparency,
2411 'answer_status' =>
$object->userassigned[
$object->userownerid][
'answer_status'],
2412 'mandatory' =>
$object->userassigned[
$object->userownerid][
'mandatory']
2415 if (!empty(
$object->userassigned)) {
2417 $tmplist1 =
$object->userassigned;
2418 foreach ($tmplist1 as $key => $val) {
2419 if ($val[
'id'] && $val[
'id'] !=
$object->userownerid) {
2420 $listofuserid[$val[
'id']] = $val;
2424 $_SESSION[
'assignedtouser'] = json_encode($listofuserid);
2426 if (!empty($_SESSION[
'assignedtouser'])) {
2427 $listofuserid = json_decode($_SESSION[
'assignedtouser'],
true);
2431 $listofcontactid = array();
2432 $listofotherid = array();
2433 print
'<div class="assignedtouser">';
2434 print $form->select_dolusers_forevent(
'view',
'assignedtouser', 1,
'', 0,
'',
'', 0, 0, 0,
'', (
$object->datep !=
$object->datef) ? 1 : 0, $listofuserid, $listofcontactid, $listofotherid);
2444 print
' </td></tr>';
2447 if (isModEnabled(
'category')) {
2448 print
'<tr><td class="valignmiddle">'.$langs->trans(
"Categories").
'</td><td>';
2449 print $form->showCategories(
$object->id, Categorie::TYPE_ACTIONCOMM, 1);
2457 print
'<div class="fichehalfright">';
2459 print
'<div class="underbanner clearboth"></div>';
2460 print
'<table class="border tableforfield centpercent">';
2462 if (isModEnabled(
"societe")) {
2464 print
'<tr><td class="titlefield">'.$langs->trans(
"ActionOnCompany").
'</td>';
2465 print
'<td>'.(is_object(
$object->thirdparty) &&
$object->thirdparty->id ?
$object->thirdparty->getNomUrl(1) : (
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>'));
2466 if (is_object(
$object->thirdparty) &&
$object->thirdparty->id > 0 &&
$object->type_code ==
'AC_TEL') {
2468 print
"<br>".dol_print_phone(
$object->thirdparty->phone);
2474 print
'<tr><td>'.$langs->trans(
"ActionOnContact").
'</td>';
2477 if (!empty(
$object->socpeopleassigned)) {
2478 foreach (
$object->socpeopleassigned as $cid => $Tab) {
2480 $result = $contact->fetch($cid);
2487 print $contact->getNomUrl(1);
2488 if (
$object->type_code ==
'AC_TEL') {
2489 if (!empty($contact->phone_pro)) {
2490 print
'('.dol_print_phone($contact->phone_pro).
')';
2493 print
'<div class="paddingright"></div>';
2497 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
2504 print
'<tr><td class="nowrap" class="titlefield">' . $langs->trans(
"Priority") .
'</td><td>';
2511 if (!empty(
$object->fk_element) && !empty(
$object->elementtype) && !in_array(
$object->elementtype, array(
'societe',
'contact',
'project'))) {
2512 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2513 print
'<tr><td>'.$langs->trans(
"LinkedObject").
'</td>';
2517 print
'<span class="opacitymedium">'.$langs->trans(
"ObjectDeleted").
'</span>';
2525 if (!empty(
$object->email_msgid)) {
2526 print
'<tr><td>'.$langs->trans(
'MailTopic').
'</td>';
2527 print
'<td>'.dol_escape_htmltag(
$object->email_subject).
'</td></tr>';
2528 print
'<tr><td>'.$langs->trans(
'MailFrom').
'</td>';
2529 print
'<td>'.dol_escape_htmltag(
$object->email_from).
'</td></tr>';
2530 print
'<tr><td>'.$langs->trans(
'MailTo').
'</td>';
2531 print
'<td>'.dol_escape_htmltag(
$object->email_to).
'</td></tr>';
2532 if (!empty(
$object->email_tocc)) {
2533 print
'<tr><td>'.$langs->trans(
'MailCC').
'</td>';
2534 print
'<td>'.dol_escape_htmltag(
$object->email_tocc).
'</td></tr>';
2539 print
'<tr><td class="tdtop">'.$langs->trans(
"Description").
'</td><td class="wordbreak sensiblehtmlcontent">';
2544 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2548 $filteruserid = $user->id;
2549 if ($user->hasRight(
'agenda',
'allactions',
'read')) {
2552 $object->loadReminders(
'', $filteruserid,
false);
2554 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"Reminders").
'</td><td>';
2556 if (count(
$object->reminders) > 0) {
2557 $tmpuserstatic =
new User($db);
2559 foreach (
$object->reminders as $actioncommreminderid => $actioncommreminder) {
2560 print $TRemindTypes[$actioncommreminder->typeremind][
'label'];
2561 if ($actioncommreminder->fk_user > 0) {
2562 $tmpuserstatic->fetch($actioncommreminder->fk_user);
2563 print
' ('.$tmpuserstatic->getNomUrl(0,
'', 0, 0, 16).
')';
2565 print
' - '.$actioncommreminder->offsetvalue.
' '.$TDurationTypes[$actioncommreminder->offsetunit];
2567 if ($actioncommreminder->status == $actioncommreminder::STATUS_TODO) {
2568 print
' - <span class="opacitymedium">';
2569 print $langs->trans(
"NotSent");
2571 } elseif ($actioncommreminder->status == $actioncommreminder::STATUS_DONE) {
2572 print
' - <span class="opacitymedium">';
2573 print $langs->trans(
"Done");
2575 } elseif ($actioncommreminder->status == $actioncommreminder::STATUS_ERROR) {
2576 print
' - <span class="opacitymedium">';
2577 print $form->textwithpicto($langs->trans(
"Error"), $actioncommreminder->lasterror);
2591 print
'<div class="clearboth"></div>';
2600 print
'<div class="tabsAction">';
2602 $parameters = array();
2603 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
2604 if (empty($reshook)) {
2605 if ($action !=
'edit') {
2606 if ($user->hasRight(
'agenda',
'allactions',
'create') ||
2607 ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'create'))) {
2608 print
'<div class="inline-block divButAction"><a class="butAction" href="card.php?action=edit&token='.newToken().
'&id='.
$object->id.
'">'.$langs->trans(
"Modify").
'</a></div>';
2610 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"Modify").
'</a></div>';
2613 if ($user->hasRight(
'agenda',
'allactions',
'create') ||
2614 ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'create'))) {
2615 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>';
2617 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"ToClone").
'</a></div>';
2620 if ($user->hasRight(
'agenda',
'allactions',
'delete') ||
2621 ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'delete'))) {
2622 print
'<div class="inline-block divButAction"><a class="butActionDelete" href="card.php?action=delete&token='.newToken().
'&id='.
$object->id.
'">'.$langs->trans(
"Delete").
'</a></div>';
2624 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"Delete").
'</a></div>';
2631 if ($action !=
'edit') {
2633 print
'<div class="clearboth"></div><div class="fichecenter"><div class="fichehalfleft">';
2634 print
'<a name="builddoc"></a>';
2640 $filedir = $conf->agenda->multidir_output[$conf->entity].
'/'.
$object->id;
2641 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2643 $genallowed = $user->hasRight(
'agenda',
'myactions',
'read');
2644 $delallowed = $user->hasRight(
'agenda',
'myactions',
'create');
2647 print $formfile->showdocuments(
'actions',
$object->id, $filedir, $urlsource, $genallowed, $delallowed,
'', 0, 0, 0, 0, 0,
'',
'',
'', $langs->getDefaultLang());
2649 print
'</div><div class="fichehalfright">';
2652 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.
currentToken()
Return the value of token currently saved into session with name 'token'.
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.