Merge branch 'develop' of git://github.com/Dolibarr/dolibarr into develop

This commit is contained in:
Grand Philippe 2013-03-23 10:22:13 +01:00
commit 3fc8dffadf
50 changed files with 2867 additions and 741 deletions

View File

@ -2,7 +2,7 @@
/* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2012 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2011 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2012-2103 Juanjo Menent <jmenent@2byte.es>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -57,12 +57,12 @@ if ($action == 'update')
dolibarr_set_const($db, "MAIN_PROFID4_IN_ADDRESS", $_POST["MAIN_PROFID4_IN_ADDRESS"],'chaine',0,'',$conf->entity);
dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT", $_POST["MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT"],'chaine',0,'',$conf->entity);
if ($conf->global->MAIN_FEATURES_LEVEL > 1)
{
// if ($conf->global->MAIN_FEATURES_LEVEL > 1)
// {
dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS", $_POST["MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS"],'chaine',0,'',$conf->entity);
dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_DESC", $_POST["MAIN_GENERATE_DOCUMENTS_HIDE_DESC"],'chaine',0,'',$conf->entity);
dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_REF", $_POST["MAIN_GENERATE_DOCUMENTS_HIDE_REF"],'chaine',0,'',$conf->entity);
}
// }
header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
exit;
@ -224,8 +224,8 @@ if ($action == 'edit') // Edit
print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT',(! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT))?$conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT:0,1);
print '</td></tr>';
if ($conf->global->MAIN_FEATURES_LEVEL > 1)
{
// if ($conf->global->MAIN_FEATURES_LEVEL > 1)
// {
//Desc
$var=!$var;
print '<tr '.$bc[$var].'><td>'.$langs->trans("HideDescOnPDF").'</td><td>';
@ -243,7 +243,7 @@ if ($action == 'edit') // Edit
print '<tr '.$bc[$var].'><td>'.$langs->trans("HideDetailsOnPDF").'</td><td>';
print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS',(! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS))?$conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS:0,1);
print '</td></tr>';
}
// }
print '</table>';
@ -418,8 +418,8 @@ else // Show
print "</td>";
print '</tr>';
if ($conf->global->MAIN_FEATURES_LEVEL > 1)
{
// if ($conf->global->MAIN_FEATURES_LEVEL > 1)
// {
//Desc
$var=!$var;
print '<tr '.$bc[$var].'><td>'.$langs->trans("HideDescOnPDF").'</td><td colspan="2">';
@ -437,7 +437,7 @@ else // Show
print '<tr '.$bc[$var].'><td>'.$langs->trans("HideDetailsOnPDF").'</td><td colspan="2">';
print yn($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS,1);
print '</td></tr>';
}
// }
print '</table>';

View File

@ -1012,13 +1012,13 @@ abstract class CommonObject
/**
* Save a new position (field rang) for details lines.
* You can choose to set position for lines with already a position or lines without any position defined.
* Call this function only for table that contains a field fk_parent_line.
*
* @param boolean $renum true to renum all already ordered lines, false to renum only not already ordered lines.
* @param string $rowidorder ASC or DESC
* @param boolean $renum true to renum all already ordered lines, false to renum only not already ordered lines.
* @param string $rowidorder ASC or DESC
* @param boolean $fk_parent_line Table with fk_parent_line field or not
* @return void
*/
function line_order($renum=false, $rowidorder='ASC')
function line_order($renum=false, $rowidorder='ASC', $fk_parent_line=true)
{
if (! $this->table_element_line)
{
@ -1055,7 +1055,8 @@ abstract class CommonObject
// We first search all lines that are parent lines (for multilevel details lines)
$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
$sql.= ' AND fk_parent_line IS NULL';
if ($fk_parent_line)
$sql.= ' AND fk_parent_line IS NULL';
$sql.= ' ORDER BY rang ASC, rowid '.$rowidorder;
dol_syslog(get_class($this)."::line_order search all parent lines sql=".$sql, LOG_DEBUG);
@ -1130,12 +1131,13 @@ abstract class CommonObject
/**
* Update a line to have a lower rank
*
* @param int $rowid Id of line
* @param int $rowid Id of line
* @param boolean $fk_parent_line Table with fk_parent_line field or not
* @return void
*/
function line_up($rowid)
function line_up($rowid, $fk_parent_line=true)
{
$this->line_order();
$this->line_order(false, 'ASC', $fk_parent_line);
// Get rang of line
$rang = $this->getRangOfLine($rowid);
@ -1147,12 +1149,13 @@ abstract class CommonObject
/**
* Update a line to have a higher rank
*
* @param int $rowid Id of line
* @param int $rowid Id of line
* @param boolean $fk_parent_line Table with fk_parent_line field or not
* @return void
*/
function line_down($rowid)
function line_down($rowid, $fk_parent_line=true)
{
$this->line_order();
$this->line_order(false, 'ASC', $fk_parent_line);
// Get rang of line
$rang = $this->getRangOfLine($rowid);

View File

@ -0,0 +1,93 @@
<?php
/*
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file cron/class/html.formcron.class.php
* \brief Fichier de la classe des fonctions predefinie de composants html cron
*/
/**
* Class to manage building of HTML components
*/
class FormCron extends Form
{
var $db;
var $error;
/**
* Constructor
*
* @param DoliDB $db Database handler
*/
function __construct($db)
{
$this->db = $db;
return 1;
}
/**
* Display On Off selector
*
* @param string $htmlname Html control name
* @param string $selected selected value
* @param string $readonly Select is read only or not
* @return string HTML select field
*/
function select_typejob($htmlname,$selected=0,$readonly=0)
{
global $langs;
$langs->load('cron@cron');
if (!empty($readonly)) {
if ($selected=='command') {
$out= $langs->trans('CronType_command');
$out.='<SELECT name="'.$htmlname.'" id="'.$htmlname.'" style="display:none"/>';
$out.= '<OPTION value="command" selected=\"selected\">'.$langs->trans('CronType_command').'</OPTION>';
$out.='</SELECT>';
} elseif ($selected=='method') {
$out= $langs->trans('CronType_method');
$out.='<SELECT name="'.$htmlname.'" id="'.$htmlname.'" style="display:none"/>';
$out.= '<OPTION value="method" selected=\"selected\">'.$langs->trans('CronType_method').'</OPTION>';
$out.='</SELECT>';
}
}else {
$out='<SELECT name="'.$htmlname.'" id="'.$htmlname.'" />';
if ($selected=='command') {
$selected_attr=' selected=\"selected\" ';
} else {
$selected_attr='';
}
$out.= '<OPTION value="command" '.$selected_attr.'>'.$langs->trans('CronType_command').'</OPTION>';
if ($selected=='method') {
$selected_attr=' selected=\"selected\" ';
} else {
$selected_attr='';
}
$out.= '<OPTION value="method" '.$selected_attr.'>'.$langs->trans('CronType_method').'</OPTION>';
$out.='</SELECT>';
}
return $out;
}
}

View File

@ -0,0 +1,71 @@
<?php
/* Copyright (C) 2012 Nicolas Villa aka Boyquotes http://informetic.fr
* Copyright (C) 2013 Florian Henry <florian.henry@opn-concept.pro>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file cron/lib/cron.lib.php
* \brief Ensemble de fonctions de base pour le module jobs
* \ingroup jobs
*/
/**
* Return array of tabs to used on pages for third parties cards.
*
* @param Object $object Object company shown
* @return array Array of tabs
*/
function cronadmin_prepare_head()
{
global $langs, $conf, $user;
$h = 0;
$head = array();
$head[$h][0] = dol_buildpath('/cron/admin/cron.php', 1);
$head[$h][1] = $langs->trans("CronSetup");
$head[$h][2] = 'setup';
$h++;
complete_head_from_modules($conf, $langs, $object, $head, $h, 'cronadmin');
complete_head_from_modules($conf, $langs, $object, $head, $h, 'cronadmin', 'remove');
return $head;
}
function cron_prepare_head($object)
{
global $langs, $conf, $user;
$h = 0;
$head = array();
$head[$h][0] = dol_buildpath('/cron/card.php', 1).'?id='.$object->id;
$head[$h][1] = $langs->trans("CronTask");
$head[$h][2] = 'card';
$h++;
$head[$h][0] = dol_buildpath('/cron/info.php', 1).'?id='.$object->id;
$head[$h][1] = $langs->trans("CronInfoPage");
$head[$h][2] = 'info';
$h++;
complete_head_from_modules($conf, $langs, $object, $head, $h, 'cron');
complete_head_from_modules($conf, $langs, $object, $head, $h, 'cron', 'remove');
return $head;
}

View File

@ -33,9 +33,10 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php';
* @param int $type_user 0=Menu for backoffice, 1=Menu for front office
* @param array &$tabMenu If array with menu entries already loaded, we put this array here (in most cases, it's empty)
* @param array &$menu Object Menu to return back list of menu entries
* @param int $noout Disable output (Initialise &$menu only).
* @return void
*/
function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0)
{
global $user,$conf,$langs,$dolibarr_main_db_name;
@ -45,18 +46,19 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
$id='mainmenu';
$listofmodulesforexternal=explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL);
print_start_menu_array();
if (empty($noout)) print_start_menu_array();
// Home
$showmode=1;
$classname="";
if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "home") { $classname='class="tmenusel"'; $_SESSION['idmenu']=''; }
else $classname = 'class="tmenu"';
$idsel='home';
print_start_menu_entry($idsel,$classname);
print_text_menu_entry($langs->trans("Home"), 1, DOL_URL_ROOT.'/index.php?mainmenu=home&amp;leftmenu=', $id, $idsel, $classname, $atarget);
print_end_menu_entry();
$menu->add(DOL_URL_ROOT.'/index.php?mainmenu=home&amp;leftmenu=', $langs->trans("Home"), 0, $showmode, $atarget, $mainmenu, $leftmenu);
if (empty($noout)) print_start_menu_entry($idsel,$classname);
if (empty($noout)) print_text_menu_entry($langs->trans("Home"), 1, DOL_URL_ROOT.'/index.php?mainmenu=home&amp;leftmenu=', $id, $idsel, $classname, $atarget);
if (empty($noout)) print_end_menu_entry();
$menu->add('/index.php?mainmenu=home&amp;leftmenu=', $langs->trans("Home"), 0, $showmode, $atarget, "home", '');
// Third parties
$tmpentry=array('enabled'=>(! empty($conf->societe->enabled) || ! empty($conf->fournisseur->enabled)), 'perms'=>(! empty($user->rights->societe->lire) || ! empty($user->rights->fournisseur->lire)), 'module'=>'societe|fournisseur');
@ -71,10 +73,10 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
else $classname = 'class="tmenu"';
$idsel='companies';
print_start_menu_entry($idsel,$classname);
print_text_menu_entry($langs->trans("ThirdParties"), $showmode, DOL_URL_ROOT.'/societe/index.php?mainmenu=companies&amp;leftmenu=', $id, $idsel, $classname, $atarget);
print_end_menu_entry();
$menu->add(DOL_URL_ROOT.'/societe/index.php?mainmenu=companies&amp;leftmenu=', $langs->trans("ThirdParties"), 0, $showmode, $atarget, $mainmenu, $leftmenu);
if (empty($noout)) print_start_menu_entry($idsel,$classname);
if (empty($noout)) print_text_menu_entry($langs->trans("ThirdParties"), $showmode, DOL_URL_ROOT.'/societe/index.php?mainmenu=companies&amp;leftmenu=', $id, $idsel, $classname, $atarget);
if (empty($noout)) print_end_menu_entry();
$menu->add('/societe/index.php?mainmenu=companies&amp;leftmenu=', $langs->trans("ThirdParties"), 0, $showmode, $atarget, "companies", '');
}
// Products-Services
@ -100,10 +102,10 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
$chaine.=$langs->trans("Services");
}
print_start_menu_entry($idsel,$classname);
print_text_menu_entry($chaine, $showmode, DOL_URL_ROOT.'/product/index.php?mainmenu=products&amp;leftmenu=', $id, $idsel, $classname, $atarget);
print_end_menu_entry();
$menu->add(DOL_URL_ROOT.'/product/index.php?mainmenu=products&amp;leftmenu=', $chaine, 0, $showmode, $atarget, $mainmenu, $leftmenu);
if (empty($noout)) print_start_menu_entry($idsel,$classname);
if (empty($noout)) print_text_menu_entry($chaine, $showmode, DOL_URL_ROOT.'/product/index.php?mainmenu=products&amp;leftmenu=', $id, $idsel, $classname, $atarget);
if (empty($noout)) print_end_menu_entry();
$menu->add('/product/index.php?mainmenu=products&amp;leftmenu=', $chaine, 0, $showmode, $atarget, "products", '');
}
// Commercial
@ -124,10 +126,10 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
else $classname = 'class="tmenu"';
$idsel='commercial';
print_start_menu_entry($idsel,$classname);
print_text_menu_entry($langs->trans("Commercial"), $showmode, DOL_URL_ROOT.'/comm/index.php?mainmenu=commercial&amp;leftmenu=', $id, $idsel, $classname, $atarget);
print_end_menu_entry();
$menu->add(DOL_URL_ROOT.'/comm/index.php?mainmenu=commercial&amp;leftmenu=', $langs->trans("Commercial"), 0, $showmode, $atarget, $mainmenu, $leftmenu);
if (empty($noout)) print_start_menu_entry($idsel,$classname);
if (empty($noout)) print_text_menu_entry($langs->trans("Commercial"), $showmode, DOL_URL_ROOT.'/comm/index.php?mainmenu=commercial&amp;leftmenu=', $id, $idsel, $classname, $atarget);
if (empty($noout)) print_end_menu_entry();
$menu->add('/comm/index.php?mainmenu=commercial&amp;leftmenu=', $langs->trans("Commercial"), 0, $showmode, $atarget, "commercial", "");
}
// Financial
@ -144,10 +146,10 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
else $classname = 'class="tmenu"';
$idsel='accountancy';
print_start_menu_entry($idsel,$classname);
print_text_menu_entry($langs->trans("MenuFinancial"), $showmode, DOL_URL_ROOT.'/compta/index.php?mainmenu=accountancy&amp;leftmenu=', $id, $idsel, $classname, $atarget);
print_end_menu_entry();
$menu->add(DOL_URL_ROOT.'/compta/index.php?mainmenu=accountancy&amp;leftmenu=', $langs->trans("MenuFinancial"), 0, $showmode, $atarget, $mainmenu, $leftmenu);
if (empty($noout)) print_start_menu_entry($idsel,$classname);
if (empty($noout)) print_text_menu_entry($langs->trans("MenuFinancial"), $showmode, DOL_URL_ROOT.'/compta/index.php?mainmenu=accountancy&amp;leftmenu=', $id, $idsel, $classname, $atarget);
if (empty($noout)) print_end_menu_entry();
$menu->add('/compta/index.php?mainmenu=accountancy&amp;leftmenu=', $langs->trans("MenuFinancial"), 0, $showmode, $atarget, "accountancy", '');
}
// Bank
@ -165,10 +167,10 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
else $classname = 'class="tmenu"';
$idsel='bank';
print_start_menu_entry($idsel,$classname);
print_text_menu_entry($langs->trans("MenuBankCash"), $showmode, DOL_URL_ROOT.'/compta/bank/index.php?mainmenu=bank&amp;leftmenu=', $id, $idsel, $classname, $atarget);
print_end_menu_entry();
$menu->add(DOL_URL_ROOT.'/compta/bank/index.php?mainmenu=bank&amp;leftmenu=', $langs->trans("MenuBankCash"), 0, $showmode, $atarget, $mainmenu, $leftmenu);
if (empty($noout)) print_start_menu_entry($idsel,$classname);
if (empty($noout)) print_text_menu_entry($langs->trans("MenuBankCash"), $showmode, DOL_URL_ROOT.'/compta/bank/index.php?mainmenu=bank&amp;leftmenu=', $id, $idsel, $classname, $atarget);
if (empty($noout)) print_end_menu_entry();
$menu->add('/compta/bank/index.php?mainmenu=bank&amp;leftmenu=', $langs->trans("MenuBankCash"), 0, $showmode, $atarget, "bank", '');
}
// Projects
@ -185,10 +187,10 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
else $classname = 'class="tmenu"';
$idsel='project';
print_start_menu_entry($idsel,$classname);
print_text_menu_entry($langs->trans("Projects"), $showmode, DOL_URL_ROOT.'/projet/index.php?mainmenu=project&amp;leftmenu=', $id, $idsel, $classname, $atarget);
print_end_menu_entry();
$menu->add(DOL_URL_ROOT.'/projet/index.php?mainmenu=project&amp;leftmenu=', $langs->trans("Projects"), 0, $showmode, $atarget, $mainmenu, $leftmenu);
if (empty($noout)) print_start_menu_entry($idsel,$classname);
if (empty($noout)) print_text_menu_entry($langs->trans("Projects"), $showmode, DOL_URL_ROOT.'/projet/index.php?mainmenu=project&amp;leftmenu=', $id, $idsel, $classname, $atarget);
if (empty($noout)) print_end_menu_entry();
$menu->add('/projet/index.php?mainmenu=project&amp;leftmenu=', $langs->trans("Projects"), 0, $showmode, $atarget, "project", '');
}
// Tools
@ -205,10 +207,10 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
else $classname = 'class="tmenu"';
$idsel='tools';
print_start_menu_entry($idsel,$classname);
print_text_menu_entry($langs->trans("Tools"), $showmode, DOL_URL_ROOT.'/core/tools.php?mainmenu=tools&amp;leftmenu=', $id, $idsel, $classname, $atarget);
print_end_menu_entry();
$menu->add(DOL_URL_ROOT.'/core/tools.php?mainmenu=tools&amp;leftmenu=', $langs->trans("Tools"), 0, $showmode, $atarget, $mainmenu, $leftmenu);
if (empty($noout)) print_start_menu_entry($idsel,$classname);
if (empty($noout)) print_text_menu_entry($langs->trans("Tools"), $showmode, DOL_URL_ROOT.'/core/tools.php?mainmenu=tools&amp;leftmenu=', $id, $idsel, $classname, $atarget);
if (empty($noout)) print_end_menu_entry();
$menu->add('/core/tools.php?mainmenu=tools&amp;leftmenu=', $langs->trans("Tools"), 0, $showmode, $atarget, "tools", '');
}
// OSCommerce 1
@ -225,10 +227,10 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
else $classname = 'class="tmenu"';
$idsel='shop';
print_start_menu_entry($idsel,$classname);
print_text_menu_entry($langs->trans("OSCommerce"), $showmode, DOL_URL_ROOT.'/boutique/index.php?mainmenu=shop&amp;leftmenu=', $id, $idsel, $classname, $atarget);
print_end_menu_entry();
$menu->add(DOL_URL_ROOT.'/boutique/index.php?mainmenu=shop&amp;leftmenu=', $langs->trans("OSCommerce"), 0, $showmode, $atarget, $mainmenu, $leftmenu);
if (empty($noout)) print_start_menu_entry($idsel,$classname);
if (empty($noout)) print_text_menu_entry($langs->trans("OSCommerce"), $showmode, DOL_URL_ROOT.'/boutique/index.php?mainmenu=shop&amp;leftmenu=', $id, $idsel, $classname, $atarget);
if (empty($noout)) print_end_menu_entry();
$menu->add('/boutique/index.php?mainmenu=shop&amp;leftmenu=', $langs->trans("OSCommerce"), 0, $showmode, $atarget, "shop", '');
}
// Members
@ -243,10 +245,10 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
else $classname = 'class="tmenu"';
$idsel='members';
print_start_menu_entry($idsel,$classname);
print_text_menu_entry($langs->trans("MenuMembers"), $showmode, DOL_URL_ROOT.'/adherents/index.php?mainmenu=members&amp;leftmenu=', $id, $idsel, $classname, $atarget);
print_end_menu_entry();
$menu->add(DOL_URL_ROOT.'/adherents/index.php?mainmenu=members&amp;leftmenu=', $langs->trans("MenuMembers"), 0, $showmode, $atarget, $mainmenu, $leftmenu);
if (empty($noout)) print_start_menu_entry($idsel,$classname);
if (empty($noout)) print_text_menu_entry($langs->trans("MenuMembers"), $showmode, DOL_URL_ROOT.'/adherents/index.php?mainmenu=members&amp;leftmenu=', $id, $idsel, $classname, $atarget);
if (empty($noout)) print_end_menu_entry();
$menu->add('/adherents/index.php?mainmenu=members&amp;leftmenu=', $langs->trans("MenuMembers"), 0, $showmode, $atarget, "members", '');
}
@ -262,23 +264,24 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
$showmode=dol_eldy_showmenu($type_user,$newTabMenu[$i],$listofmodulesforexternal);
if ($showmode == 1)
{
if (preg_match("/^(http:\/\/|https:\/\/)/i",$newTabMenu[$i]['url']))
$url = $newTabMenu[$i]['url'];
if (! preg_match("/^(http:\/\/|https:\/\/)/i",$newTabMenu[$i]['url']))
{
$url = $newTabMenu[$i]['url'];
}
else
{
$url=dol_buildpath($newTabMenu[$i]['url'],1);
$param='';
if (! preg_match('/mainmenu/i',$url) || ! preg_match('/leftmenu/i',$url))
{
if (! preg_match('/\?/',$url)) $url.='?';
else $url.='&';
$url.='mainmenu='.$newTabMenu[$i]['mainmenu'].'&amp;leftmenu=';
if (! preg_match('/\?/',$url)) $param.='?';
else $param.='&';
$param.='mainmenu='.$newTabMenu[$i]['mainmenu'].'&amp;leftmenu=';
}
//$url.="idmenu=".$newTabMenu[$i]['rowid']; // Already done by menuLoad
$url = dol_buildpath($url,1).$param;
$shorturl = $newTabMenu[$i]['url'].$param;
}
$url=preg_replace('/__LOGIN__/',$user->login,$url);
$shorturl=preg_replace('/__LOGIN__/',$user->login,$shorturl);
// Define the class (top menu selected or not)
if (! empty($_SESSION['idmenu']) && $newTabMenu[$i]['rowid'] == $_SESSION['idmenu']) $classname='class="tmenusel"';
else if (! empty($_SESSION["mainmenu"]) && $newTabMenu[$i]['mainmenu'] == $_SESSION["mainmenu"]) $classname='class="tmenusel"';
@ -286,13 +289,13 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
}
else if ($showmode == 2) $classname='class="tmenu"';
print_start_menu_entry($idsel,$classname);
print_text_menu_entry($newTabMenu[$i]['titre'], $showmode, $url, $id, $idsel, $classname, ($newTabMenu[$i]['target']?$newTabMenu[$i]['target']:$atarget));
print_end_menu_entry();
$menu->add($url, $newTabMenu[$i]['titre'], 0, $showmode, ($newTabMenu[$i]['target']?$newTabMenu[$i]['target']:$atarget), $mainmenu, $leftmenu);
if (empty($noout)) print_start_menu_entry($idsel,$classname);
if (empty($noout)) print_text_menu_entry($newTabMenu[$i]['titre'], $showmode, $url, $id, $idsel, $classname, ($newTabMenu[$i]['target']?$newTabMenu[$i]['target']:$atarget));
if (empty($noout)) print_end_menu_entry();
$menu->add($shorturl, $newTabMenu[$i]['titre'], 0, $showmode, ($newTabMenu[$i]['target']?$newTabMenu[$i]['target']:$atarget), ($newTabMenu[$i]['mainmenu']?$newTabMenu[$i]['mainmenu']:$newTabMenu[$i]['rowid']), '');
}
print_end_menu_array();
if (empty($noout)) print_end_menu_array();
}
@ -391,19 +394,22 @@ function print_end_menu_array()
* @param array $menu_array_after Table of menu entries to show after entries of menu handler
* @param array &$tabMenu If array with menu entries already loaded, we put this array here (in most cases, it's empty)
* @param array &$menu Object Menu to return back list of menu entries
* @param int $noout Disable output (Initialise &$menu only).
* @param string $forcemainmenu 'x'=Force mainmenu to mainmenu='x'
* @param string $forceleftmenu 'all'=Force leftmenu to '' (= all)
* @return void
*/
function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu,&$menu)
function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu,&$menu,$noout=0,$forcemainmenu='',$forceleftmenu='')
{
global $user,$conf,$langs,$dolibarr_main_db_name,$mysoc;
$newmenu = $menu;
$mainmenu=$_SESSION["mainmenu"];
$leftmenu=$_SESSION["leftmenu"];
$mainmenu=($forcemainmenu?$forcemainmenu:$_SESSION["mainmenu"]);
$leftmenu=($forceleftmenu?'':$_SESSION["leftmenu"]);
// Show logo company
if (! empty($conf->global->MAIN_SHOW_LOGO))
if (empty($noout) && ! empty($conf->global->MAIN_SHOW_LOGO))
{
$mysoc->logo_mini=$conf->global->MAIN_INFO_SOCIETE_LOGO_MINI;
if (! empty($mysoc->logo_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini))
@ -1158,107 +1164,91 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
if (! is_array($menu_array)) return 0;
// Show menu
$alt=0;
$num=count($menu_array);
for ($i = 0; $i < $num; $i++)
if (empty($noout))
{
$showmenu=true;
if (! empty($conf->global->MAIN_MENU_HIDE_UNAUTHORIZED) && empty($menu_array[$i]['enabled'])) $showmenu=false;
$alt++;
if (empty($menu_array[$i]['level']) && $showmenu)
$alt=0;
$num=count($menu_array);
for ($i = 0; $i < $num; $i++)
{
if (($alt%2==0))
$showmenu=true;
if (! empty($conf->global->MAIN_MENU_HIDE_UNAUTHORIZED) && empty($menu_array[$i]['enabled'])) $showmenu=false;
$alt++;
if (empty($menu_array[$i]['level']) && $showmenu)
{
print '<div class="blockvmenuimpair">'."\n";
if (($alt%2==0))
{
print '<div class="blockvmenuimpair">'."\n";
}
else
{
print '<div class="blockvmenupair">'."\n";
}
}
else
// Place tabulation
$tabstring='';
$tabul=($menu_array[$i]['level'] - 1);
if ($tabul > 0)
{
print '<div class="blockvmenupair">'."\n";
for ($j=0; $j < $tabul; $j++)
{
$tabstring.='&nbsp; &nbsp;';
}
}
}
// Place tabulation
$tabstring='';
$tabul=($menu_array[$i]['level'] - 1);
if ($tabul > 0)
{
for ($j=0; $j < $tabul; $j++)
// For external modules
$url = dol_buildpath($menu_array[$i]['url'], 1);
print '<!-- Add menu entry with mainmenu='.$menu_array[$i]['mainmenu'].', leftmenu='.$menu_array[$i]['leftmenu'].', level='.$menu_array[$i]['level'].' -->'."\n";
// Menu niveau 0
if ($menu_array[$i]['level'] == 0)
{
$tabstring.='&nbsp; &nbsp;';
if ($menu_array[$i]['enabled'])
{
print '<div class="menu_titre">'.$tabstring.'<a class="vmenu" href="'.$url.'"'.($menu_array[$i]['target']?' target="'.$menu_array[$i]['target'].'"':'').'>'.$menu_array[$i]['titre'].'</a></div>'."\n";
}
else if ($showmenu)
{
print '<div class="menu_titre">'.$tabstring.'<font class="vmenudisabled">'.$menu_array[$i]['titre'].'</font></div>'."\n";
}
if ($showmenu)
print '<div class="menu_top"></div>'."\n";
}
}
// For external modules
$url = dol_buildpath($menu_array[$i]['url'], 1);
print '<!-- Add menu entry with mainmenu='.$menu_array[$i]['mainmenu'].', leftmenu='.$menu_array[$i]['leftmenu'].', level='.$menu_array[$i]['level'].' -->'."\n";
// Menu niveau 0
if ($menu_array[$i]['level'] == 0)
{
if ($menu_array[$i]['enabled'])
// Menu niveau > 0
if ($menu_array[$i]['level'] > 0)
{
print '<div class="menu_titre">'.$tabstring.'<a class="vmenu" href="'.$url.'"'.($menu_array[$i]['target']?' target="'.$menu_array[$i]['target'].'"':'').'>'.$menu_array[$i]['titre'].'</a></div>'."\n";
if ($menu_array[$i]['enabled'])
{
print '<div class="menu_contenu">'.$tabstring;
if ($menu_array[$i]['url']) print '<a class="vsmenu" href="'.$url.'"'.($menu_array[$i]['target']?' target="'.$menu_array[$i]['target'].'"':'').'>';
print $menu_array[$i]['titre'];
if ($menu_array[$i]['url']) print '</a>';
// If title is not pure text and contains a table, no carriage return added
if (! strstr($menu_array[$i]['titre'],'<table')) print '<br>';
print '</div>'."\n";
}
else if ($showmenu)
{
print '<div class="menu_contenu">'.$tabstring.'<font class="vsmenudisabled">'.$menu_array[$i]['titre'].'</font><br></div>'."\n";
}
}
else if ($showmenu)
// If next is a new block or end
if (empty($menu_array[$i+1]['level']))
{
print '<div class="menu_titre">'.$tabstring.'<font class="vmenudisabled">'.$menu_array[$i]['titre'].'</font></div>'."\n";
if ($showmenu)
print '<div class="menu_end"></div>'."\n";
print "</div>\n";
}
if ($showmenu)
print '<div class="menu_top"></div>'."\n";
}
// Menu niveau > 0
if ($menu_array[$i]['level'] > 0)
{
if ($menu_array[$i]['enabled'])
{
print '<div class="menu_contenu">'.$tabstring;
if ($menu_array[$i]['url']) print '<a class="vsmenu" href="'.$url.'"'.($menu_array[$i]['target']?' target="'.$menu_array[$i]['target'].'"':'').'>';
print $menu_array[$i]['titre'];
if ($menu_array[$i]['url']) print '</a>';
// If title is not pure text and contains a table, no carriage return added
if (! strstr($menu_array[$i]['titre'],'<table')) print '<br>';
print '</div>'."\n";
}
else if ($showmenu)
{
print '<div class="menu_contenu">'.$tabstring.'<font class="vsmenudisabled">'.$menu_array[$i]['titre'].'</font><br></div>'."\n";
}
}
// If next is a new block or end
if (empty($menu_array[$i+1]['level']))
{
if ($showmenu)
print '<div class="menu_end"></div>'."\n";
print "</div>\n";
}
}
return count($menu_array);
}
/**
* Core function to output top menu eldy
*
* @param DoliDB $db Database handler
* @param string $atarget Target
* @param int $type_user 0=Menu for backoffice, 1=Menu for front office
* @param array &$tabMenu If array with menu entries already loaded, we put this array here (in most cases, it's empty)
* @return void
*/
function print_jmobile_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
{
print '<ul data-role="listview" data-inset="true">';
foreach ($tabMenu as $key => $val)
{
print '<li><a href="#">'.$key.'</a></li>';
}
print '</ul>';
}
/**
* Function to test if an entry is enabled or not
*

View File

@ -112,7 +112,7 @@ class MenuManager
*/
function showmenu($mode)
{
global $conf;
global $conf, $langs;
require_once DOL_DOCUMENT_ROOT.'/core/menus/standard/eldy.lib.php';
@ -129,12 +129,53 @@ class MenuManager
if ($mode == 'top') $res=print_eldy_menu($this->db,$this->atarget,$this->type_user,$this->tabMenu,$this->menu);
if ($mode == 'left') $res=print_left_eldy_menu($this->db,$this->menu_array,$this->menu_array_after,$this->tabMenu,$this->menu);
if ($mode == 'jmobile') $res=print_jmobile_eldy_menu($this->db,$this->menu_array,$this->menu_array_after,$this->tabMenu,$this->menu);
if ($mode == 'jmobile')
{
$res=print_eldy_menu($this->db,$this->atarget,$this->type_user,$this->tabMenu,$this->menu,1);
foreach($this->menu->liste as $key => $val) // $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu'
{
print '<ul data-role="listview" data-inset="true">';
print '<li>';
if ($val['enabled'] == 1)
{
$relurl=dol_buildpath($val['url'],1);
print '<a href="#">'.$val['titre'].'</a>'."\n";
$submenu=new Menu();
$res=print_left_eldy_menu($this->db,$this->menu_array,$this->menu_array_after,$this->tabMenu,$submenu,1,$val['mainmenu'],$val['leftmenu']);
$nexturl=dol_buildpath($submenu->liste[0]['url'],1);
$canonrelurl=preg_replace('/\?.*$/','',$relurl);
$canonnexturl=preg_replace('/\?.*$/','',$nexturl);
//var_dump($canonrelurl);
//var_dump($canonnexturl);
if ($canonrelurl != $canonnexturl && $val['mainmenu'] != 'home')
{
// We add sub entry
print '<li><a href="'.$relurl.'">'.$langs->trans("MainArea").'-'.$val['titre'].'</a></li>'."\n";
}
var_dump($val['titre']);
foreach($submenu->liste as $key2 => $val2) // $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu'
{
$relurl2=dol_buildpath($val2['url'],1);
print '<li><a href="'.$relurl2.'">'.$val2['titre'].'</a></li>'."\n";
}
//var_dump($submenu);
}
if ($val['enabled'] == 2)
{
print '<font class="vsmenudisabled">'.$val['titre'].'</font>';
}
print '</li>';
print '</ul>'."\n";
print 'wwwwwww';
}
}
unset($this->menu);
//print 'xx'.$mode;
//var_dump($this->menu);
return $res;
}

View File

@ -1,5 +1,6 @@
<?php
/* Copyright (C) 2013 Laurent Destailleur <eldy@users.sourceforge.net>
/* Copyright (C) 2012 Nicolas Villa aka Boyquotes http://informetic.fr
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -16,11 +17,11 @@
*/
/**
* \defgroup webservices Module webservices
* \brief Module to enable the Dolibarr server of web services
* \file htdocs/core/modules/modCron.class.php
* \ingroup cron
* \brief File to describe cron module
* \defgroup cron Module cron
* \brief cron module descriptor.
* \file cron/core/modules/modCron.class.php
* \ingroup cron
* \brief Description and activation file for module Jobs
*/
include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
@ -65,11 +66,20 @@ class modCron extends DolibarrModules
//-------------
$this->depends = array();
$this->requiredby = array();
$this->langfiles = array("cron");
$this->langfiles = array("cron@cron");
// Constantes
//-----------
$this->const = array();
$this->const = array(
0=>array(
'MAIN_CRON_KEY',
'chaine',
'',
'CRON KEY',
0,
'main',
0
),);
// New pages on tabs
// -----------------
@ -79,25 +89,60 @@ class modCron extends DolibarrModules
//------
$this->boxes = array();
// Permissions
//------------
$this->rights = array();
$this->rights_class = 'cron';
$r=0;
// Permissions
$this->rights = array(); // Permission array used by this module
$this->rights_class = 'cron';
$r=0;
$this->rights[$r][0] = 23001;
$this->rights[$r][1] = 'Read cron jobs';
$this->rights[$r][3] = 1;
$this->rights[$r][4] = 'read';
$r++;
$this->rights[$r][0] = 23002;
$this->rights[$r][1] = 'Create cron Jobs';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'create';
$r++;
$this->rights[$r][0] = 23003;
$this->rights[$r][1] = 'Delete cron Jobs';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'delete';
$r++;
$this->rights[$r][0] = 23004;
$this->rights[$r][1] = 'Execute cron Jobs';
$this->rights[$r][3] = 0;
$this->rights[$r][4] = 'execute';
$r++;
// Main menu entries
$r=0;
$this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=home,fk_leftmenu=modulesadmintools', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
'type'=>'left', // This is a Left menu entry
'titre'=>'CronJobs',
'url'=>'/cron/index.php',
'langs'=>'cron@cron', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
'position'=>100,
'titre'=>'CronListActive',
'url'=>'/cron/list.php?status=1',
'langs'=>'cron', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
'position'=>200,
'enabled'=>'$leftmenu==\'modulesadmintools\'', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
'perms'=>'$user->admin', // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules
'perms'=>'$user->rights->cron->read', // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules
'target'=>'',
'user'=>2); // 0=Menu for internal users, 1=external users, 2=both
$r++;
$this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=home,fk_leftmenu=modulesadmintools', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
'type'=>'left', // This is a Left menu entry
'titre'=>'CronListInactive',
'url'=>'/cron/list.php?status=0',
'langs'=>'cron', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
'position'=>201,
'enabled'=>'$leftmenu==\'modulesadmintools\'', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
'perms'=>'$user->rights->cron->read', // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules
'target'=>'',
'user'=>2); // 0=Menu for internal users, 1=external users, 2=both
$r++;
}
@ -114,8 +159,6 @@ class modCron extends DolibarrModules
// Prevent pb of modules not correctly disabled
//$this->remove($options);
$sql = array();
return $this->_init($sql,$options);
}

