29require
"../../main.inc.php";
37require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/lib/project.lib.php';
41require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
44$langs->loadLangs(array(
'projects',
'companies'));
46$action =
GETPOST(
'action',
'aZ09');
47$confirm =
GETPOST(
'confirm',
'alpha');
52$project_ref =
GETPOST(
'project_ref',
'alpha');
55$projectstatic =
new Project($db);
57$hookmanager->initHooks(array(
'projecttaskcontact',
'globalcard'));
74$parameters = array(
'projectid' =>
$object->fk_project);
75$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
77 setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
82 if ($action ==
'addcontact' && $user->hasRight(
'projet',
'creer')) {
84 if (
GETPOST(
"addsourceexternal")) {
88 $result =
$object->fetch($id, $ref);
90 if ($result > 0 && $id > 0) {
91 if ($source ==
'internal') {
96 $typeid =
GETPOST(
'typecontact');
98 if ($idfortaskuser == -2) {
99 $result = $projectstatic->fetch(
$object->fk_project);
101 dol_print_error($db, $projectstatic->error, $projectstatic->errors);
103 $contactsofproject = $projectstatic->getListContactId(
'internal');
104 foreach ($contactsofproject as $key => $val) {
105 $result =
$object->add_contact($val, $typeid, $source);
109 $result =
$object->add_contact($idfortaskuser, $typeid, $source);
114 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id.($withproject ?
'&withproject=1' :
''));
117 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
118 $langs->load(
"errors");
119 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
127 if ($action ==
'swapstatut' && $user->hasRight(
'projet',
'creer')) {
128 if (
$object->fetch($id, $ref)) {
131 dol_print_error($db);
136 if ($action ==
'deleteline' && $user->hasRight(
'projet',
'creer')) {
141 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id.($withproject ?
'&withproject=1' :
''));
144 dol_print_error($db);
149 if (!empty($project_ref) && !empty($withproject)) {
150 if ($projectstatic->fetch(0, $project_ref) > 0) {
151 $tasksarray =
$object->getTasksArray(
null,
null, $projectstatic->id, $socid, 0);
152 if (count($tasksarray) > 0) {
153 $id = $tasksarray[0]->id;
155 header(
"Location: ".DOL_URL_ROOT.
'/projet/tasks.php?id='.$projectstatic->id.($withproject ?
'&withproject=1' :
'').(empty($mode) ?
'' :
'&mode='.$mode));
165$form =
new Form($db);
167$contactstatic =
new Contact($db);
168$userstatic =
new User($db);
169$result = $projectstatic->fetch(
$object->fk_project);
171$title =
$object->ref .
' - ' . $langs->trans(
"Contacts");
172if (!empty($withproject)) {
173 $title .=
' | ' . $langs->trans(
"Project") . (!empty($projectstatic->ref) ?
': '.$projectstatic->ref :
'') ;
177llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-project project-tasks page-task_contact');
186if ($id > 0 || !empty($ref)) {
187 if (
$object->fetch($id, $ref) > 0) {
193 if (
getDolGlobalString(
'PROJECT_ALLOW_COMMENT_ON_PROJECT') && method_exists($projectstatic,
'fetchComments') && empty($projectstatic->comments)) {
194 $projectstatic->fetchComments();
196 if (!empty($projectstatic->socid)) {
197 $projectstatic->fetch_thirdparty();
200 $object->project = clone $projectstatic;
202 $userWrite = $projectstatic->restrictedProjectArea($user,
'write');
208 print
dol_get_fiche_head($head, $tab, $langs->trans(
"Project"), -1, ($projectstatic->public ?
'projectpub' :
'project'));
210 $param = (!empty($mode) && $mode ==
'mine' ?
'&mode=mine' :
'');
214 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
216 $morehtmlref =
'<div class="refidno">';
218 $morehtmlref .= $projectstatic->title;
220 if (isset($projectstatic->thirdparty->id) && $projectstatic->thirdparty->id > 0) {
221 $morehtmlref .=
'<br>'.$projectstatic->thirdparty->getNomUrl(1,
'project');
223 $morehtmlref .=
'</div>';
226 if (!$user->hasRight(
'projet',
'all',
'lire')) {
227 $objectsListId = $projectstatic->getProjectsAuthorizedForUser($user, 0, 0);
228 $projectstatic->next_prev_filter =
"rowid:IN:".$db->sanitize(count($objectsListId) ? implode(
',', array_keys($objectsListId)) :
'0');
231 dol_banner_tab($projectstatic,
'project_ref', $linkback, 1,
'ref',
'ref', $morehtmlref, $param);
233 print
'<div class="fichecenter">';
234 print
'<div class="fichehalfleft">';
235 print
'<div class="underbanner clearboth"></div>';
237 print
'<table class="border tableforfield centpercent">';
241 print
'<tr><td class="tdtop">';
242 print $langs->trans(
"Usage");
246 print
'<input type="checkbox" disabled name="usage_opportunity"'.(GETPOSTISSET(
'usage_opportunity') ? (
GETPOST(
'usage_opportunity',
'alpha') !=
'' ?
' checked="checked"' :
'') : ($projectstatic->usage_opportunity ?
' checked="checked"' :
'')).
'"> ';
247 $htmltext = $langs->trans(
"ProjectFollowOpportunity");
248 print $form->textwithpicto($langs->trans(
"ProjectFollowOpportunity"), $htmltext);
252 print
'<input type="checkbox" disabled name="usage_task"'.(GETPOSTISSET(
'usage_task') ? (
GETPOST(
'usage_task',
'alpha') !=
'' ?
' checked="checked"' :
'') : ($projectstatic->usage_task ?
' checked="checked"' :
'')).
'"> ';
253 $htmltext = $langs->trans(
"ProjectFollowTasks");
254 print $form->textwithpicto($langs->trans(
"ProjectFollowTasks"), $htmltext);
258 print
'<input type="checkbox" disabled name="usage_bill_time"'.(GETPOSTISSET(
'usage_bill_time') ? (
GETPOST(
'usage_bill_time',
'alpha') !=
'' ?
' checked="checked"' :
'') : ($projectstatic->usage_bill_time ?
' checked="checked"' :
'')).
'"> ';
259 $htmltext = $langs->trans(
"ProjectBillTimeDescription");
260 print $form->textwithpicto($langs->trans(
"BillTime"), $htmltext);
264 print
'<input type="checkbox" disabled name="usage_organize_event"'.(GETPOSTISSET(
'usage_organize_event') ? (
GETPOST(
'usage_organize_event',
'alpha') !=
'' ?
' checked="checked"' :
'') : ($projectstatic->usage_organize_event ?
' checked="checked"' :
'')).
'"> ';
265 $htmltext = $langs->trans(
"EventOrganizationDescriptionLong");
266 print $form->textwithpicto($langs->trans(
"ManageOrganizeEvent"), $htmltext);
272 print
'<tr><td>'.$langs->trans(
"Budget").
'</td><td>';
273 if (isset($projectstatic->budget_amount) && strcmp($projectstatic->budget_amount,
'')) {
274 print
'<span class="amount">'.price($projectstatic->budget_amount, 0, $langs, 1, 0, 0,
$conf->currency).
'</span>';
279 print
'<tr><td>'.$langs->trans(
"Dates").
'</td><td>';
281 print($start ? $start :
'?');
284 print($end ? $end :
'?');
285 if ($projectstatic->hasDelay()) {
286 print img_warning(
"Late");
291 print
'<tr><td class="titlefield">'.$langs->trans(
"Visibility").
'</td><td>';
292 if ($projectstatic->public) {
293 print img_picto($langs->trans(
'SharedProject'),
'world',
'class="paddingrightonly"');
294 print $langs->trans(
'SharedProject');
296 print img_picto($langs->trans(
'PrivateProject'),
'private',
'class="paddingrightonly"');
297 print $langs->trans(
'PrivateProject');
305 include DOL_DOCUMENT_ROOT .
'/core/tpl/extrafields_view.tpl.php';
311 print
'<div class="fichehalfright">';
312 print
'<div class="underbanner clearboth"></div>';
314 print
'<table class="border tableforfield centpercent">';
318 print
'<tr><td class="valignmiddle">'.$langs->trans(
"Categories").
'</td><td>';
319 print $form->showCategories($projectstatic->id,
'project', 1);
324 print
'<tr><td class="titlefield'.($projectstatic->description ?
' noborderbottom' :
'').
'" colspan="2">'.$langs->trans(
"Description").
'</td></tr>';
325 if ($projectstatic->description) {
326 print
'<tr><td class="nottitleforfield" colspan="2">';
327 print
'<div class="longmessagecut">';
328 print dolPrintHTML($projectstatic->description);
338 print
'<div class="clearboth"></div>';
351 print
dol_get_fiche_head($head,
'task_contact', $langs->trans(
"Task"), -1,
'projecttask', 0,
'',
'reposition');
354 $param = (
GETPOST(
'withproject') ?
'&withproject=1' :
'');
355 $linkback =
GETPOST(
'withproject') ?
'<a href="'.DOL_URL_ROOT.
'/projet/tasks.php?id='.$projectstatic->id.
'">'.$langs->trans(
"BackToList").
'</a>' :
'';
357 if (!
GETPOST(
'withproject') || empty($projectstatic->id)) {
358 $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1);
359 $object->next_prev_filter =
"fk_projet:IN:".$db->sanitize($projectsListId);
361 $object->next_prev_filter =
"fk_projet:=:".((int) $projectstatic->id);
367 if (empty($withproject)) {
368 $result = $projectstatic->fetch(
$object->fk_project);
369 $morehtmlref .=
'<div class="refidno">';
370 $morehtmlref .= $langs->trans(
"Project").
': ';
371 $morehtmlref .= $projectstatic->getNomUrl(1);
372 $morehtmlref .=
'<br>';
375 $morehtmlref .= $langs->trans(
"ThirdParty").
': ';
376 if ($projectstatic->socid > 0) {
377 $projectstatic->fetch_thirdparty();
378 $morehtmlref .= $projectstatic->thirdparty->getNomUrl(1);
381 $morehtmlref .=
'</div>';
384 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref, $param, 0,
'',
'', 1);
404 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$id.
'" method="POST">';
405 print
'<input type="hidden" name="token" value="'.newToken().
'">';
406 print
'<input type="hidden" name="action" value="addcontact">';
407 print
'<input type="hidden" name="id" value="'.$id.
'">';
409 print
'<input type="hidden" name="withproject" value="'.$withproject.
'">';
412 print
'<div class="div-table-responsive">';
413 print
'<table class="noborder centpercent">';
415 if ($action !=
'editline' && $user->hasRight(
'projet',
'creer')) {
416 print
'<tr class="liste_titre">';
417 print
'<td>'.$langs->trans(
"NatureOfContact").
'</td>';
418 print
'<td>'.$langs->trans(
"ThirdParty").
'</td>';
419 print
'<td>'.$langs->trans(
"Users").
'</td>';
420 print
'<td>'.$langs->trans(
"ContactType").
'</td>';
421 print
'<td colspan="3"> </td>';
425 print
'<tr class="oddeven nohover">';
427 print
'<td class="nowraponall">';
428 print img_object(
'',
'user').
' '.$langs->trans(
"Users");
437 if (
$object->project->public) {
438 $contactsofproject =
'';
440 $contactsofproject = $projectstatic->getListContactId(
'internal');
442 print $form->select_dolusers((
GETPOSTISSET(
'userid') ?
GETPOSTINT(
'userid') : $user->id),
'userid', 0, null, 0,
'', $contactsofproject,
'0', 0, 0,
'', 1, $langs->trans(
"ResourceNotAssignedToProject"),
'minwidth200imp maxwidth300');
445 print $formcompany->selectTypeContact($object,
'',
'type',
'internal',
'position', 0,
'minwidth200imp maxwidth300', 0);
447 print
'<td class="right" colspan="3"><input type="submit" class="button button-add small" value="'.$langs->trans(
"Add").
'" name="addsourceinternal"></td>';
451 if ($projectstatic->socid) {
452 print
'<tr class="oddeven">';
454 print
'<td class="nowraponall">';
455 print img_object(
'',
'contact').
' '.$langs->trans(
"ThirdPartyContacts");
459 $thirdpartyofproject = $projectstatic->getListContactId(
'thirdparty');
460 $selectedCompany =
GETPOSTISSET(
"newcompany") ?
GETPOST(
"newcompany") : $projectstatic->socid;
461 $selectedCompany = $formcompany->selectCompaniesForNewContact($object,
'id', $selectedCompany,
'newcompany', $thirdpartyofproject, 0,
'&withproject='.$withproject,
'minwidth200imp maxwidth300');
465 $contactofproject = $projectstatic->getListContactId(
'external');
467 print $form->select_contact($selectedCompany,
'',
'contactid', 0,
'',
'', 0,
'minwidth200imp maxwidth300',
true);
468 $nbofcontacts = $form->num;
471 print $formcompany->selectTypeContact($object,
'',
'typecontact',
'external',
'position', 0,
'minwidth200imp maxwidth300', 0);
473 print
'<td class="right" colspan="3" ><input type="submit" class="button button-add small" id="add-customer-contact" name="addsourceexternal" value="'.$langs->trans(
"Add").
'"';
474 if (!$nbofcontacts) {
483 print
'<tr class="liste_titre">';
484 print
'<td>'.$langs->trans(
"Source").
'</td>';
485 print
'<td>'.$langs->trans(
"ThirdParty").
'</td>';
486 print
'<td>'.$langs->trans(
"TaskContact").
'</td>';
487 print
'<td>'.$langs->trans(
"ContactType").
'</td>';
488 print
'<td class="center">'.$langs->trans(
"Status").
'</td>';
489 print
'<td colspan="2"> </td>';
492 $companystatic =
new Societe($db);
494 foreach (array(
'internal',
'external') as $source) {
495 $tab =
$object->liste_contact(-1, $source);
501 print
'<tr class="oddeven" valign="top">';
504 print
'<td class="left">';
505 if ($tab[$i][
'source'] ==
'internal') {
506 print $langs->trans(
"User");
508 if ($tab[$i][
'source'] ==
'external') {
509 print $langs->trans(
"ThirdPartyContact");
514 print
'<td class="left">';
515 if ($tab[$i][
'socid'] > 0) {
516 $companystatic->fetch($tab[$i][
'socid']);
517 print $companystatic->getNomUrl(1);
519 if ($tab[$i][
'socid'] < 0) {
522 if (!$tab[$i][
'socid']) {
528 print
'<td class="tdoverflowmax150">';
529 if ($tab[$i][
'source'] ==
'internal') {
530 $userstatic->id = $tab[$i][
'id'];
531 $userstatic->lastname = $tab[$i][
'lastname'];
532 $userstatic->firstname = $tab[$i][
'firstname'];
533 $userstatic->photo = $tab[$i][
'photo'];
534 $userstatic->login = $tab[$i][
'login'];
535 $userstatic->email = $tab[$i][
'email'];
536 $userstatic->gender = $tab[$i][
'gender'];
537 $userstatic->status = $tab[$i][
'statuscontact'];
539 print $userstatic->getNomUrl(-1);
541 if ($tab[$i][
'source'] ==
'external') {
542 $contactstatic->id = $tab[$i][
'id'];
543 $contactstatic->lastname = $tab[$i][
'lastname'];
544 $contactstatic->firstname = $tab[$i][
'firstname'];
545 $contactstatic->email = $tab[$i][
'email'];
546 $contactstatic->status = $tab[$i][
'statuscontact'];
547 $contactstatic->statut = $tab[$i][
'statuscontact'];
548 print $contactstatic->getNomUrl(1);
553 print
'<td>'.$tab[$i][
'libelle'].
'</td>';
556 print
'<td class="center">';
559 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.((int)
$object->id).
'&action=swapstatut&token='.
newToken().
'&ligne='.((int) $tab[$i][
'rowid']).($withproject ?
'&withproject=1' :
'').
'">';
561 print $contactstatic->LibStatut($tab[$i][
'status'], 3);
568 print
'<td class="center nowrap">';
569 if ($user->hasRight(
'projet',
'creer')) {
571 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deleteline&token='.
newToken().
'&lineid='.((int) $tab[$i][
'rowid']).($withproject ?
'&withproject=1' :
'').
'">';
572 print img_picto($langs->trans(
'Unlink'),
'unlink');
587 print
"ErrorRecordNotFound";
591if (is_object($hookmanager)) {
592 $hookmanager->initHooks(array(
'contacttpl'));
593 $parameters = array();
594 $reshook = $hookmanager->executeHooks(
'formContactTpl', $parameters, $object, $action);
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
task_prepare_head($object)
Prepare array with list of tabs.
project_prepare_head(Project $project, $moreparam='')
Prepare array with list of tabs.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $nodie=0, $mode='')
Check permissions of a user to show a page and an object.