dolibarr  7.0.0-beta
list.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2012 Nicolas Villa aka Boyquotes http://informetic.fr
3  * Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
4  * Copyright (C) 2013-2016 Laurent Destailleur <eldy@users.sourceforge.net>
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 <http://www.gnu.org/licenses/>.
18  */
19 
27 require '../main.inc.php';
28 require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
29 require_once DOL_DOCUMENT_ROOT."/cron/class/cronjob.class.php";
30 require_once DOL_DOCUMENT_ROOT.'/core/lib/cron.lib.php';
31 
32 $langs->load("admin");
33 $langs->load("cron");
34 $langs->load("bills");
35 
36 if (!$user->rights->cron->read) accessforbidden();
37 
38 $action=GETPOST('action','alpha');
39 $confirm=GETPOST('confirm','alpha');
40 $id=GETPOST('id','int');
41 
42 $limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit;
43 $sortfield = GETPOST("sortfield",'alpha');
44 $sortorder = GETPOST("sortorder",'alpha');
45 $page = GETPOST("page",'int');
46 if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1
47 $offset = $limit * $page;
48 $pageprev = $page - 1;
49 $pagenext = $page + 1;
50 if (! $sortfield) $sortfield='t.status';
51 if (! $sortorder) $sortorder='ASC';
52 
53 // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
54 $contextpage='cronjoblist';
55 
56 $status=GETPOST('status','int');
57 if ($status == '') $status=-2;
58 
59 //Search criteria
60 $search_label=GETPOST("search_label",'alpha');
61 $securitykey = GETPOST('securitykey','alpha');
62 
63 $diroutputmassaction=$conf->cronjob->dir_output . '/temp/massgeneration/'.$user->id;
64 
65 // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
66 $hookmanager->initHooks(array('cronjoblist'));
67 $extrafields = new ExtraFields($db);
68 
69 // fetch optionals attributes and labels
70 $extralabels = $extrafields->fetch_name_optionals_label('cronjob');
71 $search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
72 
73 $object = new Cronjob($db);
74 
75 
76 /*
77  * Actions
78  */
79 
80 // Do we click on purge search criteria ?
81 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
82 {
83  $search_label='';
84  $status=-1;
85 }
86 
87 $filter=array();
88 if (!empty($search_label))
89 {
90  $filter['t.label']=$search_label;
91 }
92 
93 // Delete jobs
94 if ($action == 'confirm_delete' && $confirm == "yes" && $user->rights->cron->delete)
95 {
96  //Delete cron task
97  $object = new Cronjob($db);
98  $object->id=$id;
99  $result = $object->delete($user);
100 
101  if ($result < 0) {
102  setEventMessages($object->error, $object->errors, 'errors');
103  }
104 }
105 
106 // Execute jobs
107 if ($action == 'confirm_execute' && $confirm == "yes" && $user->rights->cron->execute)
108 {
109  if (! empty($conf->global->CRON_KEY) && $conf->global->CRON_KEY != $securitykey)
110  {
111  setEventMessages('Security key '.$securitykey.' is wrong', null, 'errors');
112  $action='';
113  }
114  else
115  {
116  $object = new Cronjob($db);
117  $job = $object->fetch($id);
118 
119  $now = dol_now(); // Date we start
120 
121  $resrunjob = $object->run_jobs($user->login); // Return -1 if KO, 1 if OK
122  if ($resrunjob < 0) {
123  setEventMessages($object->error, $object->errors, 'errors');
124  }
125 
126  // Programm next run
127  $res = $object->reprogram_jobs($user->login, $now);
128  if ($res > 0)
129  {
130  if ($resrunjob >= 0) // We add result of reprogram ony if no error message already reported
131  {
132  if ($object->lastresult >= 0) setEventMessages($langs->trans("JobFinished"), null, 'mesgs');
133  else setEventMessages($langs->trans("JobFinished"), null, 'errors');
134  }
135  $action='';
136  }
137  else
138  {
139  setEventMessages($object->error, $object->errors, 'errors');
140  $action='';
141  }
142 
143  header("Location: ".DOL_URL_ROOT.'/cron/list.php?status=-2'); // Make a call to avoid to run twice job when using back
144  exit;
145  }
146 }
147 
148 
149 /*
150  * View
151  */
152 
153 $form = new Form($db);
154 
155 $pagetitle=$langs->trans("CronList");
156 
157 llxHeader('',$pagetitle);
158 
159 
160 $sql = "SELECT";
161 $sql.= " t.rowid,";
162 $sql.= " t.tms,";
163 $sql.= " t.datec,";
164 $sql.= " t.jobtype,";
165 $sql.= " t.label,";
166 $sql.= " t.command,";
167 $sql.= " t.classesname,";
168 $sql.= " t.objectname,";
169 $sql.= " t.methodename,";
170 $sql.= " t.params,";
171 $sql.= " t.md5params,";
172 $sql.= " t.module_name,";
173 $sql.= " t.priority,";
174 $sql.= " t.datelastrun,";
175 $sql.= " t.datenextrun,";
176 $sql.= " t.dateend,";
177 $sql.= " t.datestart,";
178 $sql.= " t.lastresult,";
179 $sql.= " t.datelastresult,";
180 $sql.= " t.lastoutput,";
181 $sql.= " t.unitfrequency,";
182 $sql.= " t.frequency,";
183 $sql.= " t.status,";
184 $sql.= " t.fk_user_author,";
185 $sql.= " t.fk_user_mod,";
186 $sql.= " t.note,";
187 $sql.= " t.nbrun,";
188 $sql.= " t.libname,";
189 $sql.= " t.test";
190 $sql.= " FROM ".MAIN_DB_PREFIX."cronjob as t";
191 $sql.= " WHERE 1 = 1";
192 if ($status >= 0 && $status < 2) $sql.= " AND t.status = ".(empty($status)?'0':'1');
193 if ($status == 2) $sql.= " AND t.status = 2";
194 //Manage filter
195 if (is_array($filter) && count($filter)>0) {
196  foreach($filter as $key => $value) {
197  $sql.= ' AND '.$key.' LIKE \'%'.$value.'%\'';
198  }
199 }
200 $sqlwhere = array();
201 if (!empty($module_name)) {
202  $sqlwhere[]='(t.module_name='.$module_name.')';
203 }
204 if (count($sqlwhere)>0) {
205  $sql.= " WHERE ".implode(' AND ',$sqlwhere);
206 }
207 // Add where from extra fields
208 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
209 // Add where from hooks
210 $parameters=array();
211 $reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // Note that $action and $object may have been modified by hook
212 $sql.=$hookmanager->resPrint;
213 
214 $sql.= $db->order($sortfield,$sortorder);
215 
216 // Count total nb of records
217 $nbtotalofrecords = '';
218 if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
219 {
220  $result = $db->query($sql);
221  $nbtotalofrecords = $db->num_rows($result);
222 }
223 
224 $sql.= $db->plimit($limit+1, $offset);
225 
226 $result=$db->query($sql);
227 if (! $result) dol_print_error($db);
228 
229 $num = $db->num_rows($result);
230 
231 $param='&status='.$status;
232 if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
233 if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
234 if ($search_label) $param.='&search_label='.$search_label;
235 if ($optioncss != '') $param.='&optioncss='.$optioncss;
236 // Add $param from extra fields
237 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
238 
239 //$massactionbutton=$form->selectMassAction('', $massaction == 'presend' ? array() : array('presend'=>$langs->trans("SendByMail"), 'builddoc'=>$langs->trans("PDFMerge")));
240 
241 $stringcurrentdate = $langs->trans("CurrentHour").': '.dol_print_date(dol_now(), 'dayhour');
242 
243 if ($action == 'delete')
244 {
245  print $form->formconfirm($_SERVER['PHP_SELF']."?id=".$id.'&status='.$status,$langs->trans("CronDelete"), $langs->trans("CronConfirmDelete"),"confirm_delete",'','',1);
246 }
247 if ($action == 'execute')
248 {
249  print $form->formconfirm($_SERVER['PHP_SELF']."?id=".$id.'&status='.$status.'&securitykey='.$securitykey, $langs->trans("CronExecute"),$langs->trans("CronConfirmExecute"),"confirm_execute",'','',1);
250 }
251 
252 
253 print '<form method="GET" action="'.$url_form.'" name="search_form">'."\n";
254 print '<input type="hidden" name="status" value="'.$status.'" >';
255 if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
256 print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
257 print '<input type="hidden" name="action" value="list">';
258 print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
259 print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
260 print '<input type="hidden" name="page" value="'.$page.'">';
261 print '<input type="hidden" name="viewstatut" value="'.$viewstatut.'">';
262 
263 // Line with explanation and button new job
264 if (! $user->rights->cron->create)
265 {
266  $buttontoshow.='<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("CronCreateJob").'</a>';
267 }
268 else
269 {
270  $buttontoshow.='<a class="butAction" style="margin-right: 0px;margin-left: 0px;" href="'.DOL_URL_ROOT.'/cron/card.php?action=create">'.$langs->trans("CronCreateJob").'</a>';
271 }
272 
273 print_barre_liste($pagetitle, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $buttontoshow, $num, $nbtotalofrecords, 'title_setup', 0, '', '', $limit);
274 
275 
276 print $langs->trans('CronInfo').'<br>';
277 
278 $text =$langs->trans("HoursOnThisPageAreOnServerTZ").' '.$stringcurrentdate.'<br>';
279 if (! empty($conf->global->CRON_WARNING_DELAY_HOURS)) $text.=$langs->trans("WarningCronDelayed", $conf->global->CRON_WARNING_DELAY_HOURS);
280 print info_admin($text);
281 print '<br>';
282 
283 
284 print '<div class="div-table-responsive">';
285 print '<table class="noborder">';
286 
287 print '<tr class="liste_titre_filter">';
288 print '<td class="liste_titre">&nbsp;</td>';
289 print '<td class="liste_titre">';
290 print '<input type="text" class="flat" name="search_label" value="'.$search_label.'" size="10">';
291 print '</td>';
292 print '<td class="liste_titre">&nbsp;</td>';
293 print '<td class="liste_titre">&nbsp;</td>';
294 print '<td class="liste_titre">&nbsp;</td>';
295 print '<td class="liste_titre">&nbsp;</td>';
296 print '<td class="liste_titre">&nbsp;</td>';
297 print '<td class="liste_titre">&nbsp;</td>';
298 print '<td class="liste_titre">&nbsp;</td>';
299 print '<td class="liste_titre">&nbsp;</td>';
300 print '<td class="liste_titre">&nbsp;</td>';
301 print '<td class="liste_titre">&nbsp;</td>';
302 print '<td class="liste_titre" align="center">';
303 print $form->selectarray('status', array('0'=>$langs->trans("Disabled"), '1'=>$langs->trans("Enabled"), '-2'=>$langs->trans("EnabledAndDisabled"), '2'=>$langs->trans("Archived")), $status, 1);
304 print '</td><td class="liste_titre" align="right">';
305 print '<input class="liste_titre" type="image" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
306 print '<input type="image" class="liste_titre" name="button_removefilter" src="'.img_picto($langs->trans("Search"),'searchclear.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">';
307 print '</td>';
308 print '</tr>';
309 
310 print '<tr class="liste_titre">';
311 print_liste_field_titre("ID",$_SERVER["PHP_SELF"],"t.rowid","",$param,'',$sortfield,$sortorder);
312 print_liste_field_titre("CronLabel",$_SERVER["PHP_SELF"],"t.label","",$param,'',$sortfield,$sortorder);
313 print_liste_field_titre("CronTask",'','',"",$param,'',$sortfield,$sortorder);
314 print_liste_field_titre("CronFrequency",'',"","",$param,'',$sortfield,$sortorder);
315 print_liste_field_titre("CronDtStart",$_SERVER["PHP_SELF"],"t.datestart","",$param,'align="center"',$sortfield,$sortorder);
316 print_liste_field_titre("CronDtEnd",$_SERVER["PHP_SELF"],"t.dateend","",$param,'align="center"',$sortfield,$sortorder);
317 print_liste_field_titre("CronMaxRun",$_SERVER["PHP_SELF"],"t.maxrun","",$param,'align="right"',$sortfield,$sortorder);
318 print_liste_field_titre("CronNbRun",$_SERVER["PHP_SELF"],"t.nbrun","",$param,'align="right"',$sortfield,$sortorder);
319 print_liste_field_titre("CronDtLastLaunch",$_SERVER["PHP_SELF"],"t.datelastrun","",$param,'align="center"',$sortfield,$sortorder);
320 print_liste_field_titre("CronLastResult",$_SERVER["PHP_SELF"],"t.lastresult","",$param,'align="center"',$sortfield,$sortorder);
321 print_liste_field_titre("CronLastOutput",$_SERVER["PHP_SELF"],"t.lastoutput","",$param,'',$sortfield,$sortorder);
322 print_liste_field_titre("CronDtNextLaunch",$_SERVER["PHP_SELF"],"t.datenextrun","",$param,'align="center"',$sortfield,$sortorder);
323 print_liste_field_titre("Status",$_SERVER["PHP_SELF"],"t.status","",$param,'align="center"',$sortfield,$sortorder);
325 print "</tr>\n";
326 
327 
328 if ($num > 0)
329 {
330  // Loop on each job
331  $style='pair';
332  $now = dol_now();
333  $i=0;
334  $var=true;
335  $totalarray=array();
336  while ($i < min($num,$limit))
337  {
338  $obj = $db->fetch_object($result);
339 
340  if (empty($obj)) break;
341  if (! verifCond($obj->test)) continue; // Discard line with test = false
342 
343  print '<tr class="oddeven">';
344 
345  print '<td class="nowrap">';
346  print '<a href="'.DOL_URL_ROOT.'/cron/card.php?id='.$obj->rowid.'">';
347  print img_picto('', 'object_cron').' ';
348  print $obj->rowid;
349  print '</a>';
350  print '</td>';
351 
352  print '<td>';
353  if (! empty($obj->label))
354  {
355  print '<a href="'.DOL_URL_ROOT.'/cron/card.php?id='.$obj->rowid.'">'.$langs->trans($obj->label).'</a>';
356  }
357  else
358  {
359  //print $langs->trans('CronNone');
360  }
361  print '</td>';
362 
363  print '<td>';
364  if ($obj->jobtype=='method')
365  {
366  $text=$langs->trans("CronClass");
367  $texttoshow=$langs->trans('CronModule').': '.$obj->module_name.'<br>';
368  $texttoshow.=$langs->trans('CronClass').': '. $obj->classesname.'<br>';
369  $texttoshow.=$langs->trans('CronObject').': '. $obj->objectname.'<br>';
370  $texttoshow.=$langs->trans('CronMethod').': '. $obj->methodename;
371  $texttoshow.='<br>'.$langs->trans('CronArgs').': '. $obj->params;
372  $texttoshow.='<br>'.$langs->trans('Comment').': '. $langs->trans($obj->note);
373  }
374  elseif ($obj->jobtype=='command')
375  {
376  $text=$langs->trans('CronCommand');
377  $texttoshow=$langs->trans('CronCommand').': '.dol_trunc($obj->command);
378  $texttoshow.='<br>'.$langs->trans('CronArgs').': '. $obj->params;
379  $texttoshow.='<br>'.$langs->trans('Comment').': '. $langs->trans($obj->note);
380  }
381  print $form->textwithpicto($text, $texttoshow, 1);
382  print '</td>';
383 
384  print '<td>';
385  if($obj->unitfrequency == "60") print $langs->trans('CronEach')." ".($obj->frequency)." ".$langs->trans('Minutes');
386  if($obj->unitfrequency == "3600") print $langs->trans('CronEach')." ".($obj->frequency)." ".$langs->trans('Hours');
387  if($obj->unitfrequency == "86400") print $langs->trans('CronEach')." ".($obj->frequency)." ".$langs->trans('Days');
388  if($obj->unitfrequency == "604800") print $langs->trans('CronEach')." ".($obj->frequency)." ".$langs->trans('Weeks');
389  print '</td>';
390 
391  print '<td class="center">';
392  if(!empty($obj->datestart)) {print dol_print_date($db->jdate($obj->datestart),'dayhour');}
393  print '</td>';
394 
395  print '<td class="center">';
396  if(!empty($obj->dateend)) {print dol_print_date($db->jdate($obj->dateend),'dayhour');}
397  print '</td>';
398 
399  print '<td align="right">';
400  if (!empty($obj->maxrun)) {print $obj->maxrun;}
401  print '</td>';
402 
403  print '<td align="right">';
404  if (!empty($obj->nbrun)) {print $obj->nbrun;} else {print '0';}
405  print '</td>';
406 
407  print '<td class="center">';
408  if(!empty($obj->datelastrun)) {print dol_print_date($db->jdate($obj->datelastrun),'dayhour');}
409  print '</td>';
410 
411  print '<td class="center">';
412  if ($obj->lastresult != '') {print dol_trunc($obj->lastresult);}
413  print '</td>';
414 
415  print '<td>';
416  if(!empty($obj->lastoutput)) {print dol_trunc(nl2br($obj->lastoutput),50);}
417  print '</td>';
418 
419  print '<td class="center">';
420  if(!empty($obj->datenextrun)) {print dol_print_date($db->jdate($obj->datenextrun),'dayhour');}
421  print '</td>';
422 
423  // Status
424  print '<td align="center">';
425  if ($obj->status == 1) print $langs->trans("Enabled");
426  elseif ($obj->status == 2) print $langs->trans("Archived");
427  else print $langs->trans("Disabled");
428  print '</td>';
429 
430  print '<td align="right" class="nowrap">';
431  if ($user->rights->cron->create)
432  {
433  print "<a href=\"".DOL_URL_ROOT."/cron/card.php?id=".$obj->rowid."&action=edit".($sortfield?'&sortfield='.$sortfield:'').($sortorder?'&sortorder='.$sortorder:'').$param."&backtourl=".urlencode($_SERVER["PHP_SELF"])."\" title=\"".dol_escape_htmltag($langs->trans('Edit'))."\">".img_picto($langs->trans('Edit'),'edit')."</a> &nbsp;";
434  }
435  if ($user->rights->cron->delete)
436  {
437  print "<a href=\"".$_SERVER["PHP_SELF"]."?id=".$obj->rowid."&action=delete".($sortfield?'&sortfield='.$sortfield:'').($sortorder?'&sortorder='.$sortorder:'').$param."\" title=\"".dol_escape_htmltag($langs->trans('CronDelete'))."\">".img_picto($langs->trans('CronDelete'),'delete')."</a> &nbsp;";
438  } else {
439  print "<a href=\"#\" title=\"".dol_escape_htmltag($langs->trans('NotEnoughPermissions'))."\">".img_picto($langs->trans('NotEnoughPermissions'), 'delete')."</a> &nbsp; ";
440  }
441  if ($user->rights->cron->execute)
442  {
443  if (!empty($obj->status)) print "<a href=\"".$_SERVER["PHP_SELF"]."?id=".$obj->rowid."&action=execute".(empty($conf->global->CRON_KEY)?'':'&securitykey='.$conf->global->CRON_KEY).($sortfield?'&sortfield='.$sortfield:'').($sortorder?'&sortorder='.$sortorder:'').$param."\" title=\"".dol_escape_htmltag($langs->trans('CronExecute'))."\">".img_picto($langs->trans('CronExecute'),"play")."</a>";
444  else print "<a href=\"#\" title=\"".dol_escape_htmltag($langs->trans('JobDisabled'))."\">".img_picto($langs->trans('JobDisabled'),"playdisabled")."</a>";
445  } else {
446  print "<a href=\"#\" title=\"".dol_escape_htmltag($langs->trans('NotEnoughPermissions'))."\">".img_picto($langs->trans('NotEnoughPermissions'),"playdisabled")."</a>";
447  }
448  print '</td>';
449 
450  print '</tr>';
451 
452  $i++;
453  }
454 }
455 else
456 {
457  print '<tr><td colspan="9" class="opacitymedium">'.$langs->trans('CronNoJobs').'</td></tr>';
458 }
459 
460 print '</table>';
461 print '</div>';
462 
463 print '</from>';
464 
465 
466 print '<br><br>';
467 
468 
470 
471 llxFooter();
472 
473 $db->close();
verifCond($strRights)
Verify if condition in string is ok or not.
llxFooter()
Empty footer.
Definition: wrapper.php:58
img_picto($titlealt, $picto, $moreatt= '', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='')
Show picto whatever it's its name (generic function)
setEventMessages($mesg, $mesgs, $style='mesgs')
Set event messages in dol_events session object.
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '...' if string larger than length.
if(!GETPOST('transkey')&&!GETPOST('transphrase')) else
View.
Definition: notice.php:43
dol_print_cron_urls()
Show information with URLs to launch jobs.
Definition: cron.lib.php:84
if(GETPOST('cancel','alpha')) if(!GETPOST('confirmmassaction','alpha')&&$massaction!= 'presend'&&$massaction!= 'confirm_presend')
Draft customers invoices.
Definition: list.php:147
dol_print_error($db='', $error='', $errors=null)
Affiche message erreur system avec toutes les informations pour faciliter le diagnostic et la remonte...
if(empty($reshook)) $form
View.
Definition: perms.php:103
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields...
GETPOST($paramname, $check='none', $method=0, $filter=NULL, $options=NULL, $noreplace=0)
Return value of a param into GET or POST supervariable.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
Class to manage standard extra fields.
Class to manage generation of HTML components Only common components must be here.
print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='title_generic.png', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0)
Print a title with navigation controls for pagination.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1')
Show information for admin users or standard users.
llxHeader()
Empty header.
Definition: wrapper.php:46
dol_now($mode='gmt')
Return date for now.
dol_print_date($time, $format='', $tzoutput='tzserver', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
print
Draft customers invoices.
Definition: index.php:91
Crob Job class.
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="")
Show title line of an array.