View File

@ -1,34 +1,36 @@
<?php
/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2005-2013 Laurent Destailleur <eldy@users.sourceforge.org>
* Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
* Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file htdocs/cron/admin/cron.php
* \ingroup cron
* \brief Page to setup cron module
*/
* \file cron/admin/cron.php
* \ingroup cron
*/
require '../../main.inc.php';
// Dolibarr environment
$res = @include("../../main.inc.php"); // From htdocs directory
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/cron.lib.php';
$langs->load("admin");
$langs->load("cron");
$langs->load("admin");
$langs->load("cron");
if (! $user->admin)
accessforbidden();
@ -36,37 +38,40 @@ if (! $user->admin)
$actionsave=GETPOST("save");
// Sauvegardes parametres
if ($actionsave)
if (!empty($actionsave))
{
$i=0;
$i=0;
$db->begin();
$db->begin();
$i+=dolibarr_set_const($db,'CRON_KEY',trim(GETPOST("CRON_KEY")),'chaine',0,'',$conf->entity);
$i+=dolibarr_set_const($db,'MAIN_CRON_KEY',trim(GETPOST("MAIN_CRON_KEY")),'chaine',0,'',0);
if ($i >= 1)
{
$db->commit();
setEventMessage($langs->trans("SetupSaved"));
}
else
{
$db->rollback();
setEventMessage($langs->trans("Error"), 'errors');
}
if ($i >= 1)
{
$db->commit();
setEventMessage($langs->trans("SetupSaved"));
}
else
{
$db->rollback();
setEventMessage($langs->trans("Error"), 'errors');
}
}
/*
* View
*/
*/
llxHeader();
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
print_fiche_titre($langs->trans("CronSetup"),$linkback,'setup');
print $langs->trans("CronDesc")."<br>\n";
// Configuration header
$head = cronadmin_prepare_head();
dol_fiche_head($head,'setup',$langs->trans("Module2300Name"),0,'cron');
print "<br>\n";
print '<form name="agendasetupform" action="'.$_SERVER["PHP_SELF"].'" method="post">';
@ -76,13 +81,12 @@ print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print "<td>".$langs->trans("Parameter")."</td>";
print "<td>".$langs->trans("Value")."</td>";
//print "<td>".$langs->trans("Examples")."</td>";
print "<td>&nbsp;</td>";
print "</tr>";
print '<tr class="impair">';
print '<td class="fieldrequired">'.$langs->trans("KeyForCronAccess").'</td>';
print '<td><input type="text" class="flat" id="CRON_KEY" name="CRON_KEY" value="'. (GETPOST('CRON_KEY')?GETPOST('CRON_KEY'):(! empty($conf->global->CRON_KEY)?$conf->global->CRON_KEY:'')) . '" size="40">';
print '<td><input type="text" class="flat" id="MAIN_CRON_KEY" name="MAIN_CRON_KEY" value="'. (GETPOST('MAIN_CRON_KEY')?GETPOST('MAIN_CRON_KEY'):(! empty($conf->global->MAIN_CRON_KEY)?$conf->global->MAIN_CRON_KEY:'')) . '" size="40">';
if (! empty($conf->use_javascript_ajax))
print '&nbsp;'.img_picto($langs->trans('Generate'), 'refresh', 'id="generate_token" class="linkobject"');
print '</td>';
@ -102,12 +106,35 @@ print '<br><br>';
// Cron launch
print '<u>'.$langs->trans("URLToLaunchCronJobs").':</u><br>';
$url=DOL_MAIN_URL_ROOT.'/public/cron/cron_run_jobs.php'.(empty($conf->global->CRON_KEY)?'':'?securitykey='.$conf->global->CRON_KEY);
$url=dol_buildpath('/public/cron/cron_run_jobs.php',1).(empty($conf->global->MAIN_CRON_KEY)?'':'?securitykey='.$conf->global->MAIN_CRON_KEY.'&').'userlogin='.$user->login;
print img_picto('','object_globe.png').' <a href="'.$url.'" target="_blank">'.$url."</a><br>\n";
print ' '.$langs->trans("OrToLaunchASpecificJob").'<br>';
$url=DOL_MAIN_URL_ROOT.'/public/cron/cron_run_jobs.php?'.(empty($conf->global->CRON_KEY)?'':'securitykey='.$conf->global->CRON_KEY.'&').'id=cronjobid';
print img_picto('','object_globe.png').' <a href="'.$url.'" target="_blank">'.$url."</a><br>\n";
$url=dol_buildpath('/public/cron/cron_run_jobs.php',1).(empty($conf->global->MAIN_CRON_KEY)?'':'?securitykey='.$conf->global->MAIN_CRON_KEY.'&').'userlogin='.$user->login.'&id=cronjobid';
print img_picto('','object_globe.png').' <a href="'.$url.'" target="_blank">'.$url."</a><br>\n";
print '<br>';
print '<br>';
$linuxlike=1;
if (preg_match('/^win/i',PHP_OS)) $linuxlike=0;
if (preg_match('/^mac/i',PHP_OS)) $linuxlike=0;
if ($linuxlike) {
print $langs->trans("CronExplainHowToRunUnix");
} else {
print $langs->trans("CronExplainHowToRunWin");
}
print '<br>';
print '<u>'.$langs->trans("FileToLaunchCronJobs").':</u><br>';
$file='/scripts/cron/cron_run_jobs.php'.' '.(empty($conf->global->MAIN_CRON_KEY)?'securitykey':''.$conf->global->MAIN_CRON_KEY.'').' '.$user->login.' cronjobid(optionnal)';
if ($linuxlike) {
print 'user@host:'.DOL_DOCUMENT_ROOT.'$ php ..'.$file."<br>\n";
} else {
print DOL_DOCUMENT_ROOT.'> php ..'.$file."<br>\n";
}
print '<br>';
print '<br>';
@ -116,20 +143,18 @@ if (! empty($conf->use_javascript_ajax))
{
print "\n".'<script type="text/javascript">';
print '$(document).ready(function () {
$("#generate_token").click(function() {
$.get( "'.DOL_URL_ROOT.'/core/ajax/security.php", {
action: \'getrandompassword\',
generic: true
},
function(token) {
$("#CRON_KEY").val(token);
});
});
});';
$("#generate_token").click(function() {
$.get( "'.DOL_URL_ROOT.'/core/ajax/security.php", {
action: \'getrandompassword\',
generic: true
},
function(token) {
$("#MAIN_CRON_KEY").val(token);
});
});
});';
print '</script>';
}
llxFooter();
$db->close();
?>
$db->close();

