dolibarr  17.0.4
agenda.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2004-2009 Laurent Destailleur <eldy@users.sourceforge.net>
3  * Copyright (C) 2017 Ferran Marcet <fmarcet@2byte.es>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <https://www.gnu.org/licenses/>.
17  */
18 
25 require "../main.inc.php";
26 require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
27 require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php';
28 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
29 require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
30 if (isModEnabled('project')) {
31  require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
32  require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
33 }
34 
35 // Load translation files required by the page
36 $langs->loadLangs(array("companies", "contracts"));
37 
38 if (GETPOST('actioncode', 'array')) {
39  $actioncode = GETPOST('actioncode', 'array', 3);
40  if (!count($actioncode)) {
41  $actioncode = '0';
42  }
43 } else {
44  $actioncode = GETPOST("actioncode", "alpha", 3) ?GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : (empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT) ? '' : $conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT));
45 }
46 
47 $search_rowid = GETPOST('search_rowid');
48 $search_agenda_label = GETPOST('search_agenda_label');
49 
50 $action = GETPOST('action', 'alpha');
51 $confirm = GETPOST('confirm', 'alpha');
52 $id = GETPOST('id', 'int');
53 $ref = GETPOST('ref', 'alpha');
54 
55 // Security check
56 if ($user->socid) {
57  $socid = $user->socid;
58 }
59 
60 // Security check
61 $fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : ''));
62 $fieldtype = (!empty($id) ? 'rowid' : 'ref');
63 $result = restrictedArea($user, 'contrat', $fieldvalue, '', '', '', $fieldtype);
64 
65 $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
66 $sortfield = GETPOST('sortfield', 'aZ09comma');
67 $sortorder = GETPOST('sortorder', 'aZ09comma');
68 $page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
69 if (empty($page) || $page == -1) {
70  $page = 0;
71 } // If $page is not defined, or '' or -1
72 $offset = $limit * $page;
73 $pageprev = $page - 1;
74 $pagenext = $page + 1;
75 if (!$sortfield) {
76  $sortfield = 'a.datep,a.id';
77 }
78 if (!$sortorder) {
79  $sortorder = 'DESC,DESC';
80 }
81 
82 
83 $object = new Contrat($db);
84 
85 if ($id > 0 || !empty($ref)) {
86  $result = $object->fetch($id, $ref);
87 }
88 
89 // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
90 $hookmanager->initHooks(array('agendacontract', 'globalcard'));
91 
92 $permissiontoadd = $user->rights->contrat->creer; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
93 
94 
95 /*
96  * Actions
97  */
98 
99 $parameters = array('id' => $id, 'ref' => $ref);
100 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
101 if ($reshook < 0) {
102  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
103 }
104 
105 if (empty($reshook)) {
106  // Cancel
107  if (GETPOST('cancel', 'alpha') && !empty($backtopage)) {
108  header("Location: ".$backtopage);
109  exit;
110  }
111 
112  // Purge search criteria
113  if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers
114  $actioncode = '';
115  $search_agenda_label = '';
116  }
117 }
118 
119 
120 /*
121  * View
122  */
123 
124 $form = new Form($db);
125 $formfile = new FormFile($db);
126 if (isModEnabled('project')) {
127  $formproject = new FormProjets($db);
128 }
129 
130 if ($object->id > 0) {
131  // Load object modContract
132  $module = (!empty($conf->global->CONTRACT_ADDON) ? $conf->global->CONTRACT_ADDON : 'mod_contract_serpis');
133  if (substr($module, 0, 13) == 'mod_contract_' && substr($module, -3) == 'php') {
134  $module = substr($module, 0, dol_strlen($module) - 4);
135  }
136  $result = dol_include_once('/core/modules/contract/'.$module.'.php');
137  if ($result > 0) {
138  $modCodeContract = new $module();
139  }
140 
141  require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
142  require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
143 
144  $object->fetch_thirdparty();
145 
146  $title = $langs->trans("Agenda");
147  if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/contractrefonly/', $conf->global->MAIN_HTML_TITLE) && $object->ref) {
148  $title = $object->ref." - ".$title;
149  }
150  llxHeader('', $title);
151 
152  if (isModEnabled('notification')) {
153  $langs->load("mails");
154  }
155  $head = contract_prepare_head($object);
156 
157  print dol_get_fiche_head($head, 'agenda', $langs->trans("Contract"), -1, 'contract');
158 
159  $linkback = '<a href="'.DOL_URL_ROOT.'/societe/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
160 
161  $morehtmlref = '';
162  if (!empty($modCodeContract->code_auto)) {
163  $morehtmlref .= $object->ref;
164  } else {
165  $morehtmlref .= $form->editfieldkey("", 'ref', $object->ref, $object, $user->rights->contrat->creer, 'string', '', 0, 3);
166  $morehtmlref .= $form->editfieldval("", 'ref', $object->ref, $object, $user->rights->contrat->creer, 'string', '', 0, 2);
167  }
168 
169  $permtoedit = 0;
170 
171  $morehtmlref .= '<div class="refidno">';
172  // Ref customer
173  $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_customer', $object->ref_customer, $object, $permtoedit, 'string', '', 0, 1);
174  $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_customer', $object->ref_customer, $object, $permtoedit, 'string', '', null, null, '', 1, 'getFormatedCustomerRef');
175  // Ref supplier
176  $morehtmlref .= '<br>';
177  $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $permtoedit, 'string', '', 0, 1);
178  $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $permtoedit, 'string', '', null, null, '', 1, 'getFormatedSupplierRef');
179  // Thirdparty
180  $morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1);
181  if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) {
182  $morehtmlref .= ' (<a href="'.DOL_URL_ROOT.'/contrat/list.php?socid='.$object->thirdparty->id.'&search_name='.urlencode($object->thirdparty->name).'">'.$langs->trans("OtherContracts").'</a>)';
183  }
184  // Project
185  if (isModEnabled('project')) {
186  $langs->load("projects");
187  $morehtmlref .= '<br>';
188  if (0) {
189  $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
190  if ($action != 'classify') {
191  $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
192  }
193  $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
194  } else {
195  if (!empty($object->fk_project)) {
196  $proj = new Project($db);
197  $proj->fetch($object->fk_project);
198  $morehtmlref .= $proj->getNomUrl(1);
199  if ($proj->title) {
200  $morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
201  }
202  }
203  }
204  }
205  $morehtmlref .= '</div>';
206 
207  dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'none', $morehtmlref);
208 
209  print '<div class="fichecenter">';
210 
211  print '<div class="underbanner clearboth"></div>';
212 
213  $object->info($object->id);
214  dol_print_object_info($object, 1);
215 
216  print '</div>';
217 
218  print dol_get_fiche_end();
219 
220 
221 
222  // Actions buttons
223 
224  /*$objthirdparty=$object;
225  $objcon=new stdClass();
226 
227  $out='';
228  $permok=$user->rights->agenda->myactions->create;
229  if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok)
230  {
231  //$out.='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create';
232  if (get_class($objthirdparty) == 'Societe') $out.='&amp;socid='.$objthirdparty->id;
233  $out.=(!empty($objcon->id)?'&amp;contactid='.$objcon->id:'').'&amp;backtopage=1&amp;percentage=-1';
234  //$out.=$langs->trans("AddAnAction").' ';
235  //$out.=img_picto($langs->trans("AddAnAction"),'filenew');
236  //$out.="</a>";
237  }*/
238 
239 
240  //print '<div class="tabsAction">';
241  //print '</div>';
242 
243 
244  $newcardbutton = '';
245  if (isModEnabled('agenda')) {
246  if (!empty($user->rights->agenda->myactions->create) || !empty($user->rights->agenda->allactions->create)) {
247  $backtopage = $_SERVER['PHP_SELF'].'?id='.$object->id;
248  $out = '&origin='.$object->element.'&originid='.$object->id.'&backtopage='.urlencode($backtopage);
249  $newcardbutton .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out);
250  }
251  }
252 
253  if (isModEnabled('agenda') && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) {
254  print '<br>';
255 
256  $param = '&id='.$object->id;
257  if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
258  $param .= '&contextpage='.$contextpage;
259  }
260  if ($limit > 0 && $limit != $conf->liste_limit) {
261  $param .= '&limit='.$limit;
262  }
263 
264  print load_fiche_titre($langs->trans("ActionsOnContract"), $newcardbutton, '');
265  //print_barre_liste($langs->trans("ActionsOnCompany"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $newcardbutton, '', 0, 1, 1);
266 
267  // List of all actions
268  $filters = array();
269  $filters['search_agenda_label'] = $search_agenda_label;
270  $filters['search_rowid'] = $search_rowid;
271 
272  // TODO Replace this with same code than into list.php
273  show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder);
274  }
275 }
276 
277 llxFooter();
278 $db->close();
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
llxFooter()
Empty footer.
Definition: wrapper.php:70
Class to manage contracts.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class to manage building of HTML components.
Class to manage projects.
show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint=0, $actioncode='', $donetodo='done', $filters=array(), $sortfield='a.datep, a.id', $sortorder='DESC', $module='')
Show html area with actions (done or not, ignore the name of function).
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
contract_prepare_head(Contrat $object)
Prepare array with list of tabs.
dol_print_object_info($object, $usetable=0)
Show informations on an object TODO Move this into html.formother.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='')
Show tabs of a record.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages in dol_events session object.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
if(!function_exists('dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
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)
Return value of a param into GET or POST supervariable.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
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.