Support UTF8

This commit is contained in:
Laurent Destailleur 2008-11-16 23:43:10 +00:00
parent c7569e6316
commit e6107ea32f
6 changed files with 194 additions and 142 deletions

View File

@ -82,8 +82,9 @@ class FactureStats extends Stats
*/ */
function getNbByYear() function getNbByYear()
{ {
$sql = "SELECT date_format(datef,'%Y') as dm, count(*)"; $sql = "SELECT YEAR(datef) as dm, count(*)";
$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." GROUP BY dm DESC"; $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
$sql.= " GROUP BY dm DESC";
$sql.= " WHERE ".$this->where; $sql.= " WHERE ".$this->where;
return $this->_getNbByYear($sql); return $this->_getNbByYear($sql);
@ -97,9 +98,9 @@ class FactureStats extends Stats
*/ */
function getNbByMonth($year) function getNbByMonth($year)
{ {
$sql = "SELECT date_format(datef,'%m') as dm, count(*)"; $sql = "SELECT MONTH(datef) as dm, count(*)";
$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element; $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
$sql.= " WHERE date_format(datef,'%Y') = ".$year; $sql.= " WHERE YEAR(datef) = ".$year;
$sql.= " AND ".$this->where; $sql.= " AND ".$this->where;
$sql.= " GROUP BY dm DESC"; $sql.= " GROUP BY dm DESC";

View File

@ -70,9 +70,9 @@ $stats = new FactureStats($db, $socid, $mode);
// Build graphic number of object // Build graphic number of object
// $data = array(array('Lib',val1,val2,val3),...)
$data = $stats->getNbByMonthWithPrevYear($endyear,$startyear); $data = $stats->getNbByMonthWithPrevYear($endyear,$startyear);
//var_dump($data); //var_dump($data);
// $data = array(array('Lib',val1,val2,val3),...)
$filenamenb = $dir."/invoicesnbinyear-".$year.".png"; $filenamenb = $dir."/invoicesnbinyear-".$year.".png";
if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesnbinyear-'.$year.'.png'; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesnbinyear-'.$year.'.png';

View File

@ -16,148 +16,145 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Id$
* $Source$
*/ */
/** /**
\file htdocs/includes/boxes/box_services_vendus.php * \file htdocs/includes/boxes/box_services_vendus.php
\ingroup produits,services * \ingroup produits,services
\brief Module de génération de l'affichage de la box services_vendus * \brief Module de génération de l'affichage de la box services_vendus
*/ * \version $Id$
*/
include_once(DOL_DOCUMENT_ROOT."/includes/boxes/modules_boxes.php"); include_once(DOL_DOCUMENT_ROOT."/includes/boxes/modules_boxes.php");
class box_services_vendus extends ModeleBoxes { class box_services_vendus extends ModeleBoxes {
var $boxcode="lastproductsincontract"; var $boxcode="lastproductsincontract";
var $boximg="object_product"; var $boximg="object_product";
var $boxlabel; var $boxlabel;
var $depends = array("produit","service"); var $depends = array("produit","service");
var $db; var $db;
var $param; var $param;
var $info_box_head = array(); var $info_box_head = array();
var $info_box_contents = array(); var $info_box_contents = array();
/** /**
* \brief Constructeur de la classe * \brief Constructeur de la classe
*/ */
function box_services_vendus() function box_services_vendus()
{ {
global $langs; global $langs;
$langs->load("boxes"); $langs->load("boxes");
$this->boxlabel=$langs->trans("BoxLastProductsInContract"); $this->boxlabel=$langs->trans("BoxLastProductsInContract");
} }
/** /**
* \brief Charge les données en mémoire pour affichage ultérieur * \brief Charge les données en mémoire pour affichage ultérieur
* \param $max Nombre maximum d'enregistrements à charger * \param $max Nombre maximum d'enregistrements à charger
*/ */
function loadBox($max=5) function loadBox($max=5)
{ {
global $user, $langs, $db, $conf; global $user, $langs, $db, $conf;
include_once(DOL_DOCUMENT_ROOT."/contrat/contrat.class.php"); include_once(DOL_DOCUMENT_ROOT."/contrat/contrat.class.php");
$contratlignestatic=new ContratLigne($db); $contratlignestatic=new ContratLigne($db);
$this->info_box_head = array('text' => $langs->trans("BoxLastProductsInContract",$max)); $this->info_box_head = array('text' => $langs->trans("BoxLastProductsInContract",$max));
if ($user->rights->produit->lire && $user->rights->contrat->lire) if ($user->rights->produit->lire && $user->rights->contrat->lire)
{ {
$sql = "SELECT s.nom, s.rowid as socid,"; $sql = "SELECT s.nom, s.rowid as socid,";
$sql.= " c.rowid,"; $sql.= " c.rowid,";
$sql.= " cd.rowid as cdid, cd.tms as datem, cd.statut,"; $sql.= " cd.rowid as cdid, cd.tms as datem, cd.statut,";
$sql.= " p.rowid as pid, p.label, p.fk_product_type"; $sql.= " p.rowid as pid, p.label, p.fk_product_type";
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql .= ", sc.fk_soc, sc.fk_user"; if (!$user->rights->societe->client->voir && !$user->societe_id) $sql .= ", sc.fk_soc, sc.fk_user";
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."contrat as c, ".MAIN_DB_PREFIX."contratdet as cd, ".MAIN_DB_PREFIX."product as p"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."contrat as c, ".MAIN_DB_PREFIX."contratdet as cd, ".MAIN_DB_PREFIX."product as p";
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; if (!$user->rights->societe->client->voir && !$user->societe_id) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
if ($conf->categorie->enabled && !$user->rights->categorie->voir) if ($conf->categorie->enabled && !$user->rights->categorie->voir)
{ {
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."categorie_product as cp ON cp.fk_product = p.rowid"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."categorie_product as cp ON cp.fk_product = p.rowid";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."categorie as ca ON cp.fk_categorie = ca.rowid"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."categorie as ca ON cp.fk_categorie = ca.rowid";
} }
$sql.= " WHERE s.rowid = c.fk_soc AND c.rowid = cd.fk_contrat AND cd.fk_product = p.rowid"; $sql.= " WHERE s.rowid = c.fk_soc AND c.rowid = cd.fk_contrat AND cd.fk_product = p.rowid";
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; if (!$user->rights->societe->client->voir && !$user->societe_id) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
if ($conf->categorie->enabled && !$user->rights->categorie->voir) if ($conf->categorie->enabled && !$user->rights->categorie->voir)
{ {
$sql.= ' AND IFNULL(ca.visible,1)=1'; $sql.= ' AND IFNULL(ca.visible,1)=1';
} }
if($user->societe_id) if($user->societe_id)
{ {
$sql.= " AND s.rowid = ".$user->societe_id; $sql.= " AND s.rowid = ".$user->societe_id;
} }
$sql.= " ORDER BY c.tms DESC "; $sql.= " ORDER BY c.tms DESC ";
$sql.= $db->plimit($max, 0); $sql.= $db->plimit($max, 0);
$result = $db->query($sql);
if ($result)
{
$num = $db->num_rows($result);
$i = 0;
while ($i < $num)
{
$objp = $db->fetch_object($result);
// Multilangs
if ($conf->global->MAIN_MULTILANGS) // si l'option est active
{
$sqld = "SELECT label FROM ".MAIN_DB_PREFIX."product_det";
$sqld.= " WHERE fk_product=".$objp->pid." AND lang='". $langs->getDefaultLang() ."'";
$sqld.= " LIMIT 1";
$resultd = $db->query($sqld); $result = $db->query($sql);
if ($resultd) if ($result)
{ {
$objtp = $db->fetch_object($resultd); $num = $db->num_rows($result);
if ($objtp->label != '') $objp->label = $objtp->label;
} $i = 0;
}
while ($i < $num)
$this->info_box_contents[$i][0] = array('align' => 'left', {
$objp = $db->fetch_object($result);
// Multilangs
if ($conf->global->MAIN_MULTILANGS) // si l'option est active
{
$sqld = "SELECT label FROM ".MAIN_DB_PREFIX."product_det";
$sqld.= " WHERE fk_product=".$objp->pid." AND lang='". $langs->getDefaultLang() ."'";
$sqld.= " LIMIT 1";
$resultd = $db->query($sqld);
if ($resultd)
{
$objtp = $db->fetch_object($resultd);
if ($objtp->label != '') $objp->label = $objtp->label;
}
}
$this->info_box_contents[$i][0] = array('align' => 'left',
'logo' => ($objp->fk_product_type==1?'object_service':'object_product'), 'logo' => ($objp->fk_product_type==1?'object_service':'object_product'),
'text' => $objp->label, 'text' => $objp->label,
'maxlength' => 16, 'maxlength' => 16,
'url' => DOL_URL_ROOT."/contrat/fiche.php?id=".$objp->rowid); 'url' => DOL_URL_ROOT."/contrat/fiche.php?id=".$objp->rowid);
$this->info_box_contents[$i][1] = array('align' => 'left', $this->info_box_contents[$i][1] = array('align' => 'left',
'text' => $objp->nom, 'text' => $objp->nom,
'maxlength' => 40, 'maxlength' => 40,
'url' => DOL_URL_ROOT."/comm/fiche.php?socid=".$objp->socid); 'url' => DOL_URL_ROOT."/comm/fiche.php?socid=".$objp->socid);
$this->info_box_contents[$i][2] = array('align' => 'right', $this->info_box_contents[$i][2] = array('align' => 'right',
'text' => dolibarr_print_date($objp->datem,'day')); 'text' => dolibarr_print_date($objp->datem,'day'));
$this->info_box_contents[$i][3] = array('align' => 'right', $this->info_box_contents[$i][3] = array('align' => 'right',
'text' => $contratlignestatic->LibStatut($objp->statut,3), 'text' => $contratlignestatic->LibStatut($objp->statut,3),
'width' => 18 'width' => 18
); );
$i++; $i++;
} }
} }
else { else {
dolibarr_print_error($db); dolibarr_print_error($db);
} }
} }
else { else {
$this->info_box_contents[0][0] = array('align' => 'left', $this->info_box_contents[0][0] = array('align' => 'left',
'text' => $langs->trans("ReadPermissionNotAllowed")); 'text' => $langs->trans("ReadPermissionNotAllowed"));
} }
}
function showBox() }
{
parent::showBox($this->info_box_head, $this->info_box_contents); function showBox()
} {
parent::showBox($this->info_box_head, $this->info_box_contents);
}
} }

View File

@ -209,17 +209,12 @@ class ModeleBoxes
$maxlength=$this->MAXLENGTHBOX; $maxlength=$this->MAXLENGTHBOX;
if (isset($contents[$i][$j]['maxlength'])) $maxlength=$contents[$i][$j]['maxlength']; if (isset($contents[$i][$j]['maxlength'])) $maxlength=$contents[$i][$j]['maxlength'];
if ($maxlength && strlen($textewithnotags) > $maxlength) if ($maxlength) $textewithnotags=dolibarr_trunc($textewithnotags,$maxlength);
{ print $textewithnotags;
$texte=substr($texte,0,$maxlength)."...";
} //print $texte;
if ($maxlength && strlen($texte2withnotags) > $maxlength)
{
$texte2=substr($texte2,0,$maxlength)."...";
}
print $texte;
if (isset($contents[$i][$j]['url'])) print '</a>'; if (isset($contents[$i][$j]['url'])) print '</a>';
print $texte2; print $texte2withnotags;
print "</td>"; print "</td>";
} }

View File

@ -844,6 +844,60 @@ function dol_print_phone_link($phone,$option=0)
return $link; return $link;
} }
/**
* Make a strlen call. Works even in mbstring module not enabled
*
* @param unknown_type $string
* @param unknown_type $stringencoding
* @return unknown
*/
function dol_strlen($string,$stringencoding='')
{
global $langs;
if (empty($stringencoding)) $stringencoding=$langs->charset_output;
$ret='';
if (function_exists('mb_strlen'))
{
$ret=mb_strlen($string,$stringencoding);
}
else
{
$ret=strlen($string);
}
return $ret;
}
/**
* Make a substring. Works even in mbstring module not enabled
*
* @param unknown_type $string
* @param unknown_type $start
* @param unknown_type $length
* @param unknown_type $stringencoding
* @return unknown
*/
function dol_substr($string,$start,$length,$stringencoding='')
{
global $langs;
if (empty($stringencoding)) $stringencoding=$langs->charset_output;
$ret='';
if (function_exists('mb_substr'))
{
$ret=mb_substr($string,$start,$length,$stringencoding);
}
else
{
$ret=substr($string,$start,$length);
}
return $ret;
}
/** /**
* \brief Truncate a string to a particular length adding '...' if string larger than length * \brief Truncate a string to a particular length adding '...' if string larger than length
* \param string String to truncate * \param string String to truncate
@ -852,7 +906,7 @@ function dol_print_phone_link($phone,$option=0)
* \return string Truncated string * \return string Truncated string
* \remarks USE_SHORT_TITLE=0 can disable all truncings * \remarks USE_SHORT_TITLE=0 can disable all truncings
*/ */
function dolibarr_trunc($string,$size=40,$trunc='right') function dolibarr_trunc($string,$size=40,$trunc='right',$stringencoding='')
{ {
global $conf; global $conf;
@ -862,29 +916,26 @@ function dolibarr_trunc($string,$size=40,$trunc='right')
// We go always here // We go always here
if ($trunc == 'right') if ($trunc == 'right')
{ {
//mb_internal_encoding("UTF-8"); if (dol_strlen($string,$stringencoding) > $size)
//print $conf->character_set_client.'-'.mb_strlen($string).'-'.strlen($string); return dol_substr($string,0,$size,$stringencoding).'...';
//print 'ee'.$string.$size.mb_strcut($string,0,$size,'UTF-8').'rr';
if (strlen($string) > $size)
return substr($string,0,$size).'...';
else else
return $string; return $string;
} }
if ($trunc == 'middle') if ($trunc == 'middle')
{ {
if (strlen($string) > 2 && strlen($string) > $size) if (dol_strlen($string,$stringencoding) > 2 && dol_strlen($string,$stringencoding) > $size)
{ {
$size1=round($size/2); $size1=round($size/2);
$size2=round($size/2); $size2=round($size/2);
return substr($string,0,$size1).'...'.substr($string,strlen($string) - $size2,$size2); return dol_substr($string,0,$size1,$stringencoding).'...'.dol_substr($string,dol_strlen($string,$stringencoding) - $size2,$size2,$stringencoding);
} }
else else
return $string; return $string;
} }
if ($trunc == 'left') if ($trunc == 'left')
{ {
if (strlen($string) > $size) if (dol_strlen($string,$stringencoding) > $size)
return '...'.substr($string,strlen($string) - $size,$size); return '...'.dol_substr($string,dol_strlen($string,$stringencoding) - $size,$size,$stringencoding);
else else
return $string; return $string;
} }
@ -896,12 +947,12 @@ function dolibarr_trunc($string,$size=40,$trunc='right')
} }
/** /**
\brief Compl<EFBFBD>te une chaine a une taille donn<EFBFBD>e par des espaces * \brief Complete une chaine a une taille donnee par des espaces
\param string Chaine a compl<EFBFBD>ter * \param string Chaine a completer
\param size Longueur de la chaine. * \param size Longueur de la chaine.
\param side 0=Compl<EFBFBD>tion a droite, 1=Compl<EFBFBD>tion a gauche * \param side 0=Completion a droite, 1=Completion a gauche
\param char Chaine de compl<EFBFBD>tion * \param char Chaine de completion
\return string Chaine compl<EFBFBD>t<EFBFBD>e * \return string Chaine complete
*/ */
function dolibarr_pad($string,$size,$side,$char=' ') function dolibarr_pad($string,$size,$side,$char=' ')
{ {
@ -917,10 +968,10 @@ function dolibarr_pad($string,$size,$side,$char=' ')
} }
/** /**
\brief Affiche picto propre a une notion/module (fonction g<EFBFBD>n<EFBFBD>rique) * \brief Affiche picto propre a une notion/module (fonction g<EFBFBD>n<EFBFBD>rique)
\param alt Texte sur le alt de l'image * \param alt Texte sur le alt de l'image
\param object Objet pour lequel il faut afficher le logo (exemple: user, group, action, bill, contract, propal, product, ...) * \param object Objet pour lequel il faut afficher le logo (exemple: user, group, action, bill, contract, propal, product, ...)
\return string Retourne tag img * \return string Retourne tag img
*/ */
function img_object($alt, $object) function img_object($alt, $object)
{ {

View File

@ -191,7 +191,11 @@ class Stats
} }
$this->db->free($resql); $this->db->free($resql);
} }
else
{
dolibarr_print_error($this->db);
}
for ($i = 1 ; $i < 13 ; $i++) for ($i = 1 ; $i < 13 ; $i++)
{ {
$res[$i] = $result[$i] + 0; $res[$i] = $result[$i] + 0;
@ -201,7 +205,9 @@ class Stats
for ($i = 1 ; $i < 13 ; $i++) for ($i = 1 ; $i < 13 ; $i++)
{ {
$data[$i-1] = array(ucfirst(substr(dolibarr_print_date(dolibarr_mktime(12,0,0,$i,1,$year),"%b"),0,3)), $res[$i]); $month=dolibarr_print_date(dolibarr_mktime(12,0,0,$i,1,$year),"%b");
$month=dol_substr($month,0,3);
$data[$i-1] = array(ucfirst($month), $res[$i]);
} }
return $data; return $data;
@ -241,14 +247,16 @@ class Stats
for ($i = 1 ; $i < 13 ; $i++) for ($i = 1 ; $i < 13 ; $i++)
{ {
$data[$i-1] = array(ucfirst(substr(dolibarr_print_date(dolibarr_mktime(12,0,0,$i,1,$year),"%b"),0,3)), $res[$i]); $month=dolibarr_print_date(dolibarr_mktime(12,0,0,$i,1,$year),"%b");
$month=dol_substr($month,0,3);
$data[$i-1] = array(ucfirst($month), $res[$i]);
} }
return $data; return $data;
} }
/** /**
* * \brief Renvoie le montant moyen par mois pour une annee donnee
* *
*/ */
function _getAverageByMonth($year, $sql) function _getAverageByMonth($year, $sql)