596
htdocs/cron/card.php Normal file
View File

@ -0,0 +1,596 @@
<?php
/* Copyright (C) 2012 Nicolas Villa aka Boyquotes http://informetic.fr
* Copyright (C) 2013 Florian Henry <florian.henry@open-concpt.pro>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file cron/card.php
* \ingroup cron
* \brief Cron Jobs Card
*/
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
// librairie jobs
require_once DOL_DOCUMENT_ROOT."/cron/class/cronjob.class.php";
require_once DOL_DOCUMENT_ROOT."/core/class/html.formcron.class.php";
require_once DOL_DOCUMENT_ROOT.'/core/lib/cron.lib.php';
$langs->load("admin");
$langs->load("cron");
if (!$user->rights->cron->create) accessforbidden();
$id=GETPOST('id','int');
$action=GETPOST('action','alpha');
$confirm=GETPOST('confirm','alpha');
$cancel=GETPOST('cancel');
$object = new Cronjob($db);
if (!empty($id)) {
$result=$object->fetch($id);
if ($result < 0) {
setEventMessage($object->error,'errors');
}
}
if(!empty($cancel)) {
if (!empty($id)) {
$action='';
}else {
Header ( "Location: ".dol_buildpath('/cron/cron/list.php',1).'?status=1');
}
}
// Delete jobs
if ($action == 'confirm_delete' && $confirm == "yes" && $user->rights->cron->delete){
$result = $object->delete($user);
if ($result < 0) {
setEventMessage($object->error,'errors');
$action='edit';
}else {
Header ( "Location: ".dol_buildpath('/cron/cron/list.php',1).'?status=1');
}
}
// Execute jobs
if ($action == 'confirm_execute' && $confirm == "yes" && $user->rights->cron->execute){
$result=$object->run_jobs($user->login);
if ($result < 0) {
setEventMessage($object->error,'errors');
$action='';
}else {
$action='';
}
}
if ($action=='add') {
$object->jobtype=GETPOST('jobtype','alpha');
$object->label=GETPOST('label','alpha');
$object->command=GETPOST('command','alpha');
$object->priority=GETPOST('priority','int');
$object->classesname=GETPOST('classesname','alpha');
$object->objectname=GETPOST('objectname','alpha');
$object->methodename=GETPOST('methodename','alpha');
$object->params=GETPOST('params');
$object->md5params=GETPOST('md5params');
$object->module_name=GETPOST('module_name','alpha');
$object->note=GETPOST('note');
$object->datestart=dol_mktime(GETPOST('datestarthour','int'), GETPOST('datestartmin','int'), 0, GETPOST('datestartmonth','int'), GETPOST('datestartday','int'), GETPOST('datestartyear','int'));
$object->dateend=dol_mktime(GETPOST('dateendhour','int'), GETPOST('dateendmin','int'), 0, GETPOST('dateendmonth','int'), GETPOST('dateendday','int'), GETPOST('dateendyear','int'));
$object->unitfrequency=GETPOST('unitfrequency','int');
$object->frequency=$object->unitfrequency * GETPOST('nbfrequency','int');
//Ajout de la tache cron
$result = $object->create($user);
// test du Resultat de la requete
if ($result < 0) {
setEventMessage($object->error,'errors');
$action='create';
}
else {
setEventMessage($langs->trans('CronSaveSucess'),'mesgs');
$action='';
}
}
// Save parameters
if ($action=='update') {
$object->id=$id;
$object->jobtype=GETPOST('jobtype','alpha');
$object->label=GETPOST('label','alpha');
$object->command=GETPOST('command','alpha');
$object->classesname=GETPOST('classesname','alpha');
$object->priority=GETPOST('priority','int');
$object->objectname=GETPOST('objectname','alpha');
$object->methodename=GETPOST('methodename','alpha');
$object->params=GETPOST('params');
$object->md5params=GETPOST('md5params');
$object->module_name=GETPOST('module_name','alpha');
$object->note=GETPOST('note');
$object->datestart=dol_mktime(GETPOST('datestarthour','int'), GETPOST('datestartmin','int'), 0, GETPOST('datestartmonth','int'), GETPOST('datestartday','int'), GETPOST('datestartyear','int'));
$object->dateend=dol_mktime(GETPOST('dateendhour','int'), GETPOST('dateendmin','int'), 0, GETPOST('dateendmonth','int'), GETPOST('dateendday','int'), GETPOST('dateendyear','int'));
$object->unitfrequency=GETPOST('unitfrequency','int');
$object->frequency=$object->unitfrequency * GETPOST('nbfrequency','int');
//Ajout de la tache cron
$result = $object->update($user);
// test du Resultat de la requete
if ($result < 0) {
setEventMessage($object->error,'errors');
$action='edit';
}
else {
setEventMessage($langs->trans('CronSaveSucess'),'mesgs');
$action='';
}
}
if ($action=='activate') {
$object->status=1;
//Ajout de la tache cron
$result = $object->update($user);
// test du Resultat de la requete
if ($result < 0) {
setEventMessage($object->error,'errors');
$action='edit';
}
else {
setEventMessage($langs->trans('CronSaveSucess'),'mesgs');
$action='';
}
}
if ($action=='inactive') {
$object->status=0;
//Ajout de la tache cron
$result = $object->update($user);
// test du Resultat de la requete
if ($result < 0) {
setEventMessage($object->error,'errors');
$action='edit';
}
else {
setEventMessage($langs->trans('CronSaveSucess'),'mesgs');
$action='';
}
}
/*
* View
*/
llxHeader('',$langs->trans("CronAdd"));
if ($action=='edit' || empty($action) || $action=='delete' || $action=='execute') {
$head=cron_prepare_head($object);
dol_fiche_head($head, 'card', $langs->trans("CronTask"), 0, 'bill');
} elseif ($action=='create') {
print_fiche_titre($langs->trans("CronTask"),'','setup');
}
if ($conf->use_javascript_ajax)
{
print "\n".'<script type="text/javascript" language="javascript">';
print 'jQuery(document).ready(function () {
function initfields()
{
if ($("#jobtype option:selected").val()==\'method\') {
$(".blockmethod").show();
$(".blockcommand").hide();
}
if ($("#jobtype option:selected").val()==\'command\') {
$(".blockmethod").hide();
$(".blockcommand").show();
}
}
initfields();
jQuery("#jobtype").change(function() {
initfields();
});
})';
print '</script>'."\n";
}
$form = new Form($db);
$formCron = new FormCron($db);
if ($action == 'delete')
{
$ret=$form->form_confirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("CronDelete"),$langs->trans("CronConfirmDelete"),"confirm_delete",'','',1);
if ($ret == 'html') print '<br>';
$action='';
}
if ($action == 'execute'){
$ret=$form->form_confirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("CronExecute"),$langs->trans("CronConfirmExecute"),"confirm_execute",'','',1);
if ($ret == 'html') print '<br>';
$action='';
}
/*
* Create Template
*/
if (empty($object->status)) {
dol_htmloutput_mesg($langs->trans("CronTaskInactive"),'','warning',1);
}
if (($action=="create") || ($action=="edit")) {
print '<form name="cronform" action="'.$_SERVER["PHP_SELF"].'" method="post">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'."\n";
if (!empty($object->id)) {
print '<input type="hidden" name="action" value="update">'."\n";
print '<input type="hidden" name="id" value="'.$object->id.'">'."\n";
} else {
print '<input type="hidden" name="action" value="add">'."\n";
}
print '<table class="border" width="100%">';
print '<tr><td width="30%">';
print $langs->trans('CronLabel')."</td>";
print "<td><input type=\"text\" size=\"20\" name=\"label\" value=\"".$object->label."\" /> ";
print "</td>";
print "<td>";
print "</td>";
print "</tr>\n";
print "<tr><td>";
print $langs->trans('CronType')."</td><td>";
print $formCron->select_typejob('jobtype',$object->jobtype);
print "</td>";
print "<td>";
print "</td>";
print "</tr>\n";
print "<tr><td>";
print $langs->trans('CronHourStart')."</td><td>";
if(!empty($object->datestart)){
$form->select_date($object->datestart,'datestart',1,1,'',"cronform");
}
else{
$form->select_date(dol_now(),'datestart',1,1,'',"cronform");
}
print "</td>";
print "<td>";
print "</td>";
print "</tr>\n";
print "<tr><td>";
print $langs->trans('CronDtEnd')."</td><td>";
if(!empty($object->dateend)){
$form->select_date($object->dateend,'dateend',1,1,'',"cronform");
}
else{
$form->select_date('','dateend',1,1,1,"cronform");
}
print "</td>";
print "<td>";
print "</td>";
print "</tr>\n";
print "<tr><td>";
print $langs->trans('CronPriority')."</td>";
$priority=0;
if (!empty($object->priority)) {
$priority=$object->priority;
}
print "<td><input type=\"text\" size=\"2\" name=\"priority\" value=\"".$priority."\" /> ";
print "</td>";
print "<td>";
print "</td>";
print "</tr>\n";
print "<tr><td>";
print $langs->trans('CronEvery')."</td>";
print "<td><select name=\"nbfrequency\">";
for($i=1; $i<=60; $i++){
if(($object->frequency/$object->unitfrequency) == $i){
print "<option value='".$i."' selected='selected'>".$i."</option>";
}
else{
print "<option value='".$i."'>".$i."</option>";
}
}
$input = "<input type=\"radio\" name=\"unitfrequency\" value=\"60\" id=\"frequency_minute\" ";
if($object->unitfrequency=="60"){
$input .= ' checked="checked" />';
}
else{
$input .= ' />';
}
$input .= "<label for=\"frequency_minute\">".$langs->trans('Minutes')."</label>";
print $input;
$input = "<input type=\"radio\" name=\"unitfrequency\" value=\"3600\" id=\"frequency_heures\" ";
if($object->unitfrequency=="3600"){
$input .= ' checked="checked" />';
}
else{
$input .= ' />';
}
$input .= "<label for=\"frequency_heures\">".$langs->trans('Hours')."</label>";
print $input;
$input = "<input type=\"radio\" name=\"unitfrequency\" value=\"86400\" id=\"frequency_jours\" ";
if($object->unitfrequency=="86400"){
$input .= ' checked="checked" />';
}
else{
$input .= ' />';
}
$input .= "<label for=\"frequency_jours\">".$langs->trans('Days')."</label>";
print $input;
$input = "<input type=\"radio\" name=\"unitfrequency\" value=\"604800\" id=\"frequency_semaine\" ";
if($object->unitfrequency=="604800"){
$input .= ' checked="checked" />';
}
else{
$input .= ' />';
}
$input .= "<label for=\"frequency_semaine\">".$langs->trans('Weeks')."</label>";
print $input;
print "</td>";
print "<td>";
print "</td>";
print "</tr>\n";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronModule')."</td><td>";
print "<input type=\"text\" size=\"20\" name=\"module_name\" value=\"".$object->module_name."\" /> ";
print "</td>";
print "<td>";
print $form->textwithpicto('',$langs->trans("CronModuleHelp"),1,'help');
print "</td>";
print "</tr>\n";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronClassFile')."</td><td>";
print "<input type=\"text\" size=\"20\" name=\"classesname\" value=\"".$object->classesname."\" /> ";
print "</td>";
print "<td>";
print $form->textwithpicto('',$langs->trans("CronClassFileHelp"),1,'help');
print "</td>";
print "</tr>\n";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronObject')."</td><td>";
print "<input type=\"text\" size=\"20\" name=\"objectname\" value=\"".$object->objectname."\" /> ";
print "</td>";
print "<td>";
print $form->textwithpicto('',$langs->trans("CronObjectHelp"),1,'help');
print "</td>";
print "</tr>\n";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronMethod')."</td><td>";
print "<input type=\"text\" size=\"20\" name=\"methodename\" value=\"".$object->methodename."\" /> ";
print "</td>";
print "<td>";
print $form->textwithpicto('',$langs->trans("CronMethodHelp"),1,'help');
print "</td>";
print "</tr>\n";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronArgs')."</td><td>";
print "<input type=\"text\" size=\"20\" name=\"params\" value=\"".$object->params."\" /> ";
print "</td>";
print "<td>";
print $form->textwithpicto('',$langs->trans("CronArgsHelp"),1,'help');
print "</td>";
print "</tr>\n";
print '<tr class="blockcommand"><td>';
print $langs->trans('CronCommand')."</td><td>";
print "<input type=\"text\" size=\"50\" name=\"command\" value=\"".$object->command."\" /> ";
print "</td>";
print "<td>";
print $form->textwithpicto('',$langs->trans("CronCommandHelp"),1,'help');
print "</td>";
print "</tr>\n";
print '<tr><td>';
print $langs->trans('CronNote')."</td><td>";
$doleditor = new DolEditor('note', $object->note, '', 160, 'dolibarr_notes', 'In', true, false, 0, 4, 90);
$doleditor->Create();
print "</td>";
print "<td>";
print "</td>";
print "</tr>\n";
print '<tr><td colspan="2" align="center">';
print "<input type=\"submit\" name=\"save\" class=\"button\" value=\"".$langs->trans("Save")."\">";
print "<input type=\"submit\" name=\"cancel\" class=\"button\" value=\"".$langs->trans("Cancel")."\">";
print "</td>";
print "<td>";
print "</td>";
print "</tr>\n";
print '</table>';
print "</form>\n";
}else {
/*
* view Template
*/
// box add_jobs_box
print '<table class="border" width="100%">';
print '<tr><td width="30%">';
print $langs->trans('CronId')."</td>";
print "<td>".$form->showrefnav($object, 'id', $linkback, 1, 'rowid', 'id');
print "</td></tr>\n";
print '<tr><td>';
print $langs->trans('CronLabel')."</td>";
print "<td>".$object->label;
print "</td></tr>";
print "<tr><td>";
print $langs->trans('CronType')."</td><td>";
print $formCron->select_typejob('jobtype',$object->jobtype,1);
print "</td></tr>";
print "<tr><td>";
print $langs->trans('CronHourStart')."</td><td>";
if(!empty($object->datestart)) {print dol_print_date($object->datestart,'dayhourtext');} else {print $langs->trans('CronNone');}
print "</td></tr>";
print "<tr><td>";
print $langs->trans('CronDtEnd')."</td><td>";
if(!empty($object->dateend)) {print dol_print_date($object->dateend,'dayhourtext');} else {print $langs->trans('CronNone');}
print "</td></tr>";
print "<tr><td>";
print $langs->trans('CronPriority')."</td>";
print "<td>".$object->priority;
print "</td></tr>";
print "<tr><td>";
print $langs->trans('CronNbRun')."</td>";
print "<td>".$object->nbrun;
print "</td></tr>";
print "<tr><td>";
print $langs->trans('CronEvery')."</td>";
print "<td>";
if($object->unitfrequency == "60") print $langs->trans('CronEach')." ".($object->frequency/$object->unitfrequency)." ".$langs->trans('Minutes');
if($object->unitfrequency == "3600") print $langs->trans('CronEach')." ".($object->frequency/$object->unitfrequency)." ".$langs->trans('Hours');
if($object->unitfrequency == "86400") print $langs->trans('CronEach')." ".($object->frequency/$object->unitfrequency)." ".$langs->trans('Days');
if($object->unitfrequency == "604800") print $langs->trans('CronEach')." ".($object->frequency/$object->unitfrequency)." ".$langs->trans('Weeks');
print "</td></tr>";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronModule')."</td><td>";
print $object->module_name;
print "</td></tr>";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronClassFile')."</td><td>";
print $object->classesname;
print "</td></tr>";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronObject')."</td><td>";
print $object->objectname;
print "</td></tr>";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronMethod')."</td><td>";
print $object->methodename;
print "</td></tr>";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronArgs')."</td><td>";
print $object->params;
print "</td></tr>";
print '<tr class="blockcommand"><td>';
print $langs->trans('CronCommand')."</td><td>";
print $object->command;
print "</td></tr>";
print '<tr><td>';
print $langs->trans('CronNote')."</td><td>";
print $object->note;
print "</td></tr>";
print '<tr><td>';
print $langs->trans('CronDtLastLaunch')."</td><td>";
if(!empty($object->datelastrun)) {print dol_print_date($object->datelastrun,'dayhourtext');} else {print $langs->trans('CronNone');}
print "</td></tr>";
print '<tr><td>';
print $langs->trans('CronDtNextLaunch')."</td><td>";
if(!empty($object->datenextrun)) {print dol_print_date($object->datenextrun,'dayhourtext');} else {print $langs->trans('CronNone');}
print "</td></tr>";
print '<tr><td>';
print $langs->trans('CronDtLastResult')."</td><td>";
if(!empty($object->datelastresult)) {print dol_print_date($object->datelastresult,'dayhourtext');} else {print $langs->trans('CronNone');}
print "</td></tr>";
print '<tr><td>';
print $langs->trans('CronLastResult')."</td><td>";
print $object->lastresult;
print "</td></tr>";
print '<tr><td>';
print $langs->trans('CronLastOutput')."</td><td>";
print nl2br($object->lastoutput);
print "</td></tr>";
print '</table>';
print "\n\n<div class=\"tabsAction\">\n";
if (! $user->rights->cron->create) {
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("Edit").'</a>';
} else {
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=edit&id='.$object->id.'">'.$langs->trans("Edit").'</a>';
}
if (! $user->rights->cron->delete) {
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("Delete").'</a>';
} else {
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=delete&id='.$object->id.'">'.$langs->trans("Delete").'</a>';
}
if (! $user->rights->cron->create) {
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("CronStatusActiveBtn").'/'.$langs->trans("CronStatusInactiveBtn").'</a>';
} else {
if (empty($object->status)) {
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=activate&id='.$object->id.'">'.$langs->trans("CronStatusActiveBtn").'</a>';
} else {
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=inactive&id='.$object->id.'">'.$langs->trans("CronStatusInactiveBtn").'</a>';
}
}
if ((! $user->rights->cron->execute) || (empty($object->status))) {
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("CronExecute").'</a>';
} else {
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=execute&id='.$object->id.'">'.$langs->trans("CronExecute").'</a>';
}
print '<br><br></div>';
}
$db->close();
llxFooter();

