dolibarr 20.0.0
html.formactions.class.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 2008-2012 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2010-2012 Regis Houssin <regis.houssin@inodbox.com>
4 * Copyright (C) 2010-2018 Juanjo Menent <jmenent@2byte.es>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
31{
35 public $db;
36
40 public $error = '';
41
42
48 public function __construct($db)
49 {
50 $this->db = $db;
51 }
52
53
54 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
67 public function form_select_status_action($formname, $selected, $canedit = 1, $htmlname = 'complete', $showempty = 0, $onlyselect = 0, $morecss = 'maxwidth100')
68 {
69 // phpcs:enable
70 global $langs, $conf;
71
72 $listofstatus = array(
73 'na' => $langs->trans("ActionNotApplicable"),
74 '0' => $langs->trans("ActionsToDoShort"),
75 '50' => $langs->trans("ActionRunningShort"),
76 '100' => $langs->trans("ActionDoneShort")
77 );
78 // +ActionUncomplete
79
80 if (!empty($conf->use_javascript_ajax) || $onlyselect) {
81 //var_dump($selected);
82 if ($selected == 'done') {
83 $selected = '100';
84 }
85 print '<select '.($canedit ? '' : 'disabled ').'name="'.$htmlname.'" id="select'.$htmlname.'" class="flat'.($morecss ? ' '.$morecss : '').'">';
86 if ($showempty) {
87 print '<option value="-1"'.($selected == '' ? ' selected' : '').'>&nbsp;</option>';
88 }
89 foreach ($listofstatus as $key => $val) {
90 print '<option value="'.$key.'"'.(($selected == $key && strlen($selected) == strlen($key)) || (($selected > 0 && $selected < 100) && $key == '50') ? ' selected' : '').'>'.$val.'</option>';
91 if ($key == '50' && $onlyselect == 2) {
92 print '<option value="todo"'.($selected == 'todo' ? ' selected' : '').'>'.$langs->trans("ActionUncomplete").' ('.$langs->trans("ActionsToDoShort")."+".$langs->trans("ActionRunningShort").')</option>';
93 }
94 }
95 print '</select>';
96 if ($selected == 0 || $selected == 100) {
97 $canedit = 0;
98 }
99
100 print ajax_combobox('select'.$htmlname, array(), 0, 0, 'resolve', '-1', $morecss);
101
102 if (empty($onlyselect)) {
103 print ' <input type="text" id="val'.$htmlname.'" name="percentage" class="flat hideifna" value="'.($selected >= 0 ? $selected : '').'" size="2"'.($canedit && ($selected >= 0) ? '' : ' disabled').'>';
104 print '<span class="hideonsmartphone hideifna">%</span>';
105 }
106 } else {
107 print ' <input type="text" id="val'.$htmlname.'" name="percentage" class="flat" value="'.($selected >= 0 ? $selected : '').'" size="2"'.($canedit ? '' : ' disabled').'>%';
108 }
109
110 if (!empty($conf->use_javascript_ajax)) {
111 print "\n";
112 print '<script nonce="'.getNonce().'" type="text/javascript">';
113 print "
114 var htmlname = '".dol_escape_js($htmlname)."';
115
116 $(document).ready(function () {
117 select_status();
118
119 $('#select' + htmlname).change(function() {
120 console.log('We change field select '+htmlname);
121 select_status();
122 });
123 });
124
125 function select_status() {
126 var defaultvalue = $('#select' + htmlname).val();
127 console.log('val='+defaultvalue);
128 var percentage = $('input[name=percentage]');
129 var selected = '".(isset($selected) ? dol_escape_js($selected) : '')."';
130 var value = (selected>0?selected:(defaultvalue>=0?defaultvalue:''));
131
132 percentage.val(value);
133
134 if (defaultvalue == 'na' || defaultvalue == -1) {
135 percentage.prop('disabled', true);
136 $('.hideifna').hide();
137 }
138 else if (defaultvalue == 0) {
139 percentage.val(0);
140 percentage.removeAttr('disabled'); /* Not disabled, we want to change it to higher value */
141 $('.hideifna').show();
142 }
143 else if (defaultvalue == 100) {
144 percentage.val(100);
145 percentage.prop('disabled', true);
146 $('.hideifna').show();
147 }
148 else {
149 if (defaultvalue == 50 && (percentage.val() == 0 || percentage.val() == 100)) { percentage.val(50); }
150 percentage.removeAttr('disabled');
151 $('.hideifna').show();
152 }
153 }
154 </script>\n";
155 }
156 }
157
158
173 public function showactions($object, $typeelement, $socid = 0, $forceshowtitle = 0, $morecss = 'listactions', $max = 0, $moreparambacktopage = '', $morehtmlcenter = '', $assignedtouser = 0)
174 {
175 global $langs, $user, $hookmanager;
176
177 require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
178
179 $sortfield = 'a.datep,a.id';
180 $sortorder = 'DESC,DESC';
181
182 $actioncomm = new ActionComm($this->db);
183 $listofactions = $actioncomm->getActions($socid, $object->id, $typeelement, '', $sortfield, $sortorder, ($max ? ($max + 1) : 0));
184 if (!is_array($listofactions)) {
185 dol_print_error($this->db, 'FailedToGetActions');
186 }
187
188 $num = count($listofactions);
189 if ($num || $forceshowtitle) {
190 $title = $langs->trans("LatestLinkedEvents", $max ? $max : '');
191
192 $urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id.($moreparambacktopage ? '&'.$moreparambacktopage : '');
193
194 $projectid = $object->fk_project;
195 if ($typeelement == 'project') {
196 $projectid = $object->id;
197 }
198 $taskid = 0;
199 if ($typeelement == 'task') {
200 $taskid = $object->id;
201 }
202
203 $usercanaddaction = 0;
204 if (empty($assignedtouser) || $assignedtouser == $user->id) {
205 $usercanaddaction = $user->hasRight('agenda', 'myactions', 'create');
206 $assignedtouser = 0;
207 } else {
208 $usercanaddaction = $user->hasRight('agenda', 'allactions', 'create');
209 }
210
211 $url = '';
212 $morehtmlright = '';
213 if (isModEnabled('agenda') && $usercanaddaction) {
214 $url = DOL_URL_ROOT.'/comm/action/card.php?action=create&token='.newToken().'&datep='.urlencode(dol_print_date(dol_now(), 'dayhourlog', 'tzuser'));
215 $url .= '&origin='.urlencode($typeelement).'&originid='.((int) $object->id).((!empty($object->socid) && $object->socid > 0) ? '&socid='.((int) $object->socid) : ((!empty($socid) && $socid > 0) ? '&socid='.((int) $socid) : ''));
216 $url .= ($projectid > 0 ? '&projectid='.((int) $projectid) : '').($taskid > 0 ? '&taskid='.((int) $taskid) : '');
217 $url .= ($assignedtouser > 0 ? '&assignedtouser='.((int) $assignedtouser) : '');
218 $url .= '&backtopage='.urlencode($urlbacktopage);
219 $morehtmlright .= dolGetButtonTitle($langs->trans("AddEvent"), '', 'fa fa-plus-circle', $url);
220 }
221
222 $parameters = array(
223 'title' => &$title,
224 'morehtmlright' => &$morehtmlright,
225 'morehtmlcenter' => &$morehtmlcenter,
226 'usercanaddaction' => $usercanaddaction,
227 'url' => &$url,
228 'typeelement' => $typeelement,
229 'projectid' => $projectid,
230 'assignedtouser' => $assignedtouser,
231 'taskid' => $taskid,
232 'urlbacktopage' => $urlbacktopage
233 );
234
235 $reshook = $hookmanager->executeHooks('showActionsLoadFicheTitre', $parameters, $object);
236
237 if ($reshook < 0) {
238 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
239 }
240
241 $error = 0;
242 if (empty($reshook)) {
243 print '<!-- formactions->showactions -->' . "\n";
244 print load_fiche_titre($title, $morehtmlright, '', 0, 0, '', $morehtmlcenter);
245 }
246
247 $page = 0;
248 $param = '';
249
250 print '<div class="div-table-responsive-no-min">';
251 print '<table class="centpercent noborder'.($morecss ? ' '.$morecss : '').'">';
252 print '<tr class="liste_titre">';
253 print getTitleFieldOfList('Ref', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, '', 1);
254 print getTitleFieldOfList('Date', 0, $_SERVER["PHP_SELF"], 'a.datep', $page, $param, '', $sortfield, $sortorder, 'center ', 1);
255 print getTitleFieldOfList('By', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, '', 1);
256 print getTitleFieldOfList('Type', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, '', 1);
257 print getTitleFieldOfList('Title', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, '', 1);
258 print getTitleFieldOfList('', 0, $_SERVER["PHP_SELF"], '', $page, $param, '', $sortfield, $sortorder, 'right ', 1);
259 print '</tr>';
260 print "\n";
261
262 if (is_array($listofactions) && count($listofactions)) {
263 $cacheusers = array();
264
265 $cursorevent = 0;
266 foreach ($listofactions as $actioncomm) {
267 if ($max && $cursorevent >= $max) {
268 break;
269 }
270
271 print '<tr class="oddeven">';
272
273 // Ref
274 print '<td class="nowraponall nopaddingrightimp">'.$actioncomm->getNomUrl(1, -1).'</td>';
275
276 // Date
277 print '<td class="center nowraponall">'.dol_print_date($actioncomm->datep, 'dayhourreduceformat', 'tzuserrel');
278 if ($actioncomm->datef) {
279 $tmpa = dol_getdate($actioncomm->datep);
280 $tmpb = dol_getdate($actioncomm->datef);
281 if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year']) {
282 if ($tmpa['hours'] != $tmpb['hours'] || $tmpa['minutes'] != $tmpb['minutes']) {
283 print '-'.dol_print_date($actioncomm->datef, 'hour', 'tzuserrel');
284 }
285 } else {
286 print '-'.dol_print_date($actioncomm->datef, 'dayhourreduceformat', 'tzuserrel');
287 }
288 }
289 print '</td>';
290
291 // Owner
292 print '<td class="nowraponall tdoverflowmax100">';
293 if (!empty($actioncomm->userownerid)) {
294 if (isset($cacheusers[$actioncomm->userownerid]) && is_object($cacheusers[$actioncomm->userownerid])) {
295 $tmpuser = $cacheusers[$actioncomm->userownerid];
296 } else {
297 $tmpuser = new User($this->db);
298 $tmpuser->fetch($actioncomm->userownerid);
299 $cacheusers[$actioncomm->userownerid] = $tmpuser;
300 }
301 if ($tmpuser->id > 0) {
302 print $tmpuser->getNomUrl(-1, '', 0, 0, 16, 0, 'firstelselast', '');
303 }
304 }
305 print '</td>';
306
307 // Example: Email sent from invoice card
308 //$actionstatic->code = 'AC_BILL_SENTBYMAIL
309 //$actionstatic->type_code = 'AC_OTHER_AUTO'
310
311 // Type
312 $labeltype = $actioncomm->getTypeLabel(0);
313 print '<td class="tdoverflowmax100" title="'.dol_escape_htmltag($labeltype).'">';
314 print $actioncomm->getTypePicto();
315 print $labeltype;
316 print '</td>';
317
318 // Label
319 print '<td class="tdoverflowmax250">';
320 print $actioncomm->getNomUrl(0);
321 print '</td>';
322
323 // Status
324 print '<td class="right">';
325 print $actioncomm->getLibStatut(3);
326 print '</td>';
327 print '</tr>';
328
329 $cursorevent++;
330 }
331 } else {
332 print '<tr class="oddeven"><td colspan="6"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
333 }
334
335 if ($max && $num > $max) {
336 print '<tr class="oddeven"><td colspan="6"><span class="opacitymedium">'.$langs->trans("More").'...</span></td></tr>';
337 }
338
339 print '</table>';
340 print '</div>';
341 }
342
343 return $num;
344 }
345
346
347 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
361 public function select_type_actions($selected = '', $htmlname = 'actioncode', $excludetype = '', $onlyautoornot = 0, $hideinfohelp = 0, $multiselect = 0, $nooutput = 0, $morecss = 'minwidth300')
362 {
363 // phpcs:enable
364 global $langs, $user, $form;
365
366 if (!is_object($form)) {
367 $form = new Form($this->db);
368 }
369
370 require_once DOL_DOCUMENT_ROOT.'/comm/action/class/cactioncomm.class.php';
371 require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
372 $caction = new CActionComm($this->db);
373
374 // Suggest a list with manual events or all auto events
375 $arraylist = $caction->liste_array(1, 'code', $excludetype, $onlyautoornot, '', 0); // If we use param 'all' instead of 'code', there is no group by include in answer but the key 'type' of answer array contains the key for the group by.
376 if (empty($multiselect)) {
377 // Add empty line at start only if no multiselect
378 array_unshift($arraylist, '&nbsp;');
379 }
380 //asort($arraylist);
381
382 if ($selected == 'manual') {
383 $selected = 'AC_OTH';
384 }
385 if ($selected == 'auto') {
386 $selected = 'AC_OTH_AUTO';
387 }
388
389 if (getDolGlobalString('AGENDA_ALWAYS_HIDE_AUTO')) {
390 unset($arraylist['AC_OTH_AUTO']);
391 }
392
393 $out = '';
394
395 // Reformat the array
396 $newarraylist = array();
397 foreach ($arraylist as $key => $value) {
398 $disabled = '';
399 if (strpos($key, 'AC_ALL_') !== false && strpos($key, 'AC_ALL_AUTO') === false) {
400 $disabled = 'disabled';
401 }
402 $newarraylist[$key] = array('id' => $key, 'label' => $value, 'disabled' => $disabled);
403 }
404
405 if (!empty($multiselect)) {
406 if (!is_array($selected) && !empty($selected)) {
407 $selected = explode(',', $selected);
408 }
409 $out .= $form->multiselectarray($htmlname, $newarraylist, $selected, 0, 0, 'centpercent', 0, 0);
410 } else {
411 $out .= $form->selectarray($htmlname, $newarraylist, $selected, 0, 0, 0, '', 0, 0, 0, '', $morecss, 1);
412 }
413
414 if ($user->admin && empty($onlyautoornot) && $hideinfohelp <= 0) {
415 $out .= info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup").($hideinfohelp == -1 ? ". ".$langs->trans("YouCanSetDefaultValueInModuleSetup") : ''), 1);
416 }
417
418 if ($nooutput) {
419 return $out;
420 } else {
421 print $out;
422 }
423 return '';
424 }
425}
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
Definition ajax.lib.php:456
Class to manage agenda events (actions)
Class to manage different types of events.
Class to manage building of HTML components.
form_select_status_action($formname, $selected, $canedit=1, $htmlname='complete', $showempty=0, $onlyselect=0, $morecss='maxwidth100')
Show list of action status.
showactions($object, $typeelement, $socid=0, $forceshowtitle=0, $morecss='listactions', $max=0, $moreparambacktopage='', $morehtmlcenter='', $assignedtouser=0)
Show list of actions for element.
__construct($db)
Constructor.
select_type_actions($selected='', $htmlname='actioncode', $excludetype='', $onlyautoornot=0, $hideinfohelp=0, $multiselect=0, $nooutput=0, $morecss='minwidth300')
Output html select list of type of event.
Class to manage generation of HTML components Only common components must be here.
Class to manage Dolibarr users.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
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_now($mode='auto')
Return date for now.
dol_escape_js($stringtoescape, $mode=0, $noescapebackslashn=0)
Returns text escaped for inclusion into javascript code.
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).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.