dolibarr 19.0.3
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
25require "../main.inc.php";
26require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
27require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
28require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php';
29require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
30require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
31if (isModEnabled('project')) {
32 require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
34}
35
36// Load translation files required by the page
37$langs->loadLangs(array("companies", "contracts"));
38
39if (GETPOST('actioncode', 'array')) {
40 $actioncode = GETPOST('actioncode', 'array', 3);
41 if (!count($actioncode)) {
42 $actioncode = '0';
43 }
44} else {
45 $actioncode = GETPOST("actioncode", "alpha", 3) ? GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : getDolGlobalString('AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT'));
46}
47
48$search_rowid = GETPOST('search_rowid');
49$search_agenda_label = GETPOST('search_agenda_label');
50
51$action = GETPOST('action', 'alpha');
52$confirm = GETPOST('confirm', 'alpha');
53$id = GETPOST('id', 'int');
54$ref = GETPOST('ref', 'alpha');
55
56// Security check
57if ($user->socid) {
58 $socid = $user->socid;
59}
60
61// Security check
62$fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : ''));
63$fieldtype = (!empty($id) ? 'rowid' : 'ref');
64$result = restrictedArea($user, 'contrat', $fieldvalue, '', '', '', $fieldtype);
65
66$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit;
67$sortfield = GETPOST('sortfield', 'aZ09comma');
68$sortorder = GETPOST('sortorder', 'aZ09comma');
69$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
70if (empty($page) || $page == -1) {
71 $page = 0;
72} // If $page is not defined, or '' or -1
73$offset = $limit * $page;
74$pageprev = $page - 1;
75$pagenext = $page + 1;
76if (!$sortfield) {
77 $sortfield = 'a.datep,a.id';
78}
79if (!$sortorder) {
80 $sortorder = 'DESC,DESC';
81}
82
83
84$object = new Contrat($db);
85if ($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->hasRight('contrat', 'creer'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
93
94$result = restrictedArea($user, 'contrat', $object->id);
95
96
97/*
98 * Actions
99 */
100
101$parameters = array('id' => $id, 'ref' => $ref);
102$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
103if ($reshook < 0) {
104 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
105}
106
107if (empty($reshook)) {
108 // Cancel
109 if (GETPOST('cancel', 'alpha') && !empty($backtopage)) {
110 header("Location: ".$backtopage);
111 exit;
112 }
113
114 // Purge search criteria
115 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
116 $actioncode = '';
117 $search_agenda_label = '';
118 }
119}
120
121
122/*
123 * View
124 */
125
126$form = new Form($db);
127$formfile = new FormFile($db);
128if (isModEnabled('project')) {
129 $formproject = new FormProjets($db);
130}
131
132if ($object->id > 0) {
133 // Load object modContract
134 $module = (getDolGlobalString('CONTRACT_ADDON') ? $conf->global->CONTRACT_ADDON : 'mod_contract_serpis');
135 if (substr($module, 0, 13) == 'mod_contract_' && substr($module, -3) == 'php') {
136 $module = substr($module, 0, dol_strlen($module) - 4);
137 }
138 $result = dol_include_once('/core/modules/contract/'.$module.'.php');
139 if ($result > 0) {
140 $modCodeContract = new $module();
141 }
142
143 require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
144 require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
145
146 $object->fetch_thirdparty();
147
148 $title = $langs->trans("Agenda");
149 if (getDolGlobalString('MAIN_HTML_TITLE') && preg_match('/contractrefonly/', $conf->global->MAIN_HTML_TITLE) && $object->ref) {
150 $title = $object->ref." - ".$title;
151 }
152 $help_url = 'EN:Module_Contracts|FR:Module_Contrat';
153
154 llxHeader('', $title, $help_url);
155
156 if (isModEnabled('notification')) {
157 $langs->load("mails");
158 }
159 $head = contract_prepare_head($object);
160
161 print dol_get_fiche_head($head, 'agenda', $langs->trans("Contract"), -1, 'contract');
162
163 $linkback = '<a href="'.DOL_URL_ROOT.'/societe/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
164
165 $morehtmlref = '';
166 if (!empty($modCodeContract->code_auto)) {
167 $morehtmlref .= $object->ref;
168 } else {
169 $morehtmlref .= $form->editfieldkey("", 'ref', $object->ref, $object, $user->hasRight('contrat', 'creer'), 'string', '', 0, 3);
170 $morehtmlref .= $form->editfieldval("", 'ref', $object->ref, $object, $user->hasRight('contrat', 'creer'), 'string', '', 0, 2);
171 }
172
173 $permtoedit = 0;
174
175 $morehtmlref .= '<div class="refidno">';
176 // Ref customer
177 $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_customer', $object->ref_customer, $object, $permtoedit, 'string', '', 0, 1);
178 $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_customer', $object->ref_customer, $object, $permtoedit, 'string', '', null, null, '', 1, 'getFormatedCustomerRef');
179 // Ref supplier
180 $morehtmlref .= '<br>';
181 $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $permtoedit, 'string', '', 0, 1);
182 $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $permtoedit, 'string', '', null, null, '', 1, 'getFormatedSupplierRef');
183 // Thirdparty
184 $morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1);
185 if (!getDolGlobalString('MAIN_DISABLE_OTHER_LINK') && $object->thirdparty->id > 0) {
186 $morehtmlref .= ' (<a href="'.DOL_URL_ROOT.'/contrat/list.php?socid='.$object->thirdparty->id.'&search_name='.urlencode($object->thirdparty->name).'">'.$langs->trans("OtherContracts").'</a>)';
187 }
188 // Project
189 if (isModEnabled('project')) {
190 $langs->load("projects");
191 $morehtmlref .= '<br>';
192 if (0) {
193 $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
194 if ($action != 'classify') {
195 $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
196 }
197 $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
198 } else {
199 if (!empty($object->fk_project)) {
200 $proj = new Project($db);
201 $proj->fetch($object->fk_project);
202 $morehtmlref .= $proj->getNomUrl(1);
203 if ($proj->title) {
204 $morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
205 }
206 }
207 }
208 }
209 $morehtmlref .= '</div>';
210
211 dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'none', $morehtmlref);
212
213 print '<div class="fichecenter">';
214
215 print '<div class="underbanner clearboth"></div>';
216
217 $object->info($object->id);
218 dol_print_object_info($object, 1);
219
220 print '</div>';
221
222 print dol_get_fiche_end();
223
224
225
226 // Actions buttons
227
228 /*$objthirdparty=$object;
229 $objcon=new stdClass();
230
231 $out='';
232 $permok=$user->rights->agenda->myactions->create;
233 if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok)
234 {
235 //$out.='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create';
236 if (get_class($objthirdparty) == 'Societe') $out.='&amp;socid='.$objthirdparty->id;
237 $out.=(!empty($objcon->id)?'&amp;contactid='.$objcon->id:'').'&amp;backtopage=1';
238 //$out.=$langs->trans("AddAnAction").' ';
239 //$out.=img_picto($langs->trans("AddAnAction"),'filenew');
240 //$out.="</a>";
241 }*/
242
243
244 //print '<div class="tabsAction">';
245 //print '</div>';
246
247
248 $newcardbutton = '';
249 if (isModEnabled('agenda')) {
250 if ($user->hasRight('agenda', 'myactions', 'create') || $user->hasRight('agenda', 'allactions', 'create')) {
251 $backtopage = $_SERVER['PHP_SELF'].'?id='.$object->id;
252 $out = '&origin='.$object->element.'&originid='.$object->id.'&backtopage='.urlencode($backtopage);
253 $newcardbutton .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out);
254 }
255 }
256
257 if (isModEnabled('agenda') && ($user->hasRight('agenda', 'myactions', 'read') || $user->hasRight('agenda', 'allactions', 'read'))) {
258 print '<br>';
259
260 $param = '&id='.$object->id;
261 if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
262 $param .= '&contextpage='.$contextpage;
263 }
264 if ($limit > 0 && $limit != $conf->liste_limit) {
265 $param .= '&limit='.$limit;
266 }
267
268 // Try to know count of actioncomm from cache
269 require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
270 $cachekey = 'count_events_thirdparty_'.$object->id;
271 $nbEvent = dol_getcache($cachekey);
272
273 print load_fiche_titre($langs->trans("ActionsOnContract").(is_numeric($nbEvent) ? '<span class="opacitymedium colorblack paddingleft">('.$nbEvent.')</span>' : ''), $newcardbutton, '');
274 //print_barre_liste($langs->trans("ActionsOnCompany"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $newcardbutton, '', 0, 1, 1);
275
276 // List of all actions
277 $filters = array();
278 $filters['search_agenda_label'] = $search_agenda_label;
279 $filters['search_rowid'] = $search_rowid;
280
281 // TODO Replace this with same code than into list.php
282 show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder);
283 }
284}
285
286llxFooter();
287$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:55
llxFooter()
Empty footer.
Definition wrapper.php:69
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).
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='', $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.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
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.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
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.