View File

@ -1,6 +1,6 @@
<?php
/* Copyright (C) 2007-2012 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) ---Put here your own copyright and developer email---
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -17,42 +17,58 @@
*/
/**
* \file dev/skeletons/cronjob.class.php
* \file cron/class/cronjob.class.php
* \ingroup cron
* \brief CRUD class file (Create/Read/Update/Delete) for cronjob table
* Initialy built by build_class_from_table on 2013-03-17 18:50
*/
// Put here all includes required by your class file
require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php");
//require_once(DOL_DOCUMENT_ROOT."/societe/class/societe.class.php");
//require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php");
/**
* Put here description of your class
* Crob Job class
*/
class Cronjob extends CommonObject
{
var $db; //!< To store db handler
var $error; //!< To return error code (or message)
var $errors=array(); //!< To return several error codes (or messages)
var $element='cronjob'; //!< Id that identify managed objects
var $element='cronjob'; //!< Id that identify managed objects
var $table_element='cronjob'; //!< Name of table without prefix where object is stored
var $id;
var $ref; //Use for prevnext_ref
var $jobtype;
var $tms='';
var $datec='';
var $label;
var $command;
var $classesname;
var $objectname;
var $methodename;
var $params;
var $md5params;
var $module_name;
var $priority;
var $datelastrun='';
var $lastresult='';
var $datenextrun='';
var $dateend='';
var $datestart='';
var $datelastresult='';
var $lastresult;
var $lastoutput;
var $fk_user;
var $unitfrequency;
var $frequency;
var $status;
var $fk_user_author;
var $fk_user_mod;
var $note;
var $nbrun;
var $lines;
/**
@ -80,51 +96,128 @@ class Cronjob extends CommonObject
$error=0;
// Clean parameters
if (isset($this->label)) $this->label=trim($this->label);
if (isset($this->jobtype)) $this->jobtype=trim($this->jobtype);
if (isset($this->command)) $this->command=trim($this->command);
if (isset($this->classesname)) $this->classesname=trim($this->classesname);
if (isset($this->objectname)) $this->objectname=trim($this->objectname);
if (isset($this->methodename)) $this->methodename=trim($this->methodename);
if (isset($this->params)) $this->params=trim($this->params);
if (isset($this->md5params)) $this->md5params=trim($this->md5params);
if (isset($this->module_name)) $this->module_name=trim($this->module_name);
if (isset($this->priority)) $this->priority=trim($this->priority);
if (isset($this->lastoutput)) $this->lastoutput=trim($this->lastoutput);
if (isset($this->fk_user)) $this->fk_user=trim($this->fk_user);
if (isset($this->lastresult)) $this->lastresult=trim($this->lastresult);
if (isset($this->unitfrequency)) $this->unitfrequency=trim($this->unitfrequency);
if (isset($this->frequency)) $this->frequency=trim($this->frequency);
if (isset($this->status)) $this->status=trim($this->status);
if (isset($this->note)) $this->note=trim($this->note);
if (isset($this->nbrun)) $this->nbrun=trim($this->nbrun);
// Check parameters
// Put here code to add control on parameters values
// Put here code to add a control on parameters values
if (dol_strlen($this->datestart)==0) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronDtStart'));
$error++;
}
if (empty($this->label)) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronLabel'));
$error++;
}
if ((dol_strlen($this->datestart)!=0) && (dol_strlen($this->dateend)!=0) && ($this->dateend<$this->datestart)) {
$this->errors[]=$langs->trans('CronErrEndDateStartDt');
$error++;
}
if (empty($this->unitfrequency)) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronFrequency'));
$error++;
}
if (($this->jobtype=='command') && (empty($this->command))) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronCommand'));
$error++;
}
if (($this->jobtype=='method') && (empty($this->classesname))) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronClass'));
$error++;
}
if (($this->jobtype=='method') && (empty($this->methodename))) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronMethod'));
$error++;
}
if (($this->jobtype=='method') && (empty($this->objectname))) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronObject'));
$error++;
}
// Insert request
$sql = "INSERT INTO ".MAIN_DB_PREFIX."cronjob(";
$sql.= "datec,";
$sql.= "jobtype,";
$sql.= "label,";
$sql.= "command,";
$sql.= "classesname,";
$sql.= "objectname,";
$sql.= "methodename,";
$sql.= "params,";
$sql.= "md5params,";
$sql.= "module_name,";
$sql.= "priority,";
$sql.= "datelastrun,";
$sql.= "datenextrun,";
$sql.= "dateend,";
$sql.= "datestart,";
$sql.= "lastresult,";
$sql.= "datelastresult,";
$sql.= "lastoutput,";
$sql.= "fk_user,";
$sql.= "note";
$sql.= "unitfrequency,";
$sql.= "frequency,";
$sql.= "status,";
$sql.= "fk_user_author,";
$sql.= "fk_user_mod,";
$sql.= "note,";
$sql.= "nbrun";
$sql.= ") VALUES (";
$sql.= " ".(! isset($this->datec) || dol_strlen($this->datec)==0?'NULL':$this->db->idate($this->datec)).",";
$sql.= " ".$this->db->idate(dol_now()).",";
$sql.= " ".(! isset($this->jobtype)?'NULL':"'".$this->db->escape($this->jobtype)."'").",";
$sql.= " ".(! isset($this->label)?'NULL':"'".$this->db->escape($this->label)."'").",";
$sql.= " ".(! isset($this->command)?'NULL':"'".$this->db->escape($this->command)."'").",";
$sql.= " ".(! isset($this->classesname)?'NULL':"'".$this->db->escape($this->classesname)."'").",";
$sql.= " ".(! isset($this->objectname)?'NULL':"'".$this->db->escape($this->objectname)."'").",";
$sql.= " ".(! isset($this->methodename)?'NULL':"'".$this->db->escape($this->methodename)."'").",";
$sql.= " ".(! isset($this->params)?'NULL':"'".$this->db->escape($this->params)."'").",";
$sql.= " ".(! isset($this->md5params)?'NULL':"'".$this->db->escape($this->md5params)."'").",";
$sql.= " ".(! isset($this->module_name)?'NULL':"'".$this->db->escape($this->module_name)."'").",";
$sql.= " ".(! isset($this->priority)?'NULL':"'".$this->priority."'").",";
$sql.= " ".(! isset($this->datelastrun) || dol_strlen($this->datelastrun)==0?'NULL':$this->db->idate($this->datelastrun)).",";
$sql.= " ".(! isset($this->lastresult) || dol_strlen($this->lastresult)==0?'NULL':$this->db->idate($this->lastresult)).",";
$sql.= " ".(! isset($this->datenextrun) || dol_strlen($this->datenextrun)==0?'NULL':$this->db->idate($this->datenextrun)).",";
$sql.= " ".(! isset($this->dateend) || dol_strlen($this->dateend)==0?'NULL':$this->db->idate($this->dateend)).",";
$sql.= " ".(! isset($this->datestart) || dol_strlen($this->datestart)==0?'NULL':$this->db->idate($this->datestart)).",";
$sql.= " ".(! isset($this->lastresult)?'NULL':"'".$this->db->escape($this->lastresult)."'").",";
$sql.= " ".(! isset($this->datelastresult) || dol_strlen($this->datelastresult)==0?'NULL':$this->db->idate($this->datelastresult)).",";
$sql.= " ".(! isset($this->lastoutput)?'NULL':"'".$this->db->escape($this->lastoutput)."'").",";
$sql.= " ".(! isset($this->fk_user)?'NULL':"'".$this->fk_user."'").",";
$sql.= " ".(! isset($this->note)?'NULL':"'".$this->db->escape($this->note)."'")."";
$sql.= " ".(! isset($this->unitfrequency)?'NULL':"'".$this->unitfrequency."'").",";
$sql.= " ".(! isset($this->frequency)?'NULL':"'".$this->frequency."'").",";
$sql.= " ".(! isset($this->status)?'0':"'".$this->status."'").",";
$sql.= " ".$user->id.",";
$sql.= " ".$user->id.",";
$sql.= " ".(! isset($this->note)?'NULL':"'".$this->db->escape($this->note)."'").",";
$sql.= " ".(! isset($this->nbrun)?'0':"'".$this->db->escape($this->nbrun)."'")."";
$sql.= ")";
$this->db->begin();
dol_syslog(get_class($this)."::create sql=".$sql, LOG_DEBUG);
$resql=$this->db->query($sql);
if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
if (! $error)
{
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."cronjob");
@ -173,18 +266,35 @@ class Cronjob extends CommonObject
global $langs;
$sql = "SELECT";
$sql.= " t.rowid,";
$sql.= " t.tms,";
$sql.= " t.datec,";
$sql.= " t.jobtype,";
$sql.= " t.label,";
$sql.= " t.command,";
$sql.= " t.classesname,";
$sql.= " t.objectname,";
$sql.= " t.methodename,";
$sql.= " t.params,";
$sql.= " t.md5params,";
$sql.= " t.module_name,";
$sql.= " t.priority,";
$sql.= " t.datelastrun,";
$sql.= " t.datenextrun,";
$sql.= " t.dateend,";
$sql.= " t.datestart,";
$sql.= " t.lastresult,";
$sql.= " t.datelastresult,";
$sql.= " t.lastoutput,";
$sql.= " t.fk_user,";
$sql.= " t.note";
$sql.= " t.unitfrequency,";
$sql.= " t.frequency,";
$sql.= " t.status,";
$sql.= " t.fk_user_author,";
$sql.= " t.fk_user_mod,";
$sql.= " t.note,";
$sql.= " t.nbrun";
$sql.= " FROM ".MAIN_DB_PREFIX."cronjob as t";
$sql.= " WHERE t.rowid = ".$id;
@ -197,18 +307,36 @@ class Cronjob extends CommonObject
$obj = $this->db->fetch_object($resql);
$this->id = $obj->rowid;
$this->ref = $obj->rowid;
$this->tms = $this->db->jdate($obj->tms);
$this->datec = $this->db->jdate($obj->datec);
$this->label = $obj->label;
$this->jobtype = $obj->jobtype;
$this->command = $obj->command;
$this->classesname = $obj->classesname;
$this->objectname = $obj->objectname;
$this->methodename = $obj->methodename;
$this->params = $obj->params;
$this->md5params = $obj->md5params;
$this->module_name = $obj->module_name;
$this->priority = $obj->priority;
$this->datelastrun = $this->db->jdate($obj->datelastrun);
$this->lastresult = $this->db->jdate($obj->lastresult);
$this->datenextrun = $this->db->jdate($obj->datenextrun);
$this->dateend = $this->db->jdate($obj->dateend);
$this->datestart = $this->db->jdate($obj->datestart);
$this->lastresult = $obj->lastresult;
$this->lastoutput = $obj->lastoutput;
$this->fk_user = $obj->fk_user;
$this->datelastresult = $this->db->jdate($obj->datelastresult);
$this->unitfrequency = $obj->unitfrequency;
$this->frequency = $obj->frequency;
$this->status = $obj->status;
$this->fk_user_author = $obj->fk_user_author;
$this->fk_user_mod = $obj->fk_user_mod;
$this->note = $obj->note;
$this->nbrun = $obj->nbrun;
}
$this->db->free($resql);
@ -221,6 +349,141 @@ class Cronjob extends CommonObject
return -1;
}
}
/**
* Load object in memory from the database
*
* @param string $sortorder sort order
* @param string $sortfield sort field
* @param int $limit limit page
* @param int $offset page
* @param int $status display active or not
* @param array $filter filter output
* @return int <0 if KO, >0 if OK
*/
function fetch_all($sortorder='DESC', $sortfield='t.rowid', $limit=0, $offset=0, $status=1, $filter='')
{
global $langs;
$sql = "SELECT";
$sql.= " t.rowid,";
$sql.= " t.tms,";
$sql.= " t.datec,";
$sql.= " t.jobtype,";
$sql.= " t.label,";
$sql.= " t.command,";
$sql.= " t.classesname,";
$sql.= " t.objectname,";
$sql.= " t.methodename,";
$sql.= " t.params,";
$sql.= " t.md5params,";
$sql.= " t.module_name,";
$sql.= " t.priority,";
$sql.= " t.datelastrun,";
$sql.= " t.datenextrun,";
$sql.= " t.dateend,";
$sql.= " t.datestart,";
$sql.= " t.lastresult,";
$sql.= " t.datelastresult,";
$sql.= " t.lastoutput,";
$sql.= " t.unitfrequency,";
$sql.= " t.frequency,";
$sql.= " t.status,";
$sql.= " t.fk_user_author,";
$sql.= " t.fk_user_mod,";
$sql.= " t.note,";
$sql.= " t.nbrun";
$sql.= " FROM ".MAIN_DB_PREFIX."cronjob as t";
$status = (empty($status))?'0':'1';
$sql.= " WHERE t.status=".$status;
//Manage filter
if (is_array($filter) && count($filter)>0) {
foreach($filter as $key => $value) {
$sql.= ' AND '.$key.' LIKE \'%'.$value.'%\'';
}
}
$sql.= " ORDER BY $sortfield $sortorder ";
if (!empty($limit) && !empty($offset)) {
$sql.= $this->db->plimit( $limit + 1 ,$offset);
}
$sqlwhere = array();
if (!empty($module_name)) {
$sqlwhere[]='(t.module_name='.$module_name.')';
}
if (count($sqlwhere)>0) {
$sql.= " WHERE ".implode(' AND ',$sqlwhere);
}
dol_syslog(get_class($this)."::fetch_all sql=".$sql, LOG_DEBUG);
$resql=$this->db->query($sql);
if ($resql)
{
$num=$this->db->num_rows($resql);
$i=0;
if ($num)
{
$this->lines=array();
while ($i < $num)
{
$line = new Cronjobline();
$obj = $this->db->fetch_object($resql);
$line->id = $obj->rowid;
$line->ref = $obj->rowid;
$line->tms = $this->db->jdate($obj->tms);
$line->datec = $this->db->jdate($obj->datec);
$line->label = $obj->label;
$line->jobtype = $obj->jobtype;
$line->command = $obj->command;
$line->classesname = $obj->classesname;
$line->objectname = $obj->objectname;
$line->methodename = $obj->methodename;
$line->params = $obj->params;
$line->md5params = $obj->md5params;
$line->module_name = $obj->module_name;
$line->priority = $obj->priority;
$line->datelastrun = $this->db->jdate($obj->datelastrun);
$line->datenextrun = $this->db->jdate($obj->datenextrun);
$line->dateend = $this->db->jdate($obj->dateend);
$line->datestart = $this->db->jdate($obj->datestart);
$line->lastresult = $obj->lastresult;
$line->datelastresult = $this->db->jdate($obj->datelastresult);
$line->lastoutput = $obj->lastoutput;
$line->unitfrequency = $obj->unitfrequency;
$line->frequency = $obj->frequency;
$line->status = $obj->status;
$line->fk_user_author = $obj->fk_user_author;
$line->fk_user_mod = $obj->fk_user_mod;
$line->note = $obj->note;
$line->nbrun = $obj->nbrun;
$this->lines[]=$line;
$i++;
}
}
$this->db->free($resql);
return 1;
}
else
{
$this->error="Error ".$this->db->lasterror();
dol_syslog(get_class($this)."::fetch ".$this->error, LOG_ERR);
return -1;
}
}
/**
@ -233,35 +496,98 @@ class Cronjob extends CommonObject
function update($user=0, $notrigger=0)
{
global $conf, $langs;
$langs->load('cron');
$error=0;
// Clean parameters
if (isset($this->label)) $this->label=trim($this->label);
if (isset($this->jobtype)) $this->jobtype=trim($this->jobtype);
if (isset($this->command)) $this->command=trim($this->command);
if (isset($this->classesname)) $this->classesname=trim($this->classesname);
if (isset($this->objectname)) $this->objectname=trim($this->objectname);
if (isset($this->methodename)) $this->methodename=trim($this->methodename);
if (isset($this->params)) $this->params=trim($this->params);
if (isset($this->md5params)) $this->md5params=trim($this->md5params);
if (isset($this->module_name)) $this->module_name=trim($this->module_name);
if (isset($this->priority)) $this->priority=trim($this->priority);
if (isset($this->lastoutput)) $this->lastoutput=trim($this->lastoutput);
if (isset($this->fk_user)) $this->fk_user=trim($this->fk_user);
if (isset($this->lastresult)) $this->lastresult=trim($this->lastresult);
if (isset($this->unitfrequency)) $this->unitfrequency=trim($this->unitfrequency);
if (isset($this->frequency)) $this->frequency=trim($this->frequency);
if (isset($this->status)) $this->status=trim($this->status);
if (isset($this->note)) $this->note=trim($this->note);
if (isset($this->nbrun)) $this->nbrun=trim($this->nbrun);
// Check parameters
// Put here code to add a control on parameters values
if (empty($this->status)) {
$this->dateend=dol_now();
}
if (dol_strlen($this->datestart)==0) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronDtStart'));
$error++;
}
if ((dol_strlen($this->datestart)!=0) && (dol_strlen($this->dateend)!=0) && ($this->dateend<$this->datestart)) {
$this->errors[]=$langs->trans('CronErrEndDateStartDt');
$error++;
}
if (empty($this->label)) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronLabel'));
$error++;
}
if (empty($this->unitfrequency)) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronFrequency'));
$error++;
}
if (($this->jobtype=='command') && (empty($this->command))) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronCommand'));
$error++;
}
if (($this->jobtype=='method') && (empty($this->classesname))) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronClass'));
$error++;
}
if (($this->jobtype=='method') && (empty($this->methodename))) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronMethod'));
$error++;
}
if (($this->jobtype=='method') && (empty($this->objectname))) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronObject'));
$error++;
}
// Update request
$sql = "UPDATE ".MAIN_DB_PREFIX."cronjob SET";
$sql.= " tms=".(dol_strlen($this->tms)!=0 ? "'".$this->db->idate($this->tms)."'" : 'null').",";
$sql.= " datec=".(dol_strlen($this->datec)!=0 ? "'".$this->db->idate($this->datec)."'" : 'null').",";
$sql.= " label=".(isset($this->label)?"'".$this->db->escape($this->label)."'":"null").",";
$sql.= " jobtype=".(isset($this->jobtype)?"'".$this->db->escape($this->jobtype)."'":"null").",";
$sql.= " command=".(isset($this->command)?"'".$this->db->escape($this->command)."'":"null").",";
$sql.= " classesname=".(isset($this->classesname)?"'".$this->db->escape($this->classesname)."'":"null").",";
$sql.= " objectname=".(isset($this->objectname)?"'".$this->db->escape($this->objectname)."'":"null").",";
$sql.= " methodename=".(isset($this->methodename)?"'".$this->db->escape($this->methodename)."'":"null").",";
$sql.= " params=".(isset($this->params)?"'".$this->db->escape($this->params)."'":"null").",";
$sql.= " md5params=".(isset($this->md5params)?"'".$this->db->escape($this->md5params)."'":"null").",";
$sql.= " module_name=".(isset($this->module_name)?"'".$this->db->escape($this->module_name)."'":"null").",";
$sql.= " priority=".(isset($this->priority)?$this->priority:"null").",";
$sql.= " datelastrun=".(dol_strlen($this->datelastrun)!=0 ? "'".$this->db->idate($this->datelastrun)."'" : 'null').",";
$sql.= " lastresult=".(dol_strlen($this->lastresult)!=0 ? "'".$this->db->idate($this->lastresult)."'" : 'null').",";
$sql.= " datenextrun=".(dol_strlen($this->datenextrun)!=0 ? "'".$this->db->idate($this->datenextrun)."'" : 'null').",";
$sql.= " dateend=".(dol_strlen($this->dateend)!=0 ? "'".$this->db->idate($this->dateend)."'" : 'null').",";
$sql.= " datestart=".(dol_strlen($this->datestart)!=0 ? "'".$this->db->idate($this->datestart)."'" : 'null').",";
$sql.= " datelastresult=".(dol_strlen($this->datelastresult)!=0 ? "'".$this->db->idate($this->datelastresult)."'" : 'null').",";
$sql.= " lastresult=".(isset($this->lastresult)?"'".$this->db->escape($this->lastresult)."'":"null").",";
$sql.= " lastoutput=".(isset($this->lastoutput)?"'".$this->db->escape($this->lastoutput)."'":"null").",";
$sql.= " fk_user=".(isset($this->fk_user)?$this->fk_user:"null").",";
$sql.= " note=".(isset($this->note)?"'".$this->db->escape($this->note)."'":"null")."";
$sql.= " unitfrequency=".(isset($this->unitfrequency)?$this->unitfrequency:"null").",";
$sql.= " frequency=".(isset($this->frequency)?$this->frequency:"null").",";
$sql.= " status=".(isset($this->status)?$this->status:"null").",";
$sql.= " fk_user_mod=".$user->id.",";
$sql.= " note=".(isset($this->note)?"'".$this->db->escape($this->note)."'":"null").",";
$sql.= " nbrun=".(isset($this->nbrun)?$this->nbrun:"null");
$sql.= " WHERE rowid=".$this->id;
$this->db->begin();
@ -269,7 +595,7 @@ class Cronjob extends CommonObject
dol_syslog(get_class($this)."::update sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql);
if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
if (! $error)
{
if (! $notrigger)
@ -377,7 +703,7 @@ class Cronjob extends CommonObject
$error=0;
$object=new Cronjobs($this->db);
$object=new Cronjob($this->db);
$this->db->begin();
@ -428,19 +754,277 @@ class Cronjob extends CommonObject
function initAsSpecimen()
{
$this->id=0;
$this->ref=0;
$this->tms='';
$this->datec='';
$this->label='';
$this->jobtype='';
$this->command='';
$this->classesname='';
$this->objectname='';
$this->methodename='';
$this->params='';
$this->md5params='';
$this->module_name='';
$this->priority='';
$this->datelastrun='';
$this->lastresult='';
$this->datenextrun='';
$this->dateend='';
$this->datestart='';
$this->datelastresult='';
$this->lastoutput='';
$this->fk_user='';
$this->note='';
$this->lastresult='';
$this->unitfrequency='';
$this->frequency='';
$this->status='';
$this->fk_user_author='';
$this->fk_user_mod='';
$this->note='';
$this->nbrun='';
}
/**
* Load object information
*
* @return void
*/
function info()
{
global $langs;
$sql = "SELECT";
$sql.= " f.rowid, f.datec, f.tms, f.fk_user_mod, f.fk_user_author";
$sql.= " FROM ".MAIN_DB_PREFIX."cronjob as f";
$sql.= " WHERE f.rowid = ".$this->id;
dol_syslog(get_class($this)."::fetch sql=".$sql, LOG_DEBUG);
$resql=$this->db->query($sql);
if ($resql)
{
if ($this->db->num_rows($resql))
{
$obj = $this->db->fetch_object($resql);
$this->id = $obj->rowid;
$this->date_creation = $this->db->jdate($obj->datec);
$this->date_modification = $this->db->jdate($obj->tms);
$this->user_modification = $obj->fk_user_mod;
$this->user_creation = $obj->fk_user_author;
}
$this->db->free($resql);
return 1;
}
else
{
$this->error="Error ".$this->db->lasterror();
dol_syslog(get_class($this)."::fetch ".$this->error, LOG_ERR);
return -1;
}
}
/**
* Run a job
*
* @param string $userlogin User login
* @return int <0 if KO, >0 if OK
*/
function run_jobs($userlogin)
{
global $langs, $conf;
$langs->load('cron');
if (empty($userlogin)) {
$this->error="User login is mandatory";
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
return -1;
}
require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
$user=new User($this->db);
$result=$user->fetch('',$userlogin);
if ($result<0) {
$this->error="User Error:".$user->error;
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
return -1;
}else {
if (empty($user->id)) {
$this->error=" User user login:".$userlogin." do not exists";
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
return -1;
}
}
dol_syslog(get_class($this)."::run_jobs userlogin:$userlogin", LOG_DEBUG);
$error=0;
$now=dol_now();
$this->db->begin();
if ($this->jobtype=='method') {
// load classes
$ret=dol_include_once("/".$this->module_name."/class/".$this->classesname,$this->objectname);
if ($ret===false) {
$this->error=$langs->trans('CronCannotLoadClass',$file,$this->objectname);
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
return -1;
}
// Load langs
$result=$langs->load($this->module_name.'@'.$this->module_name);
if ($result<0) {
dol_syslog(get_class($this)."::run_jobs Cannot load module langs".$langs->error, LOG_ERR);
return -1;
}
dol_syslog(get_class($this)."::run_jobs ".$this->objectname."->".$this->methodename."(".$this->params.");", LOG_DEBUG);
// Create Object for the call module
$object = new $this->objectname($this->db);
$params_arr = array();
$params_arr=explode(", ",$this->params);
if (!is_array($params_arr)) {
$result = call_user_func(array($object, $this->methodename), $this->params);
}else {
$result = call_user_func_array(array($object, $this->methodename), $params_arr);
}
if ($result===false) {
dol_syslog(get_class($this)."::run_jobs ".$object->error, LOG_ERR);
return -1;
}else {
$this->lastoutput=var_export($result,true);
$this->lastresult=var_export($result,true);
}
} elseif ($this->jobtype=='command') {
dol_syslog(get_class($this)."::run_jobs system:".$this->command, LOG_DEBUG);
$output_arr=array();
exec($this->command, $output_arr,$retval);
dol_syslog(get_class($this)."::run_jobs output_arr:".var_export($output_arr,true), LOG_DEBUG);
$this->lastoutput='';
if (is_array($output_arr) && count($output_arr)>0) {
foreach($output_arr as $val) {
$this->lastoutput.=$val."\n";
}
}
$this->lastresult=$retval;
}
$this->datelastresult=$now;
$this->datelastrun=$now;
$this->nbrun=$this->nbrun+1;
$result = $this->update($user);
if ($result<0) {
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
$this->db->rollback();
return -1;
}else {
$this->db->commit();
return 1;
}
}
/**
* Reprogram a job
*
* @param string $userlogin User login
* @return int <0 if KO, >0 if OK
*
*/
function reprogram_jobs($userlogin)
{
global $langs, $conf;
dol_syslog(get_class($this)."::reprogram_jobs userlogin:$userlogin", LOG_DEBUG);
require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
$user=new User($this->db);
$result=$user->fetch('',$userlogin);
if ($result<0) {
$this->error="User Error:".$user->error;
dol_syslog(get_class($this)."::reprogram_jobs ".$this->error, LOG_ERR);
return -1;
}else {
if (empty($user->id)) {
$this->error=" User user login:".$userlogin." do not exists";
dol_syslog(get_class($this)."::reprogram_jobs ".$this->error, LOG_ERR);
return -1;
}
}
dol_syslog(get_class($this)."::reprogram_jobs ", LOG_DEBUG);
if (empty($this->datenextrun)) {
$this->datenextrun=dol_now()+$this->frequency;
} else {
if ($this->datenextrun<dol_now()) {
$this->datenextrun=dol_now()+$this->frequency;
} else {
$this->datenextrun=$this->datenextrun+$this->frequency;
}
}
$result = $this->update($user);
if ($result<0) {
dol_syslog(get_class($this)."::reprogram_jobs ".$this->error, LOG_ERR);
return -1;
}
return 1;
}
}
?>
/**
* Crob Job line class
*/
class Cronjobline{
var $id;
var $ref;
var $tms='';
var $datec='';
var $label;
var $jobtype;
var $command;
var $classesname;
var $objectname;
var $methodename;
var $params;
var $md5params;
var $module_name;
var $priority;
var $datelastrun='';
var $datenextrun='';
var $dateend='';
var $datestart='';
var $lastresult='';
var $lastoutput;
var $unitfrequency;
var $frequency;
var $status;
var $fk_user_author;
var $fk_user_mod;
var $note;
var $nbrun;
/**
* Constructor
*
*/
function __construct()
{
return 1;
}
}

