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') || ((empty(
$object->id) ||
$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') {
191 if ($action ==
'update') {
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'];
999 $sqldelete =
"DELETE FROM ".MAIN_DB_PREFIX.
"actioncomm_reminder";
1000 $sqldelete .=
" WHERE fk_user = ".((int) $actionCommReminder->fk_user).
" AND fk_actioncomm = ".((int)
$object->id).
" AND typeremind = '".$db->escape($remindertype).
"'";
1001 $resqldelete = $db->query($sqldelete);
1003 $res = $actionCommReminder->create($user);
1007 $langs->load(
"errors");
1008 $error = $langs->trans(
'ErrorReminderActionCommCreation');
1011 $donotclearsession = 1;
1018 unset($_SESSION[
'assignedtouser']);
1019 unset($_SESSION[
'assignedtoresource']);
1034 if (!empty($backtopage)) {
1035 unset($_SESSION[
'assignedtouser']);
1036 header(
"Location: ".$backtopage);
1043if (empty($reshook) && $action ==
'confirm_delete' &&
GETPOST(
"confirm") ==
'yes') {
1046 $object->fetch_userassigned();
1049 if ($user->hasRight(
'agenda',
'myactions',
'delete')
1050 || $user->hasRight(
'agenda',
'allactions',
'delete')) {
1051 $result =
$object->delete($user);
1054 header(
"Location: index.php");
1066if (empty($reshook) &&
GETPOST(
'actionmove',
'alpha') ==
'mupdate') {
1072 $newdate =
GETPOST(
'newdate',
'alpha');
1073 if (empty($newdate) || strpos($newdate,
'dayevent_') != 0) {
1074 header(
"Location: ".$backtopage,
true, 307);
1078 $datep =
dol_mktime($shour, $smin, 0, substr($newdate, 13, 2), substr($newdate, 15, 2), substr($newdate, 9, 4),
'tzuserrel');
1081 if ($datep !=
$object->datep) {
1090 $eventDateStart =
$object->datep;
1091 $eventDateEnd =
$object->datef;
1093 $sql =
"SELECT er.rowid, r.ref as r_ref, ac.id as ac_id, ac.label as ac_label";
1094 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_resources as er";
1095 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"resource as r ON r.rowid = er.resource_id AND er.resource_type = 'dolresource'";
1096 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"actioncomm as ac ON ac.id = er.element_id AND er.element_type = '".$db->escape(
$object->element).
"'";
1097 $sql .=
" WHERE ac.id <> ".((int)
$object->id);
1098 $sql .=
" AND er.resource_id IN (";
1099 $sql .=
" SELECT resource_id FROM ".MAIN_DB_PREFIX.
"element_resources";
1100 $sql .=
" WHERE element_id = ".((int)
$object->id);
1101 $sql .=
" AND element_type = '".$db->escape(
$object->element).
"'";
1102 $sql .=
" AND busy = 1";
1104 $sql .=
" AND er.busy = 1";
1108 $sql .=
" (ac.datep <= '".$db->idate($eventDateStart).
"' AND (ac.datep2 IS NULL OR ac.datep2 >= '".$db->idate($eventDateStart).
"'))";
1110 if (!empty($eventDateEnd)) {
1111 $sql .=
" OR (ac.datep <= '".$db->idate($eventDateEnd).
"' AND (ac.datep2 >= '".$db->idate($eventDateEnd).
"'))";
1115 $sql .=
"ac.datep >= '".$db->idate($eventDateStart).
"'";
1116 if (!empty($eventDateEnd)) {
1117 $sql .=
" AND (ac.datep2 IS NOT NULL AND ac.datep2 <= '".$db->idate($eventDateEnd).
"')";
1122 $resql = $db->query($sql);
1125 $object->error = $db->lasterror();
1128 if ($db->num_rows($resql) > 0) {
1131 $object->error = $langs->trans(
'ErrorResourcesAlreadyInUse').
' : ';
1132 while ($obj = $db->fetch_object($resql)) {
1133 $object->error .=
'<br> - '.$langs->trans(
'ErrorResourceUseInEvent', $obj->r_ref, $obj->ac_label.
' ['.$obj->ac_id.
']');
1148 $result =
$object->update($user);
1158 if (!empty($backtopage)) {
1159 header(
"Location: ".$backtopage,
true, 307);
1168$permissiontoadd = ($user->hasRight(
'agenda',
'allactions',
'create') || ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'read')));
1169if (empty($reshook)) {
1170 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1178$form =
new Form($db);
1181$arrayrecurrulefreq = array(
1182 'no' => $langs->trans(
"OnceOnly"),
1183 'MONTHLY' => $langs->trans(
"EveryMonth"),
1184 'WEEKLY' => $langs->trans(
"EveryWeek")
1189$help_url =
'EN:Module_Agenda_En|FR:Module_Agenda|ES:M&omodulodulo_Agenda|DE:Modul_Terminplanung';
1190llxHeader(
'', $langs->trans(
"Agenda"), $help_url);
1192if ($action ==
'create') {
1195 $socpeopleassigned =
GETPOST(
"socpeopleassigned",
'array');
1196 if (!empty($socpeopleassigned[0])) {
1197 $result = $contact->fetch($socpeopleassigned[0]);
1205 if (!empty($conf->use_javascript_ajax)) {
1206 print
"\n".
'<script type="text/javascript">';
1207 print
'$(document).ready(function () {
1208 function setdatefields()
1210 if ($("#fullday:checked").val() == null) {
1211 $(".fulldaystarthour").removeAttr("disabled");
1212 $(".fulldaystartmin").removeAttr("disabled");
1213 $(".fulldayendhour").removeAttr("disabled");
1214 $(".fulldayendmin").removeAttr("disabled");
1215 $("#p2").removeAttr("disabled");
1217 $(".fulldaystarthour").prop("disabled", true).val("00");
1218 $(".fulldaystartmin").prop("disabled", true).val("00");
1219 $(".fulldayendhour").prop("disabled", true).val("23");
1220 $(".fulldayendmin").prop("disabled", true).val("59");
1221 $("#p2").removeAttr("disabled");
1224 $("#fullday").change(function() {
1225 console.log("setdatefields");
1229 $("#actioncode").change(function() {
1230 if ($("#actioncode").val() == \'AC_RDV\') $("#dateend").addClass("fieldrequired");
1231 else $("#dateend").removeClass("fieldrequired");
1233 $("#aphour,#apmin").change(function() {
1234 if ($("#actioncode").val() == \'AC_RDV\') {
1235 console.log("Start date was changed, we modify end date "+(parseInt($("#aphour").val()))+" "+$("#apmin").val()+" -> "+("00" + (parseInt($("#aphour").val()) + 1)).substr(-2,2));
1236 $("#p2hour").val(("00" + (parseInt($("#aphour").val()) + 1)).substr(-2,2));
1237 $("#p2min").val($("#apmin").val());
1238 $("#p2day").val($("#apday").val());
1239 $("#p2month").val($("#apmonth").val());
1240 $("#p2year").val($("#apyear").val());
1241 $("#p2").val($("#ap").val());
1244 if ($("#actioncode").val() == \'AC_RDV\') $("#dateend").addClass("fieldrequired");
1245 else $("#dateend").removeClass("fieldrequired");
1248 print
'</script>'.
"\n";
1251 print
'<form name="formaction" action="'.$_SERVER[
'PHP_SELF'].
'" method="POST">';
1252 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1253 print
'<input type="hidden" name="action" value="add">';
1254 print
'<input type="hidden" name="donotclearsession" value="1">';
1255 print
'<input type="hidden" name="page_y" value="">';
1257 print
'<input type="hidden" name="backtopage" value="'.($backtopage !=
'1' ? $backtopage :
'').
'">';
1260 print
'<input type="hidden" name="actioncode" value="'.dol_getIdFromCode($db,
'AC_OTH',
'c_actioncomm').
'">';
1263 if (
GETPOST(
"actioncode",
'aZ09') ==
'AC_RDV') {
1264 print
load_fiche_titre($langs->trans(
"AddActionRendezVous"),
'',
'title_agenda');
1271 print
'<table class="border centpercent">';
1275 print
'<tr><td class="titlefieldcreate"><span class="fieldrequired">'.$langs->trans(
"Type").
'</span></b></td><td>';
1277 print
img_picto($langs->trans(
"ActionType"),
'square',
'class="fawidth30 inline-block" style="color: #ddd;"');
1278 $selectedvalue = GETPOSTISSET(
"actioncode") ?
GETPOST(
"actioncode",
'aZ09') : (
$object->type_code ?
$object->type_code : $default);
1279 print $formactions->select_type_actions($selectedvalue,
"actioncode",
"systemauto", 0, -1, 0, 1);
1284 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>';
1287 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
"Date").
'</span></td>';
1288 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>';
1291 $userepeatevent = (
getDolGlobalInt(
'MAIN_FEATURES_LEVEL') >= 1 ? 1 : 0);
1292 if ($userepeatevent) {
1294 print
' <div class="opacitymedium inline-block small">';
1295 print
img_picto($langs->trans(
"Recurrence"),
'recurring',
'style="margin-left: 6px" class="paddingright2"');
1296 print
'<input type="hidden" name="recurid" value="'.(empty(
$object->recurid) ?
'' :
$object->recurid).
'">';
1298 $selectedrecurrulefreq =
'no';
1299 $selectedrecurrulebymonthday =
'';
1300 $selectedrecurrulebyday =
'';
1301 $object->recurrule = GETPOSTISSET(
'recurrulefreq') ?
"FREQ=".GETPOST(
'recurrulefreq',
'alpha') :
"";
1302 $object->recurrule .= GETPOSTISSET(
'BYMONTHDAY') ?
"_BYMONTHDAY".GETPOST(
'BYMONTHDAY',
'alpha') :
"";
1303 $object->recurrule .= GETPOSTISSET(
'BYDAY') ?
"_BYDAY".GETPOST(
'BYDAY',
'alpha') :
"";
1307 if (
$object->recurrule && preg_match(
'/FREQ=([A-Z]+)/i',
$object->recurrule, $reg)) {
1308 $selectedrecurrulefreq = $reg[1];
1310 if (
$object->recurrule && preg_match(
'/FREQ=MONTHLY.*BYMONTHDAY(\d+)/i',
$object->recurrule, $reg)) {
1311 $selectedrecurrulebymonthday = (int) $reg[1];
1313 if (
$object->recurrule && preg_match(
'/FREQ=WEEKLY.*BYDAY(\d+)/i',
$object->recurrule, $reg)) {
1314 $selectedrecurrulebyday = (int) $reg[1];
1317 print $form->selectarray(
'recurrulefreq', $arrayrecurrulefreq, $selectedrecurrulefreq, 0, 0, 0,
'', 0, 0, 0,
'',
'marginrightonly');
1323 print
'<div class="hidden marginrightonly inline-block repeateventBYMONTHDAY">';
1324 print $langs->trans(
"DayOfMonth").
': <input type="input" size="2" name="BYMONTHDAY" value="'.$selectedrecurrulebymonthday.
'">';
1327 print
'<div class="hidden marginrightonly inline-block repeateventBYDAY">';
1328 print $langs->trans(
"DayOfWeek").
': <input type="input" size="4" name="BYDAY" value="'.$selectedrecurrulebyday.
'">';
1331 $repeateventlimitdate = !empty($repeateventlimitdate) ? $repeateventlimitdate :
'';
1332 print
'<div class="hidden marginrightonly inline-block repeateventlimitdate">';
1333 print $langs->trans(
"Until").
" ";
1334 print $form->selectDate($repeateventlimitdate,
'limit', 0, 0, 0,
"action", 1, 0, 0,
'',
'',
'',
'', 1,
'',
'',
'tzuserrel');
1337 print
'<script type="text/javascript">
1338 jQuery(document).ready(function() {
1339 function init_repeat()
1341 console.log("recurrule: " + "'.$object->recurrule.
'");
1342 console.log("reg1: " + "'.$selectedrecurrulefreq.
'");
1343 console.log("reg2: " + "'.$selectedrecurrulebymonthday.
'");
1344 console.log("reg3: " + "'.$selectedrecurrulebyday.
'");
1345 console.log("selectedrulefreq: " + "'.$selectedrecurrulefreq.
'");
1346 if (jQuery("#recurrulefreq").val() == \'MONTHLY\')
1348 jQuery(".repeateventBYMONTHDAY").css("display", "inline-block"); /* use this instead of show because we want inline-block and not block */
1349 jQuery(".repeateventlimitdate").css("display", "inline-block");
1350 jQuery(".repeateventBYDAY").hide();
1352 else if (jQuery("#recurrulefreq").val() == \'WEEKLY\')
1354 jQuery(".repeateventBYMONTHDAY").hide();
1355 jQuery(".repeateventBYDAY").css("display", "inline-block"); /* use this instead of show because we want inline-block and not block */
1356 jQuery(".repeateventlimitdate").css("display", "inline-block");
1360 jQuery(".repeateventBYMONTHDAY").hide();
1361 jQuery(".repeateventBYDAY").hide();
1362 jQuery(".repeateventlimitdate").hide();
1366 jQuery("#recurrulefreq").change(function() {
1377 $datep = ($datep ? $datep : (is_null(
$object->datep) ?
'' :
$object->datep));
1381 $datef = ($datef ? $datef :
$object->datef);
1385 if (empty($datef) && !empty($datep)) {
1392 print
'<tr><td class="nowrap">';
1395 print $form->selectDate($datep,
'ap', 1, 1, 0,
"action", 1, 2, 0,
'fulldaystart',
'',
'',
'', 1,
'',
'',
'tzuserrel');
1397 print $form->selectDate($datep,
'ap', 1, 1, 1,
"action", 1, 2, 0,
'fulldaystart',
'',
'',
'', 1,
'',
'',
'tzuserrel');
1399 print
' <span class="hideonsmartphone"> - </span><br class="showonsmartphone"> ';
1400 print $form->selectDate($datef,
'p2', 1, 1, 1,
"action", 1, 2, 0,
'fulldayend',
'',
'',
'', 1,
'',
'',
'tzuserrel');
1403 print
'<tr><td class=""> </td><td></td></tr>';
1406 print
'<tr><td class="tdtop nowrap"><span class="fieldrequired">'.$langs->trans(
"ActionAffectedTo").
'</span></td><td>';
1407 $listofuserid = array();
1408 $listofcontactid = array();
1409 $listofotherid = array();
1411 if (empty($donotclearsession)) {
1413 if ($assignedtouser) {
1414 $listofuserid[$assignedtouser] = array(
'id' => $assignedtouser,
'mandatory' => 0);
1417 $listofuserid[$assignedtouser][
'transparency'] = (GETPOSTISSET(
'transparency') ?
GETPOST(
'transparency',
'alpha') : 1);
1418 $_SESSION[
'assignedtouser'] = json_encode($listofuserid);
1420 if (!empty($_SESSION[
'assignedtouser'])) {
1421 $listofuserid = json_decode($_SESSION[
'assignedtouser'],
true);
1423 $firstelem = reset($listofuserid);
1424 if (isset($listofuserid[$firstelem[
'id']])) {
1425 $listofuserid[$firstelem[
'id']][
'transparency'] = (GETPOSTISSET(
'transparency') ?
GETPOST(
'transparency',
'alpha') : 0);
1428 print
'<div class="assignedtouser">';
1429 print $form->select_dolusers_forevent(($action ==
'create' ?
'add' :
'update'),
'assignedtouser', 1,
'', 0,
'',
'', 0, 0, 0,
'AND u.statut != 0', 1, $listofuserid, $listofcontactid, $listofotherid);
1435 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>';
1438 if (isModEnabled(
'category')) {
1440 print
'<tr><td>'.$langs->trans(
"Categories").
'</td><td>';
1441 $cate_arbo = $form->select_all_categories(Categorie::TYPE_ACTIONCOMM,
'',
'parent', 64, 0, 3);
1442 print
img_picto(
'',
'category').$form->multiselectarray(
'categories', $cate_arbo,
GETPOST(
'categories',
'array'),
'', 0,
'minwidth300 quatrevingtpercent widthcentpercentminusx', 0, 0);
1446 if (isModEnabled(
'resource')) {
1448 print
'<tr><td class="tdtop nowrap">'.$langs->trans(
"Resource").
'</td><td>';
1450 $listofresourceid = array();
1451 if (empty($donotclearsession)) {
1452 $assignedtoresource =
GETPOST(
"assignedtoresource");
1453 if ($assignedtoresource) {
1454 $listofresourceid[$assignedtoresource] = array(
'id' => $assignedtoresource,
'mandatory' => 0);
1456 $_SESSION[
'assignedtoresource'] = json_encode($listofresourceid);
1458 if (!empty($_SESSION[
'assignedtoresource'])) {
1459 $listofresourceid = json_decode($_SESSION[
'assignedtoresource'],
true);
1461 $firstelem = reset($listofresourceid);
1462 if (isset($listofresourceid[$firstelem[
'id']])) {
1463 $listofresourceid[$firstelem[
'id']][
'transparency'] = (GETPOSTISSET(
'transparency') ?
GETPOST(
'transparency',
'alpha') : 0);
1466 print
'<div class="assignedtoresource">';
1467 print $form->select_dolresources_forevent(($action ==
'create' ?
'add' :
'update'),
'assignedtoresource', 1,
'', 0,
'',
'', 0, 0, 0,
'AND u.statut != 0', 1, $listofresourceid);
1473 print
'<tr><td>'.$langs->trans(
"Status").
' / '.$langs->trans(
"Percentage").
'</td>';
1475 $percent = $complete !==
'' ? $complete : -1;
1476 if (GETPOSTISSET(
'status')) {
1478 } elseif (GETPOSTISSET(
'percentage')) {
1481 if ($complete ==
'0' ||
GETPOST(
"afaire") == 1) {
1483 } elseif ($complete == 100 ||
GETPOST(
"afaire") == 2) {
1487 $formactions->form_select_status_action(
'formaction', $percent, 1,
'complete', 0, 0,
'maxwidth200');
1493 print
'<br><hr><br>';
1496 print
'<table class="border centpercent">';
1498 if (isModEnabled(
"societe")) {
1500 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ActionOnCompany").
'</td><td>';
1504 print $societe->getNomUrl(1);
1505 print
'<input type="hidden" id="socid" name="socid" value="'.GETPOSTINT(
'socid').
'">';
1508 $events[] = array(
'method' =>
'getContacts',
'url' =>
dol_buildpath(
'/core/ajax/contacts.php?showempty=1&token='.
currentToken(), 1),
'htmlname' =>
'contactid',
'params' => array(
'add-customer-contact' =>
'disabled'));
1510 if (!empty($user->socid)) {
1511 print
img_picto(
'',
'company',
'class="paddingrightonly"').$form->select_company($user->socid,
'socid',
'', 1, 1, 0, $events, 0,
'minwidth300 widthcentpercentminusxx maxwidth500');
1513 print
img_picto(
'',
'company',
'class="paddingrightonly"').$form->select_company(
'',
'socid',
'',
'SelectThirdParty', 1, 0, $events, 0,
'minwidth300 widthcentpercentminusxx maxwidth500');
1519 print
'<tr><td class="nowrap">'.$langs->trans(
"ActionOnContact").
'</td><td>';
1520 $preselectedids =
GETPOST(
'socpeopleassigned',
'array:int');
1524 if ($origin ==
'contact') {
1530 $select_contact_default = 0;
1532 $select_contact_default = -1;
1534 print
img_picto(
'',
'contact',
'class="paddingrightonly"');
1536 if (
getDolGlobalString(
'CONTACT_USE_SEARCH_TO_SELECT') && $conf->use_javascript_ajax) {
1543 $conf->global->CONTACT_USE_SEARCH_TO_SELECT = 0;
1544 print $form->selectcontacts(GETPOSTISSET(
'socid') ?
GETPOSTINT(
'socid') : $select_contact_default, $preselectedids,
'socpeopleassigned[]', 1,
'',
'', 0,
'minwidth300 widthcentpercentminusxx maxwidth500', 0, 0, array(), false,
'multiple',
'contactid');
1545 $conf->global->CONTACT_USE_SEARCH_TO_SELECT = $sav;
1547 print $form->selectcontacts(GETPOSTISSET(
'socid') ?
GETPOSTINT(
'socid') : $select_contact_default, $preselectedids,
'socpeopleassigned[]', 1,
'',
'', 0,
'minwidth300 widthcentpercentminusxx maxwidth500', 0, 0, array(), false,
'multiple',
'contactid');
1554 if (isModEnabled(
'project')) {
1555 $langs->load(
"projects");
1559 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Project").
'</td><td id="project-input-container">';
1560 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1561 print $formproject->select_projects((
$object->socid > 0 ?
$object->socid : -1), $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500 widthcentpercentminusxx maxwidth500');
1563 print
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?socid='.(empty($societe->id) ?
'' : $societe->id).
'&action=create&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create').
'">';
1564 print
'<span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddProject").
'"></span></a>';
1565 $urloption =
'?action=create&donotclearsession=1';
1569 print
"\n".
'<script type="text/javascript">';
1570 print
'$(document).ready(function () {
1571 $("#projectid").change(function () {
1572 var url = "'.DOL_URL_ROOT.
'/projet/ajax/projects.php?mode=gettasks&socid="+$("#search_socid").val()+"&projectid="+$("#projectid").val();
1573 console.log("Call url to get new list of tasks: "+url);
1574 $.get(url, function(data) {
1576 if (data) $("#taskid").html(data).select2();
1580 print
'</script>'.
"\n";
1585 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Task").
'</td><td id="project-task-input-container" >';
1586 print
img_picto(
'',
'projecttask',
'class="paddingrightonly"');
1587 $projectsListId =
false;
1588 if (!empty($projectid)) {
1589 $projectsListId = $projectid;
1592 $tid = GETPOSTISSET(
"projecttaskid") ?
GETPOSTINT(
"projecttaskid") : (GETPOSTISSET(
"taskid") ?
GETPOSTINT(
"taskid") :
'');
1594 $formproject->selectTasks((!empty($societe->id) ? $societe->id : -1), $tid,
'taskid', 24, 0,
'1', 1, 0, 0,
'maxwidth500 widthcentpercentminusxx', $projectsListId);
1599 if (!empty($origin) && !empty($originid)) {
1600 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
1602 $hasPermissionOnLinkedObject = 0;
1605 if ($user->hasRight($elProp[
'module'],
'read') || $user->hasRight($elProp[
'module'], $elProp[
'element'],
'read')) {
1606 $hasPermissionOnLinkedObject = 1;
1610 if (! in_array($origin, array(
'societe',
'project',
'task',
'user'))) {
1612 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"LinkedObject").
'</td>';
1613 print
'<td colspan="3">';
1614 if ($hasPermissionOnLinkedObject) {
1616 print
'<input type="hidden" name="fk_element" value="'.$originid.
'">';
1617 print
'<input type="hidden" name="elementtype" value="'.$origin.
'">';
1618 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1619 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1621 print
'<!-- no permission on object to link '.$origin.
' id '.$originid.
' -->';
1629 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"Priority").
'</td><td colspan="3">';
1630 print
'<input type="text" name="priority" value="'.(GETPOSTISSET(
'priority') ?
GETPOSTINT(
'priority') : (
$object->priority ?
$object->priority :
'')).
'" size="5">';
1635 print
'<tr><td class="tdtop">'.$langs->trans(
"Description").
'</td><td>';
1636 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1637 $doleditor =
new DolEditor(
'note', (GETPOSTISSET(
'note') ?
GETPOST(
'note',
'restricthtml') :
$object->note_private),
'', 120,
'dolibarr_notes',
'In', true, true, isModEnabled(
'fckeditor'), ROWS_4,
'90%');
1638 $doleditor->Create();
1642 $parameters = array();
1643 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
1644 print $hookmanager->resPrint;
1645 if (empty($reshook)) {
1646 print
$object->showOptionals($extrafields,
'create', $parameters);
1656 print
'<label for="addreminder">'.img_picto(
'',
'bell',
'class="pictofixedwidth"').$langs->trans(
"AddReminder").
'</label> <input type="checkbox" id="addreminder" name="addreminder"><br><br>';
1658 print
'<div class="reminderparameters" style="display: none;">';
1660 print
'<table class="border centpercent">';
1663 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ReminderTime").
'</td><td colspan="3">';
1664 print
'<input class="width50" type="number" name="offsetvalue" value="'.(GETPOSTISSET(
'offsetvalue') ?
GETPOSTINT(
'offsetvalue') :
getDolGlobalInt(
'AGENDA_REMINDER_DEFAULT_OFFSET', 30)).
'"> ';
1665 print $form->selectTypeDuration(
'offsetunit',
'i', array(
'y',
'm'));
1669 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ReminderType").
'</td><td colspan="3">';
1670 print $form->selectarray(
'selectremindertype', $TRemindTypes,
'', 0, 0, 0,
'', 0, 0, 0,
'',
'minwidth200 maxwidth500', 1);
1675 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"EMailTemplates").
'</td><td colspan="3">';
1676 print $form->selectModelMail(
'actioncommsend',
'actioncomm_send', 1, 1);
1683 print
"\n".
'<script type="text/javascript">';
1684 print
'$(document).ready(function () {
1685 $("#addreminder").click(function(){
1686 console.log("Click on addreminder");
1688 $(".reminderparameters").show();
1690 $(".reminderparameters").hide();
1692 $("#selectremindertype").select2("destroy");
1693 $("#selectremindertype").select2();
1694 $("#select_offsetunittype_duration").select2("destroy");
1695 $("#select_offsetunittype_duration").select2();
1696 selectremindertype();
1699 $("#selectremindertype").change(function(){
1700 selectremindertype();
1703 function selectremindertype() {
1704 console.log("Call selectremindertype");
1705 var selected_option = $("#selectremindertype option:selected").val();
1706 if(selected_option == "email") {
1707 $("#select_actioncommsendmodel_mail").closest("tr").show();
1709 $("#select_actioncommsendmodel_mail").closest("tr").hide();
1714 print
'</script>'.
"\n";
1719 print $form->buttonsSaveCancel(
"Add");
1726 $result1 =
$object->fetch($id);
1727 if ($result1 <= 0) {
1728 $langs->load(
"errors");
1729 print $langs->trans(
"ErrorRecordNotFound");
1735 $result2 =
$object->fetch_thirdparty();
1736 $result2 =
$object->fetch_projet();
1737 $result3 =
$object->fetch_contact();
1738 $result4 =
$object->fetch_userassigned();
1739 $result5 =
$object->fetch_optionals();
1741 if ($listUserAssignedUpdated || $donotclearsession) {
1742 $percentage = in_array(
GETPOST(
'status'), array(-1, 100)) ?
GETPOST(
'status') : (in_array($complete, array(-1, 100)) ? $complete :
GETPOSTINT(
"percentage"));
1751 $object->percentage = $percentage;
1756 $socpeopleassigned =
GETPOST(
"socpeopleassigned",
'array');
1757 foreach ($socpeopleassigned as $tmpid) {
1758 $object->socpeopleassigned[$id] = array(
'id' => $tmpid);
1766 if ($result2 < 0 || $result3 < 0 || $result4 < 0 || $result5 < 0) {
1772 $tmpuser =
new User($db);
1773 $res = $tmpuser->fetch(
$object->authorid);
1777 $tmpuser =
new User($db);
1778 $res = $tmpuser->fetch(
$object->usermodid);
1790 $delay_warning =
getDolGlobalInt(
'MAIN_DELAY_ACTIONS_TODO') * 24 * 60 * 60;
1794 if ($action ==
'delete') {
1795 print $form->formconfirm(
"card.php?id=".urlencode((
string) ($id)), $langs->trans(
"DeleteAction"), $langs->trans(
"ConfirmDeleteAction"),
"confirm_delete",
'',
'', 1);
1798 if ($action ==
'edit') {
1799 if (!empty($conf->use_javascript_ajax)) {
1800 print
"\n".
'<script type="text/javascript">';
1801 print
'$(document).ready(function () {
1802 function setdatefields()
1804 if ($("#fullday:checked").val() == null) {
1805 $(".fulldaystarthour").removeAttr("disabled");
1806 $(".fulldaystartmin").removeAttr("disabled");
1807 $(".fulldayendhour").removeAttr("disabled");
1808 $(".fulldayendmin").removeAttr("disabled");
1810 $(".fulldaystarthour").prop("disabled", true).val("00");
1811 $(".fulldaystartmin").prop("disabled", true).val("00");
1812 $(".fulldayendhour").prop("disabled", true).val("23");
1813 $(".fulldayendmin").prop("disabled", true).val("59");
1817 $("#fullday").change(function() {
1820 $("#actioncode").change(function() {
1821 if ($("#actioncode").val() == \'AC_RDV\') $("#dateend").addClass("fieldrequired");
1822 else $("#dateend").removeClass("fieldrequired");
1825 print
'</script>'.
"\n";
1828 print
'<form name="formaction" action="'.$_SERVER[
'PHP_SELF'].
'" method="POST">';
1829 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1830 print
'<input type="hidden" name="action" value="update">';
1831 print
'<input type="hidden" name="id" value="'.$id.
'">';
1832 print
'<input type="hidden" name="ref_ext" value="'.$object->ref_ext.
'">';
1833 print
'<input type="hidden" name="page_y" value="">';
1835 print
'<input type="hidden" name="backtopage" value="'.($backtopage !=
'1' ? $backtopage :
'').
'">';
1838 print
'<input type="hidden" name="actioncode" value="'.$object->type_code.
'">';
1843 print
'<table class="border tableforfield" width="100%">';
1846 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Ref").
'</td><td colspan="3">'.
$object->id.
'</td></tr>';
1850 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Type").
'</td><td colspan="3">';
1851 if (
$object->type_code !=
'AC_OTH_AUTO') {
1852 print
img_picto($langs->trans(
"ActionType"),
'square',
'class="fawidth30 inline-block" style="color: #ddd;"');
1853 print $formactions->select_type_actions(
GETPOST(
"actioncode",
'aZ09') ?
GETPOST(
"actioncode",
'aZ09') :
$object->type_code,
"actioncode",
"systemauto", 0, 0, 0, 1);
1855 print
'<input type="hidden" name="actioncode" value="'.$object->type_code.
'">';
1856 print
$object->getTypePicto();
1857 print $langs->trans(
"Action".
$object->type_code);
1863 if (
$object->elementtype ==
'ticket') {
1864 print
'<tr><td>'.$langs->trans(
"MarkMessageAsPrivate");
1865 print
' '.$form->textwithpicto(
'', $langs->trans(
"TicketMessagePrivateHelp"), 1,
'help');
1866 print
'</td><td colspan="3"><input type="checkbox" id="private" name="private" '.(preg_match(
'/^TICKET_MSG_PRIVATE/',
$object->code) ?
' checked' :
'').
'></td></tr>';
1870 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>';
1873 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' :
'').
'>';
1874 print
'<label for="fullday">'.$langs->trans(
"EventOnFullDay").
'</label>';
1937 print
'<tr><td class="nowrap">';
1942 print
'</td><td td colspan="3">';
1944 print $form->selectDate($datep ? $datep :
$object->datep,
'ap', 1, 1, 0,
"action", 1, 2, 0,
'fulldaystart',
'',
'',
'', 1,
'',
'',
$object->fulldayevent ? ($tzforfullday ? $tzforfullday :
'tzuserrel') :
'tzuserrel');
1945 print
' <span class="hideonsmartphone"> - </span> ';
1946 print $form->selectDate($datef ? $datef :
$object->datef,
'p2', 1, 1, 1,
"action", 1, 2, 0,
'fulldayend',
'',
'',
'', 1,
'',
'',
$object->fulldayevent ? ($tzforfullday ? $tzforfullday :
'tzuserrel') :
'tzuserrel');
1949 print
'<tr><td class=""> </td><td></td></tr>';
1952 $listofuserid = array();
1953 if (empty($donotclearsession)) {
1954 if (
$object->userownerid > 0) {
1955 $listofuserid[
$object->userownerid] = array(
1959 'transparency' =>
$object->transparency,
1960 'answer_status' =>
$object->userassigned[
$object->userownerid][
'answer_status'],
1961 'mandatory' =>
$object->userassigned[
$object->userownerid][
'mandatory']
1964 if (!empty(
$object->userassigned)) {
1966 $tmplist1 =
$object->userassigned;
1967 foreach ($tmplist1 as $key => $val) {
1968 if ($val[
'id'] && $val[
'id'] !=
$object->userownerid) {
1969 $listofuserid[$val[
'id']] = $val;
1973 $_SESSION[
'assignedtouser'] = json_encode($listofuserid);
1975 if (!empty($_SESSION[
'assignedtouser'])) {
1976 $listofuserid = json_decode($_SESSION[
'assignedtouser'],
true);
1980 $listofcontactid =
$object->socpeopleassigned;
1981 $listofotherid =
$object->otherassigned;
1983 print
'<tr><td class="tdtop nowrap fieldrequired">'.$langs->trans(
"ActionAssignedTo").
'</td><td colspan="3">';
1984 print
'<div class="assignedtouser">';
1985 print $form->select_dolusers_forevent(($action ==
'create' ?
'add' :
'update'),
'assignedtouser', 1,
'', 0,
'',
'', 0, 0, 0,
'AND u.statut != 0', 1, $listofuserid, $listofcontactid, $listofotherid);
1997 print
'<tr><td>'.$langs->trans(
"Location").
'</td><td colspan="3"><input type="text" name="location" class="minwidth300 maxwidth150onsmartphone" value="'.
$object->location.
'"></td></tr>';
2001 print
'<tr><td class="nowrap">'.$langs->trans(
"Status").
' / '.$langs->trans(
"Percentage").
'</td><td colspan="3">';
2002 $percent = GETPOSTISSET(
"percentage") ?
GETPOSTINT(
"percentage") :
$object->percentage;
2003 $formactions->form_select_status_action(
'formaction', $percent, 1,
'complete', 0, 0,
'maxwidth200');
2007 if (isModEnabled(
'category')) {
2008 print
'<tr><td>'.$langs->trans(
"Categories").
'</td><td colspan="3">';
2009 $cate_arbo = $form->select_all_categories(Categorie::TYPE_ACTIONCOMM,
'',
'parent', 64, 0, 3);
2011 $cats = $c->containing(
$object->id, Categorie::TYPE_ACTIONCOMM);
2012 $arrayselected = array();
2013 foreach ($cats as $cat) {
2014 $arrayselected[] = $cat->id;
2016 print
img_picto(
'',
'category').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected,
'', 0,
'quatrevingtpercent widthcentpercentminusx', 0, 0);
2023 print
'<br><hr><br>';
2026 print
'<table class="border tableforfield centpercent">';
2028 if (isModEnabled(
"societe")) {
2030 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"ActionOnCompany").
'</td>';
2034 $events[] = array(
'method' =>
'getContacts',
'url' =>
dol_buildpath(
'/core/ajax/contacts.php?showempty=1&token='.
currentToken(), 1),
'htmlname' =>
'contactid',
'params' => array(
'add-customer-contact' =>
'disabled'));
2037 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company(
$object->socid,
'socid',
'',
'SelectThirdParty', 1, 0, $events, 0,
'minwidth300');
2042 print
'<tr><td>'.$langs->trans(
"ActionOnContact").
'</td><td>';
2043 print
'<div class="maxwidth200onsmartphone">';
2044 print
img_picto(
'',
'contact',
'class="paddingrightonly"');
2045 if (
getDolGlobalString(
'CONTACT_USE_SEARCH_TO_SELECT') && $conf->use_javascript_ajax) {
2052 $conf->global->CONTACT_USE_SEARCH_TO_SELECT = 0;
2053 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');
2054 $conf->global->CONTACT_USE_SEARCH_TO_SELECT = $sav;
2057 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');
2065 if (isModEnabled(
'project')) {
2066 $langs->load(
"projects");
2068 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Project").
'</td><td>';
2069 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
2070 $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');
2071 if ($numprojet == 0) {
2072 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>';
2079 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"Priority").
'</td><td>';
2080 print
'<input type="text" name="priority" value="'.($object->priority ?
$object->priority :
'').
'" size="5">';
2085 if (!empty(
$object->fk_element) && !empty(
$object->elementtype)) {
2086 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2088 print
'<td>'.$langs->trans(
"LinkedObject").
'</td>';
2090 if (
$object->elementtype ==
'task' && isModEnabled(
'project')) {
2091 print
'<td id="project-task-input-container" >';
2093 $urloption =
'?action=create&donotclearsession=1';
2094 $url = DOL_URL_ROOT.
'/comm/action/card.php'.$urloption;
2097 print
"\n".
'<script type="text/javascript" >';
2098 print
'$(document).ready(function () {
2099 $("#projectid").change(function () {
2100 var url = "'.$url.
'&projectid="+$("#projectid").val();
2101 $.get(url, function(data) {
2102 console.log($( data ).find("#fk_element").html());
2103 if (data) $("#fk_element").html( $( data ).find("#taskid").html() ).select2();
2107 print
'</script>'.
"\n";
2109 $formproject->selectTasks((!empty($societe->id) ? $societe->id : -1),
$object->fk_element,
'fk_element', 24, 0, 0, 1, 0, 0,
'maxwidth500',
$object->fk_project);
2110 print
'<input type="hidden" name="elementtype" value="'.$object->elementtype.
'">';
2116 print
'<input type="hidden" name="fk_element" value="'.$object->fk_element.
'">';
2117 print
'<input type="hidden" name="elementtype" value="'.$object->elementtype.
'">';
2125 print
'<tr><td class="tdtop">'.$langs->trans(
"Description").
'</td><td>';
2127 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
2128 $doleditor =
new DolEditor(
'note',
$object->note_private,
'', 120,
'dolibarr_notes',
'In',
true,
true, isModEnabled(
'fckeditor'), ROWS_4,
'90%');
2129 $doleditor->Create();
2133 $parameters = array();
2134 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
2135 print $hookmanager->resPrint;
2136 if (empty($reshook)) {
2137 print
$object->showOptionals($extrafields,
'edit', $parameters);
2144 $filteruserid = $user->id;
2145 if ($user->hasRight(
'agenda',
'allactions',
'read')) {
2148 $object->loadReminders(
'', $filteruserid,
false);
2152 if (count(
$object->reminders) > 0) {
2153 $checked =
'checked';
2154 $keys = array_keys(
$object->reminders);
2155 $firstreminderId = array_shift($keys);
2157 $actionCommReminder =
$object->reminders[$firstreminderId];
2161 $actionCommReminder->offsetvalue =
getDolGlobalInt(
'AGENDA_REMINDER_DEFAULT_OFFSET', 30);
2162 $actionCommReminder->offsetunit =
'i';
2163 $actionCommReminder->typeremind =
'email';
2170 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>';
2172 print
'<div class="reminderparameters" '.(empty($checked) ?
'style="display: none;"' :
'').
'>';
2176 print
'<table class="border centpercent">';
2179 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ReminderTime").
'</td><td colspan="3">';
2180 print
'<input type="number" name="offsetvalue" class="width50" value="'.$actionCommReminder->offsetvalue.
'"> ';
2181 print $form->selectTypeDuration(
'offsetunit', $actionCommReminder->offsetunit, array(
'y',
'm'));
2185 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"ReminderType").
'</td><td colspan="3">';
2186 print $form->selectarray(
'selectremindertype', $TRemindTypes, $actionCommReminder->typeremind, 0, 0, 0,
'', 0, 0, 0,
'',
'minwidth200', 1);
2190 if ($actionCommReminder->typeremind ==
'browser') {
2191 $hide =
'style="display:none;"';
2196 print
'<tr '.$hide.
'><td class="titlefieldcreate nowrap">'.$langs->trans(
"EMailTemplates").
'</td><td colspan="3">';
2197 print $form->selectModelMail(
'actioncommsend',
'actioncomm_send', 1, 1);
2203 print
"\n".
'<script type="text/javascript">';
2204 print
'$(document).ready(function () {
2205 $("#addreminder").click(function(){
2207 $(".reminderparameters").show();
2209 $(".reminderparameters").hide();
2213 $("#selectremindertype").change(function(){
2214 var selected_option = $("#selectremindertype option:selected").val();
2215 if(selected_option == "email") {
2216 $("#select_actioncommsendmodel_mail").closest("tr").show();
2218 $("#select_actioncommsendmodel_mail").closest("tr").hide();
2223 print
'</script>'.
"\n";
2230 print $form->buttonsSaveCancel();
2239 if ($action ==
'clone') {
2240 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
GETPOST(
'id'), $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneEvent',
$object->label),
'confirm_clone', array(),
'yes', 1);
2244 $parameters = array();
2245 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
2246 if (empty($reshook)) {
2247 $formconfirm .= $hookmanager->resPrint;
2248 } elseif ($reshook > 0) {
2249 $formconfirm = $hookmanager->resPrint;
2257 $linkback .=
'<a href="'.DOL_URL_ROOT.
'/comm/action/list.php?mode=show_list&restore_lastsearch_values=1">';
2258 $linkback .=
img_picto($langs->trans(
"BackToList"),
'object_calendarlist',
'class="pictoactionview pictofixedwidth"');
2259 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"BackToList").
'</span>';
2260 $linkback .=
'</a>';
2261 $linkback .=
'</li>';
2262 $linkback .=
'<li class="noborder litext">';
2264 $linkback .=
img_picto($langs->trans(
"ViewCal"),
'object_calendar',
'class="pictoactionview pictofixedwidth"');
2265 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"ViewCal").
'</span>';
2266 $linkback .=
'</a>';
2267 $linkback .=
'</li>';
2268 $linkback .=
'<li class="noborder litext">';
2270 $linkback .=
img_picto($langs->trans(
"ViewWeek"),
'object_calendarweek',
'class="pictoactionview pictofixedwidth"');
2271 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"ViewWeek").
'</span>';
2272 $linkback .=
'</a>';
2273 $linkback .=
'</li>';
2274 $linkback .=
'<li class="noborder litext">';
2276 $linkback .=
img_picto($langs->trans(
"ViewDay"),
'object_calendarday',
'class="pictoactionview pictofixedwidth"');
2277 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"ViewDay").
'</span>';
2278 $linkback .=
'</a>';
2279 $linkback .=
'</li>';
2280 $linkback .=
'<li class="noborder litext">';
2282 $linkback .=
img_picto($langs->trans(
"ViewPerUser"),
'object_calendarperuser',
'class="pictoactionview pictofixedwidth"');
2283 $linkback .=
'<span class="hideonsmartphone">'.$langs->trans(
"ViewPerUser").
'</span>';
2284 $linkback .=
'</a>';
2287 $parameters = array();
2288 $reshook = $hookmanager->executeHooks(
'addCalendarView', $parameters,
$object, $action);
2289 if (empty($reshook)) {
2290 $linkback .= $hookmanager->resPrint;
2291 } elseif ($reshook > 1) {
2292 $linkback = $hookmanager->resPrint;
2297 $morehtmlref =
'<div class="refidno">';
2301 if (isModEnabled(
'project')) {
2302 $langs->load(
"projects");
2304 if ($usercancreate) {
2305 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2306 if ($action !=
'classify') {
2307 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2309 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
2311 if (!empty(
$object->fk_project)) {
2313 $proj->fetch(
$object->fk_project);
2314 $morehtmlref .= $proj->getNomUrl(1);
2316 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2321 $morehtmlref .=
'</div>';
2324 dol_banner_tab(
$object,
'id', $linkback, ($user->socid ? 0 : 1),
'id',
'ref', $morehtmlref);
2326 print
'<div class="fichecenter">';
2327 print
'<div class="fichehalfleft">';
2329 print
'<div class="underbanner clearboth"></div>';
2332 print
'<table class="border tableforfield centpercent">';
2336 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
2337 $labeltoshow = $langs->trans(
"Action".
$object->type_code);
2339 $labeltoshow .=
' ('.$object->code.
')';
2341 print
$object->getTypePicto(
'pictofixedwidth paddingright', $labeltoshow);
2342 print $langs->trans(
"Action".
$object->type_code);
2347 print
'<tr><td class="titlefield">'.$langs->trans(
"EventOnFullDay").
'</td><td>'.
yn(
$object->fulldayevent ? 1 : 0, 3).
'</td></tr>';
2351 print
'<tr><td class="titlefield">'.$langs->trans(
"EventIntoASerie").
'</td><td>'.
dol_escape_htmltag(
$object->recurid).
'</td></tr>';
2360 print
'<tr><td>'.$langs->trans(
"DateActionStart").
'</td><td>';
2365 if (empty(
$object->fulldayevent)) {
2378 print
'<tr><td>'.$langs->trans(
"DateActionEnd").
'</td><td>';
2379 if (empty(
$object->fulldayevent)) {
2392 print
'<tr><td>'.$langs->trans(
"Location").
'</td><td>'.
$object->location.
'</td></tr>';
2396 print
'<tr><td class="nowrap">'.$langs->trans(
"ActionAssignedTo").
'</td><td>';
2397 $listofuserid = array();
2398 if (empty($donotclearsession)) {
2399 if (
$object->userownerid > 0) {
2400 $listofuserid[
$object->userownerid] = array(
2402 'transparency' =>
$object->transparency,
2403 'answer_status' =>
$object->userassigned[
$object->userownerid][
'answer_status'],
2404 'mandatory' =>
$object->userassigned[
$object->userownerid][
'mandatory']
2407 if (!empty(
$object->userassigned)) {
2409 $tmplist1 =
$object->userassigned;
2410 foreach ($tmplist1 as $key => $val) {
2411 if ($val[
'id'] && $val[
'id'] !=
$object->userownerid) {
2412 $listofuserid[$val[
'id']] = $val;
2416 $_SESSION[
'assignedtouser'] = json_encode($listofuserid);
2418 if (!empty($_SESSION[
'assignedtouser'])) {
2419 $listofuserid = json_decode($_SESSION[
'assignedtouser'],
true);
2423 $listofcontactid = array();
2424 $listofotherid = array();
2425 print
'<div class="assignedtouser">';
2426 print $form->select_dolusers_forevent(
'view',
'assignedtouser', 1,
'', 0,
'',
'', 0, 0, 0,
'', (
$object->datep !=
$object->datef) ? 1 : 0, $listofuserid, $listofcontactid, $listofotherid);
2436 print
' </td></tr>';
2439 if (isModEnabled(
'category')) {
2440 print
'<tr><td class="valignmiddle">'.$langs->trans(
"Categories").
'</td><td>';
2441 print $form->showCategories(
$object->id, Categorie::TYPE_ACTIONCOMM, 1);
2449 print
'<div class="fichehalfright">';
2451 print
'<div class="underbanner clearboth"></div>';
2452 print
'<table class="border tableforfield centpercent">';
2454 if (isModEnabled(
"societe")) {
2456 print
'<tr><td class="titlefield">'.$langs->trans(
"ActionOnCompany").
'</td>';
2457 print
'<td>'.(is_object(
$object->thirdparty) &&
$object->thirdparty->id ?
$object->thirdparty->getNomUrl(1) : (
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>'));
2458 if (is_object(
$object->thirdparty) &&
$object->thirdparty->id > 0 &&
$object->type_code ==
'AC_TEL') {
2460 print
"<br>".dol_print_phone(
$object->thirdparty->phone);
2466 print
'<tr><td>'.$langs->trans(
"ActionOnContact").
'</td>';
2469 if (!empty(
$object->socpeopleassigned)) {
2470 foreach (
$object->socpeopleassigned as $cid => $Tab) {
2472 $result = $contact->fetch($cid);
2479 print $contact->getNomUrl(1);
2480 if (
$object->type_code ==
'AC_TEL') {
2481 if (!empty($contact->phone_pro)) {
2482 print
'('.dol_print_phone($contact->phone_pro).
')';
2485 print
'<div class="paddingright"></div>';
2489 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
2496 print
'<tr><td class="nowrap" class="titlefield">' . $langs->trans(
"Priority") .
'</td><td>';
2503 if (!empty(
$object->fk_element) && !empty(
$object->elementtype) && !in_array(
$object->elementtype, array(
'societe',
'contact',
'project'))) {
2504 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2505 print
'<tr><td>'.$langs->trans(
"LinkedObject").
'</td>';
2509 print
'<span class="opacitymedium">'.$langs->trans(
"ObjectDeleted").
'</span>';
2517 if (!empty(
$object->email_msgid)) {
2518 print
'<tr><td>'.$langs->trans(
'MailTopic').
'</td>';
2519 print
'<td>'.dol_escape_htmltag(
$object->email_subject).
'</td></tr>';
2520 print
'<tr><td>'.$langs->trans(
'MailFrom').
'</td>';
2521 print
'<td>'.dol_escape_htmltag(
$object->email_from).
'</td></tr>';
2522 print
'<tr><td>'.$langs->trans(
'MailTo').
'</td>';
2523 print
'<td>'.dol_escape_htmltag(
$object->email_to).
'</td></tr>';
2524 if (!empty(
$object->email_tocc)) {
2525 print
'<tr><td>'.$langs->trans(
'MailCC').
'</td>';
2526 print
'<td>'.dol_escape_htmltag(
$object->email_tocc).
'</td></tr>';
2531 print
'<tr><td class="tdtop">'.$langs->trans(
"Description").
'</td><td class="wordbreak sensiblehtmlcontent">';
2536 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2540 $filteruserid = $user->id;
2541 if ($user->hasRight(
'agenda',
'allactions',
'read')) {
2544 $object->loadReminders(
'', $filteruserid,
false);
2546 print
'<tr><td class="titlefieldcreate nowrap">'.$langs->trans(
"Reminders").
'</td><td>';
2548 if (count(
$object->reminders) > 0) {
2549 $tmpuserstatic =
new User($db);
2551 foreach (
$object->reminders as $actioncommreminderid => $actioncommreminder) {
2552 print $TRemindTypes[$actioncommreminder->typeremind][
'label'];
2553 if ($actioncommreminder->fk_user > 0) {
2554 $tmpuserstatic->fetch($actioncommreminder->fk_user);
2555 print
' ('.$tmpuserstatic->getNomUrl(0,
'', 0, 0, 16).
')';
2557 print
' - '.$actioncommreminder->offsetvalue.
' '.$TDurationTypes[$actioncommreminder->offsetunit];
2559 if ($actioncommreminder->status == $actioncommreminder::STATUS_TODO) {
2560 print
' - <span class="opacitymedium">';
2561 print $langs->trans(
"NotSent");
2563 } elseif ($actioncommreminder->status == $actioncommreminder::STATUS_DONE) {
2564 print
' - <span class="opacitymedium">';
2565 print $langs->trans(
"Done");
2567 } elseif ($actioncommreminder->status == $actioncommreminder::STATUS_ERROR) {
2568 print
' - <span class="opacitymedium">';
2569 print $form->textwithpicto($langs->trans(
"Error"), $actioncommreminder->lasterror);
2583 print
'<div class="clearboth"></div>';
2592 print
'<div class="tabsAction">';
2594 $parameters = array();
2595 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
2596 if (empty($reshook)) {
2597 if ($action !=
'edit') {
2598 if ($user->hasRight(
'agenda',
'allactions',
'create') ||
2599 ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'create'))) {
2600 print
'<div class="inline-block divButAction"><a class="butAction" href="card.php?action=edit&token='.newToken().
'&id='.
$object->id.
'">'.$langs->trans(
"Modify").
'</a></div>';
2602 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"Modify").
'</a></div>';
2605 if ($user->hasRight(
'agenda',
'allactions',
'create') ||
2606 ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'create'))) {
2607 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>';
2609 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"ToClone").
'</a></div>';
2612 if ($user->hasRight(
'agenda',
'allactions',
'delete') ||
2613 ((
$object->authorid == $user->id ||
$object->userownerid == $user->id) && $user->hasRight(
'agenda',
'myactions',
'delete'))) {
2614 print
'<div class="inline-block divButAction"><a class="butActionDelete" href="card.php?action=delete&token='.newToken().
'&id='.
$object->id.
'">'.$langs->trans(
"Delete").
'</a></div>';
2616 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"Delete").
'</a></div>';
2623 if ($action !=
'edit') {
2625 print
'<div class="clearboth"></div><div class="fichecenter"><div class="fichehalfleft">';
2626 print
'<a name="builddoc"></a>';
2632 $filedir = $conf->agenda->multidir_output[$conf->entity].
'/'.
$object->id;
2633 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2635 $genallowed = $user->hasRight(
'agenda',
'myactions',
'read');
2636 $delallowed = $user->hasRight(
'agenda',
'myactions',
'create');
2639 print $formfile->showdocuments(
'actions',
$object->id, $filedir, $urlsource, $genallowed, $delallowed,
'', 0, 0, 0, 0, 0,
'',
'',
'', $langs->getDefaultLang());
2641 print
'</div><div class="fichehalfright">';
2644 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.