dolibarr 21.0.0-beta
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 * Copyright (C) 2024 Alexandre Spangaro <alexandre@inovea-conseil.com>
5 * Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
6 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21
28require "../main.inc.php";
29require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
30require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
31require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php';
32require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
33require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
34if (isModEnabled('project')) {
35 require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
36 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
37}
38
47// Load translation files required by the page
48$langs->loadLangs(array("companies", "contracts"));
49
50$action = GETPOST('action', 'alpha');
51$confirm = GETPOST('confirm', 'alpha');
52$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'contratagenda';
53
54if (GETPOST('actioncode', 'array')) {
55 $actioncode = GETPOST('actioncode', 'array', 3);
56 if (!count($actioncode)) {
57 $actioncode = '0';
58 }
59} else {
60 $actioncode = GETPOST("actioncode", "alpha", 3) ? GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : getDolGlobalString('AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT'));
61}
62
63$search_rowid = GETPOST('search_rowid');
64$search_agenda_label = GETPOST('search_agenda_label');
65
66$id = GETPOSTINT('id');
67$ref = GETPOST('ref', 'alpha');
68
69// Security check
70if ($user->socid) {
71 $socid = $user->socid;
72}
73
74// Security check
75$fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : ''));
76$fieldtype = (!empty($id) ? 'rowid' : 'ref');
77
78// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
79$hookmanager->initHooks(array('agendacontract', 'globalcard'));
80
81$result = restrictedArea($user, 'contrat', $fieldvalue, '', '', '', $fieldtype);
82
83$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
84$sortfield = GETPOST('sortfield', 'aZ09comma');
85$sortorder = GETPOST('sortorder', 'aZ09comma');
86$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT('page');
87if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
88 // If $page is not defined, or '' or -1 or if we click on clear filters
89 $page = 0;
90}
91$offset = $limit * $page;
92$pageprev = $page - 1;
93$pagenext = $page + 1;
94if (!$sortfield) {
95 $sortfield = 'a.datep,a.id';
96}
97if (!$sortorder) {
98 $sortorder = 'DESC,DESC';
99}
100
101
102$object = new Contrat($db);
103if ($id > 0 || !empty($ref)) {
104 $result = $object->fetch($id, $ref);
105}
106
107$permissiontoadd = $user->hasRight('contrat', 'creer'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
108
109$result = restrictedArea($user, 'contrat', $object->id);
110
111
112/*
113 * Actions
114 */
115
116$parameters = array('id' => $id, 'ref' => $ref);
117$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
118if ($reshook < 0) {
119 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
120}
121
122if (empty($reshook)) {
123 // Cancel
124 if (GETPOST('cancel', 'alpha') && !empty($backtopage)) {
125 header("Location: ".$backtopage);
126 exit;
127 }
128
129 // Purge search criteria
130 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
131 $actioncode = '';
132 $search_agenda_label = '';
133 }
134}
135
136
137/*
138 * View
139 */
140
141$form = new Form($db);
142$formfile = new FormFile($db);
143if (isModEnabled('project')) {
144 $formproject = new FormProjets($db);
145}
146
147if ($object->id > 0) {
148 // Load object modContract
149 $module = (getDolGlobalString('CONTRACT_ADDON') ? $conf->global->CONTRACT_ADDON : 'mod_contract_serpis');
150 if (substr($module, 0, 13) == 'mod_contract_' && substr($module, -3) == 'php') {
151 $module = substr($module, 0, dol_strlen($module) - 4);
152 }
153 $result = dol_include_once('/core/modules/contract/'.$module.'.php');
154 if ($result > 0) {
155 $modCodeContract = new $module();
156 }
157
158 require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
159 require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
160
161 $object->fetch_thirdparty();
162
163 $title = $langs->trans("Agenda");
164 if (getDolGlobalString('MAIN_HTML_TITLE') && preg_match('/contractrefonly/', getDolGlobalString('MAIN_HTML_TITLE')) && $object->ref) {
165 $title = $object->ref." - ".$title;
166 }
167 $help_url = 'EN:Module_Contracts|FR:Module_Contrat|ES:Contratos_de_servicio';
168
169 llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-contrat page-card_agenda');
170
171 if (isModEnabled('notification')) {
172 $langs->load("mails");
173 }
174 $head = contract_prepare_head($object);
175
176 print dol_get_fiche_head($head, 'agenda', $langs->trans("Contract"), -1, 'contract');
177
178 $linkback = '<a href="'.DOL_URL_ROOT.'/contrat/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
179
180 $morehtmlref = '';
181 if (!empty($modCodeContract->code_auto)) {
182 $morehtmlref .= $object->ref;
183 } else {
184 $morehtmlref .= $form->editfieldkey("", 'ref', $object->ref, $object, $user->hasRight('contrat', 'creer'), 'string', '', 0, 3);
185 $morehtmlref .= $form->editfieldval("", 'ref', $object->ref, $object, $user->hasRight('contrat', 'creer'), 'string', null, 0, 2);
186 }
187
188 $permtoedit = 0;
189
190 $morehtmlref .= '<div class="refidno">';
191 // Ref customer
192 $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_customer', $object->ref_customer, $object, $permtoedit, 'string', '', 0, 1);
193 $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_customer', $object->ref_customer, $object, $permtoedit, 'string', '', null, null, '', 1, 'getFormatedCustomerRef');
194 // Ref supplier
195 $morehtmlref .= '<br>';
196 $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $permtoedit, 'string', '', 0, 1);
197 $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $permtoedit, 'string', '', null, null, '', 1, 'getFormatedSupplierRef');
198 // Thirdparty
199 $morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1);
200 if (!getDolGlobalString('MAIN_DISABLE_OTHER_LINK') && $object->thirdparty->id > 0) {
201 $morehtmlref .= ' <span class="otherlink">(<a href="'.DOL_URL_ROOT.'/contrat/list.php?socid='.$object->thirdparty->id.'&search_name='.urlencode($object->thirdparty->name).'">'.$langs->trans("OtherContracts").'</a>)</span>';
202 }
203 // Project
204 if (isModEnabled('project')) {
205 $langs->load("projects");
206 $morehtmlref .= '<br>';
207 if (0) {
208 $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
209 if ($action != 'classify') {
210 $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
211 }
212 $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
213 } else {
214 if (!empty($object->fk_project)) {
215 $proj = new Project($db);
216 $proj->fetch($object->fk_project);
217 $morehtmlref .= $proj->getNomUrl(1);
218 if ($proj->title) {
219 $morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
220 }
221 }
222 }
223 }
224 $morehtmlref .= '</div>';
225
226 dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'none', $morehtmlref);
227
228 print '<div class="fichecenter">';
229
230 print '<div class="underbanner clearboth"></div>';
231
232 $object->info($object->id);
233 dol_print_object_info($object, 1);
234
235 print '</div>';
236
237 print dol_get_fiche_end();
238
239
240 // Actions buttons
241
242 /*$objthirdparty=$object;
243 $objcon=new stdClass();
244
245 $out='';
246 $permok=$user->rights->agenda->myactions->create;
247 if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok)
248 {
249 //$out.='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create';
250 if (get_class($objthirdparty) == 'Societe') $out.='&amp;socid='.$objthirdparty->id;
251 $out.=(!empty($objcon->id)?'&amp;contactid='.$objcon->id:'').'&amp;backtopage=1';
252 //$out.=$langs->trans("AddAnAction").' ';
253 //$out.=img_picto($langs->trans("AddAnAction"),'filenew');
254 //$out.="</a>";
255 }*/
256
257
258 //print '<div class="tabsAction">';
259 //print '</div>';
260
261
262 $newcardbutton = '';
263 if (isModEnabled('agenda')) {
264 if ($user->hasRight('agenda', 'myactions', 'create') || $user->hasRight('agenda', 'allactions', 'create')) {
265 $backtopage = $_SERVER['PHP_SELF'].'?id='.$object->id;
266 $out = '&origin='.$object->element.'&originid='.$object->id.'&backtopage='.urlencode($backtopage);
267 $messagingUrl = DOL_URL_ROOT.'/contrat/messaging.php?id='.$object->id;
268 $newcardbutton .= dolGetButtonTitle($langs->trans('ShowAsConversation'), '', 'fa fa-comments imgforviewmode', $messagingUrl, '', 1);
269 $messagingUrl = DOL_URL_ROOT.'/contrat/agenda.php?id='.$object->id;
270 $newcardbutton .= dolGetButtonTitle($langs->trans('MessageListViewType'), '', 'fa fa-bars imgforviewmode', $messagingUrl, '', 2);
271 $newcardbutton .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out);
272 }
273 }
274
275 if (isModEnabled('agenda') && ($user->hasRight('agenda', 'myactions', 'read') || $user->hasRight('agenda', 'allactions', 'read'))) {
276 print '<br>';
277
278 $param = '&id='.$object->id;
279 if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
280 $param .= '&contextpage='.$contextpage;
281 }
282 if ($limit > 0 && $limit != $conf->liste_limit) {
283 $param .= '&limit='.$limit;
284 }
285
286 // Try to know count of actioncomm from cache
287 require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
288 $cachekey = 'count_events_thirdparty_'.$object->id;
289 $nbEvent = dol_getcache($cachekey);
290
291 $titlelist = $langs->trans("ActionsOnContract").(is_numeric($nbEvent) ? '<span class="opacitymedium colorblack paddingleft">('.$nbEvent.')</span>' : '');
292 if (!empty($conf->dol_optimize_smallscreen)) {
293 $titlelist = $langs->trans("Actions").(is_numeric($nbEvent) ? '<span class="opacitymedium colorblack paddingleft">('.$nbEvent.')</span>' : '');
294 }
295
296 print_barre_liste($titlelist, 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $newcardbutton, '', 0, 1, 0);
297
298 // List of all actions
299 $filters = array();
300 $filters['search_agenda_label'] = $search_agenda_label;
301 $filters['search_rowid'] = $search_rowid;
302
303 // TODO Replace this with same code than into list.php
304 show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder);
305 }
306}
307
308llxFooter();
309$db->close();
$id
Definition account.php:48
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:66
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.
Definition wrapper.php:71
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=null, $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).
contract_prepare_head(Contrat $object)
Prepare array with list of tabs.
llxFooter()
Footer empty.
Definition document.php:107
dol_print_object_info($object, $usetable=0)
Show information on an object TODO Move this into html.formother.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
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.
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.
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.
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.
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.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
Definition member.php:79
dol_getcache($memoryid)
Read a memory area shared by all users, all sessions on server.
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.