View File

@ -1,27 +0,0 @@
<?php
/* Copyright (C) 2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2007-2009 Laurent Destailleur <eldy@users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file cron/functions_cron.lib.php
* \ingroup core
* \brief Functions for miscellaneous cron tasks
*/
?>

View File

@ -1,219 +0,0 @@
<?php
/* Copyright (C) 2007-2010 Laurent Destailleur <eldy@users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file dev/Cronjobss/Cronjobs_page.php
* \ingroup mymodule othermodule1 othermodule2
* \brief This file is an example of a php page
* Initialy built by build_class_from_table on 2013-03-17 18:50
*/
//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1');
//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1');
//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1');
//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1');
//if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK','1');
//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1');
//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); // If there is no menu to show
//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); // If we don't need to load the html.form.class.php
//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
//if (! defined("NOLOGIN")) define("NOLOGIN",'1'); // If this page is public (can be called outside logged session)
// Change this following line to use the correct relative path (../, ../../, etc)
$res=0;
if (! $res && file_exists("../main.inc.php")) $res=@include '../main.inc.php';
if (! $res && file_exists("../../main.inc.php")) $res=@include '../../main.inc.php';
if (! $res && file_exists("../../../main.inc.php")) $res=@include '../../../main.inc.php';
if (! $res && file_exists("../../../dolibarr/htdocs/main.inc.php")) $res=@include '../../../dolibarr/htdocs/main.inc.php'; // Used on dev env only
if (! $res && file_exists("../../../../dolibarr/htdocs/main.inc.php")) $res=@include '../../../../dolibarr/htdocs/main.inc.php'; // Used on dev env only
if (! $res && file_exists("../../../../../dolibarr/htdocs/main.inc.php")) $res=@include '../../../../../dolibarr/htdocs/main.inc.php'; // Used on dev env only
if (! $res) die("Include of main fails");
// Change this following line to use the correct relative path from htdocs
dol_include_once('/module/class/cronjob.class.php');
// Load traductions files requiredby by page
$langs->load("companies");
$langs->load("other");
$langs->load("cron");
// Get parameters
$id = GETPOST('id','int');
$action = GETPOST('action','alpha');
$myparam = GETPOST('myparam','alpha');
$action='list';
// Protection if external user
if ($user->societe_id > 0) accessforbidden();
if (! $user->admin) accessforbidden();
/*******************************************************************
* ACTIONS
*
* Put here all code to do according to value of "action" parameter
********************************************************************/
if ($action == 'add')
{
$object=new Cronjobs($db);
$object->prop1=$_POST["field1"];
$object->prop2=$_POST["field2"];
$result=$object->create($user);
if ($result > 0)
{
// Creation OK
}
{
// Creation KO
$mesg=$object->error;
}
}
/***************************************************
* VIEW
*
* Put here all code to build page
****************************************************/
llxHeader('','MyPageName','');
$form=new Form($db);
//print '<table border="0" width="100%" class="notopnoleftnoright">';
//print '<tr><td valign="top" width="30%" class="notopnoleft">';
print '<div class="fichecenter"><div class="fichethirdleft">';
//print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
// Example 1 : Adding jquery code
print '<script type="text/javascript" language="javascript">
jQuery(document).ready(function() {
function init_myfunc()
{
jQuery("#myid").removeAttr(\'disabled\');
jQuery("#myid").attr(\'disabled\',\'disabled\');
}
init_myfunc();
jQuery("#mybutton").click(function() {
init_needroot();
});
});
</script>';
// Example 2 : Adding links to objects
// The class must extends CommonObject class to have this method available
//$somethingshown=$object->showLinkedObjectBlock();
// Example 3 : List of data
if ($action == 'list')
{
$sql = "SELECT";
$sql.= " t.rowid,";
$sql.= " t.tms,";
$sql.= " t.datec,";
$sql.= " t.command,";
$sql.= " t.params,";
$sql.= " t.datelastrun,";
$sql.= " t.lastresult,";
$sql.= " t.lastoutput,";
$sql.= " t.fk_user,";
$sql.= " t.note";
$sql.= " FROM ".MAIN_DB_PREFIX."cronjob as t";
//$sql.= " WHERE field3 = 'xxx'";
//$sql.= " ORDER BY field1 ASC";
print_fiche_titre($langs->trans("ListOfCronJobs"),'','').'<br>';
print '<table class="noborder">'."\n";
print '<tr class="liste_titre">';
print_liste_field_titre($langs->trans('Id'),$_SERVER['PHP_SELF'],'t.rowid','',$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans('Command'),$_SERVER['PHP_SELF'],'t.command','',$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans('DateCreation'),$_SERVER['PHP_SELF'],'t.datec','align="center"',$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans('LastOutput'),$_SERVER['PHP_SELF'],'','',$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans('DateLastRun'),$_SERVER['PHP_SELF'],'t.datelastrun','align="center"',$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans('LastResult'),$_SERVER['PHP_SELF'],'t.lastresult','align="right"',$param,'',$sortfield,$sortorder);
print '</tr>';
dol_syslog($script_file." sql=".$sql, LOG_DEBUG);
$resql=$db->query($sql);
if ($resql)
{
$num = $db->num_rows($resql);
$i = 0;
if ($num)
{
while ($i < $num)
{
$obj = $db->fetch_object($resql);
if ($obj)
{
// You can use here results
print '<tr><td>';
print $obj->rowid;
print '</td><td>';
print $obj->command;
print '</td><td align="center">';
print $db->jdate($obj->datec);
print '</td><td>';
print '';
print '</td><td align="center">';
print $db->jdate($obj->datelastrun);
print '</td><td align="right">';
print $obj->lastresult;
print '</td></tr>';
}
$i++;
}
}
}
else
{
$error++;
dol_print_error($db);
}
print '</table>'."\n";
}
//print '</td></tr></table>';
print '<div></div></div>';
// End of page
llxFooter();
$db->close();
?>

59
htdocs/cron/info.php Normal file
View File

@ -0,0 +1,59 @@
<?php
/* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/**
* \file /cron/cron/info.php
* \brief Page fiche d'une operation
*/
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT."/cron/class/cronjob.class.php";
require_once DOL_DOCUMENT_ROOT.'/core/lib/cron.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
// Security check
if (!$user->rights->cron->read) accessforbidden();
$id=GETPOST('id','int');
$mesg = '';
/*
* View
*/
llxHeader('',$langs->trans("CronInfo"));
$object = new Cronjob($db);
$object->fetch($id);
$object->info($id);
$head = cron_prepare_head($object);
dol_fiche_head($head, 'info', $langs->trans("CronTask"), 0, 'bill');
print '<table width="100%"><tr><td>';
dol_print_object_info($object);
print '</td></tr></table>';
print '</div>';
$db->close();
llxFooter();

295
htdocs/cron/list.php Normal file
View File

@ -0,0 +1,295 @@
<?php
/* Copyright (C) 2012 Nicolas Villa aka Boyquotes http://informetic.fr
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file cron/cron/list.php
* \ingroup cron
* \brief Lists Jobs
*/
require '../main.inc.php';
require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
// librairie jobs
require_once DOL_DOCUMENT_ROOT."/cron/class/cronjob.class.php";
require_once DOL_DOCUMENT_ROOT.'/core/lib/cron.lib.php';
$langs->load("admin");
$langs->load("cron");
if (!$user->rights->cron->read) accessforbidden();
/*
* Actions
*/
$action=GETPOST('action','alpha');
$confirm=GETPOST('confirm','alpha');
$id=GETPOST('id','int');
$sortorder=GETPOST('sortorder','alpha');
$sortfield=GETPOST('sortfield','alpha');
$page=GETPOST('page','int');
$status=GETPOST('status','int');
//Search criteria
$search_label=GETPOST("search_label",'alpha');
if (empty($sortorder)) $sortorder="DESC";
if (empty($sortfield)) $sortfield="t.datenextrun";
if (empty($arch)) $arch = 0;
if ($page == -1) {
$page = 0 ;
}
$limit = $conf->global->MAIN_SIZE_LISTE_LIMIT;
$offset = $limit * $page ;
$pageprev = $page - 1;
$pagenext = $page + 1;
// Do we click on purge search criteria ?
if (GETPOST("button_removefilter_x"))
{
$search_label='';
}
$filter=array();
if (!empty($search_label)) {
$filter['t.label']=$search_label;
}
// Delete jobs
if ($action == 'confirm_delete' && $confirm == "yes" && $user->rights->cron->delete){
//Delete de la tache cron
$object = new Cronjob($db);
$object->id=$id;
$result = $object->delete($user);
if ($result < 0) {
setEventMessage($object->error,'errors');
}
}
// Execute jobs
if ($action == 'confirm_execute' && $confirm == "yes" && $user->rights->cron->execute){
//Execute jobs
$object = new Cronjob($db);
$job = $object->fetch($id);
$result = $object->run_jobs($user->login);
if ($result < 0) {
setEventMessage($object->error,'errors');
}
}
/*
* View
*/
if (!empty($status)) {
$pagetitle=$langs->trans("CronListActive");
}else {
$pagetitle=$langs->trans("CronListInactive");
}
llxHeader('',$pagetitle);
// Form object for popup
$form = new Form($db);
if ($action == 'delete')
{
$ret=$form->form_confirm($_SERVER['PHP_SELF']."?id=".$id.'&status='.$status,$langs->trans("CronDelete"),$langs->trans("CronConfirmDelete"),"confirm_delete",'','',1);
if ($ret == 'html') print '<br>';
}
if ($action == 'execute'){
$ret=$form->form_confirm($_SERVER['PHP_SELF']."?id=".$id.'&status='.$status,$langs->trans("CronExecute"),$langs->trans("CronConfirmExecute"),"confirm_execute",'','',1);
if ($ret == 'html') print '<br>';
}
print_fiche_titre($pagetitle,'','setup');
print $langs->trans('CronInfo');
// liste des jobs creer
$object = new Cronjob($db);
$result=$object->fetch_all($sortorder, $sortfield, $limit, $offset, $status, $filter);
if ($result < 0) {
setEventMessage($object->error,'errors');
}
print "<p><h2>";
print $langs->trans('CronWaitingJobs');
print "</h2></p>";
if (count($object->lines)>0) {
print '<table width="100%" cellspacing="0" cellpadding="4" class="border">';
print '<tr class="liste_titre">';
$arg_url='&page='.$page.'&status='.$status.'&search_label='.$search_label;
print_liste_field_titre($langs->trans("CronLabel"),$_SERVEUR['PHP_SELF'],"t.label","",$arg_url,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronTask"),'','',"",$arg_url,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronDtStart"),$_SERVEUR['PHP_SELF'],"t.datestart","",$arg_url,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronDtEnd"),$_SERVEUR['PHP_SELF'],"t.dateend","",$arg_url,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronDtLastLaunch"),$_SERVEUR['PHP_SELF'],"t.datelastrun","",$arg_url,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronDtNextLaunch"),$_SERVEUR['PHP_SELF'],"t.datenextrun","",$arg_url,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronFrequency"),'',"","",$arg_url,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronNbRun"),$_SERVEUR['PHP_SELF'],"t.nbrun","",$arg_url,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronLastResult"),$_SERVEUR['PHP_SELF'],"t.lastresult","",$arg_url,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronLastOutput"),$_SERVEUR['PHP_SELF'],"t.lastoutput","",$arg_url,'',$sortfield,$sortorder);
print '<td></td>';
print '</tr>';
print '<form method="get" action="'.$url_form.'" name="search_form">'."\n";
print '<input type="hidden" name="status" value="'.$status.'" >';
print '<tr class="liste_titre">';
print '<td class="liste_titre">';
print '<input type="text" class="flat" name="search_label" value="'.$search_label.'" size="10">';
print '</td>';
print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>';
print '<td class="liste_titre" align="right"><input class="liste_titre" type="image" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/search.png" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
print '&nbsp; ';
print '<input type="image" class="liste_titre" name="button_removefilter" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/searchclear.png" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">';
print '</td>';
print '</tr>';
print '</from>';
// Boucler sur chaque job
$style='impair';
foreach($object->lines as $line){
// title profil
if ($style=='pair') {$style='impair';}
else {$style='pair';}
print '<tr class="'.$style.'">';
print '<td>';
if(!empty($line->label)) {
print '<a href="'.dol_buildpath('/cron/cron/card.php',1).'?id='.$line->id.'">'.$line->label.'</a>';
}
else {
print $langs->trans('CronNone');
}
print '</td>';
print '<td>';
if ($line->jobtype=='method') {
print $langs->trans('CronModule').':'.$line->module_name.'<BR>';
print $langs->trans('CronClass').':'. $line->classesname.'<BR>';
print $langs->trans('CronObject').':'. $line->objectname.'<BR>';
print $langs->trans('CronMethod').':'. $line->methodename;
if(!empty($line->params)) {
print '<BR/>'.$langs->trans('CronArgs').':'. $line->params;
}
}elseif ($line->jobtype=='command') {
print $langs->trans('CronCommand').':'. dol_trunc($line->command);
if(!empty($line->params)) {
print '<BR/>'.$langs->trans('CronArgs').':'. $line->params;
}
}
print '</td>';
print '<td>';
if(!empty($line->datestart)) {print dol_print_date($line->datestart,'dayhourtext');} else {print $langs->trans('CronNone');}
print '</td>';
print '<td>';
if(!empty($line->dateend)) {print dol_print_date($line->dateend,'dayhourtext');} else {print $langs->trans('CronNone');}
print '</td>';
print '<td>';
if(!empty($line->datelastrun)) {print dol_print_date($line->datelastrun,'dayhourtext');} else {print $langs->trans('CronNone');}
print '</td>';
print '<td>';
if(!empty($line->datenextrun)) {print dol_print_date($line->datenextrun,'dayhourtext');} else {print $langs->trans('CronNone');}
print '</td>';
print '<td>';
if($line->unitfrequency == "60") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Minutes');
if($line->unitfrequency == "3600") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Hours');
if($line->unitfrequency == "86400") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Days');
if($line->unitfrequency == "604800") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Weeks');
print '</td>';
print '<td>';
if(!empty($line->nbrun)) {print $line->nbrun;} else {print '0';}
print '</td>';
print '<td>';
if(!empty($line->lastresult)) {print dol_trunc($line->lastresult);} else {print $langs->trans('CronNone');}
print '</td>';
print '<td>';
if(!empty($line->lastoutput)) {print dol_trunc(nl2br($line->lastoutput),100);} else {print $langs->trans('CronNone');}
print '</td>';
print '<td>';
if ($user->rights->cron->delete) {
print "<a href=\"".dol_buildpath('/cron/cron/list.php',1)."?id=".$line->id."&status=".$status."&action=delete\" title=\"".$langs->trans('CronDelete')."\"><img src=\"".dol_buildpath('/cron/img/delete.png',1)."\" alt=\"".$langs->trans('CronDelete')."\" /></a>";
} else {
print "<a href=\"#\" title=\"".$langs->trans('NotEnoughPermissions')."\"><img src=\"".dol_buildpath('/cron/img/delete.png',1)."\" alt=\"".$langs->trans('NotEnoughPermissions')."\" /></a>";
}
if ($user->rights->cron->execute) {
print "<a href=\"".dol_buildpath('/cron/cron/list.php',1)."?id=".$line->id."&status=".$status."&action=execute\" title=\"".$langs->trans('CronExecute')."\"><img src=\"".dol_buildpath('/cron/img/execute.png',1)."\" alt=\"".$langs->trans('CronExecute')."\" /></a>";
} else {
print "<a href=\"#\" title=\"".$langs->trans('NotEnoughPermissions')."\"><img src=\"".dol_buildpath('/cron/img/execute.png',1)."\" alt=\"".$langs->trans('NotEnoughPermissions')."\" /></a>";
}
print '</td>';
print '</tr>';
}
print '</table>';
} else {
print $langs->trans('CronNoJobs');
}
print "\n\n<div class=\"tabsAction\">\n";
if (! $user->rights->cron->create) {
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("New").'</a>';
} else {
print '<a class="butAction" href="'.dol_buildpath('/cron/card.php',1).'?action=create">'.$langs->trans("New").'</a>';
}
print '<br><br></div>';
llxFooter();
$db->close();

View File

@ -159,3 +159,43 @@ ALTER TABLE llx_c_action_trigger ADD INDEX idx_action_trigger_rang (rang);
ALTER TABLE llx_facture_fourn_det ADD COLUMN fk_code_ventilation integer DEFAULT 0 NOT NULL;
ALTER TABLE llx_facturedet DROP COLUMN fk_export_compta;
CREATE TABLE llx_cronjob
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp,
datec datetime,
jobtype varchar(10) NOT NULL,
label text NOT NULL,
command varchar(255),
classesname varchar(255),
objectname varchar(255),
methodename varchar(255),
params text NOT NULL,
md5params varchar(32),
module_name varchar(255),
priority integer DEFAULT 0,
datelastrun datetime,
datenextrun datetime,
datestart datetime,
dateend datetime,
datelastresult datetime,
lastresult text,
lastoutput text,
unitfrequency integer NOT NULL DEFAULT 0,
frequency integer NOT NULL DEFAULT 0,
nbrun integer,
status integer NOT NULL DEFAULT 1,
fk_user_author integer DEFAULT NULL,
fk_user_mod integer DEFAULT NULL,
note text
)ENGINE=innodb;
ALTER TABLE llx_societe MODIFY COLUMN zip varchar(25);
ALTER TABLE llx_user ADD COLUMN address varchar(255);
ALTER TABLE llx_user ADD COLUMN zip varchar(25);
ALTER TABLE llx_user ADD COLUMN town varchar(50);
ALTER TABLE llx_user ADD COLUMN fk_state integer DEFAULT 0; --
ALTER TABLE llx_user ADD COLUMN fk_country integer DEFAULT 0;

View File

@ -1,32 +1,52 @@
-- ===================================================================
-- Copyright (C) 2013 Laurent Destailleur <eldy@users.sourceforge.net>
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
--
-- ===================================================================
create table llx_cronjob
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp,
datec datetime,
command varchar(256),
params text,
frequency varchar(24),
datelastrun datetime,
lastresult date,
lastoutput text,
fk_user integer DEFAULT NULL,
note text
)ENGINE=innodb;
-- ===================================================================
-- Copyright (C) 2013 Laurent Destailleur <eldy@users.sourceforge.net>
-- Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
--
-- ===================================================================
CREATE TABLE llx_cronjob
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp,
datec datetime,
jobtype varchar(10) NOT NULL,
label text NOT NULL,
command varchar(255),
classesname varchar(255),
objectname varchar(255),
methodename varchar(255),
params text NOT NULL,
md5params varchar(32),
module_name varchar(255),
priority integer DEFAULT 0,
datelastrun datetime,
datenextrun datetime,
datestart datetime,
dateend datetime,
datelastresult datetime,
lastresult text,
lastoutput text,
unitfrequency integer NOT NULL DEFAULT 0,
frequency integer NOT NULL DEFAULT 0,
nbrun integer,
status integer NOT NULL DEFAULT 1,
fk_user_author integer DEFAULT NULL,
fk_user_mod integer DEFAULT NULL,
note text
)ENGINE=innodb;

View File

@ -41,7 +41,7 @@ create table llx_societe
code_compta varchar(24), -- code compta client
code_compta_fournisseur varchar(24), -- code compta founisseur
address varchar(255), -- company address
zip varchar(10), -- zipcode
zip varchar(25), -- zipcode
town varchar(50), -- town
fk_departement integer DEFAULT 0, --
fk_pays integer DEFAULT 0, --

View File

@ -35,6 +35,11 @@ create table llx_user
civilite varchar(6),
name varchar(50),
firstname varchar(50),
address varchar(255), -- user personal address
zip varchar(25), -- zipcode
town varchar(50), -- town
fk_state integer DEFAULT 0, --
fk_country integer DEFAULT 0, --
job varchar(128),
office_phone varchar(20),
office_fax varchar(20),

View File

@ -116,3 +116,4 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_tva FOR EACH ROW EXE
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_user FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms();
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_user_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms();
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_usergroup FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms();
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_cronjob FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms();

View File

@ -348,16 +348,18 @@ TextLong=Text llarg
Int=numèric enter
Float=Decimal
DateAndTime=Data i hora
Unique=Unic
Boolean=Boleano (Checkbox)
ExtrafieldPhone=Telèfon
ExtrafieldPrice=Preu
ExtrafieldMail=Correu
ExtrafieldSelect=Llista de selecció
ExtrafieldSeparator=
LibraryToBuildPDF=Llibreria usada per a la creació d'arxius PDF
WarningUsingFPDF=Atenció: El seu arxiu <b>conf.php</b> conté la directiva <b>dolibarr_pdf_force_fpdf=1</b>. Això fa que s'usi la llibreria FPDF per generar els seus arxius PDF. Aquesta llibreria és antiga i no cobreix algunes funcionalitats (Unicode, transparència d'imatges, idiomes ciríl · lics, àrabs o asiàtics, etc.), Pel que pot tenir problemes en la generació dels PDF.<br> Per resoldre-ho, i disposar d'un suport complet de PDF, pot descarregar la <a href="http://www.tcpdf.org/" target="_blank"> llibreria TCPDF </a>, i a continuació comentar o eliminar la línia <b>$dolibarr_pdf_force_fpdf=1</b>, i afegir al seu lloc <b>$dolibarr_lib_TCPDF_PATH='ruta_a_TCPDF'</b>
LocalTaxDesc=Alguns països apliquen 2 o 3 taxes a cada línia de factura. Si és el cas, escolliu el tipus de la segona i tercera taxa i el seu valor. Els possibles tipus són: <br> 1: taxa local aplicable a productes i serveis sense IVA (IVA no s'aplica a la taxa local) <br> 2: taxa local s'aplica a productes i serveis abans de l'IVA (IVA es calcula sobre import + taxa local) <br> 3: taxa local s'aplica a productes sense IVA (IVA no s'aplica a la taxa local) <br> 4: taxa local s'aplica a productes abans de l'IVA (IVA es calcula sobre l'import + taxa local) <br> 5: taxa local s'aplica a serveis sense IVA (IVA no s'aplica a la taxa local) <br> 6: taxa local s'aplica a serveis abans de l'IVA (IVA es calcula sobre import + taxa local)
SuhosinSessionEncrypt=Emmagatzematge de sessions xifrades per Suhosin
# Modules= =
# Modules
Module0Name=Usuaris y grups
Module0Desc=Gestió d'usuaris i grups
Module1Name=Tercers
@ -365,7 +367,7 @@ Module1Desc=Gestió de tercers (empreses, particulars) i contactes
Module2Name=Comercial
Module2Desc=Gestió comercial
Module10Name=Comptabilitat
Module10Desc=Gestió simple de la comptabilitat (desglossament de factures i pagaments)
Module10Desc=Activació d'informes simples de comptabilitat (diaris, vendes) basats en el contingut de la base de dades. Sense desglossaments.
Module20Name=Pressupostos
Module20Desc=Gestió de pressupostos/propostes comercials
Module22Name=E-Mailings
@ -450,6 +452,8 @@ Module1780Name=Categories
Module1780Desc=Gestió de categories (productes, proveïdors i clients)
Module2000Name=Editor WYSIWYG
Module2000Desc=Permet l'edició de certes zones de text mitjançant un editor avançat
Module2300Name=Cron
Module2300Desc=Gestor de tasques programades
Module2400Name=Agenda
Module2400Desc=Gestió de l'agenda i de les accions
Module2500Name=Gestió Electrònica de Documents
@ -673,6 +677,10 @@ Permission1411=Llegir els moviments comptables
Permission1412=Crear/modificar/anular moviments comptables
Permission1415=Llegir Balanços, informes, diaris, llibres mestres
Permission1421=Exporta comandes de clients i atributs
Permission23001=Veure les tasques programades
Permission23002=Crear/Modificar les tasques programades
Permission23003=Eliminar les tasques programades
Permission23004=Executar les tasques programades
Permission2401=Llegir accions (esdeveniments o tasques) vinculades al seu compte
Permission2402=Crear/modificar accions (esdeveniments o tasques) vinculades al seu compte
Permission2403=Modificar accions (esdeveniments o tasques) vinculades al seu compte
@ -946,7 +954,7 @@ TranslationDesc=L'elecció de l'idioma mostrat en pantalla es modifica:<br>* A n
ClassNotFoundIntoPathWarning=No s'ha trobat la classe %s en el seu path PHP
YesInSummer=Sí a l'estiu
OnlyFollowingModulesAreOpenedToExternalUsers=Recordeu que només els mòduls següents estan oberts a usuaris externs (siguin quins siguin els permisos dels usuaris):
##### Module password generation= =
##### Module password generation
PasswordGenerationStandard=Retorna una contrasenya generada per l'algoritme intern Dolibarr: 8 caràcters, números i caràcters en minúscules barrejades.
PasswordGenerationNone=No ofereix contrasenyes. La contrasenya s'introdueix manualment.
##### Users setup #####
@ -1270,6 +1278,8 @@ FCKeditorForCompany=Creació/edició WYSIWIG de la descripció i notes dels terc
FCKeditorForProduct=Creació/edició WYSIWIG de la descripció i notes dels productes/serveis
FCKeditorForProductDetails=Creació/edició WYSIWIG de les línies de detall dels productes (en comandes, pressupostos, factures, etc.)
FCKeditorForMailing=Creació/edició WYSIWIG dels E-Mails
FCKeditorForUserSignature=Creació/edició WYSIWIG dela firma dels usuaris
FCKeditorForMail=Creació/edició WYSIWIG de tots els E-mails (excepte Utilitats->E-Mailings)
##### OSCommerce 1 #####
OSCommerceErrorConnectOkButWrongDatabase=La connexió s'ha establert, però la base de dades no sembla de OSCommerce.
OSCommerceTestOk=La connexió al servidor '%s' sobre la base '%s' per l'usuari '%s' és correcta.
@ -1378,6 +1388,7 @@ MultiCompanySetup=Configuració del mòdul Multi-empresa
SuppliersSetup=Configuració del mòdul Proveïdors
SuppliersCommandModel=Model de comandes a proveïdors complet (logo...)
SuppliersInvoiceModel=Model de factures de proveïdors complet (logo...)
SuppliersInvoiceNumberingModel=Models de numeració de factures de proveïdor
##### GeoIPMaxmind #####
GeoIPMaxmindSetup=Configuració del mòdul GeoIP Maxmind
PathToGeoIPMaxmindCountryDataFile=Ruta de l'arxiu Maxmind que conté les conversions IP-> País.<br>Exemple: /usr/local/share/GeoIP/GeoIP.dat

View File

@ -385,6 +385,7 @@ ClosePaidCreditNotesAutomatically=Classificar automàticament com "Pagats" els a
AllCompletelyPayedInvoiceWillBeClosed=Totes les factures amb una resta a pagar 0 seran automàticament tancades a l'estat "Pagada".
ToMakePayment=Pagar
ToMakePaymentBack=Reemborsar
ListOfYourUnpaidInvoices=Llistat de factures impagades
##### Types de contacts #####
TypeContact_facture_internal_SALESREPFOLL=Responsable seguiment factura a client
TypeContact_facture_external_BILLING=Contacte client facturació

View File

@ -393,6 +393,8 @@ UniqueThirdParties=Total de tercers únics
InActivity=Actiu
ActivityCeased=Tancat
ActivityStateFilter=Estat d'activitat
ProductsIntoElements=Llistat de productes en %s
# Monkey
MonkeyNumRefModelDesc=Retorna un número sota el format %syymm-nnnn per als codis de clients i %syymm-nnnn per als codis dels proveïdors, on yy és l'any, mm el mes i nnnn un comptador seqüencial sense ruptura i sense tornar a 0.
# Leopard

View File

@ -157,3 +157,9 @@ COMPTA_ACCOUNT_SUPPLIER=Codi comptable per defecte de proveïdors (si no està d
AddRemind=Desglossar import disponible
RemainToDivide=Resta a repartir :
WarningDepositsNotIncluded=Les factures de bestreta encara no estan incloses en aquesta versió en el mòdul de comptabilitat.
DatePaymentTermCantBeLowerThanObjectDate=La data límit de pagament no pot ser inferior a la data de l'objecte
Pcg_version=Versió del pla
Pcg_type=Tipus de compte
Pcg_subtype=Subtipus de compte
InvoiceLinesToDispatch=Línies de factures a desglossar
InvoiceDispatched=Factures desglossades

View File

@ -0,0 +1,92 @@
# Dolibarr language file - ca_ES - cron
CHARSET=UTF-8
#
# Admin
#
CronSetup=Pàgina de configuració del mòdul - Gestió de tasques planificades
URLToLaunchCronJobs=URL per llançar les tasques automàtiques
OrToLaunchASpecificJob=O per llançar una tasca específica
KeyForCronAccess=Codi de seguretat per a la URL de llançament de tasques automàtiques
FileToLaunchCronJobs=Ordre per llançar les tasques automàtiques
CronExplainHowToRunUnix=En un entorn Unix pot parametritzar crontab per executar aquesta comanda cada minut
CronExplainHowToRunWin=En un entorn Microsoft (tm) Windows pot utilitzar el planificador de tasques per llançar aquesta comanda cada minut
#
# Menu
#
CronListActive=Llistat de tasques planificades actives
CronListInactive=Llistat de tasques planificades inactives
#
# Page list
#
CronDateLastRun=Últim llançament
CronLastOutput=Última sortida
CronLastResult=Últim codi tornat
CronCommand=Comando
CronList=Llistat de tasques planificades
CronDelete=Eliminar la tasca planificada
CronConfirmDelete=Està segur que voleu eliminar aquesta tasca planificada?
CronExecute=Executar aquesta tasca
CronConfirmExecute=Està segur que voleu executar ara aquesta tasca?
CronInfo=Els treballs permeten executar les tasques a intervals regulars
CronWaitingJobs=Els seus treballs en espera:
CronTask=Tasca
CronNone=Ningún
CronDtStart=Data inici
CronDtEnd=Data fi
CronDtNextLaunch=Propera execució
CronDtLastLaunch=Darrera execució
CronFrequency=Freqüència
CronClass=Clase
CronMethod=Mètod
CronModule=Mòdul
CronAction=Acció
CronStatus=Estat
CronStatusActive=Activa
CronStatusInactive=Inactiva
CronEach=Cada
CronNoJobs=Sense treballs actualment
CronPriority=Prioritat
CronLabel=Descripció
CronNbRun=Nº ejec.
CronDtLastResult=Data de l'últim resultat de l'última execució
#
#Page card
#
CronAdd=Afegir una tasca
CronHourStart=Dia i hora d'inici de la tasca
CronEvery=Executar cada
CronObject=Instància/Objecte a crear
CronArgs=Argument
CronSaveSucess=Registre guardat
CronNote=Nota
CronFieldMandatory=El camp %s és obligatori
CronErrEndDateStartDt=La data de fi no pot ser anterior a la d'inici
CronStatusActiveBtn=Activar
CronStatusInactiveBtn=Desactivar
CronTaskInactive=Aquesta tasca es troba desactivada
CronId=Id
CronClassFile=Classe (arxiu)
CronModuleHelp=Nombre del directorio del módulo Dolibarr (funciona automáticamente con los módulos externos Dolibarr). <BR> Por ejemplo para llamar al método fetch del objeto Product de Dolibarr /htdocs/<u>product</u>/class/product.class.php, el valor del módulo es <i>product</i>
CronClassFileHelp=El archivo archivo que contiene el objeto. <BR> Por ejemplo para llamar el método fetch del objeto Product de Dolibarr /htdocs/product/class/<u>product.class.php</u>, el valor de la clase es <i>product.class.php</i>
CronObjectHelp=El nombre del objeto a crear. <BR> Por ejemplo para llamar el método fetch del objeto Product de Dolibarr /htdocs/product/class/product.class.php, el valor del objeto es <i>Product</i>
CronMethodHelp=El método a lanzar. <BR> Por ejemplo para llamar el método fetch del objeto Product de Dolibarr /htdocs/product/class/product.class.php, el valor del método es <i>fecth</i>
CronArgsHelp=Los argumentos del método. <BR> Por ejemplo para usar el método fetch del objeto Product deDolibarr /htdocs/product/class/product.class.php, el valor del parámetro podría ser <i>0, RefProduit</i>
CronCommandHelp=El comando del sistema a executar
#
# Info
#
CronInfoPage=Informació
#
# Common
#
CronType=Tipus d'acció a executar
CronType_method=Mètode d'una classe d'un mòdul Dolibarr
CronType_command=Comando Shell
CronMenu=Cron
CronCannotLoadClass=impossible carregar la classe %s de l'objecte %s

View File

@ -489,7 +489,7 @@ NbOfThirdParties=Número de tercers
NbOfCustomers=Nombre de clients
NbOfLines=Números de línies
NbOfObjects=Nombre d'objectes
NbOfReferers=Nombre de referències
NbOfReferers=Consumició
Referers=Referències
TotalQuantity=Quantitat total
DateFromTo=De %s a %s

View File

@ -59,6 +59,7 @@ LinkToTrackYourPackage=Enllaç per al seguiment del seu paquet
ShipmentCreationIsDoneFromOrder=De moment, la creació d'una nova expedició es realitza des de la fitxa de comanda.
RelatedShippings=Expedició(ns) associades
ShipmentLine=Línia d'expedició
CarrierList=Llistat de transportistes
# Sending methods
SendingMethodCATCH=Recollit pel client

View File

@ -672,6 +672,10 @@ Permission1237=Export supplier orders and their details
Permission1251=Run mass imports of external data into database (data load)
Permission1321=Export customer invoices, attributes and payments
Permission1421=Export customer orders and attributes
Permission23001 = Read Scheduled task
Permission23002 = Create/update Scheduled task
Permission23003 = Delete Scheduled task
Permission23004 = Execute Scheduled task
Permission2401=Read actions (events or tasks) linked to his account
Permission2402=Create/modify actions (events or tasks) linked to his account
Permission2403=Delete actions (events or tasks) linked to his account

View File

@ -1,11 +1,87 @@
# Dolibarr language file - en_US - cron
CHARSET=UTF-8
CronSetup=Cron scheduler setup
CronDesc=This page can be used to setup options of the scheduler manager
#
# Admin
#
CronSetup= Configuration Scheduled task management
URLToLaunchCronJobs=URL to launch cron jobs
OrToLaunchASpecificJob=Or to launch a specific job
KeyForCronAccess=Security key for URL to launch cron jobs
DateLastRun=Last run
LastOutput=Last run output
LastResult=Last result code
ListOfCronJobs=List of scheduled jobs
Command=Command
FileToLaunchCronJobs=Command to launch cron jobs
CronExplainHowToRunUnix=On Unix environement you should use crontab to run Command line each minutes
CronExplainHowToRunWin=On Microsoft(tm) Windows environement you can use Scheduled task tools to run Command line each minutes
#
# Page list
#
CronDateLastRun=Last run
CronLastOutput=Last run output
CronLastResult=Last result code
CronListOfCronJobs=List of scheduled jobs
CronCommand=Command
CronList= Job list
CronDelete= Delete cron jobs
CronConfirmDelete= Are you sure to delete this cron jobs ?
CronExecute=Launch task
CronConfirmExecute= Are you sure to execute this job now
CronInfo= Jobs allow to execute task that have been planned
CronWaitingJobs=Wainting jobs
CronTask=Task
CronNone= None
CronDtStart=Start date
CronDtEnd=End fin
CronDtNextLaunch=Next execution
CronDtLastLaunch=Last execution
CronFrequency=Frequancy
CronClass=Classe
CronMethod=Method
CronModule=Module
CronAction=Action
CronStatus=Status
CronStatusActive=Active
CronStatusInactive=Inactive
CronNoJobs=No jobs registered
CronPriority=Priority
CronLabel=Description
CronNbRun=Nb. launch
#
#Page card
#
CronAdd= Add jobs
CronHourStart= Start Hour and date of task
CronEvery= And execute task each
CronObject= Instance/Object to create
CronArgs=Parameters
CronSaveSucess=Save succefully
CronNote=Comment
CronFieldMandatory=Fields %s is mandatory
CronErrEndDateStartDt=End date cannot be before start date
CronStatusActiveBtn=Active
CronStatusInactiveBtn=Inactive
CronTaskInactive=This task is inactive
CronDtLastResult=Last result date
CronId=Id
CronClassFile=Classes (file name)
CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module). <BR> For exemple to fetch method of Dolibarr Product object /htdocs/<u>product</u>/class/product.class.php, the value of module is <i>product</i>
CronClassFileHelp=The file name to load. <BR> For exemple to fetch method of Dolibarr Product object /htdocs/product/class/<u>product.class.php</u>, the value of class file name is <i>product.class.php</i>
CronObjectHelp=The object name to load. <BR> For exemple to fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value of class file name is <i>Product</i>
CronMethodHelp=The object method to launch. <BR> For exemple to fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value of method is is <i>fecth</i>
CronArgsHelp=The method arguments. <BR> For exemple to fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value of paramters can be <i>0, ProductRef</i>
CronCommandHelp=The system command line to execute.
#
# Info
#
CronInfoPage=Information
#
# Common
#
CronType=Task type
CronType_method=Call method of a Dolibarr Class
CronType_command=Shell command
CronMenu=Cron
CronCannotLoadClass=Cannot load class %s or object %s

View File

@ -354,11 +354,12 @@ ExtrafieldPhone=Teléfono
ExtrafieldPrice=Precio
ExtrafieldMail=Correo
ExtrafieldSelect=Lista de selección
ExtrafieldSeparator=
LibraryToBuildPDF=Librería usada para la creación de archivos PDF
WarningUsingFPDF=Atención: Su archivo <b>conf.php</b> contiene la directiva <b>dolibarr_pdf_force_fpdf=1</b>. Esto hace que se use la librería FPDF para generar sus archivos PDF. Esta librería es antigua y no cubre algunas funcionalidades (Unicode, transparencia de imágenes, idiomas cirílicos, árabes o asiáticos, etc.), por lo que puede tener problemas en la generación de los PDF.<br>Para resolverlo, y disponer de un soporte completo de PDF, puede descargar la <a href="http://www.tcpdf.org/" target="_blank">librería TCPDF</a> , y a continuación comentar o eliminar la línea <b>$dolibarr_pdf_force_fpdf=1</b>, y añadir en su lugar <b>$dolibarr_lib_TCPDF_PATH='ruta_a_TCPDF'</b>
LocalTaxDesc=Algunos países aplican 2 o 3 tasas a cada línea de factura. Si es el caso, escoja el tipo de la segunda y tercera tasa y su valor. Los posibles tipos son:<br>1 : tasa local aplicable a productos y servicios sin IVA (IVA no se aplica en la tasa local)<br>2 : tasa local se aplica a productos y servicios antes del IVA (IVA se calcula sobre importe+tasa local)<br>3 : tasa local se aplica a productos sin IVA (IVA no se aplica en la tasa local)<br>4 : tasa local se aplica a productos antes del IVA (IVA se calcula sobre el importe+tasa local)<br>5 : tasa local se aplica a servicios sin IVA (IVA no se aplica a la tasa local)<br>6 : tasa local se aplica a servicios antes del IVA (IVA se calcula sobre importe + tasa local)
SuhosinSessionEncrypt=Almacenamiento de sesiones cifradas por Suhosin
# Modules= =
# Modules
Module0Name=Usuarios y grupos
Module0Desc=Gestión de usuarios y grupos
Module1Name=Terceros
@ -366,7 +367,7 @@ Module1Desc=Gestión de terceros (empresas, particulares) y contactos
Module2Name=Comercial
Module2Desc=Gestión comercial
Module10Name=Contabilidad
Module10Desc=Gestión simple de la contabilidad (desglose de facturas y pagos)
Module10Desc=Activación de informes simples de contabilidad (diarios, ventas) basados en el contenido de la base de datos. Sin desgloses.
Module20Name=Presupuestos
Module20Desc=Gestión de presupuestos/propuestas comerciales
Module22Name=E-Mailings
@ -451,6 +452,8 @@ Module1780Name=Categorías
Module1780Desc=Gestión de categorías (productos, proveedores y clientes)
Module2000Name=Editor WYSIWYG
Module2000Desc=Permite la edición de ciertas zonas de texto mediante un editor avanzado
Module2300Name=Cron
Module2300Desc=Gestor de tareas programadas
Module2400Name=Agenda
Module2400Desc=Gestión de la agenda y de las acciones
Module2500Name=Gestión Electrónica de Documentos
@ -674,6 +677,10 @@ Permission1411=Leer los movimientos contables
Permission1412=Crear/modificar/anular movimientos contables
Permission1415=Leer Balances, informes, diarios, libros maestros
Permission1421=Exportar pedidos de clientes y atributos
Permission23001=Ver las tareas programadas
Permission23002=Crear/Modificar las tareas programadas
Permission23003=Eliminar las tareas programadas
Permission23004=Ejecutar las tareas programadas
Permission2401=Leer acciones (eventos o tareas) vinculadas a su cuenta
Permission2402=Crear/eliminar acciones (eventos o tareas) vinculadas a su cuenta
Permission2403=Modificar acciones (eventos o tareas) vinculadas a su cuenta
@ -947,7 +954,7 @@ TranslationDesc=La elección del idioma mostrado en pantalla se modifica:<br>* A
ClassNotFoundIntoPathWarning=No se ha encontrado la clase %s en su path PHP
YesInSummer=Sí en verano
OnlyFollowingModulesAreOpenedToExternalUsers=Tenga en cuenta que sólo los módulos siguientes están abiertos a usuarios externos (sean cuales sean los permisos de los usuarios):
##### Module password generation= =
##### Module password generation
PasswordGenerationStandard=Devuelve una contraseña generada por el algoritmo interno Dolibarr: 8 caracteres, números y caracteres en minúsculas mezcladas.
PasswordGenerationNone=No ofrece contraseñas. La contraseña se introduce manualmente.
##### Users setup #####
@ -1271,7 +1278,7 @@ FCKeditorForCompany=Creación/edición WYSIWIG de la descripción y notas de los
FCKeditorForProduct=Creación/edición WYSIWIG de la descripción y notas de los productos/servicios
FCKeditorForProductDetails=Creación/edición WYSIWIG de las líneas de detalle de los productos (en pedidos, presupuestos, facturas, etc.)
FCKeditorForMailing=Creación/edición WYSIWIG de los E-Mails (Utilidades->E-Mailings)
FCKeditorForUserSignature=Creación/edición WYSIWIG de los usuario firma
FCKeditorForUserSignature=Creación/edición WYSIWIG de la firma de usuarios
FCKeditorForMail=Creación/edición WYSIWIG de todos los E-Mails (excepto Utilidades->E-Mailings)
##### OSCommerce 1 #####
OSCommerceErrorConnectOkButWrongDatabase=La conexión se ha establecido, pero la base de datos no parece de OSCommerce.
@ -1381,6 +1388,7 @@ MultiCompanySetup=Configuración del módulo Multi-empresa
SuppliersSetup=Configuración del módulo Proveedores
SuppliersCommandModel=Modelo de pedidos a proveedores completo (logo...)
SuppliersInvoiceModel=Modelo de facturas de proveedores completo (logo...)
SuppliersInvoiceNumberingModel=Modelos de numeración de facturas de proveedor
##### GeoIPMaxmind #####
GeoIPMaxmindSetup=Configuración del módulo GeoIP Maxmind
PathToGeoIPMaxmindCountryDataFile=Ruta del archivo Maxmind que contiene las conversiones IP->País.<br>Ejemplo: /usr/local/share/GeoIP/GeoIP.dat

View File

@ -385,6 +385,7 @@ ClosePaidCreditNotesAutomatically=Clasificar automáticamente como "Pagados" los
AllCompletelyPayedInvoiceWillBeClosed=Todas las facturas con un resto a pagar 0 serán automáticamente cerradas al estado "Pagada".
ToMakePayment=Pagar
ToMakePaymentBack=Reembolsar
ListOfYourUnpaidInvoices=Listado de facturas impagadas
##### Types de contacts #####
TypeContact_facture_internal_SALESREPFOLL=Responsable seguimiento factura a cliente
TypeContact_facture_external_BILLING=Contacto cliente facturación

View File

@ -394,6 +394,8 @@ UniqueThirdParties=Total de terceros únicos
InActivity=Activo
ActivityCeased=Cerrado
ActivityStateFilter=Estado de actividad
ProductsIntoElements=Listado de productos en %s
# Monkey
MonkeyNumRefModelDesc=Devuelve un número bajo el formato %syymm-nnnn para los códigos de clientes y %syymm-nnnn para los códigos de los proveedores, donde yy es el año, mm el mes y nnnn un contador secuencial sin ruptura y sin volver a 0.
# Leopard

View File

@ -158,4 +158,10 @@ COMPTA_ACCOUNT_CUSTOMER=Código contable por defecto de clientes (si no está de
COMPTA_ACCOUNT_SUPPLIER=Código contable por defecto de proveedores (si no está definido en la pestaña terceros)
AddRemind=Desglosar importe disponible
RemainToDivide=Resto a repartir :
WarningDepositsNotIncluded=Las facturas de anticipo aún no están incluidas en esta versión en el módulo de contabilidad.
WarningDepositsNotIncluded=Las facturas de anticipo aún no están incluidas en esta versión en el módulo de contabilidad.
DatePaymentTermCantBeLowerThanObjectDate=La fecha límite de pago no puede ser inferior a la fecha del objeto
Pcg_version=Versión del plan
Pcg_type=Tipo de cuenta
Pcg_subtype=Subtipo de cuenta
InvoiceLinesToDispatch=Líneas de facturas a desglosar
InvoiceDispatched=Facturas desglosadas

View File

@ -0,0 +1,92 @@
# Dolibarr language file - es_ES - cron
CHARSET=UTF-8
#
# Admin
#
CronSetup=Página de configuración del módulo - Gestión de tareas planificadas
URLToLaunchCronJobs=URL para lanzar las tareas automáticas
OrToLaunchASpecificJob=O para lanzar una tarea específica
KeyForCronAccess=Código de seguridad para la URL de lanzamiento de tareas automáticas
FileToLaunchCronJobs=Comando para lanzar las tareas automáticas
CronExplainHowToRunUnix=En un entorno Unix puede parametrizar CronTab para ejecutar este comando cada minuto
CronExplainHowToRunWin=En un entorno Microsoft(tm) Windows puede usar el planificador de tareas para lanzar este comando cada minuto
#
# Menu
#
CronListActive=Listado de tareas planificadas activas
CronListInactive= Listado de tareas planificadas inactivas
#
# Page list
#
CronDateLastRun=Último lanzamiento
CronLastOutput=Última salida
CronLastResult=Último código devuelto
CronCommand=Comando
CronList=Listado de tareas planificadas
CronDelete=Eliminar la tarea planificada
CronConfirmDelete=¿Está seguro de querer eliminar esta tarea planificada?
CronExecute=Ejecutar esta tarea
CronConfirmExecute=¿Está seguro de querer ejecutar ahora esta tarea?
CronInfo=Los trabajos permiten ejecutar las tareas a intervalos regulares
CronWaitingJobs=Sus trabajos en espera:
CronTask=Tarea
CronNone=Ninguno
CronDtStart=Fecha inicio
CronDtEnd=Fecha fin
CronDtNextLaunch=Próxima ejecución
CronDtLastLaunch=Última ejecución
CronFrequency=Frecuencia
CronClass=Clase
CronMethod=Método
CronModule=Módulo
CronAction=Acción
CronStatus=Estado
CronStatusActive=Activa
CronStatusInactive=Inactiva
CronEach=Cada
CronNoJobs=Sin trabajos actualmente
CronPriority=Prioridad
CronLabel=Descripción
CronNbRun=Nº ejec.
CronDtLastResult=Fecha del último resultado de la última ejecución
#
#Page card
#
CronAdd=Añadir una tarea
CronHourStart=Dia y hora de inicio de la tarea
CronEvery=Ejecutar cada
CronObject=Instancia/Objeto a crear
CronArgs=Argumento
CronSaveSucess=Registro guardado
CronNote=Nota
CronFieldMandatory=El campo %s es obligatorio
CronErrEndDateStartDt=La fecha de fin no puede ser anterior a la de inicio
CronStatusActiveBtn=Activar
CronStatusInactiveBtn=Desactivar
CronTaskInactive=Esta tarea se encuentra desactivada
CronId=Id
CronClassFile=Clase (archivo)
CronModuleHelp=Nombre del directorio del módulo Dolibarr (funciona automáticamente con los módulos externos Dolibarr). <BR> Por ejemplo para llamar al método fetch del objeto Product de Dolibarr /htdocs/<u>product</u>/class/product.class.php, el valor del módulo es <i>product</i>
CronClassFileHelp=El archivo archivo que contiene el objeto. <BR> Por ejemplo para llamar el método fetch del objeto Product de Dolibarr /htdocs/product/class/<u>product.class.php</u>, el valor de la clase es <i>product.class.php</i>
CronObjectHelp=El nombre del objeto a crear. <BR> Por ejemplo para llamar el método fetch del objeto Product de Dolibarr /htdocs/product/class/product.class.php, el valor del objeto es <i>Product</i>
CronMethodHelp=El método a lanzar. <BR> Por ejemplo para llamar el método fetch del objeto Product de Dolibarr /htdocs/product/class/product.class.php, el valor del método es <i>fecth</i>
CronArgsHelp=Los argumentos del método. <BR> Por ejemplo para usar el método fetch del objeto Product deDolibarr /htdocs/product/class/product.class.php, el valor del parámetro podría ser <i>0, RefProduit</i>
CronCommandHelp=El comando del sistema a ejecutar
#
# Info
#
CronInfoPage=Información
#
# Common
#
CronType=Tipo de acción a ejecutar
CronType_method=Método de una clase de un módulo Dolibarr
CronType_command=Comando Shell
CronMenu=Cron
CronCannotLoadClass=imposible cargar la clase %s o el objeto %s

View File

@ -489,7 +489,7 @@ NbOfThirdParties=Número de terceros
NbOfCustomers=Numero de clientes
NbOfLines=Números de líneas
NbOfObjects=Número de objetos
NbOfReferers=Número de referencias
NbOfReferers=Consumición
Referers=Referencias
TotalQuantity=Cantidad total
DateFromTo=De %s a %s

View File

@ -59,6 +59,7 @@ LinkToTrackYourPackage=Enlace para el seguimento de su paquete
ShipmentCreationIsDoneFromOrder=De momento, la creación de una nueva expedición se realiza desde la ficha de pedido.
RelatedShippings=Expedición(es) asociada(s)
ShipmentLine=Línea de expedición
CarrierList=Listado de transportistas
# Sending methods
SendingMethodCATCH=Recogido por el cliente

View File

@ -678,6 +678,10 @@ Permission1411= Lire les mouvements comptables
Permission1412= Créer/modifier/annuler les mouvements comptables
Permission1415= Lire CA, bilans, résultats, journaux, grands livres
Permission1421= Exporter les commandes clients et attributs
Permission23001 = Voir les taches planifiée
Permission23002 = Créer/Modifier les taches planifiée
Permission23003 = Supprimer les taches planifiée
Permission23004 = Executer les taches planifiée
Permission2401= Lire les actions (événements ou tâches) liées à son compte
Permission2402= Créer/modifier les actions (événements ou tâches) liées à son compte
Permission2403= Supprimer les actions (événements ou tâches) liées à son compte

View File

@ -1,11 +1,93 @@
# Dolibarr language file - fr_FR - cron
CHARSET=UTF-8
CronSetup=Configuration du séquenceur de taches
CronDesc=Cette page permet de configurer certaines options du séquenceur de taches
#
# Admin
#
CronSetup = Page de configuration du module - Gestion de tâches planifiées
URLToLaunchCronJobs=URL pour lancer les taches automatiques
OrToLaunchASpecificJob=Ou pour lancer une tache spécifique
KeyForCronAccess=Clé de sécurité pour l'URL de lancement des taches automatiques
DateLastRun=Dernier lancement
LastOutput=Dernière sortie
LastResult=Dernière code retour
ListOfCronJobs=Liste des taches programmées
Command=Commande
FileToLaunchCronJobs=Commande pour lancer les taches automatiques
CronExplainHowToRunUnix=Sur un environement Unix vous pouvez paramétré CronTab pour executer cette commande toute les minutes
CronExplainHowToRunWin=Sur un environement Microsoft(tm) Windows vous pouvez utilisr le planificateur de tache pour lancer cette commande toute les minutes
#
# Menu
#
CronListActive= Liste des tâches planifiées active
CronListInactive= Liste des tâches planifiées inactive
#
# Page list
#
CronDateLastRun=Dernier lancement
CronLastOutput=Dernière sortie
CronLastResult=Dernier code retour
CronCommand=Commande
CronList= Liste des tâches planifiées
CronDelete= Supprimer la tâche planifiée
CronConfirmDelete= Êtes-vous sûr de vouloir supprimer cette tâche planifiée ?
CronExecute=Exécuter cette tâche
CronConfirmExecute= Êtes-vous sûr de vouloir exécuter cette tâche maintenant?
CronInfo= Les jobs permettent d'exécuter des tâches à intervales réguliers
CronWaitingJobs= Vos jobs en attente:
CronTask= Tâche
CronNone=Aucun(e)
CronDtStart=Date début
CronDtEnd=Date fin
CronDtNextLaunch=Prochaine éxécution
CronDtLastLaunch=Dernière éxécution
CronFrequency=Fréquence
CronClass=Classes
CronMethod=Méthode
CronModule=Module
CronAction=Action
CronStatus=Status
CronStatusActive=Active
CronStatusInactive=Inactive
CronEach=Tou(te)s
CronNoJobs= Aucun jobs actuellement
CronPriority=Priorité
CronLabel=Description
CronNbRun=Nb. exec.
CronDtLastResult=Date du derniétre resulat de la dernière éxécution
#
#Page card
#
CronAdd= Ajoutez une tâche
CronHourStart= Jour et Heure de début de la tâche
CronEvery= Puis execution toutes les
CronObject= Instance/Objet à créer
CronArgs= Argument
CronSaveSucess=Enregistrement effectué
CronNote=Note
CronFieldMandatory=Le champ %s est obligatoire
CronErrEndDateStartDt=La date de fin ne peux être avant la date de début
CronStatusActiveBtn=Activer
CronStatusInactiveBtn=Désactiver
CronTaskInactive=Cette tâche est désactivée
CronId=Id
CronClassFile=Classes (fichier)
CronModuleHelp=Nom du repertoire du module dolibarr (fonctionne automatiquement avec les modules externe Dolibarr). <BR> Par exemple pour appeler la mèthode fetch de l'object Product de Dolibarr /htdocs/<u>product</u>/class/product.class.php, la valeur de module est <i>product</i>
CronClassFileHelp=Le fichier qui contient l'objet . <BR> Par exemple pour appeler la mèthode fetch de l'object Product de Dolibarr /htdocs/product/class/<u>product.class.php</u>, la valeur de classe est <i>product.class.php</i>
CronObjectHelp=Le nom de l'object a crée. <BR> Par exemple pour appeler la mèthode fetch de l'object Product de Dolibarr /htdocs/product/class/product.class.php, la valeur de objet est <i>Product</i>
CronMethodHelp=La mèthode a lancer. <BR> Par exemple pour appeler la mèthode fetch de l'object Product de Dolibarr /htdocs/product/class/product.class.php, la valeur de mèthode est <i>fecth</i>
CronArgsHelp=Les arguments de la mèthode. <BR> For exemple to fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, la valeur de paramétre pourrait être <i>0, RefProduit</i>
CronCommandHelp=La commande système a éxecuter
#
# Info
#
CronInfoPage=Suivie
#
# Common
#
CronType=Type d'action a executer
CronType_method=Méthode d'une classe d'un module Dolibarr
CronType_command=Commande Shell
CronMenu=Cron
CronCannotLoadClass=impossible de charger la classe %s ou l'object %s

View File

@ -1,5 +1,6 @@
<?php
/* Copyright (C) 2007-2010 Laurent Destailleur <eldy@users.sourceforge.net>
/* Copyright (C) 2012 Nicolas Villa aka Boyquotes http://informetic.fr
* Copyright (C) 2013 Florian Henry <forian.henry@open-cocnept.pro
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -16,158 +17,126 @@
*/
/**
* \file cron/cron_run_jobs.php
* \ingroup cron
* \brief This file is the page to call to run jobs
* Initialy built by build_class_from_table on 2013-03-17 18:50
* \file cron/public/cron/cron_run_jobs.php
* \ingroup cron
* \brief Execute pendings jobs
*/
//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1');
//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1');
//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1');
if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Disables token renewal
if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1');
if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1');
if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1');
if (! defined('NOLOGIN')) define('NOLOGIN','1');
//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1');
//if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK','1');
//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1');
//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); // If there is no menu to show
//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); // If we don't need to load the html.form.class.php
//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
//if (! defined("NOLOGIN")) define("NOLOGIN",'1'); // If this page is public (can be called outside logged session)
// Change this following line to use the correct relative path (../, ../../, etc)
$res=0;
if (! $res && file_exists("../main.inc.php")) $res=@include '../main.inc.php';
if (! $res && file_exists("../../main.inc.php")) $res=@include '../../main.inc.php';
if (! $res && file_exists("../../../main.inc.php")) $res=@include '../../../main.inc.php';
if (! $res && file_exists("../../../dolibarr/htdocs/main.inc.php")) $res=@include '../../../dolibarr/htdocs/main.inc.php'; // Used on dev env only
if (! $res && file_exists("../../../../dolibarr/htdocs/main.inc.php")) $res=@include '../../../../dolibarr/htdocs/main.inc.php'; // Used on dev env only
if (! $res && file_exists("../../../../../dolibarr/htdocs/main.inc.php")) $res=@include '../../../../../dolibarr/htdocs/main.inc.php'; // Used on dev env only
if (! $res) die("Include of main fails");
// Change this following line to use the correct relative path from htdocs
include_once(DOL_DOCUMENT_ROOT.'/cron/class/cronjob.class.php');
// C'est un wrapper, donc header vierge
/**
* Header function
*
* @return void
*/
function llxHeaderVierge() {
print '<html><title>Export agenda cal</title><body>';
}
/**
* Footer function
*
* @return void
*/
function llxFooterVierge() {
print '</body></html>';
}
// Load traductions files requiredby by page
$langs->load("companies");
$langs->load("other");
$langs->load("cron@cron");
// Get parameters
$id = GETPOST('id','int');
$action = GETPOST('action','alpha');
// Protection if external user
if ($user->societe_id > 0)
{
//accessforbidden();
// librarie core
// Dolibarr environment
$res = @include("../../main.inc.php"); // From htdocs directory
if (! $res) {
$res = @include("../../../main.inc.php"); // From "custom" directory
}
if (! $res) die("Include of master.inc.php fails");
// Security check
if (empty($conf->cron->enabled)) accessforbidden('',1,1,1);
// librarie jobs
dol_include_once("/cron/class/cronjob.class.php");
// Check also security key
if (empty($_GET["securitykey"]) || $conf->global->CRON_KEY != $_GET["securitykey"])
{
$user->getrights();
llxHeaderVierge();
print '<div class="error">Bad value for key.</div>';
llxFooterVierge();
exit;
global $langs, $conf;
// Check the key, avoid that a stranger starts cron
$key = $_GET['securitykey'];
if (empty($key)) {
echo 'securitykey is require';
exit;
}
/*******************************************************************
* ACTIONS
*
* Put here all code to do according to value of "action" parameter
********************************************************************/
if ($action == 'add')
if($key != $conf->global->MAIN_CRON_KEY)
{
$object=new Cronjobs($db);
$object->prop1=$_POST["field1"];
$object->prop2=$_POST["field2"];
$result=$object->create($user);
if ($result > 0)
{
// Creation OK
}
{
// Creation KO
$mesg=$object->error;
echo 'securitykey is wrong';
exit;
}
// Check the key, avoid that a stranger starts cron
$userlogin = $_GET['userlogin'];
if (empty($userlogin)) {
echo 'userlogin is require';
exit;
}
require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
$user=new User($db);
$result=$user->fetch('',$userlogin);
if ($result<0) {
echo "User Error:".$user->error;
dol_syslog("cron_run_jobs.php:: User Error:".$user->error, LOG_ERR);
exit;
}else {
if (empty($user->id)) {
echo " User user login:".$userlogin." do not exists";
dol_syslog(" User user login:".$userlogin." do not exists", LOG_ERR);
exit;
}
}
$id = $_GET['id'];
// Language Management
$langs->load("admin");
$langs->load("cron@cron");
// create a jobs object
$object = new Cronjob($db);
$filter=array();
if (empty($id)) {
$filter=array();
$filter['t.rowid']=$id;
}
$result = $object->fetch_all('DESC','t.rowid', 0, 0, 1, $filter);
if ($result<0) {
echo "Error:".$cronjob->error;
dol_syslog("cron_run_jobs.php:: fetch Error".$cronjob->error, LOG_ERR);
exit;
}
/***************************************************
* VIEW
*
* Put here all code to build page
****************************************************/
// current date
$now=dol_now();
llxHeader('',$langs->trans('CronList'),'');
if(is_array($object->lines) && (count($object->lines)>0)){
// Loop over job
foreach($object->lines as $line){
$form=new Form($db);
// Put here content of your page
// Example 1 : Adding jquery code
print '<script type="text/javascript" language="javascript">
jQuery(document).ready(function() {
function init_myfunc()
{
jQuery("#myid").removeAttr(\'disabled\');
jQuery("#myid").attr(\'disabled\',\'disabled\');
dol_syslog("cron_run_jobs.php:: fetch cronjobid:".$line->id, LOG_ERR);
//If date_next_jobs is less of current dat, execute the program, and store the execution time of the next execution in database
if ((($line->datenextrun <= $now) && $line->dateend < $now)
|| ((empty($line->datenextrun)) && (empty($line->dateend)))){
dol_syslog("cron_run_jobs.php:: torun line->datenextrun:".dol_print_date($line->datenextrun,'dayhourtext')." line->dateend:".dol_print_date($line->dateend,'dayhourtext')." now:".dol_print_date($now,'dayhourtext'), LOG_ERR);
$cronjob=new Cronjob($db);
$result=$cronjob->fetch($line->id);
if ($result<0) {
echo "Error:".$cronjob->error;
dol_syslog("cron_run_jobs.php:: fetch Error".$cronjob->error, LOG_ERR);
exit;
}
// execute methode
$result=$cronjob->run_jobs($userlogin);
if ($result<0) {
echo "Error:".$cronjob->error;
dol_syslog("cron_run_jobs.php:: run_jobs Error".$cronjob->error, LOG_ERR);
exit;
}
// we re-program the next execution and stores the last execution time for this job
$result=$cronjob->reprogram_jobs($userlogin);
if ($result<0) {
echo "Error:".$cronjob->error;
dol_syslog("cron_run_jobs.php:: reprogram_jobs Error".$cronjob->error, LOG_ERR);
exit;
}
}
}
init_myfunc();
jQuery("#mybutton").click(function() {
init_needroot();
});
});
</script>';
$cronjob=new CronJob($db);
$result=$cronjob->fetch($id);
if ($result > 0)
{
echo "OK";
} else {
echo "No Jobs to run";
}
else
{
$langs->load("errors");
print $langs->trans("ErrorRecordNotFound");
}
// End of page
llxFooter();
$db->close();
?>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

View File

@ -391,7 +391,7 @@ div.tmenu ul li a.tmenusel {/* texte du menu principal sélectionné */
font-weight:bold;
}
.tmenudisabled {color:#d0d0d0 !important;}
.tmenudisabled { color:#808080 !important; cursor: not-allowed; }
/* --- end nav --- */
@ -497,6 +497,8 @@ div.vmenu {
text-align:center;
}
a.help:link, a.help:visited, a.help:hover, a.help:active { font-size:<?php print $fontsizesmaller ?>px; font-family: <?php print $fontlist ?>; text-align: <?php print $left; ?>; font-weight: normal; color: #666666; }
/* ============================================================================== */
/* Panes for Main */

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

View File

@ -0,0 +1,146 @@
#!/usr/bin/php
<?php
/* Copyright (C) 2012 Nicolas Villa aka Boyquotes http://informetic.fr
* Copyright (C) 2013 Florian Henry <forian.henry@open-cocnept.pro
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file cron/script/cron/cron_run_jobs.php
* \ingroup cron
* \brief Execute pendings jobs
*/
if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Disables token renewal
if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1');
if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1');
if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1');
if (! defined('NOLOGIN')) define('NOLOGIN','1');
//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1');
$sapi_type = php_sapi_name();
$script_file = basename(__FILE__);
$path=dirname(__FILE__).'/';
// Test if batch mode
if (substr($sapi_type, 0, 3) == 'cgi') {
echo "Error: You are using PHP for CGI. To execute ".$script_file." from command line, you must use PHP for CLI mode.\n";
exit;
}
if (! isset($argv[1]) || ! $argv[1]) {
print "Usage: ".$script_file." securitykey userlogin cronjobid(optional)\n";
exit;
}
$key=$argv[1];
if (! isset($argv[2]) || ! $argv[2]) {
print "Usage: ".$script_file." securitykey userlogin cronjobid(optional)\n";
exit;
} else {
$userlogin=$argv[2];
}
$res=@include("../../master.inc.php"); // For root directory
if (! $res) $res=@include("../../../master.inc.php"); // For "custom" directory
if (! $res) die("Include of master.inc.php fails");
// librarie jobs
require_once (DOL_DOCUMENT_ROOT_ALT."/cron/class/cronjob.class.php");
//Check security key
if($key != $conf->global->MAIN_CRON_KEY)
{
echo 'securitykey is wrong';
exit;
}
//Check user login
require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
$user=new User($db);
$result=$user->fetch('',$userlogin);
if ($result<0) {
echo "User Error:".$user->error;
dol_syslog("cron_run_jobs.php:: User Error:".$user->error, LOG_ERR);
exit;
}else {
if (empty($user->id)) {
echo " User user login:".$userlogin." do not exists";
dol_syslog(" User user login:".$userlogin." do not exists", LOG_ERR);
exit;
}
}
if (isset($argv[3]) || $argv[3]) {
$id = $argv[3];
}
// librarie jobs
require_once (DOL_DOCUMENT_ROOT_ALT."/cron/class/cronjob.class.php");
// create a jobs object
$object = new Cronjob($db);
$filter=array();
if (empty($id)) {
$filter=array();
$filter['t.rowid']=$id;
}
$result = $object->fetch_all('DESC','t.rowid', 0, 0, 1, $filter);
if ($result<0) {
echo "Error:".$cronjob->error;
dol_syslog("cron_run_jobs.php:: fetch Error".$cronjob->error, LOG_ERR);
exit;
}
// current date
$now=dol_now();
if(is_array($object->lines) && (count($object->lines)>0)){
// Loop over job
foreach($object->lines as $line){
//If date_next_jobs is less of current dat, execute the program, and store the execution time of the next execution in database
if (($line->datenextrun < $now) && $line->dateend < $now){
$cronjob=new Cronjob($db);
$result=$cronjob->fetch($line->id);
if ($result<0) {
echo "Error:".$cronjob->error;
dol_syslog("cron_run_jobs.php:: fetch Error".$cronjob->error, LOG_ERR);
exit;
}
// execute methode
$result=$cronjob->run_jobs($userlogin);
if ($result<0) {
echo "Error:".$cronjob->error;
dol_syslog("cron_run_jobs.php:: run_jobs Error".$cronjob->error, LOG_ERR);
exit;
}
// we re-program the next execution and stores the last execution time for this job
$result=$cronjob->reprogram_jobs($userlogin);
if ($result<0) {
echo "Error:".$cronjob->error;
dol_syslog("cron_run_jobs.php:: reprogram_jobs Error".$cronjob->error, LOG_ERR);
exit;
}
}
}
}